В чем проблема с этим ansible YAML файлом? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь перебрать список элементов в Ansible, используя этот код для добавления через Jira REST API пользователей в группу «Jira-software-users» в Jira Server.

 - name: Add user
  uri:
    url: "{{ atlassian_url }}/rest/api/2/user?groupname=jira-software-users"
    method: POST
    user: "{{ jira_username }}"
    password: "{{ jira_password }}"
    return_content: yes
    force_basic_auth: yes
    body_format: json
    headers:
      Accept: 'application/json'
      Content-Type: 'application/json'
    body: "{ 'name': "{{ item }}"
             }"
  register: result
  loop: "{{ users }}"
  tags:
    - adduser

Код мне кажется хорошим, но продолжает показывать ошибку, которая не дает достаточного объяснения. Здесь ошибка:

ERROR! Синтаксическая ошибка при загрузке YAML. не найден ожидаемый ключ

Похоже, что ошибка находится в '/root/createProject2.yml': строка 45, столбец 27, но может быть в другом месте файла в зависимости от точной синтаксической проблемы.

Оскорбительная строка выглядит так:

      Content-Type: 'application/json'
    body: "{ 'name': "{{ item }}"
                      ^ here

Мы могли ошибаться, но похоже, что это проблема с отсутствующими кавычками. Всегда заключайте скобки выражения шаблона, когда они начинают значение. Например:

with_items:
  - {{ foo }}

Должно быть записано как:

with_items:
  - "{{ foo }}"

Очевидно, что применение автоматического предложения ничего не решает, поскольку по определению я применяю концепции, описанные в Ansible документация по петлям: https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html

Не могли бы вы предложить мне способ решения этой проблемы?

Спасибо

1 Ответ

4 голосов
/ 08 мая 2020

Ваша проблема с цитированием. У вас есть неэкранированные двойные кавычки внутри строки, заключенной в двойные кавычки, которую Ansible не может проанализировать. В этом случае вы можете заключить строку JSON в одинарные кавычки и использовать двойные кавычки внутри:

body: '{ "name": "{{ item }}" }'
...