Adding file server mount points
Puppet Server includes a file server for transferring static file content to agents. If you need to serve large files that you don't want to store in source control or distribute with a module, you can make a custom file server mount point and let Puppet serve those files from another directory.
In Puppet code, you can tell the file server is being used when you see
a file
resource that has
a source =>
puppet:///...
attribute specified.
-
Choose a directory on disk for the mount point, make sure Puppet Server can access it, and add your files to the directory.
-
Edit
fileserver.conf
on your Puppet Server node, so Puppet knows which directory to associate with the new mount point. -
(Optional) If you want to restrict which nodes can access this mount point, adjust access settings in the
auth.conf
file.
puppet:///<MOUNT
POINT>/<PATH>
.Mount points in the Puppet URI
Puppet URIs look like this: puppet://<SERVER>/<MOUNT
POINT>/<PATH>
.
The <SERVER>
is optional, so it common practice to use
puppet:///
URIs with three slashes. Usually, there is no reason to
specify the server. For Puppet agent,
<SERVER>
defaults to the value of the server setting. For Puppet apply, <SERVER>
defaults to
a special mock server with a modules mount point.
<MOUNT POINT>
is a unique identifier for some collection of
files. There are different kinds of mount points: -
Custom mount points correspond to a directory that you specify.
-
The
task
mount point works in a similar way to themodules
mount point but for files that live under the modulestasks
directory, rather than thefiles
directory. -
The special
modules
mount point serves files from thefiles
directory of every module. It behaves as if someone had copied thefiles
directory from every module into one big directory, renaming each of them with the name of their module. For example, the files inapache/files/...
are available atpuppet:///modules/apache/...
. -
The special
plugins
mount point serves files from thelib
directory of every module. It behaves as if someone had copied the contents of everylib
directory into one big directory, with no additional namespacing. Puppet agent uses this mount point when syncing plugins before a run, but there’s no reason to use it in afile
resource. -
The special
pluginfacts
mount point serves files from thefacts.d
directory of every module to support external facts. It behaves like theplugins
mount point, but with a different source directory. -
The special
locales
mount point serves files from thelocales
directory of every module to support automatic downloading of module translations to agents. It also behaves like theplugins
mount point, and also has a different source directory.
<PATH>
is the remainder of the path to the file, starting from
the directory (or imaginary directory) that corresponds to the mount point.
Creating a new mount point in fileserver.conf
fileserver.conf
file uses the following syntax to define mount
points:[<NAME OF MOUNT POINT>]
path <PATH TO DIRECTORY>
allow *
/etc/puppetlabs/puppet/installer_files/oracle.pkg
would be available
in manifests as
puppet:///installer_files/oracle.pkg
:[installer_files]
path /etc/puppetlabs/puppet/installer_files
allow
Make sure that the puppet
user has the right permissions to access that
directory and its contents.
Always include the allow *
line, because the default behavior is to
deny all access. To change access to a custom mount point, update the rules in
auth.conf
, as described below. Putting authorization rules in
fileserver.conf
is deprecated.
Controlling access to a custom mount point in auth.conf
By default, any node with a valid certificate can access the files in your new mount
point. If a node can fetch a catalog, it can fetch files. If the node can’t fetch a
catalog, it can’t fetch files. This is the same behavior as the special
modules
and plugins
mount points. If necessary, you
can restrict access to a custom mount point in auth.conf
.
Both the location of auth.conf
, and the process for editing
auth.conf
differ depending on whether you're using the new Puppet Server authentication configuration, or the legacy
configuration.
If you’re using the new configuration, and you've disabled the legacy
auth.conf
file by setting jruby-puppet.use-legacy-auth-conf:
false
, you can add a rule to Puppet Server’s
HOCON-format auth.conf file
, located at
/etc/puppetlabs/puppetserver/conf.d/auth.conf
.
-
It must match requests to all four of these prefixes:
-
/puppet/v3/file_metadata/<MOUNT POINT>
-
/puppet/v3/file_metadatas/<MOUNT POINT>
-
/puppet/v3/file_content/<MOUNT POINT>
-
/puppet/v3/file_contents/<MOUNT POINT>
-
-
Its
sort-order
must be lower than 500, so that it overrides the default rule for the file server.
{
# Allow limited access to files in /etc/puppetlabs/puppet/installer_files:
match-request: {
path: "^/puppet/v3/file_(content|metadata)s?/installer_files"
type: regex
}
allow: "*.dev.example.com"
sort-order: 400
name: "dev.example.com large installer files"
},
If you haven’t disabled the legacy auth.conf
file, add a rule to
/etc/puppetlabs/puppet/auth.conf
.
-
It must match requests to all four of these prefixes:
-
/puppet/v3/file_metadata/<MOUNT POINT>
-
/puppet/v3/file_metadatas/<MOUNT POINT>
-
/puppet/v3/file_content/<MOUNT POINT>
-
/puppet/v3/file_contents/<MOUNT POINT>
-
-
It must be located earlier in the
auth.conf
file than the default/puppet/v3/file
rule.
# Allow limited access to files in /etc/puppetlabs/puppet/installer_files:
path ~ ^/file_(metadata|content)s?/installer_files/
auth yes
allow *.dev.example.com
allow_ip 192.168.100.0/24
Related topics: Module fundamentals, fileserver.conf: Custom fileserver mount points, Puppet Server configuration files: puppetserver.conf, Puppet Server configuration files: auth.conf.