Skip to content

Commit

Permalink
tests: Drop GetRunningPodByVirtualMachineInstance from utils
Browse files Browse the repository at this point in the history
Signed-off-by: Edward Haas <[email protected]>
  • Loading branch information
EdDev committed Mar 7, 2024
1 parent 056b422 commit ce3c245
Show file tree
Hide file tree
Showing 25 changed files with 231 additions and 106 deletions.
27 changes: 20 additions & 7 deletions tests/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,16 @@ import (
"kubevirt.io/kubevirt/tests/console"
"kubevirt.io/kubevirt/tests/decorators"
"kubevirt.io/kubevirt/tests/exec"
"kubevirt.io/kubevirt/tests/libpod"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/testsuite"
)

var _ = Describe("[rfe_id:899][crit:medium][vendor:[email protected]][level:component][sig-compute]Config", decorators.SigCompute, func() {

var CheckIsoVolumeSizes = func(vmi *v1.VirtualMachineInstance) {
pod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
pod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

for _, volume := range vmi.Spec.Volumes {
var path = ""
Expand Down Expand Up @@ -106,7 +108,9 @@ var _ = Describe("[rfe_id:899][crit:medium][vendor:[email protected]][level:comp
CheckIsoVolumeSizes(vmi)

By("Checking if ConfigMap has been attached to the pod")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, testsuite.GetTestNamespace(vmi))
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

podOutput, err := exec.ExecuteCommandOnPod(
vmiPod,
vmiPod.Spec.Containers[0].Name,
Expand Down Expand Up @@ -199,7 +203,8 @@ var _ = Describe("[rfe_id:899][crit:medium][vendor:[email protected]][level:comp
CheckIsoVolumeSizes(vmi)

By("Checking if Secret has been attached to the pod")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, testsuite.GetTestNamespace(nil))
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())
podOutput, err := exec.ExecuteCommandOnPod(
vmiPod,
vmiPod.Spec.Containers[0].Name,
Expand Down Expand Up @@ -271,7 +276,9 @@ var _ = Describe("[rfe_id:899][crit:medium][vendor:[email protected]][level:comp
CheckIsoVolumeSizes(vmi)

By("Checking if ServiceAccount has been attached to the pod")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, testsuite.GetTestNamespace(vmi))
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

namespace, err := exec.ExecuteCommandOnPod(
vmiPod,
vmiPod.Spec.Containers[0].Name,
Expand Down Expand Up @@ -371,7 +378,9 @@ var _ = Describe("[rfe_id:899][crit:medium][vendor:[email protected]][level:comp
CheckIsoVolumeSizes(vmi)

By("Checking if ConfigMap has been attached to the pod")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, testsuite.GetTestNamespace(vmi))
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

podOutputCfgMap, err := exec.ExecuteCommandOnPod(
vmiPod,
vmiPod.Spec.Containers[0].Name,
Expand Down Expand Up @@ -476,7 +485,9 @@ var _ = Describe("[rfe_id:899][crit:medium][vendor:[email protected]][level:comp
CheckIsoVolumeSizes(vmi)

By("Checking if Secret has been attached to the pod")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, testsuite.GetTestNamespace(nil))
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

podOutput1, err := exec.ExecuteCommandOnPod(
vmiPod,
vmiPod.Spec.Containers[0].Name,
Expand Down Expand Up @@ -535,7 +546,9 @@ var _ = Describe("[rfe_id:899][crit:medium][vendor:[email protected]][level:comp
CheckIsoVolumeSizes(vmi)

By("Checking if DownwardAPI has been attached to the pod")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, testsuite.GetTestNamespace(nil))
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

podOutput, err := exec.ExecuteCommandOnPod(
vmiPod,
vmiPod.Spec.Containers[0].Name,
Expand Down
19 changes: 12 additions & 7 deletions tests/migration/eviction_strategy.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import (
"kubevirt.io/kubevirt/tests/libmigration"
"kubevirt.io/kubevirt/tests/libnet"
"kubevirt.io/kubevirt/tests/libnode"
"kubevirt.io/kubevirt/tests/libpod"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/util"

Expand Down Expand Up @@ -78,8 +79,9 @@ var _ = SIGMigrationDescribe("Live Migration", func() {
It("[test_id:3242]should block the eviction api and migrate", func() {
vmi = tests.RunVMIAndExpectLaunch(vmi, 180)
vmiNodeOrig := vmi.Status.NodeName
pod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
err := virtClient.CoreV1().Pods(vmi.Namespace).EvictV1beta1(context.Background(), &policyv1beta1.Eviction{ObjectMeta: metav1.ObjectMeta{Name: pod.Name}})
pod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())
err = virtClient.CoreV1().Pods(vmi.Namespace).EvictV1beta1(context.Background(), &policyv1beta1.Eviction{ObjectMeta: metav1.ObjectMeta{Name: pod.Name}})
Expect(errors.IsTooManyRequests(err)).To(BeTrue())

By("Ensuring the VMI has migrated and lives on another node")
Expand Down Expand Up @@ -563,7 +565,8 @@ var _ = SIGMigrationDescribe("Live Migration", func() {
Eventually(func() error {
newvmi, err := virtClient.VirtualMachineInstance(vmi.Namespace).Get(context.Background(), vmi.Name, &metav1.GetOptions{})
Expect(err).ToNot(HaveOccurred(), "Should successfully get new VMI")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(newvmi, newvmi.Namespace)
vmiPod, err := libpod.GetPodByVirtualMachineInstance(newvmi, newvmi.Namespace)
Expect(err).NotTo(HaveOccurred())
return libnet.ValidateVMIandPodIPMatch(newvmi, vmiPod)
}, time.Minute, time.Second).Should(Succeed(), "Should match PodIP with latest VMI Status after migration")
}
Expand Down Expand Up @@ -598,8 +601,9 @@ var _ = SIGMigrationDescribe("Live Migration", func() {

vmi = tests.RunVMIAndExpectLaunch(vmi, 180)
vmiNodeOrig := vmi.Status.NodeName
pod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
err := virtClient.CoreV1().Pods(vmi.Namespace).EvictV1beta1(context.Background(), &policyv1beta1.Eviction{ObjectMeta: metav1.ObjectMeta{Name: pod.Name}})
pod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())
err = virtClient.CoreV1().Pods(vmi.Namespace).EvictV1beta1(context.Background(), &policyv1beta1.Eviction{ObjectMeta: metav1.ObjectMeta{Name: pod.Name}})
Expect(errors.IsTooManyRequests(err)).To(BeTrue())

By("Ensuring the VMI has migrated and lives on another node")
Expand Down Expand Up @@ -637,8 +641,9 @@ var _ = SIGMigrationDescribe("Live Migration", func() {
libvmi.WithEvictionStrategy(v1.EvictionStrategyNone),
)
vmi = tests.RunVMIAndExpectLaunch(vmi, 180)
pod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
err := virtClient.CoreV1().Pods(vmi.Namespace).EvictV1beta1(context.Background(), &policyv1beta1.Eviction{ObjectMeta: metav1.ObjectMeta{Name: pod.Name}})
pod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())
err = virtClient.CoreV1().Pods(vmi.Namespace).EvictV1beta1(context.Background(), &policyv1beta1.Eviction{ObjectMeta: metav1.ObjectMeta{Name: pod.Name}})
Expect(err).ToNot(HaveOccurred())
})
})
Expand Down
27 changes: 20 additions & 7 deletions tests/migration/migration.go
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,9 @@ var _ = SIGMigrationDescribe("VM Live Migration", func() {

// execute a migration, wait for finalized state
By("Starting the Migration for iteration")
sourcePod := tests.GetRunningPodByVirtualMachineInstance(vmi, testsuite.GetTestNamespace(vmi))
sourcePod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

migration := libmigration.New(vmi.Name, vmi.Namespace)
migration = libmigration.RunMigrationAndExpectToCompleteWithDefaultTimeout(virtClient, migration)
By("Checking VMI, confirm migration state")
Expand Down Expand Up @@ -715,7 +717,8 @@ var _ = SIGMigrationDescribe("VM Live Migration", func() {
Eventually(func() error {
newvmi, err := virtClient.VirtualMachineInstance(vmi.Namespace).Get(context.Background(), vmi.Name, &metav1.GetOptions{})
Expect(err).ToNot(HaveOccurred(), "Should successfully get new VMI")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(newvmi, newvmi.Namespace)
vmiPod, err := libpod.GetPodByVirtualMachineInstance(newvmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())
return libnet.ValidateVMIandPodIPMatch(newvmi, vmiPod)
}, 180*time.Second, time.Second).Should(Succeed(), "Should have updated IP and IPs fields")
}
Expand Down Expand Up @@ -794,6 +797,8 @@ var _ = SIGMigrationDescribe("VM Live Migration", func() {
libmigration.ConfirmVMIPostMigration(virtClient, vmi, migration)

// ensure the libvirt domain is persistent
vmi, err = virtClient.VirtualMachineInstance(vmi.Namespace).Get(context.Background(), vmi.Name, &metav1.GetOptions{})
Expect(err).ToNot(HaveOccurred())
persistent, err := libvirtDomainIsPersistent(vmi)
Expect(err).ToNot(HaveOccurred(), "Should list libvirt domains successfully")
Expect(persistent).To(BeTrue(), "The VMI was not found in the list of libvirt persistent domains")
Expand Down Expand Up @@ -2225,7 +2230,8 @@ var _ = SIGMigrationDescribe("VM Live Migration", func() {

By("Starting the VirtualMachineInstance")
vmi = tests.RunVMIAndExpectLaunch(vmi, 240)
sourcePod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
sourcePod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

// execute a migration, wait for finalized state
By("Starting the Migration")
Expand Down Expand Up @@ -2501,7 +2507,11 @@ var _ = SIGMigrationDescribe("VM Live Migration", func() {
_ = libmigration.RunMigrationAndExpectToCompleteWithDefaultTimeout(virtClient, migration)

By("Ensuring that target pod has correct nodeSelector label")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
vmi, err = virtClient.VirtualMachineInstance(vmi.Namespace).Get(context.Background(), vmi.Name, &metav1.GetOptions{})
Expect(err).ToNot(HaveOccurred())
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

Expect(vmiPod.Spec.NodeSelector).To(HaveKey(v1.SupportedHostModelMigrationCPU+hostModel),
"target pod is expected to have correct nodeSelector label defined")

Expand Down Expand Up @@ -2967,7 +2977,8 @@ var _ = SIGMigrationDescribe("VM Live Migration", func() {
labelsBeforeMigration := make(map[string]string)
labelsAfterMigration := make(map[string]string)
By("Fetching virt-launcher pod")
virtLauncherPod := tests.GetRunningPodByVirtualMachineInstance(vmiToMigrate, vmiToMigrate.Namespace)
virtLauncherPod, err := libpod.GetPodByVirtualMachineInstance(vmiToMigrate, vmiToMigrate.Namespace)
Expect(err).NotTo(HaveOccurred())
for key, value := range virtLauncherPod.Spec.NodeSelector {
if strings.HasPrefix(key, v1.CPUFeatureLabel) {
labelsBeforeMigration[key] = value
Expand All @@ -2982,7 +2993,8 @@ var _ = SIGMigrationDescribe("VM Live Migration", func() {
Expect(err).ShouldNot(HaveOccurred())
Expect(vmiToMigrate.Status.NodeName).To(Equal(sourceNode.Name))
By("Fetching virt-launcher pod")
virtLauncherPod = tests.GetRunningPodByVirtualMachineInstance(vmiToMigrate, vmiToMigrate.Namespace)
virtLauncherPod, err = libpod.GetPodByVirtualMachineInstance(vmiToMigrate, vmiToMigrate.Namespace)
Expect(err).NotTo(HaveOccurred())
for key, value := range virtLauncherPod.Spec.NodeSelector {
if strings.HasPrefix(key, v1.CPUFeatureLabel) {
labelsAfterMigration[key] = value
Expand Down Expand Up @@ -3514,7 +3526,8 @@ func temporaryTLSConfig() *tls.Config {
}

func libvirtDomainIsPersistent(vmi *v1.VirtualMachineInstance) (bool, error) {
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

stdout, stderr, err := exec.ExecuteCommandOnPodWithResults(
vmiPod,
Expand Down
1 change: 1 addition & 0 deletions tests/monitoring/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ go_library(
"//tests/libmonitoring:go_default_library",
"//tests/libnet:go_default_library",
"//tests/libnode:go_default_library",
"//tests/libpod:go_default_library",
"//tests/libvmi:go_default_library",
"//tests/libwait:go_default_library",
"//tests/testsuite:go_default_library",
Expand Down
8 changes: 5 additions & 3 deletions tests/monitoring/vm_monitoring.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ import (
"kubevirt.io/kubevirt/tests/libmonitoring"
"kubevirt.io/kubevirt/tests/libnet"
"kubevirt.io/kubevirt/tests/libnode"
"kubevirt.io/kubevirt/tests/libpod"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/libwait"
"kubevirt.io/kubevirt/tests/testsuite"
Expand Down Expand Up @@ -261,12 +262,13 @@ var _ = Describe("[Serial][sig-monitoring]VM Monitoring", Serial, decorators.Sig
It("should fire KubevirtVmHighMemoryUsage alert", func() {
By("starting VMI")
vmi := libvmi.NewGuestless()
tests.RunVMIAndExpectLaunch(vmi, 240)
vmi = tests.RunVMIAndExpectLaunch(vmi, 240)

By("fill up the vmi pod memory")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, util.NamespaceTestDefault)
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())
vmiPodRequestMemory := vmiPod.Spec.Containers[0].Resources.Requests.Memory().Value()
_, err := exec.ExecuteCommandOnPod(
_, err = exec.ExecuteCommandOnPod(
vmiPod,
vmiPod.Spec.Containers[0].Name,
[]string{"/usr/bin/bash", "-c", fmt.Sprintf("cat <( </dev/zero head -c %d) <(sleep 150) | tail", vmiPodRequestMemory)},
Expand Down
7 changes: 3 additions & 4 deletions tests/network/port_forward.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ import (
v1 "kubevirt.io/api/core/v1"
"kubevirt.io/client-go/kubecli"

"kubevirt.io/kubevirt/tests"
"kubevirt.io/kubevirt/tests/clientcmd"
"kubevirt.io/kubevirt/tests/console"
"kubevirt.io/kubevirt/tests/libnet"
"kubevirt.io/kubevirt/tests/libnet/vmnetserver"
"kubevirt.io/kubevirt/tests/libpod"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/libwait"
)
Expand All @@ -51,7 +51,6 @@ const skipIPv6Message = "port-forwarding over ipv6 is not supported yet. Trackin

var _ = SIGDescribe("Port-forward", func() {
var (
err error
virtClient kubecli.KubevirtClient
)

Expand All @@ -78,8 +77,8 @@ var _ = SIGDescribe("Port-forward", func() {
vmnetserver.StartHTTPServerWithSourceIP(vmi, vmiHttpServerPort, getMasqueradeInternalAddress(ipFamily), console.LoginToCirros)

localPort = 1500 + GinkgoParallelProcess()
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, util.NamespaceTestDefault)
Expect(vmiPod).ToNot(BeNil())
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())
portForwardCmd, err = portForwardCommand(vmiPod, localPort, vmiHttpServerPort)
Expect(err).NotTo(HaveOccurred())

Expand Down
14 changes: 10 additions & 4 deletions tests/network/primary_pod_network.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ import (
v1 "kubevirt.io/api/core/v1"
"kubevirt.io/client-go/kubecli"

"kubevirt.io/kubevirt/tests"
"kubevirt.io/kubevirt/tests/console"
"kubevirt.io/kubevirt/tests/libnet"
"kubevirt.io/kubevirt/tests/libnet/cloudinit"
"kubevirt.io/kubevirt/tests/libpod"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/libwait"
)
Expand All @@ -53,7 +53,8 @@ var _ = SIGDescribe("Primary Pod Network", func() {
Describe("Status", func() {
AssertReportedIP := func(vmi *v1.VirtualMachineInstance) {
By("Getting pod of the VMI")
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, util.NamespaceTestDefault)
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

By("Making sure IP/s reported on the VMI matches the ones on the pod")
Expect(libnet.ValidateVMIandPodIPMatch(vmi, vmiPod)).To(Succeed(), "Should have matching IP/s between pod and vmi")
Expand Down Expand Up @@ -96,12 +97,15 @@ var _ = SIGDescribe("Primary Pod Network", func() {

vmi, err = virtClient.VirtualMachineInstance(util.NamespaceTestDefault).Create(context.Background(), vmi)
Expect(err).NotTo(HaveOccurred())

libwait.WaitForSuccessfulVMIStart(vmi)
Eventually(matcher.ThisVMI(vmi), 12*time.Minute, 2*time.Second).Should(matcher.HaveConditionTrue(v1.VirtualMachineInstanceAgentConnected))
})

It("should report PodIP/s on interface status", func() {
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

Eventually(vmiIP, 2*time.Minute, 5*time.Second).Should(Equal(vmiPod.Status.PodIP), "should contain VMI Status IP as Pod status ip")
var podIPs []string
for _, ip := range vmiPod.Status.PodIPs {
Expand Down Expand Up @@ -143,7 +147,9 @@ var _ = SIGDescribe("Primary Pod Network", func() {
})

It("[test_id:4153]should report PodIP/s as its own on interface status", func() {
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

Consistently(func() error {
vmi, err := virtClient.VirtualMachineInstance(vmi.Namespace).Get(context.Background(), vmi.Name, &metav1.GetOptions{})
if err != nil {
Expand Down
11 changes: 8 additions & 3 deletions tests/network/sriov.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ import (
"kubevirt.io/kubevirt/tests/libnet"
netcloudinit "kubevirt.io/kubevirt/tests/libnet/cloudinit"
"kubevirt.io/kubevirt/tests/libnode"
"kubevirt.io/kubevirt/tests/libpod"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/libwait"
"kubevirt.io/kubevirt/tests/util"
Expand Down Expand Up @@ -602,8 +603,11 @@ func getNodesWithAllocatedResource(resourceName string) []k8sv1.Node {
}

func validatePodKubevirtResourceNameByVMI(virtClient kubecli.KubevirtClient, vmi *v1.VirtualMachineInstance, networkName, sriovResourceName string) error {
pod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

out, err := exec.ExecuteCommandOnPod(
tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace),
pod,
"compute",
[]string{"sh", "-c", fmt.Sprintf("echo $KUBEVIRT_RESOURCE_NAME_%s", networkName)},
)
Expand Down Expand Up @@ -722,10 +726,11 @@ func deleteVMI(vmi *v1.VirtualMachineInstance) error {
}

func checkDefaultInterfaceInPod(vmi *v1.VirtualMachineInstance) error {
vmiPod := tests.GetRunningPodByVirtualMachineInstance(vmi, vmi.Namespace)
vmiPod, err := libpod.GetPodByVirtualMachineInstance(vmi, vmi.Namespace)
Expect(err).NotTo(HaveOccurred())

By("checking default interface is present")
_, err := exec.ExecuteCommandOnPod(
_, err = exec.ExecuteCommandOnPod(
vmiPod,
"compute",
[]string{"ip", "address", "show", "eth0"},
Expand Down
Loading

0 comments on commit ce3c245

Please sign in to comment.