Webapp/SDAF/Controllers/ArmclientController.cs (400 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using Azure;
using Azure.Core;
using Azure.ResourceManager;
using Azure.ResourceManager.Compute;
using Azure.ResourceManager.KeyVault;
using Azure.ResourceManager.Network;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using System.Collections.Generic;
namespace SDAFWebApp.Controllers
{
public class ArmclientController : Controller
{
private readonly ArmClient _armClient;
public ArmclientController(ArmClient armClient) => _armClient = armClient;
[HttpGet] // #subscription
public ActionResult GetSubscriptionOptions()
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionCollection subscriptions = _armClient.GetSubscriptions();
foreach (SubscriptionResource s in subscriptions.GetAll())
{
options.Add(new SelectListItem
{
Text = s.Data.DisplayName,
Value = s.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // # populate subscription from existing resource arm id (for edit view)
public ActionResult GetSubscriptionFromResource(string resourceId)
{
try
{
ResourceIdentifier rsc = new(resourceId);
if (rsc.SubscriptionId == null) return null;
string subscriptionId = "/subscriptions/" + rsc.SubscriptionId;
return Json(subscriptionId);
}
catch
{
return null;
}
}
[HttpGet] // # populate network_arm_id from existing resource arm id (for edit view)
public ActionResult GetVnetFromResource(string resourceId)
{
try
{
ResourceIdentifier rsc = new(resourceId);
if (rsc.SubscriptionId == null) return null;
int subnetsIndex = resourceId.IndexOf("/subnets");
if (subnetsIndex <= 0) return null;
string vnetId = resourceId.Substring(0, resourceId.IndexOf("/subnets"));
return Json(vnetId);
}
catch
{
return null;
}
}
[HttpGet] // #location
public ActionResult GetLocationOptions(bool useRegionMapping = false)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
Dictionary<string, string> regionMapping = Helper.regionMapping;
foreach (string region in regionMapping.Keys)
{
options.Add(new SelectListItem
{
Text = region,
Value = useRegionMapping ? Helper.MapRegion(region).ToUpper() : region
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #resourcegroup_arm_id
public ActionResult GetResourceGroupOptions(string subscriptionId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionResource subscription = _armClient.GetSubscriptionResource(new ResourceIdentifier(subscriptionId));
ResourceGroupCollection resourceGroups = subscription.GetResourceGroups();
foreach (ResourceGroupResource r in resourceGroups.GetAll())
{
options.Add(new SelectListItem
{
Text = r.Data.Name,
Value = r.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #network_arm_id
public ActionResult GetVNetOptions(string subscriptionId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionResource subscription = _armClient.GetSubscriptionResource(new ResourceIdentifier(subscriptionId));
Pageable<VirtualNetworkResource> virtualNetworks = subscription.GetVirtualNetworks();
foreach (VirtualNetworkResource n in virtualNetworks)
{
options.Add(new SelectListItem
{
Text = n.Data.Name,
Value = n.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #[various]_subnet_arm_id
public ActionResult GetSubnetOptions(string vnetId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
ResourceIdentifier id = new(vnetId);
SubscriptionResource subscription = _armClient.GetSubscriptions().Get(id.SubscriptionId);
ResourceGroupResource resourceGroup = subscription.GetResourceGroups().Get(id.ResourceGroupName);
VirtualNetworkResource virtualNetwork = resourceGroup.GetVirtualNetworks().Get(id.Name);
SubnetCollection subnets = virtualNetwork.GetSubnets();
foreach (SubnetResource s in subnets.GetAll())
{
options.Add(new SelectListItem
{
Text = s.Data.Name,
Value = s.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #[various]_subnet_nsg_arm_id
public ActionResult GetNsgOptions(string vnetId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
ResourceIdentifier id = new(vnetId);
SubscriptionResource subscription = _armClient.GetSubscriptions().Get(id.SubscriptionId);
ResourceGroupResource resourceGroup = subscription.GetResourceGroups().Get(id.ResourceGroupName);
NetworkSecurityGroupCollection nsgs = resourceGroup.GetNetworkSecurityGroups();
foreach (NetworkSecurityGroupResource nsg in nsgs.GetAll())
{
options.Add(new SelectListItem
{
Text = nsg.Data.Name,
Value = nsg.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #[various]_storage_account_arm_id
public ActionResult GetStorageAccountOptions(string subscriptionId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionResource subscription = _armClient.GetSubscriptionResource(new ResourceIdentifier(subscriptionId));
Pageable<StorageAccountResource> storageAccounts = subscription.GetStorageAccounts();
foreach (StorageAccountResource sa in storageAccounts)
{
try
{
SelectListItem li = new()
{
Text = sa.Data.Name,
Value = sa.Id
};
options.Add(li);
}
catch (System.Exception Ex)
{
string errorMessage = Ex.Message;
}
}
}
catch (System.Exception Ex)
{
string errorMessage = Ex.Message;
}
return Json(options);
}
[HttpGet] // #[various]_private_endpoint_id
public ActionResult GetPrivateEndpointOptions(string subscriptionId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionResource subscription = _armClient.GetSubscriptionResource(new ResourceIdentifier(subscriptionId));
Pageable<PrivateEndpointResource> privateEndpoints = subscription.GetPrivateEndpoints();
foreach (PrivateEndpointResource pe in privateEndpoints)
{
options.Add(new SelectListItem
{
Text = pe.Data.Name,
Value = pe.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #[various]_keyvault_id
public ActionResult GetKeyvaultOptions(string subscriptionId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionResource subscription = _armClient.GetSubscriptionResource(new ResourceIdentifier(subscriptionId));
Pageable<KeyVaultResource> keyVaults = subscription.GetKeyVaults();
foreach (KeyVaultResource kv in keyVaults)
{
options.Add(new SelectListItem
{
Text = kv.Data.Name,
Value = kv.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #proximityplacementgroup_arm_ids
public ActionResult GetPPGroupOptions(string subscriptionId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionResource subscription = _armClient.GetSubscriptionResource(new ResourceIdentifier(subscriptionId));
Pageable<ProximityPlacementGroupResource> ppgs = subscription.GetProximityPlacementGroups();
foreach (ProximityPlacementGroupResource ppg in ppgs)
{
options.Add(new SelectListItem
{
Text = ppg.Data.Name,
Value = ppg.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #[various]_avset_arm_id
public ActionResult GetAvSetOptions(string subscriptionId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionResource subscription = _armClient.GetSubscriptionResource(new ResourceIdentifier(subscriptionId));
Pageable<AvailabilitySetResource> avs = subscription.GetAvailabilitySets();
foreach (AvailabilitySetResource av in avs)
{
options.Add(new SelectListItem
{
Text = av.Data.Name,
Value = av.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #[various]_user_assigned_identity_id
public ActionResult GetUserAssignedIdentityOptions(string subscriptionId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionResource subscription = _armClient.GetSubscriptionResource(new ResourceIdentifier(subscriptionId));
Pageable<GenericResource> userIDs = subscription.GetGenericResources("resourceType eq 'Microsoft.ManagedIdentity/userAssignedIdentities'");
foreach (GenericResource userId in userIDs)
{
options.Add(new SelectListItem
{
Text = userId.Data.Name,
Value = userId.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
[HttpGet] // #[various]_user_assigned_identity_id
public ActionResult GetVMSSOptions(string subscriptionId)
{
List<SelectListItem> options =
[
new SelectListItem { Text = "", Value = "" }
];
try
{
SubscriptionResource subscription = _armClient.GetSubscriptionResource(new ResourceIdentifier(subscriptionId));
Pageable<GenericResource> userIDs = subscription.GetGenericResources("resourceType eq 'Microsoft.Compute/virtualMachineScaleSets'");
foreach (GenericResource userId in userIDs)
{
options.Add(new SelectListItem
{
Text = userId.Data.Name,
Value = userId.Id
});
}
}
catch
{
return null;
}
return Json(options);
}
}
}