Мы разрабатываем систему развертывания на базе Windows DSC для нашего собственного .NET-приложения. В рамках текущей инструкции по установке есть шаг для редактирования файла .NET machine.config. (Да, я знаю, что это плохо для нашего приложения, но на данный момент я не могу это исправить).Управление конфигурационными файлами с помощью Powershell DSC
Мне интересно, как другие люди управляют «общими» файлами конфигурации с 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.co nfig Тогда я бы сказал что-то вроде:
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, что является «правильным» способом сделать это?
Любые советы были бы весьма полезными.