Ansible Playbook を管理しやすく効率的に分割する

お疲れ様です。

 

今回は、以前投稿した 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/

Last modified: 2024-02-16

Author