cloud_init
Требования
- Установите Ansible:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
- Установите requirements.yaml (эта роль использует pimvh.ssh_keygen):
ansible-galaxy install -r requirements.yaml
Обязательные переменные
Проверьте переменные, как показано в defaults.
cloud_init_machine_name: ""
cloud_init_ansible_user_passwd_hash: "" # хэш пароля для пользователя ansible
cloud_init_github_token: ""
cloud_init_userdata:
hostname: hostname
fqdn: hostname.example.com
groups: []
users:
- name: my user
gecos: Описание моего пользователя
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL # без пароля для sudo
groups: sudo # член группы sudo
lock_passwd: false # разблокировка пароля
passwd: "{{ password_here | password_hash('sha512') }}"
ssh_authorized_keys: [] # опциональный авторизованный ключ
runcmd: [] # дополнительные команды для выполнения в cloudinit
writefiles: [] # дополнительные файлы для записи
packages: [] # дополнительные пакеты для установки
cloud_init_networkdata:
# определите IP адреса и используйте `default routes` и `nameservers` ниже
ipv4: << ipv4 >>
ipv6: << ipv6 >>
# --- ИЛИ ---
# настройте полное netplan
# как ниже
netplan:
network:
version: 2
ethernets:
enp1s0:
dhcp4: false
addresses:
- << addr >>
gateway4: << addr >>
gateway6: << addr >>
nameservers:
addresses:
- << dns_server ip >>
cloud_init_netplan_routes:
- to: default
via: 1.0.0.1
- to: default
via: 2001:db8::11
cloud_init_netplan_nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
cloud_init_add_to_known_hosts: true
cloud_init_reboot_on_finish: true
cloud_init_enable_ssh_ca: true
# Моя рекомендация - использовать плагины поиска, как это:
# cloud_init_ssh_host_ca_publickey: "{{ lookup('ansible.builtin.file', 'your_ca') }}"
# или поиск переменных, как это:
# "{{ lookup('ansible.builtin.vars', 'your_ca') }}"
cloud_init_ssh_host_ca_privatekey: ""
cloud_init_ssh_host_ca_privatekey_pass: ""
cloud_init_ssh_host_ca_publickey: ""
cloud_init_ssh_user_ca_publickeys: []
cloud_init_enable_ansible_pull: false
cloud_init_ansible_pull_repo_owner: ""
cloud_init_ansible_pull_repo_name: ""
cloud_init_ansible_pull_playbook_name: ""
cloud_init_ansible_pull_deploy_key_name: "Ansible-pull deploy key"
cloud_init_validity_period: 520w
cloud_init_ssh_ca_runcmd:
# настройка использования CA на сервере
- echo "@cert-authority * $(cat /etc/ssh/host_ca.pub)" >> /etc/ssh/ssh_known_hosts
# просто удалите публичный ключ CA хоста
- rm -f /etc/ssh/host_ca.pub
# настройте новый ключ TrustedUserCAkey добавив созданную конфигурацию ssh cloud-init
- echo "TrustedUserCAKeys /etc/ssh/ssh_trusted_user_ca_keys" >> /etc/ssh/sshd_config.d/50-cloud-init.conf
# перезапустите sshd, чтобы изменения вступили в силу
- systemctl restart sshd
Пример плейбука
hosts:
- foo
roles:
- pimvh.cloud_init
Кратко - что произойдет, если я запущу это
- Проверка, что обязательные переменные определены
- Создание каталога для файлов cloud-init
- Получение ключей хоста Github (если запрашиваются)
- Генерация пары SSH ключей для Ansible pull (если запрашивается)
- Настройка SSH Host CAs и User CAs (если запрашиваются)
- Подписание сертификатов на контроллере
- Настройка Ansible-pull путем добавления requirements.yaml из repo_url в конфигурацию cloud-init (если запрашивается)
- Шаблонизация cloud_init
- Шаблонизация подписанных сертификатов для конфигурации cloud-init
- Шаблонизация необходимых данных пользователя cloud-init
- Шаблонизация данных сети cloud-init
- Шаблонизация требований Ansible pull
- Добавление ключа развертывания Github в запрашиваемый репозиторий Ansiblepull (если запрашивается)
- Запуск Ansible-pull от имени пользователя ansible на системе (если запрашивается)
- Добавление SSH CA в известные хосты (если запрашивается)
Будущие улучшения
- Найти лучший способ получить временный доступ к Github с использованием другого метода аутентификации.
Источники
Часть логики SSH CA основана на следующем блоге
Установить
ansible-galaxy install pimvh/cloud_init
Лицензия
gpl-3.0
Загрузки
173
Владелец