From 141c76506a1e674c4e092ef9a87939e35a482bdc Mon Sep 17 00:00:00 2001 From: Thanh Ha Date: Wed, 21 Feb 2018 16:36:05 -0500 Subject: [PATCH] Bootstrap haveged-install role Change-Id: I019072018b9cedce593bf058aca49c9e2c343665 Signed-off-by: Thanh Ha --- .coafile | 16 +++++++++ .gitignore | 5 +++ .gitreview | 5 +++ .yamllint | 13 ++++++++ README.md | 37 +++++++++++++++++++++ defaults/main.yml | 2 ++ handlers/main.yml | 2 ++ meta/main.yml | 26 +++++++++++++++ molecule.sh | 18 +++++++++++ molecule/default/Dockerfile.j2 | 9 ++++++ molecule/default/INSTALL.rst | 16 +++++++++ molecule/default/create.yml | 59 ++++++++++++++++++++++++++++++++++ molecule/default/destroy.yml | 27 ++++++++++++++++ molecule/default/molecule.yml | 20 ++++++++++++ molecule/default/playbook.yml | 5 +++ molecule/default/prepare.yml | 5 +++ molecule/default/tests/test_default.py | 14 ++++++++ tasks/main.yml | 2 ++ tests/inventory | 2 ++ tests/test.yml | 5 +++ tox.ini | 25 ++++++++++++++ vars/main.yml | 2 ++ 22 files changed, 315 insertions(+) create mode 100644 .coafile create mode 100644 .gitignore create mode 100644 .gitreview create mode 100644 .yamllint create mode 100644 README.md create mode 100644 defaults/main.yml create mode 100644 handlers/main.yml create mode 100644 meta/main.yml create mode 100755 molecule.sh 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 create mode 100644 molecule/default/playbook.yml create mode 100644 molecule/default/prepare.yml create mode 100644 molecule/default/tests/test_default.py create mode 100644 tasks/main.yml create mode 100644 tests/inventory create mode 100644 tests/test.yml create mode 100644 tox.ini create mode 100644 vars/main.yml diff --git a/.coafile b/.coafile new file mode 100644 index 0000000..de44e1f --- /dev/null +++ b/.coafile @@ -0,0 +1,16 @@ +[all] +ignore = .tox/**, + .git/**, + .gitignore, + .gitmodules, + .gitreview + +[all.Git] +bears = GitCommitBear +files = NONE +ignore_length_regex = Signed-off-by, + Also-by, + Co-authored-by, + http://, + https:// + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31ada01 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.molecule/ +.tox/ +__pycache__/ +*.pyc + diff --git a/.gitreview b/.gitreview new file mode 100644 index 0000000..88901da --- /dev/null +++ b/.gitreview @@ -0,0 +1,5 @@ +[gerrit] +host=gerrit.linuxfoundation.org +port=29418 +project=ansible/roles/haveged-install.git +defaultbranch=master diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..3a2255e --- /dev/null +++ b/.yamllint @@ -0,0 +1,13 @@ +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 diff --git a/README.md b/README.md new file mode 100644 index 0000000..8507f93 --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +haveged-install +=============== + +Installs haveged to help systems with low entropy. + +Requirements +------------ + +None. + +Role Variables +-------------- + +None. + +Dependencies +------------ + +None. + +Example Playbook +---------------- + + + - hosts: servers + roles: + - { role: lfit.haveged-install } + +License +------- + +MIT + +Author Information +------------------ + +Linux Foundation Release Engineering diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..914062b --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for haveged-install diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..e44aa09 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for haveged-install diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..9b91702 --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,26 @@ +--- +galaxy_info: + author: Linux Foundation Release Engineering + description: Install haveged to help systems with low entropy. + company: The Linux Foundation + issue_tracker_url: https://jira.linuxfoundation.org + + license: MIT + + min_ansible_version: 1.2 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + platforms: + - name: EL + versions: + - 7 + - name: Ubuntu + versions: + - xenial + + galaxy_tags: + - system + +dependencies: [] diff --git a/molecule.sh b/molecule.sh new file mode 100755 index 0000000..28a1ba8 --- /dev/null +++ b/molecule.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# SPDX-License-Identifier: EPL-1.0 +############################################################################## +# Copyright (c) 2018 The Linux Foundation and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +############################################################################## + +# If running in Jenkins we need to symlink the workspace so that +# ansible can pick up the role. +if [ ! -z "$JENKINS_URL" ]; then + ln -sf "$WORKSPACE" ../haveged-install +fi + +molecule test --destroy=always diff --git a/molecule/default/Dockerfile.j2 b/molecule/default/Dockerfile.j2 new file mode 100644 index 0000000..f8b4e75 --- /dev/null +++ b/molecule/default/Dockerfile.j2 @@ -0,0 +1,9 @@ +# 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 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..bfb2149 --- /dev/null +++ b/molecule/default/create.yml @@ -0,0 +1,59 @@ +--- +- 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 }}" diff --git a/molecule/default/destroy.yml b/molecule/default/destroy.yml new file mode 100644 index 0000000..3ce7478 --- /dev/null +++ b/molecule/default/destroy.yml @@ -0,0 +1,27 @@ +--- +- 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 }}" diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..983dac9 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,20 @@ +--- +dependency: + name: galaxy +driver: + name: docker +lint: + name: yamllint +platforms: + - name: ubuntu1604 + image: ubuntu:16.04 +provisioner: + name: ansible + lint: + name: ansible-lint +scenario: + name: default +verifier: + name: testinfra + lint: + name: flake8 diff --git a/molecule/default/playbook.yml b/molecule/default/playbook.yml new file mode 100644 index 0000000..d066848 --- /dev/null +++ b/molecule/default/playbook.yml @@ -0,0 +1,5 @@ +--- +- name: Converge + hosts: all + roles: + - role: haveged-install 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/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py new file mode 100644 index 0000000..eedd64a --- /dev/null +++ b/molecule/default/tests/test_default.py @@ -0,0 +1,14 @@ +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' diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..05dfe20 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,2 @@ +--- +# tasks file for haveged-install diff --git a/tests/inventory b/tests/inventory new file mode 100644 index 0000000..878877b --- /dev/null +++ b/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/tests/test.yml b/tests/test.yml new file mode 100644 index 0000000..71d0999 --- /dev/null +++ b/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - haveged-install diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..fe04556 --- /dev/null +++ b/tox.ini @@ -0,0 +1,25 @@ +[tox] +minversion = 1.6 +envlist = + coala, + molecule +skipsdist=true + +[testenv:coala] +basepython = python3 +deps = + coala + coala-bears +commands = + python3 -m nltk.downloader punkt maxent_treebank_pos_tagger averaged_perceptron_tagger + coala --non-interactive + +[testenv:molecule] +basepython = python2 +deps = + ansible + docker-py + molecule +passenv = * +commands = + ./molecule.sh diff --git a/vars/main.yml b/vars/main.yml new file mode 100644 index 0000000..007776b --- /dev/null +++ b/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for haveged-install -- 2.16.6