func()

in pkg/engine/transform/transform.go [604:761]


func (t *Transformer) NormalizeResourcesForK8sAgentUpgrade(logger *logrus.Entry, templateMap map[string]interface{}, isMasterManagedDisk bool, agentPoolsToPreserve map[string]bool) error {
	logger.Infoln("Running NormalizeResourcesForK8sMasterUpgrade....")
	resources := templateMap[resourcesFieldName].([]interface{})
	resourceTypeToProcess := map[string]bool{
		vmResourceType: true, vmExtensionType: true, nicResourceType: true,
		vnetResourceType: true, nsgResourceType: true, lbResourceType: true,
		vmssResourceType: true, vmasResourceType: true, roleResourceType: true,
		storageAccountsResourceType: true}
	logger.Infoln(fmt.Sprintf("Resource count before running NormalizeResourcesForK8sMasterUpgrade: %d", len(resources)))

	filteredResources := resources[:0]

	for _, resource := range resources {
		filteredResources = append(filteredResources, resource)
		resourceMap, ok := resource.(map[string]interface{})
		if !ok {
			logger.Warnf("Template improperly formatted for field name: %s", resourcesFieldName)
			continue
		}

		resourceType, ok := resourceMap[typeFieldName].(string)
		if !ok {
			continue
		}

		_, process := resourceTypeToProcess[resourceType]
		if !process {
			continue
		}

		filteredResources = removeVMAS(logger, filteredResources, resourceMap)

		resourceName, ok := resourceMap[nameFieldName].(string)
		if !ok {
			logger.Warnf("Template improperly formatted for field name: %s", nameFieldName)
			continue
		}

		// Remove control plane resources
		switch resourceType {
		case vmResourceType, vmExtensionType, roleResourceType, nicResourceType:
			if strings.Contains(resourceName, "variables('masterVMNamePrefix')") {
				filteredResources = filteredResources[:len(filteredResources)-1]
				continue
			}
		case nsgResourceType:
			if strings.Contains(resourceName, "variables('nsgName')") {
				filteredResources = filteredResources[:len(filteredResources)-1]
				continue
			}
		case publicIPAddressResourceType, lbResourceType:
			if strings.Contains(resourceName, "variables('master") {
				filteredResources = filteredResources[:len(filteredResources)-1]
				continue
			}
		case vnetResourceType:
			RemoveNsgDependency(logger, resourceName, resourceMap)
		case vmssResourceType:
			filteredResources = filteredResources[:len(filteredResources)-1]
			continue
		}

		tags, _ := resourceMap[tagsFieldName].(map[string]interface{})
		poolName := fmt.Sprint(tags["poolName"])

		// Remove resources for node pools not being upgraded
		switch resourceType {
		case vmResourceType:
			logger.Infoln(fmt.Sprintf("Evaluating if agent pool: %s, resource: %s needs to be removed", poolName, resourceName))
			logger.Infoln(fmt.Sprintf("agentPoolsToPreserve: %v...", agentPoolsToPreserve))

			removeVM := true

			for pool, preserve := range agentPoolsToPreserve {
				if strings.Contains(resourceName, "variables('"+pool) && preserve {
					removeVM = false
				}
			}

			if removeVM {
				logger.Infoln(fmt.Sprintf("Removing agent resource: %s from template", resourceName))
				filteredResources = filteredResources[:len(filteredResources)-1]
			}
		case roleResourceType:
			logger.Infoln(fmt.Sprintf("Evaluating if agent resource: %s needs to be removed", resourceName))
			removeRole := true

			for pool, preserve := range agentPoolsToPreserve {
				if strings.Contains(resourceName, "variables('"+pool) && preserve {
					removeRole = false
				}
			}

			if removeRole {
				logger.Infoln(fmt.Sprintf("Removing agent resource: %s from template", resourceName))
				filteredResources = filteredResources[:len(filteredResources)-1]
			}
		case vmExtensionType:
			logger.Infoln(fmt.Sprintf("Evaluating if extension: %s needs to be removed", resourceName))
			logger.Infoln(fmt.Sprintf("agentPoolsToPreserve: %v...", agentPoolsToPreserve))

			removeExtension := true
			for poolName, preserve := range agentPoolsToPreserve {
				if strings.Contains(resourceName, "variables('"+poolName) && preserve {
					removeExtension = false
				}
			}

			if removeExtension {
				logger.Infoln(fmt.Sprintf("Removing extension: %s from template", resourceName))
				filteredResources = filteredResources[:len(filteredResources)-1]
			}
		case storageAccountsResourceType:
			logger.Infoln(fmt.Sprintf("Evaluating if storage account: %s needs to be removed", resourceName))
			logger.Infoln(fmt.Sprintf("agentPoolsToPreserve: %v...", agentPoolsToPreserve))

			removeStorageAccount := true
			for poolName, preserve := range agentPoolsToPreserve {
				if strings.Contains(resourceName, "variables('"+poolName) && preserve {
					removeStorageAccount = false
				}
			}

			if removeStorageAccount {
				logger.Infoln(fmt.Sprintf("Removing storage account: %s from template", resourceName))
				filteredResources = filteredResources[:len(filteredResources)-1]
			}
		case nicResourceType:
			logger.Infoln(fmt.Sprintf("Evaluating if NIC: %s needs to be removed", resourceName))
			logger.Infoln(fmt.Sprintf("agentPoolsToPreserve: %v...", agentPoolsToPreserve))

			removeNIC := true
			for poolName, preserve := range agentPoolsToPreserve {
				if strings.Contains(resourceName, "variables('"+poolName) && preserve {
					removeNIC = false
				}
			}

			if removeNIC {
				logger.Infoln(fmt.Sprintf("Removing NIC: %s from template", resourceName))
				filteredResources = filteredResources[:len(filteredResources)-1]
			}
		}
	}

	templateMap[resourcesFieldName] = filteredResources

	logger.Infoln(fmt.Sprintf("Resource count after running NormalizeResourcesForK8sMasterUpgrade: %d",
		len(templateMap[resourcesFieldName].([]interface{}))))

	logger.Infoln("Running NormalizeForK8sVMASScalingUp....")
	if err := t.NormalizeForK8sVMASScalingUp(logger, templateMap); err != nil {
		log.Fatalln(err)
		return err
	}

	return nil
}