Ansible主機變量、組變量的定義與組嵌套的使用,定義好了後在playbook中就可以引用這些變量了。可以給不同主機設置同樣的變量名,但是調用的結果卻是不一樣的,因爲Ansible是在每個主機上單獨運行的。
[apache] #定義主機組,名爲apache httpd1.linuxe.cn http_port=80 #定義了一個變量http_port httpd2.linuxe.cn [nginx] nginx1.linuxe.cn nginx2.linuxe.cn [webservers:children] #給webservers父組增加了兩個子組,其中:children是固定格式 apache nginx [webservers:vars] #給組定義變量,其下所有主機都生效,其中:vars是固定格式 ntp_server=ntp.linuxe.cn
在playbook中定義和調用變量
cat apache.yml - hosts: webservers remote_user: root vars: #開始聲明變量 - package: httpd #變量名與變量值 - service: httpd tasks: - name: install apache yum: name={{ package }} state=latest #要引用的變量用"{{ }}"囊括 - name: install configure file for httpd copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf - name: start httpd service service: enabled=true name={{ service }} state=started
除了可以引用自己定義的變量外,ansible還有很多變量是通過facts所獲取的,facts可以理解爲ansible所收集到的每個遠程主機的一些基本信息,如IPv4、IPv6、MAC地址、磁盤分區信息等。要引用facts變量只需要在變量名兩邊用雙花括號引用,多個變量使用逗號分隔
'{{ ansible_all_ipv4_addresses }}','{{ ansible_all_ipv6_addresses }}'
如何查看ansible facts信息?
通過ansible all -m setup可以查看facts信息,如圖紅框處每個引號內的就是默認變量
如何調用ansible facts信息?
- hosts: webservers2 remote_user: root tasks: - name: copy file copy: content='{{ ansible_all_ipv4_addresses }}' dest=/tmp/vars.ans
通常遠程主機上會有多塊硬盤,會按照sda、sdb、sdc的命名規則排列,當我們只需要查看sda這塊磁盤的大小如何實現?通過facts的{{size}}會將每個硬盤大小都取到而不是單獨的一塊,如何解決呢?只需要從facts中上級開始書寫即可,格式如下:
{{ansible_devices.sda.partitions.sda.size}}
原文地址:http://www.linuxe.cn/post-277.html