Ansible:发生断开连接时,如何将--extra-vars维护为两个子剧本?

时间:2018-12-28 16:29:36

标签: ansible

我正在开发的剧本应在身份验证后在命令行中使用参数(--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

  • import_playbook:playbook1.yaml
  • import_playbook:playbook2.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? 注意,我不赞成修改配置文件“主机”以将剧本限制为单个主机的解决方案。 谢谢 理查德

1 个答案:

答案 0 :(得分:0)

终于知道了!

它可以与第二种解决方案一起使用,但是我没有使用--variable“ hostA”来运行剧本,而不是使用额外的变量来限制主机。

2019年快乐。