|
|
|
@ -21,6 +21,7 @@ import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
|
|
|
|
"io"
|
|
|
|
|
"k8s.io/client-go/kubernetes"
|
|
|
|
|
"strings"
|
|
|
|
|
"sync"
|
|
|
|
|
"time"
|
|
|
|
@ -60,6 +61,8 @@ type Client struct {
|
|
|
|
|
Log func(string, ...interface{})
|
|
|
|
|
// Namespace allows to bypass the kubeconfig file for the choice of the namespace
|
|
|
|
|
Namespace string
|
|
|
|
|
|
|
|
|
|
kubeClient *kubernetes.Clientset
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var addToScheme sync.Once
|
|
|
|
@ -87,9 +90,19 @@ func New(getter genericclioptions.RESTClientGetter) *Client {
|
|
|
|
|
|
|
|
|
|
var nopLogger = func(_ string, _ ...interface{}) {}
|
|
|
|
|
|
|
|
|
|
// getKubeClient get or create a new KubernetesClientSet
|
|
|
|
|
func (c *Client) getKubeClient() (*kubernetes.Clientset, error) {
|
|
|
|
|
var err error
|
|
|
|
|
if c.kubeClient == nil {
|
|
|
|
|
c.kubeClient, err = c.Factory.KubernetesClientSet()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return c.kubeClient, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// IsReachable tests connectivity to the cluster
|
|
|
|
|
func (c *Client) IsReachable() error {
|
|
|
|
|
client, err := c.Factory.KubernetesClientSet()
|
|
|
|
|
client, err := c.getKubeClient()
|
|
|
|
|
if err == genericclioptions.ErrEmptyConfig {
|
|
|
|
|
// re-replace kubernetes ErrEmptyConfig error with a friendy error
|
|
|
|
|
// moar workarounds for Kubernetes API breaking.
|
|
|
|
@ -115,7 +128,7 @@ func (c *Client) Create(resources ResourceList) (*Result, error) {
|
|
|
|
|
|
|
|
|
|
// Wait up to the given timeout for the specified resources to be ready
|
|
|
|
|
func (c *Client) Wait(resources ResourceList, timeout time.Duration) error {
|
|
|
|
|
cs, err := c.Factory.KubernetesClientSet()
|
|
|
|
|
cs, err := c.getKubeClient()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
@ -572,7 +585,7 @@ func scrubValidationError(err error) error {
|
|
|
|
|
// WaitAndGetCompletedPodPhase waits up to a timeout until a pod enters a completed phase
|
|
|
|
|
// and returns said phase (PodSucceeded or PodFailed qualify).
|
|
|
|
|
func (c *Client) WaitAndGetCompletedPodPhase(name string, timeout time.Duration) (v1.PodPhase, error) {
|
|
|
|
|
client, err := c.Factory.KubernetesClientSet()
|
|
|
|
|
client, err := c.getKubeClient()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return v1.PodUnknown, err
|
|
|
|
|
}
|
|
|
|
|