Поделиться через


Структура ресурса DSC на основе команд

Ресурсы DSC предоставляют стандартизированный интерфейс для управления параметрами системы. Ресурс определяет свойства, которыми можно управлять, и реализует код, необходимый для получения экземпляра ресурса.

Ресурсы DSC на основе команд определяются по крайней мере с двумя файлами:

  1. Манифест ресурса DSC, который сообщает DSC, как взаимодействовать с ресурсом.
  2. Один или несколько исполняемых файлов и их зависимости для управления экземплярами ресурса.

Манифесты ресурсов DSC

Манифесты ресурсов DSC определяются как JSON-файлы. Чтобы DSC распознал JSON-файл в качестве манифеста, файл должен соответствовать следующим критериям:

  1. Файл должен быть обнаруживаемым в переменной PATH среды.
  2. Имя файла должно заканчиваться .dsc.resource.jsonна .

Когда DSC ищет в локальной системе доступные ресурсы DSC на основе команд, он выполняет поиск в каждой папке PATH в для файлов, использующих соглашение об именовании манифеста ресурсов DSC. Затем DSC анализирует каждый из обнаруженных файлов и проверяет их на соответствие схеме JSON манифеста ресурсов DSC.

Если JSON-файл проверяется на соответствие схеме, DSC может использовать ресурс DSC.

Как минимум, в манифесте должно быть определено следующее:

  • Версия схемы JSON манифеста ресурсов DSC, с которым она совместима.
  • Полное имя ресурса, например Microsoft.Windows/Registry. Полный синтаксис имени — <owner>[.<group>][.<area>]/<name>. Компоненты группы и области полного имени позволяют упорядочивать ресурсы по пространствам имен.
  • Как DSC может вызывать команду для получения текущего состояния экземпляра ресурса.
  • Способ проверки экземпляра. Оно может быть одним из следующих.
    • Схема JSON, описывающая экземпляр
    • Команда DSC должна вызвать для получения схемы во время выполнения.
    • Команда для проверки вложенных ресурсов DSC. Этот последний параметр применяется только к ресурсам группы DSC и ресурсам поставщика DSC.

Манифест может при необходимости определить следующее:

  • Как DSC может вызвать команду , чтобы проверить, находится ли экземпляр в нужном состоянии.
  • Как DSC может вызвать команду , чтобы задать экземпляру требуемое состояние.
  • Значение ненулевых кодов выхода, возвращаемых командой .
  • Как DSC может вызывать команду для управления другими ресурсами DSC, если ресурс является ресурсом группы DSC или ресурсом поставщика DSC.
  • Метаданные о ресурсе, например его автор и краткое описание.

Если манифест не определяет, как протестировать экземпляр ресурса, DSC выполняет искусственный тест для экземпляров ресурса. Искусственный тест DSC всегда получает фактическое состояние экземпляра и выполняет строгое сравнение свойств экземпляра с нужным состоянием с учетом регистра. Искусственный тест игнорирует все свойства с префиксом подчеркивания (_) или символом доллара ($). Если какое-либо из свойств не совпадает с заданным требуемым состоянием, DSC сообщает, что экземпляр не соответствует требованиям.

Если манифест не определяет, как задать экземпляр ресурса DSC, DSC не сможет использовать ресурс для принудительного применения требуемого состояния.

Манифесту не нужно указывать один и тот же исполняемый файл для каждой операции. Определение для каждой операции является независимым.

Исполняемые файлы ресурсов DSC

Для выполнения DSC ресурсов DSC на основе команд всегда требуется исполняемый файл. Манифест ресурса DSC не требуется в комплекте с исполняемым файлом. Исполняемым файлом может быть любой исполняемый файл, например двоичное приложение или скрипт оболочки. Ресурс может использовать разные исполняемые файлы для разных операций.

Чтобы DSC использовал исполняемый файл, он должен быть обнаруживаемым в переменной PATH среды. DSC вызывает исполняемый файл один раз для каждой операции, используя код выхода, возвращенный исполняемым файлом, чтобы определить, успешно ли выполнена команда. DSC рассматривает код 0 выхода как успешное завершение, а все остальные коды выхода — как ошибку.

Входные данные

DSC отправляет входные данные в ресурсы DSC на основе команд в виде большого двоичного объекта данных JSON по stdin или в виде набора флагов и значений аргументов. Обработка входных данных определяется для каждой операции в манифесте ресурсов DSC.

Когда DSC отправляет входные данные в формате JSON через stdin, большой двоичный объект данных представляет собой json-представление требуемого состояния экземпляра. Это наиболее надежный вариант для ресурса, так как он позволяет ресурсу поддерживать сложные свойства с вложенными объектами.

Когда DSC отправляет входные данные в качестве аргументов, он создает пару аргументов для каждого из указанных свойств. Первый аргумент — это имя свойства с --префиксом , например --duration. Второй аргумент — это значение свойства. Порядок пар аргументов не гарантируется. Этот метод ввода не поддерживает сложные свойства.

Выходные данные

Исполняемый файл для ресурса DSC на основе команд должен возвращать данные JSON в stdout при вызове DSC. Выходная кодировка должна быть UTF-8. Когда ресурс возвращает состояние экземпляра, DSC проверяет данные JSON на соответствие схеме экземпляра ресурса.

Для ресурсов поставщика DSC DSC ожидает, что исполняемый файл будет проходить через состояния экземпляра для ресурсов, которыми он управляет, в виде одного массива JSON или ряда строк JSON.

Ресурсы DSC на основе команд могут передавать сведения о ведении журнала в DSC, создавая строки JSON в stderr. Каждая запись журнала должна быть объектом JSON, который включает два ключа:

  1. Ключ message определяет удобочитаемую строку для записи журнала.
  2. Ключ level определяет, представляет ли сообщение объект Error, или WarningInformation.

DSC собирает сообщения от ресурсов и отображает их в результатах операции настройки. Когда DSC вызывает ресурс непосредственно за пределами конфигурации, он не собирает сообщения. Вместо этого они просто передаются в stderr.