New Puppet facts for Windows
To manage your Windows desktops and servers based on the version / edition of Windows installed across your organisation, we’ve introduced Windows build-specific facts to Puppet.
If you have a mix of Windows servers (Core and ServerStandard) and Windows desktops with varying versions and editions Windows, using Windows build-specific facts allows you to:
- Avoid installing GUI type tools (Notepad++) on Windows core servers
- Ensure that new features (e.g. Windows Terminal) are only installed on versions of Windows that support them
- Install VS Code with Puppet extensions on client desktops only
Let’s see what all this looks like in some Puppet code:
if $facts['os']['windows']['release_id'] >= '1904' {
# Ensure Build Version Supports Windows Terminal
package { 'microsoft-windows-terminal':
ensure => installed,
provider => 'chocolatey',
}
}
if $facts['os']['windows']['installation_type'] != 'Server Core' {
# Editors not permitted on Core Servers
package { 'notepadplusplus':
ensure => installed,
provider => 'chocolatey',
}
}
if $facts['os']['windows']['installation_type'] == 'Client' {
# VS Code to be installed on Desktops with Puppet Extensions
package { 'vscode':
ensure => installed,
provider => 'chocolatey',
}
package { 'vscode-puppet':
ensure => installed,
provider => 'chocolatey',
}
}
What are the new facts and what do they do
The previous example uses a number of new facts which were added recently to Facter under the os.windows
key:
C:> facter os.windows
{
edition_id => "Professional",
installation_type => "Client",
product_name => "Windows 10 Pro",
release_id => "2004",
system32 => "C:\WINDOWS\system32"
}
All of these facts are derived from the Windows Registry Key HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
as shown in the following table.
Registry Value | Fact | Description | Syntax/Example |
---|---|---|---|
ReleaseID | release_id | The 4 digit Windows Build Version | YYMM (e.g. 1904) |
InstallationType | installation_type | Differentiates Server, Server Core, and Client (Desktop) | Server |
EditionID | edition_id | Server or Desktop Edition variant | ServerStandard, Professional, Enterprise |
ProductName | product_name | Textual Product Name | Windows 2019 Standard Edition |
Note - release_id
is returned for Windows 10/Server 2016 builds only (i.e. Windows 2012r2 doesn’t contain this registry entry).
These new facts also support:
- Fact Collection to determine Windows 10 Build Versions (Feature releases)
- Patching and ensuring supported versions are in use
John O’Connor is a senior engineer in developer services who has a passion for ensuring Windows remains a first-class Puppet citizen.