From 11ce29363400bfcc909c9b94eda01aeafc6c17dc Mon Sep 17 00:00:00 2001 From: Samuli Silvius Date: Sat, 23 Mar 2019 13:54:34 +0200 Subject: Fix nfs role issues based on molecule testing Based on Molecule testing fix following issues on nfs role. - enable nfs services (previously only started) - create handler for exportfs to deal idempotency - add all kubernetes nodes to exports as it was dependent on ansible inventory order wheather correct hosts was on the list - add inventory_hostname as default host incase ansible_host variable not defined. Issue-ID: OOM-1756 Change-Id: Ib93e9d2a9cf49003d04dd5f890294eda1eb966ff Signed-off-by: Samuli Silvius --- ansible/roles/nfs/handlers/main.yml | 3 +++ ansible/roles/nfs/tasks/main.yml | 15 +++++++++------ ansible/roles/nfs/templates/exports.j2 | 4 ++-- 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 ansible/roles/nfs/handlers/main.yml (limited to 'ansible/roles') diff --git a/ansible/roles/nfs/handlers/main.yml b/ansible/roles/nfs/handlers/main.yml new file mode 100644 index 00000000..4b8deaeb --- /dev/null +++ b/ansible/roles/nfs/handlers/main.yml @@ -0,0 +1,3 @@ +--- +- name: reload nfs + command: exportfs -ra diff --git a/ansible/roles/nfs/tasks/main.yml b/ansible/roles/nfs/tasks/main.yml index aca1771f..e7580b66 100644 --- a/ansible/roles/nfs/tasks/main.yml +++ b/ansible/roles/nfs/tasks/main.yml @@ -9,7 +9,7 @@ package: name: "{{ item }}" state: present - with_items: "{{ nfs_packages[ansible_os_family] }}" + loop: "{{ nfs_packages[ansible_os_family] }}" - name: Setup nfs server block: @@ -17,22 +17,25 @@ systemd: name: "{{ item }}" state: started - with_items: "{{ nfs_services[ansible_os_family] }}" + enabled: true + loop: "{{ nfs_services[ansible_os_family] }}" - name: Add hosts to exports template: src: exports.j2 dest: /etc/exports - - - name: Export nfs - command: exportfs -ar + notify: + - reload nfs when: - "'nfs-server' in group_names" +- name: Force notified handlers to run at this point + meta: flush_handlers + - name: Mount dockerdata-nfs mount: path: "{{ nfs_mount_path }}" - src: "{{ hostvars[groups['nfs-server'].0].ansible_host }}:{{ nfs_mount_path }}" + src: "{{ hostvars[groups['nfs-server'].0].ansible_host | default(hostvars[groups['nfs-server'].0].inventory_hostname) }}:{{ nfs_mount_path }}" fstype: nfs state: mounted when: diff --git a/ansible/roles/nfs/templates/exports.j2 b/ansible/roles/nfs/templates/exports.j2 index 1f6956c2..c605d9b8 100644 --- a/ansible/roles/nfs/templates/exports.j2 +++ b/ansible/roles/nfs/templates/exports.j2 @@ -1,3 +1,3 @@ -{% for host in groups.kubernetes[1:] -%} - {{ nfs_mount_path }} {{ hostvars[host].ansible_host }}(rw,sync,no_root_squash,no_subtree_check) +{% for host in groups.kubernetes -%} + {{ nfs_mount_path }} {{ hostvars[host].ansible_host | default(hostvars[host].inventory_hostname) }}(rw,sync,no_root_squash,no_subtree_check) {% endfor %} -- cgit 1.2.3-korg From 9742e2bfb289d0f46ae7dbe25c91009785ebe6a3 Mon Sep 17 00:00:00 2001 From: Samuli Silvius Date: Sat, 23 Mar 2019 14:09:41 +0200 Subject: Molecule test for nfs role Issue-ID: OOM-1756 Change-Id: I2e1aef3296689c284a4b530e6a2022302c7b86f7 Signed-off-by: Samuli Silvius --- ansible/roles/nfs/.yamllint | 11 ++++++ ansible/roles/nfs/molecule/default/molecule.yml | 44 ++++++++++++++++++++++ ansible/roles/nfs/molecule/default/playbook.yml | 5 +++ .../nfs/molecule/default/tests/test_default.py | 16 ++++++++ .../default/tests/test_kubernetes-server.py | 15 ++++++++ .../nfs/molecule/default/tests/test_nfs-server.py | 25 ++++++++++++ ansible/roles/nfs/templates/exports.j2 | 2 +- 7 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 ansible/roles/nfs/.yamllint create mode 100644 ansible/roles/nfs/molecule/default/molecule.yml create mode 100644 ansible/roles/nfs/molecule/default/playbook.yml create mode 100644 ansible/roles/nfs/molecule/default/tests/test_default.py create mode 100644 ansible/roles/nfs/molecule/default/tests/test_kubernetes-server.py create mode 100644 ansible/roles/nfs/molecule/default/tests/test_nfs-server.py (limited to 'ansible/roles') diff --git a/ansible/roles/nfs/.yamllint b/ansible/roles/nfs/.yamllint new file mode 100644 index 00000000..ad0be760 --- /dev/null +++ b/ansible/roles/nfs/.yamllint @@ -0,0 +1,11 @@ +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + max-spaces-inside: 1 + level: error + line-length: disable + truthy: disable diff --git a/ansible/roles/nfs/molecule/default/molecule.yml b/ansible/roles/nfs/molecule/default/molecule.yml new file mode 100644 index 00000000..552f4bcc --- /dev/null +++ b/ansible/roles/nfs/molecule/default/molecule.yml @@ -0,0 +1,44 @@ +--- +dependency: + name: galaxy +driver: + name: docker +lint: + name: yamllint +platforms: + - name: kubernetes-node-1 + image: molecule-${PREBUILD_PLATFORM_DISTRO:-centos7}:${PREBUILD_DISTRO_VERSION:-latest} + pre_build_image: true + privileged: true + command: ${MOLECULE_DOCKER_COMMAND:-""} + groups: + - kubernetes + - nfs-server + networks: + - name: nfs-net + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro + - ${HOME}/data:/dockerdata-nfs:rw + + - name: kubernetes-node-2 + image: molecule-${PREBUILD_PLATFORM_DISTRO:-centos7}:${PREBUILD_DISTRO_VERSION:-latest} + pre_build_image: true + privileged: true + command: ${MOLECULE_DOCKER_COMMAND:-""} + groups: + - kubernetes + networks: + - name: nfs-net + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:ro +provisioner: + name: ansible + inventory: + links: + group_vars: ../../../../group_vars + lint: + name: ansible-lint +verifier: + name: testinfra + lint: + name: flake8 diff --git a/ansible/roles/nfs/molecule/default/playbook.yml b/ansible/roles/nfs/molecule/default/playbook.yml new file mode 100644 index 00000000..37aad5b9 --- /dev/null +++ b/ansible/roles/nfs/molecule/default/playbook.yml @@ -0,0 +1,5 @@ +--- +- name: Converge + hosts: all + roles: + - role: nfs diff --git a/ansible/roles/nfs/molecule/default/tests/test_default.py b/ansible/roles/nfs/molecule/default/tests/test_default.py new file mode 100644 index 00000000..48139898 --- /dev/null +++ b/ansible/roles/nfs/molecule/default/tests/test_default.py @@ -0,0 +1,16 @@ +import os +import pytest + +import testinfra.utils.ansible_runner + +testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') + + +@pytest.mark.parametrize('pkg', [ + 'nfs-utils' +]) +def test_pkg(host, pkg): + package = host.package(pkg) + + assert package.is_installed diff --git a/ansible/roles/nfs/molecule/default/tests/test_kubernetes-server.py b/ansible/roles/nfs/molecule/default/tests/test_kubernetes-server.py new file mode 100644 index 00000000..b702a73d --- /dev/null +++ b/ansible/roles/nfs/molecule/default/tests/test_kubernetes-server.py @@ -0,0 +1,15 @@ +import os + +import testinfra.utils.ansible_runner + +testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('kubernetes-node-2') + + +def test_nfs_mount(host): + mp = host.mount_point("/dockerdata-nfs") + assert mp.exists + assert mp.filesystem == "nfs" + assert mp.device == "kubernetes-node-1:/dockerdata-nfs" + assert host.file("/etc/fstab").\ + contains("kubernetes-node-1:/dockerdata-nfs /dockerdata-nfs nfs") diff --git a/ansible/roles/nfs/molecule/default/tests/test_nfs-server.py b/ansible/roles/nfs/molecule/default/tests/test_nfs-server.py new file mode 100644 index 00000000..078c653e --- /dev/null +++ b/ansible/roles/nfs/molecule/default/tests/test_nfs-server.py @@ -0,0 +1,25 @@ +import os +import pytest + +import testinfra.utils.ansible_runner + +testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('nfs-server') + + +@pytest.mark.parametrize('svc', [ + 'rpcbind', + 'nfs-server' +]) +def test_svc(host, svc): + service = host.service(svc) + + assert service.is_running + assert service.is_enabled + + +def test_exports(host): + f = host.file("/etc/exports") + assert f.exists + assert f.content_string == \ + """/dockerdata-nfs kubernetes-node-2(rw,sync,no_root_squash,no_subtree_check)""" # noqa: E501 diff --git a/ansible/roles/nfs/templates/exports.j2 b/ansible/roles/nfs/templates/exports.j2 index c605d9b8..465c9d21 100644 --- a/ansible/roles/nfs/templates/exports.j2 +++ b/ansible/roles/nfs/templates/exports.j2 @@ -1,3 +1,3 @@ -{% for host in groups.kubernetes -%} +{% for host in groups.kubernetes | difference(groups['nfs-server']) -%} {{ nfs_mount_path }} {{ hostvars[host].ansible_host | default(hostvars[host].inventory_hostname) }}(rw,sync,no_root_squash,no_subtree_check) {% endfor %} -- cgit 1.2.3-korg