📜  Ansible-变量

📅  最后修改于: 2020-11-02 03:14:43             🧑  作者: Mango


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

- hosts :  
vars:
tomcat_port : 8080 

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

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

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

让我们遍历以上代码中使用的所有关键字-

  • – Ansible语法执行给定块。

  • 名称-块的相关名称-这是在登录使用和调试,所有块都成功帮助。

  • 动作-动作标签旁边的代码是要执行的任务。动作再次是yaml中使用的Ansible关键字。

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

  • 始终-再次是Ansible关键字,它指出将始终执行以下内容。

  • msg-显示消息。

变量的用法-{{Output}}

这将读取变量Output的值。同样,在msg标签中使用它时,它将打印输出变量的值。

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

剧本中的异常处理

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

tasks: 
   - name: Name of the task to be executed 
      block: 
         - debug: msg = 'Just a debug message , relevant for logging' 
         - command:  
      
      rescue: 
         - debug: msg = 'There was an exception.. ' 
         - command: 

以下是异常处理的语法。

  • 救援始终是异常处理专用的关键字。

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

  • 如果写在块功能部件内的命令失败,则执行到达救援块并执行。如果在块功能下的命令中没有错误,则将不执行救援。

  • 在所有情况下始终执行。

  • 因此,如果我们将其与java进行比较,则类似于try,catch和finally块。

  • 在这里, Block类似于try块,您在其中编写要执行的代码, rescue类似于catch块,并且始终类似于finally

循环

下面是演示Ansible中Loops用法的示例。

任务是将所有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" 

在这种情况下,当test1变量等于when条件中提到的值时,将打印Equals。与所有编程语言中的逻辑或或逻辑与条件一起使用

条件输出

只需将Hello Vivek中的test1变量的值更改为Hello World,然后查看输出即可。

更改条件输出