doina

一个小菜鸟运维工程师.

Ansible playbook 变量

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 playbook 变量》

定义在 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}}
点赞

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据