func()

in pkg/azure/client.go [245:297]


func (az *azClient) ApplyRouteTable(subnetID string, routeTableID string) error {
	// Check if the route table exists
	_, routeTableResourceGroup, routeTableName := ParseResourceID(routeTableID)
	routeTable, err := az.routeTablesClient.Get(az.ctx, string(routeTableResourceGroup), string(routeTableName), "")

	// if route table is not found, then simply add a log and return no error. routeTable will always be initialized.
	if routeTable.Response.StatusCode == 404 {
		return nil
	}

	if err != nil {
		// no access or no route table
		return err
	}

	// Get subnet and check if it is already associated to a route table
	_, subnetResourceGroup, subnetVnetName, subnetName := ParseSubResourceID(subnetID)
	subnet, err := az.subnetsClient.Get(az.ctx, string(subnetResourceGroup), string(subnetVnetName), string(subnetName), "")
	if err != nil {
		return err
	}

	if subnet.RouteTable != nil {
		if *subnet.RouteTable.ID != routeTableID {
			klog.V(3).Infof("Skipping associating Application Gateway subnet '%s' with route table '%s' used by k8s cluster as it is already associated to route table '%s'.",
				subnetID,
				routeTableID,
				*subnet.SubnetPropertiesFormat.RouteTable.ID)
		} else {
			klog.V(3).Infof("Application Gateway subnet '%s' is associated with route table '%s' used by k8s cluster.",
				subnetID,
				routeTableID)
		}

		return nil
	}

	klog.Infof("Associating Application Gateway subnet '%s' with route table '%s' used by k8s cluster.", subnetID, routeTableID)
	subnet.RouteTable = &routeTable

	subnetFuture, err := az.subnetsClient.CreateOrUpdate(az.ctx, string(subnetResourceGroup), string(subnetVnetName), string(subnetName), subnet)
	if err != nil {
		return err
	}

	// Wait until deployment finshes and save the error message
	err = subnetFuture.WaitForCompletionRef(az.ctx, az.subnetsClient.BaseClient.Client)
	if err != nil {
		return err
	}

	return nil
}