@@ -17,6 +17,7 @@ package kube
17
17
import (
18
18
"bytes"
19
19
"context"
20
+ "errors"
20
21
"fmt"
21
22
"io"
22
23
"strings"
@@ -25,12 +26,13 @@ import (
25
26
"github.com/codefresh-io/cli-v2/pkg/log"
26
27
"github.com/codefresh-io/cli-v2/pkg/store"
27
28
28
- "github.com/argoproj-labs/argocd-autopilot/pkg/kube"
29
+ apkube "github.com/argoproj-labs/argocd-autopilot/pkg/kube"
30
+ aputil "github.com/argoproj-labs/argocd-autopilot/pkg/util"
29
31
platmodel "github.com/codefresh-io/go-sdk/pkg/codefresh/model"
30
32
authv1 "k8s.io/api/authorization/v1"
31
33
batchv1 "k8s.io/api/batch/v1"
32
34
v1 "k8s.io/api/core/v1"
33
- "k8s.io/apimachinery/pkg/api/errors"
35
+ k8serrors "k8s.io/apimachinery/pkg/api/errors"
34
36
"k8s.io/apimachinery/pkg/api/resource"
35
37
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
36
38
"k8s.io/apimachinery/pkg/version"
@@ -39,7 +41,7 @@ import (
39
41
40
42
type (
41
43
ClusterRequirementsOptions struct {
42
- KubeFactory kube .Factory
44
+ KubeFactory apkube .Factory
43
45
Namespace string
44
46
ContextUrl string
45
47
AccessMode platmodel.AccessMode
@@ -78,9 +80,9 @@ func EnsureClusterRequirements(ctx context.Context, opts ClusterRequirementsOpti
78
80
kubeFactory := opts .KubeFactory
79
81
var specificErrorMessages []string
80
82
81
- client , err := kubeFactory . KubernetesClientSet ( )
83
+ client , err := GetClientSet ( kubeFactory )
82
84
if err != nil {
83
- return fmt . Errorf ( "cannot create kubernetes clientset: %w" , err )
85
+ return err
84
86
}
85
87
86
88
kubeVersion , err := client .Discovery ().ServerVersion ()
@@ -216,9 +218,9 @@ func runTCPConnectionTest(ctx context.Context, runtimeInstallOptions *ClusterReq
216
218
}
217
219
env := prepareEnvVars (envVars )
218
220
219
- client , err := runtimeInstallOptions .KubeFactory . KubernetesClientSet ( )
221
+ client , err := GetClientSet ( runtimeInstallOptions .KubeFactory )
220
222
if err != nil {
221
- return fmt . Errorf ( "failed to create kubernetes client: %w" , err )
223
+ return err
222
224
}
223
225
224
226
job , err := launchJob (ctx , client , LaunchJobOptions {
@@ -252,10 +254,10 @@ func runTCPConnectionTest(ctx context.Context, runtimeInstallOptions *ClusterReq
252
254
return checkPodLastState (ctx , client , podLastState )
253
255
}
254
256
255
- func GetClusterSecret (ctx context.Context , kubeFactory kube .Factory , namespace string , name string ) (* v1.Secret , error ) {
256
- client , err := kubeFactory . KubernetesClientSet ( )
257
+ func GetClusterSecret (ctx context.Context , kubeFactory apkube .Factory , namespace string , name string ) (* v1.Secret , error ) {
258
+ client , err := GetClientSet ( kubeFactory )
257
259
if err != nil {
258
- return nil , fmt . Errorf ( "cannot create kubernetes clientset: %w" , err )
260
+ return nil , err
259
261
}
260
262
261
263
var (
@@ -285,18 +287,18 @@ func GetClusterSecret(ctx context.Context, kubeFactory kube.Factory, namespace s
285
287
return res , nil
286
288
}
287
289
288
- func WaitForJob (ctx context.Context , f kube .Factory , ns , jobName string ) error {
290
+ func WaitForJob (ctx context.Context , kubeFactory apkube .Factory , ns , jobName string ) error {
289
291
var attempt int32
290
292
var jobErr error
291
- _ = f .Wait (ctx , & kube .WaitOptions {
293
+ _ = kubeFactory .Wait (ctx , & apkube .WaitOptions {
292
294
Interval : time .Second * 5 ,
293
295
Timeout : time .Minute ,
294
- Resources : []kube .Resource {
296
+ Resources : []apkube .Resource {
295
297
{
296
298
Name : jobName ,
297
299
Namespace : ns ,
298
- WaitFunc : func (ctx context.Context , f kube .Factory , ns , name string ) (bool , error ) {
299
- cs , err := f . KubernetesClientSet ( )
300
+ WaitFunc : func (ctx context.Context , kubeFactory apkube .Factory , ns , name string ) (bool , error ) {
301
+ cs , err := GetClientSet ( kubeFactory )
300
302
if err != nil {
301
303
return false , err
302
304
}
@@ -348,7 +350,7 @@ func printJobLogs(ctx context.Context, client kubernetes.Interface, job *batchv1
348
350
fmt .Printf ("=====\n %s\n =====\n \n " , logs )
349
351
}
350
352
351
- func runNetworkTest (ctx context.Context , kubeFactory kube .Factory , urls ... string ) error {
353
+ func runNetworkTest (ctx context.Context , kubeFactory apkube .Factory , urls ... string ) error {
352
354
const networkTestsTimeout = 120 * time .Second
353
355
354
356
envVars := map [string ]string {
@@ -357,9 +359,9 @@ func runNetworkTest(ctx context.Context, kubeFactory kube.Factory, urls ...strin
357
359
}
358
360
env := prepareEnvVars (envVars )
359
361
360
- client , err := kubeFactory . KubernetesClientSet ( )
362
+ client , err := GetClientSet ( kubeFactory )
361
363
if err != nil {
362
- return fmt . Errorf ( "failed to create kubernetes client: %w" , err )
364
+ return err
363
365
}
364
366
365
367
job , err := launchJob (ctx , client , LaunchJobOptions {
@@ -595,15 +597,15 @@ func getPodLogs(ctx context.Context, client kubernetes.Interface, namespace, nam
595
597
return strings .Trim (logsBuf .String (), "\n " ), nil
596
598
}
597
599
598
- func CheckNamespaceExists (ctx context.Context , namespace string , kubeFactory kube .Factory ) (bool , error ) {
599
- client , err := kubeFactory . KubernetesClientSet ( )
600
+ func CheckNamespaceExists (ctx context.Context , namespace string , kubeFactory apkube .Factory ) (bool , error ) {
601
+ client , err := GetClientSet ( kubeFactory )
600
602
if err != nil {
601
- return false , fmt . Errorf ( "failed to create kubernetes client: %w" , err )
603
+ return false , err
602
604
}
603
605
604
606
_ , err = client .CoreV1 ().Namespaces ().Get (ctx , namespace , metav1.GetOptions {})
605
607
if err != nil {
606
- if errors .IsNotFound (err ) {
608
+ if k8serrors .IsNotFound (err ) {
607
609
return false , nil
608
610
}
609
611
return false , fmt .Errorf ("failed to get namespace %s: %w" , namespace , err )
@@ -612,10 +614,10 @@ func CheckNamespaceExists(ctx context.Context, namespace string, kubeFactory kub
612
614
return true , nil
613
615
}
614
616
615
- func DeleteSecretWithFinalizer (ctx context.Context , kubeFactory kube .Factory , secret * v1.Secret ) error {
616
- client , err := kubeFactory . KubernetesClientSet ( )
617
+ func DeleteSecretWithFinalizer (ctx context.Context , kubeFactory apkube .Factory , secret * v1.Secret ) error {
618
+ client , err := GetClientSet ( kubeFactory )
617
619
if err != nil {
618
- return fmt . Errorf ( "failed to create kubernetes client: %w" , err )
620
+ return err
619
621
}
620
622
621
623
secret .Finalizers = nil
@@ -625,17 +627,17 @@ func DeleteSecretWithFinalizer(ctx context.Context, kubeFactory kube.Factory, se
625
627
}
626
628
627
629
err = client .CoreV1 ().Secrets (secret .Namespace ).Delete (ctx , secret .Name , metav1.DeleteOptions {})
628
- if errors .IsNotFound (err ) {
630
+ if k8serrors .IsNotFound (err ) {
629
631
return nil
630
632
}
631
633
632
634
return err
633
635
}
634
636
635
- func GetSecretsWithLabel (ctx context.Context , kubeFactory kube .Factory , namespace , label string ) (* v1.SecretList , error ) {
636
- client , err := kubeFactory . KubernetesClientSet ( )
637
+ func GetSecretsWithLabel (ctx context.Context , kubeFactory apkube .Factory , namespace , label string ) (* v1.SecretList , error ) {
638
+ client , err := GetClientSet ( kubeFactory )
637
639
if err != nil {
638
- return nil , fmt . Errorf ( "failed to create kubernetes client: %w" , err )
640
+ return nil , err
639
641
}
640
642
641
643
secrets , err := client .CoreV1 ().Secrets (namespace ).List (ctx , metav1.ListOptions {LabelSelector : label })
@@ -645,3 +647,22 @@ func GetSecretsWithLabel(ctx context.Context, kubeFactory kube.Factory, namespac
645
647
646
648
return secrets , nil
647
649
}
650
+
651
+ func GetClientSet (kubeFactory apkube.Factory ) (kubernetes.Interface , error ) {
652
+ cs , err := kubeFactory .KubernetesClientSet ()
653
+ if err != nil {
654
+ if strings .Contains (err .Error (), "exec plugin: invalid apiVersion" ) {
655
+ return nil , errors .New ("Kubeconfig user entry is using an invalid API version client.authentication.k8s.io/v1alpha1.\n See details at https://support.codefresh.io/hc/en-us/articles/6947789386652-Failure-to-perform-actions-on-your-selected-Kubernetes-context" )
656
+ }
657
+
658
+ return nil , fmt .Errorf ("failed to build kubernetes clientset: %w" , err )
659
+ }
660
+
661
+ return cs , nil
662
+ }
663
+
664
+ func GetClientSetOrDie (kubeFactory apkube.Factory ) kubernetes.Interface {
665
+ cs , err := GetClientSet (kubeFactory )
666
+ aputil .Die (err )
667
+ return cs
668
+ }
0 commit comments