Skip to content

Commit 9f2a5d5

Browse files
committed
aws/az networks sync successfully
1 parent cef2738 commit 9f2a5d5

File tree

5 files changed

+63
-35
lines changed

5 files changed

+63
-35
lines changed

cmd/ctrlc/root/sync/aws/networks/networks.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ func processNetwork(
232232
metadata["ctrlplane/links"] = fmt.Sprintf("{ \"AWS Console\": \"%s\" }", consoleUrl)
233233

234234
return api.CreateResource{
235-
Version: "ctrlplane.dev/vpc/v1",
235+
Version: "ctrlplane.dev/network/v1",
236236
Kind: "AWSNetwork",
237237
Name: vpcName,
238238
Identifier: *vpc.VpcId,

cmd/ctrlc/root/sync/azure/azure.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package azure
33
import (
44
"github.com/MakeNowJust/heredoc/v2"
55
"github.com/ctrlplanedev/cli/cmd/ctrlc/root/sync/azure/aks"
6+
"github.com/ctrlplanedev/cli/cmd/ctrlc/root/sync/azure/networks"
67
"github.com/ctrlplanedev/cli/internal/cliutil"
78
"github.com/spf13/cobra"
89
)
@@ -32,6 +33,7 @@ func NewAzureCmd() *cobra.Command {
3233

3334
// Add all Azure sync subcommands
3435
cmd.AddCommand(cliutil.AddIntervalSupport(aks.NewSyncAKSCmd(), ""))
36+
cmd.AddCommand(cliutil.AddIntervalSupport(networks.NewSyncNetworksCmd(), ""))
3537

3638
return cmd
3739
}

cmd/ctrlc/root/sync/azure/networks/networks.go

Lines changed: 55 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package aks
1+
package networks
22

33
import (
44
"context"
@@ -19,14 +19,13 @@ import (
1919
"sync"
2020
)
2121

22-
// NewSyncAKSCmd creates a new cobra command for syncing AKS clusters
23-
func NewSyncAKSCmd() *cobra.Command {
22+
func NewSyncNetworksCmd() *cobra.Command {
2423
var subscriptionID string
2524
var name string
2625

2726
cmd := &cobra.Command{
28-
Use: "aks",
29-
Short: "Sync Azure Kubernetes Service networks into Ctrlplane",
27+
Use: "networks",
28+
Short: "Sync Azure Virtual Networks into Ctrlplane",
3029
Example: heredoc.Doc(`
3130
# Make sure Azure credentials are configured via environment variables or Azure CLI
3231
@@ -75,21 +74,21 @@ func runSync(subscriptionID, name *string) func(cmd *cobra.Command, args []strin
7574
tenantID = getTenantIDFromEnv()
7675
}
7776

78-
log.Info("Syncing all AKS clusters", "subscriptionID", *subscriptionID, "tenantID", tenantID)
77+
log.Info("Syncing all Networks", "subscriptionID", *subscriptionID, "tenantID", tenantID)
7978

8079
resources, err := processNetworks(ctx, cred, *subscriptionID, tenantID)
8180
if err != nil {
8281
return err
8382
}
8483

8584
if len(resources) == 0 {
86-
log.Info("No AKS clusters found")
85+
log.Info("No Networks found")
8786
return nil
8887
}
8988

9089
// If name is not provided, use subscription ID
9190
if *name == "" {
92-
*name = fmt.Sprintf("azure-aks-%s", *subscriptionID)
91+
*name = fmt.Sprintf("azure-networks-%s", *subscriptionID)
9392
}
9493

9594
// Upsert resources to Ctrlplane
@@ -157,7 +156,7 @@ func getDefaultSubscriptionID(ctx context.Context, cred azcore.TokenCredential)
157156
func processNetworks(
158157
ctx context.Context, cred azcore.TokenCredential, subscriptionID string, tenantID string,
159158
) ([]api.CreateResource, error) {
160-
var resources []api.CreateResource
159+
var allResources []api.CreateResource
161160
var resourceGroups []common.ResourceGroupInfo
162161
var mu sync.Mutex
163162
var wg sync.WaitGroup
@@ -184,20 +183,20 @@ func processNetworks(
184183
page, err := pager.NextPage(ctx)
185184
if err != nil {
186185
mu.Lock()
187-
syncErrors = append(syncErrors, fmt.Errorf("failed to list AKS clusters: %w", err))
186+
syncErrors = append(syncErrors, fmt.Errorf("failed to list networks: %w", err))
188187
mu.Unlock()
189188
}
190189
for _, network := range page.Value {
191-
resource, err := processNetwork(ctx, network, resourceGroup, subscriptionID, tenantID)
190+
resources, err := processNetwork(ctx, network, resourceGroup, subscriptionID, tenantID)
192191
if err != nil {
193-
log.Error("Failed to process AKS cluster", "name", *network.Name, "error", err)
192+
log.Error("Failed to process network", "name", *network.Name, "error", err)
194193
mu.Lock()
195-
syncErrors = append(syncErrors, fmt.Errorf("cluster %s: %w", *network.Name, err))
194+
syncErrors = append(syncErrors, fmt.Errorf("network %s: %w", *network.Name, err))
196195
mu.Unlock()
197196
return
198197
}
199198
mu.Lock()
200-
resources = append(resources, resource)
199+
allResources = append(allResources, resources...)
201200
mu.Unlock()
202201
}
203202
}
@@ -211,23 +210,23 @@ func processNetworks(
211210
// Continue with the clusters that succeeded
212211
}
213212

214-
log.Info("Found AKS clusters", "count", len(resources))
215-
return resources, nil
213+
log.Info("Found network resources", "count", len(allResources))
214+
return allResources, nil
216215
}
217216

218217
func processNetwork(
219218
_ context.Context, network *armnetwork.VirtualNetwork, resourceGroup string, subscriptionID string, tenantID string,
220219
) ([]api.CreateResource, error) {
221220
resources := make([]api.CreateResource, 0)
222221
networkName := network.Name
223-
metadata := initNetworkMetadata(network, subscriptionID, resourceGroup, tenantID)
222+
metadata := initNetworkMetadata(network, resourceGroup, subscriptionID, tenantID)
224223

225224
// Build console URL
226-
consoleUrl := getVirtualNetworkConsoleUrl(subscriptionID, resourceGroup, *networkName)
225+
consoleUrl := getVirtualNetworkConsoleUrl(resourceGroup, subscriptionID, *networkName)
227226
metadata[kinds.CtrlplaneMetadataLinks] = fmt.Sprintf("{ \"Azure Portal\": \"%s\" }", consoleUrl)
228227

229228
resources = append(resources, api.CreateResource{
230-
Version: "ctrlplane.dev/vpc/v1",
229+
Version: "ctrlplane.dev/network/v1",
231230
Kind: "AzureNetwork",
232231
Name: *networkName,
233232
Identifier: *network.ID,
@@ -248,23 +247,49 @@ func processNetwork(
248247
Metadata: metadata,
249248
})
250249
for _, subnet := range network.Properties.Subnets {
251-
if res, err := processSubnet(networkName, subnet, resourceGroup, subscriptionID, tenantID); err != nil {
250+
if res, err := processSubnet(network, subnet, resourceGroup, subscriptionID, tenantID); err != nil {
252251
return nil, err
253252
} else {
254253
resources = append(resources, res)
255254
}
256255
}
256+
return resources, nil
257257
}
258258

259259
func processSubnet(
260-
networkName *string, subnet *armnetwork.Subnet, resourceGroup string, subscriptionID string, tenantID string,
260+
network *armnetwork.VirtualNetwork, subnet *armnetwork.Subnet, resourceGroup string, subscriptionID string, tenantID string,
261261
) (api.CreateResource, error) {
262+
metadata := initSubnetMetadata(network, subnet, resourceGroup, subscriptionID, tenantID)
263+
networkName := network.Name
264+
subnetName := subnet.Name
262265

266+
// Build console URL
267+
consoleUrl := getSubnetConsoleUrl(resourceGroup, subscriptionID, *networkName)
268+
metadata[kinds.CtrlplaneMetadataLinks] = fmt.Sprintf("{ \"Azure Portal\": \"%s\" }", consoleUrl)
269+
270+
return api.CreateResource{
271+
Version: "ctrlplane.dev/network/subnet/v1",
272+
Kind: "AzureSubnet",
273+
Name: *subnetName,
274+
Identifier: *subnet.ID,
275+
Config: map[string]any{
276+
// Common cross-provider options
277+
"name": subnetName,
278+
"type": "subnet",
279+
"id": subnet.ID,
280+
281+
// Provider-specific implementation details
282+
"azureSubnet": map[string]any{
283+
"type": subnet.Type,
284+
"purpose": subnet.Properties.Purpose,
285+
"state": subnet.Properties.ProvisioningState,
286+
},
287+
},
288+
Metadata: metadata,
289+
}, nil
263290
}
264291

265-
func initNetworkMetadata(
266-
network *armnetwork.VirtualNetwork, subscriptionID, resourceGroup string, tenantID string,
267-
) map[string]string {
292+
func initNetworkMetadata(network *armnetwork.VirtualNetwork, resourceGroup, subscriptionID, tenantID string) map[string]string {
268293

269294
metadata := map[string]string{
270295
"azure/subscription": subscriptionID,
@@ -274,7 +299,7 @@ func initNetworkMetadata(
274299
"azure/location": *network.Location,
275300
"azure/status": string(*network.Properties.ProvisioningState),
276301
"azure/id": *network.ID,
277-
"azure/console-url": getVirtualNetworkConsoleUrl(subscriptionID, resourceGroup, *network.Name),
302+
"azure/console-url": getVirtualNetworkConsoleUrl(resourceGroup, subscriptionID, *network.Name),
278303
}
279304

280305
// Tags
@@ -289,9 +314,7 @@ func initNetworkMetadata(
289314
return metadata
290315
}
291316

292-
func initSubnetMetadata(
293-
network *armnetwork.VirtualNetwork, subnet *armnetwork.Subnet, subscriptionID, resourceGroup string, tenantID string,
294-
) map[string]string {
317+
func initSubnetMetadata(network *armnetwork.VirtualNetwork, subnet *armnetwork.Subnet, resourceGroup, subscriptionID, tenantID string) map[string]string {
295318

296319
metadata := map[string]string{
297320
"azure/subscription": subscriptionID,
@@ -301,7 +324,7 @@ func initSubnetMetadata(
301324
"azure/location": *network.Location,
302325
"azure/status": string(*subnet.Properties.ProvisioningState),
303326
"azure/id": *subnet.ID,
304-
"azure/console-url": getSubnetConsoleUrl(subscriptionID, resourceGroup, *network.Name),
327+
"azure/console-url": getSubnetConsoleUrl(resourceGroup, subscriptionID, *network.Name),
305328
}
306329

307330
// Tags
@@ -316,7 +339,7 @@ func initSubnetMetadata(
316339
return metadata
317340
}
318341

319-
func getVirtualNetworkConsoleUrl(subscriptionID, resourceGroup, networkName string) string {
342+
func getVirtualNetworkConsoleUrl(resourceGroup, subscriptionID, networkName string) string {
320343
return fmt.Sprintf(
321344
"https://portal.azure.com/#@/resource/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s",
322345
subscriptionID,
@@ -325,7 +348,7 @@ func getVirtualNetworkConsoleUrl(subscriptionID, resourceGroup, networkName stri
325348
)
326349
}
327350

328-
func getSubnetConsoleUrl(subscriptionID, resourceGroup, networkName string) string {
351+
func getSubnetConsoleUrl(resourceGroup, subscriptionID, networkName string) string {
329352
return fmt.Sprintf(
330353
"https://portal.azure.com/#@/resource/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s/subnets",
331354
subscriptionID,
@@ -336,7 +359,7 @@ func getSubnetConsoleUrl(subscriptionID, resourceGroup, networkName string) stri
336359

337360
func upsertToCtrlplane(ctx context.Context, resources []api.CreateResource, subscriptionID, name *string) error {
338361
if *name == "" {
339-
*name = fmt.Sprintf("azure-aks-%s", *subscriptionID)
362+
*name = fmt.Sprintf("azure-networks-%s", *subscriptionID)
340363
}
341364

342365
apiURL := viper.GetString("url")

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require (
77
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0
88
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice v1.0.0
99
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0
10+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1
1011
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.3.0
1112
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription v1.2.0
1213
github.com/MakeNowJust/heredoc/v2 v2.0.1

go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8U
1414
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA=
1515
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice v1.0.0 h1:figxyQZXzZQIcP3njhC68bYUiTw45J8/SsHaLW8Ax0M=
1616
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice v1.0.0/go.mod h1:TmlMW4W5OvXOmOyKNnor8nlMMiO1ctIyzmHme/VHsrA=
17-
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.0.0 h1:lMW1lD/17LUA5z1XTURo7LcVG2ICBPlyMHjIUrcFZNQ=
18-
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.0.0/go.mod h1:ceIuwmxDWptoW3eCqSXlnPsZFKh4X+R38dWPv7GS9Vs=
17+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNLjCUeKhgnAJWAKhEUQM+RJQo2H1fuGSw1Ky1E=
18+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2/go.mod h1:FbdwsQ2EzwvXxOPcMFYO8ogEc9uMMIj3YkmCdXdAFmk=
1919
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do=
2020
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI=
21+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0 h1:pPvTJ1dY0sA35JOeFq6TsY2xj6Z85Yo23Pj4wCCvu4o=
22+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0/go.mod h1:mLfWfj8v3jfWKsL9G4eoBoXVcsqcIUTapmdKy7uGOp0=
2123
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 h1:QM6sE5k2ZT/vI5BEe0r7mqjsUSnhVBFbOsVkEuaEfiA=
2224
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0/go.mod h1:243D9iHbcQXoFUtgHJwL7gl2zx1aDuDMjvBZVGr2uW0=
2325
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU=

0 commit comments

Comments
 (0)