Ansible – 变量
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 – 动作标签旁边的代码是要执行的任务。动作再次是 yaml 中使用的 Ansible 关键字。
-
register – 使用 register 关键字注册动作的输出,输出是保存动作输出的变量名称。
-
always – 同样是一个 Ansible 关键字,它声明下面将始终执行。
-
msg – 显示消息。
变量的使用 – {{Output}}
这将读取变量输出的值。同样在 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"
以下是异常处理的语法。
-
rescue和always是特定于异常处理的关键字。
-
块是编写代码的地方(任何要在 Unix 机器上执行的东西)。
-
如果写入块功能的命令失败,则执行到达救援块并执行。如果块功能下的命令没有错误,则不会执行救援。
-
在所有情况下总是被执行。
-
所以如果我们和java比较一下,那么就类似于try、catch和finally块了。
-
这里,Block类似于try 块,您可以在其中编写要执行的代码,而rescue类似于catch 块,并且始终类似于finally。
循环
下面是演示 Ansible 中 Loops 用法的示例。
任务是将一组所有战争文件从一个目录复制到 tomcat webapps 文件夹。
以下示例中使用的大多数命令之前已经涵盖。在这里,我们将专注于循环的使用。
最初在“shell”命令中我们已经完成了 ls *.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 并查看输出。