Use systemd mount where possible

Resolves: saltstack/salt#39757
diff --git a/glusterfs/client.sls b/glusterfs/client.sls
index 118b80e..71e9cb1 100644
--- a/glusterfs/client.sls
+++ b/glusterfs/client.sls
@@ -9,6 +9,30 @@
 {%- if client.volumes is defined %}
 {%- for name, volume in client.volumes.iteritems() %}
 
+{%- if grains.get('init', None) == 'systemd' %}
+{#- Don't use fstab when on systemd-enabled system,
+    workaround for SaltStack bug #39757 #}
+{%- set path_escaped = volume.path|replace('/', '', 1)|replace('/', '-') %}
+
+glusterfs_systemd_mount_{{ name }}:
+  file.managed:
+    - name: /etc/systemd/system/{{ path_escaped }}.mount
+    - source: salt://glusterfs/files/glusterfs-client.mount
+    - template: jinja
+    - defaults:
+        path: {{ volume.path }}
+        device: {{ volume.server }}:/{{ name }}
+        options: {{ volume.get('opts', client.mount_defaults) }}
+
+glusterfs_mount_{{ name }}:
+  service.running:
+    - name: {{ path_escaped }}.mount
+    - enable: true
+    - watch:
+      - file: glusterfs_systemd_mount_{{ name }}
+
+{%- else %}
+
 glusterfs_mount_{{ name }}:
   mount.mounted:
     - name: {{ volume.path }}
@@ -19,6 +43,8 @@
     - require:
       - pkg: glusterfs_client_packages
 
+{%- endif %}
+
 {# Fix privileges on mount #}
 {%- if volume.user is defined or volume.group is defined %}
 
@@ -29,7 +55,11 @@
     - group: {{ volume.get('group', 'root') }}
     - mode: {{ volume.get('mode', '755') }}
     - require:
+      {%- if grains.get('init', None) == 'systemd' %}
+      - service: glusterfs_mount_{{ name }}
+      {%- else %}
       - mount: glusterfs_mount_{{ name }}
+      {%- endif %}
 
 {%- endif %}
 
diff --git a/glusterfs/files/glusterfs-client.mount b/glusterfs/files/glusterfs-client.mount
new file mode 100644
index 0000000..a0a7cd1
--- /dev/null
+++ b/glusterfs/files/glusterfs-client.mount
@@ -0,0 +1,17 @@
+[Unit]
+Description=GlusterFS File System ({{ device }})
+DefaultDependencies=yes
+
+[Mount]
+What={{ device }}
+Where={{ path }}
+Type=glusterfs
+Options={{ options }}
+
+[Install]
+WantedBy=multi-user.target
+WantedBy=remote-fs.target
+
+{#-
+vim: syntax=jinja
+-#}