/// <summary> /// Initializes a new instance of the DeploymentConfiguration class. /// </summary> /// <param name="cloudServiceConfiguration">The cloud service /// configuration for the pool.</param> /// <param name="virtualMachineConfiguration">The virtual machine /// configuration for the pool.</param> public DeploymentConfiguration(CloudServiceConfiguration cloudServiceConfiguration = default(CloudServiceConfiguration), VirtualMachineConfiguration virtualMachineConfiguration = default(VirtualMachineConfiguration)) { CloudServiceConfiguration = cloudServiceConfiguration; VirtualMachineConfiguration = virtualMachineConfiguration; CustomInit(); }
private async Task <bool> CreateBatchPool(CommandLineArgs cmdLine, string poolId) { var batchAccountName = cmdLine.ConnectionArgs.BatchAccountName; var batchAccountKey = cmdLine.ConnectionArgs.BatchAccountKey.EncodeBase64(); var batchUrl = cmdLine.ConnectionArgs.BatchAccountUrl; var nodeCount = cmdLine.BatchArgs.BatchNodeCount; var vmSize = cmdLine.BatchArgs.BatchVmSize; var os = cmdLine.BatchArgs.BatchPoolOs; var userAssignedResourceId = cmdLine.IdentityArgs.ResourceId; var userAssignedPrinId = cmdLine.IdentityArgs.PrincipalId; var userAssignedClientId = cmdLine.IdentityArgs.ClientId; var resourceGroupName = cmdLine.IdentityArgs.ResourceGroup; var subscriptionId = cmdLine.IdentityArgs.SubscriptionId; log.LogInformation($"Creating pool [{poolId}]..."); //var creds = new BatchSharedKeyCredential(batchAccountName, batchAccountKey); if (cmdLine.IdentityArgs != null) { AadHelper.ManagedIdentityClientId = cmdLine.IdentityArgs.ClientId; } var creds = new CustomClientCredentials(AadHelper.TokenCredential); var managementClient = new BatchManagementClient(creds); managementClient.SubscriptionId = subscriptionId; //// From: https://docs.microsoft.com/en-us/azure/batch/managed-identity-pools bm.ImageReference imageReference; bm.VirtualMachineConfiguration virtualMachineConfiguration; switch (os) { case OsType.Linux: imageReference = new bm.ImageReference(publisher: "Canonical", offer: "UbuntuServer", sku: "18.04-lts", version: "latest"); virtualMachineConfiguration = new bm.VirtualMachineConfiguration(imageReference: imageReference, nodeAgentSkuId: "batch.node.ubuntu 18.04"); break; case OsType.Windows: default: imageReference = new bm.ImageReference(publisher: "MicrosoftWindowsServer", offer: "WindowsServer", sku: "2016-Datacenter-with-containers", version: "latest"); virtualMachineConfiguration = new bm.VirtualMachineConfiguration(imageReference: imageReference, nodeAgentSkuId: "batch.node.windows amd64"); break; } var deploymentConfig = new bm.DeploymentConfiguration() { VirtualMachineConfiguration = virtualMachineConfiguration }; var ids = new Dictionary <string, bm.UserAssignedIdentities>(); ids.Add(userAssignedResourceId, new bm.UserAssignedIdentities(principalId: userAssignedPrinId, clientId: userAssignedClientId)); var poolIdentity = new bm.BatchPoolIdentity() { Type = bm.PoolIdentityType.UserAssigned, UserAssignedIdentities = ids }; var scaleSettings = new bm.ScaleSettings() { FixedScale = new bm.FixedScaleSettings() { TargetDedicatedNodes = nodeCount } }; var poolParameters = new bm.Pool(name: poolId) { VmSize = vmSize, ScaleSettings = scaleSettings, DeploymentConfiguration = deploymentConfig, Identity = poolIdentity }; try { var pool = await managementClient.Pool.CreateWithHttpMessagesAsync( poolName : poolId, resourceGroupName : resourceGroupName, accountName : batchAccountName, parameters : poolParameters, cancellationToken : default(CancellationToken)); if (!pool.Response.IsSuccessStatusCode) { log.LogWarning($"Issue creating pool: {pool.Body.ProvisioningState.ToString()}"); return(false); } } catch (Exception exe) { log.LogError($"Error creating Batch Pool: {exe.ToString()}"); return(false); } return(true); }