diff --git a/roles/nginx/defaults/main.yml b/roles/nginx/defaults/main.yml index 6f81f15..ec74323 100644 --- a/roles/nginx/defaults/main.yml +++ b/roles/nginx/defaults/main.yml @@ -3,6 +3,7 @@ nginx_version: "1.27.2" nginx_flavour: alpine nginx_base_path: /opt/nginx nginx_config_file: "{{ nginx_base_path }}/nginx.conf" +nginx_state: present nginx_container_name: nginx nginx_container_image_reference: >- @@ -25,6 +26,9 @@ nginx_container_image_repository: >- nginx_container_image_registry: "docker.io" nginx_container_image_name: "nginx" nginx_container_image_tag: ~ +nginx_container_image_source: pull +nginx_container_state: >-2 + {{ (nginx_state == 'present') | ternary('started', 'absent') }} nginx_container_restart_policy: "unless-stopped" nginx_container_volumes: diff --git a/roles/nginx/meta/main.yml b/roles/nginx/meta/main.yml new file mode 100644 index 0000000..b411852 --- /dev/null +++ b/roles/nginx/meta/main.yml @@ -0,0 +1,11 @@ +--- +allow_duplicates: true +dependencies: [] +galaxy_info: + role_name: nginx + description: Deploy nginx, a webserver + galaxy_tags: + - nginx + - http + - webserver + - docker diff --git a/roles/nginx/tasks/main.yml b/roles/nginx/tasks/main.yml index 6a5b98d..9b95af9 100644 --- a/roles/nginx/tasks/main.yml +++ b/roles/nginx/tasks/main.yml @@ -1,10 +1,23 @@ --- +- name: Check if state is supported + ansible.builtin.fail: + msg: >-2 + Unsupported state '{{ nginx_state }}'. Supported + states are {{ nginx_states | join(', ') }}. + when: nginx_state not in nginx_states -- name: Ensure base path '{{ nginx_base_path }}' exists +- name: Ensure nginx config file is {{ nginx_state }} + ansible.builtin.file: + path: "{{ nginx_config_file }}" + state: "{{ nginx_state }}" + when: nginx_state == 'absent' + +- name: Ensure base path '{{ nginx_base_path }}' is {{ nginx_state }} ansible.builtin.file: path: "{{ nginx_base_path }}" - state: directory - mode: 0755 + mode: "0755" + state: >-2 + {{ (nginx_state == 'present') | ternary('directory', 'absent') }} - name: Ensure nginx config file is templated ansible.builtin.copy: @@ -13,15 +26,18 @@ mode: 0640 notify: - restart-nginx + when: nginx_state == 'present' -- name: Ensure docker container image is present +- name: Ensure docker container image '{{ nginx_container_image_reference }}' is {{ nginx_state }} community.docker.docker_image: name: "{{ nginx_container_image_reference }}" - state: present - source: pull - force_source: "{{ nginx_container_image_tag is defined and nginx_container_image_tag | string != '' }}" + state: "{{ nginx_state }}" + source: "{{ nginx_container_image_source }}" + force_source: >-2 + {{ nginx_container_image_force_source + | default(nginx_container_image_tag | default(false, true)) }} -- name: Ensure docker container '{{ nginx_container_name }}' is running +- name: Ensure docker container '{{ nginx_container_name }}' is {{ nginx_container_state }} community.docker.docker_container: name: "{{ nginx_container_name }}" image: "{{ nginx_container_image_reference }}" @@ -34,4 +50,4 @@ networks: "{{ nginx_container_networks | default(omit, true) }}" purge_networks: "{{ nginx_container_purge_networks | default(omit, true) }}" restart_policy: "{{ nginx_container_restart_policy }}" - state: started + state: "{{ nginx_container_state }}" diff --git a/roles/nginx/vars/main.yml b/roles/nginx/vars/main.yml new file mode 100644 index 0000000..022ab75 --- /dev/null +++ b/roles/nginx/vars/main.yml @@ -0,0 +1,4 @@ +--- +nginx_states: + - present + - absent