Skip to content

Commit

Permalink
Extract common functions for nonroot
Browse files Browse the repository at this point in the history
Create util func `CanBeNonRoot(vmi)`, `MarkAsNonroot(vmi)` and
`GetIdOfLauncher(vmi)`

Signed-off-by: L. Pivarc <[email protected]>
  • Loading branch information
xpivarc committed Mar 3, 2022
1 parent b15b758 commit ec457ff
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 26 deletions.
15 changes: 15 additions & 0 deletions pkg/util/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,4 +170,19 @@ func AlignImageSizeTo1MiB(size int64, logger *log.FilteredLogger) int64 {
}
return newSize
}

}
func CanBeNonRoot(vmi *v1.VirtualMachineInstance) error {
// VirtioFS doesn't work with session mode
if IsVMIVirtiofsEnabled(vmi) {
return fmt.Errorf("VirtioFS doesn't work with session mode(used by nonroot)")
}
return nil
}

func MarkAsNonroot(vmi *v1.VirtualMachineInstance) {
if vmi.ObjectMeta.Annotations == nil {
vmi.ObjectMeta.Annotations = make(map[string]string)
}
vmi.ObjectMeta.Annotations[v1.NonRootVMIAnnotation] = ""
}
15 changes: 2 additions & 13 deletions pkg/virt-api/webhooks/mutating-webhook/mutators/vmi-mutator.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,18 +139,15 @@ func (mutator *VMIsMutator) Mutate(ar *admissionv1.AdmissionReview) *admissionv1
})

if mutator.ClusterConfig.NonRootEnabled() {
if err := canBeNonRoot(newVMI); err != nil {
if err := util.CanBeNonRoot(newVMI); err != nil {
return &admissionv1.AdmissionResponse{
Result: &metav1.Status{
Message: err.Error(),
Code: http.StatusUnprocessableEntity,
},
}
} else {
if newVMI.ObjectMeta.Annotations == nil {
newVMI.ObjectMeta.Annotations = make(map[string]string)
}
newVMI.ObjectMeta.Annotations[v1.NonRootVMIAnnotation] = ""
util.MarkAsNonroot(newVMI)
}
}

Expand Down Expand Up @@ -358,14 +355,6 @@ func (mutator *VMIsMutator) setDefaultResourceRequests(vmi *v1.VirtualMachineIns

}

func canBeNonRoot(vmi *v1.VirtualMachineInstance) error {
// VirtioFS doesn't work with session mode
if util.IsVMIVirtiofsEnabled(vmi) {
return fmt.Errorf("VirtioFS doesn't work with session mode(used by nonroot)")
}
return nil
}

func addNodeSelector(vmi *v1.VirtualMachineInstance, label string) {
if vmi.Spec.NodeSelector == nil {
vmi.Spec.NodeSelector = map[string]string{}
Expand Down
14 changes: 1 addition & 13 deletions tests/nonroot_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package tests_test

import (
"fmt"
"strings"

. "github.com/onsi/ginkgo"
"github.com/onsi/ginkgo/extensions/table"
Expand Down Expand Up @@ -60,19 +59,8 @@ var _ = Describe("[sig-compute]NonRoot feature", func() {

tests.WaitForSuccessfulVMIStart(vmi)

vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, util.NamespaceTestDefault)
podOutput, err := tests.ExecuteCommandOnPod(
virtClient,
vmiPod,
vmiPod.Spec.Containers[0].Name,
[]string{"id"},
)

groups := strings.Split(podOutput, "=")
uid := strings.Split(groups[1], "(")[0]

Expect(err).NotTo(HaveOccurred())
Expect(uid).To(Equal("107"))
Expect(tests.GetIdOfLauncher(vmi)).To(Equal("107"))
})
})
})
16 changes: 16 additions & 0 deletions tests/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -5321,3 +5321,19 @@ func GetPodsCgroupVersion(pod *k8sv1.Pod, virtClient kubecli.KubevirtClient) cgr
return cgroup.V1
}
}

func GetIdOfLauncher(vmi *v1.VirtualMachineInstance) string {
virtClient, err := kubecli.GetKubevirtClient()
util2.PanicOnError(err)

vmiPod := GetRunningPodByVirtualMachineInstance(vmi, util2.NamespaceTestDefault)
podOutput, err := ExecuteCommandOnPod(
virtClient,
vmiPod,
vmiPod.Spec.Containers[0].Name,
[]string{"id", "-u"},
)
Expect(err).NotTo(HaveOccurred())

return strings.TrimSpace(podOutput)
}

0 comments on commit ec457ff

Please sign in to comment.