我有一个简单的ansible
Playbook,setup.yml
它看起来基本上像这样(简化):
- hosts: my-server-to-setup
remote_user: [REDACTED]
become: yes
#vars_prompt:
# - name: "zbxusername"
# prompt: "Zabbix Username"
# private: no
# - name: "zbxpw"
# prompt: "Zabbix Passwort"
# private: yes
roles:
- basic
# - zabbix
该zabbix
角色需要用户名和密码才能访问 zabbix 主机服务器。凭据不同,每个用户都有自己的帐户。
如果我想安装该zabbix
角色,我需要取消注释该vars_prompt
部分,因为ansible
不允许从角色内进行提示。
有一个更好的方法吗?当前的方式可能会使重要变量未定义,这将导致剧本失败。
答案1
创建剧本top.yml
导入剧本basic.yml
和zabix.yml
。使用标签有选择地运行导入的剧本。
ansible-playbook -t basic top.yml
ansible-playbook -t zabix top.yml
剧本 top.yml
- name: Run basic
import_playbook: basic.yml
tags: [basic, never]
- name: Run zabix
import_playbook: zabix.yml
tags: [zabix, never]
剧本基本.yml
- hosts: my-server-to-setup
remote_user: [REDACTED]
become: yes
roles:
- basic
剧本 zabix.yml
- hosts: my-server-to-setup
remote_user: [REDACTED]
become: yes
vars_prompt:
- name: "zbxusername"
prompt: "Zabbix Username"
private: no
- name: "zbxpw"
prompt: "Zabbix Passwort"
private: yes
roles:
- zabbix
笔记
标签never
避免意外运行这两个角色可能很有用。如果没有指定任何标签,导入的剧本都不会运行。以下命令不会产生任何操作。
ansible-playbook top.yml