2015-03-14 5 views
1

Мы разрабатываем систему развертывания на базе 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, что является «правильным» способом сделать это?

Любые советы были бы весьма полезными.

ответ

0

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

0

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

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