📅  最后修改于: 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的值。同样,在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,然后查看输出即可。