diff --git a/.gitignore b/.gitignore index bccdf40..90dfd6d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ # Ignore Vagrant cache files /.vagrant/ +# Ignore molecule and pytest files +**__pycache__** +.molecule + # Ignore retry files *.retry diff --git a/.travis.yml b/.travis.yml index 49e7e1c..d5a065b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,29 +1,20 @@ ---- +sudo: required language: python -python: "2.7" - -# Use the new container infrastructure -sudo: false - -# Install ansible -addons: - apt: - packages: - - python-pip - +cache: pip +services: + - docker +env: + - ANSIBLE='ansible>=2.2.0,<2.3.0' + - ANSIBLE='ansible>=2.3.0,<2.4.0' + - ANSIBLE='ansible>=2.4.0,<2.5.0' install: - # Install ansible - - pip install ansible - - # Check ansible version - - ansible --version - - # Create ansible.cfg with correct roles_path - - printf '[defaults]\nroles_path=../' >ansible.cfg - + - pip install ${ANSIBLE} 'ansible-lint>=3.4.15' 'molecule==1.25.0' docker git-semver 'testinfra>=1.7.0,<=1.10.1' +before_script: + - ansible-lint tests/playbook.yml script: - # Basic role syntax check - - ansible-playbook tests/test.yml -i tests/inventory --syntax-check - + - molecule test +branches: + only: + - master notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/.travis/images.sh b/.travis/images.sh new file mode 100755 index 0000000..20395a7 --- /dev/null +++ b/.travis/images.sh @@ -0,0 +1,7 @@ +#!/bin/bash +for i in ubuntu-molecule:16.04 debian-molecule:9 debian-molecule:8 centos-molecule:7 fedora-molecule:27 +do + docker pull paulfantom/$i & +done + +wait diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 290859e..0000000 --- a/Vagrantfile +++ /dev/null @@ -1,32 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant.configure(2) do |config| - config.vm.provider "virtualbox" do |vb| - vb.memory = "512" - end - - config.vm.define "centos-7" do |machine| - machine.vm.box = "minimal/centos7" - machine.vm.provision "shell", inline: "yum update -y" - machine.vm.provision "ansible" do |ansible| - ansible.playbook = "tests/vagrant.yml" - end - end - - config.vm.define "debian-jessie" do |machine| - machine.vm.box = "minimal/jessie64" - machine.vm.provision "shell", inline: "apt-get update && apt-get install -y python" - machine.vm.provision "ansible" do |ansible| - ansible.playbook = "tests/vagrant.yml" - end - end - - config.vm.define "ubuntu-xenial" do |machine| - machine.vm.box = "ubuntu/xenial64" - machine.vm.provision "shell", inline: "apt-get update && apt-get install -y python" - machine.vm.provision "ansible" do |ansible| - ansible.playbook = "tests/vagrant.yml" - end - end -end diff --git a/handlers/main.yml b/handlers/main.yml index e1c0207..2a1d256 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,11 +1,7 @@ --- -- name: reload unit - become: true - command: systemctl daemon-reload - when: - - ansible_service_mgr == "systemd" - - name: restart docker - service: + become: yes + systemd: name: docker state: restarted + daemon_reload: yes diff --git a/molecule.yml b/molecule.yml new file mode 100644 index 0000000..d7192b9 --- /dev/null +++ b/molecule.yml @@ -0,0 +1,43 @@ +--- +ansible: + playbook: tests/playbook.yml +driver: + name: docker +verifier: + name: testinfra +dependency: + name: shell + command: ./.travis/images.sh +docker: + build_image: False + containers: + - name: xenial + image: paulfantom/ubuntu-molecule + image_version: 16.04 + privileged: true + volume_mounts: + - /sys/fs/cgroup:/sys/fs/cgroup:ro +# - name: stretch +# image: paulfantom/debian-molecule +# image_version: 9 +# privileged: true +# volume_mounts: +# - /sys/fs/cgroup:/sys/fs/cgroup:ro + - name: jessie + image: paulfantom/debian-molecule + image_version: 8 + privileged: true + volume_mounts: + - /sys/fs/cgroup:/sys/fs/cgroup:ro +# - name: centos7 +# image: paulfantom/centos-molecule +# image_version: 7 +# privileged: true +# volume_mounts: +# - /sys/fs/cgroup:/sys/fs/cgroup:ro +# - name: fedora +# image: paulfantom/fedora-molecule +# image_version: 27 +# privileged: true +# volume_mounts: +# - /sys/fs/cgroup:/sys/fs/cgroup:ro diff --git a/tasks/install.yml b/tasks/install.yml index 89c6fd3..315f152 100644 --- a/tasks/install.yml +++ b/tasks/install.yml @@ -1,6 +1,7 @@ --- -- set_fact: +- name: Compose md5 checksum + set_fact: setup_script_checksum: "md5:{{ setup_script_md5_sum }}" when: setup_script_md5_sum is defined and setup_script_md5_sum @@ -12,4 +13,6 @@ mode: 0755 - name: Execute docker setup script - shell: "/tmp/docker-setup.sh" \ No newline at end of file + shell: "/tmp/docker-setup.sh" + tags: + - skip_ansible_lint diff --git a/tasks/main.yml b/tasks/main.yml index 93380a8..07405c3 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -63,19 +63,11 @@ src: docker.j2.service dest: /usr/lib/systemd/system/docker.service notify: - - reload unit - restart docker - meta: flush_handlers - name: ensure starts on system boot - service: + systemd: name: docker enabled: yes - -- name: ensure vagrant user can run docker commands - user: - name: vagrant - groups: docker - append: yes - when: vagrant diff --git a/tests/inventory b/tests/inventory deleted file mode 100644 index d18580b..0000000 --- a/tests/inventory +++ /dev/null @@ -1 +0,0 @@ -localhost \ No newline at end of file diff --git a/tests/playbook.yml b/tests/playbook.yml new file mode 100644 index 0000000..a3d5cdc --- /dev/null +++ b/tests/playbook.yml @@ -0,0 +1,9 @@ +--- +- hosts: all + become: yes + roles: + - ansible-role-docker + vars: + default_docker_config: + storage-driver: vfs + log-level: info diff --git a/tests/test.yml b/tests/test.yml deleted file mode 100644 index 352cff1..0000000 --- a/tests/test.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- hosts: localhost - become: yes - become_user: root - roles: - - . diff --git a/tests/test_default.py b/tests/test_default.py new file mode 100644 index 0000000..5e6a256 --- /dev/null +++ b/tests/test_default.py @@ -0,0 +1,54 @@ +from testinfra.utils.ansible_runner import AnsibleRunner + +testinfra_hosts = AnsibleRunner('.molecule/ansible_inventory').get_hosts('all') + + +def test_directories(host): + present = [ + "/etc/docker", + ] + absent = [] + if present: + for directory in present: + d = host.file(directory) + assert d.is_directory + assert d.exists + if absent: + for directory in absent: + d = host.file(directory) + assert not d.exists + + +def test_files(host): + present = [ + "/etc/docker/daemon.json", + ] + if present: + for file in present: + f = host.file(file) + assert f.exists + assert f.is_file + + +# def test_socket(host): +# assert host.socket("unix:///var/run/docker.sock").is_listening + + +def test_service(host): + present = [ + "docker" + ] + if present: + for service in present: + s = host.service(service) + assert s.is_running + assert s.is_enabled + + +def test_packages(host): + if host.system_info.distribution == 'ol': + DOCKER = 'docker-engine' + else: + DOCKER = 'docker-ce' + + assert host.package(DOCKER).is_installed diff --git a/tests/vagrant.yml b/tests/vagrant.yml deleted file mode 100644 index a0af3bf..0000000 --- a/tests/vagrant.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -- hosts: all - become: yes - become_user: root - vars: - docker_clusterstore: yes - vagrant: yes - roles: - - ../docker - tasks: - - name: check consul state - command: docker ps -q -f name=consul - register: consulcheck - changed_when: no - - - name: ensure consul is running - command: > - docker run \ - -d \ - --name consul \ - -p "8500:8500" \ - --restart always \ - progrium/consul -server -bootstrap - when: consulcheck.stdout_lines | length == 0