mirror of https://github.com/kubernetes/kops.git
Merge pull request #15124 from justinsb/integration_hetzner
hetzner: support toolbox dump of instances
This commit is contained in:
commit
fce388e3a2
|
@ -51,7 +51,7 @@ func BuildDump(ctx context.Context, cloud fi.Cloud, resources map[string]*Resour
|
||||||
|
|
||||||
for k, r := range resources {
|
for k, r := range resources {
|
||||||
if r.Dumper == nil {
|
if r.Dumper == nil {
|
||||||
klog.V(8).Infof("skipping dump of %q (does not implement Dumpable)", k)
|
klog.V(8).Infof("skipping dump of %q (does not have Dumper)", k)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ import (
|
||||||
|
|
||||||
"github.com/hetznercloud/hcloud-go/hcloud"
|
"github.com/hetznercloud/hcloud-go/hcloud"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/resources"
|
"k8s.io/kops/pkg/resources"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/cloudup/hetzner"
|
"k8s.io/kops/upup/pkg/fi/cloudup/hetzner"
|
||||||
|
@ -177,6 +178,7 @@ func listServers(cloud fi.Cloud, clusterName string) ([]*resources.Resource, err
|
||||||
ID: strconv.Itoa(server.ID),
|
ID: strconv.Itoa(server.ID),
|
||||||
Type: resourceTypeServer,
|
Type: resourceTypeServer,
|
||||||
Deleter: deleteServer,
|
Deleter: deleteServer,
|
||||||
|
Dumper: dumpServer,
|
||||||
Obj: server,
|
Obj: server,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -293,3 +295,48 @@ func deleteVolume(cloud fi.Cloud, r *resources.Resource) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func dumpServer(op *resources.DumpOperation, r *resources.Resource) error {
|
||||||
|
server := r.Obj.(*hcloud.Server)
|
||||||
|
|
||||||
|
data := make(map[string]interface{})
|
||||||
|
data["id"] = r.ID
|
||||||
|
data["type"] = r.Type
|
||||||
|
data["raw"] = r.Obj
|
||||||
|
op.Dump.Resources = append(op.Dump.Resources, data)
|
||||||
|
|
||||||
|
i := &resources.Instance{
|
||||||
|
Name: r.ID,
|
||||||
|
}
|
||||||
|
if ip := server.PublicNet.IPv4.IP; ip != nil {
|
||||||
|
i.PublicAddresses = append(i.PublicAddresses, ip.String())
|
||||||
|
}
|
||||||
|
if ip := server.PublicNet.IPv6.IP; ip != nil {
|
||||||
|
i.PublicAddresses = append(i.PublicAddresses, ip.String())
|
||||||
|
}
|
||||||
|
for _, network := range server.PrivateNet {
|
||||||
|
if ip := network.IP; ip != nil {
|
||||||
|
i.PrivateAddresses = append(i.PrivateAddresses, ip.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range server.Labels {
|
||||||
|
if key == hetzner.TagKubernetesInstanceRole {
|
||||||
|
role := kops.InstanceGroupRole(value)
|
||||||
|
switch role {
|
||||||
|
case kops.InstanceGroupRoleControlPlane:
|
||||||
|
i.Roles = append(i.Roles, string(role))
|
||||||
|
case kops.InstanceGroupRoleNode:
|
||||||
|
i.Roles = append(i.Roles, string(role))
|
||||||
|
case kops.InstanceGroupRoleAPIServer:
|
||||||
|
i.Roles = append(i.Roles, string(role))
|
||||||
|
default:
|
||||||
|
klog.Warningf("Unknown node role %q for server %s(%d)", value, server.Name, server.ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
op.Dump.Instances = append(op.Dump.Instances, i)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ func FindRegion(cluster *kops.Cluster) (string, error) {
|
||||||
case "ash":
|
case "ash":
|
||||||
zoneRegion = "us-east"
|
zoneRegion = "us-east"
|
||||||
default:
|
default:
|
||||||
return "", fmt.Errorf("unknown zone: %q", subnet.Zone)
|
return "", fmt.Errorf("unknown zone %q for hetzner cloud, known zones are fsn1, nbg1, hel1, ash", subnet.Zone)
|
||||||
}
|
}
|
||||||
|
|
||||||
if region != "" && zoneRegion != region {
|
if region != "" && zoneRegion != region {
|
||||||
|
|
Loading…
Reference in New Issue