LXD cloud-init. Настройка контейнера

Благодаря поддержки cloud-init мы можем выполнить первоначальную настройку контейнера. Добавить пользователя, сконфигурировать сеть, установить дополнительные пакеты и т.д.

Для первоначальной настройки контейнера просто добавляем сценарии cloud-init в профиль. Что сделано в моём примере:

  1. настроена сеть со статическим IP
  2. добавлен пользователь cloud-user с правами sudo
  3. установлен пакет openssh-server
  4. при загрузке сервера, настройки сети переписываются из этой конфигурации

Получить хеш пароля

apt install whois -y
mkpasswd --method=SHA-512 YouSecretPassword

Итоговый профиль. Настройки сети для Ubuntu (Netplan). Для других дистрибутивов настройка отличается.

config:
  cloud-init.network-config: |-
    network:
      version: 2
      ethernets:
        eth0:
          dhcp4: false
          addresses:
            - 192.168.1.103/32
          routes:
            - to: 0.0.0.0/0
              via: 169.254.0.1
              on-link: true
          nameservers:
            addresses:
              - 192.168.1.1
  cloud-init.user-data: |-
    #cloud-config
    users:
    - default
    system_info:
      default_user:
        name: cloud-user
        sudo: ALL=(ALL) NOPASSWD:ALL
        shell: /bin/bash
        passwd: $6$EJuXZnciXclC3mNn$BpNAqvRwzNBCzCMKFMN.wV9UerDyDJ7UHTE3kJnG4kxYiJCE8WVYl0IdYdQ/dW4CxT39xYnsA/VlAplrdyi550
        lock_passwd: false
    ssh_pwauth: true
    packages:
      - openssh-server
    updates:
      network:
        when: ['boot']
description: Demo 103 profile
devices:
  eth0:
    ipv4.address: 192.168.1.103
    name: eth0
    nictype: routed
    parent: enp0s3
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: demo-103

Конечно это далеко не все возможности cloud-init. В своих проектах ограничиваюсь этим.