Создать строку URL из словаря в ANSIBLE с фильтрами - PullRequest
0 голосов
/ 20 ноября 2018

В Ansible я пытаюсь создать строку URL, начинающуюся со словаря.

Это исходный текст:

query_string:
   UserName: myname
   Notes: abcd
   GenericField1: foo

Вот что я хотел бы получить:

UserName=myname&Notes=abcd&GenericField1=foo

Я пробовал несколько комбинаций файлов jinja (urlencode, flatten и т. Д.), Но не могу достичь своей цели.У кого-нибудь есть предложение?

Ответы [ 4 ]

0 голосов
/ 20 ноября 2018

Почти так же, как @EBAH:

- set_fact:
    url_str: "{{ (url_str | default('')) + ('&' if (index > 0) else '') + (item.key+'='+item.value| urlencode) }}"
  loop: "{{ query_string | dict2items }}"
  loop_control:
    index_var: index
0 голосов
/ 20 ноября 2018

Если словарь query_string имеет больше свойств, этот код предоставляет вам возможность использовать больше полей при необходимости

- name: build the url
  set_fact:
    myurl: "{{ myurl | default('') + item.key + '=' + item.value + '&' | regex_replace('\\&$', '') }}"
  loop: "{{ query_string|dict2items }}"
0 голосов
/ 20 ноября 2018

Это решение работает правильно:

  - name: Create query string from input params
    set_fact:
      URL_params: "{{ URL_params }}{{ (index > 0)|ternary('&','') }}{{ item.key }}={{ item.value | urlencode }}"
    loop: "{{  query_string | dict2items }}"
    loop_control:
      index_var: index
0 голосов
/ 20 ноября 2018

Это код, который вы ищете?

- set_fact:
    my_url: >
      UserName={{ query_string.UserName -}}
      &Notes={{ query_string.Notes -}}
      &GenericField1={{ query_string.GenericField1 -}}
...