Pabawi is built on top of Puppet Bolt. This guide covers the core configuration required to connect Pabawi to your Bolt project, configure security whitelists, and enable package management tasks.
- Prerequisites
- Project Configuration
- Security & Whitelisting
- Package Management
- Performance Tuning
- Troubleshooting
- A valid Puppet Bolt project directory.
- Bolt installed on the server running Pabawi (unless running via Docker).
Pabawi requires a properly structured Bolt project directory to function. You can also use the Bolt Setup Guide in the Pabawi web UI to generate the .env snippet for Bolt configuration — it walks you through the settings and lets you copy the result to your clipboard.
Configure the path to your Bolt project using the BOLT_PROJECT_PATH environment variable.
# Absolute path to your bolt project
BOLT_PROJECT_PATH=/opt/my-bolt-projectYour Bolt project directory must contain the following structure:
bolt-project/
├── bolt-project.yaml # Bolt project configuration
├── inventory.yaml # Node inventory
└── modules/ # Bolt modules directory
├── module1/
└── module2/
For optimal integration with Pabawi, we recommend the following settings in your bolt-project.yaml:
name: my-project
modulepath:
- modules
# Critical: Disable color to ensure Pabawi can parse JSON output correctly
color: false
# Recommended: Apply settings
apply-settings:
evaltrace: true
log_level: info
show_diff: truePabawi parses your inventory.yaml to populate the node list.
groups:
- name: web-servers
targets:
- uri: web01.example.com
- uri: web02.example.com
config:
transport: ssh
ssh:
user: deploy
host-key-check: falseThe command whitelist is a critical security feature that controls which ad-hoc commands can be executed on target nodes via the Pabawi UI.
Only allow specific, exact commands.
COMMAND_WHITELIST_ALLOW_ALL=false
COMMAND_WHITELIST_MATCH_MODE=exact
COMMAND_WHITELIST='["uptime", "df -h", "free -m"]'Allow commands that start with a specific prefix (allows arguments).
COMMAND_WHITELIST_ALLOW_ALL=false
COMMAND_WHITELIST_MATCH_MODE=prefix
COMMAND_WHITELIST='["systemctl status", "cat /var/log/"]'
# Allows: "systemctl status nginx", "cat /var/log/syslog"Allow all commands. Do not use in production.
COMMAND_WHITELIST_ALLOW_ALL=trueCOMMAND_WHITELIST='[
"uptime",
"df -h",
"free -m",
"top -bn1",
"ps aux",
"netstat -tulpn",
"ss -tulpn"
]'
COMMAND_WHITELIST_MATCH_MODE=exactCOMMAND_WHITELIST='[
"cat /var/log",
"tail /var/log",
"grep",
"journalctl"
]'
COMMAND_WHITELIST_MATCH_MODE=prefixCOMMAND_WHITELIST='[
"systemctl status",
"systemctl restart",
"systemctl start",
"systemctl stop",
"service"
]'
COMMAND_WHITELIST_MATCH_MODE=prefixCOMMAND_WHITELIST='[
"nginx -t",
"nginx -s reload",
"apache2ctl configtest",
"apache2ctl graceful",
"curl -I",
"wget --spider"
]'
COMMAND_WHITELIST_MATCH_MODE=exact- Start restrictive: Begin with a minimal whitelist and add commands as needed
- Use prefix mode carefully: Only use prefix matching when necessary, as it's less secure
- Document your whitelist: Keep a record of why each command is allowed
- Regular audits: Review and update the whitelist periodically
- Environment-specific: Use different whitelists for dev, staging, and production
- Avoid dangerous commands: Never whitelist destructive commands like
rm,dd,mkfs, etc.
Pabawi provides a UI for installing packages on nodes. You must configure which underlying Bolt tasks perform these operations.
This is a JSON array defining available package tasks.
BOLT_PACKAGE_TASKS='[
{
"name": "package",
"label": "Standard Package (built-in)",
"parameterMapping": {
"packageName": "name",
"ensure": "action",
"version": "version"
}
},
{
"name": "tp::install",
"label": "Tiny Puppet (TP)",
"parameterMapping": {
"packageName": "app",
"ensure": "ensure",
"settings": "settings"
}
}
]'name: The actual Bolt task name (e.g.,package,tp::install).label: Human-readable name shown in the dropdown.parameterMapping: Maps the UI fields to the task's parameters:packageName: Maps to the package name argument.ensure: Maps to the action/state argument (install/absent).version: Maps to the version argument.
Adjust these settings based on your server load and project size.
Prevent hung processes from blocking resources.
# Timeout in milliseconds (default: 5 minutes)
BOLT_EXECUTION_TIMEOUT=300000Control how many Bolt processes can run simultaneously.
# Maximum concurrent Bolt processes (default: 5)
CONCURRENT_EXECUTION_LIMIT=10
# Maximum queued requests before rejection (default: 50)
MAX_QUEUE_SIZE=100If you are using PuppetDB alongside Bolt, you can define which source takes precedence for node details.
# Higher number = higher priority (default: 5)
BOLT_PRIORITY=5"Bolt configuration files not found"
- Ensure
BOLT_PROJECT_PATHis absolute. - Verify
bolt-project.yamlandinventory.yamlexist in that directory.
"Cannot parse Bolt output"
- Check
bolt-project.yamland ensurecolor: falseis set. ANSI color codes break the JSON parser.
"Command not in whitelist"
- If using
prefixmode, ensure the command starts exactly with the whitelist string (including spaces). - Check logs to see the exact command Pabawi attempted to run.