# Ansible Role Development & Testing with Molecule (Podman)

This guide explains how to create an Ansible role and test it locally using [Molecule](https://molecule.readthedocs.io/) with the Podman driver.

---

## 1. Prerequisites

- [Ansible](https://docs.ansible.com/)
- [Molecule](https://molecule.readthedocs.io/)
- [Podman](https://podman.io/)
- [Python](https://www.python.org/) (with `pip`)

Install Molecule and Podman driver:
```sh
pip install molecule molecule-podman
```

---

## 2. Create a New Role

Navigate to your roles directory and create a new role:
```sh
cd ansible/roles
ansible-galaxy init myrole
cd myrole
```

---

## 3. Initialize Molecule with Podman

```sh
molecule init scenario default -d podman
```

---

## 4. Edit Molecule Configuration

Edit `molecule/default/molecule.yml` to set your platform and image, for example:
```yaml
---
dependency:
  name: galaxy
driver:
  name: podman
platforms:
  - name: instance
    image: ubuntu:20.04
    privileged: true
provisioner:
  name: ansible
  options:
    vvv: true
  env:
    ANSIBLE_ROLES_PATH: ../../../
verifier:
  name: ansible

```

---

## 5. Write Your Role Tasks

Edit `tasks/main.yml` to add your automation logic.

---

## 6. Configure Molecule to Use Your Role

Edit `molecule/default/converge.yml`:
```yaml
---
- name: Converge
  hosts: all
  gather_facts: false
  tasks:
    - name: Include role
      ansible.builtin.include_role:
        name: myrole
```

---

## 6. Configure preparation steps (required for python and sudo)

```yaml
---
---
- name: Prepare
  hosts: all
  gather_facts: false
  tasks:
    - name: Update cache # noqa no-changed-when
      ansible.builtin.raw: apt update

    - name: Install required packages # noqa no-changed-when
      ansible.builtin.raw: apt install -y python3 sudo

### Insert here other preparation steps
````

---

## 8. Run Molecule Tests

From the root of your role directory, run:
```sh
molecule test
```

This will:
- Build the container
- Apply your role
- Run verification steps
- Destroy the container

---

## 8. Notes

- **Systemd:** Most Podman containers do not support `systemd` by default. Use `when: ansible_service_mgr == "systemd"` to skip service tasks in containers.
- **Role Path:** Always run Molecule commands from the root of your role directory.

---

## References

- [Molecule Documentation](https://molecule.readthedocs.io/)
- [Podman Documentation](https://podman.io/)
- [Ansible Role Best Practices](https://docs.ansible.com/ansible/latest/dev_guide/developing_roles.html)