- Ansible 教程
- Ansible - 首页
- Ansible - 简介
- Ansible - 环境设置
- Ansible - YAML 基础
- Ansible - Ad hoc 命令
- Ansible - Playbook
- Ansible - 角色
- Ansible - 变量
- Ansible - 高级执行
- Ansible - 故障排除
- Ansible 有用资源
- Ansible - 快速指南
- Ansible - 有用资源
- Ansible - 讨论
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 关键字注册 action 的输出,Output 是保存 action 输出的变量名称。
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 机器上执行的任何内容)。
如果 block 功能内编写的命令失败,则执行将到达 rescue 代码块并执行它。如果 block 功能下的命令没有错误,则不会执行 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}}"
代码块
Playbook 总体上被分解成代码块。要执行的步骤的最小部分写在代码块中。将特定指令写入代码块有助于隔离功能,并在需要时使用异常处理来处理它。
变量用法、异常处理和循环中上面已经介绍了代码块的示例。
条件语句
条件语句用于根据条件运行特定步骤。
--- #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 并查看输出即可。