Skip to content

Commit 02845a0

Browse files
bbaassssiieeyatesr
authored andcommitted
Code quality with molecule, tox, and Travis. (#9)
* Set role_name explicitly to avoid using repo name * Remove symlinks The symlinks in this role do not play nicely with PBR, which is a dependency of Kayobe, a project that uses this role. * yamllint warning truthy value should be one of [false, true] * yamllint error wrong indentation * [502] All tasks should be named * ansible-lint [702] Use 'galaxy_tags' rather than 'categories' * ansible-lint [206] Variables should have spaces before and after: {{ var_name }} * Yaml style * Markdown lint MD022 MD031 * adding Molecule testing * TODO: archlinux container has no python. * molecule linted * molecule verify * test requirements * test matrix * Travis testing with tox
1 parent 02d7763 commit 02845a0

File tree

14 files changed

+236
-45
lines changed

14 files changed

+236
-45
lines changed

.travis.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
sudo: required
3+
language: python
4+
services:
5+
- docker
6+
7+
before_install:
8+
- sudo apt-get -qq update
9+
10+
install:
11+
- pip install -r requirements.txt
12+
13+
script:
14+
- tox
15+
16+
notifications:
17+
webhooks: https://galaxy.ansible.com/api/v1/notifications/

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ timezone
55

66
Role Variables
77
--------------
8+
89
```
910
1011
# Default timezone. Must be a valid tz database time zone.
@@ -14,7 +15,6 @@ timezone: UTC
1415

1516
Example Playbook
1617
-------------------------
17-
### playbook.yml
1818

1919
```
2020

meta/main.yml

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,24 @@ galaxy_info:
66
license: license (Apache 2.0)
77
min_ansible_version: 1.9
88
platforms:
9-
- name: Ubuntu
10-
versions:
11-
- precise
12-
- trusty
13-
- name: Debian
14-
versions:
15-
- squeeze
16-
- wheezy
17-
- jessie
18-
- name: EL
19-
versions:
20-
- 6
21-
- 7
22-
- name: Fedora
23-
versions:
24-
- 19
25-
- 20
26-
categories:
27-
- system
28-
dependencies: []
9+
- name: Ubuntu
10+
versions:
11+
- precise
12+
- trusty
13+
- name: Debian
14+
versions:
15+
- squeeze
16+
- wheezy
17+
- jessie
18+
- name: EL
19+
versions:
20+
- 6
21+
- 7
22+
- name: Fedora
23+
versions:
24+
- 19
25+
- 20
26+
galaxy_tags:
27+
- system
28+
role_name: timezone
29+
dependencies: []

molecule/default/Dockerfile.j2

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Molecule managed
2+
3+
{% if item.registry is defined %}
4+
FROM {{ item.registry.url }}/{{ item.image }}
5+
{% else %}
6+
FROM {{ item.image }}
7+
{% endif %}
8+
9+
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; \
10+
elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
11+
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; \
12+
elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
13+
elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
14+
elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi

molecule/default/INSTALL.rst

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
*******
2+
Docker driver installation guide
3+
*******
4+
5+
Requirements
6+
============
7+
8+
* General molecule dependencies (see https://molecule.readthedocs.io/en/latest/installation.html)
9+
* Docker Engine
10+
* docker-py
11+
* docker
12+
13+
Install
14+
=======
15+
16+
Ansible < 2.6
17+
18+
.. code-block:: bash
19+
20+
$ sudo pip install docker-py
21+
22+
Ansible >= 2.6
23+
24+
.. code-block:: bash
25+
26+
$ sudo pip install docker

molecule/default/molecule.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
dependency:
3+
name: galaxy
4+
requirements_file: requirements.yml
5+
driver:
6+
name: docker
7+
verifier:
8+
name: goss
9+
lint:
10+
name: yamllint
11+
platforms:
12+
- name: timezone-centos7
13+
image: centos:7
14+
privileged: true
15+
- name: timezone-centos6
16+
image: centos:6
17+
privileged: true
18+
- name: timezone-debian
19+
image: debian
20+
privileged: true
21+
provisioner:
22+
name: ansible
23+
config_options:
24+
defaults:
25+
remote_tmp: /tmp
26+
playbooks:
27+
converge: playbook.yml
28+
lint:
29+
name: ansible-lint
30+
scenario:
31+
name: default

molecule/default/playbook.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
- hosts: all
3+
4+
vars:
5+
timezone: 'America/New_York'
6+
roles:
7+
- role: ansible-timezone
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
3+
file:
4+
/etc/localtime:
5+
exists: true
6+
mode: "0777"
7+
owner: root
8+
group: root
9+
filetype: symlink
10+
contains: []
11+
/usr/share/zoneinfo:
12+
exists: true
13+
mode: "0755"
14+
owner: root
15+
group: root
16+
filetype: directory
17+
contains: []

molecule/default/verify.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
---
2+
# This is an example playbook to execute goss tests.
3+
# Tests need distributed to the appropriate ansible host/groups
4+
# prior to execution by `goss validate`.
5+
6+
- name: Verify
7+
hosts: all
8+
become: true
9+
vars:
10+
goss_version: v0.3.2
11+
goss_arch: amd64
12+
goss_dst: /usr/local/bin/goss
13+
# yamllint disable-line rule:line-length
14+
goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec
15+
# yamllint disable-line rule:line-length
16+
goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}"
17+
goss_test_directory: /tmp
18+
goss_format: documentation
19+
tasks:
20+
- name: Download and install Goss
21+
get_url:
22+
url: "{{ goss_url }}"
23+
dest: "{{ goss_dst }}"
24+
sha256sum: "{{ goss_sha256sum }}"
25+
mode: 0755
26+
register: download_goss
27+
until: download_goss is succeeded
28+
retries: 3
29+
30+
- name: Copy Goss tests to remote
31+
copy:
32+
src: "{{ item }}"
33+
dest: "{{ goss_test_directory }}/{{ item | basename }}"
34+
with_fileglob:
35+
- "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_*.yml"
36+
37+
- name: Register test files
38+
shell: "ls {{ goss_test_directory }}/test_*.yml"
39+
register: test_files
40+
41+
- name: Execute Goss tests
42+
# yamllint disable-line rule:line-length
43+
command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}"
44+
register: test_results
45+
with_items: "{{ test_files.stdout_lines }}"
46+
47+
- name: Display details about the Goss results
48+
debug:
49+
msg: "{{ item.stdout_lines }}"
50+
with_items: "{{ test_results.results }}"
51+
52+
- name: Fail when tests fail
53+
fail:
54+
msg: "Goss failed to validate"
55+
when: item.rc != 0
56+
with_items: "{{ test_results.results }}"

requirements.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
tox
2+
molecule
3+
docker

0 commit comments

Comments
 (0)