Skip to content
1 change: 1 addition & 0 deletions src/containerapp/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Release History
upcoming
++++++
* 'az containerapp update': fix bug for mounting secret volumes using --secret-volume-mount
* 'az containerapp compose create': fixed an issue where the environment's resource group was not resolved from --environment when the input value was a resource id.

0.3.41
++++++
Expand Down
10 changes: 5 additions & 5 deletions src/containerapp/azext_containerapp/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -4721,18 +4721,18 @@ def create_containerapps_from_compose(cmd, # pylint: disable=R0914
# Validate managed environment
parsed_managed_env = parse_resource_id(managed_env)
managed_env_name = parsed_managed_env['name']

logger.info( # pylint: disable=W1203
f"Creating the Container Apps managed environment {managed_env_name} under {resource_group_name} in {location}.")
env_rg = parsed_managed_env.get('resource_group', resource_group_name)

try:
managed_environment = show_managed_environment(cmd=cmd,
name=managed_env_name,
resource_group_name=resource_group_name)
resource_group_name=env_rg)
except CLIInternalError: # pylint: disable=W0702
logger.info( # pylint: disable=W1203
f"Creating the Container Apps managed environment {managed_env_name} under {env_rg} in {location}.")
managed_environment = create_containerapps_compose_environment(cmd,
managed_env_name,
resource_group_name,
env_rg,
tags=tags)

compose_yaml = load_yaml_file(compose_file_path)
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,17 @@
from azure.cli.testsdk import (ScenarioTest, ResourceGroupPreparer, JMESPathCheck)

from .common import TEST_LOCATION
from .utils import create_containerapp_env
from .utils import prepare_containerapp_env_for_app_e2e_tests


class ContainerAppAuthTest(ScenarioTest):
@AllowLargeResponse(8192)
@ResourceGroupPreparer(location=TEST_LOCATION)
def test_containerapp_auth_e2e(self, resource_group):
self.cmd('configure --defaults location={}'.format(TEST_LOCATION))
env = self.create_random_name(prefix='containerapp-env', length=24)
app = self.create_random_name(prefix='containerapp-auth', length=24)

create_containerapp_env(self, env, resource_group)
env = prepare_containerapp_env_for_app_e2e_tests(self)

self.cmd('containerapp create -g {} -n {} --environment {} --image mcr.microsoft.com/k8se/quickstart:latest --ingress external --target-port 80'.format(resource_group, app, env))

Expand Down Expand Up @@ -88,3 +87,4 @@ def test_containerapp_auth_e2e(self, resource_group):
self.cmd('containerapp show -g {} -n {}'.format(resource_group, app), checks=[
JMESPathCheck('properties.provisioningState', "Succeeded")
])
self.cmd('containerapp delete -g {} -n {} --yes'.format(resource_group, app), expect_failure=False)

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
clean_up_test_file,
TEST_DIR, TEST_LOCATION)

from .utils import create_containerapp_env
from .utils import prepare_containerapp_env_for_app_e2e_tests


class ContainerappComposeBaseScenarioTest(ContainerappComposePreviewScenarioTest):
Expand All @@ -22,29 +22,27 @@ class ContainerappComposeBaseScenarioTest(ContainerappComposePreviewScenarioTest
@ResourceGroupPreparer(name_prefix='cli_test_containerapp_preview', location='eastus')
def test_containerapp_compose_create_basic_no_existing_resources(self, resource_group):
self.cmd('configure --defaults location={}'.format(TEST_LOCATION))

compose_text = """
app = self.create_random_name(prefix='compose', length=24)
compose_text = f"""
services:
foo:
{app}:
image: smurawski/printenv:latest
"""
compose_file_name = f"{self._testMethodName}_compose.yml"
write_test_file(compose_file_name, compose_text)
env_name = self.create_random_name(prefix='containerapp-compose', length=24)
env_id = prepare_containerapp_env_for_app_e2e_tests(self)

self.kwargs.update({
'environment': env_name,
'environment': env_id,
'compose': compose_file_name,
})

create_containerapp_env(self, env_name, resource_group)

command_string = 'containerapp compose create'
command_string += ' --compose-file-path {compose}'
command_string += ' --resource-group {rg}'
command_string += ' --environment {environment}'
self.cmd(command_string, checks=[
self.check('[].name', ['foo']),
self.check('[].name', [app]),
self.check('[] | length(@)', 1),
])

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@
clean_up_test_file,
TEST_DIR, TEST_LOCATION)

from .utils import create_containerapp_env
from .utils import prepare_containerapp_env_for_app_e2e_tests


class ContainerappComposePreviewCommandScenarioTest(ContainerappComposePreviewScenarioTest):
@serial_test()
@ResourceGroupPreparer(name_prefix='cli_test_containerapp_preview', location='eastus')
def test_containerapp_compose_with_command_string(self, resource_group):
self.cmd('configure --defaults location={}'.format(TEST_LOCATION))

compose_text = """
app = self.create_random_name(prefix='composecommandstr', length=24)
compose_text = f"""
services:
foo:
{app}:
image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
command: echo "hello world"
expose:
Expand All @@ -33,21 +33,18 @@ def test_containerapp_compose_with_command_string(self, resource_group):
compose_file_name = f"{self._testMethodName}_compose.yml"
write_test_file(compose_file_name, compose_text)

env_name = self.create_random_name(prefix='containerapp-compose', length=24)

env_id = prepare_containerapp_env_for_app_e2e_tests(self)
self.kwargs.update({
'environment': env_name,
'environment': env_id,
'compose': compose_file_name,
})

create_containerapp_env(self, env_name, resource_group)

command_string = 'containerapp compose create'
command_string += ' --compose-file-path {compose}'
command_string += ' --resource-group {rg}'
command_string += ' --environment {environment}'
self.cmd(command_string, checks=[
self.check('[?name==`foo`].properties.template.containers[0].command[0]', "['echo \"hello world\"']"),
self.check(f'[?name==`{app}`].properties.template.containers[0].command[0]', "['echo \"hello world\"']"),
])

clean_up_test_file(compose_file_name)
Expand All @@ -56,31 +53,29 @@ def test_containerapp_compose_with_command_string(self, resource_group):
@ResourceGroupPreparer(name_prefix='cli_test_containerapp_preview', location='eastus')
def test_containerapp_compose_with_command_list(self, resource_group):
self.cmd('configure --defaults location={}'.format(TEST_LOCATION))

compose_text = """
app = self.create_random_name(prefix='composecommandlist', length=24)
compose_text = f"""
services:
foo:
{app}:
image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
command: ["echo", "hello world"]
expose:
- "5000"
"""
compose_file_name = f"{self._testMethodName}_compose.yml"
write_test_file(compose_file_name, compose_text)
env_name = self.create_random_name(prefix='containerapp-compose', length=24)
env_id = prepare_containerapp_env_for_app_e2e_tests(self)
self.kwargs.update({
'environment': env_name,
'environment': env_id,
'compose': compose_file_name,
})

create_containerapp_env(self, env_name, resource_group)

command_string = 'containerapp compose create'
command_string += ' --compose-file-path {compose}'
command_string += ' --resource-group {rg}'
command_string += ' --environment {environment}'
self.cmd(command_string, checks=[
self.check('[?name==`foo`].properties.template.containers[0].command[0]', "['echo \"hello world\"']"),
self.check(f'[?name==`{app}`].properties.template.containers[0].command[0]', "['echo \"hello world\"']"),
])

clean_up_test_file(compose_file_name)
Expand All @@ -89,10 +84,10 @@ def test_containerapp_compose_with_command_list(self, resource_group):
@ResourceGroupPreparer(name_prefix='cli_test_containerapp_preview', location='eastus')
def test_containerapp_compose_with_command_list_and_entrypoint(self, resource_group):
self.cmd('configure --defaults location={}'.format(TEST_LOCATION))

compose_text = """
app = self.create_random_name(prefix='composeentry', length=24)
compose_text = f"""
services:
foo:
{app}:
image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
command: ["echo", "hello world"]
entrypoint: /code/entrypoint.sh
Expand All @@ -101,22 +96,19 @@ def test_containerapp_compose_with_command_list_and_entrypoint(self, resource_gr
"""
compose_file_name = f"{self._testMethodName}_compose.yml"
write_test_file(compose_file_name, compose_text)
env_name = self.create_random_name(prefix='containerapp-compose', length=24)

env_id = prepare_containerapp_env_for_app_e2e_tests(self)
self.kwargs.update({
'environment': env_name,
'environment': env_id,
'compose': compose_file_name,
})

create_containerapp_env(self, env_name, resource_group)

command_string = 'containerapp compose create'
command_string += ' --compose-file-path {compose}'
command_string += ' --resource-group {rg}'
command_string += ' --environment {environment}'
self.cmd(command_string, checks=[
self.check('[?name==`foo`].properties.template.containers[0].command[0]', "['/code/entrypoint.sh']"),
self.check('[?name==`foo`].properties.template.containers[0].args[0]', "['echo \"hello world\"']"),
self.check(f'[?name==`{app}`].properties.template.containers[0].command[0]', "['/code/entrypoint.sh']"),
self.check(f'[?name==`{app}`].properties.template.containers[0].args[0]', "['echo \"hello world\"']"),
])

clean_up_test_file(compose_file_name)
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@
clean_up_test_file,
TEST_DIR, TEST_LOCATION)

from .utils import create_containerapp_env
from .utils import prepare_containerapp_env_for_app_e2e_tests


class ContainerappComposePreviewEnvironmentSettingsScenarioTest(ContainerappComposePreviewScenarioTest):
@serial_test()
@ResourceGroupPreparer(name_prefix='cli_test_containerapp_preview', location='eastus')
def test_containerapp_compose_create_with_environment(self, resource_group):
self.cmd('configure --defaults location={}'.format(TEST_LOCATION))

compose_text = """
app = self.create_random_name(prefix='composewithenv', length=24)
compose_text = f"""
services:
foo:
{app}:
image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
environment:
- RACK_ENV=development
Expand All @@ -33,27 +33,24 @@ def test_containerapp_compose_create_with_environment(self, resource_group):
"""
compose_file_name = f"{self._testMethodName}_compose.yml"
write_test_file(compose_file_name, compose_text)

env_name = self.create_random_name(prefix='containerapp-compose', length=24)

env_id = prepare_containerapp_env_for_app_e2e_tests(self)
self.kwargs.update({
'environment': env_name,
'environment': env_id,
'compose': compose_file_name,
})

create_containerapp_env(self, env_name, resource_group)

command_string = 'containerapp compose create'
command_string += ' --compose-file-path {compose}'
command_string += ' --resource-group {rg}'
command_string += ' --environment {environment}'
self.cmd(command_string, checks=[
self.check('[?name==`foo`].properties.template.containers[0].env[0].name', ["RACK_ENV"]),
self.check('[?name==`foo`].properties.template.containers[0].env[0].value', ["development"]),
self.check('[?name==`foo`].properties.template.containers[0].env[1].name', ["SHOW"]),
self.check('[?name==`foo`].properties.template.containers[0].env[1].value', ["true"]),
self.check('[?name==`foo`].properties.template.containers[0].env[2].name', ["BAZ"]),
self.check('[?name==`foo`].properties.template.containers[0].env[2].value', ['"snafu"'])
self.check(f'[?name==`{app}`].properties.template.containers[0].env[0].name', ["RACK_ENV"]),
self.check(f'[?name==`{app}`].properties.template.containers[0].env[0].value', ["development"]),
self.check(f'[?name==`{app}`].properties.template.containers[0].env[1].name', ["SHOW"]),
self.check(f'[?name==`{app}`].properties.template.containers[0].env[1].value', ["true"]),
self.check(f'[?name==`{app}`].properties.template.containers[0].env[2].name', ["BAZ"]),
self.check(f'[?name==`{app}`].properties.template.containers[0].env[2].value', ['"snafu"'])
])

clean_up_test_file(compose_file_name)
Expand All @@ -65,23 +62,21 @@ class ContainerappComposePreviewEnvironmentSettingsExpectedExceptionScenarioTest
def test_containerapp_compose_create_with_environment_prompt(self, resource_group):
self.cmd('configure --defaults location={}'.format(TEST_LOCATION))

compose_text = """
app = self.create_random_name(prefix='composewithenv', length=24)
compose_text = f"""
services:
foo:
{app}:
image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
environment:
- LOREM=
"""
compose_file_name = f"{self._testMethodName}_compose.yml"
write_test_file(compose_file_name, compose_text)
env_name = self.create_random_name(prefix='containerapp-compose', length=24)

env_id = prepare_containerapp_env_for_app_e2e_tests(self)
self.kwargs.update({
'environment': env_name,
'environment': env_id,
'compose': compose_file_name,
})

create_containerapp_env(self, env_name, resource_group)

command_string = 'containerapp compose create'
command_string += ' --compose-file-path {compose}'
Expand Down
Loading