cloud_init

Тест молекулы

Требования

  1. Установите Ansible:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
  1. Установите 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 основана на следующем блоге

О проекте

Role to configure cloud-init.

Установить
ansible-galaxy install pimvh/cloud_init
Лицензия
gpl-3.0
Загрузки
173
Владелец