一:主机变量和组变量
直接应用于主机的清单变量分为两大类:主机变量,应用于特定主机;以及组变量,应用于一个主机组或一组主机组中的所有主机。主机变量优先于组变量,但playbook中定义的变量的优先级比这两者更高。
若是要定义主机变量和组变量,一种方法是直接在清单文件中定义。
注意:
这种定义主机和组变量的方法比较早,但能看到在用,这是因为它将主机和主机组的所有清单信息和变量设置都放在了一个文件夹中。
使用目录填充主机和组变量
要定义主机和主机组的变量,您可以在与清单文件或playbook相同的工作目录中创建grou_vars和host_vars两个目录。这两个目录分别包含用于定义组变量和主机变量的文件。
重要:
建议的做法是使用host_vars和group_vars目录定义清单变量,而不直接在清单文件中定义它们
要定义servers组的组变量,需要创建名为grou[_vars/servers的YAML文件,然后该文件的内容将使用与playbook相同的语法将变量设置为值。
类似地,为了定义用于特定主机的主机变量,需要在host_vars 目录中创建名称与主机匹配的文件来存放主机变量。
注意:
Ansible会查找与清单文件和playbook文件相对的host_vars和group_vars子目录。
如果您的清单和playbook恰好在同一目录中,则比较简单,Ansible可以在相应目录中查找这两个子目录。如果您的清单和playbook在不同目录中,则Ansible需要从两个位置查找host_vars和group_vars子目录。playbook子目录的优先级更高。
从命令行覆盖变量
清单变量可被playbook中这值得变量覆盖,这两种变量又可通过在命令行中传递参数到ansible-navigator run命令来覆盖。在命令行上设置的变量成为额外变量。
当您需要覆盖一次性运行的 playbook的变量的已定义值时,额外变量非常有用。
将字典用作变量
除了将与同一元素相关的配置数据分配到多个变量外,管理员也可以使用字典。字典是一个包含键值对的数据结构,其中的值也可以是字典。
重要:
如果键名称与 Python 方法或属性的名称 (如 discard、copy、add等) 相同,点表示法可能会造成问题。使用方括号表示法有助于避免冲突和错误。
两种语法都有效,但为了方便故障排除,红帽建议在任何给定Ansible项目的所有文件中一致地采用一种语法。
使用已注册变量捕获命令输出
您可使用register 语句来捕获命令的输出或有关模块执行的其他信息。输出会保存到一个变量中,稍后在 playbook中可用于调试用途或者达成其他目的,