Skip to content
Snippets Groups Projects
Commit e1293f61 authored by fejao's avatar fejao
Browse files

Adding the molecule tests for 'clone_repositories' role

parent c04809f7
No related branches found
No related tags found
1 merge request!12Adding the molecule tests for 'clone_repositories' role
Pipeline #37476 passed
......@@ -4,8 +4,31 @@ This ansible-role for dealing with cloning the repositories necessary for deploy
## Requirements
- To have [ansible](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html) installed at your system.
- Set your **remote_user** configuration at the **ansible.cfg** file.
- Set your **inventories/host_vars/<TARGET_NAME>** file.
## Configuration
You need to set some configuration for this to work
- ### ansible.cfg
You have to edit the **ansible.cfg** file to your needs for accessing your target.
- #### remote_user
You need to set the **remote_user** configuration for accessing the target host.
Example: [remote_user](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/ansible.cfg#L227)
- ### HOST_VARS
In order to access your target host, you need to create/edit your **inventories/host_vars/<YOUR_HOST_NAME>.yml**
- #### ansible_become_pass
You need to set the **sudo** password from the user setted on **remote_user** for installing packages and etc. at the target.
Example: [ansible_become_pass](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/host_vars/example_server.yml#L5)
- ### HOSTS
You need to provide a **group** in which your target belongs to with the same name setted for **inventories/host_vars/<YOUR_HOST_NAME>.yml**.
There you can add/edit the target address/IP.
Example: [hosts](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/hosts)
## Role Variables
Here are the variables setted:
......@@ -36,33 +59,62 @@ The role dependencies are:
## Example Playbook
- ### Using the provided example
For using the playbook **playbooks/examples/example_03_clone_repositories.yml** file you only need to:
- Change the user at the **ansible.cfg** file at the field **remote_user** for acessing your target.
- Update the file **inventories/host_vars/example_server.yml** and change the value for **ansible_become_pass** from the **remote_user**
- Update the **inventories/hosts** file and change the **example_server** with the IP address from your target.
For using the example playbook **[playbooks/examples/example_02_dependencies.yml](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/playbooks/examples/example_02_dependencies.yml)** file you only need to:
- Change the user at the **[ansible.cfg](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/ansible.cfg)** file at the field **[remote_user](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/ansible.cfg#L227)** for acessing your target.
- Update the file **[inventories/host_vars/example_server.yml](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/host_vars/example_server.yml)** and change the value for **[ansible_become_pass](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/host_vars/example_server.yml#L5)** from the **[remote_user](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/ansible.cfg#L227)**
- Update the **[inventories/hosts](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/hosts)** file and change the **[example_server](https://git.cccv.de/fejao/c3infodesk-deployment/-/blob/main/inventories/hosts#L2)** with the IP address from your target.
And run the command:
```bash
ansible-playbook -i inventories/hosts playbooks/examples/example_03_clone_repositories.yml
```
And run the command:
```bash
ansible-playbook -i inventories/hosts playbooks/examples/example_03_clone_repositories.yml
```
- ### Setting your own example
After setting your variables at **inventories/host_vars/<HOST_NAME>**, you can add this role to your playbook as a regular role.
Here is an example using the **<HOST_NAME>** as **test_servers**
```yaml
- hosts:
- test_servers
roles:
- clone_repositories
```
```yaml
- hosts:
- test_servers
roles:
- clone_repositories
```
And call the playbook as:
```bash
ansible-playbook -i <INVENTORY> <PLAYBOOK_NAME>.yml
```
```bash
ansible-playbook -i <INVENTORY> <PLAYBOOK_NAME>.yml
```
## Testing
You can test this locally using **DIND (docker in docker)** at your own computer using [ansible molecule](https://ansible.readthedocs.io/projects/molecule/installation/)
- ### Testing requirements
You need docker installed at your system and the [ansible molecule](https://ansible.readthedocs.io/projects/molecule/installation/).
You might have to set DIND at your system, for linux, you can create the file **/etc/docker/daemon.json**
And add the content and restart docker.
```json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"features": {
"buildkit": true
},
"experimental": true,
"cgroup-parent": "docker.slice"
}
```
- ### Using molecule
Just go to the root of the role **roles/dependencies** and run the command:
```bash
molecule test
```
## License
......
## ansible molecule tests for role: clone_repositories
## Why to use it
It's allways a good idea to test your things.
With **ansible molecule** you can test your role locally without the need of using a **real server** but a local **docker container**.
## Dependencies
- ### molecule
You need to have [ansible molecule](https://ansible.readthedocs.io/projects/molecule/installation/) installed.
- ### DIND (docker in docker)
For using the tests, you will to have **docker** installed locally and and set it for using **DIND (docker in docker)**
- ### DIND linux
You have to create/edit the file **/etc/docker/daemon.json** with the content:
```json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"features": {
"buildkit": true
},
"experimental": true,
"cgroup-parent": "docker.slice"
}
```
## Configuration
There's not much for configuring for using the tests
## Running the tests
For running the **molecule tests** you just need to run the command:
```bash
molecule test
```
---
- name: MOLECULE | Converge
hosts: all
pre_tasks:
- name: MOLECULE | COVERGE | PRE-TASKS | Adding variables from -> ../../defaults
ansible.builtin.include_vars:
dir: ../../defaults
depth: 1
extensions:
- 'yml'
- name: MOLECULE | VERIFY | PRE-TASKS | Adding variables from -> ../../../../roles/dependencies/defaults
ansible.builtin.include_vars:
dir: ../../../../roles/dependencies/defaults
depth: 1
extensions:
- 'yml'
- name: MOLECULE | COVERGE | PRE-TASKS | Adding variables from -> ../../../../inventories/group_vars
ansible.builtin.include_vars:
dir: ../../../../inventories/group_vars
extensions:
- 'yml'
- name: MOLECULE | COVERGE | PRE-TASKS | Adding variables from -> ../../../../inventories/host_vars
ansible.builtin.include_vars:
dir: ../../../../inventories/host_vars
extensions:
- 'yml'
tasks:
- name: MOLECULE | CONVERGE | Call the 'clone_repositories' role.
ansible.builtin.include_role:
name: clone_repositories
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: molecule_clone_repositories
### At the moment I'm not running at the latest kernel, please use always with a older kernel than the host
# image: docker.io/geerlingguy/docker-ubuntu2204-ansible
image: geerlingguy/docker-ubuntu2204-ansible:latest
command: /usr/sbin/init
pre_build_image: true
cgroupns_mode: host
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
- /var/lib/containerd
provisioner:
name: ansible
lint: |
ansible-lint --exclude molecule/default/
scenario:
name: default
create_sequence:
- dependency
- create
- prepare
check_sequence:
- dependency
- cleanup
- destroy
- create
- prepare
- converge
- check
- destroy
converge_sequence:
- dependency
- create
- prepare
- converge
destroy_sequence:
- dependency
- cleanup
- destroy
test_sequence:
# - lint
# - dependency
# - cleanup
- destroy
- syntax
- create
# - prepare
- converge
- verify
- idempotence
# - side_effect
# - cleanup
- destroy
verifier:
name: ansible
---
- name: VERIFY | Test role for debugging variables
hosts: all
vars:
package_name_docker: 'docker'
package_name_docker_ce: 'docker-ce'
package_name_docker_compose: 'docker-compose'
package_name_docker_compose_plugin: 'docker-compose-plugin'
pre_tasks:
- name: MOLECULE | VERIFY | PRE-TASKS | Adding variables from -> ../../defaults
ansible.builtin.include_vars:
dir: ../../defaults
depth: 1
extensions:
- 'yml'
- name: MOLECULE | VERIFY | PRE-TASKS | Adding variables from -> ../../../../roles/dependencies/defaults
ansible.builtin.include_vars:
dir: ../../../../roles/dependencies/defaults
depth: 1
extensions:
- 'yml'
- name: MOLECULE | VERIFY | PRE-TASKS | Adding variables from -> ../../../../inventories/group_vars
ansible.builtin.include_vars:
dir: ../../../../inventories/group_vars
extensions:
- 'yml'
- name: MOLECULE | VERIFY | PRE-TASKS | Adding variables from -> ../../../../inventories/host_vars
ansible.builtin.include_vars:
dir: ../../../../inventories/host_vars
extensions:
- 'yml'
tasks:
###
### POPULATE
###
- name: MOLECULE | VERIFY | POPULATE | Gather the package facts
ansible.builtin.package_facts:
manager: auto
# - name: MOLECULE | VERIFY | POPULATE | Gather service facts
# ansible.builtin.service_facts:
###
### TESTS - PACKAGES
###
- name: MOLECULE | VERIFY | TEST | Check that the packages from 'os_dependencies_packages' are installed.
ansible.builtin.debug:
msg: "Package: '{{ package_name }}' is installed"
loop: "{{ os_dependencies_packages }}"
loop_control:
loop_var: package_name
failed_when: package_name not in ansible_facts.packages
- name: MOLECULE | VERIFY | TEST | Check that docker is installed.
ansible.builtin.debug:
msg: "Package: 'docker' is installed"
failed_when:
- package_name_docker not in ansible_facts.packages
- package_name_docker_ce not in ansible_facts.packages
- name: MOLECULE | VERIFY | TEST | Check that docker-compose is installed.
ansible.builtin.debug:
msg: "Package: 'docker-cokmpose' is installed"
failed_when:
- package_name_docker_compose not in ansible_facts.packages
- package_name_docker_compose_plugin not in ansible_facts.packages
###
### TESTS - DOCKER
###
- name: MOLECULE | VERIFY | TEST | Get docker service state.
ansible.builtin.systemd:
name: "docker"
register: docker_service
- name: MOLECULE | VERIFY | TEST | Check that docker is running.
ansible.builtin.debug:
msg: "Docker IS running..."
failed_when: "'active' != docker_service.status.ActiveState"
###
### TESTS - ADDED USERS
###
- name: MOLECULE | VERIFY | TEST | Get added users infos.
ansible.builtin.user:
name: "{{ item }}"
loop: "{{ docker_users }}"
check_mode: true
register: test_users
- name: MOLECULE | VERIFY | TEST | Check if users exists
ansible.builtin.debug:
msg: "User {{ item.item }} {{ 'exists' if item.state | d('') == 'present' else 'does not exist' }}"
loop: "{{ test_users.results }}"
loop_control:
label: "{{ item.item }}"
- name: MOLECULE | VERIFY | TEST | Get the groups that the users belongs to.
ansible.builtin.command:
cmd: "id -Gn {{ item.item }}"
loop: "{{ test_users.results }}"
loop_control:
label: "{{ item.item }}"
register: user_groups
changed_when: false
- name: MOLECULE | VERIFY | TEST | Check that the users are at the 'docker' group.
ansible.builtin.debug:
msg: "User '{{ item.item.item }}' belongs to the docker group"
with_items: "{{ user_groups.results }}"
failed_when: "'docker' not in item.stdout"
###
### TESTS - CLONE REPOSITORY - PRINTER
###
- name: MOLECULE | VERIFY | TEST | Get if the repository was cloned.
ansible.builtin.git:
repo: "{{ c3infodesk_printer_repo_url }}"
dest: "{{ c3infodesk_printer_folder }}"
version: main
clone: false
update: false
register: check_repository
- name: MOLECULE | VERIFY | TEST | Checking if the repository was cloned.
ansible.builtin.debug:
msg: "Repository: '{{ c3infodesk_printer_repo_url }}' cloned..."
failed_when: check_repository.changed | bool
......@@ -40,7 +40,3 @@ For running the **molecule tests** you just need to run the command:
```bash
molecule test
```
Here you can find how to run the
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment