Манипулирование переменными Ansible внутри vars

Я хочу создать пароль (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

Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
0
0
146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать нарезку строк в стиле 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"
}

Мне также нужно сделать некоторые манипуляции с оболочкой. Например, моя строка будет строкой в ​​кодировке base64. Так что мне нужно расшифровать его, а также. Например: эхо ${pass_var} | base64 -d | оборот | вырезать -c1-6

user4613285 24.12.2020 15:46

Здравствуйте, larsks, да, пожалуйста, взгляните еще раз. Поскольку это закодированная строка, мне также нужно ее декодировать. Я просто пытаюсь понять, как выполнять манипуляции с оболочкой в ​​разделе vars, чтобы получить желаемый результат.

user4613285 24.12.2020 15:49

Я обновил ответ. Я предлагаю прочитать документацию по фильтру Ansible , а также список фильтров Jinja.

larsks 24.12.2020 15:55

Это невероятно. Действительно удивительным. Я застрял на этом довольно долго. Я очень благодарна вам за помощь в решении вопроса

user4613285 24.12.2020 17:00

Если это ответило на ваш вопрос, вы можете нажать на галочку слева от этого ответа.

larsks 24.12.2020 18:52

Другие вопросы по теме