From eb569c05c70be702519180e8d382ecf1ba8189ca Mon Sep 17 00:00:00 2001 From: Ethan Paul Date: Sat, 13 Nov 2021 21:09:54 -0500 Subject: [PATCH] Add install of gluster storage plugin to swarm role --- roles/swarm/tasks/gluster.yaml | 62 ++++++++++++++++++++++++++++++++++ roles/swarm/tasks/main.yaml | 3 ++ 2 files changed, 65 insertions(+) create mode 100644 roles/swarm/tasks/gluster.yaml diff --git a/roles/swarm/tasks/gluster.yaml b/roles/swarm/tasks/gluster.yaml new file mode 100644 index 0000000..8a43de4 --- /dev/null +++ b/roles/swarm/tasks/gluster.yaml @@ -0,0 +1,62 @@ +--- +- name: Fetch glusterfs plugin state + block: + - name: Fetch glusterfs storage plugin state + ansible.builtin.command: + cmd: docker plugin inspect glusterfs + changed_when: false + register: _docker_glusterfs_storage_plugin_raw + rescue: + - name: Install glusterfs storage plugin + ansible.builtin.command: + cmd: docker plugin install --alias glusterfs mochoa/glusterfs-volume-plugin --grant-all-permissions --disable + changed_when: true + + - name: Fetch glusterfs storage plugin state + ansible.builtin.command: + cmd: docker plugin inspect glusterfs + changed_when: false + register: _docker_glusterfs_storage_plugin_raw + +- name: Process glusterfs storage plugin config + ansible.builtin.set_fact: + _docker_glusterfs_storage_plugin: "{{ (_docker_glusterfs_storage_plugin_raw.stdout | from_json)[0] }}" + +# Note that this might not end up being defined if the plugin has not been configured +- name: Identify plugin server settings + when: item.startswith('SERVERS') + ansible.builtin.set_fact: + _docker_glusterfs_existing_setting: "{{ item }}" + loop: "{{ _docker_glusterfs_storage_plugin.Settings.Env }}" + +- name: Determine gluster servers + run_once: true + when: "'datastore' in hostvars[item].skylab_roles | default([])" + vars: + _docker_glusterfs_hostnames: [] + ansible.builtin.set_fact: + _docker_glusterfs_hostnames: "{{ _docker_glusterfs_hostnames + [item + '.local'] }}" + loop: "{{ groups.cluster }}" + +- name: Determine gluster plugin setting + ansible.builtin.set_fact: + _docker_glusterfs_setting: "SERVERS={{ _docker_glusterfs_hostnames | join(',') }}" + +- name: Configure plugin + when: _docker_glusterfs_setting != _docker_glusterfs_existing_setting + block: + - name: Disable plugin + when: _docker_glusterfs_storage_plugin.Enabled + ansible.builtin.command: + cmd: docker plugin disable glusterfs + + - name: Set plugin servers setting + changed_when: true + ansible.builtin.command: + cmd: docker plugin set glusterfs {{ _docker_glusterfs_setting }} + register: _docker_glusterfs_set_setting + +- name: Enable plugin + when: not _docker_glusterfs_storage_plugin.Enabled or _docker_glusterfs_set_setting.changed | default(false) + ansible.builtin.command: + cmd: docker plugin enable glusterfs diff --git a/roles/swarm/tasks/main.yaml b/roles/swarm/tasks/main.yaml index 3ff7665..cff4e13 100644 --- a/roles/swarm/tasks/main.yaml +++ b/roles/swarm/tasks/main.yaml @@ -16,3 +16,6 @@ - name: Join server to swarm when: _docker_swarm_needs_join ansible.builtin.include_tasks: join.yaml + +- name: Configure gluster storage driver + ansible.builtin.import_tasks: gluster.yaml