mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 12:43:23 +00:00
E2E changes to support templated addon
This commit is contained in:
parent
b066cb5357
commit
1f4e48ba59
@ -253,76 +253,49 @@ func kubectlLogLBController(c *client.Client, ns string) {
|
||||
}
|
||||
|
||||
type IngressController struct {
|
||||
ns string
|
||||
rcPath string
|
||||
defaultSvcPath string
|
||||
UID string
|
||||
Project string
|
||||
rc *api.ReplicationController
|
||||
svc *api.Service
|
||||
c *client.Client
|
||||
ns string
|
||||
rcPath string
|
||||
UID string
|
||||
Project string
|
||||
rc *api.ReplicationController
|
||||
svc *api.Service
|
||||
c *client.Client
|
||||
}
|
||||
|
||||
func (cont *IngressController) create() {
|
||||
|
||||
// TODO: This cop out is because it would be *more* brittle to duplicate all
|
||||
// the name construction logic from the controller cross-repo. We will not
|
||||
// need to be so paranoid about leaked resources once we figure out a solution
|
||||
// for issues like #16337. Currently, all names should fall within 63 chars.
|
||||
testName := fmt.Sprintf("k8s-fw-foo-app-X-%v--%v", cont.ns, cont.UID)
|
||||
if len(testName) > nameLenLimit {
|
||||
framework.Failf("Cannot reliably test the given namespace(%v)/uid(%v), too close to GCE limit of %v",
|
||||
cont.ns, cont.UID, nameLenLimit)
|
||||
}
|
||||
|
||||
if cont.defaultSvcPath != "" {
|
||||
svc := svcFromManifest(cont.defaultSvcPath)
|
||||
svc.Namespace = cont.ns
|
||||
svc.Labels = controllerLabels
|
||||
svc.Spec.Selector = controllerLabels
|
||||
cont.svc = svc
|
||||
_, err := cont.c.Services(cont.ns).Create(cont.svc)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
}
|
||||
rc := rcFromManifest(cont.rcPath)
|
||||
|
||||
func (cont *IngressController) getL7AddonUID() (string, error) {
|
||||
listOpts := api.ListOptions{LabelSelector: labels.SelectorFromSet(labels.Set(clusterAddonLBLabels))}
|
||||
existingRCs, err := cont.c.ReplicationControllers(api.NamespaceSystem).List(listOpts)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if len(existingRCs.Items) != 1 {
|
||||
framework.Failf("Unexpected number of lb cluster addons %v with label %v in kube-system namespace", len(existingRCs.Items), clusterAddonLBLabels)
|
||||
}
|
||||
|
||||
// Merge the existing spec and new spec. The modifications should not
|
||||
// manifest as functional changes to the controller. Most importantly, the
|
||||
// podTemplate shouldn't change (but for the additional test cmd line flags)
|
||||
// to ensure we test actual cluster functionality across upgrades.
|
||||
rc.Spec = existingRCs.Items[0].Spec
|
||||
rc.Name = "glbc"
|
||||
rc.Namespace = cont.ns
|
||||
rc.Labels = controllerLabels
|
||||
rc.Spec.Selector = controllerLabels
|
||||
rc.Spec.Template.Labels = controllerLabels
|
||||
rc.Spec.Replicas = 1
|
||||
|
||||
// These command line params are only recognized by v0.51 and above.
|
||||
testArgs := []string{
|
||||
// Pass namespace uid so the controller will tag resources with it.
|
||||
fmt.Sprintf("--cluster-uid=%v", cont.UID),
|
||||
// Tell the controller to delete all resources as it quits.
|
||||
fmt.Sprintf("--delete-all-on-quit=true"),
|
||||
// Don't use the default Service from kube-system.
|
||||
fmt.Sprintf("--default-backend-service=%v/%v", cont.svc.Namespace, cont.svc.Name),
|
||||
return "", fmt.Errorf("Unexpected number of lb cluster addons %v with label %v in kube-system namespace", len(existingRCs.Items), clusterAddonLBLabels)
|
||||
}
|
||||
rc := existingRCs.Items[0]
|
||||
commandPrefix := "--cluster-uid="
|
||||
for i, c := range rc.Spec.Template.Spec.Containers {
|
||||
if c.Name == lbContainerName {
|
||||
rc.Spec.Template.Spec.Containers[i].Args = append(c.Args, testArgs...)
|
||||
for _, arg := range rc.Spec.Template.Spec.Containers[i].Args {
|
||||
if strings.HasPrefix(arg, commandPrefix) {
|
||||
return strings.Replace(arg, commandPrefix, "", -1), nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
cont.rc = rc
|
||||
_, err = cont.c.ReplicationControllers(cont.ns).Create(cont.rc)
|
||||
return "", fmt.Errorf("Could not find cluster UID for L7 addon pod")
|
||||
}
|
||||
|
||||
func (cont *IngressController) init() {
|
||||
uid, err := cont.getL7AddonUID()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(framework.WaitForRCPodsRunning(cont.c, cont.ns, cont.rc.Name)).NotTo(HaveOccurred())
|
||||
cont.UID = uid
|
||||
// There's a name limit imposed by GCE. The controller will truncate.
|
||||
testName := fmt.Sprintf("k8s-fw-foo-app-X-%v--%v", cont.ns, cont.UID)
|
||||
if len(testName) > nameLenLimit {
|
||||
framework.Logf("WARNING: test name including cluster UID: %v is over the GCE limit of %v", testName, nameLenLimit)
|
||||
} else {
|
||||
framework.Logf("Deteced cluster UID %v", cont.UID)
|
||||
}
|
||||
}
|
||||
|
||||
func (cont *IngressController) Cleanup(del bool) error {
|
||||
@ -457,24 +430,14 @@ var _ = framework.KubeDescribe("GCE L7 LoadBalancer Controller [Feature:Ingress]
|
||||
f.BeforeEach()
|
||||
client = f.Client
|
||||
ns = f.Namespace.Name
|
||||
// Scaled down the existing Ingress controller so it doesn't interfere with the test.
|
||||
Expect(framework.ScaleRCByLabels(client, api.NamespaceSystem, clusterAddonLBLabels, 0)).NotTo(HaveOccurred())
|
||||
addonDir = filepath.Join(
|
||||
framework.TestContext.RepoRoot, "cluster", "addons", "cluster-loadbalancing", "glbc")
|
||||
|
||||
nsParts := strings.Split(ns, "-")
|
||||
ingController = &IngressController{
|
||||
ns: ns,
|
||||
// The UID in the namespace was generated by the master, so it's
|
||||
// global to the cluster.
|
||||
UID: nsParts[len(nsParts)-1],
|
||||
Project: framework.TestContext.CloudConfig.ProjectID,
|
||||
rcPath: filepath.Join(addonDir, "glbc-controller.yaml"),
|
||||
defaultSvcPath: filepath.Join(addonDir, "default-svc.yaml"),
|
||||
c: client,
|
||||
ns: ns,
|
||||
Project: framework.TestContext.CloudConfig.ProjectID,
|
||||
c: client,
|
||||
}
|
||||
ingController.create()
|
||||
framework.Logf("Finished creating ingress controller")
|
||||
ingController.init()
|
||||
// If we somehow get the same namespace uid as someone else in this
|
||||
// gce project, just back off.
|
||||
Expect(ingController.Cleanup(false)).NotTo(HaveOccurred())
|
||||
@ -509,9 +472,6 @@ var _ = framework.KubeDescribe("GCE L7 LoadBalancer Controller [Feature:Ingress]
|
||||
}
|
||||
return true, nil
|
||||
})
|
||||
// TODO: Remove this once issue #17802 is fixed
|
||||
Expect(framework.ScaleRCByLabels(client, ingController.rc.Namespace, ingController.rc.Labels, 0)).NotTo(HaveOccurred())
|
||||
|
||||
// If the controller failed to cleanup the test will fail, but we want to cleanup
|
||||
// resources before that.
|
||||
if pollErr != nil {
|
||||
@ -520,8 +480,6 @@ var _ = framework.KubeDescribe("GCE L7 LoadBalancer Controller [Feature:Ingress]
|
||||
}
|
||||
framework.Failf("Failed to cleanup GCE L7 resources.")
|
||||
}
|
||||
// Restore the cluster Addon.
|
||||
Expect(framework.ScaleRCByLabels(client, api.NamespaceSystem, clusterAddonLBLabels, 1)).NotTo(HaveOccurred())
|
||||
f.AfterEach()
|
||||
framework.Logf("Successfully verified GCE L7 loadbalancer via Ingress.")
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user