From 4f8fa12faddb6eb77423765ee1da88cbb0c902e7 Mon Sep 17 00:00:00 2001 From: Werner Dijkerman Date: Sun, 10 Sep 2017 18:11:07 +0200 Subject: [PATCH] Updating to Molecule V2 --- .travis.yml | 13 ++--- defaults/main.yml | 5 +- meta/main.yml | 22 ++++---- molecule.yml | 24 --------- molecule/default/Dockerfile.j2 | 7 +++ molecule/default/INSTALL.rst | 46 +++++++++++++++++ molecule/default/create.yml | 47 ++++++++++++++++++ molecule/default/destroy.yml | 16 ++++++ molecule/default/molecule.yml | 28 +++++++++++ playbook.yml => molecule/default/playbook.yml | 0 .../default/tests/test_default.py | 7 ++- molecule/default/tests/test_default.pyc | Bin 0 -> 1125 bytes molecule/default/yaml-lint.yml | 9 ++++ tasks/Debian.yml | 4 +- tests/inventory | 6 --- tests/test.yml | 5 -- 16 files changed, 177 insertions(+), 62 deletions(-) delete mode 100644 molecule.yml create mode 100644 molecule/default/Dockerfile.j2 create mode 100644 molecule/default/INSTALL.rst create mode 100644 molecule/default/create.yml create mode 100644 molecule/default/destroy.yml create mode 100644 molecule/default/molecule.yml rename playbook.yml => molecule/default/playbook.yml (100%) rename tests/test_docker.py => molecule/default/tests/test_default.py (76%) create mode 100644 molecule/default/tests/test_default.pyc create mode 100644 molecule/default/yaml-lint.yml delete mode 100644 tests/inventory delete mode 100644 tests/test.yml diff --git a/.travis.yml b/.travis.yml index b204c73..783ded3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,17 +4,12 @@ language: python services: - docker -before_install: -- sudo apt-get -qq update -- sudo apt-get install -o Dpkg::Options::="--force-confold" --force-yes -y docker-engine - install: -- pip install molecule ansible docker-py + - pip install molecule ansible docker script: -- molecule --version -- ansible --version -- molecule test - + - molecule --version + - ansible --version + - molecule test notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/defaults/main.yml b/defaults/main.yml index 971d0a8..e06cefc 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,7 +1,6 @@ --- # defaults file for ansible-telegraf -#telegraf_agent_version: 0.10.1 telegraf_agent_version: 1.0.0 telegraf_agent_hostname: "{{ ansible_fqdn }}" telegraf_agent_interval: 10 @@ -10,13 +9,13 @@ telegraf_agent_round_interval: True telegraf_agent_flush_interval: 10 telegraf_agent_flush_jitter: 0 -#v0.13 settings (not sure if supported in older version): +# v0.13 settings (not sure if supported in older version): telegraf_agent_collection_jitter: 0 telegraf_agent_metric_batch_size: 1000 telegraf_agent_metric_buffer_limit: 10000 telegraf_agent_quiet: False -#v1.1 settings: +# v1.1 settings: telegraf_agent_logfile: "" telegraf_agent_omit_hostname: False diff --git a/meta/main.yml b/meta/main.yml index dc404eb..c842486 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -6,15 +6,15 @@ galaxy_info: license: license BSD min_ansible_version: 1.2 platforms: - - name: EL - versions: - - all - - name: Ubuntu - versions: - - all - - name: Debian - versions: - - all + - name: EL + versions: + - all + - name: Ubuntu + versions: + - all + - name: Debian + versions: + - all categories: - - monitoring -dependencies: [] \ No newline at end of file + - monitoring +dependencies: [] diff --git a/molecule.yml b/molecule.yml deleted file mode 100644 index ccf0b4b..0000000 --- a/molecule.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -ansible: - playbook: playbook.yml - -driver: - name: docker - -verifier: - name: testinfra - -docker: - containers: - - name: telegraf-centos - ansible_groups: - - group1 - image: milcom/centos7-systemd - image_version: latest - privileged: True - - name: telegraf-debian - ansible_groups: - - group2 - image: maint/debian-systemd - image_version: latest - privileged: True diff --git a/molecule/default/Dockerfile.j2 b/molecule/default/Dockerfile.j2 new file mode 100644 index 0000000..7ba209c --- /dev/null +++ b/molecule/default/Dockerfile.j2 @@ -0,0 +1,7 @@ +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 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 diff --git a/molecule/default/INSTALL.rst b/molecule/default/INSTALL.rst new file mode 100644 index 0000000..09e8735 --- /dev/null +++ b/molecule/default/INSTALL.rst @@ -0,0 +1,46 @@ +******* +Install +******* + +This set of playbooks have specific dependencies on Ansible due to the modules +being used. + +Requirements +============ + +* Ansible 2.2 +* Docker Engine +* docker-py + +Install OS dependencies on CentOS 7 + +.. code-block:: bash + + $ sudo yum install -y epel-release + $ sudo yum install -y gcc python-pip python-devel openssl-devel + # If installing Molecule from source. + $ sudo yum install libffi-devel git + +Install OS dependencies on Ubuntu 16.x + +.. code-block:: bash + + $ sudo apt-get update + $ sudo apt-get install -y python-pip libssl-dev docker-engine + # If installing Molecule from source. + $ sudo apt-get install -y libffi-dev git + +Install OS dependencies on Mac OS + +.. code-block:: bash + + $ brew install python + $ brew install git + +Install using pip: + +.. code-block:: bash + + $ sudo pip install ansible + $ sudo pip install docker-py + $ sudo pip install molecule --pre diff --git a/molecule/default/create.yml b/molecule/default/create.yml new file mode 100644 index 0000000..ac0110b --- /dev/null +++ b/molecule/default/create.yml @@ -0,0 +1,47 @@ +--- +- 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) | 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('sleep infinity') }}" + privileged: "{{ item.privileged | default(omit) }}" + volumes: "{{ item.volumes | default(omit) }}" + capabilities: "{{ item.capabilities | default(omit) }}" + with_items: "{{ molecule_yml.platforms }}" diff --git a/molecule/default/destroy.yml b/molecule/default/destroy.yml new file mode 100644 index 0000000..63b5edf --- /dev/null +++ b/molecule/default/destroy.yml @@ -0,0 +1,16 @@ +--- +- 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) | from_yaml }}" + tasks: + - name: Destroy molecule instance(s) + docker_container: + name: "{{ item.name }}" + state: absent + force_kill: "{{ item.force_kill | default(True) }}" + with_items: "{{ molecule_yml.platforms }}" diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..f09ba13 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,28 @@ +--- +dependency: + name: galaxy +driver: + name: docker +lint: + name: yamllint + options: + config-file: molecule/default/yaml-lint.yml + +platforms: + - name: telegraf-centos + image: milcom/centos7-systemd + privileged: True + - name: telegraf-debian + image: maint/debian-systemd + privileged: True + +provisioner: + name: ansible + lint: + name: ansible-lint +scenario: + name: default +verifier: + name: testinfra + lint: + name: flake8 diff --git a/playbook.yml b/molecule/default/playbook.yml similarity index 100% rename from playbook.yml rename to molecule/default/playbook.yml diff --git a/tests/test_docker.py b/molecule/default/tests/test_default.py similarity index 76% rename from tests/test_docker.py rename to molecule/default/tests/test_default.py index b752ee0..fe5e769 100644 --- a/tests/test_docker.py +++ b/molecule/default/tests/test_default.py @@ -1,6 +1,9 @@ -from testinfra.utils.ansible_runner import AnsibleRunner +import os -testinfra_hosts = AnsibleRunner('.molecule/ansible_inventory').get_hosts('all') +import testinfra.utils.ansible_runner + +testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') def test_telegraf_running_and_enabled(Service, SystemInfo): diff --git a/molecule/default/tests/test_default.pyc b/molecule/default/tests/test_default.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4864f1799ffcb2c49f9b06a71a5c47cedeae6c94 GIT binary patch literal 1125 zcmeHFO>fgc5FOj;rzkn0s+XQ4p=N22kdP3fYJ(^Wu9Oy}=3@C{9oF4=&F(lfw7CGk zh`+{>1I%vXwv@lX+Mb<#emgTeZ-bv(n~y*JI8R|Y0-9gZXWo*@==DGXjBb1nMm}&K ziU5ih6f3|1idD#b*!ku`u?ATH*GNmZTeWs)T7y7eup%h0hwz`mD88q0UrB(`Exo(vU$#Ionekm;DA-M;}aE(HheXW&t zwAv!}jAO0ps$)xcxDAW;FnNazIAea1$0{wRF>*GIHOrOExHjy|m?hI>zt@`;&&+-@ z={?t&Tt@i0r=QRmm+XvHqS{MpA+xY1^(?} literal 0 HcmV?d00001 diff --git a/molecule/default/yaml-lint.yml b/molecule/default/yaml-lint.yml new file mode 100644 index 0000000..ab5cdeb --- /dev/null +++ b/molecule/default/yaml-lint.yml @@ -0,0 +1,9 @@ +--- + +extends: default + +rules: + line-length: + max: 120 + level: warning + truthy: disable diff --git a/tasks/Debian.yml b/tasks/Debian.yml index 3db11c6..29fc51c 100644 --- a/tasks/Debian.yml +++ b/tasks/Debian.yml @@ -56,5 +56,5 @@ notify: "Restart Telegraf" become: yes tags: - - telegraf - - packages + - telegraf + - packages diff --git a/tests/inventory b/tests/inventory deleted file mode 100644 index 4fb8bac..0000000 --- a/tests/inventory +++ /dev/null @@ -1,6 +0,0 @@ -localhost -[group1] -telegraf-centos - -[group2] -telegraf-debian diff --git a/tests/test.yml b/tests/test.yml deleted file mode 100644 index 0f40aec..0000000 --- a/tests/test.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- hosts: localhost - remote_user: root - roles: - - ansible-zabbix-agent \ No newline at end of file