]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/volumes: Add Ganesha common config
authorVarsha Rao <varao@redhat.com>
Wed, 12 Feb 2020 07:48:27 +0000 (13:18 +0530)
committerVarsha Rao <varao@redhat.com>
Wed, 8 Apr 2020 09:19:43 +0000 (14:49 +0530)
Fixes: https://tracker.ceph.com/issues/44193
Signed-off-by: Varsha Rao <varao@redhat.com>
src/pybind/mgr/volumes/fs/nfs.py
src/pybind/mgr/volumes/module.py

index b718343343f6e99758059eafb1f4e1acb192f911..129a0cf289c531e42b7e27e12758424438e6224f 100644 (file)
@@ -119,7 +119,7 @@ class GaneshaConf(object):
             if not entity_type or entity.startswith('{}.'.format(entity_type)):
                 entity_id = entity[entity.find('.')+1:]
                 result[entity_id] = auth_entry
-        self.cephx_key = result["admin"]["key"]
+        self.cephx_key = result["ganesha-tester"]["key"]
         export.fsal.cephx_key = self.cephx_key
 
     def _persist_daemon_configuration(self):
@@ -186,19 +186,38 @@ class NFSConfig(object):
     exp_num = 0
 
     def __init__(self, mgr, cluster_id):
-        self.cluster_id = cluster_id
+        self.cluster_id = "ganesha-%s" % cluster_id
         self.pool_name = 'nfs-ganesha'
-        self.pool_ns = 'nfsgw'
+        self.pool_ns = cluster_id
         self.mgr = mgr
+        self.ganeshaconf = ''
+
+    def create_common_config(self, nodeid):
+        result = "NFS_CORE_PARAM {\n Enable_NLM = false;\n Enable_RQUOTA = false;\n Protocols = 4;\n}\n\n"
+        result += "CACHEINODE {\n Dir_Chunk = 0;\n NParts = 1;\n Cache_Size = 1;\n}\n\n"
+        result += "NFSv4 {\n RecoveryBackend = rados_cluster;\n Minor_Versions = 1, 2;\n}\n\n"
+        result += "RADOS_URLS {{\n userid = {};\n}}\n\n".format(self.cluster_id)
+        #result += "%url rados://{}/{}/{}\n\n".format(self.pool_name, self.pool_ns, nodeid)
+        result += "%url rados://{}/{}/export-1\n\n".format(self.pool_name, self.pool_ns)
+        result += "RADOS_KV {{\n pool = {};\n namespace = {};\n UserId = {};\n nodeid = {};\n}}\n\n".format(self.pool_name, self.pool_ns, self.cluster_id, nodeid)
+        #self.ganeshaconf._write_raw_config(result, nodeid)
+
+        with self.mgr.rados.open_ioctx(self.pool_name) as ioctx:
+            if self.pool_ns:
+                ioctx.set_namespace(self.pool_ns)
+            ioctx.write_full(nodeid, result.encode('utf-8'))
+            log.debug(
+                    "write configuration into rados object %s/%s/%s:\n%s",
+                    self.pool_name, self.pool_ns, nodeid, result)
 
     def create_instance(self, orch, pool_name):
         return GaneshaConf("a", pool_name, "ganesha", orch)
 
-    def create_export(self, ganesha_conf):
-        ex_id = ganesha_conf.create_export({
+    def create_export(self):
+        ex_id = self.ganeshaconf.create_export({
             'path': "/",
             'pseudo': "/cephfs",
-            'cluster_id': "cluster1",
+            'cluster_id': self.cluster_id,
             'daemons': ["ganesha.a"],
             'tag': "",
             'access_type': "RW",
@@ -206,7 +225,7 @@ class NFSConfig(object):
             'security_label': True,
             'protocols': [4],
             'transports': ["TCP"],
-            'fsal': {"name": "CEPH", "user_id":"admin", "fs_name": "a", "sec_label_xattr": ""},
+            'fsal': {"name": "CEPH", "user_id":self.cluster_id, "fs_name": "a", "sec_label_xattr": ""},
             'clients': []
             })
 
@@ -247,13 +266,14 @@ class NFSConfig(object):
 
     def create_nfs_cluster(self, size):
         pool_list = [p['pool_name'] for p in self.mgr.get_osdmap().dump().get('pools', [])]
-        client = 'client.ganesha-%s' % self.cluster_id
+        client = 'client.%s' % self.cluster_id
 
         if self.pool_name not in pool_list:
             r, out, err = create_pool(self.mgr, self.pool_name)
             if r != 0:
                 return r, out, err
             log.info("{}".format(out))
+            self.ganeshaconf = GaneshaConf(self.cluster_id, self.pool_name, self.pool_ns, self.mgr)
 
         ret, out, err = self.mgr.mon_command({
             'prefix': 'auth get-or-create',
@@ -264,4 +284,7 @@ class NFSConfig(object):
         if ret!= 0:
             return ret, out, err
 
+        log.info("Calling up common config")
+        self.create_common_config("a")
+
         return 0, "", "NFS Cluster Created Successfully"
index 142e629017164aa575e3322cf73364f510f29d16..827e1a29d1ae313d5c19a73b06452c599ca7f4f0 100644 (file)
@@ -397,19 +397,17 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
             vol_name=cmd['vol_name'], clone_name=cmd['clone_name'],  group_name=cmd.get('group_name', None))
 
     def _cmd_fs_nfs_create(self, inbuf, cmd):
-        if NFSConfig.check_fsal_valid(self.vc.mgr.get('fs_map')):
+        if NFSConfig.check_fsal_valid(self, self.vc.mgr.get('fs_map')):
             pool_name = "nfs-ganesha"
-            NFSConfig.create_rados_pool(self.vc.mgr, pool_name)
-            instance = NFSConfig.create_instance(self, pool_name)
-            return NFSConfig.create_export(instance)
-
-            NFSConfig.create_rados_pool(self.vc.mgr, pool_name)
-            instance = NFSConfig.create_instance(self, pool_name)
+            #NFSConfig.create_rados_pool(self.vc.mgr, pool_name)
+            #instance = NFSConfig.create_instance(self, pool_name)
             return NFSConfig.create_export(instance)
 
     def _cmd_fs_nfs_delete(self, inbuf, cmd):
             instance = NFSConfig.create_instance(self, "nfs-ganesha")
             return NFSConfig.delete_export(instance, cmd['export_id'])
+
     def _cmd_fs_nfs_cluster_create(self, inbuf, cmd):
             nfs_obj = NFSConfig(self, cmd['cluster_id'])
-            return nfs_obj.create_nfs_cluster(size=cmd.get('size', 1))
+            nfs_obj.create_nfs_cluster(size=cmd.get('size', 1))
+            return nfs_obj.create_export()