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\ с null.

Опитах начина по-долу, но не работи за мен.

- 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'

Примерният фрагмент от книгата за игри би бил полезен за мен, тъй като съм нов в 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