├── .clomonitor.yml ├── .codecov.yml ├── .gitbook.yaml ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md ├── dependabot.yml └── workflows │ ├── build.yaml │ ├── e2e.yaml │ ├── helm.yaml │ ├── push-ld.yml │ ├── release.yml │ └── scan.yml ├── .gitignore ├── .goreleaser.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DCO ├── Dockerfile ├── Dockerfile.loadtester ├── GOVERNANCE.md ├── LICENSE ├── MAINTAINERS ├── Makefile ├── README.md ├── artifacts ├── examples │ ├── appmesh-abtest.yaml │ ├── appmesh-canary.yaml │ ├── istio-abtest.yaml │ ├── istio-canary.yaml │ ├── kuma-canary.yaml │ ├── linkerd-canary-steps.yaml │ ├── linkerd-canary.yaml │ ├── osm-canary-steps.yaml │ └── osm-canary.yaml └── flagger │ ├── account.yaml │ ├── crd.yaml │ └── deployment.yaml ├── charts ├── flagger │ ├── .helmignore │ ├── Chart.yaml │ ├── LICENSE │ ├── README.md │ ├── crds │ │ └── crd.yaml │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── account.yaml │ │ ├── authorizationpolicy.yaml │ │ ├── crd.yaml │ │ ├── deployment.yaml │ │ ├── pdb.yaml │ │ ├── podmonitor.yaml │ │ ├── prometheus.yaml │ │ ├── psp.yaml │ │ ├── rbac.yaml │ │ ├── service.yaml │ │ └── servicemonitor.yaml │ └── values.yaml ├── grafana │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── dashboards │ │ ├── appmesh.json │ │ ├── envoy.json │ │ └── istio.json │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── dashboards-cfg.yaml │ │ ├── datasources-cfg.yaml │ │ ├── deployment.yaml │ │ ├── providers-cfg.yaml │ │ └── service.yaml │ └── values.yaml ├── loadtester │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── appmesh.yaml │ │ ├── deployment.yaml │ │ ├── istio-gw.yaml │ │ ├── istio-vs.yaml │ │ ├── pdb.yaml │ │ ├── rbac.yaml │ │ ├── service.yaml │ │ └── virtual-node.yaml │ └── values.yaml └── podinfo │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── canary.yaml │ ├── configmap.yaml │ ├── deployment.yaml │ ├── hpa.yaml │ ├── service.yaml │ └── tests │ │ └── jwt.yaml │ └── values.yaml ├── cmd ├── flagger │ └── main.go └── loadtester │ └── main.go ├── docs ├── diagrams │ ├── flagger-abtest-steps.png │ ├── flagger-apisix-overview.png │ ├── flagger-bluegreen-steps.png │ ├── flagger-canary-hpa.png │ ├── flagger-canary-overview.png │ ├── flagger-canary-steps.png │ ├── flagger-canary-traffic-mirroring.png │ ├── flagger-contour-overview.png │ ├── flagger-flux-gitops.png │ ├── flagger-gatewayapi-canary.png │ ├── flagger-gitops-aws.png │ ├── flagger-gitops-contour.png │ ├── flagger-gitops-istio.png │ ├── flagger-gke-istio.png │ ├── flagger-gloo-overview.png │ ├── flagger-kuma-canary.png │ ├── flagger-load-testing.png │ ├── flagger-nginx-linkerd.png │ ├── flagger-nginx-overview.png │ ├── flagger-osm-traffic-split.png │ ├── flagger-overview.png │ ├── flagger-skipper-overview.png │ ├── flagger-traefik-overview.png │ └── istio-cert-manager-gke.png ├── gitbook │ ├── README.md │ ├── SUMMARY.md │ ├── dev │ │ ├── dev-guide.md │ │ ├── release-guide.md │ │ └── upgrade-guide.md │ ├── faq.md │ ├── install │ │ ├── flagger-install-on-alibaba-servicemesh.md │ │ ├── flagger-install-on-eks-appmesh.md │ │ ├── flagger-install-on-google-cloud.md │ │ ├── flagger-install-on-kubernetes.md │ │ └── flagger-install-with-flux.md │ ├── tutorials │ │ ├── apisix-progressive-delivery.md │ │ ├── appmesh-progressive-delivery.md │ │ ├── canary-helm-gitops.md │ │ ├── contour-progressive-delivery.md │ │ ├── gatewayapi-progressive-delivery.md │ │ ├── gloo-progressive-delivery.md │ │ ├── istio-ab-testing.md │ │ ├── istio-progressive-delivery.md │ │ ├── keda-scaledobject.md │ │ ├── knative-progressive-delivery.md │ │ ├── kubernetes-blue-green.md │ │ ├── kuma-progressive-delivery.md │ │ ├── linkerd-progressive-delivery.md │ │ ├── nginx-progressive-delivery.md │ │ ├── osm-progressive-delivery.md │ │ ├── prometheus-operator.md │ │ ├── skipper-progressive-delivery.md │ │ ├── traefik-progressive-delivery.md │ │ └── zero-downtime-deployments.md │ └── usage │ │ ├── alerting.md │ │ ├── deployment-strategies.md │ │ ├── how-it-works.md │ │ ├── metrics.md │ │ ├── monitoring.md │ │ └── webhooks.md ├── logo │ ├── flagger-icon-black.svg │ ├── flagger-icon-black@2x.png │ ├── flagger-icon-color.svg │ ├── flagger-icon-color@2x.png │ ├── flagger-icon-white.svg │ ├── flagger-icon-white@2x.png │ ├── flagger-icon.png │ ├── flagger-stacked-black.svg │ ├── flagger-stacked-black@2x.png │ ├── flagger-stacked-color.svg │ ├── flagger-stacked-color@2x.png │ ├── flagger-stacked-white.svg │ ├── flagger-stacked-white@2x.png │ ├── flagger-vertical-black.svg │ ├── flagger-vertical-black@2x.png │ ├── flagger-vertical-color.svg │ ├── flagger-vertical-color@2x.png │ ├── flagger-vertical-white.svg │ └── flagger-vertical-white@2x.png └── screens │ ├── demo-backend-dashboard.png │ ├── demo-frontend-dashboard.png │ ├── demo-frontend-jaeger.png │ ├── demo-frontend.png │ ├── flagger-grafana-appmesh.png │ ├── flagger-grafana-dashboard.png │ ├── flagger-ms-teams-failed.png │ ├── flagger-ms-teams-notifications.png │ ├── grafana-canary-analysis.png │ ├── slack-canary-failed.png │ └── slack-canary-notifications.png ├── go.mod ├── go.sum ├── hack ├── boilerplate.go.txt ├── update-codegen.sh ├── verify-codegen.sh └── verify-crd.sh ├── kustomize ├── README.md ├── apisix │ ├── kustomization.yaml │ ├── namespace.yaml │ └── patch.yaml ├── appmesh │ ├── kustomization.yaml │ └── patch.yaml ├── base │ ├── flagger │ │ ├── account.yaml │ │ ├── crd.yaml │ │ ├── deployment.yaml │ │ ├── kustomization.yaml │ │ └── rbac.yaml │ └── prometheus │ │ ├── account.yaml │ │ ├── deployment.yaml │ │ ├── kustomization.yaml │ │ ├── prometheus.yml │ │ ├── rbac.yaml │ │ └── service.yaml ├── contour │ ├── kustomization.yaml │ ├── namespace.yaml │ └── patch.yaml ├── gatewayapi │ ├── kustomization.yaml │ ├── namespace.yaml │ └── patch.yaml ├── istio │ ├── kustomization.yaml │ └── patch.yaml ├── knative │ ├── kustomization.yaml │ ├── namespace.yaml │ └── patch.yaml ├── kubernetes │ ├── kustomization.yaml │ ├── namespace.yaml │ └── patch.yaml ├── kuma │ ├── kustomization.yaml │ ├── mesh.yaml │ └── patch.yaml ├── linkerd │ ├── authorizationpolicy.yaml │ ├── kustomization.yaml │ ├── namespace.yaml │ └── patch.yaml ├── osm │ ├── kustomization.yaml │ └── patch.yaml ├── podinfo │ ├── deployment.yaml │ ├── hpa.yaml │ └── kustomization.yaml └── tester │ ├── deployment.yaml │ ├── kustomization.yaml │ └── service.yaml ├── pkg ├── apis │ ├── apisix │ │ ├── register.go │ │ └── v2 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ ├── appmesh │ │ ├── register.go │ │ ├── v1beta1 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ │ └── v1beta2 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── types.go │ │ │ ├── virtualnode_types.go │ │ │ ├── virtualrouter_types.go │ │ │ ├── virtualservice_types.go │ │ │ └── zz_generated.deepcopy.go │ ├── flagger │ │ ├── register.go │ │ └── v1beta1 │ │ │ ├── alert.go │ │ │ ├── canary.go │ │ │ ├── doc.go │ │ │ ├── metric.go │ │ │ ├── provider.go │ │ │ ├── register.go │ │ │ ├── status.go │ │ │ └── zz_generated.deepcopy.go │ ├── gatewayapi │ │ ├── register.go │ │ ├── v1 │ │ │ ├── doc.go │ │ │ ├── httproute_types.go │ │ │ ├── object_reference_types.go │ │ │ ├── register.go │ │ │ ├── shared_types.go │ │ │ └── zz_generated.deepcopy.go │ │ └── v1beta1 │ │ │ ├── doc.go │ │ │ ├── httproute_types.go │ │ │ ├── object_reference_types.go │ │ │ ├── register.go │ │ │ ├── shared_types.go │ │ │ └── zz_generated.deepcopy.go │ ├── gloo │ │ ├── register.go │ │ └── v1 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ ├── gloogateway │ │ ├── register.go │ │ └── v1 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ ├── istio │ │ ├── common │ │ │ └── v1alpha1 │ │ │ │ └── string.go │ │ ├── register.go │ │ └── v1beta1 │ │ │ ├── destination_rule.go │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── virtual_service.go │ │ │ └── zz_generated.deepcopy.go │ ├── keda │ │ ├── register.go │ │ └── v1alpha1 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── scaledobject.go │ │ │ └── zz_generated.deepcopy.go │ ├── kuma │ │ ├── register.go │ │ └── v1alpha1 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── trafficroute.go │ │ │ └── zz_generated.deepcopy.go │ ├── projectcontour │ │ ├── register.go │ │ └── v1 │ │ │ ├── detailedconditions.go │ │ │ ├── doc.go │ │ │ ├── httpproxy.go │ │ │ ├── register.go │ │ │ └── zz_generated.deepcopy.go │ ├── smi │ │ ├── register.go │ │ ├── v1alpha1 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── traffic_split.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── v1alpha2 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── traffic_split.go │ │ │ └── zz_generated.deepcopy.go │ │ └── v1alpha3 │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── traffic_split.go │ │ │ └── zz_generated.deepcopy.go │ └── traefik │ │ ├── register.go │ │ └── v1alpha1 │ │ ├── doc.go │ │ ├── register.go │ │ ├── types.go │ │ └── zz_generated.deepcopy.go ├── canary │ ├── config_tracker.go │ ├── config_tracker_test.go │ ├── controller.go │ ├── daemonset_controller.go │ ├── daemonset_controller_test.go │ ├── daemonset_fixture_test.go │ ├── daemonset_ready.go │ ├── daemonset_ready_test.go │ ├── daemonset_status.go │ ├── daemonset_status_test.go │ ├── deployment_controller.go │ ├── deployment_controller_test.go │ ├── deployment_fixture_test.go │ ├── deployment_ready.go │ ├── deployment_ready_test.go │ ├── deployment_status.go │ ├── deployment_status_test.go │ ├── factory.go │ ├── hpa_reconciler.go │ ├── hpa_reconciler_test.go │ ├── knative_controller.go │ ├── knative_controller_test.go │ ├── knative_fixture_test.go │ ├── nop_tracker.go │ ├── scaled_object_reconciler.go │ ├── scaled_object_reconciler_test.go │ ├── scaler_reconciler.go │ ├── scaler_reconciler_fixture_test.go │ ├── service_controller.go │ ├── spec.go │ ├── status.go │ ├── tracker.go │ ├── util.go │ └── util_test.go ├── client │ ├── clientset │ │ └── versioned │ │ │ ├── clientset.go │ │ │ ├── doc.go │ │ │ ├── fake │ │ │ ├── clientset_generated.go │ │ │ ├── doc.go │ │ │ └── register.go │ │ │ ├── scheme │ │ │ ├── doc.go │ │ │ └── register.go │ │ │ └── typed │ │ │ ├── apisix │ │ │ └── v2 │ │ │ │ ├── apisix_client.go │ │ │ │ ├── apisixroute.go │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_apisix_client.go │ │ │ │ └── fake_apisixroute.go │ │ │ │ └── generated_expansion.go │ │ │ ├── appmesh │ │ │ ├── v1beta1 │ │ │ │ ├── appmesh_client.go │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── fake_appmesh_client.go │ │ │ │ │ ├── fake_mesh.go │ │ │ │ │ ├── fake_virtualnode.go │ │ │ │ │ └── fake_virtualservice.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── mesh.go │ │ │ │ ├── virtualnode.go │ │ │ │ └── virtualservice.go │ │ │ └── v1beta2 │ │ │ │ ├── appmesh_client.go │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_appmesh_client.go │ │ │ │ ├── fake_virtualnode.go │ │ │ │ ├── fake_virtualrouter.go │ │ │ │ └── fake_virtualservice.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── virtualnode.go │ │ │ │ ├── virtualrouter.go │ │ │ │ └── virtualservice.go │ │ │ ├── flagger │ │ │ └── v1beta1 │ │ │ │ ├── alertprovider.go │ │ │ │ ├── canary.go │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_alertprovider.go │ │ │ │ ├── fake_canary.go │ │ │ │ ├── fake_flagger_client.go │ │ │ │ └── fake_metrictemplate.go │ │ │ │ ├── flagger_client.go │ │ │ │ ├── generated_expansion.go │ │ │ │ └── metrictemplate.go │ │ │ ├── gatewayapi │ │ │ ├── v1 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── fake_gatewayapi_client.go │ │ │ │ │ └── fake_httproute.go │ │ │ │ ├── gatewayapi_client.go │ │ │ │ ├── generated_expansion.go │ │ │ │ └── httproute.go │ │ │ └── v1beta1 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_gatewayapi_client.go │ │ │ │ └── fake_httproute.go │ │ │ │ ├── gatewayapi_client.go │ │ │ │ ├── generated_expansion.go │ │ │ │ └── httproute.go │ │ │ ├── gloo │ │ │ └── v1 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_gloo_client.go │ │ │ │ └── fake_upstream.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── gloo_client.go │ │ │ │ └── upstream.go │ │ │ ├── gloogateway │ │ │ └── v1 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_gloogateway_client.go │ │ │ │ └── fake_routetable.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── gloogateway_client.go │ │ │ │ └── routetable.go │ │ │ ├── istio │ │ │ └── v1beta1 │ │ │ │ ├── destinationrule.go │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_destinationrule.go │ │ │ │ ├── fake_istio_client.go │ │ │ │ └── fake_virtualservice.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── istio_client.go │ │ │ │ └── virtualservice.go │ │ │ ├── keda │ │ │ └── v1alpha1 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_keda_client.go │ │ │ │ └── fake_scaledobject.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── keda_client.go │ │ │ │ └── scaledobject.go │ │ │ ├── kuma │ │ │ └── v1alpha1 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_kuma_client.go │ │ │ │ └── fake_trafficroute.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── kuma_client.go │ │ │ │ └── trafficroute.go │ │ │ ├── projectcontour │ │ │ └── v1 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_httpproxy.go │ │ │ │ └── fake_projectcontour_client.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── httpproxy.go │ │ │ │ └── projectcontour_client.go │ │ │ ├── smi │ │ │ ├── v1alpha1 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── fake_smi_client.go │ │ │ │ │ └── fake_trafficsplit.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── smi_client.go │ │ │ │ └── trafficsplit.go │ │ │ ├── v1alpha2 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── fake_smi_client.go │ │ │ │ │ └── fake_trafficsplit.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── smi_client.go │ │ │ │ └── trafficsplit.go │ │ │ └── v1alpha3 │ │ │ │ ├── doc.go │ │ │ │ ├── fake │ │ │ │ ├── doc.go │ │ │ │ ├── fake_smi_client.go │ │ │ │ └── fake_trafficsplit.go │ │ │ │ ├── generated_expansion.go │ │ │ │ ├── smi_client.go │ │ │ │ └── trafficsplit.go │ │ │ └── traefik │ │ │ └── v1alpha1 │ │ │ ├── doc.go │ │ │ ├── fake │ │ │ ├── doc.go │ │ │ ├── fake_traefik_client.go │ │ │ └── fake_traefikservice.go │ │ │ ├── generated_expansion.go │ │ │ ├── traefik_client.go │ │ │ └── traefikservice.go │ ├── informers │ │ └── externalversions │ │ │ ├── apisix │ │ │ ├── interface.go │ │ │ └── v2 │ │ │ │ ├── apisixroute.go │ │ │ │ └── interface.go │ │ │ ├── appmesh │ │ │ ├── interface.go │ │ │ ├── v1beta1 │ │ │ │ ├── interface.go │ │ │ │ ├── mesh.go │ │ │ │ ├── virtualnode.go │ │ │ │ └── virtualservice.go │ │ │ └── v1beta2 │ │ │ │ ├── interface.go │ │ │ │ ├── virtualnode.go │ │ │ │ ├── virtualrouter.go │ │ │ │ └── virtualservice.go │ │ │ ├── factory.go │ │ │ ├── flagger │ │ │ ├── interface.go │ │ │ └── v1beta1 │ │ │ │ ├── alertprovider.go │ │ │ │ ├── canary.go │ │ │ │ ├── interface.go │ │ │ │ └── metrictemplate.go │ │ │ ├── gatewayapi │ │ │ ├── interface.go │ │ │ ├── v1 │ │ │ │ ├── httproute.go │ │ │ │ └── interface.go │ │ │ └── v1beta1 │ │ │ │ ├── httproute.go │ │ │ │ └── interface.go │ │ │ ├── generic.go │ │ │ ├── gloo │ │ │ ├── interface.go │ │ │ └── v1 │ │ │ │ ├── interface.go │ │ │ │ └── upstream.go │ │ │ ├── gloogateway │ │ │ ├── interface.go │ │ │ └── v1 │ │ │ │ ├── interface.go │ │ │ │ └── routetable.go │ │ │ ├── internalinterfaces │ │ │ └── factory_interfaces.go │ │ │ ├── istio │ │ │ ├── interface.go │ │ │ └── v1beta1 │ │ │ │ ├── destinationrule.go │ │ │ │ ├── interface.go │ │ │ │ └── virtualservice.go │ │ │ ├── keda │ │ │ ├── interface.go │ │ │ └── v1alpha1 │ │ │ │ ├── interface.go │ │ │ │ └── scaledobject.go │ │ │ ├── kuma │ │ │ ├── interface.go │ │ │ └── v1alpha1 │ │ │ │ ├── interface.go │ │ │ │ └── trafficroute.go │ │ │ ├── projectcontour │ │ │ ├── interface.go │ │ │ └── v1 │ │ │ │ ├── httpproxy.go │ │ │ │ └── interface.go │ │ │ ├── smi │ │ │ ├── interface.go │ │ │ ├── v1alpha1 │ │ │ │ ├── interface.go │ │ │ │ └── trafficsplit.go │ │ │ ├── v1alpha2 │ │ │ │ ├── interface.go │ │ │ │ └── trafficsplit.go │ │ │ └── v1alpha3 │ │ │ │ ├── interface.go │ │ │ │ └── trafficsplit.go │ │ │ └── traefik │ │ │ ├── interface.go │ │ │ └── v1alpha1 │ │ │ ├── interface.go │ │ │ └── traefikservice.go │ └── listers │ │ ├── apisix │ │ └── v2 │ │ │ ├── apisixroute.go │ │ │ └── expansion_generated.go │ │ ├── appmesh │ │ ├── v1beta1 │ │ │ ├── expansion_generated.go │ │ │ ├── mesh.go │ │ │ ├── virtualnode.go │ │ │ └── virtualservice.go │ │ └── v1beta2 │ │ │ ├── expansion_generated.go │ │ │ ├── virtualnode.go │ │ │ ├── virtualrouter.go │ │ │ └── virtualservice.go │ │ ├── flagger │ │ └── v1beta1 │ │ │ ├── alertprovider.go │ │ │ ├── canary.go │ │ │ ├── expansion_generated.go │ │ │ └── metrictemplate.go │ │ ├── gatewayapi │ │ ├── v1 │ │ │ ├── expansion_generated.go │ │ │ └── httproute.go │ │ └── v1beta1 │ │ │ ├── expansion_generated.go │ │ │ └── httproute.go │ │ ├── gloo │ │ └── v1 │ │ │ ├── expansion_generated.go │ │ │ └── upstream.go │ │ ├── gloogateway │ │ └── v1 │ │ │ ├── expansion_generated.go │ │ │ └── routetable.go │ │ ├── istio │ │ └── v1beta1 │ │ │ ├── destinationrule.go │ │ │ ├── expansion_generated.go │ │ │ └── virtualservice.go │ │ ├── keda │ │ └── v1alpha1 │ │ │ ├── expansion_generated.go │ │ │ └── scaledobject.go │ │ ├── kuma │ │ └── v1alpha1 │ │ │ ├── expansion_generated.go │ │ │ └── trafficroute.go │ │ ├── projectcontour │ │ └── v1 │ │ │ ├── expansion_generated.go │ │ │ └── httpproxy.go │ │ ├── smi │ │ ├── v1alpha1 │ │ │ ├── expansion_generated.go │ │ │ └── trafficsplit.go │ │ ├── v1alpha2 │ │ │ ├── expansion_generated.go │ │ │ └── trafficsplit.go │ │ └── v1alpha3 │ │ │ ├── expansion_generated.go │ │ │ └── trafficsplit.go │ │ └── traefik │ │ └── v1alpha1 │ │ ├── expansion_generated.go │ │ └── traefikservice.go ├── controller │ ├── controller.go │ ├── controller_test.go │ ├── events.go │ ├── finalizer.go │ ├── finalizer_test.go │ ├── job.go │ ├── scheduler.go │ ├── scheduler_daemonset_fixture_test.go │ ├── scheduler_daemonset_test.go │ ├── scheduler_deployment_fixture_test.go │ ├── scheduler_deployment_test.go │ ├── scheduler_hooks.go │ ├── scheduler_metrics.go │ ├── scheduler_metrics_test.go │ ├── scheduler_svc_test.go │ ├── scheduler_test.go │ ├── webhook.go │ └── webhook_test.go ├── loadtester │ ├── authorizer.go │ ├── bash.go │ ├── concord.go │ ├── concord_test.go │ ├── gate.go │ ├── helmv3.go │ ├── kubectl.go │ ├── runner.go │ ├── runner_test.go │ ├── server.go │ ├── server_fixture_test.go │ ├── server_test.go │ ├── task.go │ ├── task_ngrinder.go │ ├── task_ngrinder_test.go │ └── task_shell.go ├── logger │ └── logger.go ├── metrics │ ├── observers │ │ ├── apisix.go │ │ ├── apisix_test.go │ │ ├── appmesh.go │ │ ├── appmesh_test.go │ │ ├── contour.go │ │ ├── contour_test.go │ │ ├── factory.go │ │ ├── gloo.go │ │ ├── gloo_test.go │ │ ├── http.go │ │ ├── http_test.go │ │ ├── istio.go │ │ ├── istio_test.go │ │ ├── knative.go │ │ ├── knative_test.go │ │ ├── kuma.go │ │ ├── kuma_test.go │ │ ├── linkerd.go │ │ ├── linkerd_test.go │ │ ├── nginx.go │ │ ├── nginx_test.go │ │ ├── observer.go │ │ ├── osm.go │ │ ├── osm_test.go │ │ ├── render.go │ │ ├── render_test.go │ │ ├── skipper.go │ │ ├── skipper_test.go │ │ ├── traefik.go │ │ └── traefik_test.go │ ├── providers │ │ ├── cloudwatch.go │ │ ├── cloudwatch_test.go │ │ ├── datadog.go │ │ ├── datadog_test.go │ │ ├── dynatrace.go │ │ ├── dynatrace_test.go │ │ ├── errors.go │ │ ├── factory.go │ │ ├── graphite.go │ │ ├── graphite_test.go │ │ ├── influxdb.go │ │ ├── influxdb_test.go │ │ ├── keptn.go │ │ ├── keptn_test.go │ │ ├── newrelic.go │ │ ├── newrelic_test.go │ │ ├── prometheus.go │ │ ├── prometheus_test.go │ │ ├── provider.go │ │ ├── splunk.go │ │ ├── splunk_test.go │ │ ├── stackdriver.go │ │ └── stackdriver_test.go │ └── recorder.go ├── notifier │ ├── client.go │ ├── client_test.go │ ├── discord.go │ ├── discord_test.go │ ├── factory.go │ ├── gchat.go │ ├── gchat_test.go │ ├── nop.go │ ├── notifier.go │ ├── rocket.go │ ├── rocket_test.go │ ├── slack.go │ ├── slack_test.go │ ├── teams.go │ └── teams_test.go ├── router │ ├── apisix.go │ ├── apisix_test.go │ ├── appmesh.go │ ├── appmesh_test.go │ ├── appmesh_v1beta2.go │ ├── appmesh_v1beta2_test.go │ ├── contour.go │ ├── contour_test.go │ ├── factory.go │ ├── gateway_api.go │ ├── gateway_api_test.go │ ├── gateway_api_v1beta1.go │ ├── gateway_api_v1beta1_test.go │ ├── gloo.go │ ├── gloo_test.go │ ├── ingress.go │ ├── ingress_test.go │ ├── istio.go │ ├── istio_test.go │ ├── knative.go │ ├── knative_test.go │ ├── kubernetes.go │ ├── kubernetes_default.go │ ├── kubernetes_default_test.go │ ├── kubernetes_noop.go │ ├── kuma.go │ ├── kuma_test.go │ ├── nop.go │ ├── router.go │ ├── router_test.go │ ├── skipper.go │ ├── skipper_test.go │ ├── smi.go │ ├── smi_test.go │ ├── smi_v1alpha2.go │ ├── smi_v1alpha2_test.go │ ├── smi_v1alpha3.go │ ├── smi_v1alpha3_test.go │ ├── traefik.go │ ├── traefik_test.go │ ├── util.go │ └── util_test.go ├── server │ └── server.go ├── signals │ ├── signal.go │ ├── signal_posix.go │ └── signal_windows.go └── version │ └── version.go └── test ├── README.md ├── apisix ├── install.sh ├── run.sh └── test-canary.sh ├── contour ├── install.sh ├── run.sh └── test-canary.sh ├── gatewayapi ├── install.sh ├── run.sh ├── test-ab.sh ├── test-bg.sh ├── test-canary.sh ├── test-session-affinity.sh ├── test-utils.sh └── verify_session_affinity.go ├── gloo ├── install.sh ├── run.sh └── test-canary.sh ├── istio ├── install.sh ├── run.sh ├── test-canary.sh ├── test-delegation.sh └── test-skip-analysis.sh ├── keda ├── install.sh ├── run.sh └── test-scaledobject.sh ├── knative ├── init.sh ├── install.sh ├── run.sh └── test-canary.sh ├── kubernetes ├── install.sh ├── run.sh ├── test-daemonset.sh ├── test-deployment.sh └── test-hpa.sh ├── kuma ├── install.sh ├── run.sh └── test-canary.sh ├── linkerd ├── install.sh ├── run.sh ├── test-canary.sh └── test-steps.sh ├── nginx ├── install.sh ├── run.sh ├── test-canary.sh └── test-lifecycle.sh ├── skipper ├── install.sh ├── kustomization.yaml ├── namespace.yaml ├── patch.yaml ├── run.sh └── test-canary.sh ├── traefik ├── install.sh ├── run.sh └── test-canary.sh └── workloads ├── daemonset.yaml ├── deployment.yaml ├── init.sh └── secret.yaml /.clomonitor.yml: -------------------------------------------------------------------------------- 1 | exemptions: 2 | - check: analytics 3 | reason: "We don't track people" 4 | -------------------------------------------------------------------------------- /.codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | default: 5 | target: auto 6 | threshold: 50 7 | base: auto 8 | patch: off 9 | 10 | comment: 11 | require_changes: true 12 | branches: 13 | - "!docs" 14 | - "!release" 15 | -------------------------------------------------------------------------------- /.gitbook.yaml: -------------------------------------------------------------------------------- 1 | root: ./docs/gitbook 2 | 3 | redirects: 4 | how-it-works: usage/how-it-works.md 5 | usage/progressive-delivery: tutorials/istio-progressive-delivery.md 6 | usage/ab-testing: tutorials/istio-ab-testing.md 7 | usage/blue-green: tutorials/kubernetes-blue-green.md 8 | usage/appmesh-progressive-delivery: tutorials/appmesh-progressive-delivery.md 9 | usage/linkerd-progressive-delivery: tutorials/linkerd-progressive-delivery.md 10 | usage/contour-progressive-delivery: tutorials/contour-progressive-delivery.md 11 | usage/gloo-progressive-delivery: tutorials/gloo-progressive-delivery.md 12 | usage/nginx-progressive-delivery: tutorials/nginx-progressive-delivery.md 13 | usage/skipper-progressive-delivery: tutorials/skipper-progressive-delivery.md 14 | usage/crossover-progressive-delivery: tutorials/crossover-progressive-delivery.md 15 | usage/traefik-progressive-delivery: tutorials/traefik-progressive-delivery.md 16 | usage/osm-progressive-delivery: tutorials/osm-progressive-delivery.md 17 | usage/kuma-progressive-delivery: tutorials/kuma-progressive-delivery.md 18 | usage/gatewayapi-progressive-delivery: tutorials/gatewayapi-progressive-delivery.md 19 | usage/apisix-progressive-delivery: tutorials/apisix-progressive-delivery.md 20 | usage/knative-progressive-delivery: tutorials/knative-progressive-delivery.md 21 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @stefanprodan @aryan9600 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve this project 4 | title: '' 5 | assignees: '' 6 | 7 | --- 8 | 9 | ### Describe the bug 10 | 11 | A clear and concise description of what the bug is. 12 | Please provide the Canary definition and Flagger logs. 13 | 14 | ### To Reproduce 15 | 16 | 19 | 20 | ### Expected behavior 21 | 22 | A clear and concise description of what you expected to happen. 23 | 24 | ### Additional context 25 | 26 | - Flagger version: 27 | - Kubernetes version: 28 | - Service Mesh provider: 29 | - Ingress provider: 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: I have a suggestion (and may want to implement it 🙂)! 4 | title: '' 5 | assignees: '' 6 | 7 | --- 8 | 9 | ## Describe the feature 10 | 11 | What problem are you trying to solve? 12 | 13 | ### Proposed solution 14 | 15 | What do you want to happen? Add any considered drawbacks. 16 | 17 | ### Any alternatives you've considered? 18 | 19 | Is there another way to solve this problem that isn't as good a solution? 20 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | updates: 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | labels: ["area/ci", "dependencies"] 7 | groups: 8 | # Group all updates together, so that they are all applied in a single PR. 9 | # Grouped updates are currently in beta and is subject to change. 10 | # xref: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#groups 11 | ci: 12 | patterns: 13 | - "*" 14 | schedule: 15 | # By default, this will be on a monday. 16 | interval: "weekly" 17 | 18 | -------------------------------------------------------------------------------- /.github/workflows/helm.yaml: -------------------------------------------------------------------------------- 1 | name: helm 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | permissions: 7 | contents: read 8 | 9 | jobs: 10 | release-charts: 11 | runs-on: ubuntu-latest 12 | permissions: 13 | contents: write 14 | steps: 15 | - uses: actions/checkout@v4 16 | - name: Publish Helm charts 17 | uses: stefanprodan/helm-gh-pages@v1.7.0 18 | with: 19 | token: ${{ secrets.GITHUB_TOKEN }} 20 | charts_url: https://flagger.app 21 | -------------------------------------------------------------------------------- /.github/workflows/scan.yml: -------------------------------------------------------------------------------- 1 | name: scan 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | schedule: 9 | - cron: '18 10 * * 3' 10 | 11 | permissions: 12 | contents: read 13 | 14 | jobs: 15 | scan-fossa: 16 | runs-on: ubuntu-latest 17 | permissions: 18 | security-events: write 19 | steps: 20 | - uses: actions/checkout@v4 21 | - name: Run FOSSA scan and upload build data 22 | uses: fossa-contrib/fossa-action@v3 23 | with: 24 | # FOSSA Push-Only API Token 25 | fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de 26 | github-token: ${{ github.token }} 27 | scan-codeql: 28 | runs-on: ubuntu-latest 29 | permissions: 30 | security-events: write 31 | steps: 32 | - name: Checkout repository 33 | uses: actions/checkout@v4 34 | - name: Setup Go 35 | uses: actions/setup-go@v5 36 | with: 37 | go-version: 1.24.x 38 | - name: Initialize CodeQL 39 | uses: github/codeql-action/init@v3 40 | with: 41 | languages: go 42 | - name: Autobuild 43 | uses: github/codeql-action/autobuild@v3 44 | - name: Perform CodeQL Analysis 45 | uses: github/codeql-action/analyze@v3 46 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, build with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | .DS_Store 14 | 15 | bin/ 16 | _tmp/ 17 | 18 | artifacts/gcloud/ 19 | .idea 20 | Makefile.dev 21 | 22 | vendor 23 | coverage.txt 24 | -------------------------------------------------------------------------------- /.goreleaser.yml: -------------------------------------------------------------------------------- 1 | project_name: flagger 2 | 3 | builds: 4 | - skip: true 5 | 6 | release: 7 | prerelease: auto 8 | 9 | source: 10 | enabled: true 11 | name_template: "{{ .ProjectName }}_{{ .Version }}_source_code" 12 | 13 | sboms: 14 | - id: source 15 | artifacts: source 16 | documents: 17 | - "{{ .ProjectName }}_{{ .Version }}_sbom.spdx.json" 18 | 19 | signs: 20 | - cmd: cosign 21 | env: 22 | - COSIGN_EXPERIMENTAL=1 23 | certificate: '${artifact}.pem' 24 | args: 25 | - sign-blob 26 | - "--yes" 27 | - '--output-certificate=${certificate}' 28 | - '--output-signature=${signature}' 29 | - '${artifact}' 30 | artifacts: checksum 31 | output: true 32 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | 3 | Flagger follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | ARG GO_VERSION=1.24 2 | ARG XX_VERSION=1.6.1 3 | 4 | FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx 5 | FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS builder 6 | 7 | # copy build utilities 8 | COPY --from=xx / / 9 | 10 | ARG TARGETPLATFORM 11 | ARG REVISON 12 | 13 | WORKDIR /workspace 14 | 15 | # copy modules manifests 16 | COPY go.mod go.mod 17 | COPY go.sum go.sum 18 | 19 | # cache modules 20 | RUN go mod download 21 | 22 | # copy source code 23 | COPY cmd/ cmd/ 24 | COPY pkg/ pkg/ 25 | 26 | # build 27 | ENV CGO_ENABLED=0 28 | RUN xx-go build \ 29 | -ldflags "-s -w -X github.com/fluxcd/flagger/pkg/version.REVISION=${REVISON}" \ 30 | -a -o flagger ./cmd/flagger 31 | 32 | FROM alpine:3.21 33 | 34 | RUN apk --no-cache add ca-certificates 35 | 36 | USER nobody 37 | 38 | COPY --from=builder --chown=nobody:nobody /workspace/flagger . 39 | 40 | ENTRYPOINT ["./flagger"] 41 | -------------------------------------------------------------------------------- /GOVERNANCE.md: -------------------------------------------------------------------------------- 1 | # Flagger Governance 2 | 3 | The Flagger project is governed by the [Flux governance document](https://github.com/fluxcd/community/blob/main/GOVERNANCE.md), 4 | involvement is defined in the [Flux community roles document](chttps://github.com/fluxcd/community/blob/main/community-roles.md), 5 | and processes can be found in the [Flux process document](https://github.com/fluxcd/community/blob/main/PROCESS.md). 6 | -------------------------------------------------------------------------------- /MAINTAINERS: -------------------------------------------------------------------------------- 1 | The maintainers are generally available in Slack at 2 | https://cloud-native.slack.com/messages/flagger/ (obtain an invitation 3 | at https://slack.cncf.io/). 4 | 5 | In alphabetical order: 6 | 7 | Sanskar Jaiswal, Independent (github: @aryan9600, slack: aryan9600) 8 | Stefan Prodan, ControlPlane (github: @stefanprodan, slack: stefanprodan) 9 | Takeshi Yoneda, Tetrate (github: @mathetake, slack: mathetake) 10 | -------------------------------------------------------------------------------- /artifacts/examples/linkerd-canary.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: flagger.app/v1beta1 2 | kind: Canary 3 | metadata: 4 | name: podinfo 5 | namespace: test 6 | spec: 7 | provider: linkerd 8 | progressDeadlineSeconds: 600 9 | targetRef: 10 | apiVersion: apps/v1 11 | kind: Deployment 12 | name: podinfo 13 | autoscalerRef: 14 | apiVersion: autoscaling/v2 15 | kind: HorizontalPodAutoscaler 16 | name: podinfo 17 | service: 18 | name: podinfo 19 | port: 80 20 | targetPort: 9898 21 | portName: http 22 | portDiscovery: true 23 | skipAnalysis: false 24 | analysis: 25 | interval: 15s 26 | threshold: 10 27 | maxWeight: 50 28 | stepWeight: 5 29 | metrics: 30 | - name: request-success-rate 31 | thresholdRange: 32 | min: 99 33 | interval: 1m 34 | - name: request-duration 35 | thresholdRange: 36 | max: 500 37 | interval: 30s 38 | webhooks: 39 | - name: conformance-test 40 | type: pre-rollout 41 | url: http://flagger-loadtester.test/ 42 | timeout: 15s 43 | metadata: 44 | type: "bash" 45 | cmd: "curl -sd 'test' http://podinfo-canary.test/token | grep token" 46 | - name: load-test 47 | type: rollout 48 | url: http://flagger-loadtester.test/ 49 | timeout: 5s 50 | metadata: 51 | type: cmd 52 | cmd: "hey -z 1m -q 10 -c 2 http://podinfo-canary.test/" 53 | -------------------------------------------------------------------------------- /artifacts/examples/osm-canary-steps.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: flagger.app/v1beta1 2 | kind: Canary 3 | metadata: 4 | name: podinfo 5 | namespace: test 6 | spec: 7 | provider: osm 8 | targetRef: 9 | apiVersion: apps/v1 10 | kind: Deployment 11 | name: podinfo 12 | progressDeadlineSeconds: 600 13 | service: 14 | port: 9898 15 | targetPort: 9898 16 | analysis: 17 | interval: 15s 18 | threshold: 10 19 | stepWeights: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55] 20 | metrics: 21 | - name: request-success-rate 22 | thresholdRange: 23 | min: 99 24 | interval: 1m 25 | - name: request-duration 26 | thresholdRange: 27 | max: 500 28 | interval: 30s 29 | webhooks: 30 | - name: acceptance-test 31 | type: pre-rollout 32 | url: http://flagger-loadtester.test/ 33 | timeout: 15s 34 | metadata: 35 | type: bash 36 | cmd: "curl -sd 'test' http://podinfo-canary.test:9898/token | grep token" 37 | - name: load-test 38 | type: rollout 39 | url: http://flagger-loadtester.test/ 40 | timeout: 5s 41 | metadata: 42 | cmd: "hey -z 1m -q 10 -c 2 http://podinfo-canary.test:9898/" 43 | -------------------------------------------------------------------------------- /artifacts/examples/osm-canary.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: flagger.app/v1beta1 2 | kind: Canary 3 | metadata: 4 | name: podinfo 5 | namespace: test 6 | spec: 7 | provider: osm 8 | targetRef: 9 | apiVersion: apps/v1 10 | kind: Deployment 11 | name: podinfo 12 | progressDeadlineSeconds: 600 13 | service: 14 | port: 9898 15 | targetPort: 9898 16 | analysis: 17 | interval: 15s 18 | threshold: 10 19 | maxWeight: 50 20 | stepWeight: 5 21 | metrics: 22 | - name: request-success-rate 23 | thresholdRange: 24 | min: 99 25 | interval: 1m 26 | - name: request-duration 27 | thresholdRange: 28 | max: 500 29 | interval: 30s 30 | webhooks: 31 | - name: acceptance-test 32 | type: pre-rollout 33 | url: http://flagger-loadtester.test/ 34 | timeout: 15s 35 | metadata: 36 | type: bash 37 | cmd: "curl -sd 'test' http://podinfo-canary.test:9898/token | grep token" 38 | - name: load-test 39 | type: rollout 40 | url: http://flagger-loadtester.test/ 41 | timeout: 5s 42 | metadata: 43 | cmd: "hey -z 1m -q 10 -c 2 http://podinfo-canary.test:9898/" 44 | -------------------------------------------------------------------------------- /charts/flagger/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /charts/flagger/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | name: flagger 3 | version: 1.41.0 4 | appVersion: 1.41.0 5 | kubeVersion: ">=1.19.0-0" 6 | engine: gotpl 7 | description: Flagger is a progressive delivery operator for Kubernetes 8 | home: https://flagger.app 9 | icon: https://raw.githubusercontent.com/fluxcd/flagger/main/docs/logo/flagger-icon.png 10 | sources: 11 | - https://github.com/fluxcd/flagger 12 | maintainers: 13 | - name: stefanprodan 14 | url: https://github.com/stefanprodan 15 | email: stefanprodan@users.noreply.github.com 16 | keywords: 17 | - flagger 18 | - istio 19 | - appmesh 20 | - linkerd 21 | - kuma 22 | - osm 23 | - smi 24 | - gloo 25 | - contour 26 | - nginx 27 | - traefik 28 | - gitops 29 | - canary 30 | -------------------------------------------------------------------------------- /charts/flagger/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | Flagger installed 2 | -------------------------------------------------------------------------------- /charts/flagger/templates/account.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create }} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ template "flagger.serviceAccountName" . }} 6 | namespace: {{ .Release.Namespace }} 7 | {{- if .Values.serviceAccount.annotations }} 8 | annotations: 9 | {{ toYaml .Values.serviceAccount.annotations | indent 4 }} 10 | {{- end }} 11 | labels: 12 | helm.sh/chart: {{ template "flagger.chart" . }} 13 | app.kubernetes.io/name: {{ template "flagger.name" . }} 14 | app.kubernetes.io/managed-by: {{ .Release.Service }} 15 | app.kubernetes.io/instance: {{ .Release.Name }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /charts/flagger/templates/authorizationpolicy.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.linkerdAuthPolicy.create }} 2 | apiVersion: policy.linkerd.io/v1alpha1 3 | kind: AuthorizationPolicy 4 | metadata: 5 | namespace: {{ .Values.linkerdAuthPolicy.namespace }} 6 | name: prometheus-admin-flagger 7 | spec: 8 | targetRef: 9 | group: policy.linkerd.io 10 | kind: Server 11 | name: prometheus-admin 12 | requiredAuthenticationRefs: 13 | - kind: ServiceAccount 14 | name: {{ template "flagger.serviceAccountName" . }} 15 | namespace: {{ .Release.Namespace }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /charts/flagger/templates/crd.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.crd.create -}} 2 | {{- range $path, $bytes := .Files.Glob "crds/*.yaml" -}} 3 | {{ $.Files.Get $path }} 4 | --- 5 | {{- end -}} 6 | {{- end -}} 7 | -------------------------------------------------------------------------------- /charts/flagger/templates/pdb.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.podDisruptionBudget.enabled }} 2 | {{- if .Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget" -}} 3 | apiVersion: policy/v1 4 | {{- else }} 5 | apiVersion: policy/v1beta1 6 | {{- end }} 7 | kind: PodDisruptionBudget 8 | metadata: 9 | name: {{ template "flagger.name" . }} 10 | namespace: {{ .Release.Namespace }} 11 | spec: 12 | minAvailable: {{ .Values.podDisruptionBudget.minAvailable }} 13 | selector: 14 | matchLabels: 15 | app.kubernetes.io/name: {{ template "flagger.name" . }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /charts/flagger/templates/podmonitor.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.podMonitor.enabled }} 2 | apiVersion: monitoring.coreos.com/v1 3 | kind: PodMonitor 4 | metadata: 5 | labels: 6 | helm.sh/chart: {{ template "flagger.chart" . }} 7 | app.kubernetes.io/name: {{ template "flagger.name" . }} 8 | app.kubernetes.io/managed-by: {{ .Release.Service }} 9 | app.kubernetes.io/instance: {{ .Release.Name }} 10 | {{- range $k, $v := .Values.podMonitor.additionalLabels }} 11 | {{ $k }}: {{ $v | quote }} 12 | {{- end }} 13 | name: {{ include "flagger.fullname" . }} 14 | namespace: {{ .Values.podMonitor.namespace | default .Release.Namespace }} 15 | spec: 16 | podMetricsEndpoints: 17 | - interval: {{ .Values.podMonitor.interval }} 18 | path: /metrics 19 | port: http 20 | honorLabels: {{ .Values.podMonitor.honorLabels }} 21 | namespaceSelector: 22 | matchNames: 23 | - {{ .Release.Namespace }} 24 | selector: 25 | matchLabels: 26 | app.kubernetes.io/name: {{ template "flagger.name" . }} 27 | app.kubernetes.io/instance: {{ .Release.Name }} 28 | {{- end }} 29 | -------------------------------------------------------------------------------- /charts/flagger/templates/service.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceMonitor.enabled }} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: {{ template "flagger.name" . }} 6 | namespace: {{ .Release.Namespace }} 7 | labels: 8 | app.kubernetes.io/name: {{ template "flagger.name" . }} 9 | app.kubernetes.io/instance: {{ .Release.Name }} 10 | spec: 11 | ports: 12 | - name: http 13 | port: 8080 14 | targetPort: http 15 | protocol: TCP 16 | selector: 17 | app.kubernetes.io/name: {{ template "flagger.name" . }} 18 | app.kubernetes.io/instance: {{ .Release.Name }} 19 | {{- end }} 20 | -------------------------------------------------------------------------------- /charts/flagger/templates/servicemonitor.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceMonitor.enabled }} 2 | apiVersion: monitoring.coreos.com/v1 3 | kind: ServiceMonitor 4 | metadata: 5 | name: {{ template "flagger.name" . }} 6 | {{- if .Values.serviceMonitor.namespace }} 7 | namespace: {{ .Release.Namespace }} 8 | {{- end }} 9 | labels: 10 | app.kubernetes.io/name: {{ template "flagger.name" . }} 11 | app.kubernetes.io/instance: {{ .Release.Name }} 12 | {{- with .Values.serviceMonitor.labels }} 13 | {{- toYaml . | nindent 4 }} 14 | {{- end }} 15 | spec: 16 | endpoints: 17 | - path: /metrics 18 | port: http 19 | interval: 30s 20 | scrapeTimeout: 30s 21 | honorLabels: {{ .Values.serviceMonitor.honorLabels }} 22 | namespaceSelector: 23 | matchNames: 24 | - {{ .Release.Namespace }} 25 | selector: 26 | matchLabels: 27 | app.kubernetes.io/name: {{ template "flagger.name" . }} 28 | app.kubernetes.io/instance: {{ .Release.Name }} 29 | {{- end }} 30 | -------------------------------------------------------------------------------- /charts/grafana/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /charts/grafana/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | name: grafana 3 | version: 1.7.0 4 | appVersion: 7.2.0 5 | description: Grafana dashboards for monitoring Flagger canary deployments 6 | icon: https://raw.githubusercontent.com/fluxcd/flagger/main/docs/logo/flagger-icon.png 7 | home: https://flagger.app 8 | sources: 9 | - https://github.com/fluxcd/flagger 10 | maintainers: 11 | - name: stefanprodan 12 | url: https://github.com/stefanprodan 13 | email: stefanprodan@users.noreply.github.com 14 | keywords: 15 | - flagger 16 | - grafana 17 | - canary 18 | - istio 19 | - appmesh 20 | 21 | -------------------------------------------------------------------------------- /charts/grafana/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Run the port forward command: 2 | 3 | kubectl -n {{ .Release.Namespace }} port-forward svc/{{ .Release.Name }} 3000:80 4 | 5 | 2. Navigate to: 6 | 7 | http://localhost:3000 -------------------------------------------------------------------------------- /charts/grafana/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "grafana.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "grafana.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "grafana.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | -------------------------------------------------------------------------------- /charts/grafana/templates/dashboards-cfg.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ template "grafana.fullname" . }}-dashboards 5 | data: 6 | {{ (.Files.Glob "dashboards/*").AsConfig | indent 2 }} 7 | -------------------------------------------------------------------------------- /charts/grafana/templates/datasources-cfg.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ template "grafana.fullname" . }}-datasources 5 | data: 6 | datasources.yaml: |- 7 | apiVersion: 1 8 | 9 | deleteDatasources: 10 | - name: prometheus 11 | {{- if .Values.token }} 12 | datasources: 13 | - name: prometheus 14 | type: prometheus 15 | access: proxy 16 | url: https://cloud.weave.works/api/prom 17 | isDefault: true 18 | editable: true 19 | version: 1 20 | basicAuth: true 21 | basicAuthUser: weave 22 | basicAuthPassword: {{ .Values.token }} 23 | {{- else }} 24 | datasources: 25 | - name: prometheus 26 | type: prometheus 27 | access: proxy 28 | url: {{ .Values.url }} 29 | isDefault: true 30 | editable: true 31 | version: 1 32 | {{- end }} 33 | -------------------------------------------------------------------------------- /charts/grafana/templates/providers-cfg.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ template "grafana.fullname" . }}-providers 5 | data: 6 | providers.yaml: |+ 7 | apiVersion: 1 8 | 9 | providers: 10 | - name: 'default' 11 | orgId: 1 12 | folder: '' 13 | type: file 14 | disableDeletion: false 15 | editable: true 16 | options: 17 | path: /etc/grafana/dashboards 18 | -------------------------------------------------------------------------------- /charts/grafana/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ template "grafana.fullname" . }} 5 | labels: 6 | app: {{ template "grafana.name" . }} 7 | chart: {{ template "grafana.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - port: {{ .Values.service.port }} 14 | targetPort: http 15 | protocol: TCP 16 | name: http 17 | selector: 18 | app: {{ template "grafana.fullname" . }} 19 | release: {{ .Release.Name }} 20 | -------------------------------------------------------------------------------- /charts/grafana/values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for grafana. 2 | # This is a YAML-formatted file. 3 | # Declare variables to be passed into your templates. 4 | 5 | replicaCount: 1 6 | 7 | image: 8 | repository: grafana/grafana 9 | tag: 7.3.4 10 | pullPolicy: IfNotPresent 11 | 12 | podAnnotations: {} 13 | 14 | service: 15 | type: ClusterIP 16 | port: 80 17 | 18 | resources: {} 19 | # limits: 20 | # cpu: 100m 21 | # memory: 128Mi 22 | # requests: 23 | # cpu: 100m 24 | # memory: 128Mi 25 | 26 | nodeSelector: {} 27 | 28 | tolerations: [] 29 | 30 | affinity: {} 31 | 32 | user: admin 33 | password: 34 | 35 | # Prometheus instance 36 | url: http://prometheus:9090 37 | 38 | # Weave Cloud instance token 39 | token: 40 | -------------------------------------------------------------------------------- /charts/loadtester/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /charts/loadtester/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | name: loadtester 3 | version: 0.35.0 4 | appVersion: 0.35.0 5 | kubeVersion: ">=1.19.0-0" 6 | engine: gotpl 7 | description: Flagger's load testing services based on rakyll/hey and bojand/ghz that generates traffic during canary analysis when configured as a webhook. 8 | home: https://docs.flagger.app 9 | icon: https://raw.githubusercontent.com/fluxcd/flagger/main/docs/logo/flagger-icon.png 10 | sources: 11 | - https://github.com/fluxcd/flagger 12 | maintainers: 13 | - name: stefanprodan 14 | url: https://github.com/stefanprodan 15 | email: stefanprodan@users.noreply.github.com 16 | keywords: 17 | - flagger 18 | - istio 19 | - appmesh 20 | - linkerd 21 | - gloo 22 | - osm 23 | - smi 24 | - gitops 25 | - load testing 26 | -------------------------------------------------------------------------------- /charts/loadtester/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | Flagger's load testing service is available at http://{{ include "loadtester.fullname" . }}.{{ .Release.Namespace }}/ -------------------------------------------------------------------------------- /charts/loadtester/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "loadtester.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "loadtester.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "loadtester.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | -------------------------------------------------------------------------------- /charts/loadtester/templates/appmesh.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.appmesh.enabled }} 2 | apiVersion: appmesh.k8s.aws/v1beta2 3 | kind: VirtualNode 4 | metadata: 5 | name: {{ include "loadtester.fullname" . }} 6 | labels: 7 | app.kubernetes.io/name: {{ include "loadtester.name" . }} 8 | helm.sh/chart: {{ include "loadtester.chart" . }} 9 | app.kubernetes.io/instance: {{ .Release.Name }} 10 | app.kubernetes.io/managed-by: {{ .Release.Service }} 11 | spec: 12 | podSelector: 13 | matchLabels: 14 | app: {{ include "loadtester.name" . }} 15 | logging: 16 | accessLog: 17 | file: 18 | path: /dev/stdout 19 | {{- if .Values.appmesh.backends }} 20 | backends: 21 | {{- range .Values.appmesh.backends }} 22 | - virtualService: 23 | virtualServiceRef: 24 | name: {{ . }} 25 | {{- end }} 26 | {{- end }} 27 | {{- end }} 28 | -------------------------------------------------------------------------------- /charts/loadtester/templates/istio-gw.yaml: -------------------------------------------------------------------------------- 1 | {{- if and (.Values.istio.enabled) (.Values.istio.gateway.enabled) }} 2 | apiVersion: networking.istio.io/v1beta1 3 | kind: Gateway 4 | metadata: 5 | name: {{ include "loadtester.fullname" . }} 6 | spec: 7 | selector: 8 | istio: ingressgateway 9 | servers: 10 | - port: 11 | number: 80 12 | name: http-default 13 | protocol: HTTP 14 | hosts: 15 | - {{ .Values.istio.host }} 16 | {{- if .Values.istio.tls.enabled }} 17 | - port: 18 | number: 443 19 | name: https-default 20 | protocol: HTTPS 21 | tls: 22 | httpsRedirect: {{ .Values.istio.tls.httpsRedirect }} 23 | mode: SIMPLE 24 | serverCertificate: "sds" 25 | privateKey: "sds" 26 | credentialName: {{ include "loadtester.fullname" . }} 27 | hosts: 28 | - {{ .Values.istio.host }} 29 | {{- end }} 30 | {{- end }} 31 | -------------------------------------------------------------------------------- /charts/loadtester/templates/istio-vs.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.istio.enabled }} 2 | apiVersion: networking.istio.io/v1beta1 3 | kind: VirtualService 4 | metadata: 5 | name: {{ include "loadtester.fullname" . }} 6 | spec: 7 | gateways: 8 | - {{ include "loadtester.fullname" . }} 9 | hosts: 10 | - {{ .Values.istio.host }} 11 | http: 12 | - route: 13 | - destination: 14 | host: {{ include "loadtester.fullname" . }} 15 | port: 16 | number: {{ .Values.service.port }} 17 | {{- end }} 18 | -------------------------------------------------------------------------------- /charts/loadtester/templates/pdb.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.podDisruptionBudget.enabled }} 2 | {{- if .Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget" -}} 3 | apiVersion: policy/v1 4 | {{- else }} 5 | apiVersion: policy/v1beta1 6 | {{- end }} 7 | kind: PodDisruptionBudget 8 | metadata: 9 | name: {{ include "loadtester.fullname" . }} 10 | spec: 11 | minAvailable: {{ .Values.podDisruptionBudget.minAvailable }} 12 | selector: 13 | matchLabels: 14 | app.kubernetes.io/name: {{ include "loadtester.name" . }} 15 | {{- end }} 16 | -------------------------------------------------------------------------------- /charts/loadtester/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "loadtester.fullname" . }} 5 | labels: 6 | app.kubernetes.io/name: {{ include "loadtester.name" . }} 7 | helm.sh/chart: {{ include "loadtester.chart" . }} 8 | app.kubernetes.io/instance: {{ .Release.Name }} 9 | app.kubernetes.io/managed-by: {{ .Release.Service }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - port: {{ .Values.service.port }} 14 | targetPort: http 15 | protocol: TCP 16 | name: http 17 | selector: 18 | app: {{ include "loadtester.name" . }} 19 | -------------------------------------------------------------------------------- /charts/loadtester/templates/virtual-node.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.meshName }} 2 | apiVersion: appmesh.k8s.aws/v1beta1 3 | kind: VirtualNode 4 | metadata: 5 | name: {{ include "loadtester.fullname" . }} 6 | labels: 7 | app.kubernetes.io/name: {{ include "loadtester.name" . }} 8 | helm.sh/chart: {{ include "loadtester.chart" . }} 9 | app.kubernetes.io/instance: {{ .Release.Name }} 10 | app.kubernetes.io/managed-by: {{ .Release.Service }} 11 | spec: 12 | meshName: {{ .Values.meshName }} 13 | listeners: 14 | - portMapping: 15 | port: 444 16 | protocol: http 17 | serviceDiscovery: 18 | dns: 19 | hostName: {{ include "loadtester.fullname" . }}.{{ .Release.Namespace }} 20 | {{- if .Values.backends }} 21 | backends: 22 | {{- range .Values.backends }} 23 | - virtualService: 24 | virtualServiceName: {{ . }} 25 | {{- end }} 26 | {{- end }} 27 | {{- end }} 28 | -------------------------------------------------------------------------------- /charts/podinfo/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /charts/podinfo/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | version: 6.1.4 3 | appVersion: 6.1.3 4 | name: podinfo 5 | engine: gotpl 6 | description: Flagger canary deployment demo application 7 | home: https://docs.flagger.app 8 | icon: https://raw.githubusercontent.com/fluxcd/flagger/main/docs/logo/flagger-icon.png 9 | sources: 10 | - https://github.com/stefanprodan/podinfo 11 | maintainers: 12 | - name: stefanprodan 13 | url: https://github.com/stefanprodan 14 | email: stefanprodan@users.noreply.github.com 15 | -------------------------------------------------------------------------------- /charts/podinfo/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | podinfo {{ .Release.Name }} deployed! -------------------------------------------------------------------------------- /charts/podinfo/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "podinfo.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "podinfo.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "podinfo.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Create chart name suffix. 36 | */}} 37 | {{- define "podinfo.suffix" -}} 38 | {{- if .Values.canary.enabled -}} 39 | {{- "-primary" -}} 40 | {{- else -}} 41 | {{- "" -}} 42 | {{- end -}} 43 | {{- end -}} -------------------------------------------------------------------------------- /charts/podinfo/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ template "podinfo.fullname" . }} 5 | labels: 6 | app: {{ template "podinfo.name" . }} 7 | chart: {{ template "podinfo.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | data: 11 | config.yaml: |- 12 | # http settings 13 | http-client-timeout: 1m 14 | http-server-timeout: {{ .Values.httpServer.timeout }} 15 | http-server-shutdown-timeout: 5s 16 | -------------------------------------------------------------------------------- /charts/podinfo/templates/hpa.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.hpa.enabled -}} 2 | apiVersion: autoscaling/v2 3 | kind: HorizontalPodAutoscaler 4 | metadata: 5 | name: {{ template "podinfo.fullname" . }} 6 | labels: 7 | app: {{ template "podinfo.name" . }} 8 | chart: {{ template "podinfo.chart" . }} 9 | release: {{ .Release.Name }} 10 | heritage: {{ .Release.Service }} 11 | spec: 12 | scaleTargetRef: 13 | apiVersion: apps/v1 14 | kind: Deployment 15 | name: {{ template "podinfo.fullname" . }} 16 | minReplicas: {{ .Values.hpa.minReplicas }} 17 | maxReplicas: {{ .Values.hpa.maxReplicas }} 18 | metrics: 19 | {{- if .Values.hpa.cpu }} 20 | - type: Resource 21 | resource: 22 | name: cpu 23 | target: 24 | type: Utilization 25 | averageUtilization: {{ .Values.hpa.cpu }} 26 | {{- end }} 27 | {{- if .Values.hpa.memory }} 28 | - type: Resource 29 | resource: 30 | name: memory 31 | target: 32 | type: AverageValue 33 | averageValue: {{ .Values.hpa.memory }} 34 | {{- end }} 35 | {{- end }} 36 | -------------------------------------------------------------------------------- /charts/podinfo/templates/service.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.service.enabled (not .Values.canary.enabled) }} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: {{ template "podinfo.fullname" . }} 6 | labels: 7 | app: {{ template "podinfo.name" . }} 8 | chart: {{ template "podinfo.chart" . }} 9 | release: {{ .Release.Name }} 10 | heritage: {{ .Release.Service }} 11 | spec: 12 | type: {{ .Values.service.type }} 13 | ports: 14 | - port: {{ .Values.service.port }} 15 | targetPort: http 16 | protocol: TCP 17 | name: http 18 | selector: 19 | app: {{ template "podinfo.fullname" . }} 20 | {{- end }} -------------------------------------------------------------------------------- /charts/podinfo/templates/tests/jwt.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: {{ template "podinfo.fullname" . }}-jwt-test-{{ randAlphaNum 5 | lower }} 5 | labels: 6 | heritage: {{ .Release.Service }} 7 | release: {{ .Release.Name }} 8 | chart: {{ .Chart.Name }}-{{ .Chart.Version }} 9 | app: {{ template "podinfo.name" . }} 10 | annotations: 11 | "helm.sh/hook": test-success 12 | sidecar.istio.io/inject: "false" 13 | linkerd.io/inject: disabled 14 | appmesh.k8s.aws/sidecarInjectorWebhook: disabled 15 | openservicemesh.io/sidecar-injection: disabled 16 | spec: 17 | containers: 18 | - name: tools 19 | image: giantswarm/tiny-tools 20 | command: 21 | - sh 22 | - -c 23 | - | 24 | TOKEN=$(curl -sd 'test' ${PODINFO_SVC}/token | jq -r .token) && 25 | curl -H "Authorization: Bearer ${TOKEN}" ${PODINFO_SVC}/token/validate | grep test 26 | env: 27 | - name: PODINFO_SVC 28 | value: {{ template "podinfo.fullname" . }}:{{ .Values.service.port }} 29 | restartPolicy: Never 30 | 31 | -------------------------------------------------------------------------------- /docs/diagrams/flagger-abtest-steps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-abtest-steps.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-apisix-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-apisix-overview.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-bluegreen-steps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-bluegreen-steps.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-canary-hpa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-canary-hpa.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-canary-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-canary-overview.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-canary-steps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-canary-steps.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-canary-traffic-mirroring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-canary-traffic-mirroring.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-contour-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-contour-overview.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-flux-gitops.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-flux-gitops.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-gatewayapi-canary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-gatewayapi-canary.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-gitops-aws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-gitops-aws.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-gitops-contour.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-gitops-contour.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-gitops-istio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-gitops-istio.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-gke-istio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-gke-istio.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-gloo-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-gloo-overview.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-kuma-canary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-kuma-canary.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-load-testing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-load-testing.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-nginx-linkerd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-nginx-linkerd.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-nginx-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-nginx-overview.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-osm-traffic-split.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-osm-traffic-split.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-overview.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-skipper-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-skipper-overview.png -------------------------------------------------------------------------------- /docs/diagrams/flagger-traefik-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/flagger-traefik-overview.png -------------------------------------------------------------------------------- /docs/diagrams/istio-cert-manager-gke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/diagrams/istio-cert-manager-gke.png -------------------------------------------------------------------------------- /docs/logo/flagger-icon-black@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-icon-black@2x.png -------------------------------------------------------------------------------- /docs/logo/flagger-icon-color@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-icon-color@2x.png -------------------------------------------------------------------------------- /docs/logo/flagger-icon-white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-icon-white@2x.png -------------------------------------------------------------------------------- /docs/logo/flagger-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-icon.png -------------------------------------------------------------------------------- /docs/logo/flagger-stacked-black@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-stacked-black@2x.png -------------------------------------------------------------------------------- /docs/logo/flagger-stacked-color@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-stacked-color@2x.png -------------------------------------------------------------------------------- /docs/logo/flagger-stacked-white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-stacked-white@2x.png -------------------------------------------------------------------------------- /docs/logo/flagger-vertical-black@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-vertical-black@2x.png -------------------------------------------------------------------------------- /docs/logo/flagger-vertical-color@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-vertical-color@2x.png -------------------------------------------------------------------------------- /docs/logo/flagger-vertical-white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/logo/flagger-vertical-white@2x.png -------------------------------------------------------------------------------- /docs/screens/demo-backend-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/demo-backend-dashboard.png -------------------------------------------------------------------------------- /docs/screens/demo-frontend-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/demo-frontend-dashboard.png -------------------------------------------------------------------------------- /docs/screens/demo-frontend-jaeger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/demo-frontend-jaeger.png -------------------------------------------------------------------------------- /docs/screens/demo-frontend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/demo-frontend.png -------------------------------------------------------------------------------- /docs/screens/flagger-grafana-appmesh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/flagger-grafana-appmesh.png -------------------------------------------------------------------------------- /docs/screens/flagger-grafana-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/flagger-grafana-dashboard.png -------------------------------------------------------------------------------- /docs/screens/flagger-ms-teams-failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/flagger-ms-teams-failed.png -------------------------------------------------------------------------------- /docs/screens/flagger-ms-teams-notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/flagger-ms-teams-notifications.png -------------------------------------------------------------------------------- /docs/screens/grafana-canary-analysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/grafana-canary-analysis.png -------------------------------------------------------------------------------- /docs/screens/slack-canary-failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/slack-canary-failed.png -------------------------------------------------------------------------------- /docs/screens/slack-canary-notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fluxcd/flagger/27daa2ca468c42f3f373355818c146d48efc64f5/docs/screens/slack-canary-notifications.png -------------------------------------------------------------------------------- /hack/boilerplate.go.txt: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /hack/verify-crd.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | REPO_ROOT=$(git rev-parse --show-toplevel) 4 | 5 | d=$(diff ${REPO_ROOT}/artifacts/flagger/crd.yaml ${REPO_ROOT}/charts/flagger/crds/crd.yaml) 6 | if [[ "$d" != "" ]]; then 7 | echo "⨯ ${REPO_ROOT}/artifacts/flagger/crd.yaml and ${REPO_ROOT}/charts/flagger/crds/crd.yaml don't match" 8 | echo "$d" 9 | exit 1 10 | fi 11 | 12 | d=$(diff ${REPO_ROOT}/artifacts/flagger/crd.yaml ${REPO_ROOT}/kustomize/base/flagger/crd.yaml) 13 | if [[ "$d" != "" ]]; then 14 | echo "⨯ ${REPO_ROOT}/artifacts/flagger/crd.yaml and ${REPO_ROOT}/kustomize/base/flagger/crd.yaml don't match" 15 | echo "$d" 16 | exit 1 17 | fi 18 | 19 | echo "✔ CRDs verified" 20 | -------------------------------------------------------------------------------- /kustomize/apisix/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../base/flagger/ 3 | - ../base/prometheus/ 4 | resources: 5 | - namespace.yaml 6 | patchesStrategicMerge: 7 | - patch.yaml 8 | -------------------------------------------------------------------------------- /kustomize/apisix/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: flagger-system 5 | -------------------------------------------------------------------------------- /kustomize/apisix/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=apisix 14 | - -metrics-server=http://flagger-prometheus:9090 15 | -------------------------------------------------------------------------------- /kustomize/appmesh/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: appmesh-system 2 | bases: 3 | - ../base/flagger 4 | patchesStrategicMerge: 5 | - patch.yaml 6 | -------------------------------------------------------------------------------- /kustomize/appmesh/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=appmesh 14 | - -metrics-server=http://appmesh-prometheus:9090 15 | --- 16 | apiVersion: rbac.authorization.k8s.io/v1 17 | kind: ClusterRoleBinding 18 | metadata: 19 | name: flagger 20 | roleRef: 21 | apiGroup: rbac.authorization.k8s.io 22 | kind: ClusterRole 23 | name: flagger 24 | subjects: 25 | - kind: ServiceAccount 26 | name: flagger 27 | namespace: appmesh-system 28 | -------------------------------------------------------------------------------- /kustomize/base/flagger/account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: flagger 5 | namespace: flagger-system 6 | 7 | -------------------------------------------------------------------------------- /kustomize/base/flagger/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: flagger-system 2 | commonLabels: 3 | app: flagger 4 | resources: 5 | - account.yaml 6 | - rbac.yaml 7 | - crd.yaml 8 | - deployment.yaml 9 | images: 10 | - name: ghcr.io/fluxcd/flagger 11 | newName: ghcr.io/fluxcd/flagger 12 | newTag: 1.41.0 13 | -------------------------------------------------------------------------------- /kustomize/base/prometheus/account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: flagger-prometheus 5 | namespace: flagger-system 6 | -------------------------------------------------------------------------------- /kustomize/base/prometheus/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: flagger-system 2 | commonLabels: 3 | app: flagger-prometheus 4 | resources: 5 | - account.yaml 6 | - rbac.yaml 7 | - service.yaml 8 | - deployment.yaml 9 | configMapGenerator: 10 | - name: flagger-prometheus 11 | files: 12 | - prometheus.yml 13 | -------------------------------------------------------------------------------- /kustomize/base/prometheus/rbac.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: flagger-prometheus 5 | rules: 6 | - apiGroups: [""] 7 | resources: 8 | - nodes 9 | - services 10 | - endpoints 11 | - pods 12 | - nodes/proxy 13 | verbs: ["get", "list", "watch"] 14 | - apiGroups: [""] 15 | resources: 16 | - configmaps 17 | verbs: ["get"] 18 | - nonResourceURLs: ["/metrics"] 19 | verbs: ["get"] 20 | --- 21 | apiVersion: rbac.authorization.k8s.io/v1 22 | kind: ClusterRoleBinding 23 | metadata: 24 | name: flagger-prometheus 25 | roleRef: 26 | apiGroup: rbac.authorization.k8s.io 27 | kind: ClusterRole 28 | name: flagger-prometheus 29 | subjects: 30 | - kind: ServiceAccount 31 | name: flagger-prometheus 32 | namespace: flagger-system 33 | -------------------------------------------------------------------------------- /kustomize/base/prometheus/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: flagger-prometheus 5 | namespace: flagger-system 6 | spec: 7 | selector: 8 | app: flagger-prometheus 9 | ports: 10 | - name: http 11 | protocol: TCP 12 | port: 9090 -------------------------------------------------------------------------------- /kustomize/contour/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: projectcontour 2 | resources: 3 | - namespace.yaml 4 | bases: 5 | - ../base/flagger/ 6 | - ../base/prometheus/ 7 | patchesStrategicMerge: 8 | - patch.yaml 9 | -------------------------------------------------------------------------------- /kustomize/contour/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: projectcontour 5 | 6 | -------------------------------------------------------------------------------- /kustomize/contour/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=contour 14 | - -ingress-class=contour 15 | - -metrics-server=http://flagger-prometheus:9090 16 | -------------------------------------------------------------------------------- /kustomize/gatewayapi/kustomization.yaml: -------------------------------------------------------------------------------- 1 | bases: 2 | - ../base/flagger/ 3 | - ../base/prometheus/ 4 | resources: 5 | - namespace.yaml 6 | patchesStrategicMerge: 7 | - patch.yaml 8 | -------------------------------------------------------------------------------- /kustomize/gatewayapi/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: flagger-system 5 | -------------------------------------------------------------------------------- /kustomize/gatewayapi/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=gatewayapi:v1 14 | - -metrics-server=http://flagger-prometheus:9090 15 | -------------------------------------------------------------------------------- /kustomize/istio/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: istio-system 2 | bases: 3 | - ../base/flagger/ 4 | patchesStrategicMerge: 5 | - patch.yaml 6 | -------------------------------------------------------------------------------- /kustomize/istio/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=istio 14 | - -metrics-server=http://prometheus:9090 15 | --- 16 | apiVersion: rbac.authorization.k8s.io/v1 17 | kind: ClusterRoleBinding 18 | metadata: 19 | name: flagger 20 | roleRef: 21 | apiGroup: rbac.authorization.k8s.io 22 | kind: ClusterRole 23 | name: flagger 24 | subjects: 25 | - kind: ServiceAccount 26 | name: flagger 27 | namespace: istio-system 28 | -------------------------------------------------------------------------------- /kustomize/knative/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: flagger-system 2 | resources: 3 | - namespace.yaml 4 | bases: 5 | - ../base/flagger/ 6 | - ../base/prometheus/ 7 | patchesStrategicMerge: 8 | - patch.yaml 9 | -------------------------------------------------------------------------------- /kustomize/knative/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: flagger-system 5 | annotations: 6 | linkerd.io/inject: disabled 7 | labels: 8 | istio-injection: disabled 9 | appmesh.k8s.aws/sidecarInjectorWebhook: disabled 10 | -------------------------------------------------------------------------------- /kustomize/knative/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=knative 14 | - -metrics-server=http://flagger-prometheus:9090 15 | -------------------------------------------------------------------------------- /kustomize/kubernetes/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: flagger-system 2 | resources: 3 | - namespace.yaml 4 | bases: 5 | - ../base/flagger/ 6 | - ../base/prometheus/ 7 | patchesStrategicMerge: 8 | - patch.yaml 9 | -------------------------------------------------------------------------------- /kustomize/kubernetes/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: flagger-system 5 | annotations: 6 | linkerd.io/inject: disabled 7 | labels: 8 | istio-injection: disabled 9 | appmesh.k8s.aws/sidecarInjectorWebhook: disabled 10 | -------------------------------------------------------------------------------- /kustomize/kubernetes/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=kubernetes 14 | - -metrics-server=http://flagger-prometheus:9090 15 | -------------------------------------------------------------------------------- /kustomize/kuma/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: kong-mesh-system 2 | bases: 3 | - ../base/flagger/ 4 | patchesStrategicMerge: 5 | - patch.yaml 6 | resources: 7 | - mesh.yaml 8 | -------------------------------------------------------------------------------- /kustomize/kuma/mesh.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kuma.io/v1alpha1 2 | kind: Mesh 3 | metadata: 4 | name: default 5 | spec: 6 | metrics: 7 | enabledBackend: prometheus-1 8 | backends: 9 | - name: prometheus-1 10 | type: prometheus 11 | -------------------------------------------------------------------------------- /kustomize/kuma/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=kuma 14 | - -metrics-server=http://prometheus-server.mesh-observability:80 15 | -------------------------------------------------------------------------------- /kustomize/linkerd/authorizationpolicy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: policy.linkerd.io/v1alpha1 2 | kind: AuthorizationPolicy 3 | metadata: 4 | namespace: linkerd-viz 5 | name: prometheus-admin-flagger 6 | spec: 7 | targetRef: 8 | group: policy.linkerd.io 9 | kind: Server 10 | name: prometheus-admin 11 | requiredAuthenticationRefs: 12 | - kind: ServiceAccount 13 | name: flagger 14 | namespace: flagger-system 15 | -------------------------------------------------------------------------------- /kustomize/linkerd/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: flagger-system 2 | bases: 3 | - ../base/flagger/ 4 | - namespace.yaml 5 | - authorizationpolicy.yaml 6 | patchesStrategicMerge: 7 | - patch.yaml 8 | # restore overridden namespace field 9 | patchesJson6902: 10 | - target: 11 | group: policy.linkerd.io 12 | version: v1alpha1 13 | kind: AuthorizationPolicy 14 | name: prometheus-admin-flagger 15 | patch: |- 16 | - op: replace 17 | path: /metadata/namespace 18 | value: linkerd-viz 19 | -------------------------------------------------------------------------------- /kustomize/linkerd/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | annotations: 5 | linkerd.io/inject: enabled 6 | name: flagger-system 7 | -------------------------------------------------------------------------------- /kustomize/linkerd/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=gatewayapi:v1beta1 14 | - -metrics-server=http://prometheus.linkerd-viz:9090 15 | --- 16 | apiVersion: rbac.authorization.k8s.io/v1 17 | kind: ClusterRoleBinding 18 | metadata: 19 | name: flagger 20 | roleRef: 21 | apiGroup: rbac.authorization.k8s.io 22 | kind: ClusterRole 23 | name: flagger 24 | subjects: 25 | - kind: ServiceAccount 26 | name: flagger 27 | namespace: flagger-system 28 | -------------------------------------------------------------------------------- /kustomize/osm/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: osm-system 2 | bases: 3 | - ../base/flagger/ 4 | patchesStrategicMerge: 5 | - patch.yaml 6 | -------------------------------------------------------------------------------- /kustomize/osm/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=info 12 | - -include-label-prefix=app.kubernetes.io 13 | - -mesh-provider=osm 14 | - -metrics-server=http://osm-prometheus.osm-system.svc:7070 15 | --- 16 | apiVersion: rbac.authorization.k8s.io/v1 17 | kind: ClusterRoleBinding 18 | metadata: 19 | name: flagger 20 | roleRef: 21 | apiGroup: rbac.authorization.k8s.io 22 | kind: ClusterRole 23 | name: flagger 24 | subjects: 25 | - kind: ServiceAccount 26 | name: flagger 27 | namespace: osm-system 28 | -------------------------------------------------------------------------------- /kustomize/podinfo/hpa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: autoscaling/v2 2 | kind: HorizontalPodAutoscaler 3 | metadata: 4 | name: podinfo 5 | spec: 6 | scaleTargetRef: 7 | apiVersion: apps/v1 8 | kind: Deployment 9 | name: podinfo 10 | minReplicas: 2 11 | maxReplicas: 4 12 | metrics: 13 | - type: Resource 14 | resource: 15 | name: cpu 16 | target: 17 | type: Utilization 18 | # scale up if usage is above 19 | # 99% of the requested CPU (100m) 20 | averageUtilization: 99 21 | -------------------------------------------------------------------------------- /kustomize/podinfo/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: test 2 | resources: 3 | - hpa.yaml 4 | - deployment.yaml 5 | 6 | -------------------------------------------------------------------------------- /kustomize/tester/kustomization.yaml: -------------------------------------------------------------------------------- 1 | namespace: test 2 | resources: 3 | - service.yaml 4 | - deployment.yaml 5 | 6 | -------------------------------------------------------------------------------- /kustomize/tester/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: flagger-loadtester 5 | labels: 6 | app: flagger-loadtester 7 | spec: 8 | type: ClusterIP 9 | selector: 10 | app: flagger-loadtester 11 | ports: 12 | - name: http 13 | port: 80 14 | protocol: TCP 15 | targetPort: http 16 | -------------------------------------------------------------------------------- /pkg/apis/apisix/register.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package apisix 18 | 19 | const ( 20 | GroupName = "apisix.apache.org" 21 | ) 22 | -------------------------------------------------------------------------------- /pkg/apis/apisix/v2/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2022 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // +k8s:deepcopy-gen=package 18 | 19 | // Package v2 is the v2 version of the API. 20 | // +groupName=apisix.apache.org 21 | package v2 22 | -------------------------------------------------------------------------------- /pkg/apis/appmesh/register.go: -------------------------------------------------------------------------------- 1 | package appmesh 2 | 3 | const ( 4 | GroupName = "appmesh.k8s.aws" 5 | ) 6 | 7 | const AccessLogAnnotation = "appmesh.flagger.app/accesslog" 8 | 9 | const EnabledValue = "enabled" 10 | -------------------------------------------------------------------------------- /pkg/apis/appmesh/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | 3 | // Package v1beta1 is the v1beta1 version of the API. 4 | // +groupName=appmesh.k8s.aws 5 | package v1beta1 6 | -------------------------------------------------------------------------------- /pkg/apis/appmesh/v1beta1/register.go: -------------------------------------------------------------------------------- 1 | package v1beta1 2 | 3 | import ( 4 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 5 | "k8s.io/apimachinery/pkg/runtime" 6 | "k8s.io/apimachinery/pkg/runtime/schema" 7 | 8 | "github.com/fluxcd/flagger/pkg/apis/appmesh" 9 | ) 10 | 11 | // SchemeGroupVersion is group version used to register these objects 12 | var SchemeGroupVersion = schema.GroupVersion{Group: appmesh.GroupName, Version: "v1beta1"} 13 | 14 | // Kind takes an unqualified kind and returns back a Group qualified GroupKind 15 | func Kind(kind string) schema.GroupKind { 16 | return SchemeGroupVersion.WithKind(kind).GroupKind() 17 | } 18 | 19 | // Resource takes an unqualified resource and returns a Group qualified GroupResource 20 | func Resource(resource string) schema.GroupResource { 21 | return SchemeGroupVersion.WithResource(resource).GroupResource() 22 | } 23 | 24 | var ( 25 | SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) 26 | AddToScheme = SchemeBuilder.AddToScheme 27 | ) 28 | 29 | // Adds the list of known types to api.Scheme. 30 | func addKnownTypes(scheme *runtime.Scheme) error { 31 | scheme.AddKnownTypes(SchemeGroupVersion, 32 | &Mesh{}, 33 | &MeshList{}, 34 | &VirtualService{}, 35 | &VirtualServiceList{}, 36 | &VirtualNode{}, 37 | &VirtualNodeList{}, 38 | ) 39 | metav1.AddToGroupVersion(scheme, SchemeGroupVersion) 40 | return nil 41 | } 42 | -------------------------------------------------------------------------------- /pkg/apis/appmesh/v1beta2/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | 3 | // Package v1beta2 is the v1beta2 version of the API. 4 | // +groupName=appmesh.k8s.aws 5 | package v1beta2 6 | -------------------------------------------------------------------------------- /pkg/apis/appmesh/v1beta2/register.go: -------------------------------------------------------------------------------- 1 | package v1beta2 2 | 3 | import ( 4 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 5 | "k8s.io/apimachinery/pkg/runtime" 6 | "k8s.io/apimachinery/pkg/runtime/schema" 7 | 8 | "github.com/fluxcd/flagger/pkg/apis/appmesh" 9 | ) 10 | 11 | // SchemeGroupVersion is group version used to register these objects 12 | var SchemeGroupVersion = schema.GroupVersion{Group: appmesh.GroupName, Version: "v1beta2"} 13 | 14 | // Kind takes an unqualified kind and returns back a Group qualified GroupKind 15 | func Kind(kind string) schema.GroupKind { 16 | return SchemeGroupVersion.WithKind(kind).GroupKind() 17 | } 18 | 19 | // Resource takes an unqualified resource and returns a Group qualified GroupResource 20 | func Resource(resource string) schema.GroupResource { 21 | return SchemeGroupVersion.WithResource(resource).GroupResource() 22 | } 23 | 24 | var ( 25 | SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) 26 | AddToScheme = SchemeBuilder.AddToScheme 27 | ) 28 | 29 | // Adds the list of known types to api.Scheme. 30 | func addKnownTypes(scheme *runtime.Scheme) error { 31 | scheme.AddKnownTypes(SchemeGroupVersion, 32 | &VirtualService{}, 33 | &VirtualServiceList{}, 34 | &VirtualRouter{}, 35 | &VirtualRouterList{}, 36 | &VirtualNode{}, 37 | &VirtualNodeList{}, 38 | ) 39 | metav1.AddToGroupVersion(scheme, SchemeGroupVersion) 40 | return nil 41 | } 42 | -------------------------------------------------------------------------------- /pkg/apis/flagger/register.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2018 The Flagger Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package flagger 18 | 19 | const ( 20 | GroupName = "flagger.app" 21 | ) 22 | -------------------------------------------------------------------------------- /pkg/apis/flagger/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2018 The Flagger Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // +k8s:deepcopy-gen=package 18 | 19 | // Package v1beta1 is the v1alpha3 version of the API. 20 | // +groupName=flagger.app 21 | package v1beta1 22 | -------------------------------------------------------------------------------- /pkg/apis/flagger/v1beta1/provider.go: -------------------------------------------------------------------------------- 1 | package v1beta1 2 | 3 | const ( 4 | ApisixProvider string = "apisix" 5 | AppMeshProvider string = "appmesh" 6 | LinkerdProvider string = "linkerd" 7 | IstioProvider string = "istio" 8 | SMIProvider string = "smi" 9 | ContourProvider string = "contour" 10 | KnativeProvider string = "knative" 11 | GlooProvider string = "gloo" 12 | NGINXProvider string = "nginx" 13 | KubernetesProvider string = "kubernetes" 14 | SkipperProvider string = "skipper" 15 | TraefikProvider string = "traefik" 16 | OsmProvider string = "osm" 17 | KumaProvider string = "kuma" 18 | GatewayAPIProvider string = "gatewayapi" 19 | ) 20 | -------------------------------------------------------------------------------- /pkg/apis/gatewayapi/register.go: -------------------------------------------------------------------------------- 1 | package gatewayapi 2 | 3 | const ( 4 | GroupName = "gateway.networking.k8s.io" 5 | ) 6 | -------------------------------------------------------------------------------- /pkg/apis/gatewayapi/v1/doc.go: -------------------------------------------------------------------------------- 1 | // Package v1 contains API Schema definitions for the 2 | // gateway.networking.k8s.io API group. 3 | 4 | // +k8s:deepcopy-gen=package 5 | 6 | package v1 7 | -------------------------------------------------------------------------------- /pkg/apis/gatewayapi/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | // Package v1beta1 contains API Schema definitions for the 2 | // gateway.networking.k8s.io API group. 3 | 4 | // +k8s:deepcopy-gen=package 5 | 6 | package v1beta1 7 | -------------------------------------------------------------------------------- /pkg/apis/gloo/register.go: -------------------------------------------------------------------------------- 1 | package gloo 2 | 3 | const ( 4 | GlooGroupName = "gloo.solo.io" 5 | ) 6 | -------------------------------------------------------------------------------- /pkg/apis/gloo/v1/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | 3 | // Package v1 is the v1 version of the API. 4 | // +groupName=gloo.solo.io 5 | package v1 6 | -------------------------------------------------------------------------------- /pkg/apis/gloo/v1/register.go: -------------------------------------------------------------------------------- 1 | package v1 2 | 3 | import ( 4 | "github.com/fluxcd/flagger/pkg/apis/gloo" 5 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 6 | "k8s.io/apimachinery/pkg/runtime" 7 | "k8s.io/apimachinery/pkg/runtime/schema" 8 | ) 9 | 10 | // SchemeGroupVersion is group version used to register these objects 11 | var SchemeGroupVersion = schema.GroupVersion{Group: gloo.GlooGroupName, Version: "v1"} 12 | 13 | // Kind takes an unqualified kind and returns back a Group qualified GroupKind 14 | func Kind(kind string) schema.GroupKind { 15 | return SchemeGroupVersion.WithKind(kind).GroupKind() 16 | } 17 | 18 | // Resource takes an unqualified resource and returns a Group qualified GroupResource 19 | func Resource(resource string) schema.GroupResource { 20 | return SchemeGroupVersion.WithResource(resource).GroupResource() 21 | } 22 | 23 | var ( 24 | SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) 25 | AddToScheme = SchemeBuilder.AddToScheme 26 | ) 27 | 28 | // Adds the list of known types to Scheme. 29 | func addKnownTypes(scheme *runtime.Scheme) error { 30 | scheme.AddKnownTypes(SchemeGroupVersion, 31 | &Upstream{}, 32 | &UpstreamList{}, 33 | ) 34 | metav1.AddToGroupVersion(scheme, SchemeGroupVersion) 35 | return nil 36 | } 37 | -------------------------------------------------------------------------------- /pkg/apis/gloogateway/register.go: -------------------------------------------------------------------------------- 1 | package gloogateway 2 | 3 | const ( 4 | GatewayGroupName = "gateway.solo.io" 5 | ) 6 | -------------------------------------------------------------------------------- /pkg/apis/gloogateway/v1/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | 3 | // Package v1 is the v1 version of the API. 4 | // +groupName=gateway.solo.io 5 | package v1 6 | -------------------------------------------------------------------------------- /pkg/apis/gloogateway/v1/register.go: -------------------------------------------------------------------------------- 1 | package v1 2 | 3 | import ( 4 | "github.com/fluxcd/flagger/pkg/apis/gloogateway" 5 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 6 | "k8s.io/apimachinery/pkg/runtime" 7 | "k8s.io/apimachinery/pkg/runtime/schema" 8 | ) 9 | 10 | // SchemeGroupVersion is group version used to register these objects 11 | var SchemeGroupVersion = schema.GroupVersion{Group: gloogateway.GatewayGroupName, Version: "v1"} 12 | 13 | // Kind takes an unqualified kind and returns back a Group qualified GroupKind 14 | func Kind(kind string) schema.GroupKind { 15 | return SchemeGroupVersion.WithKind(kind).GroupKind() 16 | } 17 | 18 | // Resource takes an unqualified resource and returns a Group qualified GroupResource 19 | func Resource(resource string) schema.GroupResource { 20 | return SchemeGroupVersion.WithResource(resource).GroupResource() 21 | } 22 | 23 | var ( 24 | SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) 25 | AddToScheme = SchemeBuilder.AddToScheme 26 | ) 27 | 28 | // Adds the list of known types to Scheme. 29 | func addKnownTypes(scheme *runtime.Scheme) error { 30 | scheme.AddKnownTypes(SchemeGroupVersion, 31 | &RouteTable{}, 32 | &RouteTableList{}, 33 | ) 34 | metav1.AddToGroupVersion(scheme, SchemeGroupVersion) 35 | return nil 36 | } 37 | -------------------------------------------------------------------------------- /pkg/apis/istio/common/v1alpha1/string.go: -------------------------------------------------------------------------------- 1 | package v1alpha1 2 | 3 | // Describes how to match a given string in HTTP headers. Match is 4 | // case-sensitive. 5 | type StringMatch struct { 6 | // Specified exactly one of the fields below. 7 | 8 | // exact string match 9 | Exact string `json:"exact,omitempty"` 10 | 11 | // prefix-based match 12 | Prefix string `json:"prefix,omitempty"` 13 | 14 | // suffix-based match. 15 | Suffix string `json:"suffix,omitempty"` 16 | 17 | // ECMAscript style regex-based match 18 | Regex string `json:"regex,omitempty"` 19 | } 20 | -------------------------------------------------------------------------------- /pkg/apis/istio/register.go: -------------------------------------------------------------------------------- 1 | package istio 2 | 3 | const ( 4 | GroupName = "networking.istio.io" 5 | ) 6 | -------------------------------------------------------------------------------- /pkg/apis/istio/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | // Api versions allow the api contract for a resource to be changed while keeping 2 | // backward compatibility by support multiple concurrent versions 3 | // of the same resource 4 | 5 | // +k8s:deepcopy-gen=package 6 | // +groupName=networking.istio.io 7 | package v1beta1 8 | -------------------------------------------------------------------------------- /pkg/apis/istio/v1beta1/register.go: -------------------------------------------------------------------------------- 1 | package v1beta1 2 | 3 | import ( 4 | "github.com/fluxcd/flagger/pkg/apis/istio" 5 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 6 | "k8s.io/apimachinery/pkg/runtime" 7 | "k8s.io/apimachinery/pkg/runtime/schema" 8 | ) 9 | 10 | // SchemeGroupVersion is group version used to register these objects 11 | var SchemeGroupVersion = schema.GroupVersion{Group: istio.GroupName, Version: "v1beta1"} 12 | 13 | // Kind takes an unqualified kind and returns back a Group qualified GroupKind 14 | func Kind(kind string) schema.GroupKind { 15 | return SchemeGroupVersion.WithKind(kind).GroupKind() 16 | } 17 | 18 | // Resource takes an unqualified resource and returns a Group qualified GroupResource 19 | func Resource(resource string) schema.GroupResource { 20 | return SchemeGroupVersion.WithResource(resource).GroupResource() 21 | } 22 | 23 | var ( 24 | SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) 25 | AddToScheme = SchemeBuilder.AddToScheme 26 | ) 27 | 28 | // Adds the list of known types to Scheme. 29 | func addKnownTypes(scheme *runtime.Scheme) error { 30 | scheme.AddKnownTypes(SchemeGroupVersion, 31 | &VirtualService{}, 32 | &VirtualServiceList{}, 33 | &DestinationRule{}, 34 | &DestinationRuleList{}, 35 | ) 36 | metav1.AddToGroupVersion(scheme, SchemeGroupVersion) 37 | return nil 38 | } 39 | -------------------------------------------------------------------------------- /pkg/apis/keda/register.go: -------------------------------------------------------------------------------- 1 | package keda 2 | 3 | const ( 4 | GroupName = "keda.sh" 5 | ) 6 | -------------------------------------------------------------------------------- /pkg/apis/keda/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | 3 | // Package v1 is the v1 version of the API. 4 | // +groupName=keda.sh 5 | package v1alpha1 6 | -------------------------------------------------------------------------------- /pkg/apis/keda/v1alpha1/register.go: -------------------------------------------------------------------------------- 1 | package v1alpha1 2 | 3 | import ( 4 | "github.com/fluxcd/flagger/pkg/apis/keda" 5 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 6 | "k8s.io/apimachinery/pkg/runtime" 7 | "k8s.io/apimachinery/pkg/runtime/schema" 8 | ) 9 | 10 | // SchemeGroupVersion is the GroupVersion for the Kuma API 11 | var SchemeGroupVersion = schema.GroupVersion{Group: keda.GroupName, Version: "v1alpha1"} 12 | 13 | // Kind takes an unqualified kind and returns back a Group qualified GroupKind 14 | func Kind(kind string) schema.GroupKind { 15 | return SchemeGroupVersion.WithKind(kind).GroupKind() 16 | } 17 | 18 | // Resource gets a Kuma GroupResource for a specified resource 19 | func Resource(resource string) schema.GroupResource { 20 | return SchemeGroupVersion.WithResource(resource).GroupResource() 21 | } 22 | 23 | var ( 24 | SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) 25 | AddToScheme = SchemeBuilder.AddToScheme 26 | ) 27 | 28 | // Adds the list of known types to Scheme. 29 | func addKnownTypes(scheme *runtime.Scheme) error { 30 | scheme.AddKnownTypes(SchemeGroupVersion, 31 | &ScaledObject{}, 32 | &ScaledObjectList{}, 33 | ) 34 | metav1.AddToGroupVersion(scheme, SchemeGroupVersion) 35 | return nil 36 | } 37 | -------------------------------------------------------------------------------- /pkg/apis/kuma/register.go: -------------------------------------------------------------------------------- 1 | package kuma 2 | 3 | const ( 4 | GroupName = "kuma.io" 5 | ) 6 | -------------------------------------------------------------------------------- /pkg/apis/kuma/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | 3 | // Package v1 is the v1 version of the API. 4 | // +groupName=kuma.io 5 | package v1alpha1 6 | -------------------------------------------------------------------------------- /pkg/apis/kuma/v1alpha1/register.go: -------------------------------------------------------------------------------- 1 | package v1alpha1 2 | 3 | import ( 4 | "github.com/fluxcd/flagger/pkg/apis/kuma" 5 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 6 | "k8s.io/apimachinery/pkg/runtime" 7 | "k8s.io/apimachinery/pkg/runtime/schema" 8 | ) 9 | 10 | // SchemeGroupVersion is the GroupVersion for the Kuma API 11 | var SchemeGroupVersion = schema.GroupVersion{Group: kuma.GroupName, Version: "v1alpha1"} 12 | 13 | // Kind takes an unqualified kind and returns back a Group qualified GroupKind 14 | func Kind(kind string) schema.GroupKind { 15 | return SchemeGroupVersion.WithKind(kind).GroupKind() 16 | } 17 | 18 | // Resource gets a Kuma GroupResource for a specified resource 19 | func Resource(resource string) schema.GroupResource { 20 | return SchemeGroupVersion.WithResource(resource).GroupResource() 21 | } 22 | 23 | var ( 24 | SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) 25 | AddToScheme = SchemeBuilder.AddToScheme 26 | ) 27 | 28 | // Adds the list of known types to Scheme. 29 | func addKnownTypes(scheme *runtime.Scheme) error { 30 | scheme.AddKnownTypes(SchemeGroupVersion, 31 | &TrafficRoute{}, 32 | &TrafficRouteList{}, 33 | ) 34 | metav1.AddToGroupVersion(scheme, SchemeGroupVersion) 35 | return nil 36 | } 37 | -------------------------------------------------------------------------------- /pkg/apis/projectcontour/register.go: -------------------------------------------------------------------------------- 1 | package projectcontour 2 | 3 | const ( 4 | GroupName = "projectcontour.io" 5 | ) 6 | -------------------------------------------------------------------------------- /pkg/apis/projectcontour/v1/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | 3 | // Package v1 is the v1 version of the API. 4 | // +groupName=projectcontour.io 5 | package v1 6 | -------------------------------------------------------------------------------- /pkg/apis/projectcontour/v1/register.go: -------------------------------------------------------------------------------- 1 | package v1 2 | 3 | import ( 4 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 5 | "k8s.io/apimachinery/pkg/runtime" 6 | "k8s.io/apimachinery/pkg/runtime/schema" 7 | 8 | "github.com/fluxcd/flagger/pkg/apis/projectcontour" 9 | ) 10 | 11 | // SchemeGroupVersion is the GroupVersion for the Contour API 12 | var SchemeGroupVersion = schema.GroupVersion{Group: projectcontour.GroupName, Version: "v1"} 13 | 14 | // Kind takes an unqualified kind and returns back a Group qualified GroupKind 15 | func Kind(kind string) schema.GroupKind { 16 | return SchemeGroupVersion.WithKind(kind).GroupKind() 17 | } 18 | 19 | // Resource gets an Contour GroupResource for a specified resource 20 | func Resource(resource string) schema.GroupResource { 21 | return SchemeGroupVersion.WithResource(resource).GroupResource() 22 | } 23 | 24 | var ( 25 | SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) 26 | AddToScheme = SchemeBuilder.AddToScheme 27 | ) 28 | 29 | // Adds the list of known types to Scheme. 30 | func addKnownTypes(scheme *runtime.Scheme) error { 31 | scheme.AddKnownTypes(SchemeGroupVersion, 32 | &HTTPProxy{}, 33 | &HTTPProxyList{}, 34 | ) 35 | metav1.AddToGroupVersion(scheme, SchemeGroupVersion) 36 | return nil 37 | } 38 | -------------------------------------------------------------------------------- /pkg/apis/smi/register.go: -------------------------------------------------------------------------------- 1 | package smi 2 | 3 | const ( 4 | GroupName = "split.smi-spec.io" 5 | ) 6 | -------------------------------------------------------------------------------- /pkg/apis/smi/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | // +groupName=split.smi-spec.io 3 | 4 | package v1alpha1 5 | -------------------------------------------------------------------------------- /pkg/apis/smi/v1alpha2/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | // +groupName=split.smi-spec.io 3 | 4 | package v1alpha2 5 | -------------------------------------------------------------------------------- /pkg/apis/smi/v1alpha3/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | // +groupName=split.smi-spec.io 3 | 4 | package v1alpha3 5 | -------------------------------------------------------------------------------- /pkg/apis/traefik/register.go: -------------------------------------------------------------------------------- 1 | package traefik 2 | 3 | const ( 4 | GroupName = "traefik.containo.us" 5 | ) 6 | -------------------------------------------------------------------------------- /pkg/apis/traefik/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | // +k8s:deepcopy-gen=package 2 | 3 | // Package v1alpha1 is the v1alpha1 version of the API. 4 | // +groupName=traefik.containo.us 5 | package v1alpha1 6 | -------------------------------------------------------------------------------- /pkg/apis/traefik/v1alpha1/register.go: -------------------------------------------------------------------------------- 1 | package v1alpha1 2 | 3 | import ( 4 | "github.com/fluxcd/flagger/pkg/apis/traefik" 5 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 6 | "k8s.io/apimachinery/pkg/runtime" 7 | "k8s.io/apimachinery/pkg/runtime/schema" 8 | ) 9 | 10 | // SchemeGroupVersion is group version used to register these objects 11 | var SchemeGroupVersion = schema.GroupVersion{Group: traefik.GroupName, Version: "v1alpha1"} 12 | 13 | // Kind takes an unqualified kind and returns back a Group qualified GroupKind 14 | func Kind(kind string) schema.GroupKind { 15 | return SchemeGroupVersion.WithKind(kind).GroupKind() 16 | } 17 | 18 | // Resource takes an unqualified resource and returns a Group qualified GroupResource 19 | func Resource(resource string) schema.GroupResource { 20 | return SchemeGroupVersion.WithResource(resource).GroupResource() 21 | } 22 | 23 | var ( 24 | SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) 25 | AddToScheme = SchemeBuilder.AddToScheme 26 | ) 27 | 28 | // Adds the list of known types to Scheme. 29 | func addKnownTypes(scheme *runtime.Scheme) error { 30 | scheme.AddKnownTypes(SchemeGroupVersion, 31 | &TraefikService{}, 32 | &TraefikServiceList{}, 33 | ) 34 | metav1.AddToGroupVersion(scheme, SchemeGroupVersion) 35 | return nil 36 | } 37 | -------------------------------------------------------------------------------- /pkg/canary/scaler_reconciler.go: -------------------------------------------------------------------------------- 1 | package canary 2 | 3 | import ( 4 | flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" 5 | ) 6 | 7 | // ScalerReconciler represents a reconciler that can reconcile resources 8 | // that can scale other resources. 9 | type ScalerReconciler interface { 10 | ReconcilePrimaryScaler(cd *flaggerv1.Canary, init bool) error 11 | PauseTargetScaler(cd *flaggerv1.Canary) error 12 | ResumeTargetScaler(cd *flaggerv1.Canary) error 13 | } 14 | -------------------------------------------------------------------------------- /pkg/canary/tracker.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package canary 18 | 19 | import ( 20 | flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" 21 | corev1 "k8s.io/api/core/v1" 22 | ) 23 | 24 | type Tracker interface { 25 | GetTargetConfigs(cd *flaggerv1.Canary) (map[string]ConfigRef, error) 26 | GetConfigRefs(cd *flaggerv1.Canary) (*map[string]string, error) 27 | HasConfigChanged(cd *flaggerv1.Canary) (bool, error) 28 | CreatePrimaryConfigs(cd *flaggerv1.Canary, refs map[string]ConfigRef, includeLabelPrefix []string) error 29 | ApplyPrimaryConfigs(spec corev1.PodSpec, refs map[string]ConfigRef) corev1.PodSpec 30 | } 31 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated clientset. 20 | package versioned 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated fake clientset. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/scheme/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package contains the scheme of the automatically generated clientset. 20 | package scheme 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/apisix/v2/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v2 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/apisix/v2/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/apisix/v2/fake/fake_apisix_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v2 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/apisix/v2" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeApisixV2 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeApisixV2) ApisixRoutes(namespace string) v2.ApisixRouteInterface { 32 | return &FakeApisixRoutes{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeApisixV2) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/apisix/v2/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v2 20 | 21 | type ApisixRouteExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/appmesh/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1beta1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/appmesh/v1beta1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/appmesh/v1beta1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1beta1 20 | 21 | type MeshExpansion interface{} 22 | 23 | type VirtualNodeExpansion interface{} 24 | 25 | type VirtualServiceExpansion interface{} 26 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/appmesh/v1beta2/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1beta2 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/appmesh/v1beta2/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/appmesh/v1beta2/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1beta2 20 | 21 | type VirtualNodeExpansion interface{} 22 | 23 | type VirtualRouterExpansion interface{} 24 | 25 | type VirtualServiceExpansion interface{} 26 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/flagger/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1beta1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/flagger/v1beta1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/flagger/v1beta1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1beta1 20 | 21 | type AlertProviderExpansion interface{} 22 | 23 | type CanaryExpansion interface{} 24 | 25 | type MetricTemplateExpansion interface{} 26 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gatewayapi/v1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gatewayapi/v1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gatewayapi/v1/fake/fake_gatewayapi_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/gatewayapi/v1" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeGatewayapiV1 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeGatewayapiV1) HTTPRoutes(namespace string) v1.HTTPRouteInterface { 32 | return &FakeHTTPRoutes{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeGatewayapiV1) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gatewayapi/v1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1 20 | 21 | type HTTPRouteExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gatewayapi/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1beta1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gatewayapi/v1beta1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gatewayapi/v1beta1/fake/fake_gatewayapi_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1beta1 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/gatewayapi/v1beta1" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeGatewayapiV1beta1 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeGatewayapiV1beta1) HTTPRoutes(namespace string) v1beta1.HTTPRouteInterface { 32 | return &FakeHTTPRoutes{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeGatewayapiV1beta1) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gatewayapi/v1beta1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1beta1 20 | 21 | type HTTPRouteExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gloo/v1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gloo/v1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gloo/v1/fake/fake_gloo_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/gloo/v1" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeGlooV1 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeGlooV1) Upstreams(namespace string) v1.UpstreamInterface { 32 | return &FakeUpstreams{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeGlooV1) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gloo/v1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1 20 | 21 | type UpstreamExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gloogateway/v1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gloogateway/v1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gloogateway/v1/fake/fake_gloogateway_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/gloogateway/v1" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeGatewayV1 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeGatewayV1) RouteTables(namespace string) v1.RouteTableInterface { 32 | return &FakeRouteTables{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeGatewayV1) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/gloogateway/v1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1 20 | 21 | type RouteTableExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/istio/v1beta1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1beta1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/istio/v1beta1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/istio/v1beta1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1beta1 20 | 21 | type DestinationRuleExpansion interface{} 22 | 23 | type VirtualServiceExpansion interface{} 24 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/keda/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1alpha1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/keda/v1alpha1/fake/fake_keda_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1alpha1 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/keda/v1alpha1" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeKedaV1alpha1 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeKedaV1alpha1) ScaledObjects(namespace string) v1alpha1.ScaledObjectInterface { 32 | return &FakeScaledObjects{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeKedaV1alpha1) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/keda/v1alpha1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1alpha1 20 | 21 | type ScaledObjectExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/kuma/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1alpha1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/kuma/v1alpha1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/kuma/v1alpha1/fake/fake_kuma_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1alpha1 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/kuma/v1alpha1" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeKumaV1alpha1 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeKumaV1alpha1) TrafficRoutes() v1alpha1.TrafficRouteInterface { 32 | return &FakeTrafficRoutes{c} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeKumaV1alpha1) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/kuma/v1alpha1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1alpha1 20 | 21 | type TrafficRouteExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/projectcontour/v1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/projectcontour/v1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/projectcontour/v1/fake/fake_projectcontour_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/projectcontour/v1" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeProjectcontourV1 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeProjectcontourV1) HTTPProxies(namespace string) v1.HTTPProxyInterface { 32 | return &FakeHTTPProxies{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeProjectcontourV1) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/projectcontour/v1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1 20 | 21 | type HTTPProxyExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1alpha1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha1/fake/fake_smi_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1alpha1 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/smi/v1alpha1" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeSplitV1alpha1 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeSplitV1alpha1) TrafficSplits(namespace string) v1alpha1.TrafficSplitInterface { 32 | return &FakeTrafficSplits{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeSplitV1alpha1) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1alpha1 20 | 21 | type TrafficSplitExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha2/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1alpha2 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha2/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha2/fake/fake_smi_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1alpha2 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/smi/v1alpha2" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeSplitV1alpha2 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeSplitV1alpha2) TrafficSplits(namespace string) v1alpha2.TrafficSplitInterface { 32 | return &FakeTrafficSplits{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeSplitV1alpha2) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha2/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1alpha2 20 | 21 | type TrafficSplitExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha3/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1alpha3 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha3/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha3/fake/fake_smi_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1alpha3 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/smi/v1alpha3" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeSplitV1alpha3 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeSplitV1alpha3) TrafficSplits(namespace string) v1alpha3.TrafficSplitInterface { 32 | return &FakeTrafficSplits{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeSplitV1alpha3) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/smi/v1alpha3/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1alpha3 20 | 21 | type TrafficSplitExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/traefik/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // This package has the automatically generated typed clients. 20 | package v1alpha1 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/traefik/v1alpha1/fake/doc.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | // Package fake has the automatically generated clients. 20 | package fake 21 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/traefik/v1alpha1/fake/fake_traefik_client.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package fake 20 | 21 | import ( 22 | v1alpha1 "github.com/fluxcd/flagger/pkg/client/clientset/versioned/typed/traefik/v1alpha1" 23 | rest "k8s.io/client-go/rest" 24 | testing "k8s.io/client-go/testing" 25 | ) 26 | 27 | type FakeTraefikV1alpha1 struct { 28 | *testing.Fake 29 | } 30 | 31 | func (c *FakeTraefikV1alpha1) TraefikServices(namespace string) v1alpha1.TraefikServiceInterface { 32 | return &FakeTraefikServices{c, namespace} 33 | } 34 | 35 | // RESTClient returns a RESTClient that is used to communicate 36 | // with API server by this client implementation. 37 | func (c *FakeTraefikV1alpha1) RESTClient() rest.Interface { 38 | var ret *rest.RESTClient 39 | return ret 40 | } 41 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/traefik/v1alpha1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by client-gen. DO NOT EDIT. 18 | 19 | package v1alpha1 20 | 21 | type TraefikServiceExpansion interface{} 22 | -------------------------------------------------------------------------------- /pkg/client/listers/apisix/v2/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v2 20 | 21 | // ApisixRouteListerExpansion allows custom methods to be added to 22 | // ApisixRouteLister. 23 | type ApisixRouteListerExpansion interface{} 24 | 25 | // ApisixRouteNamespaceListerExpansion allows custom methods to be added to 26 | // ApisixRouteNamespaceLister. 27 | type ApisixRouteNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/gatewayapi/v1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1 20 | 21 | // HTTPRouteListerExpansion allows custom methods to be added to 22 | // HTTPRouteLister. 23 | type HTTPRouteListerExpansion interface{} 24 | 25 | // HTTPRouteNamespaceListerExpansion allows custom methods to be added to 26 | // HTTPRouteNamespaceLister. 27 | type HTTPRouteNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/gatewayapi/v1beta1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1beta1 20 | 21 | // HTTPRouteListerExpansion allows custom methods to be added to 22 | // HTTPRouteLister. 23 | type HTTPRouteListerExpansion interface{} 24 | 25 | // HTTPRouteNamespaceListerExpansion allows custom methods to be added to 26 | // HTTPRouteNamespaceLister. 27 | type HTTPRouteNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/gloo/v1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1 20 | 21 | // UpstreamListerExpansion allows custom methods to be added to 22 | // UpstreamLister. 23 | type UpstreamListerExpansion interface{} 24 | 25 | // UpstreamNamespaceListerExpansion allows custom methods to be added to 26 | // UpstreamNamespaceLister. 27 | type UpstreamNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/gloogateway/v1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1 20 | 21 | // RouteTableListerExpansion allows custom methods to be added to 22 | // RouteTableLister. 23 | type RouteTableListerExpansion interface{} 24 | 25 | // RouteTableNamespaceListerExpansion allows custom methods to be added to 26 | // RouteTableNamespaceLister. 27 | type RouteTableNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/istio/v1beta1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1beta1 20 | 21 | // DestinationRuleListerExpansion allows custom methods to be added to 22 | // DestinationRuleLister. 23 | type DestinationRuleListerExpansion interface{} 24 | 25 | // DestinationRuleNamespaceListerExpansion allows custom methods to be added to 26 | // DestinationRuleNamespaceLister. 27 | type DestinationRuleNamespaceListerExpansion interface{} 28 | 29 | // VirtualServiceListerExpansion allows custom methods to be added to 30 | // VirtualServiceLister. 31 | type VirtualServiceListerExpansion interface{} 32 | 33 | // VirtualServiceNamespaceListerExpansion allows custom methods to be added to 34 | // VirtualServiceNamespaceLister. 35 | type VirtualServiceNamespaceListerExpansion interface{} 36 | -------------------------------------------------------------------------------- /pkg/client/listers/keda/v1alpha1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1alpha1 20 | 21 | // ScaledObjectListerExpansion allows custom methods to be added to 22 | // ScaledObjectLister. 23 | type ScaledObjectListerExpansion interface{} 24 | 25 | // ScaledObjectNamespaceListerExpansion allows custom methods to be added to 26 | // ScaledObjectNamespaceLister. 27 | type ScaledObjectNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/kuma/v1alpha1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1alpha1 20 | 21 | // TrafficRouteListerExpansion allows custom methods to be added to 22 | // TrafficRouteLister. 23 | type TrafficRouteListerExpansion interface{} 24 | -------------------------------------------------------------------------------- /pkg/client/listers/projectcontour/v1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1 20 | 21 | // HTTPProxyListerExpansion allows custom methods to be added to 22 | // HTTPProxyLister. 23 | type HTTPProxyListerExpansion interface{} 24 | 25 | // HTTPProxyNamespaceListerExpansion allows custom methods to be added to 26 | // HTTPProxyNamespaceLister. 27 | type HTTPProxyNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/smi/v1alpha1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1alpha1 20 | 21 | // TrafficSplitListerExpansion allows custom methods to be added to 22 | // TrafficSplitLister. 23 | type TrafficSplitListerExpansion interface{} 24 | 25 | // TrafficSplitNamespaceListerExpansion allows custom methods to be added to 26 | // TrafficSplitNamespaceLister. 27 | type TrafficSplitNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/smi/v1alpha2/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1alpha2 20 | 21 | // TrafficSplitListerExpansion allows custom methods to be added to 22 | // TrafficSplitLister. 23 | type TrafficSplitListerExpansion interface{} 24 | 25 | // TrafficSplitNamespaceListerExpansion allows custom methods to be added to 26 | // TrafficSplitNamespaceLister. 27 | type TrafficSplitNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/smi/v1alpha3/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1alpha3 20 | 21 | // TrafficSplitListerExpansion allows custom methods to be added to 22 | // TrafficSplitLister. 23 | type TrafficSplitListerExpansion interface{} 24 | 25 | // TrafficSplitNamespaceListerExpansion allows custom methods to be added to 26 | // TrafficSplitNamespaceLister. 27 | type TrafficSplitNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/client/listers/traefik/v1alpha1/expansion_generated.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | // Code generated by lister-gen. DO NOT EDIT. 18 | 19 | package v1alpha1 20 | 21 | // TraefikServiceListerExpansion allows custom methods to be added to 22 | // TraefikServiceLister. 23 | type TraefikServiceListerExpansion interface{} 24 | 25 | // TraefikServiceNamespaceListerExpansion allows custom methods to be added to 26 | // TraefikServiceNamespaceLister. 27 | type TraefikServiceNamespaceListerExpansion interface{} 28 | -------------------------------------------------------------------------------- /pkg/loadtester/authorizer.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package loadtester 18 | 19 | import ( 20 | "regexp" 21 | 22 | flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" 23 | ) 24 | 25 | type Authorizer struct { 26 | namespaceRegexp *regexp.Regexp 27 | } 28 | 29 | func NewAuthorizer(namespaceRegexp *regexp.Regexp) *Authorizer { 30 | return &Authorizer{ 31 | namespaceRegexp: namespaceRegexp, 32 | } 33 | } 34 | 35 | func (a *Authorizer) Authorize(payload *flaggerv1.CanaryWebhookPayload) bool { 36 | return a.namespaceRegexp == nil || a.namespaceRegexp.MatchString(payload.Namespace) 37 | } 38 | -------------------------------------------------------------------------------- /pkg/loadtester/gate.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package loadtester 18 | 19 | import "sync" 20 | 21 | type GateStorage struct { 22 | backend string 23 | data *sync.Map 24 | } 25 | 26 | func NewGateStorage(backend string) *GateStorage { 27 | return &GateStorage{ 28 | backend: backend, 29 | data: new(sync.Map), 30 | } 31 | } 32 | 33 | func (gs *GateStorage) open(key string) { 34 | gs.data.Store(key, true) 35 | } 36 | 37 | func (gs *GateStorage) close(key string) { 38 | gs.data.Store(key, false) 39 | } 40 | 41 | func (gs *GateStorage) isOpen(key string) (locked bool) { 42 | val, ok := gs.data.LoadOrStore(key, false) 43 | if ok { 44 | return val.(bool) 45 | } 46 | return 47 | } 48 | -------------------------------------------------------------------------------- /pkg/loadtester/kubectl.go: -------------------------------------------------------------------------------- 1 | package loadtester 2 | 3 | import ( 4 | "context" 5 | "fmt" 6 | "os/exec" 7 | "strings" 8 | ) 9 | 10 | const TaskTypeKubectl = "kubectl" 11 | 12 | type KubectlTask struct { 13 | TaskBase 14 | command string 15 | logCmdOutput bool 16 | } 17 | 18 | func (task *KubectlTask) Hash() string { 19 | return hash(task.canary + task.command) 20 | } 21 | 22 | func (task *KubectlTask) Run(ctx context.Context) (*TaskRunResult, error) { 23 | kubectlCmd := fmt.Sprintf("%s %s", TaskTypeKubectl, task.command) 24 | task.logger.With("canary", task.canary).Infof("running command %v", kubectlCmd) 25 | 26 | cmd := exec.CommandContext(ctx, TaskTypeKubectl, strings.Fields(task.command)...) 27 | out, err := cmd.CombinedOutput() 28 | if err != nil { 29 | task.logger.With("canary", task.canary).Errorf("command failed %s %v %s", task.command, err, out) 30 | return &TaskRunResult{false, out}, fmt.Errorf("command %s failed: %s: %w", task.command, out, err) 31 | } else { 32 | if task.logCmdOutput { 33 | task.logger.With("canary", task.canary).Info(string(out)) 34 | } 35 | task.logger.With("canary", task.canary).Infof("command finished %v", kubectlCmd) 36 | } 37 | return &TaskRunResult{true, out}, nil 38 | } 39 | 40 | func (task *KubectlTask) String() string { 41 | return task.command 42 | } 43 | -------------------------------------------------------------------------------- /pkg/metrics/observers/observer.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package observers 18 | 19 | import ( 20 | "time" 21 | 22 | flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" 23 | ) 24 | 25 | type Interface interface { 26 | GetRequestSuccessRate(model flaggerv1.MetricTemplateModel) (float64, error) 27 | GetRequestDuration(model flaggerv1.MetricTemplateModel) (time.Duration, error) 28 | } 29 | -------------------------------------------------------------------------------- /pkg/metrics/providers/errors.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package providers 18 | 19 | import "errors" 20 | 21 | var ( 22 | ErrNoValuesFound = errors.New("no values found") 23 | ErrMultipleValuesReturned = errors.New("query returned multiple values") 24 | ) 25 | -------------------------------------------------------------------------------- /pkg/metrics/providers/provider.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package providers 18 | 19 | type Interface interface { 20 | // RunQuery executes the query and converts the first result to float64 21 | RunQuery(query string) (float64, error) 22 | 23 | // IsOnline calls the provider endpoint and returns an error if the API is unreachable 24 | IsOnline() (bool, error) 25 | } 26 | -------------------------------------------------------------------------------- /pkg/notifier/client_test.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package notifier 18 | 19 | import ( 20 | "encoding/json" 21 | "io" 22 | "net/http" 23 | "net/http/httptest" 24 | "testing" 25 | 26 | "github.com/stretchr/testify/require" 27 | ) 28 | 29 | func Test_postMessage(t *testing.T) { 30 | ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 31 | b, err := io.ReadAll(r.Body) 32 | require.NoError(t, err) 33 | 34 | var payload = make(map[string]string) 35 | err = json.Unmarshal(b, &payload) 36 | require.NoError(t, err) 37 | 38 | require.Equal(t, "success", payload["status"]) 39 | })) 40 | defer ts.Close() 41 | 42 | err := postMessage(ts.URL, "", "", map[string]string{"status": "success"}) 43 | require.NoError(t, err) 44 | } 45 | -------------------------------------------------------------------------------- /pkg/notifier/nop.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package notifier 18 | 19 | type NopNotifier struct{} 20 | 21 | func (n *NopNotifier) Post(string, string, string, []Field, string) error { 22 | return nil 23 | } 24 | -------------------------------------------------------------------------------- /pkg/notifier/notifier.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package notifier 18 | 19 | type Interface interface { 20 | Post(workload string, namespace string, message string, fields []Field, severity string) error 21 | } 22 | 23 | type Field struct { 24 | Name string 25 | Value string 26 | } 27 | -------------------------------------------------------------------------------- /pkg/router/kubernetes.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package router 18 | 19 | import ( 20 | flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" 21 | ) 22 | 23 | // KubernetesRouter manages Kubernetes services 24 | type KubernetesRouter interface { 25 | // Initialize creates or updates the primary and canary services 26 | Initialize(canary *flaggerv1.Canary) error 27 | // Reconcile creates or updates the main service 28 | Reconcile(canary *flaggerv1.Canary) error 29 | // Revert router 30 | Finalize(canary *flaggerv1.Canary) error 31 | } 32 | -------------------------------------------------------------------------------- /pkg/router/kubernetes_noop.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package router 18 | 19 | import ( 20 | flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" 21 | ) 22 | 23 | // KubernetesNoopRouter manages nothing. This is useful when one uses Flagger for progressive delivery of 24 | // services that are not load-balanced by a Kubernetes service 25 | type KubernetesNoopRouter struct { 26 | } 27 | 28 | func (c *KubernetesNoopRouter) Initialize(_ *flaggerv1.Canary) error { 29 | return nil 30 | } 31 | 32 | func (c *KubernetesNoopRouter) Reconcile(_ *flaggerv1.Canary) error { 33 | return nil 34 | } 35 | 36 | func (c *KubernetesNoopRouter) Finalize(_ *flaggerv1.Canary) error { 37 | return nil 38 | } 39 | -------------------------------------------------------------------------------- /pkg/router/nop.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package router 18 | 19 | import ( 20 | flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" 21 | ) 22 | 23 | // NopRouter no-operation router 24 | type NopRouter struct { 25 | } 26 | 27 | func (*NopRouter) Reconcile(_ *flaggerv1.Canary) error { 28 | return nil 29 | } 30 | 31 | func (*NopRouter) SetRoutes(_ *flaggerv1.Canary, _ int, _ int, _ bool) error { 32 | return nil 33 | } 34 | 35 | func (*NopRouter) GetRoutes(canary *flaggerv1.Canary) (primaryWeight int, canaryWeight int, mirror bool, err error) { 36 | if canary.Status.Iterations > 0 { 37 | return 0, 100, false, nil 38 | } 39 | return 100, 0, false, nil 40 | } 41 | 42 | func (c *NopRouter) Finalize(_ *flaggerv1.Canary) error { 43 | return nil 44 | } 45 | -------------------------------------------------------------------------------- /pkg/router/router.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package router 18 | 19 | import flaggerv1 "github.com/fluxcd/flagger/pkg/apis/flagger/v1beta1" 20 | 21 | const configAnnotation = "flagger.kubernetes.io/original-configuration" 22 | const kubectlAnnotation = "kubectl.kubernetes.io/last-applied-configuration" 23 | 24 | type Interface interface { 25 | Reconcile(canary *flaggerv1.Canary) error 26 | SetRoutes(canary *flaggerv1.Canary, primaryWeight int, canaryWeight int, mirrored bool) error 27 | GetRoutes(canary *flaggerv1.Canary) (primaryWeight int, canaryWeight int, mirrored bool, err error) 28 | Finalize(canary *flaggerv1.Canary) error 29 | } 30 | -------------------------------------------------------------------------------- /pkg/router/util.go: -------------------------------------------------------------------------------- 1 | package router 2 | 3 | import ( 4 | "strings" 5 | ) 6 | 7 | const ( 8 | toolkitMarker = "toolkit.fluxcd.io" 9 | toolkitReconcileKey = "kustomize.toolkit.fluxcd.io/reconcile" 10 | helmDriftDetectionKey = "helm.toolkit.fluxcd.io/driftDetection" 11 | toolkitReconcileValue = "disabled" 12 | ) 13 | 14 | func includeLabelsByPrefix(labels map[string]string, includeLabelPrefixes []string) map[string]string { 15 | filteredLabels := make(map[string]string) 16 | for key, value := range labels { 17 | if strings.Contains(key, toolkitMarker) { 18 | continue 19 | } 20 | for _, includeLabelPrefix := range includeLabelPrefixes { 21 | if includeLabelPrefix == "*" || (includeLabelPrefix != "" && strings.HasPrefix(key, includeLabelPrefix)) { 22 | filteredLabels[key] = value 23 | break 24 | } 25 | } 26 | } 27 | 28 | return filteredLabels 29 | } 30 | 31 | func filterMetadata(meta map[string]string) map[string]string { 32 | if meta == nil { 33 | meta = map[string]string{} 34 | } 35 | // prevent Flux from overriding Flagger managed objects 36 | meta[toolkitReconcileKey] = toolkitReconcileValue 37 | meta[helmDriftDetectionKey] = toolkitReconcileValue 38 | return meta 39 | } 40 | -------------------------------------------------------------------------------- /pkg/signals/signal.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2017 The Kubernetes Authors. 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | Unless required by applicable law or agreed to in writing, software 8 | distributed under the License is distributed on an "AS IS" BASIS, 9 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | See the License for the specific language governing permissions and 11 | limitations under the License. 12 | */ 13 | 14 | package signals 15 | 16 | import ( 17 | "os" 18 | "os/signal" 19 | ) 20 | 21 | var onlyOneSignalHandler = make(chan struct{}) 22 | 23 | // SetupSignalHandler registered for SIGTERM and SIGINT. A stop channel is returned 24 | // which is closed on one of these signals. If a second signal is caught, the program 25 | // is terminated with exit code 1. 26 | func SetupSignalHandler() (stopCh <-chan struct{}) { 27 | close(onlyOneSignalHandler) // panics when called twice 28 | 29 | stop := make(chan struct{}) 30 | c := make(chan os.Signal, 2) 31 | signal.Notify(c, shutdownSignals...) 32 | go func() { 33 | <-c 34 | close(stop) 35 | <-c 36 | os.Exit(1) // second signal. Exit directly. 37 | }() 38 | 39 | return stop 40 | } 41 | -------------------------------------------------------------------------------- /pkg/signals/signal_posix.go: -------------------------------------------------------------------------------- 1 | //go:build !windows 2 | // +build !windows 3 | 4 | /* 5 | Copyright 2017 The Kubernetes Authors. 6 | Licensed under the Apache License, Version 2.0 (the "License"); 7 | you may not use this file except in compliance with the License. 8 | You may obtain a copy of the License at 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package signals 18 | 19 | import ( 20 | "os" 21 | "syscall" 22 | ) 23 | 24 | var shutdownSignals = []os.Signal{os.Interrupt, syscall.SIGTERM} 25 | -------------------------------------------------------------------------------- /pkg/signals/signal_windows.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2017 The Kubernetes Authors. 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | Unless required by applicable law or agreed to in writing, software 8 | distributed under the License is distributed on an "AS IS" BASIS, 9 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | See the License for the specific language governing permissions and 11 | limitations under the License. 12 | */ 13 | 14 | package signals 15 | 16 | import ( 17 | "os" 18 | ) 19 | 20 | var shutdownSignals = []os.Signal{os.Interrupt} 21 | -------------------------------------------------------------------------------- /pkg/version/version.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2020 The Flux authors 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */ 16 | 17 | package version 18 | 19 | var VERSION = "1.41.0" 20 | var REVISION = "unknown" 21 | -------------------------------------------------------------------------------- /test/README.md: -------------------------------------------------------------------------------- 1 | # Flagger end-to-end testing 2 | 3 | The e2e testing infrastructure is powered by GitHub Actions and [Kubernetes Kind](https://github.com/kubernetes-sigs/kind). 4 | 5 | ### e2e workflow 6 | 7 | * create local Kubernetes cluster with KinD 8 | * build Flagger container and load the image in KinD 9 | * install the service mesh or ingress provider 10 | * deploy Flagger 11 | * create test namespace, workloads and load tester 12 | * test the canary initialization (port discovery and metadata) 13 | * test the canary release (progressive traffic shifting, headers routing, mirroring, analysis, promotion, rollback) 14 | * test webhooks (conformance, load testing, pre/post rollout) 15 | -------------------------------------------------------------------------------- /test/apisix/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-canary.sh 12 | -------------------------------------------------------------------------------- /test/contour/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | CONTOUR_VER="v1.23.0" 6 | REPO_ROOT=$(git rev-parse --show-toplevel) 7 | 8 | mkdir -p ${REPO_ROOT}/bin 9 | 10 | echo '>>> Installing Contour' 11 | kubectl apply -f https://raw.githubusercontent.com/projectcontour/contour/${CONTOUR_VER}/examples/render/contour.yaml 12 | 13 | kubectl -n projectcontour rollout status deployment/contour 14 | kubectl -n projectcontour get all 15 | 16 | echo '>>> Installing Flagger' 17 | helm upgrade -i flagger ${REPO_ROOT}/charts/flagger \ 18 | --namespace projectcontour \ 19 | --set prometheus.install=true \ 20 | --set meshProvider=contour \ 21 | --set ingressClass=contour 22 | 23 | kubectl -n projectcontour set image deployment/flagger flagger=test/flagger:latest 24 | 25 | kubectl -n projectcontour rollout status deployment/flagger 26 | kubectl -n projectcontour rollout status deployment/flagger-prometheus 27 | -------------------------------------------------------------------------------- /test/contour/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-canary.sh 12 | -------------------------------------------------------------------------------- /test/gatewayapi/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-canary.sh 12 | "$DIR"/test-bg.sh 13 | "$DIR"/test-ab.sh 14 | "$DIR"/test-session-affinity.sh 15 | -------------------------------------------------------------------------------- /test/gloo/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | GLOO_VER="1.14.10" 6 | REPO_ROOT=$(git rev-parse --show-toplevel) 7 | 8 | mkdir -p ${REPO_ROOT}/bin 9 | 10 | echo '>>> Installing Gloo' 11 | kubectl create ns gloo-system 12 | helm repo add gloo https://storage.googleapis.com/solo-public-helm 13 | helm upgrade -i gloo gloo/gloo --version ${GLOO_VER} \ 14 | --namespace gloo-system \ 15 | --set discovery.enabled=false 16 | 17 | kubectl -n gloo-system rollout status deployment/gloo 18 | kubectl -n gloo-system get all 19 | 20 | echo '>>> Installing Flagger' 21 | helm upgrade -i flagger ${REPO_ROOT}/charts/flagger \ 22 | --set crd.create=false \ 23 | --namespace gloo-system \ 24 | --set prometheus.install=true \ 25 | --set meshProvider=gloo 26 | 27 | kubectl -n gloo-system set image deployment/flagger flagger=test/flagger:latest 28 | 29 | kubectl -n gloo-system rollout status deployment/flagger 30 | kubectl -n gloo-system rollout status deployment/flagger-prometheus 31 | -------------------------------------------------------------------------------- /test/gloo/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-canary.sh 12 | -------------------------------------------------------------------------------- /test/istio/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | ISTIO_VER="1.18.2" 6 | REPO_ROOT=$(git rev-parse --show-toplevel) 7 | 8 | mkdir -p ${REPO_ROOT}/bin 9 | 10 | echo ">>> Downloading Istio ${ISTIO_VER}" 11 | cd ${REPO_ROOT}/bin && \ 12 | curl -L https://istio.io/downloadIstio | ISTIO_VERSION=${ISTIO_VER} sh - 13 | 14 | echo ">>> Installing Istio ${ISTIO_VER}" 15 | ${REPO_ROOT}/bin/istio-${ISTIO_VER}/bin/istioctl manifest install --set profile=default --skip-confirmation \ 16 | --set values.pilot.resources.requests.cpu=100m \ 17 | --set values.pilot.resources.requests.memory=100Mi 18 | 19 | kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/addons/prometheus.yaml 20 | kubectl -n istio-system rollout status deployment/prometheus 21 | 22 | kubectl -n istio-system get all 23 | 24 | echo '>>> Installing Flagger' 25 | kubectl apply -k ${REPO_ROOT}/kustomize/istio 26 | 27 | kubectl -n istio-system set image deployment/flagger flagger=test/flagger:latest 28 | kubectl -n istio-system rollout status deployment/flagger 29 | -------------------------------------------------------------------------------- /test/istio/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-canary.sh 12 | 13 | "$REPO_ROOT"/test/workloads/init.sh 14 | "$DIR"/test-skip-analysis.sh 15 | 16 | "$REPO_ROOT"/test/workloads/init.sh 17 | "$DIR"/test-delegation.sh 18 | -------------------------------------------------------------------------------- /test/keda/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | 7 | mkdir -p ${REPO_ROOT}/bin 8 | 9 | echo '>>> Installing KEDA' 10 | helm repo add kedacore https://kedacore.github.io/charts 11 | kubectl create ns keda 12 | helm install keda kedacore/keda --namespace keda --wait 13 | 14 | kubectl -n keda get all 15 | 16 | echo '>>> Installing Flagger' 17 | kubectl apply -k ${REPO_ROOT}/kustomize/kubernetes 18 | 19 | kubectl -n flagger-system set image deployment/flagger flagger=test/flagger:latest 20 | 21 | kubectl -n flagger-system rollout status deployment/flagger 22 | kubectl -n flagger-system rollout status deployment/flagger-prometheus 23 | -------------------------------------------------------------------------------- /test/keda/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-scaledobject.sh 12 | -------------------------------------------------------------------------------- /test/knative/init.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | 7 | echo '>>> Delete test namespace' 8 | kubectl delete namespace test --ignore-not-found=true --wait=true 9 | 10 | echo '>>> Creating test namespace' 11 | kubectl create namespace test 12 | 13 | echo '>>> Installing the load tester' 14 | kubectl apply -k ${REPO_ROOT}/kustomize/tester 15 | kubectl -n test rollout status deployment/flagger-loadtester 16 | 17 | echo '>>> Deploy Knative Service' 18 | cat <>> Installing Knative' 11 | kubectl apply -f https://github.com/knative/serving/releases/download/knative-v${KNATIVE_VER}/serving-crds.yaml 12 | kubectl apply -f https://github.com/knative/serving/releases/download/knative-v${KNATIVE_VER}/serving-core.yaml 13 | kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v${KNATIVE_VER}/kourier.yaml 14 | kubectl patch configmap/config-network \ 15 | --namespace knative-serving \ 16 | --type merge \ 17 | --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}' 18 | 19 | kubectl -n knative-serving rollout status deployment 20 | kubectl -n kourier-system rollout status deployment 21 | 22 | echo '>>> Installing Flagger' 23 | kubectl apply -k ${REPO_ROOT}/kustomize/knative 24 | 25 | kubectl -n flagger-system set image deployment/flagger flagger=test/flagger:latest 26 | kubectl -n flagger-system rollout status deployment/flagger 27 | -------------------------------------------------------------------------------- /test/knative/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$DIR"/init.sh 11 | "$DIR"/test-canary.sh 12 | -------------------------------------------------------------------------------- /test/kubernetes/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | 7 | mkdir -p ${REPO_ROOT}/bin 8 | 9 | echo '>>> Installing Flagger' 10 | kubectl apply -k ${REPO_ROOT}/kustomize/kubernetes 11 | 12 | kubectl -n flagger-system set image deployment/flagger flagger=test/flagger:latest 13 | 14 | kubectl -n flagger-system rollout status deployment/flagger 15 | kubectl -n flagger-system rollout status deployment/flagger-prometheus 16 | -------------------------------------------------------------------------------- /test/kubernetes/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-deployment.sh 12 | "$DIR"/test-daemonset.sh 13 | 14 | kubectl -n test delete deploy podinfo 15 | kubectl -n test delete svc podinfo-svc 16 | kubectl apply -f ${REPO_ROOT}/test/workloads/deployment.yaml -n test 17 | "$DIR"/test-hpa.sh 18 | -------------------------------------------------------------------------------- /test/kuma/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | KUMA_VER="2.7.5" 6 | REPO_ROOT=$(git rev-parse --show-toplevel) 7 | mkdir -p ${REPO_ROOT}/bin 8 | 9 | echo ">>> Downloading Kuma ${KUMA_VER}" 10 | curl -L https://docs.konghq.com/mesh/installer.sh | VERSION=${KUMA_VER} sh - 11 | cp kong-mesh-${KUMA_VER}/bin/kumactl ${REPO_ROOT}/bin/kumactl 12 | chmod +x ${REPO_ROOT}/bin/kumactl 13 | 14 | echo ">>> Installing Kuma ${KUMA_VER}" 15 | ${REPO_ROOT}/bin/kumactl install control-plane | kubectl apply -f - 16 | 17 | echo ">>> Waiting for Kuma Control Plane to be ready" 18 | kubectl wait --for condition=established crd/meshes.kuma.io 19 | kubectl -n kong-mesh-system rollout status deployment/kong-mesh-control-plane 20 | 21 | echo ">>> Installing Prometheus" 22 | ${REPO_ROOT}/bin/kumactl install observability --components "prometheus" | kubectl apply -f - 23 | kubectl -n mesh-observability rollout status deployment/prometheus-server 24 | 25 | echo '>>> Installing Flagger' 26 | kubectl apply -k ${REPO_ROOT}/kustomize/kuma 27 | 28 | kubectl -n kong-mesh-system set image deployment/flagger flagger=test/flagger:latest 29 | kubectl -n kong-mesh-system rollout status deployment/flagger 30 | -------------------------------------------------------------------------------- /test/kuma/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | kubectl label namespace test kuma.io/sidecar-injection=enabled 12 | kubectl delete -n test ds podinfo-ds 13 | "$DIR"/test-canary.sh 14 | -------------------------------------------------------------------------------- /test/linkerd/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | # Delete Daemonset as it eats up precious CPU requests and we don't need it anyway. 12 | kubectl -n test delete ds podinfo-ds 13 | "$DIR"/test-canary.sh 14 | 15 | "$REPO_ROOT"/test/workloads/init.sh 16 | # Delete Daemonset as it eats up precious CPU requests and we don't need it anyway. 17 | kubectl -n test delete ds podinfo-ds 18 | "$DIR"/test-steps.sh 19 | -------------------------------------------------------------------------------- /test/nginx/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | NGINX_HELM_VERSION=4.1.3 # ingress v1.2.1 6 | REPO_ROOT=$(git rev-parse --show-toplevel) 7 | 8 | mkdir -p ${REPO_ROOT}/bin 9 | 10 | echo '>>> Installing NGINX Ingress' 11 | kubectl create ns ingress-nginx 12 | helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx 13 | helm upgrade -i ingress-nginx ingress-nginx/ingress-nginx --version=${NGINX_HELM_VERSION} \ 14 | --wait \ 15 | --namespace ingress-nginx \ 16 | --set controller.metrics.enabled=true \ 17 | --set controller.admissionWebhooks.enabled=true \ 18 | --set controller.podAnnotations."prometheus\.io/scrape"=true \ 19 | --set controller.podAnnotations."prometheus\.io/port"=10254 \ 20 | --set controller.service.type=NodePort 21 | 22 | kubectl -n ingress-nginx get all 23 | 24 | echo '>>> Installing Flagger' 25 | helm upgrade -i flagger ${REPO_ROOT}/charts/flagger \ 26 | --set crd.create=false \ 27 | --namespace ingress-nginx \ 28 | --set prometheus.install=true \ 29 | --set meshProvider=nginx 30 | 31 | kubectl -n ingress-nginx set image deployment/flagger flagger=test/flagger:latest 32 | 33 | kubectl -n ingress-nginx rollout status deployment/flagger 34 | kubectl -n ingress-nginx rollout status deployment/flagger-prometheus 35 | -------------------------------------------------------------------------------- /test/nginx/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-canary.sh 12 | "$REPO_ROOT"/test/workloads/init.sh 13 | "$DIR"/test-lifecycle.sh 14 | -------------------------------------------------------------------------------- /test/skipper/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | KUSTOMIZE_VERSION=3.8.2 6 | REPO_ROOT=$(git rev-parse --show-toplevel) 7 | 8 | mkdir -p ${REPO_ROOT}/bin 9 | 10 | echo '>>> Installing Kustomize' 11 | cd ${REPO_ROOT}/bin && kustomize_url=https://github.com/kubernetes-sigs/kustomize/releases/download && \ 12 | curl -sL ${kustomize_url}/kustomize%2Fv${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz | \ 13 | tar xz 14 | 15 | echo '>>> Installing Skipper' 16 | ${REPO_ROOT}/bin/kustomize build ${REPO_ROOT}/test/skipper | kubectl apply -f - 17 | 18 | kubectl -n kube-system rollout status deployment/skipper-ingress 19 | 20 | echo '>>> Installing Flagger' 21 | kubectl -n flagger-system set image deployment/flagger flagger=test/flagger:latest 22 | 23 | kubectl -n flagger-system rollout status deployment/flagger 24 | kubectl -n flagger-system rollout status deployment/flagger-prometheus 25 | -------------------------------------------------------------------------------- /test/skipper/namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: flagger-system 5 | -------------------------------------------------------------------------------- /test/skipper/patch.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: flagger 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: flagger 10 | args: 11 | - -log-level=debug 12 | - -mesh-provider=skipper 13 | - -metrics-server=http://flagger-prometheus:9090 14 | -------------------------------------------------------------------------------- /test/skipper/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-canary.sh 12 | -------------------------------------------------------------------------------- /test/traefik/install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | TRAEFIK_CHART_VERSION="24.0.0" # traefik 2.10.4 6 | REPO_ROOT=$(git rev-parse --show-toplevel) 7 | 8 | mkdir -p ${REPO_ROOT}/bin 9 | 10 | echo '>>> Creating traefik namespace' 11 | kubectl create ns traefik 12 | 13 | echo '>>> Installing Traefik' 14 | helm repo add traefik https://helm.traefik.io/traefik 15 | cat <>> Installing Flagger' 35 | helm upgrade -i flagger ${REPO_ROOT}/charts/flagger \ 36 | --set crd.create=false \ 37 | --namespace traefik \ 38 | --set prometheus.install=true \ 39 | --set meshProvider=traefik \ 40 | --set image.repository=test\/flagger \ 41 | --set image.tag=latest \ 42 | 43 | kubectl -n traefik rollout status deployment/flagger 44 | kubectl -n traefik rollout status deployment/flagger-prometheus 45 | -------------------------------------------------------------------------------- /test/traefik/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -o errexit 4 | 5 | REPO_ROOT=$(git rev-parse --show-toplevel) 6 | DIR="$(cd "$(dirname "$0")" && pwd)" 7 | 8 | "$DIR"/install.sh 9 | 10 | "$REPO_ROOT"/test/workloads/init.sh 11 | "$DIR"/test-canary.sh 12 | -------------------------------------------------------------------------------- /test/workloads/init.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script creates the test app and load tester 4 | 5 | set -o errexit 6 | 7 | REPO_ROOT=$(git rev-parse --show-toplevel) 8 | 9 | echo '>>> Delete test namespace' 10 | kubectl delete namespace test --ignore-not-found=true --wait=true 11 | 12 | echo '>>> Creating test namespace' 13 | kubectl create namespace test 14 | kubectl label namespace test istio-injection=enabled 15 | kubectl annotate namespace test linkerd.io/inject=enabled 16 | kubectl label namespace test kuma.io/sidecar-injection=enabled 17 | 18 | echo '>>> Installing the load tester' 19 | kubectl apply -k ${REPO_ROOT}/kustomize/tester 20 | kubectl -n test rollout status deployment/flagger-loadtester 21 | 22 | echo '>>> Deploy podinfo' 23 | kubectl apply -f ${REPO_ROOT}/test/workloads/secret.yaml -n test 24 | kubectl apply -f ${REPO_ROOT}/test/workloads/deployment.yaml -n test 25 | kubectl apply -f ${REPO_ROOT}/test/workloads/daemonset.yaml -n test 26 | -------------------------------------------------------------------------------- /test/workloads/secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: podinfo-secret 5 | stringData: 6 | value: s3cr3t 7 | --------------------------------------------------------------------------------