Create ganesha-export-index before the ceph-nfs daemon is deployed
When ceph_nfs_rados_backend is provided, as per doc [1], for a fresh
setup, we need to make sure to create the Ganesha export index object
as an empty object before starting the Ganesha server.
This change provides the two tasks, already present in ceph-ansible,
to create the index object.
In addition, since the ganesha systemd units are managed by pacemaker,
this change renders the related j2 templates and prepares the ganesha
workdir in the ceph-nfs target hosts.
[1] https://docs.openstack.org/manila/latest/contributor/ganesha.html
[2] https://github.com/ceph/ceph-ansible/blob/master/roles/ceph-nfs/tasks/start_nfs.yml#L15-L31
Change-Id: Ie89c35238d1bb82a28d560d7f0f718f7ee38044f
(cherry picked from commit 6415174661
)
This commit is contained in:
parent
3f20fc1dad
commit
ab58c38c03
|
@ -56,9 +56,9 @@
|
||||||
tasks_from: mds
|
tasks_from: mds
|
||||||
|
|
||||||
- name: Config Ganesha
|
- name: Config Ganesha
|
||||||
import_role:
|
include_role:
|
||||||
name: tripleo_cephadm
|
name: tripleo_cephadm
|
||||||
tasks_from: ganesha
|
tasks_from: nfs
|
||||||
when:
|
when:
|
||||||
- cephfs_data_pool is defined
|
- cephfs_data_pool is defined
|
||||||
- cephfs_metadata_pool is defined
|
- cephfs_metadata_pool is defined
|
||||||
|
|
|
@ -45,5 +45,7 @@ tripleo_cephadm_fsid_list: []
|
||||||
tripleo_cephadm_fqdn: false
|
tripleo_cephadm_fqdn: false
|
||||||
tripleo_cephadm_crush_rules: []
|
tripleo_cephadm_crush_rules: []
|
||||||
tripleo_cephadm_internal_tls_enabled: false
|
tripleo_cephadm_internal_tls_enabled: false
|
||||||
|
tripleo_cephadm_nfs_rados_export_index: 'ganesha-export-index'
|
||||||
|
tripleo_cephadm_ceph_nfs_rados_backend: true
|
||||||
# todo(fultonj) add is_hci boolean for target memory
|
# todo(fultonj) add is_hci boolean for target memory
|
||||||
# https://lists.ceph.io/hyperkitty/list/dev@ceph.io/thread/Z77XO23JPXDNHKM7IG6UN4URYKA6L7VH/
|
# https://lists.ceph.io/hyperkitty/list/dev@ceph.io/thread/Z77XO23JPXDNHKM7IG6UN4URYKA6L7VH/
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
---
|
|
||||||
# Copyright 2021 Red Hat, Inc.
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
# Using two tasks with a boolean due to the ansible bug: https://github.com/ansible/ansible/issues/68364
|
|
||||||
- name: Collect the host and build the resulting host list
|
|
||||||
set_fact:
|
|
||||||
_hosts: "{{ _hosts|default([]) + [ hostvars[item].canonical_hostname ] }}"
|
|
||||||
with_items: "{{ groups['ceph_nfs'] }}"
|
|
||||||
when: tripleo_cephadm_fqdn | bool
|
|
||||||
|
|
||||||
- name: Collect the host and build the resulting host list
|
|
||||||
set_fact:
|
|
||||||
_hosts: "{{ _hosts|default([]) + [ hostvars[item].inventory_hostname ] }}"
|
|
||||||
with_items: "{{ groups['ceph_nfs'] }}"
|
|
||||||
when: not tripleo_cephadm_fqdn | bool
|
|
||||||
|
|
||||||
- name: Create the ganesha Daemon spec definition
|
|
||||||
become: true
|
|
||||||
ceph_mkspec:
|
|
||||||
service_type: nfs
|
|
||||||
apply: true
|
|
||||||
hosts: "{{ _hosts }}"
|
|
||||||
render_path: "{{ tripleo_cephadm_spec_home }}"
|
|
||||||
spec:
|
|
||||||
namespace: 'ganesha'
|
|
||||||
pool: "{{ cephfs_data_pool }}"
|
|
||||||
environment:
|
|
||||||
CEPH_CONTAINER_IMAGE: "{{ tripleo_cephadm_container_ns + '/' + tripleo_cephadm_container_image + ':' + tripleo_cephadm_container_tag }}"
|
|
||||||
CEPH_CONTAINER_BINARY: "{{ tripleo_cephadm_container_cli }}"
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
# Copyright 2021 Red Hat, Inc.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
- name: create keyring directory
|
||||||
|
file:
|
||||||
|
name: /var/lib/ceph/bootstrap-rgw/
|
||||||
|
state: directory
|
||||||
|
owner: "167"
|
||||||
|
group: "167"
|
||||||
|
mode: "0755"
|
||||||
|
delegate_to: "{{ nfs_node }}"
|
||||||
|
|
||||||
|
- name: copy ceph key(s) if needed
|
||||||
|
copy:
|
||||||
|
dest: "{{ item.item.path }}"
|
||||||
|
content: "{{ item.stdout + '\n' }}"
|
||||||
|
owner: "167"
|
||||||
|
group: "167"
|
||||||
|
mode: "0755"
|
||||||
|
with_items: "{{ _rgw_keys.results }}"
|
||||||
|
delegate_to: "{{ nfs_node }}"
|
|
@ -0,0 +1,94 @@
|
||||||
|
---
|
||||||
|
# Copyright 2021 Red Hat, Inc.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
- name: dbus related tasks
|
||||||
|
block:
|
||||||
|
- name: create dbus service file
|
||||||
|
copy:
|
||||||
|
content: "{{ dbus_ganesha_file.stdout }}"
|
||||||
|
dest: /etc/dbus-1/system.d/org.ganesha.nfsd.conf
|
||||||
|
owner: "root"
|
||||||
|
group: "root"
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: reload dbus configuration
|
||||||
|
command: "killall -SIGHUP dbus-daemon"
|
||||||
|
when: tripleo_cephadm_ceph_nfs_dynamic_exports | bool
|
||||||
|
delegate_to: "{{ nfs_node }}"
|
||||||
|
|
||||||
|
- name: Render config files
|
||||||
|
delegate_to: "{{ nfs_node }}"
|
||||||
|
block:
|
||||||
|
- name: Make sure /etc/ganesha exists
|
||||||
|
file:
|
||||||
|
path: /etc/ganesha
|
||||||
|
state: directory
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: create exports directory
|
||||||
|
file:
|
||||||
|
path: /etc/ganesha/export.d
|
||||||
|
state: directory
|
||||||
|
owner: "root"
|
||||||
|
group: "root"
|
||||||
|
mode: "0755"
|
||||||
|
when: tripleo_cephadm_ceph_nfs_dynamic_exports | bool
|
||||||
|
|
||||||
|
- name: create exports dir index file
|
||||||
|
copy:
|
||||||
|
content: ""
|
||||||
|
force: false
|
||||||
|
dest: /etc/ganesha/export.d/INDEX.conf
|
||||||
|
owner: "root"
|
||||||
|
group: "root"
|
||||||
|
mode: "0644"
|
||||||
|
when: tripleo_cephadm_ceph_nfs_dynamic_exports | bool
|
||||||
|
|
||||||
|
- name: Render ganesha config file
|
||||||
|
template:
|
||||||
|
src: ganesha.conf.j2
|
||||||
|
dest: /etc/ganesha/ganesha.conf
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Render ganesha systemd unit
|
||||||
|
template:
|
||||||
|
src: ceph-nfs.service.j2
|
||||||
|
dest: /etc/systemd/system/ceph-nfs@.service
|
||||||
|
owner: "root"
|
||||||
|
group: "root"
|
||||||
|
mode: "0644"
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: systemd start nfs container
|
||||||
|
systemd:
|
||||||
|
name: ceph-nfs@{{ tripleo_cephadm_ceph_nfs_service_suffix | default(ansible_facts['hostname']) }}
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
daemon_reload: yes
|
||||||
|
when:
|
||||||
|
- tripleo_cephadm_ceph_nfs_enable_service | bool
|
||||||
|
|
||||||
|
- name: start nfs gateway service
|
||||||
|
systemd:
|
||||||
|
name: nfs-ganesha
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
when:
|
||||||
|
- tripleo_cephadm_ceph_nfs_enable_service | bool
|
|
@ -0,0 +1,78 @@
|
||||||
|
---
|
||||||
|
# Copyright 2021 Red Hat, Inc.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
- name: Get ceph_cli
|
||||||
|
include_tasks: ceph_cli.yaml
|
||||||
|
vars:
|
||||||
|
ceph_command: 'rados'
|
||||||
|
|
||||||
|
- name: check if rados index object exists
|
||||||
|
shell: |
|
||||||
|
{{ tripleo_cephadm_ceph_cli }} -p {{ cephfs_data_pool.name }} --cluster {{ tripleo_cephadm_cluster }} \
|
||||||
|
ls | grep {{ tripleo_cephadm_nfs_rados_export_index }}
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
register: rados_index_exists
|
||||||
|
check_mode: false
|
||||||
|
when: tripleo_cephadm_ceph_nfs_rados_backend | bool
|
||||||
|
|
||||||
|
- name: create an empty rados index object
|
||||||
|
command: |
|
||||||
|
{{ tripleo_cephadm_ceph_cli }} -p {{ cephfs_data_pool.name }} --cluster {{ tripleo_cephadm_cluster }} \
|
||||||
|
put {{ tripleo_cephadm_nfs_rados_export_index }} /dev/null
|
||||||
|
when:
|
||||||
|
- tripleo_cephadm_ceph_nfs_rados_backend | bool
|
||||||
|
- rados_index_exists.rc != 0
|
||||||
|
|
||||||
|
- name: Extract key
|
||||||
|
ceph_key:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
output_format: plain
|
||||||
|
state: info
|
||||||
|
environment:
|
||||||
|
CEPH_CONTAINER_IMAGE: "{{ tripleo_cephadm_container_ns + '/' + tripleo_cephadm_container_image + ':' + tripleo_cephadm_container_tag }}"
|
||||||
|
CEPH_CONTAINER_BINARY: "{{ tripleo_cephadm_container_cli }}"
|
||||||
|
register: _rgw_keys
|
||||||
|
become: true
|
||||||
|
with_items:
|
||||||
|
- { name: "client.bootstrap-rgw", path: "/var/lib/ceph/bootstrap-rgw/{{ tripleo_cephadm_cluster }}.keyring", copy_key: true }
|
||||||
|
|
||||||
|
- name: Distribute Ceph keys to the nfs nodes
|
||||||
|
include_tasks: ganesha/distribute_keys.yaml
|
||||||
|
vars:
|
||||||
|
nfs_node: "{{ node }}"
|
||||||
|
rgw_keys: "{{ _rgw_keys }}"
|
||||||
|
loop: "{{ groups['ceph_nfs'] }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: node
|
||||||
|
|
||||||
|
- name: get dbus-1 file
|
||||||
|
command: |
|
||||||
|
{{ container_cli }} run --rm --entrypoint=cat \
|
||||||
|
{{ tripleo_cephadm_container_ns + '/' + tripleo_cephadm_container_image + ':' + tripleo_cephadm_container_tag }} \
|
||||||
|
/etc/dbus-1/system.d/org.ganesha.nfsd.conf
|
||||||
|
register: _dbus_ganesha
|
||||||
|
run_once: true
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Render Ganesha templates and files
|
||||||
|
include_tasks: ganesha/start_nfs.yaml
|
||||||
|
vars:
|
||||||
|
nfs_node: "{{ node }}"
|
||||||
|
dbus_ganesha_file: "{{ _dbus_ganesha }}"
|
||||||
|
loop: "{{ groups['ceph_nfs'] }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: node
|
|
@ -0,0 +1,44 @@
|
||||||
|
[Unit]
|
||||||
|
Description=NFS-Ganesha file server
|
||||||
|
Documentation=http://github.com/nfs-ganesha/nfs-ganesha/wiki
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=-/etc/environment
|
||||||
|
{% if container_cli == 'podman' %}
|
||||||
|
ExecStartPre=-/usr/bin/rm -f /%t/%n-pid /%t/%n-cid
|
||||||
|
ExecStartPre=-/usr/bin/{{ container_cli }} rm --storage ceph-nfs-%i
|
||||||
|
ExecStartPre=-/usr/bin/mkdir -p /var/log/ceph /var/log/ganesha
|
||||||
|
{% endif %}
|
||||||
|
ExecStartPre=-/usr/bin/{{ container_cli }} rm ceph-nfs-%i
|
||||||
|
ExecStartPre={{ '/bin/mkdir' if ansible_facts['os_family'] == 'Debian' else '/usr/bin/mkdir' }} -p /etc/ceph /etc/ganesha /var/lib/nfs/ganesha /var/log/ganesha
|
||||||
|
ExecStart=/usr/bin/{{ container_cli }} run --rm --net=host \
|
||||||
|
-d --log-driver journald --conmon-pidfile /%t/%n-pid --cidfile /%t/%n-cid \
|
||||||
|
-v /var/lib/ceph:/var/lib/ceph:z \
|
||||||
|
-v /etc/ceph:/etc/ceph:z \
|
||||||
|
-v /var/lib/nfs/ganesha:/var/lib/nfs/ganesha:z \
|
||||||
|
-v /etc/ganesha:/etc/ganesha:z \
|
||||||
|
-v /var/run/ceph:/var/run/ceph:z \
|
||||||
|
-v /var/log/ceph:/var/log/ceph:z \
|
||||||
|
-v /var/log/ganesha:/var/log/ganesha:z \
|
||||||
|
{% if tripleo_cephadm_ceph_nfs_dynamic_exports | bool %}
|
||||||
|
--privileged \
|
||||||
|
-v /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket \
|
||||||
|
{% endif -%}
|
||||||
|
-v /etc/localtime:/etc/localtime:ro \
|
||||||
|
-e CLUSTER={{ tripleo_cephadm_cluster }} \
|
||||||
|
-e CEPH_DAEMON=NFS \
|
||||||
|
-e CONTAINER_IMAGE={{ tripleo_cephadm_container_ns }}/{{ tripleo_cephadm_container_image }}:{{ tripleo_cephadm_container_tag }} \
|
||||||
|
--name=ceph-nfs-{{ tripleo_cephadm_ceph_nfs_service_suffix | default(ansible_facts['hostname']) }} \
|
||||||
|
{{ tripleo_cephadm_container_ns }}/{{ tripleo_cephadm_container_image }}:{{ tripleo_cephadm_container_tag }}
|
||||||
|
ExecStop=-/usr/bin/sh -c "/usr/bin/{{ container_cli }} rm -f `cat /%t/%n-cid`"
|
||||||
|
KillMode=none
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10s
|
||||||
|
TimeoutStartSec=120
|
||||||
|
TimeoutStopSec=15
|
||||||
|
Type=forking
|
||||||
|
PIDFile=/%t/%n-pid
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1,52 @@
|
||||||
|
#jinja2: trim_blocks: "true", lstrip_blocks: "true"
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
{% if tripleo_cephadm_ceph_nfs_dynamic_exports | bool and not tripleo_cephadm_ceph_nfs_rados_backend | bool %}
|
||||||
|
%include /etc/ganesha/export.d/INDEX.conf
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
NFS_Core_Param
|
||||||
|
{
|
||||||
|
{% if tripleo_cephadm_ceph_nfs_bind_addr is defined %}
|
||||||
|
Bind_Addr={{ tripleo_cephadm_ceph_nfs_bind_addr }};
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
|
||||||
|
{% if tripleo_cephadm_ceph_nfs_disable_caching | bool or nfs_file_gw | bool %}
|
||||||
|
EXPORT_DEFAULTS {
|
||||||
|
Attr_Expiration_Time = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
CACHEINODE {
|
||||||
|
Dir_Chunk = 0;
|
||||||
|
|
||||||
|
NParts = 1;
|
||||||
|
Cache_Size = 1;
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if tripleo_cephadm_ceph_nfs_rados_backend | bool %}
|
||||||
|
RADOS_URLS {
|
||||||
|
ceph_conf = '/etc/ceph/{{ tripleo_cephadm_cluster }}.conf';
|
||||||
|
userid = "{{ tripleo_cephadm_ceph_nfs_ceph_user }}";
|
||||||
|
}
|
||||||
|
%url rados://{{ cephfs_data_pool.name }}/{{ tripleo_cephadm_nfs_rados_export_index }}
|
||||||
|
|
||||||
|
NFSv4 {
|
||||||
|
RecoveryBackend = 'rados_kv';
|
||||||
|
}
|
||||||
|
RADOS_KV {
|
||||||
|
ceph_conf = '/etc/ceph/{{ tripleo_cephadm_cluster }}.conf';
|
||||||
|
userid = "{{ tripleo_cephadm_ceph_nfs_ceph_user }}";
|
||||||
|
pool = "{{ cephfs_data_pool.name }}";
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
LOG {
|
||||||
|
Facility {
|
||||||
|
name = FILE;
|
||||||
|
destination = "/var/log/ganesha/ganesha.log";
|
||||||
|
enable = active;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue