第 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}}"
