运行 通过将组名称作为动态输入,在特定服务器组上进行 ansible 播放
Running the ansible play on particular group of servers by taking the name of groups as input dynamically
假设我有这样的库存文件
inventory.txt
abc
cde
def
[check1:children]
abc
[check2:children]
cde
[check3: children]
def
现在我将从用户那里获取输入,例如:check1,check3
在一个变量中用逗号分隔,然后我想 运行 我的下一个游戏 check1,check3
.
我怎样才能做到这一点?
用逗号分隔的组或主机列表 a perfectly valid pattern 用于剧本的主机。
所以你可以直接在剧本的 hosts
属性中传递它:
- hosts: "{{ user_provider_hosts }}"
gather_facts: no
tasks:
- debug:
然后,您只需在 playbook 命令的 --extra-vars
(或简称 -e
)标志中添加以下值:
ansible-playbook play.yml --extra-vars "user_provider_hosts=check1,check3"
这将产生:
TASK [debug] ******************************************************************
ok: [abc] =>
msg: Hello world!
ok: [def] =>
msg: Hello world!
另一种选择是针对所有主机:
- hosts: all
gather_facts: no
tasks:
- debug:
并使用有目的的 --limit
flag:
ansible-playbook play.yml --limit check1,check3
第三个选项是使用播放定位 localhost
来提示用户选择要定位的组,然后使用 localhost
设置的事实在另一个播放中定位这些组:
- hosts: localhost
gather_facts: no
vars_prompt:
- name: _hosts
prompt: On which hosts do you want to act?
private: no
tasks:
- set_fact:
user_provider_hosts: "{{ _hosts }}"
- hosts: "{{ hostvars.localhost.user_provider_hosts }}"
gather_facts: no
tasks:
- debug:
会以交互方式请求主机并在用户提供主机上执行操作:
On which hosts do you want to act?: check1,check3
PLAY [localhost] **************************************************************
TASK [set_fact] ***************************************************************
ok: [localhost]
PLAY [check1,check3] **********************************************************
TASK [debug] ******************************************************************
ok: [abc] =>
msg: Hello world!
ok: [def] =>
msg: Hello world!
假设我有这样的库存文件
inventory.txt
abc
cde
def
[check1:children]
abc
[check2:children]
cde
[check3: children]
def
现在我将从用户那里获取输入,例如:check1,check3
在一个变量中用逗号分隔,然后我想 运行 我的下一个游戏 check1,check3
.
我怎样才能做到这一点?
用逗号分隔的组或主机列表 a perfectly valid pattern 用于剧本的主机。
所以你可以直接在剧本的 hosts
属性中传递它:
- hosts: "{{ user_provider_hosts }}"
gather_facts: no
tasks:
- debug:
然后,您只需在 playbook 命令的 --extra-vars
(或简称 -e
)标志中添加以下值:
ansible-playbook play.yml --extra-vars "user_provider_hosts=check1,check3"
这将产生:
TASK [debug] ******************************************************************
ok: [abc] =>
msg: Hello world!
ok: [def] =>
msg: Hello world!
另一种选择是针对所有主机:
- hosts: all
gather_facts: no
tasks:
- debug:
并使用有目的的 --limit
flag:
ansible-playbook play.yml --limit check1,check3
第三个选项是使用播放定位 localhost
来提示用户选择要定位的组,然后使用 localhost
设置的事实在另一个播放中定位这些组:
- hosts: localhost
gather_facts: no
vars_prompt:
- name: _hosts
prompt: On which hosts do you want to act?
private: no
tasks:
- set_fact:
user_provider_hosts: "{{ _hosts }}"
- hosts: "{{ hostvars.localhost.user_provider_hosts }}"
gather_facts: no
tasks:
- debug:
会以交互方式请求主机并在用户提供主机上执行操作:
On which hosts do you want to act?: check1,check3
PLAY [localhost] **************************************************************
TASK [set_fact] ***************************************************************
ok: [localhost]
PLAY [check1,check3] **********************************************************
TASK [debug] ******************************************************************
ok: [abc] =>
msg: Hello world!
ok: [def] =>
msg: Hello world!