Skip to content

Commit 773623c

Browse files
committed
feat: avoid kyverno dependency in tests
1 parent de96cea commit 773623c

File tree

3 files changed

+45
-21
lines changed

3 files changed

+45
-21
lines changed

pkg/liqoctl/test/network/client/k8s.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func initConfigAndClient(ctx context.Context, kubeconfig string, cl *Client, cfg
9595
sname := string(name)
9696

9797
cfg[sname] = cfgtmp
98-
if cl.ConsumerName == "" {
98+
if kubeconfig == "" {
9999
cl.ConsumerName = sname
100100
cl.Consumer = cltmp
101101
cl.ConsumerDynamic = cldyntmp

pkg/liqoctl/test/network/setup/kyverno.go

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ import (
2222
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2323
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2424
"k8s.io/apimachinery/pkg/runtime/schema"
25+
"k8s.io/client-go/dynamic"
2526

2627
"github.com/liqotech/liqo/pkg/liqoctl/test/network/client"
28+
"github.com/liqotech/liqo/pkg/liqoctl/test/network/flags"
2729
)
2830

2931
// KyvernoPolicyGroupVersionResource specifies the group version resource used to register the objects.
@@ -32,32 +34,54 @@ var KyvernoPolicyGroupVersionResource = schema.GroupVersionResource{Group: "kyve
3234
// KyvernoPolicyKind is the kind of the Kyverno policy.
3335
const KyvernoPolicyKind = "Policy"
3436

37+
// IsKyvernoAvailable checks if Kyverno is available.
38+
func IsKyvernoAvailable(ctx context.Context, cl *dynamic.DynamicClient) bool {
39+
_, err := cl.Resource(KyvernoPolicyGroupVersionResource).
40+
Namespace(NamespaceName).List(ctx, metav1.ListOptions{})
41+
return err == nil
42+
}
43+
3544
// CreatePolicy creates the Kyverno policies.
36-
func CreatePolicy(ctx context.Context, cl *client.Client) error {
37-
policy := ForgeKyvernoPodAntiaffinityPolicy(cl.ConsumerName, false)
38-
if _, err := cl.ConsumerDynamic.Resource(KyvernoPolicyGroupVersionResource).
39-
Namespace(NamespaceName).Create(ctx, policy, metav1.CreateOptions{}); err != nil && !apierrors.IsAlreadyExists(err) {
40-
return fmt.Errorf("consumer failed to create policy: %w", err)
41-
}
45+
func CreatePolicy(ctx context.Context, cl *client.Client, opts *flags.Options) error {
46+
var kyvernoNotInstalled bool
47+
printer := opts.Topts.LocalFactory.Printer
48+
if IsKyvernoAvailable(ctx, cl.ConsumerDynamic) {
49+
policy := ForgeKyvernoPodAntiaffinityPolicy(cl.ConsumerName, false)
50+
if _, err := cl.ConsumerDynamic.Resource(KyvernoPolicyGroupVersionResource).
51+
Namespace(NamespaceName).Create(ctx, policy, metav1.CreateOptions{}); err != nil && !apierrors.IsAlreadyExists(err) {
52+
return fmt.Errorf("consumer failed to create policy: %w", err)
53+
}
4254

43-
policy = ForgeKyvernoPodAntiaffinityPolicy(cl.ConsumerName, true)
44-
if _, err := cl.ConsumerDynamic.Resource(KyvernoPolicyGroupVersionResource).
45-
Namespace(NamespaceName).Create(ctx, policy, metav1.CreateOptions{}); err != nil && !apierrors.IsAlreadyExists(err) {
46-
return fmt.Errorf("consumer failed to create policy: %w", err)
55+
policy = ForgeKyvernoPodAntiaffinityPolicy(cl.ConsumerName, true)
56+
if _, err := cl.ConsumerDynamic.Resource(KyvernoPolicyGroupVersionResource).
57+
Namespace(NamespaceName).Create(ctx, policy, metav1.CreateOptions{}); err != nil && !apierrors.IsAlreadyExists(err) {
58+
return fmt.Errorf("consumer failed to create policy: %w", err)
59+
}
60+
} else {
61+
kyvernoNotInstalled = true
62+
printer.Logger.Warn("Kyverno not available on consumer, skipping policy creation.")
4763
}
4864

4965
for k := range cl.Providers {
50-
policy := ForgeKyvernoPodAntiaffinityPolicy(k, false)
51-
if _, err := cl.ProvidersDynamic[k].Resource(KyvernoPolicyGroupVersionResource).
52-
Namespace(NamespaceName).Create(ctx, policy, metav1.CreateOptions{}); err != nil && !apierrors.IsAlreadyExists(err) {
53-
return fmt.Errorf("provider %q failed to create policy: %w", k, err)
54-
}
55-
policy = ForgeKyvernoPodAntiaffinityPolicy(k, true)
56-
if _, err := cl.ProvidersDynamic[k].Resource(KyvernoPolicyGroupVersionResource).
57-
Namespace(NamespaceName).Create(ctx, policy, metav1.CreateOptions{}); err != nil && !apierrors.IsAlreadyExists(err) {
58-
return fmt.Errorf("provider %q failed to create policy: %w", k, err)
66+
if IsKyvernoAvailable(ctx, cl.ProvidersDynamic[k]) {
67+
policy := ForgeKyvernoPodAntiaffinityPolicy(k, false)
68+
if _, err := cl.ProvidersDynamic[k].Resource(KyvernoPolicyGroupVersionResource).
69+
Namespace(NamespaceName).Create(ctx, policy, metav1.CreateOptions{}); err != nil && !apierrors.IsAlreadyExists(err) {
70+
return fmt.Errorf("provider %q failed to create policy: %w", k, err)
71+
}
72+
policy = ForgeKyvernoPodAntiaffinityPolicy(k, true)
73+
if _, err := cl.ProvidersDynamic[k].Resource(KyvernoPolicyGroupVersionResource).
74+
Namespace(NamespaceName).Create(ctx, policy, metav1.CreateOptions{}); err != nil && !apierrors.IsAlreadyExists(err) {
75+
return fmt.Errorf("provider %q failed to create policy: %w", k, err)
76+
}
77+
} else {
78+
kyvernoNotInstalled = true
79+
printer.Logger.Warn(fmt.Sprintf("Kyverno not available on provider %q, skipping policy creation.", k))
5980
}
6081
}
82+
if kyvernoNotInstalled {
83+
printer.Logger.Warn("Pods may not be scheduled on every node. Install Kyverno on all clusters for comprehensive tests.")
84+
}
6185
return nil
6286
}
6387

pkg/liqoctl/test/network/setup/setup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func MakeInfrastructure(ctx context.Context, cl *client.Client, opts *flags.Opti
3737
return 0, fmt.Errorf("error offloading namespace: %w", err)
3838
}
3939

40-
if err := CreatePolicy(ctx, cl); err != nil {
40+
if err := CreatePolicy(ctx, cl, opts); err != nil {
4141
return 0, fmt.Errorf("error creating policy: %w", err)
4242
}
4343

0 commit comments

Comments
 (0)