Пример #1
0
        private List <T> CreateVMContextList <T>(string serviceName, NSM.DeploymentGetResponse deployment, List <NSM.Role> vmRoles)
            where T : PVM.PersistentVMRoleContext, new()
        {
            var roleContexts = new List <T>();

            foreach (var vm in vmRoles)
            {
                var roleInstance = deployment.RoleInstances.FirstOrDefault(
                    r => r.RoleName == vm.RoleName);

                if (roleInstance == null)
                {
                    WriteWarning(
                        string.Format(Resources.RoleInstanceCanNotBeFoundWithName, vm.RoleName));
                }

                roleContexts.Add(
                    CreateVMContext <T>(
                        serviceName,
                        vm,
                        roleInstance,
                        deployment));
            }

            return(roleContexts);
        }
Пример #2
0
        private List <T> GetVMContextList <T>(string serviceName, NSM.DeploymentGetResponse deployment)
            where T : PVM.PersistentVMRoleContext, new()
        {
            var vmRoles = new List <NSM.Role>(deployment.Roles.Where(
                                                  r => string.IsNullOrEmpty(Name) ||
                                                  r.RoleName.Equals(Name, StringComparison.InvariantCultureIgnoreCase)));

            return(GetVMContextList <T>(serviceName, deployment, vmRoles));
        }
Пример #3
0
        protected override void ExecuteCommand()
        {
            ServiceManagementProfile.Initialize();
            base.ExecuteCommand();

            if (string.IsNullOrEmpty(ServiceName))
            {
                var roleContexts = new List <PVM.PersistentVMRoleListContext>();

                foreach (var service in this.ComputeClient.HostedServices.List())
                {
                    NSM.DeploymentGetResponse deployment = null;

                    try
                    {
                        deployment = this.ComputeClient.Deployments.GetBySlot(
                            service.ServiceName,
                            NSM.DeploymentSlot.Production);
                    }
                    catch (CloudException e)
                    {
                        if (e.Response.StatusCode != HttpStatusCode.NotFound)
                        {
                            throw;
                        }
                    }

                    if (deployment != null)
                    {
                        roleContexts.AddRange(
                            GetVMContextList <PVM.PersistentVMRoleListContext>(
                                service.ServiceName,
                                deployment).AsEnumerable());
                    }
                }

                WriteObject(roleContexts, true);
            }
            else if (CurrentDeploymentNewSM != null)
            {
                var roleContexts = GetVMContextList <PVM.PersistentVMRoleContext>(
                    ServiceName,
                    CurrentDeploymentNewSM);

                WriteObject(roleContexts, true);
            }
            else
            {
                WriteWarning(
                    string.Format(Resources.NoDeploymentFoundInService, ServiceName));
            }
        }
Пример #4
0
        private List <T> GetVMContextList <T>(string serviceName, NSM.DeploymentGetResponse deployment)
            where T : PVM.PersistentVMRoleContext, new()
        {
            Func <NSM.Role, bool> typeMatched =
                r => string.Equals(r.RoleType, PersistentVMRoleStr, StringComparison.OrdinalIgnoreCase);

            Func <NSM.Role, bool> nameMatched =
                r => string.IsNullOrEmpty(this.Name) || r.RoleName.Equals(this.Name, StringComparison.InvariantCultureIgnoreCase);

            var vmRoles = new List <NSM.Role>(deployment.Roles.Where(r => typeMatched(r) && nameMatched(r)));

            return(CreateVMContextList <T>(serviceName, deployment, vmRoles));
        }
        /// <summary>
        /// Walks through hosted services and returns back the ResourceExtensionStatus reported by Azure guest agent
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private List <NSM.ResourceExtensionStatus> GetResourceExtensionStatusList(VirtualMachineSqlServerExtensionContext context)
        {
            List <NSM.ResourceExtensionStatus> extensionStatusList = new List <NSM.ResourceExtensionStatus>();

            // List all hosted services
            WriteVerboseWithTimestamp("Listing hosted services...");
            NSM.HostedServiceListResponse response = this.ComputeClient.HostedServices.List();
            WriteVerboseWithTimestamp("Listing hosted services completed.");

            foreach (var service in response)
            {
                NSM.DeploymentGetResponse deployment = null;

                try
                {
                    deployment = this.ComputeClient.Deployments.GetBySlot(
                        service.ServiceName,
                        NSM.DeploymentSlot.Production);
                }
                catch (CloudException e)
                {
                    if (e.Response.StatusCode != HttpStatusCode.NotFound)
                    {
                        throw;
                    }
                }

                if (deployment != null)
                {
                    // Enumerate Role instances , check if role name exists
                    foreach (NSM.RoleInstance ri in deployment.RoleInstances)
                    {
                        if (ri.RoleName.Equals(context.RoleName, System.StringComparison.InvariantCulture))
                        {
                            WriteVerboseWithTimestamp("Found Role Instance:" + context.RoleName);
                            extensionStatusList = new List <NSM.ResourceExtensionStatus>(ri.ResourceExtensionStatusList);
                            return(extensionStatusList);
                        }
                    }
                }
            }

            if (extensionStatusList.Count == 0)
            {
                WriteVerboseWithTimestamp("Could not locate role instance for role name:" + context.RoleName);
            }

            return(extensionStatusList);
        }
        private NSM.DeploymentGetResponse CreateDeploymentGetResponse(string serviceName, IList <NSM.Role> roles,
                                                                      IList <NSM.RoleInstance> roleInstances)
        {
            var response = new NSM.DeploymentGetResponse
            {
                Name                 = serviceName,
                Configuration        = "config",
                Status               = Management.Compute.Models.DeploymentStatus.Starting,
                PersistentVMDowntime = new NSM.PersistentVMDowntime
                {
                    EndTime   = DateTime.Now,
                    StartTime = DateTime.Now,
                    Status    = "",
                },
                LastModifiedTime = DateTime.Now,
                Roles            = roles,
                RoleInstances    = roleInstances
            };

            return(response);
        }
        /// <summary>
        /// Retrieves dsc extension status for all virtual machine's in a cloud service or a given virtual machine from the deployment object
        /// </summary>
        /// <param name="deployment">Deployment that exists in the service</param>
        /// <returns></returns>
        internal List <VirtualMachineDscExtensionStatusContext> GetVirtualMachineDscStatusContextList(NSM.DeploymentGetResponse deployment)
        {
            var vmDscStatusContexts = new List <VirtualMachineDscExtensionStatusContext>();

            //filter the deployment info for a vm, if specified.
            var vmRoles = new List <NSM.Role>(deployment.Roles.Where(
                                                  r => (string.IsNullOrEmpty(Name) && string.IsNullOrEmpty(VmName)) ||
                                                  r.RoleName.Equals(Name, StringComparison.InvariantCultureIgnoreCase) ||
                                                  r.RoleName.Equals(VmName, StringComparison.InvariantCultureIgnoreCase)));

            foreach (var vm in vmRoles)
            {
                var roleInstance = deployment.RoleInstances.FirstOrDefault(
                    r => r.RoleName == vm.RoleName);

                if (roleInstance == null)
                {
                    WriteWarning(
                        string.Format(CultureInfo.CurrentUICulture, Resources.RoleInstanceCanNotBeFoundWithName, vm.RoleName));
                }

                var vmDscStatusContext = CreateDscStatusContext(
                    vm,
                    roleInstance);

                if (vmDscStatusContext != null)
                {
                    vmDscStatusContexts.Add(vmDscStatusContext);
                }
            }

            return(vmDscStatusContexts);
        }
Пример #8
0
        private T CreateVMContext <T>(string serviceName, NSM.Role vmRole, NSM.RoleInstance roleInstance, NSM.DeploymentGetResponse deployment)
            where T : PVM.PersistentVMRoleContext, new()
        {
            var vmContext = new T
            {
                ServiceName         = serviceName,
                DeploymentName      = deployment == null ? string.Empty : deployment.Name,
                DNSName             = deployment == null || deployment.Uri == null ? string.Empty : deployment.Uri.AbsoluteUri,
                Name                = vmRole == null ? string.Empty : vmRole.RoleName,
                AvailabilitySetName = vmRole == null ? string.Empty : vmRole.AvailabilitySetName,
                Label               = vmRole == null ? string.Empty : vmRole.Label,
                InstanceSize        = vmRole == null ? string.Empty : vmRole.RoleSize,
                InstanceStatus      = roleInstance == null ? string.Empty : roleInstance.InstanceStatus,
                IpAddress           = roleInstance == null ? string.Empty : roleInstance.IPAddress,
                PublicIPAddress     = roleInstance == null ? string.Empty
                                            : roleInstance.PublicIPs == null || !roleInstance.PublicIPs.Any() ? string.Empty
                                            : roleInstance.PublicIPs.First().Address,
                PublicIPName = roleInstance == null ? string.Empty
                                            : roleInstance.PublicIPs == null || !roleInstance.PublicIPs.Any() ? string.Empty
                                            : !string.IsNullOrEmpty(roleInstance.PublicIPs.First().Name) ? roleInstance.PublicIPs.First().Name
                                            : PersistentVMHelper.GetPublicIPName(vmRole),
                PublicIPDomainNameLabel = roleInstance == null ? string.Empty
                                            : roleInstance.PublicIPs == null || !roleInstance.PublicIPs.Any() ? string.Empty
                                            : roleInstance.PublicIPs.First().DomainNameLabel,
                PublicIPFqdns = roleInstance == null ? new List <string>()
                                            : roleInstance.PublicIPs == null || !roleInstance.PublicIPs.Any() ? new List <string>()
                                            : roleInstance.PublicIPs.First().Fqdns.ToList(),
                InstanceStateDetails = roleInstance == null ? string.Empty : roleInstance.InstanceStateDetails,
                PowerState           = roleInstance == null ? string.Empty : roleInstance.PowerState.ToString(),
                HostName             = roleInstance == null ? string.Empty : roleInstance.HostName,
                InstanceErrorCode    = roleInstance == null ? string.Empty : roleInstance.InstanceErrorCode,
                InstanceName         = roleInstance == null ? string.Empty : roleInstance.InstanceName,
                InstanceFaultDomain  = roleInstance == null ? string.Empty : roleInstance.InstanceFaultDomain.HasValue
                                                                                  ? roleInstance.InstanceFaultDomain.Value.ToString(CultureInfo.InvariantCulture) : null,
                InstanceUpgradeDomain = roleInstance == null ? string.Empty : roleInstance.InstanceUpgradeDomain.HasValue
                                                                                  ? roleInstance.InstanceUpgradeDomain.Value.ToString(CultureInfo.InvariantCulture) : null,
                Status                            = roleInstance == null ? string.Empty : roleInstance.InstanceStatus,
                GuestAgentStatus                  = roleInstance == null ? null : ServiceManagementProfile.Mapper.Map <PVM.GuestAgentStatus>(roleInstance.GuestAgentStatus),
                MaintenanceStatus                 = roleInstance == null ? null : ServiceManagementProfile.Mapper.Map <PVM.MaintenanceStatus>(roleInstance.MaintenanceStatus),
                ResourceExtensionStatusList       = roleInstance == null ? null : ServiceManagementProfile.Mapper.Map <List <PVM.ResourceExtensionStatus> >(roleInstance.ResourceExtensionStatusList),
                OperationId                       = deployment == null ? string.Empty : deployment.RequestId,
                OperationStatus                   = deployment == null ? string.Empty : deployment.StatusCode.ToString(),
                OperationDescription              = CommandRuntime.ToString(),
                NetworkInterfaces                 = roleInstance == null ? null : ServiceManagementProfile.Mapper.Map <PVM.NetworkInterfaceList>(roleInstance.NetworkInterfaces),
                VirtualNetworkName                = deployment == null ? null : deployment.VirtualNetworkName,
                RemoteAccessCertificateThumbprint = roleInstance == null ? string.Empty : roleInstance.RemoteAccessCertificateThumbprint,
                VM = new PVM.PersistentVM
                {
                    AvailabilitySetName = vmRole == null ? string.Empty : vmRole.AvailabilitySetName,
                    Label    = vmRole == null ? string.Empty : vmRole.Label,
                    RoleName = vmRole == null ? string.Empty : vmRole.RoleName,
                    RoleSize = vmRole == null ? string.Empty : vmRole.RoleSize,
                    RoleType = vmRole == null ? string.Empty : vmRole.RoleType,
                    DefaultWinRmCertificateThumbprint = vmRole == null ? string.Empty : vmRole.DefaultWinRmCertificateThumbprint,
                    ProvisionGuestAgent         = vmRole == null ? null : vmRole.ProvisionGuestAgent,
                    ResourceExtensionReferences = vmRole == null ? null : ServiceManagementProfile.Mapper.Map <PVM.ResourceExtensionReferenceList>(vmRole.ResourceExtensionReferences),
                    DataVirtualHardDisks        = vmRole == null ? null : ServiceManagementProfile.Mapper.Map <Collection <PVM.DataVirtualHardDisk> >(vmRole.DataVirtualHardDisks),
                    OSVirtualHardDisk           = vmRole == null ? null : ServiceManagementProfile.Mapper.Map <PVM.OSVirtualHardDisk>(vmRole.OSVirtualHardDisk),
                    ConfigurationSets           = vmRole == null ? null : PersistentVMHelper.MapConfigurationSets(vmRole.ConfigurationSets),
                    DebugSettings  = (vmRole == null || vmRole.DebugSettings == null) ? null : ServiceManagementProfile.Mapper.Map <PVM.DebugSettings>(vmRole.DebugSettings),
                    MigrationState = vmRole == null ? string.Empty : vmRole.MigrationState,
                    LicenseType    = vmRole == null ? string.Empty : vmRole.LicenseType
                }
            };

            return(vmContext);
        }
        private NSM.DeploymentGetResponse CreateDeploymentGetResponse(string serviceName, IList<NSM.Role> roles,
            IList<NSM.RoleInstance> roleInstances)
        {
            var response = new NSM.DeploymentGetResponse
            {
                Name = serviceName,
                Configuration = "config",
                Status = Management.Compute.Models.DeploymentStatus.Starting,
                PersistentVMDowntime = new NSM.PersistentVMDowntime
                {
                    EndTime = DateTime.Now,
                    StartTime = DateTime.Now,
                    Status = "",
                },
                LastModifiedTime = DateTime.Now,
                Roles = roles,
                RoleInstances = roleInstances
            };

            return response;
        }