test(bind9): add Molecule scenario

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
volker.raschekandCopilot committed 2026-10-24 16:45:32 +02:00
1 parent d7826d46a1
commit 9b57989430
9 files changed
+185

No files matched your search

+17
View File
@@ -0,0 +1,17 @@
ARG BASE_IMAGE
FROM ${BASE_IMAGE}
ENV container=docker
RUN if command -v pacman > /dev/null; then \
pacman --sync --refresh --noconfirm systemd systemd-sysvcompat python; \
elif command -v apt-get > /dev/null; then \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes systemd systemd-sysv python3 python3-apt; \
else \
dnf install --assumeyes systemd python3 python3-libdnf5 && \
dnf clean all; \
fi
STOPSIGNAL SIGRTMIN+3
CMD ["/sbin/init"]
+4
View File
@@ -0,0 +1,4 @@
---
collections:
- name: community.docker
+12
View File
@@ -0,0 +1,12 @@
---
- name: Converge
hosts: all
vars:
bind9_systemd_dropin: |
[Service]
Environment=MOLECULE_BIND9_DROPIN=present
tasks:
- name: Include the role bind9
ansible.builtin.include_role:
name: bind9
+44
View File
@@ -0,0 +1,44 @@
---
- name: Create
hosts: localhost
gather_facts: false
tasks:
- name: Build systemd-enabled test images
community.docker.docker_image:
name: "bind9-molecule-{{ item.name }}:latest"
source: build
build:
path: "{{ molecule_scenario_directory }}"
args:
BASE_IMAGE: "{{ item.image }}"
loop: "{{ molecule_yml.platforms }}"
loop_control:
label: "{{ item.name }}"
- name: Start a systemd container per platform
community.docker.docker_container:
name: "{{ item.name }}"
image: "bind9-molecule-{{ item.name }}:latest"
command: /sbin/init
state: started
privileged: true
cgroupns_mode: host
tmpfs:
- /run
- /run/lock
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
loop: "{{ molecule_yml.platforms }}"
loop_control:
label: "{{ item.name }}"
- name: Write the instance config
ansible.builtin.copy:
content: |
{% for platform in molecule_yml.platforms %}
- instance: {{ platform.name }}
connection: community.docker.docker
{% endfor %}
dest: "{{ molecule_instance_config }}"
mode: "0600"
+27
View File
@@ -0,0 +1,27 @@
---
- name: Destroy
hosts: localhost
gather_facts: false
tasks:
- name: Remove the container of every platform
community.docker.docker_container:
name: "{{ item.name }}"
state: absent
loop: "{{ molecule_yml.platforms }}"
loop_control:
label: "{{ item.name }}"
- name: Remove the test image of every platform
community.docker.docker_image:
name: "bind9-molecule-{{ item.name }}:latest"
state: absent
loop: "{{ molecule_yml.platforms }}"
loop_control:
label: "{{ item.name }}"
- name: Empty the instance config
ansible.builtin.copy:
content: "[]"
dest: "{{ molecule_instance_config }}"
mode: "0600"
+36
View File
@@ -0,0 +1,36 @@
---
driver:
name: default
options:
managed: true
login_cmd_template: "docker exec --interactive --tty {instance} bash"
platforms:
- name: bind9-archlinux
image: docker.io/library/archlinux:base
- name: bind9-debian
image: docker.io/library/debian:13
- name: bind9-fedora
image: registry.fedoraproject.org/fedora:43
provisioner:
name: ansible
env:
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
config_options:
defaults:
interpreter_python: auto_silent
scenario:
test_sequence:
- dependency
- cleanup
- destroy
- syntax
- create
- prepare
- converge
- verify
- cleanup
- destroy
+12
View File
@@ -0,0 +1,12 @@
---
- name: Prepare
hosts: all
tasks:
- name: Create the parent directory for DNSSEC keys
ansible.builtin.file:
path: /var/named
owner: root
group: root
mode: "0755"
state: directory
+4
View File
@@ -0,0 +1,4 @@
---
# The role has no role dependencies, but molecule warns about the missing file.
roles: []
+29
View File
@@ -0,0 +1,29 @@
---
- name: Verify
hosts: all
tasks:
- name: Validate the generated BIND configuration
ansible.builtin.command:
argv:
- named-checkconf
- "{{ '/etc/bind/named.conf' if ansible_facts['os_family'] == 'Debian' else '/etc/named.conf' }}"
changed_when: false
- name: Gather service states
ansible.builtin.service_facts:
- name: Assert that named is active
ansible.builtin.assert:
that:
- ansible_facts.services['named.service'].state == 'running'
- name: Read the systemd drop-in
ansible.builtin.slurp:
src: /etc/systemd/system/named.service.d/override.conf
register: _bind9_systemd_dropin
- name: Assert that the configured systemd drop-in was installed
ansible.builtin.assert:
that:
- "'Environment=MOLECULE_BIND9_DROPIN=present' in (_bind9_systemd_dropin.content | b64decode)"