hcloud

package
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: May 3, 2026 License: MIT Imports: 4 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) 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) 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) 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) 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) 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) 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) AttachServerToLoadBalancer

func (f *FakeClient) AttachServerToLoadBalancer(ctx context.Context, loadBalancerID int64, serverID 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) 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) 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) 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) 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

	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
}

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 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
}

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