From a8f01f01c708b8c0a2f2fcafb40432f480c8c9a4 Mon Sep 17 00:00:00 2001 From: transcaffeine Date: Sat, 9 Aug 2025 21:39:39 +0200 Subject: [PATCH] feat(ara): add ansible role for ara records ansible --- playbooks/ara.yml | 7 +++++++ roles/ara/README.md | 0 roles/ara/defaults/main/container.yml | 28 +++++++++++++++++++++++++++ roles/ara/defaults/main/main.yml | 5 +++++ roles/ara/defaults/main/user.yml | 8 ++++++++ roles/ara/meta/main.yml | 0 roles/ara/tasks/check.yml | 14 ++++++++++++++ roles/ara/tasks/deploy-docker.yml | 12 ++++++++++++ roles/ara/tasks/deploy-podman.yml | 12 ++++++++++++ roles/ara/tasks/main.yml | 18 +++++++++++++++++ roles/ara/vars/main.yml | 7 +++++++ 11 files changed, 111 insertions(+) create mode 100644 playbooks/ara.yml create mode 100644 roles/ara/README.md create mode 100644 roles/ara/defaults/main/container.yml create mode 100644 roles/ara/defaults/main/main.yml create mode 100644 roles/ara/defaults/main/user.yml create mode 100644 roles/ara/meta/main.yml create mode 100644 roles/ara/tasks/check.yml create mode 100644 roles/ara/tasks/deploy-docker.yml create mode 100644 roles/ara/tasks/deploy-podman.yml create mode 100644 roles/ara/tasks/main.yml create mode 100644 roles/ara/vars/main.yml diff --git a/playbooks/ara.yml b/playbooks/ara.yml new file mode 100644 index 0000000..4150829 --- /dev/null +++ b/playbooks/ara.yml @@ -0,0 +1,7 @@ +--- +- name: Deploy 'Ara records ansible' API server + hosts: "{{ ara_server_hosts | default('ara_server') }}" + become: "{{ ara_become | default(false) }}" + gather_facts: "{{ ara_gather_facts | default(false) }}" + roles: + - role: finallycoffee.cicd.ara diff --git a/roles/ara/README.md b/roles/ara/README.md new file mode 100644 index 0000000..e69de29 diff --git a/roles/ara/defaults/main/container.yml b/roles/ara/defaults/main/container.yml new file mode 100644 index 0000000..939e992 --- /dev/null +++ b/roles/ara/defaults/main/container.yml @@ -0,0 +1,28 @@ +--- +ara_container_image_registry: "quay.io" +ara_container_image_namespace: "recordsansible" +ara_container_image_repository: "ara-api" +ara_container_image_name: >-2 + {{ [ + ara_container_image_registry | default([], true), + ara_container_image_namespace | default([], true), + ara_container_image_repository + ] | flatten | join('/') }} +ara_container_image_tag: ~ #TODO +ara_container_image: >-2 + {{ [ + ara_container_image_name, + ara_container_image_tag | default(ara_version, true) + ] | join(':') }} +ara_container_image_source: "pull" +ara_container_image_force_source: >-2 + {{ ara_container_image_tag | default(false, true) | bool }} +ara_container_image_pull: "{{ ara_container_image_source == 'pull' }}" +ara_container_image_force_pull: >-2 + {{ ara_container_image_pull and ara_container_image_force_source }} +ara_container_image_state: "{{ ara_state }}" + +ara_container_name: "ara-api" +ara_container_state: >-2 + {{ (ara_state == 'present') | ternary('started', 'absent') }} + diff --git a/roles/ara/defaults/main/main.yml b/roles/ara/defaults/main/main.yml new file mode 100644 index 0000000..d8f003d --- /dev/null +++ b/roles/ara/defaults/main/main.yml @@ -0,0 +1,5 @@ +--- +ara_user: "ara" +ara_version: "1.7.2" +ara_state: "present" +ara_deployment_method: "docker" diff --git a/roles/ara/defaults/main/user.yml b/roles/ara/defaults/main/user.yml new file mode 100644 index 0000000..e33521a --- /dev/null +++ b/roles/ara/defaults/main/user.yml @@ -0,0 +1,8 @@ +--- +ara_user_system: true +ara_user_create_home: false +ara_user_groups: ~ +ara_user_append: ~ + +ara_user_uid: "{{ ara_user_info.uid | default(ara_user) }}" +ara_user_gid: "{{ ara_user_info.group | default(ara_user) }}" diff --git a/roles/ara/meta/main.yml b/roles/ara/meta/main.yml new file mode 100644 index 0000000..e69de29 diff --git a/roles/ara/tasks/check.yml b/roles/ara/tasks/check.yml new file mode 100644 index 0000000..66a57e2 --- /dev/null +++ b/roles/ara/tasks/check.yml @@ -0,0 +1,14 @@ +--- +- name: Ensure 'ara_state' is valid + ansible.builtin.fail: + msg: >-2 + Unsupported ara_state '{{ ara_state }}'. + Supported states are {{ ara_states | map(quote) | join(', ') }}. + when: ara_state not in ara_states + +- name: Ensure 'ara_deployment_method' is valid + ansible.builtin.fail: + msg: >-2 + Unsupported ara_deployment_method '{{ ara_deployment_method }}'. + Supported methods are {{ ara_deployment_methods | map(quote) | join(', ') }}. + when: ara_deployment_method not in ara_deployment_methods diff --git a/roles/ara/tasks/deploy-docker.yml b/roles/ara/tasks/deploy-docker.yml new file mode 100644 index 0000000..e3788ab --- /dev/null +++ b/roles/ara/tasks/deploy-docker.yml @@ -0,0 +1,12 @@ +--- +- name: Ensure ara container image '{{ ara_container_image }}' is {{ ara_container_image_state }} + community.docker.docker_image: + name: "{{ ara_container_image }}" + state: "{{ ara_container_image_state }}" + source: "{{ ara_container_image_source }}" + force_source: "{{ ara_container_image_force_source }}" + +- name: Ensure ara container '{{ ara_container_name }}' is {{ ara_container_state }} + community.docker.docker_container: + name: "{{ ara_container_name }}" + image: "{{ ara_container_image }}" diff --git a/roles/ara/tasks/deploy-podman.yml b/roles/ara/tasks/deploy-podman.yml new file mode 100644 index 0000000..559870d --- /dev/null +++ b/roles/ara/tasks/deploy-podman.yml @@ -0,0 +1,12 @@ +--- +- name: Ensure ara container image '{{ ara_container_image }}' is {{ ara_container_image_state }} + containers.podman.podman_image: + name: "{{ ara_container_image }}" + state: "{{ ara_container_image_state }}" + pull: "{{ ara_container_image_pull }}" + force: "{{ ara_container_image_force_pull }}" + +- name: Ensure ara container '{{ ara_container_name }}' is {{ ara_container_state }} + containers.podman.podman_container: + name: "{{ ara_container_name }}" + image: "{{ ara_container_image }}" diff --git a/roles/ara/tasks/main.yml b/roles/ara/tasks/main.yml new file mode 100644 index 0000000..79019dc --- /dev/null +++ b/roles/ara/tasks/main.yml @@ -0,0 +1,18 @@ +--- +- name: Ensure preconditions for ara role are met + ansible.builtin.include_tasks: + file: "check.yml" + +- name: Ensure ara user '{{ ara_user }}' is {{ ara_state }} + ansible.builtin.user: + name: "{{ ara_user }}" + state: "{{ ara_state }}" + system: "{{ ara_user_system }}" + create_home: "{{ ara_user_create_home }}" + groups: "{{ ara_user_groups | default(omit, true) }}" + append: "{{ ara_user_append | default(omit, true) }}" + register: ara_user_info + +- name: Deploy ara api server using {{ ara_deployment_method }} + ansible.builtin.include_tasks: + file: "deploy-{{ ara_deployment_method }}.yml" diff --git a/roles/ara/vars/main.yml b/roles/ara/vars/main.yml new file mode 100644 index 0000000..3690680 --- /dev/null +++ b/roles/ara/vars/main.yml @@ -0,0 +1,7 @@ +--- +ara_states: + - "present" + - "absent" +ara_deployment_methods: + - "docker" + - "podman"