Ansible - Variáveis
Variáveis nos manuais são very similarpara usar variáveis em qualquer linguagem de programação. Ele ajuda você a usar e atribuir um valor a uma variável e usá-lo em qualquer lugar do manual. Pode-se colocar condições em torno do valor das variáveis e, portanto, usá-las no manual.
Exemplo
- hosts : <your hosts>
vars:
tomcat_port : 8080
No exemplo acima, definimos um nome de variável tomcat_port e atribuiu o valor 8080 a essa variável e pode usar isso em seu manual sempre que necessário.
Agora, tomando uma referência do exemplo compartilhado. O código a seguir é de uma das funções (install-tomcat) -
block:
- name: Install Tomcat artifacts
action: >
yum name = "demo-tomcat-1" state = present
register: Output
always:
- debug:
msg:
- "Install Tomcat artifacts task ended with message: {{Output}}"
- "Installed Tomcat artifacts - {{Output.changed}}"
Aqui, a saída é a variável usada.
Vamos examinar todas as palavras-chave usadas no código acima -
block - Sintaxe compatível para executar um determinado bloco.
name - Nome relevante do bloco - é usado no registro e ajuda a depurar que todos os blocos foram executados com sucesso.
action- O código ao lado da tag de ação é a tarefa a ser executada. A ação novamente é uma palavra-chave Ansible usada no yaml.
register - A saída da ação é registrada usando a palavra-chave de registro e Output é o nome da variável que contém a saída da ação.
always - Novamente uma palavra-chave Ansible, ela afirma que a seguir sempre será executada.
msg - Exibe a mensagem.
Uso de variável - {{Output}}
Isso lerá o valor da variável Output. Além disso, como é usado na guia msg, ele imprimirá o valor da variável de saída.
Além disso, você também pode usar as subpropriedades da variável. Como no caso, verificar {{Output.changed}} se a saída foi alterada e, portanto, use-a.
Tratamento de exceções em manuais
O tratamento de exceções em Ansible é semelhante ao tratamento de exceções em qualquer linguagem de programação. Um exemplo do tratamento de exceções no manual é mostrado abaixo.
tasks:
- name: Name of the task to be executed
block:
- debug: msg = 'Just a debug message , relevant for logging'
- command: <the command to execute>
rescue:
- debug: msg = 'There was an exception.. '
- command: <Rescue mechanism for the above exception occurred)
always:
- debug: msg = "this will execute in all scenarios. Always will get logged"
A seguir está a sintaxe para tratamento de exceções.
rescue e always são as palavras-chave específicas para tratamento de exceções.
Bloco é onde o código é escrito (qualquer coisa a ser executada na máquina Unix).
Se o comando escrito dentro do recurso de bloco falhar, a execução atinge o bloco de resgate e é executado. Caso não haja erro no comando do recurso de bloqueio, o resgate não será executado.
Always é executado em todos os casos.
Portanto, se compararmos o mesmo com java, é semelhante a try, catch e finally block.
Aqui, Block é similar a try block onde você escreve o código a ser executado e rescue é similar a catch block e always é similar a finally.
rotações
Abaixo está o exemplo para demonstrar o uso de Loops no Ansible.
A tarefa consiste em copiar o conjunto de todos os arquivos war de um diretório para a pasta tomcat webapps.
A maioria dos comandos usados no exemplo abaixo já foi abordada anteriormente. Aqui, vamos nos concentrar no uso de loops.
Inicialmente no comando 'shell' executamos ls * .war. Portanto, ele listará todos os arquivos war no diretório.
A saída desse comando é obtida em uma variável chamada output.
Para fazer um loop, a sintaxe 'with_items' está sendo usada.
with_items: "{{output.stdout_lines}}" -> output.stdout_lines nos dá a saída linha por linha e então fazemos um loop na saída com o comando with_items de Ansible.
Anexar a saída de exemplo apenas para fazer entender como usamos stdout_lines no comando with_items.
---
#Tsting
- hosts: tomcat-node
tasks:
- name: Install Apache
shell: "ls *.war"
register: output
args:
chdir: /opt/ansible/tomcat/demo/webapps
- file:
src: '/opt/ansible/tomcat/demo/webapps/{{ item }}'
dest: '/users/demo/vivek/{{ item }}'
state: link
with_items: "{{output.stdout_lines}}"
Blocos
O livro de estratégias na sua totalidade é dividido em blocos. O menor passo a ser executado é escrito em bloco. Escrever a instrução específica em blocos ajuda a separar a funcionalidade e tratá-la com tratamento de exceções, se necessário.
O exemplo de blocos é abordado no uso de variáveis, tratamento de exceções e loops acima.
Condicionais
As condicionais são usadas quando é necessário executar uma etapa específica com base em uma condição.
---
#Tsting
- hosts: all
vars:
test1: "Hello Vivek"
tasks:
- name: Testing Ansible variable
debug:
msg: "Equals"
when: test1 == "Hello Vivek"
Nesse caso, Equals será impresso, pois a variável test1 é igual conforme mencionado na condição when. when pode ser usado com uma condição lógica OR e AND lógica como em todas as linguagens de programação.
Basta alterar o valor da variável test1 de Hello Vivek para dizer Hello World e ver a saída.