gitextract_xbddqqqb/ ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.md │ │ └── enhancement.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── release.yaml │ ├── renovate.json5 │ └── workflows/ │ ├── e2e.yaml │ ├── images.yaml │ ├── release-notes.yaml │ ├── renovate.yaml │ └── verify.yaml ├── .gitignore ├── .golangci.yaml ├── .run/ │ ├── experiment (kind).run.xml │ ├── shard (kind).run.xml │ ├── sharder (kind).run.xml │ └── webhosting-operator (kind).run.xml ├── LICENSE ├── Makefile ├── README.md ├── cmd/ │ ├── checksum-controller/ │ │ ├── main.go │ │ └── reconciler.go │ └── sharder/ │ ├── app/ │ │ ├── app.go │ │ └── options.go │ └── main.go ├── config/ │ ├── README.md │ ├── certificate/ │ │ ├── certificate.yaml │ │ ├── issuer.yaml │ │ └── kustomization.yaml │ ├── crds/ │ │ ├── kustomization.yaml │ │ ├── namespace.yaml │ │ └── sharding.timebertt.dev_controllerrings.yaml │ ├── default/ │ │ └── kustomization.yaml │ ├── monitoring/ │ │ ├── kustomization.yaml │ │ ├── prometheus_rbac.yaml │ │ └── servicemonitor.yaml │ ├── rbac/ │ │ ├── kustomization.yaml │ │ ├── leader_election.yaml │ │ ├── metrics_auth.yaml │ │ ├── pprof_reader.yaml │ │ ├── role.yaml │ │ ├── rolebinding.yaml │ │ └── serviceaccount.yaml │ └── sharder/ │ ├── config.yaml │ ├── deployment.yaml │ ├── kustomization.yaml │ ├── poddisruptionbudget.yaml │ └── service.yaml ├── docs/ │ ├── README.md │ ├── design.md │ ├── development.md │ ├── evaluation.md │ ├── getting-started.md │ ├── implement-sharding.md │ ├── installation.md │ └── monitoring.md ├── go.mod ├── go.sum ├── go.work ├── go.work.sum ├── hack/ │ ├── boilerplate.go.txt │ ├── ci-common.sh │ ├── ci-e2e-kind.sh │ ├── config/ │ │ ├── README.md │ │ ├── cert-manager/ │ │ │ ├── kustomization.yaml │ │ │ ├── patch-mutatingwebhook.yaml │ │ │ ├── patch-validatingwebhook.yaml │ │ │ └── resources/ │ │ │ ├── cluster-issuer.yaml │ │ │ └── kustomization.yaml │ │ ├── certificates/ │ │ │ └── host/ │ │ │ ├── config.json │ │ │ ├── generate.sh │ │ │ ├── kustomization.yaml │ │ │ ├── webhook-ca-key.pem │ │ │ ├── webhook-ca.json │ │ │ ├── webhook-ca.pem │ │ │ ├── webhook-server-key.pem │ │ │ ├── webhook-server.json │ │ │ └── webhook-server.pem │ │ ├── checksum-controller/ │ │ │ ├── controller/ │ │ │ │ ├── deployment.yaml │ │ │ │ ├── kustomization.yaml │ │ │ │ ├── rbac.yaml │ │ │ │ └── serviceaccount.yaml │ │ │ └── controllerring/ │ │ │ ├── controllerring.yaml │ │ │ ├── kustomization.yaml │ │ │ └── sharder_rbac.yaml │ │ ├── external-dns/ │ │ │ ├── kustomization.yaml │ │ │ ├── namespace.yaml │ │ │ └── patch-deployment.yaml │ │ ├── ingress-nginx/ │ │ │ ├── default/ │ │ │ │ ├── kustomization.yaml │ │ │ │ ├── patch_controller_resources.yaml │ │ │ │ └── patch_default_ingress_class.yaml │ │ │ ├── kind/ │ │ │ │ ├── kustomization.yaml │ │ │ │ └── patch_service_nodeport.yaml │ │ │ └── shoot/ │ │ │ ├── certificate.yaml │ │ │ ├── kustomization.yaml │ │ │ └── patch_service.yaml │ │ ├── kind-config.yaml │ │ ├── kyverno/ │ │ │ └── kustomization.yaml │ │ ├── monitoring/ │ │ │ ├── crds/ │ │ │ │ ├── 0alertmanagerConfigCustomResourceDefinition.yaml │ │ │ │ ├── 0alertmanagerCustomResourceDefinition.yaml │ │ │ │ ├── 0podmonitorCustomResourceDefinition.yaml │ │ │ │ ├── 0probeCustomResourceDefinition.yaml │ │ │ │ ├── 0prometheusCustomResourceDefinition.yaml │ │ │ │ ├── 0prometheusagentCustomResourceDefinition.yaml │ │ │ │ ├── 0prometheusruleCustomResourceDefinition.yaml │ │ │ │ ├── 0scrapeconfigCustomResourceDefinition.yaml │ │ │ │ ├── 0servicemonitorCustomResourceDefinition.yaml │ │ │ │ ├── 0thanosrulerCustomResourceDefinition.yaml │ │ │ │ ├── README.md │ │ │ │ └── kustomization.yaml │ │ │ ├── default/ │ │ │ │ ├── dashboards/ │ │ │ │ │ ├── client-go.json │ │ │ │ │ ├── controller-details.json │ │ │ │ │ └── controller-runtime.json │ │ │ │ ├── ensure-admin-password.sh │ │ │ │ ├── grafana_ingress.yaml │ │ │ │ ├── kustomization.yaml │ │ │ │ ├── namespace.yaml │ │ │ │ ├── patch_grafana_admin.yaml │ │ │ │ ├── patch_grafana_networkpolicy.yaml │ │ │ │ ├── patch_kubelet_metrics.yaml │ │ │ │ ├── patch_kubestatemetrics.yaml │ │ │ │ ├── patch_kubestatemetrics_servicemonitor.yaml │ │ │ │ ├── patch_prometheus.yaml │ │ │ │ └── rbac-proxy_clusterrole.yaml │ │ │ ├── grafana-sidecar/ │ │ │ │ ├── dashboards-sidecar.yaml │ │ │ │ ├── kustomization.yaml │ │ │ │ ├── patch_grafana_sidecar.yaml │ │ │ │ ├── sidecar_clusterrole.yaml │ │ │ │ └── sidecar_clusterrolebinding.yaml │ │ │ ├── kube-prometheus/ │ │ │ │ ├── README.md │ │ │ │ ├── blackboxExporter-clusterRole.yaml │ │ │ │ ├── blackboxExporter-clusterRoleBinding.yaml │ │ │ │ ├── blackboxExporter-configuration.yaml │ │ │ │ ├── blackboxExporter-deployment.yaml │ │ │ │ ├── blackboxExporter-networkPolicy.yaml │ │ │ │ ├── blackboxExporter-service.yaml │ │ │ │ ├── blackboxExporter-serviceAccount.yaml │ │ │ │ ├── blackboxExporter-serviceMonitor.yaml │ │ │ │ ├── grafana-config.yaml │ │ │ │ ├── grafana-dashboardDatasources.yaml │ │ │ │ ├── grafana-dashboardDefinitions.yaml │ │ │ │ ├── grafana-dashboardSources.yaml │ │ │ │ ├── grafana-deployment.yaml │ │ │ │ ├── grafana-networkPolicy.yaml │ │ │ │ ├── grafana-prometheusRule.yaml │ │ │ │ ├── grafana-service.yaml │ │ │ │ ├── grafana-serviceAccount.yaml │ │ │ │ ├── grafana-serviceMonitor.yaml │ │ │ │ ├── kubePrometheus-prometheusRule.yaml │ │ │ │ ├── kubeStateMetrics-clusterRole.yaml │ │ │ │ ├── kubeStateMetrics-clusterRoleBinding.yaml │ │ │ │ ├── kubeStateMetrics-deployment.yaml │ │ │ │ ├── kubeStateMetrics-networkPolicy.yaml │ │ │ │ ├── kubeStateMetrics-prometheusRule.yaml │ │ │ │ ├── kubeStateMetrics-service.yaml │ │ │ │ ├── kubeStateMetrics-serviceAccount.yaml │ │ │ │ ├── kubeStateMetrics-serviceMonitor.yaml │ │ │ │ ├── kubernetesControlPlane-prometheusRule.yaml │ │ │ │ ├── kubernetesControlPlane-serviceMonitorApiserver.yaml │ │ │ │ ├── kubernetesControlPlane-serviceMonitorCoreDNS.yaml │ │ │ │ ├── kubernetesControlPlane-serviceMonitorKubeControllerManager.yaml │ │ │ │ ├── kubernetesControlPlane-serviceMonitorKubeScheduler.yaml │ │ │ │ ├── kubernetesControlPlane-serviceMonitorKubelet.yaml │ │ │ │ ├── kustomization.yaml │ │ │ │ ├── nodeExporter-clusterRole.yaml │ │ │ │ ├── nodeExporter-clusterRoleBinding.yaml │ │ │ │ ├── nodeExporter-daemonset.yaml │ │ │ │ ├── nodeExporter-networkPolicy.yaml │ │ │ │ ├── nodeExporter-prometheusRule.yaml │ │ │ │ ├── nodeExporter-service.yaml │ │ │ │ ├── nodeExporter-serviceAccount.yaml │ │ │ │ ├── nodeExporter-serviceMonitor.yaml │ │ │ │ ├── prometheus-clusterRole.yaml │ │ │ │ ├── prometheus-clusterRoleBinding.yaml │ │ │ │ ├── prometheus-networkPolicy.yaml │ │ │ │ ├── prometheus-prometheus.yaml │ │ │ │ ├── prometheus-prometheusRule.yaml │ │ │ │ ├── prometheus-roleBindingConfig.yaml │ │ │ │ ├── prometheus-roleBindingSpecificNamespaces.yaml │ │ │ │ ├── prometheus-roleConfig.yaml │ │ │ │ ├── prometheus-roleSpecificNamespaces.yaml │ │ │ │ ├── prometheus-service.yaml │ │ │ │ ├── prometheus-serviceAccount.yaml │ │ │ │ ├── prometheus-serviceMonitor.yaml │ │ │ │ ├── prometheusAdapter-clusterRole.yaml │ │ │ │ ├── prometheusAdapter-clusterRoleAggregatedMetricsReader.yaml │ │ │ │ ├── prometheusAdapter-clusterRoleBinding.yaml │ │ │ │ ├── prometheusAdapter-clusterRoleBindingDelegator.yaml │ │ │ │ ├── prometheusAdapter-clusterRoleServerResources.yaml │ │ │ │ ├── prometheusAdapter-configMap.yaml │ │ │ │ ├── prometheusAdapter-deployment.yaml │ │ │ │ ├── prometheusAdapter-networkPolicy.yaml │ │ │ │ ├── prometheusAdapter-podDisruptionBudget.yaml │ │ │ │ ├── prometheusAdapter-roleBindingAuthReader.yaml │ │ │ │ ├── prometheusAdapter-service.yaml │ │ │ │ ├── prometheusAdapter-serviceAccount.yaml │ │ │ │ ├── prometheusAdapter-serviceMonitor.yaml │ │ │ │ ├── prometheusOperator-clusterRole.yaml │ │ │ │ ├── prometheusOperator-clusterRoleBinding.yaml │ │ │ │ ├── prometheusOperator-deployment.yaml │ │ │ │ ├── prometheusOperator-networkPolicy.yaml │ │ │ │ ├── prometheusOperator-prometheusRule.yaml │ │ │ │ ├── prometheusOperator-service.yaml │ │ │ │ ├── prometheusOperator-serviceAccount.yaml │ │ │ │ └── prometheusOperator-serviceMonitor.yaml │ │ │ ├── shoot/ │ │ │ │ ├── kustomization.yaml │ │ │ │ ├── patch_prometheus.yaml │ │ │ │ └── storageclass.yaml │ │ │ └── update.sh │ │ ├── policy/ │ │ │ ├── ci/ │ │ │ │ ├── kustomization.yaml │ │ │ │ └── no-requests.yaml │ │ │ ├── controlplane/ │ │ │ │ ├── etcd-main.yaml │ │ │ │ ├── kube-apiserver.yaml │ │ │ │ ├── kube-controller-manager.yaml │ │ │ │ └── kustomization.yaml │ │ │ └── shoot/ │ │ │ ├── kustomization.yaml │ │ │ └── sharder-scheduling.yaml │ │ ├── profiling/ │ │ │ ├── ensure-admin-password.sh │ │ │ ├── kustomization.yaml │ │ │ ├── parca_config.yaml │ │ │ ├── parca_ingress.yaml │ │ │ ├── parca_pvc.yaml │ │ │ ├── patch_deployment_pvc.yaml │ │ │ └── rbac_sharder.yaml │ │ ├── sharder/ │ │ │ ├── devel/ │ │ │ │ └── kustomization.yaml │ │ │ └── host/ │ │ │ └── config.yaml │ │ ├── shoot.yaml │ │ └── skaffold.yaml │ ├── prepare-image-metadata.sh │ ├── test-e2e.env │ ├── test-e2e.sh │ ├── test-integration.env │ ├── test-integration.sh │ ├── test.sh │ ├── tools.go │ ├── tools.mk │ ├── update-codegen.sh │ └── vgopath-setup.sh ├── pkg/ │ ├── apis/ │ │ ├── config/ │ │ │ ├── doc.go │ │ │ └── v1alpha1/ │ │ │ ├── defaults.go │ │ │ ├── defaults_test.go │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── types.go │ │ │ ├── v1alpha1_suite_test.go │ │ │ ├── zz_generated.deepcopy.go │ │ │ └── zz_generated.defaults.go │ │ └── sharding/ │ │ ├── doc.go │ │ └── v1alpha1/ │ │ ├── constants.go │ │ ├── constants_test.go │ │ ├── doc.go │ │ ├── register.go │ │ ├── types_controllerring.go │ │ ├── types_controllerring_test.go │ │ ├── v1alpha1_suite_test.go │ │ └── zz_generated.deepcopy.go │ ├── controller/ │ │ ├── add.go │ │ ├── controllerring/ │ │ │ ├── add.go │ │ │ ├── add_test.go │ │ │ ├── controllerring_suite_test.go │ │ │ ├── reconciler.go │ │ │ └── reconciler_test.go │ │ ├── sharder/ │ │ │ ├── add.go │ │ │ ├── reconciler.go │ │ │ ├── reconciler_test.go │ │ │ └── sharder_suite_test.go │ │ └── shardlease/ │ │ ├── add.go │ │ ├── add_test.go │ │ ├── reconciler.go │ │ └── shardlease_suite_test.go │ ├── metrics/ │ │ ├── add.go │ │ ├── controllerring.go │ │ ├── exporter/ │ │ │ └── exporter.go │ │ ├── operations.go │ │ └── shard.go │ ├── shard/ │ │ ├── controller/ │ │ │ ├── builder.go │ │ │ ├── builder_test.go │ │ │ ├── controller_suite_test.go │ │ │ ├── predicate.go │ │ │ ├── predicate_test.go │ │ │ ├── reconciler.go │ │ │ └── reconciler_test.go │ │ └── lease/ │ │ ├── lease.go │ │ ├── lease_suite_test.go │ │ └── lease_test.go │ ├── sharding/ │ │ ├── consistenthash/ │ │ │ ├── benchmark_test.go │ │ │ ├── consistenthash_suite_test.go │ │ │ ├── ring.go │ │ │ └── ring_test.go │ │ ├── handler/ │ │ │ ├── controllerring.go │ │ │ ├── controllerring_test.go │ │ │ ├── handler_suite_test.go │ │ │ ├── lease.go │ │ │ └── lease_test.go │ │ ├── key/ │ │ │ ├── key.go │ │ │ ├── key_suite_test.go │ │ │ └── key_test.go │ │ ├── leases/ │ │ │ ├── leases_suite_test.go │ │ │ ├── shards.go │ │ │ ├── shards_test.go │ │ │ ├── state.go │ │ │ ├── state_test.go │ │ │ ├── times.go │ │ │ └── times_test.go │ │ ├── predicate/ │ │ │ ├── controllerring.go │ │ │ ├── controllerring_test.go │ │ │ ├── lease.go │ │ │ ├── lease_test.go │ │ │ └── predicate_suite_test.go │ │ └── ring/ │ │ ├── ring.go │ │ ├── ring_suite_test.go │ │ └── ring_test.go │ ├── utils/ │ │ ├── client/ │ │ │ ├── client_suite_test.go │ │ │ ├── options.go │ │ │ ├── options_test.go │ │ │ └── scheme.go │ │ ├── errors/ │ │ │ ├── errors_suite_test.go │ │ │ ├── multi.go │ │ │ └── multi_test.go │ │ ├── healthz/ │ │ │ ├── cache.go │ │ │ ├── cache_test.go │ │ │ └── healthz_suite_test.go │ │ ├── pager/ │ │ │ ├── pager.go │ │ │ ├── pager_suite_test.go │ │ │ └── pager_test.go │ │ ├── routes/ │ │ │ └── profiling.go │ │ ├── strings.go │ │ ├── strings_test.go │ │ ├── test/ │ │ │ ├── envtest.go │ │ │ ├── matchers/ │ │ │ │ ├── condition.go │ │ │ │ ├── errors.go │ │ │ │ ├── matchers.go │ │ │ │ └── object.go │ │ │ ├── object.go │ │ │ └── paths.go │ │ └── utils_suite_test.go │ └── webhook/ │ ├── add.go │ └── sharder/ │ ├── add.go │ ├── add_test.go │ ├── handler.go │ ├── handler_test.go │ ├── metrics.go │ └── sharder_suite_test.go ├── test/ │ ├── e2e/ │ │ ├── checksum_controller_test.go │ │ └── e2e_suite_test.go │ └── integration/ │ ├── shard/ │ │ ├── controller/ │ │ │ ├── controller_suite_test.go │ │ │ ├── controller_test.go │ │ │ └── reconciler.go │ │ └── lease/ │ │ ├── lease_suite_test.go │ │ └── lease_test.go │ └── sharder/ │ ├── controller/ │ │ ├── controllerring/ │ │ │ ├── controllerring_suite_test.go │ │ │ └── controllerring_test.go │ │ ├── sharder/ │ │ │ ├── sharder_suite_test.go │ │ │ └── sharder_test.go │ │ └── shardlease/ │ │ ├── shardlease_suite_test.go │ │ └── shardlease_test.go │ └── webhook/ │ └── sharder/ │ ├── sharder_suite_test.go │ └── sharder_test.go └── webhosting-operator/ ├── PROJECT ├── README.md ├── cmd/ │ ├── experiment/ │ │ └── main.go │ ├── measure/ │ │ ├── main.go │ │ └── test.yaml │ ├── samples-generator/ │ │ └── main.go │ └── webhosting-operator/ │ └── main.go ├── config/ │ ├── experiment/ │ │ ├── base/ │ │ │ ├── job.yaml │ │ │ ├── kustomization.yaml │ │ │ ├── namespace.yaml │ │ │ ├── prometheus_rbac.yaml │ │ │ ├── rbac.yaml │ │ │ ├── service.yaml │ │ │ └── servicemonitor.yaml │ │ ├── basic/ │ │ │ └── kustomization.yaml │ │ ├── chaos/ │ │ │ └── kustomization.yaml │ │ ├── rolling-update/ │ │ │ └── kustomization.yaml │ │ └── scale-out/ │ │ └── kustomization.yaml │ ├── manager/ │ │ ├── base/ │ │ │ ├── kustomization.yaml │ │ │ ├── manager.yaml │ │ │ ├── metrics_auth.yaml │ │ │ ├── namespace.yaml │ │ │ └── service.yaml │ │ ├── controllerring/ │ │ │ ├── controllerring.yaml │ │ │ ├── kustomization.yaml │ │ │ ├── manager_patch.yaml │ │ │ └── sharder_rbac.yaml │ │ ├── crds/ │ │ │ ├── kustomization.yaml │ │ │ ├── kustomizeconfig.yaml │ │ │ ├── webhosting.timebertt.dev_themes.yaml │ │ │ └── webhosting.timebertt.dev_websites.yaml │ │ ├── devel/ │ │ │ └── kustomization.yaml │ │ ├── overlays/ │ │ │ ├── debug/ │ │ │ │ ├── kustomization.yaml │ │ │ │ └── manager_debug_patch.yaml │ │ │ ├── default/ │ │ │ │ └── kustomization.yaml │ │ │ ├── devel/ │ │ │ │ └── kustomization.yaml │ │ │ ├── non-sharded/ │ │ │ │ ├── kustomization.yaml │ │ │ │ └── manager_patch.yaml │ │ │ ├── non-sharded-devel/ │ │ │ │ └── kustomization.yaml │ │ │ └── shoot/ │ │ │ ├── default/ │ │ │ │ └── kustomization.yaml │ │ │ ├── devel/ │ │ │ │ └── kustomization.yaml │ │ │ ├── non-sharded/ │ │ │ │ └── kustomization.yaml │ │ │ └── non-sharded-devel/ │ │ │ └── kustomization.yaml │ │ ├── rbac/ │ │ │ ├── kustomization.yaml │ │ │ ├── leader_election_role.yaml │ │ │ ├── leader_election_role_binding.yaml │ │ │ ├── parca_rbac.yaml │ │ │ ├── role.yaml │ │ │ ├── role_binding.yaml │ │ │ ├── service_account.yaml │ │ │ ├── theme_editor_role.yaml │ │ │ ├── theme_viewer_role.yaml │ │ │ ├── website_editor_role.yaml │ │ │ └── website_viewer_role.yaml │ │ └── with-dns/ │ │ ├── config.yaml │ │ ├── kustomization.yaml │ │ └── manager_patch.yaml │ ├── monitoring/ │ │ ├── default/ │ │ │ ├── dashboards/ │ │ │ │ ├── experiments.json │ │ │ │ ├── sharding.json │ │ │ │ └── webhosting.json │ │ │ └── kustomization.yaml │ │ └── webhosting-operator/ │ │ ├── kustomization.yaml │ │ ├── prometheus_rbac.yaml │ │ ├── prometheusrule.yaml │ │ └── servicemonitor.yaml │ ├── policy/ │ │ ├── experiment-scheduling.yaml │ │ ├── guaranteed-resources.yaml │ │ ├── kustomization.yaml │ │ ├── scale-up-worker-experiment.yaml │ │ └── webhosting-operator-scheduling.yaml │ └── samples/ │ ├── kustomization.yaml │ ├── project_namespace.yaml │ ├── theme_exciting.yaml │ ├── theme_lame.yaml │ ├── website_kubecon.yaml │ ├── website_library.yaml │ └── website_museum.yaml ├── go.mod ├── go.sum ├── pkg/ │ ├── apis/ │ │ ├── config/ │ │ │ ├── doc.go │ │ │ └── v1alpha1/ │ │ │ ├── defaults.go │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── types.go │ │ │ ├── zz_generated.deepcopy.go │ │ │ └── zz_generated.defaults.go │ │ └── webhosting/ │ │ ├── doc.go │ │ └── v1alpha1/ │ │ ├── constants.go │ │ ├── doc.go │ │ ├── register.go │ │ ├── types_theme.go │ │ ├── types_website.go │ │ └── zz_generated.deepcopy.go │ ├── controllers/ │ │ └── webhosting/ │ │ ├── suite_test.go │ │ ├── templates/ │ │ │ ├── index.go │ │ │ ├── index.tmpl │ │ │ ├── index_test.go │ │ │ ├── internal/ │ │ │ │ └── examples.go │ │ │ ├── nginx.conf.tmpl │ │ │ ├── nginx.go │ │ │ ├── nginx_test.go │ │ │ ├── templates_suite_test.go │ │ │ └── testserver/ │ │ │ └── server.go │ │ └── website_controller.go │ ├── experiment/ │ │ ├── generator/ │ │ │ ├── options.go │ │ │ ├── project.go │ │ │ ├── reconciler.go │ │ │ ├── theme.go │ │ │ ├── utils.go │ │ │ └── website.go │ │ ├── scenario/ │ │ │ ├── all/ │ │ │ │ └── all.go │ │ │ ├── base/ │ │ │ │ └── base.go │ │ │ ├── basic/ │ │ │ │ └── basic.go │ │ │ ├── chaos/ │ │ │ │ └── chaos.go │ │ │ ├── rolling-update/ │ │ │ │ └── rolling_update.go │ │ │ └── scale-out/ │ │ │ └── scale_out.go │ │ ├── scenario.go │ │ └── tracker/ │ │ ├── tracker.go │ │ └── website.go │ ├── metrics/ │ │ ├── add.go │ │ ├── theme.go │ │ └── website.go │ └── utils/ │ ├── kubernetes.go │ └── utils.go └── test/ └── e2e/ ├── e2e_suite_test.go └── webhosting_operator_test.go