1. 程式人生 > >【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']}}
  ...


原文

【Ansible】 Playbook 中的變數和引用

(出處: 樂維_一站式運維監控管理平臺)