playbook 变量
命令行传递变量
---
- hosts: '{{ hosts }}'
remote_user: '{{ user }}'
tasks:
- ...
比如上面的 playbook,我们可以这样传递{{hosts}}、{{user}}变量:
ansible-playbook release.yml --extra-vars "hosts=vipers user=starbuck"
在 Ansible1.2 中可以使用 JSON 数据来传递变量
--extra-vars '{"pacman":"mrs","ghosts":["inky","pinky","clyde","sue"]}'
在 Ansible1.3 中,可以通过@导入 JSON 文件来传递变量,也可以使用 YMAL 格式以命令行或者@
文件的方式导入
--extra-vars "@some_file.json
在剧本中定义变量
[root@localhost playbook]# vim crontab.yml
---
- hosts: all
vars:
- UpdataTimeJobName: "At 21:30 every day updateTime"
- UpdataTimeJobs: "/usr/sbin/ntpdate cn.pool.ntp.org >> /var/log/cron 2>&1"
tasks:
- name: Add Cron UpdataTime
cron: name={{ UpdataTimeJobName }} user=root minute=30 hour=21 job={{ UpdataTimeJobs }}
- name: Show Add Cron Information
debug: msg="Add Cron {{ UpdataTimeJobName }} Successful"
在文件中定义变量,剧本执行的时候引用变量
编写变量文件
[root@localhost playbook]# vim vars.yml
---
UpdataTimeJobName: "At 21:30 every day updateTime"
UpdataTimeJobs: "/usr/sbin/ntpdate cn.pool.ntp.org >> /var/log/cron 2>&1"
编写剧本:
[root@localhost playbook]# vim crontabVars.yml
---
- hosts: all
vars_files: #引用变量文件
- vars.yml
tasks:
- name: Add Cron UpdataTime
cron: name={{ UpdataTimeJobName }} user=root minute=30 hour=21 job={{ UpdataTimeJobs }}
- name: Show Add Cron Information
debug: msg="Add Cron {{ UpdataTimeJobName }} Successful"
将task的执行结果赋值给变量,相互传递变量
[root@localhost playbook]# vim register.yml
---
- hosts: all
gather_facts: no
tasks:
- name: register varlable
shell: hostname
register: info #将上调命令的执行结果赋值给info变量
- name: display varlable
debug: msg="{{ info.stdout }}" #输出信息,输出得到的info字典中的stdou值
register 接受传递变量
[root@localhost playbook]# vim register.yml
---
- hosts: all
gather_facts: no
tasks:
- name: register varlable
shell: hostname
register: info #将上调命令的执行结果赋值给info变量
- name: display varlable
debug: msg="{{ info.stdout }}" #输出信息,输出得到的info字典中的stdou值
debug: msg="{{ info.stdout_lines}}" #将得到的信息单行输出

定义在 Ansible 中的 hosts 和 groups 变量中
cat /etc/ansible/group_vars/server
vhost: test
vim file-book.yml
---
- hosts: server
tasks:
- name: create a virtual host file for {{ vhost }}
template: src=/etc/hosts dest=/tmp/{{ vhost }}
在 playbook 中指定
vim file-book.yml
---
- hosts: server
vars:
-vhost: test
tasks:
- name: create a virtual host file for {{ vhost }}
template: src=/etc/hosts dest=/tmp/{{ vhost }}
任意指定变量文件
cat /root/variables
vhost: test
vim file-book.yml
---
- hosts: server
vars_files:
- /root/variables
tasks:
- name: create a virtual host file for {{ vhost }}
template: src=/etc/hosts dest=/tmp/{{ vhost }}
交互方式获取变量值
vim file-book.yml
---
- hosts: server
vars_prompt:
- name: web
prompt: 'Please input the web server:'
private: no
tasks:
- name: concent of the file test
template: src=/root/test dest=/tmp/test
cat /root/test
{{web}}