mirror of https://github.com/k3s-io/k3s
Implement InstancesV2 instead of Instances
... and drop legacy ClusterID support. Signed-off-by: Brad Davidson <brad.davidson@rancher.com>pull/6250/head
parent
7198eb2f74
commit
307e45e739
|
@ -4,19 +4,13 @@ import (
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/k3s-io/k3s/pkg/version"
|
"github.com/k3s-io/k3s/pkg/version"
|
||||||
"k8s.io/client-go/informers"
|
|
||||||
informercorev1 "k8s.io/client-go/informers/core/v1"
|
|
||||||
"k8s.io/client-go/tools/cache"
|
|
||||||
cloudprovider "k8s.io/cloud-provider"
|
cloudprovider "k8s.io/cloud-provider"
|
||||||
)
|
)
|
||||||
|
|
||||||
type k3s struct {
|
type k3s struct {
|
||||||
nodeInformer informercorev1.NodeInformer
|
|
||||||
nodeInformerHasSynced cache.InformerSynced
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ cloudprovider.Interface = &k3s{}
|
var _ cloudprovider.Interface = &k3s{}
|
||||||
var _ cloudprovider.InformerUser = &k3s{}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
cloudprovider.RegisterCloudProvider(version.Program, func(config io.Reader) (cloudprovider.Interface, error) {
|
cloudprovider.RegisterCloudProvider(version.Program, func(config io.Reader) (cloudprovider.Interface, error) {
|
||||||
|
@ -27,17 +21,12 @@ func init() {
|
||||||
func (k *k3s) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{}) {
|
func (k *k3s) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *k3s) SetInformers(informerFactory informers.SharedInformerFactory) {
|
|
||||||
k.nodeInformer = informerFactory.Core().V1().Nodes()
|
|
||||||
k.nodeInformerHasSynced = k.nodeInformer.Informer().HasSynced
|
|
||||||
}
|
|
||||||
|
|
||||||
func (k *k3s) Instances() (cloudprovider.Instances, bool) {
|
func (k *k3s) Instances() (cloudprovider.Instances, bool) {
|
||||||
return k, true
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *k3s) InstancesV2() (cloudprovider.InstancesV2, bool) {
|
func (k *k3s) InstancesV2() (cloudprovider.InstancesV2, bool) {
|
||||||
return nil, false
|
return k, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *k3s) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
|
func (k *k3s) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
|
||||||
|
@ -61,5 +50,5 @@ func (k *k3s) ProviderName() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *k3s) HasClusterID() bool {
|
func (k *k3s) HasClusterID() bool {
|
||||||
return true
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,14 +2,13 @@ package cloudprovider
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/k3s-io/k3s/pkg/version"
|
"github.com/k3s-io/k3s/pkg/version"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
v1 "k8s.io/api/core/v1"
|
||||||
cloudprovider "k8s.io/cloud-provider"
|
cloudprovider "k8s.io/cloud-provider"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -19,59 +18,28 @@ var (
|
||||||
HostnameKey = version.Program + ".io/hostname"
|
HostnameKey = version.Program + ".io/hostname"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (k *k3s) AddSSHKeyToAllInstances(ctx context.Context, user string, keyData []byte) error {
|
var _ cloudprovider.InstancesV2 = &k3s{}
|
||||||
return cloudprovider.NotImplemented
|
|
||||||
}
|
|
||||||
|
|
||||||
func (k *k3s) CurrentNodeName(ctx context.Context, hostname string) (types.NodeName, error) {
|
// InstanceExists returns true if the instance for the given node exists according to the cloud provider.
|
||||||
return types.NodeName(hostname), nil
|
// K3s nodes always exist.
|
||||||
}
|
func (k *k3s) InstanceExists(ctx context.Context, node *corev1.Node) (bool, error) {
|
||||||
|
|
||||||
func (k *k3s) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error) {
|
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *k3s) InstanceID(ctx context.Context, nodeName types.NodeName) (string, error) {
|
// InstanceShutdown returns true if the instance is shutdown according to the cloud provider.
|
||||||
if k.nodeInformerHasSynced == nil || !k.nodeInformerHasSynced() {
|
// K3s nodes are never shutdown.
|
||||||
return "", errors.New("Node informer has not synced yet")
|
func (k *k3s) InstanceShutdown(ctx context.Context, node *v1.Node) (bool, error) {
|
||||||
}
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
node, err := k.nodeInformer.Lister().Get(string(nodeName))
|
// InstanceMetadata returns the instance's metadata.
|
||||||
if err != nil {
|
func (k *k3s) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudprovider.InstanceMetadata, error) {
|
||||||
return "", fmt.Errorf("failed to get node %s: %w", nodeName, err)
|
|
||||||
}
|
|
||||||
if (node.Annotations[InternalIPKey] == "") && (node.Labels[InternalIPKey] == "") {
|
if (node.Annotations[InternalIPKey] == "") && (node.Labels[InternalIPKey] == "") {
|
||||||
return string(nodeName), errors.New("address annotations not yet set")
|
return nil, errors.New("address annotations not yet set")
|
||||||
}
|
}
|
||||||
return string(nodeName), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (k *k3s) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error) {
|
|
||||||
return true, cloudprovider.NotImplemented
|
|
||||||
}
|
|
||||||
|
|
||||||
func (k *k3s) InstanceType(ctx context.Context, name types.NodeName) (string, error) {
|
|
||||||
_, err := k.InstanceID(ctx, name)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return version.Program, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (k *k3s) InstanceTypeByProviderID(ctx context.Context, providerID string) (string, error) {
|
|
||||||
return "", cloudprovider.NotImplemented
|
|
||||||
}
|
|
||||||
|
|
||||||
func (k *k3s) NodeAddresses(ctx context.Context, name types.NodeName) ([]corev1.NodeAddress, error) {
|
|
||||||
addresses := []corev1.NodeAddress{}
|
addresses := []corev1.NodeAddress{}
|
||||||
if k.nodeInformerHasSynced == nil || !k.nodeInformerHasSynced() {
|
|
||||||
return nil, errors.New("Node informer has not synced yet")
|
|
||||||
}
|
|
||||||
|
|
||||||
node, err := k.nodeInformer.Lister().Get(string(name))
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Failed to find node %s: %v", name, err)
|
|
||||||
}
|
|
||||||
// check internal address
|
// check internal address
|
||||||
if address := node.Annotations[InternalIPKey]; address != "" {
|
if address := node.Annotations[InternalIPKey]; address != "" {
|
||||||
for _, v := range strings.Split(address, ",") {
|
for _, v := range strings.Split(address, ",") {
|
||||||
|
@ -80,7 +48,7 @@ func (k *k3s) NodeAddresses(ctx context.Context, name types.NodeName) ([]corev1.
|
||||||
} else if address = node.Labels[InternalIPKey]; address != "" {
|
} else if address = node.Labels[InternalIPKey]; address != "" {
|
||||||
addresses = append(addresses, corev1.NodeAddress{Type: corev1.NodeInternalIP, Address: address})
|
addresses = append(addresses, corev1.NodeAddress{Type: corev1.NodeInternalIP, Address: address})
|
||||||
} else {
|
} else {
|
||||||
logrus.Infof("Couldn't find node internal ip annotation or label on node %s", name)
|
logrus.Infof("Couldn't find node internal ip annotation or label on node %s", node.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// check external address
|
// check external address
|
||||||
|
@ -98,12 +66,14 @@ func (k *k3s) NodeAddresses(ctx context.Context, name types.NodeName) ([]corev1.
|
||||||
} else if address = node.Labels[HostnameKey]; address != "" {
|
} else if address = node.Labels[HostnameKey]; address != "" {
|
||||||
addresses = append(addresses, corev1.NodeAddress{Type: corev1.NodeHostName, Address: address})
|
addresses = append(addresses, corev1.NodeAddress{Type: corev1.NodeHostName, Address: address})
|
||||||
} else {
|
} else {
|
||||||
logrus.Infof("Couldn't find node hostname annotation or label on node %s", name)
|
logrus.Infof("Couldn't find node hostname annotation or label on node %s", node.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
return addresses, nil
|
return &cloudprovider.InstanceMetadata{
|
||||||
}
|
ProviderID: version.Program,
|
||||||
|
InstanceType: version.Program,
|
||||||
func (k *k3s) NodeAddressesByProviderID(ctx context.Context, providerID string) ([]corev1.NodeAddress, error) {
|
NodeAddresses: addresses,
|
||||||
return nil, cloudprovider.NotImplemented
|
Zone: "",
|
||||||
|
Region: "",
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue