Ansible При использовании большой переменной в playbook выбирается ошибка при вставке необработанных данных или при запуске других переменных меньшего размера - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу отправить ios_facts в gitlab с помощью модуля ansibles uri.

- name: get ios facts
  ios_facts:
    gather_subset: all
  register: ios_facts

- name: commit to gitlab
  delegate_to: localhost
  uri:
    url: http://gitlab/api/v4/projects/2/repository/commits
    method: POST
    body_format: json
    status_code: 201
    headers:
      PRIVATE-TOKEN: "xxxxxxxxxxxxxx"
      Content-Type: "application/json"
    body: |
      {
        "branch": "master",
        "commit_message": "{{ ansible_net_hostname }} update",
        "actions": [
         {
           "action": "update",
           "file_path": "conf/{{ ansible_net_hostname }}",
           "content": "{{ ansible_net_config }}"
         }
        ]
      }

Playbook работает нормально, если я использую любую переменную, отличную от ansible_net_config , или если я вставляю необработанное содержимое ansible_net_config вместо использования ссылки jinja2. Ansible_net_config - это большая строка, использующая \ n в качестве новой строки и содержащая некоторые специальные символы. Я полагаю, что проблема возникает из-за того, что я не получаю действительный json при разборе playbook.

Затем я получаю HTTP-ошибку 400: Неверный запрос

Есть ли какой-нибудь фильтр, который я могу применить, или что-то еще, что я могу упустить?

1 Ответ

0 голосов
/ 20 апреля 2019

Мне удалось решить проблему: вызов API завершился неудачно, когда переменная содержит «\ n».Я мог бы заставить его работать, заменив "\ n" на экранированный "\\ n":

...
"content": {{ ansible_net_config | replace('\n','\\n') }}
...
...