Ansible - заменить " и \r\ в переменной

Я хочу заменить " и \r\ из содержимого переменной с помощью Ansible.

У меня есть следующие данные в переменной result что я регистрирую вывод в переменную из предыдущей задачи

curl -s -H \"Authorization: JWT eyJ4NWMiOlsiTUlJQytqQ0NBHuHO96csEQ\r\" https://hub.docker.com/v2/repositories/talasecurityinc/?page_size=10000 | jq -r '.results|.[]|.name'

В приведенном выше содержании я хочу заменить \ и \r\ на ноль.

Я пробовал способ ниже, но он не работает для меня.

- set_fact: final_out="{{result | replace('\', "") | replace('\r\', '')}}"

Ожидаемый результат

curl -s -H "Authorization: JWT eyJ4NWMiOlsiTUlJQytqQ0NBHuHO96csEQ" https://hub.docker.com/v2/repositories/talasecurityinc/?page_size=10000 | jq -r '.results|.[]|.name'

Пример фрагмента playbook был бы полезен для меня, так как я новичок в ansible.


person moong    schedule 14.05.2019    source источник
comment
Что генерирует командную строку curl?   -  person larsks    schedule 14.05.2019


Ответы (1)


Побег из ада....

Я не смог использовать replace, вероятно, потому, что я недостаточно старался/умел. Между тем, в вашем конкретном случае вы можете добиться ожидаемого результата одним вызовом фильтра regex_replace, чтобы было проще (и это сработало сразу :)).

Я использовал свернутые блоки yaml (>) с контролем пробелов (-), чтобы свести к минимуму проблемы с побегом. Если вы не знаете, что это такое, посмотрите документацию по yaml (изучите yaml за y минут мой любимый)

Обратите внимание, что оставшиеся обратные слэши в последнем результате ниже добавлены ansible, чтобы избежать двойных кавычек в выводе.

---
- name: Escape chars
  hosts: localhost
  gather_facts: false

  vars:
    test: >-
      curl -s -H \"Authorization: JWT eyJ4NWMiOlsiTUlJQytqQ0NBHuHO96csEQ\r\"
      https://hub.docker.com/v2/repositories/talasecurityinc/?page_size=10000
      | jq -r '.results|.[]|.name'

  tasks:
    - name: Show the untouched var
      debug:
        var: test

    - name: Escape the var as intended
      debug:
        msg: >-
          {{ test | regex_replace('\\r?\\?', '') }}

что приводит к

PLAY [Escape chars] ********************************************************************

TASK [Show the untouched var] **********************************************************
ok: [localhost] => {
    "test": "curl -s -H \\\"Authorization: JWT eyJ4NWMiOlsiTUlJQytqQ0NBHuHO96csEQ\\r\\\" https://hub.docker.com/v2/repositories/talasecurityinc/?page_size=10000 | jq -r '.results|.[]|.name'"
}

TASK [Escape the var as intended] ******************************************************
ok: [localhost] => {
    "msg": "curl -s -H \"Authorization: JWT eyJ4NWMiOlsiTUlJQytqQ0NBHuHO96csEQ\" https://hub.docker.com/v2/repositories/talasecurityinc/?page_size=10000 | jq -r '.results|.[]|.name'"
}

PLAY RECAP *****************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0
person Zeitounator    schedule 14.05.2019