From a49655ce65cfc06c78511dbdf392d5f4dcd033a4 Mon Sep 17 00:00:00 2001 From: bikerpatch Date: Sat, 11 Feb 2023 21:25:09 +0000 Subject: [PATCH 1/3] remove `MaxItems` on `container` block schema --- internal/services/containerapps/helpers/container_apps.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/services/containerapps/helpers/container_apps.go b/internal/services/containerapps/helpers/container_apps.go index bd059740e204..45db225c27d4 100644 --- a/internal/services/containerapps/helpers/container_apps.go +++ b/internal/services/containerapps/helpers/container_apps.go @@ -620,7 +620,6 @@ func ContainerAppContainerSchema() *pluginsdk.Schema { Type: pluginsdk.TypeList, Required: true, MinItems: 1, - MaxItems: 1, Elem: &pluginsdk.Resource{ Schema: map[string]*pluginsdk.Schema{ "name": { From f63a770ad4af02e34151c6cfa65762cda6108606 Mon Sep 17 00:00:00 2001 From: bikerpatch Date: Sat, 11 Feb 2023 21:25:22 +0000 Subject: [PATCH 2/3] add sidecar test --- .../container_app_resource_test.go | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) diff --git a/internal/services/containerapps/container_app_resource_test.go b/internal/services/containerapps/container_app_resource_test.go index 6bd1137decb1..546cdd3e3bc8 100644 --- a/internal/services/containerapps/container_app_resource_test.go +++ b/internal/services/containerapps/container_app_resource_test.go @@ -158,6 +158,21 @@ func TestAccContainerAppResource_completeWithVNet(t *testing.T) { }) } +func TestAccContainerAppResource_completeWithSidecar(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_container_app", "test") + r := ContainerAppResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.completeWithSidecar(data, "rev1"), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func TestAccContainerAppResource_completeUpdate(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_container_app", "test") r := ContainerAppResource{} @@ -546,6 +561,132 @@ resource "azurerm_container_app" "test" { `, r.templateWithVnet(data), data.RandomInteger, revisionSuffix) } +func (r ContainerAppResource) completeWithSidecar(data acceptance.TestData, revisionSuffix string) string { + return fmt.Sprintf(` +%s + +resource "azurerm_container_app" "test" { + name = "acctest-capp-%[2]d" + resource_group_name = azurerm_resource_group.test.name + container_app_environment_id = azurerm_container_app_environment.test.id + revision_mode = "Single" + + template { + container { + name = "acctest-cont-sidecar-%[2]d" + image = "jackofallops/azure-containerapps-python-acctest:v0.0.1" + cpu = 0.25 + memory = "0.5Gi" + + readiness_probe { + transport = "HTTP" + port = 5000 + } + + liveness_probe { + transport = "HTTP" + port = 5000 + path = "/health" + + header { + name = "Cache-Control" + value = "no-cache" + } + + initial_delay = 5 + timeout = 2 + failure_count_threshold = 1 + } + + startup_probe { + transport = "TCP" + port = 5000 + } + + volume_mounts { + name = azurerm_container_app_environment_storage.test.name + path = "/tmp/testdata" + } + } + + container { + name = "acctest-cont-%[2]d" + image = "jackofallops/azure-containerapps-python-acctest:v0.0.1" + cpu = 0.25 + memory = "0.5Gi" + + readiness_probe { + transport = "HTTP" + port = 5000 + } + + liveness_probe { + transport = "HTTP" + port = 5000 + path = "/health" + + header { + name = "Cache-Control" + value = "no-cache" + } + + initial_delay = 5 + timeout = 2 + failure_count_threshold = 1 + } + + startup_probe { + transport = "TCP" + port = 5000 + } + + volume_mounts { + name = azurerm_container_app_environment_storage.test.name + path = "/tmp/testdata" + } + } + + volume { + name = azurerm_container_app_environment_storage.test.name + storage_type = "AzureFile" + storage_name = azurerm_container_app_environment_storage.test.name + } + + min_replicas = 2 + max_replicas = 3 + + revision_suffix = "%[3]s" + } + + ingress { + allow_insecure_connections = true + target_port = 5000 + transport = "http" + traffic_weight { + latest_revision = true + percentage = 100 + } + } + + registry { + server = azurerm_container_registry.test.login_server + username = azurerm_container_registry.test.admin_username + password_secret_name = "registry-password" + } + + secret { + name = "registry-password" + value = azurerm_container_registry.test.admin_password + } + + tags = { + foo = "Bar" + accTest = "1" + } +} +`, r.templatePlusExtras(data), data.RandomInteger, revisionSuffix) +} + func (r ContainerAppResource) completeChangedSecret(data acceptance.TestData, revisionSuffix string) string { return fmt.Sprintf(` %s From a757fed453142afba55e596c8ca5f731afb66f6c Mon Sep 17 00:00:00 2001 From: bikerpatch Date: Sat, 11 Feb 2023 21:25:27 +0000 Subject: [PATCH 3/3] docs update --- website/docs/r/container_app.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/container_app.html.markdown b/website/docs/r/container_app.html.markdown index fc522c623f16..09cdb0fdd3bb 100644 --- a/website/docs/r/container_app.html.markdown +++ b/website/docs/r/container_app.html.markdown @@ -91,7 +91,7 @@ A `secret` block supports the following: A `template` block supports the following: -* `container` - (Required) A `container` block as detailed below. +* `container` - (Required) One or more `container` blocks as detailed below. * `max_replicas` - (Optional) The maximum number of replicas for this container.