本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • Ansible
  • 自动化运维之Ansible(5)playbook的变量与facts信息

自动化运维之Ansible(5)playbook的变量与facts信息

发布:TangLu2020-3-12 16:18分类: Ansible 标签: 自动化运维 ansible playbook

在Ansible中支持设置主机变量、组变量,变量支持嵌套使用,定义好了变量可以在playbook中引用。由于Ansible是在每个主机上单独运行命令,所以不同的主机去调用同样的变量,也可以取到不同的值得,这样进行一些配置就更灵活合理。

一、Ansible变量定义方法

方法1:在/etc/ansible/hosts文件中定义变量

[apache]  #定义主机组,名为apache
httpd1.linuxe.cn  http_port=80  #定义了一个变量http_port
httpd2.linuxe.cn  http_port=8080  #为另一个主机定义变量
[nginx]
nginx1.linuxe.cn
nginx2.linuxe.cn
[webservers:children]  #给webservers父组增加了两个子组,其中:children是固定格式
apache
nginx
[webservers:vars]  #给webservers这个组中的主机定义一个统一的变量,:vars是固定语法
ntp_server=ntp.linuxe.cn


方法2:在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


方法3:ansible-playbook命令行指定变量,如果变量名冲突的话,命令行变量优先于配置文件中的变量

ansible-playbook -e 'package=httpd' app.yml  #如果文件中没有配置vars,可以用-e来指定


二、Ansible的facts信息

除了可以引用自己定义的变量外,Ansible还有很多变量是通过facts所获取的,facts可以理解为Ansible所收集到的每个远程主机的一些基本信息,如IPv4、IPv6、MAC地址、磁盘分区信息等。facts信息通过setup模块可以进行查看

ansible webserver -m setup



如图红框处每个引号内的就是默认变量,使用双花括号可以引用facts变量ansible变量1.png 


示例:调用ansible facts变量

- hosts: webservers
  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}}


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《自动化运维之Ansible(5)playbook的变量与facts信息
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-277.html  [生成短网址]

已有 0/5871 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~