Skip to content

Cloud Provider Integration

Shoehorn discovers cloud resources (servers, databases, Kubernetes clusters, object storage) and catalogs them as entities. Currently supports UpCloud, with AWS/Azure/GCP planned.

Cloud resource discovery runs in the crawler service on a configurable sync interval (default: 15 minutes). Resources are automatically cataloged as entities with rich metadata, pricing, and console links.

Cloud API → Provider → Transformer → Database + Search Index
Entity detail page with specialized cards
Resource TypeEntity TypeConsole Link
Serverupcloud-serverhub.upcloud.com/server/{uuid}
Managed Databaseupcloud-dbhub.upcloud.com/database/{uuid}
Managed Kubernetesupcloud-k8shub.upcloud.com/kubernetes/{uuid}
Managed Object Storageupcloud-objectstoragehub.upcloud.com/object-storage/{uuid}
Terminal window
# Enable UpCloud discovery
CLOUD_PROVIDER_UPCLOUD_ENABLED=true
# API token (get from https://hub.upcloud.com/account/api-keys)
UPCLOUD_TOKEN=ucat_your_token_here
# Sync interval (default: 15m, minimum: 1m)
CLOUD_PROVIDER_SYNC_INTERVAL=15m
# Per-provider override (optional)
UPCLOUD_SYNC_INTERVAL=5m

Helm chart (values.yaml):

cloudProviders:
syncInterval: "15m"
upcloud:
enabled: true
syncInterval: "" # empty = use global

Token is stored in the integration-credentials secret (key: upcloud_token).


UpCloud resource labels control how entities appear in Shoehorn. Add labels in the UpCloud Hub or via the UpCloud API.

UpCloud LabelWhere it appearsExample Value
teamContacts Card (owner)platform
ownerContacts Card (owner)infra-team
descriptionAbout CardProduction API database
tagsAbout Card (comma-separated)critical,tier-1,eu-west
linksLinks Card (name=url pairs)Grafana=https://grafana.io/d/xyz
slackChannelSlack Cardplatform-alerts

Apply these labels to an UpCloud database in the UpCloud Hub:

team=platform
description=Production PostgreSQL 16 cluster for the API
tags=critical,tier-1,eu-west
links=Grafana=https://grafana.io/d/db-dashboard,Runbook=https://wiki.internal/db-runbook
slackChannel=db-alerts

Result in Shoehorn:

  • Contacts Card: Shows “platform” as owner
  • About Card: Shows description + tags
  • Links Card: Shows Grafana and Runbook links alongside the auto-generated UpCloud Console link
  • Slack Card: Shows #db-alerts channel link

Any label NOT in the list above appears as a metadata badge on the entity detail page. For example:

env=production
region=eu-west
cost-center=engineering

These show as key-value badges in the Cloud Summary card.

  • slackChannel and slackchannel are both supported (UpCloud labels may vary in casing)
  • All other labels are case-sensitive

Monthly pricing is automatically calculated from the UpCloud pricing API.

ResourceFormula
ServerPlan price per hour × 730
DatabasePlan price per hour × 730
KubernetesControl plane price + sum(node count × node plan price)
Object StorageStandard tier price

Prices are in EUR. Displayed as monthly cost on entity detail cards.


Cloud entities are fully searchable. Users can search by:

  • Entity name, description
  • IP address, hostname
  • Zone, plan, engine
  • Label values (e.g., search “production” finds entities with env=production label)
  • UpCloud UUID

Cloud entity IDs use colons: upcloud:server:abc123. These work in browser URLs without encoding:

/catalog/entities/upcloud:server:abc123

AWS, Azure, and GCP integrations are on the roadmap. Track progress or open a request at github.com/shoehorn-dev/shoehorn/issues.