From 02fd99997b1a972fd4a40d6e92882438770872dc Mon Sep 17 00:00:00 2001 From: Sandra Parsick Date: Thu, 20 Jan 2022 16:05:47 +0100 Subject: [PATCH] Update deployment template to new API version (#97) --- .../jenkins/containeragents/aci/AciAgent.java | 3 -- .../containeragents/aci/AciCleanTask.java | 3 -- .../containeragents/aci/AciService.java | 39 ------------------- .../AciDeploymentTemplateBuilder.java | 29 +++++--------- .../containeragents/aci/deployTemplate.json | 4 +- .../aci/networkProfileSnippet.json | 24 ------------ .../AciDeploymentTemplateBuilderTest.java | 4 +- 7 files changed, 13 insertions(+), 93 deletions(-) delete mode 100644 src/main/resources/com/microsoft/jenkins/containeragents/aci/networkProfileSnippet.json diff --git a/src/main/java/com/microsoft/jenkins/containeragents/aci/AciAgent.java b/src/main/java/com/microsoft/jenkins/containeragents/aci/AciAgent.java index 49f5d04..9c0f95a 100644 --- a/src/main/java/com/microsoft/jenkins/containeragents/aci/AciAgent.java +++ b/src/main/java/com/microsoft/jenkins/containeragents/aci/AciAgent.java @@ -100,9 +100,6 @@ protected void _terminate(TaskListener listener) throws IOException, Interrupted resourceGroup, AciAgent.this.getNodeName(), deployName); - AciService.deleteNetworkProfile(credentialsId, - resourceGroup, - AciAgent.this.getNodeName()); }); } diff --git a/src/main/java/com/microsoft/jenkins/containeragents/aci/AciCleanTask.java b/src/main/java/com/microsoft/jenkins/containeragents/aci/AciCleanTask.java index cf13e8d..83283ed 100644 --- a/src/main/java/com/microsoft/jenkins/containeragents/aci/AciCleanTask.java +++ b/src/main/java/com/microsoft/jenkins/containeragents/aci/AciCleanTask.java @@ -299,9 +299,6 @@ private void cleanLeakedContainer(final AciCloud cloud) { resourceGroup, resource.name(), null); - AciService.deleteNetworkProfile(credentialsId, - resourceGroup, - resource.name()); }); } } diff --git a/src/main/java/com/microsoft/jenkins/containeragents/aci/AciService.java b/src/main/java/com/microsoft/jenkins/containeragents/aci/AciService.java index 71eb974..c1dcb95 100644 --- a/src/main/java/com/microsoft/jenkins/containeragents/aci/AciService.java +++ b/src/main/java/com/microsoft/jenkins/containeragents/aci/AciService.java @@ -1,6 +1,5 @@ package com.microsoft.jenkins.containeragents.aci; -import com.azure.core.management.exception.ManagementException; import com.azure.resourcemanager.AzureResourceManager; import com.azure.resourcemanager.containerinstance.models.ContainerGroup; import com.azure.resourcemanager.resources.models.Deployment; @@ -125,42 +124,4 @@ public static void deleteAciContainerGroup(String credentialsId, } } - public static void deleteNetworkProfile(String credentialsId, - String resourceGroup, - String networkProfileName) { - AzureResourceManager azureClient; - - try { - azureClient = AzureContainerUtils.getAzureClient(credentialsId); - boolean retryDeleting; - int retryCounter = 0; - do { - try { - azureClient.networkProfiles().deleteByResourceGroup(resourceGroup, networkProfileName); - retryDeleting = false; - } catch (ManagementException e) { - final int maxRetry = 10; - if (e.getValue().getCode().equals("NetworkProfileAlreadyInUseWithContainerNics") - && retryCounter < maxRetry) { - final int retryInterval = 10 * 1000; - LOGGER.log(Level.WARNING, - "ACI Network Profile {0} is already in use. Waiting for retry in {1} seconds. " - + "It was retry number {2} of {3}.", - new Object[]{networkProfileName, retryInterval, retryCounter, maxRetry}); - Thread.sleep(retryInterval); - retryDeleting = true; - retryCounter++; - } else { - throw e; - } - } - } - while (retryDeleting); - LOGGER.log(Level.INFO, "Delete ACI Network Profile: {0} successfully", networkProfileName); - } catch (Exception e) { - LOGGER.log(Level.WARNING, String.format("Delete ACI Network Profile: %s failed or it does not exist", - networkProfileName), e); - } - } - } diff --git a/src/main/java/com/microsoft/jenkins/containeragents/builders/AciDeploymentTemplateBuilder.java b/src/main/java/com/microsoft/jenkins/containeragents/builders/AciDeploymentTemplateBuilder.java index a785d30..12beae7 100644 --- a/src/main/java/com/microsoft/jenkins/containeragents/builders/AciDeploymentTemplateBuilder.java +++ b/src/main/java/com/microsoft/jenkins/containeragents/builders/AciDeploymentTemplateBuilder.java @@ -41,8 +41,6 @@ public final class AciDeploymentTemplateBuilder { private static final String DEPLOY_TEMPLATE_FILENAME = "/com/microsoft/jenkins/containeragents/aci/deployTemplate.json"; - private static final String NETWORK_PROFILE_SNIPPET_FILENAME - = "/com/microsoft/jenkins/containeragents/aci/networkProfileSnippet.json"; private final JenkinsFacade jenkins; private final CustomJenkinsFacade customJenkinsFacade; @@ -106,37 +104,28 @@ public AciDeploymentTemplate buildDeploymentTemplate(AciCloud cloud, AciContaine } } - addNetworkProfile(tmp, mapper, privateIpAddress); + addSubnetIds(tmp, mapper, privateIpAddress); return new AciDeploymentTemplate(tmp, parameters); } } - private void addNetworkProfile(JsonNode tmp, ObjectMapper mapper, AciPrivateIpAddress privateIpAddress) - throws IOException { + private void addSubnetIds(JsonNode tmp, ObjectMapper mapper, AciPrivateIpAddress privateIpAddress) { if (privateIpAddress == null) { return; } - ObjectNode networkProfileNode = mapper.createObjectNode(); - networkProfileNode.put("id", - "[resourceId('Microsoft.Network/networkProfiles', variables('containerName'))]"); - + ObjectNode subnetIdNode = mapper.createObjectNode(); + subnetIdNode.put("id", + "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName')," + + " variables('subnetName'))]"); + ArrayNode subnetIdsArray = mapper.createArrayNode(); + subnetIdsArray.add(subnetIdNode); ArrayNode resourcesArray = (ArrayNode) tmp.get("resources"); - ObjectNode containerGroupItem = (ObjectNode) resourcesArray.get(0); ObjectNode propertiesNode = (ObjectNode) containerGroupItem.get("properties"); - propertiesNode.set("networkProfile", networkProfileNode); - ArrayNode dependencyArrayNode = mapper.createArrayNode(); - dependencyArrayNode.add("[resourceId('Microsoft.Network/networkProfiles', variables('containerName'))]"); - containerGroupItem.set("dependsOn", dependencyArrayNode); - - try (InputStream networkProfileSnippetStream = - AciService.class.getResourceAsStream(NETWORK_PROFILE_SNIPPET_FILENAME)) { - JsonNode networkProfileItem = mapper.readTree(networkProfileSnippetStream); - resourcesArray.add(networkProfileItem); - } + propertiesNode.set("subnetIds", subnetIdsArray); } private String mapIpType(AciPrivateIpAddress privateIpAddress) { diff --git a/src/main/resources/com/microsoft/jenkins/containeragents/aci/deployTemplate.json b/src/main/resources/com/microsoft/jenkins/containeragents/aci/deployTemplate.json index f330f14..b751669 100644 --- a/src/main/resources/com/microsoft/jenkins/containeragents/aci/deployTemplate.json +++ b/src/main/resources/com/microsoft/jenkins/containeragents/aci/deployTemplate.json @@ -1,5 +1,5 @@ { - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { }, @@ -15,7 +15,7 @@ { "name": "[variables('containerName')]", "type": "Microsoft.ContainerInstance/containerGroups", - "apiVersion": "2019-12-01", + "apiVersion": "2021-09-01", "tags": { "JenkinsInstance": "[variables('jenkinsInstance')]" }, diff --git a/src/main/resources/com/microsoft/jenkins/containeragents/aci/networkProfileSnippet.json b/src/main/resources/com/microsoft/jenkins/containeragents/aci/networkProfileSnippet.json deleted file mode 100644 index 7f1e831..0000000 --- a/src/main/resources/com/microsoft/jenkins/containeragents/aci/networkProfileSnippet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ "type": "Microsoft.Network/networkProfiles", - "apiVersion": "2020-11-01", - "name": "[variables('containerName')]", - "location": "[resourceGroup().location]", - "properties": { - "containerNetworkInterfaceConfigurations": [ - { - "name": "[variables('containerName')]", - "properties": { - "ipConfigurations": [ - { - "name": "[variables('containerName')]", - "properties": { - "subnet": { - "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnetName'))]" - } - } - } - ] - } - } - ] - } -} \ No newline at end of file diff --git a/src/test/java/com/microsoft/jenkins/containeragents/builders/AciDeploymentTemplateBuilderTest.java b/src/test/java/com/microsoft/jenkins/containeragents/builders/AciDeploymentTemplateBuilderTest.java index cffd7cc..782e973 100644 --- a/src/test/java/com/microsoft/jenkins/containeragents/builders/AciDeploymentTemplateBuilderTest.java +++ b/src/test/java/com/microsoft/jenkins/containeragents/builders/AciDeploymentTemplateBuilderTest.java @@ -48,7 +48,7 @@ public void templateWithVnet() throws IOException { assertThat(aciDeploymentTemplate.deploymentTemplateAsString(), containsString("\"vnetName\":\"vnet\",")); assertThat(aciDeploymentTemplate.deploymentTemplateAsString(), containsString("\"subnetName\":\"subnet\"")); - assertThat(aciDeploymentTemplate.deploymentTemplateAsString(), containsString("\"type\":\"Microsoft.Network/networkProfiles\"")); + assertThat(aciDeploymentTemplate.deploymentTemplateAsString(), containsString("\"subnetIds\":")); } @Test @@ -61,6 +61,6 @@ public void templateWithoutVnet() throws IOException { assertThat(aciDeploymentTemplate.deploymentTemplateAsString(), not(containsString("\"vnetName\": \"vnet\","))); assertThat(aciDeploymentTemplate.deploymentTemplateAsString(), not(containsString("\"subnetName\": \"subnet\""))); - assertThat(aciDeploymentTemplate.deploymentTemplateAsString(), not(containsString("\"type\":\"Microsoft.Network/networkProfiles\""))); + assertThat(aciDeploymentTemplate.deploymentTemplateAsString(), not(containsString("\"subnetIds\":"))); } } \ No newline at end of file