mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 09:22:44 +00:00
Support multizone clusters in GCE and GKE e2e tests
This commit is contained in:
parent
7c04a684ae
commit
def49db058
@ -41,13 +41,17 @@ func ResizeGroup(group string, size int32) error {
|
|||||||
if TestContext.Provider == "gce" || TestContext.Provider == "gke" {
|
if TestContext.Provider == "gce" || TestContext.Provider == "gke" {
|
||||||
// TODO: make this hit the compute API directly instead of shelling out to gcloud.
|
// TODO: make this hit the compute API directly instead of shelling out to gcloud.
|
||||||
// TODO: make gce/gke implement InstanceGroups, so we can eliminate the per-provider logic
|
// TODO: make gce/gke implement InstanceGroups, so we can eliminate the per-provider logic
|
||||||
|
zone, err := getGCEZoneForGroup(group)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
output, err := exec.Command("gcloud", "compute", "instance-groups", "managed", "resize",
|
output, err := exec.Command("gcloud", "compute", "instance-groups", "managed", "resize",
|
||||||
group, fmt.Sprintf("--size=%v", size),
|
group, fmt.Sprintf("--size=%v", size),
|
||||||
"--project="+TestContext.CloudConfig.ProjectID, "--zone="+TestContext.CloudConfig.Zone).CombinedOutput()
|
"--project="+TestContext.CloudConfig.ProjectID, "--zone="+zone).CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logf("Failed to resize node instance group: %v", string(output))
|
return fmt.Errorf("Failed to resize node instance group %s: %s", group, output)
|
||||||
}
|
}
|
||||||
return err
|
return nil
|
||||||
} else if TestContext.Provider == "aws" {
|
} else if TestContext.Provider == "aws" {
|
||||||
client := autoscaling.New(session.New())
|
client := autoscaling.New(session.New())
|
||||||
return awscloud.ResizeInstanceGroup(client, group, int(size))
|
return awscloud.ResizeInstanceGroup(client, group, int(size))
|
||||||
@ -62,12 +66,15 @@ func GetGroupNodes(group string) ([]string, error) {
|
|||||||
if TestContext.Provider == "gce" || TestContext.Provider == "gke" {
|
if TestContext.Provider == "gce" || TestContext.Provider == "gke" {
|
||||||
// TODO: make this hit the compute API directly instead of shelling out to gcloud.
|
// TODO: make this hit the compute API directly instead of shelling out to gcloud.
|
||||||
// TODO: make gce/gke implement InstanceGroups, so we can eliminate the per-provider logic
|
// TODO: make gce/gke implement InstanceGroups, so we can eliminate the per-provider logic
|
||||||
|
zone, err := getGCEZoneForGroup(group)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
output, err := exec.Command("gcloud", "compute", "instance-groups", "managed",
|
output, err := exec.Command("gcloud", "compute", "instance-groups", "managed",
|
||||||
"list-instances", group, "--project="+TestContext.CloudConfig.ProjectID,
|
"list-instances", group, "--project="+TestContext.CloudConfig.ProjectID,
|
||||||
"--zone="+TestContext.CloudConfig.Zone).CombinedOutput()
|
"--zone="+zone).CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Logf("Failed to get nodes in instance group: %v", string(output))
|
return nil, fmt.Errorf("Failed to get nodes in instance group %s: %s", group, output)
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
re := regexp.MustCompile(".*RUNNING")
|
re := regexp.MustCompile(".*RUNNING")
|
||||||
lines := re.FindAllString(string(output), -1)
|
lines := re.FindAllString(string(output), -1)
|
||||||
@ -86,12 +93,16 @@ func GroupSize(group string) (int, error) {
|
|||||||
if TestContext.Provider == "gce" || TestContext.Provider == "gke" {
|
if TestContext.Provider == "gce" || TestContext.Provider == "gke" {
|
||||||
// TODO: make this hit the compute API directly instead of shelling out to gcloud.
|
// TODO: make this hit the compute API directly instead of shelling out to gcloud.
|
||||||
// TODO: make gce/gke implement InstanceGroups, so we can eliminate the per-provider logic
|
// TODO: make gce/gke implement InstanceGroups, so we can eliminate the per-provider logic
|
||||||
output, err := exec.Command("gcloud", "compute", "instance-groups", "managed",
|
zone, err := getGCEZoneForGroup(group)
|
||||||
"list-instances", group, "--project="+TestContext.CloudConfig.ProjectID,
|
|
||||||
"--zone="+TestContext.CloudConfig.Zone).CombinedOutput()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
output, err := exec.Command("gcloud", "compute", "instance-groups", "managed",
|
||||||
|
"list-instances", group, "--project="+TestContext.CloudConfig.ProjectID,
|
||||||
|
"--zone="+zone).CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
return -1, fmt.Errorf("Failed to get group size for group %s: %s", group, output)
|
||||||
|
}
|
||||||
re := regexp.MustCompile("RUNNING")
|
re := regexp.MustCompile("RUNNING")
|
||||||
return len(re.FindAllString(string(output), -1)), nil
|
return len(re.FindAllString(string(output), -1)), nil
|
||||||
} else if TestContext.Provider == "aws" {
|
} else if TestContext.Provider == "aws" {
|
||||||
@ -128,3 +139,16 @@ func WaitForGroupSize(group string, size int32) error {
|
|||||||
}
|
}
|
||||||
return fmt.Errorf("timeout waiting %v for node instance group size to be %d", timeout, size)
|
return fmt.Errorf("timeout waiting %v for node instance group size to be %d", timeout, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getGCEZoneForGroup(group string) (string, error) {
|
||||||
|
zone := TestContext.CloudConfig.Zone
|
||||||
|
if TestContext.CloudConfig.MultiZone {
|
||||||
|
output, err := exec.Command("gcloud", "compute", "instance-groups", "managed", "list",
|
||||||
|
"--project="+TestContext.CloudConfig.ProjectID, "--format=value(zone)", "--filter=name="+group).CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("Failed to get zone for node group %s: %s", group, output)
|
||||||
|
}
|
||||||
|
zone = strings.TrimSpace(string(output))
|
||||||
|
}
|
||||||
|
return zone, nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user