Ansible - variáveis, tags e loops
20/05/2014Este é 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 ;)