【Ansible】 Playbook 中的变量和引用

Ansible中Playbook 中的变量和引用

Playbook 中的变量和引用
1.1 通过Inventory来定义host和group变量
说明:
1. host 变量只对当前host起作用
2. group 变量对组内的所有host起作用
示例Inventory定义
[test]
ansible1
ansible2
ansible3

[test:vars]
inventory_name=michael_chacki
示例playbook:
---
show vars
- name: test 1
   hosts: test
   gather_facts: false
   tasks:
    - name: the first task
        debug: msg="The hostname is {{inventory_hostname}} and the key is {{ key }}, the inventory_name is {{ inventory_name }}"

2.2 通过/etc/ansible下的文件来定义host和group变量
host变量定义步骤
新建文件夹test_vars
创建以hostname命名的文件
在步骤2中创建的文件中定义变量
group变量定义
新建文件夹test_vars
创建以groupname命名的文件
在步骤2中创建的文件中定义变量
变量引用
{{变量名}}
说用:
1. 创建的变量文件名必须是在inventory中存在的host或是group
2. 如果变量没有被覆盖,那么就可以引用到
3. 变量文件内容必须以YAML的格式编写

示例:
文件结构:
test_vars
└── test
test_vars
├── ansible1
├── ansible2
└── ansible3
定义变量:
---
group_key: test1
---
key: test-1
---
key: test-2
---
key: test-3
...
引用变量:
---
show_vars.yaml
- name: show the host ans group vars
   hosts: test
   gather_facts: false
   tasks:
    - name: show host vars
   debug: msg="The current host {{ inventory_hostname }}''key value is {{ key }}"


1.3 使用ansible-playbook中引入变量
1.3.1 在命令行定义变量传入
例如:ansible-playbook show_vars.yaml -e "key='test-1' group_key=test-2"
1.3.2 在命令行通过文件的方式传入,支持json和YAML
例如:ansible-playbook show_vars.yaml -e "var.yaml"
1.4 在playbook中通过vars定义变量
示例如下:
cat vars.yaml

name: show the host ans group vars
remote_user: root
hosts: tomcat
gather_facts: false
vars:
key: 'test-1'
group_key: 'test-2'
tasks:
  name: show host vars
  debug: msg="The current host {{ inventory_hostname }}''key value is {{ key }}"
  name: show group vars
  debug: msg="The current group {{ group_key }} ''group name is {{ group_key }
  ...
  Playbook 中的循环
1.5 通过vars_files来引用变量
说明
1.变量列表是列表形式
步骤
1.定义变量文件,yaml或是json格式
2.在playbook 中使用vars_files 引用变量文件
示例
cat vars.yaml

name: show the host ans group vars
remote_user: root
hosts: tomcat
gather_facts: false
vars:
key: 'test-1'
group_key: 'test-2'
vars_files:
  var.yaml
tasks:
  name: show host vars
  debug: msg="The current host {{ inventory_hostname }}''key value is {{ key }}"
  name: show group vars
  debug: msg="The current group {{ group_key }} ''group name is {{ group_key }}"
  ...
1.6 使用register 在task之间传递变量
功能:在不同的task之间传递变量
使用场景:一个task需要根据上一个task的变量来决定是否运行
定义步骤
1.在上一个任务运行完成后,使用register定义变量
2.当任务运行完成后会将运行结果保持到注册的变量中
3.返回的是一个字典格式的变量,可以通过python字典引用元素的方式引用
示例
cat  register vars

name: show register vars
hosts: tomcat
remote_user: root
gather_facts: false
tasks:
  name: register var
  shell: hostname
  register: test
  name: show var from task above
  debug: msg={{test['stdout']}}
  ...

  • 发表于 2022-07-14 16:31
  • 阅读 ( 3790 )
  • 分类:Ansible

0 条评论

请先 登录 后评论
乐维君
乐维君

397 篇文章

作家榜 »

  1. 乐维君 397 文章
  2. YOHOHO 14 文章
  3. 机灵小和尚 13 文章
  4. 我是一只小菜鸡 12 文章
  5. 细雨闲花 11 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章