User Tools

Site Tools


ansible_manager_roles

This is an old revision of the document!


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
ansible_manager_roles.1753560543.txt.gz · Last modified: by wikiadm