Ruby

23 de Fevereiro de 2024 - @Walmir Neto


Ontem mostrei como instalar e como funciona o Ansible ([Usando Ansible para instalar dependências no seu server](https://walmir.notion.site/Usando-Ansible-para-instalar-depend-ncias-no-seu-server-98c77645352e42e188b23bdb4517d008)), hoje vou aplicar no projeto ‣ onde faço meus testes… Sem delongas, hoje o passo a passo vai bem rapidão

Passo a passo

Primeiro arquivo é o ansible/ansible.cfg que serve para setar o arquivo de hosts

[defaults]
inventory = hosts

Como a gente disse que o nosso invetory é o arquivo hosts que nos dirá quais os servidores, só que vamos criar-los usando tofu para isso vamos usar local_file resource

Para isso precisamos criar o tofu/local_files.tf

resource "local_file" "ansible_inventory" {
  filename = "../ansible/hosts"
  content = templatefile("templates/ansible/hosts.tftpl", {
    webservers = [aws_instance.demo_instance.public_ip]
  })
}

Na linha 3 temos arquivo de template templates/ansible/hosts.tftpl que também precisamos criar-lo

[webserver]
%{ for webserver in webservers ~}
${webserver}
%{ endfor ~}

[all]
[all:vars]
ansible_user=ubuntu

E já que o ansible/hosts está sendo gerado e de bom tom colocar-lo no .gitignore

# .gitignore
 !/coverage/.keep
+
+# Ansible
+#
+/ansible/hosts

Agora é só roda:

cd tofu
tofu validate # to validate if code is valid
tofu plan # to check if everything is ok
tofu apply -auto-approve # DON'T USE `-auto-approve` if you're not sure 

Próximos passos é criar os comando que o ansible vai rodar na(s) máquina(s). O primeiro é o ansible/roles/update-system/tasks/main.yaml que atualiza o ubuntu

# sudo apt update -y
- name: Update apt packages
  apt:
    update_cache: yes
    force_apt_get: yes
    cache_valid_time: 3600
  tags:
    - system

# sudo apt upgrade -y
- name: Upgrade all packages on servers
  apt:
    upgrade: dist
    force_apt_get: yes
    cache_valid_time: 3600
  tags:
    - system

# sudo apt autoclean
- name: Remove useless apt packages from the cache
  apt:
    autoclean: yes
  tags:
    - system

# sudo apt autoremove
- name: Remove dependencies that are no longer required
  apt:
    autoremove: yes
  tags:
    - system

O próximo é o de instalar o docker ansible/roles/install-docker/tasks/main.yaml

- name: Set up the repository
  apt:
    name:
      - ca-certificates
      - curl
      - gnupg
      - lsb-release
    state: present
    update_cache: yes

- name: Install apt key
  apt_key:
      url: <https://download.docker.com/linux/ubuntu/gpg>
      state: present

- name: Add Docker Repository
  apt_repository:
      repo: deb <https://download.docker.com/linux/ubuntu> focal stable
      state: present

- name: Install Docker Engine
  apt:
    name:
      - docker-ce
      - docker-ce-cli
      - containerd.io
    state: present

- name: install docker-compose
  apt:
    name: docker-compose
    state: present