Ansible 变量基础
定义变量
Ansible 支持十几种定义变量的方式
这里我们仅介绍其中一部分变量,根据优先级排序
1 2 3 4 5 6 7
| Inventory 变量 Host Facts 变量 Register 命令执行结果变量 Playbook 文件里定义变量 Playbook 提示变量 变量文件 -e 命令行变量
|
Inventory 变量(在主机清单配置文件中定义变量)
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"
|