ワンクリックで
concierge
Provisioning charm development and testing environments using concierge presets and custom configuration
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Provisioning charm development and testing environments using concierge presets and custom configuration
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Known-good Juju bundle shapes (COS Lite, 12-Factor + COS, Identity Platform, Charmed Kubeflow) — canonical app lists and relation edges
Implementing Juju actions for operational tasks in charms. WHEN: add Juju actions to a charm, implement backup / rotate-credentials / restore actions, declare actions in charmcraft.yaml, write action handlers, test actions with Scenario, run actions with juju run.
Adding and validating charm configuration options. WHEN: add charm configuration options, declare config in charmcraft.yaml, validate config values in config-changed, apply config to a Pebble layer, apply config to a machine charm, write Scenario tests for config.
End-to-end workflow for building ops-framework charms for custom applications (K8s and machine). WHEN: build a custom Juju charm, write src/charm.py with Pebble, write a machine charm with systemd, decide K8s vs machine substrate, scaffold a non-paas-charm with charmcraft init, customise the ops framework charm lifecycle.
Workflow for charming infrastructure software (databases, caches, message brokers, proxies, monitoring). WHEN: charm infrastructure software, charm a database / cache / message broker / proxy / monitoring system, implement peer relations, leader election, primary/replica failover, backup and restore actions, clustering.
Expert guidance for developing, building, testing, and publishing Juju charms using charmcraft. WHEN: edit charmcraft.yaml, run charmcraft pack, run charmcraft init, manage charm libraries, publish a charm to Charmhub, set up multi-base builds, configure relations / config options, set up storage or containers.
| name | concierge |
| description | Provisioning charm development and testing environments using concierge presets and custom configuration |
Expert guidance for provisioning and managing charm development and testing environments using concierge.
Concierge is an opinionated utility for automating the setup of charm development machines. It:
# Full development environment (recommended for most developers)
concierge prepare -p dev
# Machine charm development only
concierge prepare -p machine
# Kubernetes-focused development
concierge prepare -p k8s
# Lightweight K8s with MicroK8s
concierge prepare -p microk8s
# Build tools only (no Juju)
concierge prepare -p crafts
Presets comparison:
| Preset | Juju | LXD | K8s | MicroK8s | Charmcraft | Snapcraft | Rockcraft | Jhack |
|---|---|---|---|---|---|---|---|---|
| dev | Yes | Yes (bootstrapped) | Yes (bootstrapped) | -- | Yes | Yes | Yes | Yes |
| machine | Yes | Yes (bootstrapped) | -- | -- | Yes | Yes | -- | -- |
| k8s | Yes | Yes (build only) | Yes (bootstrapped) | -- | Yes | -- | Yes | -- |
| microk8s | Yes | Yes (build only) | -- | Yes (bootstrapped) | Yes | -- | Yes | -- |
| crafts | -- | Yes | -- | -- | Yes | Yes | Yes | -- |
# Check provisioning status
concierge status
# Possible states: "provisioning", "succeeded", "failed"
# Reverse the prepare operation
concierge restore
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.
--dry-run)Both prepare and restore accept --dry-run, which prints the
shell commands that would run without actually touching the system.
Useful for reviewing what a preset or custom config will do before
committing — especially on a machine that already has snaps or a Juju
controller you don't want clobbered.
concierge prepare -p k8s --dry-run
concierge restore --dry-run
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"
# Arbitrary flags appended to `juju bootstrap`; shell-style splitting.
extra-bootstrap-args: --config idle-connection-timeout=90s --auto-upgrade=true
providers:
microk8s:
enable: true
bootstrap: true
channel: "1.31-strict/stable"
# Mirror docker.io when rate limits or corporate proxies bite.
# Values interpolate ``$VAR`` / ``${VAR}`` from the environment.
image-registry:
url: https://mirror.example.com
username: ${REGISTRY_USER}
password: ${REGISTRY_PASS}
lxd:
enable: true
bootstrap: true
channel: "5.21/stable"
k8s:
enable: false
# Same image-registry shape also supported on the k8s provider.
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
# Override snap channels
concierge prepare -p dev --juju-channel=4.0/edge
# Install extra packages
concierge prepare -p dev \
--extra-snaps=astral-uv/latest/edge,jhack \
--extra-debs=build-essential,python3-tox
# Skip Juju installation/bootstrap
concierge prepare -p crafts --disable-juju
# Use Google Cloud credentials
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-channelAll 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
# 1. Install concierge
sudo snap install --classic concierge
# 2. Prepare full dev environment
concierge prepare -p dev --extra-snaps=jhack
# 3. Verify installation
concierge status
juju controllers
lxc list
# 4. Start developing
cd my-charm-project
charmcraft pack
juju deploy ./my-charm.charm
concierge prepare -p k8s
juju controllers
juju add-model test
juju deploy postgresql-k8s
# Just install craft tools (no Juju)
concierge prepare -p crafts
cd my-charm && charmcraft pack
concierge prepare -p dev \
--juju-channel=3.6/stable \
--extra-snaps=astral-uv/latest/edge \
--extra-debs=python3-tox,make
concierge status
# GitHub Actions example
- 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
k8s over microk8s for Kubernetes work. The
canonical k8s snap is the recommended default substrate for
new charm development. Reach for microk8s only when the user
has explicitly asked for it, or when an existing dev box is
already on it. The two are not interchangeable from the
registry standpoint — microk8s has a built-in registry add-on
at localhost:32000, whereas the k8s snap has none and you
need to deploy a registry charm with setup_local_registry.dev for general charm development — includes everything most developers needmachine for traditional charms — no K8s overheadk8s for Kubernetes-only work — lighter than dev, uses the canonical k8s snapmicrok8s only when explicitly requested — same Juju surface, different substratecrafts for build servers — minimal installation for building onlyconcierge.yamlconcierge.yamlrestore on production machines — it removes configurations blindlyconcierge status shows what happened--extra-debs / host.debs —
docker.io, docker-ce, docker-engine, containerd, and
containerd.io all conflict with the k8s snap's bundled
containerd (both target /run/containerd/containerd.sock and
/var/lib/containerd, deadlocking on the boltdb). Charms
consume OCI images via skopeo + the k8s snap's runtime — a
system Docker engine is never needed. The run_command tool
blocks these package names; the user's policy is explicit. When
the cluster is already broken from a prior install, load the
fix-broken-juju-k8s skill.prepare unnecessarilysnap refresh for updates, not restore+prepareConcierge uses this priority order (highest to lowest):
--juju-channel=4.0/edgeCONCIERGE_JUJU_CHANNEL=4.0/edgeconcierge.yamldev preset# Run with verbose logging
concierge prepare -p dev -v
# Run with trace logging for detailed output
concierge prepare -p dev --trace
# Check status
concierge status
Common issues:
# Check Juju logs
juju debug-log -m controller
# Manually bootstrap if needed
juju bootstrap lxd
juju bootstrap microk8s
# Check provider status
lxc list # For LXD
microk8s status # For MicroK8s
# Check snap connectivity
snap version
snap list
# Manually install problematic snaps
sudo snap install juju --channel=3.6/stable --classic
# Then retry prepare
concierge prepare -p dev
# Prepare environment
concierge prepare [flags]
concierge prepare -p <preset>
concierge prepare -c <config-file>
# Check status
concierge status
# Restore/cleanup
concierge restore
# Shell completion
concierge completion bash
concierge completion zsh
concierge completion fish
# Help
concierge --help
concierge prepare --help
concierge --version
# Logging
concierge prepare -p dev -v # Verbose
concierge prepare -p dev --trace # Trace (very detailed)