or not spec.client_key
or not spec.server_cert
or not spec.server_key
+ or not spec.root_ca_cert
):
- self.mgr.log.error(f'enable_auth set for {spec.service_name()} spec, but at '
- 'least one of server/client cert/key fields missing. TLS '
- f'not being set up for {daemon_spec.name()}')
+ err_msg = 'enable_auth is true but '
+ for cert_key_attr in ['server_key', 'server_cert', 'client_key', 'client_cert', 'root_ca_cert']:
+ if not hasattr(spec, cert_key_attr):
+ err_msg += f'{cert_key_attr}, '
+ err_msg += 'attribute(s) missing from nvmeof spec'
+ self.mgr.log.error(err_msg)
else:
daemon_spec.extra_files['server_cert'] = spec.server_cert
daemon_spec.extra_files['client_cert'] = spec.client_cert
daemon_spec.extra_files['server_key'] = spec.server_key
daemon_spec.extra_files['client_key'] = spec.client_key
+ daemon_spec.extra_files['root_ca_cert'] = spec.root_ca_cert
daemon_spec.final_config, daemon_spec.deps = self.generate_config(daemon_spec)
daemon_spec.deps = []
server_cert: Optional[str] = None,
client_key: Optional[str] = None,
client_cert: Optional[str] = None,
+ root_ca_cert: Optional[str] = None,
spdk_path: Optional[str] = None,
tgt_path: Optional[str] = None,
spdk_timeout: Optional[float] = 60.0,
self.client_key = client_key
#: ``client_cert`` client certificate
self.client_cert = client_cert
+ #: ``root_ca_cert`` CA cert for server/client certs
+ self.root_ca_cert = root_ca_cert
#: ``spdk_path`` path to SPDK
self.spdk_path = spdk_path or '/usr/local/bin/nvmf_tgt'
#: ``tgt_path`` nvmeof target path
raise SpecValidationError('Cannot add NVMEOF: No Pool specified')
if self.enable_auth:
- if not all([self.server_key, self.server_cert, self.client_key, self.client_cert]):
- raise SpecValidationError(
- 'enable_auth is true but client/server certificates are missing')
+ if not all([self.server_key, self.server_cert, self.client_key, self.client_cert, self.root_ca_cert]):
+ err_msg = 'enable_auth is true but '
+ for cert_key_attr in ['server_key', 'server_cert', 'client_key', 'client_cert', 'root_ca_cert']:
+ if not hasattr(self, cert_key_attr):
+ err_msg += f'{cert_key_attr}, '
+ err_msg += 'attribute(s) not set in the spec'
+ raise SpecValidationError(err_msg)
if self.transports not in ['tcp']:
raise SpecValidationError('Invalid transport. Valid values are tcp')