Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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

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 @@ -14,7 +14,7 @@

from azure.cli.testsdk.scenario_tests import AllowLargeResponse, record_only
from azure.cli.testsdk import (ScenarioTest, LocalContextScenarioTest, LiveScenarioTest, ResourceGroupPreparer,
StorageAccountPreparer, JMESPathCheck, live_only)
StorageAccountPreparer, JMESPathCheck, live_only, VirtualNetworkPreparer)
from azure.cli.testsdk.checkers import JMESPathCheckNotExists, JMESPathPatternCheck
from azure.cli.core.azclierror import ValidationError, ArgumentUsageError, RequiredArgumentMissingError, MutuallyExclusiveArgumentError

Expand Down Expand Up @@ -1655,28 +1655,25 @@ def test_functionapp_create_with_appcontainer_managed_environment_consumption_pl

@ResourceGroupPreparer(location=WINDOWS_ASP_LOCATION_FUNCTIONAPP)
@StorageAccountPreparer()
def test_functionapp_create_with_appcontainer_managed_environment_vnet_config_error(self, resource_group, storage_account):
@VirtualNetworkPreparer(location=WINDOWS_ASP_LOCATION_FUNCTIONAPP)
def test_functionapp_create_with_appcontainer_managed_environment_vnet_config_error(self, resource_group, storage_account, virtual_network):
functionapp_name = self.create_random_name('functionappwindowsruntime', 40)
managed_environment_name = self.create_random_name('containerappmanagedenvironment', 40)
subnet_name = self.create_random_name('swiftsubnet', 24)
vnet_name = self.create_random_name('swiftname', 24)

self.cmd('containerapp env create --name {} --resource-group {} --location {} --logs-destination none'
.format(managed_environment_name, resource_group, WINDOWS_ASP_LOCATION_FUNCTIONAPP)).assert_with_checks([
JMESPathCheck('name', managed_environment_name),
JMESPathCheck('resourceGroup', resource_group),
JMESPathCheck('location', 'France Central')])

self.cmd('network vnet create -g {} -n {} --address-prefix 10.0.0.0/16 --subnet-name {} --subnet-prefix 10.0.0.0/24'.format(
resource_group, vnet_name, subnet_name))

with self.assertRaises(ArgumentUsageError):
self.cmd('functionapp create -g {} -n {} -s {} --vnet {} --subnet {} --environment {} --runtime dotnet --functions-version 4'
.format(resource_group, functionapp_name, storage_account, vnet_name, subnet_name, managed_environment_name))
.format(resource_group, functionapp_name, storage_account, virtual_network, "default", managed_environment_name))

@ResourceGroupPreparer(location='westeurope')
@StorageAccountPreparer()
def test_functionapp_create_with_appcontainer_managed_environment_add_vnet_error(self, resource_group, storage_account):
@VirtualNetworkPreparer(location='westeurope')
def test_functionapp_create_with_appcontainer_managed_environment_add_vnet_error(self, resource_group, storage_account, virtual_network):
functionapp_name = self.create_random_name('functionappwindowsruntime', 32)
managed_environment_name = self.create_random_name('containerappmanagedenvironment', 40)
subnet_name = self.create_random_name('swiftsubnet', 24)
Expand All @@ -1688,9 +1685,6 @@ def test_functionapp_create_with_appcontainer_managed_environment_add_vnet_error
JMESPathCheck('resourceGroup', resource_group),
JMESPathCheck('location', 'West Europe')])

self.cmd('network vnet create -g {} -n {} --address-prefix 10.0.0.0/16 --subnet-name {} --subnet-prefix 10.0.0.0/24'.format(
resource_group, vnet_name, subnet_name))

self.cmd(
'functionapp create -g {} -n {} -s {} --environment {} --runtime dotnet --functions-version 4'
.format(resource_group, functionapp_name, storage_account, managed_environment_name)).assert_with_checks([
Expand All @@ -1700,25 +1694,20 @@ def test_functionapp_create_with_appcontainer_managed_environment_add_vnet_error

with self.assertRaises(ValidationError):
self.cmd('functionapp vnet-integration add -g {} -n {} --vnet {} --subnet {}'
.format(resource_group, functionapp_name, vnet_name, subnet_name))
.format(resource_group, functionapp_name, virtual_network, "default"))

@ResourceGroupPreparer(location='southcentralus')
@StorageAccountPreparer()
def test_functionapp_create_with_appcontainer_managed_environment_remove_vnet_error(self, resource_group, storage_account):
functionapp_name = self.create_random_name('functionappwindowsruntime', 32)
managed_environment_name = self.create_random_name('containerappmanagedenvironment', 40)
subnet_name = self.create_random_name('swiftsubnet', 24)
vnet_name = self.create_random_name('swiftname', 24)

self.cmd('containerapp env create --name {} --resource-group {} --location southcentralus --logs-destination none'
.format(managed_environment_name, resource_group)).assert_with_checks([
JMESPathCheck('name', managed_environment_name),
JMESPathCheck('resourceGroup', resource_group),
JMESPathCheck('location', 'South Central US')])

self.cmd('network vnet create -g {} -n {} --address-prefix 10.0.0.0/16 --subnet-name {} --subnet-prefix 10.0.0.0/24'.format(
resource_group, vnet_name, subnet_name))

self.cmd(
'functionapp create -g {} -n {} -s {} --environment {} --runtime dotnet --functions-version 4'
.format(resource_group, functionapp_name, storage_account, managed_environment_name)).assert_with_checks([
Expand All @@ -1732,18 +1721,13 @@ def test_functionapp_create_with_appcontainer_managed_environment_remove_vnet_er
def test_functionapp_create_with_appcontainer_managed_environment_list_vnet_error(self, resource_group, storage_account):
functionapp_name = self.create_random_name('functionappwindowsruntime', 32)
managed_environment_name = self.create_random_name('containerappmanagedenvironment', 40)
subnet_name = self.create_random_name('swiftsubnet', 24)
vnet_name = self.create_random_name('swiftname', 24)

self.cmd('containerapp env create --name {} --resource-group {} --location westeurope --logs-destination none'
.format(managed_environment_name, resource_group)).assert_with_checks([
JMESPathCheck('name', managed_environment_name),
JMESPathCheck('resourceGroup', resource_group),
JMESPathCheck('location', 'West Europe')])

self.cmd('network vnet create -g {} -n {} --address-prefix 10.0.0.0/16 --subnet-name {} --subnet-prefix 10.0.0.0/24'.format(
resource_group, vnet_name, subnet_name))

self.cmd(
'functionapp create -g {} -n {} -s {} --environment {} --runtime dotnet --functions-version 4'
.format(resource_group, functionapp_name, storage_account, managed_environment_name)).assert_with_checks([
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

logger = get_logger(__name__)

CURRENT_API_VERSION = "2025-01-01"
CURRENT_API_VERSION = "2025-07-01"
POLLING_TIMEOUT = 1200 # how many seconds before exiting
POLLING_SECONDS = 2 # how many seconds between requests
POLLING_TIMEOUT_FOR_MANAGED_CERTIFICATE = 1500 # how many seconds before exiting
Expand Down
111 changes: 111 additions & 0 deletions src/azure-cli/azure/cli/command_modules/containerapp/_sdk_enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class BindingType(str, Enum, metaclass=CaseInsensitiveEnumMeta):

DISABLED = "Disabled"
SNI_ENABLED = "SniEnabled"
AUTO = "Auto"


class CertificateProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
Expand All @@ -79,6 +80,7 @@ class CertificateProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta)
CANCELED = "Canceled"
DELETE_FAILED = "DeleteFailed"
PENDING = "Pending"
DELETING = "Deleting"


class CheckNameAvailabilityReason(str, Enum, metaclass=CaseInsensitiveEnumMeta):
Expand All @@ -101,6 +103,16 @@ class ConnectedEnvironmentProvisioningState(str, Enum, metaclass=CaseInsensitive
SCHEDULED_FOR_DELETE = "ScheduledForDelete"


class ConnectedEnvironmentStorageProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Provisioning state of the storage."""

SUCCEEDED = "Succeeded"
FAILED = "Failed"
CANCELED = "Canceled"
IN_PROGRESS = "InProgress"
DELETING = "Deleting"


class ContainerAppContainerRunningState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Current running state of the container."""

Expand Down Expand Up @@ -165,6 +177,16 @@ class CreatedByType(str, Enum, metaclass=CaseInsensitiveEnumMeta):
KEY = "Key"


class DaprComponentProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Provisioning state of the Dapr Component."""

SUCCEEDED = "Succeeded"
FAILED = "Failed"
CANCELED = "Canceled"
IN_PROGRESS = "InProgress"
DELETING = "Deleting"


class DnsVerificationTestResult(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""DNS verification test result."""

Expand Down Expand Up @@ -202,6 +224,18 @@ class ForwardProxyConvention(str, Enum, metaclass=CaseInsensitiveEnumMeta):
CUSTOM = "Custom"


class HttpRouteProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""The current provisioning state."""

SUCCEEDED = "Succeeded"
FAILED = "Failed"
CANCELED = "Canceled"
WAITING = "Waiting"
UPDATING = "Updating"
DELETING = "Deleting"
PENDING = "Pending"


class IdentitySettingsLifeCycle(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Use to select the lifecycle stages of a Container App during which the Managed Identity should
be available.
Expand Down Expand Up @@ -273,6 +307,15 @@ class JobProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
DELETING = "Deleting"


class Kind(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Metadata to represent the container app kind, representing if a container app is workflowapp or
functionapp.
"""

WORKFLOWAPP = "workflowapp"
FUNCTIONAPP = "functionapp"


class LifecycleType(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""The lifecycle type of the session pool."""

Expand Down Expand Up @@ -317,6 +360,34 @@ class PoolManagementType(str, Enum, metaclass=CaseInsensitiveEnumMeta):
DYNAMIC = "Dynamic"


class PrivateEndpointConnectionProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""The current provisioning state."""

SUCCEEDED = "Succeeded"
FAILED = "Failed"
CANCELED = "Canceled"
WAITING = "Waiting"
UPDATING = "Updating"
DELETING = "Deleting"
PENDING = "Pending"


class PrivateEndpointServiceConnectionStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""The private endpoint connection status."""

PENDING = "Pending"
APPROVED = "Approved"
REJECTED = "Rejected"
DISCONNECTED = "Disconnected"


class PublicNetworkAccess(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Property to allow or block all public traffic. Allowed Values: 'Enabled', 'Disabled'."""

ENABLED = "Enabled"
DISABLED = "Disabled"


class RevisionHealthState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Current health State of the revision."""

Expand Down Expand Up @@ -411,3 +482,43 @@ class UnauthenticatedClientActionV2(str, Enum, metaclass=CaseInsensitiveEnumMeta
ALLOW_ANONYMOUS = "AllowAnonymous"
RETURN401 = "Return401"
RETURN403 = "Return403"


class WeekDay(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Day of the week when a managed environment can be patched."""

MONDAY = "Monday"
TUESDAY = "Tuesday"
WEDNESDAY = "Wednesday"
THURSDAY = "Thursday"
FRIDAY = "Friday"
SATURDAY = "Saturday"
SUNDAY = "Sunday"


class WorkflowHealthState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Gets or sets the workflow health state."""

NOT_SPECIFIED = "NotSpecified"
HEALTHY = "Healthy"
UNHEALTHY = "Unhealthy"
UNKNOWN = "Unknown"


class WorkflowKind(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""Gets the logic app hybrid workflow kind."""

STATEFUL = "Stateful"
STATELESS = "Stateless"
AGENTIC = "Agentic"


class WorkflowState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
"""The workflow state."""

NOT_SPECIFIED = "NotSpecified"
COMPLETED = "Completed"
ENABLED = "Enabled"
DISABLED = "Disabled"
DELETED = "Deleted"
SUSPENDED = "Suspended"
Loading
Loading