Files and paths on Windows
Puppet and Windows handle directory separators and line endings in files somewhat differently, so you must be aware of the differences when you are writing manifests to manage Windows systems.
Directory separators in file paths
Several resource types (including file
, exec
, and package
) take
file paths as values for various attributes. The Puppet language uses the backslash (\
) as an escape
character in quoted strings. However, Windows also
uses the backslash to separate directories in file paths, such as C:\Program Files\PuppetLabs
. Additionally, Windows file system APIs accept both backslashes and
forward slashes in file paths, but some Windows
programs accept only backslashes.
File path usage | Slash type |
---|---|
Template paths, such as template('my_module/content.erb') . |
Forward slash (/ ) |
puppet:/// URLs. |
Forward slash (/ ) |
The path attribute or title of a
file resource. |
Forward slash (/ ) or backslash
(\ ) |
The source attribute of a package resource. |
Forward slash (/ ) or backslash
(\ ) |
Local paths in a file resource's
source attribute. |
Forward slash (/ ) or backslash
(\ ) |
The command of an exec resource. However, some executables,
such as cmd.exe , require backslashes. |
Forward slash (/ ) or backslash
(\ ) |
Any file paths included in the command of a scheduled_task resource. |
Backslash (\ ) |
Any file paths included in the install_options of a package resource. |
Backslash (\ ) |
Any file paths used for Windows PowerShell DSC resources. For these resources, single quote strings whenever possible. | Backslash (\ ) |
Line endings in files
-
If you specify the contents of a file with the
content
attribute, Puppet writes the content in binary mode. To create files with CRLF line endings, specify the\r\n
escape sequence as part of the content. -
When downloading a file to a Windows node with the
source
attribute, Puppet transfers the file in binary mode, leaving the original newlines untouched. - If you are using version control, such as Git, ensure that it is configured to use CRLF line endings.
-
Non-
file
resource types that make partial edits to a system file, such as thehost
resource type, which manages the%windir%\system32\drivers\etc\hosts
file, manage their files in text mode and automatically translate between Windows and *nix line endings.Note: When writing your own resource types, you can get this behavior by using theflat
file type.