presseed YAML を使った非対話型設定

lxd init コマンドは --preseed コマンドラインフラグをサポートしており、 LXD デーモンの設定、ストレージプール、ネットワークデバイスとプロファイルを 非対話式にを完全に構成することができます。

例えば、 LXD を新規インストールした状態で、以下のコマンドを実行

    cat <<EOF | lxd init --preseed
config:
  core.https_address: 192.168.1.1:9999
  images.auto_update_interval: 15
networks:
- name: lxdbr0
  type: bridge
  config:
    ipv4.address: auto
    ipv6.address: none
EOF

すると 192.168.1.1 のアドレスのポート 9999 で HTTPS 接続をリッスンし、 15 時間ごとにイメージを自動的にアップデートし、 lxdbr0 という名前の ネットワークデバイスを作成し、 IPV4の アドレスを自動的に割り当てるように LXD デーモンを構成します。

新規インストールした LXD を設定する

新規インストールした LXD のインスタンスを設定する場合、 preseed コマンドは必ず成功し、希望の設定を適用できます (与えられた YAML が 正しいキーと値を含んでいる限り)。というのは、希望の状態と衝突する 既存の状態が存在しないからです。

既存の LXD を再構成する

既存の LXD インスタンスを preseed コマンドを使って再構成する場合、 指定された YAML 設定は既存の設定を完全に上書きすることを意味します (新規インストールの LXD の場合と同様に、指定された設定が存在しない場合は それらは単に作成されます)。

既存の設定を上書きする場合は、その設定の新しい希望の状態の完全な設定を 指定する必要があります (つまり RESTful API での PUT と 同じ考え方です)。

ロールバック

新しく希望する設定の一部が既存の設定と衝突する場合 (例えばストレージ プールをドライバーを dir から zfs に変更しようとするなど)、 preseed コマンドは失敗し、それまでに適用したあらゆる変更を自動的に ロールバックしようとベストを尽くします。

例えば新しい設定で作られた設定を削除したり、上書きされた設定を元の 状態に戻したりするでしょう。

設定を上書きするのに失敗した場合のモードは RESTful APIPUT リクエストの場合と同様です。

ただし、まれにではありますが (典型的にはバックエンドのバグか制限により)、 ロールバック自体も失敗する可能性があることにご注意ください。ですので LXD デーモンを preseed で再構成しようとするときは注意が必要です。

デフォルト・プロファイル

対話的な初期化モードをは異なり、指定した YAML のペイロードで明示的に 変更を指示しない限り、 lxd init --preseed はデフォルト・プロファイルを 特定の状態に変更することはしません。

例えば、典型的にはデフォルトプロファイルにルート・ディスク・デバイスと ネットワーク・インターフェースをアタッチしたいでしょう。以下の例を 参照してください。

設定の形式

さまざまな設定のサポートされるキーと値は RESTful API に ドキュメントされているものと同じです。ただし、 YAML が読みやすいように 変換されたものになっています (YAML は JSON のスーパーセットなので JSON を使うこともできます)。

以下に設定可能な取っ手のほとんどを含む preseed のペイロードの例を 示します。あなた自身のペイロードのテンプレートとして使い、ここに 必要な設定を追加、変更、削除して使うことができます。


# デーモンの設定
config:
  core.https_address: 192.168.1.1:9999
  core.trust_password: sekret
  images.auto_update_interval: 6

# ストレージプール
storage_pools:
- name: data
  driver: zfs
  config:     
    source: my-zfs-pool/my-zfs-dataset

# ネットワークデバイス
networks:
- name: lxd-my-bridge
  type: bridge
  config:
    ipv4.address: auto
    ipv6.address: none

# プロファイル
profiles:
- name: default
  devices:
    root:
      path: /
      pool: data
      type: disk
- name: test-profile
  description: "Test profile"
  config:
    limits.memory: 2GB
  devices:
    test0:
      name: test0
      nictype: bridged
      parent: lxd-my-bridge
      type: nic