Ansible 变量
playbook中的变量与在任何编程语言中使用变量非常相似。它帮助您使用并为变量分配一个值,然后在playbook中的任何地方使用该变量。可以在变量的值周围设置条件,并相应地在playbook中使用它们。
示例
- 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 - 跟在action标签后面的代码是要执行的任务。action是yaml中使用的Ansible关键字。
-
register - 使用register关键字注册动作的输出,并且Output是保存动作输出的变量名。
-
always - 再次是Ansible关键字,表示以下内容将始终执行。
-
msg - 显示消息。
变量的用法 – {{Output}}
这将读取变量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 是异常处理特定的关键字。
-
Block是代码写在的地方(在Unix机器上要执行的任何内容)。
-
如果块特性中写的命令失败,则执行将到达rescue块并被执行。如果在块特性下的命令没有错误,则不会执行rescue。
-
Always 在所有情况下都会被执行。
-
如果与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"
在这种情况下,当条件中提到test1变量等于时,Equals将被打印出来。 when 可以与逻辑OR和逻辑AND条件一起使用,就像所有的编程语言一样。
只需将test1变量的值从Hello Vivek更改为Hello World,然后查看输出结果。