diff --git a/.ansible-lint b/.ansible-lint index 327f909..02a3822 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -1,2 +1,4 @@ +--- + skip_list: - '106' diff --git a/.travis.yml b/.travis.yml index ab2f26d..e9e9f35 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,37 +16,31 @@ env: # Test installing docker - MOLECULE_DISTRO: geerlingguy/docker-centos7-ansible:latest - MOLECULE_PLAYBOOK: playbook-docker.yml + MOLECULE_SCENARIO: docker - MOLECULE_DISTRO: geerlingguy/docker-ubuntu1804-ansible:latest - MOLECULE_PLAYBOOK: playbook-docker.yml + MOLECULE_SCENARIO: docker - MOLECULE_DISTRO: geerlingguy/docker-amazonlinux2-ansible:latest - MOLECULE_PLAYBOOK: playbook-docker.yml - - # Test using alternate port and using wireguard as the flannel backend - - MOLECULE_DISTRO: geerlingguy/docker-centos7-ansible:latest - MOLECULE_PLAYBOOK: playbook-docker-altport-wireguard.yml + MOLECULE_SCENARIO: docker # Test disabling all deployments - MOLECULE_DISTRO: geerlingguy/docker-fedora31-ansible:latest - MOLECULE_PLAYBOOK: playbook-no-deploy.yml + MOLECULE_SCENARIO: nodeploy # Test multiple masters in control plane with PostgreSQL - MOLECULE_DISTRO: geerlingguy/docker-fedora29-ansible:latest - MOLECULE_SCENARIO: highavailability + MOLECULE_SCENARIO: highavailabilitydb # Test multiple masters with auto deploying manifests - MOLECULE_DISTRO: geerlingguy/docker-fedora30-ansible:latest - MOLECULE_SCENARIO: highavailability - MOLECULE_PLAYBOOK: playbook-auto-deploying-manifests.yml + MOLECULE_SCENARIO: autodeploy # Test multiple masters in control plane with Etcd - MOLECULE_DISTRO: geerlingguy/docker-centos8-ansible:latest - MOLECULE_SCENARIO: highavailability - MOLECULE_PLAYBOOK: playbook-etcd.yml + MOLECULE_SCENARIO: highavailabilityetcd install: # Install test dependencies. - - pip install molecule[docker] docker jmespath ansible-lint + - pip install -r molecule/requirements.txt before_script: # Use actual Ansible Galaxy role name for the project directory. diff --git a/.yamllint b/.yamllint index 60ffbc3..8827676 100644 --- a/.yamllint +++ b/.yamllint @@ -1,5 +1,5 @@ --- - +# Based on ansible-lint config extends: default rules: @@ -9,5 +9,25 @@ rules: brackets: max-spaces-inside: 1 level: error + colons: + max-spaces-after: -1 + level: error + commas: + max-spaces-after: -1 + level: error + comments: disable + comments-indentation: disable + document-start: disable + empty-lines: + max: 3 + level: error + hyphens: + level: error + indentation: disable + key-duplicates: enable line-length: disable + new-line-at-end-of-file: disable + new-lines: + type: unix + trailing-spaces: disable truthy: disable diff --git a/molecule/default/playbook-auto-deploying-manifests.yml b/molecule/autodeploy/converge.yml similarity index 55% rename from molecule/default/playbook-auto-deploying-manifests.yml rename to molecule/autodeploy/converge.yml index 72b26be..105d48b 100644 --- a/molecule/default/playbook-auto-deploying-manifests.yml +++ b/molecule/autodeploy/converge.yml @@ -1,10 +1,11 @@ --- - name: Converge - hosts: all + hosts: node* become: true vars: molecule_is_test: true + k3s_build_cluster: false k3s_server_manifests_templates: - - "molecule/default/templates/00-ns-monitoring.yml.j2" + - "molecule/highavailability/templates/00-ns-monitoring.yml.j2" roles: - role: xanmanning.k3s diff --git a/molecule/autodeploy/molecule.yml b/molecule/autodeploy/molecule.yml new file mode 100644 index 0000000..af6a516 --- /dev/null +++ b/molecule/autodeploy/molecule.yml @@ -0,0 +1,44 @@ +--- + +dependency: + name: galaxy +driver: + name: docker +lint: | + set -e + yamllint -s . + ansible-lint +platforms: + - name: node1 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet + - name: node2 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet + - name: node3 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet +provisioner: + name: ansible + options: + verbose: true +verifier: + name: ansible diff --git a/molecule/autodeploy/verify.yml b/molecule/autodeploy/verify.yml new file mode 100644 index 0000000..a82dd6f --- /dev/null +++ b/molecule/autodeploy/verify.yml @@ -0,0 +1,9 @@ +--- +# This is an example playbook to execute Ansible tests. + +- name: Verify + hosts: all + tasks: + - name: Example assertion + assert: + that: true diff --git a/molecule/default/playbook.yml b/molecule/default/converge.yml similarity index 100% rename from molecule/default/playbook.yml rename to molecule/default/converge.yml diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index de61737..af6a516 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -6,7 +6,7 @@ driver: name: docker lint: | set -e - yamllint . + yamllint -s . ansible-lint platforms: - name: node1 @@ -40,6 +40,5 @@ provisioner: name: ansible options: verbose: true - playbooks: - prepare: ${MOLECULE_PREPARE_PLAYBOOK:-prepare.yml} - converge: ${MOLECULE_PLAYBOOK:-playbook.yml} +verifier: + name: ansible diff --git a/molecule/default/playbook-docker.yml b/molecule/default/playbook-docker.yml deleted file mode 100644 index a780b33..0000000 --- a/molecule/default/playbook-docker.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -- name: Converge - hosts: all - become: true - vars: - molecule_is_test: true - k3s_use_docker: true - roles: - - role: xanmanning.k3s diff --git a/molecule/default/playbook-docker-altport-wireguard.yml b/molecule/docker/converge.yml similarity index 100% rename from molecule/default/playbook-docker-altport-wireguard.yml rename to molecule/docker/converge.yml diff --git a/molecule/docker/molecule.yml b/molecule/docker/molecule.yml new file mode 100644 index 0000000..af6a516 --- /dev/null +++ b/molecule/docker/molecule.yml @@ -0,0 +1,44 @@ +--- + +dependency: + name: galaxy +driver: + name: docker +lint: | + set -e + yamllint -s . + ansible-lint +platforms: + - name: node1 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet + - name: node2 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet + - name: node3 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet +provisioner: + name: ansible + options: + verbose: true +verifier: + name: ansible diff --git a/molecule/docker/prepare.yml b/molecule/docker/prepare.yml new file mode 100644 index 0000000..7ad302a --- /dev/null +++ b/molecule/docker/prepare.yml @@ -0,0 +1,8 @@ +--- +- name: Prepare + hosts: all + tasks: + - name: Ensure apt cache is updated + apt: + update_cache: true + when: ansible_pkg_mgr == 'apt' diff --git a/molecule/highavailability/playbook-auto-deploying-manifests.yml b/molecule/highavailability/playbook-auto-deploying-manifests.yml deleted file mode 100644 index 055d3d2..0000000 --- a/molecule/highavailability/playbook-auto-deploying-manifests.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -- name: Converge - hosts: node* - become: true - vars: - molecule_is_test: true - k3s_control_node_address: loadbalancer - k3s_datastore_endpoint: "postgres://postgres:verybadpass@database:5432/postgres?sslmode=disable" - k3s_server_manifests_templates: - - "molecule/highavailability/templates/00-ns-monitoring.yml.j2" - pre_tasks: - - name: Set each node to be a control node - set_fact: - k3s_control_node: true - when: inventory_hostname in ['node2', 'node3'] - roles: - - role: xanmanning.k3s diff --git a/molecule/highavailability/playbook-dqlite.yml b/molecule/highavailability/playbook-dqlite.yml deleted file mode 100644 index 9116912..0000000 --- a/molecule/highavailability/playbook-dqlite.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: Converge - hosts: node* - become: true - vars: - molecule_is_test: true - k3s_release_version: v1.18 - k3s_dqlite_datastore: true - k3s_secrets_encryption: true - k3s_use_experimental: true - k3s_use_unsupported_config: true - pre_tasks: - - name: Set each node to be a control node - set_fact: - k3s_control_node: true - when: inventory_hostname in ['node2', 'node3'] - roles: - - role: xanmanning.k3s diff --git a/molecule/highavailability/Dockerfile.j2 b/molecule/highavailabilitydb/Dockerfile.j2 similarity index 100% rename from molecule/highavailability/Dockerfile.j2 rename to molecule/highavailabilitydb/Dockerfile.j2 diff --git a/molecule/highavailability/INSTALL.rst b/molecule/highavailabilitydb/INSTALL.rst similarity index 100% rename from molecule/highavailability/INSTALL.rst rename to molecule/highavailabilitydb/INSTALL.rst diff --git a/molecule/highavailability/playbook.yml b/molecule/highavailabilitydb/converge.yml similarity index 100% rename from molecule/highavailability/playbook.yml rename to molecule/highavailabilitydb/converge.yml diff --git a/molecule/highavailability/haproxy-loadbalancer.conf.j2 b/molecule/highavailabilitydb/haproxy-loadbalancer.conf.j2 similarity index 100% rename from molecule/highavailability/haproxy-loadbalancer.conf.j2 rename to molecule/highavailabilitydb/haproxy-loadbalancer.conf.j2 diff --git a/molecule/highavailability/molecule.yml b/molecule/highavailabilitydb/molecule.yml similarity index 91% rename from molecule/highavailability/molecule.yml rename to molecule/highavailabilitydb/molecule.yml index 9b147d7..7028ac9 100644 --- a/molecule/highavailability/molecule.yml +++ b/molecule/highavailabilitydb/molecule.yml @@ -6,7 +6,7 @@ driver: name: docker lint: | set -e - yamllint . + yamllint -s . ansible-lint platforms: - name: node1 @@ -55,6 +55,3 @@ provisioner: name: ansible options: verbose: true - playbooks: - prepare: ${MOLECULE_PREPARE_PLAYBOOK:-prepare.yml} - converge: ${MOLECULE_PLAYBOOK:-playbook.yml} diff --git a/molecule/highavailability/prepare.yml b/molecule/highavailabilitydb/prepare.yml similarity index 100% rename from molecule/highavailability/prepare.yml rename to molecule/highavailabilitydb/prepare.yml diff --git a/molecule/highavailability/templates/00-ns-monitoring.yml.j2 b/molecule/highavailabilitydb/templates/00-ns-monitoring.yml.j2 similarity index 100% rename from molecule/highavailability/templates/00-ns-monitoring.yml.j2 rename to molecule/highavailabilitydb/templates/00-ns-monitoring.yml.j2 diff --git a/molecule/highavailability/tests/test_default.py b/molecule/highavailabilitydb/tests/test_default.py similarity index 100% rename from molecule/highavailability/tests/test_default.py rename to molecule/highavailabilitydb/tests/test_default.py diff --git a/molecule/highavailability/tests/test_default.pyc b/molecule/highavailabilitydb/tests/test_default.pyc similarity index 100% rename from molecule/highavailability/tests/test_default.pyc rename to molecule/highavailabilitydb/tests/test_default.pyc diff --git a/molecule/highavailability/playbook-etcd.yml b/molecule/highavailabilityetcd/converge.yml similarity index 100% rename from molecule/highavailability/playbook-etcd.yml rename to molecule/highavailabilityetcd/converge.yml diff --git a/molecule/highavailabilityetcd/haproxy-loadbalancer.conf.j2 b/molecule/highavailabilityetcd/haproxy-loadbalancer.conf.j2 new file mode 100644 index 0000000..78fe9d3 --- /dev/null +++ b/molecule/highavailabilityetcd/haproxy-loadbalancer.conf.j2 @@ -0,0 +1,13 @@ +frontend loadbalancer + bind *:6443 + mode tcp + default_backend control_nodes + timeout client 1m + +backend control_nodes + mode tcp + balance roundrobin + server node2 node2:6443 + server node3 node3:6443 + timeout connect 30s + timeout server 30m diff --git a/molecule/highavailabilityetcd/molecule.yml b/molecule/highavailabilityetcd/molecule.yml new file mode 100644 index 0000000..2a32b15 --- /dev/null +++ b/molecule/highavailabilityetcd/molecule.yml @@ -0,0 +1,49 @@ +--- + +dependency: + name: galaxy +driver: + name: docker +lint: | + set -e + yamllint -s . + ansible-lint +platforms: + - name: node1 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet + - name: node2 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet + - name: node3 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet + - name: loadbalancer + image: geerlingguy/docker-centos8-ansible:latest + pre_build_image: true + ports: + - "6443:6443" + networks: + - name: k3snet +provisioner: + name: ansible + options: + verbose: true diff --git a/molecule/highavailabilityetcd/prepare.yml b/molecule/highavailabilityetcd/prepare.yml new file mode 100644 index 0000000..86d8f25 --- /dev/null +++ b/molecule/highavailabilityetcd/prepare.yml @@ -0,0 +1,30 @@ +--- +- name: Prepare + hosts: loadbalancer + tasks: + - name: Ensure apt cache is updated + apt: + update_cache: true + when: ansible_pkg_mgr == 'apt' + + - name: Ensure HAProxy is installed + package: + name: haproxy + state: present + + - name: Ensure HAProxy config directory exists + file: + path: /usr/local/etc/haproxy + state: directory + mode: 0755 + + - name: Ensure HAProxy is configured + template: + src: haproxy-loadbalancer.conf.j2 + dest: /usr/local/etc/haproxy/haproxy.cfg + mode: 0644 + + - name: Ensure HAProxy service is started + command: haproxy -D -f /usr/local/etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid + args: + creates: /var/run/haproxy.pid diff --git a/molecule/default/playbook-no-deploy.yml b/molecule/nodeploy/converge.yml similarity index 100% rename from molecule/default/playbook-no-deploy.yml rename to molecule/nodeploy/converge.yml diff --git a/molecule/nodeploy/molecule.yml b/molecule/nodeploy/molecule.yml new file mode 100644 index 0000000..af6a516 --- /dev/null +++ b/molecule/nodeploy/molecule.yml @@ -0,0 +1,44 @@ +--- + +dependency: + name: galaxy +driver: + name: docker +lint: | + set -e + yamllint -s . + ansible-lint +platforms: + - name: node1 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet + - name: node2 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet + - name: node3 + image: "${MOLECULE_DISTRO:-geerlingguy/docker-centos8-ansible:latest}" + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + privileged: true + pre_build_image: ${MOLECULE_PREBUILT:-true} + networks: + - name: k3snet +provisioner: + name: ansible + options: + verbose: true +verifier: + name: ansible diff --git a/molecule/nodeploy/verify.yml b/molecule/nodeploy/verify.yml new file mode 100644 index 0000000..a82dd6f --- /dev/null +++ b/molecule/nodeploy/verify.yml @@ -0,0 +1,9 @@ +--- +# This is an example playbook to execute Ansible tests. + +- name: Verify + hosts: all + tasks: + - name: Example assertion + assert: + that: true diff --git a/molecule/requirements.txt b/molecule/requirements.txt new file mode 100644 index 0000000..980f8ac --- /dev/null +++ b/molecule/requirements.txt @@ -0,0 +1,6 @@ +-r ../requirements.txt + +molecule[docker]>=3.1.2 +docker>=4.3.1 +yamllint>=1.25.0 +ansible-lint>=4.3.5 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e3e64e5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +jmespath>=0.10.0