e2e: getCurrentKubeletConfig: move in subpkg

Address review comments and move the helper function
in the `framework/kubelet` package to avoid circular deps
(see https://github.com/kubernetes/kubernetes/issues/81245)

Signed-off-by: Francesco Romani <fromani@redhat.com>
This commit is contained in:
Francesco Romani 2020-02-14 10:50:37 +01:00
parent 08ba240c6b
commit bb770c0325
5 changed files with 24 additions and 18 deletions

View File

@ -9,7 +9,6 @@ go_library(
"flake_reporting_util.go", "flake_reporting_util.go",
"framework.go", "framework.go",
"google_compute.go", "google_compute.go",
"kubeletconfig.go",
"log.go", "log.go",
"log_size_monitoring.go", "log_size_monitoring.go",
"nodes_util.go", "nodes_util.go",
@ -65,7 +64,6 @@ go_library(
"//staging/src/k8s.io/client-go/tools/remotecommand:go_default_library", "//staging/src/k8s.io/client-go/tools/remotecommand:go_default_library",
"//staging/src/k8s.io/client-go/tools/watch:go_default_library", "//staging/src/k8s.io/client-go/tools/watch:go_default_library",
"//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//staging/src/k8s.io/component-base/cli/flag:go_default_library",
"//staging/src/k8s.io/kubelet/config/v1beta1:go_default_library",
"//test/e2e/framework/auth:go_default_library", "//test/e2e/framework/auth:go_default_library",
"//test/e2e/framework/ginkgowrapper:go_default_library", "//test/e2e/framework/ginkgowrapper:go_default_library",
"//test/e2e/framework/kubectl:go_default_library", "//test/e2e/framework/kubectl:go_default_library",

View File

@ -3,12 +3,14 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library( go_library(
name = "go_default_library", name = "go_default_library",
srcs = [ srcs = [
"config.go",
"kubelet_pods.go", "kubelet_pods.go",
"stats.go", "stats.go",
], ],
importpath = "k8s.io/kubernetes/test/e2e/framework/kubelet", importpath = "k8s.io/kubernetes/test/e2e/framework/kubelet",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//pkg/kubelet/apis/config:go_default_library",
"//pkg/kubelet/apis/stats/v1alpha1:go_default_library", "//pkg/kubelet/apis/stats/v1alpha1:go_default_library",
"//pkg/kubelet/dockershim/metrics:go_default_library", "//pkg/kubelet/dockershim/metrics:go_default_library",
"//pkg/master/ports:go_default_library", "//pkg/master/ports:go_default_library",
@ -17,8 +19,11 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library",
"//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library",
"//staging/src/k8s.io/kubelet/config/v1beta1:go_default_library",
"//test/e2e/framework:go_default_library", "//test/e2e/framework:go_default_library",
"//test/e2e/framework/kubectl:go_default_library",
"//test/e2e/framework/metrics:go_default_library", "//test/e2e/framework/metrics:go_default_library",
], ],
) )

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package framework package kubelet
import ( import (
"crypto/tls" "crypto/tls"
@ -31,6 +31,7 @@ import (
kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1" kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1"
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
"k8s.io/kubernetes/test/e2e/framework"
e2ekubectl "k8s.io/kubernetes/test/e2e/framework/kubectl" e2ekubectl "k8s.io/kubernetes/test/e2e/framework/kubectl"
) )
@ -52,47 +53,47 @@ func pollConfigz(timeout time.Duration, pollInterval time.Duration, nodeName, na
endpoint := "" endpoint := ""
if useProxy { if useProxy {
// start local proxy, so we can send graceful deletion over query string, rather than body parameter // start local proxy, so we can send graceful deletion over query string, rather than body parameter
Logf("Opening proxy to cluster") framework.Logf("Opening proxy to cluster")
tk := e2ekubectl.NewTestKubeconfig(TestContext.CertDir, TestContext.Host, TestContext.KubeConfig, TestContext.KubeContext, TestContext.KubectlPath, namespace) tk := e2ekubectl.NewTestKubeconfig(framework.TestContext.CertDir, framework.TestContext.Host, framework.TestContext.KubeConfig, framework.TestContext.KubeContext, framework.TestContext.KubectlPath, namespace)
cmd := tk.KubectlCmd("proxy", "-p", "0") cmd := tk.KubectlCmd("proxy", "-p", "0")
stdout, stderr, err := StartCmdAndStreamOutput(cmd) stdout, stderr, err := framework.StartCmdAndStreamOutput(cmd)
ExpectNoError(err) framework.ExpectNoError(err)
defer stdout.Close() defer stdout.Close()
defer stderr.Close() defer stderr.Close()
defer TryKill(cmd) defer framework.TryKill(cmd)
buf := make([]byte, 128) buf := make([]byte, 128)
var n int var n int
n, err = stdout.Read(buf) n, err = stdout.Read(buf)
ExpectNoError(err) framework.ExpectNoError(err)
output := string(buf[:n]) output := string(buf[:n])
proxyRegexp := regexp.MustCompile("Starting to serve on 127.0.0.1:([0-9]+)") proxyRegexp := regexp.MustCompile("Starting to serve on 127.0.0.1:([0-9]+)")
match := proxyRegexp.FindStringSubmatch(output) match := proxyRegexp.FindStringSubmatch(output)
ExpectEqual(len(match), 2) framework.ExpectEqual(len(match), 2)
port, err := strconv.Atoi(match[1]) port, err := strconv.Atoi(match[1])
ExpectNoError(err) framework.ExpectNoError(err)
Logf("http requesting node kubelet /configz") framework.Logf("http requesting node kubelet /configz")
endpoint = fmt.Sprintf("http://127.0.0.1:%d/api/v1/nodes/%s/proxy/configz", port, nodeName) endpoint = fmt.Sprintf("http://127.0.0.1:%d/api/v1/nodes/%s/proxy/configz", port, nodeName)
} else { } else {
endpoint = fmt.Sprintf("http://127.0.0.1:8080/api/v1/nodes/%s/proxy/configz", TestContext.NodeName) endpoint = fmt.Sprintf("http://127.0.0.1:8080/api/v1/nodes/%s/proxy/configz", framework.TestContext.NodeName)
} }
tr := &http.Transport{ tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
} }
client := &http.Client{Transport: tr} client := &http.Client{Transport: tr}
req, err := http.NewRequest("GET", endpoint, nil) req, err := http.NewRequest("GET", endpoint, nil)
ExpectNoError(err) framework.ExpectNoError(err)
req.Header.Add("Accept", "application/json") req.Header.Add("Accept", "application/json")
var resp *http.Response var resp *http.Response
wait.PollImmediate(pollInterval, timeout, func() (bool, error) { wait.PollImmediate(pollInterval, timeout, func() (bool, error) {
resp, err = client.Do(req) resp, err = client.Do(req)
if err != nil { if err != nil {
Logf("Failed to get /configz, retrying. Error: %v", err) framework.Logf("Failed to get /configz, retrying. Error: %v", err)
return false, nil return false, nil
} }
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
Logf("/configz response status not 200, retrying. Response was: %+v", resp) framework.Logf("/configz response status not 200, retrying. Response was: %+v", resp)
return false, nil return false, nil
} }

View File

@ -28,6 +28,7 @@ import (
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/uuid"
"k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/framework"
e2ekubelet "k8s.io/kubernetes/test/e2e/framework/kubelet"
e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
imageutils "k8s.io/kubernetes/test/utils/image" imageutils "k8s.io/kubernetes/test/utils/image"
@ -188,7 +189,7 @@ func getNodeMemory(f *framework.Framework) nodeMemory {
nodeName := nodeList.Items[0].ObjectMeta.Name nodeName := nodeList.Items[0].ObjectMeta.Name
kubeletConfig, err := framework.GetCurrentKubeletConfig(nodeName, f.Namespace.Name, true) kubeletConfig, err := e2ekubelet.GetCurrentKubeletConfig(nodeName, f.Namespace.Name, true)
framework.ExpectNoError(err) framework.ExpectNoError(err)
systemReserve, err := resource.ParseQuantity(kubeletConfig.SystemReserved["memory"]) systemReserve, err := resource.ParseQuantity(kubeletConfig.SystemReserved["memory"])

View File

@ -49,6 +49,7 @@ import (
"k8s.io/kubernetes/pkg/kubelet/remote" "k8s.io/kubernetes/pkg/kubelet/remote"
"k8s.io/kubernetes/pkg/kubelet/util" "k8s.io/kubernetes/pkg/kubelet/util"
"k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/framework"
e2ekubelet "k8s.io/kubernetes/test/e2e/framework/kubelet"
e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics" e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics"
e2enode "k8s.io/kubernetes/test/e2e/framework/node" e2enode "k8s.io/kubernetes/test/e2e/framework/node"
imageutils "k8s.io/kubernetes/test/utils/image" imageutils "k8s.io/kubernetes/test/utils/image"
@ -123,7 +124,7 @@ func getNodeDevices() (*kubeletpodresourcesv1alpha1.ListPodResourcesResponse, er
// Returns the current KubeletConfiguration // Returns the current KubeletConfiguration
func getCurrentKubeletConfig() (*kubeletconfig.KubeletConfiguration, error) { func getCurrentKubeletConfig() (*kubeletconfig.KubeletConfiguration, error) {
// namespace only relevant if useProxy==true, so we don't bother // namespace only relevant if useProxy==true, so we don't bother
return framework.GetCurrentKubeletConfig(framework.TestContext.NodeName, "", false) return e2ekubelet.GetCurrentKubeletConfig(framework.TestContext.NodeName, "", false)
} }
// Must be called within a Context. Allows the function to modify the KubeletConfiguration during the BeforeEach of the context. // Must be called within a Context. Allows the function to modify the KubeletConfiguration during the BeforeEach of the context.