У меня есть много систем с общим именем пользователя для входа. Пароль также одинаков для большинства систем. У меня есть 1 инвентарный файл со всеми системами. Для систем с другим паролем я сохранил пароль для имени хоста, а для остальных он находится в файле group_vars.
В файле инвентаря:
hostname1 ansible_ssh_pass=pass1
hostname2 ansible_ssh_pass=pass2
hostname3
hostname4
файл group_vars:
ansible_user: someuser
ansible_ssh_pass: pass3
У меня нет высших привилегий. Из другого потока я смог выяснить, как использовать passwd только для изменения пароля и не использовать другие утилиты.
shell: 'printf "%s\n" OldPass NewPass NewPass | passwd'
Passwd не поддерживает параметр "-p".
Я пытаюсь найти способ получить значение OldPass из того же места, где ansible выбирает его для каждого хоста, чтобы мне не приходилось запускать этот playbook n раз и вручную помещать OldPass в команду оболочки.
Пожалуйста, посоветуйте, как это сделать.
Спасибо.
Вы можете использовать переменные напрямую:
$ ansible -c local -m shell \
-a "printf '%s\n' {{ ansible_ssh_pass }} {{ ansible_ssh_newpass }}" \
--extra-vars="ansible_ssh_pass=oldpass ansible_ssh_newpass=newpass" \
localhost
127.0.0.1 | SUCCESS | rc=0 >>
oldpass
newpass
В этом примере переменные передаются в ansible
из командной строки, в вашем примере они будут поступать из group_vars
.
Вы даже можете определить значение по умолчанию и переопределить его для определенных систем:
$ ansible -c local -m shell \
-a "printf '%s\n' {{ ansible_ssh_pass | default('otherpass') }} {{ ansible_ssh_newpass }}" \
--extra-vars="ansible_ssh_newpass=newpass" \
localhost
127.0.0.1 | SUCCESS | rc=0 >>
otherpass
newpass