IBM Cloud Docs
Criando funções do Ansible e Galaxy

Criando funções do Ansible e Galaxy

Uma função Ansible pode ser usada para separar um playbook significativo Ansible em partes reutilizáveis chamadas funções. Uma função define um conjunto de tarefas que você deseja executar em seus hosts de destino. Para executar essas tarefas em seus hosts, deve-se referenciar a função em seu playbook do Ansible.

Ansible Galaxy é um repositório para funções do Ansible que estão disponíveis para serem transferidas diretamente para seus Playbooks para otimizar seus projetos de automação. Um novo administrador de sistemas pode começar a automatizar com o Ansible em questão de poucas horas.

É possível criar as suas próprias funções ou usar funções existentes do Ansible Galaxy.

Criando as suas próprias funções no Ansible

Para aperfeiçoar o seu playbook do Ansible, é possível decidir separar as tarefas do playbook criando funções e referenciá-las em seu playbook. Use-o para carregar automaticamente variáveis, arquivos, tarefas, manipuladores e outros artefatos Ansible relacionados com base em uma estrutura de arquivos conhecida.

  1. Identifique as tarefas em seu playbook que você deseja reutilizar em vários hosts. Por exemplo, é possível agrupar tarefas que deseja executar em todos os seus hosts, bem como tarefas que deseja executar em seus servidores da web e em seus bancos de dados. Cada grupo de tarefas pode se tornar a sua própria função.

  2. Crie a estrutura de função do Ansible em seu repositório do GitHub. As funções devem ser armazenadas em um diretório roles relativo ao seu playbook do Ansible. O diretório de funções pode ter um subdiretório, como /roles/db/, que descreve as tarefas no arquivo main.yml.

    ├── roles
        └── db
            └── tasks
                └── main.yml
    ├── playbook.yaml
    ├── README.md
    
  3. Inclua as tarefas que você deseja executar em um arquivo main.yml. No exemplo a seguir, você separa a tarefa para fazer download do repositório da comunidade do MySQL por meio do seu playbook principal e a coloca em um arquivo main.yml.

    - name: Download MySQL Community Repo
        get_url:
        url: https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
        dest: /tmp
    
  4. Faça referência à função em seu playbook do Ansible.

     - name: deploy MySQL and configure the databases
       hosts: all
       remote_user: root
    
       roles:
         - db
       tasks:
         - shell: "hostname"
    

Para obter mais informações sobre outros arquivos e condições que você pode adicionar à sua função, consulte a documentação Ansible.

Instalando funções do Ansible Galaxy

Você pode optar por usar funções existentes do Ansible Galaxy em seu playbook. O Ansible Galaxy oferece unidades predefinidas de trabalho da comunidade do Ansible que são disponibilizadas como funções e coleções.

  1. Navegue no repositório Ansible Galaxy para encontrar as funções que você deseja.

  2. Crie um arquivo requirements.yml onde você especifica todas as funções de que precisa. Para obter uma visão geral de como fazer referência às funções Ansible Galaxy, consulte a documentação Ansible. No exemplo a seguir, você deseja usar a função andrewrothstein.kubectl do Ansible Galaxy.

    ---
    roles:
      - name: andrewrothstein.kubectl
    
  3. Inclua uma pasta roles em seu repositório do GitHub que é relativo ao playbook e armazene o arquivo requirements.yml nesta pasta como mostrado neste exemplo.

        ├── roles
            └── requirements.yml
        ├── playbook.yaml
        ├── README.md
    
  4. Faça referência à função em seu playbook do Ansible. Neste exemplo, a função com o nome andrewrothstein.kubectl é usada.

    - hosts: all
      roles:
        - role: andrewrothstein.kubectl
    

Para obter mais informações sobre exemplos de playbook Ansible, consulte o playbook Ansible fornecido pela IBM®