Как выполнить задачу Ansible, основанную на прохождении условия when при переборе списка отладки with_item? - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь выполнить API POST на основе условия when для списка пользователей with_item. Условие when берется из API GET, а затем сохраняется как переменная отладки.

Проблема: Кажется, переменная отладки не повторяется должным образом, и задачи API POST следуют только за первым результатом. Это приводит либо к попытке выполнить POST для всех элементов в списке with_items, либо к пропуску их всех.

Я не понимаю, создает ли каждый запрос "request_ad_user" новую переменную, и как они итерируются по "когда " состояние. Чего мне не хватает?

Вот мой код:

- name: Add a users to univention AD server.
  hosts: localhost

  tasks:
      - name: Include user to add as variable
        include_vars:
            file: users.yaml
            name: users

      - name: Check if AD users exist (object DN)
        uri:
          url: https://10.10.10.10/univention/udm/users/user/uid%3D{{item.username}}%2Ccn%3Dusers%2Cdc%3Dcybertax%2Cdc%3Dcso%2Cdc%3Dcom
          user: admin
          password: "{{users.adminpw}}"
          validate_certs: no
          return_content: yes
          status_code: 200,404
          method: GET
          timeout: 10
        with_items:
          - "{{users.user}}"
        register: request_ad_user

      - name: debug univention user object DN request
        debug:
          var: request_ad_user

      - name: Add AD user accounts
        uri:
          url: https://10.10.10.10/univention/udm/users/user/
          user: admindh
          password: "{{users.vcenterPassword}}"
          validate_certs: no
          return_content: yes
          status_code: 201
          method: POST
          body: "{\"uuid\": \"string\", \"uri\": \"https://10.104.8.110/univention/udm/users/user/uid={{item.username}},dc=cybertax,dc=cso,dc=com\", \"options\": {\"pki\": false}, \"policies\": {\"pol
          body_format: json
        when:
          - request_ad_user.results[0].status == 404
        with_items:
          - "{{users.user}}"

1 Ответ

1 голос
/ 22 февраля 2020

Попробуйте добавить индекс al oop и используйте этот индекс в предложении when:

  - name: Add AD user accounts
    uri:
      url: https://10.10.10.10/univention/udm/users/user/
      user: admindh
      password: "{{users.vcenterPassword}}"
      validate_certs: no
      return_content: yes
      status_code: 201
      method: POST
      body: "{\"uuid\": \"string\", \"uri\": \"https://10.104.8.110/univention/udm/users/user/uid={{item.username}},dc=cybertax,dc=cso,dc=com\", \"options\": {\"pki\": false}, \"policies\": {\"pol
      body_format: json
    when:
      - request_ad_user.results[ndx].status == 404
    with_items:
      - "{{users.user}}"
    loop_control:
      index_var: ndx
...