diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index 370daec5a3c..d261c88c724 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -27,7 +27,6 @@ go_library( "//pkg/controller:go_default_library", "//pkg/kubelet/apis/config:go_default_library", "//pkg/kubelet/apis/stats/v1alpha1:go_default_library", - "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/policy/v1beta1:go_default_library", "//staging/src/k8s.io/api/rbac/v1:go_default_library", @@ -41,7 +40,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", diff --git a/test/e2e/framework/manifest/BUILD b/test/e2e/framework/manifest/BUILD index 884d07c675b..d8a3c9cacb2 100644 --- a/test/e2e/framework/manifest/BUILD +++ b/test/e2e/framework/manifest/BUILD @@ -16,6 +16,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", + "//test/e2e/framework:go_default_library", "//test/e2e/framework/testfiles:go_default_library", ], ) diff --git a/test/e2e/framework/manifest/manifest.go b/test/e2e/framework/manifest/manifest.go index 970a8d5327b..588784a81f3 100644 --- a/test/e2e/framework/manifest/manifest.go +++ b/test/e2e/framework/manifest/manifest.go @@ -17,12 +17,18 @@ limitations under the License. package manifest import ( + "fmt" + "io/ioutil" + "net/http" + "time" + appsv1 "k8s.io/api/apps/v1" "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" utilyaml "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/client-go/kubernetes/scheme" + "k8s.io/kubernetes/test/e2e/framework" e2etestfiles "k8s.io/kubernetes/test/e2e/framework/testfiles" ) @@ -85,3 +91,48 @@ func StatefulSetFromManifest(fileName, ns string) (*appsv1.StatefulSet, error) { } return &ss, nil } + +// DaemonSetFromURL reads from a url and returns the daemonset in it. +func DaemonSetFromURL(url string) (*appsv1.DaemonSet, error) { + framework.Logf("Parsing ds from %v", url) + + var response *http.Response + var err error + + for i := 1; i <= 5; i++ { + response, err = http.Get(url) + if err == nil && response.StatusCode == 200 { + break + } + time.Sleep(time.Duration(i) * time.Second) + } + + if err != nil { + return nil, fmt.Errorf("Failed to get url: %v", err) + } + if response.StatusCode != 200 { + return nil, fmt.Errorf("invalid http response status: %v", response.StatusCode) + } + defer response.Body.Close() + + data, err := ioutil.ReadAll(response.Body) + if err != nil { + return nil, fmt.Errorf("Failed to read html response body: %v", err) + } + return DaemonSetFromData(data) +} + +// DaemonSetFromData reads a byte slice and returns the daemonset in it. +func DaemonSetFromData(data []byte) (*appsv1.DaemonSet, error) { + var ds appsv1.DaemonSet + dataJSON, err := utilyaml.ToJSON(data) + if err != nil { + return nil, fmt.Errorf("Failed to parse data to json: %v", err) + } + + err = runtime.DecodeInto(scheme.Codecs.UniversalDecoder(), dataJSON, &ds) + if err != nil { + return nil, fmt.Errorf("Failed to decode DaemonSet spec: %v", err) + } + return &ds, nil +} diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index bc31b8c5bde..f4777b50bbb 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -22,10 +22,8 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "math/rand" "net" - "net/http" "net/url" "os" "os/exec" @@ -41,21 +39,17 @@ import ( "github.com/onsi/gomega" gomegatypes "github.com/onsi/gomega/types" - appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/wait" - utilyaml "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/apimachinery/pkg/watch" clientset "k8s.io/client-go/kubernetes" - "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -1240,51 +1234,6 @@ func DumpDebugInfo(c clientset.Interface, ns string) { } } -// DsFromManifest reads a .json/yaml file and returns the daemonset in it. -func DsFromManifest(url string) (*appsv1.DaemonSet, error) { - Logf("Parsing ds from %v", url) - - var response *http.Response - var err error - - for i := 1; i <= 5; i++ { - response, err = http.Get(url) - if err == nil && response.StatusCode == 200 { - break - } - time.Sleep(time.Duration(i) * time.Second) - } - - if err != nil { - return nil, fmt.Errorf("Failed to get url: %v", err) - } - if response.StatusCode != 200 { - return nil, fmt.Errorf("invalid http response status: %v", response.StatusCode) - } - defer response.Body.Close() - - data, err := ioutil.ReadAll(response.Body) - if err != nil { - return nil, fmt.Errorf("Failed to read html response body: %v", err) - } - return DsFromData(data) -} - -// DsFromData reads a byte slice and returns the daemonset in it. -func DsFromData(data []byte) (*appsv1.DaemonSet, error) { - var ds appsv1.DaemonSet - dataJSON, err := utilyaml.ToJSON(data) - if err != nil { - return nil, fmt.Errorf("Failed to parse data to json: %v", err) - } - - err = runtime.DecodeInto(scheme.Codecs.UniversalDecoder(), dataJSON, &ds) - if err != nil { - return nil, fmt.Errorf("Failed to decode DaemonSet spec: %v", err) - } - return &ds, nil -} - // PrettyPrintJSON converts metrics to JSON format. func PrettyPrintJSON(metrics interface{}) string { output := &bytes.Buffer{} diff --git a/test/e2e/scheduling/BUILD b/test/e2e/scheduling/BUILD index 6f4fc9ca720..4c56b65b043 100644 --- a/test/e2e/scheduling/BUILD +++ b/test/e2e/scheduling/BUILD @@ -43,6 +43,7 @@ go_library( "//test/e2e/framework:go_default_library", "//test/e2e/framework/gpu:go_default_library", "//test/e2e/framework/job:go_default_library", + "//test/e2e/framework/manifest:go_default_library", "//test/e2e/framework/node:go_default_library", "//test/e2e/framework/pod:go_default_library", "//test/e2e/framework/providers/gce:go_default_library", diff --git a/test/e2e/scheduling/nvidia-gpus.go b/test/e2e/scheduling/nvidia-gpus.go index 09c43ad224c..334a6f5b9f6 100644 --- a/test/e2e/scheduling/nvidia-gpus.go +++ b/test/e2e/scheduling/nvidia-gpus.go @@ -30,6 +30,7 @@ import ( "k8s.io/kubernetes/test/e2e/framework" e2egpu "k8s.io/kubernetes/test/e2e/framework/gpu" e2ejob "k8s.io/kubernetes/test/e2e/framework/job" + e2emanifest "k8s.io/kubernetes/test/e2e/framework/manifest" e2enode "k8s.io/kubernetes/test/e2e/framework/node" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" "k8s.io/kubernetes/test/e2e/framework/providers/gce" @@ -137,7 +138,7 @@ func SetupNVIDIAGPUNode(f *framework.Framework, setupResourceGatherer bool) *fra framework.Logf("Using %v", dsYamlURL) // Creates the DaemonSet that installs Nvidia Drivers. - ds, err := framework.DsFromManifest(dsYamlURL) + ds, err := e2emanifest.DaemonSetFromURL(dsYamlURL) framework.ExpectNoError(err) ds.Namespace = f.Namespace.Name _, err = f.ClientSet.AppsV1().DaemonSets(f.Namespace.Name).Create(context.TODO(), ds, metav1.CreateOptions{}) diff --git a/test/e2e_node/BUILD b/test/e2e_node/BUILD index 7125bc64969..46664d31bb5 100644 --- a/test/e2e_node/BUILD +++ b/test/e2e_node/BUILD @@ -50,6 +50,7 @@ go_library( "//test/e2e/framework:go_default_library", "//test/e2e/framework/gpu:go_default_library", "//test/e2e/framework/kubelet:go_default_library", + "//test/e2e/framework/manifest:go_default_library", "//test/e2e/framework/metrics:go_default_library", "//test/e2e/framework/node:go_default_library", "//test/e2e/framework/testfiles:go_default_library", @@ -194,6 +195,7 @@ go_test( "//test/e2e/framework:go_default_library", "//test/e2e/framework/gpu:go_default_library", "//test/e2e/framework/kubectl:go_default_library", + "//test/e2e/framework/manifest:go_default_library", "//test/e2e/framework/metrics:go_default_library", "//test/e2e/framework/node:go_default_library", "//test/e2e/framework/pod:go_default_library", diff --git a/test/e2e_node/gpu_device_plugin_test.go b/test/e2e_node/gpu_device_plugin_test.go index 518e944e905..b0cdd56b3e9 100644 --- a/test/e2e_node/gpu_device_plugin_test.go +++ b/test/e2e_node/gpu_device_plugin_test.go @@ -28,6 +28,7 @@ import ( kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics" "k8s.io/kubernetes/test/e2e/framework" e2egpu "k8s.io/kubernetes/test/e2e/framework/gpu" + e2emanifest "k8s.io/kubernetes/test/e2e/framework/manifest" e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics" "github.com/onsi/ginkgo" @@ -49,7 +50,7 @@ func numberOfNVIDIAGPUs(node *v1.Node) int64 { // NVIDIADevicePlugin returns the official Google Device Plugin pod for NVIDIA GPU in GKE func NVIDIADevicePlugin() *v1.Pod { - ds, err := framework.DsFromManifest(e2egpu.GPUDevicePluginDSYAML) + ds, err := e2emanifest.DaemonSetFromURL(e2egpu.GPUDevicePluginDSYAML) framework.ExpectNoError(err) p := &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ diff --git a/test/e2e_node/image_list.go b/test/e2e_node/image_list.go index 233e8bac3b4..b98e5acf756 100644 --- a/test/e2e_node/image_list.go +++ b/test/e2e_node/image_list.go @@ -31,6 +31,7 @@ import ( commontest "k8s.io/kubernetes/test/e2e/common" "k8s.io/kubernetes/test/e2e/framework" e2egpu "k8s.io/kubernetes/test/e2e/framework/gpu" + e2emanifest "k8s.io/kubernetes/test/e2e/framework/manifest" e2etestfiles "k8s.io/kubernetes/test/e2e/framework/testfiles" imageutils "k8s.io/kubernetes/test/utils/image" ) @@ -171,7 +172,7 @@ func PrePullAllImages() error { // getGPUDevicePluginImage returns the image of GPU device plugin. func getGPUDevicePluginImage() string { - ds, err := framework.DsFromManifest(e2egpu.GPUDevicePluginDSYAML) + ds, err := e2emanifest.DaemonSetFromURL(e2egpu.GPUDevicePluginDSYAML) if err != nil { klog.Errorf("Failed to parse the device plugin image: %v", err) return "" @@ -194,7 +195,7 @@ func getSRIOVDevicePluginImage() string { klog.Errorf("Failed to read the device plugin manifest: %v", err) return "" } - ds, err := framework.DsFromData(data) + ds, err := e2emanifest.DaemonSetFromData(data) if err != nil { klog.Errorf("Failed to parse the device plugin image: %v", err) return ""