| name | concierge |
| description | Expert assistant for provisioning charm development and testing environments using concierge. Use when setting up development machines, bootstrapping Juju controllers, installing craft tools (charmcraft, snapcraft, rockcraft), or preparing test environments. Keywords include concierge, provision, development environment, Juju bootstrap, LXD, MicroK8s, K8s, craft tools, prepare, restore. |
| license | Apache-2.0 |
| compatibility | Requires concierge installed locally (snap or Go). Root/sudo access needed for most operations. |
| allowed-tools | Bash(concierge:*) Read |
Concierge Development Environment Assistant
Expert guidance for provisioning and managing charm development and testing environments using concierge.
What is Concierge?
Concierge is an opinionated utility for automating the setup of charm development machines. It:
- Installs craft tools (charmcraft, snapcraft, rockcraft)
- Configures providers (LXD, MicroK8s, K8s, Google Cloud)
- Bootstraps Juju controllers
- Installs additional packages (snaps and debs)
- Provides environment restoration capabilities
Core Workflows
Quick Start with Presets
concierge prepare -p dev
concierge prepare -p machine
concierge prepare -p k8s
concierge prepare -p microk8s
concierge prepare -p crafts
Presets comparison:
| Preset | Juju | LXD | K8s | MicroK8s | Charmcraft | Snapcraft | Rockcraft | Jhack |
|---|
| dev | ✓ | ✓† | ✓† | — | ✓ | ✓ | ✓ | ✓ |
| machine | ✓ | ✓† | — | — | ✓ | ✓ | — | — |
| k8s | ✓ | ✓* | ✓† | — | ✓ | — | ✓ | — |
| microk8s | ✓ | ✓* | — | ✓† | ✓ | — | ✓ | — |
| crafts | — | ✓ | — | — | ✓ | ✓ | ✓ | — |
Legend:
- ✓ = Installed
- ✓† = Installed and bootstrapped with Juju controller
- ✓* = Installed but NOT bootstrapped (only for charmcraft build backend)
- — = Not included
For detailed preset information, see references/presets.md
Environment Status
concierge status
Restoring Original State
concierge restore
⚠️ CRITICAL WARNING:
restore does NOT account for packages/configuration that existed before prepare
- It literally reverses the
prepare operation
- If you had LXD installed before running
prepare, restore will remove it
- Use with caution on machines with existing configurations
Custom Configuration
Create a concierge.yaml file in your working directory:
juju:
channel: "3.6/stable"
agent_version: "3.6.0"
bootstrap_constraints:
cores: 4
mem: 8G
model_defaults:
logging-config: "<root>=INFO"
providers:
microk8s:
enable: true
bootstrap: true
channel: "1.31-strict/stable"
lxd:
enable: true
bootstrap: true
channel: "5.21/stable"
k8s:
enable: false
gcloud:
enable: false
host:
snaps:
- name: astral-uv
channel: "latest/edge"
classic: true
- name: jhack
channel: "latest/stable"
debs:
- build-essential
- python3-dev
Then run:
concierge prepare -c concierge.yaml
For complete YAML schema, see references/configuration.md
Overriding Configuration
concierge prepare -p dev --juju-channel=4.0/edge
concierge prepare -p dev \
--extra-snaps=astral-uv/latest/edge,jhack \
--extra-debs=build-essential,python3-tox
concierge prepare -p crafts --disable-juju
concierge prepare -p k8s --google-credential-file=~/gcloud-creds.json
Channel override flags:
--juju-channel
--lxd-channel
--k8s-channel
--microk8s-channel
--charmcraft-channel
--snapcraft-channel
--rockcraft-channel
Environment Variables
All flags have environment variable equivalents:
export CONCIERGE_JUJU_CHANNEL="4.0/edge"
export CONCIERGE_EXTRA_SNAPS="astral-uv/latest/edge,jhack"
export CONCIERGE_EXTRA_DEBS="build-essential"
concierge prepare -p dev
Variable naming: Flag --juju-channel becomes CONCIERGE_JUJU_CHANNEL
Common Workflows
Setting Up a New Development Machine
sudo snap install --classic concierge
concierge prepare -p dev --extra-snaps=jhack
concierge status
juju controllers
lxc list
cd my-charm-project
charmcraft pack
juju deploy ./my-charm.charm
Quick K8s Testing Environment
concierge prepare -p k8s
juju controllers
juju models
juju add-model test
juju deploy postgresql-k8s
Minimal Build-Only Setup
concierge prepare -p crafts
cd my-charm
charmcraft pack
cd ../my-rock
rockcraft pack
CI/CD Environment Setup
concierge prepare -p dev \
--juju-channel=3.6/stable \
--extra-snaps=astral-uv/latest/edge \
--extra-debs=python3-tox,make
concierge status
if [ $? -eq 0 ]; then
echo "Environment ready"
fi
Cleaning Up After Testing
concierge restore
concierge status
Best Practices
Choosing a Preset
- Use
dev for general charm development - Includes everything most developers need
- Use
machine for traditional charms - No K8s overhead
- Use
k8s or microk8s for K8s-only work - Lighter than dev
- Use
crafts for build servers - Minimal installation for building only
Configuration Management
- Check config into version control - Share team configurations via
concierge.yaml
- Use environment variables in CI - Easier than managing config files
- Document custom setups - Add comments to
concierge.yaml
- Test configurations locally first - Before deploying to CI
Safety
- ⚠️ Never run
restore on production machines - It removes configurations blindly
- Use virtual machines for testing - Try configurations safely
- Check status before and after -
concierge status shows what happened
- Review preset contents - Know what will be installed before running
Development Workflow
- Prepare once per machine - Don't re-run
prepare unnecessarily
- Update tools via snap - Use
snap refresh for updates, not restore+prepare
- Use jhack for iteration - Once environment is ready, jhack speeds up development
- Keep environments consistent - Use same preset across team
Troubleshooting
Prepare Fails
concierge prepare -p dev -v
concierge prepare -p dev --trace
concierge status
Common issues:
- Insufficient permissions - Run with sudo
- Network connectivity - Check internet access
- Conflicting installations - Remove existing snaps first
- Disk space - Ensure adequate free space (10GB+ recommended)
Controller Bootstrap Fails
If Juju controller bootstrap fails:
juju debug-log -m controller
juju bootstrap lxd
juju bootstrap microk8s
lxc list
microk8s status
Restore Issues
concierge status
concierge restore -v
If restore fails:
- Check sudo/root access
- Review logs for specific errors
- Manually remove remaining configurations
Snap Installation Failures
snap version
snap list
sudo snap install juju --channel=3.6/stable --classic
concierge prepare -p dev
Command Reference
concierge prepare [flags]
concierge prepare -p <preset>
concierge prepare -c <config-file>
concierge status
concierge restore
concierge completion bash
concierge completion zsh
concierge completion fish
concierge --help
concierge prepare --help
concierge --version
concierge prepare -p dev -v
concierge prepare -p dev --trace
Integration with Development Tools
With Charmcraft
concierge prepare -p dev
cd my-charm
charmcraft init --profile=kubernetes
charmcraft pack
charmcraft test
juju deploy ./my-charm.charm
With Jhack
concierge prepare -p dev --extra-snaps=jhack
jhack sync src/ myapp/0
jhack tail myapp/0
With Tox and UV
concierge prepare -p dev \
--extra-snaps=astral-uv/latest/edge \
--extra-debs=python3-tox
cd my-charm
tox -e lint
tox -e unit
uv sync
With CI/CD
- name: Prepare environment
run: |
sudo snap install --classic concierge
concierge prepare -p dev --extra-snaps=astral-uv/latest/edge
- name: Verify setup
run: concierge status
- name: Run tests
run: |
charmcraft pack
charmcraft test
Configuration Priority
Concierge uses this priority order (highest to lowest):
- Command-line flags -
--juju-channel=4.0/edge
- Environment variables -
CONCIERGE_JUJU_CHANNEL=4.0/edge
- Configuration file -
concierge.yaml
- Preset defaults - Built-in preset values
- Fallback - If no config found, defaults to
dev preset
Quick Reference
concierge prepare -p dev
concierge prepare -p machine
concierge prepare -p k8s
concierge status
concierge restore
concierge prepare -p dev --extra-snaps=jhack
concierge prepare -p dev --juju-channel=4.0/edge
concierge prepare -c my-config.yaml
concierge prepare -p dev -v
export CONCIERGE_JUJU_CHANNEL="3.6/stable"
export CONCIERGE_EXTRA_SNAPS="jhack"
concierge prepare -p dev
Resources
Additional References
When you need detailed information:
Key reminders:
- Choose the right preset for your use case
restore does NOT preserve pre-existing configurations
- Use
concierge status to verify setup
- Add
--extra-snaps=jhack for rapid development
- Run with
-v or --trace when troubleshooting