====== Gerenciar Roles no Ansible ======
Crie uma Role de nome ''conf_base''
$ sudo ansible-galaxy role init conf_base
- Role conf_base was created successfully
$ sudo ansible-galaxy role list
# /etc/ansible/roles
- conf_base, (unknown version)
$ tree conf_base/
conf_base/
├── README.md
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
8 directories, 8 files
$ sudo cp -r ~/roles/conf-base/* conf_base/
$ sudo cp -r ~/roles/conf-base/*.* conf_base/
Conteúdo do diretório tasks:
* **main.yml:** Arquivo principal responsável em carregar os arquivos hosts.yml, packages.yml e users.yml.
* **hosts.yml:** Arquivo responsável pela padronização do arquivo /etc/hosts;
* **packages.yml:** Arquivo responsável pela instalação de pacotes base;
* **packages.yml:** Arquivo responsável pela padronização de usuários.
**Conteúdo do diretório meta:**
$ cat ~/roles/conf-base/meta/.galaxy_install_info
version: 1.0.0
$ cat ~/roles/conf-base/meta/main.yml
---
galaxy_info:
author: 4Linux DevOps
description: Configuracao Base de usuarios, pacotes e hosts
company: 4Linux
license: GPLv3
min_ansible_version: 2.9
platforms:
- name: Ubuntu
versions:
- focal
- name: EL
versions:
- 8
galaxy_tags:
- users
- packages
- hosts
dependencies: []
**Conteúdo do diretório tasks:**
$ cat ~/roles/conf-base/tasks/main.yml
---
- name: Padroniza arquivo /etc/hosts
import_tasks: hosts.yml
- name: Instala pacotes base
import_tasks: packages.yml
- name: Adiciona usuarios HelpDesk e DevOps
import_tasks: users.yml
$ cat ~/roles/conf-base/tasks/users.yml
---
- name: Adiciona usuario HelpDesk
user:
name: helpdesk
state: present
shell: /bin/bash
password: $1$Vf3jj9E3$DTibRWkRvP8wJqcDLJNzT1
tags: users
- name: Adiciona usuario DevOps
user:
name: devops
state: present
shell: /bin/bash
password: $1$Vf3jj9E3$DTibRWkRvP8wJqcDLJNzT1
tags: users
$ cat ~/roles/conf-base/tasks/hosts.yml
---
- name: Testando entradas no arquivo /etc/hosts
lineinfile:
path: /etc/hosts
line: "10.240.0.200 ansible-server.juntotelecom.com.br ansible-server"
register: etc_hosts_result
- name: Limpa o arquivo /etc/hosts
when: etc_hosts_result is changed
shell: echo '' > /etc/hosts
register: etc_hosts_clear
tags: hosts
- name: Configuracao do arquivo /etc/hosts
when: etc_hosts_clear is succeeded
lineinfile:
path: /etc/hosts
line: "{{ item.ip }} {{ item.fqdn }} {{ item.alias }}"
with_items:
- { ip: '127.0.0.1', fqdn: 'localhost.localdomain', alias: 'localhost' }
- { ip: '10.240.0.200', fqdn: 'ansible-server.juntotelecom.com.br', alias: 'ansible-server' }
- { ip: '10.240.0.201', fqdn: 'ub-vm-01.juntotelecom.com.br', alias: 'ub-vm-01' }
- { ip: '10.240.0.202', fqdn: 'ol-vm-02.juntotelecom.com.br', alias: 'ol-vm-02' }
- { ip: '10.240.0.203', fqdn: 'de-vm-03.juntotelecom.com.br', alias: 'de-vm-03' }
tags: hosts
$ cat ~/roles/conf-base/tasks/packages.yml
---
- name: Instala pacotes base no Debian/Ubuntu
when: ansible_os_family == "Debian"
apt:
name: "{{ packages_debian }}"
state: present
tags: packages
- name: Instala pacotes base no RedHat/CentOS 7
when:
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == "7"
yum:
name: "{{ packages_redhat }}"
state: present
tags: packages
- name: Instala pacotes base no RedHat/CentOS 8
when:
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == "8"
dnf:
name: "{{ packages_redhat }}"
state: present
tags: packages
**Conteúdo do diretório vars:**
$ cat ~/roles/conf-base/vars/main.yml
---
packages_debian:
- tzdata
- dnsutils
- bash-completion
- unzip
- bzip2
- htop
- vim
- mlocate
- nfs-common
packages_redhat:
- tzdata
- bind-utils
- unzip
- bzip2
- vim-enhanced
- mlocate
- htop
- nfs-utils
Para finalizar, é preciso criar um arquivo responsável em carregar a Role, e definir em qual máquina ela será aplicada.
$ cat ~/roles/playbooks/conf-base.yml
---
- hosts: all
roles:
- conf-base
$ sudo ansible-playbook --syntax-check ~/roles/playbooks/conf-base.yml
playbook: /home/vagrant/roles/playbooks/conf-base.yml
$ sudo ansible-playbook ~/roles/playbooks/conf-base.yml