У меня есть путь, который выглядит следующим образом -
base_dir/123/path/to/G\$/subdirectory/html/
Когда я пытаюсь установить этот путь в Ansible playbook, он выдает ошибку. Если добавить \ $ для экранирования '\', выдается непредвиденная ошибка.
Playbkook -
- hosts: localhost
vars:
account_id: 123
tasks:
- name: Add \ to path
debug:
var: "base_dir/{{ account_id }}/path/to/G\\$/subdirectory/html/"
Результат -
TASK [Gathering Facts] *************************************************************************************************************************************************
task path: /playbooks/example_path.yml:2
ok: [localhost]
META: ran handlers
TASK [Add \ to path] ***************************************************************************************************************************************************
task path: /playbooks/exmaple_path.yml:6
fatal: [localhost]: FAILED! => {
"msg": "Unexpected failure during module execution."
}
PLAY RECAP *************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=1
2 ответа
Как объясняется в debug
документации модуля, { Параметр {X1}} ожидает имя переменной, а не скаляр для вывода. Вы получаете ошибку, потому что \
не ожидается в имени переменной. Запуск playbook с -vvv
даст вам немного больше объяснений.
В этом случае вам нужно использовать параметр msg
.
- hosts: localhost
gather_facts: false
vars:
account_id: 123
tasks:
- name: Add \ to path
debug:
msg: "base_dir/{{ account_id }}/path/to/G\\$/subdirectory/html/"
Результат
PLAY [localhost] ***************************************************************
TASK [Add \ to path] ***********************************************************
ok: [localhost] => {
"msg": "base_dir/123/path/to/G\\$/subdirectory/html/"
}
PLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Следующий вариант - использовать стиль с одинарными кавычками. Смотрите пример ниже
- hosts: localhost
vars:
my_dir1: "/scratch/tmp/G1\\$"
my_dir2: '/scratch/tmp/G2\$'
tasks:
- file:
state: directory
path: "{{ item }}"
loop:
- "{{ my_dir1 }}"
- "{{ my_dir2 }}"
# ls -1 /scratch/tmp/
'G1\$'
'G2\$'
Похожие вопросы
Новые вопросы
ansible
Red Hat Ansible - это управляемая моделями система управления конфигурацией, многоузлового развертывания / оркестрации и удаленного выполнения задач. По умолчанию он использует SSH, поэтому на узлах, которыми вы управляете, не устанавливается никакого специального программного обеспечения. Ansible написан на Python, но может быть расширен на любом языке. Это входит, версия с открытым исходным кодом и версия Enterprise.