一、变量概述
变量提供了便捷的方式来管理Ansible playbook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,在其它地方或许会反复使用,那么如果讲此值设置为变量,然后再在其他的playbook中调用,会方便许多。如此一来还方便维护,减少维护的成本。
二、定义变量的方式
1.通过命令行进行变量定义
[root@m01 base]# cat mkdir.yml - hosts: nfs_client tasks: - name: Create Backup DIR file: path: /tmp/{{ web_server }} state: directory #命令行指定变量的值 [root@m01 base]# ansible-playbook mkdir.yml -e "web_server=commond" #远端查看文件 [root@m01 base]# ansible 'all' -m shell -a 'ls /tmp/' #指定多个变量 [root@m01 base]# cat mkdir.yml - hosts: nfs_client tasks: - name: Create Backup DIR file: path: /tmp/{{ web_server }} state: directory - name: Create db Dir file: path: /tmp/{{ db_server }} state: directory [root@m01 base]# ansible-playbook mkdir.yml -e "web_server=commond" -e "db_server=mysql"
2.在play文件中进行变量定义
- name: ensure a list of packages installed yum: name: "{{ packages }}" vars: packages: - httpd - httpd-tools
3.通过Inventory主机信息文件中进行变量定义
配置主机清单
[root@m01 ~]# vim /etc/ansible/hosts [web_group] web01 ansible_ssh_pass='1' web02 ansible_ssh_pass='1' web03 ansible_ssh_pass='1' [db_group] db01 ansible_ssh_pass='1' db02 ansible_ssh_pass='1' [web_group:vars] web_server=nginx [nfs_client:children] db_group web_group [nfs_client:vars] web_server=http
调用变量
[root@m01 base]# vim mkdir.yml - hosts: nfs_client tasks: - name: Create Backup DIR file: path: /tmp/{{ web_server }} state: directory
查看创建目录
[root@m01 base]# ansible 'all' -m shell -a 'ls /tmp/'
注意:
主机组定义的变量优先级比整合组调用的变量优先级高
先读取整合组的变量,后读取组的变量,则组的变量将覆盖整合组的变量
4.通过vars_files定义变量
- hosts: web03 vars_files: - /project/base/vars1.yml - ./vars2.yml tasks: - name: Install WEB Server yum: name: "{{ web_server }}" state: present - name: Install DB Server yum: name: "{{ db_server }}" state: present
5.通过host_vars和group_vars定义变量
#创建主机变量的目录,不能改名字 [root@m01 base]# mkdir host_vars #目录下的名字要与主机清单里面主机名相同 [root@m01 base]# vim host_vars/db01 #调用变量 [root@m01 base]# vim mkdir.yml - hosts: nfs_client tasks: - name: Create Backup DIR file: path: /tmp/{{ web_server }} state: directory
三、变量注册
当absible的模块在运行之后,其实都会返回一些result结果,就像是执行脚本,我们有的时候需要脚本给我们一些return返回值,我们才知道,上一步是否可以执行成功,但是…默认情况下,ansible的result并不会显示出来,所以,我们可以把这些返回值’存储’到变量中,这样我们就能通过’调用’对应的变量名,从而获取到这些result,这种将模块的返回值,写入到变量中的方法被称为变量注册
变量注册配置
[root@m01 ~]# vim status.yml - hosts: web01 tasks: - name: Install Httpd Server yum: name: httpd - name: Check httpd Status shell: systemctl is-active httpd ignore_errors: yes register: check_httpd - name: Http Restart systemd: name: httpd state: restarted when: check_httpd.rc == 0 - name: Http Start systemd: name: httpd state: started when: check_httpd.rc != 0
四、facts缓存
Ansible facts是在被管理主机上通过Ansible自动采集发现的变量。facts包含每台特定的主机信息。比如:被控端的主机名、IP地址、系统版本、CPU数量、内存状态、磁盘状态等等。
setup模块获取的信息都是因为 facts缓存
1.facts使用场景
1.通过facts缓存检查CPU,来生成对应的nginx配置文件
2.通过facts缓存检查主机名,生成不同的zabbix配置文件
3.通过facts缓存检索物理机的内存大小来生成不通的mysql配置文件
综上所述的Ansible facts类似于saltstack中的grains对于做自动化的小伙伴是非常有用滴。
2.关闭facts
#如果使用ansible内置变量的话,不能关闭facts缓存 [root@m01 base]# vim mkdir.yml - hosts: nfs_client #gather_facts: false tasks: - name: Create Backup DIR file: path: /opt/{{ ansible_fqdn }} state: directory #如果不使用ansible内置变量的话,关闭facts会提高ansible管理其他机器的速度 [root@m01 base]# vim mkdir.yml - hosts: nfs_client gather_facts: false tasks: - name: Create Backup DIR file: path: /opt/{{ web_server }} state: directory
3.一般配置
[root@m01 base]# vim redis.conf bind {{ ansible_default_ipv4['address'] }} [root@m01 base]# cat conf.yml - hosts: all tasks: - name: Config Redis Conf template: src: ./redis.conf dest: /tmp/ #远端查看 [root@web01 tmp]# cat redis.conf bind 10.0.0.7