Ansible - 变量

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

示例

- hosts : <your 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}}"

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

让我们一起浏览上面代码中使用的所有关键字 :

  • block : 用于执行给定块的Ansible语法.

  • name : 块的相关名称 - 用于记录并帮助调试所有块已成功执行的步骤.

  • action : action标记旁边的代码是要执行的任务.该操作再次是在yaml中使用的Ansible关键字.

  • register : 使用register关键字注册操作的输出,Output是保存操作输出的变量名.

  • always : 同样是一个Ansible关键字,它表明下面将始终执行.

  • msg : 显示消息.

变量的使用 -  {{Output}}  - >

这将读取变量Output的值.同样在msg选项卡中使用它时,它将打印输出变量的值.

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

Playbooks中的异常处理

异常处理在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"

以下是异常的语法处理.

  • 救援始终是特定于异常处理.

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

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

  • 始终全部执行

  • 因此,如果我们将它与java进行比较,那么它类似于try,catch和finally块.

  • 这里, Block 类似于 try block ,您可以在其中编写要执行的代码, rescue 类似到捕捉区块总是类似于最终.

循环

下面是演示Ansible中循环使用情况的示例.

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

以下示例中使用的大多数命令都已经涵盖过.在这里,我们将专注于循环的使用.

最初在'shell'命令中我们已经完成了ls * .war.因此,它将列出目录中的所有war文件.

该命令的输出在名为output的变量中获取.

要循环,正在使用'with_items'语法.

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

附加示例输出只是为了让我们理解我们如何使用stdout_lines 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}}"

整体中的剧本被分成块.要执行的最小步骤是以块为单位写入的.在块中编写特定指令有助于隔离功能并在需要时通过异常处理来处理它.

块的示例包含在变量用法,异常处理和上面的循环中.

条件

在需要根据条件运行特定步骤的情况下使用条件.

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

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

条件输出

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

更改了条件输出