132 lines
3.8 KiB
Markdown
132 lines
3.8 KiB
Markdown
# Distribute Files
|
|
|
|
With Hiera it is possible to download files and git repositories as well as to create directories and symlinks.
|
|
|
|
|
|
## Create Directories
|
|
|
|
The `files::directories` hash specifies directories to be created. The keys of the hash are the absolute pathnames of the directories, the optional value a hash with:
|
|
|
|
- `owner`: file owner (optional, default `root`)
|
|
- `group`: file owner (optional, default `root`)
|
|
- `mode`: file permissions (optional, default `755`)
|
|
|
|
Parent directories are automatically created with default settings. If that is not desired, a custom definition for each parent directory is required.
|
|
|
|
Example:
|
|
|
|
```
|
|
files::directories:
|
|
/etc/test1:
|
|
/etc/test2/foo/bar:
|
|
owner: 'buchel_k'
|
|
group: 'unx-nogroup'
|
|
mode: '775'
|
|
```
|
|
|
|
## Create Symlinks
|
|
|
|
The `files::symlinks` hash is used to configure symlinks. The keys of the hash are the absolute
|
|
pathnames of the symlinks, the values of the hash are the corresponding symlink
|
|
targets.
|
|
|
|
Example:
|
|
```
|
|
files::symlinks:
|
|
'/opt/foo': '/var/lib/foo'
|
|
```
|
|
|
|
Per default the symlink definitions are not merged over the full Hiera hierarchy, only the most specific definiton is used. To allow merge, set
|
|
|
|
```
|
|
files::symlinks::merge: true
|
|
```
|
|
|
|
Then also existing files and symlinks are not overwritten. Also this can be changed with
|
|
|
|
```
|
|
files::symlinks::force: true
|
|
```
|
|
but this is then applies for all symlink definitions.
|
|
|
|
## Create (Text) Files with Specific Content
|
|
|
|
Textfiles with specific content can be created as follows:
|
|
|
|
```yaml
|
|
files::files:
|
|
/testdir/test/three:
|
|
content: |
|
|
hello world t
|
|
this is a test
|
|
```
|
|
|
|
## Delete Files / Directories
|
|
Individual files and directories can be deleted as follows:
|
|
|
|
```yaml
|
|
files::files:
|
|
/testdir/test/two:
|
|
ensure: absent
|
|
force: true
|
|
```
|
|
|
|
The option `force: true` is only needed for directories. For a directory, if absent, the directory will not be deleted (even if it is empty)!
|
|
|
|
|
|
## Download Git Repositories
|
|
|
|
To synchronize a git repository to the host you might list them in the `files::git` hash. The key is the destination directory and the value is a hash with following options:
|
|
|
|
- `url`: URL of the public git repository to clone
|
|
- `revision`: what branch, tag or commit-hash should be checked out (optional)
|
|
|
|
Example:
|
|
|
|
```
|
|
files::git:
|
|
/var/test/container-images:
|
|
ensure: latest
|
|
url: 'https://git.psi.ch/linux-infra/container_images.git'
|
|
revision: 'main'
|
|
```
|
|
|
|
If the `ensure` is missing, it will initialize the checkout with the default branch, but afterwards leave the checkout as is and not try to ensure that it is on a given revision (branch, tag or commit).
|
|
|
|
Possible values for `ensure` are: present, bare, mirror, absent, latest .
|
|
|
|
More details on the possible values of ensure you can find in [this documentation](https://forge.puppet.com/modules/puppetlabs/vcsrepo/reference#ensure)
|
|
|
|
Note that submodules are automatically initialized.
|
|
|
|
## Download Files
|
|
|
|
Files to download need to be placed on a git repository on `git.psi.ch` (internal) or `gitlab.psi.ch` (DMZ, Extranet, Tier3), where they need to be publicly available.
|
|
|
|
For configuration in Hiera there is the `filecopy::files` hash where the keys is the destination path of the file. And the value is another hash with following options:
|
|
|
|
- `repo`: the Git repository to download from
|
|
- `branch`: the Git branch in the repository (optional, default `master`)
|
|
- `path`: the file path inside the repository
|
|
- `owner`: file owner (optional, default `root`)
|
|
- `mode`: file permissions (optional, default `0644`)
|
|
|
|
|
|
Example:
|
|
|
|
```
|
|
filecopy::files:
|
|
'/tmp/test1':
|
|
repo: 'talamo_i/copy-file-test'
|
|
path: 'abc'
|
|
mode: '0600'
|
|
owner: 'talamo_i'
|
|
```
|
|
|
|
Note that the `filecopy::files` hash is **not merged** over the hierarchy, so only the most specific one will apply.
|
|
|
|
This download functionality can be disabled with
|
|
```
|
|
base::enable_filecopy: false
|
|
```
|