Ansible - 变量


剧本中的变量与在任何编程语言中使用变量非常相似。它可以帮助您使用变量并将值分配给变量,并在剧本中的任何位置使用该变量。人们可以在变量值周围设置条件,并相应地在剧本中使用它们。

例子

- hosts : <your hosts> 
vars:
tomcat_port : 8080 

在上面的示例中,我们定义了一个变量名称tomcat_port并将值 8080 分配给该变量,并且可以在您的 playbook 中的任何需要的地方使用它。

现在参考共享的示例。以下代码来自角色之一 (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}}" 

这里,输出是使用的变量。

让我们看一下上面代码中使用的所有关键字 -

  • block - 执行给定块的 Ansible 语法。

  • name - 块的相关名称 - 用于日志记录并有助于调试所有块已成功执行的内容。

  • action - 操作标签旁边的代码是要执行的任务。该操作又是 yaml 中使用的 Ansible 关键字。

  • register - 使用 register 关键字注册操作的输出,输出是保存操作输出的变量名称。

  • 总是- 又是一个 Ansible 关键字,它声明下面的内容将始终被执行。

  • msg - 显示消息。

变量的使用 - {{输出}}

这将读取变量输出的值。此外,由于它在 msg 选项卡中使用,它将打印输出变量的值。

此外,您还可以使用变量的子属性。就像在检查 {{Output.changed}} 输出是否更改并相应地使用它的情况下一样。

Playbook 中的异常处理

Ansible 中的异常处理类似于任何编程语言中的异常处理。下面显示了 playbook 中异常处理的示例。

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" 

以下是异常处理的语法。

  • rescuealways是特定于异常处理的关键字。

  • 块是编写代码的地方(在 Unix 机器上执行的任何内容)。

  • 如果块功能内写入的命令失败,则执行到达救援块并被执行。如果阻止功能下的命令没有错误,则不会执行救援。

  • 在所有情况下总是被执行。

  • 所以如果我们拿java来比较的话,那么它就类似于try、catch和finally块。

  • 这里,Block类似于try块,你可以在其中编写要执行的代码,rescue类似于catch块always类似于finally

循环

下面的示例演示了 Ansible 中循环的用法。

任务是将所有 war 文件集从一个目录复制到 tomcat webapps 文件夹。

下面示例中使用的大部分命令之前已经介绍过。在这里,我们将重点关注循环的使用。

最初在“shell”命令中我们执行了 ls *.war。因此,它将列出该目录中的所有 war 文件。

该命令的输出保存在名为output 的变量中。

要循环,正在使用“with_items”语法。

with_items: "{{output.stdout_lines}}" --> output.stdout_lines 为我们提供逐行输出,然后我们使用 Ansible 的 with_items 命令循环输出。

附加示例输出只是为了让人们了解我们如何在 with_items 命令中使用 stdout_lines。

--- 
#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}}"

环形

积木

整个剧本被分成几个块。要执行的最小步骤被写在块中。在块中编写特定指令有助于隔离功能并在需要时通过异常处理来处理它。

上面的变量使用、异常处理和循环中介绍了块的示例。

条件句

当需要根据条件运行特定步骤时使用条件。

--- 
#Tsting 
- hosts: all 
   vars: 
      test1: "Hello Vivek" 
   tasks: 
      - name: Testing Ansible variable 
      debug: 
         msg: "Equals" 
         when: test1 == "Hello Vivek" 

在这种情况下,将打印 Equals,因为 test1 变量与 when 条件中提到的相等。与所有编程语言一样, when可以与逻辑 OR 和逻辑 AND 条件一起使用。

条件输出

只需将 test1 变量的值从 Hello Vivek 更改为 Hello World 并查看输出。

更改条件输出