zaki work log

作業ログやら生活ログやらなんやら

[AAP/AWX] コンテナーグループを作成するAnsibleプレイブック

以前まとめた以下の「[AWX / AAP] ジョブの実行をリモートのKubernetesクラスタで行う」内容はwebのUIで手動で設定するものだったが、本記事ではこの設定操作をplaybookで自動化する方法についてのメモ。

zaki-hmkc.hatenablog.com

大きな流れとしては以下の通り。

  1. 認証情報の作成
  2. コンテナグループの作成

認証情報の作成

awx.awx.credentialモジュールを使う。

docs.ansible.com

サンプルコードは以下。

- name: create credential for k8s
  awx.awx.credential:
    name: k8s-access
    credential_type: OpenShift or Kubernetes API Bearer Token
    inputs:
      host: "{{ k8s_endpoint }}"
      bearer_token: "{{ token }}"
      verify_ssl: false

モジュール自体はGitやVMの認証情報を作成するのに使うのと同じで、credential_typeOpenShift or Kubernetes API Bearer Tokenを指定する。
inputs.hostK8sエンドポイントで、たいていは https://{{ address }}:6443みたいな内容になるはず。
inputs.bearer_tokenトークンを指定する。

トークンの作成方法については以下参照。
(kubectl create tokenを使うとトークンは有効期限付きのものになるため、Secretベースのトークンを使う方法が良いと思う。再確認も容易だし)

zaki-hmkc.hatenablog.com

コンテナグループの作成

awx.awx.instance_groupモジュールを使う。

docs.ansible.com

Ansibleドキュメントサイトの内容には珍しく、モジュールのページに(2025年5月上旬時点では)Exampleが無いのでトライアルアンドエラーで作成したが、サンプルコードは基本的に以下で動く。

- name: create container instance group
  awx.awx.instance_group:
    name: k8s-exec
    credential: k8s-access
    is_container_group: true

credentialに前述の「認証情報の作成」で作成したOpenShift or Kubernetesのクレデンシャルリソースを指定すればOK

また、UIで「Pod仕様のカスタマイズ」で記述するジョブPodのマニフェスト定義については、pod_spec_overrideに記述できる。
上記のタスク定義に書き足すとこんな感じで、ネームスペースやサービスアカウント名、コンテナイメージ等を指定する。
(5/9追記: コンテナイメージはここのspec.containers[]imageでなく、テンプレート設定側の実行環境で指定したものが優先される。)

Pod仕様のカスタマイズの編集については、一度UIでデフォルト値を確認してそれを変更するのが良いと思う。

- name: create container instance group
  awx.awx.instance_group:
    name: k8s-exec
    credential: k8s-access
    is_container_group: true
    pod_spec_override: |
      apiVersion: v1
      kind: Pod
      metadata:
        namespace: execution
      spec:
        serviceAccountName: job-exec-user
        automountServiceAccountToken: false
        containers:
          - image: my-registry.example.org/repo/image:latest
            name: worker
            args:
              - ansible-runner
              - worker
              - '--private-data-dir=/runner'
            resources:
              requests:
                cpu: 250m
                memory: 100Mi

元ネタまとめたのって、2年近くも前だったのね。

zaki-hmkc.hatenablog.com

zaki-hmkc.hatenablog.com


その他のリソースの作成方法全般については以下。

zaki-hmkc.hatenablog.com