どうも、Tです。
AWXを使用してProxmoxに接続して仮想マシン情報を取得した備忘録です。
目次
環境
AWX
24.6.1
Proxmox
# pveversion pve-manager/8.4.0/ec58e45e1bcdf2ac (running kernel: 6.8.12-9-pve)
やりたいこと
AWXでProxmox VEに接続して、存在する仮想マシン情報を取得したいと思います。
下記3台の仮想マシン情報を取得します。
community.proxmoxとは
AWXからProxmox VEの操作はAnsibleコレクションのcommunity.proxmoxを使います。
community.generalコレクションの中にもproxmox_xxxというモジュールが多数存在します。
community.generalに含まれるproxmoxモジュールは、community.proxmoxコレクションへ移行が進行中のため、これからProxmox向けに使うのであれば、community.proxmoxコレクションが良いと思われます。

カスタムEEの準備
community.proxmoxは、AWXにデフォルトで含まれるEEコンテナでは要件を満たせません。下記を参考にカスタムEEを準備する必要があります。
現在最新のcommunity.proxmox 1.2.0を利用するために必要な要件は下記の通りです。
- Ansible-core 2.17以上
- Ptyhon 3.7以上
- Proxmoxer 2.0以上
https://github.com/ansible-collections/community.proxmox
Tested with Ansible
Ansible-core 2.17, 2.18, and the current development version of ansible-core.External requirements
In order to use the modules in this collection, you’ll need:
Python >= 3.7
Proxmoxer >= 2.0
Proxmox VE設定
community.proxmoxでは、SSH接続ではなくAPIによりProxmox環境を操作します。
APIアクセスが行えるようにProxmox VEを設定します。
API用ユーザー作成
普段使っているpveユーザーでAPI接続することもできますが、今回は、API専用ユーザーを作成します。
「データセンター」->「アクセス権」->「ユーザー」画面を開き、「追加」をクリックします。
下記を値を入力し「追加」をクリックします。
項目 | 値 | 備考 |
---|---|---|
ユーザー名 | pve-api-user | 任意のユーザー名。 |
レルム | Proxmox VE Authentication Server | 認証時は「ユーザ名@pve」になる。 |
パスワード | 任意のパスワード |
APIトークン発行
作成したユーザーでAPIトークンを発行します。
「データセンター」->「アクセス権」->「APIトークン」画面を開き、「追加」をクリックします。
項目 | 値 | 備考 |
---|---|---|
ユーザー名 | pve-api-user@pve | 作成したユーザー。形式は、「ユーザ名@pve」。 |
トークンID | awx | 任意の文字列 |
トークンIDのシークレットが発行されるので「シークレット値をコピー」をクリックしメモしておきます。
ユーザーアクセス権設定
APIトークンに権限を追加しますが、事前にユーザーに権限が設定されている必要があります。
Permissions on API tokens are always a subset of those of their corresponding user, meaning that an API token can’t be used to carry out a task that the backing user has no permission to do.
筆者日本語訳
APIトークンの権限は常に対応するユーザーの権限のサブセットです。つまり、APIトークンは、バックエンドユーザーが権限を持たないタスクを実行するために使用することはできません。
ユーザーアクセス権を設定します。
「データセンター」->「アクセス権」画面を開き、「追加」->「ユーザのアクセス権限」をクリックします。
下記を入力し「追加」をクリックします。
項目 | 値 | 備考 |
---|---|---|
パス | / | 頂点のオブジェクトを指定。 |
ユーザ | pve-api-user@pve | 作成したユーザー。形式は、「ユーザ名@pve」。 |
ロール | PVEAdmin | 任意のロールを指定。 |
継承 | チェックあり(デフォルト) | パス配下にロールを継承する(/配下なのですべてのオブジェクトに継承される) |
ロールは必要な用途によって選択してください。詳細は下記のドキュメントを参照してください。
APIトークンアクセス権設定
APIトークンにアクセス権を設定します。
「データセンター」->「アクセス権」画面を開き、「追加」->「APIトークンのアクセス権限」をクリックします。
項目 | 値 | 備考 |
---|---|---|
パス | / | 頂点のオブジェクトを指定。 |
ユーザ | pve-api-user@pve!awx | 作成したユーザー。形式は、「ユーザ名@pve!トークンID」。 |
ロール | PVEAdmin | 任意のロールを指定。 |
継承 | チェックあり(デフォルト) | パス配下にロールを継承する(/配下なのですべてのオブジェクトに継承される) |
AWX設定
Playbook作成
仮想マシンを取得する「playbook_proxmox_vm_list.yml」を作成します。接続情報は、セキュリティの観点から変数化しAWXのインベントリの環境変数で渡すようにします。
SSH接続ではなくAPI操作になるため、hostsとconnectionはローカル(AWX EE自身)を設定しています。
--- - name: Get all Proxmox VMs hosts: localhost # SSH接続はしないが必須のためダミーとして設定 connection: local # ローカル実行であることを明記 tasks: - name: Get all Proxmox VMs community.proxmox.proxmox_vm_info: api_user: "{{ pve_user }}" api_token_id: "{{ pve_token_id }}" api_token_secret: "{{ pve_token_secret }}" api_host: "{{ pve_host }}" register: vm_info - name: Output VMs debug: var: vm_info.proxmox_vms
community.proxmox.proxmox_vm_infoモジュールの使い方については、下記ドキュメントを参照してください。
プロジェクト同期
作成したPlaybookをAWXのプロジェクトで利用できるようにします。
今回は、GitHubとAWXを連携しています。詳しくは、下記の記事にまとめています。

インベントリ設定
「リソース」->「インベントリー」画面を開き、任意の名前のインベントリを設定します。
Playbookで利用する環境変数には下記を設定します。
--- pve_user: pve-api-user@pve pve_token_id: awx pve_token_secret: xxxxxxxxxxxxxxxxxxxxx pve_host: 192.168.10.110
項目 | 値 |
---|---|
pve_user | API用に作成したProxmox VEユーザー。 |
pve_token_id | APIトークンで設定したトークンID。 |
pve_token_secret | APIトークン設定で発行されたシークレット情報。 |
pve_host | APIを実行するProxmox VEホストのIPアドレス。 |
インベントリのホストにProxmox VEのホストを設定します。
環境変数pve_hostで指定しているため、このホストの設定はなくとも動作します。
ただ、ホストの設定がないとジョブテンプレート実行時のログに下記のWARNINGが出力されるのが煩わしいため設定しました。
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
ジョブテンプレート設定
「リソース」->「テンプレート」画面を開き、任意の名前のジョブテンプレートを設定します。
項目 | 値 |
---|---|
名前 | 任意の名前。 |
インベントリ | 設定したインベントリー。 |
プロジェクト | playbook_proxmox_vm_list.ymlを同期したプロジェクト。 |
実行環境 | 作成したカスタムEE。 |
Playbook | 作成したplaybook_proxmox_vm_list.yml。 |
動作確認
「リソース」->「テンプレート」画面を開き作成したジョブテンプレートを実行します。
ジョブのログにProxmox VE上で稼働する仮想マシンの情報が取得できました。
まとめ
これで仮想マシンの操作やProxmox VEの管理など自動化の処理をすることができそうです。