From a83e21e221d1d494808e21219709f7a284e815b2 Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Mon, 7 Jan 2019 15:09:52 +0100 Subject: [PATCH 01/10] #11 Upgrade to Molecule v2 --- CHANGELOG.md | 4 + README.md | 15 +--- molecule.yml | 79 ------------------- molecule/default/Dockerfile.j2 | 13 +++ molecule/default/INSTALL.rst | 16 ++++ molecule/default/create.yml | 69 ++++++++++++++++ molecule/default/destroy.yml | 33 ++++++++ .../default}/group_vars/jira.yml | 0 molecule/default/molecule.yml | 32 ++++++++ molecule/default/playbook.yml | 6 ++ molecule/default/prepare.yml | 5 ++ .../default/tests}/jira.yml.j2 | 0 {tests/goss => molecule/default}/verifier.yml | 2 +- test-requirements.txt | 3 + tests/playbook.yml | 5 -- 15 files changed, 186 insertions(+), 96 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 rename {tests => molecule/default}/group_vars/jira.yml (100%) create mode 100644 molecule/default/molecule.yml create mode 100644 molecule/default/playbook.yml create mode 100644 molecule/default/prepare.yml rename {tests/goss/specs => molecule/default/tests}/jira.yml.j2 (100%) rename {tests/goss => molecule/default}/verifier.yml (93%) create mode 100644 test-requirements.txt delete mode 100644 tests/playbook.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a4f5bd..f64e6bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/) and [Keep a changelog](https://github.com/olivierlacan/keep-a-changelog). ## [Unreleased](https://github.com/idealista/jira-role/tree/develop) + +### Changed +- *[#11](https://github.com/idealista/jira-role/issues/11) Molecule v2 upgrade* @jperera + ### Fixed - *[#5](https://github.com/idealista/jira-role/issues/5) Using new Idealista's Java Role version to avoid 404 Java installation issue* @jperera diff --git a/README.md b/README.md index 45a1cc5..032607f 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ These instructions will get you a copy of the role for your Ansible playbook. On Ansible 2.3.1.0 version installed. Inventory destination should be a Debian environment. -For testing purposes, [Molecule](https://molecule.readthedocs.io/) (version 1.25) with [Vagrant](https://www.vagrantup.com/) as driver (with [landrush](https://github.com/vagrant-landrush/landrush) plugin) and [VirtualBox](https://www.virtualbox.org/) or [Docker](https://www.docker.com/) as provider. +For testing purposes, [Molecule](https://molecule.readthedocs.io/) with [Docker](https://www.docker.com/) as driver. ### Installing @@ -59,17 +59,10 @@ Look to the [defaults](defaults/main.yml) properties file to see the possible co ## Testing -### Using Vagrant as provider +```sh +$ pipenv install -r test-requirements.txt --python 2.7 +$ pipenv run molecule test ``` -molecule test -``` - -### Using Docker as provider -``` -molecule test --driver docker -``` - -See molecule.yml to check possible testing platforms. As a reminder, our tests are just compatible with Molecule 1.x ## Built With diff --git a/molecule.yml b/molecule.yml deleted file mode 100644 index 28295ac..0000000 --- a/molecule.yml +++ /dev/null @@ -1,79 +0,0 @@ ---- -molecule: - # directory in CWD to place all temp files, etc. - molecule_dir: .molecule - - # where temporary state will be stored (lives under molecule_dir) - state_file: state - - # name of temporary vagrantfile created during runs (lives under molecule_dir) - vagrantfile_file: vagrantfile - - # directories to ignore when doing trailing whitespace checks on files during verify command - ignore_paths: - - .git - - .vagrant - - .molecule - - # directory to look for goss tests - goss_dir: tests/goss - goss_playbook: verifier.yml - - # directory containing group_vars to use with ansible - group_vars: ../defaults/group_vars - -dependency: - name: galaxy - requirements_file: tests/requirements.yml - -# ansible related configuration -ansible: - playbook: tests/playbook.yml - -# configuration options for the internal call to vagrant -vagrant: - raw_config_args: - - "landrush.enabled = true" - - "landrush.tld = 'vm'" - # - "landrush.guest_redirect_dns = false" - # molecule's --platform option will look for these names - platforms: - - name: Debian - box: debian/stretch64 - - providers: - - name: virtualbox - type: virtualbox - options: - memory: 4096 - cpus: 2 - - instances: - - name: jira.vm - ansible_groups: - - jira - interfaces: - - network_name: private_network - type: dhcp - auto_config: true - -docker: - containers: - - name: jira.cont - ansible_groups: - - jira - image: geerlingguy/docker-debian9-ansible - image_version: latest - environment: - TMPDIR: /root/ - port_bindings: - 8080: 8080 - privileged: True - cap_add: - - SYS_ADMIN - volume_mounts: - - '/sys/fs/cgroup:/sys/fs/cgroup:ro' - command: '/lib/systemd/systemd' - -verifier: - name: goss diff --git a/molecule/default/Dockerfile.j2 b/molecule/default/Dockerfile.j2 new file mode 100644 index 0000000..9f689d9 --- /dev/null +++ b/molecule/default/Dockerfile.j2 @@ -0,0 +1,13 @@ +# Molecule managed + +{% if item.registry is defined %} +FROM {{ item.registry.url }}/{{ item.image }} +{% else %} +FROM {{ item.image }} +{% endif %} + +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 diff --git a/molecule/default/INSTALL.rst b/molecule/default/INSTALL.rst new file mode 100644 index 0000000..e26493b --- /dev/null +++ b/molecule/default/INSTALL.rst @@ -0,0 +1,16 @@ +******* +Install +******* + +Requirements +============ + +* Docker Engine +* docker-py + +Install +======= + +.. code-block:: bash + + $ sudo pip install docker-py diff --git a/molecule/default/create.yml b/molecule/default/create.yml new file mode 100644 index 0000000..9cedc65 --- /dev/null +++ b/molecule/default/create.yml @@ -0,0 +1,69 @@ +--- +- 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 docker network(s) + docker_network: + name: "{{ item }}" + state: present + with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}" + + - name: Create molecule instance(s) + docker_container: + name: "{{ item.name }}" + hostname: "{{ item.name }}" + image: "molecule_local/{{ item.image }}" + state: started + recreate: false + log_driver: json-file + 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) }}" + exposed_ports: "{{ item.exposed_ports | default(omit) }}" + published_ports: "{{ item.published_ports | default(omit) }}" + ulimits: "{{ item.ulimits | default(omit) }}" + networks: "{{ item.networks | default(omit) }}" + dns_servers: "{{ item.dns_servers | 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 }}" diff --git a/molecule/default/destroy.yml b/molecule/default/destroy.yml new file mode 100644 index 0000000..ec4da49 --- /dev/null +++ b/molecule/default/destroy.yml @@ -0,0 +1,33 @@ +--- +- 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: Delete docker network(s) + docker_network: + name: "{{ item }}" + state: absent + with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}" diff --git a/tests/group_vars/jira.yml b/molecule/default/group_vars/jira.yml similarity index 100% rename from tests/group_vars/jira.yml rename to molecule/default/group_vars/jira.yml diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..c9d1a15 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,32 @@ +--- +dependency: + name: galaxy +driver: + name: docker +lint: + name: yamllint +platforms: + - name: jira.cont + groups: + - jira + image: geerlingguy/docker-debian9-ansible:latest + exposed_ports: + - 8080/udp + - 8080/tcp + published_ports: + - 0.0.0.0:8080:8080/udp + - 0.0.0.0:8080:8080/tcp + privileged: true + capabilities: + - SYS_ADMIN + volumes: + - '/sys/fs/cgroup:/sys/fs/cgroup:ro' + command: '/lib/systemd/systemd' +provisioner: + name: ansible + lint: + name: ansible-lint +scenario: + name: default +verifier: + name: goss diff --git a/molecule/default/playbook.yml b/molecule/default/playbook.yml new file mode 100644 index 0000000..1906384 --- /dev/null +++ b/molecule/default/playbook.yml @@ -0,0 +1,6 @@ +--- +- name: Converge + hosts: all + roles: + - role: java-role + - role: jira-role diff --git a/molecule/default/prepare.yml b/molecule/default/prepare.yml new file mode 100644 index 0000000..5358b3b --- /dev/null +++ b/molecule/default/prepare.yml @@ -0,0 +1,5 @@ +--- +- name: Prepare + hosts: all + gather_facts: false + tasks: [] diff --git a/tests/goss/specs/jira.yml.j2 b/molecule/default/tests/jira.yml.j2 similarity index 100% rename from tests/goss/specs/jira.yml.j2 rename to molecule/default/tests/jira.yml.j2 diff --git a/tests/goss/verifier.yml b/molecule/default/verifier.yml similarity index 93% rename from tests/goss/verifier.yml rename to molecule/default/verifier.yml index a1720a3..3decb30 100644 --- a/tests/goss/verifier.yml +++ b/molecule/default/verifier.yml @@ -21,7 +21,7 @@ - name: Copy tests to remote template: - src: "{{ playbook_dir }}/specs/{{ item }}.j2" + src: "{{ playbook_dir }}/tests/{{ item }}.j2" dest: "/tmp/{{ item }}" with_items: - jira.yml diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..971bada --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,3 @@ +ansible==2.4.5.0 +molecule==2.10.1 +docker-py==1.10.6 diff --git a/tests/playbook.yml b/tests/playbook.yml deleted file mode 100644 index b01d9eb..0000000 --- a/tests/playbook.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- hosts: all - roles: - - java - - jira-role From c868ac9752b0d7555e15a4e8a61df4e6389e646a Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Mon, 7 Jan 2019 15:23:33 +0100 Subject: [PATCH 02/10] #11 Circleci Molecule version upgraded --- .circleci/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/requirements.txt b/.circleci/requirements.txt index 52552d6..d0d8ce3 100644 --- a/.circleci/requirements.txt +++ b/.circleci/requirements.txt @@ -1,4 +1,5 @@ ansible==2.4.3.0 -molecule==1.25.0 +molecule==2.10.1 ansible-lint==3.4.20 +docker-py==1.10.6 docker From d66d8df69e1b72119ce8b00716343f42b1bf1b53 Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Mon, 7 Jan 2019 15:32:18 +0100 Subject: [PATCH 03/10] #11 Circleci Molecule launch configuration adapted to new version --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c85a8bd..11b085c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,4 +16,4 @@ jobs: - run: name: run tests command: | - molecule test --driver docker + molecule test From 3184a2532ca884cf97793b8bfe122c5de29a6a25 Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Mon, 7 Jan 2019 16:41:09 +0100 Subject: [PATCH 04/10] #11 Yamllint configuration --- .yamllint | 16 ++++++++++++++++ molecule/default/molecule.yml | 2 ++ 2 files changed, 18 insertions(+) create mode 100644 .yamllint diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..de11fc3 --- /dev/null +++ b/.yamllint @@ -0,0 +1,16 @@ +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + 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 + +ignore: | + tests/ diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index c9d1a15..d98b290 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -5,6 +5,8 @@ driver: name: docker lint: name: yamllint + options: + config-file: .yamllint platforms: - name: jira.cont groups: From 3de6cea9df02f397d9efdf485a3c033431c809e0 Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Mon, 7 Jan 2019 16:59:59 +0100 Subject: [PATCH 05/10] #11 Upgrade REAME.md Ansible version requirement --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 032607f..6cd33b8 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ These instructions will get you a copy of the role for your Ansible playbook. On ### Prerequisities -Ansible 2.3.1.0 version installed. +Ansible 2.4.5.0 version installed. Inventory destination should be a Debian environment. For testing purposes, [Molecule](https://molecule.readthedocs.io/) with [Docker](https://www.docker.com/) as driver. From a0b381d0a6cfc55aa8ce6a6a8720532320ac5eac Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Mon, 7 Jan 2019 17:02:43 +0100 Subject: [PATCH 06/10] #11 Upgrade meta/main.yml Ansible version requirement --- Pipfile | 14 ++ Pipfile.lock | 635 ++++++++++++++++++++++++++++++++++++++++++++++++++ meta/main.yml | 2 +- 3 files changed, 650 insertions(+), 1 deletion(-) create mode 100644 Pipfile create mode 100644 Pipfile.lock diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..d0e7203 --- /dev/null +++ b/Pipfile @@ -0,0 +1,14 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +ansible = "==2.4.5.0" +molecule = "==2.10.1" +docker-py = "==1.10.6" + +[requires] +python_version = "2.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..e5edb82 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,635 @@ +{ + "_meta": { + "hash": { + "sha256": "56735844d59c35db37e55640eda4b74a93a61b28199eb5b1b0bf6637878c0ec9" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "2.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "ansible": { + "hashes": [ + "sha256:ebdb7c83f755c951f8fd1d7924a83bcb14c7ec19f2674d3fb7a68ab07d30f6e7" + ], + "index": "pypi", + "version": "==2.4.5.0" + }, + "ansible-lint": { + "hashes": [ + "sha256:7ce9122e80ceed063e13c47c7430dbc541838a47cf560d3bcd87a0982a429877" + ], + "version": "==3.4.19" + }, + "anyconfig": { + "hashes": [ + "sha256:5729dbeb5d801df2e9c65fbf3eef1018894baa6938539d113dbfd43264baa581" + ], + "version": "==0.9.1" + }, + "arrow": { + "hashes": [ + "sha256:a558d3b7b6ce7ffc74206a86c147052de23d3d4ef0e17c210dd478c53575c4cd" + ], + "version": "==0.12.1" + }, + "asn1crypto": { + "hashes": [ + "sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87", + "sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49" + ], + "version": "==0.24.0" + }, + "atomicwrites": { + "hashes": [ + "sha256:0312ad34fcad8fac3704d441f7b317e50af620823353ec657a53e981f92920c0", + "sha256:ec9ae8adaae229e4f8446952d204a3e4b5fdd2d099f9be3aaf556120135fb3ee" + ], + "version": "==1.2.1" + }, + "attrs": { + "hashes": [ + "sha256:10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69", + "sha256:ca4be454458f9dec299268d472aaa5a11f67a4ff70093396e1ceae9c76cf4bbb" + ], + "version": "==18.2.0" + }, + "backports.functools-lru-cache": { + "hashes": [ + "sha256:9d98697f088eb1b0fa451391f91afb5e3ebde16bbdb272819fd091151fda4f1a", + "sha256:f0b0e4eba956de51238e17573b7087e852dfe9854afd2e9c873f73fc0ca0a6dd" + ], + "version": "==1.5" + }, + "backports.ssl-match-hostname": { + "hashes": [ + "sha256:502ad98707319f4a51fa2ca1c677bd659008d27ded9f6380c79e8932e38dcdf2" + ], + "markers": "python_version < '3.5'", + "version": "==3.5.0.1" + }, + "bcrypt": { + "hashes": [ + "sha256:05d8b762cb8a9bd0ad92ee95ed34b6119200a8760b625dadacfe88537ae691a3", + "sha256:136243dc44e5bab9b61206bd46fff3018bd80980b1a1dfbab64a22ff5745957f", + "sha256:1de0df7a9ca76d68ec8122573ae584aab78dcfb728fc2c78ecafb15750b79465", + "sha256:214c720cfcd394ab9fd1cac59303847b0d45cc8feeb8126ec55619c77d85ec19", + "sha256:290e07820d408e8c81f79f848279b95cef693d6e6ce148fa6b1e573e89a4305b", + "sha256:2d60412b11994ab91d25572f780f8461748cecdb6014c23e33b2ea0aabc99782", + "sha256:62ff976497590c7ef714f426aff8b908f2a11686364bb01cfc7d338e86a2ee27", + "sha256:77c99c50bd7ac4e9e9f948015c4638176ebe0a495b22b6ae4857f3ba077b12d8", + "sha256:9af0a7e135e7f5feca9c16ba33064af545b33b7297c1bb65daedb11c0fa653c4", + "sha256:9b08088fd103eedfd750d832819555d1f96bc8bec749c6d35a3f3de3b9e8c98d", + "sha256:a185efb05ef8bac9a531474abfefb8323f3ec8d524d308d6720657eaeda068b5", + "sha256:c7a733c4c309c9ab572644cf7f8779845addcd5ecf474bb5c376f05731842c41", + "sha256:cc3f53fa3287c0fc2bc1636e9514b896d4777444b03d9e0e4f16762a856bfe8a", + "sha256:d216ee4e8e64d43d819acaf8aa0db6cb518859072152cf35ada4987bf5c92bff", + "sha256:db3c7d712c4049eff365f00c9236279602af17c0ba44ca759008641c7fd892b7", + "sha256:e1bb330c56ddec65ad9ce989e9e8664901ce96badfe47853a5ed03bfeb76f91a", + "sha256:efcaace6e2915434d84e865c44f0cfe34e802269378afbb39a4aa6381aaec78b", + "sha256:f4431e01f1a5fdea95c78758e24c9565651499d92024ff34663b1ab12c8a10e5", + "sha256:fd21155abee7cd4c0ba8fad5138636f2531174ea79ad1751b25dc30d833e1723" + ], + "version": "==3.1.5" + }, + "binaryornot": { + "hashes": [ + "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061", + "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4" + ], + "version": "==0.4.4" + }, + "certifi": { + "hashes": [ + "sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7", + "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033" + ], + "version": "==2018.11.29" + }, + "cffi": { + "hashes": [ + "sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743", + "sha256:1553d1e99f035ace1c0544050622b7bc963374a00c467edafac50ad7bd276aef", + "sha256:1b0493c091a1898f1136e3f4f991a784437fac3673780ff9de3bcf46c80b6b50", + "sha256:2ba8a45822b7aee805ab49abfe7eec16b90587f7f26df20c71dd89e45a97076f", + "sha256:3bb6bd7266598f318063e584378b8e27c67de998a43362e8fce664c54ee52d30", + "sha256:3c85641778460581c42924384f5e68076d724ceac0f267d66c757f7535069c93", + "sha256:3eb6434197633b7748cea30bf0ba9f66727cdce45117a712b29a443943733257", + "sha256:495c5c2d43bf6cebe0178eb3e88f9c4aa48d8934aa6e3cddb865c058da76756b", + "sha256:4c91af6e967c2015729d3e69c2e51d92f9898c330d6a851bf8f121236f3defd3", + "sha256:57b2533356cb2d8fac1555815929f7f5f14d68ac77b085d2326b571310f34f6e", + "sha256:770f3782b31f50b68627e22f91cb182c48c47c02eb405fd689472aa7b7aa16dc", + "sha256:79f9b6f7c46ae1f8ded75f68cf8ad50e5729ed4d590c74840471fc2823457d04", + "sha256:7a33145e04d44ce95bcd71e522b478d282ad0eafaf34fe1ec5bbd73e662f22b6", + "sha256:857959354ae3a6fa3da6651b966d13b0a8bed6bbc87a0de7b38a549db1d2a359", + "sha256:87f37fe5130574ff76c17cab61e7d2538a16f843bb7bca8ebbc4b12de3078596", + "sha256:95d5251e4b5ca00061f9d9f3d6fe537247e145a8524ae9fd30a2f8fbce993b5b", + "sha256:9d1d3e63a4afdc29bd76ce6aa9d58c771cd1599fbba8cf5057e7860b203710dd", + "sha256:a36c5c154f9d42ec176e6e620cb0dd275744aa1d804786a71ac37dc3661a5e95", + "sha256:a6a5cb8809091ec9ac03edde9304b3ad82ad4466333432b16d78ef40e0cce0d5", + "sha256:ae5e35a2c189d397b91034642cb0eab0e346f776ec2eb44a49a459e6615d6e2e", + "sha256:b0f7d4a3df8f06cf49f9f121bead236e328074de6449866515cea4907bbc63d6", + "sha256:b75110fb114fa366b29a027d0c9be3709579602ae111ff61674d28c93606acca", + "sha256:ba5e697569f84b13640c9e193170e89c13c6244c24400fc57e88724ef610cd31", + "sha256:be2a9b390f77fd7676d80bc3cdc4f8edb940d8c198ed2d8c0be1319018c778e1", + "sha256:ca1bd81f40adc59011f58159e4aa6445fc585a32bb8ac9badf7a2c1aa23822f2", + "sha256:d5d8555d9bfc3f02385c1c37e9f998e2011f0db4f90e250e5bc0c0a85a813085", + "sha256:e55e22ac0a30023426564b1059b035973ec82186ddddbac867078435801c7801", + "sha256:e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4", + "sha256:ecbb7b01409e9b782df5ded849c178a0aa7c906cf8c5a67368047daab282b184", + "sha256:ed01918d545a38998bfa5902c7c00e0fee90e957ce036a4000a88e3fe2264917", + "sha256:edabd457cd23a02965166026fd9bfd196f4324fe6032e866d0f3bd0301cd486f", + "sha256:fdf1c1dc5bafc32bc5d08b054f94d659422b05aba244d6be4ddc1c72d9aa70fb" + ], + "version": "==1.11.5" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "click": { + "hashes": [ + "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d", + "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b" + ], + "version": "==6.7" + }, + "click-completion": { + "hashes": [ + "sha256:079fb138887d4de12a0b7fbebf8d92d396b7c1a9c49f63475d9f3909d2588976" + ], + "version": "==0.2.1" + }, + "colorama": { + "hashes": [ + "sha256:a4c0f5bc358a62849653471e309dcc991223cf86abafbec17cd8f41327279e89", + "sha256:e043c8d32527607223652021ff648fbb394d5e19cba9f1a698670b338c9d782b", + "sha256:f4945bf52ae49da0728fe730a33c18744803752fc948f154f29dc0c4f9f2f9cc" + ], + "version": "==0.3.7" + }, + "configparser": { + "hashes": [ + "sha256:5308b47021bc2340965c371f0f058cc6971a04502638d4244225c49d80db273a" + ], + "markers": "python_version < '3.2'", + "version": "==3.5.0" + }, + "cookiecutter": { + "hashes": [ + "sha256:3fcb10dbfe4da02bf779a88f96109c1a28ff68f42d87587788f841735820249c", + "sha256:7d95c48717c725580b4ea6d80a7256479990ab8309003e60695ea1877c296fc9" + ], + "version": "==1.5.1" + }, + "cryptography": { + "hashes": [ + "sha256:05a6052c6a9f17ff78ba78f8e6eb1d777d25db3b763343a1ae89a7a8670386dd", + "sha256:0eb83a24c650a36f68e31a6d0a70f7ad9c358fa2506dc7b683398b92e354a038", + "sha256:0ff4a3d6ea86aa0c9e06e92a9f986de7ee8231f36c4da1b31c61a7e692ef3378", + "sha256:1699f3e916981df32afdd014fb3164db28cdb61c757029f502cb0a8c29b2fdb3", + "sha256:1b1f136d74f411f587b07c076149c4436a169dc19532e587460d9ced24adcc13", + "sha256:21e63dd20f5e5455e8b34179ac43d95b3fb1ffa54d071fd2ed5d67da82cfe6dc", + "sha256:2454ada8209bbde97065453a6ca488884bbb263e623d35ba183821317a58b46f", + "sha256:3cdc5f7ca057b2214ce4569e01b0f368b3de9d8ee01887557755ccd1c15d9427", + "sha256:418e7a5ec02a7056d3a4f0c0e7ea81df374205f25f4720bb0e84189aa5fd2515", + "sha256:471a097076a7c4ab85561d7fa9a1239bd2ae1f9fd0047520f13d8b340bf3210b", + "sha256:5ecaf9e7db3ca582c6de6229525d35db8a4e59dc3e8a40a331674ed90e658cbf", + "sha256:63b064a074f8dc61be81449796e2c3f4e308b6eba04a241a5c9f2d05e882c681", + "sha256:6afe324dfe6074822ccd56d80420df750e19ac30a4e56c925746c735cf22ae8b", + "sha256:70596e90398574b77929cd87e1ac6e43edd0e29ba01e1365fed9c26bde295aa5", + "sha256:70c2b04e905d3f72e2ba12c58a590817128dfca08949173faa19a42c824efa0b", + "sha256:8908f1db90be48b060888e9c96a0dee9d842765ce9594ff6a23da61086116bb6", + "sha256:af12dfc9874ac27ebe57fc28c8df0e8afa11f2a1025566476b0d50cdb8884f70", + "sha256:b4fc04326b2d259ddd59ed8ea20405d2e695486ab4c5e1e49b025c484845206e", + "sha256:da5b5dda4aa0d5e2b758cc8dfc67f8d4212e88ea9caad5f61ba132f948bab859" + ], + "version": "==2.4.2" + }, + "docker-py": { + "hashes": [ + "sha256:35b506e95861914fa5ad57a6707e3217b4082843b883be246190f57013948aba", + "sha256:4c2a75875764d38d67f87bc7d03f7443a3895704efc57962bdf6500b8d4bc415" + ], + "index": "pypi", + "version": "==1.10.6" + }, + "docker-pycreds": { + "hashes": [ + "sha256:6ce3270bcaf404cc4c3e27e4b6c70d3521deae82fb508767870fdbf772d584d4", + "sha256:7266112468627868005106ec19cd0d722702d2b7d5912a28e19b826c3d37af49" + ], + "version": "==0.4.0" + }, + "enum34": { + "hashes": [ + "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850", + "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a", + "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79", + "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1" + ], + "markers": "python_version < '3.4'", + "version": "==1.1.6" + }, + "fasteners": { + "hashes": [ + "sha256:427c76773fe036ddfa41e57d89086ea03111bbac57c55fc55f3006d027107e18", + "sha256:564a115ff9698767df401efca29620cbb1a1c2146b7095ebd304b79cc5807a7c" + ], + "version": "==0.14.1" + }, + "flake8": { + "hashes": [ + "sha256:83905eadba99f73fbfe966598aaf1682b3eb6755d2263c5b33a4e8367d60b0d1", + "sha256:b907a26dcf5580753d8f80f1be0ec1d5c45b719f7bac441120793d1a70b03f12" + ], + "version": "==3.3.0" + }, + "funcsigs": { + "hashes": [ + "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca", + "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50" + ], + "markers": "python_version < '3.0'", + "version": "==1.0.2" + }, + "future": { + "hashes": [ + "sha256:67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8" + ], + "version": "==0.17.1" + }, + "git-url-parse": { + "hashes": [ + "sha256:7929b594725394b34008fae557991eed727afab9521937fd59f565105361ec81", + "sha256:a7d1dba7fc253dff8afb7b683af35834864c9796eb130b44ec63b2584bbc6522", + "sha256:d647f3d7b10b6aec4a14495c45b2bd500dcfa73d2711578ef2149879bbcdf06d" + ], + "version": "==1.1.0" + }, + "idna": { + "hashes": [ + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + ], + "version": "==2.8" + }, + "ipaddress": { + "hashes": [ + "sha256:64b28eec5e78e7510698f6d4da08800a5c575caa4a286c93d651c5d3ff7b6794", + "sha256:b146c751ea45cad6188dd6cf2d9b757f6f4f8d6ffb96a023e6f2e26eea02a72c" + ], + "markers": "python_version < '3.3'", + "version": "==1.0.22" + }, + "jinja2": { + "hashes": [ + "sha256:2231bace0dfd8d2bf1e5d7e41239c06c9e0ded46e70cc1094a0aa64b0afeb054", + "sha256:ddaa01a212cd6d641401cb01b605f4a4d9f37bfc93043d7f760ec70fb99ff9ff" + ], + "version": "==2.9.6" + }, + "jinja2-time": { + "hashes": [ + "sha256:d14eaa4d315e7688daa4969f616f226614350c48730bfa1692d2caebd8c90d40", + "sha256:d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa" + ], + "version": "==0.2.0" + }, + "markupsafe": { + "hashes": [ + "sha256:048ef924c1623740e70204aa7143ec592504045ae4429b59c30054cb31e3c432", + "sha256:130f844e7f5bdd8e9f3f42e7102ef1d49b2e6fdf0d7526df3f87281a532d8c8b", + "sha256:19f637c2ac5ae9da8bfd98cef74d64b7e1bb8a63038a3505cd182c3fac5eb4d9", + "sha256:1b8a7a87ad1b92bd887568ce54b23565f3fd7018c4180136e1cf412b405a47af", + "sha256:1c25694ca680b6919de53a4bb3bdd0602beafc63ff001fea2f2fc16ec3a11834", + "sha256:1f19ef5d3908110e1e891deefb5586aae1b49a7440db952454b4e281b41620cd", + "sha256:1fa6058938190ebe8290e5cae6c351e14e7bb44505c4a7624555ce57fbbeba0d", + "sha256:31cbb1359e8c25f9f48e156e59e2eaad51cd5242c05ed18a8de6dbe85184e4b7", + "sha256:3e835d8841ae7863f64e40e19477f7eb398674da6a47f09871673742531e6f4b", + "sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3", + "sha256:525396ee324ee2da82919f2ee9c9e73b012f23e7640131dd1b53a90206a0f09c", + "sha256:52b07fbc32032c21ad4ab060fec137b76eb804c4b9a1c7c7dc562549306afad2", + "sha256:52ccb45e77a1085ec5461cde794e1aa037df79f473cbc69b974e73940655c8d7", + "sha256:5c3fbebd7de20ce93103cb3183b47671f2885307df4a17a0ad56a1dd51273d36", + "sha256:5e5851969aea17660e55f6a3be00037a25b96a9b44d2083651812c99d53b14d1", + "sha256:5edfa27b2d3eefa2210fb2f5d539fbed81722b49f083b2c6566455eb7422fd7e", + "sha256:7d263e5770efddf465a9e31b78362d84d015cc894ca2c131901a4445eaa61ee1", + "sha256:83381342bfc22b3c8c06f2dd93a505413888694302de25add756254beee8449c", + "sha256:857eebb2c1dc60e4219ec8e98dfa19553dae33608237e107db9c6078b1167856", + "sha256:98e439297f78fca3a6169fd330fbe88d78b3bb72f967ad9961bcac0d7fdd1550", + "sha256:bf54103892a83c64db58125b3f2a43df6d2cb2d28889f14c78519394feb41492", + "sha256:d9ac82be533394d341b41d78aca7ed0e0f4ba5a2231602e2f05aa87f25c51672", + "sha256:e982fe07ede9fada6ff6705af70514a52beb1b2c3d25d4e873e82114cf3c5401", + "sha256:edce2ea7f3dfc981c4ddc97add8a61381d9642dc3273737e756517cc03e84dd6", + "sha256:efdc45ef1afc238db84cb4963aa689c0408912a0239b0721cb172b4016eb31d6", + "sha256:f137c02498f8b935892d5c0172560d7ab54bc45039de8805075e19079c639a9c", + "sha256:f82e347a72f955b7017a39708a3667f106e6ad4d10b25f237396a7115d8ed5fd", + "sha256:fb7c206e01ad85ce57feeaaa0bf784b97fa3cad0d4a5737bc5295785f5c613a1" + ], + "version": "==1.1.0" + }, + "marshmallow": { + "hashes": [ + "sha256:2f72131c0d01079b2f306d0ffe1e59b2ef42a3b247f8d87a283a2abb67fb1911", + "sha256:f16c8959ee7a1dbdb794d2bc171aeb2c3d6105a32318b5128e95ae538dca395b" + ], + "version": "==2.13.5" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "molecule": { + "hashes": [ + "sha256:5065166e3f055cc80bbd1c9366f2a1606ab5ae4adf54b7510be57e51228e8d7f", + "sha256:7f7d21e396f4492c6d11f6b5ad99b0abed7682ff3583f7f768912d2e4f0d0244" + ], + "index": "pypi", + "version": "==2.10.1" + }, + "monotonic": { + "hashes": [ + "sha256:23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0", + "sha256:552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7" + ], + "version": "==1.5" + }, + "more-itertools": { + "hashes": [ + "sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4", + "sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc", + "sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9" + ], + "version": "==5.0.0" + }, + "paramiko": { + "hashes": [ + "sha256:3c16b2bfb4c0d810b24c40155dbfd113c0521e7e6ee593d704e84b4c658a1f3b", + "sha256:a8975a7df3560c9f1e2b43dc54ebd40fd00a7017392ca5445ce7df409f900fcb" + ], + "version": "==2.4.2" + }, + "pathlib2": { + "hashes": [ + "sha256:25199318e8cc3c25dcb45cbe084cc061051336d5a9ea2a12448d3d8cb748f742", + "sha256:5887121d7f7df3603bca2f710e7219f3eca0eb69e0b7cc6e0a022e155ac931a7" + ], + "markers": "python_version < '3.6'", + "version": "==2.3.3" + }, + "pathspec": { + "hashes": [ + "sha256:54a5eab895d89f342b52ba2bffe70930ef9f8d96e398cccf530d21fa0516a873" + ], + "version": "==0.5.9" + }, + "pbr": { + "hashes": [ + "sha256:d7e8917458094002b9a2e0030ba60ba4c834c456071f2d0c1ccb5265992ada91", + "sha256:dfc304262e881066bc675a59a348733af17bee1d57084d9e2a0c96b952a82db7" + ], + "version": "==3.0.1" + }, + "pexpect": { + "hashes": [ + "sha256:3d132465a75b57aa818341c6521392a06cc660feb3988d7f1074f39bd23c9a92", + "sha256:f853b52afaf3b064d29854771e2db509ef80392509bde2dd7a6ecf2dfc3f0018" + ], + "version": "==4.2.1" + }, + "pluggy": { + "hashes": [ + "sha256:447ba94990e8014ee25ec853339faf7b0fc8050cdc3289d4d71f7f410fb90095", + "sha256:bde19360a8ec4dfd8a20dcb811780a30998101f078fc7ded6162f0076f50508f" + ], + "version": "==0.8.0" + }, + "poyo": { + "hashes": [ + "sha256:c34a5413191210ed564640510e9c4a4ba3b698746d6b454d46eb5bfb30edcd1d", + "sha256:d1c317054145a6b1ca0608b5e676b943ddc3bfd671f886a2fe09288b98221edb" + ], + "version": "==0.4.2" + }, + "psutil": { + "hashes": [ + "sha256:32616c5736f1de446e77865305e7f56905c718991f820c8286436adea8192f32", + "sha256:3f79a044db0aae96592ef42be459e37095d0c2cebcae4fd7baf486d37a85a8cd", + "sha256:44746540c0fab5b95401520d29eb9ffe84b3b4a235bd1d1971cbe36e1f38dd13", + "sha256:50c8ddc3a6d1cda1de6d7aaf1af10896832c6d686fc7d0fe3d01c1eb51e6f521", + "sha256:7a5c0973bd4c1de98d9b225bd4303a0718d31e31d6e2342e825c3e656f7056df", + "sha256:838c66c123cb024bf8c8d2fec902b38c51f75b27988f4487d81383d1d3d8a8ce", + "sha256:a155875d2fedb614c2cd687fe47953d03a47f76eb39bd5756931b288b685655f", + "sha256:a989876ac0cc7942ef9481b96d3bfc02777dc798d4a7a1b4e8f0f284228f3434", + "sha256:db473f0d45a56d422502043f3755385fcfd83f5bb0947bc807fcad689230f37f", + "sha256:dcd9d3131f83480648da40d2c39403657c63a81e56e4e8d8e905bf65c133d59c", + "sha256:e8b65a80e978af9bf10be423442155032c589b7042b4a26edc410dc36819d65e" + ], + "markers": "sys_platform != 'win32' and sys_platform != 'cygwin'", + "version": "==5.2.2" + }, + "ptyprocess": { + "hashes": [ + "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0", + "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f" + ], + "version": "==0.6.0" + }, + "py": { + "hashes": [ + "sha256:bf92637198836372b520efcba9e020c330123be8ce527e535d185ed4b6f45694", + "sha256:e76826342cefe3c3d5f7e8ee4316b80d1dd8a300781612ddbc765c17ba25a6c6" + ], + "version": "==1.7.0" + }, + "pyasn1": { + "hashes": [ + "sha256:da2420fe13a9452d8ae97a0e478adde1dee153b11ba832a95b223a2ba01c10f7", + "sha256:da6b43a8c9ae93bc80e2739efb38cc776ba74a886e3e9318d65fe81a8b8a2c6e" + ], + "version": "==0.4.5" + }, + "pycodestyle": { + "hashes": [ + "sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766", + "sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9" + ], + "version": "==2.3.1" + }, + "pycparser": { + "hashes": [ + "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3" + ], + "version": "==2.19" + }, + "pyflakes": { + "hashes": [ + "sha256:aa0d4dff45c0cc2214ba158d29280f8fa1129f3e87858ef825930845146337f4", + "sha256:cc5eadfb38041f8366128786b4ca12700ed05bbf1403d808e89d57d67a3875a7" + ], + "version": "==1.5.0" + }, + "pynacl": { + "hashes": [ + "sha256:05c26f93964373fc0abe332676cb6735f0ecad27711035b9472751faa8521255", + "sha256:0c6100edd16fefd1557da078c7a31e7b7d7a52ce39fdca2bec29d4f7b6e7600c", + "sha256:0d0a8171a68edf51add1e73d2159c4bc19fc0718e79dec51166e940856c2f28e", + "sha256:1c780712b206317a746ace34c209b8c29dbfd841dfbc02aa27f2084dd3db77ae", + "sha256:2424c8b9f41aa65bbdbd7a64e73a7450ebb4aa9ddedc6a081e7afcc4c97f7621", + "sha256:2d23c04e8d709444220557ae48ed01f3f1086439f12dbf11976e849a4926db56", + "sha256:30f36a9c70450c7878053fa1344aca0145fd47d845270b43a7ee9192a051bf39", + "sha256:37aa336a317209f1bb099ad177fef0da45be36a2aa664507c5d72015f956c310", + "sha256:4943decfc5b905748f0756fdd99d4f9498d7064815c4cf3643820c9028b711d1", + "sha256:57ef38a65056e7800859e5ba9e6091053cd06e1038983016effaffe0efcd594a", + "sha256:5bd61e9b44c543016ce1f6aef48606280e45f892a928ca7068fba30021e9b786", + "sha256:6482d3017a0c0327a49dddc8bd1074cc730d45db2ccb09c3bac1f8f32d1eb61b", + "sha256:7d3ce02c0784b7cbcc771a2da6ea51f87e8716004512493a2b69016326301c3b", + "sha256:a14e499c0f5955dcc3991f785f3f8e2130ed504fa3a7f44009ff458ad6bdd17f", + "sha256:a39f54ccbcd2757d1d63b0ec00a00980c0b382c62865b61a505163943624ab20", + "sha256:aabb0c5232910a20eec8563503c153a8e78bbf5459490c49ab31f6adf3f3a415", + "sha256:bd4ecb473a96ad0f90c20acba4f0bf0df91a4e03a1f4dd6a4bdc9ca75aa3a715", + "sha256:e2da3c13307eac601f3de04887624939aca8ee3c9488a0bb0eca4fb9401fc6b1", + "sha256:f67814c38162f4deb31f68d590771a29d5ae3b1bd64b75cf232308e5c74777e0" + ], + "version": "==1.3.0" + }, + "pytest": { + "hashes": [ + "sha256:3e65a22eb0d4f1bdbc1eacccf4a3198bf8d4049dea5112d70a0c61b00e748d02", + "sha256:5924060b374f62608a078494b909d341720a050b5224ff87e17e12377486a71d" + ], + "version": "==4.1.0" + }, + "python-dateutil": { + "hashes": [ + "sha256:063df5763652e21de43de7d9e00ccf239f953a832941e37be541614732cdfc93", + "sha256:88f9287c0174266bb0d8cedd395cfba9c58e87e5ad86b2ce58859bc11be3cf02" + ], + "version": "==2.7.5" + }, + "python-gilt": { + "hashes": [ + "sha256:24e87871381a847a74e97516b605cde922e63a144d8bfa4343d2193b2e89cc9d", + "sha256:4b0f08d1dcbb72a7d5f652a32da293bfccaf338d61bd77f9e875388b3ccf604b", + "sha256:ca6f4b9ff6819f1bc79181d06dd3f56c04ee1010271caf0f5b390957c6cde7f2" + ], + "version": "==1.1.0" + }, + "pyyaml": { + "hashes": [ + "sha256:16b20e970597e051997d90dc2cddc713a2876c47e3d92d59ee198700c5427736", + "sha256:3262c96a1ca437e7e4763e2843746588a965426550f3797a79fca9c6199c431f", + "sha256:592766c6303207a20efc445587778322d7f73b161bd994f227adaa341ba212ab", + "sha256:5ac82e411044fb129bae5cfbeb3ba626acb2af31a8d17d175004b70862a741a7", + "sha256:827dc04b8fa7d07c44de11fabbc888e627fa8293b695e0f99cb544fdfa1bf0d1", + "sha256:bc6bced57f826ca7cb5125a10b23fd0f2fff3b7c4701d64c439a300ce665fff8", + "sha256:c01b880ec30b5a6e6aa67b09a2fe3fb30473008c85cd6a67359a1b15ed6d83a4", + "sha256:e863072cdf4c72eebf179342c94e6989c67185842d9997960b3e69290b2fa269" + ], + "version": "==3.12" + }, + "requests": { + "hashes": [ + "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", + "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" + ], + "version": "==2.21.0" + }, + "scandir": { + "hashes": [ + "sha256:04b8adb105f2ed313a7c2ef0f1cf7aff4871aa7a1883fa4d8c44b5551ab052d6", + "sha256:1444134990356c81d12f30e4b311379acfbbcd03e0bab591de2696a3b126d58e", + "sha256:1b5c314e39f596875e5a95dd81af03730b338c277c54a454226978d5ba95dbb6", + "sha256:346619f72eb0ddc4cf355ceffd225fa52506c92a2ff05318cfabd02a144e7c4e", + "sha256:44975e209c4827fc18a3486f257154d34ec6eaec0f90fef0cca1caa482db7064", + "sha256:61859fd7e40b8c71e609c202db5b0c1dbec0d5c7f1449dec2245575bdc866792", + "sha256:a5e232a0bf188362fa00123cc0bb842d363a292de7126126df5527b6a369586a", + "sha256:c14701409f311e7a9b7ec8e337f0815baf7ac95776cc78b419a1e6d49889a383", + "sha256:c7708f29d843fc2764310732e41f0ce27feadde453261859ec0fca7865dfc41b", + "sha256:c9009c527929f6e25604aec39b0a43c3f831d2947d89d6caaab22f057b7055c8", + "sha256:f5c71e29b4e2af7ccdc03a020c626ede51da471173b4a6ad1e904f2b2e04b4bd" + ], + "markers": "python_version < '3.5'", + "version": "==1.9.0" + }, + "sh": { + "hashes": [ + "sha256:ae3258c5249493cebe73cb4e18253a41ed69262484bad36fdb3efcb8ad8870bb", + "sha256:b52bf5833ed01c7b5c5fb73a7f71b3d98d48e9b9b8764236237bdc7ecae850fc" + ], + "version": "==1.12.14" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "tabulate": { + "hashes": [ + "sha256:1f07f6252b20cdc4ed744b598b5fa8362638988b50a62f3e2ad76c97fc02eef2", + "sha256:83a0b8e17c09f012090a50e1e97ae897300a72b35e0c86c0b53d3bd2ae86d8c6" + ], + "version": "==0.7.7" + }, + "testinfra": { + "hashes": [ + "sha256:87f22dbccf8f4b919974aba680b782afdb6a305ee53fbcdfa0a8bd494e75ca88", + "sha256:c44e6ff72b82457e63b60606707be008dc3107f40164130e365fc677ca3edc3f" + ], + "version": "==1.7.1" + }, + "tree-format": { + "hashes": [ + "sha256:a538523aa78ae7a4b10003b04f3e1b37708e0e089d99c9d3b9e1c71384c9a7f9", + "sha256:b5056228dbedde1fb81b79f71fb0c23c98e9d365230df9b29af76e8d8003de11" + ], + "version": "==0.1.2" + }, + "urllib3": { + "hashes": [ + "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", + "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" + ], + "version": "==1.24.1" + }, + "websocket-client": { + "hashes": [ + "sha256:8c8bf2d4f800c3ed952df206b18c28f7070d9e3dcbd6ca6291127574f57ee786", + "sha256:e51562c91ddb8148e791f0155fdb01325d99bb52c4cdbb291aee7a3563fd0849" + ], + "version": "==0.54.0" + }, + "whichcraft": { + "hashes": [ + "sha256:7533870f751901a0ce43c93cc9850186e9eba7fe58c924dfb435968ba9c9fa4e", + "sha256:fecddd531f237ffc5db8b215409afb18fa30300699064cca4817521b4fc81815" + ], + "version": "==0.5.2" + }, + "yamllint": { + "hashes": [ + "sha256:05cfcaea325f0f0a806b602926e6fb863865d125e69dde3f4b59278dfc5f9684", + "sha256:af260fabf491fc74838ddbb91150cf9016941346796b98a61e2ebefd4dfec0c3" + ], + "version": "==1.11.0" + } + }, + "develop": {} +} diff --git a/meta/main.yml b/meta/main.yml index d34c887..a565d61 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -2,7 +2,7 @@ galaxy_info: company: Idealista S.A.U. description: Jira role - min_ansible_version: 2.3.1.0 + min_ansible_version: 2.4.5.0 license: Apache 2.0 platforms: - name: Debian From cd6776db7a7cba1b46c1aef4865943d79d1a110c Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Tue, 8 Jan 2019 11:09:31 +0100 Subject: [PATCH 07/10] #11 Same ansible version in test-requirements.txt and circleci --- .circleci/requirements.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.circleci/requirements.txt b/.circleci/requirements.txt index d0d8ce3..bab08c6 100644 --- a/.circleci/requirements.txt +++ b/.circleci/requirements.txt @@ -1,5 +1,3 @@ -ansible==2.4.3.0 +ansible==2.4.5.0 molecule==2.10.1 -ansible-lint==3.4.20 -docker-py==1.10.6 -docker +docker-py==1.10.6 \ No newline at end of file From c71c39118d3edde8d4ff9a8a9644c6aa1f324959 Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Tue, 8 Jan 2019 12:37:08 +0100 Subject: [PATCH 08/10] #11 java-role ansible-galaxy requirements.yml for molecule v2 --- molecule/default/requirements.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 molecule/default/requirements.yml diff --git a/molecule/default/requirements.yml b/molecule/default/requirements.yml new file mode 100644 index 0000000..a77e5d1 --- /dev/null +++ b/molecule/default/requirements.yml @@ -0,0 +1,4 @@ +--- +- src: idealista.java-role + version: 3.3.0 + name: java From 4c155d88d6c35494979503977a470cd190af30c0 Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Wed, 9 Jan 2019 17:54:18 +0100 Subject: [PATCH 09/10] #11 Goss configuration for molecule v2 --- molecule/default/molecule.yml | 2 + molecule/default/requirements.yml | 3 +- .../tests/{jira.yml.j2 => test_jira.yml} | 0 molecule/default/verifier.yml | 52 +++++++++++++------ 4 files changed, 39 insertions(+), 18 deletions(-) rename molecule/default/tests/{jira.yml.j2 => test_jira.yml} (100%) diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index d98b290..aecb214 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -32,3 +32,5 @@ scenario: name: default verifier: name: goss + lint: + name: flake8 diff --git a/molecule/default/requirements.yml b/molecule/default/requirements.yml index a77e5d1..f39d195 100644 --- a/molecule/default/requirements.yml +++ b/molecule/default/requirements.yml @@ -1,4 +1,5 @@ --- -- src: idealista.java-role +- src: https://github.com/idealista/java-role + scm: git version: 3.3.0 name: java diff --git a/molecule/default/tests/jira.yml.j2 b/molecule/default/tests/test_jira.yml similarity index 100% rename from molecule/default/tests/jira.yml.j2 rename to molecule/default/tests/test_jira.yml diff --git a/molecule/default/verifier.yml b/molecule/default/verifier.yml index 3decb30..ac92d7b 100644 --- a/molecule/default/verifier.yml +++ b/molecule/default/verifier.yml @@ -1,32 +1,50 @@ -- name: Testing prerequisites +--- +- name: Verify hosts: all - gather_facts: yes - vars: - goss_version: "v0.3.5" - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-amd64" - goss_results: goss_results + goss_version: v0.3.6 + goss_arch: amd64 + goss_dst: /usr/local/bin/goss + goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" + goss_test_directory: /tmp + goss_format: documentation vars_files: - ../../defaults/main.yml - ../../vars/main.yml - - ../group_vars/jira.yml + - group_vars/jira.yml tasks: - - name: Download and install Goss + - name: Download and install goss get_url: url: "{{ goss_url }}" - dest: "/usr/local/bin/goss" + dest: "{{ goss_dst }}" mode: 0755 - name: Copy tests to remote template: - src: "{{ playbook_dir }}/tests/{{ item }}.j2" - dest: "/tmp/{{ item }}" - with_items: - - jira.yml + src: "{{ item }}" + dest: "{{ goss_test_directory }}/{{ item | basename }}" + with_fileglob: + - "{{ playbook_dir }}/tests/test_*.yml" + + - name: Register test files + shell: "ls {{ goss_test_directory }}/test_*.yml" + register: test_files + + - name: Execute Goss tests + command: "goss -g {{ item }} validate --format {{ goss_format }}" + register: test_results + with_items: "{{ test_files.stdout_lines }}" + ignore_errors: true + + - name: Display details about the goss results + debug: + msg: "{{ item.stdout_lines }}" + with_items: "{{ test_results.results }}" - - name: Goss tests - command: "goss -g /tmp/{{ item }} validate -format tap" - with_items: - - jira.yml + - name: Fail when tests fail + fail: + msg: "Goss failed to validate" + when: item.rc != 0 + with_items: "{{ test_results.results }}" From c7dd15715536c007b8fe40574e6cd12a50bf2792 Mon Sep 17 00:00:00 2001 From: Jaime Perera Date: Wed, 9 Jan 2019 18:28:35 +0100 Subject: [PATCH 10/10] #11 java_role requirement with '_' --- molecule/default/requirements.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/molecule/default/requirements.yml b/molecule/default/requirements.yml index f39d195..10da40e 100644 --- a/molecule/default/requirements.yml +++ b/molecule/default/requirements.yml @@ -1,5 +1,4 @@ --- -- src: https://github.com/idealista/java-role - scm: git +- src: idealista.java_role version: 3.3.0 - name: java + name: java-role