mirror of https://github.com/k3s-io/k3s
Node e2e fix etcd compability issues across versions
parent
30a9cb26bd
commit
0db316970c
|
@ -109,54 +109,51 @@ func (es *e2eService) startEtcd() (*exec.Cmd, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
es.etcdDataDir = dataDir
|
es.etcdDataDir = dataDir
|
||||||
return es.startServer(healthCheckCommand{
|
cmd := exec.Command("etcd")
|
||||||
combinedOut: &es.etcdCombinedOut,
|
// Execute etcd in the data directory instead of using --data-dir because the flag sometimes requires additional
|
||||||
healthCheckUrl: "http://127.0.0.1:4001/v2/keys",
|
// configuration (e.g. --name in version 0.4.9)
|
||||||
command: "etcd",
|
cmd.Dir = es.etcdDataDir
|
||||||
args: []string{"--data-dir", dataDir},
|
hcc := newHealthCheckCommand(
|
||||||
})
|
"http://127.0.0.1:4001/v2/keys/", // Trailing slash is required,
|
||||||
|
cmd,
|
||||||
|
&es.etcdCombinedOut)
|
||||||
|
return cmd, es.startServer(hcc)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (es *e2eService) startApiServer() (*exec.Cmd, error) {
|
func (es *e2eService) startApiServer() (*exec.Cmd, error) {
|
||||||
return es.startServer(
|
cmd := exec.Command("sudo", getApiServerBin(),
|
||||||
healthCheckCommand{
|
"--v", "2", "--logtostderr", "--log_dir", "./",
|
||||||
combinedOut: &es.apiServerCombinedOut,
|
"--etcd-servers", "http://127.0.0.1:4001",
|
||||||
healthCheckUrl: "http://127.0.0.1:8080/healthz",
|
"--insecure-bind-address", "0.0.0.0",
|
||||||
command: "sudo",
|
"--service-cluster-ip-range", "10.0.0.1/24",
|
||||||
args: []string{getApiServerBin(),
|
"--kubelet-port", "10250")
|
||||||
"--v", "2", "--logtostderr", "--log_dir", "./",
|
hcc := newHealthCheckCommand(
|
||||||
"--etcd-servers", "http://127.0.0.1:4001",
|
"http://127.0.0.1:8080/healthz",
|
||||||
"--insecure-bind-address", "0.0.0.0",
|
cmd,
|
||||||
"--service-cluster-ip-range", "10.0.0.1/24",
|
&es.apiServerCombinedOut)
|
||||||
"--kubelet-port", "10250"},
|
return cmd, es.startServer(hcc)
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (es *e2eService) startKubeletServer() (*exec.Cmd, error) {
|
func (es *e2eService) startKubeletServer() (*exec.Cmd, error) {
|
||||||
return es.startServer(
|
cmd := exec.Command("sudo", getKubeletServerBin(),
|
||||||
healthCheckCommand{
|
"--v", "2", "--logtostderr", "--log_dir", "./",
|
||||||
combinedOut: &es.kubeletCombinedOut,
|
"--api-servers", "http://127.0.0.1:8080",
|
||||||
healthCheckUrl: "http://127.0.0.1:10255/healthz",
|
"--address", "0.0.0.0",
|
||||||
command: "sudo",
|
"--port", "10250",
|
||||||
args: []string{getKubeletServerBin(),
|
"--hostname-override", es.nodeName) // Required because hostname is inconsistent across hosts
|
||||||
"--v", "2", "--logtostderr", "--log_dir", "./",
|
hcc := newHealthCheckCommand(
|
||||||
"--api-servers", "http://127.0.0.1:8080",
|
"http://127.0.0.1:10255/healthz",
|
||||||
"--address", "0.0.0.0",
|
cmd,
|
||||||
"--port", "10250",
|
&es.kubeletCombinedOut)
|
||||||
"--hostname-override", es.nodeName, // Required because hostname is inconsistent across hosts
|
return cmd, es.startServer(hcc)
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (es *e2eService) startServer(hcc healthCheckCommand) (*exec.Cmd, error) {
|
func (es *e2eService) startServer(cmd *healthCheckCommand) error {
|
||||||
cmdErrorChan := make(chan error)
|
cmdErrorChan := make(chan error)
|
||||||
cmd := exec.Command(hcc.command, hcc.args...)
|
|
||||||
cmd.Stdout = hcc.combinedOut
|
|
||||||
cmd.Stderr = hcc.combinedOut
|
|
||||||
go func() {
|
go func() {
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cmdErrorChan <- fmt.Errorf("%v Exited with status %v. Output:\n%s", hcc, err, *hcc.combinedOut)
|
cmdErrorChan <- fmt.Errorf("%s Exited with status %v. Output:\n%s", cmd, err, *cmd.OutputBuffer)
|
||||||
}
|
}
|
||||||
close(cmdErrorChan)
|
close(cmdErrorChan)
|
||||||
}()
|
}()
|
||||||
|
@ -165,24 +162,33 @@ func (es *e2eService) startServer(hcc healthCheckCommand) (*exec.Cmd, error) {
|
||||||
for endTime.After(time.Now()) {
|
for endTime.After(time.Now()) {
|
||||||
select {
|
select {
|
||||||
case err := <-cmdErrorChan:
|
case err := <-cmdErrorChan:
|
||||||
return nil, err
|
return err
|
||||||
case <-time.After(time.Second):
|
case <-time.After(time.Second):
|
||||||
resp, err := http.Get(hcc.healthCheckUrl)
|
resp, err := http.Get(cmd.HealthCheckUrl)
|
||||||
if err == nil && resp.StatusCode == http.StatusOK {
|
if err == nil && resp.StatusCode == http.StatusOK {
|
||||||
return cmd, nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("Timeout waiting for service %v", hcc)
|
return fmt.Errorf("Timeout waiting for service %s", cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
type healthCheckCommand struct {
|
type healthCheckCommand struct {
|
||||||
healthCheckUrl string
|
*exec.Cmd
|
||||||
command string
|
HealthCheckUrl string
|
||||||
args []string
|
OutputBuffer *bytes.Buffer
|
||||||
combinedOut *bytes.Buffer
|
}
|
||||||
|
|
||||||
|
func newHealthCheckCommand(healthCheckUrl string, cmd *exec.Cmd, combinedOutput *bytes.Buffer) *healthCheckCommand {
|
||||||
|
cmd.Stdout = combinedOutput
|
||||||
|
cmd.Stderr = combinedOutput
|
||||||
|
return &healthCheckCommand{
|
||||||
|
HealthCheckUrl: healthCheckUrl,
|
||||||
|
Cmd: cmd,
|
||||||
|
OutputBuffer: combinedOutput,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (hcc *healthCheckCommand) String() string {
|
func (hcc *healthCheckCommand) String() string {
|
||||||
return fmt.Sprintf("`%s %s` %s", hcc.command, strings.Join(hcc.args, " "), hcc.healthCheckUrl)
|
return fmt.Sprintf("`%s %s` health-check: %s", hcc.Path, strings.Join(hcc.Args, " "), hcc.HealthCheckUrl)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
GCE_HOSTS=
|
GCE_HOSTS=
|
||||||
GCE_IMAGES=e2e-node-ubuntu-trusty-docker10-image,e2e-node-ubuntu-trusty-docker9-image,e2e-node-ubuntu-trusty-docker8-image
|
GCE_IMAGES=e2e-node-ubuntu-trusty-docker10-image,e2e-node-ubuntu-trusty-docker9-image,e2e-node-ubuntu-trusty-docker8-image,e2e-node-coreos-stable20160218-image,e2e-node-containervm-20160217-image
|
||||||
GCE_ZONE=us-central1-f
|
GCE_ZONE=us-central1-f
|
||||||
GCE_PROJECT=kubernetes-jenkins-pull
|
GCE_PROJECT=kubernetes-jenkins-pull
|
||||||
INSTALL_GODEP=true
|
INSTALL_GODEP=true
|
||||||
|
|
Loading…
Reference in New Issue