自動化運維工具Ansible入門教程變量與facts

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變量1.png 

如何調用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章