---
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v1.3.0
+ rev: v4.5.0
hooks:
- id: trailing-whitespace
- repo: https://github.com/jorisroovers/gitlint
- rev: v0.11.0
+ rev: v0.19.1
hooks:
- id: gitlint
+---
extends: default
rules:
max-spaces-inside: 1
level: error
line-length: disable
- # NOTE(retr0h): Templates no longer fail this lint rule.
- # Uncomment if running old Molecule templates.
- # truthy: disable
+ truthy: disable
+
+ignore: |
+ .tox/
---
galaxy_info:
+ namespace: lfit
+ role_name: mono_install
author: Linux Foundation Release Engineering
description: Install mono project. (http://www.mono-project.com/)
company: The Linux Foundation
- name: EL
versions:
- 7
+
- name: Ubuntu
versions:
- - xenial
+ - bionic
+ - focal
+ - jammy
galaxy_tags:
- mono
+++ /dev/null
-# Molecule managed
-
-FROM {{ item.image }}
-
-RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
- elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
- elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
- elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
- elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; fi
+++ /dev/null
-*******
-Install
-*******
-
-Requirements
-============
-
-* Docker Engine
-* docker-py
-
-Install
-=======
-
-.. code-block:: bash
-
- $ sudo pip install docker-py
--- /dev/null
+---
+- name: Converge
+ hosts: all
+ roles:
+ - role: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') | basename }}"
+++ /dev/null
----
-- name: Create
- hosts: localhost
- connection: local
- gather_facts: false
- no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
- vars:
- molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
- molecule_ephemeral_directory: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}"
- molecule_scenario_directory: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}"
- molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}"
- tasks:
- - name: Create Dockerfiles from image names
- template:
- src: "{{ molecule_scenario_directory }}/Dockerfile.j2"
- dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}"
- with_items: "{{ molecule_yml.platforms }}"
- register: platforms
-
- - name: Discover local Docker images
- docker_image_facts:
- name: "molecule_local/{{ item.item.name }}"
- with_items: "{{ platforms.results }}"
- register: docker_images
-
- - name: Build an Ansible compatible image
- docker_image:
- path: "{{ molecule_ephemeral_directory }}"
- name: "molecule_local/{{ item.item.image }}"
- dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}"
- force: "{{ item.item.force | default(true) }}"
- with_items: "{{ platforms.results }}"
- when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0
-
- - name: Create molecule instance(s)
- docker_container:
- name: "{{ item.name }}"
- hostname: "{{ item.name }}"
- image: "molecule_local/{{ item.image }}"
- state: started
- recreate: false
- log_driver: syslog
- command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}"
- privileged: "{{ item.privileged | default(omit) }}"
- volumes: "{{ item.volumes | default(omit) }}"
- capabilities: "{{ item.capabilities | default(omit) }}"
- ports: "{{ item.exposed_ports | default(omit) }}"
- register: server
- with_items: "{{ molecule_yml.platforms }}"
- async: 7200
- poll: 0
-
- - name: Wait for instance(s) creation to complete
- async_status:
- jid: "{{ item.ansible_job_id }}"
- register: docker_jobs
- until: docker_jobs.finished
- retries: 300
- with_items: "{{ server.results }}"
+++ /dev/null
----
-- name: Destroy
- hosts: localhost
- connection: local
- gather_facts: false
- no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
- vars:
- molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
- molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}"
- tasks:
- - name: Destroy molecule instance(s)
- docker_container:
- name: "{{ item.name }}"
- state: absent
- force_kill: "{{ item.force_kill | default(true) }}"
- register: server
- with_items: "{{ molecule_yml.platforms }}"
- async: 7200
- poll: 0
-
- - name: Wait for instance(s) deletion to complete
- async_status:
- jid: "{{ item.ansible_job_id }}"
- register: docker_jobs
- until: docker_jobs.finished
- retries: 300
- with_items: "{{ server.results }}"
name: galaxy
driver:
name: docker
-lint:
- name: yamllint
platforms:
- name: centos7
image: centos:7
- - name: ubuntu1604
- image: ubuntu:16.04
+ - name: ubuntu1804
+ image: ubuntu:18.04
+ - name: ubuntu2004
+ image: ubuntu:20.04
+ - name: ubuntu2204
+ image: ubuntu:22.04
provisioner:
name: ansible
- lint:
- name: ansible-lint
scenario:
name: default
verifier:
name: testinfra
- lint:
- name: flake8
+++ /dev/null
----
-- name: Converge
- hosts: all
- roles:
- - role: mono-install
---
- name: Prepare
hosts: all
- gather_facts: false
- tasks: []
+ gather_facts: true
+
+ tasks:
+ - name: Update APT cache
+ apt:
+ update_cache: yes
+ when: ansible_distribution == 'Ubuntu'
+ become: true
+
+ - name: Install cron
+ yum:
+ name: cronie
+ state: present
+ when: ansible_os_family == 'RedHat'
+ become: true
+
+ - name: Install packages
+ package:
+ name:
+ - zip
+ - unzip
+ state: present
+ become: yes
+++ /dev/null
-import os
-
-import testinfra.utils.ansible_runner
-
-testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
- os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
-
-
-def test_hosts_file(host):
- f = host.file('/etc/hosts')
-
- assert f.exists
- assert f.user == 'root'
- assert f.group == 'root'
---
- name: Install mono-complete and nuget
- apt:
+ ansible.builtin.package:
name:
- mono-complete
- nuget
---
- name: Add Mono RPM Key
- rpm_key:
+ ansible.builtin.rpm_key:
key: http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
state: present
become: true
- name: Add Mono repository
- yum_repository:
+ ansible.builtin.yum_repository:
name: mono-project
description: Mono Project CentOS repository
baseurl: http://download.mono-project.com/repo/centos
become: true
- name: Install mono-complete and nuget
- yum:
+ ansible.builtin.yum:
name:
- mono-complete
- nuget
---
-- include_tasks: '{{ item }}'
+- name: Include tasks from '{{ ansible_os_family }}'
+ ansible.builtin.include_tasks: '{{ item }}'
with_first_found:
- '{{ ansible_os_family }}.yml'
minversion = 1.6
envlist =
molecule,
- pre-commit
+ pre-commit,
+ lint
skipsdist=true
[testenv:molecule]
ansible
docker
molecule
+ molecule-docker
passenv = *
commands =
./molecule.sh
+allowlist_externals =
+ ./molecule.sh
[testenv:pre-commit]
-basepython = python3
+allowlist_externals =
+ /bin/sh
deps = pre-commit
+passenv = HOME
+commands =
+ pre-commit run --all-files --show-diff-on-failure
+ /bin/sh -c 'if ! git config --get user.name > /dev/null; then \
+ git config --global --add user.name "CI"; \
+ touch .git/REMOVE_USERNAME; fi'
+ /bin/sh -c 'if ! git config --get user.email > /dev/null; then \
+ git config --global --add user.email "ci@example.org"; \
+ touch .git/REMOVE_USEREMAIL; fi'
+ /bin/sh -c "if [ -f .git/COMMIT_EDITMSG ]; then \
+ cp .git/COMMIT_EDITMSG .git/COMMIT_MSGTOX; else \
+ git log HEAD -n1 | tail -n +5 | cut -c 5- > .git/COMMIT_MSGTOX; fi"
+ pre-commit run gitlint --hook-stage commit-msg --commit-msg-filename .git/COMMIT_MSGTOX
+ /bin/sh -c "rm -f .git/COMMIT_MSGTOX"
+ /bin/sh -c "if [ -f .git/REMOVE_USERNAME ]; then \
+ git config --global --unset user.name; \
+ rm -f .git/REMOVE_USERNAME; fi"
+ /bin/sh -c "if [ -f .git/REMOVE_USEREMAIL ]; then \
+ git config --global --unset user.email; \
+ rm -f .git/REMOVE_USEREMAIL; fi"
+
+[testenv:lint]
+basepython = python310
+deps =
+ ansible-lint
+ yamllint
commands =
- pre-commit install --hook-type commit-msg
- pre-commit run --all-files
+ /bin/bash -c "ansible-lint tasks/*.yml"
+ yamllint .
+allowlist_externals =
+ /bin/bash
+ yamllint