mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Fix kube2sky flakes. Fix tools.GetEtcdVersion to work with etcd > 2.0.7
This commit is contained in:
parent
83b70c4411
commit
a21713a771
@ -106,7 +106,7 @@ func mutateEtcdOrDie(mutator func() error) {
|
|||||||
func newEtcdClient() (client *etcd.Client) {
|
func newEtcdClient() (client *etcd.Client) {
|
||||||
maxConnectRetries := 12
|
maxConnectRetries := 12
|
||||||
for maxConnectRetries > 0 {
|
for maxConnectRetries > 0 {
|
||||||
if _, _, err := tools.GetEtcdVersion(*etcd_server); err != nil {
|
if _, err := tools.GetEtcdVersion(*etcd_server); err != nil {
|
||||||
log.Fatalf("Failed to connect to etcd server: %v, error: %v", *etcd_server, err)
|
log.Fatalf("Failed to connect to etcd server: %v, error: %v", *etcd_server, err)
|
||||||
if maxConnectRetries > 0 {
|
if maxConnectRetries > 0 {
|
||||||
log.Println("Retrying request after 5 second sleep.")
|
log.Println("Retrying request after 5 second sleep.")
|
||||||
@ -120,13 +120,25 @@ func newEtcdClient() (client *etcd.Client) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
client = etcd.NewClient([]string{*etcd_server})
|
// loop until we have > 0 machines && machines[0] != ""
|
||||||
if client == nil {
|
timeout := false
|
||||||
return nil
|
go func() {
|
||||||
|
<-time.After(10 * time.Second)
|
||||||
|
timeout = true
|
||||||
|
}()
|
||||||
|
for !timeout {
|
||||||
|
client = etcd.NewClient([]string{*etcd_server})
|
||||||
|
if client == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
client.SyncCluster()
|
||||||
|
machines := client.GetCluster()
|
||||||
|
if len(machines) > 0 && len(machines[0]) > 0 {
|
||||||
|
return client
|
||||||
|
}
|
||||||
}
|
}
|
||||||
client.SyncCluster()
|
log.Fatal("Timed out waiting for correct response from etcd server")
|
||||||
|
return nil
|
||||||
return client
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: evaluate using pkg/client/clientcmd
|
// TODO: evaluate using pkg/client/clientcmd
|
||||||
|
@ -21,15 +21,17 @@ desiredState:
|
|||||||
dnsPolicy: "Default" # Don't use cluster DNS.
|
dnsPolicy: "Default" # Don't use cluster DNS.
|
||||||
containers:
|
containers:
|
||||||
- name: etcd
|
- name: etcd
|
||||||
image: quay.io/coreos/etcd:v2.0.3
|
image: gcr.io/google_containers/etcd:2.0.9
|
||||||
command: [
|
command: [
|
||||||
# entrypoint = "/etcd",
|
"/usr/local/bin/etcd",
|
||||||
"-listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001",
|
"--addr",
|
||||||
|
"127.0.0.1:4001",
|
||||||
|
"--bind-addr",
|
||||||
|
"127.0.0.1:4001",
|
||||||
"-initial-cluster-token=skydns-etcd",
|
"-initial-cluster-token=skydns-etcd",
|
||||||
"-advertise-client-urls=http://127.0.0.1:4001",
|
|
||||||
]
|
]
|
||||||
- name: kube2sky
|
- name: kube2sky
|
||||||
image: gcr.io/google_containers/kube2sky:1.2
|
image: gcr.io/google_containers/kube2sky:1.3
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: dns-token
|
- name: dns-token
|
||||||
mountPath: /etc/dns_token
|
mountPath: /etc/dns_token
|
||||||
|
@ -17,7 +17,6 @@ limitations under the License.
|
|||||||
package tools
|
package tools
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -475,35 +474,22 @@ func (h *EtcdHelper) PrefixEtcdKey(key string) string {
|
|||||||
return path.Join("/", h.PathPrefix, key)
|
return path.Join("/", h.PathPrefix, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetEtcdVersion performs a version check against the provided Etcd server, returning a triplet
|
// GetEtcdVersion performs a version check against the provided Etcd server,
|
||||||
// of the release version, internal version, and error (if any).
|
// returning the string response, and error (if any).
|
||||||
func GetEtcdVersion(host string) (releaseVersion, internalVersion string, err error) {
|
func GetEtcdVersion(host string) (string, error) {
|
||||||
response, err := http.Get(host + "/version")
|
response, err := http.Get(host + "/version")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", err
|
||||||
}
|
}
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
|
if response.StatusCode != http.StatusOK {
|
||||||
body, err := ioutil.ReadAll(response.Body)
|
return "", fmt.Errorf("Unsuccessful response from server: %v", err)
|
||||||
|
}
|
||||||
|
versionBytes, err := ioutil.ReadAll(response.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
return string(versionBytes), nil
|
||||||
var dat map[string]interface{}
|
|
||||||
if err := json.Unmarshal(body, &dat); err != nil {
|
|
||||||
return "", "", fmt.Errorf("unknown server: %s", string(body))
|
|
||||||
}
|
|
||||||
if obj := dat["releaseVersion"]; obj != nil {
|
|
||||||
if s, ok := obj.(string); ok {
|
|
||||||
releaseVersion = s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if obj := dat["internalVersion"]; obj != nil {
|
|
||||||
if s, ok := obj.(string); ok {
|
|
||||||
internalVersion = s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func startEtcd() (*exec.Cmd, error) {
|
func startEtcd() (*exec.Cmd, error) {
|
||||||
@ -516,7 +502,7 @@ func startEtcd() (*exec.Cmd, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewEtcdClientStartServerIfNecessary(server string) (EtcdClient, error) {
|
func NewEtcdClientStartServerIfNecessary(server string) (EtcdClient, error) {
|
||||||
_, _, err := GetEtcdVersion(server)
|
_, err := GetEtcdVersion(server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Infof("Failed to find etcd, attempting to start.")
|
glog.Infof("Failed to find etcd, attempting to start.")
|
||||||
_, err := startEtcd()
|
_, err := startEtcd()
|
||||||
|
@ -685,35 +685,16 @@ func TestGuaranteedUpdate_CreateCollision(t *testing.T) {
|
|||||||
|
|
||||||
func TestGetEtcdVersion_ValidVersion(t *testing.T) {
|
func TestGetEtcdVersion_ValidVersion(t *testing.T) {
|
||||||
testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Fprintln(w, "{\"releaseVersion\":\"2.0.3\",\"internalVersion\":\"2\"}")
|
fmt.Fprint(w, "etcd 2.0.9")
|
||||||
}))
|
}))
|
||||||
defer testServer.Close()
|
defer testServer.Close()
|
||||||
|
|
||||||
var relVersion string
|
var version string
|
||||||
var intVersion string
|
|
||||||
var err error
|
var err error
|
||||||
if relVersion, intVersion, err = GetEtcdVersion(testServer.URL); err != nil {
|
if version, err = GetEtcdVersion(testServer.URL); err != nil {
|
||||||
t.Errorf("Unexpected error: %v", err)
|
t.Errorf("Unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
assert.Equal(t, "2.0.3", relVersion, "Unexpected external version")
|
assert.Equal(t, "etcd 2.0.9", version, "Unexpected version")
|
||||||
assert.Equal(t, "2", intVersion, "Unexpected internal version")
|
|
||||||
assert.Nil(t, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestGetEtcdVersion_UnknownVersion(t *testing.T) {
|
|
||||||
testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
fmt.Fprintln(w, "{\"unknownAttribute\":\"foobar\",\"internalVersion\":\"2\"}")
|
|
||||||
}))
|
|
||||||
defer testServer.Close()
|
|
||||||
|
|
||||||
var relVersion string
|
|
||||||
var intVersion string
|
|
||||||
var err error
|
|
||||||
if relVersion, intVersion, err = GetEtcdVersion(testServer.URL); err != nil {
|
|
||||||
t.Errorf("Unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
assert.Equal(t, "", relVersion, "Unexpected external version")
|
|
||||||
assert.Equal(t, "2", intVersion, "Unexpected internal version")
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -723,8 +704,12 @@ func TestGetEtcdVersion_ErrorStatus(t *testing.T) {
|
|||||||
}))
|
}))
|
||||||
defer testServer.Close()
|
defer testServer.Close()
|
||||||
|
|
||||||
var err error
|
_, err := GetEtcdVersion(testServer.URL)
|
||||||
_, _, err = GetEtcdVersion(testServer.URL)
|
assert.NotNil(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetEtcdVersion_NotListening(t *testing.T) {
|
||||||
|
_, err := GetEtcdVersion("http://127.0.0.1:4001")
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user