Управление общими файлами конфигурации с помощью Powershell DSC

Мы разрабатываем систему развертывания на базе Windows DSC для нашего собственного приложения.NET. В рамках текущей инструкции по установке есть шаг для редактирования файла.NET machine.config. (Да, я знаю, это плохо, что наше приложение требует этого, но сейчас я не могу это исправить).

Мне интересно, как другие люди управляют "общими" файлами конфигурации с помощью DSC? Я не вижу никакого способа сделать это красиво, но был бы рад показать, как.

Единственный способ, о котором я могу подумать, - это создать пару пользовательских модулей DSC для управления частями файлов INI и XML-файлов конфигурации.

Я предлагаю модули со следующей спецификацией:

xIniSetting [string] #ResourceName
{
    IniFile = [string]
    Group = [string]
    Key = [string]
    [ Value = [string] ] # Only applicable if Ensure = Present
    [ Ensure = [string] { Absent | Present } ] 
    [ DependsOn = [string[]] ]
}

а также

xXmlConfigElement [string] #ResourceName
{
    ConfigFile = [string]
    ParentSelector = [string] # XPath Selector of element parent
    ElementSelector = [string] # XPath Selector of element itself
    [ ElementXml = [string] ] # Only applicable if Ensure = Present
    [ Ensure = [string] { Absent | Present } ] 
    [ DependsOn = [string[]] ]
}

(Примечание: я не знаю ни одного способа получить произвольный селектор XPath и декомпозировать его, чтобы получить селектор для родительского элемента, когда цель может не существовать, поэтому мне пришлось указать как родительский, так и целевой элементы)

Чтобы добавить группу пользовательских настроек в machine.config, я бы объявил что-то вроде следующего:

xXmlConfigElement CompanySettingsDefinition
{
    ConfigFile = "$env:windir\ \Microsoft.NET\Framework64\v4.0.30319\Config\machine.config"
    ParentSelector = "//configuration/configSections"
    ElementSelector = "//configuration/configSections/section[@name='CompanySettings']"
    ElementXml = "<section name=\"CompanySettings\" type=\"System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />"
    Ensure = Present
}

xXmlConfigElement CompanySettingsConfiguration
{
    ConfigFile = "$env:windir\ \Microsoft.NET\Framework64\v4.0.30319\Config\machine.config"
    ParentSelector = "//configuration"
    ElementSelector = "//configuration/CompanySettings"
    ElementXml = "<CompanySettings><add key=\"SettingsKey\" value=\"SettingsValue\" /></CompanySettings>"
    Ensure = Present
}

Является ли создание этих модулей "лучшим" подходом для решения этой проблемы? Я что-то упустил из-за DSC, который является "правильным" способом сделать это?

Любой совет будет принята с благодарностью.

2 ответа

Это именно то, что я сделал в наших сценариях.

Если бы у вас была более сложная логика для того, что входит в конфигурацию, я бы создал ресурс, который инкапсулирует эту логику.

Когда дело касается файлов.config, не существует единого решения, подходящего для всех. Вы проверили xWebAdministration модуль в ресурсном комплекте? Оно имеет xWebConfigKeyValue это может быть использовано для обновления файлов конфигурации приложения. Если это не решит проблему, которую вы рассматриваете, вы можете написать собственный ресурс в тех же строках.

Другие вопросы по тегам