mirror of https://github.com/knative/func.git
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package k8s
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net"
|
|
"syscall"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
k8serrors "k8s.io/apimachinery/pkg/api/errors"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
k8sclientcmd "k8s.io/client-go/tools/clientcmd"
|
|
)
|
|
|
|
func GetConfigMap(ctx context.Context, name, namespaceOverride string) (*corev1.ConfigMap, error) {
|
|
client, namespace, err := NewClientAndResolvedNamespace(namespaceOverride)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return client.CoreV1().ConfigMaps(namespace).Get(ctx, name, metav1.GetOptions{})
|
|
}
|
|
|
|
// ListConfigMapsNamesIfConnected lists names of ConfigMaps present and the current k8s context
|
|
// returns empty list, if not connected to any cluster
|
|
func ListConfigMapsNamesIfConnected(ctx context.Context, namespaceOverride string) (names []string, err error) {
|
|
names, err = listConfigMapsNames(ctx, namespaceOverride)
|
|
if err != nil {
|
|
// not logged our authorized to access resources
|
|
if k8serrors.IsForbidden(err) || k8serrors.IsUnauthorized(err) || k8serrors.IsInvalid(err) || k8serrors.IsTimeout(err) {
|
|
return []string{}, nil
|
|
}
|
|
|
|
// non existent k8s cluster
|
|
var dnsErr *net.DNSError
|
|
if errors.As(err, &dnsErr) {
|
|
if dnsErr.IsNotFound || dnsErr.IsTemporary || dnsErr.IsTimeout {
|
|
return []string{}, nil
|
|
}
|
|
}
|
|
|
|
// connection refused
|
|
if errors.Is(err, syscall.ECONNREFUSED) {
|
|
return []string{}, nil
|
|
}
|
|
|
|
// invalid configuration: no configuration has been provided
|
|
if k8sclientcmd.IsEmptyConfig(err) {
|
|
return []string{}, nil
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func listConfigMapsNames(ctx context.Context, namespaceOverride string) (names []string, err error) {
|
|
client, namespace, err := NewClientAndResolvedNamespace(namespaceOverride)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
cms, err := client.CoreV1().ConfigMaps(namespace).List(ctx, metav1.ListOptions{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
for _, cm := range cms.Items {
|
|
names = append(names, cm.Name)
|
|
}
|
|
|
|
return
|
|
}
|