AWXでProxmox VEの仮想マシン情報を取得してみた

どうも、Tです。

AWXを使用してProxmoxに接続して仮想マシン情報を取得した備忘録です。

スポンサーリンク
アドセンス1

環境

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.Proxmox — Ansible Community Documentation

community.generalコレクションの中にもproxmox_xxxというモジュールが多数存在します。

Community.General — Ansible Community Documentation

community.generalに含まれるproxmoxモジュールは、community.proxmoxコレクションへ移行が進行中のため、これからProxmox向けに使うのであれば、community.proxmoxコレクションが良いと思われます。

What's up with community.proxmox?
Hi @proxmox-collection, what’s the state of / roadmap for community.proxmox? The feature freeze for Ansible 10 is coming up soon (~three weeks left), which coin...

カスタムEEの準備

community.proxmoxは、AWXにデフォルトで含まれるEEコンテナでは要件を満たせません。下記を参考にカスタムEEを準備する必要があります。

PodmanとAnsible BuilderでカスタムEEをビルドしてみた
どうも、Tです。 AWXで利用するカスタムEEをPodman上で作成した備忘録です。 環境 Oracle Linux(Po...

現在最新の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」になる。
パスワード任意のパスワード
レルムにProxmox VE Authentication Serverを指定するとProxmox VE内にユーザーが作成されます。詳しくは、下記ドキュメントをご参照ください。
User Management

APIトークン発行

作成したユーザーでAPIトークンを発行します。

「データセンター」->「アクセス権」->「APIトークン」画面を開き、「追加」をクリックします。

項目備考
ユーザー名pve-api-user@pve作成したユーザー。形式は、「ユーザ名@pve」。
トークンIDawx任意の文字列

トークンIDのシークレットが発行されるので「シークレット値をコピー」をクリックしメモしておきます。

シークレットは後で再確認ができません。忘れた場合、再度トークンの追加を行う必要があります。

ユーザーアクセス権設定

APIトークンに権限を追加しますが、事前にユーザーに権限が設定されている必要があります。

User Management

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任意のロールを指定。
継承チェックあり(デフォルト)パス配下にロールを継承する(/配下なのですべてのオブジェクトに継承される)

ロールは必要な用途によって選択してください。詳細は下記のドキュメントを参照してください。

User Management

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モジュールの使い方については、下記ドキュメントを参照してください。

community.proxmox.proxmox_vm_info module – Retrieve information about one or more Proxmox VE virtual machines — Ansible Community Documentation

プロジェクト同期

作成したPlaybookをAWXのプロジェクトで利用できるようにします。

今回は、GitHubとAWXを連携しています。詳しくは、下記の記事にまとめています。

AWXでGitHubパブリックリポジトリのPlaybookを実行してみた
どうも、Tです。 先日、AWXがデプロイできたので、こちらが動くのか簡単なPlaybookを実行したので備忘録です。 環境 ...

インベントリ設定

「リソース」->「インベントリー」画面を開き、任意の名前のインベントリを設定します。

Playbookで利用する環境変数には下記を設定します。

---
pve_user: pve-api-user@pve
pve_token_id: awx
pve_token_secret: xxxxxxxxxxxxxxxxxxxxx
pve_host: 192.168.10.110
項目
pve_userAPI用に作成したProxmox VEユーザー。
pve_token_idAPIトークンで設定したトークンID。
pve_token_secretAPIトークン設定で発行されたシークレット情報。
pve_hostAPIを実行する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の管理など自動化の処理をすることができそうです。

スポンサーリンク
アドセンス1
アドセンス1
ブログランキング・にほんブログ村へ

シェアする

フォローする