De acordo com os docs ansible, um Playbook é:
... a base para um gerenciamento de configuração realmente simples e sistema de implantação de várias máquinas, diferente de qualquer um que já existe, e que é muito adequado para implantar aplicativos complexos.
E, novamente, de acordo com esses mesmos documentos, as funções são:
... maneiras de carregar automaticamente certos vars_files, tarefas e manipuladores com base em uma estrutura de arquivo conhecida. O agrupamento de conteúdo por funções também permite o fácil compartilhamento de funções com outros usuários.
No entanto, a distinção entre esses e seus diferentes casos de uso não é imediatamente óbvia para mim. Por exemplo, se eu configurar meu /etc/ansible/hosts
arquivo para se parecer com:
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
... então o que é esta [databases]
entrada " " ... uma função ? Ou o nome de um arquivo YAML de playbook em algum lugar? Ou alguma outra coisa?!?
Se alguém pudesse me explicar as diferenças entre eles, minha compreensão de Ansible seria muito aprimorada!
- Manual vs Papel vs
[databases]
e entradas semelhantes em/etc/ansible/hosts
- Se Playbooks são definidos dentro de arquivos YAML, então onde as funções são definidas?
- Além de
ansible.cfg
morar no servidor Ansible, como faço para adicionar / configurar o Ansible com Playbooks / funções disponíveis? Por exemplo, quando corroansible-playbook someplaybook.yaml
, como Ansible sabe onde encontrar aquele manual?
fonte
tasks
Fazer coisas.playbooks
organizar e lançar tarefas.roles
organizar um monte de tarefas, manipuladores, etc. que executam uma função específica. Algunsplaybook
são necessários para lançar orole
(s). O que você chamaria de coleção deroles
eplaybooks
? Digamos, por exemplo, um que gerencia a configuração de todos os hosts em seu site?Respostas:
[databases]
é um único nome para um grupo de hosts. Ele permite que você faça referência a vários hosts por um único nome.Função é um conjunto de tarefas e arquivos adicionais para configurar o host para servir a uma determinada função .
Playbook é um mapeamento entre hosts e funções.
O exemplo da documentação descreve o projeto de exemplo. Ele contém duas coisas:
site.yml
,webservers.yml
,fooservers.yml
São playbooks.roles/common/
eroles/webservers/
contêm definiçõescommon
ewebservers
funções de acordo.Dentro do manual (
webservers.yml
) você tem algo como:Eles são definidos dentro de
roles/*
diretórios. As funções são definidas principalmente usando arquivos YAML, mas também podem conter recursos de qualquer tipo (files/
,templates/
). De acordo com a documentação, a definição da função é estruturada desta forma:O arquivo mais importante é
roles/x/tasks/main.yml
, aqui você define as tarefas, que serão executadas, quando a função for executada.Procurará um manual dentro do diretório atual.
Irá procurar um manual dentro do
somedir/somedir/
diretório.É sua responsabilidade colocar seu projeto com todos os manuais e funções no servidor. Ansible não tem nada a ver com isso.
fonte
webservers.yml
manual mapeia os[webservers]
hosts para a funçãocommon
ewebservers
. Mas o que exatamente está incluído nacommon
função? Não há como definir isso em diretórios, então existem arquivos YAML típicos dentro desses "diretórios de funções"? Obrigado novamente!As funções são uma forma de agrupar tarefas em um contêiner. Você pode ter uma função para configurar o MySQL, outra para configurar o Postfix etc.
Um manual define o que está acontecendo e onde . Este é o lugar onde você define os hosts (grupos de hosts, veja abaixo) e as funções que serão aplicadas a esses hosts.
[databases]
e as outras entradas em seu inventário são grupos de hosts. Os grupos de hosts definem um conjunto de hosts nos quais uma peça será executada.Uma peça é um conjunto de tarefas ou papéis (ou ambos) dentro de um manual. Na maioria dos casos (e exemplos), um manual conterá apenas uma única jogada. Mas você pode ter quantos quiser. Isso significa que você pode ter um manual que executará a função
postfix
no grupo de hostsmail_servers
e a funçãomysql
no grupo de hostsdatabases
:Em Ansible, quase tudo é definido em YAML, o que conta para papéis e manuais.
AFAIK, você deve fornecer o caminho para o manual ao invocar
ansible-playbook
. Portantoansible-playbook someplaybook.yaml
, esperariasomeplaybook.yaml
estar em seu diretório atual. Mas você pode fornecer o caminho completo:ansible-playbook /path/to/someplaybook.yaml
fonte
É uma questão terminológica / semântica. Pode ser subjetivo, embora haja uma definição básica.
Minha visão é a seguinte:
Qualquer sistema de gerenciamento / implantação de configuração tem:
source data
- dados usados para criar a configuração do host de destinotarget data
- dados usados para identificar hosts de destinoconfig changes
- lista / conjunto de regras / ações que aplicamos comsource data
o host de destino com base emtarget data
Em termos Ansible:
source data
- são os vários lugares onde podemos colocar dados -group_vars
,playbook
vars,role
vars, etc., Esses lugares afetam a precedência (se uma variável com o mesmo nome for redefinida em locais diferentes, existem regras muito específicas de qual seria o valor do variável duranteansible
/ansible-playbook
execuçãotarget data
- é o inventário (e também é possível definir as variáveis de inventário / hostgroup dentro do inventário!)config changes
- ansible tem 4 níveis de abstração para ele:role
/task
s / s (e tarefas especiais comohandlers
)Do ponto de vista de 'software' - a função deve ser genérica o suficiente para ser reutilizada .
Também em algumas organizações (bastante grandes), as 'funções' são enviadas pelo grupo A, embora sejam usadas em manuais mantidos pelo grupo B.
resumo
Todos os itens acima permitem o agrupamento de configurações semelhantes - em a
role
. agrupando subsistemas / componentes relacionados em umplaybook
. Além disso, vale a pena mencionar, 1 artigo YAML em um playbook (incluindohosts:
e um outasks
,pre_tasks
,post_tasks
,roles
) é chamado deplay
Agora, para sua pergunta:
Sim, é confuso no início.
Você normalmente conecta seu
source data
à semântica da sua função, então quando você vê que a funçãosetup_db
é aplicada em uma peça no grupo de host relacionado (por exemplodb_hosts
), mas umplay
pode estar executando uma união de vários grupos de host. É apenas uma questão de convenção versus flexibilidade.PS
Por favor, escreva-me de volta se isso adicionou à confusão ou esclareceu. Obrigado.
fonte
Além disso, tenha em mente que um manual pode chamar mais de uma função se um metarquivo for usado com o objetivo de afetar as diferentes funções.
Exemplo de manual: dual_role-playbook.yml
A pasta de papéis e o esquema de arquivos serão semelhantes a este:
fonte
Basta colocar:
Um playbook é como o programa principal, contém instruções completas para concluir o trabalho. No entanto, para grandes projetos, não é desejável realmente incluir todos os detalhes. Então você precisa de um papel.
Uma função é uma sub-rotina e geralmente atinge um objetivo, por exemplo, configurar um servidor de banco de dados. Você pode colocá-lo no
roles/
diretório ou baixar funções de terceiros, fornecendo URIsrolesfile.yml
e pedir ao ansible-galaxy para baixá-los para você.O
[database]
é um grupo de hosts definido no arquivo de inventário que lista os hosts que pertencem aodatabase
grupo. Você também pode especificar um grupo de servidores da web, especificando algo comoGrupo
web
oudatabase
pode então ser usado em manuais ou funções para especificar os hosts a serem aplicados.Os grupos também podem ser usados em comandos
ansible
para executar comandos ad-hoc.fonte