Ansible Playbook - Pysnow: Найти запись с помощью запроса 'IN' - PullRequest
3 голосов
/ 13 апреля 2020

Я работаю над ansible playbook, чтобы получить запись SNOW с помощью модуля snow_record_find. Документация (https://docs.ansible.com/ansible/latest/modules/snow_record_find_module.html) имеет очень ограниченный пример.

Кроме того, я также не могу точно понять API-интерфейсы (https://pysnow.readthedocs.io/en/latest/api/query_builder.html).

Я пробовал эту игру:

    - name: Find records in sc_item_option list
      snow_record_find:
        username: username
        password: password
        instance: instance
        table: sc_item_option
        query:
         sys_id:
           IN:     
             - "5203930cdb230010a5d39235ca9619f6"
             - "605d12bedbe70010a5d39235ca9619dd"
             - "81115fc8db230010a5d39235ca96193d"
      register: allVarsRecord

и получаю эту ошибку:

Expected value of type `str` or `list`, not <class 'dict'>", "query": {"sys_id": {"IN": ["5203930cdb230010a5d39235ca9619f6", "605d12bedbe70010a5d39235ca9619dd", "81115fc8db230010a5d39235ca96193d"]}}

Я также изменил свою пьесу, чтобы она была такой:

    - name: Find records in sc_item_option list
      snow_record_find:
        username: username
        password: password
        instance: instance
        table: sc_item_option
        query:
          IN:
            sys_id:     
              - "5203930cdb230010a5d39235ca9619f6"
              - "605d12bedbe70010a5d39235ca9619dd"
              - "81115fc8db230010a5d39235ca96193d"
      register: allVarsRecord

    - debug:
        msg: "{{allVarsRecord}}"

и затем получите эту ошибку:

Expected value of type `str` or `list`, not <class 'dict'>", "query": {"IN": {"sys_id": ["5203930cdb230010a5d39235ca9619f6", "605d12bedbe70010a5d39235ca9619dd", "81115fc8db230010a5d39235ca96193d"]}}

Как я могу устранить эту ошибку и заставить ее работать? Любое предложение сработает, так как мой разум уже исчерпан, чтобы думать об этом ..

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Используйте equals вместо IN, в зависимости от значения, построитель снежного запроса добавит условие IN (если список) или = (если строка).

    - name: Find records in sc_item_option list
      snow_record_find:
        username: username
        password: password
        instance: instance
        table: sc_item_option
        query:
          equals:   
            sys_id:
              - "5203930cdb230010a5d39235ca9619f6"
              - "605d12bedbe70010a5d39235ca9619dd"
              - "81115fc8db230010a5d39235ca96193d"
      register: allVarsRecord

PS: Не проверено. Создано на основе построителя запросов Документация .

0 голосов
/ 14 апреля 2020

Спасибо за ответ, данный franklinsijo. 'IN' автоматически применяется, когда ansible видит список, просто сделайте это, используя стандартные равенства. Но для этого случая, поскольку это одиночный запрос, он также не нуждается в операции «равно», иначе я все еще получаю ожидаемые ошибки «str» и «list». Playbook как показано ниже:

    - name: Find records in sc_item_option list
      snow_record_find:
        username: username
        password: password
        instance: instance
        table: sc_item_option
        query:
          sys_id: 
            - "5203930cdb230010a5d39235ca9619f6"
            - "605d12bedbe70010a5d39235ca9619dd"
            - "81115fc8db230010a5d39235ca96193d"
      register: allVarsRecord
...