お疲れ様です。
今回は、以前投稿した 【Service Account を作成削除する Ansible Playbook】 をより管理しやすく Plyaybook を分割してみました。
Playbook を複数のフォルダに分けることで、構造が整理され、メンテナンスが容易になり、再利用性が高まります。
フォルダ構成
- イメージ図
Playbook を 「playbook」 「role」 「vars」の3つのフォルダに分割しました。それぞれの役割は以下です。
-
playbook
Ansible Playbookの本体であり、実行するタスクやロールの指定が含まれています。 -
role
Ansibleのロールであり、サービスアカウントの作成や削除などのタスクが含まれています。 -
vars
必要な変数が定義されるフォルダで、サービスアカウントの名前やKubernetesの設定などが設定されています。
playbook
Playbook のメインファイルです。ここでは、サービスアカウントに関連するタスクを定義しており、localhost上での実行を指定しています。また、Ansible のロールであるserviceaccount_role が実行されるように設定しています。serviceaccount_role には、サービスアカウントの作成や削除などのタスクが含まれています。
serviceaccount.yaml
- name: service_account
hosts: localhost
gather_facts: yes
roles:
- serviceaccount_role # roleファイルを指定
role
Playbook のロールファイルが格納されています。"service_account/" フォルダ内には、サービスアカウントに関連するタスクを service_account_role.yml として定義しています。このファイルには、サービスアカウントの作成、IAMロールの追加、サービスアカウントの削除などのタスクが含まれています。
service_account_role.yml
- name: Create ServiceAccount
k8s:
name: "{{ serviceaccount_name }}"
namespace: "{{ serviceaccount_namespace }}"
kind: ServiceAccount
state: "{{ serviceaccount_state }}"
kubeconfig: "{{ kubeconfig }}"
register: serviceaccount_result
when: serviceaccount_state == 'present'
- name: Add IAM Role Annotation to ServiceAccount
k8s:
state: present
name: "{{ serviceaccount_name }}"
namespace: "{{ serviceaccount_namespace }}"
kind: ServiceAccount
definition:
apiVersion: v1
kind: ServiceAccount
metadata:
name: "{{ serviceaccount_name }}"
annotations:
eks.amazonaws.comrole-arn: "{{ eks_role_arn }}"
kubeconfig: "{{ kubeconfig }}"
when: serviceaccount_state == 'present'
- name: Delete ServiceAccount
k8s:
name: "{{ serviceaccount_name }}"
namespace: "{{ serviceaccount_namespace }}"
kind: ServiceAccount
state: absent
kubeconfig: "{{ kubeconfig }}"
when: serviceaccount_state == 'absent'
vars
Playbook で使用される変数を定義しています。"service_account_vars.yml" には、サービスアカウント管理に関連する変数を設定しています。
service_account_vars.yml
serviceaccount_name: playbook-serviceaccount
serviceaccount_namespace: playbook-serviceaccount
serviceaccount_state: present # サービスアカウントを作成する場合は 'present'、削除する場合は 'absent' に設定
eks_role_arn: arn:aws:iam::XXXXXXXXXXXX:role/AdministratorsAccessRole
kubeconfig: /home/test/.kube/config # kubeconfig パスを指定
まとめ
Playbook を分割すると、タスクの整理が簡単になり、再利用性が高まります。
Ansible を使えば、作業がスムーズに進みます。Playbook の分割は、Ansible をより効果的に活用し、タスクの管理が簡単にできます。
関連記事
◆ Service Account を作成削除する Ansible Playbook
https://cloud5.jp/mk-ansible-playbook-serviseaccount/
◆ AWS Secrets Manager を作成削除する Ansible Playbook
https://cloud5.jp/mk-ansible-playbook-secrets_manager/