我从加密的ansible-vault文件中读取了我的root密码。 但是当我在ansible_become_pass上使用它时,操作失败,因为密码包含一个特殊字符。在我的示例中" #"
这是我的yml:
- hosts: sirius
remote_user: ansusr
become: yes
vars_files:
- vault_vars.yml
become_pass: "{{ root_pass_sirius }}"
ansible-playbook check.yml --ask-vault-pass
fatal: FAILED! => {"msg": "{{ TesT#1234 }}: template error while templating string: unexpected char '#' at 6. String: {{ TesT#1234 }}"}
如何屏蔽#
字符?
答案 0 :(得分:1)
在实际运行该加密命令之前使用set +H
。
答案 1 :(得分:0)
这可能有用。
become_pass: "{{ root_pass_sirius | regex_escape() }}"
答案 2 :(得分:0)
尝试单引号而不是双引号:
become_pass: '{{ root_pass_sirius }}'
答案 3 :(得分:0)
您可以尝试的另一件事是报价过滤器:
become_pass: "{{ root_pass_sirius | quote }}"
答案 4 :(得分:0)
尝试一下"'"{{ }}"'"
或这个$'{{ }}'
其Jinja模板
答案 5 :(得分:0)
我有一个不同的符号:$ 解密时这个符号消失了(以及它后面的内容),以下解决方案有所帮助:
即:
shell: 'echo '{{ password }}'' - 这可以正常工作,但在这里:
shell: 'echo '{{ password }}'' - 它不起作用。
即:
- name: replace
set_fact:
password: "{{ password | replace ('\n', '') | replace ('\r', '') }}"
总而言之,它看起来像这样:
- name: replace
set_fact:
password: "{{ password | replace ('\n', '') | replace ('\r', '') }}"
- name: echo
shell: "echo '{{ password }}'"