如何使用Ansible变量和Facts(8)
我们在这个Ansible系列文章中已经提到了变量,只是为了让您稍稍慢一点。与许多编程语言一样,变量本质上是表示值的键。
Working-with-Ansible-Variables-and-Facts-8
什么构成有效变量名?
变量名包括字母,数字,下划线或者2个或者一律的混合。但是,请记住,变量名必需始终以字母开头,并且不能包含空格。
让我们看少量有效和不可接受的变量名的示例:
有效的变量名示例:
football foot_ballfootball20 foot_ball20无效的变量名称示例:
foot ball20 foot-ball让我们探讨变量类型:
1.剧本变量
剧本变量非常简单明了。要在剧本中定义变量,只要在写入带有缩进的变量之前使用关键字vars。
要访问变量的值,请将其放在带引号的双大括号之间。
这是一个简单的剧本示例:
- host: all vars: greeting: Hello World! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"在上述剧本中,greeting变量由值Hello world!代替。当剧本运行时,该剧本仅打印消息Hello world!
Ansible中的Playbook变量
此外,您可以具备一个列表或者变量数组,如下所示:
下面的剧本显示了一个名为continents的变量。该变量包含5个不同的值-大洲名称。使用索引0作为第一个变量可以轻松访问这些值中的每一个。
以下剧本的示例检索并显示Asia(索引1)。
- hosts: all vars: continents: - Africa - Asia - South America - North America - Europe tasks: - name: Ansible List variable Example debug: msg: "{{ continents [1] }}"
Ansible中的变量数组
变量列表的结构相似,如下所示:
vars: Continents: [Africa, Asia, South America, North America, Europe]要列出列表中的所有项目,请使用with_items 模块。这将遍历数组中的所有值。
- hosts: all vars: continents: [Africa, Asia, South America, North America, Europe] tasks: - name: Ansible array variables example debug: msg: "{{ item }}" with_items: - "{{ continents }}"
列出Ansible所有数组变量
Ansible变量的另一种类型是dictionary (字典)变量。
剧本还支持dictionary 变量。要定义dictionary 变量,只要在dictionary 变量名称下方标识键值对就可。
hosts: switch_f01vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2在上面的示例中,vlans是字典变量,而id和port是键值对。
hosts: switch_f01vars: http_port: 8080 default_gateway: vlans: id: 10 port: 20 tasks: name: Configure default gateway system_configs: default_gateway_ip: “{{ default_gateway }}“ name: Label port on vlan 10 vlan_config: vlan_id: “{{ vlans[‘id’] }}“ port_id: 1/1/ {{ vlans[‘port’] }}对于port_id,由于我们以文本而不是变量开头,所以用花括号将引号引起来是没有必要的。
2.特殊变量
Ansible提供了可在Jinja2模板和剧本中引用但不能由客户更改或者定义的预约义变量的列表。
总的来说,Ansible预约义变量的列表称为Ansible facts,并且在执行剧本时会收集这些** facts**。
要获取所有Ansible变量的列表,请使用Ansible ad-hoc命令中的setup模块,如下所示:
# ansible -m setup hostname这将以JSON格式显示输出,如下所示:
# ansible -m setup localhost
列出Ansible变量
从输出中,我们可以看到Ansible特殊变量的少量示例包括:
ansible_architectureansible_bios_dateansible_bios_versionansible_date_timeansible_machineansible_memefree_mbansible_os_familyansible_selinux还有许多其余Ansible特殊变量,这些只是少量示例。
这些变量可以在Jinja2模板中使用,如下所示:
<html><center> <h1> The hostname of this webserver is {{ ansible_hostname }}</h1> <h3> It is running on {{ ansible_os_family}}system </h3></center></html>3.Inventory变量
最后,在列表中,我们有Ansible Inventory变量。清单是INI格式的文件,其中包含要由Ansible管理的所有主机。
在清单中,您可以将变量分配给主机系统,而后在剧本中使用它。
[web_servers]web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080以上内容可以在Playbook YAML文件中表示,如下所示:
--- web_servers: web_server_1: ansible_user=centos http_port=80 web_server_2: ansible_user=ubuntu http_port=8080假如主机系统共享相同的变量,则可以在清单文件中定义另一个组,以减少繁琐的工作并避免不必要的重复。
例如:
[web_servers]web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80上面的结构可以是:
[web_servers]web_server_1web_server_2[web_servers:vars]ansible_user=centoshttp_port=80在剧本YAML文件中,将按如下所示进行定义:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80Ansible Facts
在运行剧本时,Ansible要做的第一项任务是执行设置任务。我确定您肯定遇到了这样的输出:
TASK: [Gathering facts] *********Ansible facts只不过是系统属性或者有关您已连接到的远程节点的信息。这些信息包括系统架构,操作系统版本,BIOS信息,系统时间和日期,系统正常运行时间,IP地址以及硬件信息,仅举几例。
要获取有关任何系统的facts,只要使用安装模块,如下面的命令所示:
# ansible -m setup hostname例如:
# ansible -m setup database_server这将以JSON格式打印出大量数据,如下所示:
Ansible获取系统的facts
Ansible facts对于帮助系统管理员执行哪些操作非常方便,例如,取决于操作系统,他们能够知道需要安装哪些软件包以及如何配置它们,等等。
自己设置facts
你能否也知道你可以创立自己的自己设置facts,可以由Ansible收集?是的,你可以。那么你如何去做呢?让我们一起来看看。
第一步是在受管或者远程节点上创立/etc/ansible/facts.d目录。
在此目录中,创立带有.fact扩展名的文件。当剧本在Ansible控制节点上运行时,此文件将返回JSON数据,其中包括在剧本运行后Ansible检索到的其余facts。
这是一个名为date_time.fact的自己设置facts文件的示例,该文件检索日期和时间。
# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact在其中增加以下行。
#!/bin/bashDATE=`date`echo "{\"date\" : \"${DATE}\"}"保存并退出文件,现在分配执行权限:
# chmod +x /etc/ansible/facts.d/date_time.fact现在,我在Ansible控制节点上创立了一个名为check_date.yml的剧本。
---- hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}将facts文件追加到ansible_local变量。该ansible_local存储所有自己设置facts。
现在运行剧本,观察保存在facts文件中的Ansible检索信息:
# ansible_playbook check_date.yml
创立Ansible自己设置facts
总结
在本教程中,我们学习了在Ansible中如何使用变量、facts,以及有效的变量名规范,常见的几种变量和自己设置facts,结合变量的使用。
PS:本文来自翻译,文中内容有所改动,并非原文所译。
原文链接:https://www.tecmint.com/ansible-variables-and-facts
扫码关注
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 如何使用Ansible变量和Facts(8)