如何将 playbook 中的
host1
设置为 group_vars database
已运行?
谢谢
简短的答案是: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