-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add primary UDN net-attach-def #1841
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
--- | ||
apiVersion: "k8s.cni.cncf.io/v1" | ||
kind: NetworkAttachmentDefinition | ||
metadata: | ||
name: primary-udn-kubevirt-binding | ||
namespace: default | ||
spec: | ||
config: '{ | ||
"cniVersion": "1.0.0", | ||
"name": "primary-udn-kubevirt-binding", | ||
"plugins": [ | ||
{ | ||
"type": "cni-passt-binding-plugin" | ||
} | ||
] | ||
}' |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -742,6 +742,9 @@ func GetClusterRole(allowMultus bool) *rbacv1.ClusterRole { | |
"get", | ||
"list", | ||
"watch", | ||
"create", | ||
"update", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. do we need update ? (maybe the reconcile use it when it recreate?) please consider moving it under the else of you can move the flag into multusClusterRoles and it will determine if to add * or to add just the diff needed please There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
We do.
OK, DONE |
||
"delete", | ||
}, | ||
}, | ||
}, | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package network | ||
|
||
import ( | ||
. "github.com/onsi/ginkgo/v2" | ||
. "github.com/onsi/gomega" | ||
|
||
osv1 "github.com/openshift/api/operator/v1" | ||
v1 "k8s.io/api/core/v1" | ||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" | ||
"k8s.io/apimachinery/pkg/runtime/schema" | ||
|
||
cnao "github.com/kubevirt/cluster-network-addons-operator/pkg/apis/networkaddonsoperator/shared" | ||
) | ||
|
||
var _ = Describe("Testing kubevirt ipam controller", func() { | ||
Context("Render KubevirtIpamController", func() { | ||
conf := &cnao.NetworkAddonsConfigSpec{ImagePullPolicy: v1.PullAlways, Multus: &cnao.Multus{}, KubevirtIpamController: &cnao.KubevirtIpamController{}, PlacementConfiguration: &cnao.PlacementConfiguration{Workloads: &cnao.Placement{}}} | ||
manifestDir := "../../data" | ||
openshiftNetworkConf := &osv1.Network{} | ||
clusterInfo := &ClusterInfo{} | ||
expectedGroupVersionKind := schema.GroupVersionKind{ | ||
Group: "k8s.cni.cncf.io", | ||
Version: "v1", | ||
RamLavi marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Kind: "NetworkAttachmentDefinition", | ||
} | ||
const expectedName = "primary-udn-kubevirt-binding" | ||
|
||
It("should add the primary-udn network-attach-def obj", func() { | ||
objs, err := Render(conf, manifestDir, openshiftNetworkConf, clusterInfo) | ||
Expect(err).NotTo(HaveOccurred()) | ||
Expect(objs).NotTo(BeEmpty()) | ||
|
||
Expect(objs).To(ContainElement( | ||
SatisfyAll( | ||
WithTransform(func(obj *unstructured.Unstructured) string { | ||
return obj.GetName() | ||
}, Equal(expectedName)), | ||
WithTransform(func(obj *unstructured.Unstructured) schema.GroupVersionKind { | ||
return obj.GetObjectKind().GroupVersionKind() | ||
}, Equal(expectedGroupVersionKind)), | ||
), | ||
)) | ||
}) | ||
}) | ||
}) |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,6 +13,7 @@ import ( | |
. "github.com/onsi/gomega" | ||
|
||
monitoringv1 "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1" | ||
k8snetworkplumbingwgv1 "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1" | ||
testenv "github.com/kubevirt/cluster-network-addons-operator/test/env" | ||
conditionsv1 "github.com/openshift/custom-resource-status/conditions/v1" | ||
securityapi "github.com/openshift/origin/pkg/security/apis/security" | ||
|
@@ -346,6 +347,10 @@ func checkForComponent(component *Component) error { | |
errsAppend(checkForPrometheusRule(component.PrometheusRule)) | ||
} | ||
|
||
if component.NetworkAttachmentDefinition != "" { | ||
errsAppend(checkForNetworkAttachmentDefinition(component.NetworkAttachmentDefinition)) | ||
} | ||
|
||
return errsToErr(errs) | ||
} | ||
|
||
|
@@ -389,6 +394,10 @@ func checkForComponentRemoval(component *Component) error { | |
errsAppend(checkForPrometheusRuleRemoval(component.PrometheusRule)) | ||
} | ||
|
||
if component.NetworkAttachmentDefinition != "" { | ||
errsAppend(checkForNetworkAttachmentDefinitionRemoval(component.NetworkAttachmentDefinition)) | ||
} | ||
|
||
Comment on lines
+397
to
+400
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The condition can be moved into the function same for the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
+1 |
||
return errsToErr(errs) | ||
} | ||
|
||
|
@@ -649,6 +658,21 @@ func checkForPrometheusRule(name string) error { | |
return nil | ||
} | ||
|
||
func checkForNetworkAttachmentDefinition(name string) error { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. but why we need all this logic if we just create the nad and if it doesnt exists we have the error that nad doesnt exists without any additional changes? is it a must because it was added here ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This code is for CNAO CI to make sure the NAD is deployed. It's now CNAO's responsibility, so CI should check it's deployed, and also removed.
small correction - only if the NAD's CRD doesn't exists then CNAO will fail to deploy with the error you mention.
technically yeah, but it's intentional. As I mentioned above - it's CNAO's job to make sure the resources it is in charge of deploying are deployed. |
||
networkAttachmentDefinition := k8snetworkplumbingwgv1.NetworkAttachmentDefinition{} | ||
err := testenv.Client.Get(context.Background(), types.NamespacedName{Name: name, Namespace: corev1.NamespaceDefault}, &networkAttachmentDefinition) | ||
if err != nil { | ||
return err | ||
} | ||
Comment on lines
+663
to
+666
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. please use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's a cosmetic change, that should be done to all of the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. well this is a new function, but i wont insist There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I will make the change in a separate PR after this one is merged There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. sure thx |
||
|
||
err = checkRelationshipLabels(networkAttachmentDefinition.GetLabels(), "NetworkAttachmentDefinition", name) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
return nil | ||
Comment on lines
+669
to
+673
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. here you can just return err basically, but one can consider it less readable (imho it is fine fwiw)
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
} | ||
|
||
func checkRelationshipLabels(labels map[string]string, kind, name string) error { | ||
expectedValues := map[string]string{ | ||
names.COMPONENT_LABEL_KEY: names.COMPONENT_LABEL_DEFAULT_VALUE, | ||
|
@@ -708,6 +732,14 @@ func checkForPrometheusRuleRemoval(name string) error { | |
return isNotFound("PrometheusRule", name, err) | ||
} | ||
|
||
func checkForNetworkAttachmentDefinitionRemoval(name string) error { | ||
err := testenv.Client.Get(context.Background(), types.NamespacedName{Name: name, Namespace: corev1.NamespaceDefault}, &k8snetworkplumbingwgv1.NetworkAttachmentDefinition{}) | ||
if isKindNotFound(err) { | ||
return nil | ||
} | ||
return isNotFound("NetworkAttachmentDefinition", name, err) | ||
} | ||
|
||
func getMonitoringEndpoint() (*corev1.Endpoints, error) { | ||
By("Finding CNAO prometheus endpoint") | ||
endpoint := &corev1.Endpoints{} | ||
|
@@ -812,6 +844,10 @@ func isNotSupportedKind(err error) bool { | |
return strings.Contains(err.Error(), "no kind is registered for the type") | ||
} | ||
|
||
func isKindNotFound(err error) bool { | ||
return strings.Contains(err.Error(), "no matches for kind") | ||
} | ||
|
||
func configToYaml(gvk schema.GroupVersionKind) string { | ||
config := GetConfig(gvk) | ||
manifest, err := yaml.Marshal(config) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
one thing we can consider
limit this to specific NS (i.e default atm)
or even better - use it as Role instead ClusterRole
well for that we need a Role / RoleBinding in the default NS (not that this is risky a bit with backward compatibility once the NS is changed - for this reason we can postpone thinking of it and keep it ClusterRole atm)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My thoughts exactly.. we can decide to use more specifc RBAC when we decide what the final resting place of this NAD