/// <summary>
        /// Instantiate a new VM Role
        /// </summary>
        public static Role CreateVMRole(this IVirtualMachineOperations client, string cloudServiceName, string roleName, string image, string size, string userName, string password, OSVirtualHardDisk osVHD)
        {
            Role vmRole = new Role
            {
                RoleType = VirtualMachineRoleType.PersistentVMRole.ToString(),
                RoleName = roleName,
                Label = roleName,
                RoleSize = size,
                ConfigurationSets = new List<ConfigurationSet>(),
                //OSVirtualHardDisk = osVHD, 
                ProvisionGuestAgent = true,
                ResourceExtensionReferences = null,
                VMImageName = image,
               //OSVersion = "Windows Server 2012 R2 Datacenter"                
            };
            ConfigurationSet configSet = new ConfigurationSet
            {
                ConfigurationSetType = ConfigurationSetTypes.WindowsProvisioningConfiguration,
                EnableAutomaticUpdates = true,
                ResetPasswordOnFirstLogon = false,
                ComputerName = roleName,
                AdminUserName = userName,
                AdminPassword = password,
                InputEndpoints = new BindingList<InputEndpoint>
               {
                   new InputEndpoint { LocalPort = 3389, Name = "RDP", Protocol = "tcp" },
                   new InputEndpoint { LocalPort = 80, Port = 80, Name = "web", Protocol = "tcp" }
               }
            };

            vmRole.ConfigurationSets.Add(configSet);
            return vmRole;
        }
示例#2
0
 /// <summary>
 /// Initializes a new instance of the VirtualMachineUpdateParameters
 /// class with required arguments.
 /// </summary>
 public VirtualMachineUpdateParameters(string roleName, OSVirtualHardDisk oSVirtualHardDisk)
     : this()
 {
     if (roleName == null)
     {
         throw new ArgumentNullException("roleName");
     }
     if (oSVirtualHardDisk == null)
     {
         throw new ArgumentNullException("oSVirtualHardDisk");
     }
     this.RoleName          = roleName;
     this.OSVirtualHardDisk = oSVirtualHardDisk;
 }
 /// <summary>
 /// Initializes a new instance of the VirtualMachineUpdateParameters
 /// class with required arguments.
 /// </summary>
 public VirtualMachineUpdateParameters(string roleName, OSVirtualHardDisk oSVirtualHardDisk)
     : this()
 {
     if (roleName == null)
     {
         throw new ArgumentNullException("roleName");
     }
     if (oSVirtualHardDisk == null)
     {
         throw new ArgumentNullException("oSVirtualHardDisk");
     }
     this.RoleName = roleName;
     this.OSVirtualHardDisk = oSVirtualHardDisk;
 }
        public static OSVirtualHardDisk CreateOSVHD(this IVirtualMachineVMImageOperations operation, string cloudserviceName, string vmName, string storageAccount, string imageFamiliyName)
        {
            try
            {
                var osVHD = new OSVirtualHardDisk
                {
                    MediaLink = GetVhdUri(string.Format("{0}.blob.core.windows.net/vhds", storageAccount), cloudserviceName, vmName),
                    SourceImageName = GetSourceImageNameByFamliyName(operation, imageFamiliyName)
                };
                //osVHD.OperatingSystem = "Windows";
                return osVHD;
            }
            catch (CloudException e)
            {


                throw e;
            }
        }
        /// <summary>
        ///     Create virtual machine
        /// </summary>
        /// <param name="hostedServiceName"></param>
        /// <param name="osVirtualHardDisk"></param>
        /// <param name="configurationSets"></param>
        /// <param name="dataVirtualHardDisks"></param>
        /// <param name="virtualMachineName"></param>
        /// <param name="deploymentName"></param>
        /// <returns></returns>
        public string CreateVirtualMachine(
            string hostedServiceName,
            OSVirtualHardDisk osVirtualHardDisk,
            IList<ConfigurationSet> configurationSets,
            IList<DataVirtualHardDisk> dataVirtualHardDisks = null,
            string virtualMachineName = "",
            string deploymentName = "")
        {
            if (string.IsNullOrEmpty(deploymentName))
            {
                deploymentName = Dependencies.TestResourcesCollector.GetUniqueDeploymentName();
            }

            if (string.IsNullOrEmpty(virtualMachineName))
            {
                virtualMachineName = Dependencies.TestResourcesCollector.GetUniqueVirtualMachineName();
            }

            var csm = new AzureCloudServiceManager();
            csm.CreateOrUpdateDeployment(hostedServiceName, new DeploymentCreateParameters { Name = deploymentName });

            var vmDeployment = csm.CreateOrUpdateDeployment(hostedServiceName, new DeploymentCreateParameters { 
                Name = deploymentName, 
                Label = Base64EncodingHelper.EncodeToBase64String(AzureServiceConstants.DefaultLabel)
            });
                
            var vmRole = new Role
            {
                RoleName = virtualMachineName,
                RoleType = "PersistentVMRole",
                OSVirtualHardDisk = osVirtualHardDisk,
                ConfigurationSets = configurationSets,
                DataVirtualHardDisks = dataVirtualHardDisks
            };

            vmDeployment.Roles.Add(vmRole);

            return CreateVirtualMachine(hostedServiceName, vmDeployment, virtualMachineName);
        }
示例#6
0
        private void GenerateVM(string serviceName, VMConfigModel vmConfig, string virtualMachineName, 
			int rdpPort, VMUserModel user, bool firstVMInDeployment)
        {
            var windowsConfigurationSet = new ConfigurationSet
            {
                //TODO: depends on the OS type??
                ConfigurationSetType = ConfigurationSetTypes.WindowsProvisioningConfiguration,
                AdminPassword = user.Password,
                AdminUserName = user.Username,
                ComputerName = virtualMachineName,
                HostName = string.Format("{0}.cloudapp.net", serviceName),

            };

            var endpoints = new ConfigurationSet
            {
                ConfigurationSetType = "NetworkConfiguration",
                InputEndpoints = new List<InputEndpoint>
                {
                    new InputEndpoint
                    {
                        Name = "RDP",
                        Port = rdpPort,
                        Protocol = "TCP",
                        LocalPort = InternalRdpPort
                    }
                }
            };

            string newVhdName = string.Format("{0}.vhd", virtualMachineName);

            Uri mediaUri = new Uri(GetVHDStorageUrl(vmConfig.Region) + newVhdName);

            var vhd = new OSVirtualHardDisk
            {
                SourceImageName = vmConfig.ImageName,
                HostCaching = VirtualHardDiskHostCaching.ReadWrite,
                MediaLink = mediaUri,

            };

            OperationStatusResponse deploymentResult;

            if (firstVMInDeployment)
            {
                deploymentResult = CreateDeployment(serviceName, virtualMachineName, windowsConfigurationSet, endpoints, vhd, vmConfig);

            }
            else
            {
                deploymentResult = AddVm(serviceName, virtualMachineName, windowsConfigurationSet, endpoints, vhd, vmConfig);
            }
            //TODO: handle the deploymentResult
        }
示例#7
0
        private OperationStatusResponse CreateDeployment(string serviceName, string virtualMachineName, ConfigurationSet windowsConfigurationSet, ConfigurationSet endpoints, OSVirtualHardDisk vhd, VMConfigModel vmConfig)
        {
            OperationStatusResponse deploymentResult;
            var role = new Role
            {
                RoleName = virtualMachineName,
                RoleSize = MapToAzureVmSize(vmConfig.VmSize),
                RoleType = VirtualMachineRoleType.PersistentVMRole.ToString(),
                OSVirtualHardDisk = vhd,
                ProvisionGuestAgent = true,
                ConfigurationSets = new List<ConfigurationSet>
                {
                    windowsConfigurationSet,
                    endpoints,
                }
            };

            if (vmConfig.InsertCaptureScript)
            {
                role.ResourceExtensionReferences =
                    CreateCaptureScript(vmConfig.CaptureKey, vmConfig.ChocoPackageList);
            }

            var createDeploymentParameters = new VirtualMachineCreateDeploymentParameters
            {
                Name = serviceName,
                Label = serviceName,
                DeploymentSlot = DeploymentSlot.Production,
                Roles = new List<Role> { role },

            };

            deploymentResult = _compute.VirtualMachines.CreateDeployment(
                serviceName,
                createDeploymentParameters);
            return deploymentResult;
        }
示例#8
0
        private OperationStatusResponse AddVm(string serviceName, string virtualMachineName, ConfigurationSet windowsConfigurationSet, ConfigurationSet endpoints, OSVirtualHardDisk vhd, VMConfigModel vmConfig)
        {
            OperationStatusResponse deploymentResult;
            var createVMParameters = new VirtualMachineCreateParameters
            {

                RoleName = virtualMachineName,
                RoleSize = MapToAzureVmSize(vmConfig.VmSize),
                OSVirtualHardDisk = vhd,
                ProvisionGuestAgent = true,
                ConfigurationSets = new List<ConfigurationSet>
                    {
                        windowsConfigurationSet,
                        endpoints,
                    },
            };

            if (vmConfig.InsertCaptureScript)
            {
                createVMParameters.ResourceExtensionReferences =
                    CreateCaptureScript(vmConfig.CaptureKey, vmConfig.ChocoPackageList);
            }

            deploymentResult = _compute.VirtualMachines.Create(serviceName, serviceName, createVMParameters);
            return deploymentResult;
        }
示例#9
0
 private static OSVirtualHardDisk SetOsVirtualHardDisk(string virtualMachineName, string storageAccountName,
     string imageName)
 {
     var vhd = new OSVirtualHardDisk
     {
         SourceImageName = imageName,
         HostCaching = VirtualHardDiskHostCaching.ReadWrite,
         MediaLink = new Uri(string.Format(CultureInfo.InvariantCulture,
             "https://{0}.blob.core.windows.net/vhds/{1}.vhd", storageAccountName, virtualMachineName),
             UriKind.Absolute)
     };
     return vhd;
 }
示例#10
0
        /// <summary>
        /// Creates deployment and virtual machines in destination subscription.
        /// </summary>
        /// <param name="deploymentDetails">Deployment details</param>
        /// <param name="serviceName">Cloud service name</param>        
        private void CreateDeployment(Deployment deploymentDetails, string serviceName)
        {
            string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
            Logger.Info(methodName, ProgressResources.ExecutionStarted, ResourceType.Deployment.ToString(), deploymentDetails.Name);
            Stopwatch swTotalDeploymentWithVMs = new Stopwatch();
            swTotalDeploymentWithVMs.Start();
            if (!deploymentDetails.IsImported)
            {
                //List<Uri> disks = null;
                string containerName;
                using (var client = new ComputeManagementClient(importParameters.SourceSubscriptionSettings.Credentials,
                    importParameters.SourceSubscriptionSettings.ServiceUrl))
                {
                    try
                    {
                        using (var computeClient = new ComputeManagementClient(importParameters.DestinationSubscriptionSettings.Credentials))
                        {
                            for (int virtualMachineNumber = 0; virtualMachineNumber < deploymentDetails.VirtualMachines.Count(); virtualMachineNumber++)
                            {
                                VirtualMachine virtualMachine = deploymentDetails.VirtualMachines[virtualMachineNumber];
                                // Check if virtual machine is already imported, if not create new virtual machine
                                if (!virtualMachine.IsImported)
                                {
                                    string sourceStorageAccountName = virtualMachine.VirtualMachineDetails.OSVirtualHardDisk.MediaLink.Host.Substring(
                                        0, virtualMachine.VirtualMachineDetails.OSVirtualHardDisk.MediaLink.Host.IndexOf('.'));
                                    string accountName = GetDestinationResourceName(ResourceType.StorageAccount, sourceStorageAccountName);
                                    Stopwatch swDeployment = new Stopwatch();
                                    swDeployment.Start();
                                    containerName = virtualMachine.VirtualMachineDetails.OSVirtualHardDisk.MediaLink.Segments[1].Substring(0,
                                        virtualMachine.VirtualMachineDetails.OSVirtualHardDisk.MediaLink.Segments[1].IndexOf('/')); ;

                                    // Set up the Virtual Hard Disk with the OS Disk
                                    var vhd = new OSVirtualHardDisk
                                    {
                                        HostCaching = virtualMachine.VirtualMachineDetails.OSVirtualHardDisk.HostCaching,
                                        //IOType is implicitly determined from the MediaLink. This should not be explicitly specified in the request.
                                        Label = virtualMachine.VirtualMachineDetails.OSVirtualHardDisk.Label,
                                        MediaLink = new Uri(string.Format(CultureInfo.InvariantCulture,
                                            Constants.StorageAccountMediaLink,
                                            accountName, containerName,
                                            virtualMachine.VirtualMachineDetails.OSVirtualHardDisk.MediaLink.Segments.Last()), UriKind.Absolute),
                                        Name = string.Format("{0}{1}", importParameters.DestinationPrefixName,
                                        GetDestinationResourceName(ResourceType.OSDisk, virtualMachine.VirtualMachineDetails.OSVirtualHardDisk.Name,
                                            ResourceType.CloudService, serviceName)),
                                        OperatingSystem = virtualMachine.VirtualMachineDetails.OSVirtualHardDisk.OperatingSystem,
                                        //SourceImageName should be set only when creating the virtual machine from an image. Here we create it from a disk.
                                    };

                                    // Set up the Data Disk
                                    List<DataVirtualHardDisk> dataDisks = new List<DataVirtualHardDisk>();
                                    foreach (var disk in virtualMachine.VirtualMachineDetails.DataVirtualHardDisks)
                                    {
                                        dataDisks.Add(new DataVirtualHardDisk
                                        {
                                            HostCaching = disk.HostCaching,
                                            //IOType is implicitly determined from the MediaLink. This should not be explicitly specified in the request.
                                            Label = disk.Label,
                                            LogicalDiskSizeInGB = disk.LogicalDiskSizeInGB,
                                            LogicalUnitNumber = disk.LogicalUnitNumber,
                                            MediaLink = new Uri(string.Format(CultureInfo.InvariantCulture,
                                                Constants.StorageAccountMediaLink, accountName, containerName,
                                                disk.MediaLink.Segments.Last()), UriKind.Absolute),
                                            Name = string.Format("{0}{1}", importParameters.DestinationPrefixName,
                                                GetDestinationResourceName(ResourceType.HardDisk, disk.Name, ResourceType.CloudService, serviceName)),
                                            SourceMediaLink = new Uri(string.Format(CultureInfo.InvariantCulture,
                                                Constants.StorageAccountMediaLink, accountName, containerName,
                                                disk.MediaLink.Segments.Last()), UriKind.Absolute)
                                        });
                                    };

                                    // Deploy the Virtual Machine
                                    Logger.Info(methodName, string.Format(ProgressResources.ImportVirtualMachineStarted,
                                                      virtualMachine.VirtualMachineDetails.RoleName, deploymentDetails.Name),
                                                      ResourceType.VirtualMachine.ToString(), virtualMachine.VirtualMachineDetails.RoleName);

                                    // For first virtual machine create new deployment
                                    if (virtualMachineNumber == 0)
                                    {
                                        List<Role> roles = new List<Role>();
                                        roles.Add(new Role
                                        {
                                            AvailabilitySetName = virtualMachine.VirtualMachineDetails.AvailabilitySetName,
                                            ConfigurationSets = virtualMachine.VirtualMachineDetails.ConfigurationSets,
                                            DataVirtualHardDisks = dataDisks,
                                            DefaultWinRmCertificateThumbprint = virtualMachine.VirtualMachineDetails.DefaultWinRmCertificateThumbprint,
                                            Label = null, // Label is set automatically.
                                            MediaLocation = virtualMachine.VirtualMachineDetails.MediaLocation,
                                            OSVersion = virtualMachine.VirtualMachineDetails.OSVersion,
                                            OSVirtualHardDisk = vhd,
                                            ProvisionGuestAgent = true,
                                            ResourceExtensionReferences = virtualMachine.VirtualMachineDetails.ResourceExtensionReferences,
                                            RoleName = virtualMachine.VirtualMachineDetails.RoleName,
                                            RoleSize = virtualMachine.VirtualMachineDetails.RoleSize,
                                            RoleType = virtualMachine.VirtualMachineDetails.RoleType,
                                            VMImageName = virtualMachine.VirtualMachineDetails.VMImageName
                                        });

                                        // Create the deployment parameters
                                        var createDeploymentParameters = new VirtualMachineCreateDeploymentParameters
                                        {
                                            DeploymentSlot = DeploymentSlot.Production,
                                            DnsSettings = deploymentDetails.DnsSettings,
                                            Label = deploymentDetails.Name, // Set it to new name instead of old deployment label.
                                            LoadBalancers = deploymentDetails.LoadBalancers,
                                            Name = deploymentDetails.Name,
                                            ReservedIPName = deploymentDetails.ReservedIPName,
                                            Roles = roles,
                                            VirtualNetworkName = deploymentDetails.VirtualNetworkName
                                        };
                                        var deploymentResult = Retry.RetryOperation(() => computeClient.VirtualMachines.CreateDeployment(
                                            serviceName, createDeploymentParameters), (BaseParameters)importParameters, ResourceType.VirtualMachine,
                                            virtualMachine.VirtualMachineDetails.RoleName);

                                        UpdateMedatadaFile(ResourceType.VirtualMachine, virtualMachine.VirtualMachineDetails.RoleName,
                                            parentResourceName: serviceName);

                                    }
                                    // Add virtual machine in existing deployment
                                    else
                                    {
                                        VirtualMachineCreateParameters parameters = new VirtualMachineCreateParameters
                                        {
                                            AvailabilitySetName = virtualMachine.VirtualMachineDetails.AvailabilitySetName,
                                            ConfigurationSets = virtualMachine.VirtualMachineDetails.ConfigurationSets,
                                            DataVirtualHardDisks = dataDisks,
                                            MediaLocation = virtualMachine.VirtualMachineDetails.MediaLocation,
                                            OSVirtualHardDisk = vhd,
                                            ProvisionGuestAgent = true,
                                            ResourceExtensionReferences = virtualMachine.VirtualMachineDetails.ResourceExtensionReferences,
                                            RoleName = virtualMachine.VirtualMachineDetails.RoleName,
                                            RoleSize = virtualMachine.VirtualMachineDetails.RoleSize,
                                            VMImageName = virtualMachine.VirtualMachineDetails.VMImageName
                                        };

                                        Retry.RetryOperation(() => computeClient.VirtualMachines.Create(serviceName, deploymentDetails.Name, parameters),
                                           (BaseParameters)importParameters, ResourceType.VirtualMachine, virtualMachine.VirtualMachineDetails.RoleName,
                                            () => DeleteVirtualMachineIfTaskCancelled(ResourceType.VirtualMachine, serviceName, deploymentDetails.Name, virtualMachine.VirtualMachineDetails.RoleName));

                                        UpdateMedatadaFile(ResourceType.VirtualMachine, virtualMachine.VirtualMachineDetails.RoleName, parentResourceName: serviceName);
                                    }
                                    swDeployment.Stop();
                                    Logger.Info(methodName, string.Format(ProgressResources.ImportVirtualMachineCompleted,
                                                    virtualMachine.VirtualMachineDetails.RoleName, deploymentDetails.Name, swDeployment.Elapsed.Days, swDeployment.Elapsed.Hours,
                                                    swDeployment.Elapsed.Minutes, swDeployment.Elapsed.Seconds),
                                                    ResourceType.VirtualMachine.ToString(), virtualMachine.VirtualMachineDetails.RoleName);

                                    // ShutDown created virtual machine.
                                    computeClient.VirtualMachines.Shutdown(serviceName, deploymentDetails.Name,
                                        virtualMachine.VirtualMachineDetails.RoleName,
                                        new VirtualMachineShutdownParameters { PostShutdownAction = PostShutdownAction.StoppedDeallocated });
                                }
                            }
                            UpdateMedatadaFile(ResourceType.Deployment, deploymentDetails.Name, parentResourceName: serviceName);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(methodName, ex, ResourceType.Deployment.ToString(), deploymentDetails.Name);
                        throw;
                    }
                }
            }
            swTotalDeploymentWithVMs.Stop();
            Logger.Info(methodName, string.Format(ProgressResources.ExecutionCompletedWithTime, swTotalDeploymentWithVMs.Elapsed.Days, swTotalDeploymentWithVMs.Elapsed.Hours,
                swTotalDeploymentWithVMs.Elapsed.Minutes, swTotalDeploymentWithVMs.Elapsed.Seconds), ResourceType.Deployment.ToString(), deploymentDetails.Name);
        }
示例#11
0
        static void Main(string[] args)
        {
            //var token = GetAuthorizationHeader();
            //var credential = new TokenCloudCredentials(
            //  "ed0caab7-c6d4-45e9-9289-c7e5997c9241", token);

            //   CreateVM(credential);
            #region
            var x509Certificate2 = new X509Certificate2(@"D:/aktest.cer");
            CertificateCloudCredentials cer = new CertificateCloudCredentials("ed0caab7-c6d4-45e9-9289-c7e5997c9241", x509Certificate2);
            // CreateResources(credential);
            //var storageClient=CloudContext.Clients.CreateStorageManagementClient(cer);
            //storageClient.StorageAccounts.Create(new StorageAccountCreateParameters
            //{
            //    AccountType= "Standard_LRS",
            //    // GeoReplicationEnabled = false,
            //    Label = "Sample Storage Account",
            //    Location = "East US",
            //    Name = "mbjastorage"
            //});


            var windowsConfigSet = new ConfigurationSet
            {
                ConfigurationSetType =
     ConfigurationSetTypes.WindowsProvisioningConfiguration,
                AdminPassword =
     "******",
                AdminUserName = "******",
                ComputerName = "libraryvm01",
                HostName = string.Format("{0}.cloudapp.net",
     "libraryvm01")
            };
    
            var vmClient = CloudContext.Clients.CreateComputeManagementClient(cer);
            var operatingSystemImageListResult = vmClient.VirtualMachineOSImages.List();
            var imageName =
                    operatingSystemImageListResult.Images.FirstOrDefault(
                      x => x.Label.Contains(
                        "SQL Server 2014 RTM Standard on Windows Server 2012 R2")).Name;

            var networkConfigSet = new ConfigurationSet
            {
                ConfigurationSetType = "NetworkConfiguration",
                InputEndpoints = new List<InputEndpoint>
  {
    new InputEndpoint
    {
      Name = "PowerShell",
      LocalPort = 5986,
      Protocol = "tcp",
      Port = 5986,
    },
    new InputEndpoint
    {
      Name = "Remote Desktop",
      LocalPort = 3389,
      Protocol = "tcp",
      Port = 3389,
    }
  }
            };
            var vhd = new OSVirtualHardDisk
            {
                SourceImageName = imageName,
                HostCaching = VirtualHardDiskHostCaching.ReadWrite,
                MediaLink = new Uri(string.Format(
    "https://{0}.blob.core.windows.net/vhds/{1}.vhd",
      "willshao", imageName))
            };
            var deploymentAttributes = new Role
            {
                RoleName = "libraryvm01",
                RoleSize = VirtualMachineRoleSize.Small,
                RoleType = VirtualMachineRoleType.PersistentVMRole.ToString(),
                OSVirtualHardDisk = vhd,
                ConfigurationSets = new List<ConfigurationSet>
  {
    windowsConfigSet,
    networkConfigSet
  },
                ProvisionGuestAgent = true
            };
            var createDeploymentParameters =
   new VirtualMachineCreateDeploymentParameters
   {
       Name = "libraryvm01",
       Label = "libraryvm01",
       DeploymentSlot = DeploymentSlot.Production,
       Roles = new List<Role> { deploymentAttributes }
   };

            try
            {

            var mymachine=    vmClient.VirtualMachines.Get("javmtest", "javmtest", "javmtest");
       vmClient.VirtualMachines.CreateDeploymentAsync(
       "libraryvm01",
        createDeploymentParameters);
            }
            catch (Exception e)
            { }
            #endregion
            Console.ReadLine();


        }