moving to molecule
This commit is contained in:
0
molecule.yml
Normal file
0
molecule.yml
Normal file
10
molecule/fedora/converge.yml
Normal file
10
molecule/fedora/converge.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
# Purpose: bring the instance to the desired state by running the role under test.
|
||||
# Molecule calls this playbook with `molecule converge`.
|
||||
- name: Converge
|
||||
hosts: all
|
||||
gather_facts: true # Disable if your role does not rely on facts
|
||||
tasks:
|
||||
- name: Apply role under test
|
||||
ansible.builtin.include_role:
|
||||
name: yournamespace.yourcollection.yourrole
|
||||
35
molecule/fedora/create.yml
Normal file
35
molecule/fedora/create.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
- name: Create
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: false
|
||||
# no_log: "{{ molecule_no_log }}"
|
||||
tasks:
|
||||
# TODO: Developer must implement and populate 'server' variable
|
||||
|
||||
- name: Create instance config
|
||||
when: server.changed | default(false) | bool # noqa no-handler
|
||||
block:
|
||||
- name: Populate instance config dict # noqa jinja
|
||||
ansible.builtin.set_fact:
|
||||
instance_conf_dict: {}
|
||||
# instance': "{{ }}",
|
||||
# address': "{{ }}",
|
||||
# user': "{{ }}",
|
||||
# port': "{{ }}",
|
||||
# 'identity_file': "{{ }}", }
|
||||
with_items: "{{ server.results }}"
|
||||
register: instance_config_dict
|
||||
|
||||
- name: Convert instance config dict to a list
|
||||
ansible.builtin.set_fact:
|
||||
instance_conf: "{{ instance_config_dict.results | map(attribute='ansible_facts.instance_conf_dict') | list }}"
|
||||
|
||||
- name: Dump instance config
|
||||
ansible.builtin.copy:
|
||||
content: |
|
||||
# Molecule managed
|
||||
|
||||
{{ instance_conf | to_json | from_json | to_yaml }}
|
||||
dest: "{{ molecule_instance_config }}"
|
||||
mode: "0600"
|
||||
24
molecule/fedora/destroy.yml
Normal file
24
molecule/fedora/destroy.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
- name: Destroy
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: false
|
||||
# no_log: "{{ molecule_no_log }}"
|
||||
tasks:
|
||||
# Developer must implement.
|
||||
|
||||
# Mandatory configuration for Molecule to function.
|
||||
|
||||
- name: Populate instance config
|
||||
ansible.builtin.set_fact:
|
||||
instance_conf: {}
|
||||
|
||||
- name: Dump instance config
|
||||
ansible.builtin.copy:
|
||||
content: |
|
||||
# Molecule managed
|
||||
|
||||
{{ instance_conf | to_json | from_json | to_yaml }}
|
||||
dest: "{{ molecule_instance_config }}"
|
||||
mode: "0600"
|
||||
when: server.changed | default(false) | bool # noqa no-handler
|
||||
10
molecule/fedora/inventory.yml
Normal file
10
molecule/fedora/inventory.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
all:
|
||||
children:
|
||||
builders:
|
||||
hosts:
|
||||
fedora-test:
|
||||
ansible_host: fedora-test
|
||||
container_image: registry.fedoraproject.org/fedora:latest
|
||||
container_command: /sbin/init
|
||||
container_privileged: true
|
||||
47
molecule/fedora/molecule.yml
Normal file
47
molecule/fedora/molecule.yml
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
# Dependency management (download roles/collections)
|
||||
dependency:
|
||||
name: galaxy
|
||||
options:
|
||||
requirements-file: ../requirements.yml
|
||||
|
||||
|
||||
ansible:
|
||||
cfg:
|
||||
defaults:
|
||||
host_key_checking: false
|
||||
verbosity: 1
|
||||
|
||||
executor:
|
||||
backend: ansible-playbook
|
||||
args:
|
||||
ansible_playbook:
|
||||
- --diff
|
||||
- --force-handlers
|
||||
- --inventory=/path/to/inventory.yml
|
||||
ansible_navigator:
|
||||
- --mode stdout
|
||||
- --pull-policy missing
|
||||
- --execution-environment-image ghcr.io/ansible/community-ansible-dev-tools:latest
|
||||
|
||||
playbooks:
|
||||
create: create.yml
|
||||
converge: converge.yml
|
||||
destroy: destroy.yml
|
||||
cleanup: cleanup.yml
|
||||
prepare: prepare.yml
|
||||
side_effect: side_effect.yml
|
||||
verify: verify.yml
|
||||
|
||||
scenario:
|
||||
name: fedora
|
||||
test_sequence:
|
||||
- dependency
|
||||
- syntax
|
||||
- create
|
||||
- prepare
|
||||
- converge
|
||||
- idempotence
|
||||
- verify
|
||||
- cleanup
|
||||
- destroy
|
||||
10
molecule/fedora/verify.yml
Normal file
10
molecule/fedora/verify.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
# Purpose: assert that the instance really ended up in the expected state.
|
||||
# Molecule calls this playbook with `molecule verify`.
|
||||
- name: Verify
|
||||
hosts: instance
|
||||
gather_facts: false # Quicker, if you do not need facts
|
||||
tasks:
|
||||
- name: Assert something
|
||||
ansible.builtin.assert:
|
||||
that: true
|
||||
4
molecule/requirements.yml
Normal file
4
molecule/requirements.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
collections:
|
||||
- name: containers.podman
|
||||
version: ">=1.10.0"
|
||||
@@ -1,18 +0,0 @@
|
||||
FROM debian:bookworm
|
||||
LABEL PROJECT "ansible_role_package"
|
||||
LABEL MAINTAINER "Matthew Stobbs <matthew@stobbs.ca>"
|
||||
|
||||
RUN useradd -d /home/ansible -m -G wheel ansible
|
||||
RUN apt update && \
|
||||
apt install -y openssh-server python3-paramiko gnupg2
|
||||
EXPOSE 22
|
||||
|
||||
USER ansible
|
||||
WORKDIR /home/ansible
|
||||
RUN mkdir /home/ansible/.ssh
|
||||
COPY ./pubkey /home/ansible/.ssh/authorized_keys
|
||||
|
||||
USER root
|
||||
RUN echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudoers
|
||||
RUN ssh-keygen -A
|
||||
ENTRYPOINT /usr/sbin/sshd -D
|
||||
@@ -1,17 +0,0 @@
|
||||
FROM almalinux:9
|
||||
LABEL PROJECT "ansible_role_package"
|
||||
LABEL MAINTAINER "Matthew Stobbs <matthew@stobbs.ca>"
|
||||
|
||||
RUN useradd -d /home/ansible -m -G wheel ansible
|
||||
RUN dnf install -y openssh-server python3-paramiko python3-libdnf gnupg2
|
||||
EXPOSE 22
|
||||
|
||||
USER ansible
|
||||
WORKDIR /home/ansible
|
||||
RUN mkdir /home/ansible/.ssh
|
||||
COPY ./pubkey /home/ansible/.ssh/authorized_keys
|
||||
|
||||
USER root
|
||||
RUN echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudoers
|
||||
RUN ssh-keygen -A
|
||||
ENTRYPOINT /usr/sbin/sshd -D
|
||||
@@ -1,17 +0,0 @@
|
||||
FROM fedora:41
|
||||
LABEL PROJECT "ansible_role_package"
|
||||
LABEL MAINTAINER "Matthew Stobbs <matthew@stobbs.ca>"
|
||||
|
||||
RUN useradd -d /home/ansible -m -G wheel ansible
|
||||
RUN dnf install -y openssh-server python3-paramiko python3-libdnf5 gnupg2
|
||||
EXPOSE 22
|
||||
|
||||
USER ansible
|
||||
WORKDIR /home/ansible
|
||||
RUN mkdir /home/ansible/.ssh
|
||||
COPY ./pubkey /home/ansible/.ssh/authorized_keys
|
||||
|
||||
USER root
|
||||
RUN echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudoers
|
||||
RUN ssh-keygen -A
|
||||
ENTRYPOINT /usr/sbin/sshd -D
|
||||
@@ -1,18 +0,0 @@
|
||||
FROM ubuntu:24.04
|
||||
LABEL PROJECT "ansible_role_package"
|
||||
LABEL MAINTAINER "Matthew Stobbs <matthew@stobbs.ca>"
|
||||
|
||||
RUN useradd -d /home/ansible -m -G wheel ansible
|
||||
RUN apt update && \
|
||||
apt install -y openssh-server python3-paramiko gnupg2
|
||||
EXPOSE 22
|
||||
|
||||
USER ansible
|
||||
WORKDIR /home/ansible
|
||||
RUN mkdir /home/ansible/.ssh
|
||||
COPY ./pubkey /home/ansible/.ssh/authorized_keys
|
||||
|
||||
USER root
|
||||
RUN echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudoers
|
||||
RUN ssh-keygen -A
|
||||
ENTRYPOINT /usr/sbin/sshd -D
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
set -x
|
||||
|
||||
[[ -f ./lib.sh ]] && source ./lib.sh || exit 1
|
||||
|
||||
ssh-keygen -R "[127.0.0.1]:2222"
|
||||
|
||||
for os in ${OSBUILDS[@]}
|
||||
do
|
||||
if podman container exists ${CONTAINER}_${os}
|
||||
then
|
||||
podman stop ${CONTAINER}_${os}
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$HOSTOS" = "Darwin" ]
|
||||
then
|
||||
podman machine stop ${MACHINENAME}
|
||||
fi
|
||||
@@ -1,7 +0,0 @@
|
||||
test:
|
||||
hosts:
|
||||
localhost:
|
||||
ansible_ssh_host: 127.0.0.1
|
||||
ansible_ssh_port: 2222
|
||||
ansible_ssh_user: ansible
|
||||
ansible_ssh_extra_args: "-o StrictHostKeyChecking=no"
|
||||
10
tests/lib.sh
10
tests/lib.sh
@@ -1,10 +0,0 @@
|
||||
HOSTOS="$(uname -o)"
|
||||
IMAGE=${IMAGE:-packagetest}
|
||||
CONTAINER=${CONTAINER:-packagetest}
|
||||
MACHINENAME=${MACHINENAME:-podman-machine-default}
|
||||
# OSBUILDS=("fedora" "el9" "debian" "ubuntu")
|
||||
OSBUILDS=("fedora")
|
||||
|
||||
function machine_state {
|
||||
echo $(podman machine inspect $MACHINENAME | jq -r '.[].State')
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAAxfDLK7wu1ITTMV8gIzImO+KkXsjByvN7gYebqb5e+ stobbsm@ed25591
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
set -x
|
||||
|
||||
[[ -f ./lib.sh ]] && source ./lib.sh || exit 1
|
||||
|
||||
if [ "$HOSTOS" = "Darwin" ]
|
||||
then
|
||||
echo "Starting $MACHINENAME"
|
||||
podman machine start -q $MACHINENAME
|
||||
while [ "$(machine_state)" != "running" ]
|
||||
do
|
||||
echo $(machine_state)
|
||||
echo "Wating for $MACHINENAME to start"
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "Machine $MACHINENAME running"
|
||||
fi
|
||||
|
||||
echo "Building container images"
|
||||
for os in ${OSBUILDS[@]}
|
||||
do
|
||||
echo "Building image for ${os}"
|
||||
podman build --platform linux/amd64 -f Containerfile.${os} -t localhost/${IMAGE}:${os} .
|
||||
done
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
set -x
|
||||
|
||||
[[ -f ./lib.sh ]] && source ./lib.sh || exit 1
|
||||
|
||||
for os in ${OSBUILDS[@]}
|
||||
do
|
||||
podman run --rm -it -d --platform linux/amd64 --name ${CONTAINER}_${os} -p 2222:22 localhost/${IMAGE}:${os}
|
||||
ansible-playbook "test.yml" -i inventory.yml
|
||||
done
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
- hosts: localhost
|
||||
vars:
|
||||
testpkgs:
|
||||
- hyprland
|
||||
tasks:
|
||||
- name: Test all packages with use_local=false
|
||||
ansible.builtin.include_role:
|
||||
name: ansible_role_package
|
||||
vars:
|
||||
use_local: false
|
||||
packages: "{{ testpkgs }}"
|
||||
Reference in New Issue
Block a user