dsc
Version information
This version is compatible with:
- Puppet Enterprise 2018.1.x, 2017.3.x, 2017.2.x, 2017.1.x, 2016.5.x, 2016.4.x
- Puppet >= 4.7.0 < 6.0.0
Start using this module
Add this module to your Puppetfile:
mod 'virtualdesktopdevops-dsc', '1.6.0'
Learn more about managing modules with a PuppetfileDocumentation
dsc
Table of Contents
- Using DSC Resources with Puppet
- Handling Reboots with DSC
- Installing Packages with DSC
- Using Credentials
- Setting Registry Values
- Adding or Removing Windows Features
- Website Installation Example
Description
The Puppet dsc module manages Windows PowerShell DSC (Desired State Configuration) resources.
This module generates Puppet types based on DSC Resources MOF (Managed Object Format) schema files.
In this version, the following DSC Resources are already built and ready for use:
- All base DSC resources found in PowerShell 5 (WMF 5.0).
- All DSC resources found in the Microsoft PowerShell DSC Resource Kit
Windows System Prerequisites
- PowerShell 5, which is included in Windows Management Framework 5.0.
- Windows 2003 is not supported.
Setup
puppet module install puppetlabs-dsc
See known issues for troubleshooting setup.
Usage
Using DSC Resources with Puppet
You can use a DSC Resource by prefixing each DSC Resource name and parameter with 'dsc_' and lowercasing the values.
So a DSC resource specified in PowerShell...
WindowsFeature IIS {
Ensure = 'present'
Name = 'Web-Server'
}
...would look like this in Puppet:
dsc_windowsfeature {'IIS':
dsc_ensure => 'present',
dsc_name => 'Web-Server',
}
All DSC Resource names and parameters have to be in lowercase, for example: dsc_windowsfeature
or dsc_name
.
You can use either ensure =>
(Puppet's ensure
) or dsc_ensure =>
(DSC's Ensure
) in your manifests for Puppet DSC resource types. If you use both in a Puppet DSC resource, dsc_ensure
overrides the value in ensure
, so the value for ensure
is essentially ignored.
We recommend that you use dsc_ensure
instead of ensure
, as it is a closer match for converting the DSC properties to Puppet DSC resources. It also overrides ensure
, so there is less confusion if both are accidentally included.
Note: While you can use either
ensure =>
(Puppet'sensure
) ordsc_ensure =>
(DSC'sEnsure
) in your manifests, there is currently a known issue whereensure => absent
reports success but does nothing. See MODULES-2966 for details. Until this issue is resolved, we recommend usingdsc_ensure
exclusively.
Handling Reboots with DSC
Add the following reboot
resource to your manifest. It must have the name dsc_reboot
for the dsc
module to find and use it.
reboot { 'dsc_reboot' :
message => 'DSC has requested a reboot',
when => 'pending'
}
Installing Packages with DSC
Install MSIs or EXEs with DSC using the Puppet type dsc_package
, which maps to the Package
DSC Resource.
dsc_package{'installpython'
dsc_ensure => 'Present',
dsc_name => 'Python 2.7.10',
dsc_productid => 'E2B51919-207A-43EB-AE78-733F9C6797C2'
dsc_path => 'C:\\python.msi',
}
The Package
DSC Resource requires the following information to install an MSI:
- ProductName: The
Name
of product being installed. - ProductId: The
ProductCode
property of the MSI, which is a unique identifier for the particular product release, represented as a GUID string. For more information see the MSDN ProductCode property documentation page.
You can obtain this information in a variety of ways.
- Use a tool such as Orca to open the MSI file and inspect the
Name
andProductCode
. - Install the product on a test system, and inspect the
Name
andProductCode
in the Windows Add/Remove Programs Control Panel. - Use a script to query the MSI file for the
Name
andProductCode
, as in the example PowerShell script below, which was adapted from Stack Overflow.
function Get-MsiDatabaseInfo{
param ([IO.FileInfo]$FilePath)
$productName = Invoke-MSIQuery -FilePath $filePath.FullName -Query "SELECT Value FROM Property WHERE Property = 'ProductName'"
$productCode = Invoke-MSIQuery -FilePath $filePath.FullName -Query "SELECT Value FROM Property WHERE Property = 'ProductCode'"
return [PSCustomObject]@{
FullName = $FilePath.FullName
ProductName = ([string]$productName).TrimStart()
ProductCode = ([string]$productCode).Replace("{","").Replace("}","").TrimStart()
}
}
function Invoke-MSIQuery{
param($FilePath, $Query)
try{
$windowsInstaller = New-Object -com WindowsInstaller.Installer
$database = $windowsInstaller.GetType().InvokeMember("OpenDatabase", "InvokeMethod", $Null, $windowsInstaller, @($FilePath, 0))
}catch{
throw "Failed to open MSI file. The error was: {0}." -f $_
}
try{
$View = $database.GetType().InvokeMember("OpenView", "InvokeMethod", $Null, $database, ($query))
$View.GetType().InvokeMember("Execute", "InvokeMethod", $Null, $View, $Null)
$record = $View.GetType().InvokeMember("Fetch", "InvokeMethod", $Null, $View, $Null)
$property = $record.GetType().InvokeMember("StringData", "GetProperty", $Null, $record, 1)
$View.GetType().InvokeMember("Close", "InvokeMethod", $Null, $View, $Null)
return $property
}catch{
throw "Failed to read MSI file. The error was: {0}." -f $_
}
}
Using Hashes
Supply a hash to any parameter that accepts PowerShell hashes, and Puppet handles creating the appropriate values for you.
dsc_example_resource { 'examplefoo':
dsc_ensure => present,
dsc_hash_parameter => {
'key1' => 'value1',
'key2' => 'value2'
},
}
Using Credentials
DSC uses MSFT_Credential
objects to pass credentials to DSC Resources. Supply a hash to any credential
parameter, and Puppet handles creating the credential
object for you.
Optionally use the Puppet Sensitive type to ensure logs and reports redact the password.
dsc_user { 'jane-doe':
dsc_username => 'jane-doe',
dsc_description => 'Jane Doe user',
dsc_ensure => present,
dsc_password => {
'user' => 'jane-doe',
'password' => Sensitive('jane-password')
},
dsc_passwordneverexpires => false,
dsc_disabled => true,
}
Setting Registry Values
Creating and modifying Registry keys and values is done with the dsc_registry
Puppet type which maps to the Registry
DSC Resource.
Registry Example: Simple
Set simple values by specifying key-value pairs.
dsc_registry {'registry_test':
dsc_ensure => 'Present'
dsc_key => 'HKEY_LOCAL_MACHINE\SOFTWARE\ExampleKey'
dsc_valuename => 'TestValue'
dsc_valuedata => 'TestData'
}
Registry Example: Binary
The 'Binary' data type expects hexadecimal in a single string.
dsc_registry {'registry_test':
dsc_ensure => 'Present',
dsc_key => 'HKEY_LOCAL_MACHINE\SOFTWARE\TestKey',
dsc_valuename => 'TestBinaryValue',
dsc_valuedata => 'BEEF',
dsc_valuetype => 'Binary',
}
Registry Example: Dword and Qword
The 'Dword' and 'Qword' data types expect signed integer values, as opposed to hexadecimal or unsigned.
dsc_registry {'registry_test':
dsc_ensure => 'Present',
dsc_key => 'HKEY_LOCAL_MACHINE\SOFTWARE\TestKey',
dsc_valuename => 'TestDwordValue',
dsc_valuedata => '-2147483648',
dsc_valuetype => 'Dword',
}
Note: DSC Resources are executed under the SYSTEM context by default, which means you are unable to access any user level Registry key without providing alternate credentials.
Adding or Removing Windows Features
You can add or remove Windows Features using Puppet type dsc_windowsfeature
which maps to the WindowsFeature
DSC Resource.
Add a Windows Feature
dsc_windowsfeature {'featureexample':
dsc_ensure = 'present'
dsc_name = 'Web-Server'
}
Remove a Windows Feature
dsc_windowsfeature {'featureexample':
dsc_ensure = 'absent'
dsc_name = 'Web-Server'
}
Finding Windows Feature Names
You can find the name to use when adding or removing Windows Features by executing the Get-WindowsFeature
cmdlet and using the Name
property.
[PS]> Get-WindowsFeature
Website Installation Example
An end-to-end example installation of a test website.
class fourthcoffee(
$websitename = 'FourthCoffee',
$zipname = 'FourthCoffeeWebSiteContent.zip',
$sourcerepo = 'https://github.com/msutter/fourthcoffee/raw/master',
$destinationpath = 'C:\inetpub\FourthCoffee',
$defaultwebsitepath = 'C:\inetpub\wwwroot',
$zippath = 'C:\tmp'
){
$zipuri = "${sourcerepo}/${zipname}"
$zipfile = "${zippath}\\${zipname}"
# Install the IIS role
dsc_windowsfeature {'IIS':
dsc_ensure => 'present',
dsc_name => 'Web-Server',
} ->
# Install the ASP .NET 4.5 role
dsc_windowsfeature {'AspNet45':
dsc_ensure => 'present',
dsc_name => 'Web-Asp-Net45',
} ->
# Stop an existing website (set up in Sample_xWebsite_Default)
dsc_xwebsite {'Stop DefaultSite':
dsc_ensure => 'present',
dsc_name => 'Default Web Site',
dsc_state => 'Stopped',
dsc_physicalpath => $defaultwebsitepath,
} ->
# Create tmp folder
dsc_file {'tmp folder':
dsc_ensure => 'present',
dsc_type => 'Directory',
dsc_destinationpath => $zippath,
} ->
# Download the site content
dsc_xremotefile {'Download WebContent Zip':
dsc_destinationpath => $zipfile,
dsc_uri => $zipuri,
} ->
# Extract the website content
dsc_archive {'Unzip and Copy the WebContent':
dsc_ensure => 'present',
dsc_path => $zipfile,
dsc_destination => $destinationpath,
} ->
# Create a new website
dsc_xwebsite {'BackeryWebSite':
dsc_ensure => 'present',
dsc_name => $websitename,
dsc_state => 'Started',
dsc_physicalpath => $destinationpath,
}
}
As you can see, you can mix and match DSC resources with common Puppet resources. All Puppet metaparameters are also supported.
Reference
Types
A comprehensive list of all types included in the dsc module is available in the types document. This list maps each Puppet resource (for example, dsc_xcertreq
) to the corresponding DSC resource.
Because types are built from the source code of each DSC Resources MOF schema files, the name of the DSC resource in the types document links to a local copy of that resource code (in this case, xCertReq
), so that you can see how the code is applied to your system.
Where available, a link to the external GitHub repo of each resource is also included. The DSC resources are third-party resources that may or may not be documented in their repositories. Available DSC resources and parameters are subject to change.
Limitations
-
DSC Composite Resources are not supported.
-
DSC requires PowerShell
Execution Policy
for theLocalMachine
scope to be set to a less restrictive setting thanRestricted
. If you see the error below, see MODULES-2500 for more information.Error: /Stage[main]/Main/Dsc_xgroup[testgroup]: Could not evaluate: Importing module MSFT_xGroupResource failed with error - File C:\Program Files\WindowsPowerShell\Modules\PuppetVendoredModules\xPSDesiredStateConfiguration\DscResources\MSFT_xGroupR esource\MSFT_xGroupResource.psm1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
-
You cannot use forward slashes for the MSI
Path
property for thePackage
DSC Resource. The underlying implementation does not accept forward slashes instead of backward slashes in paths, and it throws a misleading error that it could not find a Package with the Name and ProductId provided. MODULES-2486 has more examples and information on this subject. -
dsc_ensure
overrides and ignores the value inensure
if both are present in a Puppet DSC resource. See Using DSC Resources with Puppet. -
Use of this module with the 3.8.x x86 version of Puppet is highly discouraged, though supported. Normally, this module employs a technique to dramatically improve performance by reusing a PowerShell process to execute DSC related commands. However, due to the Ruby 1.9.3 runtime used with the 3.8.x x86 version of Puppet, this technique must be disabled, resulting in at least a 2x slowdown.
Known Issues
- The DSC Local Configuration Manager (LCM)
RefreshMode
must be set to eitherPush
orDisabled
for the Puppetdsc
module to function. The default value forRefreshMode
in WMF 5.0 and WMF 5.1 isPush
— there is no action needed on your part. Changing the value is only needed if theRefreshMode
has been set to any value other thanPush
. The Puppetdsc
module uses theInvoke-DscResource
cmdlet to invoke DSC Resources of the target machine. If theRefreshMode
is set toPull
, DSC Resources will only run from a DSC Pull Server — in this setting DSC does not allow any DSC Resources to be run interactively on the host.
-
The
WaitFor*
type of DSC Resources may not work with this module. These DSC Resources use sleeps, timers, or locking to 'wait' for other resources to be in a specified state. These waits would 'pause' a Puppet run for an amount of time that varies between DSC Resource implementations, which may cause unintended problems in the Puppet run. Puppet cannot test all possible interactions from theseWaitFor*
DSC Resources, and does not support them at this time. -
The
dsc_log
resource might not appear to work. The "Log" resource writes events to the 'Microsoft-Windows-Desired State Configuration/Analytic' event log, which is disabled by default. -
You might have issues if you attempt to use
dsc_ensure => absent
withdsc_service
with services that are not running.When setting resources to absent, you might normally specify a minimal statement such as:
dsc_service{'disable_foo': dsc_ensure => absent, dsc_name => 'foo' }
However, due to the way the Service DSC Resource sets its defaults, if the service is not currently running, the above statement erroneously reports that the service is already absent. To work around this, specify that
State => 'Stopped'
as well asEnsure => absent'
. The following example works:dsc_service{'disable_foo': dsc_ensure => absent, dsc_name => 'foo', dsc_state => 'stopped' }
MODULES-2512 has more details.
-
You might have issues attempting to use
dsc_ensure => absent
withdsc_xservice
with services that are already not present. To work around this problem, always specify the path to the executable for the service when specifyingabsent
. MODULES-2512 has more details. The following example works:dsc_xservice{'disable_foo': dsc_ensure => absent, dsc_name => 'foo', dsc_path => 'c:\\Program Files\\Foo\\bin\\foo.exe' }
-
Use
ensure
instead ofdsc_ensure
-ensure => absent
will report success while doing nothing - see MODULES-2966 for details. Also see Using DSC Resources with Puppet. -
When installing the module on Windows you might run into an issue regarding long file names (LFN) due to the long paths of the generated schema files. If you install your module on a Linux master, and then use plugin sync you will likely not see this issue. If you are attempting to install the module on a Windows machine using
puppet module install puppetlabs-dsc
you may run into an error that looks similar to the following:Error: No such file or directory @ rb_sysopen - C:/ProgramData/PuppetLabs/puppet/cache/puppet-module/cache/tmp-unpacker20150713-...mof Error: Try 'puppet help module install' for usage
For Puppet 4.2.2+ (and 3.8.2) we've decreased the possibility of the issue occurring based on the fixes in PUP-4854. A complete fix is plannd in a future version of Puppet that incorporates PUP-4866.
If you are affected by this issue:
- Use the
--module_working_dir
parameter to set a different temporary directory which has a smaller length, for example;puppet module install puppetlabs-dsc --module_working_dir C:\Windows\Temp
- Download the
.tar.gz
from the Forge and usepuppet module install
using the downloaded file, rather than directly installing from the Forge.
- Use the
-
Windows Server 2003 is not supported. If this module is present on the master, it breaks Windows 2003 agents.
When installed on a Puppet master to the default
production
environment, this module causes pluginsync to fail on Windows 2003 agents because of an issue with LFN (long file names). To work around this issue, host your Windows 2003 nodes on a Puppet environment that is separate fromproduction
and that does not have the DSC module installed. -
--noop
mode,puppet resource
and property change notifications are currently not implemented - see MODULES-2270 for details. -
Known WMF 5.0 Product Incompatibilites
Systems that are running the following server applications should not run Windows Management Framework 5.0 at this time:
- Microsoft Exchange Server 2013
- Microsoft Exchange Server 2010 SP3
- Microsoft SharePoint Server 2013
- Microsoft SharePoint Server 2010
- System Center 2012 Virtual Machine Manager
-
The
Registry
DSC Resource continually changes state, even if the system state matches the desired state, when using a HEX value. See issue #237 for more information. -
The Puppet DSC module hangs on systems with WMF 5.1 installed. This is being addressed in MODULES-3690.
-
If you create files with the
dsc_file
resource, the resulting file on disk will be UTF-8 with BOM. This can be a problem if you use tools that are not UTF-8 BOM aware. This is by design for Microsoft PowerShell DSC. More information can be found in MODULES-3178.
Running Puppet and DSC without Administrative Privileges
While there are avenues for using Puppet with a non-administrative account, DSC is limited to only accounts with administrative privileges. The underlying CIM implementation DSC uses for DSC Resource invocation requires administrative credentials to function.
- Using the Invoke-DscResource cmdlet requires administrative credentials
The Puppet agent on a Windows node can run DSC with a normal default install. If the Puppet agent was configured to use an alternate user account, that account must have administrative privileges on the system in order to run DSC.
Troubleshooting
When Puppet runs, the dsc module takes the code supplied in your puppet manifest and converts that into PowerShell code that is sent to the DSC engine directly using Invoke-DscResource
. You can see both the commands sent and the result of this by running puppet interactively, e.g. puppet apply --debug
. It will output the PowerShell code that is sent to DSC to execute and the return data from DSC. For example:
Notice: Compiled catalog for win2012r2 in environment production in 0.82 seconds
Debug: Creating default schedules
Debug: Loaded state in 0.03 seconds
Debug: Loaded state in 0.05 seconds
Info: Applying configuration version '1475264065'
Debug: Reloading posix reboot provider
Debug: Facter: value for uses_win32console is still nil
Debug: PowerShell Version: 5.0.10586.117
$invokeParams = @{
Name = 'ExampleDSCResource'
Method = 'test'
Property = @{
property1 = 'value1'
property2 = 'value2'
}
ModuleName = @{
ModuleName = "C:/puppetlabs/modules/dsc/lib/puppet_x/dsc_resources/ExampleDSCResource/ExampleDSCResource.psd1"
RequiredVersion = "1.0"
}
}
############### SNIP ################
Debug: Waited 50 milliseconds...
############### SNIP ################
Debug: Waited 500 total milliseconds.
Debug: Dsc Resource returned: {"rebootrequired":false,"indesiredstate":false,"errormessage":""}
Debug: Dsc Resource Exists?: false
Debug: ensure: present
############### SNIP ################
$invokeParams = @{
Name = 'ExampleDSCResource'
Method = 'set'
Property = @{
property1 = 'value1'
property2 = 'value2'
}
ModuleName = @{
ModuleName = "C:/puppetlabs/modules/dsc/lib/puppet_x/dsc_resources/ExampleDSCResource/ExampleDSCResource.psd1"
RequiredVersion = "1.0"
}
}
############### SNIP ################\
Debug: Waited 100 total milliseconds.
Debug: Create Dsc Resource returned: {"rebootrequired":false,"indesiredstate":true,"errormessage":""}
Notice: /Stage[main]/Main/Dsc_exampledscresource[foober]/ensure: created
Debug: /Stage[main]/Main/Dsc_exampledscresource[foober]: The container Class[Main] will propagate my refresh event
Debug: Class[Main]: The container Stage[main] will propagate my refresh event
Debug: Finishing transaction 56434520
Debug: Storing state
Debug: Stored state in 0.10 seconds
############### SNIP ################
This shows us that there wasn't any problem parsing your manifest and turning it into a command to send to DSC. It also shows that there are two commands/operations for every DSC Resource executed, a SET and a test. DSC operates in two stages, it first tests if a system is in the desired state, then it sets the state of the system to the desired state. You can see the result of each operation in the debug log.
By using the debug logging of a puppet run, you can troubleshoot the application of DSC Resources during the development of your puppet manifests.
Development
Puppet Inc modules on the Puppet Forge are open projects, and community contributions are essential for keeping them great. We can’t access the huge number of platforms and myriad of hardware, software, and deployment configurations that Puppet is intended to serve.
We want to keep it as easy as possible to contribute changes so that our modules work in your environment. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things.
For more information, see our module contribution guide.
- The Puppet types are built from the source code of each DSC Resources MOF schema files. If you want to build the types, read the Building DSC Resources readme.
- If you want the build Puppet types for your own custom DSC Resources, read Building Puppet Types from Custom DSC Resources readme.
Version Strategy
This module generally follows Semantic Versioning for choosing an appropriate release version number with the following exception:
- Minor, for example from version 2.0.0 to 2.1.0
A minor change may also include rebuilding the DSC resource types. Puppet wants to keep pace with the released DSC Resources from the PowerShell team repository, but this engenders risk as Puppet adopts third party code. Normally this would mean making major version bumps, but since this is anticipated to be frequent that would be too much churn.
Contributors
To see who's already involved, see the list of contributors.
Learn More About DSC
You can learn more about PowerShell DSC from the following online resources:
- Microsoft PowerShell Desired State Configuration Overview - Starting point for DSC topics
- Microsoft PowerShell DSC Resources page - For more information about built-in DSC Resources
- Microsoft PowerShell xDSCResources Github Repo - For more information about xDscResources
- Windows PowerShell Blog - DSC tagged posts from the Microsoft PowerShell Team
- Puppet Inc Windows DSC & WSUS Webinar 9-17-2015 webinar - How DSC works with Puppet
- Better Together: Managing Windows with Puppet, PowerShell and DSC - PuppetConf 10-2015 talk and slides
- PowerShell.org - Community based DSC tagged posts
- PowerShell Magazine - Community based DSC tagged posts
There are several books available as well. Here are some selected books for reference:
- Learning PowerShell DSC - James Pogran is a member of the team here at Puppet Inc working on the DSC/Puppet integration
- The DSC Book - Powershell.org community contributed content
- Windows PowerShell Desired State Configuration Revealed - Ravikanth Chaganti
License
- Copyright (c) 2014 Marc Sutter, original author
- Copyright (c) 2015 - Present Puppet Inc
- License: Apache License, Version 2.0
Types in this module release
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[Unreleased]
[1.6.0] - 2018-05-09
VirtualDesktopDevops fork changes
- Corrected xNetbios issue in xNetworking 5.6.0.0
- Updated WSManDsc to v2.2.0
Added
- Added documentation on the LCM RefreshMode setting (MODULES-6640)
- Added Windows 2016 to metadata (MODULES-4271)
Fixed
- Fixed DSC Resource Module Version parsing error (MODULES-7055)
- Fixed case sensitive file name psd1 resolver (MODULES-7063)
- Fixed pining HQ DSC Resources (MODULES-6694)
- Fixed starting pipes on Windows 2008R2 (MODULES-6929)
Changed
- Updated SharePointDsc to 2.2.0.0 (MODULES-7057)
- Updated SqlServerDsc to 11.1.0.0 (MODULES-7057)
- Updated xActiveDirectory to 2.18.0.0 (MODULES-7057)
- Updated xComputerManagement to 4.1.0.0 (MODULES-7057)
- Updated xFailOverCluster to 1.10.0.0 (MODULES-7057)
- Updated xNetworking to 5.6.0.0 (MODULES-7057)
- Updated xPSDesiredStateConfiguration to 8.1.0.0 (MODULES-7057)
- Bumped the puppetlabs-reboot module dependancy to reflect that the new version is 2.0.0 (MODULES-6678)
[1.5.0] - 2018-02-19
VirtualDesktopDevops fork changes
- Added VirtualEngine/Storefront v0.9.6
- Added VirtualEngine/XenDesktop7 v2.5.10
- Added VirtualDesktopDevops/CitrixWemDsc v0.1.0
- Added WSManDsc v2.0.0
- Added xWinRM v1.0
- Added xSystemSecurity v1.3.0
Adds
- BREAKING: Update SqlServerDsc to 11.0.0.0 (MODULES-6592)
- Update OfficeOnlineServerDsc to 1.2.0.0 (MODULES-6592)
- Update SecurityPolicyDsc to 2.2.0.0 (MODULES-6592)
- Update SharePointDsc to 2.1.0.0 (MODULES-6592)
- Update StorageDsc to 4.0.0.0 (MODULES-6592)
- Update SystemLocaleDsc to 1.2.0.0 (MODULES-6592)
- Update xActiveDirectory to 2.17.0.0 (MODULES-6592)
- Update xAdcsDeployment to 1.4.0.0 (MODULES-6592)
- Update xCertificate to 4.2.0.0 (MODULES-6592)
- Update xComputerManagement to 4.0.0.0 (MODULES-6592)
- Update xDatabase to 1.7.0.0 (MODULES-6592)
- Update xDnsServer to 1.9.0.0 (MODULES-6592)
- Update xExchange to 1.19.0.0 (MODULES-6592)
- Update xFailOverCluster to 1.9.0.0 (MODULES-6592)
- Update xHyper-V to 3.11.0.0 (MODULES-6592)
- Pinned xPowerShellExecutionPolicy to 1.1.0.0 (MODULES-6592)
- Update xPSDesiredStateConfiguration to 8.0.0.0 (MODULES-6592)
- Update xNetworking to 5.5.0.0 (MODULES-6592)
- Update xRemoteDesktopSessionHost to 1.5.0.0 (MODULES-6592)
- Update xSharePoint to 2.1.0.0 (MODULES-6592)
- Update xTimeZone to 1.7.0.0 (MODULES-6592)
- Update xSQLServer (MODULES-5689)
- Update xSQLServer (MODULES-5431)
Fixes
- Fixed including HQ DSC Resources in dsc_resource_tags.yml
- Correctly ignore PSDscResources in build process
- Remove warning for MSFT_WaitFor DSC Resources
- Fix parsing DSC Resource manifest files (MODULES-5590)
Removed
- BREAKING: Removed xSQLServer (MODULES-6592)
- BREAKING: Removed powershell and stdlib module dependencies (MODULES-5548)
[1.4.1] - 2018-01-05
Added
- Allow users to specify passwords in a
MSFT_Credential
as Sensitive strings (MODULES-5743)
Fixed
- Increased the timeout for opening PowerShell from 10 to 30 seconds to prevent erroneous failures (MODULES-4748)
- Prevented the PowerShell manager from creating zombie processes (MODULES-4748)
[1.4.0] - 2017-08-30
Added
- Included July 2017 DSC Resource Kit release (MODULES-5534)
- Included August 2017 DSC Resource Kit release (MODULES-5536)
- Updated metadata for Puppet 4 and Puppet 5 (MODULES-4840, MODULES-5144)
Changed
- Restricted WMF version to 5.0 RTM or above (MODULES-2770)
Deprecated
- Add
dsc::lcm_config
class deprecation warning (MODULES-3409)
Fixed
- Updated documentation for the latest WMF 5.1 links
- Fixed Global Variable warning message (MODULES-5224)
- Fixed PowerShellManager template path (MODULES-5228)
- Moved vendored resources test (MODULES-2980)
[1.3.1] 2017-08-25
Fixed
- Fix: Extraneous vendor content in puppetlabs-dsc-1.3.0.tar.gz (MODULES-5380)
[1.3.0] - 2017-04-27
Added
- Include January 2017 DSC Resource Kit release (MODULES-4371)
- Include March 2017 DSC Resource Kit release (MODULES-4371)
- Update Build README with better instructions (MODULES-4128)
- Update README with troubleshooting help (MODULES-4128)
- Update support PowerShell 5.1 (MODULES-3977)
- Include April 2017 DSC Resource Kit release (MODULES-4747)
Fixed
- Fix building custom DSC Resources (MODULES-4201)
- Add known issue with
dsc_file
to README (MODULES-3178) - Fix DSC repository name case (MODULES-4430)
- Module manifest parser does not handle double quotes (MODULES-4422)
- Update error message on older PowerShell versions (MODULES-4014)
- Add facade rake tasks for use in CI and Test Tiering (MODULES-4667)
- Fix integration test failing due to pre-existing reboot condition
[1.2.0] - 2016-11-10
Added
- Add psDscRunAsCredential Support (FM-5671)
- Include September DSC Resource Kit release (MODULES-3983)
- Include November DSC Resource Kit release (MODULES-4059)
Fixed
- Fix WaitForAll blacklist test (MODULES-3764)
- Update travis/appveyor with Ruby 2.3 (MODULES-3775)
- Support new MS supported Official DSC Resources (MODULES-3683)
- Fix maxpath issues (MODULES-3683)
[1.1.0] - 2016-08-08
Added
- Nano Server Compatibility (MODULES-3343)
- Better tracking of DSC Resource version with
dsc_resource_release_tags.yml
file (MODULES-3228)(MODULES-3674) - Revendored DSC Resources as of 26th July 2016
Fixed
- Tests failing on PE 3.8.x because master_manipluator is pinned (MODULES-2772)
- Improve the DSC Build import process (FM-4661)
- Tests failing due to RSpec 3+ compatibility (FM-4915)
- Remove unnecessary files from module build
- Simplify 'Ensure' Property Handling (MODULES-3133)
- Upgrade MOF Parser for UTF8-BOMs (MODULES-3133)
- Update links for WM5 Production release
- Increase execution timeout (MODULES-3342)
- Fix acceptance tests for MySQL DSC resource (MODULES-3431)
- Update documentation with Module Version strategy (MODULES-3491)
[1.0.1] - 2016-03-17
Fixed
- The tar file format for the module has been changed to work around a bug in the Puppet module tool (PUP-5994). When installing the module on Windows with the Puppet module tool command
puppet module install puppetlab-dsc
, all files present in the tar.gz archive are not properly copied to the module directory. This is due to a bug in the module tool that is fixed as part of (PUP-5994) and ships in the Puppet Enterprise 3.8.7, puppet-agent 1.4.0, or newer installers. To enable existing Windows agents to properly install the module, it was necessary to repack the module in a different manner to work around this problem.
[1.0.0] - 2016-01-19
Added
- Reuse PowerShell instance for increased performance (MODULES-2709)
- Support PSCredentials, KeyValuePair and other arbitrary EmbeddedInstance MOF Classes (MODULES-2178)
- Update DSC Modules to latest available as of November 15, 2015. (Commit 84a467c of PowerShell/DscResources)
- Propagate DSC resource 'RebootRequired' status via Puppet notify, enabling DSC resources to trigger a system reboot (MODULES-2641)
Fixed
- Module dependencies are incompatible with Puppet 3.x (MODULES-2514)
- Only allow module to run on PowerShell v5 (MODULES-2521)
- Setting LCM Mode to "Pull" Causes crash (MODULES-2485)
- Empty password for PSCredential causes crash (MODULES-2615)
- Module doesn't properly handle signed integers (MODULES-2759)
- Package resource fails when ReturnCode is specified (MODULES-2562)
- Symlinking vendored modules causes duplicate errors if the same version of one of the modules is already installed (MODULES-2837)
Removed
- Remove LCM Refresh Mode Disabled Requirement (MODULES-2575)
- Remove Unsupported DSC Resource Types xChrome, xDscDiagnostics, xFireFox, xSafeHarbor, xSecurity, MSFT_WaitForAll, MSFT_WaitForAny and MSFT_WaitForSome (MODULES-2244).
- Further reduce the module size by removing unnecessary files (MODULES-2777)
[0.8.1] - 2015-09-02
Summary
Changed
- Update WMF 5 links to production preview
Fixed
- Fix links in metadata.json
[0.8.0] - 2015-09-02
Added
- Use WMF 5 instead of WMF 4 to take advantage of a much faster and more direct Invoke-DscResource over Start-DscConfiguration (MODULES-1960)
- Use latest DSC Resources from the PowerShell Gallery.
- Allow setting the LCM RefreshMode as a defined type. (MODULES-2243)
- Commit generated types / specs (MODULES-1956)
- Vendor resource kit files and ensure on PSModulePath so user doesn't need to install all of the resources (MODULES-2175)
Fixed
- Fix
dsc_ensure => absent
(MODULES-2267) - Use original MOF gem for building types (MODULES-1957)
- Call PowerShell with arguments (MODULES-2182)
- Manage DSC resources without ensure (MODULES-2257)
- Mixing quotes causes crash (MODULES-2442)
- Uint8 type generation (MODULES-2481)
- Ensure Puppet 4 compatibility (MODULES-2299)
[0.1.1] - 2014-09-19 (msutter)
Added
- add linting
- rewrite for encoding issues
- fix doc typo
Fixed
- fix import of base resource 'file'
- fix dsc File resource
- remove includeallfeature attribute from IIS role
[0.1.0] - 2014-09-15 (msutter)
Summary
Initial release to provide user the ability to manage PowerShell DSC resources with Puppet.
Dependencies
- puppetlabs/reboot (>= 1.2.1 < 3.0.0)
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.