Proxmox OS 自動タグ付け (Proxmox-OS-AutoTagger)

DevOps

概要

Proxmox-OS-AutoTagger は、Proxmox VE 環境内の稼働中ゲスト(LXC コンテナと QEMU/KVM 仮想マシン)を巡回し、それぞれの OS リリース情報を取得して一貫した形式のタグを自動で付与するシェルスクリプトです。LXC には直接 /etc/os-release を参照して情報を読み取り、VM には QEMU Guest Agent を介してゲスト側の OS 情報を取得します。生成されるタグは全て小文字で “os-” を接頭辞とし、既存のタグは保持され、正しいタグが既に設定されている場合は変更を行わないため冪等に動作します。軽量でシンプルに導入でき、cron や systemd タイマーで定期実行することで運用中のリソースに自動的に OS 情報ラベルを付けられます。

GitHub

リポジトリの統計情報

  • スター数: 7
  • フォーク数: 0
  • ウォッチャー数: 7
  • コミット数: 4
  • ファイル数: 3
  • メインの言語: Shell

主な特徴

  • LXC は /etc/os-release、VM は QEMU Guest Agent を利用して OS 情報を取得
  • “os-” プレフィックスの標準化されたタグを小文字・ハイフンで生成
  • 既存タグを保持しつつ必要がある場合のみタグを更新する冪等性
  • 軽量な単一シェルスクリプトで、cron や systemd と組み合わせて運用可能

技術的なポイント

本スクリプトは Proxmox ホスト上で動作するシェルスクリプト(pve_os_tagger.sh)として実装されており、LXC と QEMU/VM を区別して OS 情報を取得します。LXC コンテナに対してはホストからコンテナ内ファイルを参照するか、pct exec 相当の手段で /etc/os-release を読み取り、NAME、VERSION_ID、VERSION_CODENAME 等の値を取得して結合します。仮想マシンについては QEMU Guest Agent(qemu-guest-agent)がゲスト側で動作していることを前提に、ゲストエージェント経由で OS 情報を問い合わせます。取得した情報は小文字化、空白やスラッシュのハイフン化、特殊文字の除去などの正規化処理を経て “os---” のようなタグ文字列を生成します。タグの適用は Proxmox の API または CLI を介して行い、既存のタグ一覧を取得して新しい OS タグを追加する形で他のタグを上書きしない設計です。スクリプトは既に正しいタグが存在する場合は変更をスキップするため冪等性を保ち、定期実行で継続的に環境を整合させるのに向きます。注意点としては、VM の場合は guest agent のインストールと稼働が必須であること、停止中のゲストからは情報が取れないこと、言語やロケールによって os-release の表記揺れがあり正規化ロジックが必要なこと、また Proxmox のバージョンや API 権限によって実行ユーザーに十分な権限(root)が必要な点です。運用面では cron/systemd タイマーで定期実行する、タグ付けルールを拡張して環境ポリシーに合わせる、といったカスタマイズが想定されます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • LICENSE: file
  • README.md: file
  • pve_os_tagger.sh: file

まとめ

運用環境の OS 情報を自動で一元管理する軽量なタグ付けツール。

リポジトリ情報:

READMEの抜粋:

Proxmox OS Auto-Tagger

Automatically tags Proxmox VE LXC containers and VMs with their OS release version (e.g., “os-ubuntu-24.04-lts” or “os-debian-gnu-linux-13-trixie”).

This script scans all running guests (both LXC and QEMU/VM) and uses /etc/os-release (for LXC) or the QEMU Guest Agent (for VMs) to determine the OS version. It generates a standardized, all-lowercase tag prefixed with os- and applies it, while preserving any other tags you have set.

It is idempotent: if the correct t…