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_第1张图片 

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