Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Container app] az containerapp compose create: Fix variable mixing issue when --compose-file-path contains multiple services #28922

Merged
merged 6 commits into from
May 11, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
# pylint: disable=line-too-long, consider-using-f-string, no-else-return, duplicate-string-formatting-argument, expression-not-assigned, too-many-locals, logging-fstring-interpolation, broad-except, pointless-statement, bare-except, too-many-public-methods, logging-format-interpolation, too-many-boolean-expressions, too-many-branches, useless-parent-delegation
from copy import deepcopy
from typing import Dict, Any

from azure.cli.core.commands import AzCliCommand
Expand Down Expand Up @@ -278,7 +279,7 @@ def __init__(
self, cmd: AzCliCommand, client: Any, raw_parameters: Dict, models: str
):
super().__init__(cmd, client, raw_parameters, models)
self.containerapp_def = ContainerAppModel
self.containerapp_def = deepcopy(ContainerAppModel)

def validate_arguments(self):
validate_container_app_name(self.get_argument_name(), AppType.ContainerApp.name)
Expand Down Expand Up @@ -334,7 +335,7 @@ def construct_payload(self):

ingress_def = None
if self.get_argument_target_port() is not None and self.get_argument_ingress() is not None:
ingress_def = IngressModel
ingress_def = deepcopy(IngressModel)
ingress_def["external"] = external_ingress
ingress_def["targetPort"] = self.get_argument_target_port()
ingress_def["transport"] = self.get_argument_transport()
Expand All @@ -347,7 +348,7 @@ def construct_payload(self):

registries_def = None
if self.get_argument_registry_server() is not None and not is_registry_msi_system(self.get_argument_registry_identity()):
registries_def = RegistryCredentialsModel
registries_def = deepcopy(RegistryCredentialsModel)
registries_def["server"] = self.get_argument_registry_server()

# Infer credentials if not supplied and its azurecr
Expand All @@ -370,7 +371,7 @@ def construct_payload(self):

dapr_def = None
if self.get_argument_dapr_enabled():
dapr_def = DaprModel
dapr_def = deepcopy(DaprModel)
dapr_def["enabled"] = True
dapr_def["appId"] = self.get_argument_dapr_app_id()
dapr_def["appPort"] = self.get_argument_dapr_app_port()
Expand All @@ -380,15 +381,15 @@ def construct_payload(self):
dapr_def["logLevel"] = self.get_argument_dapr_log_level()
dapr_def["enableApiLogging"] = self.get_argument_dapr_enable_api_logging()

config_def = ConfigurationModel
config_def = deepcopy(ConfigurationModel)
config_def["secrets"] = secrets_def
config_def["activeRevisionsMode"] = self.get_argument_revisions_mode()
config_def["ingress"] = ingress_def
config_def["registries"] = [registries_def] if registries_def is not None else None
config_def["dapr"] = dapr_def

# Identity actions
identity_def = ManagedServiceIdentityModel
identity_def = deepcopy(ManagedServiceIdentityModel)
identity_def["type"] = "None"

assign_system_identity = self.get_argument_system_assigned()
Expand Down Expand Up @@ -416,11 +417,11 @@ def construct_payload(self):

resources_def = None
if self.get_argument_cpu() is not None or self.get_argument_memory() is not None:
resources_def = ContainerResourcesModel
resources_def = deepcopy(ContainerResourcesModel)
resources_def["cpu"] = self.get_argument_cpu()
resources_def["memory"] = self.get_argument_memory()

container_def = ContainerModel
container_def = deepcopy(ContainerModel)
container_def["name"] = self.get_argument_container_name() if self.get_argument_container_name() else self.get_argument_name()
container_def["image"] = self.get_argument_image() if not is_registry_msi_system(self.get_argument_registry_identity()) else HELLO_WORLD_IMAGE
if self.get_argument_env_vars() is not None:
Expand All @@ -432,14 +433,14 @@ def construct_payload(self):
if resources_def is not None:
container_def["resources"] = resources_def

template_def = TemplateModel
template_def = deepcopy(TemplateModel)

template_def["containers"] = [container_def]
template_def["scale"] = scale_def

if self.get_argument_secret_volume_mount() is not None:
volume_def = VolumeModel
volume_mount_def = VolumeMountModel
volume_def = deepcopy(VolumeModel)
volume_mount_def = deepcopy(VolumeMountModel)
# generate a volume name
volume_def["name"] = _generate_secret_volume_name()
volume_def["storageType"] = "Secret"
Expand Down Expand Up @@ -497,7 +498,7 @@ def construct_for_post_process(self, r):

safe_set(self.containerapp_def, "properties", "template", "revisionSuffix", value=self.get_argument_revision_suffix())

registries_def = RegistryCredentialsModel
registries_def = deepcopy(RegistryCredentialsModel)
registries_def["server"] = self.get_argument_registry_server()
registries_def["identity"] = self.get_argument_registry_identity()
safe_set(self.containerapp_def, "properties", "configuration", "registries", value=[registries_def])
Expand Down Expand Up @@ -608,7 +609,7 @@ def set_up_create_containerapp_yaml(self, name, file_name):
def set_up_scale_rule(self):
scale_def = None
if self.get_argument_min_replicas() is not None or self.get_argument_max_replicas() is not None:
scale_def = ScaleModel
scale_def = deepcopy(ScaleModel)
scale_def["minReplicas"] = self.get_argument_min_replicas()
scale_def["maxReplicas"] = self.get_argument_max_replicas()

Expand All @@ -621,7 +622,7 @@ def set_up_scale_rule(self):
if not scale_rule_type:
scale_rule_type = "http"
scale_rule_type = scale_rule_type.lower()
scale_rule_def = ScaleRuleModel
scale_rule_def = deepcopy(ScaleRuleModel)
curr_metadata = {}
if self.get_argument_scale_rule_http_concurrency():
if scale_rule_type == 'http':
Expand Down Expand Up @@ -653,7 +654,7 @@ def set_up_scale_rule(self):
scale_rule_def["custom"]["metadata"] = metadata_def
scale_rule_def["custom"]["auth"] = auth_def
if not scale_def:
scale_def = ScaleModel
scale_def = deepcopy(ScaleModel)
scale_def["rules"] = [scale_rule_def]

return scale_def
Loading