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) ?
# 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
Enable_NLM = false;
Enable_RQUOTA = false;
Protocols = 4;
+ NFS_Port = {{ port }};
+{% if bind_addr %}
+ Bind_addr = {{ bind_addr }};
+{% endif %}
}
MDCACHE {
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__(
#: 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()