Ansible-Base-Variable-1

Ansible 变量基础

定义变量

Ansible 支持十几种定义变量的方式
这里我们仅介绍其中一部分变量,根据优先级排序

1
2
3
4
5
6
7
Inventory 变量
Host Facts 变量
Register 命令执行结果变量
Playbook 文件里定义变量
Playbook 提示变量
变量文件
-e 命令行变量

Inventory 变量(在主机清单配置文件中定义变量)

hosts 文件

1
cat ~/ansible/hosts
1
2
3
4
5
6
7
8
9
10
# 给某个主机定义变量
[test]
node1 myvar1="hello the world" myvar2="content"

# 给主机定义变量
[webserver]
node[3:4]

[webserver:vars]
yourname="jacob"

playbook 剧本参考

1
2
3
4
5
6
7
8
9
10
11
---
- hosts: test
tasks:
- name: create a file with var.
shell: echo {{ myvar1 ]} > /tmp/{{ myvar2 }}

- hosts: webserver
tasks
- name: create a user with var
user:
name: " {{ yourname }}"

Host Facts 变量(可以直接调用 ansible 收集的系统信息)

Ansible Facts(事实)是Ansible在受管主机上自动检测到的变量。而Facts组件是Ansible用于采集被管理机器设备信息的一个功能,采集的机器设备信息主要包含IP地址,操作系统,以太网设备,mac 地址,时间/日期相关数据,硬件信息等。

如何获得 facts 变量名称和信息呢?

1
2
3
4
5
# ansible 查看被控主机所有系统信息
ansible dev -m setup

# ansible 对系统信息进行过滤
ansible all -m setup -a "filter=ansible_mem*"

playbook 剧本参考

1
2
3
4
5
6
7
---
- hosts: test
tasks:
- name: Use facts info.
copy:
content: "{{ ansible_hostname }}:{{ ansible_bios_version }}"
dest: /tmp/facts.txt

Register 定义变量

register 语句可以将某个命令的执行结果保存到变量中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
- hosts: test
tasks:
- name: save shell result to a variable.
shell: hostname
# 将 shell 命令执行的结果定义为变量 myvar
register: myvar
- name: print the variable's value through debug 1
debug:
# 将 myvar 变量进行调用,msg 会显示多个值
msg: "{{ myvar }}"
- name: print the variable's value through debug 2
debug:
# 将 myvar 变量进行调用,只显示 msg 中的某一个值
msg: "{{ myvar.stdout }}"

Playbook 定义变量(使用 vars 关键词)

1
2
3
4
5
6
7
8
9
10
11
---
- hosts: test
vars:
iname: heal
# 注意密码必须是字符串,需要引号
ipass: '123456'
tasks:
- name: Use variables create user.
user:
name: "{{ name }}"
password: "{{ ipass | password hash('sha512') }}"

Playbook 提示变量(vars_prompt)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
- hosts: test
vars_prompt:
- name: iname
prompt:"请输入用户名"
# 回显用户名
private: no
- name: ipasswd
prompt:"请输入密码"
# 不显示密码
private: yes
tasks:
- name: Create a user
user: "{{ iname }}"
password: "{{ ipasswd | password_hash('sha512') }}"

Playbook 中用 vars_files 调用变量

单独的变量文件(variables.yml)

1
2
3
---
iname: cloud
ipass: '123456'

playbook 脚本执行

1
2
3
4
5
6
7
8
9
10
11
---
- hosts: test
# vars_files 调用变量文件
# 变量文件没有写路径,则在 ansible-playbook 执行时为当前路径
# 当然也可以写绝对路径
vars_files: variables.yml
tasks:
- name: create user
user:
name: "{{iname}}"
password: "{{ipass | password_hash('sha512')}}"

Ansible-playbook 使用 -e 参数定义变量

playbook 文件参考(command_var.yml)

1
2
3
4
5
6
7
---
- hosts: test
tasks:
- name: create user
user:
name: "{{ iname }}"
password: "{{ ipass | password hash('sha512') }}"

命令执行(-e + 参数)

1
ansible-playbook command_var.yml -e iname="beth" -e ipass="123456"
Contents
  1. 1. Ansible 变量基础
    1. 1.1. 定义变量
    2. 1.2. Inventory 变量(在主机清单配置文件中定义变量)
    3. 1.3. Host Facts 变量(可以直接调用 ansible 收集的系统信息)
    4. 1.4. Register 定义变量
    5. 1.5. Playbook 定义变量(使用 vars 关键词)
    6. 1.6. Playbook 提示变量(vars_prompt)
    7. 1.7. Playbook 中用 vars_files 调用变量
    8. 1.8. Ansible-playbook 使用 -e 参数定义变量
|