Проблема добавления дублирующего имени с другим ansible_user в динамический инвентарь add_host - PullRequest
0 голосов
/ 27 сентября 2019

Вот моя книга игр, которая создает динамический инвентарь, используя 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"

Вывод хороший и, как и ожидалось, когда атрибут 'name:' add_host имеет разные значения IPs viz '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

Проблема в том, что атрибут name: для add_host получает повторяющуюся запись, скажем, 10.8.2.144, несмотря на уникальное значение ansible_user, игра игнорирует первое имя, ansible_userзапись и запускается только один раз с последней финальной записью.

$ 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'

1 Ответ

1 голос
/ 27 сентября 2019

Вы можете добавить псевдоним в качестве инвентарного имени хоста.Здесь я дал имя пользователя в качестве имени хоста (псевдоним).Пожалуйста, попробуйте, я не проверял.

- 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 }}"
...