第 6 章 Playbook变量定义与使用
第 6 章 Playbook变量定义与使用
变量可以通过以下6种方法进行定义:
1.命令行
2.在Inventory中定义
3.在Playbook中定义
4.在Roles中定义
5.注册变量(register)
6.系统信息变量(facts)
1.命令行 引入变量
创建一个playbook脚本
#var.yml --- - hosts: abc gather_facts: no remote_user: root tasks: - name: test var debug: msg: "{{ work_dir }}"
通过命令传入变量参数:传入变量使用-e参数:
[root@CentOS7 test]# ansible-playbook var.yml -e work_dir=/usr/local
PLAY [abc] ************************************************************************************************************ TASK [test var] ******************************************************************************************************* ok: [142.4.123.13] => { "msg": "/usr/local" } ok: [47.241.90.203] => { "msg": "/usr/local" }
2.在Inventory中定义
在之前主机清单那节中演示过添加变量,已下仅作为回顾
主机清单变量引用
单个主机变量引用 http_port=80
例如:
[web]
192.168.0.13 ansible_ssh_user=root ansible_ssh_pass=123.com http_port=80
192.168.0.14 ansible_ssh_user=root ansible_ssh_pass=123.com
输出变量:
[root@ansible~]# ansible 192.168.0.13 -a "echo {{http_port}}"
整个主机组变量引用(在主机组web的基础上定义)
方法一:在主机清单中直接定义:
[web:vars]
http port= 8080
server_name=www.ctnrs.com
输出变量:
[root@ansible~]# ansible web -a "echo {{http_port}}"
192.168.0.13 | SUCCESS | rc=0 >> 8080 192.168.0.14 | SUCCESS | rc=0>> 8080
[root a ansible~] # ansible web -a "echo{{server_name}}"
192.168.0.13 | SUCCESS | rc=0 >> www.ctnrs.com 192.168.0.14 | SUCCESS | rc=0>> www.ctnrs.com
方法二:在ansible下创建目录group_vars:
mkdir /etc/ansible/group_vars
vim /etc/ansible/group_vars/web.yml (文件名需要跟组名相同)
http_port: 8080
server_name: www.longtao.vip
注意:冒号后有空格再跟参数。
3.在Playbook中定义
示例:
--- - hosts: abc gather_facts: no remote_user: root vars: - work_dir: /usr/local - nginx_version: 1.15 tasks: - name: test var debug: msg: "{{ work_dir }}/nginx{{nginx_version}}"
效果:
[root@CentOS7 test]# ansible-playbook var.yml
PLAY [abc] ************************************************************************************************************ TASK [test var] ******************************************************************************************************* ok: [142.4.123.13] => { "msg": "/usr/local/nginx1.15" } ok: [47.241.90.203] => { "msg": "/usr/local/nginx1.15" }
4.在Roles中定义
后面再讲roles使用时会单独 讲
5.注册变量(register)
将某一个执行某个任务的结果保存到变量中,这样能够动态获取一个变量。
示例:获取时间并生成目录
--- - hosts: abc gather_facts: no remote_user: root tasks: - name: register var command: date +"%F_%T" register: datetime - name: create dir file: dest: "/tmp/{{datetime.stdout}}" state: directory
需注意你定义的注册变量内会有很多值,这里使用datetime.stdout只是其中一个值,
使用debug: msg={{datetime}} 可以输出全部值如下:
ok: [142.4.123.13] => { "msg": { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": true, "cmd": [ "date", "+%F_%T" ], "delta": "0:00:00.003659", "end": "2021-08-18 23:16:26.303546", "failed": false, "rc": 0, "start": "2021-08-18 23:16:26.299887", "stderr": "", "stderr_lines": [], "stdout": "2021-08-18_23:16:26", "stdout_lines": [ "2021-08-18_23:16:26" ] } }
6.系统信息变量(facts)
注意如果playbook脚本中需要定义gather_facts启用
gather_facts: yes
系统提供了哪些系统信息变量通过setup模块查看:
ansible -i /etc/ansible/hosts web -m setup
提供一个简单示例:
--- - hosts: web gather_facts: yes remote_user: root tasks: - name: get hostname debug: msg="主机名:{{ansible_nodename}}" - name: get ipv4 debug: msg="IPv4:{{ansible_all_ipv4_addresses}}" - name: get ipv6 debug: msg="IPv6:{{ansible_all_ipv6_addresses}}" - name: get mem debug: msg="内存:{{ansible_memory_mb.real}}" - name: get dns debug: msg="DNS:{{ansible_dns.nameservers}}"