Azure / GuestConfiguration

PowerShell module for creating, testing, and publishing custom Guest Configuration
MIT License
5 stars 2 forks source link

GuestConfiguration errors out if the generated MOF filename has periods in the filename before the '.mof' #296

Open eehret opened 7 months ago

eehret commented 7 months ago

Details of the scenario you tried and the problem that is occurring

The GuestConfiguration module errors out if the guest configuration package filename specified to New-GuestConfigurationPackage (by the Name parameter) includes periods in the package name. When the Guest Configuration package contains periods in the package name then the MOF file inside of the ZIP also includes periods in the filename, and when attempting to use the package with the Get-GuestConfigurationPackageComplianceStatus command , Guest Configuration mishandles this and tries to find the MOF using the wrong path.

This is particularly problematic because the guidance found here specifically suggests a package naming convention that will lead to users encountering this error condition: https://learn.microsoft.com/en-us/azure/governance/machine-configuration/how-to/create-policy-definition?source=recommendations#policy-lifecycle

Verbose logs showing the problem

Error: DSC document '/home/myaccount/.local/share/powershell/Modules/GuestConfiguration/4.5.0/gcworker/packages/UbuntuServer-20-04-LTS-CISv201-Section1-AuditAndSet-0.1.4/UbuntuServer-20-04-LTS-CISv201-Section1-AuditAndSet-0.1.mof' doesn't exist in assignment package.
Error: Metaconfig document '/home/myaccount/.local/share/powershell/Modules/GuestConfiguration/4.5.0/gcworker/packages/UbuntuServer-20-04-LTS-CISv201-Section1-AuditAndSet-0.1.4/UbuntuServer-20-04-LTS-CISv201-Section1-AuditAndSet-0.1.metaconfig.json' doesn't exist in assignment package.
Error: Failed to Run Consistency for 'UbuntuServer-20-04-LTS-CISv201-Section1-AuditAndSet-0.1.4' Error : Current configuration does not exist. Execute Start-DscConfiguration command with -Path parameter to specify a configuration file and create a current configuration first.

Write-Error: Job 29cd2220-d307-48a9-9123-267071dd52e6 : MIResult: 6 Error Message: Current configuration does not exist. Execute Start-DscConfiguration command with -Path parameter to specify a configuration file and create a current configuration
first. Message ID: OMI:MI_Result:6 Error Category: 0 Error Code: 1 Error Type:

Suggested solution to the issue

It looks like the GuestConfiguration code is making a bad assumption regarding periods being in the filename, and parsing based on that bad assumption. I assume the related code for parsing the path of the MOF needs revising.

The DSC configuration that is used to reproduce the issue (if applicable)

n/a - this issue is not configuration-dependent

The operating system the target node is running

Ubuntu Server 18.04 LTS

Version and build of PowerShell the target node is running

7.3.10 (7.4+ doesn't seem to work with GuestConfiguration, so we have intentionally avoided upgrading)

Version of the module that was used

4.5.0

eehret commented 7 months ago

FYI my workaround for this was to NOT follow the example in this article (https://learn.microsoft.com/en-us/azure/governance/machine-configuration/how-to/create-policy-definition?source=recommendations#policy-lifecycle) and using underscores (_) in the package name instead of periods (.)

eehret commented 7 months ago

Sorry, mistakenly hit the close button.