ANSIBLE SERIES: YML … add sudo(ers) >> no prompt or ask

Olá! Como vai? Muito prazer, Victor é o meu nome … Ou @vicrlda, se preferir … Navegando pela internet em busca de inspiração, situações, exemplos práticos para exercitar e solucionar via ANSIBLE ??? É um sysadmin ou desenvolvedor que anseia o cargo de Engenheiro Devops / SRE ?? Por favor, peço que me deixe cumprimentá-lo e lhe dar os parabéns, pois o caro leitor (você) veio ao lugar certo! Seja mais do que bem-vindo ao @machinesbecomeservices.com … A partir de hoje, serei o seu humilde anfitrião / companheiro / fiel escudeiro nessa incrível jornada que chamo de “estrada para a automação”

Em contrapartida, se por acaso você é um veterano, não pera (…) Melhor dizendo, se já é um velho conhecido meu e do BLOG, por favor pule para a próxima etapa … Ops! Quero dizer, seção (hahaha)

Ambiente: Máquinas e Pré-requisitos

Para total compreensão e sentido, por favor, peço que…

Recém-chegados, leiam o seguinte post, e partam desse princípio:

https://machinesbecomeservices.com/2021/09/21/vicrlda-dual-boot-pop_os-gnome-boxes-vpn-checkpoint-e-novo-workflow/

Longa datas, revisem esse outro post, e iniciem suas VMs do ponto exato em que paramos:

https://machinesbecomeservices.com/2020/12/01/ansible-series-hands-on-01-modo-cli-e-hello-yml-1st-playbook/

Quem ainda não entendeu nada, acompanhe a śerie ANSIBLE desde o começo 😉

https://machinesbecomeservices.com/?s=ansible

GNOME Boxes, uma solução All-in-One: Download nativo de ISOs + Criação das instâncias + Uso integrado

Com o Boxes, não é mais necessário sair da ferramenta em busca de outros meios/softwares para baixar, instalar, configurar, usar máquinas virtuais. Destaque principalmente, e especialmente, para a primeira etapa que é fazer o download das ISOs, onde normalmente acessaríamos os respectivos sites oficiais de cada uma, e obteríamos via métodos tradicionais como o próprio GET ou até mesmo TORRENT. Bem, dito isso, vamos abri-lo agora para conhecê-lo um pouco melhor e ver como as coisas transcorrem, além de claro, testemunhar toda a sua simplicidade, praticidade e comodidade. Teclado e mouse em mãos, vem comigo!

Uma vez baixado via loja de aplicativos linux favorita (deb, rpm, flatpak, snapp), abra-o pela primeira vez e verá a seguinte tela:

Figura 01: GNOME Boxes v.40.2

Clique no ícone + para iniciar o processo de criação. Observe que a janela aberta traz consigo três opções principais, que são: (a) os sistemas operacionais mais baixados naquele momento, por outros usuários da plataforma; (b) lista de todos os outros SOs que não aparecem pois não figuram no ranking Top 3 anterior; e (c) finalmente instalar a partir de um arquivo .ISO previamente baixado e disponível localmente.

Figura 02. Opções e formas de iniciar o processo

Escolha a segunda opção, “Navegue e pesquise sistemas operacionais para instalar”.

Figura 03. Listagem dos Sistemas Operacionais

Procure por ‘centos’ na barra de pesquisa:

Figura 04. Busca por ‘centos’

Simularemos um ambiente heterogêneo, então isso significa distros variadas, com versões diferentes. Selecione CentOS 7 x86_64 (netinst) :

Figura 05. Download automático da ISO

Aguarde a conclusão do download, iniciado automaticamente, para logo em seguida começar o que o Boxes chama de “instalação expressa”. Informe um nome de usuário, e abaixo clique em adicionar senha, digitando a mesma no campo aberto:

Figura 06. Instalação Expressa / Usuário e senha

Na próxima tela, revisar e criar, defina a quantidade de RAM e tamanho máximo do HD, ambos virtuais. Para efeitos de teste, e considerando que essas máquinas serão sempre “descartáveis”, ou seja, meros templates clonados de um git, GitHub ou GitLAB via Ansible/AWX/Tower … Sinta-se livre para escolher a configuração que mais lhe agrada, e que seu hardware atual permite. Mas, tenha em mente que apenas 512 MB de RAM e 10 GB de HD, são o “mínimo” e mais do que suficientes para rodar um Linux em modo texto. Portanto, esta será a minha escolha de configuração para a maioria dos servidores-alvo (nós) que iremos criar eventualmente, ao longo da série:

Figura 07. Instalação expressa / RAM e HD virtuais

Feito! Agora basta esperar até que o sistema seja criado e pronto! Ressaltando que o ícone da imagem é uma espécie de olho que fica girando (bolinha fazendo círculos) :

Figura 08. Instalação expressa / SO sendo preparado

Caso a instalação demore e comece a achar meio estranho, faça como eu, seja curioso, e dê um simples clique em cima da bolinha. Talvez se depara com isso, um terminal bugado que por algum motivo não conseguiu finalizar o processo sozinho:

Figura 09. Instalação expressa / Kernel panic !!!

Seguindo a própria recomendação exibida em tela, digite journalctl no terminal para depurar o log e reunir mais informações sobre o possível erro.

Buscando a circunstância para tamanha anomalia, ou quem sabe com sorte, pelo menos alguma pista que levasse até o principal suspeito … Encontrei várias linhas no arquivo de log informando que “a partição X não foi montada”; “a partição Y não existe”; “a Z não possui espaço suficiente”; e coisas desse tipo … Meu primeiro palpite foi de que o particionamento automático da instalação expressa está bugando ao dimensionar, formatar e levantar o esqueleto de diretórios necessário ao sistema operacional. Cheguei ao ponto de aumentar o tamanho do disco virtual querendo testar o algoritmo de fracionamento em diferentes quantidades e valores de armazenamento, pois talvez aqueles exatos 10,7 GB iniciais estivessem sendo pulverizados em tantas micro partições, que no final uma ou outra não tivesse espaço disponível para continuar, quebrando assim toda a instalação. Outros testes realizados foram: aumentar memória, reiniciar a máquina, apagar a VM e recomeçar do zero. Nada! Sem êxito nenhum! Quase perdendo as esperanças, resolvi usar outra imagem, o CentOS 8. Além disso, ainda desconfiado de haver algum BUG no meio, desativei o processo de instalação expressa, simplesmente clicando e desmarcando a caixa de seleção. Dedos cruzados, e na torcida!!! Veremos o que nos espera adiante:

Figura 10. Repetindo o processo com CentOS 8
Figura 11. A-ha! Sem erros!!! Conclusão: instalação expressa do Boxes momentaneamente bugada

Siga em frente, definindo seus próprios parâmetros e configurações da VM, contudo sabendo que em muitas das vezes os padrões pré-selecionados de fábrica já satisfazem o nosso objetivo, salvo eventuais exceções a serem modificadas posteriormente, sem dano algum a integridade do sistema. Não explicarei em detalhes pois não cabe aqui, tão pouco é o objetivo desse POST, como instalar e configurar um CentOS. Isso porque no futuro pretendo abordar esse assunto, em particular, trazendo as possibilidades de cenários e suas variantes. Ok?

Pop_OS! : Executando o Ansible

Apostando no conhecimento prévio adquirido nos posts antecessores, vou direto ao ponto e mostro como transformar o seu Pop_OS! em um nó controlador do Ansible. Essa e tantas outras nomenclaturas, podem ser revistas a qualquer momento. Na dúvida sobre determinado termo, busque aqui no BLOG e releia! Pois cada um deles conta e todos são igualmente importantes, sem exceção.

sudo apt update
Figura 12. Atualizando a última versão dos repositórios atuais
sudo apt install software-properties-common
Figura 13. Instalando o pacote de softwares para python
sudo add-apt-repository --yes --update ppa:ansible/ansible
Figura 14. Adicionando o PPA (repo) oficial do Ansible
sudo apt install ansible
Figura 15. Instalando o pacote ‘ansible’ e suas dependências
ansible --version
Figura 16. Verificando qual versão foi instalada
ansible-config init --disabled > ansible.cfg
ansible --version
Figura 17. Criando o arquivo de configuração

LAB : Adicionando usuário e senha pré-definidos

Tarefa recorrente no cotidiano de um administrador de sistemas, informar novos usuários aos servidores linux pode ser divertido ou entediante, dependendo de como enxerga … Se não gosta de aventura, emoção ou coisas novas, então: (a) escreva um shell script, (b) copie-o para todas as máquinas em que o usuário necessita acesso, (c) execute o mesmo localmente, (d) digite o nome/senha, e por fim, repita os passos C e D até o número X de hosts envolvidos. Por outro lado, se busca tempo livre para novas demandas, novos projetos, novas habilidades, ou somente para tomar aquele cafezinho na copa com toda a calma, conversando e saboreando … Então, aprenda YAML, playbooks, Ansible: aqui, agora !!! 😉

Vamos lá! Para começar, armazenar senhas em texto plano é considerado uma falha de segurança. Qualquer atacante (externo ou interno) teria fácil acesso a esse segredo, usando-o a favor dele, e consequentemente, contra você. Por isso, dados críticos ou informações sigilosas devem sempre apresentar certo nível de criptografia, nunca expostos totalmente. Em nosso caso, utilizaremos a biblioteca passlib do python para gerar o hash de uma senha aleatória forte, sendo esse dado a constar no código-fonte, e não a credencial em si. Para tal abra o editor de texto e, sem olhar, digite algumas teclas aleatoriamente. Feito? Ótimo! Agora no terminal execute os seguintes comandos:

pip3 install passlib
python3 -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
CTRL-C (gedit) + CTRL-V (bash) + ENTER (tecla) = HASH (ctrl-c + ctrl-v + ctrl-s)

Salve o resultado (hash) no mesmo bloco de notas, ao lado da senha que criou há pouco. Assim você terá as duas informações, enquanto escreve o playbook, repassando apenas a última.

Com isso, ainda no terminal, monte a estrutura necessária:

mkdir awx
mkdir -p awx/inventories awx/playbooks
ls -lhR awx/
Figura 18.
cd awx/
touch inventories/hosts
touch playbooks/add-sudo-no-prompt-or-ask.yml
Figura 19.
ls -lhR awx/
Figura 20.

Edite o arquivo hosts conforme o conteúdo abaixo:

vim awx/inventories/hosts
##CENTOS-a ansible_host=10.10.2.141
##CENTOS-b ansible_host=10.10.2.143

Depois abra o playbook e cole o seguinte:

vim awx/playbooks/add-sudo-no-prompt-or-ask.yml
---
- hosts: all
  become: yes
    
  tasks:
  - name: Adiciona usuario e entrega poderes de ROOT
    ansible.builtin.user:
        name: "bob"
        state: present
        password: "$6$XxSTRcR6la4KKUl1$R7XqBVSTOTCNq8PeBpPHL5gK9x1xy8D7oICVHgc2StH7/7wuheM2rPdpw9WD4QkM.Sh1BaDaBq70kE8ScY0jd."
        update_password: on_create
        groups: wheel
        append: yes
...

1ª linha: Todo playbook, na prática um arquivo com extensão .yml ou .yaml, deve começar com três hifens (traços) para sinalizar a sintaxe da sua natureza, a linguagem YAML.

2ª linha: YAML suporta vários tipos de estruturas de dados. Quando trabalhamos com ANSIBLE as mais comuns são listas e dicionários. Uma lista pode ser um conjunto de itens, separados por linha e iniciados com hífen + espaço (“- “) cada. Já um dicionário pode ser um grupo de mapas, composto por chave:valor cada linha e nomeado exclusivamente. Também é possível misturá-los, o que acaba resultando em listas de dicionários ou dicionários com listas muitas vezes. Para encurtar, particularmente nesse caso, estamos dizendo ao Ansible que a lista “hosts” é composta por todas as entradas (sem exceção) do inventário padrão, de mesmo nome. Dessa forma, o playbook será executado em TODOS os servidores listados.

3 ª linha: Equivalente ao su/sudo, aqui definimos o método de escalonamento na máquina remota. O valor YES implica que o usuário escolhido foi o root do sistema ( become: yes = become_user: root )

5ª linha: Dicionário que contém todas as tasks daquela play em questão.

6ª linha: String que nomeia a primeira task do playbook, podendo ser uma frase, palavra, ou caractere de escolha livre.

7ª linha: Módulo ansible utilizado para cumprir aquela tarefa.

8ª linha: Parâmetro name do módulo user para informar o login de usuário.

9ª linha: Parâmetro que remove (absent) ou adiciona (present) o login anterior.

10ª linha: Parâmetro que recebe o valor da senha no formato hash, gerado em etapas superiores.

11ª linha: Parâmetro que atualiza para uma nova senha ou mantém a mesma em casos de preexistência.

12ª linha: Parâmetro que dita qual (is) grupo (s) aquela credencial será membro.

13ª linha: Parâmetro que defini se o grupo é só mais um apêndice ou substituto único e exclusivo para aquele usuário.

14ª linha: Fim do playbook (três pontos).

RUN PLAYBOOK , RUN ! ! !

Últimos metros da maratona, faltando apenas uma etapa para que tudo funcione perfeitamente … Bem, conforme dito no passado, Ansible trata-se de uma ferramenta agentless (sem agente) que faz uso do SSH para comunicação entre as partes. E sendo assim, não poderíamos esquecer de gerar o seu par de chaves correspondente. Para isso, logado como usuário SUDO (comum às duas máquinas: local e remota), no controlador execute:

ssh-keygen -t rsa -b 4096
Figura 21.
ssh-copy-id [usuario_remoto]@[ip_ou_hostname_do_alvo]
Figura 22.
ssh user@machine
Figura 23.
[password]
Figura 24.
exit or logout
ansible -i awx/inventories/hosts -m ping all
Figura 25.
ansible-playbook -i awx/inventories/hosts awx/playbooks/add-sudo-no-prompt-or-ask.yml --ask-become-pass
Figura 26.
Figura 27. ANTES e DEPOIS¹
Figura 28. ANTES e DEPOIS²

REFERÊNCIAS:

https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

https://www.redhat.com/en/topics/automation/what-is-yaml

https://www.tutorialspoint.com/yaml/yaml_basics.htm

https://rollout.io/blog/yaml-tutorial-everything-you-need-get-started/

VICRLDA: dual-boot , pop!_os , gnome boxes , vpn checkpoint e novo workflow

Saudações terráqueos !!! Meu nome é VICRLDA-1-5-92 ... Sou um mensageiro intergaláctico, venho em paz e trago comigo um comunicado. Na verdade, trata-se de um sucinto relato sobre acontecimentos particulares ocorridos neste último mês e meio aqui na Terra, período no qual meu mestre e senhor (Victor, o grande) estava afastado e impossibilitado de deslocamento para vir lhes anunciar pessoalmente. Enfim, devaneios à parte, logo abaixo segue a transcrição da mensagem! Câmbio, desligo.

Olá pessoal ! Que bom revê-los e estar de volta após mais uma breve pausa! Não exatamente proposital, eu confesso, mas também não estava nos planos ficar tanto tempo sem postar nada. Quase 45 dias já se passaram desde o nosso último encontro, ocorrido em 09 de agosto. De lá pra cá, talvez a notícia mais importante (pelo menos pra mim) é que fui alçado e agora sou um especialista nível 03 no meu local de trabalho. Formalmente, e internamente, trata-se do setor de infraestrutura e operações, ou simplesmente setor de SUPORTE, como é o caso de muitas empresas aqui no Brasil. Redes, Banco de Dados, Segurança, Linux e Windows Server, são apenas alguns dos elementos que compõem e dão forma ao departamento de Infraestrutura de TI de uma organização. Usualmente, esse digamos “guarda-chuva”, está sob a tutela de um gerente que responde a um diretor técnico que recebe orientações do diretor-presidente. A nomenclatura varia um pouco, é claro, e outros protagonistas adicionais existem, coexistem, ou deixam de existir nesse organismo vivo chamado Governança Corporativa (estude COBIT 5 para saber mais!). Bom, e o que isso tem haver comigo? Não, não falo de você, estou perguntando a mim mesmo … rsrs! Esse reconhecimento enquanto profissional de TI só foi possível graças aos esforços com o Ansible, que dentro da empresa começou designado a mim como projeto piloto (de testes). E uma vez que apresentei os resultados inicias, muito positivos e relevantes, diga-se de passagem, foi dado o START para colocá-lo em PRODUÇÃO, com mais recursos e pessoal alocado.

No meio do caminho, enquanto trabalhava no projeto, utilizava como hospedeiro e sistema operacional principal da máquina o próprio Windows 10. Nada demais, ou contra, mas o sentimento que me acompanha já faz certo tempo, é que a “janela” da Microsoft não me satisfaz em termos de desempenho, velocidade e produtividade. Ainda mais quando se usa um hardware modesto a simples. Os maiores “pecados” estão concentrados principalmente no gerenciamento de memória e I/O. Tenho instalado 8 GB de RAM e HD convencional de 5400 rpm com um WINDOWS Limpo (fresh install, sem blotware dos fabricantes). E após um determinado período de tempo (semanas, dias, horas), especialmente se você assim como eu tem o costume de suspender/hibernar o PC ao invés de desligar toda vez, a configuração atual deixa de ser suficiente para rodar, testar, e trabalhar com diversas máquinas virtuais, mesmo estas colocadas em modo texto. O SO vai gargalhar, e verá seu uso de RAM chegar a 85/90 por cento da capacidade total. E o pior, boa parte sendo alocada para o Windows e seus incontáveis processos em segundo plano, e inúmeras atualizações pendentes, constantemente ignoradas no estado HOLD, mas que continuam ocupando espaço lá na escassa e suada memória RAM.

Somente então a partir daí que tomei a atitude de, não eliminá-lo, mas sim trocá-lo por um jogador de peso e mais experiente: Kernel Linux + Distro Pop_OS! ( … ) Quando o assunto é agilidade, ganho de tempo e mais fluidez no workflow de um sysadmin ou dev, incontestavelmente, LINUX > Windows … Ei pessoal, levem na esportiva, afinal é apenas uma opinião pessoal deste autor que vos escreve! Ok? Feito as pazes? Adiante então, vamos prosseguir! Meu conselho para você que se encaixa nessa descrição: faça dual-boot, instale qualquer distro de sua preferência (.deb ou .rpm), dê uma chance para o Linux e seja feliz, + rápido + tempo livre pra curtir a vida!!!!

Pois muito bem, caso tenha escolhido o Pop_OS! ou qualquer distro com o ambiente GNOME Shell, verifique na loja de aplicativos e procure por “Boxes” ou “GNOME Boxes”. Encurtando e simplificado bastante, o Boxes está para o VirtualBox assim como o VMware Player está para o VMware Workstation. Ou seja, todos eles são virtualizadores, contudo os primeiros são bem mais limitados de opções e muito mais restritos para ajustes finos de hardware. Então por que utilizá-lo? A primeira pergunta que vem a cabeça, correto? A resposta remonta ao ponto que mencionei mais cedo: produtividade. O GNOME Boxes, assim como tantas outras ferramentas/programas de software livre, apresentam um ás na manga quando se trata de Linux, opensource, enfim, de modo geral no comparativo com outros S.O.s disponíveis no mercado … Integração, meu caro amigo! Integração é a palavra-chave que resume perfeitamente essa relação: núcleo (kernel) < > sistema operacional < > pacotes (software). Tudo isso sai da fábrica quase configurado, ás vezes já pronto, e para todo resto o que falta é a distância de apenas um comando no terminal. Resumindo. Em outras palavras: os “meios” necessários para que um admin ou dev consiga desempenhar tarefas e atividades em diversos tipos de sistemas e ambientes, de forma simultânea, e tendo que optar como base um SO único/hospedeiro … Qualquer distribuição linux oferece enorme vantagem, sendo quase sempre a escolha mais indicada. Pois os ditos “meios”, que na verdade e na prática, são meras ferramentas que já estão presentes, ou rodam nativamente, ou ambos. Além disso, mostram benchmarks ultra rápidos, graças ao gerenciamento de memória e sistema de arquivos diferenciados.

Recapitulando a composição do meu novo workflow, temos: Linux Kernel 5.13.0 + Pop_OS! 21.04 + GNOME Boxes 40.2 + ( … ) Por último, mas não menos importante, o cliente VPN da Check Point Software Technologies Ltd. Uma empresa estadunidense de segurança cibernética com imenso portfólio de produtos, soluções e serviços voltados para a área. E assim, chegamos ao gran finale do dia de hoje … O que é uma VPN? Por que utilizar? Como instalar? Qual tipo estou usando? São perguntas a serem respondidas em outro momento, num futuro próximo.

Adeus, e até breve! 😉

https://www.kernel.org/

https://pop.system76.com/

https://wiki.gnome.org/Projects/GnomeShell

https://www.checkpoint.com/quantum/remote-access-vpn/