From: Adam King Date: Mon, 7 Nov 2022 21:15:09 +0000 (-0500) Subject: python-common: add extra_entrypoint_args to service specs X-Git-Tag: v16.2.13~81^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c1db94edf178adfebcf3f3c7b0eaa5b406fd95bb;p=ceph.git python-common: add extra_entrypoint_args to service specs To allow users to set extra args to be passed to the entrypoint in the podman/docker run command built by cephadm Signed-off-by: Adam King (cherry picked from commit 98f6a9379e2dccbaf599923644b7aaa7200ded1f) Conflicts: src/python-common/ceph/deployment/drive_group.py src/python-common/ceph/deployment/service_spec.py --- diff --git a/src/python-common/ceph/deployment/drive_group.py b/src/python-common/ceph/deployment/drive_group.py index dc36a60d9b0..4b6b1099080 100644 --- a/src/python-common/ceph/deployment/drive_group.py +++ b/src/python-common/ceph/deployment/drive_group.py @@ -150,7 +150,7 @@ class DriveGroupSpec(ServiceSpec): "data_devices", "db_devices", "wal_devices", "journal_devices", "data_directories", "osds_per_device", "objectstore", "osd_id_claims", "journal_size", "unmanaged", "filter_logic", "preview_only", "extra_container_args", - "data_allocate_fraction", "method", "crush_device_class", + "extra_entrypoint_args", "data_allocate_fraction", "method", "crush_device_class", ] def __init__(self, @@ -175,6 +175,7 @@ class DriveGroupSpec(ServiceSpec): filter_logic='AND', # type: str preview_only=False, # type: bool extra_container_args=None, # type: Optional[List[str]] + extra_entrypoint_args: Optional[List[str]] = None, data_allocate_fraction=None, # type: Optional[float] method=None, # type: Optional[OSDMethod] crush_device_class=None, # type: Optional[str] @@ -184,7 +185,8 @@ class DriveGroupSpec(ServiceSpec): placement=placement, unmanaged=unmanaged, preview_only=preview_only, - extra_container_args=extra_container_args) + extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args) #: A :class:`ceph.deployment.drive_group.DeviceSelection` self.data_devices = data_devices diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index 7f070058d0f..47d61616f33 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -498,6 +498,7 @@ class ServiceSpec(object): preview_only: bool = False, networks: Optional[List[str]] = None, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): #: See :ref:`orchestrator-cli-placement-spec`. @@ -537,6 +538,7 @@ class ServiceSpec(object): self.config = {k.replace(' ', '_'): v for k, v in config.items()} self.extra_container_args: Optional[List[str]] = extra_container_args + self.extra_entrypoint_args: Optional[List[str]] = extra_entrypoint_args @classmethod @handle_type_error @@ -662,6 +664,8 @@ class ServiceSpec(object): ret['networks'] = self.networks if self.extra_container_args: ret['extra_container_args'] = self.extra_container_args + if self.extra_entrypoint_args: + ret['extra_entrypoint_args'] = self.extra_entrypoint_args c = {} for key, val in sorted(self.__dict__.items(), key=lambda tpl: tpl[0]): @@ -738,12 +742,14 @@ class NFSServiceSpec(ServiceSpec): networks: Optional[List[str]] = None, port: Optional[int] = None, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type == 'nfs' super(NFSServiceSpec, self).__init__( 'nfs', service_id=service_id, placement=placement, unmanaged=unmanaged, preview_only=preview_only, - config=config, networks=networks, extra_container_args=extra_container_args) + config=config, networks=networks, extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args) self.port = port @@ -801,6 +807,7 @@ class RGWSpec(ServiceSpec): networks: Optional[List[str]] = None, subcluster: Optional[str] = None, # legacy, only for from_json on upgrade extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type == 'rgw', service_type @@ -812,7 +819,7 @@ class RGWSpec(ServiceSpec): 'rgw', service_id=service_id, placement=placement, unmanaged=unmanaged, preview_only=preview_only, config=config, networks=networks, - extra_container_args=extra_container_args) + extra_container_args=extra_container_args, extra_entrypoint_args=extra_entrypoint_args) #: The RGW realm associated with this service. Needs to be manually created self.rgw_realm: Optional[str] = rgw_realm @@ -870,13 +877,15 @@ class IscsiServiceSpec(ServiceSpec): config: Optional[Dict[str, str]] = None, networks: Optional[List[str]] = None, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type == 'iscsi' super(IscsiServiceSpec, self).__init__('iscsi', service_id=service_id, placement=placement, unmanaged=unmanaged, preview_only=preview_only, config=config, networks=networks, - extra_container_args=extra_container_args) + extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args) #: RADOS pool where ceph-iscsi config data is stored. self.pool = pool @@ -943,6 +952,7 @@ class IngressSpec(ServiceSpec): unmanaged: bool = False, ssl: bool = False, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type == 'ingress' @@ -950,7 +960,8 @@ class IngressSpec(ServiceSpec): 'ingress', service_id=service_id, placement=placement, config=config, networks=networks, - extra_container_args=extra_container_args + extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args ) self.backend_service = backend_service self.frontend_port = frontend_port @@ -1010,10 +1021,11 @@ class CustomContainerSpec(ServiceSpec): preview_only: bool = False, image: Optional[str] = None, entrypoint: Optional[str] = None, + extra_entrypoint_args: Optional[List[str]] = None, uid: Optional[int] = None, gid: Optional[int] = None, volume_mounts: Optional[Dict[str, str]] = {}, - args: Optional[List[str]] = [], + args: Optional[List[str]] = [], # args for the container runtime, not entrypoint envs: Optional[List[str]] = [], privileged: Optional[bool] = False, bind_mounts: Optional[List[List[str]]] = None, @@ -1029,7 +1041,7 @@ class CustomContainerSpec(ServiceSpec): service_type, service_id, placement=placement, unmanaged=unmanaged, preview_only=preview_only, config=config, - networks=networks) + networks=networks, extra_entrypoint_args=extra_entrypoint_args) self.image = image self.entrypoint = entrypoint @@ -1077,6 +1089,7 @@ class MonitoringSpec(ServiceSpec): preview_only: bool = False, port: Optional[int] = None, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type in ['grafana', 'node-exporter', 'prometheus', 'alertmanager'] @@ -1084,7 +1097,8 @@ class MonitoringSpec(ServiceSpec): service_type, service_id, placement=placement, unmanaged=unmanaged, preview_only=preview_only, config=config, - networks=networks, extra_container_args=extra_container_args) + networks=networks, extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args) self.service_type = service_type self.port = port @@ -1118,13 +1132,14 @@ class AlertManagerSpec(MonitoringSpec): port: Optional[int] = None, secure: bool = False, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type == 'alertmanager' super(AlertManagerSpec, self).__init__( 'alertmanager', service_id=service_id, placement=placement, unmanaged=unmanaged, preview_only=preview_only, config=config, networks=networks, port=port, - extra_container_args=extra_container_args) + extra_container_args=extra_container_args, extra_entrypoint_args=extra_entrypoint_args) # Custom configuration. # @@ -1169,13 +1184,14 @@ class GrafanaSpec(MonitoringSpec): port: Optional[int] = None, initial_admin_password: Optional[str] = None, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type == 'grafana' super(GrafanaSpec, self).__init__( 'grafana', service_id=service_id, placement=placement, unmanaged=unmanaged, preview_only=preview_only, config=config, networks=networks, port=port, - extra_container_args=extra_container_args) + extra_container_args=extra_container_args, extra_entrypoint_args=extra_entrypoint_args) self.initial_admin_password = initial_admin_password @@ -1195,13 +1211,14 @@ class PrometheusSpec(MonitoringSpec): port: Optional[int] = None, retention_time: Optional[str] = None, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type == 'prometheus' super(PrometheusSpec, self).__init__( 'prometheus', service_id=service_id, placement=placement, unmanaged=unmanaged, preview_only=preview_only, config=config, networks=networks, port=port, - extra_container_args=extra_container_args) + extra_container_args=extra_container_args, extra_entrypoint_args=extra_entrypoint_args) self.retention_time = retention_time @@ -1249,6 +1266,7 @@ class SNMPGatewaySpec(ServiceSpec): preview_only: bool = False, port: Optional[int] = None, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type == 'snmp-gateway' @@ -1257,7 +1275,8 @@ class SNMPGatewaySpec(ServiceSpec): placement=placement, unmanaged=unmanaged, preview_only=preview_only, - extra_container_args=extra_container_args) + extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args) self.service_type = service_type self.snmp_version = snmp_version @@ -1368,6 +1387,7 @@ class MDSSpec(ServiceSpec): unmanaged: bool = False, preview_only: bool = False, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, ): assert service_type == 'mds' super(MDSSpec, self).__init__('mds', service_id=service_id, @@ -1375,7 +1395,8 @@ class MDSSpec(ServiceSpec): config=config, unmanaged=unmanaged, preview_only=preview_only, - extra_container_args=extra_container_args) + extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args) def validate(self) -> None: super(MDSSpec, self).validate()