Skip to content

Commit

Permalink
[Container app] az containerapp compose create: Fix variable mixing…
Browse files Browse the repository at this point in the history
… issue when `--compose-file-path` contains multiple services (#28922)
  • Loading branch information
Greedygre committed May 11, 2024
1 parent 20f3131 commit 3673c41
Show file tree
Hide file tree
Showing 11 changed files with 5,272 additions and 2,472 deletions.
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

0 comments on commit 3673c41

Please sign in to comment.