{"id":33587001,"url":"https://github.com/rtulke/hicloud","last_synced_at":"2026-02-28T18:00:32.791Z","repository":{"id":292442332,"uuid":"980923093","full_name":"rtulke/hicloud","owner":"rtulke","description":"hicloud - a CLI-Console for managing Hetzner Cloud resources with autocompletion","archived":false,"fork":false,"pushed_at":"2026-02-28T16:06:26.000Z","size":365,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-28T16:22:36.140Z","etag":null,"topics":["cli","console","hetzner","hetzner-api","hetzner-cloud","hetzner-cloud-servers","hetzner-cloud-volumes","python","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rtulke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-10T00:48:56.000Z","updated_at":"2026-02-28T16:03:29.000Z","dependencies_parsed_at":"2025-05-10T06:00:24.836Z","dependency_job_id":"d32e552c-a1cb-4bce-8ece-704b791cf13e","html_url":"https://github.com/rtulke/hicloud","commit_stats":null,"previous_names":["rtulke/hicloud2","rtulke/hicloud"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/rtulke/hicloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtulke%2Fhicloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtulke%2Fhicloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtulke%2Fhicloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtulke%2Fhicloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rtulke","download_url":"https://codeload.github.com/rtulke/hicloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtulke%2Fhicloud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29946463,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T17:57:52.716Z","status":"ssl_error","status_checked_at":"2026-02-28T17:57:31.974Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","console","hetzner","hetzner-api","hetzner-cloud","hetzner-cloud-servers","hetzner-cloud-volumes","python","python3"],"created_at":"2025-11-29T10:00:23.708Z","updated_at":"2026-02-28T18:00:32.776Z","avatar_url":"https://github.com/rtulke.png","language":"Python","funding_links":[],"categories":["Tools"],"sub_categories":["Rust"],"readme":"# hicloud\n\nhicloud is an interactive CLI tool for anyone who wants to not only manage virtual machines in the Hetzner Cloud, but truly master them. Instead of cryptic parameter chains, it combines a dialog-based console with intelligent tab completion and context-sensitive wizards that structure complex operations step by step. The creation, management, and scaling of VMs become a guided, hands-on process that reduces errors and accelerates day-to-day work. hicloud is deliberately not an automation framework, but a tool for active interaction with live infrastructure—fast, focused, and under direct control. Cloud management is no longer merely “configured,” but consciously built: precise, efficient, and surprisingly pleasant.\n\nBecause it's enough for most people and because it's much faster than using complex CLI arguments — it works entirely with tab completion.\n\n## Features\n\n- **CLI Console with Tab Autocompletion** — context-aware completion for commands, subcommands, and live resource IDs\n- **Manage Multiple Hetzner Projects** — switch between projects without restarting\n- **VM Management** — create, start, stop, resize, rename, rescue, reset password\n- **Snapshot \u0026 Backup Management** — full snapshot/backup lifecycle\n- **Metrics Monitoring** — CPU, traffic, disk I/O via Hetzner metrics API\n- **Volume Management** — create, attach, detach, resize, protect\n- **Network Management** — private networks, subnets, server attachment\n- **Firewall Management** — full rule CRUD with server and label-selector targets\n- **Load Balancer Management** — CRUD, targets, services, health checks, algorithm\n- **Floating IP Management** — create, assign, rDNS, protection, IP Deletion Guard\n- **Primary IP Management** — create, assign, auto_delete, rDNS, protection, IP Deletion Guard\n- **Image Management** — list/filter snapshots \u0026 backups, delete/update custom images, import wizard\n- **ISO Management** — list, attach, detach\n- **SSH Key Management** — list, create, update, delete\n- **Location \u0026 Datacenter Information** — location list/info, datacenter list/info, server type discovery\n- **Pricing Information** — resource pricing tables and cost calculations\n- **Config Validation** — validate config file permissions, token format, required fields\n- **BATCH Processing** — start/stop/delete/snapshot multiple servers at once\n\n## Installation\n\n### Prerequisites\n\n- Python 3.6 or higher\n- pip (Python package manager)\n\n### Dependencies\n\n#### Option 1: Using Virtual Environment (Recommended)\n\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate   # On Linux/macOS\n# OR\n.venv\\Scripts\\activate      # On Windows\n\npip install -r requirements.txt\n```\n\nOr use the provided activation script:\n\n```bash\nsource activate_hicloud.sh\n```\n\n#### Option 2: Global Installation\n\n```bash\npip install -r requirements.txt\n```\n\n### Configuration\n\nGenerate a sample configuration file:\n\n```bash\npython hicloud.py --gen-config ~/.hicloud.toml\n```\n\nThen edit it and replace the placeholder tokens:\n\n```toml\n[default]\napi_token = \"your_api_token_here\"\nproject_name = \"default\"\n\n[project1]\napi_token = \"project1_api_token\"\nproject_name = \"Production\"\n\n[project2]\napi_token = \"project2_api_token\"\nproject_name = \"Development\"\n```\n\nSet correct permissions:\n\n```bash\nchmod 600 ~/.hicloud.toml\n```\n\n## Usage\n\nStart the interactive console:\n\n```bash\npython hicloud.py\n```\n\nUse a specific project from your configuration:\n\n```bash\npython hicloud.py --project project1\n```\n\nUse a one-time API token without a configuration file:\n\n```bash\npython hicloud.py --token your_api_token\n```\n\n### Interactive Console Commands\n\nType `help` inside the console to see all available commands:\n\n```\nVM Commands:\n  vm list                              - List all VMs\n  vm info \u003cid\u003e                         - Show detailed information about a VM\n  vm create                            - Create a new VM (interactive wizard)\n  vm start \u003cid\u003e                        - Start a VM\n  vm stop \u003cid\u003e                         - Stop a VM\n  vm reboot \u003cid\u003e                       - Reboot a VM\n  vm delete \u003cid\u003e                       - Delete a VM by ID\n  vm resize \u003cid\u003e \u003ctype\u003e                - Change server type\n  vm rename \u003cid\u003e \u003cname\u003e                - Rename a VM\n  vm rescue \u003cid\u003e                       - Enable rescue mode\n  vm reset-password \u003cid\u003e               - Reset root password\n  vm image \u003cid\u003e \u003cname\u003e                 - Create custom image from VM\n  vm image import [url]                - Start guided custom image import wizard\n\nSnapshot Commands:\n  snapshot list                        - List all snapshots\n  snapshot create                      - Create a snapshot for a VM\n  snapshot delete \u003cid\u003e                 - Delete a snapshot by ID\n  snapshot delete all                  - Delete all snapshots for a VM\n  snapshot rebuild \u003cid\u003e \u003csv\u003e           - Rebuild a server from a snapshot\n\nBackup Commands:\n  backup list                          - List all backups\n  backup enable \u003cid\u003e [WINDOW]          - Enable automatic backups for a VM\n  backup disable \u003cid\u003e                  - Disable automatic backups for a VM\n  backup delete \u003cid\u003e                   - Delete a backup by ID\n\nMonitoring Commands:  \n  metrics list \u003cid\u003e                    - List available metrics for a server\n  metrics cpu \u003cid\u003e [--hours=24]        - Show CPU utilization metrics\n  metrics traffic \u003cid\u003e [--days=7]      - Show network traffic metrics\n  metrics disk \u003cid\u003e [--days=1]         - Show disk I/O metrics\n\nImage Commands:\n  image list [snapshot|backup|all]     - List custom images (default: snapshot)\n  image info \u003cid\u003e                      - Show detailed information about an image\n  image delete \u003cid\u003e                    - Delete a custom image (with confirmation)\n  image update \u003cid\u003e                    - Update image description/labels (interactive)\n  image import [url]                   - Start guided custom image import wizard\n\nProject Commands:\n  project list                         - List all available projects\n  project switch \u003cn\u003e                   - Switch to a different project\n  project resources                    - Show all resources in the current project\n  project info                         - Show current project information\n\nBatch Commands:\n  batch start \u003cid1,id2,id3...\u003e         - Start multiple servers\n  batch stop \u003cid1,id2,id3...\u003e          - Stop multiple servers\n  batch delete \u003cid1,id2,id3...\u003e        - Delete multiple servers\n  batch snapshot \u003cid1,id2,id3...\u003e      - Create snapshots for multiple servers\n\nVolume Commands:\n  volume list                          - List all volumes\n  volume info \u003cid\u003e                     - Show detailed information about a volume\n  volume create                        - Create a new volume (interactive wizard)\n  volume delete \u003cid\u003e                   - Delete a volume by ID\n  volume attach \u003cvid\u003e \u003csid\u003e            - Attach volume to server\n  volume detach \u003cid\u003e                   - Detach volume from server\n  volume resize \u003cid\u003e \u003csize\u003e            - Resize a volume (increase only)\n  volume protect \u003cid\u003e \u003ce|d\u003e            - Enable/disable volume protection\n\nNetwork Commands:\n  network list                         - List all private networks\n  network info \u003cid\u003e                    - Show detailed information about a network\n  network create                       - Create a new private network (interactive)\n  network update \u003cid\u003e                  - Update network metadata (name, labels)\n  network delete \u003cid\u003e                  - Delete a network by ID\n  network attach \u003cnid\u003e \u003csid\u003e [ip]      - Attach server to network\n  network detach \u003cnid\u003e \u003csid\u003e           - Detach server from network\n  network subnet add \u003cid\u003e              - Add a subnet to network\n  network subnet delete \u003cid\u003e \u003cip\u003e      - Remove a subnet from network\n  network protect \u003cid\u003e \u003ce|d\u003e           - Enable/disable network protection\n\nFirewall Commands:\n  firewall list                        - List all firewalls\n  firewall info \u003cid\u003e                   - Show detailed information about a firewall\n  firewall create                      - Create a new firewall (interactive)\n  firewall update \u003cid\u003e                 - Update firewall metadata\n  firewall delete \u003cid\u003e                 - Delete a firewall by ID\n  firewall rules list \u003cid\u003e             - Show current rules for a firewall\n  firewall rules add \u003cid\u003e              - Append new rules to a firewall\n  firewall rules remove \u003cid\u003e \u003cidx\u003e     - Remove rules by 1-based index (comma-separated)\n  firewall rules set \u003cid\u003e              - Replace all rules for a firewall\n  firewall apply \u003cfid\u003e \u003csid[,..]\u003e      - Apply firewall to one or more servers\n  firewall apply \u003cfid\u003e label \u003csel\u003e     - Apply firewall to label selector targets\n  firewall remove \u003cfid\u003e \u003csid[,..]\u003e     - Remove firewall from one or more servers\n  firewall remove \u003cfid\u003e label \u003csel\u003e    - Remove firewall from label selector targets\n\nLoad Balancer Commands:\n  lb list                              - List all load balancers\n  lb info \u003cid\u003e                         - Show detailed information about a load balancer\n  lb create                            - Create a new load balancer (interactive wizard)\n  lb delete \u003cid\u003e                       - Delete a load balancer by ID\n  lb targets \u003cid\u003e list                 - Show current targets for a load balancer\n  lb targets \u003cid\u003e add server \u003csid\u003e     - Add server target (append `private` for private-ip routing)\n  lb targets \u003cid\u003e add label \u003csel\u003e      - Add a label selector target\n  lb targets \u003cid\u003e remove server \u003cs\u003e    - Remove server target\n  lb targets \u003cid\u003e remove label \u003cs\u003e     - Remove label selector target\n  lb service \u003cid\u003e list                 - Show services configured on a load balancer\n  lb service \u003cid\u003e add                  - Add a new service (protocol, ports, health check wizard)\n  lb service \u003cid\u003e update \u003cport         - Update an existing service\n  lb service \u003cid\u003e delete \u003cport\u003e        - Remove a service by listen port\n  lb algorithm \u003cid\u003e \u003cround_robin|least_connections\u003e  - Change load balancing algorithm\n\nFloating IP Commands: \n  floating-ip list                     - List all floating IPs\n  floating-ip info \u003cid\u003e                - Show detailed information about a floating IP\n  floating-ip create                   - Create a new floating IP (interactive wizard)\n  floating-ip update \u003cid\u003e              - Update name/description/labels (interactive)\n  floating-ip delete \u003cid\u003e              - Delete a floating IP (guarded: unassign \u0026 unprotect first)\n  floating-ip assign \u003cid\u003e \u003csid\u003e        - Assign floating IP to a server\n  floating-ip unassign \u003cid\u003e            - Unassign floating IP from its server\n  floating-ip dns \u003cid\u003e \u003cip\u003e \u003cptr\u003e      - Set reverse DNS pointer (use \"reset\" to clear)\n  floating-ip protect \u003cid\u003e \u003ce|d\u003e       - Enable/disable delete protection\n\nPrimary IP Commands:\n  primary-ip list                      - List all primary IPs\n  primary-ip info \u003cid\u003e                 - Show detailed information about a primary IP\n  primary-ip create                    - Create a new primary IP (interactive wizard)\n  primary-ip update \u003cid\u003e               - Update name/auto_delete/labels (interactive)\n  primary-ip delete \u003cid\u003e               - Delete a primary IP (guarded: unassign \u0026 unprotect first)\n  primary-ip assign \u003cid\u003e \u003csid\u003e         - Assign primary IP to a server\n  primary-ip unassign \u003cid\u003e             - Unassign primary IP from its server\n  primary-ip dns \u003cid\u003e \u003cip\u003e \u003cptr\u003e       - Set reverse DNS pointer (use \"reset\" to clear)\n  primary-ip protect \u003cid\u003e \u003ce|d\u003e        - Enable/disable delete protection\n\nISO Commands:\n  iso list                             - List all available ISOs\n  iso info \u003cid\u003e                        - Show detailed information about an ISO\n  iso attach \u003ciso_id\u003e \u003cserver_id\u003e      - Attach ISO to server\n  iso detach \u003cserver_id\u003e               - Detach ISO from server\n\nLocation \u0026 Datacenter Commands:\n  location list                        - List all available locations\n  location info \u003cid\u003e                   - Show detailed information about a location\n  datacenter list                      - List all available datacenters\n  datacenter info \u003cid\u003e                 - Show datacenter details and supported server types\n\nServer Type Commands:\n  server-type list [location]          - List all server types, optionally filtered by location\n  server-type info \u003cname|id\u003e           - Show CPU, RAM, disk, architecture, and pricing\n\nPricing Commands:\n  pricing list                         - Show pricing table for all resources\n  pricing calculate                    - Calculate monthly costs for current resources\n\nConfig Commands:\n  config validate                      - Validate config file (permissions, fields, token format)\n  config info                          - Show active config path and project sections\n\nSSH Key Commands: \n  keys list                            - List all SSH keys\n  keys info \u003cid\u003e                       - Show detailed information about an SSH key\n  keys create [name] [file]            - Create/upload a new SSH key\n  keys update \u003cid\u003e                     - Update SSH key metadata (name, labels)\n  keys delete \u003cid\u003e                     - Delete an SSH key by ID\n\nGeneral Commands: \n  history                              - Show command history\n  history clear                        - Clear command history\n  clear                                - Clear screen\n  help [command]                       - Show help or detailed info about a command\n  exit, quit, q, Ctrl-D                - Exit the program\n```\n\n### Context-Aware Help \u0026 Completion\n\n- Use `help \u003ccommand\u003e` (for example `help vm`) to display all subcommands plus their syntax without leaving the console.\n- Press \u003ckbd\u003eTAB\u003c/kbd\u003e at any position to auto-complete commands, subcommands, and resource identifiers; suggestions are fetched live from Hetzner (server IDs, volume IDs, floating IP IDs, etc.).\n- When multiple options exist, hicloud prints the matching values above the prompt so you can keep typing without guessing argument order.\n\n## Examples\n\n### Floating IP Management\n\n```bash\nhicloud\u003e floating-ip list                        # List all floating IPs\nhicloud\u003e floating-ip create                      # Interactive creation wizard\nhicloud\u003e floating-ip assign 1234 5678            # Assign IP 1234 to server 5678\nhicloud\u003e floating-ip dns 1234 1.2.3.4 host.example.com  # Set rDNS pointer\nhicloud\u003e floating-ip dns 1234 1.2.3.4 reset      # Clear rDNS pointer\nhicloud\u003e floating-ip protect 1234 enable         # Enable delete protection\nhicloud\u003e floating-ip unassign 1234               # Unassign from server\nhicloud\u003e floating-ip delete 1234                 # Delete (guarded: must be unassigned and unprotected)\n```\n\n### Primary IP Management\n\n```bash\nhicloud\u003e primary-ip list                         # List all primary IPs\nhicloud\u003e primary-ip create                       # Interactive creation wizard\nhicloud\u003e primary-ip assign 20 5678               # Assign primary IP 20 to server 5678\nhicloud\u003e primary-ip update 20                    # Update name or auto_delete interactively\nhicloud\u003e primary-ip dns 20 10.0.0.1 host.example.com  # Set rDNS pointer\nhicloud\u003e primary-ip protect 20 enable            # Enable delete protection\nhicloud\u003e primary-ip delete 20                    # Delete (guarded: must be unassigned and unprotected)\n```\n\n### Image Management\n\n```bash\nhicloud\u003e image list                              # List custom snapshot images\nhicloud\u003e image list backup                       # List backup images\nhicloud\u003e image list all                          # List all image types\nhicloud\u003e image info 1234                         # Show image details\nhicloud\u003e image update 1234                       # Update description or labels\nhicloud\u003e image delete 1234                       # Delete a custom image (with confirmation)\nhicloud\u003e image import                            # Interactive import wizard\nhicloud\u003e image import https://example.com/my.qcow2  # Import with URL pre-filled\n```\n\n### Load Balancer Services\n\n```bash\nhicloud\u003e lb list                                 # List all load balancers\nhicloud\u003e lb service 1234 list                    # Show services on LB 1234\nhicloud\u003e lb service 1234 add                     # Add service via interactive wizard\nhicloud\u003e lb service 1234 update 80               # Update service on port 80\nhicloud\u003e lb service 1234 delete 80               # Remove service on port 80\nhicloud\u003e lb algorithm 1234 round_robin           # Switch to round-robin algorithm\nhicloud\u003e lb algorithm 1234 least_connections     # Switch to least-connections algorithm\n```\n\n### Server Type Discovery\n\n```bash\nhicloud\u003e server-type list                        # List all server types grouped by architecture\nhicloud\u003e server-type list nbg1                   # Filter by location\nhicloud\u003e server-type info cx22                   # Show specs and pricing by location\nhicloud\u003e server-type info 3                      # Look up server type by numeric ID\n```\n\n### Config Validation\n\n```bash\nhicloud\u003e config validate                         # Validate ~/.hicloud.toml (permissions, fields, token)\nhicloud\u003e config info                             # Show active config path and all project sections\n```\n\n### ISO Management\n\n```bash\nhicloud\u003e iso list                                # List all available ISOs\nhicloud\u003e iso info 1234                           # Show details about a specific ISO\nhicloud\u003e iso attach 1234 5678                    # Attach ISO 1234 to server 5678\nhicloud\u003e iso detach 5678                         # Detach ISO from server 5678\n```\n\n### Custom Image Import\n\nBring your own images hosted on HTTP(S) storage via the interactive wizard:\n\n```bash\nhicloud\u003e vm image import\n```\n\nOptional: provide a URL upfront (`vm image import https://example.com/my-image.qcow2`) and the wizard pre-fills the first step before asking for name, architecture, and description. The same wizard is also available as `image import`.\n\n### Network Management\n\n```bash\nhicloud\u003e network list                            # List all private networks\nhicloud\u003e network info 12345                      # Show detailed network information\nhicloud\u003e network create                          # Create new private network (interactive wizard)\nhicloud\u003e network attach 12345 5678               # Attach server 5678 to network 12345\nhicloud\u003e network detach 12345 5678               # Detach server from network\nhicloud\u003e network subnet add 12345                # Add a subnet to network\nhicloud\u003e network protect 12345 enable            # Enable delete protection\n```\n\n### Volume Management\n\n```bash\nhicloud\u003e volume create                           # Interactive volume creation wizard\nhicloud\u003e volume list                             # List all volumes with attachment status\nhicloud\u003e volume attach 1234 5678                 # Attach volume 1234 to server 5678\nhicloud\u003e volume resize 1234 50                   # Increase volume size to 50 GB\nhicloud\u003e volume detach 1234                      # Detach volume from server\n```\n\n### Batch Operations\n\n```bash\nhicloud\u003e batch start 1,2,3                       # Start multiple servers\nhicloud\u003e batch stop 1,2,3                        # Stop multiple servers\nhicloud\u003e batch snapshot 1,2,3                    # Create snapshots for multiple servers\nhicloud\u003e batch delete 1,2,3                      # Delete multiple servers (with confirmation)\n```\n\n## Development\n\n```\nhicloud/\n│\n├── hicloud.py               # Main entry point\n│\n├── lib/                     # Core libraries\n│   ├── api.py               # HetznerCloudManager — all HTTP calls\n│   ├── config.py            # ConfigManager — TOML loading, permission validation\n│   └── console.py           # InteractiveConsole — REPL, tab completion, dispatch\n│\n├── commands/                # Resource command handlers\n│   ├── vm.py                # VMCommands\n│   ├── snapshot.py          # SnapshotCommands\n│   ├── backup.py            # BackupCommands\n│   ├── metrics.py           # MetricsCommands\n│   ├── project.py           # ProjectCommands\n│   ├── pricing.py           # PricingCommands\n│   ├── keys.py              # KeysCommands\n│   ├── volume.py            # VolumeCommands\n│   ├── network.py           # NetworkCommands\n│   ├── firewall.py          # FirewallCommands\n│   ├── loadbalancer.py      # LoadBalancerCommands\n│   ├── floating_ip.py       # FloatingIPCommands\n│   ├── primary_ip.py        # PrimaryIPCommands\n│   ├── image.py             # ImageCommands\n│   ├── config.py            # ConfigCommands\n│   ├── batch.py             # BatchCommands\n│   ├── iso.py               # ISOCommands\n│   └── location.py          # LocationCommands + DatacenterCommands + ServerTypeCommands\n│\n├── utils/\n│   ├── formatting.py        # Table layout, terminal width helpers\n│   ├── colors.py            # ANSI 24-bit RGB color constants\n│   ├── constants.py         # API_BASE_URL, DEFAULT_CONFIG_PATH, VERSION\n│   └── spinner.py           # DotsSpinner — threaded progress indicator\n│\n└── tests/\n    ├── TEST_PLAN.md         # Current test status and open test tasks\n    ├── commands/            # Unit tests for command handlers (test_\u003ccommand\u003e.py)\n    │   ├── test_vm.py\n    │   ├── test_snapshot.py\n    │   ├── test_backup.py\n    │   ├── test_metrics.py\n    │   ├── test_project.py\n    │   ├── test_pricing.py\n    │   ├── test_keys.py\n    │   ├── test_volume.py\n    │   ├── test_network.py\n    │   ├── test_firewall.py\n    │   ├── test_loadbalancer.py\n    │   ├── test_floating_ip.py\n    │   ├── test_primary_ip.py\n    │   ├── test_image.py\n    │   ├── test_config.py\n    │   ├── test_batch.py\n    │   ├── test_iso.py\n    │   └── test_location_servertype.py\n    └── lib/                 # Unit tests for API layer (HetznerCloudManager)\n        ├── test_api_core.py\n        ├── test_api_vm.py\n        ├── test_api_snapshot.py\n        ├── test_api_backup.py\n        ├── test_api_batch.py\n        ├── test_api_volume.py\n        ├── test_api_network.py\n        ├── test_api_iso.py\n        ├── test_api_keys.py\n        ├── test_api_location.py\n        ├── test_api_metrics.py\n        ├── test_api_pricing.py\n        ├── test_api_project.py\n        ├── test_api_firewall.py\n        ├── test_api_loadbalancer.py\n        ├── test_api_floating_ip.py\n        ├── test_api_primary_ip.py\n        └── test_api_image.py\n```\n\n## Troubleshooting\n\n### Auto-Completion Prints \"Missing \\\u003ccmd\u003e subcommand…\"\n\nAfter you type a command followed by a space (for example `iso `), TAB completion switches into \"subcommand mode\" and prints contextual help above the prompt. If you hit \u003ckbd\u003eEnter\u003c/kbd\u003e without a valid subcommand, the handler shows a usage hint. These messages are not errors — simply type a valid subcommand after the first space.\n\n### macOS + iTerm2: Page Up/Down only print `~`\n\nmacOS Terminal and hicloud support Page Up/Down out of the box. iTerm2 ships with *\"Page up, page down, home and end scroll outside interactive apps\"* enabled by default, which intercepts the keys. Fix:\n\n1. Open iTerm2 → **Preferences** (`⌘+,`) → **Keys**.\n2. Either disable the above scrolling option, or add explicit *Key Bindings* for `Page Up`, `Page Down`, `Home`, and `End` that **Send Escape Sequence** with `\\[5~`, `\\[6~`, `\\[H`, `\\[F`.\n\n## Feature Tracker\n\nStatus icons: ✅ shipped, 🟡 partial support, ⬜ not started.\n\n| ID | Category | Feature | Status | Coverage / Next Steps |\n|----|----------|---------|--------|------------------------|\n| 1 | Top Priority | Network Management | ✅ | `commands/network.py` ships list/info/create/update/delete plus attach/detach/subnet/protect. |\n| 2 | Top Priority | Firewall Management | ✅ | `commands/firewall.py` provides CRUD, robust `rules list|add|remove|set`, server and label-selector apply/remove flows. |\n| 3 | Top Priority | Volume Management | ✅ | `commands/volume.py` implements list/info/create/delete/attach/detach/resize/protect. |\n| 4 | Top Priority | Load Balancer | ✅ | `commands/loadbalancer.py` supports full CRUD, targets (server + label-selector), service list/add/update/delete wizard, health checks, algorithm change. |\n| 5 | Advanced | Floating IPs | ✅ | `commands/floating_ip.py` implements list/info/create/update/delete/assign/unassign/rDNS/protection. IP Deletion Guard (ID 28) built in. |\n| 6 | Advanced | Image Management | ✅ | `commands/image.py` provides list/info/delete/update/import; `vm image` alias still works. |\n| 7 | Advanced | Enhanced Monitoring | 🟡 | `commands/metrics.py` covers `metrics list|cpu|traffic|disk`; alerting/export flows still to implement. |\n| 8 | Advanced | Resource Overview | 🟡 | `project resources` and `datacenter resources` provide partial overview; no dedicated unified usage/limits view yet. |\n| 9 | Infrastructure | ISO Management | ✅ | `commands/iso.py` delivers list/info/attach/detach. |\n| 10 | Infrastructure | Placement Groups | ⬜ | No placement group module yet (`placement list|create|assign`). |\n| 11 | Infrastructure | Action Management | ⬜ | `action list/status/cancel/history` absent; would wrap Hetzner action endpoints. |\n| 12 | Business Intelligence | Enhanced Analytics | 🟡 | `commands/pricing.py` supports `list` and `calculate`; forecast/compare/optimization helpers missing. |\n| 13 | Business Intelligence | Backup Policies | 🟡 | `commands/backup.py` handles list/enable/disable/delete; policy view/restore/schedule flows to build. |\n| 14 | CLI UX | Context-aware Autocomplete | 🟡 | ID-based suggestions and inline argument hints implemented; name-based suggestions still open. |\n| 15 | CLI UX | Inline Help Overlay | ⬜ | TAB-based hints exist; no toggleable overlay for invalid input. |\n| 16 | CLI UX | Prompt \u0026 Status UX | 🟡 | Startup shows active project and connection state; a dedicated `status` command is not implemented. |\n| 17 | CLI UX | Table `--format` / `--sort` Options | 🟡 | Table layout adapts to terminal width; command-level flags not implemented. |\n| 18 | Safety | Guided Destructive Workflows | 🟡 | Many commands require confirmation prompts; standardized flags and cost previews still missing. |\n| 19 | Operations | Diagnostics \u0026 Logging Command | ⬜ | No `diagnostics` command; only global `--debug` flag exists. |\n| 20 | Quality | Base `tests/` + Fixtures | 🟡 | `tests/` covers commands/ and lib/ for all shipped modules; shared fixtures and broader coverage patterns still evolving. |\n| 21 | Security | `config validate` + GPG | 🟡 | `config validate` CLI command shipped (`commands/config.py`); optional GPG encryption not implemented. |\n| 22 | Automation | Recurring Job Helpers | ⬜ | No built-in helpers yet for snapshot rotation, backup enforcement, or cost alerts. |\n| 23 | Top Priority | Load Balancer Advanced Operations | ✅ | Service/listener CRUD, health-check wizard, algorithm change implemented in `commands/loadbalancer.py`. |\n| 24 | Infrastructure | Primary IP Management | ✅ | `commands/primary_ip.py` implements list/info/create/update/delete/assign/unassign/rDNS/protection. Deletion Guard built in. |\n| 25 | Infrastructure | Certificates Management | ⬜ | No certificates command module yet; add list/create/update/delete for TLS workflows with load balancers. |\n| 26 | Infrastructure | DNS Zones \u0026 RRsets | ⬜ | DNS API surface not represented; add zone and record-set command modules. |\n| 27 | Infrastructure | Server Type Discovery | ✅ | `server-type list [location]` and `server-type info \u003cname|id\u003e` implemented in `commands/location.py`. |\n| 28 | Safety | IP Deletion Policy Guard (May 1, 2026) | ✅ | Built into `floating-ip delete` and `primary-ip delete`: blocks deletion if IP is assigned or protected, with actionable error messages. |\n\n## License\n\nThis project is licensed under the GPL-3.0 License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frtulke%2Fhicloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frtulke%2Fhicloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frtulke%2Fhicloud/lists"}