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.