Я пытаюсь написать Ansible playbook для загрузки моих серверов. По умолчанию в Linode я могу войти только как root с паролем, поэтому моя playbook входит как root, создает пользователя без полномочий root с ключом SSH и отключает root и пароль SSH.
Это проблема, потому что теперь я не могу запустить эту книгу снова, так как root-вход отключен! Я хотел бы, чтобы playbook был идемпотентом и не должен добавлять и удалять хосты после их начальной загрузки.
Ответы:
Мне нравится делать это так:
Я пытаюсь подключиться к удаленному хосту с моим пользователем. Если это невозможно (при первом запуске), я подключаюсь от имени пользователя root и создаю пользователя ansible вместе с его
authorized_keys
файлом иsudo
правами.При последующих запусках работает подключение как ANSIBLE user, поэтому блок задач можно пропустить.
После того, как удаленный хост загружен, я могу продолжить с пользователем ansible и
become
:источник
remote_user
свою книгу после первого запуска? Это не идемпотент. Я надеюсь, что что-то упустил.bootstrap.yml
иsite.yml
, гдеsite.yml
включает в себяbootstrap.yml
прежде всего). Если первая задачаbootstrap.yml
терпит неудачу, все другие задачи этой игры пропускаются иsite.yml
вступают во владение."skip_reason": "Conditional result was False"
. Запуск спектакля с-vvv
шоу возвращает ssh-вызов"msg": "non-zero return code", "rc": 255,
when
состояния:when: not "OK" in check_ansible_user.stdout
Я бы сделал следующее:
sshd_config
(я бы порекомендовал вам управлять всем файлом, используяtemplate
, но это зависит от вас), и отключить root-логиныДля первой роли (основной) я склонен использовать что-то вроде:
Для конфигурации SSH я бы использовал:
Ролевые зависимости Ansible описаны здесь .
Вы также можете просто использовать порядок в вашей книге игр, чтобы сделать это.
У меня есть кое- что на github (из которого взято выше), если вы хотите увидеть это в контексте
источник
Если вы создаете свои сервера на Linode с модулем Linode можно зарегистрировать
return value
вlinode
задаче и включает в себя задачу начальной загрузки со условием проверки на Outout задачи Linode. Это должно быть идемпотентом. Попробуйте что-то вроде этого:bootstrap.yml
будет содержать все задачи, необходимые для отключения входа root ssh и так далее.источник
Может быть, вы могли бы просто изменить
ansible_ssh_user
в инвентаре после того, как вы загрузили хост?источник