Como usar fatos personalizados Ansible

Como usar fatos personalizados Ansible
Fatos são como variáveis ​​em Ansible. Ansible gera muitos fatos, dependendo do host que automatiza. Se precisar, você também pode definir fatos/variáveis ​​personalizados em Ansible.

Você pode definir três tipos de fatos personalizados em Ansible.

1) Fatos globais: Esses fatos são acessíveis de todos os hosts do 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 host.
3) Fatos do host: Esses fatos são acessíveis apenas de um determinado host.

Neste artigo, vou mostrar como trabalhar com fatos personalizados 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 Ansible Automation.

Existem muitos artigos sobre Linuxhint dedicados à instalação do Ansible e configurando hosts para Ansible Automation. Você pode conferi -los se necessário.

Configurando um diretório de projeto:

Antes de começarmos, vamos criar um diretório de projeto para que possamos organizar nossos arquivos de projeto.

Para criar um diretório de projeto Factos personalizados/ na tua LAR Diretório, execute o seguinte comando:

$ mkdir -pv Custom -Facts/Playbooks, Host_vars, Group_vars

Agora, navegue para o Factos personalizados/ diretório da seguinte maneira:

$ CD Custom-Facts/

Crie um arquivo de configuração Ansible Ansible.cfg No seu diretório de projeto da seguinte maneira:

$ Nano Ansible.cfg

Digite as seguintes linhas sua Ansible.cfg arquivo.

[Padrões]
inventário = hosts
host_key_checking = false

Depois de terminar, pressione + X seguido pela Y e Para salvar o Ansible.cfg arquivo de configuração.

Agora, crie um arquivo de inventário Ansible anfitriões No seu diretório de projeto da seguinte maneira:

$ nano hosts

Digite as seguintes linhas em seu Anfitrião arquivo de inventário.

VM1.NodeKite.com
VM2.NodeKite.com
[rede]
VM3.NodeKite.com
vm4.NodeKite.com
[base de dados]
VM [5: 6].NodeKite.com

Depois de terminar, pressione + X seguido pela Y e Para salvar o anfitriões arquivo de inventário.

Para listar todos os hosts disponíveis em seu arquivo de inventário, execute o seguinte comando:

$ Ansible All-Lista-HOSTS

Como você pode ver, eu tenho seis hosts no meu arquivo de inventário.

Para listar os hosts disponíveis no rede Grupo do seu arquivo de inventário, execute o seguinte comando:

$ Ansible web-lista-hosts

Como você pode ver, eu 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 do seu arquivo de inventário, execute o seguinte comando:

$ Ansible Bathabase-Lista-HOSTS

Como você pode ver, eu tenho dois hosts (vm5.NodeKite.com e vm6.NodeKite.com) no base de dados Grupo do meu arquivo de inventário.

Trabalhando com fatos globais Ansible:

Nesta seção, vou mostrar como definir fatos/variáveis ​​globais 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 ​​globais em um arquivo separado.

Primeiro, abra o Anfitrião Arquivo de inventário com o seguinte comando:

$ nano hosts

Agora, adicione as linhas marcadas em seu Anfitrião arquivo de inventário. Depois de terminar, pressione + X seguido pela Y e Para salvar o arquivo.

'

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 Playbooks/ diretório da seguinte maneira:

$ nano Playbooks/print_global_fff.Yaml

Em seguida, digite as seguintes linhas no Print_global_fact.Yaml arquivo.

- Hosts: todos
Usuário: Ansible
tarefas:
- Nome: Imprima o valor do fato global 'web_url'
depurar:
msg: 'url web: web_url'

O objetivo deste manual é imprimir o web_url fato global.

Depois de terminar, pressione + X seguido pela Y e Para salvar o Print_global_fact.Yaml arquivo.

Agora, execute o Print_global_fact.Yaml Manual da seguinte maneira:

$ Ansible-Playbook Playbooks/print_global_fft.Yaml

Como você pode ver, todos os hosts do 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 isso.

Primeiro, vamos remover os fatos globais do Anfitrião arquivo de inventário.

$ nano hosts

Agora, remova as linhas marcadas do arquivo de inventário e pressione + X, seguido pela Y e Para salvar o arquivo de inventário.

Em seguida, crie um novo arquivo todos no group_vars/ diretório da seguinte maneira:

$ 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.com

Depois de terminar, pressione + X seguido pela Y e Para salvar o group_vars/all arquivo.

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_fft.Yaml

Como você pode ver, todos os hosts do meu arquivo de inventário podem acessar o fato global web_url.

Trabalhando com fatos de grupo Ansible:

Nesta seção, vou mostrar como definir fatos/variáveis ​​de grupo Ansible em seu arquivo de inventário e acessá -las a partir de seus manuais Ansible. Também mostrarei como definir fatos/variáveis ​​em grupo em um arquivo separado.

Primeiro, abra o Anfitrião Arquivo de inventário com o seguinte comando:

$ nano hosts

Se você tem um grupo anfitrião grupo 1, Em seguida, você adiciona fatos/variáveis ​​em grupo para esse grupo host em um Grupo1: VARS Seção do seu arquivo de inventário.

[grupo 1]
..
[Grupo1: VARs]
variável1 = valor1
variável2 = value2

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.

Depois de terminar, pressione + X seguido pela Y e Para salvar o arquivo de inventário.

Para imprimir e testar se podemos acessar os fatos do grupo, crie um novo manual print_group_facts.Yaml no Playbooks/ diretório da seguinte maneira:

$ nano Playbooks/print_group_facts.Yaml

Digite as seguintes linhas em seu print_group_facts.Yaml arquivo.

- Hosts: Web
Usuário: Ansible
tarefas:
- Nome: Fatos do grupo de impressão
depurar:
msg: 'Nome do domínio: domain_name back -end do banco de dados: database_backend' '

Depois de terminar, pressione + X seguido pela Y e Para salvar o print_group_facts.Yaml arquivo.

Agora, execute o print_group_facts.Yaml Manual da seguinte maneira:

$ Ansible-Playbook Playbooks/print_group_facts.Yaml

Como você pode ver, os anfitriões 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 ​​em grupo em um arquivo separado.

Primeiro, abra o Anfitrião Arquivo de inventário da seguinte forma:

$ nano fatos

Remova as linhas marcadas do Anfitrião arquivo de inventário. Depois de terminar, pressione + X seguido pela Y e Para salvar o anfitriões arquivo de inventário.

Como estamos adicionando variáveis ​​de grupo para o rede Grupo de host, crie um novo arquivo rede (o mesmo que o nome do grupo) no group_vars/ diretório da seguinte maneira:

$ nano group_vars/web

Para adicionar os fatos do grupo nome do domínio e Database_backend para o rede grupo anfitrião, adicione as seguintes linhas no group_vars/web arquivo.

domain_name: web.Linuxhint.com
Database_backend: PGSQL

Depois de terminar, pressione + X seguido pela Y e Para salvar o group_vars/web arquivo.

Para verificar se os hosts no rede Grupo pode acessar os fatos do grupo, executar o print_group_facts.Yaml Manual da seguinte maneira:

$ Ansible-Playbook Playbooks/print_group_facts.Yaml

Como você pode ver, os anfitriões no rede Grupo pode acessar o nome do domínio e Database_backend Fatos/variáveis ​​do grupo.

Trabalhando com fatos anfitriões Ansible:

Nesta seção, vou mostrar como definir fatos/variáveis ​​do Ansible Host em seu arquivo de inventário e acessá -los a partir de seus manuais Ansible. Também mostrarei como definir fatos/variáveis ​​do host em um arquivo separado.

Primeiro, abra o Anfitrião Arquivo de inventário com o seguinte comando:

$ nano hosts

Você pode adicionar fatos/variáveis ​​do host após o nome do DNS ou o endereço IP do host em seu arquivo de inventário da seguinte forma:

www.domain1.com variável1 = value1 variável2 = value2
192.168.22.2 variável1 = valor3 variável2 = valor4

Por exemplo, você pode adicionar fatos/variáveis ​​host nome do domínio e Database_backend para os anfitriões VM3.NodeKite.com e vm4.NodeKite.com, conforme marcado na captura de tela abaixo.

Observe que o valor do nome do domínio e Database_backend Fatos/variáveis ​​são diferentes para cada host.

Depois de terminar de adicionar os fatos/variáveis ​​do host, pressione + X, seguido pela Y e Para salvar o Anfitrião arquivo de inventário.

Como adicionei os mesmos fatos/variáveis ​​que nos fatos/variáveis ​​do grupo, podemos usar o print_group_facts.Yaml Playbook para testar a acessibilidade desses fatos/variáveis ​​também.

Execute o print_group_facts.Yaml Manual da seguinte maneira:

$ Ansible-Playbook Playbooks/print_group_facts.Yaml

Como você pode ver, os fatos/variáveis ​​do host são acessíveis ao seu host especificado. Os valores são diferentes para cada host também.

Como cada um dos hosts está em uma linha separada no meu arquivo de inventário, eu poderia facilmente adicionar fatos/variáveis ​​do host no meu arquivo de inventário. Mas, se você usar intervalos para definir hosts em seu arquivo de inventário, como marcado na captura de tela abaixo, não poderá adicionar fatos/variáveis ​​do host como esse.

Você pode adicionar fatos/variáveis ​​host em um arquivo separado, assim como você fez para os fatos/variáveis ​​globais e de grupo.

Para adicionar fatos/variáveis ​​do host para o vm5.NodeKite.com host, crie um novo arquivo vm5.NodeKite.com (o mesmo que o nome DNS do host) no host_vars/ diretório da seguinte maneira:

$ nano host_vars/vm5.NodeKite.com

Você pode adicionar os fatos/variáveis ​​do host db_port e db_name para o host vm5.NodeKite.com com as seguintes linhas.

DB_PORT: 3306
DB_NAME: Demo1

Depois de terminar, pressione + X seguido pela Y e Para salvar o vm5.NodeKite.com arquivo.

Da mesma maneira, para adicionar fatos/variáveis ​​do host para o host vm6.NodeKite.com, Crie um novo arquivo vm6.NodeKite.com no host_vars/ diretório da seguinte maneira:

$ nano host_vars/vm6.NodeKite.com

Você pode adicionar os fatos/variáveis ​​do host db_port e db_name para o host vm6.NodeKite.com com as seguintes linhas.

DB_PORT: 8877
db_name: App1

Depois de terminar, pressione + X seguido pela Y e Para salvar o vm6.NodeKite.com arquivo.

Para imprimir e testar se podemos acessar os fatos/variáveis ​​do host, crie um novo manual print_host_facts.Yaml no Playbooks/ diretório da seguinte maneira:

$ nano Playbooks/print_host_facts.Yaml

Agora, digite as seguintes linhas no print_host_facts.Yaml arquivo.

- Hosts: banco de dados
Usuário: Ansible
tarefas:
- Nome: Imprimir fatos do host
depurar:
msg: 'Nome do banco de dados: db_name porta do banco de dados: db_port' '

Depois de terminar, pressione + X seguido pela Y e Para salvar o print_host_facts.Yaml arquivo.

Para verificar se o host vm5.NodeKite.com e vm6.NodeKite.com pode acessar os fatos/variáveis ​​do host, executar o print_host_facts.Yaml Manual da seguinte maneira:

$ 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 ​​anfitriões.

Juntando tudo: fatos ansiáveis ​​precedência

Nesta seção, vou falar sobre a precedência Ansible Fact/Variable. Então vamos começar.

Antes de começarmos, vamos limpar o arquivo de inventário.

Abra o Anfitrião Arquivo de inventário com o seguinte comando:

$ nano hosts

Remova a seção marcada do arquivo de inventário.

É assim que seu arquivo de inventário deve olhar para este ponto.

Agora, adicione a linha marcada em seu arquivo de inventário. Essas 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 fatos/variáveis ​​do hospedeiro para o VM3.NodeKite.com e vm4.NodeKite.com hosts, conforme marcado na captura de tela abaixo.

Depois de terminar, pressione + X seguido pela Y e Para salvar o arquivo de inventário.

Para imprimir o valor dos fatos/variáveis ​​globais, de grupo e host fact_precendence.Yaml no Playbooks/ diretório da seguinte maneira:

$ nano Playbooks/fact_precedence.Yaml

Digite as seguintes linhas no fact_precedence.Yaml arquivo.

- Hosts: todos
Usuário: Ansible
tarefas:
- Nome: Imprima todos os fatos
depurar:
msg: 'fato escopo: fact_scope porta: porta' '

Depois de terminar, pressione + X seguido pela Y e Para salvar o fact_precedence.Yaml arquivo.

Para imprimir os fatos/variáveis ​​globais, em grupo e hospedeiros, execute o fact_precedence.Yaml Manual da seguinte maneira:

$ Ansible-Playbook Playbooks/fact_precedence.Yaml

Como você pode ver, os fatos/variáveis ​​globais, em grupo e hospedeiros 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 o grupo e os fatos/variáveis ​​globais (2).

A precedência de fato/variável de Ansible é a seguinte:

Fato do host> Fato do grupo> Fato global

Conclusão:

Depois de ler este artigo, você poderá trabalhar confortavelmente com fatos/variáveis ​​globais, em grupo e hospedeiros Ansible. Lembre -se da precedência de fato personalizada de Ansible. Isso o ajudará a depurar seus manuais Ansible mais facilmente.