Table of Contents
- enroll manifest
- Synopsis
- Inputs
- Outputs
- Options
- Permutations (valid combinations)
- Plain + single-site (default; JinjaTurtle auto)
- Plain + site mode (--fqdn)
- Plain + disable JinjaTurtle
- Plain + force JinjaTurtle on
- SOPS output (manifest encrypted), harvest input is a directory
- SOPS output, harvest input is an encrypted file
- SOPS output + site mode (--fqdn)
- SOPS output + JinjaTurtle control
- Working with the encrypted manifest (manifest.tar.gz.sops)
- Common gotchas
enroll manifest
Generate an Ansible "manifest" (roles/playbooks, and optionally inventory) from an existing harvest bundle.
Synopsis
enroll manifest --harvest <DIR|SOPS_FILE> --out <DIR|FILE> [--fqdn <HOST>] [--jinjaturtle | --no-jinjaturtle] [--sops <GPG_FPR...>]
Inputs
--harvest <path> (required)
Path to the harvest input.
-
Plain mode (no
--sops)- must be a directory created by
enroll harvest(containingstate.json,artifacts/)
- must be a directory created by
-
SOPS mode (
--sops ...)- may be either:
- a directory (already decrypted), or
- a SOPS-encrypted harvest tarball produced by
enroll harvest --sops(e.g.harvest.tar.gz.sops)
- may be either:
Outputs
Plain mode output (directory)
In plain mode, --out is a directory that is written in-place.
Default (single-site mode, no --fqdn)
Typical top-level layout:
roles/playbook.yml
Site mode (--fqdn <host>)
Adds inventory scaffolding and per-host files:
roles/inventory/hosts.iniinventory/host_vars/<fqdn>/...playbooks/<fqdn>.ymlansible.cfg
In site mode, some raw harvested files are stored under:
inventory/host_vars/<fqdn>/<role>/.files/...
to avoid cross-host clobber while still sharing role code.
SOPS mode output (single encrypted file)
When --sops <FPR...> is set, the manifest output is bundled and encrypted into one file:
manifest.tar.gz.sops
--out may be:
- a directory -
manifest.tar.gz.sopsis created inside it - a file path - that exact filename is written
Options
--out <path> (required)
Where to write the manifest output.
- Plain mode: must be a directory path (created if needed).
- SOPS mode: may be a directory or a file path (see above).
--fqdn <host>
Enable "site mode" output.
- Generates
inventory/,inventory/host_vars/<fqdn>/..., andplaybooks/<fqdn>.yml. This includes theinventory/hosts.iniwith the fqdn inside it. - Generates an
ansible.cfgwith some nice defaults for running against multiple remote hosts. - Useful when you are enrolling multiple hosts into a shared repo layout
If --fqdn is omitted (or empty), the manifest is generated in "single-site mode" with playbook.yml, and no inventory files (all role parameters are stored in defaults/main.yml in the roles) or ansible.cfg. In that scenario, you are responsible for creating the inventory file or using -i.
If you do include --fqdn, and run the command repeatedly against different harvests but with the same --out param, Enroll will 'merge' the new host's inventory, roles, and playbooks into your manifest directory, as opposed to overwrite it.
Therefore, if you keep running harvest against all your hosts, you can gradually assemble a 'complete' manifest of all roles/playbooks/inventory of all hosts!
JinjaTurtle integration
--jinjaturtle
Force JinjaTurtle templating integration on.
- Errors if
jinjaturtleis not available onPATH.
--no-jinjaturtle
Force JinjaTurtle integration off, even if it's installed.
Default (no flag)
Auto mode: use JinjaTurtle if found on PATH, otherwise do not.
--sops <GPG_FINGERPRINT...>
Enable SOPS mode for manifest generation.
In this mode:
- If
--harvestis an encrypted file,enrolldecrypts and extracts it (usingsops -d) to a secure temp directory. - It generates the manifest into a secure temp directory.
- It bundles (tar.gz) and encrypts the entire manifest output into
manifest.tar.gz.sops.
Requires sops available on PATH.
Permutations (valid combinations)
Plain + single-site (default; JinjaTurtle auto)
enroll manifest --harvest /path/to/harvest-dir --out /path/to/ansible-dir
Plain + site mode (--fqdn)
enroll manifest --harvest /path/to/harvest-dir --out /path/to/ansible-dir --fqdn host.example.com
Plain + disable JinjaTurtle
enroll manifest --harvest /path/to/harvest-dir --out /path/to/ansible-dir --no-jinjaturtle
Plain + force JinjaTurtle on
enroll manifest --harvest /path/to/harvest-dir --out /path/to/ansible-dir --jinjaturtle
SOPS output (manifest encrypted), harvest input is a directory
Output to a directory (default filename inside):
enroll manifest --harvest /path/to/harvest-dir --out /path/to/out-dir --sops <FPR1>
# writes /path/to/out-dir/manifest.tar.gz.sops
Output to a specific file:
enroll manifest --harvest /path/to/harvest-dir --out /path/to/manifest.tar.gz.sops --sops <FPR1>
SOPS output, harvest input is an encrypted file
enroll manifest --harvest /path/to/harvest.tar.gz.sops --out /path/to/out-dir --sops <FPR1>
SOPS output + site mode (--fqdn)
enroll manifest --harvest /path/to/harvest.tar.gz.sops --out /path/to/out-dir --fqdn host.example.com --sops <FPR1>
SOPS output + JinjaTurtle control
Force on:
enroll manifest --harvest /path/to/harvest.tar.gz.sops --out /path/to/out-dir --sops <FPR1> --jinjaturtle
Force off:
enroll manifest --harvest /path/to/harvest.tar.gz.sops --out /path/to/out-dir --sops <FPR1> --no-jinjaturtle
Working with the encrypted manifest (manifest.tar.gz.sops)
The encrypted manifest is one file; to use it with Ansible you typically:
mkdir -p /tmp/enroll-manifest && cd /tmp/enroll-manifest
sops -d /path/to/manifest.tar.gz.sops | tar -xzvf -
After extraction, run Ansible from inside the extracted tree.
Common gotchas
- In plain mode,
--outis written in-place. If you re-run against the same output directory, expect files to be updated/overwritten. - In site mode, host-specific state lives under
inventory/host_vars/<fqdn>/...; this is intentionally per-host. - In SOPS mode, the manifest is not directly runnable until you decrypt and extract it.