]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
nfs: fix container setup and re-arrange files
authorSébastien Han <seb@redhat.com>
Tue, 26 Sep 2017 21:16:43 +0000 (23:16 +0200)
committerSébastien Han <seb@redhat.com>
Fri, 29 Sep 2017 00:38:24 +0000 (02:38 +0200)
Signed-off-by: Sébastien Han <seb@redhat.com>
15 files changed:
group_vars/all.yml.sample
group_vars/rhcs.yml.sample
roles/ceph-defaults/defaults/main.yml
roles/ceph-defaults/templates/restart_nfs_daemon.sh.j2 [new file with mode: 0644]
roles/ceph-nfs/tasks/create_rgw_nfs_user.yml
roles/ceph-nfs/tasks/docker/copy_configs.yml [deleted file]
roles/ceph-nfs/tasks/docker/main.yml [deleted file]
roles/ceph-nfs/tasks/docker/start_docker_nfs.yml [deleted file]
roles/ceph-nfs/tasks/ganesha_selinux_fix.yml [new file with mode: 0644]
roles/ceph-nfs/tasks/main.yml
roles/ceph-nfs/tasks/pre_requisite.yml [deleted file]
roles/ceph-nfs/tasks/pre_requisite_container.yml [new file with mode: 0644]
roles/ceph-nfs/tasks/pre_requisite_non_container.yml [new file with mode: 0644]
roles/ceph-nfs/tasks/start_nfs.yml
roles/ceph-nfs/templates/ceph-nfs.service.j2

index 9c10d5adfb3cbdd7c059953e88553685bea81940..e2d54f78b7e7050695330fa3f0a3b4e3dca92d71 100644 (file)
@@ -394,6 +394,10 @@ dummy:
 #handler_health_rgw_check_retries: 5
 #handler_health_rgw_check_delay: 10
 
+# NFS handler checks
+#handler_health_nfs_check_retries: 5
+#handler_health_nfs_check_delay: 10
+
 ###############
 # NFS-GANESHA #
 ###############
index 5e9f926eaa13957f0d14ec36b71db6e8b8aae950..112efa41e7372941c63474d90f64bf722f3377e2 100644 (file)
@@ -394,6 +394,10 @@ ceph_repository: rhcs
 #handler_health_rgw_check_retries: 5
 #handler_health_rgw_check_delay: 10
 
+# NFS handler checks
+#handler_health_nfs_check_retries: 5
+#handler_health_nfs_check_delay: 10
+
 ###############
 # NFS-GANESHA #
 ###############
index f8786be1ccd717b382e5f047cec9978941eae1ae..cfdbbbdcaf0115dd74f79096202bf754721719bb 100644 (file)
@@ -386,6 +386,10 @@ handler_health_mds_check_delay: 10
 handler_health_rgw_check_retries: 5
 handler_health_rgw_check_delay: 10
 
+# NFS handler checks
+handler_health_nfs_check_retries: 5
+handler_health_nfs_check_delay: 10
+
 ###############
 # NFS-GANESHA #
 ###############
diff --git a/roles/ceph-defaults/templates/restart_nfs_daemon.sh.j2 b/roles/ceph-defaults/templates/restart_nfs_daemon.sh.j2
new file mode 100644 (file)
index 0000000..cbc78e9
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+RETRIES="{{ handler_health_nfs_check_retries }}"
+DELAY="{{ handler_health_nfs_check_delay }}"
+NFS_NAME="{{ ansible_hostname }}"
+PID=/var/run/ganesha.pid
+
+# First, restart the daemon
+{% if containerized_deployment -%}
+systemctl restart ceph-nfs@${NFS_NAME}
+COUNT=10
+# Wait and ensure the pid exists after restarting the daemon
+while [ $RETRIES -ne 0 ]; do
+  {{ docker_exec_cmd }} test -f $PID && exit 0
+  sleep $DELAY
+  let RETRIES=RETRIES-1
+done
+# If we reach this point, it means the pid is not present.
+echo "PID file ${PID} could not be found, which means Ganesha is not running."
+exit 1
+{% else %}
+systemctl restart nfs-ganesha
+{% endif %}
index 9eb82832e28425e3d87122fb50a459d97f1ba97a..1f51fbf1a3f86d273eefb07c10db40441fee5d35 100644 (file)
@@ -8,6 +8,7 @@
 - name: create rgw nfs user
   command: "{{ docker_exec_cmd_nfs | default('') }} radosgw-admin --cluster {{ cluster }} user create --uid={{ ceph_nfs_rgw_user }} --display-name='RGW NFS User'"
   register: rgwuser
+  changed_when: false
   delegate_to: "{{ groups[mon_group_name][0] }}"
   when:
     - nfs_obj_gw
diff --git a/roles/ceph-nfs/tasks/docker/copy_configs.yml b/roles/ceph-nfs/tasks/docker/copy_configs.yml
deleted file mode 100644 (file)
index 2b3e523..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
----
-- name: set config and keys paths
-  set_fact:
-    ceph_config_keys:
-      - /etc/ceph/{{ cluster }}.client.admin.keyring
-      - /var/lib/ceph/bootstrap-rgw/{{ cluster }}.keyring
-
-- name: stat for config and keys
-  local_action: stat path={{ fetch_directory }}/{{ fsid }}/{{ item }}
-  with_items: "{{ ceph_config_keys }}"
-  changed_when: false
-  become: false
-  failed_when: false
-  always_run: true
-  register: statconfig
-
-- name: try to fetch config and keys
-  copy:
-    src: "{{ fetch_directory }}/{{ fsid }}/{{ item.0 }}"
-    dest: "{{ item.0 }}"
-    owner: "64045"
-    group: "64045"
-    mode: 0644
-  changed_when: false
-  with_together:
-    - "{{ ceph_config_keys }}"
-    - "{{ statconfig.results }}"
-  when:
-    - item.1.stat.exists == true
-
-- name: set selinux permissions
-  shell: |
-    chcon -Rt svirt_sandbox_file_t {{ item }}
-  with_items:
-    - "{{ ceph_conf_key_directory }}"
-    - /var/lib/ceph
-  changed_when: false
-  when:
-    - ansible_os_family == 'RedHat'
-    - sestatus.stdout != 'Disabled'
diff --git a/roles/ceph-nfs/tasks/docker/main.yml b/roles/ceph-nfs/tasks/docker/main.yml
deleted file mode 100644 (file)
index f05ce4a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
----
-- name: include start_docker_nfs.yml
-  include: start_docker_nfs.yml
diff --git a/roles/ceph-nfs/tasks/docker/start_docker_nfs.yml b/roles/ceph-nfs/tasks/docker/start_docker_nfs.yml
deleted file mode 100644 (file)
index 45bc18e..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
----
-- name: generate systemd unit file
-  become: true
-  template:
-    src: "{{ role_path }}/templates/ceph-nfs.service.j2"
-    dest: /etc/systemd/system/ceph-nfs@.service
-    owner: "root"
-    group: "root"
-    mode: "0644"
-
-- name: systemd start nfs container
-  systemd:
-    name: "ceph-nfs@{{ ansible_hostname }}.service"
-    state: started
-    enabled: yes
-    daemon_reload: yes
-  when:
-    - ceph_nfs_enable_service
diff --git a/roles/ceph-nfs/tasks/ganesha_selinux_fix.yml b/roles/ceph-nfs/tasks/ganesha_selinux_fix.yml
new file mode 100644 (file)
index 0000000..0aa3c66
--- /dev/null
@@ -0,0 +1,28 @@
+---
+- name: check if selinux is enabled
+  command: getenforce
+  register: selinuxstatus
+  changed_when: false
+  failed_when: false
+  always_run: true
+
+- name: install policycoreutils-python to get semanage
+  package:
+    name: policycoreutils-python
+    state: present
+  when:
+    - selinuxstatus.stdout != 'Disabled'
+
+- name: test if ganesha_t is already permissive
+  shell: |
+    semanage permissive -l | grep -soq ganesha_t
+  changed_when: false
+  failed_when: false
+  register: ganesha_t_permissive
+
+- name: run semanage permissive -a ganesha_t
+  command: semanage permissive -a ganesha_t
+  changed_when: false
+  when:
+    - selinuxstatus.stdout != 'Disabled'
+    - ganesha_t_permissive.rc != 0
index fe70f3c40e13ccafdf19a78247499902c3f57714..435628ed39ce94680a622be7b9e2a924b4c595d8 100644 (file)
@@ -1,18 +1,24 @@
 ---
-- name: include pre_requisite.yml
-  include: pre_requisite.yml
+- name: include pre_requisite_non_container.yml
+  include: pre_requisite_non_container.yml
   when:
     - not containerized_deployment
 
+- name: include pre_requisite_container.yml
+  include: pre_requisite_container.yml
+  when:
+    - containerized_deployment
+
 - name: include create_rgw_nfs_user.yml
   include: create_rgw_nfs_user.yml
 
-- name: include start_nfs.yml
-  include: start_nfs.yml
+# NOTE (leseb): workaround for issues with ganesha and librgw
+- name: include ganesha_selinux_fix.yml
+  include: ganesha_selinux_fix.yml
   when:
     - not containerized_deployment
+    - ansible_os_family == 'RedHat'
+    - ansible_distribution_version >= '7.4'
 
-- name: include docker/main.yml
-  include: docker/main.yml
-  when:
-    - containerized_deployment
+- name: include start_nfs.yml
+  include: start_nfs.yml
diff --git a/roles/ceph-nfs/tasks/pre_requisite.yml b/roles/ceph-nfs/tasks/pre_requisite.yml
deleted file mode 100644 (file)
index afe1c70..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
----
-- name: create rados gateway and ganesha directories
-  file:
-    path: "{{ item }}"
-    state: directory
-    owner: "ceph"
-    group: "ceph"
-    mode: "0755"
-  with_items:
-    - /var/lib/ceph/bootstrap-rgw
-    - /var/lib/ceph/radosgw
-    - /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}
-    - "{{ rbd_client_admin_socket_path }}"
-    - /var/lib/nfs/ganesha
-    - /var/run/ganesha
-  when:
-    - nfs_obj_gw
-
-- name: copy rados gateway bootstrap key
-  copy:
-    src: "{{ fetch_directory }}/{{ fsid }}{{ item.name }}"
-    dest: "{{ item.name }}"
-    owner: "ceph"
-    group: "ceph"
-    mode: "0600"
-  with_items:
-    - { name: "/var/lib/ceph/bootstrap-rgw/{{ cluster }}.keyring", copy_key: true }
-    - { name: "/etc/ceph/{{ cluster }}.client.admin.keyring", copy_key: "{{ copy_admin_key }}" }
-  when:
-    - nfs_obj_gw
-    - cephx
-    - item.copy_key|bool
-
-- name: create rados gateway keyring
-  command: ceph --cluster {{ cluster }} --name client.bootstrap-rgw --keyring /var/lib/ceph/bootstrap-rgw/{{ cluster }}.keyring auth get-or-create client.rgw.{{ ansible_hostname }} osd 'allow rwx' mon 'allow rw' -o /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}/keyring
-  args:
-    creates: /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}/keyring
-  changed_when: false
-  when:
-    - nfs_obj_gw
-    - cephx
-
-- name: set rados gateway key permissions
-  file:
-    path: /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}/keyring
-    owner: "ceph"
-    group: "ceph"
-    mode: "0600"
-  when:
-    - cephx
-
-- name: change ownership on /var/log/ganesha
-  file:
-    path: '/var/log/ganesha'
-    owner: 'root'
-    group: 'root'
-    mode: '0755'
diff --git a/roles/ceph-nfs/tasks/pre_requisite_container.yml b/roles/ceph-nfs/tasks/pre_requisite_container.yml
new file mode 100644 (file)
index 0000000..2b3e523
--- /dev/null
@@ -0,0 +1,40 @@
+---
+- name: set config and keys paths
+  set_fact:
+    ceph_config_keys:
+      - /etc/ceph/{{ cluster }}.client.admin.keyring
+      - /var/lib/ceph/bootstrap-rgw/{{ cluster }}.keyring
+
+- name: stat for config and keys
+  local_action: stat path={{ fetch_directory }}/{{ fsid }}/{{ item }}
+  with_items: "{{ ceph_config_keys }}"
+  changed_when: false
+  become: false
+  failed_when: false
+  always_run: true
+  register: statconfig
+
+- name: try to fetch config and keys
+  copy:
+    src: "{{ fetch_directory }}/{{ fsid }}/{{ item.0 }}"
+    dest: "{{ item.0 }}"
+    owner: "64045"
+    group: "64045"
+    mode: 0644
+  changed_when: false
+  with_together:
+    - "{{ ceph_config_keys }}"
+    - "{{ statconfig.results }}"
+  when:
+    - item.1.stat.exists == true
+
+- name: set selinux permissions
+  shell: |
+    chcon -Rt svirt_sandbox_file_t {{ item }}
+  with_items:
+    - "{{ ceph_conf_key_directory }}"
+    - /var/lib/ceph
+  changed_when: false
+  when:
+    - ansible_os_family == 'RedHat'
+    - sestatus.stdout != 'Disabled'
diff --git a/roles/ceph-nfs/tasks/pre_requisite_non_container.yml b/roles/ceph-nfs/tasks/pre_requisite_non_container.yml
new file mode 100644 (file)
index 0000000..0ab6bd2
--- /dev/null
@@ -0,0 +1,59 @@
+---
+# NOTE (leseb): we use root:ceph for permissions since ganesha
+# does not have the right selinux context to read ceph directories.
+- name: create rados gateway and ganesha directories
+  file:
+    path: "{{ item }}"
+    state: directory
+    owner: "ceph"
+    group: "ceph"
+    mode: "0755"
+  with_items:
+    - /var/lib/ceph/bootstrap-rgw
+    - /var/lib/ceph/radosgw
+    - /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}
+    - "{{ rbd_client_admin_socket_path }}"
+    - /var/log/ceph
+    - /var/run/ceph/
+  when:
+    - nfs_obj_gw
+
+- name: copy rados gateway bootstrap key
+  copy:
+    src: "{{ fetch_directory }}/{{ fsid }}{{ item.name }}"
+    dest: "{{ item.name }}"
+    owner: "ceph"
+    group: "ceph"
+    mode: "0600"
+  with_items:
+    - { name: "/var/lib/ceph/bootstrap-rgw/{{ cluster }}.keyring", copy_key: true }
+    - { name: "/etc/ceph/{{ cluster }}.client.admin.keyring", copy_key: "{{ copy_admin_key }}" }
+  when:
+    - nfs_obj_gw
+    - cephx
+    - item.copy_key|bool
+
+- name: create rados gateway keyring
+  command: ceph --cluster {{ cluster }} --name client.bootstrap-rgw --keyring /var/lib/ceph/bootstrap-rgw/{{ cluster }}.keyring auth get-or-create client.rgw.{{ ansible_hostname }} osd 'allow rwx' mon 'allow rw' -o /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}/keyring
+  args:
+    creates: /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}/keyring
+  changed_when: false
+  when:
+    - nfs_obj_gw
+    - cephx
+
+- name: set rados gateway key permissions
+  file:
+    path: /var/lib/ceph/radosgw/{{ cluster }}-rgw.{{ ansible_hostname }}/keyring
+    owner: "ceph"
+    group: "ceph"
+    mode: "0600"
+  when:
+    - cephx
+
+- name: change ownership on /var/log/ganesha
+  file:
+    path: /var/log/ganesha
+    owner: "root"
+    group: "root"
+    mode: "0755"
index 02513149d648f20ab240277a48c5a371bb8fff38..da5e4c3d7b675b5ed625752abfcf8453f47ef94f 100644 (file)
@@ -1,4 +1,12 @@
 ---
+- name: create /etc/ganesha
+  file:
+    path: /etc/ganesha
+    state: directory
+    owner: root
+    group: root
+    mode: "0755"
+
 - name: generate ganesha configuration file
   action: config_template
   args:
   notify:
     - restart ceph nfss
 
+- name: generate systemd unit file
+  become: true
+  template:
+    src: "{{ role_path }}/templates/ceph-nfs.service.j2"
+    dest: /etc/systemd/system/ceph-nfs@.service
+    owner: "root"
+    group: "root"
+    mode: "0644"
+  when:
+    - containerized_deployment
+
+- name: systemd start nfs container
+  systemd:
+    name: "ceph-nfs@{{ ansible_hostname }}.service"
+    state: started
+    enabled: yes
+    daemon_reload: yes
+  when:
+    - ceph_nfs_enable_service
+    - containerized_deployment
+
 - name: start nfs gateway service
   service:
     name: nfs-ganesha
@@ -18,3 +47,4 @@
     enabled: yes
   when:
     - ceph_nfs_enable_service
+    - not containerized_deployment
index 1b0834ab1b544adf9f431ddfdc260c8ef2ca359c..fadfc3499269c52a0066e9e53a4ab6884a0d70c3 100644 (file)
@@ -8,20 +8,22 @@ EnvironmentFile=-/etc/environment
 ExecStartPre=-/usr/bin/docker rm ceph-nfs-%i
 ExecStartPre=/usr/bin/mkdir -p /etc/ceph /etc/ganesha /var/lib/nfs/ganesha
 ExecStart=/usr/bin/docker run --rm --net=host \
-   {% if not containerized_deployment_with_kv -%}
-   -v /etc/ceph:/etc/ceph \
-   -v /etc/ganesha:/etc/ganesha \
-   {% else -%}
-   -e KV_TYPE={{kv_type}} \
-   -e KV_IP={{kv_endpoint}}\
-   -e KV_PORT={{kv_port}} \
-   {% endif -%}
-   -v /etc/localtime:/etc/localtime:ro \
-   --privileged \
-   -e CEPH_DAEMON=NFS \
-   {{ ceph_nfs_docker_extra_env }} \
-   --name=ceph-nfs-{{ ansible_hostname }} \
-   {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}
+  {% if not containerized_deployment_with_kv -%}
+  -v /var/lib/ceph:/var/lib/ceph \
+  -v /etc/ceph:/etc/ceph \
+  -v /var/lib/ganesha:/var/lib/ganesha \
+  -v /etc/ganesha:/etc/ganesha \
+  {% else -%}
+  -e KV_TYPE={{kv_type}} \
+  -e KV_IP={{kv_endpoint}}\
+  -e KV_PORT={{kv_port}} \
+  {% endif -%}
+  -v /etc/localtime:/etc/localtime:ro \
+  -e CLUSTER={{ cluster }} \
+  -e CEPH_DAEMON=NFS \
+  {{ ceph_nfs_docker_extra_env }} \
+  --name=ceph-nfs-{{ ansible_hostname }} \
+  {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}
 ExecStopPost=-/usr/bin/docker stop ceph-nfs-%i
 Restart=always
 RestartSec=10s