From: Sage Weil Date: Mon, 26 Apr 2021 13:17:31 +0000 (-0400) Subject: mgr/cephadm: nfs: bind ganesha to appropriate ip:port X-Git-Tag: v16.2.5~87^2~60 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4b3ff8b5c3302ae7d8680b302780ccc8828f5e4a;p=ceph.git mgr/cephadm: nfs: bind ganesha to appropriate ip:port Signed-off-by: Sage Weil (cherry picked from commit ae4ab5d2041856c8a891e25df610b88bc07b14f1) --- diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index e662194a6eda..b218e6d29a2e 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -4391,8 +4391,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) ? diff --git a/src/pybind/mgr/cephadm/services/nfs.py b/src/pybind/mgr/cephadm/services/nfs.py index 4e4e0153e8d5..4c0fcd9dfa4e 100644 --- a/src/pybind/mgr/cephadm/services/nfs.py +++ b/src/pybind/mgr/cephadm/services/nfs.py @@ -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 diff --git a/src/pybind/mgr/cephadm/templates/services/nfs/ganesha.conf.j2 b/src/pybind/mgr/cephadm/templates/services/nfs/ganesha.conf.j2 index 174870c03730..aae3b671eaf7 100644 --- a/src/pybind/mgr/cephadm/templates/services/nfs/ganesha.conf.j2 +++ b/src/pybind/mgr/cephadm/templates/services/nfs/ganesha.conf.j2 @@ -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 { diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index 3b9caf85aabb..7f5707aaeb7b 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -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()