Ansible - variáveis, tags e loops

Este é um complemento do post anterior sobre Ansible, veremos um pouco sobre o uso de variáveis, tags e implementação de loops.

Utilizando variáveis

Com o uso de variáveis, suas receitas de ansible podem ser configuradas em um só lugar. No exemplo a seguir temos um playbook para instalar o ruby, vamos implementar o uso de variáveis:

---
- name: Add the key used to Ruby pkg
  apt_key: url=http://apt.hellobits.com/hellobits.key state=present

- name: Add repos for Ruby install
  copy: src=hellobits.list dest=/etc/apt/sources.list.d/

- name: Install Ruby
  apt: name=ruby-2.1 update_cache=yes

- name: Install bundler
  command: gem install bundler --no-rdoc --no-ri

Na instalação do ruby queremos escolher o nosso repositório e fornecer a url para o apt_key, além disso queremos escolher a versão que será instalada.

Seguindo a organização da nossa configuração do ansible, criaremos um diretório chamado group_vars e dentro dele um arquivo chamado all:

$ mkdir group_vars
$ touch group_vars/all

A estrutura deverá ficar parecida com a seguinte:

├── hosts
├── group_vars
│   └── all
├── roles
│   ├── nginx
│   │   └── tasks
│   │       └── main.yml
│   └── ruby
│       └── tasks
│           └── main.yml
└── server.yml

Agora é possível atribuir valores a variáveis no arquivo all:

---
# Ruby variables
ruby_url: http://apt.hellobits.com/hellobits.key
ruby_version: ruby-2.1

Agora que temos as duas variáveis com os valores atribuídos, podemos chamá-las no playbook de instalação do ruby:

Dessa forma agora é possível alterar os valores das variáveis de vários playbooks em um só lugar: all.

Utilizando tags

Outro recurso interessante do ansible são as tags, com elas é possível executar tarefas de forma isolada ou ignorá-las. Ainda no playbook de instalação do ruby podemos adicionar uma tag e ver como funciona:

Agora podemos executar somente a tarefa de instalação do ruby:

$ ansible-playbook -i hosts server.yml --tags "ruby"

Ou podemos executar todas as tarefas menos a de instalação do ruby:

$ ansible-playbook -i hosts server.yml --skip-tags "ruby"

Implementando loops

Imagine que em um dos playbooks você precisa fazer a instalação de vários pacotes, o recurso de loops fornece a opção with_items onde podemos listar o nome dos pacotes que queremos instalar:

A variável item recebe um valor de with_items a cada iteração.

Finalizando

Ansible é uma ferramenta incrível e vale investir um pouco de tempo para conhecê-la melhor.

O @fnando vai falar um pouco sobre Ansible no Howto e breve creio que lance um curso sobre isso, fique ligado!

Happy Hacking ;)

Referências

Comentários