コード例 #1
0
 /// <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();
 }
コード例 #2
0
        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);
        }