O Ansible Galaxy é simplesmente a maneira mais fácil de encontrar funções do Ansible já escritas, criar e compartilhar suas funções e entrar na galáxia do conteúdo do Ansible!
====================Anúncio em horário nobre! ====================
FOSDEM PGDay 2016 será em 29 de janeiro antes do FOSDEM, que é o maior evento de código aberto da Europa, e PostgreSQL Devroom será em 31 de janeiro no FOSDEM em Bruxelas.
em>Se você estiver interessado em gerenciamento de configuração, orquestração de servidores, implantação automatizada (é por isso que você está lendo esta postagem no blog, certo?) e gosta de trabalhar com PostgreSQL (com certeza) na AWS (opcionalmente), então você pode querer participar da minha palestra “Managing PostgreSQL with Ansible” em 29 de janeiro, 12:30-13:20.
Por favor, verifique a programação incrível de ambos os eventos! Espero vê-lo em Bruxelas esta semana!
====================Anúncio em horário nobre! ====================
Olá, Ansible Galaxy!
Ansible tem uma comunidade poderosa que os torna ainda mais poderosos. Os desenvolvedores que contribuem para o Ansible ficam felizes em contribuir e os usuários que usam o Ansible para seus próprios sistemas ficam felizes em usá-lo.
O conteúdo do Ansible ao qual eles se referem em sua página da Web são basicamente funções do Ansible. Vamos continuar com as funções nesta postagem do blog e tentar entender o que significa função do Ansible e quais são as diferenças entre funções, manuais e tarefas.
O que é uma função Ansible?
Você absolutamente deveria estar usando funções. Os papéis são ótimos. Use papéis. Funções! Dissemos isso o suficiente? Os papéis são ótimos.
Antes de falar sobre papéis, vamos lembrar a definição de tarefa e cartilha na terminologia Ansible.
Tarefa
As tarefas são responsáveis por chamar um módulo com um conjunto específico de parâmetros.
Você pode ler minha postagem anterior no blog para aprender sobre os módulos do Ansible e verificar os módulos do Ansible Postgres com exemplos.
Cada tarefa do Ansible contém um nome, um módulo a ser chamado, parâmetros do módulo e, opcionalmente, pré/pós-condições. Eles nos permitem chamar módulos Ansible e passar informações para tarefas consecutivas.
A tarefa abaixo invoca o módulo de arquivo fornecendo 4 parâmetros.
- name: Ensure the data folder has right ownership
file: path="/var/lib/postgresql" state=directory owner=postgres group=postgres
Ele garante que 3 condições sejam verdadeiras:
- /var/lib/postgresql existe como um diretório
- o proprietário de /var/lib/postgresql é “postgres”
- grupo de /var/lib/postgresql é “postgres”
Se não existir, o Ansible cria o diretório e atribui proprietário e grupo. Se apenas o proprietário for diferente, o Ansible o torna “postgres”.
Manual
Os playbooks contêm jogadas e as jogadas contêm tarefas. As tarefas chamam módulos e podem (opcionalmente) manipuladores de gatilho (executar uma vez, executar no final) .
Agora podemos conferir um exemplo de playbook muito simples abaixo:
- name: Ensure all virtual machines are ready
hosts: 127.0.0.1
connection: local
vars_files: # load default variables from YAML files below
- 'defaults/postgresql.yml'
- 'defaults/aws.yml'
tasks:
- include: 'tasks/provision.yml' # load infrastructure setup tasks
- name: Ensure all required PostgreSQL dependencies ready
hosts: postgresql-all # manage all PostgreSQL servers
sudo: yes
sudo_user: root
vars_files:
- 'defaults/postgresql.yml'
- 'defaults/aws.yml'
tasks:
- include: 'tasks/postgresql.yml' # load PostgreSQL setup tasks
Neste manual temos duas peças:
O primeiro jogo garante que todas as máquinas virtuais estejam prontas e operem no localhost. Ele carrega variáveis padrão de arquivos YAML chamados postgresql.yml e aws.yml. Você pode pensar nesses arquivos como arquivos de configuração para funções e playbooks do PostgreSQL e AWS (no nosso exemplo), pois você pode ver que ambas as execuções usam esses arquivos para variáveis padrão. Esta peça chama a tarefa provision.yml que contém tarefas de configuração de infraestrutura.
A segunda reprodução garante todas as dependências necessárias do PostgreSQL prontas e opera em servidores postgres que são definidos no arquivo de inventário. Esta peça chama a tarefa postgresql.yml que contém as tarefas de configuração do PostgreSQL.
Se você gostaria de ver o manual completo, você pode conferir meu repositório e contribuir para torná-lo melhor.
Para entender melhor o conceito de manual, você pode ver exemplos de manuais sugeridos nos documentos do Ansible.
Vamos voltar a falar sobre papéis. Em Ansible;
- Manuais organizar tarefas
- Funções organizar manuais
Imagine que temos muitos recursos independentes para gerenciar (por exemplo, servidores web, servidores PostgreSQL, log, monitoramento, AWS). Colocar tudo em um único manual pode resultar em uma solução insustentável.
Para reduzir essa complexidade, as funções nos ajudam com:
Dividir tarefas em manuais muito menores
Isso nos permite focar nos recursos, de forma independente. Isso torna mais simples de manter e depurar. Também será muito mais fácil entender a estrutura.
Reutilizando configurações, arquivos, modelos, tarefas
Dessa forma, podemos compartilhar facilmente esses componentes entre os playbooks, sem reescrever repetidamente.
Como lidar com as dependências do manual
Quando executamos uma função, podemos ter certeza de que todas as pré-condições são satisfeitas para essa função.
Aqui você pode ver um gráfico de dependência e a estrutura de diretório de função correspondente:
Funções do PostgreSQL no Ansible Galaxy
Enquanto eu escrevia esta postagem no blog, havia 146 funções que se transformavam como uma saída do postgresql e postgres pesquisa de filtro.
Pessoalmente, sugiro verificar algumas dessas funções e usá-las em suas arquiteturas se forem boas o suficiente e atenderem às suas necessidades; se não forem, inscreva-se no Ansible Galaxy e crie suas próprias funções.
Feliz hacking!
Para obter mais informações sobre o Ansible:
- Confira os documentos bem escritos.
- Assista ao vídeo de início rápido do Ansible, que é um tutorial muito útil.
- Siga a programação de webinars, há alguns webinars interessantes na lista.