Ansible - Заменить "и \ r \ в переменной - PullRequest
1 голос
/ 14 мая 2019

Я хочу заменить " и \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.

1 Ответ

0 голосов
/ 14 мая 2019

Escape Elling ....

Я не смог использовать 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
...