API 拡張

以下の変更は 1.0 API が確定した後に LXD API に導入されました。

それらの変更は全て後方互換であり、 GET /1.0/api_extensions を 見ることでクライアントツールにより検出可能です。

storage_zfs_remove_snapshots

storage.zfs_remove_snapshots というデーモン設定キーが導入されました。

値の型は boolean でデフォルトは false です。 true にセットすると、スナップショットを 復元しようとするときに必要なスナップショットを全て削除するように LXD に 指示します。

ZFS でスナップショットの復元が出来るのは最新のスナップショットに限られるので、 この対応が必要になります。

container_host_shutdown_timeout

boot.host_shutdown_timeout というコンテナー設定キーが導入されました。

値の型は integer でコンテナーを停止しようとした後 kill するまでどれだけ 待つかを LXD に指示します。

この値は LXD デーモンのクリーンなシャットダウンのときにのみ使用されます。 デフォルトは 30s です。

container_stop_priority

boot.stop.priority というコンテナー設定キーが導入されました。

値の型は integer でシャットダウン時のコンテナーの優先度を指示します。

コンテナーは優先度レベルの高いものからシャットダウンを開始します。

同じ優先度のコンテナーは並列にシャットダウンします。デフォルトは 0 です。

container_syscall_filtering

コンテナー設定キーに関するいくつかの新しい syscall が導入されました。

  • security.syscalls.blacklist_default
  • security.syscalls.blacklist_compat
  • security.syscalls.blacklist
  • security.syscalls.whitelist

使い方は configuration.md を参照してください。

auth_pki

これは PKI 認証モードのサポートを指示します。

このモードではクライアントとサーバは同じ PKI によって発行された証明書を使わなければなりません。

詳細は security.md を参照してください。

container_last_used_at

GET /1.0/containers/<name> エンドポイントに last_used_at フィールドが追加されました。

これはコンテナーが開始した最新の時刻のタイムスタンプです。

コンテナーが作成されたが開始はされていない場合は last_used_at フィールドは 1970-01-01T00:00:00Z になります。

etag

関連性のある全てのエンドポイントに ETag ヘッダのサポートが追加されました。

この変更により GET のレスポンスに次の HTTP ヘッダが追加されます。

  • ETag (ユーザーが変更可能なコンテンツの SHA-256)

また PUT リクエストに次の HTTP ヘッダのサポートが追加されます。

  • If-Match (前回の GET で得られた ETag の値を指定)

これにより GET で LXD のオブジェクトを取得して PUT で変更する際に、 レースコンディションになったり、途中で別のクライアントがオブジェクトを 変更していた (訳注: のを上書きしてしまう) というリスク無しに PUT で 変更できるようになります。

patch

HTTP の PATCH メソッドのサポートを追加します。

PUT の代わりに PATCH を使うとオブジェクトの部分的な変更が出来ます。

usb_devices

USB ホットプラグのサポートを追加します。

https_allowed_credentials

LXD API を全てのウェブブラウザで (SPA 経由で) 使用するには、 XHR の度に 認証情報を送る必要があります。それぞれの XHR リクエストで "withCredentials=true" とセットします。

Firefox や Safari などいくつかのブラウザは Access-Control-Allow-Credentials: true ヘッダがないレスポンスを受け入れる ことができません。サーバがこのヘッダ付きのレスポンスを返すことを保証するには core.https_allowed_credentials=true と設定してください。

image_compression_algorithm

この変更はイメージを作成する時 (POST /1.0/images) に compression_algorithm というプロパティのサポートを追加します。

このプロパティを設定するとサーバのデフォルト値 (images.compression_algorithm) をオーバーライドします。

directory_manipulation

LXD API 経由でディレクトリを作成したり一覧したりでき、ファイルタイプを X-LXD-type ヘッダに付与するようになります。 現状はファイルタイプは "file" か "directory" のいずれかです。

container_cpu_time

この拡張により実行中のコンテナーの CPU 時間を取得できます。

storage_zfs_use_refquota

この拡張により新しいサーバプロパティ storage.zfs_use_refquota が追加されます。 これはコンテナーにサイズ制限を設定する際に "quota" の代わりに "refquota" を設定する ように LXD に指示します。また LXD はディスク使用量を調べる際に "used" の代わりに "usedbydataset" を使うようになります。

これはスナップショットによるディスク消費をコンテナーのディスク利用の一部と みなすかどうかを実質的に切り替えることになります。

storage_lvm_mount_options

この拡張は storage.lvm_mount_options という新しいデーモン設定オプションを 追加します。デフォルト値は "discard" で、このオプションにより LVM LV で使用する ファイルシステムの追加マウントオプションをユーザーが指定できるようになります。

network

LXD のネットワーク管理 API 。

次のものを含みます。

  • /1.0/networks エントリーに "managed" プロパティを追加
  • ネットワーク設定オプションの全て (詳細はconfiguration.md を参照)
  • POST /1.0/networks (詳細は RESTful API を参照)
  • PUT /1.0/networks/<entry> (詳細は RESTful API を参照)
  • PATCH /1.0/networks/<entry> (詳細は RESTful API を参照)
  • DELETE /1.0/networks/<entry> (詳細は RESTful API を参照)
  • "nic" タイプのデバイスの ipv4.address プロパティ (nictype が "bridged" の場合)
  • "nic" タイプのデバイスの ipv6.address プロパティ (nictype が "bridged" の場合)
  • "nic" タイプのデバイスの security.mac_filtering プロパティ (nictype が "bridged" の場合)

profile_usedby

プロファイルを使用しているコンテナーをプロファイルエントリーの一覧の used_by フィールド として新たに追加します。

container_push

コンテナーが push モードで作成される時、クライアントは作成元と作成先のサーバ間の プロキシとして機能します。作成先のサーバが NAT やファイアウォールの後ろにいて 作成元のサーバと直接通信できず pull モードで作成できないときにこれは便利です。

container_exec_recording

新しい boolean 型の "record-output" を導入します。これは /1.0/containers/<name>/exec のパラメータでこれを "true" に設定し "wait-for-websocket" を fales に設定すると 標準出力と標準エラー出力をディスクに保存し logs インタフェース経由で利用可能にします。

記録された出力の URL はコマンドが実行完了したら操作のメタデータに含まれます。

出力は他のログファイルと同様に、通常は 48 時間後に期限切れになります。

certificate_update

REST API に次のものを追加します。

  • 証明書の GET に ETag ヘッダ
  • 証明書エントリーの PUT
  • 証明書エントリーの PATCH

container_exec_signal_handling

クライアントに送られたシグナルをコンテナー内で実行中のプロセスにフォワーディング するサポートを /1.0/containers/<name>/exec に追加します。現状では SIGTERM と SIGHUP がフォワードされます。フォワード出来るシグナルは今後さらに追加される かもしれません。

gpu_devices

コンテナーに GPU を追加できるようにします。

container_image_properties

設定キー空間に新しく image を導入します。これは読み取り専用で、親のイメージのプロパティを 含みます。

migration_progress

転送の進捗が操作の一部として送信側と受信側の両方に公開されます。これは操作のメタデータの "fs_progress" 属性として現れます。

id_map

security.idmap.isolated, security.idmap.isolated, security.idmap.size, raw.id_map のフィールドを設定できるようにします。

network_firewall_filtering

ipv4.firewallipv6.firewall という 2 つのキーを追加します。 false に設置すると iptables の FORWARDING ルールの生成をしないように なります。 NAT ルールは対応する ipv4.natipv6.nat キーが true に 設定されている限り引き続き追加されます。

ブリッジに対して dnsmasq が有効な場合、 dnsmasq が機能する (DHCP/DNS) ために必要なルールは常に適用されます。

network_routes

ipv4.routesipv6.routes を導入します。これらは LXD ブリッジに 追加のサブネットをルーティングできるようにします。

storage

LXD のストレージ管理 API 。

これは次のものを含みます。

  • GET /1.0/storage-pools
  • POST /1.0/storage-pools (詳細は RESTful API を参照)

  • GET /1.0/storage-pools/<name> (詳細は RESTful API を参照)

  • POST /1.0/storage-pools/<name> (詳細は RESTful API を参照)
  • PUT /1.0/storage-pools/<name> (詳細は RESTful API を参照)
  • PATCH /1.0/storage-pools/<name> (詳細は RESTful API を参照)
  • DELETE /1.0/storage-pools/<name> (詳細は RESTful API を参照)

  • GET /1.0/storage-pools/<name>/volumes (詳細は RESTful API を参照)

  • GET /1.0/storage-pools/<name>/volumes/<volume_type> (詳細は RESTful API を参照)

  • POST /1.0/storage-pools/<name>/volumes/<volume_type> (詳細は RESTful API を参照)

  • GET /1.0/storage-pools/<pool>/volumes/<volume_type>/<name> (詳細は RESTful API を参照)

  • POST /1.0/storage-pools/<pool>/volumes/<volume_type>/<name> (詳細は RESTful API を参照)
  • PUT /1.0/storage-pools/<pool>/volumes/<volume_type>/<name> (詳細は RESTful API を参照)
  • PATCH /1.0/storage-pools/<pool>/volumes/<volume_type>/<name> (詳細は RESTful API を参照)
  • DELETE /1.0/storage-pools/<pool>/volumes/<volume_type>/<name> (詳細は RESTful API を参照)

  • 全てのストレージ設定オプション (詳細は configuration.md を参照)

file_delete

/1.0/containers/<name>/files の DELETE メソッドを実装

file_append

X-LXD-write ヘッダを実装しました。値は overwriteappend のいずれかです。

network_dhcp_expiry

ipv4.dhcp.expiryipv6.dhcp.expiry を導入します。 DHCP のリース期限を設定 できるようにします。

storage_lvm_vg_rename

storage.lvm.vg_name を設定することでボリュームグループをリネームできるようにします。

storage_lvm_thinpool_rename

storage.thinpool_name を設定することで thinpool をリネームできるようにします。

network_vlan

macvlan ネットワークデバイスに vlan プロパティを新たに追加します。

これを設定すると、指定した VLAN にアタッチするように LXD に指示します。 LXD はホスト上でその VLAN を持つ既存のインタフェースを探します。 もし見つからない場合は LXD がインタフェースを作成して macvlan の親として 使用します。

image_create_aliases

POST /1.0/imagesaliases フィールドを新たに追加します。イメージの 作成/インポート時にエイリアスを設定できるようになります。

container_stateless_copy

POST /1.0/containers/<name>live という属性を新たに導入します。 false に設定すると、実行状態を転送しようとしないように LXD に伝えます。

container_only_migration

container_only という boolean 型の属性を導入します。 true に設定すると コンテナーだけがコピーや移動されるようになります。

storage_zfs_clone_copy

ZFS ストレージプールに storage_zfs_clone_copy という boolean 型のプロパティを導入します。 false に設定すると、コンテナーのコピーは zfs send と receive 経由で行われる ようになります。これにより作成先のコンテナーは作成元のコンテナーに依存しないように なり、 ZFS プールに依存するスナップショットを維持する必要がなくなります。 しかし、これは影響するプールのストレージの使用状況が以前より非効率的になる という結果を伴います。 このプロパティのデフォルト値は true です。つまり明示的に "false" に設定 しない限り、空間効率の良いスナップショットが使われます。

unix_device_rename

path を設定することによりコンテナー内部で unix-block/unix-char デバイスをリネーム できるようにし、ホスト上のデバイスを指定する source 属性が追加されます。 path を設定せずに source を設定すると、 pathsource と同じものとして 扱います。 sourcemajor/minor を設定せずに path を設定すると sourcepath と同じものとして扱います。ですので、最低どちらか 1 つは 設定しなければなりません。

storage_rsync_bwlimit

ストレージエンティティを転送するために rsync が起動される場合に rsync.bwlimit を設定すると使用できるソケット I/O の量に上限を 設定します。

network_vxlan_interface

ネットワークに tunnel.NAME.interface オプションを新たに導入します。

このキーは VXLAN トンネルにホストのどのネットワークインタフェースを使うかを 制御します。

storage_btrfs_mount_options

btrfs ストレージプールに btrfs.mount_options プロパティを導入します。

このキーは btrfs ストレージプールに使われるマウントオプションを制御します。

entity_description

これはエンティティにコンテナー、スナップショット、ストレージプール、ボリュームの ような説明を追加します。

image_force_refresh

既存のイメージを強制的にリフレッシュできます。

storage_lvm_lv_resizing

これはコンテナーの root ディスクデバイス内に size プロパティを設定することで 論理ボリュームをリサイズできるようにします。

id_map_base

これは security.idmap.base を新しく導入します。これにより分離されたコンテナー に map auto-selection するプロセスをスキップし、ホストのどの uid/gid をベース として使うかをユーザーが指定できるようにします。

これは file API 経由でシンボリックリンクを転送するサポートを追加します。 X-LXD-type に "symlink" を指定できるようになり、リクエストの内容はターゲットの パスを指定します。

container_push_target

POST /1.0/containers/<name>target フィールドを新たに追加します。 これはマイグレーション中に作成元の LXD ホストが作成先に接続するために 利用可能です。

network_vlan_physical

physical ネットワークデバイスで vlan プロパティが使用できるようにします。

設定すると、 parent インタフェース上で指定された VLAN にアタッチするように LXD に指示します。 LXD はホスト上でその parent と VLAN を既存のインタフェース で探します。 見つからない場合は作成します。 その後コンテナーにこのインタフェースを直接アタッチします。

storage_images_delete

これは指定したストレージプールからイメージのストレージボリュームを ストレージ API で削除できるようにします。

container_edit_metadata

これはコンテナーの metadata.yaml と関連するテンプレートを /1.0/containers/<name>/metadata 配下の URL にアクセスすることにより API で編集できるようにします。コンテナーからイメージを発行する前にコンテナーを 編集できるようになります。

container_snapshot_stateful_migration

これは stateful なコンテナーのスナップショットを新しいコンテナーにマイグレート できるようにします。

storage_driver_ceph

これは ceph ストレージドライバを追加します。

storage_ceph_user_name

これは ceph ユーザーを指定できるようにします。

instance_types

これはコンテナーの作成リクエストに instance_type フィールドを追加します。 値は LXD のリソース制限に展開されます。

storage_volatile_initial_source

これはストレージプール作成中に LXD に渡された実際の作成元を記録します。

storage_ceph_force_osd_reuse

これは ceph ストレージドライバに ceph.osd.force_reuse プロパティを 導入します。 true に設定すると LXD は別の LXD インスタンスで既に使用中の osd ストレージプールを再利用するようになります。

storage_block_filesystem_btrfs

これは ext4 と xfs に加えて btrfs をストレージボリュームファイルシステムとして サポートするようになります。

resources

これは LXD が利用可能なシステムリソースを LXD デーモンに問い合わせできるようにします。

kernel_limits

これは nofile でコンテナーがオープンできるファイルの最大数といったプロセスの リミットを設定できるようにします。形式は limits.kernel.[リミット名] です。

storage_api_volume_rename

これはカスタムストレージボリュームをリネームできるようにします。

external_authentication

これは Macaroons での外部認証をできるようにします。

network_sriov

これは SR-IOV を有効にしたネットワークデバイスのサポートを追加します。

console

これはコンテナーのコンソールデバイスとコンソールログを利用可能にします。

restrict_devlxd

security.devlxd コンテナー設定キーを新たに導入します。このキーは /dev/lxd インタフェースがコンテナーで利用可能になるかを制御します。 false に設定すると、コンテナーが LXD デーモンと連携するのを実質無効に することになります。

migration_pre_copy

これはライブマイグレーション中に最適化されたメモリ転送をできるようにします。

infiniband

これは infiniband ネットワークデバイスを使用できるようにします。

maas_network

これは MAAS ネットワーク統合をできるようにします。

デーモンレベルで設定すると、 "nic" デバイスを特定の MAAS サブネットに アタッチできるようになります。

devlxd_events

これは devlxd ソケットに websocket API を追加します。

devlxd ソケット上で /1.0/events に接続すると、 websocket 上で イベントのストリームを受け取れるようになります。

proxy

これはコンテナーに proxy という新しいデバイスタイプを追加します。 これによりホストとコンテナー間で接続をフォワーディングできるようになります。

network_dhcp_gateway

代替のゲートウェイを設定するための ipv4.dhcp.gateway ネットワーク設定キーを 新たに追加します。

これは file API を使ってシンボリックリンクを取得できるようにします。

network_leases

/1.0/networks/NAME/leases API エンドポイントを追加します。 LXD が管理する DHCP サーバが稼働するブリッジ上のリースデータベースに問い合わせできるように なります。

unix_device_hotplug

これは unix デバイスに "required" プロパティのサポートを追加します。

storage_api_local_volume_handling

これはカスタムストレージボリュームを同じあるいは異なるストレージプール間で コピーしたり移動したりできるようにします。

operation_description

全ての操作に "description" フィールドを追加します。

clustering

LXD のクラスタリング API 。

これは次の新しいエンドポイントを含みます (詳細は RESTful API を参照)。

  • GET /1.0/cluster
  • UPDATE /1.0/cluster

  • GET /1.0/cluster/members

  • GET /1.0/cluster/members/<name>

  • POST /1.0/cluster/members/<name>
  • DELETE /1.0/cluster/members/<name>

次の既存のエンドポイントは以下のように変更されます。

  • POST /1.0/containers 新しい target クエリパラメータを受け付けるようになります。
  • POST /1.0/storage-pools 新しい target クエリパラメータを受け付けるようになります
  • GET /1.0/storage-pool/<name> 新しい target クエリパラメータを受け付けるようになります
  • POST /1.0/storage-pool/<pool>/volumes/<type> 新しい target クエリパラメータを受け付けるようになります
  • GET /1.0/storage-pool/<pool>/volumes/<type>/<name> 新しい target クエリパラメータを受け付けるようになります
  • POST /1.0/storage-pool/<pool>/volumes/<type>/<name> 新しい target クエリパラメータを受け付けるようになります
  • PUT /1.0/storage-pool/<pool>/volumes/<type>/<name> 新しい target クエリパラメータを受け付けるようになります
  • PATCH /1.0/storage-pool/<pool>/volumes/<type>/<name> 新しい target クエリパラメータを受け付けるようになります
  • DELETE /1.0/storage-pool/<pool>/volumes/<type>/<name> 新しい target クエリパラメータを受け付けるようになります
  • POST /1.0/networks 新しい target クエリパラメータを受け付けるようになります
  • GET /1.0/networks/<name> 新しい target クエリパラメータを受け付けるようになります

event_lifecycle

これはイベント API に lifecycle メッセージ種別を新たに追加します。

storage_api_remote_volume_handling

これはリモート間でカスタムストレージボリュームをコピーや移動できるようにします。

nvidia_runtime

コンテナーに nvidia_runtime という設定オプションを追加します。これを true に 設定すると NVIDIA ランタイムと CUDA ライブラリーがコンテナーに渡されます。

container_mount_propagation

これはディスクデバイスタイプに "propagation" オプションを新たに追加します。 これによりカーネルのマウントプロパゲーションの設定ができるようになります。

container_backup

コンテナーのバックアップサポートを追加します。

これは次のエンドポイントを新たに追加します (詳細は RESTful API を参照)。

  • GET /1.0/containers/<name>/backups
  • POST /1.0/containers/<name>/backups

  • GET /1.0/containers/<name>/backups/<name>

  • POST /1.0/containers/<name>/backups/<name>
  • DELETE /1.0/containers/<name>/backups/<name>

  • GET /1.0/containers/<name>/backups/<name>/export

次の既存のエンドポイントは以下のように変更されます。

  • POST /1.0/containers 新たな作成元の種別 backup を受け付けるようになります

devlxd_images

コンテナーに security.devlxd.images 設定オプションを追加します。これに より devlxd 上で /1.0/images/FINGERPRINT/export API が利用可能に なります。 nested LXD を動かすコンテナーがホストから生のイメージを 取得するためにこれは利用できます。

container_local_cross_pool_handling

これは同じ LXD インスタンス上のストレージプール間でコンテナーをコピー・移動 できるようにします。

proxy_unix

proxy デバイスで unix ソケットと abstract unix ソケットの両方のサポートを 追加します。これらは unix:/path/to/unix.sock (通常のソケット) あるいは unix:@/tmp/unix.sock (abstract ソケット) のようにアドレスを指定して 利用可能です。

現状サポートされている接続は次のとおりです。

  • TCP <-> TCP
  • UNIX <-> UNIX
  • TCP <-> UNIX
  • UNIX <-> TCP

proxy_udp

proxy デバイスで udp のサポートを追加します。

現状サポートされている接続は次のとおりです。

  • TCP <-> TCP
  • UNIX <-> UNIX
  • TCP <-> UNIX
  • UNIX <-> TCP
  • UDP <-> UDP
  • TCP <-> UDP
  • UNIX <-> UDP

clustering_join

これにより GET /1.0/cluster がノードに参加する際にどのようなストレージプールと ネットワークを作成する必要があるかについての情報を返します。また、それらを作成する 際にどのノード固有の設定キーを使う必要があるかについての情報も返します。 同様に PUT /1.0/cluster エンドポイントも同じ形式でストレージプールとネットワークに ついての情報を受け付け、クラスタに参加する前にこれらが自動的に作成されるようになります。

proxy_tcp_udp_multi_port_handling

複数のポートにトラフィックをフォワーディングできるようにします。フォワーディングは ポートの範囲が転送元と転送先で同じ (例えば 1.2.3.4 0-1000 -> 5.6.7.8 1000-2000) 場合か転送元で範囲を指定し転送先で単一のポートを指定する (例えば 1.2.3.4 0-1000 -> 5.6.7.8 1000) 場合に可能です。

network_state

ネットワークの状態を取得できるようになります。

これは次のエンドポイントを新たに追加します (詳細は RESTful API を参照)。

  • GET /1.0/networks/<name>/state

proxy_unix_dac_properties

これは抽象的 unix ソケットではない unix ソケットに gid, uid, パーミションのプロパティを追加します。

container_protection_delete

security.protection.delete フィールドを設定できるようにします。 true に設定すると コンテナーが削除されるのを防ぎます。スナップショットはこの設定により影響を受けません。

proxy_priv_drop

proxy デバイスに security.uid と security.gid を追加します。これは root 権限を 落とし (訳注: 非 root 権限で動作させるという意味です)、 Unix ソケットに接続する 際に用いられる uid/gid も変更します。

pprof_http

これはデバッグ用の HTTP サーバを起動するために、新たに core.debug_address オプションを追加します。

このサーバは現在 pprof API を含んでおり、従来の cpu-profile, memory-profile と print-goroutines デバッグオプションを置き換えるものです。

proxy_haproxy_protocol

proxy デバイスに proxy_protocol キーを追加します。これは HAProxy PROXY プロトコルヘッダ の使用を制御します。

network_hwaddr

ブリッジの MAC アドレスを制御する bridge.hwaddr キーを追加します。

proxy_nat

これは最適化された UDP/TCP プロキシを追加します。設定上可能であれば プロキシ処理は proxy デバイスの代わりに iptables 経由で行われるように なります。

network_nat_order

LXD ブリッジに ipv4.nat.orderipv6.nat.order 設定キーを導入します。 これらのキーは LXD のルールをチェイン内の既存のルールの前に置くか後に置くかを 制御します。

container_full

これは GET /1.0/containers に recursion=2 という新しいモードを導入します。 これにより状態、スナップショットとバックアップの構造を含むコンテナーの全ての構造を 取得できるようになります。

この結果 "lxc list" は必要な全ての情報を 1 つのクエリで取得できるように なります。

candid_authentication

これは新たに candid.api.url 設定キーを導入し core.macaroon.endpoint を 削除します。

backup_compression

これは新たに backups.compression_algorithm 設定キーを導入します。 これによりバックアップの圧縮の設定が可能になります。

candid_config

これは candid.domainscandid.expiry 設定キーを導入します。 前者は許可された/有効な Candid ドメインを指定することを可能にし、 後者は macaroon の有効期限を設定可能にします。 lxc remote add コマンドに 新たに --domain フラグが追加され、これにより Candid ドメインを 指定可能になります。

nvidia_runtime_config

これは nvidia.runtime と libnvidia-container ライブラリーを使用する際に追加の いくつかの設定キーを導入します。これらのキーは nvidia-container の対応する 環境変数にほぼそのまま置き換えられます。

  • nvidia.driver.capabilities => NVIDIA_DRIVER_CAPABILITIES
  • nvidia.require.cuda => NVIDIA_REQUIRE_CUDA
  • nvidia.require.driver => NVIDIA_REQUIRE_DRIVER

storage_api_volume_snapshots

ストレージボリュームスナップショットのサポートを追加します。これらは コンテナースナップショットのように振る舞いますが、ボリュームに対してのみ 作成できます。

これにより次の新しいエンドポイントが追加されます (詳細は RESTful API を参照)。

  • GET /1.0/storage-pools/<pool>/volumes/<type>/<name>/snapshots
  • POST /1.0/storage-pools/<pool>/volumes/<type>/<name>/snapshots

  • GET /1.0/storage-pools/<pool>/volumes/<type>/<volume>/snapshots/<name>

  • PUT /1.0/storage-pools/<pool>/volumes/<type>/<volume>/snapshots/<name>
  • POST /1.0/storage-pools/<pool>/volumes/<type>/<volume>/snapshots/<name>
  • DELETE /1.0/storage-pools/<pool>/volumes/<type>/<volume>/snapshots/<name>

storage_unmapped

ストレージボリュームに新たに security.unmapped という設定を導入します。

true に設定するとボリューム上の現在のマップをフラッシュし、以降の idmap のトラッキングとボリューム上のリマッピングを防ぎます。

これは隔離されたコンテナー間でデータを共有するために使用できます。 この際コンテナーを書き込みアクセスを要求するコンテナーにアタッチした 後にデータを共有します。

projects

新たに project API を追加します。プロジェクトの作成、更新、削除ができます。

現時点では、プロジェクトは、コンテナー、プロファイル、イメージを保持できます。そして、プロジェクトを切り替えることで、独立した LXD リソースのビューを見せられます。

candid_config_key

新たに candid.api.key オプションが使えるようになります。これにより、エンドポイントが期待する公開鍵を設定でき、HTTP のみの Candid サーバを安全に利用できます。

network_vxlan_ttl

新たにネットワークの設定に tunnel.NAME.ttl が指定できるようになります。これにより、VXLAN トンネルの TTL を増加させることができます。

container_incremental_copy

新たにコンテナーのインクリメンタルコピーができるようになります。--refresh オプションを指定してコンテナーをコピーすると、見つからないファイルや、更新されたファイルのみを コピーします。コンテナーが存在しない場合は、通常のコピーを実行します。

usb_optional_vendorid

名前が暗示しているように、コンテナーにアタッチされた USB デバイスの vendorid フィールドが省略可能になります。これにより全ての USB デバイスが コンテナーに渡されます (GPU に対してなされたのと同様)。

snapshot_scheduling

これはスナップショットのスケジューリングのサポートを追加します。これにより 3 つの新しい設定キーが導入されます。 snapshots.schedule, snapshots.schedule.stopped, そして snapshots.pattern です。スナップショットは最短で 1 分間隔で自動的に 作成されます。

container_copy_project

コピー元のコンテナーの dict に project フィールドを導入します。これにより プロジェクト間でコンテナーをコピーあるいは移動できるようになります。

clustering_server_address

これはサーバのネットワークアドレスを REST API のクライアントネットワーク アドレスと異なる値に設定することのサポートを追加します。クライアントは 新しい cluster.https_address 設定キーを初期のサーバのアドレスを指定するために に設定できます。新しいサーバが参加する際、クライアントは参加するサーバの core.https_address 設定キーを参加するサーバがリッスンすべきアドレスに設定でき、 PUT /1.0/cluster API の server_address キーを参加するサーバが クラスタリングトラフィックに使用すべきアドレスに設定できます (server_address の値は自動的に参加するサーバの cluster.https_address 設定キーに コピーされます)。

clustering_image_replication

クラスタ内のノードをまたいだイメージのレプリケーションを可能にします。 新しい cluster.images_minimal_replica 設定キーが導入され、イメージの リプリケーションに対するノードの最小数を指定するのに使用できます。

container_protection_shift

security.protection.shift の設定を可能にします。これによりコンテナーの ファイルシステム上で uid/gid をシフト (再マッピング) させることを防ぎます。

snapshot_expiry

これはスナップショットの有効期限のサポートを追加します。タスクは 1 分おきに実行されます。 snapshots.expiry 設定オプションは、1M 2H 3d 4w 5m 6y (それぞれ 1 分、2 時間、3 日、4 週間、5 ヶ月、6 年)といった形式を取ります。 この指定ではすべての部分を使う必要はありません。

作成されるスナップショットには、指定した式に基づいて有効期限が設定されます。 expires_at で定義される有効期限は、API や lxc config edit コマンドを使って手動で編集できます。 有効な有効期限が設定されたスナップショットはタスク実行時に削除されます。 有効期限は expires_at に空文字列や 0001-01-01T00:00:00Z(zero time)を設定することで無効化できます。 snapshots.expiry が設定されていない場合はこれがデフォルトです。

これは次のような新しいエンドポイントを追加します(詳しくは RESTful API をご覧ください):

  • PUT /1.0/containers/<name>/snapshots/<name>

snapshot_expiry_creation

コンテナー作成に expires\_at を追加し、作成時にスナップショットの有効期限を上書きできます。

network_leases_location

ネットワークのリースリストに "Location" フィールドを導入します。 これは、特定のリースがどのノードに存在するかを問い合わせるときに使います。

resources_cpu_socket

ソケットの情報が入れ替わる場合に備えて CPU リソースにソケットフィールドを追加します。

resources_gpu

サーバリソースに新規にGPU構造を追加し、システム上で利用可能な全てのGPUを一覧表示します。

resources_numa

全てのCPUとGPUに対するNUMAノードを表示します。

kernel_features

サーバの環境からオプショナルなカーネル機能の使用可否状態を取得します。

id_map_current

内部的な volatile.idmap.current キーを新規に導入します。これはコンテナーに 対する現在のマッピングを追跡するのに使われます。

実質的には以下が利用可能になります。

  • volatile.last_state.idmap => ディスク上の idmap
  • volatile.idmap.current => 現在のカーネルマップ
  • volatile.idmap.next => 次のディスク上の idmap

これはディスク上の map が変更されていないがカーネルマップは変更されている (例: shiftfs) ような環境を実装するために必要です。

event_location

API イベントの世代の場所を公開します。

storage_api_remote_volume_snapshots

ストレージボリュームをそれらのスナップショットを含んで移行できます。

network_nat_address

これは LXD ブリッジに ipv4.nat.addressipv6.nat.address 設定キーを導入します。 これらのキーはブリッジからの送信トラフィックに使うソースアドレスを制御します。

container_nic_routes

これは "nic" タイプのデバイスに ipv4.routesipv6.routes プロパティを導入します。 ホストからコンテナーへの nic への静的ルートが追加できます。

rbac

RBAC (role based access control; ロールベースのアクセス制御) のサポートを追加します。 これは以下の設定キーを新規に導入します。

  • rbac.api.url
  • rbac.api.key
  • rbac.api.expiry
  • rbac.agent.url
  • rbac.agent.username
  • rbac.agent.private_key
  • rbac.agent.public_key

cluster_internal_copy

これは通常の "POST /1.0/containers" を実行することでクラスタノード間で コンテナーをコピーすることを可能にします。この際 LXD はマイグレーションが 必要かどうかを内部的に判定します。

seccomp_notify

カーネルが seccomp ベースの syscall インターセプトをサポートする場合に 登録された syscall が実行されたことをコンテナーから LXD に通知することが できます。 LXD はそれを受けて様々なアクションをトリガーするかを決定します。

lxc_features

これは GET /1.0/ ルート経由で lxc info コマンドの出力に lxc_features セクションを導入します。配下の LXC ライブラリーに存在するキー・フィーチャーに 対するチェックの結果を出力します。

container_nic_ipvlan

これは "nic" デバイスに ipvlan のタイプを導入します。

network_vlan_sriov

これは SR-IOV デバイスに VLAN (vlan) と MAC フィルタリング (security.mac_filtering) のサポートを導入します。

storage_cephfs

ストレージプールドライバとして CEPHFS のサポートを追加します。これは カスタムボリュームとしての利用のみが可能になり、イメージとコンテナーは CEPHFS ではなく CEPH (RBD) 上に構築する必要があります。

container_nic_ipfilter

これは bridged の NIC デバイスに対してコンテナーの IP フィルタリング (security.ipv4_filtering and security.ipv6_filtering) を導入します。

resources_v2

/1.0/resources のリソース API を見直しました。主な変更は以下の通りです。

  • CPU
  • ソケット、コア、スレッドのトラッキングのレポートを修正しました
  • コア毎の NUMA ノードのトラッキング
  • ソケット毎のベースとターボの周波数のトラッキング
  • コア毎の現在の周波数のトラッキング
  • CPU のキャッシュ情報の追加
  • CPU アーキテクチャをエクスポート
  • スレッドのオンライン/オフライン状態を表示
  • メモリ
  • HugePages のトラッキングを追加
  • NUMA ノード毎でもメモリ消費を追跡
  • GPU
  • DRM 情報を別の構造体に分離
  • DRM 構造体内にデバイスの名前とノードを公開
  • NVIDIA 構造体内にデバイスの名前とノードを公開
  • SR-IOV VF のトラッキングを追加

container_exec_user_group_cwd

POST /1.0/containers/NAME/exec の実行時に User, Group と Cwd を指定するサポートを追加

container_syscall_intercept

security.syscalls.intercept.\* 設定キーを追加します。これはどのシステムコールを LXD がインターセプトし昇格された権限で処理するかを制御します。

container_disk_shift

disk デバイスに shift プロパティを追加します。これは shiftfs のオーバーレイの使用を制御します。

storage_shifted

ストレージボリュームに新しく security.shifted という boolean の設定を導入します。

これを true に設定すると複数の隔離されたコンテナーが、それら全てがファイルシステムに 書き込み可能にしたまま、同じストレージボリュームにアタッチするのを許可します。

これは shiftfs をオーバーレイファイルシステムとして使用します。

resources_infiniband

リソース API の一部として infiniband キャラクタデバイス (issm, umad, uverb) の情報を公開します。

daemon_storage

これは storage.images_volumestorage.backups_volume という 2 つの新しい設定項目を導入します。これらは既存のプール上のストレージボリュームがデーモン全体のイメージとバックアップを保管するのに使えるようにします。

instances

これはインスタンスの概念を導入します。現状ではインスタンスの唯一の種別は "container" です。

image_types

これはイメージに新しく Type フィールドのサポートを導入します。 Type フィールドはイメージがどういう種別かを示します。

resources_disk_sata

ディスクリソース API の構造体を次の項目を含むように拡張します。

  • sata デバイス(種別)の適切な検出
  • デバイスパス
  • ドライブの RPM
  • ブロックサイズ
  • ファームウェアバージョン
  • シリアルナンバー

clustering_roles

これはクラスタのエントリーに roles という新しい属性を追加し、クラスタ内のメンバーが提供する role の一覧を公開します。

images_expiry

イメージの有効期限を設定できます。

resources_network_firmware

ネットワークカードのエントリーに FirmwareVersion フィールドを追加します。

backup_compression_algorithm

バックアップを作成する (POST /1.0/containers/<name>/backups) 際に compression_algorithm プロパティのサポートを追加します。

このプロパティを設定するとデフォルト値 (backups.compression_algorithm) をオーバーライドすることができます。

ceph_data_pool_name

Ceph RBD を使ってストレージプールを作成する際にオプショナルな引数 (ceph.osd.data_pool_name) のサポートを追加します。 この引数が指定されると、プールはメタデータは pool_name で指定されたプールに保持しつつ実際のデータは data_pool_name で指定されたプールに保管するようになります。

container_syscall_intercept_mount

security.syscalls.intercept.mount, security.syscalls.intercept.mount.allowed, security.syscalls.intercept.mount.shift 設定キーを追加します。 これらは mount システムコールを LXD にインターセプトさせるかどうか、昇格されたパーミションでどのように処理させるかを制御します。

compression_squashfs

イメージやバックアップを SquashFS ファイルシステムの形式でインポート/エクスポートするサポートを追加します。

container_raw_mount

ディスクデバイスに raw mount オプションを渡すサポートを追加します。

container_nic_routed

routed "nic" デバイスタイプを導入します。

container_syscall_intercept_mount_fuse

security.syscalls.intercept.mount.fuse キーを追加します。これはファイルシステムのマウントを fuse 実装にリダイレクトするのに使えます。 このためには例えば security.syscalls.intercept.mount.fuse=ext4=fuse2fs のように設定します。

container_disk_ceph

既存の CEPH RDB もしくは FS を直接 LXD コンテナーに接続できます。

virtual_machines

仮想マシンサポートが追加されます。

image_profiles

新しいコンテナーを起動するときに、イメージに適用するプロファイルのリストが指定できます。

clustering_architecture

クラスタメンバーに architecture 属性を追加します。 この属性はクラスタメンバーのアーキテクチャを示します。

resources_disk_id

リソース API のディスクのエントリーに device_id フィールドを追加します。

storage_lvm_stripes

通常のボリュームと thin pool ボリューム上で LVM ストライプを使う機能を追加します。

vm_boot_priority

ブートの順序を制御するため nic とディスクデバイスに boot.priority プロパティを追加します。

unix_hotplug_devices

UNIX のキャラクタデバイスとブロックデバイスのホットプラグのサポートを追加します。

api_filtering

インスタンスとイメージに対する GET リクエストの結果をフィルタリングする機能を追加します。

instance_nic_network

NIC デバイスの network プロパティのサポートを追加し、管理されたネットワークへ NIC をリンクできるようにします。 これによりネットワーク設定の一部を引き継ぎ、 IP 設定のより良い検証を行うことができます。

clustering_sizing

データベースの投票者とスタンバイに対してカスタムの値を指定するサポートです。 cluster.max_voterscluster.max_standby という新しい設定キーが導入され、データベースの投票者とスタンバイの理想的な数を指定できます。

firewall_driver

ServerEnvironment 構造体にファイアーウォールのドライバーが使用されていることを示す Firewall プロパティを追加します。

storage_lvm_vg_force_reuse

既存の空でないボリュームグループからストレージボリュームを作成する機能を追加します。 このオプションの使用には注意が必要です。 というのは、同じボリュームグループ内に LXD 以外で作成されたボリュームとボリューム名が衝突しないことを LXD が保証できないからです。 このことはもし名前の衝突が起きたときは LXD 以外で作成されたボリュームを LXD が削除してしまう可能性があることを意味します。

container_syscall_intercept_hugetlbfs

mount システムコール・インターセプションが有効にされ hugetlbfs が許可されたファイルシステムとして指定された場合、 LXD は別の hugetlbfs インスタンスを uid と gid をコンテナーの root の uid と gid に設定するマウントオプションを指定してコンテナーにマウントします。 これによりコンテナー内のプロセスが hugepage を確実に利用できるようにします。

limits_hugepages

コンテナーが使用できる hugepage の数を hugetlb cgroup を使って制限できるようにします。 この機能を使用するには hugetlb cgroup が利用可能になっている必要があります。 注意: hugetlbfs ファイルシステムの mount システムコールをインターセプトするときは、ホストの hugepage のリソースをコンテナーが使い切ってしまわないように hugepage を制限することを推奨します。

container_nic_routed_gateway

この拡張は ipv4.gatewayipv6.gateway という NIC の設定キーを追加します。 指定可能な値は auto か none のいずれかです。 値を指定しない場合のデフォルト値は auto です。 auto に設定した場合は、デフォルトゲートウェイがコンテナー内部に追加され、ホスト側のインタフェースにも同じゲートウェイアドレスが追加されるという現在の挙動と同じになります。 none に設定すると、デフォルトゲートウェイもアドレスもホスト側のインターフェースには追加されません。 これにより複数のルートを持つ NIC デバイスをコンテナーに追加できます。

projects_restrictions

この拡張はプロジェクトに restricted という設定キーを追加します。 これによりプロジェクト内でセキュリティセンシティブな機能を使うのを防ぐことができます。

custom_volume_snapshot_expiry

この拡張はカスタムボリュームのスナップショットに有効期限を設定できるようにします。 有効期限は snapshots.expiry 設定キーにより個別に設定することも出来ますし、親のカスタムボリュームに設定してそこから作成された全てのスナップショットに自動的にその有効期限を適用することも出来ます。

volume_snapshot_scheduling

この拡張はカスタムボリュームのスナップショットにスケジュール機能を追加します。 snapshots.schedulesnapshots.pattern という 2 つの設定キーが新たに追加されます。 スナップショットは最短で 1 分毎に作成可能です。

trust_ca_certificates

この拡張により提供された CA (server.ca) によって信頼されたクライアント証明書のチェックが可能になります。 core.trust_ca_certificates を true に設定すると有効にできます。 有効な場合、クライアント証明書のチェックを行い、チェックが OK であれば信頼されたパスワードの要求はスキップします。 ただし、提供された CRL (ca.crl) に接続してきたクライアント証明書が含まれる場合は例外です。 この場合は、パスワードが求められます。

snapshot_disk_usage

この拡張はスナップショットのディスク使用量を示す /1.0/instances/<name>/snapshots/<snapshot> の出力に size フィールドを新たに追加します。

clustering_edit_roles

この拡張はクラスターメンバーに書き込み可能なエンドポイントを追加し、ロールの編集を可能にします。

container_nic_routed_host_address

この拡張は NIC の設定キーに ipv4.host_addressipv6.host_address を追加し、ホスト側の veth インターフェースの IP アドレスを制御できるようにします。 これは同時に複数の routed NIC を使用し、予測可能な next-hop のアドレスを使用したい場合に有用です。

さらにこの拡張は ipv4.gatewayipv6.gateway の NIC 設定キーの振る舞いを変更します。 auto に設定するとコンテナーはデフォルトゲートウェイをそれぞれ ipv4.host_addressipv6.host_address で指定した値にします。

デフォルト値は次の通りです。

ipv4.host_address: 169.254.0.1 ipv6.host_address: fe80::1

これは以前のデフォルトの挙動と後方互換性があります。

container_nic_ipvlan_gateway

この拡張は ipv4.gatewayipv6.gateway の NIC 設定キーを追加し auto か none の値を指定できます。 指定しない場合のデフォルト値は auto です。 この場合は従来同様の挙動になりコンテナー内部に追加されるデフォルトゲートウェイと同じアドレスがホスト側のインターフェースにも追加されます。 none に設定された場合、ホスト側のインターフェースにはデフォルトゲートウェイもアドレスも追加されません。 これによりコンテナーに ipvlan の NIC デバイスを複数追加することができます。

resources_usb_pci

この拡張は /1.0/resources の出力に USB と PC デバイスを追加します。

resources_cpu_threads_numa

この拡張は numa_node フィールドをコアごとではなくスレッドごとに記録するように変更します。 これは一部のハードウェアでスレッドを異なる NUMA ドメインに入れる場合があるようなのでそれに対応するためのものです。

resources_cpu_core_die

それぞれのコアごとに die_id 情報を公開します。

api_os

この拡張は /1.0 内に osos_version の 2 つのフィールドを追加します。

これらの値はシステム上の os-release のデータから取得されます。

container_nic_routed_host_table

この拡張は ipv4.host_tableipv6.host_table という NIC の設定キーを導入します。 これで指定した ID のカスタムポリシーのルーティングテーブルにインスタンスの IP のための静的ルートを追加できます。

container_nic_ipvlan_host_table

この拡張は ipv4.host_tableipv6.host_table という NIC の設定キーを導入します。 これで指定した ID のカスタムポリシーのルーティングテーブルにインスタンスの IP のための静的ルートを追加できます。

container_nic_ipvlan_mode

この拡張は mode という NIC の設定キーを導入します。 これにより ipvlan モードを l2l3s のいずれかに切り替えられます。 指定しない場合、デフォルトは l3s (従来の挙動)です。

l2 モードでは ipv4.addressipv6.address キーは CIDR か単一アドレスの形式を受け付けます。 単一アドレスの形式を使う場合、デフォルトのサブネットのサイズは IPv4 では /24 、 IPv6 では /64 となります。

l2 モードでは ipv4.gatewayipv6.gateway キーは単一の IP アドレスのみを受け付けます。

resources_system

この拡張は /1.0/resources の出力にシステム情報を追加します。

images_push_relay

この拡張はイメージのコピーに push と relay モードを追加します。 また以下の新しいエンドポイントも追加します。 - POST 1.0/images/<fingerprint>/export

network_dns_search

この拡張はネットワークに dns.search という設定オプションを追加します。

container_nic_routed_limits

この拡張は routed NIC に limits.ingress, limits.egress, limits.max を追加します。

instance_nic_bridged_vlan

この拡張は bridged NIC に vlanvlan.tagged の設定を追加します。

vlan には参加するタグなし VLAN を指定し、 vlan.tagged は参加するタグ VLAN のカンマ区切りリストを指定します。

network_state_bond_bridge

この拡張は /1.0/networks/NAME/state API に bridge と bond のセクションを追加します。

これらはそれぞれの特定のタイプに関連する追加の状態の情報を含みます。

Bond:

  • Mode
  • Transmit hash
  • Up delay
  • Down delay
  • MII frequency
  • MII state
  • Lower devices

Bridge:

  • ID
  • Forward delay
  • STP mode
  • Default VLAN
  • VLAN filtering
  • Upper devices

resources_cpu_isolated

この拡張は CPU スレッドに Isolated プロパティーを追加します。 これはスレッドが物理的には Online ですがタスクを受け付けないように設定しているかを示します。

usedby_consistency

この拡張により、可能な時は UsedBy が適切な ?project= と ?target= に対して一貫性があるようになるはずです。

UsedBy を持つ 5 つのエンティティーは以下の通りです。

  • プロファイル
  • プロジェクト
  • ネットワーク
  • ストレージプール
  • ストレージボリューム

custom_block_volumes

この拡張によりカスタムブロックボリュームを作成しインスタンスにアタッチできるようになります。 カスタムストレージボリュームの作成時に --type フラグが新規追加され、 fsblock の値を受け付けます。

clustering_failure_domains

この拡張は PUT /1.0/cluster/<node> API に failure\_domain フィールドを追加します。 これはノードの failure domain を設定するのに使えます。

container_syscall_filtering_allow_deny_syntax

いくつかのシステムコールに関連したコンテナーの設定キーが更新されました。

  • security.syscalls.deny_default
  • security.syscalls.deny_compat
  • security.syscalls.deny
  • security.syscalls.allow

resources_gpu_mdev

/1.0/resources の利用可能な媒介デバイス (mediated device) のプロファイルとデバイスを公開します。

console_vga_type

この拡張は /1.0/console エンドポイントが ?type= 引数を取るように拡張します。 これは console (デフォルト) か vga (この拡張で追加される新しいタイプ) を指定可能です。

/1.0/<instance name>/console?type=vga に POST する際はメタデータフィールド内の操作の結果ウェブソケットにより返されるデータはターゲットの仮想マシンの SPICE unix ソケットにアタッチされた双方向のプロキシーになります。

projects_limits_disk

利用可能なプロジェクトの設定キーに limits.disk を追加します。 これが設定されるとプロジェクト内でインスタンスボリューム、カスタムボリューム、イメージボリュームが使用できるディスクスペースの合計の量を制限できます。

network_type_macvlan

ネットワークタイプ macvlan のサポートを追加し、このネットワークタイプに parent 設定キーを追加します。 これは NIC デバイスインターフェースを作る際にどの親インターフェースを使用するべきかを指定します。

さらに macvlan の NIC に network 設定キーを追加します。 これは NIC デバイスの設定の基礎として使う network を指定します。

network_type_sriov

ネットワークタイプ sriov のサポートを追加し、このネットワークタイプに parent 設定キーを追加します。 これは NIC デバイスインターフェースを作る際にどの親インターフェースを使用するべきかを指定します。

さらに sriov の NIC に network 設定キーを追加します。 これは NIC デバイスの設定の基礎として使う network を指定します。

container_syscall_intercept_bpf_devices

この拡張はコンテナー内で bpf のシステムコールをインターセプトする機能を提供します。具体的には device cgroup の bpf のプログラムを管理できるようにします。

network_type_ovn

ネットワークタイプ ovn のサポートを追加し、 bridge タイプのネットワークを parent として設定できるようにします。

ovn という新しい NIC のデバイスタイプを追加します。これにより network 設定キーにどの ovn のタイプのネットワークに接続すべきかを指定できます。

さらに全ての ovn ネットワークと NIC デバイスに適用される 2 つのグローバルの設定キーを追加します。

  • network.ovn.integration_bridge - 使用する OVS 統合ブリッジ
  • network.ovn.northbound_connection - OVN northbound データベース接続文字列