From 76e89db5c6eaaaeadf8b9ee12aba8074babe6a9d Mon Sep 17 00:00:00 2001 From: transcaffeine Date: Sat, 5 Apr 2025 17:34:33 +0200 Subject: [PATCH] refactor(minio): add state and deployment_method parametrization, bump version to RELEASE.2025-04-03T14-56-28Z --- .../defaults/{main.yml => main/container.yml} | 16 ++---- roles/minio/defaults/main/main.yml | 12 +++++ roles/minio/tasks/deploy-docker.yml | 29 +++++++++++ roles/minio/tasks/main.yml | 52 +++++++------------ roles/minio/vars/main.yml | 6 ++- 5 files changed, 70 insertions(+), 45 deletions(-) rename roles/minio/defaults/{main.yml => main/container.yml} (78%) create mode 100644 roles/minio/defaults/main/main.yml create mode 100644 roles/minio/tasks/deploy-docker.yml diff --git a/roles/minio/defaults/main.yml b/roles/minio/defaults/main/container.yml similarity index 78% rename from roles/minio/defaults/main.yml rename to roles/minio/defaults/main/container.yml index b8b3797..b544b92 100644 --- a/roles/minio/defaults/main.yml +++ b/roles/minio/defaults/main/container.yml @@ -1,17 +1,7 @@ --- - -minio_user: ~ -minio_data_path: /opt/minio - -minio_create_user: false -minio_manage_host_filesystem: false - -minio_root_username: root -minio_root_password: ~ - minio_container_name: minio -minio_container_image_name: docker.io/minio/minio -minio_container_image_tag: latest +minio_container_image_name: "docker.io/minio/minio" +minio_container_image_tag: "RELEASE.2025-04-03T14-56-28Z" minio_container_image: "{{ minio_container_image_name }}:{{ minio_container_image_tag }}" minio_container_networks: [] minio_container_ports: [] @@ -34,6 +24,8 @@ minio_container_command: - ":{{ minio_container_listen_port_console }}" minio_container_restart_policy: "unless-stopped" minio_container_image_force_source: "{{ (minio_container_image_tag == 'latest')|bool }}" +minio_container_state: >-2 + {{ (minio_state == 'present') | ternary('started', 'absent') }} minio_container_listen_port_api: 9000 minio_container_listen_port_console: 8900 diff --git a/roles/minio/defaults/main/main.yml b/roles/minio/defaults/main/main.yml new file mode 100644 index 0000000..1865505 --- /dev/null +++ b/roles/minio/defaults/main/main.yml @@ -0,0 +1,12 @@ +--- +minio_user: ~ +minio_data_path: /opt/minio + +minio_create_user: false +minio_manage_host_filesystem: false + +minio_root_username: root +minio_root_password: ~ + +minio_state: present +minio_deployment_method: docker diff --git a/roles/minio/tasks/deploy-docker.yml b/roles/minio/tasks/deploy-docker.yml new file mode 100644 index 0000000..04e86cc --- /dev/null +++ b/roles/minio/tasks/deploy-docker.yml @@ -0,0 +1,29 @@ +--- +- name: Ensure filesystem mounts ({{ minio_data_path }}) for container volumes are present + ansible.builtin.file: + path: "{{ minio_data_path }}" + state: directory + user: "{{ minio_user|default(omit, True) }}" + group: "{{ minio_user|default(omit, True) }}" + when: minio_manage_host_filesystem + +- name: Ensure container image '{{ minio_container_image }}' is {{ minio_state }} + community.docker.docker_image: + name: "{{ minio_container_image }}" + state: "{{ minio_state }}" + source: pull + force_source: "{{ minio_container_image_force_source }}" + +- name: Ensure container '{{ minio_container_name }}' is {{ minio_container_state }} + community.docker.docker_container: + name: "{{ minio_container_name }}" + image: "{{ minio_container_image }}" + volumes: "{{ minio_container_volumes }}" + env: "{{ minio_container_env }}" + labels: "{{ minio_container_labels }}" + networks: "{{ minio_container_networks }}" + ports: "{{ minio_container_ports }}" + user: "{{ minio_user|default(omit, True) }}" + command: "{{ minio_container_command }}" + restart_policy: "{{ minio_container_restart_policy }}" + state: "{{ minio_container_state }}" diff --git a/roles/minio/tasks/main.yml b/roles/minio/tasks/main.yml index f7dbc80..61f3ff7 100644 --- a/roles/minio/tasks/main.yml +++ b/roles/minio/tasks/main.yml @@ -1,37 +1,25 @@ --- +- name: Ensure 'minio_state' is valid + ansible.builtin.fail: + msg: >- + Unsupported state '{{ minio_state }}'! + Supported states are {{ minio_states | join(', ') }}. + when: minio_state not in minio_states -- name: Ensure minio run user is present - user: +- name: Ensure 'minio_deployment_method' is valid + ansible.builtin.fail: + msg: >- + Unsupported state '{{ minio_deployment_method }}'! + Supported states are {{ minio_deployment_methods | join(', ') }}. + when: minio_deployment_method not in minio_deployment_methods + +- name: Ensure minio run user is {{ minio_state }} + ansible.builtin.user: name: "{{ minio_user }}" - state: present - system: yes + state: "{{ minio_state }}" + system: true when: minio_create_user -- name: Ensure filesystem mounts ({{ minio_data_path }}) for container volumes are present - file: - path: "{{ minio_data_path }}" - state: directory - user: "{{ minio_user|default(omit, True) }}" - group: "{{ minio_user|default(omit, True) }}" - when: minio_manage_host_filesystem - -- name: Ensure container image for minio is present - community.docker.docker_image: - name: "{{ minio_container_image }}" - state: present - source: pull - force_source: "{{ minio_container_image_force_source }}" - -- name: Ensure container {{ minio_container_name }} is running - docker_container: - name: "{{ minio_container_name }}" - image: "{{ minio_container_image }}" - volumes: "{{ minio_container_volumes }}" - env: "{{ minio_container_env }}" - labels: "{{ minio_container_labels }}" - networks: "{{ minio_container_networks }}" - ports: "{{ minio_container_ports }}" - user: "{{ minio_user|default(omit, True) }}" - command: "{{ minio_container_command }}" - restart_policy: "{{ minio_container_restart_policy }}" - state: started +- name: Deploy minio using {{ minio_deployment_method }} + ansible.builtin.include_tasks: + file: "deploy-{{ minio_deployment_method }}.yml" diff --git a/roles/minio/vars/main.yml b/roles/minio/vars/main.yml index 96ff72c..7dfa43b 100644 --- a/roles/minio/vars/main.yml +++ b/roles/minio/vars/main.yml @@ -1,5 +1,9 @@ --- - +minio_states: + - present + - absent +minio_deployment_methods: + - docker minio_container_volumes: "{{ minio_container_base_volumes + minio_container_extra_volumes }}" minio_container_env: "{{ minio_container_base_env | combine(minio_container_extra_env) }}"