From ae4ab5d2041856c8a891e25df610b88bc07b14f1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 26 Apr 2021 09:17:31 -0400 Subject: [PATCH] mgr/cephadm: nfs: bind ganesha to appropriate ip:port Signed-off-by: Sage Weil --- src/cephadm/cephadm | 4 ++-- src/pybind/mgr/cephadm/services/nfs.py | 17 +++++++++++------ .../templates/services/nfs/ganesha.conf.j2 | 4 ++++ .../ceph/deployment/service_spec.py | 8 ++++++++ 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index 4e1e12e11e4..bacc567bae1 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -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) ? diff --git a/src/pybind/mgr/cephadm/services/nfs.py b/src/pybind/mgr/cephadm/services/nfs.py index 4e4e0153e8d..4c0fcd9dfa4 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 174870c0373..aae3b671eaf 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 3b9caf85aab..7f5707aaeb7 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() -- 2.39.5