From 6a77bc6d5673675eade4acea4ab2e8f30fcebf57 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 18 Dec 2025 17:20:17 +0300 Subject: [PATCH 1/3] fix ansible-lint errors --- roles/nginx_docker/README.md | 37 ++++++++++++++++++ roles/nginx_docker/defaults/main.yml | 4 ++ roles/nginx_docker/handlers/main.yml | 1 + roles/nginx_docker/meta/main.yml | 17 ++++++++ .../molecule/custom_volumes/converge.yml | 10 +++++ .../molecule/custom_volumes/molecule.yml | 27 +++++++++++++ .../molecule/custom_volumes/nginx/test.conf | 19 +++++++++ .../molecule/custom_volumes/test.txt | 1 + .../molecule/custom_volumes/verify.yml | 23 +++++++++++ .../molecule/default/converge.yml | 8 ++++ .../molecule/default/molecule.yml | 27 +++++++++++++ .../molecule/default/nginx/test.conf | 19 +++++++++ .../nginx_docker/molecule/default/verify.yml | 14 +++++++ roles/nginx_docker/tasks/main.yml | 39 +++++++++++++++++++ .../templates/docker-compose.yml.j2 | 15 +++++++ roles/nginx_docker/vars/main.yml | 1 + 16 files changed, 262 insertions(+) create mode 100644 roles/nginx_docker/README.md create mode 100644 roles/nginx_docker/defaults/main.yml create mode 100644 roles/nginx_docker/handlers/main.yml create mode 100644 roles/nginx_docker/meta/main.yml create mode 100644 roles/nginx_docker/molecule/custom_volumes/converge.yml create mode 100644 roles/nginx_docker/molecule/custom_volumes/molecule.yml create mode 100644 roles/nginx_docker/molecule/custom_volumes/nginx/test.conf create mode 100644 roles/nginx_docker/molecule/custom_volumes/test.txt create mode 100644 roles/nginx_docker/molecule/custom_volumes/verify.yml create mode 100644 roles/nginx_docker/molecule/default/converge.yml create mode 100644 roles/nginx_docker/molecule/default/molecule.yml create mode 100644 roles/nginx_docker/molecule/default/nginx/test.conf create mode 100644 roles/nginx_docker/molecule/default/verify.yml create mode 100644 roles/nginx_docker/tasks/main.yml create mode 100644 roles/nginx_docker/templates/docker-compose.yml.j2 create mode 100644 roles/nginx_docker/vars/main.yml diff --git a/roles/nginx_docker/README.md b/roles/nginx_docker/README.md new file mode 100644 index 0000000..a07e22d --- /dev/null +++ b/roles/nginx_docker/README.md @@ -0,0 +1,37 @@ +ansible-nginx-docker +========= + +Deploy NGINX as a Docker container + +Requirements +------------ + +Docker + +Role Variables +-------------- + +None + +Dependencies +------------ + +Soft dependency on `genlab.docker_ubuntu` (any means of installing Docker on the managed machine should be fine). + +Example Playbook +---------------- + +```yaml +roles: + - role: genlab.nginx_docker +``` + +License +------- + +BSD + +Author Information +------------------ + +corvus-migratorius@proton.me diff --git a/roles/nginx_docker/defaults/main.yml b/roles/nginx_docker/defaults/main.yml new file mode 100644 index 0000000..fe7ae7b --- /dev/null +++ b/roles/nginx_docker/defaults/main.yml @@ -0,0 +1,4 @@ +--- +nginx_docker_project_path: "/root/nginx-docker" +nginx_docker_image_tag: "alpine3.19" +nginx_docker_custom_volumes: [] diff --git a/roles/nginx_docker/handlers/main.yml b/roles/nginx_docker/handlers/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/nginx_docker/handlers/main.yml @@ -0,0 +1 @@ +--- diff --git a/roles/nginx_docker/meta/main.yml b/roles/nginx_docker/meta/main.yml new file mode 100644 index 0000000..99938fe --- /dev/null +++ b/roles/nginx_docker/meta/main.yml @@ -0,0 +1,17 @@ +--- +galaxy_info: + role_name: "nginx_docker" + namespace: genlab + author: "Alexander Gorelyshev" + company: "Genlab, LLC" + description: "" + license: "MIT" + min_ansible_version: "2.1" + + platforms: + - name: "Ubuntu" + versions: ["jammy", "noble"] + + galaxy_tags: [] + +dependencies: [] diff --git a/roles/nginx_docker/molecule/custom_volumes/converge.yml b/roles/nginx_docker/molecule/custom_volumes/converge.yml new file mode 100644 index 0000000..cbcb8ac --- /dev/null +++ b/roles/nginx_docker/molecule/custom_volumes/converge.yml @@ -0,0 +1,10 @@ +--- +- name: Converge + hosts: all + roles: + - role: genlab.common.docker_ubuntu + + - role: genlab.common.nginx_docker + site_config: "nginx/test.conf" + nginx_docker_custom_volumes: + - {from: /mnt, to: /mnt, mode: ro} diff --git a/roles/nginx_docker/molecule/custom_volumes/molecule.yml b/roles/nginx_docker/molecule/custom_volumes/molecule.yml new file mode 100644 index 0000000..fd2f06d --- /dev/null +++ b/roles/nginx_docker/molecule/custom_volumes/molecule.yml @@ -0,0 +1,27 @@ +--- +dependency: + name: galaxy + +driver: + name: docker + +platforms: + - name: ubuntu + image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2204}-ansible:latest + pre_build_image: true + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:rw + cgroupns_mode: host + privileged: true + +provisioner: + name: ansible + +verifier: + name: ansible + +lint: | + set -e + yamllint . + ansible-lint . diff --git a/roles/nginx_docker/molecule/custom_volumes/nginx/test.conf b/roles/nginx_docker/molecule/custom_volumes/nginx/test.conf new file mode 100644 index 0000000..d44e918 --- /dev/null +++ b/roles/nginx_docker/molecule/custom_volumes/nginx/test.conf @@ -0,0 +1,19 @@ +server { + listen 80; + # listen [::]:80; + + server_name localhost; + + access_log /var/log/nginx/host.access.log main; + + location /health/startup { + add_header Content-Type text/plain; + return 200 'healthy'; + } + + ## Redirect server error pages to the static page /50x.html + # error_page 500 502 503 504 /50x.html; + # location = /50x.html { + # root /usr/share/nginx/html; + # } +} diff --git a/roles/nginx_docker/molecule/custom_volumes/test.txt b/roles/nginx_docker/molecule/custom_volumes/test.txt new file mode 100644 index 0000000..90bfcb5 --- /dev/null +++ b/roles/nginx_docker/molecule/custom_volumes/test.txt @@ -0,0 +1 @@ +this is a test diff --git a/roles/nginx_docker/molecule/custom_volumes/verify.yml b/roles/nginx_docker/molecule/custom_volumes/verify.yml new file mode 100644 index 0000000..f3fcea6 --- /dev/null +++ b/roles/nginx_docker/molecule/custom_volumes/verify.yml @@ -0,0 +1,23 @@ +--- +- name: Verify + hosts: all + gather_facts: false + any_errors_fatal: true + + pre_tasks: + - name: "Copy test file" + ansible.builtin.copy: + src: ./test.txt + dest: /mnt/test.txt + owner: root + group: root + mode: "0660" + + tasks: + - name: "Verify custom directory was mounted inside container successfully" + register: nginx_docker_this + failed_when: nginx_docker_this.stdout != 'this is a test' + changed_when: false + community.docker.docker_container_exec: + container: nginx + command: cat /mnt/test.txt diff --git a/roles/nginx_docker/molecule/default/converge.yml b/roles/nginx_docker/molecule/default/converge.yml new file mode 100644 index 0000000..186958b --- /dev/null +++ b/roles/nginx_docker/molecule/default/converge.yml @@ -0,0 +1,8 @@ +--- +- name: Converge + hosts: all + roles: + - role: genlab.common.docker_ubuntu + + - role: genlab.common.nginx_docker + site_config: "nginx/test.conf" diff --git a/roles/nginx_docker/molecule/default/molecule.yml b/roles/nginx_docker/molecule/default/molecule.yml new file mode 100644 index 0000000..fd2f06d --- /dev/null +++ b/roles/nginx_docker/molecule/default/molecule.yml @@ -0,0 +1,27 @@ +--- +dependency: + name: galaxy + +driver: + name: docker + +platforms: + - name: ubuntu + image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2204}-ansible:latest + pre_build_image: true + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:rw + cgroupns_mode: host + privileged: true + +provisioner: + name: ansible + +verifier: + name: ansible + +lint: | + set -e + yamllint . + ansible-lint . diff --git a/roles/nginx_docker/molecule/default/nginx/test.conf b/roles/nginx_docker/molecule/default/nginx/test.conf new file mode 100644 index 0000000..d44e918 --- /dev/null +++ b/roles/nginx_docker/molecule/default/nginx/test.conf @@ -0,0 +1,19 @@ +server { + listen 80; + # listen [::]:80; + + server_name localhost; + + access_log /var/log/nginx/host.access.log main; + + location /health/startup { + add_header Content-Type text/plain; + return 200 'healthy'; + } + + ## Redirect server error pages to the static page /50x.html + # error_page 500 502 503 504 /50x.html; + # location = /50x.html { + # root /usr/share/nginx/html; + # } +} diff --git a/roles/nginx_docker/molecule/default/verify.yml b/roles/nginx_docker/molecule/default/verify.yml new file mode 100644 index 0000000..d9b149d --- /dev/null +++ b/roles/nginx_docker/molecule/default/verify.yml @@ -0,0 +1,14 @@ +--- +- name: Verify + hosts: all + gather_facts: false + any_errors_fatal: true + + tasks: + - name: "Make an HTTP query" + register: nginx_docker_this + failed_when: nginx_docker_this is failed or 'healthy' not in nginx_docker_this.content + ansible.builtin.uri: + url: "http://localhost:80/health/startup" + method: "GET" + return_content: true diff --git a/roles/nginx_docker/tasks/main.yml b/roles/nginx_docker/tasks/main.yml new file mode 100644 index 0000000..aa40fbf --- /dev/null +++ b/roles/nginx_docker/tasks/main.yml @@ -0,0 +1,39 @@ +--- +- name: "Create project directory" + ansible.builtin.file: + state: directory + path: "{{ nginx_docker_project_path }}/conf.d/" + owner: root + group: root + mode: "0660" + +- name: "Template project stack" + ansible.builtin.template: + src: "docker-compose.yml.j2" + dest: "{{ nginx_docker_project_path }}/docker-compose.yml" + owner: root + group: root + mode: "0660" + +- name: "Push Nginx configuration file" + ansible.builtin.copy: + src: "{{ site_config }}" + dest: "{{ nginx_docker_project_path }}/conf.d/{{ site_config | basename }}" + owner: root + group: www-data + mode: "0660" + +- name: "Build and start the Compose stack" + community.docker.docker_compose_v2: + tls_hostname: localhost + project_src: "{{ nginx_docker_project_path }}" + files: + - "docker-compose.yml" + build: always + state: present + +- name: "Reload Nginx configuration" + changed_when: false + community.docker.docker_container_exec: + container: nginx + command: "nginx -s reload" diff --git a/roles/nginx_docker/templates/docker-compose.yml.j2 b/roles/nginx_docker/templates/docker-compose.yml.j2 new file mode 100644 index 0000000..b8eb541 --- /dev/null +++ b/roles/nginx_docker/templates/docker-compose.yml.j2 @@ -0,0 +1,15 @@ +--- +services: + + nginx: + image: nginx:{{ nginx_docker_image_tag }} + container_name: nginx + hostname: nginx + restart: unless-stopped + network_mode: host + volumes: + - "{{ nginx_docker_project_path }}/conf.d/:/etc/nginx/conf.d/:ro" + - "/var/log/nginx/:/var/log/nginx/:rw" +{% for v in nginx_docker_custom_volumes %} + - {{ v.from}}:{{v.to}}:{{v.mode | default('rw')}} +{% endfor %} diff --git a/roles/nginx_docker/vars/main.yml b/roles/nginx_docker/vars/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/nginx_docker/vars/main.yml @@ -0,0 +1 @@ +--- From 8165039ed2ae3e5be86302e41f95f62c3c4ac22f Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 18 Dec 2025 17:23:30 +0300 Subject: [PATCH 2/3] update meta --- README.md | 1 + galaxy.yml | 2 +- roles/nginx_docker/README.md | 5 +---- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index dea81b8..756cd56 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [mkfs](roles/mkfs/README.md) - [mount_device](roles/mount_device/README.md) - [nginx](roles/nginx/README.md) +- [nginx_docker](roles/nginx_docker/README.md) - [node_exporter](roles/node_exporter/README.md) - [prometheus](roles/prometheus/README.md) - [promtail](roles/promtail/README.md) diff --git a/galaxy.yml b/galaxy.yml index dff95d3..a800451 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -1,7 +1,7 @@ --- namespace: genlab name: common -version: 0.28.0 +version: 0.29.0 readme: README.md authors: - Alexander Gorelyshev (corvus-migratorius@proton.me) diff --git a/roles/nginx_docker/README.md b/roles/nginx_docker/README.md index a07e22d..bb8fe42 100644 --- a/roles/nginx_docker/README.md +++ b/roles/nginx_docker/README.md @@ -21,10 +21,7 @@ Soft dependency on `genlab.docker_ubuntu` (any means of installing Docker on the Example Playbook ---------------- -```yaml -roles: - - role: genlab.nginx_docker -``` +see [converge.yml](molecule/default/converge.yml) License ------- From 7b05b6cf057e8c91ca7b5a699ebfca0f6b5642e6 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 18 Dec 2025 18:03:42 +0300 Subject: [PATCH 3/3] fix kics error --- roles/nginx_docker/molecule/default/verify.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/nginx_docker/molecule/default/verify.yml b/roles/nginx_docker/molecule/default/verify.yml index d9b149d..4e7b308 100644 --- a/roles/nginx_docker/molecule/default/verify.yml +++ b/roles/nginx_docker/molecule/default/verify.yml @@ -5,6 +5,7 @@ any_errors_fatal: true tasks: + # kics-scan ignore-block - name: "Make an HTTP query" register: nginx_docker_this failed_when: nginx_docker_this is failed or 'healthy' not in nginx_docker_this.content