다음을 통해 공유


DSC 리소스 작성 검사 목록

이 검사 목록은 새 DSC 리소스를 작성할 때 따를 모범 사례 목록입니다.

모듈에 매니페스트가 포함되어 있습니다.

DSC 리소스를 포함하는 모듈에는 모듈 매니페스트(.psd1) 파일이 있어야 합니다. 매니페스트의 DscResourcesToExport 설정은 모든 DSC 리소스의 이름을 나열해야 합니다.

DscResourcesToExport 설정에 포함하지 않는 클래스 기반 DSC 리소스는 cmdlet에서 Get-DscResource 검색할 수 없으며, cmdlet과 함께 Invoke-DscResource 사용할 수 없으며, DSC 구성 작성자는 VS Code에서 DSC 구성을 작성할 때 해당 DSC 리소스에 대한 IntelliSense를 받지 않습니다.

모든 MOF 기반 DSC 리소스에는 스키마 파일이 있습니다.

DSC 리소스에 올바른 구조가 있고 필요한 모든 파일이 포함되어 있는지 확인합니다. 모든 MOF 기반 DSC 리소스에는 schema.mof 파일이 있어야 합니다. 스키마 파일이 없는 MOF 기반 DSC 리소스는 에 의해 Get-DscResource 나열되지 않으며, DSC 구성 작성자는 VS Code에서 DSC 구성을 작성할 때 해당 DSC 리소스에 대한 IntelliSense를 받지 않습니다.

xPSDesiredStateConfiguration 모듈의 일부인 DSC 리소스의 디렉터리 구조 xRemoteFile 는 다음과 같습니다.

xPSDesiredStateConfiguration
    DSCResources
        MSFT_xRemoteFile
            MSFT_xRemoteFile.psm1
            MSFT_xRemoteFile.schema.mof
    Examples
        xRemoteFile_DownloadFile.ps1
    ResourceDesignerScripts
        GenerateXRemoteFileSchema.ps1
    Tests
        ResourceDesignerTests.ps1
    xPSDesiredStateConfiguration.psd1

오류 없이 DSC 리소스 로드

DSC 리소스는 오류 없이 로드되어야 합니다. 확인하려면 명령을 실행하고 Import-Module <resource_module> -Force 오류가 발생하지 않는지 확인합니다.

DSC 리소스가 idempotent임

DSC 리소스는 idempotent여야 합니다. DSC 리소스는 동일한 속성을 사용하여 DSC 리소스의 Set 메서드를 여러 번 호출하고 항상 동일한 결과를 얻을 수 있는 경우 idempotent입니다.

예를 들어 이 매개 변수 해시를 사용하여 PSDscResources 모듈의 DSC 리소스를 Registry 사용하여 레지스트리 키 값의 원하는 상태를 정의합니다.

$DscParameters = @{
    Name       = 'Registry'
    ModuleName = 'PSDscResources'
    Property   = @{
        Key       = 'HKEY_CURRENT_USER\DscExample'
        Ensure    = 'Present'
        Force     = $true
        ValueName = 'Test'
        ValueData = 'Example'
        ValueType = 'String'
    }
}

를 처음 호출 Invoke-DscResource -Method Set @DscParametersDscExample 할 때 레지스트리 키는 테스트 값이 HKEY_CURRENT_USER 로 설정된 Example하이브에 표시됩니다. 향후 호출은 시스템의 상태를 변경해서는 안 됩니다.

리소스가 idempotent인지 확인하려면 직접 또는 를 사용하여 리소스를 Invoke-DscResource테스트할 수 있습니다.

MOF 기반 DSC 리소스를 직접 테스트하려면 다음을 수행합니다.

  1. DSC 리소스의 함수를 Set-TargetResource 실행합니다.
  2. 시스템 상태를 검사하여 원치 않는 설정 없이 원하는 상태인지 확인합니다.
  3. DSC 리소스의 'Set-TargetResource 함수를 다시 실행합니다. 오류를 발생해서는 안 됩니다.
  4. 를 호출 Set-TargetResource 하면 원하는 상태만 예상대로 설정되고 오류 없이 설정되는 것이 만족될 때까지 2~3단계를 반복합니다.

클래스 기반 DSC 리소스를 직접 테스트하려면 다음을 수행합니다.

  1. DSC 리소스 클래스의 새 instance 만들고 변수에 개체로 저장합니다.
  2. 각 속성의 값을 개체의 원하는 상태로 설정합니다.
  3. 개체에서 Set 메서드를 호출합니다.
  4. 시스템 상태를 검사하여 원치 않는 설정 없이 원하는 상태인지 확인합니다.
  5. 개체에서 Set 메서드를 다시 호출합니다. 오류를 발생해서는 안 됩니다.
  6. Set 메서드를 호출하면 원하는 상태만 예상대로 설정되고 오류 없이 설정되는 것이 만족될 때까지 4~5단계를 반복합니다.

를 사용하여 DSC 리소스를 Invoke-DscResource테스트하려면

  1. Set 메서드를 사용하여 를 실행 Invoke-DscResource 합니다.
  2. 시스템 상태를 검사하여 원치 않는 설정 없이 원하는 상태인지 확인합니다.
  3. Set 메서드를 사용하여 를 실행 Invoke-DscResource 합니다.
  4. Set 메서드를 사용하여 를 호출 Invoke-DscResource 하면 원하는 상태만 예상대로 설정되고 오류 없이 설정되는 것이 만족될 때까지 2~3단계를 반복합니다.

테스트 사용자 수정 시나리오

DSC 리소스는 사용자가 DSC 외부에서 수동으로 시스템의 상태를 변경하는 경우에도 예측 가능하게 동작해야 합니다. 다음은 사용자가 시스템을 수정할 때 DSC 리소스의 동작을 확인하기 위해 수행해야 하는 단계입니다.

  1. 원하는 상태가 아닌 시스템으로 시작합니다.
  2. 리소스를 사용하여 실행 Invoke-DscResource -Method Set
  3. 반환 확인 Invoke-DscResource -Method Test$true
  4. 구성된 항목이 원하는 상태가 되도록 설정
  5. 반환 확인 Invoke-DscResource -Method Test$false

다음은 DSC 리소스를 Registry 사용하는 보다 구체적인 예입니다.

  1. 원하는 상태가 아닌 레지스트리 키로 시작합니다.
  2. 원하는 상태 속성으로 실행하고 Invoke-DscResource -Method Test 결과의 InDesiredState 속성이 인지 $false확인합니다.
  3. 필수 속성을 사용하여 실행하고 Invoke-DscResource -Method Get 보고된 상태가 원하는 상태 속성과 일치하지 않는지 확인합니다.
  4. 원하는 상태 속성을 사용하여 를 실행하고 Invoke-DscResource -Method Set 오류가 발생하지 않도록 합니다.
  5. 를 다시 실행하고 Invoke-DscResource -Method Test 결과의 InDesiredState 속성이 true인지 확인합니다.
  6. 를 다시 실행하고 Invoke-DscResource -Method Get 보고된 상태가 원하는 상태 속성과 일치하는지 확인합니다.
  7. 원하는 상태가 되지 않도록 키의 값을 설정합니다.
  8. 를 다시 실행 Invoke-DscResource -Method Get 하여 수정된 상태를 확인합니다.
  9. 를 다시 실행하고 Invoke-DscResource -Method Test false를 반환했는지 확인합니다.

DSC 리소스 함수 및 메서드를 직접 호출

함수를 직접 호출하고 예상대로 작동하는지 확인하여 함수(MOF 기반 DSC 리소스의 경우) 및 Get, SetTest 메서드(클래스 기반 DSC 리소스의 경우)를 테스트 *-TargetResource 해야 합니다.

지원되는 모든 플랫폼에서 호환성 테스트

DSC 리소스는 지원되는 모든 플랫폼 DSC에서 작동해야 합니다. DSC 리소스가 의도적으로 이러한 플랫폼 중 일부에서 작동하지 않는 경우 특정 오류 메시지를 반환합니다. DSC 리소스가 호출하는 cmdlet이 특정 컴퓨터에 있는지 확인합니다.

참고

한 가지 일반적인 테스트 격차는 서버 버전의 Windows에서만 DSC 리소스를 확인하는 것입니다. 종종 DSC 리소스는 클라이언트 SKU에서도 작동하도록 설계되었습니다. DSC 리소스에서 지원되지 않는 경우 클라이언트 SKU 또는 오류에 대한 동작을 테스트해야 합니다.

DSC 리소스를 나열하는 Get-DSCResource

모듈이 설치되면 Get-DscResource cmdlet 출력에 DSC 리소스를 포함해야 합니다.

모듈에 예제가 포함되어 있습니다.

사용자가 DSC 리소스를 사용하는 방법을 이해하는 데 도움이 되는 품질 예제를 만듭니다. 이는 사용자가 샘플 코드를 설명서로 취급하는 경우가 많기 때문에 매우 중요합니다.

먼저 모듈에 포함할 예제를 결정합니다. 적어도 DSC 리소스에 대한 가장 중요한 사용 사례를 다루어야 합니다.

모듈에 엔드투엔드 시나리오를 위해 함께 작동해야 하는 여러 DSC 리소스가 포함된 경우 먼저 기본 엔드투엔드 예제를 작성합니다.

초기 예제를 기본 및 짧게 작성합니다. 새 VHD 만들기와 같이 관리가 가능한 작은 청크로 DSC 리소스를 시작하는 방법을 보여 줍니다. 이후 예제를 작성하여 이전 예제(예: VHD에서 VM 만들기)를 빌드하고 고급 기능(예: 동적 메모리를 사용하여 VM 만들기)을 표시합니다.

모든 예제에 대해 다음을 수행합니다.

  • 용도 및 매개 변수를 사용하는 방법을 설명하는 간단한 설명을 작성합니다.
  • 모든 예제가 의도하지 않은 오류 또는 경고 없이 실행되고 원하는 상태를 적용하는지 확인합니다.

오류 메시지는 이해할 수 있으며 사용자가 문제를 해결하는 데 도움이 됩니다.

좋은 오류 메시지는 다음을 수행해야 합니다.

  • 존재: 오류 메시지가 없으면 사용자가 문제가 발생했는지 조차 알 수 없습니다.
  • 사람이 읽을 수 있어야 합니다. 모호한 오류 코드가 없습니다.
  • 정확하게 설명: 문제를 정확하게 설명합니다.
  • 건설적: 문제를 해결하는 방법에 대한 조언을 제공합니다.
  • 예의 바른 태도: 사용자를 블레임 않거나 기분을 나쁘게 만들지 마십시오.

종단 간 시나리오에서 오류가 함수(MOF 기반 DSC 리소스의 경우) 또는 메서드(클래스 기반 DSC 리소스의 경우)를 직접 실행할 때 반환되는 것과 다를 수 있으므로 오류를 확인해야 합니다.

DSC 리소스 구현에 하드 코딩된 경로가 포함되어 있지 않습니다.

특히 와 같은 en-US언어를 가정하는 경우 DSC 리소스 구현에 하드 코딩된 경로가 없는지 확인합니다. 가능한 경우 시스템 환경 변수를 사용합니다.

예를 들어 다음 식을 사용하는 대신

$tempPath = "C:\Users\kkaczma\AppData\Local\Temp\MyResource"
$programFilesPath = "C:\Program Files (x86)"

쓰기:

$tempPath = Join-Path $env:temp "MyResource"
$programFilesPath = ${env:ProgramFiles(x86)}

DSC 리소스 구현에 사용자 정보가 포함되어 있지 않습니다.

DSC 리소스는 코드에 개인 식별 정보를 포함해서는 안 됩니다. 코드에 메일 이름, 계정 정보 또는 사람 이름이 없는지 확인합니다.

유효하고 잘못된 자격 증명으로 테스트됨

DSC 리소스가 자격 증명을 매개 변수로 사용하는 경우:

  • 계정에 액세스 권한이 없는 경우 DSC 리소스가 예상대로 작동하는지 확인합니다.
  • DSC 리소스가 가져오기, 설정 및 테스트에 지정된 자격 증명과 함께 작동하는지 확인합니다.
  • DSC 리소스가 공유에 액세스하는 경우 다음과 같이 지원해야 하는 모든 변형을 테스트합니다.
    • 표준 Windows 공유
    • DFS 공유
    • SAMBA 공유(Linux를 지원하려는 경우)

DSC 리소스에는 대화형 입력이 필요하지 않습니다.

DSC 리소스는 입력하라는 메시지를 표시해서는 안 됩니다. 대신 필요한 모든 값은 DSC 리소스의 속성이어야 합니다. 예를 들어 를 사용하여 Get-Credential사용자에게 메시지를 표시하는 대신 DSC 리소스 에 자격 증명 속성을 추가합니다.

철저히 테스트

이 검사 목록에는 테스트해야 하는 항목과 누락된 항목이 포함되어 있습니다. 또한 DSC 리소스에 대한 기능 및 종단 간 테스트 사례를 작성하여 예상 동작을 확인해야 합니다. 부정 테스트 사례를 사용하고 잘못된 입력을 테스트해야 합니다.