- A+
如果您已经使用Python,Java,C,C ++或任何其他编程语言进行了一些编程,则变量不是无关紧要的。就像在编程语言中一样,Ansible中的变量用于存储值。
在Ansible中,变量提供了Playbook,模板和清单中急需的灵活性,我们将在本教程的后面看到。内置变量可用于提供系统信息,例如主机名,系统体系结构,接口等。变量还可用于替换字符串,也可以在循环中循环使用给定的一组值。
有效的变量名称由以下字符组成字母
- 字母
- 号码
- 下划线
- 以上任何两个或全部的组合
变量应始终以字母开头, 并且不应包含任何空间。
可接受的变量名示例包括:
- turntable
- turn_table
- turntable01
- turntable_01
以下名称不符合有效的变量名称
- turn table
- turn-table
- 01turntable
- 01
现在让我们看一下Ansible中变量的不同用例
Playbooks中的变量
如您所知,剧本是要在远程系统上执行的剧本或任务的集合。在剧本中,变量很容易确定如何执行任务。在剧本中为变量分配值非常简单明了。
首先调用vars关键字,然后调用变量名称,后跟值,如图所示。
--- - hosts: all vars: salutations: Hello guys! tasks: - name: Ansible Variable Basic Usage debug: msg: "{{ salutations }}"
在上面的手册中,变量名称是 salutations ,值是Hello world!运行playbook时,通过将变量放在花括号之间来访问剧本的值,如上所示。执行后,剧本会在终端上显示消息“ Hello guys ”。
数组变量
您可以使用数组并将其分配给变量,如以下语法所示:
vars:
arrayname:
– value1
– value2
例如,下面的剧本包含5个学生名字的数组,这些名字存储在一个名为学生的变量中。您可以通过索引访问学生的姓名(就像在其他任何编程语言的数组中一样)。例如,要使用数组语法[2]从数组列表中检索名称“ Arthur”,如下所示。
- hosts: all vars: students: - Mark - Melisa - Arthur - Kevin - Lisa tasks: - name: Ansible List variable Example debug: msg: "{{ students[2] }}"
带有字典的变量
在“数组”列表中,您可以使用构成我们称为字典列表的键值对来进一步定义每个条目。语法如下所示
vars:
arrayname:
dictionary_name1:
value1: itemvalue1
value2: itemvalue2
dictionary_name2:
value1: itemvalue1
value2: itemvalue2
使用前面的示例,我们可以在下面找到字典列表
- hosts: all vars: students: Mark: city: Melbourne address: 0045-0987-8642 Angela: city: Sydney address: 3456-7685-9087
库存文件中的变量
如果您拥有共享相似属性或值的不同主机系统,则可以定义我们所谓的组变量。这些用于分配所有主机共有的属性。
例如:
假设我们有2个Web服务器:webserver_1和webserver_2都在侦听端口443,其ntp服务器是us.pool.ntp.org。库存文件将如下所示:
[web_servers] webserver_1 webserver_2 [web_servers:vars] http_port=443 ntp_server=us.pool.ntp.org
在YAML 格式Playbooks文件中,其表示如下所示
web_servers: hosts: web_server_1: web_server_2: vars: http_port=80 ntp_server=us.pool.ntp.org
第一部分定义了远程主机,分别是webserver_1和webserver_1,而第二部分将两个服务器之间的公共属性分组在一起。这是应用多个主机系统通用变量的一种非常方便的方法。
主机和组变量
尽管您可以在清单文件中指定变量,但是标准做法不建议在清单文件中存储变量。这是主机和组变量文件进入的位置。
在主机变量文件中,该变量仅适用于清单文件中的一个主机系统。主机变量文件通常存储在host_vars目录中,该目录通常在/etc/ansible/路径中指定。
考虑下面的清单文件,其中我们有2个服务器,每个服务器使用不同的ntp服务器
[web_servers] webserver_1 ntp_server=uk.pool.ntp.org webserver_2 ntp_server=de.pool.ntp.org
不用在清单文件中指定变量ntp_server,而是在host_vars目录中创建2个主机变量文件,其文件名与主机系统的每个主机名匹配:
# vim /etc/ansible/host_vars/webserver_1 --- ntp_server=uk.pool.ntp.org # vim /etc/ansible/host_vars/webserver_2 --- ntp_server=de.pool.ntp.org
如果主机系统共享相同的值,请在group_vars目录中创建一个组变量文件 。组变量文件名应与主机组匹配
考虑下面的库存文件
[web_servers] webserver_1 webserver_2 [web_servers:vars] ansible_user=root ansible_port=22
如图所示,第二部分可以定义为group_vars目录中的文件。该目录应该在/ etc / ansible目录中。请记住,文件名应与组名相同。
# vim /etc/ansible/group_vars/web_servers --- ansible_user=root ansible_port=22
在这里,该变量将可供名为web_servers的组的所有主机访问。
Ansible Playbook中的特殊变量
另一类变量是特殊变量。这些是内置变量,用户无法设置,并且Ansible将始终覆盖它们。要获取唯一系统变量名称的列表,请运行以下命令
# ansible -m setup hostname
此类特殊变量的示例包括:
- ansible_all_ipv4_addresses
- ansible_architecture ,
- ansible_bios_version ,
- ansible_os_family ,
- ansible_distribution,
这将以JSON格式显示输出
# ansible -m setup localhost
凭借其灵活性和易用性,变量在游戏手册和清单文件中都起到了至关重要的作用。它们避免了不必要的重复,并使系统管理员的工作更加轻松。
- 安卓客户端下载
- 微信扫一扫
- 微信公众号
- 微信公众号扫一扫