Skip to content

Commit

Permalink
Allow empty_dir volume shared across containers in container group (#…
Browse files Browse the repository at this point in the history
…13374)

* Allow empty_dir volume to be shared across containers in container group.

fixes #11444

* Add acctest for emptydir volume shared across containers

* Fix formatting
  • Loading branch information
hterik committed Sep 23, 2021
1 parent 1ab1807 commit acaae93
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 1 deletion.
13 changes: 12 additions & 1 deletion internal/services/containers/container_group_resource.go
Expand Up @@ -867,6 +867,7 @@ func expandContainerGroupContainers(d *pluginsdk.ResourceData) (*[]containerinst
containerInstancePorts := make([]containerinstance.Port, 0)
containerGroupPorts := make([]containerinstance.Port, 0)
containerGroupVolumes := make([]containerinstance.Volume, 0)
addedEmptyDirs := map[string]bool{}

for _, containerConfig := range containersConfig {
data := containerConfig.(map[string]interface{})
Expand Down Expand Up @@ -964,7 +965,17 @@ func expandContainerGroupContainers(d *pluginsdk.ResourceData) (*[]containerinst
}
container.VolumeMounts = volumeMounts
if containerGroupVolumesPartial != nil {
containerGroupVolumes = append(containerGroupVolumes, *containerGroupVolumesPartial...)
for _, cgVol := range *containerGroupVolumesPartial {
if cgVol.EmptyDir != nil {
if addedEmptyDirs[*cgVol.Name] {
// empty_dir-volumes are allowed to overlap across containers, in fact that is their primary purpose,
// but the containerGroup must not declare same name of such volumes twice.
continue
}
addedEmptyDirs[*cgVol.Name] = true
}
containerGroupVolumes = append(containerGroupVolumes, cgVol)
}
}
}

Expand Down
75 changes: 75 additions & 0 deletions internal/services/containers/container_group_resource_test.go
Expand Up @@ -491,6 +491,21 @@ func TestAccContainerGroup_emptyDirVolume(t *testing.T) {
})
}

func TestAccContainerGroup_emptyDirVolumeShared(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_container_group", "test")
r := ContainerGroupResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.emptyDirVolumeShared(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep(),
})
}

func TestAccContainerGroup_secretVolume(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_container_group", "test")
r := ContainerGroupResource{}
Expand Down Expand Up @@ -1553,6 +1568,66 @@ resource "azurerm_container_group" "test" {
`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger)
}

func (ContainerGroupResource) emptyDirVolumeShared(data acceptance.TestData) string {
return fmt.Sprintf(`
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "test" {
name = "acctestRG-%d"
location = "%s"
}
resource "azurerm_container_group" "test" {
name = "acctestcontainergroupemptyshared-%d"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
ip_address_type = "public"
dns_name_label = "acctestcontainergroup-%d"
os_type = "Linux"
restart_policy = "Never"
container {
name = "writer"
image = "ubuntu:20.04"
cpu = "1"
memory = "1.5"
commands = ["touch", "/sharedempty/file.txt"]
# Dummy port not used, workaround for https://github.com/hashicorp/terraform-provider-azurerm/issues/1697
ports {
port = 80
protocol = "TCP"
}
volume {
name = "logs"
mount_path = "/sharedempty"
read_only = false
empty_dir = true
}
}
container {
name = "reader"
image = "ubuntu:20.04"
cpu = "1"
memory = "1.5"
volume {
name = "logs"
mount_path = "/sharedempty"
read_only = false
empty_dir = true
}
commands = ["/bin/bash", "-c", "timeout 30 watch --interval 1 --errexit \"! cat /sharedempty/file.txt\""]
}
}
`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger)
}

func (ContainerGroupResource) secretVolume(data acceptance.TestData) string {
return fmt.Sprintf(`
provider "azurerm" {
Expand Down

0 comments on commit acaae93

Please sign in to comment.