Skip to content

Commit 338bc3c

Browse files
committed
Move framework ssh code to new package
The framework/ssh.go code was heavily used throughout the framework and could be useful elsewhere but reusing those methods requires importing all of the framework. Extracting these methods to their own package for reuse. Only a few methods had to be copied into this package from the rest of the framework to avoid an import cycle.
1 parent 22b6c69 commit 338bc3c

32 files changed

+259
-119
lines changed

test/e2e/apimachinery/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ go_library(
8282
"//test/e2e/framework:go_default_library",
8383
"//test/e2e/framework/deployment:go_default_library",
8484
"//test/e2e/framework/metrics:go_default_library",
85+
"//test/e2e/framework/ssh:go_default_library",
8586
"//test/utils:go_default_library",
8687
"//test/utils/crd:go_default_library",
8788
"//test/utils/image:go_default_library",

test/e2e/apimachinery/etcd_failure.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
2626
"k8s.io/kubernetes/test/e2e/apps"
2727
"k8s.io/kubernetes/test/e2e/framework"
28+
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
2829
testutils "k8s.io/kubernetes/test/utils"
2930
imageutils "k8s.io/kubernetes/test/utils/image"
3031

@@ -95,10 +96,10 @@ func doEtcdFailure(failCommand, fixCommand string) {
9596

9697
func masterExec(cmd string) {
9798
host := framework.GetMasterHost() + ":22"
98-
result, err := framework.SSH(cmd, host, framework.TestContext.Provider)
99+
result, err := e2essh.SSH(cmd, host, framework.TestContext.Provider)
99100
gomega.Expect(err).NotTo(gomega.HaveOccurred(), "failed to SSH to host %s on provider %s and run command: %q", host, framework.TestContext.Provider, cmd)
100101
if result.Code != 0 {
101-
framework.LogSSHResult(result)
102+
e2essh.LogResult(result)
102103
framework.Failf("master exec command returned non-zero")
103104
}
104105
}

test/e2e/apps/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ go_library(
6464
"//test/e2e/framework/deployment:go_default_library",
6565
"//test/e2e/framework/job:go_default_library",
6666
"//test/e2e/framework/replicaset:go_default_library",
67+
"//test/e2e/framework/ssh:go_default_library",
6768
"//test/utils:go_default_library",
6869
"//test/utils/image:go_default_library",
6970
"//vendor/github.com/davecgh/go-spew/spew:go_default_library",

test/e2e/apps/daemon_restart.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"strconv"
2222
"time"
2323

24-
"k8s.io/api/core/v1"
24+
v1 "k8s.io/api/core/v1"
2525
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2626
"k8s.io/apimachinery/pkg/labels"
2727
"k8s.io/apimachinery/pkg/runtime"
@@ -33,6 +33,7 @@ import (
3333
"k8s.io/client-go/tools/cache"
3434
"k8s.io/kubernetes/pkg/master/ports"
3535
"k8s.io/kubernetes/test/e2e/framework"
36+
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
3637
testutils "k8s.io/kubernetes/test/utils"
3738
imageutils "k8s.io/kubernetes/test/utils/image"
3839

@@ -93,7 +94,7 @@ func (r *RestartDaemonConfig) waitUp() {
9394
"curl -s -o /dev/null -I -w \"%%{http_code}\" http://localhost:%v/healthz", r.healthzPort)
9495

9596
err := wait.Poll(r.pollInterval, r.pollTimeout, func() (bool, error) {
96-
result, err := framework.NodeExec(r.nodeName, healthzCheck)
97+
result, err := e2essh.NodeExec(r.nodeName, healthzCheck, framework.TestContext.Provider)
9798
framework.ExpectNoError(err)
9899
if result.Code == 0 {
99100
httpCode, err := strconv.Atoi(result.Stdout)
@@ -113,7 +114,7 @@ func (r *RestartDaemonConfig) waitUp() {
113114
// kill sends a SIGTERM to the daemon
114115
func (r *RestartDaemonConfig) kill() {
115116
framework.Logf("Killing %v", r)
116-
_, err := framework.NodeExec(r.nodeName, fmt.Sprintf("pgrep %v | xargs -I {} sudo kill {}", r.daemonName))
117+
_, err := e2essh.NodeExec(r.nodeName, fmt.Sprintf("pgrep %v | xargs -I {} sudo kill {}", r.daemonName), framework.TestContext.Provider)
117118
framework.ExpectNoError(err)
118119
}
119120

test/e2e/framework/BUILD

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ go_library(
2727
"resource_usage_gatherer.go",
2828
"service_util.go",
2929
"size.go",
30-
"ssh.go",
3130
"statefulset_utils.go",
3231
"test_context.go",
3332
"util.go",
@@ -59,7 +58,6 @@ go_library(
5958
"//pkg/scheduler/metrics:go_default_library",
6059
"//pkg/scheduler/nodeinfo:go_default_library",
6160
"//pkg/security/podsecuritypolicy/seccomp:go_default_library",
62-
"//pkg/ssh:go_default_library",
6361
"//pkg/util/system:go_default_library",
6462
"//pkg/util/taints:go_default_library",
6563
"//pkg/volume/util:go_default_library",
@@ -113,6 +111,7 @@ go_library(
113111
"//test/e2e/framework/auth:go_default_library",
114112
"//test/e2e/framework/ginkgowrapper:go_default_library",
115113
"//test/e2e/framework/metrics:go_default_library",
114+
"//test/e2e/framework/ssh:go_default_library",
116115
"//test/e2e/framework/testfiles:go_default_library",
117116
"//test/e2e/manifest:go_default_library",
118117
"//test/e2e/perftype:go_default_library",
@@ -125,7 +124,6 @@ go_library(
125124
"//vendor/github.com/pkg/errors:go_default_library",
126125
"//vendor/github.com/prometheus/common/expfmt:go_default_library",
127126
"//vendor/github.com/prometheus/common/model:go_default_library",
128-
"//vendor/golang.org/x/crypto/ssh:go_default_library",
129127
"//vendor/golang.org/x/net/websocket:go_default_library",
130128
"//vendor/k8s.io/klog:go_default_library",
131129
"//vendor/k8s.io/utils/exec:go_default_library",
@@ -162,6 +160,7 @@ filegroup(
162160
"//test/e2e/framework/providers/openstack:all-srcs",
163161
"//test/e2e/framework/providers/vsphere:all-srcs",
164162
"//test/e2e/framework/replicaset:all-srcs",
163+
"//test/e2e/framework/ssh:all-srcs",
165164
"//test/e2e/framework/testfiles:all-srcs",
166165
"//test/e2e/framework/timer:all-srcs",
167166
"//test/e2e/framework/viperconfig:all-srcs",

test/e2e/framework/get-kubemark-resource-usage.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020
"bufio"
2121
"fmt"
2222
"strings"
23+
24+
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
2325
)
2426

2527
// KubemarkResourceUsage is a struct for tracking the resource usage of kubemark.
@@ -30,7 +32,7 @@ type KubemarkResourceUsage struct {
3032
}
3133

3234
func getMasterUsageByPrefix(prefix string) (string, error) {
33-
sshResult, err := SSH(fmt.Sprintf("ps ax -o %%cpu,rss,command | tail -n +2 | grep %v | sed 's/\\s+/ /g'", prefix), GetMasterHost()+":22", TestContext.Provider)
35+
sshResult, err := e2essh.SSH(fmt.Sprintf("ps ax -o %%cpu,rss,command | tail -n +2 | grep %v | sed 's/\\s+/ /g'", prefix), GetMasterHost()+":22", TestContext.Provider)
3436
if err != nil {
3537
return "", err
3638
}

test/e2e/framework/log_size_monitoring.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"time"
2727

2828
clientset "k8s.io/client-go/kubernetes"
29+
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
2930
)
3031

3132
const (
@@ -154,7 +155,7 @@ func (d *LogsSizeData) addNewData(ip, path string, timestamp time.Time, size int
154155

155156
// NewLogsVerifier creates a new LogsSizeVerifier which will stop when stopChannel is closed
156157
func NewLogsVerifier(c clientset.Interface, stopChannel chan bool) *LogsSizeVerifier {
157-
nodeAddresses, err := NodeSSHHosts(c)
158+
nodeAddresses, err := e2essh.NodeSSHHosts(c)
158159
ExpectNoError(err)
159160
masterAddress := GetMasterHost() + ":22"
160161

@@ -250,7 +251,7 @@ func (g *LogSizeGatherer) Work() bool {
250251
return false
251252
case workItem = <-g.workChannel:
252253
}
253-
sshResult, err := SSH(
254+
sshResult, err := e2essh.SSH(
254255
fmt.Sprintf("ls -l %v | awk '{print $9, $5}' | tr '\n' ' '", strings.Join(workItem.paths, " ")),
255256
workItem.ip,
256257
TestContext.Provider,

test/e2e/framework/metrics_util.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
schedulermetric "k8s.io/kubernetes/pkg/scheduler/metrics"
3838
"k8s.io/kubernetes/pkg/util/system"
3939
"k8s.io/kubernetes/test/e2e/framework/metrics"
40+
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
4041

4142
"github.com/prometheus/common/expfmt"
4243
"github.com/prometheus/common/model"
@@ -329,7 +330,7 @@ func getEtcdMetrics() ([]*model.Sample, error) {
329330
}
330331

331332
cmd := "curl http://localhost:2379/metrics"
332-
sshResult, err := SSH(cmd, GetMasterHost()+":22", TestContext.Provider)
333+
sshResult, err := e2essh.SSH(cmd, GetMasterHost()+":22", TestContext.Provider)
333334
if err != nil || sshResult.Code != 0 {
334335
return nil, fmt.Errorf("unexpected error (code: %d) in ssh connection to master: %#v", sshResult.Code, err)
335336
}
@@ -656,7 +657,7 @@ func sendRestRequestToScheduler(c clientset.Interface, op string) (string, error
656657
}
657658

658659
cmd := "curl -X " + opUpper + " http://localhost:10251/metrics"
659-
sshResult, err := SSH(cmd, GetMasterHost()+":22", TestContext.Provider)
660+
sshResult, err := e2essh.SSH(cmd, GetMasterHost()+":22", TestContext.Provider)
660661
if err != nil || sshResult.Code != 0 {
661662
return "", fmt.Errorf("unexpected error (code: %d) in ssh connection to master: %#v", sshResult.Code, err)
662663
}

test/e2e/framework/nodes_util.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@ import (
2525
"sync"
2626
"time"
2727

28-
"k8s.io/api/core/v1"
28+
v1 "k8s.io/api/core/v1"
2929
"k8s.io/apimachinery/pkg/util/wait"
3030
clientset "k8s.io/client-go/kubernetes"
31+
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
3132
)
3233

3334
// EtcdUpgrade upgrades etcd on GCE.
@@ -351,7 +352,7 @@ func (k *NodeKiller) kill(nodes []v1.Node) {
351352
defer wg.Done()
352353

353354
Logf("Stopping docker and kubelet on %q to simulate failure", node.Name)
354-
err := IssueSSHCommand("sudo systemctl stop docker kubelet", k.provider, &node)
355+
err := e2essh.IssueSSHCommand("sudo systemctl stop docker kubelet", k.provider, &node)
355356
if err != nil {
356357
Logf("ERROR while stopping node %q: %v", node.Name, err)
357358
return
@@ -360,7 +361,7 @@ func (k *NodeKiller) kill(nodes []v1.Node) {
360361
time.Sleep(k.config.SimulatedDowntime)
361362

362363
Logf("Rebooting %q to repair the node", node.Name)
363-
err = IssueSSHCommand("sudo reboot", k.provider, &node)
364+
err = e2essh.IssueSSHCommand("sudo reboot", k.provider, &node)
364365
if err != nil {
365366
Logf("ERROR while rebooting node %q: %v", node.Name, err)
366367
return

test/e2e/framework/profile_gatherer.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import (
2525
"strings"
2626
"sync"
2727
"time"
28+
29+
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
2830
)
2931

3032
const (
@@ -93,7 +95,7 @@ func gatherProfile(componentName, profileBaseName, profileKind string) error {
9395

9496
// Get the profile data over SSH.
9597
getCommand := fmt.Sprintf("curl -s localhost:%v/debug/pprof/%s", profilePort, profileKind)
96-
sshResult, err := SSH(getCommand, GetMasterHost()+":22", TestContext.Provider)
98+
sshResult, err := e2essh.SSH(getCommand, GetMasterHost()+":22", TestContext.Provider)
9799
if err != nil {
98100
return fmt.Errorf("Failed to execute curl command on master through SSH: %v", err)
99101
}

0 commit comments

Comments
 (0)