簡體   English   中英

能干。 更新 hostvars 變量

[英]Ansible. Updating the hostvars variable

如果在 playbook 執行期間,我們更改了host_vars 中的主機文件(即添加了一個新變量),那么我們如何在當前執行 playbook 時在hostvars中獲取該變量? 當您再次運行它時,它會出現在hostvars 中

更新01:

這是一個例子,它不起作用(

任務Debug 3應該顯示test_1而不是VARIABLE IS NOT DEFINED!

- name: Test
  hosts: mon

  tasks:
  - name: Debug 1
    debug:
      var: hostvars.mon.test_1

  - name: Add vars for host_vars
    delegate_to: 127.0.0.1
    blockinfile:
      path: "{{ inventory_dir }}/host_vars/{{ inventory_hostname }}.yml"
      marker: "# {mark}: {{ item.key }}"
      block: |
        {{ item.key }}: {{ item.value }}
    with_dict:
    - {test_1: "test_1"}

  - name: Debug 2
    debug:
      var: hostvars.mon.test_1

  - name: Clear facts
    meta: clear_facts

  - name: Refresh inventory
    meta: refresh_inventory

  - name: Setup
    setup:

  - name: Debug 3
    debug:
      var: hostvars.mon.test_1

結果:

PLAY [Test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [mon]

TASK [Debug 1] *****************************************************************
ok: [mon] => {
    "hostvars.mon.test_1": "VARIABLE IS NOT DEFINED!"
}

TASK [Add vars for host_vars] **************************************************
changed: [mon -> 127.0.0.1] => (item={'key': 'test_1', 'value': 'test_1'})

TASK [Debug 2] *****************************************************************
ok: [mon] => {
    "hostvars.mon.test_1": "VARIABLE IS NOT DEFINED!"
}

TASK [Setup] *******************************************************************
ok: [mon]

TASK [Debug 3] *****************************************************************
ok: [mon] => {
    "hostvars.mon.test_1": "VARIABLE IS NOT DEFINED!"
}

PLAY RECAP *********************************************************************
mon                        : ok=6    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

重啟時:

PLAY [Test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [mon]

TASK [Debug 1] *****************************************************************
ok: [mon] => {
    "hostvars.mon.test_1": "test_1"
}

TASK [Add vars for host_vars] **************************************************
ok: [mon -> 127.0.0.1] => (item={'key': 'test_1', 'value': 'test_1'})

TASK [Debug 2] *****************************************************************
ok: [mon] => {
    "hostvars.mon.test_1": "test_1"
}

TASK [Setup] *******************************************************************
ok: [mon]

TASK [Debug 3] *****************************************************************
ok: [mon] => {
    "hostvars.mon.test_1": "test_1"
}

PLAY RECAP *********************************************************************
mon                        : ok=6    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

也許有一種方法可以在此過程中手動更改主機變量

您可以要求 Ansible 重新讀取庫存(包括 host_vars)。 一般來說,我會說即時更改庫存是一種代碼異味,但有效的情況很少。

- name: Refreshing inventory, SO copypaste
  meta: refresh_inventory

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM