我正在开发的剧本应在身份验证后在命令行中使用参数(--extra-vars)指定的单个主机(hostA)上运行 例如:[ansible-playbook main.yaml -e“ variable_host = hostA”]
此主要手册包括part1和part2,并且由于host1和part2之间的重新引导,预计hostA将断开ansible会话。
尝试了两种解决方案:
第一个解决方案:(每个部分都包含include_tasks:第一个part1已在hostA上成功处理,但是第二个part2失败。这是由于连接问题所致,因为part2期望用户/密码。vars_prompt似乎仅适用于part1)
main.yaml
主机:“ {{variable_host | default('All-host')}}”
vars_prompt:
using Microsoft.SqlServer.Management.Smo;
Server serv = new Server(@"YourServer");
//for Windows authentication
serv.ConnectionContext.LoginSecure = true;
serv.ConnectionContext.StatementTimeout = 600;
Database db = serv.Databases["YourDatabase"];
List<string> TableNames = new List<string>();
foreach (Table t in db.Tables)
{
//check for system objects
if (!t.IsSystemObject && t.Columns.Contains("tenantId"))
{
//use the Name property to return the table name
TableNames.Add(t.Name);
}
}
任务:
- name: ADMUSER
prompt: Username
private: no
- name: ADMPASS
prompt: password
private: yes
第二个解决方案:(每个部分都有import_playbook:第一部分part1已成功处理。第二部分与part2的连接成功,但是part2在所有主机上运行。part2仅应在以下主机上运行主机A。 主机变量不会被--extra-vars覆盖
main.yaml
playbook1.yaml
主机:“ {{variable_host | default('All-host')}}”
vars_prompt:
- name: ==> Part1
include_tasks: TEST1.yaml
- name: ==> Part2
include_tasks: TEST2.yaml
任务:
- name: ADMUSER
prompt: Username
private: no
- name: ADMPASS
prompt: password
private: yes
playbook2.yaml
主机:“ {{variable_host | default('All-host')}}”
vars_prompt:
- nameA1:xxxx
- nameB1:xxxx
任务:
- name: ADMUSER
prompt: Username
private: no
- name: ADMPASS
prompt: password
private: yes
因此,是否存在一种解决方案,即使发生断开连接,也可以为part1和part2的hostA维护--extra-vars? 注意,我不赞成修改配置文件“主机”以将剧本限制为单个主机的解决方案。 谢谢 理查德
答案 0 :(得分:0)
终于知道了!
它可以与第二种解决方案一起使用,但是我没有使用--variable“ hostA”来运行剧本,而不是使用额外的变量来限制主机。
2019年快乐。