Ansible é uma ferramenta de gerenciamento de configuração amplamente utilizada, escrita em linguagem Python, que ajuda a configurar uma ou várias máquinas ao mesmo tempo. Ansible pode ser usado para executar as tarefas abaixo
- Configuração do zero de um ou vários nós
- Desdobramentos
- Mudanças de configuração
- Patch
- Gerenciamento de serviços
- e muitos mais
Ansible é amplamente usado por causa de sua simplicidade. O código ansible é escrito também em linguagem YAML, ele não precisa de um agente para ser instalado em uma máquina remota. O Ansible usa a porta 22 (SSH) para se conectar a uma máquina remota e fazer as alterações necessárias.
Any machine, que pode se conectar à máquina remota na porta 22, pode se tornar um nó de controle. Um nó de controle é onde você pode instalar o Ansible e um nó gerenciado está sendo gerenciado por nós de controle.
Vamos dar uma olhada na instalação do Ansible no nó controlador.
Instalar Ansible no CentOS 7:
Como o Python é o único pré-requisito para instalar o Ansible, vamos instalar o Python executando o comando abaixo.
$sudo yum install python3 -y
Para instalar o Ansible no CentOS 7, primeiro certifique-se de que o repositório CentOS 7 EPEL está instalado. Execute o comando abaixo para instalar o repositório epel.
$sudo yum install epel-release
Atualizar o índice de pacotes do sistema executando o comando update abaixo.
$sudo yum update -y
Após o repositório estar instalado, instale o Ansible com o gerenciador de pacotes yum. Execute o comando abaixo mencionado para instalar o Ansible.
$sudo yum install ansible -y
Verifica se o Ansible está instalado corretamente e sua versão.
$ansible -v
Instalar o Ansible no CentOS 8:
Vejamos os passos de instalação do CentOS 8. Vamos instalar python no CentOS 8.
$sudo dnf install python3
Once, python está instalado, vamos instalar o EPEL repo executando o comando abaixo.
$sudo dnf install epel-release -y
Atualizar o índice de pacotes do sistema executando o comando de atualização abaixo.
$sudo dnf update -y
Estamos agora prontos para instalar o Ansible. Execute o comando abaixo para instalar o Ansible.
$sudo dnf install ansible -y
Verifique se o Ansible está instalado corretamente e sua versão.
$ansible -v
Instalar o Ansible no Ubuntu:
Python é um pacote padrão hoje em dia na maioria das distribuições Linux. Se você não tiver o python instalado, execute o comando abaixo para instalar o pacote python.
$sudo apt-get install python3
Para instalar o Ansible no Ubuntu, vamos primeiro instalar o repositório executando o comando abaixo.
$sudo apt-add-repository ppa:ansible/ansible
Atualizar o índice de pacotes do sistema executando o comando update abaixo.
$sudo apt-get update -y
Agora, instale o Ansible.
$sudo apt-get install -y ansible
Verifica se o Ansible está instalado corretamente e sua versão.
$ansible -v
Instalar o Ansible com o Python PIP no CentOS, Debian e Ubuntu:
Independentemente do sistema operacional que você estiver usando, você pode instalar o Ansible com o instalador de pacotes python. Vamos executar o comando abaixo para instalar o python3-pip.
Para CentOS 7 e abaixo:
$sudo yum install python3 python3-pip -y
Para CentOS 8:
$sudo dnf install python3 python3-pip -y
Para Ubuntu e Debian:
$sudo apt-get install python3 python3-pip
Como temos o python e o pip instalados, vamos executar o comando abaixo em qualquer sistema operacional para instalar o Ansible.
$sudo pip3 install ansible
Verifica se o Ansible está instalado correctamente e a sua versão.
$ansible -v
Configurar hosts de controladores possíveis:
Precisamos configurar o arquivo “hosts” primeiro antes de podermos começar a nos comunicar com nossos outros nós. Este arquivo terá todos os IPs ou hostnames dos nós gerenciados.
Note: Nem sempre é necessário usar um arquivo de hosts para conectar aos nós gerenciados. Mas então toda vez, precisamos usar o IP ou nome da máquina do servidor do nó gerenciado enquanto executamos cada comando.
Criar o arquivo (se ainda não estiver lá) com privilégios de root executando o comando abaixo:
$sudo touch /etc/ansible/hosts
Antes de escrever no arquivo, vamos dar uma olhada e entender o arquivo de exemplo de máquina:
alias ansible_ssh_host=your_node_server_ip
Um arquivo de máquina deve seguir a sintaxe acima. Vamos dar uma olhada em cada parâmetro.
: Este parâmetro irá criar um grupo. Todos os endereços IP do nó gerenciado ou nomes de hosts sob o parâmetro group_name (nome_do_grupo) irão cair no mesmo grupo. Por exemplo, se tivermos vários servidores web em nossa infra-estrutura, podemos adicionar todos os endereços IP ou os nomes de host do nó gerenciado aqui.
alias: Este parâmetro é usado para dar ao servidor do nó gerenciado um alias para identificar o servidor do nó gerenciado. Por exemplo, se temos vários servidores web na nossa infra-estrutura, podemos dar host1, host2, host3 como um alias. A principal vantagem de dar um alias é quando vamos executar o comando Ansible para alterar a configuração de um único servidor, podemos usar um alias para identificar e executar a tarefa necessária no servidor.
ansible_ssh_host=seu_nó_servidor_ip: Este parâmetro irá apontar o alias para um endereço IP ou nome da máquina de um nó gerenciado.
Estaremos usando o CentOS 8 como um nó controlado com Ansible. Como mencionado acima, o Ansible usa 22 portas do host remoto para se conectar.
Assumiremos que os endereços IP do nosso servidor de nó gerenciado CentOS são 192.168.0.2, 192.168.0.3 e 192.168.0.4.
Para permitir que o nó controlador Ansible se comunique com os nós gerenciados, devemos confirmar que os nós gerenciados estão acessíveis na porta 22 que é uma porta SSH. Execute o comando abaixo para confirmar a conectividade um a um em todos os três nós gerenciados a partir do controlador.
$ssh [email protected]
$ssh [email protected]
$ssh [email protected]
Será solicitada a senha do usuário root de todos os nós. O Ansible funciona muito bem se você tiver a autenticação sem senha configurada entre o controlador Ansible e os nós gerenciados. Com parâmetros diferentes no comando Ansible, a autenticação de senha também pode funcionar.
Como temos configurado a conectividade ssh entre o controlador Ansible e os nós gerenciados, vamos configurar o arquivo hosts para conectar a todos os nós gerenciados. Como mencionado anteriormente, podemos adicionar vários aliases de servidor de nós em um único grupo. Neste caso, vamos adicionar os três nós e atribuir um alias como host1, host2 e host3, respectivamente. Nosso arquivo hosts deve ser parecido com o abaixo, após adicionar todos os detalhes do nó gerenciado. Execute o comando abaixo para editar o arquivo hosts que nós criamos antes.
Abra o arquivo com privilégios de root executando o comando abaixo:
$sudo vi /etc/ansible/hosts
Adicionemos a configuração mencionada abaixo no arquivo hosts.
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4
Aqui, adicionamos todos os IPs e apelidos de nós gerenciados em um grupo chamado node_servers.
Tentemos agora conectar aos nós gerenciados do controlador Ansible.
$ansible -m ping node_servers
O comando acima está usando um ping de módulo para conectar ao grupo “node_servers” que nós definimos no arquivo hosts acima.
Pode encontrar erros por diferentes razões.
- Possível irá, por defeito, tentar ligar-se ao nó gerido usando o seu nome de utilizador actual, caso não o tenha fornecido. Se esse usuário não existir no servidor do nó, você receberá o erro abaixo.
- Se a porta 22 ssh não estiver aberta para conexão nos nós gerenciados. (Como mencionado anteriormente, Ansible connects on ssh port)
- If the IP in the hosts file is not correct.
If any of the above conditions fail, you will find the below error.
host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host2 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host3 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
Vamos dizer especificamente ao Ansible que ele deve se conectar aos nós gerenciados no grupo “node_servers” com o usuário james. Crie o diretório group_vars como mencionado abaixo.
$sudo mkdir /etc/ansible/group_vars
Os arquivos neste diretório são usados especificamente para configurar variáveis que podemos usar em nossos playbooks Ansible.
Vamos criar um ficheiro de variáveis para a nossa configuração executando abaixo o comando:
$sudo vim /etc/ansible/group_vars/node_servers.yml
Adicionar o código abaixo ao ficheiro:
---
ansible_ssh_user: james
O ficheiro YML começa sempre com “—” na primeira linha. Vamos salvar e fechar este arquivo quando você terminar. Agora o Ansible irá sempre usar o usuário james para o grupo node_servers, independentemente do usuário atual que você está usando para executar um comando.
Verifica a conexão do nó gerenciado:
Agora temos nossos hosts configurados e detalhes de configuração suficientes para nos permitir conectar com sucesso aos nossos nós gerenciados, podemos experimentar o mesmo comando que executamos antes.
$ansible -m ping servers
Ansible retornará a saída assim:
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCESSO => {“changed”: false, “ping”: “pong”}
Este é um teste básico para garantir que o Ansible tem uma conexão com os seus nós administrados.
Conclusão:
Não é necessário usar o sistema operacional CentOS para nós gerenciados. Você pode usar a mesma configuração de teste que usamos acima para CentOS, RedHat, Ubuntu, e qualquer outra distribuição Linux.