-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add target and tests to distribute the project
- Loading branch information
1 parent
c904bd9
commit e1b428b
Showing
31 changed files
with
5,355 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -87,9 +87,135 @@ var _ = Describe("kubebuilder", func() { | |
GenerateV4(kbc) | ||
Run(kbc) | ||
}) | ||
It("should generate a runnable project"+ | ||
" with the Installer", func() { | ||
GenerateV4(kbc) | ||
RunWithInstaller(kbc) | ||
}) | ||
}) | ||
}) | ||
|
||
// TODO: We need to clean up and refactor these tests. | ||
// Remove duplicates and ensure cohesion and encapsulation | ||
// For Example: Run should not have make generate and manifests it should be part of the build of the project | ||
// Also we can encapsulate the checks such as: checkManager, checkPrometheus, checkCertManager so that we can reuse them | ||
// when or not is required and create many scenarios. | ||
|
||
// RunWithInstaller runs a set of e2e tests for a scaffolded project defined by a TestContext. | ||
func RunWithInstaller(kbc *utils.TestContext) { | ||
var controllerPodName string | ||
var err error | ||
|
||
By("creating manager namespace") | ||
err = kbc.CreateManagerNamespace() | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
By("updating the go.mod") | ||
err = kbc.Tidy() | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
By("run make manifests") | ||
err = kbc.Make("manifests") | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
By("run make generate") | ||
err = kbc.Make("generate") | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
By("building the controller image") | ||
err = kbc.Make("docker-build", "IMG="+kbc.ImageName) | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
By("loading the controller docker image into the kind cluster") | ||
err = kbc.LoadImageToKindCluster() | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
By("building the installer") | ||
err = kbc.Make("build-installer", "IMG="+kbc.ImageName) | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
// NOTE: If you want to run the test against a GKE cluster, you will need to grant yourself permission. | ||
// Otherwise, you may see "... is forbidden: attempt to grant extra privileges" | ||
// $ kubectl create clusterrolebinding myname-cluster-admin-binding \ | ||
// --clusterrole=cluster-admin [email protected] | ||
// https://cloud.google.com/kubernetes-engine/docs/how-to/role-based-access-control | ||
By("deploying the controller-manager with the installer") | ||
|
||
_, err = kbc.Kubectl.Apply(true, "-f", "dist/install.yaml") | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
By("validating that the controller-manager pod is running as expected") | ||
verifyControllerUp := func() error { | ||
// Get pod name | ||
podOutput, err := kbc.Kubectl.Get( | ||
true, | ||
"pods", "-l", "control-plane=controller-manager", | ||
"-o", "go-template={{ range .items }}{{ if not .metadata.deletionTimestamp }}{{ .metadata.name }}"+ | ||
"{{ \"\\n\" }}{{ end }}{{ end }}") | ||
ExpectWithOffset(2, err).NotTo(HaveOccurred()) | ||
podNames := util.GetNonEmptyLines(podOutput) | ||
if len(podNames) != 1 { | ||
return fmt.Errorf("expect 1 controller pods running, but got %d", len(podNames)) | ||
} | ||
controllerPodName = podNames[0] | ||
ExpectWithOffset(2, controllerPodName).Should(ContainSubstring("controller-manager")) | ||
|
||
// Validate pod status | ||
status, err := kbc.Kubectl.Get( | ||
true, | ||
"pods", controllerPodName, "-o", "jsonpath={.status.phase}") | ||
ExpectWithOffset(2, err).NotTo(HaveOccurred()) | ||
if status != "Running" { | ||
return fmt.Errorf("controller pod in %s status", status) | ||
} | ||
return nil | ||
} | ||
defer func() { | ||
out, err := kbc.Kubectl.CommandInNamespace("describe", "all") | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
fmt.Fprintln(GinkgoWriter, out) | ||
}() | ||
EventuallyWithOffset(1, verifyControllerUp, time.Minute, time.Second).Should(Succeed()) | ||
|
||
By("granting permissions to access the metrics") | ||
_, err = kbc.Kubectl.Command( | ||
"create", "clusterrolebinding", fmt.Sprintf("metrics-%s", kbc.TestSuffix), | ||
fmt.Sprintf("--clusterrole=e2e-%s-metrics-reader", kbc.TestSuffix), | ||
fmt.Sprintf("--serviceaccount=%s:%s", kbc.Kubectl.Namespace, kbc.Kubectl.ServiceAccount)) | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
_ = curlMetrics(kbc) | ||
|
||
By("validating that cert-manager has provisioned the certificate Secret") | ||
EventuallyWithOffset(1, func() error { | ||
_, err := kbc.Kubectl.Get( | ||
true, | ||
"secrets", "webhook-server-cert") | ||
return err | ||
}, time.Minute, time.Second).Should(Succeed()) | ||
|
||
By("validating that the Prometheus manager has provisioned the Service") | ||
EventuallyWithOffset(1, func() error { | ||
_, err := kbc.Kubectl.Get( | ||
false, | ||
"Service", "prometheus-operator") | ||
return err | ||
}, time.Minute, time.Second).Should(Succeed()) | ||
|
||
By("validating that the ServiceMonitor for Prometheus is applied in the namespace") | ||
_, err = kbc.Kubectl.Get( | ||
true, | ||
"ServiceMonitor") | ||
ExpectWithOffset(1, err).NotTo(HaveOccurred()) | ||
|
||
By("validating that the created resource object gets reconciled in the controller") | ||
metricsOutput := curlMetrics(kbc) | ||
ExpectWithOffset(1, metricsOutput).To(ContainSubstring(fmt.Sprintf( | ||
`controller_runtime_reconcile_total{controller="%s",result="success"} 1`, | ||
strings.ToLower(kbc.Kind), | ||
))) | ||
} | ||
|
||
// Run runs a set of e2e tests for a scaffolded project defined by a TestContext. | ||
func Run(kbc *utils.TestContext) { | ||
var controllerPodName string | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 6 additions & 0 deletions
6
testdata/project-v4-multigroup-with-deploy-image/config/manager/kustomization.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,8 @@ | ||
resources: | ||
- manager.yaml | ||
apiVersion: kustomize.config.k8s.io/v1beta1 | ||
kind: Kustomization | ||
images: | ||
- name: controller | ||
newName: controller | ||
newTag: latest |
Oops, something went wrong.