private ResourceExtensionReference MakeItem(
            string publisherName,
            string extensionName,
            string version)
        {
            ResourceExtensionReference extension = null;

            if (this.computeClient != null)
            {
                var reference = this.computeClient.VirtualMachineExtensions.ListVersions(
                    publisherName,
                    extensionName).FirstOrDefault();

                if (reference != null)
                {
                    extension = MakeItem(
                        reference.Publisher,
                        reference.Name,
                        reference.Name,
                        version);
                }
            }

            return(extension);
        }
コード例 #2
0
 protected string GetConfiguration(
     ResourceExtensionReference extensionRef,
     string typeStr)
 {
     return(extensionRef == null ? string.Empty : GetConfiguration(
                extensionRef.ResourceExtensionParameterValues,
                typeStr));
 }
コード例 #3
0
        protected ResourceExtensionReference NewResourceExtension()
        {
            var extensionRef = new ResourceExtensionReference();

            extensionRef.Name      = this.ExtensionName;
            extensionRef.Publisher = this.Publisher;
            extensionRef.Version   = this.Version;
            extensionRef.State     = IsLegacyExtension() ? null :
                                     this.Uninstall.IsPresent ? ReferenceUninstallStateStr :
                                     this.Disable.IsPresent ? ReferenceDisableStateStr : ReferenceEnableStateStr;
            extensionRef.ResourceExtensionParameterValues = new ResourceExtensionParameterValueList();

            if (!string.IsNullOrEmpty(this.ReferenceName))
            {
                extensionRef.ReferenceName = this.ReferenceName;
            }
            else
            {
                extensionRef.ReferenceName = extensionRef.Name;
            }

            if (!string.IsNullOrEmpty(this.PublicConfigPath))
            {
                this.PublicConfiguration = FileUtilities.DataStore.ReadFileAsText(this.PublicConfigPath);
            }

            if (!string.IsNullOrEmpty(this.PublicConfiguration))
            {
                extensionRef.ResourceExtensionParameterValues.Add(
                    new ResourceExtensionParameterValue
                {
                    Key = !string.IsNullOrEmpty(this.PublicConfigKey) ? this.PublicConfigKey
                            : ExtensionName + (IsLegacyExtension() ? string.Empty : PublicTypeStr) + "ConfigParameter",
                    Type  = IsLegacyExtension() ? null : PublicTypeStr,
                    Value = PublicConfiguration
                });
            }

            if (!string.IsNullOrEmpty(this.PrivateConfigPath))
            {
                this.PrivateConfiguration = FileUtilities.DataStore.ReadFileAsText(this.PrivateConfigPath);
            }

            if (!string.IsNullOrEmpty(this.PrivateConfiguration))
            {
                extensionRef.ResourceExtensionParameterValues.Add(
                    new ResourceExtensionParameterValue
                {
                    Key = !string.IsNullOrEmpty(this.PrivateConfigKey) ? this.PrivateConfigKey
                            : ExtensionName + (IsLegacyExtension() ? string.Empty : PrivateTypeStr) + "ConfigParameter",
                    Type        = IsLegacyExtension() ? null : PrivateTypeStr,
                    SecureValue = SecureStringHelper.GetSecureString(PrivateConfiguration)
                });
            }

            return(extensionRef);
        }
コード例 #4
0
        protected ResourceExtensionReference NewResourceExtension()
        {
            var extensionRef = new ResourceExtensionReference();

            extensionRef.Name      = this.ExtensionName;
            extensionRef.Publisher = this.Publisher;
            extensionRef.Version   = this.Version;
            extensionRef.State     = IsLegacyExtension() ? null :
                                     this.Disable.IsPresent ? ReferenceDisableStr : ReferenceEnableStr;
            extensionRef.ResourceExtensionParameterValues = new ResourceExtensionParameterValueList();

            if (!string.IsNullOrEmpty(this.ReferenceName))
            {
                extensionRef.ReferenceName = this.ReferenceName;
            }
            else
            {
                extensionRef.ReferenceName = extensionRef.Name;
            }

            if (!string.IsNullOrEmpty(this.PublicConfigPath))
            {
                this.PublicConfiguration = File.ReadAllText(this.PublicConfigPath);
            }

            if (!string.IsNullOrEmpty(this.PublicConfiguration))
            {
                extensionRef.ResourceExtensionParameterValues.Add(
                    new ResourceExtensionParameterValue
                {
                    Key   = ExtensionName + (IsLegacyExtension() ? string.Empty : PublicTypeStr) + "ConfigParameter",
                    Type  = IsLegacyExtension() ? null : PublicTypeStr,
                    Value = PublicConfiguration
                });
            }

            if (!string.IsNullOrEmpty(this.PrivateConfigPath))
            {
                this.PrivateConfiguration = File.ReadAllText(this.PrivateConfigPath);
            }

            if (!string.IsNullOrEmpty(this.PrivateConfiguration))
            {
                extensionRef.ResourceExtensionParameterValues.Add(
                    new ResourceExtensionParameterValue
                {
                    Key   = ExtensionName + (IsLegacyExtension() ? string.Empty : PrivateTypeStr) + "ConfigParameter",
                    Type  = IsLegacyExtension() ? null : PrivateTypeStr,
                    Value = PrivateConfiguration
                });
            }

            return(extensionRef);
        }
 protected virtual void GetExtensionValues(ResourceExtensionReference extensionRef)
 {
     if (extensionRef != null && extensionRef.ResourceExtensionParameterValues != null)
     {
         Disable = string.Equals(extensionRef.State, ReferenceDisableStateStr);
         GetExtensionValues(extensionRef.ResourceExtensionParameterValues);
     }
     else
     {
         Disable = extensionRef == null ? true : string.Equals(extensionRef.State, ReferenceDisableStateStr);
     }
 }
コード例 #6
0
 protected virtual void GetExtensionValues(ResourceExtensionReference extensionRef)
 {
     if (extensionRef != null && extensionRef.ResourceExtensionParameterValues != null)
     {
         Disable = string.Equals(extensionRef.State, ReferenceDisableStateStr);
         GetExtensionValues(extensionRef.ResourceExtensionParameterValues);
     }
     else
     {
         Disable = extensionRef == null ? true : string.Equals(extensionRef.State, ReferenceDisableStateStr);
     }
 }
コード例 #7
0
        protected ResourceExtensionReference GetPredicateExtension()
        {
            ResourceExtensionReference extensionRef = null;

            if (!ResourceExtensionReferences.Any())
            {
                WriteWarning(Resources.ResourceExtensionReferencesIsNullOrEmpty);
            }
            else
            {
                extensionRef = ResourceExtensionReferences.FirstOrDefault(ExtensionPredicate);
            }

            return(extensionRef);
        }
コード例 #8
0
        protected override void ValidateParameters()
        {
            base.ValidateParameters();
            ExtensionName = DiagnosticsExtensionType;
            Publisher     = DiagnosticsExtensionNamespace;

            // If the user didn't specify an extension reference name and the input VM already has a diagnostics extension,
            // reuse its reference name
            if (string.IsNullOrEmpty(ReferenceName))
            {
                ResourceExtensionReference diagnosticsExtension = ResourceExtensionReferences.FirstOrDefault(ExtensionPredicate);
                if (diagnosticsExtension != null)
                {
                    ReferenceName = diagnosticsExtension.ReferenceName;
                }
            }
        }
コード例 #9
0
        public static Role AddExtension(this Role role, ResourceExtensionReference reference)
        {
            if (role.ResourceExtensionReferences == null)
            {
                role.ResourceExtensionReferences = new List <ResourceExtensionReference>();
            }

            var existingExtension = role.ResourceExtensionReferences.FirstOrDefault(_ => _.ReferenceName == reference.ReferenceName);

            if (existingExtension != null)
            {
                role.ResourceExtensionReferences.Remove(existingExtension);
            }

            role.ResourceExtensionReferences.Add(reference);

            return(role);
        }
        public PersistentVM GetInstance()
        {
            ResourceExtensionReference extensionRef = null;
            extensionRef = new ResourceExtensionReference()
            {
                Name = "ChefClient",
                Publisher = "Chef.Bootstrap.WindowsAzure,",
                Version = "11.0"
            };

            var resourceList = new ResourceExtensionReferenceList();
            resourceList.Add(extensionRef);

            return new PersistentVM()
            {
                ResourceExtensionReferences = resourceList,
                OSVirtualHardDisk = new OSVirtualHardDisk() { OS = "Windows" }
            };
        }
コード例 #11
0
 protected void GetVMAccessExtensionValues(ResourceExtensionReference extensionRef)
 {
     if (extensionRef != null && extensionRef.ResourceExtensionParameterValues != null)
     {
         if (IsLegacyExtension(extensionRef.Name, extensionRef.Publisher, extensionRef.Version))
         {
             GetVMAccessExtensionLegacyValues(extensionRef.ResourceExtensionParameterValues);
         }
         else
         {
             Disable = string.Equals(extensionRef.State, ReferenceDisableStr);
             GetVMAccessExtensionValues(extensionRef.ResourceExtensionParameterValues);
         }
     }
     else
     {
         Disable = extensionRef == null ? true : string.Equals(extensionRef.State, ReferenceDisableStr);
     }
 }
        public PersistentVM GetInstance()
        {
            ResourceExtensionReference extensionRef = null;

            extensionRef = new ResourceExtensionReference()
            {
                Name      = "ChefClient",
                Publisher = "Chef.Bootstrap.WindowsAzure,",
                Version   = "11.0"
            };

            var resourceList = new ResourceExtensionReferenceList();

            resourceList.Add(extensionRef);

            return(new PersistentVM()
            {
                ResourceExtensionReferences = resourceList,
                OSVirtualHardDisk = new OSVirtualHardDisk()
                {
                    OS = "Windows"
                }
            });
        }
コード例 #13
0
        /// <summary>
        /// Get the SQL Extension's context
        /// </summary>
        /// <returns></returns>
        private VirtualMachineSqlServerExtensionContext GetExtensionContext(ResourceExtensionReference r)
        {
            VirtualMachineSqlServerExtensionContext context = new VirtualMachineSqlServerExtensionContext
            {
                ExtensionName = r.Name,
                Publisher = r.Publisher,
                ReferenceName = r.ReferenceName,
                Version = r.Version,
                State = r.State,
                PublicConfiguration = PublicConfiguration,
                PrivateConfiguration = SecureStringHelper.GetSecureString(PrivateConfiguration),
                RoleName = VM.GetInstance().RoleName,
            };

            // gather extension status messages
            List<string> statusMessageList = new List<string>();

            List<NSM.ResourceExtensionStatus> extensionStatusList = this.GetResourceExtensionStatusList(context);

            // enumerate over extension status list and gather status for autopatching and autobackup
            // Note: valid reference to an extension status list is returned by GetResourceExtensionStatusList()
            foreach (NSM.ResourceExtensionStatus res in extensionStatusList)
            {
                // Extension handler name  in format publisher.ReferenceName
                string extensionHandlerName = string.Format(CultureInfo.InvariantCulture,
                    "{0}.{1}",
                    r.Publisher,
                    r.ReferenceName);

                // skip all non-sql extensions
                if (!res.HandlerName.Equals(extensionHandlerName, System.StringComparison.InvariantCulture))
                {
                    continue;
                }

                if (null != res.ExtensionSettingStatus)
                {
                    context.SubStatusList = res.ExtensionSettingStatus.SubStatusList;

                    foreach (NSM.ResourceExtensionSubStatus status in res.ExtensionSettingStatus.SubStatusList)
                    {
                        if (null != status.FormattedMessage)
                        {
                            string formattedMessage = status.FormattedMessage.Message;

                            // get current auto patching and auto backup config from extension status message
                            if (status.Name.Equals(AutoPatchingStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.AutoPatchingSettings = DeSerializeAutoPatchingSettings(status.Name, formattedMessage);
                            }

                            if (status.Name.Equals(AutoBackupStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.AutoBackupSettings = DeSerializeAutoBackupSettings(status.Name, formattedMessage);
                            }

                            statusMessageList.Add(formattedMessage);
                        }
                    }
                }
            }

            context.StatusMessages = statusMessageList;
            return context;
        }
 protected void GetVMAccessExtensionValues(ResourceExtensionReference extensionRef)
 {
     if (extensionRef != null && extensionRef.ResourceExtensionParameterValues != null)
     {
         if (IsLegacyExtension(extensionRef.Name, extensionRef.Publisher, extensionRef.Version))
         {
             GetVMAccessExtensionLegacyValues(extensionRef.ResourceExtensionParameterValues);
         }
         else
         {
             Disable = string.Equals(extensionRef.State, ReferenceDisableStateStr);
             GetVMAccessExtensionValues(extensionRef.ResourceExtensionParameterValues);
         }
     }
     else
     {
         Disable = extensionRef == null ? true : string.Equals(extensionRef.State, ReferenceDisableStateStr);
     }
 }
コード例 #15
0
        /// <summary>
        /// Get the SQL Extension's context
        /// </summary>
        /// <returns></returns>
        private VirtualMachineSqlServerExtensionContext GetExtensionContext(ResourceExtensionReference r)
        {
            string extensionName = VirtualMachineSqlServerExtensionCmdletBase.ExtensionPublishedNamespace + "."
                               + VirtualMachineSqlServerExtensionCmdletBase.ExtensionPublishedName;

            VirtualMachineSqlServerExtensionContext context = new VirtualMachineSqlServerExtensionContext
            {
                ExtensionName = r.Name,
                Publisher = r.Publisher,
                ReferenceName = r.ReferenceName,
                Version = r.Version,
                State = r.State,
                PublicConfiguration = PublicConfiguration,
                PrivateConfiguration = SecureStringHelper.GetSecureString(PrivateConfiguration),
                RoleName = VM.GetInstance().RoleName,
            };

            // gather extension status messages
            List<string> statusMessageList = new List<string>();

            List<NSM.ResourceExtensionStatus> extensionStatusList = this.GetResourceExtensionStatusList(context);

            // enumerate over extension status list and gather status for autopatching and autobackup
            // Note: valid reference to an extension status list is returned by GetResourceExtensionStatusList()
            foreach (NSM.ResourceExtensionStatus res in extensionStatusList)
            {
                // Expected ReferenceName = "Microsoft.SqlServer.Management.SqlIaaSAgent"
                if (!res.HandlerName.Equals(extensionName, System.StringComparison.InvariantCulture))
                {
                    // skip all non-sql extensions
                    continue;
                }

                WriteVerboseWithTimestamp("Found SQL Extension:" + r.ReferenceName);

                if (null != res.ExtensionSettingStatus)
                {
                    context.SubStatusList = res.ExtensionSettingStatus.SubStatusList;

                    foreach (NSM.ResourceExtensionSubStatus status in res.ExtensionSettingStatus.SubStatusList)
                    {
                        if (null != status.FormattedMessage)
                        {
                            string formattedMessage = status.FormattedMessage.Message;

                            // get current auto patching and auto backup config from extension status message
                            if (status.Name.Equals(AutoPatchingStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.AutoPatchingSettings = DeSerializeAutoPatchingSettings(status.Name, formattedMessage);
                            }
                            else if (status.Name.Equals(AutoBackupStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.AutoBackupSettings = DeSerializeAutoBackupSettings(status.Name, formattedMessage);
                            }
                            else if (status.Name.Equals(KeyVaultCredentialStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.KeyVaultCredentialSettings = DeSerializeKeyVaultCredentialSettings(status.Name, formattedMessage);
                            }

                            statusMessageList.Add(formattedMessage);
                        }
                    }
                }
            }

            context.StatusMessages = statusMessageList;
            return context;
        }
コード例 #16
0
 protected string GetConfiguration(
     ResourceExtensionReference extensionRef,
     string typeStr)
 {
     return extensionRef == null ? string.Empty : GetConfiguration(
         extensionRef.ResourceExtensionParameterValues,
         typeStr);
 }
コード例 #17
0
        protected ResourceExtensionReference NewResourceExtension()
        {
            var extensionRef = new ResourceExtensionReference();

            extensionRef.Name = this.ExtensionName;
            extensionRef.Publisher = this.Publisher;
            extensionRef.Version = this.Version;
            extensionRef.State = IsLegacyExtension() ? null :
                              this.Disable.IsPresent ? ReferenceDisableStr : ReferenceEnableStr;
            extensionRef.ResourceExtensionParameterValues = new ResourceExtensionParameterValueList();

            if (!string.IsNullOrEmpty(this.ReferenceName))
            {
                extensionRef.ReferenceName = this.ReferenceName;
            }
            else
            {
                extensionRef.ReferenceName = extensionRef.Name;
            }

            if (!string.IsNullOrEmpty(this.PublicConfigPath))
            {
                this.PublicConfiguration = File.ReadAllText(this.PublicConfigPath);
            }

            if (!string.IsNullOrEmpty(this.PublicConfiguration))
            {
                extensionRef.ResourceExtensionParameterValues.Add(
                    new ResourceExtensionParameterValue
                    {
                        Key = ExtensionName + (IsLegacyExtension() ? string.Empty : PublicTypeStr) + "ConfigParameter",
                        Type = IsLegacyExtension() ? null : PublicTypeStr,
                        Value = PublicConfiguration
                    });
            }

            if (!string.IsNullOrEmpty(this.PrivateConfigPath))
            {
                this.PrivateConfiguration = File.ReadAllText(this.PrivateConfigPath);
            }

            if (!string.IsNullOrEmpty(this.PrivateConfiguration))
            {
                extensionRef.ResourceExtensionParameterValues.Add(
                    new ResourceExtensionParameterValue
                    {
                        Key =  ExtensionName + (IsLegacyExtension() ? string.Empty : PrivateTypeStr) + "ConfigParameter",
                        Type = IsLegacyExtension() ? null : PrivateTypeStr,
                        Value = PrivateConfiguration
                    });
            }

            return extensionRef;
        }
コード例 #18
0
        /// <summary>
        /// Get the SQL Extension's context
        /// </summary>
        /// <returns></returns>
        private VirtualMachineSqlServerExtensionContext GetExtensionContext(ResourceExtensionReference r)
        {
            VirtualMachineSqlServerExtensionContext context = new VirtualMachineSqlServerExtensionContext
            {
                ExtensionName        = r.Name,
                Publisher            = r.Publisher,
                ReferenceName        = r.ReferenceName,
                Version              = r.Version,
                State                = r.State,
                PublicConfiguration  = PublicConfiguration,
                PrivateConfiguration = SecureStringHelper.GetSecureString(PrivateConfiguration),
                RoleName             = VM.GetInstance().RoleName,
            };

            // gather extension status messages
            List <string> statusMessageList = new List <string>();

            List <NSM.ResourceExtensionStatus> extensionStatusList = this.GetResourceExtensionStatusList(context);

            // enumerate over extension status list and gather status for autopatching and autobackup
            // Note: valid reference to an extension status list is returned by GetResourceExtensionStatusList()
            foreach (NSM.ResourceExtensionStatus res in extensionStatusList)
            {
                // Extension handler name  in format publisher.ReferenceName
                string extensionHandlerName = string.Format(CultureInfo.InvariantCulture,
                                                            "{0}.{1}",
                                                            r.Publisher,
                                                            r.ReferenceName);

                // skip all non-sql extensions
                if (!res.HandlerName.Equals(extensionHandlerName, System.StringComparison.InvariantCulture))
                {
                    continue;
                }

                if (null != res.ExtensionSettingStatus)
                {
                    context.SubStatusList = res.ExtensionSettingStatus.SubStatusList;

                    foreach (NSM.ResourceExtensionSubStatus status in res.ExtensionSettingStatus.SubStatusList)
                    {
                        if (null != status.FormattedMessage)
                        {
                            string formattedMessage = status.FormattedMessage.Message;

                            // get current auto patching and auto backup config from extension status message
                            if (status.Name.Equals(AutoPatchingStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.AutoPatchingSettings = DeSerializeAutoPatchingSettings(status.Name, formattedMessage);
                            }

                            if (status.Name.Equals(AutoBackupStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.AutoBackupSettings = DeSerializeAutoBackupSettings(status.Name, formattedMessage);
                            }

                            statusMessageList.Add(formattedMessage);
                        }
                    }
                }
            }

            context.StatusMessages = statusMessageList;
            return(context);
        }
コード例 #19
0
        /// <summary>
        /// Get the SQL Extension's context
        /// </summary>
        /// <returns></returns>
        private VirtualMachineSqlServerExtensionContext GetExtensionContext(ResourceExtensionReference r)
        {
            string extensionName = VirtualMachineSqlServerExtensionCmdletBase.ExtensionPublishedNamespace + "."
                                   + VirtualMachineSqlServerExtensionCmdletBase.ExtensionPublishedName;

            VirtualMachineSqlServerExtensionContext context = new VirtualMachineSqlServerExtensionContext
            {
                ExtensionName        = r.Name,
                Publisher            = r.Publisher,
                ReferenceName        = r.ReferenceName,
                Version              = r.Version,
                State                = r.State,
                PublicConfiguration  = PublicConfiguration,
                PrivateConfiguration = SecureStringHelper.GetSecureString(PrivateConfiguration),
                RoleName             = VM.GetInstance().RoleName,
            };

            // gather extension status messages
            List <string> statusMessageList = new List <string>();

            List <NSM.ResourceExtensionStatus> extensionStatusList = this.GetResourceExtensionStatusList(context);

            // enumerate over extension status list and gather status for autopatching and autobackup
            // Note: valid reference to an extension status list is returned by GetResourceExtensionStatusList()
            foreach (NSM.ResourceExtensionStatus res in extensionStatusList)
            {
                // Expected ReferenceName = "Microsoft.SqlServer.Management.SqlIaaSAgent"
                if (!res.HandlerName.Equals(extensionName, System.StringComparison.InvariantCulture))
                {
                    // skip all non-sql extensions
                    continue;
                }

                WriteVerboseWithTimestamp("Found SQL Extension:" + r.ReferenceName);

                if (null != res.ExtensionSettingStatus)
                {
                    context.SubStatusList   = res.ExtensionSettingStatus.SubStatusList;
                    context.ExtensionStatus = res.Status;

                    // Gather status messages because
                    // #$ISSUE- extension.Statuses is always null, follow up with Azure team
                    foreach (NSM.ResourceExtensionSubStatus status in res.ExtensionSettingStatus.SubStatusList)
                    {
                        if (null != status.FormattedMessage)
                        {
                            statusMessageList.Add(status.FormattedMessage.Message);
                        }
                    }
                    context.StatusMessages = statusMessageList;

                    // Extract sql configuration information from one of the sub statuses
                    if (context.SubStatusList == null ||
                        context.SubStatusList.FirstOrDefault(s =>
                                                             s.Name.Equals(SqlConfigurationStatusMessageName, StringComparison.InvariantCultureIgnoreCase)) == null)
                    {
                        WriteWarning(
                            String.Format(
                                CultureInfo.CurrentUICulture,
                                Properties.Resources.AzureVMSqlServerSqlConfigurationNotFound,
                                context.SubStatusList));

                        continue;
                    }

                    string sqlConfiguration = context.SubStatusList.First(s => s.Name.Equals(SqlConfigurationStatusMessageName, StringComparison.InvariantCultureIgnoreCase)).FormattedMessage.Message;

                    try
                    {
                        AzureVMSqlServerConfiguration settings = JsonConvert.DeserializeObject <AzureVMSqlServerConfiguration>(sqlConfiguration);

                        context.AutoBackupSettings = settings.AutoBackup == null ? null : new AutoBackupSettings()
                        {
                            Enable                = settings.AutoBackup.Enable,
                            EnableEncryption      = settings.AutoBackup.EnableEncryption,
                            RetentionPeriod       = settings.AutoBackup.RetentionPeriod,
                            StorageUrl            = settings.AutoBackup.StorageAccountUrl,
                            BackupSystemDbs       = settings.AutoBackup.BackupSystemDbs,
                            BackupScheduleType    = string.IsNullOrEmpty(settings.AutoBackup.BackupScheduleType) ? null : AutoBackupScheduleTypeMap[settings.AutoBackup.BackupScheduleType],
                            FullBackupFrequency   = settings.AutoBackup.FullBackupFrequency,
                            FullBackupStartTime   = settings.AutoBackup.FullBackupStartTime,
                            FullBackupWindowHours = settings.AutoBackup.FullBackupWindowHours,
                            LogBackupFrequency    = settings.AutoBackup.LogBackupFrequency
                        };

                        context.AutoPatchingSettings = settings.AutoPatching == null ? null : new AutoPatchingSettings()
                        {
                            Enable    = settings.AutoPatching.Enable,
                            DayOfWeek = settings.AutoPatching.DayOfWeek,
                            MaintenanceWindowDuration     = settings.AutoPatching.MaintenanceWindowDuration,
                            MaintenanceWindowStartingHour = settings.AutoPatching.MaintenanceWindowStartingHour,
                            PatchCategory = string.IsNullOrEmpty(settings.AutoPatching.PatchCategory) ? null : AutoPatchingCategoryMap[settings.AutoPatching.PatchCategory]
                        };

                        context.KeyVaultCredentialSettings = settings.AzureKeyVault == null ? null : new KeyVaultCredentialSettings()
                        {
                            Enable      = settings.AzureKeyVault.Enable,
                            Credentials = settings.AzureKeyVault.CredentialsList
                        };

                        context.AutoTelemetrySettings = settings.AutoTelemetryReport == null ? null : new AutoTelemetrySettings()
                        {
                            Region = settings.AutoTelemetryReport.Location,
                        };
                    }
                    catch (JsonException)
                    {
                        WriteWarning(
                            String.Format(
                                CultureInfo.CurrentUICulture,
                                Properties.Resources.AzureVMSqlServerWrongConfigFormat,
                                sqlConfiguration));
                    }
                }
            }

            return(context);
        }
コード例 #20
0
        /// <summary>
        /// Get the SQL Extension's context
        /// </summary>
        /// <returns></returns>
        private VirtualMachineSqlServerExtensionContext GetExtensionContext(ResourceExtensionReference r)
        {
            string extensionName = VirtualMachineSqlServerExtensionCmdletBase.ExtensionPublishedNamespace + "."
                                   + VirtualMachineSqlServerExtensionCmdletBase.ExtensionPublishedName;

            VirtualMachineSqlServerExtensionContext context = new VirtualMachineSqlServerExtensionContext
            {
                ExtensionName        = r.Name,
                Publisher            = r.Publisher,
                ReferenceName        = r.ReferenceName,
                Version              = r.Version,
                State                = r.State,
                PublicConfiguration  = PublicConfiguration,
                PrivateConfiguration = SecureStringHelper.GetSecureString(PrivateConfiguration),
                RoleName             = VM.GetInstance().RoleName,
            };

            // gather extension status messages
            List <string> statusMessageList = new List <string>();

            List <NSM.ResourceExtensionStatus> extensionStatusList = this.GetResourceExtensionStatusList(context);

            // enumerate over extension status list and gather status for autopatching and autobackup
            // Note: valid reference to an extension status list is returned by GetResourceExtensionStatusList()
            foreach (NSM.ResourceExtensionStatus res in extensionStatusList)
            {
                // Expected ReferenceName = "Microsoft.SqlServer.Management.SqlIaaSAgent"
                if (!res.HandlerName.Equals(extensionName, System.StringComparison.InvariantCulture))
                {
                    // skip all non-sql extensions
                    continue;
                }

                WriteVerboseWithTimestamp("Found SQL Extension:" + r.ReferenceName);

                if (null != res.ExtensionSettingStatus)
                {
                    context.SubStatusList = res.ExtensionSettingStatus.SubStatusList;

                    foreach (NSM.ResourceExtensionSubStatus status in res.ExtensionSettingStatus.SubStatusList)
                    {
                        if (null != status.FormattedMessage)
                        {
                            string formattedMessage = status.FormattedMessage.Message;

                            // get current auto patching and auto backup config from extension status message
                            if (status.Name.Equals(AutoPatchingStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.AutoPatchingSettings = DeSerializeAutoPatchingSettings(status.Name, formattedMessage);
                            }
                            else if (status.Name.Equals(AutoBackupStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.AutoBackupSettings = DeSerializeAutoBackupSettings(status.Name, formattedMessage);
                            }
                            else if (status.Name.Equals(KeyVaultCredentialStatusMessageName, System.StringComparison.InvariantCulture))
                            {
                                context.KeyVaultCredentialSettings = DeSerializeKeyVaultCredentialSettings(status.Name, formattedMessage);
                            }

                            statusMessageList.Add(formattedMessage);
                        }
                    }
                }
            }

            context.StatusMessages = statusMessageList;
            return(context);
        }
コード例 #21
0
        protected ResourceExtensionReference NewResourceExtension()
        {
            var extensionRef = new ResourceExtensionReference();

            extensionRef.Name = this.ExtensionName;
            extensionRef.Publisher = this.Publisher;
            extensionRef.Version = this.Version;
            extensionRef.State = IsLegacyExtension() ? null :
                this.Uninstall.IsPresent ? ReferenceUninstallStateStr :
                this.Disable.IsPresent ? ReferenceDisableStateStr : ReferenceEnableStateStr;
            extensionRef.ResourceExtensionParameterValues = new ResourceExtensionParameterValueList();

            if (!string.IsNullOrEmpty(this.ReferenceName))
            {
                extensionRef.ReferenceName = this.ReferenceName;
            }
            else
            {
                extensionRef.ReferenceName = extensionRef.Name;
            }

            if (!string.IsNullOrEmpty(this.PublicConfigPath))
            {
                this.PublicConfiguration = FileUtilities.DataStore.ReadFileAsText(this.PublicConfigPath);
            }

            if (!string.IsNullOrEmpty(this.PublicConfiguration))
            {
                extensionRef.ResourceExtensionParameterValues.Add(
                    new ResourceExtensionParameterValue
                    {
                        Key = !string.IsNullOrEmpty(this.PublicConfigKey) ? this.PublicConfigKey
                            : ExtensionName + (IsLegacyExtension() ? string.Empty : PublicTypeStr) + "ConfigParameter",
                        Type = IsLegacyExtension() ? null : PublicTypeStr,
                        Value = PublicConfiguration
                    });
            }

            if (!string.IsNullOrEmpty(this.PrivateConfigPath))
            {
                this.PrivateConfiguration = FileUtilities.DataStore.ReadFileAsText(this.PrivateConfigPath);
            }

            if (!string.IsNullOrEmpty(this.PrivateConfiguration))
            {
                extensionRef.ResourceExtensionParameterValues.Add(
                    new ResourceExtensionParameterValue
                    {
                        Key = !string.IsNullOrEmpty(this.PrivateConfigKey) ? this.PrivateConfigKey
                            : ExtensionName + (IsLegacyExtension() ? string.Empty : PrivateTypeStr) + "ConfigParameter",
                        Type = IsLegacyExtension() ? null : PrivateTypeStr,
                        SecureValue = SecureStringHelper.GetSecureString(PrivateConfiguration)
                    });
            }

            return extensionRef;
        }