CephFSStorageProvider,
Intent,
JoinSourceType,
+ LoginAccess,
+ LoginCategory,
UserGroupSourceType,
)
from .proto import Self, Simplified, checked
return rc
+@resourcelib.component()
+class LoginAccessEntry(_RBase):
+ name: str
+ category: LoginCategory = LoginCategory.USER
+ access: LoginAccess = LoginAccess.READ_ONLY
+
+ def __post_init__(self) -> None:
+ self.access = self.access.expand()
+
+ def validate(self) -> None:
+ validation.check_access_name(self.name)
+
+
@resourcelib.resource('ceph.smb.share')
class RemovedShare(_RBase):
"""Represents a share that has / will be removed."""
browseable: bool = True
cephfs: Optional[CephFSStorage] = None
custom_smb_share_options: Optional[Dict[str, str]] = None
+ login_control: Optional[List[LoginAccessEntry]] = None
+ restrict_access: bool = False
def __post_init__(self) -> None:
# if name is not given explicitly, take it from the share_id
if self.cephfs is None:
raise ValueError('a cephfs configuration is required')
validation.check_custom_options(self.custom_smb_share_options)
+ if self.restrict_access and not self.login_control:
+ raise ValueError(
+ 'a share with restricted access must define at least one login_control entry'
+ )
@property
def checked_cephfs(self) -> CephFSStorage:
@resourcelib.customize
def _customize_resource(rc: resourcelib.Resource) -> resourcelib.Resource:
+ rc.restrict_access.quiet = True
rc.on_condition(_present)
rc.on_construction_error(InvalidResourceError.wrap)
return rc