将具有不同 ansible_user 的重复名称添加到 add_host 动态清单的问题

Issue adding duplicate name with different ansible_user to add_host dynamic inventory

这是我使用 add_host 构建动态库存的剧本:

---

- name: "Play 1"
  hosts: localhost
  gather_facts: no
  tasks:
   - name: "Search database"
     command: >       mysql --user=root --password=p@ssword deployment
       --host=localhost  -Ns -e "SELECT dest_ip,username FROM deploy_dets"
     register: command_result

   - name: Add hosts
     add_host:
       name: "{{ item.split('\t')[0] }}"
       ansible_user:  "{{ item.split('\t')[1] }}"
       groups: dest_nodes
     with_items: "{{ command_result.stdout_lines }}"


- hosts: dest_nodes
  gather_facts: false
  tasks:
    - debug:
        msg: Run the shell script with the arguments `{{ ansible_user }}` here"

当 add_host 的 'name:' 属性具有不同的 IP 值即 '10.9.0.100' 和 '10.8.2.144'

时,输出良好且符合预期
$ ansible-playbook duplicate_hosts.yml


PLAY [Play 1] ***********************************************************************************************************************************************

TASK [Search database] **************************************************************************************************************************************
changed: [localhost]

TASK [Add hosts] ********************************************************************************************************************************************
changed: [localhost] => (item=10.9.0.100    user1)
changed: [localhost] => (item=10.8.2.144    user2)

PLAY [dest_nodes] *******************************************************************************************************************************************

TASK [debug] ************************************************************************************************************************************************
ok: [10.9.0.100] => {
    "msg": "Run the shell script with the arguments `user1` here\""
}
ok: [10.8.2.144] => {
    "msg": "Run the shell script with the arguments `user2` here\""
}

PLAY RECAP **************************************************************************************************************************************************
10.8.2.144                 : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.9.0.100                : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
localhost                  : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

问题是,当 add_host 的 'name:' 属性获得重复条目时,比如 10.8.2.144 尽管具有唯一的 'ansible_user' 值,但游戏会忽略名字 ansible_user条目和 运行s 只有一次与最新的最终条目。

$ ansible-playbook duplicate_hosts.yml

PLAY [Play 1] ***********************************************************************************************************************************************

TASK [Search database] **************************************************************************************************************************************
changed: [localhost]

TASK [Add hosts] ********************************************************************************************************************************************
changed: [localhost] => (item=10.8.2.144     user1)
changed: [localhost] => (item=10.8.2.144     user2)

PLAY [dest_nodes] *******************************************************************************************************************************************

TASK [debug] ************************************************************************************************************************************************
ok: [10.8.2.144] => {
    "msg": "Run the shell script with the arguments `user2` here\""
}

PLAY RECAP **************************************************************************************************************************************************
10.8.2.144                 : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
localhost                  : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

有趣的是,调试显示 add_host 名称的两个条目:10.8.2.144 具有不同的 ansible_users,即 'user1' 和 'user2' 但是当我们 运行 该组 运行 只是单个和最新的名称条目,可以在上面的输出中看到。

我正在使用最新版本的ansible。

能否请您提供一些解决方案,让我可以 运行 同一主机上每个唯一 'ansible_user' 的游戏?

总而言之:我希望 运行 同一主机上的多个任务首先使用 'user1' 然后使用 'user2'

您可以添加别名作为清单主机名。在这里,我将用户名指定为主机名(别名)。 请试试这个,我没有测试过。

- name: Add hosts 
  add_host:
    hostname: "{{ item.split('\t')[1] }}"
    ansible_host: "{{ item.split('\t')[0] }}"
    ansible_user:  "{{ item.split('\t')[1] }}"
    groups: dest_nodes
  with_items: "{{ command_result.stdout_lines }}"