Utilizando pipx no lugar do pip
Introdução O pipx funciona parecido com o pip, porém ele já cria ambientes isolados automaticamente (venvs). Instalação …
Estou usando esta publicação como revisão do conhecimento adquirido e de forma introdutória, para quem quiser aprender a usar o Ansible. 😁👍
👉 Utilize a seção Índice para navegar diretamente ao ponto que desejas estudar.
👉 Ao revisar este curso, acredito que o nível técnico nessário para entendê-lo é para profissionais já iniciados em computação! Leigos não entenderão quando estiver escrito para declarar variáveis, por exemplo.
👉 A parte prática só funcionará se você ler e interpretar o que está escrito. Caso sinta dificuldade ou esteja em dúvida, me manda um comentário que deixarei mais claro nesta aula e te respondo também.
👉 Todos os arquivos usados (caso não queira digitar ou copiar) estarão disponíveis aqui .
👉 A documentação tem praticamente tudo que você precisa e tudo que não estará aqui, também.
🤷 Qual a vantagem de aprender aqui? 👉 Farei da maneira mais didática possível, seguindo uma ordem e em pt-BR. O que eu não colocar aqui, já deixarei um link apontando o que você deve estudar na documentação.
Segundo o próprio site da documentação (e em tradução livre):
Sim! O Ansible funciona de forma centralizada e automatiza as tarefas de administração!
São características do Ansible:
Com serviços e produtos. Alguns exemplos:
O Ansible é de código aberto e sob a licença GPL3. Em outras palavras, é software livre… ou seja, você pode modificá-lo a vontade, não há coleta de seus dados para nenhum fim e nunca será pago (mesmo se você alterá-lo, não pode cobrar pela sua versão do ansible).
Você pode encontrar o código fonte e outros detalhes aqui .
Se não possuir interesse em pagar pela licença pelo motivo que for, você pode utilizar o projeto AWX Operator 😀. Este utiliza a licença Apache, que é um pouco mais permissiva que a GPL3.
Outra alternativa é utilizar o Ansible Semaphore , que seria uma altenativa entre o AWX Operator e utilizar o Ansible via CLI.
Há dois pontos de pré-requisitos. No nó de controle (onde ficará instalado o Ansible) e nos nós gerenciáveis (dispositivos fins que queira automatizar).
Precisa de Python 3.8+ instalado. Isso vale para sistema operacional com kernel linux (CentOS, Debian, Red Hat, …), macOS, qualquer BSD e via WSL do Windows .
Neste curso, utilizaremos o pip
por ser recomendado pela documentação (é onde tem a versão mais recente e com correções mais rápidas)
É necessário ter Python 2.6+ ou 3.5+, SSH e SFTP ou SCP.
No momento, a última versão do ansible é
9.2
e o ansible-core é2.16.3
.
Se seu sistema não possui o pip para instalar (via apt, yum, brew, etc…), segundo a documentação oficial , pode-se instalar, com seu usuário sem privilégios (para que não faça instalação globalmente), da seguinte forma:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py --user
Usando este método, ao invés de executar apenas pip
(ou pip3
), você deverá executar python -m pip
. Seguirei explicando com o comando simplificado.
Primeiro atualize o seu pip3
, com seu usuário sem privilégios, utilizando o comando (o -U
é de upgrade):
pip3 install -U pip
Agora instale o Ansible com o comando:
pip3 install -U ansible
Caso você tenha um Ansible muito antigo instalado via pip
e apresentou erro ao fazer a instalação, desinstale-o e instale a nova versão, visto que atualizações de pacotes muito antigos podem causar problemas:
pip3 uninstall ansible
pip3 install ansible
Não usaremos o virtualbox, instale os seguintes pacotes:
Para que seu usuário possa manipular máquinas virtuais, será necessário incluir seu usuário no grupo do libvirt ou libvirtd, dependendo da distribuição usada.
Para checar se o grupo existe, execute o comando, para libvirt:
sudo getent group | grep libvirt
Verifique se é libvirt ou libvirtd e, a seguir, adapte o comando para sua necessidade:
sudo usermod -a -G libvirt $(whoami)
Agora você pode usar máquinas vagrant libvirt!
Acesse https://www.vagrantup.com/downloads , baixe e instale o Vagrant conforme seu sistema operacional.
Precisa-se instalar o plugin vagrant-libvirt. Para instalá-lo, utilize o seguinte comando:
vagrant plugin install vagrant-libvirt
Vamos precisar dele para montar nosso laboratório.
Os arquivos desta seção estão na pasta
01_Levantando_o_laboratório
Comece gerando sua chave pública, caso não possua, com o comando:
ssh-keygen -t rsa
Para simplificar/facilitar, não forneça uma senha nessa etapa (deixe para usar a senha nessa etapa quando for pra valer).
O arquivo ~/.ssh/id_rsa.pub
será utilizado no Vagrantfile
, caso tenha utilizado outro caminho ou nome de arquivo, favor fazer os devidos ajustes.
Vagrantfile
O arquivo Vagrantfile
tem o seguinte conteúdo:
#!/usr/bin/env ruby
maquinas = {
"maquina01" => "192.168.56.10/24",
"maquina02" => "192.168.56.20/24",
"maquina03" => "192.168.56.30/24"
}
Vagrant.configure("2") do |config|
maquinas.each do |nome, ip|
config.vm.define nome do |maquina|
maquina.vm.box = "debian/bookworm64"
maquina.vm.hostname = "%s" % nome
maquina.vm.network "private_network", ip: ip, libvirt__network_name: "lab_ansible"
maquina.vm.provider "libvirt" do |lv|
lv.memory = 384
lv.default_prefix = "lab_ansible_"
end
end
config.nfs.verify_installed = false
config.vm.synced_folder '.', '/vagrant', disabled: true
config.vm.provision "shell" do |s|
ssh_pub_key = File.readlines(File.join(Dir.home, ".ssh/id_rsa.pub")).first.strip
s.inline = <<-SHELL
echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
SHELL
end
end
end
Em outras palavras, levantará três VMs para ser o lab em seu libvirt-daemon.
Para levantar seu ambiente Vagrant, vá para a pasta onde está o Vagrantfile
e execute vagrant up
. Basta esperar e tudo será configurado e estará funcionando.
O usuário é:
vagrant
A senha é utilizando certificado, logo, não é necessária.
Você pode testar o acesso fazendo um ssh vagrant@192.168.56.10
.
Seguem alguns comandos que podem auxiliar a verificar se está tudo ok ☑️ e para limpar 🗑 sua máquina das VMs do laboratório.
Listar todas as VMs
virsh list --all
Listar as redes virtuais disponíveis
virsh net-list
Listar os IPs que foram definidos na primeira interface (DHCP)
virsh net-dhcp-leases vagrant-libvirt
Verificar box instalado
vagrant box list
Desligar VMs (execute no mesmo diretório do Vagrantfile
)
vagrant halt
Remover o box do Debian
vagrant box remove debian/bookworm64
Apagar VMs criadas (execute no mesmo diretório do Vagrantfile
)
vagrant destroy
Basicamente são os tipos de arquivo que você terá de lidar no ansible e que irei abordar aqui no curso.
Usado no arquivo de hosts e configuração do Ansible.
Observe este exemplo para entender melhor.
# Esta linha está comentada e é possível com "#" apenas no início da linha
; Esta linha também está comentada e é possível com ";" no início e em linhas com algum conteúdo
arquivo=caminho/arquivo.txt ; A variável arquivo recebe (com o sinal de igua "=") o valor "caminho/arquivo.txt"
outroarquivo=caminho/outroarquivo.txt ; Só é possível comentar na mesma linha se usando o ";". Comentar com "#" não funciona
[novasecao] ; Usando [] é possível criar seções dentro do mesmo arquivo INI
porta=1080 ; Foi definido que a variável porta tem o valor 1080 e está dentro da seção novasecao
[outrasecao] ; Aqui começa a outrasecao, sendo o fim da novasecao
protocolo=tcp ; Foi definido que a variável protocolo tem o valor tcp e está dentro da seção outrasecao
[grupodesecoes:childrens] ; É assim que se agrupa seções, colocando o nome da seção maior seguido de ":childrens"
novasecao
outrasecao
Exemplo 1:
[debian]
maquina01
[centos]
maquina02
maquina03
Exemplo 2, agrupando seções:
[debian]
maquina01
[centos]
maquina02
maquina03
[linux:childrens] ; Agrupando as seções debian e centos, podendo ser invocados ao usar "linux"
debian
centos
Caso você não tenha definido uma configuração de acesso em seu ~/.ssh/config
, você pode fazer assim como no arquivo ini do Exemplo 4:
[debian]
maquina01 ansible_host=192.168.56.10 ansible_port=22
Há várias variáveis que podem ser usadas no arquivo de hosts, cabendo vários exemplos e, inclusive, pode ser usado yaml ao invés de ini. Mais detalhes na documentação oficial sobre inventário .
Como já explicado anteriormente, utiliza o padrão INI.
Quanto ao exemplo de arquivo de configuração, algo rápido, seria assim:
[defaults]
inventory = hosts ; onde se encontra o arquivo de inventário
host_key_checking = False ; para não ter de aceitar o certificado do primeiro ssh
ask_pass = True ; para perguntar a senha do usuário do ssh
nocows = True ; não exibir vacas... é sério... não é brincadeira
log_path = ./logs/ansible.log ; caminho para gravação do log de atividades do ansible
[privilege_escalation]
become = True ; se vai usar sudo
become_ask_pass = True ; perguntar a senha de sudo
Para mais parâmetros de configuração, acesse aqui na documentação .
O arquivo yaml normalmente é utilizado na escrita dos playbooks. O arquivo segue o seguinte padrão (versão traduzida de Aprenda Yaml em Y minutos ):
--- # início do documento
# Comentários em YAML são como este.
###################
# TIPOS ESCALARES #
###################
# Nosso objeto raiz (que continua por todo o documento) será um mapa,
# o que equivale a um dicionário, hash ou objeto em outras linguagens.
chave: valor
outra_chave: Outro valor vai aqui.
u_valor_numerico: 100
notacao_cientifica: 1e+12
boleano: true
valor_nulo: null
chave com espaco: valor
# Observe que strings não precisam de aspas. Porém, elas podem ter.
porem: 'Uma string, entre aspas.'
'Chaves podem estar entre aspas tambem.': "É útil se você quiser colocar um ':' na sua chave."
aspas simples: 'possuem ''um'' padrão de escape'
aspas duplas: "possuem vários: \", \0, \t, \u263A, \x0d\x0a == \r\n, e mais."
# Caracteres UTF-8/16/32 precisam ser codificados
Superscript dois: \u00B2
# Seqüências de várias linhas podem ser escritas como um 'bloco literal' (utilizando |),
# ou em um 'bloco compacto' (utilizando '>').
bloco_literal: |
Todo esse bloco de texto será o valor da chave 'bloco_literal',
preservando a quebra de com linhas.
O literal continua até 'des-indentar', e a primeira identação é
removida.
Quaisquer linhas que são 'mais identadas' mantém o resto de suas identações -
estas linhas serão identadas com 4 espaços.
estilo_compacto: >
Todo esse bloco de texto será o valor de 'estilo_compacto', mas esta
vez, todas as novas linhas serão substituídas com espaço simples.
Linhas em branco, como acima, são convertidas em um carater de nova linha.
Linhas 'mais-indentadas' mantém suas novas linhas também -
este texto irá aparecer em duas linhas.
####################
# TIPOS DE COLEÇÃO #
####################
# Texto aninhado é conseguido através de identação.
um_mapa_aninhado:
chave: valor
outra_chave: Outro valor
outro_mapa_aninhado:
ola: ola
# Mapas não tem que ter chaves com string.
0.25: uma chave com valor flutuante
# As chaves podem ser também objetos multi linhas, utilizando ? para indicar o começo de uma chave.
? |
Esta é uma chave
que tem várias linhas
: e este é o seu valor
# YAML também permite o mapeamento entre sequências com a sintaxe chave complexa
# Alguns analisadores de linguagem de programação podem reclamar
# Um exemplo
? - Manchester United
- Real Madrid
: [2001-01-01, 2002-02-02]
# Sequências (equivalente a listas ou arrays) semelhante a isso:
uma_sequencia:
- Item 1
- Item 2
- 0.5 # sequencias podem conter tipos diferentes.
- Item 4
- chave: valor
outra_chave: outro_valor
-
- Esta é uma sequencia
- dentro de outra sequencia
- - - Indicadores de sequência aninhadas
- podem ser recolhidas
# Como YAML é um super conjunto de JSON, você também pode escrever mapas JSON de estilo e
# sequências:
mapa_json: {"chave": "valor"}
json_seq: [3, 2, 1, "decolar"]
e aspas são opcionais: {chave: [3, 2, 1, decolar]}
###########################
# RECURSOS EXTRAS DO YAML #
###########################
# YAML também tem um recurso útil chamado "âncoras", que permitem que você facilmente duplique
# conteúdo em seu documento. Ambas estas chaves terão o mesmo valor:
conteudo_ancora: &nome_ancora Essa string irá aparecer como o valor de duas chaves.
outra_ancora: *nome_ancora
# Âncoras podem ser usadas para duplicar/herdar propriedades
base: &base
name: Todos possuem o mesmo nome
# O regexp << é chamado Mesclar o Tipo Chave Independente-de-Idioma. É usado para
# indicar que todas as chaves de um ou mais mapas específicos devam ser inseridos
# no mapa atual.
foo:
<<: *base
idade: 10
bar:
<<: *base
idade: 20
# foo e bar terão o mesmo nome: Todos possuem o mesmo nome
# YAML também tem tags, que você pode usar para declarar explicitamente os tipos.
string_explicita: !!str 0.5
# Alguns analisadores implementam tags específicas de linguagem, como este para Python de
# Tipo de número complexo.
numero_complexo_em_python: !!python/complex 1+2j
# Podemos utilizar chaves YAML complexas com tags específicas de linguagem
? !!python/tuple [5, 7]
: Fifty Seven
# Seria {(5, 7): 'Fifty Seven'} em Python
####################
# YAML TIPOS EXTRA #
####################
# Strings e números não são os únicos que escalares YAML pode entender.
# Data e 'data e hora' literais no formato ISO também são analisados.
datetime: 2001-12-15T02:59:43.1Z
datetime_com_espaços: 2001-12-14 21:59:43.10 -5
date: 2002-12-14
# A tag !!binary indica que a string é na verdade um base64-encoded (codificado)
# representação de um blob binário.
gif_file: !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
# YAML também tem um tipo de conjunto, o que se parece com isso:
conjunto:
? item1
? item2
? item3
ou: {item1, item2, item3}
# Como Python, são apenas conjuntos de mapas com valores nulos; o acima é equivalente a:
conjunto2:
item1: null
item2: null
item3: null
... # fim do documento
hosts: web
tasks:
- name: Garantindo que o apache2 está atualizado
apt:
name: apache2
state: latest
- name: Escrevendo o arquivo de configuração do apache2
template:
src: ./templates/apache.j2
dest: /etc/apache/apache.conf
Há considerações de segurança relacionada ao ansible.cfg
.
Não deixá-lo numa pasta com permissão de escrita para qualquer um. (um usuário poderia substituir o arquivo e rodar código malicioso localmente e remotamente)
Se o arquivo estiver dentro de um Vagrant ou WSL, montar a partição com as configurações do Ansible limitadas a certos usuários e grupos.
As configurações no Ansible segue uma sequência de prioridades na busca das informações de configuração. A ordem de prioridade da maior para a menor é a seguinte:
ANSIBLE_CONFIG
(variável de ambiente se definida)ansible.cfg
(no diretório atual, precisa de permissão de escrita apenas para o usuário, chmod 644 ansible.cfg
)~/.ansible.cfg
(na pasta do usuário, precisa de permissão de escrita apenas para o usuário, chmod 644 ~/.ansible.cfg
)/etc/ansible/ansible.cfg
ansible.cfg
para usarmos no laboratórioOs arquivos desta seção estão na pasta
02_Arquivos_de_configuracoes_para_usarmos_no_laboratorio
Já apresentei um arquivo de configuração do Ansible, anteriormente, mas agora será apresentado o que utilizaremos no nosso laboratório.
Na pasta em que você reservou para o Ansible, utilize o seguinte arquivo ansible.cfg
:
[defaults]
inventory = hosts ; arquivo padrão de hosts
host_key_checking = False ; para não dar problema nos hosts que não foram feitos os primeiros acessos ssh, que pede para aceitar o certificado
nocows = True ; não gosto das vacas aparecendo
deprecation_warnings = False ; podem aparecer alguns avisos de deprecation
forks = 10 ; paralelizando a coisa quando houver vários hosts
log_path = ./logs/ansible.log ; gravar um log em arquivo
[privilege_escalation]
become = True ; tornar-se root
Se deseja saber TODAS as opções possíveis, acesse o link da documentação .
hosts
usados no laboratórioOs arquivos desta seção estão na pasta
02_Arquivos_de_configuracoes_para_usarmos_no_laboratorio
No laboratório, utilizaremos as seguintes configurações (conforme o arquivo do Vagrant):
maquina01 ansible_host=192.168.56.10 ansible_user=vagrant
maquina02 ansible_host=192.168.56.20 ansible_user=vagrant
maquina03 ansible_host=192.168.56.30 ansible_user=vagrant
Perceba que foram passados os parâmetros junto aos hosts. Poderíamos preencher, também, separando em arquivos. Porém, ao separar, só é possível usar YAML, ao invés do INI (conforme documentação ).
Fica a seu critério escolher como configurará seus hosts, seja separando ou junto com suas respectivas variáveis.
Os arquivos ALTERNATIVOS desta seção estão na pasta
02.01_Arquivos_de_configuracoes_para_usarmos_no_laboratorio_hosts_alt
Arquivo de hosts
:
[laboratorio]
maquina01
maquina02
maquina03
No arquivo ./group_vars/laboratorio
para definir o que é comum ao grupo de nome laboratorio:
---
ansible_user: vagrant
No arquivo ./host_vars/maquina01
para definir o que é exclusivo ao host de nome maquina01:
---
ansible_host:192.168.56.10
No arquivo ./host_vars/maquina02
para definir o que é exclusivo ao host de nome maquina02:
---
ansible_host: 192.168.56.20
No arquivo ./host_vars/maquina03
para definir o que é exclusivo ao host de nome maquina03:
---
ansible_host: 192.168.56.30
É possível utilizar o ansible sem playbook. Conheça, então, um modo de uso do ansible que é o ad hoc.
Vamos fazer um ping em todas as máquinas com o comando:
ansible all -m ansible.builtin.ping
Veja agora as versões do linux com o comando:
ansible all -m ansible.builtin.shell -a "lsb_release -a"
Apenas para explicar:
Saiba quais são todos os facts da maquina01
com o comando:
ansible maquina01 -m ansible.builtin.setup
Com esse módulo, é possível filtrar os facts para coletar informações úteis, como todos os IPv4 disponíveis na maquina01
:
ansible maquina01 -m ansible.builtin.setup -a "filter=ansible_all_ipv4_addresses"
Para mais detalhes, acesse a documentação
Os arquivos desta seção estão na pasta
03_Primeiro_playbook
Vamos instalar o servidor web/proxy nginx na maquina01.
Crie o arquivo nginx.yml
com o seguinte conteúdo:
---
- hosts: maquina01
tasks:
- name: Instalar o nginx
apt:
pkg: nginx
state: present
update_cache: true
...
Com o arquivo ansible.cfg
e hosts
criados como orientado anteriormente, execute no terminal:
ansible-playbook nginx.yml
Pronto! Será instalado o nginx na maquina01.
Há os tipos de eventos em cada execução de tarefa ou de handlers:
O playbook deu sucesso, mostrando a mensagem CHANGED. O que acontece se rodar novamente o playbook?
Pretendo abordar o máximo possível do que está neste link de dicas e truques para playbooks do ansible . Caso não consiga, deixarei-o acessível aqui. 🙂
É basicamente o primeiro playbook, porém ampliado e expandido. 🤣
Os arquivos desta seção estão na pasta
04_Segundo_playbook
. Foi usado a segunda forma de organizar o arquivo dehosts
, separando em diretórios.
No NGINX, será removido a configuração default
do sites-enabled e criaremos a configuração do site_legal
.
Localizações e arquivos:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<html>
<head>
<title>Olá mundo!</title>
</head>
<body>
<h1>Olá mundo!!</h1>
<p>Estou funcionando perfeitamente.</p>
<hr>
<p>Funcionou de primeira.</p>
</body>
</html>
server {
listen 80;
root {{ pasta_raiz_nginx }}/{{ pasta_site }};
index index.html index.htm;
server_name {{ nome_servidor }};
location / {
default_type "text/html";
try_files $uri.html $uri $uri/ =404;
}
}
Como deve ficar o playbook em si (vou encher de comentários para ampliar as explicações)
No playbook site_legal_nginx.yml
contém:
---
- hosts: maquinawx-01
vars:
nome_servidor: "{{ ansible_default_ipv4.address }}"
pasta_raiz_nginx: /var/www
nome_site: site_legal
pasta_site_local: "files/{{ nome_site }}"
usuario_nginx: "www-data"
tasks:
- name: Instala o nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Copia o arquivo html do site_legal
copy:
src: "{{ pasta_site_local }}"
dest: "{{ pasta_raiz_nginx }}"
owner: "{{ usuario_nginx }}"
group: "{{ usuario_nginx }}"
mode: preserve
- name: Remove site default
file:
path: /etc/nginx/sites-enabled/default
state: absent
notify: Reiniciar NGINX
- name: Cria site site_legal
template:
src: templates/site_legal.conf.j2
dest: "/etc/nginx/sites-available/{{ nome_site }}.conf"
mode: 0644
notify: Reiniciar NGINX
- name: Habilitar novo site
file:
src: "/etc/nginx/sites-available/{{ nome_site }}.conf"
dest: "/etc/nginx/sites-enabled/{{ nome_site }}.conf"
state: link
notify: Reiniciar NGINX
handlers:
- name: Reiniciar NGINX
service:
name: nginx
state: restarted
...
“Bacana… Entendi! vars é a declaração de variáveis que são chamadas depois, mas e esses tasks, handlers, apt, copy, file, template e service?”
Nada disso foi inventado por mim ou tirado do nada! Tudo tem um motivo e, nessas horas, a documentação será seu melhor e maior aliado! ☺
vars: Declarar variáveis que podem ser chamadas para preencher outras variáveis dentro do playbook, link da documentação ;
tasks: Tarefas que serão executadas nos playbooks, link da documentação ;
handlers: Parece com tasks MAS só é executado, uma única vez, caso seja invocado usando o notify ou pode ser executado mais de uma vez se utilizado o flush handlers durante a execução das tasks, link da documentação ;
apt: Módulo para instalação de pacotes em sistemas linux tipo debian, link da documentação ;
copy: Módulo para copiar arquivos da máquina local (ou remoto) destinado à máquina remota, link da documentação ;
file: Módulo para definir atributos (ou apagar) em arquivos, links simbólicos ou diretórios, link da documentação ;
template: Preenche variáveis nos modelos de arquivos (j2), baseado em jinja2, e envia-os para o sistema remoto, link da documentação ;
service: Controla os serviços nos sistemas remotos, link da documentação ;
facts: O ansible_default_ipv4.address
refere-se ao fact de endereçamento IPv4 do sistema remoto. 🙂 Facts são informações relacionadas aos sistemas remotos. Como IP, sistemas operacionais, sistemas de arquivos, etc, link da documentação
.
Basta executar, dentro da pasta 04_Segundo_playbook
, o seguinte comando:
ansible-playbook site_legal_nginx.yml
Repare que, se você não limpou o lab por conta da atividade passada, ele não marcará como CHANGED, mas como OK, a etapa de instalação do NGINX!
TO DO 🌱🌱🌱🌱🌱🌱
🌱🌱🌱🌱🌱🌱
🌱🌱🌱🌱🌱🌱
🌱🌱🌱🌱🌱🌱
O que fazer quando é necessário por uma senha em um dos arquivos YAML e não pode ser uma senha gerada apenas na execução do playbook? 👀
Criptografar deve ser a primeira coisa que vem em sua mente, mas como pode ser feito isso? É… você viu o título desta seção e já sabe que é usando o Ansible Vault! 🔐
Pra não ficar a senha em texto plano em arquivos ou buffers.
Edite seu arquivo .vimrc
e acrescente (se já não possuir):
" Desativar os arquivos swap que funcionam em caso de problema ou interrupção do vim.
set noswapfile
" Desativar a criação de arquivo de backup.
set nobackup
set nowritebackup
" Desativer o arquivo viminfo de copiar dados de sua seção atual.
set viminfo=
" Desativar a possibilidade de copiar para o clipboard do sistema.
set clipboard=
🌱🌱🌱🌱
ansible-vault encrypt arquivo.yaml
ansible-vault decrypt arquivo.yaml
O arquivo não pode existir
ansible-vault create arquivo.yaml
O arquivo precisa existir
ansible-vault edit arquivo.yaml
Caso deseje manter seu arquivo YAML descriptografado e queira criptografar apenas a informação de uma variável utilize o seguinte comando:
ansible-vault encrypt_string
Com o arquivo desejado aberto, execute o comando: :r! ansible-vault encrypt_string
.
Será solicitado:
Ctrl
+d
.TO DO 🌱🌱🌱🌱🌱🌱
ansible-lint
TO DO 🌱🌱🌱🌱🌱🌱
TO DO 🌱🌱🌱🌱🌱🌱
Aqui você terá os procedimentos para instalar o AWX Operator
Vá no site do procedimento de instalação do Minikube e siga o procedimento. Quando terminar, volte aqui. ☺
Depois de fazer o procedimento, execute e crie o seguinte alias em seu .bashrc
:
alias kubectl="minikube kubectl --"
…
Imagino que você já fez o procedimento e, em algum momento, desligou o seu computador. Comandos úteis:
Iniciar o Minikube
minikube start
Checar os nós criados
kubectl get nodes
Para instalar o AWX Operator, utilizaremos o Kustomize, seguindo as orientações do procedimento de instalação.
Mais uma vez, siga o que é orientado no procedimento de instalação do Kustomize e depois volte aqui, indo na próxima seção.
Com o Minikube devidamente instalado e o Kustomize, vá na pasta 16_Instalar_e_configurar_o_AWX_Operator
e veja o conteúdo do arquivo kustomization.yaml
e do arquivo awx-local.yaml
.
Após colocar a tag na versão desejada, execute (ainda dentro da pasta):
kustomize build . | kubectl apply -f -
Uns segundos depois, verifique se o awx-operator já está rodando com o comando:
kubectl get pods -n awx
Para não ter de ficar escrevendo -n awx
toda vez, defina-o namespace atual com o comando:
kubectl config set-context --current --namespace=awx
Para verificar os logs do AWX Operator, execute o seguinte comando:
kubectl logs -f deployments/awx-operator-controller-manager -c awx-manager
Agora basta acessar a aplicação, para ver qual o endereço de acesso execute o comando:
minikube service awx-local-service --url
Em seu navegador, deve aparecer a seguinte tela:
E “SE NÃO RETORNAR NADA”?! Não vos preocupeis. Comigo não funcionou o comando que é usado na documentação, que foi o que expus logo acima.
Para acessar o AWX Operator, descubra o IP usando o comando:
minikube ip
Para saber qual a porta, execute o comando:
kubectl get service awx-local-service --output='jsonpath="{.spec.ports[0].nodePort}"'
Por padrão o usuário é admin
e a senha está em awx-local-admin-password
. Para pegar a senha, execute o comando:
kubectl get secret awx-local-admin-password -o jsonpath="{.data.password}" | base64 --decode
Ao colocar o login e senha, deve aparecer a seguinte interface:
Parabéns! Você fez a instalação mais básica do AWX e que utilizaremos neste curso! Para mais opções de configuração e instalação, cheque o github do AWX Operator
Introdução O pipx funciona parecido com o pip, porém ele já cria ambientes isolados automaticamente (venvs). Instalação …
Faça sua página estática em Hugo, que ficará hospedada no seu Gitlab, e monte seu Gitlab Pages com Gitlab-CI. Hugo é um …
Para conversar comigo ou saber outros detalhes profissionais
me encontre no…