]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: nfs: bind ganesha to appropriate ip:port
authorSage Weil <sage@newdream.net>
Mon, 26 Apr 2021 13:17:31 +0000 (09:17 -0400)
committerSage Weil <sage@newdream.net>
Wed, 19 May 2021 12:43:14 +0000 (08:43 -0400)
Signed-off-by: Sage Weil <sage@newdream.net>
src/cephadm/cephadm
src/pybind/mgr/cephadm/services/nfs.py
src/pybind/mgr/cephadm/templates/services/nfs/ganesha.conf.j2
src/python-common/ceph/deployment/service_spec.py

index 4e1e12e11e4b6278926312fc91550c815e2efab4..bacc567bae1bbff4b68e997007a6808581da19e9 100755 (executable)
@@ -4365,8 +4365,8 @@ def command_deploy(ctx):
                       ports=daemon_ports)
 
     elif daemon_type == NFSGanesha.daemon_type:
-        if not ctx.reconfig and not redeploy:
-            daemon_ports.extend(NFSGanesha.port_map.values())
+        if not ctx.reconfig and not redeploy and not daemon_ports:
+            daemon_ports = list(NFSGanesha.port_map.values())
 
         config, keyring = get_config_and_keyring(ctx)
         # TODO: extract ganesha uid/gid (997, 994) ?
index 4e4e0153e8d51507d8082318623813903bfe00d1..4c0fcd9dfa4ebeb8813b47367d6c19708538b7e6 100644 (file)
@@ -82,12 +82,17 @@ class NFSService(CephService):
 
         # generate the ganesha config
         def get_ganesha_conf() -> str:
-            context = dict(user=rados_user,
-                           nodeid=f'{daemon_spec.service_name}.{daemon_spec.rank}',
-                           pool=spec.pool,
-                           namespace=spec.namespace if spec.namespace else '',
-                           rgw_user=rgw_user,
-                           url=spec.rados_config_location())
+            context = {
+                "user": rados_user,
+                "nodeid": f'{daemon_spec.service_name}.{daemon_spec.rank}',
+                "pool": spec.pool,
+                "namespace": spec.namespace if spec.namespace else '',
+                "rgw_user": rgw_user,
+                "url": spec.rados_config_location(),
+                # fall back to default NFS port if not present in daemon_spec
+                "port": daemon_spec.ports[0] if daemon_spec.ports else 2049,
+                "bind_addr": daemon_spec.ip if daemon_spec.ip else '',
+            }
             return self.mgr.template.render('services/nfs/ganesha.conf.j2', context)
 
         # generate the cephadm config json
index 174870c037305cd84cabdb72c0601e3c8104965b..aae3b671eaf7c0e52735666ef03eb9910597b45e 100644 (file)
@@ -3,6 +3,10 @@ NFS_CORE_PARAM {
         Enable_NLM = false;
         Enable_RQUOTA = false;
         Protocols = 4;
+        NFS_Port = {{ port }};
+{% if bind_addr %}
+        Bind_addr = {{ bind_addr }};
+{% endif %}
 }
 
 MDCACHE {
index 3b9caf85aabb54ef3a0473f5832ac3c490eb6422..7f5707aaeb7b041e40642005ff6953a1174cfba2 100644 (file)
@@ -670,6 +670,7 @@ class NFSServiceSpec(ServiceSpec):
                  preview_only: bool = False,
                  config: Optional[Dict[str, str]] = None,
                  networks: Optional[List[str]] = None,
+                 port: Optional[int] = None,
                  ):
         assert service_type == 'nfs'
         super(NFSServiceSpec, self).__init__(
@@ -683,6 +684,13 @@ class NFSServiceSpec(ServiceSpec):
         #: RADOS namespace where NFS client recovery data is stored in the pool.
         self.namespace = namespace
 
+        self.port = port
+
+    def get_port_start(self) -> List[int]:
+        if self.port:
+            return [self.port]
+        return []
+
     def validate(self) -> None:
         super(NFSServiceSpec, self).validate()