首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是假的。更新hostvars变量

是假的。更新hostvars变量
EN

Stack Overflow用户
提问于 2021-07-16 20:40:54
回答 1查看 1K关注 0票数 0

如果在执行剧本期间,我们更改了host_vars中的主机文件(即添加一个新变量),那么如何在当前执行剧本的hostvars中获得该变量?当您再次运行它时,它会出现在hostvars中。

更新 01:

举个例子,它不起作用(

任务Debug 3应该显示test_1而不是变量未定义!

代码语言:javascript
复制
- 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

结果:

代码语言:javascript
复制
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  

重新启动时:

代码语言:javascript
复制
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   

也许有一种方法可以在此过程中手动更改主机

EN

回答 1

Stack Overflow用户

发布于 2021-07-17 12:52:01

您可以要求Ansible重新阅读库存(包括host_vars)。一般说来,我会说,在飞行中改变库存是一种代码气味,但很少有有效的案例。

代码语言:javascript
复制
- name: Refreshing inventory, SO copypaste
  meta: refresh_inventory
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68415012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档