运行 playbook 时将主机插入到 group_vars 中

问题描述 投票:0回答:1

如何将 playbook 中的

host1
设置为 group_vars
database
已运行?

谢谢

variables ansible
1个回答
0
投票

简短的答案是:ansible.builtin.add_host

但是,很高兴知道这一更改不会影响当前的游戏。例如,给定库存

shell> cat hosts
[database]
host2
host3

group_vars

shell> cat group_vars/database/main.yml 
test_var: database

以下播放

- name: Play 1
  hosts: database

  tasks:

    - debug:
        var: groups
      run_once: true

    - debug:
        var: test_var

符合预期(删节)

TASK [debug] ***
ok: [host2] => 
  groups:
    all:
    - host2
    - host3
    database:
    - host2
    - host3
    ungrouped: []

TASK [debug] ***
ok: [host2] => 
  test_var: database
ok: [host3] => 
  test_var: database

如果将主机 host1 添加到组 database

    - add_host:
        name: host1
        groups: database

添加的主持人会立即在群中报告

    - debug:
        var: groups
      run_once: true

给出(删节)

  groups:
    all:
    - host1
    - host2
    - host3
    database:
    - host2
    - host3
    - host1
    ungrouped: []

但是,添加的主机不会包含在播放的执行中

    - debug:
        var: test_var

给出(删节的)与之前相同的结果

ok: [host2] => 
  test_var: database
ok: [host3] => 
  test_var: database

刷新库存没有帮助

    - meta: refresh_inventory

    - debug:
        var: test_var

仍然给出相同的结果

ok: [host2] => 
  test_var: database
ok: [host3] => 
  test_var: database

您必须开始新的游戏才能将新主机纳入群组

- name: Play 2
  hosts: database

  tasks:

    - debug:
        var: test_var

给予

ok: [host2] => 
  test_var: database
ok: [host3] => 
  test_var: database
ok: [host1] => 
  test_var: database

将主机添加到组中并不是永久性的。仅当前的剧本受到影响。


用于测试的完整剧本示例。

- name: Play 1
  hosts: database

  tasks:

    - debug:
        var: groups
      run_once: true

    - debug:
        var: test_var

    - add_host:
        name: host1
        groups: database

    - debug:
        var: groups
      run_once: true

    - debug:
        var: test_var

    - meta: refresh_inventory

    - debug:
        var: test_var

- name: Play 2
  hosts: database

  tasks:

    - debug:
        var: test_var
© www.soinside.com 2019 - 2024. All rights reserved.