Skip to main content

butleradm

butleradm is the CLI for platform administrators to manage the Butler platform itself.

Synopsis

butleradm [command] [flags]

Global Flags

FlagShortDescription
--config-cPath to config file
--verbose-vEnable verbose output
--help-hHelp for command

butleradm bootstrap

Bootstrap a new Butler management cluster.

Common Flags

All butleradm bootstrap <provider> commands share these flags. Each provider also has credential override flags documented in its section below.

FlagShortDescriptionRequired
--config-cPath to bootstrap config fileYes
--dry-runShow what would be created without executingNo
--skip-cleanupDon't delete KIND cluster on failure (for debugging)No
--localLocal development mode: build and load images from sourceNo
--repo-rootPath to butlerdotdev repos (default: ~/code/github.com/butlerdotdev)No

butleradm bootstrap harvester

Bootstrap Butler on Harvester HCI.

butleradm bootstrap harvester [flags]

Provider Flags:

FlagDescription
--harvester-kubeconfigPath to Harvester kubeconfig (overrides config file)

Examples:

# Bootstrap with config file
butleradm bootstrap harvester --config bootstrap.yaml

# Override Harvester kubeconfig via flag
butleradm bootstrap harvester --config bootstrap.yaml \
--harvester-kubeconfig /path/to/harvester-kubeconfig

# Dry run to validate
butleradm bootstrap harvester --config bootstrap.yaml --dry-run

Bootstrap Config Example:

The bootstrap config is a plain YAML file (not a Kubernetes resource). See Bootstrap Config Reference for all fields.

provider: harvester

cluster:
name: butler-mgmt
topology: ha
controlPlane:
replicas: 3
cpu: 4
memoryMB: 8192
diskGB: 50
workers:
replicas: 3
cpu: 8
memoryMB: 16384
diskGB: 100

network:
podCIDR: 10.244.0.0/16
serviceCIDR: 10.96.0.0/12
vip: 10.40.0.100
loadBalancerPool:
start: 10.40.0.110
end: 10.40.0.150

providerConfig:
harvester:
kubeconfigPath: ~/.butler/harvester-kubeconfig
namespace: default
networkName: default/vlan40-workloads
imageName: default/talos-v1-12-1

butleradm bootstrap nutanix

Bootstrap Butler on Nutanix AHV.

butleradm bootstrap nutanix [flags]

Provider Flags:

FlagDescription
--prism-endpointNutanix Prism Central endpoint (overrides config file)
--prism-usernameNutanix Prism Central username (overrides config file)
--prism-passwordNutanix Prism Central password (overrides config file)

Examples:

# Bootstrap with config file
butleradm bootstrap nutanix --config bootstrap.yaml

# Override Prism credentials via flags
butleradm bootstrap nutanix --config bootstrap.yaml \
--prism-endpoint https://prism.example.com:9440 \
--prism-username admin \
--prism-password "${PRISM_PASSWORD}"

butleradm bootstrap proxmox

Bootstrap Butler on Proxmox VE.

Note: Proxmox provider is planned. See roadmap for status.

butleradm bootstrap proxmox [flags]

butleradm bootstrap gcp

Bootstrap Butler on Google Cloud Platform.

butleradm bootstrap gcp [flags]

Provider Flags:

FlagDescription
--credentialsPath to GCP service account JSON key (overrides config file)

Examples:

# Bootstrap on GCP
butleradm bootstrap gcp --config bootstrap.yaml

# Override service account key via flag
butleradm bootstrap gcp --config bootstrap.yaml \
--credentials /path/to/sa-key.json

# Dry run to validate
butleradm bootstrap gcp --config bootstrap.yaml --dry-run

butleradm bootstrap aws

Bootstrap Butler on Amazon Web Services.

butleradm bootstrap aws [flags]

Provider Flags:

FlagDescription
--access-key-idAWS access key ID (overrides config file)
--secret-access-keyAWS secret access key (overrides config file)

Examples:

# Bootstrap on AWS
butleradm bootstrap aws --config bootstrap.yaml

# Override AWS credentials via flags
butleradm bootstrap aws --config bootstrap.yaml \
--access-key-id "${AWS_ACCESS_KEY_ID}" \
--secret-access-key "${AWS_SECRET_ACCESS_KEY}"

butleradm bootstrap azure

Bootstrap Butler on Microsoft Azure.

butleradm bootstrap azure [flags]

Provider Flags:

FlagDescription
--client-idAzure service principal app ID (overrides config file)
--client-secretAzure service principal password (overrides config file)
--tenant-idAzure tenant ID (overrides config file)
--subscription-idAzure subscription ID (overrides config file)

Examples:

# Bootstrap on Azure
butleradm bootstrap azure --config bootstrap.yaml

# Override Azure credentials via flags
butleradm bootstrap azure --config bootstrap.yaml \
--client-id "${AZURE_CLIENT_ID}" \
--client-secret "${AZURE_CLIENT_SECRET}" \
--tenant-id "${AZURE_TENANT_ID}" \
--subscription-id "${AZURE_SUBSCRIPTION_ID}"

Bootstrap Config Reference

The bootstrap config is a plain YAML file parsed by the CLI. See the Bootstrap Config Reference for all fields. Key sections:

SectionPurposeOn-PremCloud
spec.providerInfrastructure providerharvester, nutanix, proxmoxgcp, aws, azure
spec.clusterTopology, node sizingRequiredRequired
spec.network.vipControl plane VIPRecommended (kube-vip requires it)Not needed (LB endpoint used)
spec.network.loadBalancerPoolMetalLB IP rangeRecommendedNot needed
spec.talosTalos version, schematic, install diskRequiredRequired
spec.addonsPlatform addonsAll availablekube-vip and MetalLB not installed
spec.controlPlaneExposureTenant API server exposureOptionalOptional

butleradm status

Check Butler platform health.

butleradm status [flags]

Examples:

# Quick status check
butleradm status

# Detailed status
butleradm status -o yaml

Output:

Butler Platform Status
======================

Management Cluster: Healthy
Kubernetes: v1.30.0
Nodes: 6/6 Ready

Controllers:
butler-controller: Running (3 replicas)
steward-controller: Running (2 replicas)

DataStores:
default (etcd): Healthy (3 members)

Providers:
harvester-prod: Connected

Tenant Clusters: 12 total
Running: 10
Creating: 1
Failed: 1

butleradm provider

Manage infrastructure providers.

butleradm provider list

List configured providers.

butleradm provider list

Output:

NAME             TYPE       STATUS      CLUSTERS   AGE
harvester-prod harvester Connected 8 30d
nutanix-dc1 nutanix Connected 4 15d

butleradm provider validate

Validate provider connectivity and permissions.

butleradm provider validate <name> [flags]

Examples:

# Validate provider
butleradm provider validate harvester-prod

Output:

Validating provider: harvester-prod (harvester)
✓ API connectivity
✓ Authentication
✓ Network access (vlan-100)
✓ Image available (ubuntu-22.04)
✓ Storage class (longhorn)
✓ Create VM permission
✓ Delete VM permission

Provider validation: PASSED

butleradm provider add

Add a new provider configuration.

butleradm provider add <name> --type <type> [flags]

Flags:

FlagDescription
--typeProvider type: harvester, nutanix, proxmox, aws, azure, gcp
--kubeconfigProvider kubeconfig (Harvester)
--endpointAPI endpoint (Nutanix/Proxmox)
--credentialsPath to credentials file
--namespaceNamespace for ProviderConfig

butleradm version

Print version information.

butleradm version

Exit Codes

CodeDescription
0Success
1General error
2Configuration error
3Resource not found
4Bootstrap failed

See Also