一、变量概述
变量提供了便捷的方式来管理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

