[toc]
Ansible的变量
变量概述
变量提供了便捷的方式来管理Ansible playbook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,
在其它地方或许会反复使用,那么如果讲此值设置为变量,然后再在其他的playbook中调用,会方便许多。如此一来还
方便维护,减少维护的成本。
定义变量的方式
- 通过命令行进行变量定义
- 在play文件中进行变量定义
- 通过Inventory主机信息文件中进行变量定义
变量的优先级
变量的读取优先级为:
命令行 > playbook文件 (vars_file>vars)>host_vars>group_vars> Inventory文件
变量定义
Inventory定义变量
1 2 3
| [web_group:vars] uid="438" user_name="xxx"
|
playbook中vars定义变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
- hosts: web_group vars: packages: - httpd - mariadb-server - php - php-mysql - php-pdo tasks: - name: Install httpd mariadb php Server yum: name: "{{ packages }}"
- hosts: web_group vars: - web_server: httpd - db_server: mariadb-server - php_server: - php - php-mysql - php-pdo tasks: - name: Install httpd mariadb php Server yum: name: - "{{ web_server }}" - "{{ db_server }}" - "{{ php_server }}"
|
使用vars_file定义变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
vim vars1.yml web_server: httpd vim vars2.yml db_server: mariadb-server
- hosts: web_group vars_files: ./vars1.yml tasks: - name: Install httpd mariadb php Server yum: name: "{{ web_server }}"
vim vars1.yml web_server: httpd vim cat vars2.yml db_server: mariadb-server
- hosts: web_group vars_file: - ./vars1.yml - ./vars2.yml - name: Install httpd mariadb php Server yum: name: - "{{ web_server }}" - "{{ db_server }}"
- hosts: web_group vars: - remote_ip: "{{ ansible_default_ipv4['address'] }}" - remote_hostname: "{{ ansible_fqdn }}" tasks: - name: Touch IP File file: path: /root/{{ remote_ip }} state: touch - name: Touch Hostname File file: path: /root/{{ remote_hostname }} state: touch
|
变量注册
为什么要用变量注册?
当absible的模块在运行之后,其实都会返回一些result结果,就像是执行脚本,我们有的时候需要脚本给我们一些return返回值,我们才知道,上一步是否可以执行成功,但是…默认情况下,ansible的result并不会显示出来,所以,我们可以把这些返回值’存储’到变量中,这样我们就能通过’调用’对应的变量名,从而获取到这些result,这种将模块的返回值,写入到变量中的方法被称为变量注册
register(注册变量)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| register debug
msg: var: verbosity:
- hosts: web_group tasks: - name: 查看nginx目录 输出结果注册为变量 shell: "ls -l /etc/nginx" register: xxx
- name: 获取注册变量值 nginx目录的返回值 debug: msg: "{{ xxx }}"
- hosts: web_group tasks: - name: 查看nginx目录 输出结果注册为变量 shell: "ls -l /etc/nginx" register: xxx
- name: 获取注册变量值 nginx目录的返回值 debug: msg: "{{ xxx.stdout_lines }}"
- hosts: web_group tasks: - name: 查看nginx目录 输出结果注册为变量 shell: "ls -l /etc/nginx" register: xxx
- name: 获取注册变量值 nginx目录的返回值 debug: msg: "{{ xxx.rc }}"
- hosts: web_group tasks: - name: 查看nginx目录 输出结果注册为变量 shell: "ls -l /etc/nginx" register: xxx
- name: 获取注册变量值 nginx目录的返回值 debug: msg: "{{ xxx.rc }}" - name: 安装nginx和php shell: cd /opt && yum localinstall -y *.rpm when: xxx.rc != 0
|
facts缓存
什么是facts缓存
Ansible facts是在被管理主机上通过Ansible自动采集发现的变量。facts包含每台特定的主机信息。
比如:被控端的主机名、IP地址、系统版本、CPU数量、内存状态、磁盘状态等等
facts使用场景
- 通过facts缓存检查CPU,来生成对应的nginx配置文件
- 通过facts缓存检查主机名,生成不同的zabbix配置文件
- 通过facts缓存检索物理机的内存大小来生成不通的mysql配置文件
facts基本用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| vim facts.yml - hosts: web_group tasks: - name: Get Host Info debug: msg: > Hostname "{{ ansible_fqdn }}" and IP "{{ ansible_default_ipv4.address }}"
vim facts.yml - hosts: web_group gather_facts: no tasks:
|
facts生成zabbix配置文件
1 2 3 4 5 6 7 8 9
| - hosts: web_group vars: - zabbix_server: 172.16.1.71 tasks: - name: copy zabbix agent conf template: src: ./zabbix_agentd.conf dest: /tmp/zabbix_agentd.conf
|
facts生成mysqld配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| - hosts: db_group tasks: - name: Install mysql server yum: name: mariadb-server state: present - name: copy mysql conf template: src: ./my.cnf dest: /etc/my.cnf
vim /etc/my.cnf [mysqld] basedir=/usr datadir=/var/lib/mysql/ socket=/var/lib/mysql/mysql.sock log_error=/var/log/mariadb/mariadb.log innodb_buffer_pool_size={{ ansible_memtotal_mb * 0.8 }}
|