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: v17.2.6~37^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=902981c05b77e2c9f9d2998699ca331294de2550;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) --- diff --git a/src/python-common/ceph/deployment/drive_group.py b/src/python-common/ceph/deployment/drive_group.py index 9be03df108d6..54d8cc27d55e 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", "config", + "extra_entrypoint_args", "data_allocate_fraction", "method", "crush_device_class", "config", ] 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] @@ -188,6 +189,7 @@ class DriveGroupSpec(ServiceSpec): unmanaged=unmanaged, preview_only=preview_only, extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args, custom_configs=custom_configs) #: A :class:`ceph.deployment.drive_group.DeviceSelection` diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index 4a4c6c07c2e4..70757304ad9e 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -554,6 +554,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, custom_configs: Optional[List[CustomConfig]] = None, ): @@ -594,6 +595,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 self.custom_configs: Optional[List[CustomConfig]] = custom_configs @classmethod @@ -722,6 +724,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 if self.custom_configs: ret['custom_configs'] = [c.to_json() for c in self.custom_configs] @@ -800,6 +804,7 @@ 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, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type == 'nfs' @@ -807,7 +812,7 @@ class NFSServiceSpec(ServiceSpec): 'nfs', service_id=service_id, placement=placement, unmanaged=unmanaged, preview_only=preview_only, config=config, networks=networks, extra_container_args=extra_container_args, - custom_configs=custom_configs) + extra_entrypoint_args=extra_entrypoint_args, custom_configs=custom_configs) self.port = port @@ -865,6 +870,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, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type == 'rgw', service_type @@ -877,7 +883,8 @@ 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, custom_configs=custom_configs) + extra_container_args=extra_container_args, extra_entrypoint_args=extra_entrypoint_args, + custom_configs=custom_configs) #: The RGW realm associated with this service. Needs to be manually created self.rgw_realm: Optional[str] = rgw_realm @@ -935,6 +942,7 @@ 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, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type == 'iscsi' @@ -943,6 +951,7 @@ class IscsiServiceSpec(ServiceSpec): preview_only=preview_only, config=config, networks=networks, extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args, custom_configs=custom_configs) #: RADOS pool where ceph-iscsi config data is stored. @@ -1010,6 +1019,7 @@ class IngressSpec(ServiceSpec): unmanaged: bool = False, ssl: bool = False, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type == 'ingress' @@ -1019,6 +1029,7 @@ class IngressSpec(ServiceSpec): placement=placement, config=config, networks=networks, extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args, custom_configs=custom_configs ) self.backend_service = backend_service @@ -1079,10 +1090,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, @@ -1098,7 +1110,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 @@ -1146,6 +1158,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, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type in ['grafana', 'node-exporter', 'prometheus', 'alertmanager', @@ -1156,6 +1169,7 @@ class MonitoringSpec(ServiceSpec): placement=placement, unmanaged=unmanaged, preview_only=preview_only, config=config, networks=networks, extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args, custom_configs=custom_configs) self.service_type = service_type @@ -1192,6 +1206,7 @@ class AlertManagerSpec(MonitoringSpec): port: Optional[int] = None, secure: bool = False, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type == 'alertmanager' @@ -1199,7 +1214,8 @@ class AlertManagerSpec(MonitoringSpec): '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, custom_configs=custom_configs) + extra_container_args=extra_container_args, extra_entrypoint_args=extra_entrypoint_args, + custom_configs=custom_configs) # Custom configuration. # @@ -1244,6 +1260,7 @@ 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, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type == 'grafana' @@ -1251,7 +1268,8 @@ class GrafanaSpec(MonitoringSpec): '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, custom_configs=custom_configs) + extra_container_args=extra_container_args, extra_entrypoint_args=extra_entrypoint_args, + custom_configs=custom_configs) self.initial_admin_password = initial_admin_password @@ -1272,6 +1290,7 @@ class PrometheusSpec(MonitoringSpec): retention_time: Optional[str] = None, retention_size: Optional[str] = None, extra_container_args: Optional[List[str]] = None, + extra_entrypoint_args: Optional[List[str]] = None, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type == 'prometheus' @@ -1279,7 +1298,8 @@ class PrometheusSpec(MonitoringSpec): '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, custom_configs=custom_configs) + extra_container_args=extra_container_args, extra_entrypoint_args=extra_entrypoint_args, + custom_configs=custom_configs) self.retention_time = retention_time.strip() if retention_time else None self.retention_size = retention_size.strip() if retention_size else None @@ -1328,6 +1348,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, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type == 'snmp-gateway' @@ -1338,6 +1359,7 @@ class SNMPGatewaySpec(ServiceSpec): unmanaged=unmanaged, preview_only=preview_only, extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args, custom_configs=custom_configs) self.service_type = service_type @@ -1449,6 +1471,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, custom_configs: Optional[List[CustomConfig]] = None, ): assert service_type == 'mds' @@ -1458,6 +1481,7 @@ class MDSSpec(ServiceSpec): unmanaged=unmanaged, preview_only=preview_only, extra_container_args=extra_container_args, + extra_entrypoint_args=extra_entrypoint_args, custom_configs=custom_configs) def validate(self) -> None: