Я хочу создать пароль (ansible_ssh_pass
) в разделе vars моей книги из строки, переданной в качестве входных данных (pass_var
). Проблема здесь в том, что фактическим паролем должны быть первые 6 символов из переменной (pass_var
). Я не уверен, как этого добиться. Вот моя книга игр
- hosts: all
user: "{{username}}"
become: yes
gather_facts: False
vars:
ansible_ssh_pass: <someway to decode string (base64 -d) and get first 6 characters>
Я запускаю playbook как:
ansible-playbook test.yml --extra-vars "pass_var=${pass_val} username=${user}"
Мне также нужно сделать некоторые манипуляции с оболочкой. Например, моя строка будет закодирована в base64, поэтому мне также нужно ее декодировать. Что-то вроде: echo ${pass_var} | base64 -d | rev | cut -c1-6
Вы можете использовать нарезку строк в стиле Python в Ansible, поэтому вы можете просто написать:
vars:
ansible_ssh_pass: "{{ pass_var[:6] }}"
Например, следующая команда:
ansible localhost -e pass_var=1234567890 -m debug -a 'msg = {{pass_var[:6]}}'
Выведет:
localhost | SUCCESS => {
"msg": "123456"
}
Если ваша исходная строка закодирована в base64, вы можете использовать фильтр Ansible b64_decode
:
ansible_pass: "{{ (pass_var|b64decode)[:6] }}"
И если по какой-то странной причине вам нужно обратить его вспять, есть фильтр reverse
:
ansible_pass: "{{ ((pass_var|b64decode)|reverse)[:6] }}"
Если мы изменим мой предыдущий пример, мы получим:
ansible localhost -e pass_var = "MTIzNDU2Nzg5MA= = " -m debug -a 'msg = {{((pass_var|b64decode)|reverse)[:6]}}'
Что производит:
localhost | SUCCESS => {
"msg": "098765"
}
Здравствуйте, larsks, да, пожалуйста, взгляните еще раз. Поскольку это закодированная строка, мне также нужно ее декодировать. Я просто пытаюсь понять, как выполнять манипуляции с оболочкой в разделе vars, чтобы получить желаемый результат.
Я обновил ответ. Я предлагаю прочитать документацию по фильтру Ansible , а также список фильтров Jinja.
Это невероятно. Действительно удивительным. Я застрял на этом довольно долго. Я очень благодарна вам за помощь в решении вопроса
Если это ответило на ваш вопрос, вы можете нажать на галочку слева от этого ответа.
Мне также нужно сделать некоторые манипуляции с оболочкой. Например, моя строка будет строкой в кодировке base64. Так что мне нужно расшифровать его, а также. Например: эхо ${pass_var} | base64 -d | оборот | вырезать -c1-6