import enum
import json
-import pathlib
import logging
+import pathlib
+import socket
from typing import List, Dict, Tuple, Optional, Any
custom_dns: List[str]
smb_port: int
ceph_config_entity: str
+ vhostname: str
def __init__(
self,
custom_dns: Optional[List[str]] = None,
smb_port: int = 0,
ceph_config_entity: str = 'client.admin',
+ vhostname: str = '',
) -> None:
self.instance_id = instance_id
self.source_config = source_config
self.custom_dns = custom_dns or []
self.smb_port = smb_port
self.ceph_config_entity = ceph_config_entity
+ self.vhostname = vhostname
def __str__(self) -> str:
return (
)
+def _container_dns_args(cfg: Config) -> List[str]:
+ cargs = []
+ for dns in cfg.custom_dns:
+ cargs.append(f'--dns={dns}')
+ if cfg.vhostname:
+ cargs.append(f'--hostname={cfg.vhostname}')
+ return cargs
+
+
class SambaContainerCommon:
def __init__(
self,
cargs = []
if self.cfg.smb_port:
cargs.append(f'--publish={self.cfg.smb_port}:{self.cfg.smb_port}')
+ cargs.extend(_container_dns_args(self.cfg))
return cargs
return args
def container_args(self) -> List[str]:
- cargs = []
- for dns in self.cfg.custom_dns:
- cargs.append(f'--dns={dns}')
+ cargs = _container_dns_args(self.cfg)
return cargs
instance_features = configs.get('features', [])
files = data_utils.dict_get(configs, 'files', {})
ceph_config_entity = configs.get('config_auth_entity', '')
+ vhostname = configs.get('virtual_hostname', '')
if not instance_id:
raise Error('invalid instance (cluster) id')
)
if Features.CLUSTERED.value in instance_features:
raise NotImplementedError('clustered instance')
+ if not vhostname:
+ # if a virtual hostname is not provided, generate one by prefixing
+ # the cluster/instanced id to the system hostname
+ hname = socket.getfqdn()
+ vhostname = f'{instance_id}-{hname}'
self._instance_cfg = Config(
instance_id=instance_id,
samba_debug_level=6,
smb_port=self.smb_port,
ceph_config_entity=ceph_config_entity,
+ vhostname=vhostname,
)
self._files = files
logger.debug('SMB Instance Config: %s', self._instance_cfg)