Documentation
¶
Index ¶
- type Client
- func (c *Client) AttachServerToLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error
- func (c *Client) AttachVolume(ctx context.Context, volumeID int64, serverID int64) error
- func (c *Client) CreateLoadBalancer(ctx context.Context, opts LoadBalancerCreateOpts) (*LoadBalancerInfo, error)
- func (c *Client) CreateServer(ctx context.Context, opts ServerCreateOpts) (*ServerInfo, error)
- func (c *Client) CreateVolume(ctx context.Context, opts VolumeCreateOpts) (*VolumeInfo, error)
- func (c *Client) DeleteLoadBalancer(ctx context.Context, id int64) error
- func (c *Client) DeleteServer(ctx context.Context, id int64) error
- func (c *Client) DeleteVolume(ctx context.Context, id int64) error
- func (c *Client) DetachServerFromLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error
- func (c *Client) DetachVolume(ctx context.Context, volumeID int64) error
- func (c *Client) GetLoadBalancer(ctx context.Context, id int64) (*LoadBalancerInfo, error)
- func (c *Client) GetLoadBalancerByName(ctx context.Context, name string) (*LoadBalancerInfo, error)
- func (c *Client) GetServer(ctx context.Context, id int64) (*ServerInfo, error)
- func (c *Client) GetServerByName(ctx context.Context, name string) (*ServerInfo, error)
- func (c *Client) GetVolume(ctx context.Context, id int64) (*VolumeInfo, error)
- func (c *Client) GetVolumeByName(ctx context.Context, name string) (*VolumeInfo, error)
- type FakeClient
- func (f *FakeClient) AttachServerToLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error
- func (f *FakeClient) AttachVolume(ctx context.Context, volumeID int64, serverID int64) error
- func (f *FakeClient) CreateLoadBalancer(ctx context.Context, opts LoadBalancerCreateOpts) (*LoadBalancerInfo, error)
- func (f *FakeClient) CreateServer(ctx context.Context, opts ServerCreateOpts) (*ServerInfo, error)
- func (f *FakeClient) CreateVolume(ctx context.Context, opts VolumeCreateOpts) (*VolumeInfo, error)
- func (f *FakeClient) DeleteLoadBalancer(ctx context.Context, id int64) error
- func (f *FakeClient) DeleteServer(ctx context.Context, id int64) error
- func (f *FakeClient) DeleteVolume(ctx context.Context, id int64) error
- func (f *FakeClient) DetachServerFromLoadBalancer(ctx context.Context, loadBalancerID int64, serverID int64) error
- func (f *FakeClient) DetachVolume(ctx context.Context, volumeID int64) error
- func (f *FakeClient) GetLoadBalancer(ctx context.Context, id int64) (*LoadBalancerInfo, error)
- func (f *FakeClient) GetLoadBalancerByName(ctx context.Context, name string) (*LoadBalancerInfo, error)
- func (f *FakeClient) GetServer(ctx context.Context, id int64) (*ServerInfo, error)
- func (f *FakeClient) GetServerByName(ctx context.Context, name string) (*ServerInfo, error)
- func (f *FakeClient) GetVolume(ctx context.Context, id int64) (*VolumeInfo, error)
- func (f *FakeClient) GetVolumeByName(ctx context.Context, name string) (*VolumeInfo, error)
- func (f *FakeClient) Len() int
- func (f *FakeClient) LenLoadBalancers() int
- func (f *FakeClient) LenVolumes() int
- type Interface
- type LoadBalancerCreateOpts
- type LoadBalancerInfo
- type ServerCreateOpts
- type ServerInfo
- type VolumeCreateOpts
- type VolumeInfo
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 ¶
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 ¶
AttachVolume attaches an existing volume to a server.
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 ¶
DeleteLoadBalancer destroys a Hetzner Cloud load balancer by ID.
func (*Client) DeleteServer ¶
DeleteServer destroys a Hetzner Cloud server by ID. Idempotent — returns nil if the server does not exist.
func (*Client) DeleteVolume ¶
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 ¶
DetachVolume detaches an existing volume from any server.
func (*Client) GetLoadBalancer ¶
GetLoadBalancer fetches a load balancer by its Hetzner Cloud ID.
func (*Client) GetLoadBalancerByName ¶
GetLoadBalancerByName fetches a load balancer by its name.
func (*Client) GetServer ¶
GetServer fetches a server by its Hetzner Cloud ID. Returns nil, nil if the server does not exist.
func (*Client) GetServerByName ¶
GetServerByName fetches a server by its name. Returns nil, nil if the server does not exist.
func (*Client) GetVolumeByName ¶
GetVolumeByName fetches a volume by its name.
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 (*FakeClient) AttachVolume ¶
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 (*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.
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
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 ¶
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.