hcloud

package
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 4, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client wraps the Hetzner Cloud API client with idempotent helpers. It implements Interface.

func NewClient

func NewClient(token string) *Client

NewClient creates a new Hetzner Cloud API client authenticated with the given token.

func (*Client) AddNetworkCloudSubnet added in v0.5.0

func (c *Client) AddNetworkCloudSubnet(ctx context.Context, networkID int64, zone string) error

AddNetworkCloudSubnet adds a Cloud subnet in the given Hetzner network zone.

func (*Client) AttachServerToLoadBalancer

func (c *Client) AttachServerToLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error

AttachServerToLoadBalancer attaches an existing server target to a load balancer.

func (*Client) AttachServerToNetwork added in v0.5.0

func (c *Client) AttachServerToNetwork(ctx context.Context, serverID int64, networkID int64) error

AttachServerToNetwork attaches an existing server to an existing private network.

func (*Client) AttachVolume

func (c *Client) AttachVolume(ctx context.Context, volumeID int64, serverID int64) error

AttachVolume attaches an existing volume to a server.

func (*Client) ChangeServerType added in v0.4.0

func (c *Client) ChangeServerType(ctx context.Context, id int64, serverTypeName string, upgradeDisk bool) error

ChangeServerType changes a server's type. The server must be off. Idempotent if already the requested type.

func (*Client) CreateLoadBalancer

func (c *Client) CreateLoadBalancer(ctx context.Context, opts LoadBalancerCreateOpts) (*LoadBalancerInfo, error)

CreateLoadBalancer provisions a new Hetzner Cloud load balancer.

func (*Client) CreateNetwork added in v0.5.0

func (c *Client) CreateNetwork(ctx context.Context, opts NetworkCreateOpts) (*NetworkInfo, error)

CreateNetwork creates a private network with the given IPv4 CIDR.

func (*Client) CreateServer

func (c *Client) CreateServer(ctx context.Context, opts ServerCreateOpts) (*ServerInfo, error)

CreateServer provisions a new Hetzner Cloud server.

func (*Client) CreateVolume

func (c *Client) CreateVolume(ctx context.Context, opts VolumeCreateOpts) (*VolumeInfo, error)

CreateVolume provisions a new Hetzner Cloud volume.

func (*Client) DeleteLoadBalancer

func (c *Client) DeleteLoadBalancer(ctx context.Context, id int64) error

DeleteLoadBalancer destroys a Hetzner Cloud load balancer by ID.

func (*Client) DeleteNetwork added in v0.5.0

func (c *Client) DeleteNetwork(ctx context.Context, id int64) error

DeleteNetwork deletes a private network by ID.

func (*Client) DeleteServer

func (c *Client) DeleteServer(ctx context.Context, id int64) error

DeleteServer destroys a Hetzner Cloud server by ID. Idempotent — returns nil if the server does not exist.

func (*Client) DeleteVolume

func (c *Client) DeleteVolume(ctx context.Context, id int64) error

DeleteVolume destroys a Hetzner Cloud volume by ID.

func (*Client) DetachServerFromLoadBalancer

func (c *Client) DetachServerFromLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error

DetachServerFromLoadBalancer detaches a server target from a load balancer.

func (*Client) DetachServerFromNetwork added in v0.5.0

func (c *Client) DetachServerFromNetwork(ctx context.Context, serverID int64, networkID int64) error

DetachServerFromNetwork detaches a server from a private network.

func (*Client) DetachVolume

func (c *Client) DetachVolume(ctx context.Context, volumeID int64) error

DetachVolume detaches an existing volume from any server.

func (*Client) GetLoadBalancer

func (c *Client) GetLoadBalancer(ctx context.Context, id int64) (*LoadBalancerInfo, error)

GetLoadBalancer fetches a load balancer by its Hetzner Cloud ID.

func (*Client) GetLoadBalancerByName

func (c *Client) GetLoadBalancerByName(ctx context.Context, name string) (*LoadBalancerInfo, error)

GetLoadBalancerByName fetches a load balancer by its name.

func (*Client) GetNetwork added in v0.5.0

func (c *Client) GetNetwork(ctx context.Context, id int64) (*NetworkInfo, error)

GetNetwork fetches a private network by Hetzner ID.

func (*Client) GetNetworkByName added in v0.5.0

func (c *Client) GetNetworkByName(ctx context.Context, name string) (*NetworkInfo, error)

GetNetworkByName fetches a private network by name.

func (*Client) GetServer

func (c *Client) GetServer(ctx context.Context, id int64) (*ServerInfo, error)

GetServer fetches a server by its Hetzner Cloud ID. Returns nil, nil if the server does not exist.

func (*Client) GetServerByName

func (c *Client) GetServerByName(ctx context.Context, name string) (*ServerInfo, error)

GetServerByName fetches a server by its name. Returns nil, nil if the server does not exist.

func (*Client) GetVolume

func (c *Client) GetVolume(ctx context.Context, id int64) (*VolumeInfo, error)

GetVolume fetches a volume by its Hetzner Cloud ID.

func (*Client) GetVolumeByName

func (c *Client) GetVolumeByName(ctx context.Context, name string) (*VolumeInfo, error)

GetVolumeByName fetches a volume by its name.

func (*Client) PowerOffServer added in v0.4.0

func (c *Client) PowerOffServer(ctx context.Context, id int64) error

PowerOffServer requests a graceful power-off for the server. Idempotent if already off.

func (*Client) PowerOnServer added in v0.4.0

func (c *Client) PowerOnServer(ctx context.Context, id int64) error

PowerOnServer powers on a stopped server. Idempotent if already running.

type FakeClient

type FakeClient struct {

	// CreateErr, if non-nil, is returned by every CreateServer call.
	CreateErr error
	// GetErr, if non-nil, is returned by every GetServer call.
	GetErr error
	// DeleteErr, if non-nil, is returned by every DeleteServer call.
	DeleteErr error
	// contains filtered or unexported fields
}

FakeClient is an in-memory implementation of Interface for use in tests. All operations are goroutine-safe and stored in a simple map keyed by server ID.

func NewFakeClient

func NewFakeClient() *FakeClient

NewFakeClient returns an empty FakeClient ready for use in tests.

func (*FakeClient) AddNetworkCloudSubnet added in v0.5.0

func (f *FakeClient) AddNetworkCloudSubnet(ctx context.Context, networkID int64, zone string) error

func (*FakeClient) AttachServerToLoadBalancer

func (f *FakeClient) AttachServerToLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error

func (*FakeClient) AttachServerToNetwork added in v0.5.0

func (f *FakeClient) AttachServerToNetwork(ctx context.Context, serverID int64, networkID int64) error

func (*FakeClient) AttachVolume

func (f *FakeClient) AttachVolume(ctx context.Context, volumeID int64, serverID int64) error

func (*FakeClient) ChangeServerType added in v0.4.0

func (f *FakeClient) ChangeServerType(ctx context.Context, id int64, serverType string, upgradeDisk bool) error

ChangeServerType updates the stored type when the fake server is off.

func (*FakeClient) CreateLoadBalancer

func (f *FakeClient) CreateLoadBalancer(ctx context.Context, opts LoadBalancerCreateOpts) (*LoadBalancerInfo, error)

func (*FakeClient) CreateNetwork added in v0.5.0

func (f *FakeClient) CreateNetwork(ctx context.Context, opts NetworkCreateOpts) (*NetworkInfo, error)

func (*FakeClient) CreateServer

func (f *FakeClient) CreateServer(ctx context.Context, opts ServerCreateOpts) (*ServerInfo, error)

func (*FakeClient) CreateVolume

func (f *FakeClient) CreateVolume(ctx context.Context, opts VolumeCreateOpts) (*VolumeInfo, error)

func (*FakeClient) DeleteLoadBalancer

func (f *FakeClient) DeleteLoadBalancer(ctx context.Context, id int64) error

func (*FakeClient) DeleteNetwork added in v0.5.0

func (f *FakeClient) DeleteNetwork(ctx context.Context, id int64) error

func (*FakeClient) DeleteServer

func (f *FakeClient) DeleteServer(ctx context.Context, id int64) error

func (*FakeClient) DeleteVolume

func (f *FakeClient) DeleteVolume(ctx context.Context, id int64) error

func (*FakeClient) DetachServerFromLoadBalancer

func (f *FakeClient) DetachServerFromLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error

func (*FakeClient) DetachServerFromNetwork added in v0.5.0

func (f *FakeClient) DetachServerFromNetwork(ctx context.Context, serverID int64, networkID int64) error

func (*FakeClient) DetachVolume

func (f *FakeClient) DetachVolume(ctx context.Context, volumeID int64) error

func (*FakeClient) GetLoadBalancer

func (f *FakeClient) GetLoadBalancer(ctx context.Context, id int64) (*LoadBalancerInfo, error)

func (*FakeClient) GetLoadBalancerByName

func (f *FakeClient) GetLoadBalancerByName(ctx context.Context, name string) (*LoadBalancerInfo, error)

func (*FakeClient) GetNetwork added in v0.5.0

func (f *FakeClient) GetNetwork(ctx context.Context, id int64) (*NetworkInfo, error)

func (*FakeClient) GetNetworkByName added in v0.5.0

func (f *FakeClient) GetNetworkByName(ctx context.Context, name string) (*NetworkInfo, error)

func (*FakeClient) GetServer

func (f *FakeClient) GetServer(ctx context.Context, id int64) (*ServerInfo, error)

func (*FakeClient) GetServerByName

func (f *FakeClient) GetServerByName(ctx context.Context, name string) (*ServerInfo, error)

func (*FakeClient) GetVolume

func (f *FakeClient) GetVolume(ctx context.Context, id int64) (*VolumeInfo, error)

func (*FakeClient) GetVolumeByName

func (f *FakeClient) GetVolumeByName(ctx context.Context, name string) (*VolumeInfo, error)

func (*FakeClient) Len

func (f *FakeClient) Len() int

Len returns the number of servers currently tracked by the fake.

func (*FakeClient) LenLoadBalancers

func (f *FakeClient) LenLoadBalancers() int

LenLoadBalancers returns the number of load balancers currently tracked by the fake.

func (*FakeClient) LenVolumes

func (f *FakeClient) LenVolumes() int

LenVolumes returns the number of volumes currently tracked by the fake.

func (*FakeClient) PowerOffServer added in v0.4.0

func (f *FakeClient) PowerOffServer(ctx context.Context, id int64) error

PowerOffServer simulates an immediate transition to off.

func (*FakeClient) PowerOnServer added in v0.4.0

func (f *FakeClient) PowerOnServer(ctx context.Context, id int64) error

PowerOnServer simulates an immediate transition to running.

func (*FakeClient) Reset added in v0.4.0

func (f *FakeClient) Reset()

Reset clears all stored resources and injected errors. Use between Ginkgo specs when sharing one FakeClient.

type Interface

type Interface interface {
	GetServer(ctx context.Context, id int64) (*ServerInfo, error)
	GetServerByName(ctx context.Context, name string) (*ServerInfo, error)
	CreateServer(ctx context.Context, opts ServerCreateOpts) (*ServerInfo, error)
	DeleteServer(ctx context.Context, id int64) error
	PowerOffServer(ctx context.Context, id int64) error
	PowerOnServer(ctx context.Context, id int64) error
	ChangeServerType(ctx context.Context, id int64, serverType string, upgradeDisk bool) error
	AttachServerToNetwork(ctx context.Context, serverID int64, networkID int64) error
	DetachServerFromNetwork(ctx context.Context, serverID int64, networkID int64) error

	GetVolume(ctx context.Context, id int64) (*VolumeInfo, error)
	GetVolumeByName(ctx context.Context, name string) (*VolumeInfo, error)
	CreateVolume(ctx context.Context, opts VolumeCreateOpts) (*VolumeInfo, error)
	DeleteVolume(ctx context.Context, id int64) error
	AttachVolume(ctx context.Context, volumeID int64, serverID int64) error
	DetachVolume(ctx context.Context, volumeID int64) error

	GetLoadBalancer(ctx context.Context, id int64) (*LoadBalancerInfo, error)
	GetLoadBalancerByName(ctx context.Context, name string) (*LoadBalancerInfo, error)
	CreateLoadBalancer(ctx context.Context, opts LoadBalancerCreateOpts) (*LoadBalancerInfo, error)
	DeleteLoadBalancer(ctx context.Context, id int64) error
	AttachServerToLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error
	DetachServerFromLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error

	GetNetwork(ctx context.Context, id int64) (*NetworkInfo, error)
	GetNetworkByName(ctx context.Context, name string) (*NetworkInfo, error)
	CreateNetwork(ctx context.Context, opts NetworkCreateOpts) (*NetworkInfo, error)
	DeleteNetwork(ctx context.Context, id int64) error
	AddNetworkCloudSubnet(ctx context.Context, networkID int64, zone string) error
}

Interface defines the Hetzner Cloud operations required by the controller. Using an interface here allows the controller to be tested with a fake client without making real API calls.

type LoadBalancerCreateOpts

type LoadBalancerCreateOpts struct {
	Name             string
	LoadBalancerType string
	Location         string
	NetworkZone      string
	Algorithm        string
	Labels           map[string]string
}

LoadBalancerCreateOpts holds the parameters for creating a Hetzner Cloud load balancer.

type LoadBalancerInfo

type LoadBalancerInfo struct {
	ID         int64
	Name       string
	PublicIPv4 string
	PublicIPv6 string
	Targets    []int64
}

LoadBalancerInfo is a minimal, SDK-agnostic view of a Hetzner Cloud load balancer.

type NetworkCreateOpts added in v0.5.0

type NetworkCreateOpts struct {
	Name                  string
	IPRange               string
	NetworkZones          []string
	Labels                map[string]string
	ExposeRoutesToVSwitch bool
}

NetworkCreateOpts holds parameters for creating a private network.

type NetworkInfo added in v0.5.0

type NetworkInfo struct {
	ID           int64
	Name         string
	IPRange      string
	SubnetZones  []string
	Labels       map[string]string
	ExposeRoutes bool
}

NetworkInfo is a minimal view of a Hetzner Cloud private network.

type ServerCreateOpts

type ServerCreateOpts struct {
	Name       string
	ServerType string
	Image      string
	Location   string
	Labels     map[string]string
	SSHKeys    []string
	UserData   string
}

ServerCreateOpts holds the parameters for creating a Hetzner Cloud server.

type ServerInfo

type ServerInfo struct {
	ID         int64
	Name       string
	ServerType string
	State      string
	PublicIPv4 string
	PublicIPv6 string
	NetworkIDs []int64
}

ServerInfo is a minimal, SDK-agnostic view of a Hetzner Cloud server. The controller uses this type so it doesn't import the hcloud-go SDK directly.

type VolumeCreateOpts

type VolumeCreateOpts struct {
	Name      string
	Size      int
	ServerID  int64  // optional, if > 0 the volume is attached to this server during creation
	Location  string // required if ServerID is 0
	Format    string // optional filesystem format
	Automount bool   // if true, Hetzner attempts to mount it automatically
	Labels    map[string]string
}

VolumeCreateOpts holds the parameters for creating a Hetzner Cloud volume.

type VolumeInfo

type VolumeInfo struct {
	ID          int64
	Name        string
	State       string
	ServerID    int64 // 0 if unattached
	LinuxDevice string
}

VolumeInfo is a minimal, SDK-agnostic view of a Hetzner Cloud volume.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL