Você pode definir três tipos de fatos personalizados no Ansible.
1) Fatos globais: Esses fatos são acessíveis a partir de cada host em seu arquivo de inventário.
2) Fatos do grupo: Esses fatos são acessíveis apenas a partir de um conjunto específico de hosts ou um grupo de hosts.
3) Hospedar fatos: Esses fatos são acessíveis apenas a partir de um determinado host.
Neste artigo, vou mostrar como trabalhar com fatos personalizados do Ansible. Então vamos começar.
Pré-requisitos:
Se você quiser experimentar os exemplos deste artigo,
1) Você deve ter o Ansible instalado em seu computador.
2) Você deve ter pelo menos 6 hosts Linux configurados para automação Ansible.
Existem muitos artigos sobre LinuxHint dedicados à instalação do Ansible e configuração de hosts para automação do Ansible. Você pode verificá-los se necessário.
Configurando um diretório de projeto:
Antes de começar, vamos criar um diretório de projeto para que possamos organizar nossos arquivos de projeto.
Para criar um diretório de projeto fatos personalizados / na tua CASA diretório, execute o seguinte comando:
$ mkdir -pv custom-fatos / playbooks, host_vars, group_vars
Agora, navegue até o fatos personalizados / diretório da seguinte forma:
$ cd fatos personalizados /
Crie um arquivo de configuração Ansible ansible.cfg no diretório do seu projeto da seguinte maneira:
$ nano ansible.cfg
Digite nas seguintes linhas o seu ansible.cfg Arquivo.
[padrões]inventário = hosts
host_key_checking = False
Assim que terminar, pressione
Agora, crie um arquivo de inventário Ansible hospedeiros no diretório do seu projeto da seguinte maneira:
hosts $ nano
Digite as seguintes linhas em seu hospedeiro arquivo de inventário.
vm1.nodekite.comvm2.nodekite.com
[rede]
vm3.nodekite.com
vm4.nodekite.com
[base de dados]
vm [5: 6].nodekite.com
Assim que terminar, pressione
Para listar todos os hosts disponíveis em seu arquivo de inventário, execute o seguinte comando:
$ ansible all --list-hostsComo você pode ver, tenho seis hosts em meu arquivo de inventário.
Para listar os hosts disponíveis no rede grupo de seu arquivo de inventário, execute o seguinte comando:
$ ansible web --list-hostsComo você pode ver, tenho dois hosts (vm3.nodekite.com e vm4.nodekite.com) no rede grupo do meu arquivo de inventário.
Para listar os hosts disponíveis no base de dados grupo de seu arquivo de inventário, execute o seguinte comando:
Banco de dados $ ansible --list-hostsComo você pode ver, tenho dois hosts (vm5.nodekite.com e vm6.nodekite.com) no base de dados grupo do meu arquivo de inventário.
Trabalhando com os fatos globais da Ansible:
Nesta seção, vou mostrar como definir fatos / variáveis globais do Ansible em seu arquivo de inventário e acessá-los a partir de seus manuais do Ansible. Também mostrarei como definir fatos / variáveis globais em um arquivo separado.
Primeiro, abra o hospedeiro arquivo de inventário com o seguinte comando:
hosts $ nano
Agora, adicione as linhas marcadas em seu hospedeiro arquivo de inventário. Assim que terminar, pressione
'
Você adiciona fatos globais no todos: vars seção. Aqui, eu adicionei o web_url fato global.
Agora, crie um novo manual print_global_fact.yaml no manuais / diretório da seguinte forma:
$ nano playbooks / print_global_fact.yaml
Em seguida, digite as seguintes linhas no print_global_fact.yaml Arquivo.
- hosts: todosusuário: ansible
tarefas:
- nome: imprime o valor do fato global 'web_url'
depurar:
msg: 'URL da web: web_url'
O objetivo deste manual é imprimir o web_url fato global.
Assim que terminar, pressione
Agora, execute o print_global_fact.yaml manual da seguinte forma:
$ ansible-playbook playbooks / print_global_fact.yaml
Como você pode ver, todos os hosts em meu arquivo de inventário podem acessar o fato global web_url.
Você também pode adicionar fatos globais em um arquivo separado. Dessa forma, você pode manter o arquivo de inventário limpo. Vamos ver como fazer.
Primeiro, vamos remover os fatos globais do hospedeiro arquivo de inventário.
hosts $ nano
Agora, remova as linhas marcadas do arquivo de inventário e pressione
Em seguida, crie um novo arquivo tudo no group_vars / diretório da seguinte forma:
$ nano group_vars / all
Para adicionar o fato global web_url, digite a seguinte linha no group_vars / all Arquivo.
web_url: https: // www.linuxhint.comAssim que terminar, pressione
Para verificar se você pode acessar o fato global web_url, execute o print_global_fact.yaml manual novamente da seguinte maneira:
$ ansible-playbook playbooks / print_global_fact.yaml
Como você pode ver, todos os hosts em meu arquivo de inventário podem acessar o fato global web_url.
Trabalhando com os fatos do Ansible Group:
Nesta seção, vou mostrar como definir fatos / variáveis do grupo Ansible em seu arquivo de inventário e acessá-los a partir de seus manuais de Ansible. Também mostrarei como definir fatos / variáveis de grupo em um arquivo separado.
Primeiro, abra o hospedeiro arquivo de inventário com o seguinte comando:
hosts $ nano
Se você tem um grupo de host grupo 1, então você adiciona fatos / variáveis de grupo para esse grupo de host em um group1: vars seção do seu arquivo de inventário.
[grupo 1]…
[grupo1: vars]
variável1 = valor1
variável2 = valor2
Por exemplo, para adicionar os fatos / variáveis do grupo nome do domínio e database_backends para o rede grupo de host, você pode digitar as linhas marcadas em seu arquivo de inventário.
Assim que terminar, pressione
Para imprimir e testar se podemos acessar os fatos do grupo, crie um novo manual print_group_facts.yaml no manuais / diretório da seguinte forma:
$ nano playbooks / print_group_facts.yaml
Digite as seguintes linhas em seu print_group_facts.yaml Arquivo.
- hosts: webusuário: ansible
tarefas:
- nome: Imprimir fatos do grupo
depurar:
msg: 'Nome do domínio: domain_name Backend do banco de dados: database_backend'
Assim que terminar, pressione
Agora, execute o print_group_facts.yaml manual da seguinte forma:
$ ansible-playbook playbooks / print_group_facts.yaml
Como você pode ver, os hosts no rede grupo pode acessar o nome do domínio e database_backend fatos / variáveis do grupo.
Agora, vamos limpar o arquivo de inventário e ver como adicionar fatos / variáveis de grupo em um arquivo separado.
Primeiro, abra o hospedeiro arquivo de inventário da seguinte forma:
fatos $ nano
Remova as linhas marcadas do hospedeiro arquivo de inventário. Assim que terminar, pressione
Como estamos adicionando variáveis de grupo para o rede grupo de host, crie um novo arquivo rede (igual ao nome do grupo) no group_vars / diretório da seguinte forma:
$ nano group_vars / web
Para adicionar os fatos do grupo nome do domínio e database_backend para o rede grupo de host, adicione as seguintes linhas no group_vars / web Arquivo.
domain_name: web.linuxhint.comdatabase_backend: pgsql
Assim que terminar, pressione
Para verificar se os hosts no rede grupo pode acessar os fatos do grupo, execute o print_group_facts.yaml manual da seguinte forma:
$ ansible-playbook playbooks / print_group_facts.yaml
Como você pode ver, os hosts no rede grupo pode acessar o nome do domínio e database_backend fatos / variáveis do grupo.
Trabalhando com os fatos do Ansible Host:
Nesta seção, vou mostrar a você como definir fatos / variáveis do host Ansible em seu arquivo de inventário e acessá-los a partir de seus manuais de Ansible. Também mostrarei como definir fatos / variáveis de host em um arquivo separado.
Primeiro, abra o hospedeiro arquivo de inventário com o seguinte comando:
hosts $ nano
Você pode adicionar fatos / variáveis de host após o nome DNS ou endereço IP do host em seu arquivo de inventário da seguinte maneira:
www.dominio1.com variável1 = valor1 variável2 = valor2192.168.22.2 variável1 = valor3 variável2 = valor4
Por exemplo, você pode adicionar fatos / variáveis de host nome do domínio e database_backend para os anfitriões vm3.nodekite.com e vm4.nodekite.com, como marcado na imagem abaixo.
Observe que o valor do nome do domínio e database_backend fatos / variáveis são diferentes para cada host.
Quando terminar de adicionar os fatos / variáveis do host, pressione
Como eu adicionei os mesmos fatos / variáveis como no exemplo de fatos / variáveis de grupo, podemos usar o print_group_facts.yaml manual para testar a acessibilidade desses fatos / variáveis também.
Execute o print_group_facts.yaml manual da seguinte forma:
$ ansible-playbook playbooks / print_group_facts.yaml
Como você pode ver, os fatos / variáveis do host são acessíveis para seu host especificado. Os valores também são diferentes para cada host.
Como cada um dos hosts está em uma linha separada em meu arquivo de inventário, eu poderia facilmente adicionar fatos / variáveis de host em meu arquivo de inventário. Mas, se você usar intervalos para definir hosts em seu arquivo de inventário, conforme marcado na imagem abaixo, você não pode adicionar fatos / variáveis de host como esse.
Você pode adicionar fatos / variáveis do host em um arquivo separado, assim como fez para os fatos / variáveis globais e de grupo.
Para adicionar fatos / variáveis de host para o vm5.nodekite.com host, crie um novo arquivo vm5.nodekite.com (igual ao nome DNS do host) no host_vars / diretório da seguinte forma:
$ nano host_vars / vm5.nodekite.com
Você pode adicionar os fatos / variáveis do host db_port e db_name para o hospedeiro vm5.nodekite.com com as seguintes linhas.
db_port: 3306db_name: demo1
Assim que terminar, pressione
Da mesma forma, para adicionar fatos / variáveis de host para o host vm6.nodekite.com, criar um novo arquivo vm6.nodekite.com no host_vars / diretório da seguinte forma:
$ nano host_vars / vm6.nodekite.com
Você pode adicionar os fatos / variáveis do host db_port e db_name para o hospedeiro vm6.nodekite.com com as seguintes linhas.
db_port: 8877db_name: app1
Assim que terminar, pressione
Para imprimir e testar se podemos acessar os fatos / variáveis do host, crie um novo manual print_host_facts.yaml no manuais / diretório da seguinte forma:
$ nano playbooks / print_host_facts.yaml
Agora, digite as seguintes linhas no print_host_facts.yaml Arquivo.
- hosts: banco de dadosusuário: ansible
tarefas:
- nome: Imprimir fatos do host
depurar:
msg: 'Nome do banco de dados: db_name Porta do banco de dados: db_port'
Assim que terminar, pressione
Para verificar se o host vm5.nodekite.com e vm6.nodekite.com pode acessar os fatos / variáveis do host, execute o print_host_facts.yaml manual da seguinte forma:
$ ansible-playbook playbooks / print_host_facts.yaml
Como você pode ver, os anfitriões vm5.nodekite.com e vm6.nodekite.com pode acessar o db_name e db_port fatos / variáveis do host.
Juntando tudo: Ansible Facts Precedence
Nesta seção, vou falar sobre precedência de fato / variável Ansible. Então vamos começar.
Antes de começarmos, vamos limpar o arquivo de inventário.
Abra o hospedeiro arquivo de inventário com o seguinte comando:
hosts $ nano
Remova a seção marcada do arquivo de inventário.
É assim que seu arquivo de inventário deve parecer neste ponto.
Agora, adicione a linha marcada em seu arquivo de inventário. Estas linhas adicionam os fatos / variáveis globais fact_scope e porta.
Em seguida, adicione as linhas marcadas em seu arquivo de inventário. Essas linhas adicionam o fact_scope e porta fatos / variáveis para os hosts no base de dados grupo.
Finalmente, adicione o fact_scope e porta hospedar fatos / variáveis para o vm3.nodekite.com e vm4.nodekite.com hosts, conforme marcado na imagem abaixo.
Assim que terminar, pressione
Para imprimir o valor dos fatos / variáveis globais, do grupo e do host, crie um novo manual fact_precendence.yaml no manuais / diretório da seguinte forma:
$ nano playbooks / fact_precedence.yaml
Digite as seguintes linhas no fact_precedence.yaml Arquivo.
- hosts: todosusuário: ansible
tarefas:
- nome: Imprimir todos os fatos
depurar:
msg: 'Escopo do fato: fact_scope Porta: porta'
Assim que terminar, pressione
Para imprimir os fatos / variáveis globais, de grupo e de host, execute o fact_precedence.yaml manual da seguinte forma:
$ ansible-playbook playbooks / fact_precedence.yaml
Como você pode ver, os fatos / variáveis globais, de grupo e de host são impressos.
Observe que os fatos / variáveis do grupo substituíram os fatos / variáveis globais (1). Além disso, observe que os fatos / variáveis do host substituíram tanto o grupo quanto os fatos / variáveis globais (2).
A precedência de fato / variável de Ansible é a seguinte:
Fato do host> Fato do grupo> Fato globalConclusão:
Depois de ler este artigo, você deve ser capaz de trabalhar confortavelmente com o Ansible global, o grupo e os fatos / variáveis do host. Lembre-se da precedência de fatos personalizados do Ansible. Isso o ajudará a depurar seus manuais do Ansible mais facilmente.