diff --git a/installers/charm/grafana/config.yaml b/installers/charm/grafana/config.yaml index 3a7e63fc55f4595f7e4da3537d3d55e971dd9ea0..632f2120fbfec60f1f370b38d4621b70b65c721c 100644 --- a/installers/charm/grafana/config.yaml +++ b/installers/charm/grafana/config.yaml @@ -57,3 +57,9 @@ options: type: boolean description: Enable OSM System monitoring dashboards default: false + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/grafana/src/charm.py b/installers/charm/grafana/src/charm.py index 28be79aad3d204498cfedd9bbf61412dd484d804..9bc612e0cc00bb40ca04cb9ddd75630c38929996 100755 --- a/installers/charm/grafana/src/charm.py +++ b/installers/charm/grafana/src/charm.py @@ -54,6 +54,7 @@ class ConfigModel(ModelValidator): ingress_class: Optional[str] ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] + image_pull_policy: Optional[str] @validator("max_file_size") def validate_max_file_size(cls, v): @@ -75,6 +76,18 @@ class ConfigModel(ModelValidator): ip_network(v) return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class GrafanaCharm(CharmedOsmBase): """GrafanaCharm Charm.""" @@ -137,7 +150,9 @@ class GrafanaCharm(CharmedOsmBase): # Create Builder for the PodSpec pod_spec_builder = PodSpecV3Builder() # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_http_readiness_probe( "/api/health", diff --git a/installers/charm/kafka-exporter/config.yaml b/installers/charm/kafka-exporter/config.yaml index 706e330d5d6dbb4b40abb9dac0a11d46579a8906..456c9c49249bf7b39e3792c5e97b63f2cd2eab44 100644 --- a/installers/charm/kafka-exporter/config.yaml +++ b/installers/charm/kafka-exporter/config.yaml @@ -46,3 +46,9 @@ options: type: string description: Name of the cluster issuer for TLS certificates default: "" + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/kafka-exporter/src/charm.py b/installers/charm/kafka-exporter/src/charm.py index a15abc841b57356cdbaa507a92d13fd6431c23e6..fd24964f10bdd4fac226f3bfe11594fe040116cf 100755 --- a/installers/charm/kafka-exporter/src/charm.py +++ b/installers/charm/kafka-exporter/src/charm.py @@ -52,6 +52,7 @@ class ConfigModel(ModelValidator): ingress_class: Optional[str] ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] + image_pull_policy: Optional[str] @validator("site_url") def validate_site_url(cls, v): @@ -67,6 +68,18 @@ class ConfigModel(ModelValidator): ip_network(v) return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class KafkaExporterCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -163,7 +176,9 @@ class KafkaExporterCharm(CharmedOsmBase): pod_spec_builder = PodSpecV3Builder() # Build container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_http_readiness_probe( path="/api/health", diff --git a/installers/charm/keystone/config.yaml b/installers/charm/keystone/config.yaml index 9a7acd5e6b654ae1199f519b1abd1f498d67c51d..945ea48bd7a17a457d150575cf24e0d4907ab1c8 100644 --- a/installers/charm/keystone/config.yaml +++ b/installers/charm/keystone/config.yaml @@ -42,6 +42,12 @@ options: type: string description: Ingress URL default: "" + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always region_id: type: string description: Region ID to be created when starting the service diff --git a/installers/charm/keystone/src/charm.py b/installers/charm/keystone/src/charm.py index 1dd0ba58f316143ba8558e0a62ef4a820ef1f0a9..4e04e88ae35b4d97c90f2026b45b7441abb1ea1b 100755 --- a/installers/charm/keystone/src/charm.py +++ b/installers/charm/keystone/src/charm.py @@ -84,6 +84,7 @@ class ConfigModel(ModelValidator): mysql_host: Optional[str] mysql_port: Optional[int] mysql_root_password: Optional[str] + image_pull_policy: Optional[str] @validator("max_file_size") def validate_max_file_size(cls, v): @@ -111,6 +112,18 @@ class ConfigModel(ModelValidator): raise ValueError("Mysql port out of range") return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class ConfigLdapModel(ModelValidator): ldap_enabled: bool @@ -261,7 +274,9 @@ class KeystoneCharm(CharmedOsmBase): pod_spec_builder = PodSpecV3Builder() # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) # Build files diff --git a/installers/charm/lcm/config.yaml b/installers/charm/lcm/config.yaml index dcebce8723e5aebd16f4ba72f400c8c75d91c287..27c43e5fc4ff87bb5068bc8056cf97dd3237e79a 100644 --- a/installers/charm/lcm/config.yaml +++ b/installers/charm/lcm/config.yaml @@ -274,3 +274,9 @@ options: description: CA certificates to validate access to Helm repository type: string default: "" + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/lcm/src/charm.py b/installers/charm/lcm/src/charm.py index fecd1b3c0072c5e25affa2daae3e182c7659616f..9d7f5529a2032fa57d4dd3f28a8a36793fc3443f 100755 --- a/installers/charm/lcm/src/charm.py +++ b/installers/charm/lcm/src/charm.py @@ -110,6 +110,7 @@ class ConfigModel(ModelValidator): vca_model_config_update_status_hook_interval: Optional[str] vca_stablerepourl: Optional[str] vca_helm_ca_certs: Optional[str] + image_pull_policy: Optional[str] @validator("log_level") def validate_log_level(cls, v): @@ -123,6 +124,18 @@ class ConfigModel(ModelValidator): raise ValueError("mongodb_uri is not properly formed") return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class LcmCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -167,7 +180,9 @@ class LcmCharm(CharmedOsmBase): pod_spec_builder = PodSpecV3Builder() # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_envs( { diff --git a/installers/charm/mon/config.yaml b/installers/charm/mon/config.yaml index d06b68df14ac75be9ea8a21c63ff1daa1d264eaf..ee593ffa324370de6764d6e9724d307126c7fe51 100644 --- a/installers/charm/mon/config.yaml +++ b/installers/charm/mon/config.yaml @@ -87,3 +87,9 @@ options: name: name of the file for the certificate content: base64 content of the certificate The path for the files is /certs. + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/mon/src/charm.py b/installers/charm/mon/src/charm.py index 8c0a6bc7a9a455477214f89f50b7d6d3ed28d9a6..1b7c74b641f22a776dc0d897d1e42d361ea39010 100755 --- a/installers/charm/mon/src/charm.py +++ b/installers/charm/mon/src/charm.py @@ -80,6 +80,7 @@ class ConfigModel(ModelValidator): grafana_user: str grafana_password: str certificates: Optional[str] + image_pull_policy: Optional[str] @validator("log_level") def validate_log_level(cls, v): @@ -99,6 +100,18 @@ class ConfigModel(ModelValidator): raise ValueError("mongodb_uri is not properly formed") return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + @property def certificates_dict(cls): return _extract_certificates(cls.certificates) if cls.certificates else {} @@ -167,7 +180,9 @@ class MonCharm(CharmedOsmBase): pod_spec_builder = PodSpecV3Builder() # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) certs_files = self._build_cert_files(config) if certs_files: diff --git a/installers/charm/mongodb-exporter/config.yaml b/installers/charm/mongodb-exporter/config.yaml index 727598b9423043170df2217fa72322aa086d54bf..eb19d5bc11e3f81e35b60d546349dbe039b15ed6 100644 --- a/installers/charm/mongodb-exporter/config.yaml +++ b/installers/charm/mongodb-exporter/config.yaml @@ -49,3 +49,9 @@ options: mongodb_uri: type: string description: MongoDB URI (external database) + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/mongodb-exporter/src/charm.py b/installers/charm/mongodb-exporter/src/charm.py index 149940a6e01ed9e50b588995da132f23a4873bca..f4c232a9610493745043351ee11bba4a66e577a1 100755 --- a/installers/charm/mongodb-exporter/src/charm.py +++ b/installers/charm/mongodb-exporter/src/charm.py @@ -53,6 +53,7 @@ class ConfigModel(ModelValidator): ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] mongodb_uri: Optional[str] + image_pull_policy: Optional[str] @validator("site_url") def validate_site_url(cls, v): @@ -74,6 +75,18 @@ class ConfigModel(ModelValidator): raise ValueError("mongodb_uri is not properly formed") return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class MongodbExporterCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -173,7 +186,9 @@ class MongodbExporterCharm(CharmedOsmBase): pod_spec_builder = PodSpecV3Builder() # Build container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_http_readiness_probe( path="/api/health", diff --git a/installers/charm/mysqld-exporter/config.yaml b/installers/charm/mysqld-exporter/config.yaml index a7702a3f802d6cfed083414d167cfe338a129182..c25886f0fc8eebb586360c94e5f3a9639d614ba7 100644 --- a/installers/charm/mysqld-exporter/config.yaml +++ b/installers/charm/mysqld-exporter/config.yaml @@ -49,3 +49,9 @@ options: mysql_uri: type: string description: MySQL URI (external database) + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/mysqld-exporter/src/charm.py b/installers/charm/mysqld-exporter/src/charm.py index bcd43b5430e22bfe8ffb3799a0263a6fb81249df..adbb519733ad9d6eca7eefcf73b129ae6053fbfb 100755 --- a/installers/charm/mysqld-exporter/src/charm.py +++ b/installers/charm/mysqld-exporter/src/charm.py @@ -53,6 +53,7 @@ class ConfigModel(ModelValidator): ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] mysql_uri: Optional[str] + image_pull_policy: Optional[str] @validator("site_url") def validate_site_url(cls, v): @@ -74,6 +75,18 @@ class ConfigModel(ModelValidator): raise ValueError("mysql_uri is not properly formed") return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class MysqlExporterCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -173,7 +186,9 @@ class MysqlExporterCharm(CharmedOsmBase): pod_spec_builder = PodSpecV3Builder() # Build container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_http_readiness_probe( path="/api/health", diff --git a/installers/charm/nbi/config.yaml b/installers/charm/nbi/config.yaml index 7f3275273c5fc024973b0cde72c9b1f6ccff0c31..9c353661acbdf3b37fa478b306612082c04610d3 100644 --- a/installers/charm/nbi/config.yaml +++ b/installers/charm/nbi/config.yaml @@ -72,3 +72,9 @@ options: mongodb_uri: type: string description: MongoDB URI (external database) + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/nbi/src/charm.py b/installers/charm/nbi/src/charm.py index d3a22519c56473104bfffcdbe664f8c52aac6554..938a75a012e055e28eaeb2b31b2c686ded636674 100755 --- a/installers/charm/nbi/src/charm.py +++ b/installers/charm/nbi/src/charm.py @@ -61,6 +61,7 @@ class ConfigModel(ModelValidator): ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] mongodb_uri: Optional[str] + image_pull_policy: Optional[str] @validator("auth_backend") def validate_auth_backend(cls, v): @@ -100,6 +101,18 @@ class ConfigModel(ModelValidator): raise ValueError("mongodb_uri is not properly formed") return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class NbiCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -180,7 +193,9 @@ class NbiCharm(CharmedOsmBase): ) # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_tcpsocket_readiness_probe( PORT, diff --git a/installers/charm/ng-ui/config.yaml b/installers/charm/ng-ui/config.yaml index 39d3b2d9105e6d8ddf1f504dce58191dd44a2a85..49226b77590fe5bd47902889f0df79d84e7199a9 100644 --- a/installers/charm/ng-ui/config.yaml +++ b/installers/charm/ng-ui/config.yaml @@ -54,3 +54,9 @@ options: type: string description: Name of the cluster issuer for TLS certificates default: "" + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/ng-ui/src/charm.py b/installers/charm/ng-ui/src/charm.py index 5388466e8a47ec783ca9e4fbd661dd2e4e0f1883..cf0b09109e4e59bb43c8c7893782fbf099e3fc24 100755 --- a/installers/charm/ng-ui/src/charm.py +++ b/installers/charm/ng-ui/src/charm.py @@ -54,6 +54,7 @@ class ConfigModel(ModelValidator): ingress_class: Optional[str] ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] + image_pull_policy: Optional[str] @validator("port") def validate_port(cls, v): @@ -81,6 +82,18 @@ class ConfigModel(ModelValidator): ip_network(v) return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class NgUiCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -121,7 +134,9 @@ class NgUiCharm(CharmedOsmBase): # Create Builder for the PodSpec pod_spec_builder = PodSpecV3Builder() # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=config.port) container = container_builder.build() container_builder.add_tcpsocket_readiness_probe( diff --git a/installers/charm/pla/config.yaml b/installers/charm/pla/config.yaml index 1820188a1efb786323f0c2596879328904c0f4d2..75b19d82b5aa0ea546b40d5c996feaf1ff5f6517 100644 --- a/installers/charm/pla/config.yaml +++ b/installers/charm/pla/config.yaml @@ -27,3 +27,9 @@ options: mongodb_uri: type: string description: MongoDB URI (external database) + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/pla/src/charm.py b/installers/charm/pla/src/charm.py index d9dfaa455d69653069b2fef366d3c413101387fc..2a08ea59ffaea6c9774d8c5220baa45db922f9b1 100755 --- a/installers/charm/pla/src/charm.py +++ b/installers/charm/pla/src/charm.py @@ -46,6 +46,7 @@ class ConfigModel(ModelValidator): database_commonkey: str mongodb_uri: Optional[str] log_level: str + image_pull_policy: Optional[str] @validator("log_level") def validate_log_level(cls, v): @@ -59,6 +60,18 @@ class ConfigModel(ModelValidator): raise ValueError("mongodb_uri is not properly formed") return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class PlaCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -97,7 +110,9 @@ class PlaCharm(CharmedOsmBase): pod_spec_builder = PodSpecV3Builder() # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_envs( { diff --git a/installers/charm/pol/config.yaml b/installers/charm/pol/config.yaml index 909235e08f5eb6b8650dc088a2df8064c8c240f1..7b64f5746146f783050393a16a955d6634ce73a2 100644 --- a/installers/charm/pol/config.yaml +++ b/installers/charm/pol/config.yaml @@ -32,3 +32,9 @@ options: description: | Mysql URI with the following format: mysql://<user>:<password>@<mysql_host>:<mysql_port>/<database> + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/pol/src/charm.py b/installers/charm/pol/src/charm.py index 1ad1e266415e7ffa32c45220f4e9e3f55a734cb5..727ffbeba86cfd3b1ab7d7fb011cdd69931f876f 100755 --- a/installers/charm/pol/src/charm.py +++ b/installers/charm/pol/src/charm.py @@ -49,6 +49,7 @@ class ConfigModel(ModelValidator): log_level: str mongodb_uri: Optional[str] mysql_uri: Optional[str] + image_pull_policy: Optional[str] @validator("log_level") def validate_log_level(cls, v): @@ -69,6 +70,18 @@ class ConfigModel(ModelValidator): raise ValueError("mysql_uri is not properly formed") return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class PolCharm(CharmedOsmBase): def __init__(self, *args) -> NoReturn: @@ -114,7 +127,9 @@ class PolCharm(CharmedOsmBase): pod_spec_builder = PodSpecV3Builder() # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_envs( { diff --git a/installers/charm/prometheus/config.yaml b/installers/charm/prometheus/config.yaml index c1c0fb934e978bf8f77043ea915ccf76a7fba671..6ce1613bea00f4eb548c5857e3e4fda0ea1e67e2 100644 --- a/installers/charm/prometheus/config.yaml +++ b/installers/charm/prometheus/config.yaml @@ -65,3 +65,9 @@ options: type: boolean description: Boolean to enable the web admin api default: false + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/prometheus/src/charm.py b/installers/charm/prometheus/src/charm.py index e3e0e4240225c842a734266e83f32f50d7de665e..3dcb5d412cfef1d4f8c979ea4cad4c9f7cd543c8 100755 --- a/installers/charm/prometheus/src/charm.py +++ b/installers/charm/prometheus/src/charm.py @@ -60,6 +60,7 @@ class ConfigModel(ModelValidator): ingress_whitelist_source_range: Optional[str] tls_secret_name: Optional[str] enable_web_admin_api: bool + image_pull_policy: Optional[str] @validator("web_subpath") def validate_web_subpath(cls, v): @@ -87,6 +88,18 @@ class ConfigModel(ModelValidator): ip_network(v) return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + class PrometheusCharm(CharmedOsmBase): @@ -157,7 +170,9 @@ class PrometheusCharm(CharmedOsmBase): pod_spec_builder.add_container(backup_container) # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) container_builder.add_port(name=self.app.name, port=PORT) container_builder.add_http_readiness_probe( "/-/ready", diff --git a/installers/charm/ro/config.yaml b/installers/charm/ro/config.yaml index 0d3c9a0da9a2918e1dbcc0ae061d80a2a7a19826..5bb0362aad39736b38385ea5da1544bb81fb946a 100644 --- a/installers/charm/ro/config.yaml +++ b/installers/charm/ro/config.yaml @@ -70,3 +70,9 @@ options: name: name of the file for the certificate content: base64 content of the certificate The path for the files is /certs. + image_pull_policy: + type: string + description: | + ImagePullPolicy configuration for the pod. + Possible values: always, ifnotpresent, never + default: always diff --git a/installers/charm/ro/src/charm.py b/installers/charm/ro/src/charm.py index 951f281be542702e69ecdc06bea93fd14487edc4..d87007e7c340c5ea324b1c67b93b65e9a5f6de6c 100755 --- a/installers/charm/ro/src/charm.py +++ b/installers/charm/ro/src/charm.py @@ -73,6 +73,7 @@ class ConfigModel(ModelValidator): ro_database: str openmano_tenant: str certificates: Optional[str] + image_pull_policy: Optional[str] @validator("log_level") def validate_log_level(cls, v): @@ -98,6 +99,18 @@ class ConfigModel(ModelValidator): raise ValueError("Mysql port out of range") return v + @validator("image_pull_policy") + def validate_image_pull_policy(cls, v): + values = { + "always": "Always", + "ifnotpresent": "IfNotPresent", + "never": "Never", + } + v = v.lower() + if v not in values.keys(): + raise ValueError("value must be always, ifnotpresent or never") + return values[v] + @property def certificates_dict(cls): return _extract_certificates(cls.certificates) if cls.certificates else {} @@ -196,7 +209,9 @@ class RoCharm(CharmedOsmBase): pod_spec_builder = PodSpecV3Builder() # Build Container - container_builder = ContainerV3Builder(self.app.name, image_info) + container_builder = ContainerV3Builder( + self.app.name, image_info, config.image_pull_policy + ) certs_files = self._build_cert_files(config) if certs_files: