From d1b3caf106de1d1f329b7fb7ca39d5503c3a2b66 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Mon, 3 Feb 2025 23:52:01 -0500 Subject: [PATCH 01/20] wasi/k8s: add host module for doing k8 lookups --- Dockerfile.atc | 4 +- cmd/atc/internal/testing/Dockerfile.wasmcache | 12 +-- cmd/yokecd/main.go | 8 +- go.mod | 4 +- internal/atc/atc.go | 3 +- internal/wasi/wasi.go | 78 +++++++++++++++ internal/wasm/wasm.go | 94 +++++++++++++++++++ pkg/flight/wasi/k8s/errors.go | 42 +++++++++ pkg/flight/wasi/k8s/k8s.go | 50 ++++++++++ pkg/flight/wasi/malloc.go | 10 ++ pkg/yoke/wasm.go | 4 +- pkg/yoke/yoke_takeoff.go | 2 +- 12 files changed, 295 insertions(+), 16 deletions(-) create mode 100644 internal/wasm/wasm.go create mode 100644 pkg/flight/wasi/k8s/errors.go create mode 100644 pkg/flight/wasi/k8s/k8s.go create mode 100644 pkg/flight/wasi/malloc.go diff --git a/Dockerfile.atc b/Dockerfile.atc index f9288b4..cb349d6 100644 --- a/Dockerfile.atc +++ b/Dockerfile.atc @@ -4,13 +4,13 @@ WORKDIR /app COPY go.mod go.sum ./ -RUN go mod download +RUN GOTOOLCHAIN=auto go mod download COPY ./cmd/atc ./cmd/atc COPY ./internal ./internal COPY ./pkg ./pkg -RUN go build -o /bin/atc ./cmd/atc +RUN GOTOOLCHAIN=auto go build -o /bin/atc ./cmd/atc FROM alpine diff --git a/cmd/atc/internal/testing/Dockerfile.wasmcache b/cmd/atc/internal/testing/Dockerfile.wasmcache index b67711b..c9b0bbb 100644 --- a/cmd/atc/internal/testing/Dockerfile.wasmcache +++ b/cmd/atc/internal/testing/Dockerfile.wasmcache @@ -4,16 +4,16 @@ WORKDIR /app COPY go.mod go.sum ./ -RUN go mod download +RUN GOTOOLCHAIN=auto go mod download COPY . . RUN \ - GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.v1.wasm ./cmd/atc/internal/testing/apis/backend/v1/flight && \ - GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.v2.wasm ./cmd/atc/internal/testing/apis/backend/v2/flight && \ - GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.dev.wasm ./cmd/atc/internal/testing/apis/backend/v2/dev && \ - GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/converter.wasm ./cmd/atc/internal/testing/apis/backend/converter && \ - go build -o ./bin/server ./cmd/atc/internal/testing/wasmcache + GOTOOLCHAIN=auto GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.v1.wasm ./cmd/atc/internal/testing/apis/backend/v1/flight && \ + GOTOOLCHAIN=auto GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.v2.wasm ./cmd/atc/internal/testing/apis/backend/v2/flight && \ + GOTOOLCHAIN=auto GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.dev.wasm ./cmd/atc/internal/testing/apis/backend/v2/dev && \ + GOTOOLCHAIN=auto GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/converter.wasm ./cmd/atc/internal/testing/apis/backend/converter && \ + GOTOOLCHAIN=auto go build -o ./bin/server ./cmd/atc/internal/testing/wasmcache FROM alpine diff --git a/cmd/yokecd/main.go b/cmd/yokecd/main.go index 82c7ecb..ee464ea 100644 --- a/cmd/yokecd/main.go +++ b/cmd/yokecd/main.go @@ -16,10 +16,10 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/util/yaml" - "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "github.com/yokecd/yoke/internal" + "github.com/yokecd/yoke/internal/k8s" "github.com/yokecd/yoke/pkg/yoke" ) @@ -49,14 +49,14 @@ func run(ctx context.Context, cfg Config) (err error) { return fmt.Errorf("failed to get in cluster config: %w", err) } - clientset, err := kubernetes.NewForConfig(rest) + client, err := k8s.NewClient(rest) if err != nil { return fmt.Errorf("failed to instantiate kubernetes clientset: %w", err) } secrets := make(map[string]string, len(cfg.Flight.Refs)) for name, ref := range cfg.Flight.Refs { - secret, err := clientset.CoreV1().Secrets(cmp.Or(ref.Namespace, cfg.Namespace)).Get(ctx, ref.Secret, v1.GetOptions{}) + secret, err := client.Clientset.CoreV1().Secrets(cmp.Or(ref.Namespace, cfg.Namespace)).Get(ctx, ref.Secret, v1.GetOptions{}) if err != nil { return fmt.Errorf("failed to get secret reference %q: %w", ref.Secret, err) } @@ -99,7 +99,7 @@ func run(ctx context.Context, cfg Config) (err error) { return nil, fmt.Errorf("failed to get wasm path: %w", err) } - data, _, err := yoke.EvalFlight(ctx, cfg.Application.Name, yoke.FlightParams{ + data, _, err := yoke.EvalFlight(ctx, client, cfg.Application.Name, yoke.FlightParams{ Path: wasmPath, Input: strings.NewReader(cfg.Flight.Input), Args: cfg.Flight.Args, diff --git a/go.mod b/go.mod index 8684e45..ba321c5 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/yokecd/yoke -go 1.23.0 +// TODO: use go1.24.0 once it is released. Blocker for releasing this feature. +// It is needed for the go:wasmexport directive. +go 1.24rc2 require ( github.com/alecthomas/chroma/v2 v2.15.0 diff --git a/internal/atc/atc.go b/internal/atc/atc.go index da2e9d3..c0482e9 100644 --- a/internal/atc/atc.go +++ b/internal/atc/atc.go @@ -203,7 +203,8 @@ func (atc atc) Reconcile(ctx context.Context, event ctrl.Event) (result ctrl.Res return fmt.Errorf("failed to load wasm: %w", err) } mod, err := wasi.Compile(ctx, wasi.CompileParams{ - Wasm: data, + Wasm: data, + Client: ctrl.Client(ctx), }) if err != nil { return fmt.Errorf("failed to compile wasm: %w", err) diff --git a/internal/wasi/wasi.go b/internal/wasi/wasi.go index 8468b0b..4c3e01e 100644 --- a/internal/wasi/wasi.go +++ b/internal/wasi/wasi.go @@ -2,6 +2,7 @@ package wasi import ( "bytes" + "cmp" "context" "crypto/rand" "fmt" @@ -9,11 +10,21 @@ import ( "reflect" "github.com/tetratelabs/wazero" + "github.com/tetratelabs/wazero/api" "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/dynamic" + "github.com/davidmdm/x/xerr" + kerrors "k8s.io/apimachinery/pkg/api/errors" + "github.com/yokecd/yoke/internal" + "github.com/yokecd/yoke/internal/k8s" + "github.com/yokecd/yoke/internal/wasm" ) type ExecParams struct { @@ -24,6 +35,7 @@ type ExecParams struct { Args []string Env map[string]string CacheDir string + Client *k8s.Client } func Execute(ctx context.Context, params ExecParams) (output []byte, err error) { @@ -36,6 +48,7 @@ func Execute(ctx context.Context, params ExecParams) (output []byte, err error) mod, err := Compile(ctx, CompileParams{ Wasm: params.Wasm, CacheDir: params.CacheDir, + Client: params.Client, }) if err != nil { return nil, nil, fmt.Errorf("failed to compile module: %w", err) @@ -89,6 +102,7 @@ func Execute(ctx context.Context, params ExecParams) (output []byte, err error) type CompileParams struct { Wasm []byte CacheDir string + Client *k8s.Client } type Module struct { @@ -143,6 +157,70 @@ func Compile(ctx context.Context, params CompileParams) (Module, error) { runtime := wazero.NewRuntimeWithConfig(ctx, cfg) + hostModule := runtime.NewHostModuleBuilder("host") + + for name, fn := range map[string]any{ + "k8s_lookup": func(ctx context.Context, module api.Module, stateRef wasm.Ptr, name, namespace, kind, apiVersion wasm.String) wasm.Buffer { + gv, err := schema.ParseGroupVersion(apiVersion.Load(module)) + if err != nil { + return wasm.Error(ctx, module, stateRef, wasm.StateError, err.Error()) + } + + mapping, err := params.Client.Mapper.RESTMapping(schema.GroupKind{Group: gv.Group, Kind: kind.Load(module)}, gv.Version) + if err != nil { + return wasm.Error(ctx, module, stateRef, wasm.StateError, err.Error()) + } + + intf := func() dynamic.ResourceInterface { + intf := params.Client.Dynamic.Resource(mapping.Resource) + if mapping.Scope == meta.RESTScopeNamespace { + return intf.Namespace(cmp.Or(namespace.Load(module), "default")) + } + return intf + }() + + resource, err := intf.Get(ctx, name.Load(module), metav1.GetOptions{}) + if err != nil { + errState := func() wasm.State { + switch { + case kerrors.IsNotFound(err): + return wasm.StateNotFound + case kerrors.IsForbidden(err): + return wasm.StateForbidden + case kerrors.IsUnauthorized(err): + return wasm.StateUnauthenticated + default: + return wasm.StateError + } + }() + return wasm.Error(ctx, module, stateRef, errState, err.Error()) + } + + data, err := resource.MarshalJSON() + if err != nil { + return wasm.Error(ctx, module, stateRef, wasm.StateError, err.Error()) + } + + results, err := module.ExportedFunction("malloc").Call(ctx, uint64(len(data))) + if err != nil { + // if we cannot malloc, let's crash with gumption. + panic(err) + } + + buffer := wasm.Buffer(results[0]) + + module.Memory().Write(buffer.Address(), data) + + return buffer + }, + } { + hostModule = hostModule.NewFunctionBuilder().WithFunc(fn).Export(name) + } + + if _, err := hostModule.Instantiate(ctx); err != nil { + return Module{}, fmt.Errorf("failed to instantiate host module: %w", err) + } + wasi_snapshot_preview1.MustInstantiate(ctx, runtime) mod, err := runtime.CompileModule(ctx, params.Wasm) diff --git a/internal/wasm/wasm.go b/internal/wasm/wasm.go new file mode 100644 index 0000000..6b8ebd2 --- /dev/null +++ b/internal/wasm/wasm.go @@ -0,0 +1,94 @@ +package wasm + +import ( + "cmp" + "context" + "unsafe" + + "github.com/tetratelabs/wazero/api" +) + +type ( + String uint64 + Buffer uint64 + Ptr uint32 +) + +// State is used to convey the state of a host module function call. Given that a host function +// will generally do something the wasm module cannot do, it will likely do some sort of IO. +// This means that the call can either succeed or fail with some error. This allows us to interpret +// the returned memory buffer as either containing a value or an error. +// +// State is a uint32 allowing us to define well-known generic errors that packages can use to express semantic meaning. +// It is not exhaustive. As new use cases are added, we can add new semantic errors. +// +// Currently the only host function we expose is k8s.Lookup, this means means the host function can set any of the below states +// and the k8s package can use them to return meaningful error types to the user that they can in turn act upon. +type State uint32 + +const ( + StateOK State = iota + StateError + StateNotFound + StateUnauthenticated + StateForbidden +) + +func PtrTo[T any](value *T) Ptr { + return Ptr(uintptr(unsafe.Pointer(value))) +} + +func Malloc(ctx context.Context, module api.Module, data []byte) Buffer { + results, err := module.ExportedFunction("malloc").Call(ctx, uint64(len(data))) + if err != nil { + panic(err) + } + buffer := Buffer(results[0]) + module.Memory().Write(buffer.Address(), data) + return buffer +} + +func Error(ctx context.Context, module api.Module, ptr Ptr, state State, err string) Buffer { + mem := module.Memory() + mem.WriteUint32Le(uint32(ptr), uint32(cmp.Or(state, StateError))) + return Malloc(ctx, module, []byte(err)) +} + +func (value String) Load(module api.Module) string { + return string(value.LoadBytes(module)) +} + +func (value String) LoadBytes(module api.Module) []byte { + data, ok := module.Memory().Read(uint32(value>>32), uint32(value)) + if !ok { + panic("memory read out of bounds") + } + return data +} + +func FromString(value string) String { + position := uint32(uintptr(unsafe.Pointer(unsafe.StringData(value)))) + bytes := uint32(len(value)) + return String(uint64(position)<<32 | uint64(bytes)) +} + +func FromSlice(value []byte) Buffer { + ptr := uint64(uintptr(unsafe.Pointer(&value[0]))) + return Buffer(ptr<<32 | uint64(len(value))) +} + +func (buffer Buffer) Address() uint32 { + return uint32(buffer >> 32) +} + +func (buffer Buffer) Length() uint32 { + return uint32((buffer << 32) >> 32) +} + +func (buffer Buffer) Slice() []byte { + return unsafe.Slice((*byte)(unsafe.Pointer(uintptr(buffer.Address()))), buffer.Length()) +} + +func (buffer Buffer) String() string { + return unsafe.String((*byte)(unsafe.Pointer(uintptr(buffer.Address()))), buffer.Length()) +} diff --git a/pkg/flight/wasi/k8s/errors.go b/pkg/flight/wasi/k8s/errors.go new file mode 100644 index 0000000..5aa2abe --- /dev/null +++ b/pkg/flight/wasi/k8s/errors.go @@ -0,0 +1,42 @@ +package k8s + +import "errors" + +type ErrorNotFound string + +func (err ErrorNotFound) Error() string { return string(err) } + +func (ErrorNotFound) Is(target error) bool { + _, ok := target.(ErrorNotFound) + return ok +} + +func IsErrNotFound(err error) bool { + return errors.Is(err, ErrorNotFound("")) +} + +type ErrorUnauthenticated string + +func (err ErrorUnauthenticated) Error() string { return string(err) } + +func (ErrorUnauthenticated) Is(target error) bool { + _, ok := target.(ErrorUnauthenticated) + return ok +} + +func IsErrUnauthenticated(err error) bool { + return errors.Is(err, ErrorUnauthenticated("")) +} + +type ErrorForbidden string + +func (err ErrorForbidden) Error() string { return string(err) } + +func (ErrorForbidden) Is(target error) bool { + _, ok := target.(ErrorForbidden) + return ok +} + +func IsErrForbidden(err error) bool { + return errors.Is(err, ErrorForbidden("")) +} diff --git a/pkg/flight/wasi/k8s/k8s.go b/pkg/flight/wasi/k8s/k8s.go new file mode 100644 index 0000000..001c5df --- /dev/null +++ b/pkg/flight/wasi/k8s/k8s.go @@ -0,0 +1,50 @@ +package k8s + +import ( + "encoding/json" + "errors" + + "github.com/yokecd/yoke/internal/wasm" + + // Make sure to include wasi as it contains necessary "malloc" export that will be needed + // for the host to allocate a wasm.Buffer. IE: any wasm module that uses this package exports wasi.malloc + _ "github.com/yokecd/yoke/pkg/flight/wasi" +) + +//go:wasmimport host k8s_lookup +func lookup(ptr wasm.Ptr, name, namespace, kind, apiversion wasm.String) wasm.Buffer + +type ResourceIdentifier struct { + Name string + Namespace string + Kind string + ApiVersion string +} + +func Lookup(identifier ResourceIdentifier, resource any) error { + var state wasm.State + + buffer := lookup( + wasm.PtrTo(&state), + wasm.FromString(identifier.Name), + wasm.FromString(identifier.Namespace), + wasm.FromString(identifier.Kind), + wasm.FromString(identifier.ApiVersion), + ) + + switch state { + case wasm.StateOK: + return json.Unmarshal(buffer.Slice(), &resource) + case wasm.StateError: + return errors.New(buffer.String()) + case wasm.StateForbidden: + return ErrorForbidden(buffer.String()) + case wasm.StateNotFound: + return ErrorNotFound(buffer.String()) + case wasm.StateUnauthenticated: + return ErrorUnauthenticated(buffer.String()) + + default: + panic("unknown state") + } +} diff --git a/pkg/flight/wasi/malloc.go b/pkg/flight/wasi/malloc.go new file mode 100644 index 0000000..96ad173 --- /dev/null +++ b/pkg/flight/wasi/malloc.go @@ -0,0 +1,10 @@ +// wasi exports essentials from the wasm client-side for working with wasm from the host. +// It exports a "malloc" func to let hosts allocate memory within the wasm module. +package wasi + +import "github.com/yokecd/yoke/internal/wasm" + +//go:wasmexport malloc +func malloc(size uint32) wasm.Buffer { + return wasm.FromSlice(make([]byte, size)) +} diff --git a/pkg/yoke/wasm.go b/pkg/yoke/wasm.go index 08895f3..766adef 100644 --- a/pkg/yoke/wasm.go +++ b/pkg/yoke/wasm.go @@ -16,6 +16,7 @@ import ( "github.com/davidmdm/x/xerr" "github.com/yokecd/yoke/internal" + "github.com/yokecd/yoke/internal/k8s" "github.com/yokecd/yoke/internal/wasi" ) @@ -92,7 +93,7 @@ func gzipReader(r io.Reader) io.Reader { return pr } -func EvalFlight(ctx context.Context, release string, flight FlightParams) ([]byte, []byte, error) { +func EvalFlight(ctx context.Context, client *k8s.Client, release string, flight FlightParams) ([]byte, []byte, error) { if flight.Input != nil && flight.Path == "" && flight.Module == nil { output, err := io.ReadAll(flight.Input) return output, nil, err @@ -120,6 +121,7 @@ func EvalFlight(ctx context.Context, release string, flight FlightParams) ([]byt "NAMESPACE": flight.Namespace, }, CacheDir: flight.CompilationCacheDir, + Client: client, }) if err != nil { return nil, nil, fmt.Errorf("failed to execute wasm: %w", err) diff --git a/pkg/yoke/yoke_takeoff.go b/pkg/yoke/yoke_takeoff.go index 7328f05..9d5d9ea 100644 --- a/pkg/yoke/yoke_takeoff.go +++ b/pkg/yoke/yoke_takeoff.go @@ -88,7 +88,7 @@ type TakeoffParams struct { func (commander Commander) Takeoff(ctx context.Context, params TakeoffParams) error { defer internal.DebugTimer(ctx, "takeoff of "+params.Release)() - output, wasm, err := EvalFlight(ctx, params.Release, params.Flight) + output, wasm, err := EvalFlight(ctx, commander.k8s, params.Release, params.Flight) if err != nil { return fmt.Errorf("failed to evaluate flight: %w", err) } From ec40b78f455677c0ed6905ea058cb82fa2c62002 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Tue, 4 Feb 2025 14:27:49 -0500 Subject: [PATCH 02/20] examples: move examples directory from cmd/examples to top level examples --- Taskfile.yml | 6 +++--- {cmd/examples => examples}/argocd/install.yaml | 0 {cmd/examples => examples}/argocd/main.go | 0 .../internal/flights/argocd/6.6.0/argo-cd-6.6.0.tgz | Bin .../internal/flights/argocd/6.6.0/flight.go | 0 .../internal/flights/argocd/argo-cd-6.7.2.tgz | Bin .../internal/flights/argocd/flight.go | 0 .../internal/flights/mongodb/flight.go | 0 .../internal/flights/mongodb/mongodb-14.13.0.tgz | Bin .../internal/flights/mongodb/values.go | 0 .../internal/flights/postgresql/flight.go | 0 .../flights/postgresql/postgresql-14.2.3.tgz | Bin .../internal/flights/postgresql/values.go | 0 .../internal/flights/redis/flight.go | 0 .../internal/flights/redis/redis-18.17.0.tgz | Bin .../internal/flights/redis/values.go | 0 {cmd/examples => examples}/kube/main.go | 0 {cmd/examples => examples}/mongodb/main.go | 0 {cmd/examples => examples}/pg/main.go | 0 .../examples => examples}/pg/postgresql/.helmignore | 0 {cmd/examples => examples}/pg/postgresql/Chart.lock | 0 {cmd/examples => examples}/pg/postgresql/Chart.yaml | 0 {cmd/examples => examples}/pg/postgresql/README.md | 0 .../pg/postgresql/charts/common/.helmignore | 0 .../pg/postgresql/charts/common/Chart.yaml | 0 .../pg/postgresql/charts/common/README.md | 0 .../charts/common/templates/_affinities.tpl | 0 .../charts/common/templates/_capabilities.tpl | 0 .../postgresql/charts/common/templates/_errors.tpl | 0 .../postgresql/charts/common/templates/_images.tpl | 0 .../postgresql/charts/common/templates/_ingress.tpl | 0 .../postgresql/charts/common/templates/_labels.tpl | 0 .../postgresql/charts/common/templates/_names.tpl | 0 .../charts/common/templates/_resources.tpl | 0 .../postgresql/charts/common/templates/_secrets.tpl | 0 .../postgresql/charts/common/templates/_storage.tpl | 0 .../charts/common/templates/_tplvalues.tpl | 0 .../postgresql/charts/common/templates/_utils.tpl | 0 .../charts/common/templates/_warnings.tpl | 0 .../common/templates/validations/_cassandra.tpl | 0 .../common/templates/validations/_mariadb.tpl | 0 .../common/templates/validations/_mongodb.tpl | 0 .../charts/common/templates/validations/_mysql.tpl | 0 .../common/templates/validations/_postgresql.tpl | 0 .../charts/common/templates/validations/_redis.tpl | 0 .../common/templates/validations/_validations.tpl | 0 .../pg/postgresql/charts/common/values.yaml | 0 .../pg/postgresql/templates/NOTES.txt | 0 .../pg/postgresql/templates/_helpers.tpl | 0 .../pg/postgresql/templates/backup/cronjob.yaml | 0 .../pg/postgresql/templates/backup/pvc.yaml | 0 .../pg/postgresql/templates/extra-list.yaml | 0 .../pg/postgresql/templates/primary/configmap.yaml | 0 .../templates/primary/extended-configmap.yaml | 0 .../templates/primary/initialization-configmap.yaml | 0 .../templates/primary/metrics-configmap.yaml | 0 .../postgresql/templates/primary/metrics-svc.yaml | 0 .../postgresql/templates/primary/networkpolicy.yaml | 0 .../templates/primary/servicemonitor.yaml | 0 .../postgresql/templates/primary/statefulset.yaml | 0 .../postgresql/templates/primary/svc-headless.yaml | 0 .../pg/postgresql/templates/primary/svc.yaml | 0 .../pg/postgresql/templates/prometheusrule.yaml | 0 .../pg/postgresql/templates/psp.yaml | 0 .../templates/read/extended-configmap.yaml | 0 .../templates/read/metrics-configmap.yaml | 0 .../pg/postgresql/templates/read/metrics-svc.yaml | 0 .../pg/postgresql/templates/read/networkpolicy.yaml | 0 .../postgresql/templates/read/servicemonitor.yaml | 0 .../pg/postgresql/templates/read/statefulset.yaml | 0 .../pg/postgresql/templates/read/svc-headless.yaml | 0 .../pg/postgresql/templates/read/svc.yaml | 0 .../pg/postgresql/templates/role.yaml | 0 .../pg/postgresql/templates/rolebinding.yaml | 0 .../pg/postgresql/templates/secrets.yaml | 0 .../pg/postgresql/templates/serviceaccount.yaml | 0 .../pg/postgresql/templates/tls-secrets.yaml | 0 .../pg/postgresql/values.schema.json | 0 .../examples => examples}/pg/postgresql/values.yaml | 0 {cmd/examples => examples}/pg/values.go | 0 {cmd/examples => examples}/redis/main.go | 0 81 files changed, 3 insertions(+), 3 deletions(-) rename {cmd/examples => examples}/argocd/install.yaml (100%) rename {cmd/examples => examples}/argocd/main.go (100%) rename {cmd/examples => examples}/internal/flights/argocd/6.6.0/argo-cd-6.6.0.tgz (100%) rename {cmd/examples => examples}/internal/flights/argocd/6.6.0/flight.go (100%) rename {cmd/examples => examples}/internal/flights/argocd/argo-cd-6.7.2.tgz (100%) rename {cmd/examples => examples}/internal/flights/argocd/flight.go (100%) rename {cmd/examples => examples}/internal/flights/mongodb/flight.go (100%) rename {cmd/examples => examples}/internal/flights/mongodb/mongodb-14.13.0.tgz (100%) rename {cmd/examples => examples}/internal/flights/mongodb/values.go (100%) rename {cmd/examples => examples}/internal/flights/postgresql/flight.go (100%) rename {cmd/examples => examples}/internal/flights/postgresql/postgresql-14.2.3.tgz (100%) rename {cmd/examples => examples}/internal/flights/postgresql/values.go (100%) rename {cmd/examples => examples}/internal/flights/redis/flight.go (100%) rename {cmd/examples => examples}/internal/flights/redis/redis-18.17.0.tgz (100%) rename {cmd/examples => examples}/internal/flights/redis/values.go (100%) rename {cmd/examples => examples}/kube/main.go (100%) rename {cmd/examples => examples}/mongodb/main.go (100%) rename {cmd/examples => examples}/pg/main.go (100%) rename {cmd/examples => examples}/pg/postgresql/.helmignore (100%) rename {cmd/examples => examples}/pg/postgresql/Chart.lock (100%) rename {cmd/examples => examples}/pg/postgresql/Chart.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/README.md (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/.helmignore (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/Chart.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/README.md (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_affinities.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_capabilities.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_errors.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_images.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_ingress.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_labels.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_names.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_resources.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_secrets.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_storage.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_tplvalues.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_utils.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/_warnings.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/validations/_cassandra.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/validations/_mariadb.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/validations/_mongodb.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/validations/_mysql.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/validations/_postgresql.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/validations/_redis.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/templates/validations/_validations.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/charts/common/values.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/NOTES.txt (100%) rename {cmd/examples => examples}/pg/postgresql/templates/_helpers.tpl (100%) rename {cmd/examples => examples}/pg/postgresql/templates/backup/cronjob.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/backup/pvc.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/extra-list.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/configmap.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/extended-configmap.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/initialization-configmap.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/metrics-configmap.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/metrics-svc.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/networkpolicy.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/servicemonitor.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/statefulset.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/svc-headless.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/primary/svc.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/prometheusrule.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/psp.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/read/extended-configmap.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/read/metrics-configmap.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/read/metrics-svc.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/read/networkpolicy.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/read/servicemonitor.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/read/statefulset.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/read/svc-headless.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/read/svc.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/role.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/rolebinding.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/secrets.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/serviceaccount.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/templates/tls-secrets.yaml (100%) rename {cmd/examples => examples}/pg/postgresql/values.schema.json (100%) rename {cmd/examples => examples}/pg/postgresql/values.yaml (100%) rename {cmd/examples => examples}/pg/values.go (100%) rename {cmd/examples => examples}/redis/main.go (100%) diff --git a/Taskfile.yml b/Taskfile.yml index de4f11c..434c1ce 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -46,12 +46,12 @@ tasks: kube: cmds: - - GOOS=wasip1 GOARCH=wasm go build -o kube.wasm ./cmd/examples/kube + - GOOS=wasip1 GOARCH=wasm go build -o kube.wasm ./examples/kube pg: cmds: - - GOOS=wasip1 GOARCH=wasm go build -o pg.wasm ./cmd/examples/pg + - GOOS=wasip1 GOARCH=wasm go build -o pg.wasm ./examples/pg redis: cmds: - - GOOS=wasip1 GOARCH=wasm go build -o redis.wasm ./cmd/examples/redis + - GOOS=wasip1 GOARCH=wasm go build -o redis.wasm ./examples/redis diff --git a/cmd/examples/argocd/install.yaml b/examples/argocd/install.yaml similarity index 100% rename from cmd/examples/argocd/install.yaml rename to examples/argocd/install.yaml diff --git a/cmd/examples/argocd/main.go b/examples/argocd/main.go similarity index 100% rename from cmd/examples/argocd/main.go rename to examples/argocd/main.go diff --git a/cmd/examples/internal/flights/argocd/6.6.0/argo-cd-6.6.0.tgz b/examples/internal/flights/argocd/6.6.0/argo-cd-6.6.0.tgz similarity index 100% rename from cmd/examples/internal/flights/argocd/6.6.0/argo-cd-6.6.0.tgz rename to examples/internal/flights/argocd/6.6.0/argo-cd-6.6.0.tgz diff --git a/cmd/examples/internal/flights/argocd/6.6.0/flight.go b/examples/internal/flights/argocd/6.6.0/flight.go similarity index 100% rename from cmd/examples/internal/flights/argocd/6.6.0/flight.go rename to examples/internal/flights/argocd/6.6.0/flight.go diff --git a/cmd/examples/internal/flights/argocd/argo-cd-6.7.2.tgz b/examples/internal/flights/argocd/argo-cd-6.7.2.tgz similarity index 100% rename from cmd/examples/internal/flights/argocd/argo-cd-6.7.2.tgz rename to examples/internal/flights/argocd/argo-cd-6.7.2.tgz diff --git a/cmd/examples/internal/flights/argocd/flight.go b/examples/internal/flights/argocd/flight.go similarity index 100% rename from cmd/examples/internal/flights/argocd/flight.go rename to examples/internal/flights/argocd/flight.go diff --git a/cmd/examples/internal/flights/mongodb/flight.go b/examples/internal/flights/mongodb/flight.go similarity index 100% rename from cmd/examples/internal/flights/mongodb/flight.go rename to examples/internal/flights/mongodb/flight.go diff --git a/cmd/examples/internal/flights/mongodb/mongodb-14.13.0.tgz b/examples/internal/flights/mongodb/mongodb-14.13.0.tgz similarity index 100% rename from cmd/examples/internal/flights/mongodb/mongodb-14.13.0.tgz rename to examples/internal/flights/mongodb/mongodb-14.13.0.tgz diff --git a/cmd/examples/internal/flights/mongodb/values.go b/examples/internal/flights/mongodb/values.go similarity index 100% rename from cmd/examples/internal/flights/mongodb/values.go rename to examples/internal/flights/mongodb/values.go diff --git a/cmd/examples/internal/flights/postgresql/flight.go b/examples/internal/flights/postgresql/flight.go similarity index 100% rename from cmd/examples/internal/flights/postgresql/flight.go rename to examples/internal/flights/postgresql/flight.go diff --git a/cmd/examples/internal/flights/postgresql/postgresql-14.2.3.tgz b/examples/internal/flights/postgresql/postgresql-14.2.3.tgz similarity index 100% rename from cmd/examples/internal/flights/postgresql/postgresql-14.2.3.tgz rename to examples/internal/flights/postgresql/postgresql-14.2.3.tgz diff --git a/cmd/examples/internal/flights/postgresql/values.go b/examples/internal/flights/postgresql/values.go similarity index 100% rename from cmd/examples/internal/flights/postgresql/values.go rename to examples/internal/flights/postgresql/values.go diff --git a/cmd/examples/internal/flights/redis/flight.go b/examples/internal/flights/redis/flight.go similarity index 100% rename from cmd/examples/internal/flights/redis/flight.go rename to examples/internal/flights/redis/flight.go diff --git a/cmd/examples/internal/flights/redis/redis-18.17.0.tgz b/examples/internal/flights/redis/redis-18.17.0.tgz similarity index 100% rename from cmd/examples/internal/flights/redis/redis-18.17.0.tgz rename to examples/internal/flights/redis/redis-18.17.0.tgz diff --git a/cmd/examples/internal/flights/redis/values.go b/examples/internal/flights/redis/values.go similarity index 100% rename from cmd/examples/internal/flights/redis/values.go rename to examples/internal/flights/redis/values.go diff --git a/cmd/examples/kube/main.go b/examples/kube/main.go similarity index 100% rename from cmd/examples/kube/main.go rename to examples/kube/main.go diff --git a/cmd/examples/mongodb/main.go b/examples/mongodb/main.go similarity index 100% rename from cmd/examples/mongodb/main.go rename to examples/mongodb/main.go diff --git a/cmd/examples/pg/main.go b/examples/pg/main.go similarity index 100% rename from cmd/examples/pg/main.go rename to examples/pg/main.go diff --git a/cmd/examples/pg/postgresql/.helmignore b/examples/pg/postgresql/.helmignore similarity index 100% rename from cmd/examples/pg/postgresql/.helmignore rename to examples/pg/postgresql/.helmignore diff --git a/cmd/examples/pg/postgresql/Chart.lock b/examples/pg/postgresql/Chart.lock similarity index 100% rename from cmd/examples/pg/postgresql/Chart.lock rename to examples/pg/postgresql/Chart.lock diff --git a/cmd/examples/pg/postgresql/Chart.yaml b/examples/pg/postgresql/Chart.yaml similarity index 100% rename from cmd/examples/pg/postgresql/Chart.yaml rename to examples/pg/postgresql/Chart.yaml diff --git a/cmd/examples/pg/postgresql/README.md b/examples/pg/postgresql/README.md similarity index 100% rename from cmd/examples/pg/postgresql/README.md rename to examples/pg/postgresql/README.md diff --git a/cmd/examples/pg/postgresql/charts/common/.helmignore b/examples/pg/postgresql/charts/common/.helmignore similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/.helmignore rename to examples/pg/postgresql/charts/common/.helmignore diff --git a/cmd/examples/pg/postgresql/charts/common/Chart.yaml b/examples/pg/postgresql/charts/common/Chart.yaml similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/Chart.yaml rename to examples/pg/postgresql/charts/common/Chart.yaml diff --git a/cmd/examples/pg/postgresql/charts/common/README.md b/examples/pg/postgresql/charts/common/README.md similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/README.md rename to examples/pg/postgresql/charts/common/README.md diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_affinities.tpl b/examples/pg/postgresql/charts/common/templates/_affinities.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_affinities.tpl rename to examples/pg/postgresql/charts/common/templates/_affinities.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_capabilities.tpl b/examples/pg/postgresql/charts/common/templates/_capabilities.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_capabilities.tpl rename to examples/pg/postgresql/charts/common/templates/_capabilities.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_errors.tpl b/examples/pg/postgresql/charts/common/templates/_errors.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_errors.tpl rename to examples/pg/postgresql/charts/common/templates/_errors.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_images.tpl b/examples/pg/postgresql/charts/common/templates/_images.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_images.tpl rename to examples/pg/postgresql/charts/common/templates/_images.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_ingress.tpl b/examples/pg/postgresql/charts/common/templates/_ingress.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_ingress.tpl rename to examples/pg/postgresql/charts/common/templates/_ingress.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_labels.tpl b/examples/pg/postgresql/charts/common/templates/_labels.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_labels.tpl rename to examples/pg/postgresql/charts/common/templates/_labels.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_names.tpl b/examples/pg/postgresql/charts/common/templates/_names.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_names.tpl rename to examples/pg/postgresql/charts/common/templates/_names.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_resources.tpl b/examples/pg/postgresql/charts/common/templates/_resources.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_resources.tpl rename to examples/pg/postgresql/charts/common/templates/_resources.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_secrets.tpl b/examples/pg/postgresql/charts/common/templates/_secrets.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_secrets.tpl rename to examples/pg/postgresql/charts/common/templates/_secrets.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_storage.tpl b/examples/pg/postgresql/charts/common/templates/_storage.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_storage.tpl rename to examples/pg/postgresql/charts/common/templates/_storage.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_tplvalues.tpl b/examples/pg/postgresql/charts/common/templates/_tplvalues.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_tplvalues.tpl rename to examples/pg/postgresql/charts/common/templates/_tplvalues.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_utils.tpl b/examples/pg/postgresql/charts/common/templates/_utils.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_utils.tpl rename to examples/pg/postgresql/charts/common/templates/_utils.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/_warnings.tpl b/examples/pg/postgresql/charts/common/templates/_warnings.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/_warnings.tpl rename to examples/pg/postgresql/charts/common/templates/_warnings.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/validations/_cassandra.tpl b/examples/pg/postgresql/charts/common/templates/validations/_cassandra.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/validations/_cassandra.tpl rename to examples/pg/postgresql/charts/common/templates/validations/_cassandra.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/validations/_mariadb.tpl b/examples/pg/postgresql/charts/common/templates/validations/_mariadb.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/validations/_mariadb.tpl rename to examples/pg/postgresql/charts/common/templates/validations/_mariadb.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/validations/_mongodb.tpl b/examples/pg/postgresql/charts/common/templates/validations/_mongodb.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/validations/_mongodb.tpl rename to examples/pg/postgresql/charts/common/templates/validations/_mongodb.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/validations/_mysql.tpl b/examples/pg/postgresql/charts/common/templates/validations/_mysql.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/validations/_mysql.tpl rename to examples/pg/postgresql/charts/common/templates/validations/_mysql.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/validations/_postgresql.tpl b/examples/pg/postgresql/charts/common/templates/validations/_postgresql.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/validations/_postgresql.tpl rename to examples/pg/postgresql/charts/common/templates/validations/_postgresql.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/validations/_redis.tpl b/examples/pg/postgresql/charts/common/templates/validations/_redis.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/validations/_redis.tpl rename to examples/pg/postgresql/charts/common/templates/validations/_redis.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/templates/validations/_validations.tpl b/examples/pg/postgresql/charts/common/templates/validations/_validations.tpl similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/templates/validations/_validations.tpl rename to examples/pg/postgresql/charts/common/templates/validations/_validations.tpl diff --git a/cmd/examples/pg/postgresql/charts/common/values.yaml b/examples/pg/postgresql/charts/common/values.yaml similarity index 100% rename from cmd/examples/pg/postgresql/charts/common/values.yaml rename to examples/pg/postgresql/charts/common/values.yaml diff --git a/cmd/examples/pg/postgresql/templates/NOTES.txt b/examples/pg/postgresql/templates/NOTES.txt similarity index 100% rename from cmd/examples/pg/postgresql/templates/NOTES.txt rename to examples/pg/postgresql/templates/NOTES.txt diff --git a/cmd/examples/pg/postgresql/templates/_helpers.tpl b/examples/pg/postgresql/templates/_helpers.tpl similarity index 100% rename from cmd/examples/pg/postgresql/templates/_helpers.tpl rename to examples/pg/postgresql/templates/_helpers.tpl diff --git a/cmd/examples/pg/postgresql/templates/backup/cronjob.yaml b/examples/pg/postgresql/templates/backup/cronjob.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/backup/cronjob.yaml rename to examples/pg/postgresql/templates/backup/cronjob.yaml diff --git a/cmd/examples/pg/postgresql/templates/backup/pvc.yaml b/examples/pg/postgresql/templates/backup/pvc.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/backup/pvc.yaml rename to examples/pg/postgresql/templates/backup/pvc.yaml diff --git a/cmd/examples/pg/postgresql/templates/extra-list.yaml b/examples/pg/postgresql/templates/extra-list.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/extra-list.yaml rename to examples/pg/postgresql/templates/extra-list.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/configmap.yaml b/examples/pg/postgresql/templates/primary/configmap.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/configmap.yaml rename to examples/pg/postgresql/templates/primary/configmap.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/extended-configmap.yaml b/examples/pg/postgresql/templates/primary/extended-configmap.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/extended-configmap.yaml rename to examples/pg/postgresql/templates/primary/extended-configmap.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/initialization-configmap.yaml b/examples/pg/postgresql/templates/primary/initialization-configmap.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/initialization-configmap.yaml rename to examples/pg/postgresql/templates/primary/initialization-configmap.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/metrics-configmap.yaml b/examples/pg/postgresql/templates/primary/metrics-configmap.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/metrics-configmap.yaml rename to examples/pg/postgresql/templates/primary/metrics-configmap.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/metrics-svc.yaml b/examples/pg/postgresql/templates/primary/metrics-svc.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/metrics-svc.yaml rename to examples/pg/postgresql/templates/primary/metrics-svc.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/networkpolicy.yaml b/examples/pg/postgresql/templates/primary/networkpolicy.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/networkpolicy.yaml rename to examples/pg/postgresql/templates/primary/networkpolicy.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/servicemonitor.yaml b/examples/pg/postgresql/templates/primary/servicemonitor.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/servicemonitor.yaml rename to examples/pg/postgresql/templates/primary/servicemonitor.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/statefulset.yaml b/examples/pg/postgresql/templates/primary/statefulset.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/statefulset.yaml rename to examples/pg/postgresql/templates/primary/statefulset.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/svc-headless.yaml b/examples/pg/postgresql/templates/primary/svc-headless.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/svc-headless.yaml rename to examples/pg/postgresql/templates/primary/svc-headless.yaml diff --git a/cmd/examples/pg/postgresql/templates/primary/svc.yaml b/examples/pg/postgresql/templates/primary/svc.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/primary/svc.yaml rename to examples/pg/postgresql/templates/primary/svc.yaml diff --git a/cmd/examples/pg/postgresql/templates/prometheusrule.yaml b/examples/pg/postgresql/templates/prometheusrule.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/prometheusrule.yaml rename to examples/pg/postgresql/templates/prometheusrule.yaml diff --git a/cmd/examples/pg/postgresql/templates/psp.yaml b/examples/pg/postgresql/templates/psp.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/psp.yaml rename to examples/pg/postgresql/templates/psp.yaml diff --git a/cmd/examples/pg/postgresql/templates/read/extended-configmap.yaml b/examples/pg/postgresql/templates/read/extended-configmap.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/read/extended-configmap.yaml rename to examples/pg/postgresql/templates/read/extended-configmap.yaml diff --git a/cmd/examples/pg/postgresql/templates/read/metrics-configmap.yaml b/examples/pg/postgresql/templates/read/metrics-configmap.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/read/metrics-configmap.yaml rename to examples/pg/postgresql/templates/read/metrics-configmap.yaml diff --git a/cmd/examples/pg/postgresql/templates/read/metrics-svc.yaml b/examples/pg/postgresql/templates/read/metrics-svc.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/read/metrics-svc.yaml rename to examples/pg/postgresql/templates/read/metrics-svc.yaml diff --git a/cmd/examples/pg/postgresql/templates/read/networkpolicy.yaml b/examples/pg/postgresql/templates/read/networkpolicy.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/read/networkpolicy.yaml rename to examples/pg/postgresql/templates/read/networkpolicy.yaml diff --git a/cmd/examples/pg/postgresql/templates/read/servicemonitor.yaml b/examples/pg/postgresql/templates/read/servicemonitor.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/read/servicemonitor.yaml rename to examples/pg/postgresql/templates/read/servicemonitor.yaml diff --git a/cmd/examples/pg/postgresql/templates/read/statefulset.yaml b/examples/pg/postgresql/templates/read/statefulset.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/read/statefulset.yaml rename to examples/pg/postgresql/templates/read/statefulset.yaml diff --git a/cmd/examples/pg/postgresql/templates/read/svc-headless.yaml b/examples/pg/postgresql/templates/read/svc-headless.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/read/svc-headless.yaml rename to examples/pg/postgresql/templates/read/svc-headless.yaml diff --git a/cmd/examples/pg/postgresql/templates/read/svc.yaml b/examples/pg/postgresql/templates/read/svc.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/read/svc.yaml rename to examples/pg/postgresql/templates/read/svc.yaml diff --git a/cmd/examples/pg/postgresql/templates/role.yaml b/examples/pg/postgresql/templates/role.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/role.yaml rename to examples/pg/postgresql/templates/role.yaml diff --git a/cmd/examples/pg/postgresql/templates/rolebinding.yaml b/examples/pg/postgresql/templates/rolebinding.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/rolebinding.yaml rename to examples/pg/postgresql/templates/rolebinding.yaml diff --git a/cmd/examples/pg/postgresql/templates/secrets.yaml b/examples/pg/postgresql/templates/secrets.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/secrets.yaml rename to examples/pg/postgresql/templates/secrets.yaml diff --git a/cmd/examples/pg/postgresql/templates/serviceaccount.yaml b/examples/pg/postgresql/templates/serviceaccount.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/serviceaccount.yaml rename to examples/pg/postgresql/templates/serviceaccount.yaml diff --git a/cmd/examples/pg/postgresql/templates/tls-secrets.yaml b/examples/pg/postgresql/templates/tls-secrets.yaml similarity index 100% rename from cmd/examples/pg/postgresql/templates/tls-secrets.yaml rename to examples/pg/postgresql/templates/tls-secrets.yaml diff --git a/cmd/examples/pg/postgresql/values.schema.json b/examples/pg/postgresql/values.schema.json similarity index 100% rename from cmd/examples/pg/postgresql/values.schema.json rename to examples/pg/postgresql/values.schema.json diff --git a/cmd/examples/pg/postgresql/values.yaml b/examples/pg/postgresql/values.yaml similarity index 100% rename from cmd/examples/pg/postgresql/values.yaml rename to examples/pg/postgresql/values.yaml diff --git a/cmd/examples/pg/values.go b/examples/pg/values.go similarity index 100% rename from cmd/examples/pg/values.go rename to examples/pg/values.go diff --git a/cmd/examples/redis/main.go b/examples/redis/main.go similarity index 100% rename from cmd/examples/redis/main.go rename to examples/redis/main.go From d34ae2fc38d19495f9eac802e8eee4638402a9f0 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Tue, 4 Feb 2025 14:32:01 -0500 Subject: [PATCH 03/20] examples: remove redundant examples --- examples/argocd/install.yaml | 22854 ---------------- examples/argocd/main.go | 37 - .../flights/argocd/6.6.0/argo-cd-6.6.0.tgz | Bin 164306 -> 0 bytes .../internal/flights/argocd/6.6.0/flight.go | 24 - .../internal/flights/argocd/argo-cd-6.7.2.tgz | Bin 164378 -> 0 bytes examples/internal/flights/argocd/flight.go | 24 - examples/internal/flights/mongodb/flight.go | 22 - .../flights/mongodb/mongodb-14.13.0.tgz | Bin 91823 -> 0 bytes examples/internal/flights/mongodb/values.go | 121 - .../internal/flights/postgresql/flight.go | 22 - .../flights/postgresql/postgresql-14.2.3.tgz | Bin 71873 -> 0 bytes .../internal/flights/postgresql/values.go | 1928 -- examples/mongodb/main.go | 18 - 13 files changed, 25050 deletions(-) delete mode 100644 examples/argocd/install.yaml delete mode 100644 examples/argocd/main.go delete mode 100644 examples/internal/flights/argocd/6.6.0/argo-cd-6.6.0.tgz delete mode 100644 examples/internal/flights/argocd/6.6.0/flight.go delete mode 100644 examples/internal/flights/argocd/argo-cd-6.7.2.tgz delete mode 100644 examples/internal/flights/argocd/flight.go delete mode 100644 examples/internal/flights/mongodb/flight.go delete mode 100644 examples/internal/flights/mongodb/mongodb-14.13.0.tgz delete mode 100644 examples/internal/flights/mongodb/values.go delete mode 100644 examples/internal/flights/postgresql/flight.go delete mode 100644 examples/internal/flights/postgresql/postgresql-14.2.3.tgz delete mode 100644 examples/internal/flights/postgresql/values.go delete mode 100644 examples/mongodb/main.go diff --git a/examples/argocd/install.yaml b/examples/argocd/install.yaml deleted file mode 100644 index 3487617..0000000 --- a/examples/argocd/install.yaml +++ /dev/null @@ -1,22854 +0,0 @@ -# This is an auto-generated file. DO NOT EDIT -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - labels: - app.kubernetes.io/name: applications.argoproj.io - app.kubernetes.io/part-of: argocd - name: applications.argoproj.io -spec: - group: argoproj.io - names: - kind: Application - listKind: ApplicationList - plural: applications - shortNames: - - app - - apps - singular: application - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.sync.status - name: Sync Status - type: string - - jsonPath: .status.health.status - name: Health Status - type: string - - jsonPath: .status.sync.revision - name: Revision - priority: 10 - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - description: Application is a definition of Application resource. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - operation: - description: Operation contains information about a requested or running - operation - properties: - info: - description: Info is a list of informational items for this operation - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - initiatedBy: - description: InitiatedBy contains information about who initiated - the operations - properties: - automated: - description: Automated is set to true if operation was initiated - automatically by the application controller. - type: boolean - username: - description: Username contains the name of a user who started - operation - type: string - type: object - retry: - description: Retry controls the strategy to apply if a sync fails - properties: - backoff: - description: Backoff controls how to backoff on subsequent retries - of failed syncs - properties: - duration: - description: Duration is the amount to back off. Default unit - is seconds, but could also be a duration (e.g. "2m", "1h") - type: string - factor: - description: Factor is a factor to multiply the base duration - after each failed retry - format: int64 - type: integer - maxDuration: - description: MaxDuration is the maximum amount of time allowed - for the backoff strategy - type: string - type: object - limit: - description: Limit is the maximum number of attempts for retrying - a failed sync. If set to 0, no retries will be performed. - format: int64 - type: integer - type: object - sync: - description: Sync contains parameters for the operation - properties: - dryRun: - description: DryRun specifies to perform a `kubectl apply --dry-run` - without actually performing the sync - type: boolean - manifests: - description: Manifests is an optional field that overrides sync - source with a local directory for development - items: - type: string - type: array - prune: - description: Prune specifies to delete resources from the cluster - that are no longer tracked in git - type: boolean - resources: - description: Resources describes which resources shall be part - of the sync - items: - description: SyncOperationResource contains resources to sync. - properties: - group: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - type: array - revision: - description: Revision is the revision (Git) or chart version (Helm) - which to sync the application to If omitted, will use the revision - specified in app spec. - type: string - revisions: - description: Revisions is the list of revision (Git) or chart - version (Helm) which to sync each source in sources field for - the application to If omitted, will use the revision specified - in app spec. - items: - type: string - type: array - source: - description: Source overrides the source definition set in the - application. This is typically set in a Rollback operation and - is nil during a Sync operation - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded from - being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included during - manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable to - be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level Arguments - items: - description: JsonnetVar represents a variable to - be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to the - helm template - items: - description: HelmFileParameter is a file parameter that's - passed to helm template during manifest generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm template - from failing when valueFiles do not exist locally by - not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters which - are passed to the helm template command upon manifest - generation - items: - description: HelmParameter is a parameter that's passed - to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether to tell - Helm to interpret booleans and numbers as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all domains - (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name to use. - If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block. ValuesObject - takes precedence over Values, so use one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values to be - passed to helm template, defined as a map. This takes - precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use for templating - ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies whether - to apply env variables substitution for annotation values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional labels - to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize - components to add to the kustomization before building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources for - Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to force - applying common labels to resources for Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize image - definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize - adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas - override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: Plugin holds config management plugin specific - options - properties: - env: - description: Env is a list of environment variable entries - items: - description: EnvEntry represents an entry in the application's - environment - properties: - name: - description: Name is the name of the variable, usually - expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array type - parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type parameter. - type: object - name: - description: Name is the name identifying a parameter. - type: string - string: - description: String_ is the value of a string type - parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within sources - field. This field will not be used if used with a `source` - tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git or - Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the source - to sync the application to. In case of Git, this can be - commit, tag, or branch. If omitted, will equal to HEAD. - In case of Helm, this is a semver tag for the Chart's version. - type: string - required: - - repoURL - type: object - sources: - description: Sources overrides the source definition set in the - application. This is typically set in a Rollback operation and - is nil during a Sync operation - items: - description: ApplicationSource contains all required information - about the source of an application - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded from - being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included during - manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to the - helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm template - from failing when valueFiles do not exist locally - by not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command upon - manifest generation - items: - description: HelmParameter is a parameter that's passed - to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether to - tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all - domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name to - use. If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block. ValuesObject - takes precedence over Values, so use one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values to be - passed to helm template, defined as a map. This takes - precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use for - templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies whether - to apply env variables substitution for annotation - values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional labels - to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize - components to add to the kustomization before building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to - force applying common labels to resources for Kustomize - apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize - adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas - override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: Plugin holds config management plugin specific - options - properties: - env: - description: Env is a list of environment variable entries - items: - description: EnvEntry represents an entry in the application's - environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array type - parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type parameter. - type: object - name: - description: Name is the name identifying a parameter. - type: string - string: - description: String_ is the value of a string - type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within sources - field. This field will not be used if used with a `source` - tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git or - Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the - source to sync the application to. In case of Git, this - can be commit, tag, or branch. If omitted, will equal - to HEAD. In case of Helm, this is a semver tag for the - Chart's version. - type: string - required: - - repoURL - type: object - type: array - syncOptions: - description: SyncOptions provide per-sync sync-options, e.g. Validate=false - items: - type: string - type: array - syncStrategy: - description: SyncStrategy describes how to perform the sync - properties: - apply: - description: Apply will perform a `kubectl apply` to perform - the sync. - properties: - force: - description: Force indicates whether or not to supply - the --force flag to `kubectl apply`. The --force flag - deletes and re-create the resource, when PATCH encounters - conflict and has retried for 5 times. - type: boolean - type: object - hook: - description: Hook will submit any referenced resources to - perform the sync. This is the default strategy - properties: - force: - description: Force indicates whether or not to supply - the --force flag to `kubectl apply`. The --force flag - deletes and re-create the resource, when PATCH encounters - conflict and has retried for 5 times. - type: boolean - type: object - type: object - type: object - type: object - spec: - description: ApplicationSpec represents desired application state. Contains - link to repository with application definition and additional parameters - link definition revision. - properties: - destination: - description: Destination is a reference to the target Kubernetes server - and namespace - properties: - name: - description: Name is an alternate way of specifying the target - cluster by its symbolic name. This must be set if Server is - not set. - type: string - namespace: - description: Namespace specifies the target namespace for the - application's resources. The namespace will only be set for - namespace-scoped resources that have not set a value for .metadata.namespace - type: string - server: - description: Server specifies the URL of the target cluster's - Kubernetes control plane API. This must be set if Name is not - set. - type: string - type: object - ignoreDifferences: - description: IgnoreDifferences is a list of resources and their fields - which should be ignored during comparison - items: - description: ResourceIgnoreDifferences contains resource filter - and list of json paths which should be ignored during comparison - with live state. - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - description: ManagedFieldsManagers is a list of trusted managers. - Fields mutated by those managers will take precedence over - the desired state defined in the SCM and won't be displayed - in diffs - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - description: Info contains a list of information (URLs, email addresses, - and plain text) that relates to the application - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - description: Project is a reference to the project this application - belongs to. The empty string means that application belongs to the - 'default' project. - type: string - revisionHistoryLimit: - description: RevisionHistoryLimit limits the number of items kept - in the application's revision history, which is used for informational - purposes as well as for rollbacks to previous versions. This should - only be changed in exceptional circumstances. Setting to zero will - store no history. This will reduce storage used. Increasing will - increase the space used to store the history, so we do not recommend - increasing it. Default is 10. - format: int64 - type: integer - source: - description: Source is a reference to the location of the application's - manifests or chart - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match paths - against that should be explicitly excluded from being used - during manifest generation - type: string - include: - description: Include contains a glob pattern to match paths - against that should be explicitly included during manifest - generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External Variables - items: - description: JsonnetVar represents a variable to be - passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level Arguments - items: - description: JsonnetVar represents a variable to be - passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to the helm - template - items: - description: HelmFileParameter is a file parameter that's - passed to helm template during manifest generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm template - from failing when valueFiles do not exist locally by not - appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters which - are passed to the helm template command upon manifest generation - items: - description: HelmParameter is a parameter that's passed - to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether to tell - Helm to interpret booleans and numbers as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all domains - (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name to use. - If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition installation - step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files to - use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed to - helm template, typically defined as a block. ValuesObject - takes precedence over Values, so use one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values to be passed - to helm template, defined as a map. This takes precedence - over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use for templating - ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional annotations - to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies whether to - apply env variables substitution for annotation values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional labels to - add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize components - to add to the kustomization before building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether to force - applying common annotations to resources for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to force - applying common labels to resources for Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize image - definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize adds - to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas override - specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize to - use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: Plugin holds config management plugin specific options - properties: - env: - description: Env is a list of environment variable entries - items: - description: EnvEntry represents an entry in the application's - environment - properties: - name: - description: Name is the name of the variable, usually - expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array type parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type parameter. - type: object - name: - description: Name is the name identifying a parameter. - type: string - string: - description: String_ is the value of a string type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within sources - field. This field will not be used if used with a `source` tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git or Helm) - that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the source - to sync the application to. In case of Git, this can be commit, - tag, or branch. If omitted, will equal to HEAD. In case of Helm, - this is a semver tag for the Chart's version. - type: string - required: - - repoURL - type: object - sources: - description: Sources is a reference to the location of the application's - manifests or chart - items: - description: ApplicationSource contains all required information - about the source of an application - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match paths - against that should be explicitly excluded from being - used during manifest generation - type: string - include: - description: Include contains a glob pattern to match paths - against that should be explicitly included during manifest - generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External Variables - items: - description: JsonnetVar represents a variable to be - passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level Arguments - items: - description: JsonnetVar represents a variable to be - passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to the helm - template - items: - description: HelmFileParameter is a file parameter that's - passed to helm template during manifest generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm template - from failing when valueFiles do not exist locally by not - appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters which - are passed to the helm template command upon manifest - generation - items: - description: HelmParameter is a parameter that's passed - to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether to tell - Helm to interpret booleans and numbers as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all domains - (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name to use. - If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition installation - step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files to - use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed to - helm template, typically defined as a block. ValuesObject - takes precedence over Values, so use one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values to be passed - to helm template, defined as a map. This takes precedence - over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use for templating - ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional annotations - to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies whether - to apply env variables substitution for annotation values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional labels - to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize components - to add to the kustomization before building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether to - force applying common annotations to resources for Kustomize - apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to force - applying common labels to resources for Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize image - definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize - adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas override - specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: Plugin holds config management plugin specific - options - properties: - env: - description: Env is a list of environment variable entries - items: - description: EnvEntry represents an entry in the application's - environment - properties: - name: - description: Name is the name of the variable, usually - expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array type parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type parameter. - type: object - name: - description: Name is the name identifying a parameter. - type: string - string: - description: String_ is the value of a string type - parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within sources - field. This field will not be used if used with a `source` - tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git or Helm) - that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the source - to sync the application to. In case of Git, this can be commit, - tag, or branch. If omitted, will equal to HEAD. In case of - Helm, this is a semver tag for the Chart's version. - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - description: SyncPolicy controls when and how a sync will be performed - properties: - automated: - description: Automated will keep an application synced to the - target revision - properties: - allowEmpty: - description: 'AllowEmpty allows apps have zero live resources - (default: false)' - type: boolean - prune: - description: 'Prune specifies whether to delete resources - from the cluster that are not found in the sources anymore - as part of automated sync (default: false)' - type: boolean - selfHeal: - description: 'SelfHeal specifies whether to revert resources - back to their desired state upon modification in the cluster - (default: false)' - type: boolean - type: object - managedNamespaceMetadata: - description: ManagedNamespaceMetadata controls metadata in the - given namespace (if CreateNamespace=true) - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - description: Retry controls failed sync retry behavior - properties: - backoff: - description: Backoff controls how to backoff on subsequent - retries of failed syncs - properties: - duration: - description: Duration is the amount to back off. Default - unit is seconds, but could also be a duration (e.g. - "2m", "1h") - type: string - factor: - description: Factor is a factor to multiply the base duration - after each failed retry - format: int64 - type: integer - maxDuration: - description: MaxDuration is the maximum amount of time - allowed for the backoff strategy - type: string - type: object - limit: - description: Limit is the maximum number of attempts for retrying - a failed sync. If set to 0, no retries will be performed. - format: int64 - type: integer - type: object - syncOptions: - description: Options allow you to specify whole app sync-options - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - status: - description: ApplicationStatus contains status information for the application - properties: - conditions: - description: Conditions is a list of currently observed application - conditions - items: - description: ApplicationCondition contains details about an application - condition, which is usually an error or warning - properties: - lastTransitionTime: - description: LastTransitionTime is the time the condition was - last observed - format: date-time - type: string - message: - description: Message contains human-readable message indicating - details about condition - type: string - type: - description: Type is an application condition type - type: string - required: - - message - - type - type: object - type: array - controllerNamespace: - description: ControllerNamespace indicates the namespace in which - the application controller is located - type: string - health: - description: Health contains information about the application's current - health status - properties: - message: - description: Message is a human-readable informational message - describing the health status - type: string - status: - description: Status holds the status code of the application or - resource - type: string - type: object - history: - description: History contains information about the application's - sync history - items: - description: RevisionHistory contains history information about - a previous sync - properties: - deployStartedAt: - description: DeployStartedAt holds the time the sync operation - started - format: date-time - type: string - deployedAt: - description: DeployedAt holds the time the sync operation completed - format: date-time - type: string - id: - description: ID is an auto incrementing identifier of the RevisionHistory - format: int64 - type: integer - revision: - description: Revision holds the revision the sync was performed - against - type: string - revisions: - description: Revisions holds the revision of each source in - sources field the sync was performed against - items: - type: string - type: array - source: - description: Source is a reference to the application source - used for the sync operation - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded from - being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included during - manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to the - helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm template - from failing when valueFiles do not exist locally - by not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command upon - manifest generation - items: - description: HelmParameter is a parameter that's passed - to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether to - tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all - domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name to - use. If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block. ValuesObject - takes precedence over Values, so use one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values to be - passed to helm template, defined as a map. This takes - precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use for - templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies whether - to apply env variables substitution for annotation - values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional labels - to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize - components to add to the kustomization before building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to - force applying common labels to resources for Kustomize - apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize - adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas - override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: Plugin holds config management plugin specific - options - properties: - env: - description: Env is a list of environment variable entries - items: - description: EnvEntry represents an entry in the application's - environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array type - parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type parameter. - type: object - name: - description: Name is the name identifying a parameter. - type: string - string: - description: String_ is the value of a string - type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within sources - field. This field will not be used if used with a `source` - tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git or - Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the - source to sync the application to. In case of Git, this - can be commit, tag, or branch. If omitted, will equal - to HEAD. In case of Helm, this is a semver tag for the - Chart's version. - type: string - required: - - repoURL - type: object - sources: - description: Sources is a reference to the application sources - used for the sync operation - items: - description: ApplicationSource contains all required information - about the source of an application - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded - from being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included - during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to - the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm - template from failing when valueFiles do not exist - locally by not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command upon - manifest generation - items: - description: HelmParameter is a parameter that's - passed to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm - parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all - domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name - to use. If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block. - ValuesObject takes precedence over Values, so use - one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values to - be passed to helm template, defined as a map. This - takes precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use for - templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies whether - to apply env variables substitution for annotation - values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize - components to add to the kustomization before building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to - force applying common labels to resources for Kustomize - apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize - adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas - override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: Plugin holds config management plugin specific - options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry in the - application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array - type parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type - parameter. - type: object - name: - description: Name is the name identifying a - parameter. - type: string - string: - description: String_ is the value of a string - type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within - sources field. This field will not be used if used with - a `source` tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git - or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the - source to sync the application to. In case of Git, this - can be commit, tag, or branch. If omitted, will equal - to HEAD. In case of Helm, this is a semver tag for the - Chart's version. - type: string - required: - - repoURL - type: object - type: array - required: - - deployedAt - - id - type: object - type: array - observedAt: - description: 'ObservedAt indicates when the application state was - updated without querying latest git state Deprecated: controller - no longer updates ObservedAt field' - format: date-time - type: string - operationState: - description: OperationState contains information about any ongoing - operations, such as a sync - properties: - finishedAt: - description: FinishedAt contains time of operation completion - format: date-time - type: string - message: - description: Message holds any pertinent messages when attempting - to perform operation (typically errors). - type: string - operation: - description: Operation is the original requested operation - properties: - info: - description: Info is a list of informational items for this - operation - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - initiatedBy: - description: InitiatedBy contains information about who initiated - the operations - properties: - automated: - description: Automated is set to true if operation was - initiated automatically by the application controller. - type: boolean - username: - description: Username contains the name of a user who - started operation - type: string - type: object - retry: - description: Retry controls the strategy to apply if a sync - fails - properties: - backoff: - description: Backoff controls how to backoff on subsequent - retries of failed syncs - properties: - duration: - description: Duration is the amount to back off. Default - unit is seconds, but could also be a duration (e.g. - "2m", "1h") - type: string - factor: - description: Factor is a factor to multiply the base - duration after each failed retry - format: int64 - type: integer - maxDuration: - description: MaxDuration is the maximum amount of - time allowed for the backoff strategy - type: string - type: object - limit: - description: Limit is the maximum number of attempts for - retrying a failed sync. If set to 0, no retries will - be performed. - format: int64 - type: integer - type: object - sync: - description: Sync contains parameters for the operation - properties: - dryRun: - description: DryRun specifies to perform a `kubectl apply - --dry-run` without actually performing the sync - type: boolean - manifests: - description: Manifests is an optional field that overrides - sync source with a local directory for development - items: - type: string - type: array - prune: - description: Prune specifies to delete resources from - the cluster that are no longer tracked in git - type: boolean - resources: - description: Resources describes which resources shall - be part of the sync - items: - description: SyncOperationResource contains resources - to sync. - properties: - group: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - type: array - revision: - description: Revision is the revision (Git) or chart version - (Helm) which to sync the application to If omitted, - will use the revision specified in app spec. - type: string - revisions: - description: Revisions is the list of revision (Git) or - chart version (Helm) which to sync each source in sources - field for the application to If omitted, will use the - revision specified in app spec. - items: - type: string - type: array - source: - description: Source overrides the source definition set - in the application. This is typically set in a Rollback - operation and is nil during a Sync operation - properties: - chart: - description: Chart is a Helm chart name, and must - be specified for applications sourced from a Helm - repo. - type: string - directory: - description: Directory holds path/directory specific - options - properties: - exclude: - description: Exclude contains a glob pattern to - match paths against that should be explicitly - excluded from being used during manifest generation - type: string - include: - description: Include contains a glob pattern to - match paths against that should be explicitly - included during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to - Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet - External Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan - a directory recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters - to the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm - parameter - type: string - path: - description: Path is the path to the file - containing the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents - helm template from failing when valueFiles do - not exist locally by not appending them to helm - template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command - upon manifest generation - items: - description: HelmParameter is a parameter that's - passed to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and - numbers as strings - type: boolean - name: - description: Name is the name of the Helm - parameter - type: string - value: - description: Value is the value for the - Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials - to all domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name - to use. If omitted it will use the application - name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value - files to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be - passed to helm template, typically defined as - a block. ValuesObject takes precedence over - Values, so use one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values - to be passed to helm template, defined as a - map. This takes precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use - for templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies - whether to apply env variables substitution - for annotation values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize - components to add to the kustomization before - building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies - whether to force applying common annotations - to resources for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether - to force applying common labels to resources - for Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image - override specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to - resources for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to - resources for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that - Kustomize adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas - override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of - Kustomize to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git - repository, and is only valid for applications sourced - from Git. - type: string - plugin: - description: Plugin holds config management plugin - specific options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry in - the application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array - type parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type - parameter. - type: object - name: - description: Name is the name identifying - a parameter. - type: string - string: - description: String_ is the value of a string - type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within - sources field. This field will not be used if used - with a `source` tag. - type: string - repoURL: - description: RepoURL is the URL to the repository - (Git or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of - the source to sync the application to. In case of - Git, this can be commit, tag, or branch. If omitted, - will equal to HEAD. In case of Helm, this is a semver - tag for the Chart's version. - type: string - required: - - repoURL - type: object - sources: - description: Sources overrides the source definition set - in the application. This is typically set in a Rollback - operation and is nil during a Sync operation - items: - description: ApplicationSource contains all required - information about the source of an application - properties: - chart: - description: Chart is a Helm chart name, and must - be specified for applications sourced from a Helm - repo. - type: string - directory: - description: Directory holds path/directory specific - options - properties: - exclude: - description: Exclude contains a glob pattern - to match paths against that should be explicitly - excluded from being used during manifest generation - type: string - include: - description: Include contains a glob pattern - to match paths against that should be explicitly - included during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific - to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet - External Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan - a directory recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters - to the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm - parameter - type: string - path: - description: Path is the path to the file - containing the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents - helm template from failing when valueFiles - do not exist locally by not appending them - to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command - upon manifest generation - items: - description: HelmParameter is a parameter - that's passed to helm template during manifest - generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and - numbers as strings - type: boolean - name: - description: Name is the name of the Helm - parameter - type: string - value: - description: Value is the value for the - Helm parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials - to all domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release - name to use. If omitted it will use the application - name - type: string - skipCrds: - description: SkipCrds skips custom resource - definition installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value - files to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to - be passed to helm template, typically defined - as a block. ValuesObject takes precedence - over Values, so use one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values - to be passed to helm template, defined as - a map. This takes precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to - use for templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific - options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of - additional annotations to add to rendered - manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies - whether to apply env variables substitution - for annotation values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - components: - description: Components specifies a list of - kustomize components to add to the kustomization - before building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies - whether to force applying common annotations - to resources for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether - to force applying common labels to resources - for Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image - override specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended - to resources for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended - to resources for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that - Kustomize adds to all resources - type: string - patches: - description: Patches is a list of Kustomize - patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize - Replicas override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version - of Kustomize to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the - Git repository, and is only valid for applications - sourced from Git. - type: string - plugin: - description: Plugin holds config management plugin - specific options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry - in the application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the - variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an - array type parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map - type parameter. - type: object - name: - description: Name is the name identifying - a parameter. - type: string - string: - description: String_ is the value of a - string type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source - within sources field. This field will not be used - if used with a `source` tag. - type: string - repoURL: - description: RepoURL is the URL to the repository - (Git or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision - of the source to sync the application to. In case - of Git, this can be commit, tag, or branch. If - omitted, will equal to HEAD. In case of Helm, - this is a semver tag for the Chart's version. - type: string - required: - - repoURL - type: object - type: array - syncOptions: - description: SyncOptions provide per-sync sync-options, - e.g. Validate=false - items: - type: string - type: array - syncStrategy: - description: SyncStrategy describes how to perform the - sync - properties: - apply: - description: Apply will perform a `kubectl apply` - to perform the sync. - properties: - force: - description: Force indicates whether or not to - supply the --force flag to `kubectl apply`. - The --force flag deletes and re-create the resource, - when PATCH encounters conflict and has retried - for 5 times. - type: boolean - type: object - hook: - description: Hook will submit any referenced resources - to perform the sync. This is the default strategy - properties: - force: - description: Force indicates whether or not to - supply the --force flag to `kubectl apply`. - The --force flag deletes and re-create the resource, - when PATCH encounters conflict and has retried - for 5 times. - type: boolean - type: object - type: object - type: object - type: object - phase: - description: Phase is the current phase of the operation - type: string - retryCount: - description: RetryCount contains time of operation retries - format: int64 - type: integer - startedAt: - description: StartedAt contains time of operation start - format: date-time - type: string - syncResult: - description: SyncResult is the result of a Sync operation - properties: - managedNamespaceMetadata: - description: ManagedNamespaceMetadata contains the current - sync state of managed namespace metadata - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - resources: - description: Resources contains a list of sync result items - for each individual resource in a sync operation - items: - description: ResourceResult holds the operation result details - of a specific resource - properties: - group: - description: Group specifies the API group of the resource - type: string - hookPhase: - description: HookPhase contains the state of any operation - associated with this resource OR hook This can also - contain values for non-hook resources. - type: string - hookType: - description: HookType specifies the type of the hook. - Empty for non-hook resources - type: string - kind: - description: Kind specifies the API kind of the resource - type: string - message: - description: Message contains an informational or error - message for the last sync OR operation - type: string - name: - description: Name specifies the name of the resource - type: string - namespace: - description: Namespace specifies the target namespace - of the resource - type: string - status: - description: Status holds the final result of the sync. - Will be empty if the resources is yet to be applied/pruned - and is always zero-value for hooks - type: string - syncPhase: - description: SyncPhase indicates the particular phase - of the sync that this result was acquired in - type: string - version: - description: Version specifies the API version of the - resource - type: string - required: - - group - - kind - - name - - namespace - - version - type: object - type: array - revision: - description: Revision holds the revision this sync operation - was performed to - type: string - revisions: - description: Revisions holds the revision this sync operation - was performed for respective indexed source in sources field - items: - type: string - type: array - source: - description: Source records the application source information - of the sync, used for comparing auto-sync - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded - from being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included - during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to - the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm - template from failing when valueFiles do not exist - locally by not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command upon - manifest generation - items: - description: HelmParameter is a parameter that's - passed to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm - parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all - domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name - to use. If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block. - ValuesObject takes precedence over Values, so use - one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values to - be passed to helm template, defined as a map. This - takes precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use for - templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies whether - to apply env variables substitution for annotation - values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize - components to add to the kustomization before building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to - force applying common labels to resources for Kustomize - apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize - adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas - override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: Plugin holds config management plugin specific - options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry in the - application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array - type parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type - parameter. - type: object - name: - description: Name is the name identifying a - parameter. - type: string - string: - description: String_ is the value of a string - type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within - sources field. This field will not be used if used with - a `source` tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git - or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the - source to sync the application to. In case of Git, this - can be commit, tag, or branch. If omitted, will equal - to HEAD. In case of Helm, this is a semver tag for the - Chart's version. - type: string - required: - - repoURL - type: object - sources: - description: Source records the application source information - of the sync, used for comparing auto-sync - items: - description: ApplicationSource contains all required information - about the source of an application - properties: - chart: - description: Chart is a Helm chart name, and must be - specified for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific - options - properties: - exclude: - description: Exclude contains a glob pattern to - match paths against that should be explicitly - excluded from being used during manifest generation - type: string - include: - description: Include contains a glob pattern to - match paths against that should be explicitly - included during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a - directory recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters - to the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm - parameter - type: string - path: - description: Path is the path to the file - containing the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm - template from failing when valueFiles do not exist - locally by not appending them to helm template - --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command - upon manifest generation - items: - description: HelmParameter is a parameter that's - passed to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm - parameter - type: string - value: - description: Value is the value for the Helm - parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to - all domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name - to use. If omitted it will use the application - name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value - files to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be - passed to helm template, typically defined as - a block. ValuesObject takes precedence over Values, - so use one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values - to be passed to helm template, defined as a map. - This takes precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use - for templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies - whether to apply env variables substitution for - annotation values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize - components to add to the kustomization before - building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether - to force applying common labels to resources for - Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image - override specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to - resources for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to - resources for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize - adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas - override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git - repository, and is only valid for applications sourced - from Git. - type: string - plugin: - description: Plugin holds config management plugin specific - options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry in the - application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array - type parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type - parameter. - type: object - name: - description: Name is the name identifying - a parameter. - type: string - string: - description: String_ is the value of a string - type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within - sources field. This field will not be used if used - with a `source` tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git - or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of - the source to sync the application to. In case of - Git, this can be commit, tag, or branch. If omitted, - will equal to HEAD. In case of Helm, this is a semver - tag for the Chart's version. - type: string - required: - - repoURL - type: object - type: array - required: - - revision - type: object - required: - - operation - - phase - - startedAt - type: object - reconciledAt: - description: ReconciledAt indicates when the application state was - reconciled using the latest git version - format: date-time - type: string - resourceHealthSource: - description: 'ResourceHealthSource indicates where the resource health - status is stored: inline if not set or appTree' - type: string - resources: - description: Resources is a list of Kubernetes resources managed by - this application - items: - description: 'ResourceStatus holds the current sync and health status - of a resource TODO: describe members of this type' - properties: - group: - type: string - health: - description: HealthStatus contains information about the currently - observed health state of an application or resource - properties: - message: - description: Message is a human-readable informational message - describing the health status - type: string - status: - description: Status holds the status code of the application - or resource - type: string - type: object - hook: - type: boolean - kind: - type: string - name: - type: string - namespace: - type: string - requiresPruning: - type: boolean - status: - description: SyncStatusCode is a type which represents possible - comparison results - type: string - syncWave: - format: int64 - type: integer - version: - type: string - type: object - type: array - sourceType: - description: SourceType specifies the type of this application - type: string - sourceTypes: - description: SourceTypes specifies the type of the sources included - in the application - items: - description: ApplicationSourceType specifies the type of the application's - source - type: string - type: array - summary: - description: Summary contains a list of URLs and container images - used by this application - properties: - externalURLs: - description: ExternalURLs holds all external URLs of application - child resources. - items: - type: string - type: array - images: - description: Images holds all images of application child resources. - items: - type: string - type: array - type: object - sync: - description: Sync contains information about the application's current - sync status - properties: - comparedTo: - description: ComparedTo contains information about what has been - compared - properties: - destination: - description: Destination is a reference to the application's - destination used for comparison - properties: - name: - description: Name is an alternate way of specifying the - target cluster by its symbolic name. This must be set - if Server is not set. - type: string - namespace: - description: Namespace specifies the target namespace - for the application's resources. The namespace will - only be set for namespace-scoped resources that have - not set a value for .metadata.namespace - type: string - server: - description: Server specifies the URL of the target cluster's - Kubernetes control plane API. This must be set if Name - is not set. - type: string - type: object - ignoreDifferences: - description: IgnoreDifferences is a reference to the application's - ignored differences used for comparison - items: - description: ResourceIgnoreDifferences contains resource - filter and list of json paths which should be ignored - during comparison with live state. - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - description: ManagedFieldsManagers is a list of trusted - managers. Fields mutated by those managers will take - precedence over the desired state defined in the SCM - and won't be displayed in diffs - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - source: - description: Source is a reference to the application's source - used for comparison - properties: - chart: - description: Chart is a Helm chart name, and must be specified - for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific options - properties: - exclude: - description: Exclude contains a glob pattern to match - paths against that should be explicitly excluded - from being used during manifest generation - type: string - include: - description: Include contains a glob pattern to match - paths against that should be explicitly included - during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a directory - recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters to - the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm parameter - type: string - path: - description: Path is the path to the file containing - the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm - template from failing when valueFiles do not exist - locally by not appending them to helm template --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command upon - manifest generation - items: - description: HelmParameter is a parameter that's - passed to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm parameter - type: string - value: - description: Value is the value for the Helm - parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to all - domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name - to use. If omitted it will use the application name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value files - to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be passed - to helm template, typically defined as a block. - ValuesObject takes precedence over Values, so use - one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values to - be passed to helm template, defined as a map. This - takes precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use for - templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies whether - to apply env variables substitution for annotation - values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize - components to add to the kustomization before building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether to - force applying common labels to resources for Kustomize - apps - type: boolean - images: - description: Images is a list of Kustomize image override - specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to resources - for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to resources - for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize - adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas - override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git repository, - and is only valid for applications sourced from Git. - type: string - plugin: - description: Plugin holds config management plugin specific - options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry in the - application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array - type parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type - parameter. - type: object - name: - description: Name is the name identifying a - parameter. - type: string - string: - description: String_ is the value of a string - type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within - sources field. This field will not be used if used with - a `source` tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git - or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of the - source to sync the application to. In case of Git, this - can be commit, tag, or branch. If omitted, will equal - to HEAD. In case of Helm, this is a semver tag for the - Chart's version. - type: string - required: - - repoURL - type: object - sources: - description: Sources is a reference to the application's multiple - sources used for comparison - items: - description: ApplicationSource contains all required information - about the source of an application - properties: - chart: - description: Chart is a Helm chart name, and must be - specified for applications sourced from a Helm repo. - type: string - directory: - description: Directory holds path/directory specific - options - properties: - exclude: - description: Exclude contains a glob pattern to - match paths against that should be explicitly - excluded from being used during manifest generation - type: string - include: - description: Include contains a glob pattern to - match paths against that should be explicitly - included during manifest generation - type: string - jsonnet: - description: Jsonnet holds options specific to Jsonnet - properties: - extVars: - description: ExtVars is a list of Jsonnet External - Variables - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - description: Additional library search dirs - items: - type: string - type: array - tlas: - description: TLAS is a list of Jsonnet Top-level - Arguments - items: - description: JsonnetVar represents a variable - to be passed to jsonnet during manifest - generation - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - description: Recurse specifies whether to scan a - directory recursively for manifests - type: boolean - type: object - helm: - description: Helm holds helm specific options - properties: - fileParameters: - description: FileParameters are file parameters - to the helm template - items: - description: HelmFileParameter is a file parameter - that's passed to helm template during manifest - generation - properties: - name: - description: Name is the name of the Helm - parameter - type: string - path: - description: Path is the path to the file - containing the values for the Helm parameter - type: string - type: object - type: array - ignoreMissingValueFiles: - description: IgnoreMissingValueFiles prevents helm - template from failing when valueFiles do not exist - locally by not appending them to helm template - --values - type: boolean - parameters: - description: Parameters is a list of Helm parameters - which are passed to the helm template command - upon manifest generation - items: - description: HelmParameter is a parameter that's - passed to helm template during manifest generation - properties: - forceString: - description: ForceString determines whether - to tell Helm to interpret booleans and numbers - as strings - type: boolean - name: - description: Name is the name of the Helm - parameter - type: string - value: - description: Value is the value for the Helm - parameter - type: string - type: object - type: array - passCredentials: - description: PassCredentials pass credentials to - all domains (Helm's --pass-credentials) - type: boolean - releaseName: - description: ReleaseName is the Helm release name - to use. If omitted it will use the application - name - type: string - skipCrds: - description: SkipCrds skips custom resource definition - installation step (Helm's --skip-crds) - type: boolean - valueFiles: - description: ValuesFiles is a list of Helm value - files to use when generating a template - items: - type: string - type: array - values: - description: Values specifies Helm values to be - passed to helm template, typically defined as - a block. ValuesObject takes precedence over Values, - so use one or the other. - type: string - valuesObject: - description: ValuesObject specifies Helm values - to be passed to helm template, defined as a map. - This takes precedence over Values. - type: object - x-kubernetes-preserve-unknown-fields: true - version: - description: Version is the Helm version to use - for templating ("3") - type: string - type: object - kustomize: - description: Kustomize holds kustomize specific options - properties: - commonAnnotations: - additionalProperties: - type: string - description: CommonAnnotations is a list of additional - annotations to add to rendered manifests - type: object - commonAnnotationsEnvsubst: - description: CommonAnnotationsEnvsubst specifies - whether to apply env variables substitution for - annotation values - type: boolean - commonLabels: - additionalProperties: - type: string - description: CommonLabels is a list of additional - labels to add to rendered manifests - type: object - components: - description: Components specifies a list of kustomize - components to add to the kustomization before - building - items: - type: string - type: array - forceCommonAnnotations: - description: ForceCommonAnnotations specifies whether - to force applying common annotations to resources - for Kustomize apps - type: boolean - forceCommonLabels: - description: ForceCommonLabels specifies whether - to force applying common labels to resources for - Kustomize apps - type: boolean - images: - description: Images is a list of Kustomize image - override specifications - items: - description: KustomizeImage represents a Kustomize - image definition in the format [old_image_name=]: - type: string - type: array - namePrefix: - description: NamePrefix is a prefix appended to - resources for Kustomize apps - type: string - nameSuffix: - description: NameSuffix is a suffix appended to - resources for Kustomize apps - type: string - namespace: - description: Namespace sets the namespace that Kustomize - adds to all resources - type: string - patches: - description: Patches is a list of Kustomize patches - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - description: Replicas is a list of Kustomize Replicas - override specifications - items: - properties: - count: - anyOf: - - type: integer - - type: string - description: Number of replicas - x-kubernetes-int-or-string: true - name: - description: Name of Deployment or StatefulSet - type: string - required: - - count - - name - type: object - type: array - version: - description: Version controls which version of Kustomize - to use for rendering manifests - type: string - type: object - path: - description: Path is a directory path within the Git - repository, and is only valid for applications sourced - from Git. - type: string - plugin: - description: Plugin holds config management plugin specific - options - properties: - env: - description: Env is a list of environment variable - entries - items: - description: EnvEntry represents an entry in the - application's environment - properties: - name: - description: Name is the name of the variable, - usually expressed in uppercase - type: string - value: - description: Value is the value of the variable - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - description: Array is the value of an array - type parameter. - items: - type: string - type: array - map: - additionalProperties: - type: string - description: Map is the value of a map type - parameter. - type: object - name: - description: Name is the name identifying - a parameter. - type: string - string: - description: String_ is the value of a string - type parameter. - type: string - type: object - type: array - type: object - ref: - description: Ref is reference to another source within - sources field. This field will not be used if used - with a `source` tag. - type: string - repoURL: - description: RepoURL is the URL to the repository (Git - or Helm) that contains the application manifests - type: string - targetRevision: - description: TargetRevision defines the revision of - the source to sync the application to. In case of - Git, this can be commit, tag, or branch. If omitted, - will equal to HEAD. In case of Helm, this is a semver - tag for the Chart's version. - type: string - required: - - repoURL - type: object - type: array - required: - - destination - type: object - revision: - description: Revision contains information about the revision - the comparison has been performed to - type: string - revisions: - description: Revisions contains information about the revisions - of multiple sources the comparison has been performed to - items: - type: string - type: array - status: - description: Status is the sync state of the comparison - type: string - required: - - status - type: object - type: object - required: - - metadata - - spec - type: object - served: true - storage: true - subresources: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - labels: - app.kubernetes.io/name: applicationsets.argoproj.io - app.kubernetes.io/part-of: argocd - name: applicationsets.argoproj.io -spec: - group: argoproj.io - names: - kind: ApplicationSet - listKind: ApplicationSetList - plural: applicationsets - shortNames: - - appset - - appsets - singular: applicationset - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - applyNestedSelectors: - type: boolean - generators: - items: - properties: - clusterDecisionResource: - properties: - configMapRef: - type: string - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - configMapRef - type: object - clusters: - properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - type: object - git: - properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: - items: - properties: - path: - type: string - required: - - path - type: object - type: array - pathParamPrefix: - type: string - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - repoURL - - revision - type: object - list: - properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - elementsYaml: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - required: - - elements - type: object - matrix: - properties: - generators: - items: - properties: - clusterDecisionResource: - properties: - configMapRef: - type: string - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - configMapRef - type: object - clusters: - properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - type: object - git: - properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: - items: - properties: - path: - type: string - required: - - path - type: object - type: array - pathParamPrefix: - type: string - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - repoURL - - revision - type: object - list: - properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - elementsYaml: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - required: - - elements - type: object - matrix: - x-kubernetes-preserve-unknown-fields: true - merge: - x-kubernetes-preserve-unknown-fields: true - plugin: - properties: - configMapRef: - properties: - name: - type: string - required: - - name - type: object - input: - properties: - parameters: - additionalProperties: - x-kubernetes-preserve-unknown-fields: true - type: object - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - configMapRef - type: object - pullRequest: - properties: - azuredevops: - properties: - api: - type: string - labels: - items: - type: string - type: array - organization: - type: string - project: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - organization - - project - - repo - type: object - bitbucket: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - bearerToken: - properties: - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - tokenRef - type: object - owner: - type: string - repo: - type: string - required: - - owner - - repo - type: object - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - targetBranchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: - properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - owner - - repo - type: object - gitlab: - properties: - api: - type: string - insecure: - type: boolean - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - project - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - type: object - scmProvider: - properties: - awsCodeCommit: - properties: - allBranches: - type: boolean - region: - type: string - role: - type: string - tagFilters: - items: - properties: - key: - type: string - value: - type: string - required: - - key - type: object - type: array - type: object - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object - bitbucketServer: - properties: - allBranches: - type: boolean - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - required: - - api - - project - type: object - cloneProtocol: - type: string - filters: - items: - properties: - branchMatch: - type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: - type: string - type: object - type: array - gitea: - properties: - allBranches: - type: boolean - api: - type: string - insecure: - type: boolean - owner: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - type: object - github: - properties: - allBranches: - type: boolean - api: - type: string - appSecretName: - type: string - organization: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - organization - type: object - gitlab: - properties: - allBranches: - type: boolean - api: - type: string - group: - type: string - includeSharedProjects: - type: boolean - includeSubgroups: - type: boolean - insecure: - type: boolean - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - topic: - type: string - required: - - group - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - required: - - generators - type: object - merge: - properties: - generators: - items: - properties: - clusterDecisionResource: - properties: - configMapRef: - type: string - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - configMapRef - type: object - clusters: - properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - type: object - git: - properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: - items: - properties: - path: - type: string - required: - - path - type: object - type: array - pathParamPrefix: - type: string - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - repoURL - - revision - type: object - list: - properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - elementsYaml: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - required: - - elements - type: object - matrix: - x-kubernetes-preserve-unknown-fields: true - merge: - x-kubernetes-preserve-unknown-fields: true - plugin: - properties: - configMapRef: - properties: - name: - type: string - required: - - name - type: object - input: - properties: - parameters: - additionalProperties: - x-kubernetes-preserve-unknown-fields: true - type: object - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - configMapRef - type: object - pullRequest: - properties: - azuredevops: - properties: - api: - type: string - labels: - items: - type: string - type: array - organization: - type: string - project: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - organization - - project - - repo - type: object - bitbucket: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - bearerToken: - properties: - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - tokenRef - type: object - owner: - type: string - repo: - type: string - required: - - owner - - repo - type: object - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - targetBranchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: - properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - owner - - repo - type: object - gitlab: - properties: - api: - type: string - insecure: - type: boolean - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - project - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - type: object - scmProvider: - properties: - awsCodeCommit: - properties: - allBranches: - type: boolean - region: - type: string - role: - type: string - tagFilters: - items: - properties: - key: - type: string - value: - type: string - required: - - key - type: object - type: array - type: object - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object - bitbucketServer: - properties: - allBranches: - type: boolean - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - required: - - api - - project - type: object - cloneProtocol: - type: string - filters: - items: - properties: - branchMatch: - type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: - type: string - type: object - type: array - gitea: - properties: - allBranches: - type: boolean - api: - type: string - insecure: - type: boolean - owner: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - type: object - github: - properties: - allBranches: - type: boolean - api: - type: string - appSecretName: - type: string - organization: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - organization - type: object - gitlab: - properties: - allBranches: - type: boolean - api: - type: string - group: - type: string - includeSharedProjects: - type: boolean - includeSubgroups: - type: boolean - insecure: - type: boolean - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - topic: - type: string - required: - - group - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - mergeKeys: - items: - type: string - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - required: - - generators - - mergeKeys - type: object - plugin: - properties: - configMapRef: - properties: - name: - type: string - required: - - name - type: object - input: - properties: - parameters: - additionalProperties: - x-kubernetes-preserve-unknown-fields: true - type: object - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - required: - - configMapRef - type: object - pullRequest: - properties: - azuredevops: - properties: - api: - type: string - labels: - items: - type: string - type: array - organization: - type: string - project: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - organization - - project - - repo - type: object - bitbucket: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - bearerToken: - properties: - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - tokenRef - type: object - owner: - type: string - repo: - type: string - required: - - owner - - repo - type: object - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - targetBranchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: - properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - owner - - repo - type: object - gitlab: - properties: - api: - type: string - insecure: - type: boolean - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - project - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - type: object - scmProvider: - properties: - awsCodeCommit: - properties: - allBranches: - type: boolean - region: - type: string - role: - type: string - tagFilters: - items: - properties: - key: - type: string - value: - type: string - required: - - key - type: object - type: array - type: object - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object - bitbucketServer: - properties: - allBranches: - type: boolean - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - required: - - api - - project - type: object - cloneProtocol: - type: string - filters: - items: - properties: - branchMatch: - type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: - type: string - type: object - type: array - gitea: - properties: - allBranches: - type: boolean - api: - type: string - insecure: - type: boolean - owner: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - type: object - github: - properties: - allBranches: - type: boolean - api: - type: string - appSecretName: - type: string - organization: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - organization - type: object - gitlab: - properties: - allBranches: - type: boolean - api: - type: string - group: - type: string - includeSharedProjects: - type: boolean - includeSubgroups: - type: boolean - insecure: - type: boolean - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - topic: - type: string - required: - - group - type: object - requeueAfterSeconds: - format: int64 - type: integer - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - goTemplate: - type: boolean - goTemplateOptions: - items: - type: string - type: array - ignoreApplicationDifferences: - items: - properties: - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - name: - type: string - type: object - type: array - preservedFields: - properties: - annotations: - items: - type: string - type: array - labels: - items: - type: string - type: array - type: object - strategy: - properties: - rollingSync: - properties: - steps: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - maxUpdate: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - type: object - type: array - type: object - type: - type: string - type: object - syncPolicy: - properties: - applicationsSync: - enum: - - create-only - - create-update - - create-delete - - sync - type: string - preserveResourcesOnDeletion: - type: boolean - type: object - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: - properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: - type: string - managedFieldsManagers: - items: - type: string - type: array - name: - type: string - namespace: - type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: - items: - type: string - type: array - values: - type: string - valuesObject: - type: object - x-kubernetes-preserve-unknown-fields: true - version: - type: string - type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - components: - items: - type: string - type: array - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - patches: - items: - properties: - options: - additionalProperties: - type: boolean - type: object - patch: - type: string - path: - type: string - target: - properties: - annotationSelector: - type: string - group: - type: string - kind: - type: string - labelSelector: - type: string - name: - type: string - namespace: - type: string - version: - type: string - type: object - type: object - type: array - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - templatePatch: - type: string - required: - - generators - - template - type: object - status: - properties: - applicationStatus: - items: - properties: - application: - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - status: - type: string - step: - type: string - required: - - application - - message - - status - - step - type: object - type: array - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - message - - reason - - status - - type - type: object - type: array - type: object - required: - - metadata - - spec - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - labels: - app.kubernetes.io/name: appprojects.argoproj.io - app.kubernetes.io/part-of: argocd - name: appprojects.argoproj.io -spec: - group: argoproj.io - names: - kind: AppProject - listKind: AppProjectList - plural: appprojects - shortNames: - - appproj - - appprojs - singular: appproject - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: 'AppProject provides a logical grouping of applications, providing - controls for: * where the apps may deploy to (cluster whitelist) * what - may be deployed (repository whitelist, resource whitelist/blacklist) * who - can access these applications (roles, OIDC group claims bindings) * and - what they can do (RBAC policies) * automation access to these roles (JWT - tokens)' - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: AppProjectSpec is the specification of an AppProject - properties: - clusterResourceBlacklist: - description: ClusterResourceBlacklist contains list of blacklisted - cluster level resources - items: - description: GroupKind specifies a Group and a Kind, but does not - force a version. This is useful for identifying concepts during - lookup stages without having partially valid types - properties: - group: - type: string - kind: - type: string - required: - - group - - kind - type: object - type: array - clusterResourceWhitelist: - description: ClusterResourceWhitelist contains list of whitelisted - cluster level resources - items: - description: GroupKind specifies a Group and a Kind, but does not - force a version. This is useful for identifying concepts during - lookup stages without having partially valid types - properties: - group: - type: string - kind: - type: string - required: - - group - - kind - type: object - type: array - description: - description: Description contains optional project description - type: string - destinations: - description: Destinations contains list of destinations available - for deployment - items: - description: ApplicationDestination holds information about the - application's destination - properties: - name: - description: Name is an alternate way of specifying the target - cluster by its symbolic name. This must be set if Server is - not set. - type: string - namespace: - description: Namespace specifies the target namespace for the - application's resources. The namespace will only be set for - namespace-scoped resources that have not set a value for .metadata.namespace - type: string - server: - description: Server specifies the URL of the target cluster's - Kubernetes control plane API. This must be set if Name is - not set. - type: string - type: object - type: array - namespaceResourceBlacklist: - description: NamespaceResourceBlacklist contains list of blacklisted - namespace level resources - items: - description: GroupKind specifies a Group and a Kind, but does not - force a version. This is useful for identifying concepts during - lookup stages without having partially valid types - properties: - group: - type: string - kind: - type: string - required: - - group - - kind - type: object - type: array - namespaceResourceWhitelist: - description: NamespaceResourceWhitelist contains list of whitelisted - namespace level resources - items: - description: GroupKind specifies a Group and a Kind, but does not - force a version. This is useful for identifying concepts during - lookup stages without having partially valid types - properties: - group: - type: string - kind: - type: string - required: - - group - - kind - type: object - type: array - orphanedResources: - description: OrphanedResources specifies if controller should monitor - orphaned resources of apps in this project - properties: - ignore: - description: Ignore contains a list of resources that are to be - excluded from orphaned resources monitoring - items: - description: OrphanedResourceKey is a reference to a resource - to be ignored from - properties: - group: - type: string - kind: - type: string - name: - type: string - type: object - type: array - warn: - description: Warn indicates if warning condition should be created - for apps which have orphaned resources - type: boolean - type: object - permitOnlyProjectScopedClusters: - description: PermitOnlyProjectScopedClusters determines whether destinations - can only reference clusters which are project-scoped - type: boolean - roles: - description: Roles are user defined RBAC roles associated with this - project - items: - description: ProjectRole represents a role that has access to a - project - properties: - description: - description: Description is a description of the role - type: string - groups: - description: Groups are a list of OIDC group claims bound to - this role - items: - type: string - type: array - jwtTokens: - description: JWTTokens are a list of generated JWT tokens bound - to this role - items: - description: JWTToken holds the issuedAt and expiresAt values - of a token - properties: - exp: - format: int64 - type: integer - iat: - format: int64 - type: integer - id: - type: string - required: - - iat - type: object - type: array - name: - description: Name is a name for this role - type: string - policies: - description: Policies Stores a list of casbin formatted strings - that define access policies for the role in the project - items: - type: string - type: array - required: - - name - type: object - type: array - signatureKeys: - description: SignatureKeys contains a list of PGP key IDs that commits - in Git must be signed with in order to be allowed for sync - items: - description: SignatureKey is the specification of a key required - to verify commit signatures with - properties: - keyID: - description: The ID of the key in hexadecimal notation - type: string - required: - - keyID - type: object - type: array - sourceNamespaces: - description: SourceNamespaces defines the namespaces application resources - are allowed to be created in - items: - type: string - type: array - sourceRepos: - description: SourceRepos contains list of repository URLs which can - be used for deployment - items: - type: string - type: array - syncWindows: - description: SyncWindows controls when syncs can be run for apps in - this project - items: - description: SyncWindow contains the kind, time, duration and attributes - that are used to assign the syncWindows to apps - properties: - applications: - description: Applications contains a list of applications that - the window will apply to - items: - type: string - type: array - clusters: - description: Clusters contains a list of clusters that the window - will apply to - items: - type: string - type: array - duration: - description: Duration is the amount of time the sync window - will be open - type: string - kind: - description: Kind defines if the window allows or blocks syncs - type: string - manualSync: - description: ManualSync enables manual syncs when they would - otherwise be blocked - type: boolean - namespaces: - description: Namespaces contains a list of namespaces that the - window will apply to - items: - type: string - type: array - schedule: - description: Schedule is the time the window will begin, specified - in cron format - type: string - timeZone: - description: TimeZone of the sync that will be applied to the - schedule - type: string - type: object - type: array - type: object - status: - description: AppProjectStatus contains status information for AppProject - CRs - properties: - jwtTokensByRole: - additionalProperties: - description: JWTTokens represents a list of JWT tokens - properties: - items: - items: - description: JWTToken holds the issuedAt and expiresAt values - of a token - properties: - exp: - format: int64 - type: integer - iat: - format: int64 - type: integer - id: - type: string - required: - - iat - type: object - type: array - type: object - description: JWTTokensByRole contains a list of JWT tokens issued - for a given role - type: object - type: object - required: - - metadata - - spec - type: object - served: true - storage: true ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: applicationset-controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd - name: argocd-applicationset-controller ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: notifications-controller - app.kubernetes.io/name: argocd-notifications-controller - app.kubernetes.io/part-of: argocd - name: argocd-notifications-controller ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: redis - app.kubernetes.io/name: argocd-redis - app.kubernetes.io/part-of: argocd - name: argocd-redis ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: repo-server - app.kubernetes.io/name: argocd-repo-server - app.kubernetes.io/part-of: argocd - name: argocd-repo-server ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -rules: -- apiGroups: - - "" - resources: - - secrets - - configmaps - verbs: - - get - - list - - watch -- apiGroups: - - argoproj.io - resources: - - applications - - appprojects - verbs: - - create - - get - - list - - watch - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - list -- apiGroups: - - apps - resources: - - deployments - verbs: - - get - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/component: applicationset-controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd - name: argocd-applicationset-controller -rules: -- apiGroups: - - argoproj.io - resources: - - applications - - applicationsets - - applicationsets/finalizers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - argoproj.io - resources: - - appprojects - verbs: - - get -- apiGroups: - - argoproj.io - resources: - - applicationsets/status - verbs: - - get - - patch - - update -- apiGroups: - - "" - resources: - - events - verbs: - - create - - get - - list - - patch - - watch -- apiGroups: - - "" - resources: - - secrets - - configmaps - verbs: - - get - - list - - watch -- apiGroups: - - apps - - extensions - resources: - - deployments - verbs: - - get - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server -rules: -- apiGroups: - - "" - resources: - - secrets - - configmaps - verbs: - - get - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/component: notifications-controller - app.kubernetes.io/name: argocd-notifications-controller - app.kubernetes.io/part-of: argocd - name: argocd-notifications-controller -rules: -- apiGroups: - - argoproj.io - resources: - - applications - - appprojects - verbs: - - get - - list - - watch - - update - - patch -- apiGroups: - - "" - resources: - - configmaps - - secrets - verbs: - - list - - watch -- apiGroups: - - "" - resourceNames: - - argocd-notifications-cm - resources: - - configmaps - verbs: - - get -- apiGroups: - - "" - resourceNames: - - argocd-notifications-secret - resources: - - secrets - verbs: - - get ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -rules: -- apiGroups: - - "" - resources: - - secrets - - configmaps - verbs: - - create - - get - - list - - watch - - update - - patch - - delete -- apiGroups: - - argoproj.io - resources: - - applications - - appprojects - - applicationsets - verbs: - - create - - get - - list - - watch - - update - - delete - - patch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - list ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -rules: -- apiGroups: - - '*' - resources: - - '*' - verbs: - - '*' -- nonResourceURLs: - - '*' - verbs: - - '*' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/component: applicationset-controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd - name: argocd-applicationset-controller -rules: -- apiGroups: - - argoproj.io - resources: - - applications - - applicationsets - - applicationsets/finalizers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - argoproj.io - resources: - - applicationsets/status - verbs: - - get - - patch - - update -- apiGroups: - - argoproj.io - resources: - - appprojects - verbs: - - get -- apiGroups: - - "" - resources: - - events - verbs: - - create - - get - - list - - patch - - watch -- apiGroups: - - "" - resources: - - configmaps - verbs: - - create - - update - - delete - - get - - list - - patch - - watch -- apiGroups: - - "" - resources: - - secrets - verbs: - - get - - list - - watch -- apiGroups: - - apps - - extensions - resources: - - deployments - verbs: - - get - - list - - watch -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - create - - delete - - get - - list - - patch - - update - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -rules: -- apiGroups: - - '*' - resources: - - '*' - verbs: - - delete - - get - - patch -- apiGroups: - - "" - resources: - - events - verbs: - - list -- apiGroups: - - "" - resources: - - pods - - pods/log - verbs: - - get -- apiGroups: - - argoproj.io - resources: - - applications - - applicationsets - verbs: - - get - - list - - watch -- apiGroups: - - batch - resources: - - jobs - verbs: - - create -- apiGroups: - - argoproj.io - resources: - - workflows - verbs: - - create ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-application-controller -subjects: -- kind: ServiceAccount - name: argocd-application-controller ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: applicationset-controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd - name: argocd-applicationset-controller -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-applicationset-controller -subjects: -- kind: ServiceAccount - name: argocd-applicationset-controller ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-dex-server -subjects: -- kind: ServiceAccount - name: argocd-dex-server ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: notifications-controller - app.kubernetes.io/name: argocd-notifications-controller - app.kubernetes.io/part-of: argocd - name: argocd-notifications-controller -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-notifications-controller -subjects: -- kind: ServiceAccount - name: argocd-notifications-controller ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: argocd-server -subjects: -- kind: ServiceAccount - name: argocd-server ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: argocd-application-controller -subjects: -- kind: ServiceAccount - name: argocd-application-controller - namespace: argocd ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - labels: - app.kubernetes.io/component: applicationset-controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd - name: argocd-applicationset-controller -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: argocd-applicationset-controller -subjects: -- kind: ServiceAccount - name: argocd-applicationset-controller - namespace: argocd ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: argocd-server -subjects: -- kind: ServiceAccount - name: argocd-server - namespace: argocd ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-cm - app.kubernetes.io/part-of: argocd - name: argocd-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-cmd-params-cm - app.kubernetes.io/part-of: argocd - name: argocd-cmd-params-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-gpg-keys-cm - app.kubernetes.io/part-of: argocd - name: argocd-gpg-keys-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/component: notifications-controller - app.kubernetes.io/name: argocd-notifications-controller - app.kubernetes.io/part-of: argocd - name: argocd-notifications-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-rbac-cm - app.kubernetes.io/part-of: argocd - name: argocd-rbac-cm ---- -apiVersion: v1 -data: - ssh_known_hosts: | - # This file was automatically generated by hack/update-ssh-known-hosts.sh. DO NOT EDIT - [ssh.github.com]:443 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg= - [ssh.github.com]:443 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl - [ssh.github.com]:443 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk= - bitbucket.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPIQmuzMBuKdWeF4+a2sjSSpBK0iqitSQ+5BM9KhpexuGt20JpTVM7u5BDZngncgrqDMbWdxMWWOGtZ9UgbqgZE= - bitbucket.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIazEu89wgQZ4bqs3d63QSMzYVa0MuJ2e2gKTKqu+UUO - bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQeJzhupRu0u0cdegZIa8e86EG2qOCsIsD1Xw0xSeiPDlCr7kq97NLmMbpKTX6Esc30NuoqEEHCuc7yWtwp8dI76EEEB1VqY9QJq6vk+aySyboD5QF61I/1WeTwu+deCbgKMGbUijeXhtfbxSxm6JwGrXrhBdofTsbKRUsrN1WoNgUa8uqN1Vx6WAJw1JHPhglEGGHea6QICwJOAr/6mrui/oB7pkaWKHj3z7d1IC4KWLtY47elvjbaTlkN04Kc/5LFEirorGYVbt15kAUlqGM65pk6ZBxtaO3+30LVlORZkxOh+LKL/BvbZ/iRNhItLqNyieoQj/uh/7Iv4uyH/cV/0b4WDSd3DptigWq84lJubb9t/DnZlrJazxyDCulTmKdOR7vs9gMTo+uoIrPSb8ScTtvw65+odKAlBj59dhnVp9zd7QUojOpXlL62Aw56U4oO+FALuevvMjiWeavKhJqlR7i5n9srYcrNV7ttmDw7kf/97P5zauIhxcjX+xHv4M= - github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg= - github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl - github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk= - gitlab.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFSMqzJeV9rUzU4kWitGjeR4PWSa29SPqJ1fVkhtj3Hw9xjLVXVYrU9QlYWrOLXBpQ6KWjbjTDTdDkoohFzgbEY= - gitlab.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf - gitlab.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsj2bNKTBSpIYDEGk9KxsGh3mySTRgMtXL583qmBpzeQ+jqCMRgBqB98u3z++J1sKlXHWfM9dyhSevkMwSbhoR8XIq/U0tCNyokEi/ueaBMCvbcTHhO7FcwzY92WK4Yt0aGROY5qX2UKSeOvuP4D6TPqKF1onrSzH9bx9XUf2lEdWT/ia1NEKjunUqu1xOB/StKDHMoX4/OKyIzuS0q/T1zOATthvasJFoPrAjkohTyaDUz2LN5JoH839hViyEG82yB+MjcFV5MU3N1l1QL3cVUCh93xSaua1N85qivl+siMkPGbO5xR/En4iEY6K2XPASUEMaieWVNTRCtJ4S8H+9 - ssh.dev.azure.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Hr1oTWqNqOlzGJOfGJ4NakVyIzf1rXYd4d7wo6jBlkLvCA4odBlL0mDUyZ0/QUfTTqeu+tm22gOsv+VrVTMk6vwRU75gY/y9ut5Mb3bR5BV58dKXyq9A9UeB5Cakehn5Zgm6x1mKoVyf+FFn26iYqXJRgzIZZcZ5V6hrE0Qg39kZm4az48o0AUbf6Sp4SLdvnuMa2sVNwHBboS7EJkm57XQPVU3/QpyNLHbWDdzwtrlS+ez30S3AdYhLKEOxAG8weOnyrtLJAUen9mTkol8oII1edf7mWWbWVf0nBmly21+nZcmCTISQBtdcyPaEno7fFQMDD26/s0lfKob4Kw8H - vs-ssh.visualstudio.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Hr1oTWqNqOlzGJOfGJ4NakVyIzf1rXYd4d7wo6jBlkLvCA4odBlL0mDUyZ0/QUfTTqeu+tm22gOsv+VrVTMk6vwRU75gY/y9ut5Mb3bR5BV58dKXyq9A9UeB5Cakehn5Zgm6x1mKoVyf+FFn26iYqXJRgzIZZcZ5V6hrE0Qg39kZm4az48o0AUbf6Sp4SLdvnuMa2sVNwHBboS7EJkm57XQPVU3/QpyNLHbWDdzwtrlS+ez30S3AdYhLKEOxAG8weOnyrtLJAUen9mTkol8oII1edf7mWWbWVf0nBmly21+nZcmCTISQBtdcyPaEno7fFQMDD26/s0lfKob4Kw8H -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-ssh-known-hosts-cm - app.kubernetes.io/part-of: argocd - name: argocd-ssh-known-hosts-cm ---- -apiVersion: v1 -kind: ConfigMap -metadata: - labels: - app.kubernetes.io/name: argocd-tls-certs-cm - app.kubernetes.io/part-of: argocd - name: argocd-tls-certs-cm ---- -apiVersion: v1 -kind: Secret -metadata: - labels: - app.kubernetes.io/component: notifications-controller - app.kubernetes.io/name: argocd-notifications-controller - app.kubernetes.io/part-of: argocd - name: argocd-notifications-secret -type: Opaque ---- -apiVersion: v1 -kind: Secret -metadata: - labels: - app.kubernetes.io/name: argocd-secret - app.kubernetes.io/part-of: argocd - name: argocd-secret -type: Opaque ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: applicationset-controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd - name: argocd-applicationset-controller -spec: - ports: - - name: webhook - port: 7000 - protocol: TCP - targetPort: webhook - - name: metrics - port: 8080 - protocol: TCP - targetPort: metrics - selector: - app.kubernetes.io/name: argocd-applicationset-controller ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server -spec: - ports: - - appProtocol: TCP - name: http - port: 5556 - protocol: TCP - targetPort: 5556 - - name: grpc - port: 5557 - protocol: TCP - targetPort: 5557 - - name: metrics - port: 5558 - protocol: TCP - targetPort: 5558 - selector: - app.kubernetes.io/name: argocd-dex-server ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: metrics - app.kubernetes.io/name: argocd-metrics - app.kubernetes.io/part-of: argocd - name: argocd-metrics -spec: - ports: - - name: metrics - port: 8082 - protocol: TCP - targetPort: 8082 - selector: - app.kubernetes.io/name: argocd-application-controller ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: notifications-controller - app.kubernetes.io/name: argocd-notifications-controller-metrics - app.kubernetes.io/part-of: argocd - name: argocd-notifications-controller-metrics -spec: - ports: - - name: metrics - port: 9001 - protocol: TCP - targetPort: 9001 - selector: - app.kubernetes.io/name: argocd-notifications-controller ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: redis - app.kubernetes.io/name: argocd-redis - app.kubernetes.io/part-of: argocd - name: argocd-redis -spec: - ports: - - name: tcp-redis - port: 6379 - targetPort: 6379 - selector: - app.kubernetes.io/name: argocd-redis ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: repo-server - app.kubernetes.io/name: argocd-repo-server - app.kubernetes.io/part-of: argocd - name: argocd-repo-server -spec: - ports: - - name: server - port: 8081 - protocol: TCP - targetPort: 8081 - - name: metrics - port: 8084 - protocol: TCP - targetPort: 8084 - selector: - app.kubernetes.io/name: argocd-repo-server ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -spec: - ports: - - name: http - port: 80 - protocol: TCP - targetPort: 8080 - - name: https - port: 443 - protocol: TCP - targetPort: 8080 - selector: - app.kubernetes.io/name: argocd-server ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server-metrics - app.kubernetes.io/part-of: argocd - name: argocd-server-metrics -spec: - ports: - - name: metrics - port: 8083 - protocol: TCP - targetPort: 8083 - selector: - app.kubernetes.io/name: argocd-server ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: applicationset-controller - app.kubernetes.io/name: argocd-applicationset-controller - app.kubernetes.io/part-of: argocd - name: argocd-applicationset-controller -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-applicationset-controller - template: - metadata: - labels: - app.kubernetes.io/name: argocd-applicationset-controller - spec: - containers: - - args: - - /usr/local/bin/argocd-applicationset-controller - env: - - name: ARGOCD_APPLICATIONSET_CONTROLLER_GLOBAL_PRESERVED_ANNOTATIONS - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.global.preserved.annotations - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_GLOBAL_PRESERVED_LABELS - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.global.preserved.labels - name: argocd-cmd-params-cm - optional: true - - name: NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: ARGOCD_APPLICATIONSET_CONTROLLER_ENABLE_LEADER_ELECTION - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.enable.leader.election - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_REPO_SERVER - valueFrom: - configMapKeyRef: - key: repo.server - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_POLICY - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.policy - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_ENABLE_POLICY_OVERRIDE - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.enable.policy.override - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_DEBUG - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.debug - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_LOGFORMAT - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.log.format - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_LOGLEVEL - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.log.level - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_DRY_RUN - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.dryrun - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_GIT_MODULES_ENABLED - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.enable.git.submodule - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_ENABLE_PROGRESSIVE_SYNCS - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.enable.progressive.syncs - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_ENABLE_NEW_GIT_FILE_GLOBBING - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.enable.new.git.file.globbing - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_REPO_SERVER_PLAINTEXT - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.repo.server.plaintext - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_REPO_SERVER_STRICT_TLS - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.repo.server.strict.tls - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.repo.server.timeout.seconds - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_CONCURRENT_RECONCILIATIONS - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.concurrent.reconciliations.max - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_NAMESPACES - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.namespaces - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_SCM_ROOT_CA_PATH - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.scm.root.ca.path - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_ALLOWED_SCM_PROVIDERS - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.allowed.scm.providers - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATIONSET_CONTROLLER_ENABLE_SCM_PROVIDERS - valueFrom: - configMapKeyRef: - key: applicationsetcontroller.enable.scm.providers - name: argocd-cmd-params-cm - optional: true - image: quay.io/argoproj/argocd:v2.10.3 - imagePullPolicy: Always - name: argocd-applicationset-controller - ports: - - containerPort: 7000 - name: webhook - - containerPort: 8080 - name: metrics - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /app/config/ssh - name: ssh-known-hosts - - mountPath: /app/config/tls - name: tls-certs - - mountPath: /app/config/gpg/source - name: gpg-keys - - mountPath: /app/config/gpg/keys - name: gpg-keyring - - mountPath: /tmp - name: tmp - - mountPath: /app/config/reposerver/tls - name: argocd-repo-server-tls - serviceAccountName: argocd-applicationset-controller - volumes: - - configMap: - name: argocd-ssh-known-hosts-cm - name: ssh-known-hosts - - configMap: - name: argocd-tls-certs-cm - name: tls-certs - - configMap: - name: argocd-gpg-keys-cm - name: gpg-keys - - emptyDir: {} - name: gpg-keyring - - emptyDir: {} - name: tmp - - name: argocd-repo-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-repo-server-tls ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: dex-server - app.kubernetes.io/name: argocd-dex-server - app.kubernetes.io/part-of: argocd - name: argocd-dex-server -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-dex-server - template: - metadata: - labels: - app.kubernetes.io/name: argocd-dex-server - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - containers: - - command: - - /shared/argocd-dex - - rundex - env: - - name: ARGOCD_DEX_SERVER_DISABLE_TLS - valueFrom: - configMapKeyRef: - key: dexserver.disable.tls - name: argocd-cmd-params-cm - optional: true - image: ghcr.io/dexidp/dex:v2.37.0 - imagePullPolicy: Always - name: dex - ports: - - containerPort: 5556 - - containerPort: 5557 - - containerPort: 5558 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /shared - name: static-files - - mountPath: /tmp - name: dexconfig - - mountPath: /tls - name: argocd-dex-server-tls - initContainers: - - command: - - /bin/cp - - -n - - /usr/local/bin/argocd - - /shared/argocd-dex - image: quay.io/argoproj/argocd:v2.10.3 - imagePullPolicy: Always - name: copyutil - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /shared - name: static-files - - mountPath: /tmp - name: dexconfig - serviceAccountName: argocd-dex-server - volumes: - - emptyDir: {} - name: static-files - - emptyDir: {} - name: dexconfig - - name: argocd-dex-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-dex-server-tls ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: notifications-controller - app.kubernetes.io/name: argocd-notifications-controller - app.kubernetes.io/part-of: argocd - name: argocd-notifications-controller -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-notifications-controller - strategy: - type: Recreate - template: - metadata: - labels: - app.kubernetes.io/name: argocd-notifications-controller - spec: - containers: - - args: - - /usr/local/bin/argocd-notifications - env: - - name: ARGOCD_NOTIFICATIONS_CONTROLLER_LOGFORMAT - valueFrom: - configMapKeyRef: - key: notificationscontroller.log.format - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_NOTIFICATIONS_CONTROLLER_LOGLEVEL - valueFrom: - configMapKeyRef: - key: notificationscontroller.log.level - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_NAMESPACES - valueFrom: - configMapKeyRef: - key: application.namespaces - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_NOTIFICATION_CONTROLLER_SELF_SERVICE_NOTIFICATION_ENABLED - valueFrom: - configMapKeyRef: - key: notificationscontroller.selfservice.enabled - name: argocd-cmd-params-cm - optional: true - image: quay.io/argoproj/argocd:v2.10.3 - imagePullPolicy: Always - livenessProbe: - tcpSocket: - port: 9001 - name: argocd-notifications-controller - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - volumeMounts: - - mountPath: /app/config/tls - name: tls-certs - - mountPath: /app/config/reposerver/tls - name: argocd-repo-server-tls - workingDir: /app - securityContext: - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - serviceAccountName: argocd-notifications-controller - volumes: - - configMap: - name: argocd-tls-certs-cm - name: tls-certs - - name: argocd-repo-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-repo-server-tls ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: redis - app.kubernetes.io/name: argocd-redis - app.kubernetes.io/part-of: argocd - name: argocd-redis -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-redis - template: - metadata: - labels: - app.kubernetes.io/name: argocd-redis - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/name: argocd-redis - topologyKey: kubernetes.io/hostname - weight: 100 - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - containers: - - args: - - --save - - "" - - --appendonly - - "no" - image: redis:7.0.14-alpine - imagePullPolicy: Always - name: redis - ports: - - containerPort: 6379 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - securityContext: - runAsNonRoot: true - runAsUser: 999 - seccompProfile: - type: RuntimeDefault - serviceAccountName: argocd-redis ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: repo-server - app.kubernetes.io/name: argocd-repo-server - app.kubernetes.io/part-of: argocd - name: argocd-repo-server -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-repo-server - template: - metadata: - labels: - app.kubernetes.io/name: argocd-repo-server - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/name: argocd-repo-server - topologyKey: kubernetes.io/hostname - weight: 100 - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - automountServiceAccountToken: false - containers: - - args: - - /usr/local/bin/argocd-repo-server - env: - - name: ARGOCD_RECONCILIATION_TIMEOUT - valueFrom: - configMapKeyRef: - key: timeout.reconciliation - name: argocd-cm - optional: true - - name: ARGOCD_REPO_SERVER_LOGFORMAT - valueFrom: - configMapKeyRef: - key: reposerver.log.format - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_LOGLEVEL - valueFrom: - configMapKeyRef: - key: reposerver.log.level - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_PARALLELISM_LIMIT - valueFrom: - configMapKeyRef: - key: reposerver.parallelism.limit - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_LISTEN_ADDRESS - valueFrom: - configMapKeyRef: - key: reposerver.listen.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_LISTEN_METRICS_ADDRESS - valueFrom: - configMapKeyRef: - key: reposerver.metrics.listen.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_DISABLE_TLS - valueFrom: - configMapKeyRef: - key: reposerver.disable.tls - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_MIN_VERSION - valueFrom: - configMapKeyRef: - key: reposerver.tls.minversion - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_MAX_VERSION - valueFrom: - configMapKeyRef: - key: reposerver.tls.maxversion - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_CIPHERS - valueFrom: - configMapKeyRef: - key: reposerver.tls.ciphers - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: reposerver.repo.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: REDIS_SERVER - valueFrom: - configMapKeyRef: - key: redis.server - name: argocd-cmd-params-cm - optional: true - - name: REDIS_COMPRESSION - valueFrom: - configMapKeyRef: - key: redis.compression - name: argocd-cmd-params-cm - optional: true - - name: REDISDB - valueFrom: - configMapKeyRef: - key: redis.db - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_DEFAULT_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: reposerver.default.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_OTLP_ADDRESS - valueFrom: - configMapKeyRef: - key: otlp.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_OTLP_INSECURE - valueFrom: - configMapKeyRef: - key: otlp.insecure - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_OTLP_HEADERS - valueFrom: - configMapKeyRef: - key: otlp.headers - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_MAX_COMBINED_DIRECTORY_MANIFESTS_SIZE - valueFrom: - configMapKeyRef: - key: reposerver.max.combined.directory.manifests.size - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_PLUGIN_TAR_EXCLUSIONS - valueFrom: - configMapKeyRef: - key: reposerver.plugin.tar.exclusions - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_ALLOW_OUT_OF_BOUNDS_SYMLINKS - valueFrom: - configMapKeyRef: - key: reposerver.allow.oob.symlinks - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_STREAMED_MANIFEST_MAX_TAR_SIZE - valueFrom: - configMapKeyRef: - key: reposerver.streamed.manifest.max.tar.size - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_STREAMED_MANIFEST_MAX_EXTRACTED_SIZE - valueFrom: - configMapKeyRef: - key: reposerver.streamed.manifest.max.extracted.size - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_HELM_MANIFEST_MAX_EXTRACTED_SIZE - valueFrom: - configMapKeyRef: - key: reposerver.helm.manifest.max.extracted.size - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_REPO_SERVER_DISABLE_HELM_MANIFEST_MAX_EXTRACTED_SIZE - valueFrom: - configMapKeyRef: - key: reposerver.disable.helm.manifest.max.extracted.size - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_GIT_MODULES_ENABLED - valueFrom: - configMapKeyRef: - key: reposerver.enable.git.submodule - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_GIT_LS_REMOTE_PARALLELISM_LIMIT - valueFrom: - configMapKeyRef: - key: reposerver.git.lsremote.parallelism.limit - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_GIT_REQUEST_TIMEOUT - valueFrom: - configMapKeyRef: - key: reposerver.git.request.timeout - name: argocd-cmd-params-cm - optional: true - - name: HELM_CACHE_HOME - value: /helm-working-dir - - name: HELM_CONFIG_HOME - value: /helm-working-dir - - name: HELM_DATA_HOME - value: /helm-working-dir - image: quay.io/argoproj/argocd:v2.10.3 - imagePullPolicy: Always - livenessProbe: - failureThreshold: 3 - httpGet: - path: /healthz?full=true - port: 8084 - initialDelaySeconds: 30 - periodSeconds: 30 - timeoutSeconds: 5 - name: argocd-repo-server - ports: - - containerPort: 8081 - - containerPort: 8084 - readinessProbe: - httpGet: - path: /healthz - port: 8084 - initialDelaySeconds: 5 - periodSeconds: 10 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /app/config/ssh - name: ssh-known-hosts - - mountPath: /app/config/tls - name: tls-certs - - mountPath: /app/config/gpg/source - name: gpg-keys - - mountPath: /app/config/gpg/keys - name: gpg-keyring - - mountPath: /app/config/reposerver/tls - name: argocd-repo-server-tls - - mountPath: /tmp - name: tmp - - mountPath: /helm-working-dir - name: helm-working-dir - - mountPath: /home/argocd/cmp-server/plugins - name: plugins - initContainers: - - command: - - /bin/cp - - -n - - /usr/local/bin/argocd - - /var/run/argocd/argocd-cmp-server - image: quay.io/argoproj/argocd:v2.10.3 - name: copyutil - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /var/run/argocd - name: var-files - serviceAccountName: argocd-repo-server - volumes: - - configMap: - name: argocd-ssh-known-hosts-cm - name: ssh-known-hosts - - configMap: - name: argocd-tls-certs-cm - name: tls-certs - - configMap: - name: argocd-gpg-keys-cm - name: gpg-keys - - emptyDir: {} - name: gpg-keyring - - emptyDir: {} - name: tmp - - emptyDir: {} - name: helm-working-dir - - name: argocd-repo-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-repo-server-tls - - emptyDir: {} - name: var-files - - emptyDir: {} - name: plugins ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: server - app.kubernetes.io/name: argocd-server - app.kubernetes.io/part-of: argocd - name: argocd-server -spec: - selector: - matchLabels: - app.kubernetes.io/name: argocd-server - template: - metadata: - labels: - app.kubernetes.io/name: argocd-server - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - topologyKey: kubernetes.io/hostname - weight: 100 - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - containers: - - args: - - /usr/local/bin/argocd-server - env: - - name: ARGOCD_SERVER_INSECURE - valueFrom: - configMapKeyRef: - key: server.insecure - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_BASEHREF - valueFrom: - configMapKeyRef: - key: server.basehref - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_ROOTPATH - valueFrom: - configMapKeyRef: - key: server.rootpath - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_LOGFORMAT - valueFrom: - configMapKeyRef: - key: server.log.format - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_LOG_LEVEL - valueFrom: - configMapKeyRef: - key: server.log.level - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_REPO_SERVER - valueFrom: - configMapKeyRef: - key: repo.server - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_DEX_SERVER - valueFrom: - configMapKeyRef: - key: server.dex.server - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_DISABLE_AUTH - valueFrom: - configMapKeyRef: - key: server.disable.auth - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_ENABLE_GZIP - valueFrom: - configMapKeyRef: - key: server.enable.gzip - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_REPO_SERVER_TIMEOUT_SECONDS - valueFrom: - configMapKeyRef: - key: server.repo.server.timeout.seconds - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_X_FRAME_OPTIONS - valueFrom: - configMapKeyRef: - key: server.x.frame.options - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_CONTENT_SECURITY_POLICY - valueFrom: - configMapKeyRef: - key: server.content.security.policy - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_REPO_SERVER_PLAINTEXT - valueFrom: - configMapKeyRef: - key: server.repo.server.plaintext - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_REPO_SERVER_STRICT_TLS - valueFrom: - configMapKeyRef: - key: server.repo.server.strict.tls - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_DEX_SERVER_PLAINTEXT - valueFrom: - configMapKeyRef: - key: server.dex.server.plaintext - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_DEX_SERVER_STRICT_TLS - valueFrom: - configMapKeyRef: - key: server.dex.server.strict.tls - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_MIN_VERSION - valueFrom: - configMapKeyRef: - key: server.tls.minversion - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_MAX_VERSION - valueFrom: - configMapKeyRef: - key: server.tls.maxversion - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_TLS_CIPHERS - valueFrom: - configMapKeyRef: - key: server.tls.ciphers - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_CONNECTION_STATUS_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.connection.status.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_OIDC_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.oidc.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_LOGIN_ATTEMPTS_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.login.attempts.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_STATIC_ASSETS - valueFrom: - configMapKeyRef: - key: server.staticassets - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APP_STATE_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.app.state.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: REDIS_SERVER - valueFrom: - configMapKeyRef: - key: redis.server - name: argocd-cmd-params-cm - optional: true - - name: REDIS_COMPRESSION - valueFrom: - configMapKeyRef: - key: redis.compression - name: argocd-cmd-params-cm - optional: true - - name: REDISDB - valueFrom: - configMapKeyRef: - key: redis.db - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_DEFAULT_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: server.default.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_MAX_COOKIE_NUMBER - valueFrom: - configMapKeyRef: - key: server.http.cookie.maxnumber - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_LISTEN_ADDRESS - valueFrom: - configMapKeyRef: - key: server.listen.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_METRICS_LISTEN_ADDRESS - valueFrom: - configMapKeyRef: - key: server.metrics.listen.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_OTLP_ADDRESS - valueFrom: - configMapKeyRef: - key: otlp.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_OTLP_INSECURE - valueFrom: - configMapKeyRef: - key: otlp.insecure - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_OTLP_HEADERS - valueFrom: - configMapKeyRef: - key: otlp.headers - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_NAMESPACES - valueFrom: - configMapKeyRef: - key: application.namespaces - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_SERVER_ENABLE_PROXY_EXTENSION - valueFrom: - configMapKeyRef: - key: server.enable.proxy.extension - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_K8SCLIENT_RETRY_MAX - valueFrom: - configMapKeyRef: - key: server.k8sclient.retry.max - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_K8SCLIENT_RETRY_BASE_BACKOFF - valueFrom: - configMapKeyRef: - key: server.k8sclient.retry.base.backoff - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_API_CONTENT_TYPES - valueFrom: - configMapKeyRef: - key: server.api.content.types - name: argocd-cmd-params-cm - optional: true - image: quay.io/argoproj/argocd:v2.10.3 - imagePullPolicy: Always - livenessProbe: - httpGet: - path: /healthz?full=true - port: 8080 - initialDelaySeconds: 3 - periodSeconds: 30 - timeoutSeconds: 5 - name: argocd-server - ports: - - containerPort: 8080 - - containerPort: 8083 - readinessProbe: - httpGet: - path: /healthz - port: 8080 - initialDelaySeconds: 3 - periodSeconds: 30 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /app/config/ssh - name: ssh-known-hosts - - mountPath: /app/config/tls - name: tls-certs - - mountPath: /app/config/server/tls - name: argocd-repo-server-tls - - mountPath: /app/config/dex/tls - name: argocd-dex-server-tls - - mountPath: /home/argocd - name: plugins-home - - mountPath: /tmp - name: tmp - serviceAccountName: argocd-server - volumes: - - emptyDir: {} - name: plugins-home - - emptyDir: {} - name: tmp - - configMap: - name: argocd-ssh-known-hosts-cm - name: ssh-known-hosts - - configMap: - name: argocd-tls-certs-cm - name: tls-certs - - name: argocd-repo-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-repo-server-tls - - name: argocd-dex-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-dex-server-tls ---- -apiVersion: apps/v1 -kind: StatefulSet -metadata: - labels: - app.kubernetes.io/component: application-controller - app.kubernetes.io/name: argocd-application-controller - app.kubernetes.io/part-of: argocd - name: argocd-application-controller -spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - serviceName: argocd-application-controller - template: - metadata: - labels: - app.kubernetes.io/name: argocd-application-controller - spec: - affinity: - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - topologyKey: kubernetes.io/hostname - weight: 100 - - podAffinityTerm: - labelSelector: - matchLabels: - app.kubernetes.io/part-of: argocd - topologyKey: kubernetes.io/hostname - weight: 5 - containers: - - args: - - /usr/local/bin/argocd-application-controller - env: - - name: ARGOCD_CONTROLLER_REPLICAS - value: "1" - - name: ARGOCD_RECONCILIATION_TIMEOUT - valueFrom: - configMapKeyRef: - key: timeout.reconciliation - name: argocd-cm - optional: true - - name: ARGOCD_HARD_RECONCILIATION_TIMEOUT - valueFrom: - configMapKeyRef: - key: timeout.hard.reconciliation - name: argocd-cm - optional: true - - name: ARGOCD_RECONCILIATION_JITTER - valueFrom: - configMapKeyRef: - key: timeout.reconciliation.jitter - name: argocd-cm - optional: true - - name: ARGOCD_REPO_ERROR_GRACE_PERIOD_SECONDS - valueFrom: - configMapKeyRef: - key: controller.repo.error.grace.period.seconds - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER - valueFrom: - configMapKeyRef: - key: repo.server - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_TIMEOUT_SECONDS - valueFrom: - configMapKeyRef: - key: controller.repo.server.timeout.seconds - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_STATUS_PROCESSORS - valueFrom: - configMapKeyRef: - key: controller.status.processors - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_OPERATION_PROCESSORS - valueFrom: - configMapKeyRef: - key: controller.operation.processors - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_LOGFORMAT - valueFrom: - configMapKeyRef: - key: controller.log.format - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_LOGLEVEL - valueFrom: - configMapKeyRef: - key: controller.log.level - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_METRICS_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: controller.metrics.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_SELF_HEAL_TIMEOUT_SECONDS - valueFrom: - configMapKeyRef: - key: controller.self.heal.timeout.seconds - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_PLAINTEXT - valueFrom: - configMapKeyRef: - key: controller.repo.server.plaintext - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_REPO_SERVER_STRICT_TLS - valueFrom: - configMapKeyRef: - key: controller.repo.server.strict.tls - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_PERSIST_RESOURCE_HEALTH - valueFrom: - configMapKeyRef: - key: controller.resource.health.persist - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APP_STATE_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: controller.app.state.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: REDIS_SERVER - valueFrom: - configMapKeyRef: - key: redis.server - name: argocd-cmd-params-cm - optional: true - - name: REDIS_COMPRESSION - valueFrom: - configMapKeyRef: - key: redis.compression - name: argocd-cmd-params-cm - optional: true - - name: REDISDB - valueFrom: - configMapKeyRef: - key: redis.db - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_DEFAULT_CACHE_EXPIRATION - valueFrom: - configMapKeyRef: - key: controller.default.cache.expiration - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_OTLP_ADDRESS - valueFrom: - configMapKeyRef: - key: otlp.address - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_OTLP_INSECURE - valueFrom: - configMapKeyRef: - key: otlp.insecure - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_OTLP_HEADERS - valueFrom: - configMapKeyRef: - key: otlp.headers - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_NAMESPACES - valueFrom: - configMapKeyRef: - key: application.namespaces - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_CONTROLLER_SHARDING_ALGORITHM - valueFrom: - configMapKeyRef: - key: controller.sharding.algorithm - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_KUBECTL_PARALLELISM_LIMIT - valueFrom: - configMapKeyRef: - key: controller.kubectl.parallelism.limit - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_K8SCLIENT_RETRY_MAX - valueFrom: - configMapKeyRef: - key: controller.k8sclient.retry.max - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_K8SCLIENT_RETRY_BASE_BACKOFF - valueFrom: - configMapKeyRef: - key: controller.k8sclient.retry.base.backoff - name: argocd-cmd-params-cm - optional: true - - name: ARGOCD_APPLICATION_CONTROLLER_SERVER_SIDE_DIFF - valueFrom: - configMapKeyRef: - key: controller.diff.server.side - name: argocd-cmd-params-cm - optional: true - image: quay.io/argoproj/argocd:v2.10.3 - imagePullPolicy: Always - name: argocd-application-controller - ports: - - containerPort: 8082 - readinessProbe: - httpGet: - path: /healthz - port: 8082 - initialDelaySeconds: 5 - periodSeconds: 10 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: true - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - volumeMounts: - - mountPath: /app/config/controller/tls - name: argocd-repo-server-tls - - mountPath: /home/argocd - name: argocd-home - workingDir: /home/argocd - serviceAccountName: argocd-application-controller - volumes: - - emptyDir: {} - name: argocd-home - - name: argocd-repo-server-tls - secret: - items: - - key: tls.crt - path: tls.crt - - key: tls.key - path: tls.key - - key: ca.crt - path: ca.crt - optional: true - secretName: argocd-repo-server-tls ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-application-controller-network-policy -spec: - ingress: - - from: - - namespaceSelector: {} - ports: - - port: 8082 - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-applicationset-controller-network-policy -spec: - ingress: - - from: - - namespaceSelector: {} - ports: - - port: 7000 - protocol: TCP - - port: 8080 - protocol: TCP - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-applicationset-controller - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-dex-server-network-policy -spec: - ingress: - - from: - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - ports: - - port: 5556 - protocol: TCP - - port: 5557 - protocol: TCP - - from: - - namespaceSelector: {} - ports: - - port: 5558 - protocol: TCP - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-dex-server - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - labels: - app.kubernetes.io/component: notifications-controller - app.kubernetes.io/name: argocd-notifications-controller - app.kubernetes.io/part-of: argocd - name: argocd-notifications-controller-network-policy -spec: - ingress: - - from: - - namespaceSelector: {} - ports: - - port: 9001 - protocol: TCP - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-notifications-controller - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-redis-network-policy -spec: - egress: - - ports: - - port: 53 - protocol: UDP - - port: 53 - protocol: TCP - ingress: - - from: - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-repo-server - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - ports: - - port: 6379 - protocol: TCP - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-redis - policyTypes: - - Ingress - - Egress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-repo-server-network-policy -spec: - ingress: - - from: - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-application-controller - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-notifications-controller - - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-applicationset-controller - ports: - - port: 8081 - protocol: TCP - - from: - - namespaceSelector: {} - ports: - - port: 8084 - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-repo-server - policyTypes: - - Ingress ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: argocd-server-network-policy -spec: - ingress: - - {} - podSelector: - matchLabels: - app.kubernetes.io/name: argocd-server - policyTypes: - - Ingress diff --git a/examples/argocd/main.go b/examples/argocd/main.go deleted file mode 100644 index 2adc971..0000000 --- a/examples/argocd/main.go +++ /dev/null @@ -1,37 +0,0 @@ -package main - -import ( - _ "embed" - "encoding/json" - "fmt" - "os" - "strings" - - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/util/yaml" -) - -// install.yaml downloaded from https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml - -//go:embed install.yaml -var install string - -func main() { - if err := run(); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } -} - -func run() error { - var resources []*unstructured.Unstructured - for _, manifest := range strings.Split(install, "\n---\n") { - var resource unstructured.Unstructured - if err := yaml.Unmarshal([]byte(manifest), &resource); err != nil { - return err - } - resources = append(resources, &resource) - } - - return json.NewEncoder(os.Stdout).Encode(resources) -} diff --git a/examples/internal/flights/argocd/6.6.0/argo-cd-6.6.0.tgz b/examples/internal/flights/argocd/6.6.0/argo-cd-6.6.0.tgz deleted file mode 100644 index 400be0be0a0d818c3056b8f18cfc4abb54e08bd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164306 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 n9?-?Qo0v4+7!Si_x!DE(9r>OV3W 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

$TP1L+L-uaB9tloeEg0&Rk$|vRbcJF3-o( z19KH3NR-G!!4g=_msG?uYp1S0^z0GPI7%k3ur&&t`euriU%t^a$MxesM=|+4aeNd7 zWHLsJBmkNn|GE8q_gUM_|FFNi$^W;O^2Lmx$G2H$T_S4pt8Cw`p`C9T$XO2et>tu= zyzPq_eo;X;KSU~+u;_&rq7Z+X5f$IyXED0MY(rjSMyMxm@E9i@(5?!dtmaX?3tmoq zdu>m_{ODt|BPZVqlYk{o?QLdWGjiH|j8f2k_z`F;MNu<6vRd*OB{BABMU-T-R#mX% zf>~!yv}Ci-Oi~2o3;I|sW8w~B?yk&(8J*;<~FxjeOI4@SVtzwNB zwYp^g9XLVAM?Md%2vW*$It|Cf#{-Of5ci?yP?V&RI~fOAcedG9CZ?0(?43jP8K>VO zG24fjJ<%eyC}Bj6OVhmH8W9Wc9OL+o;fiNQC(iI`UX)^6#U(~7&bqH1wRmQWB}Ok6 zqdf2^#w9kY&%JiI+)Xs%+X8vPsKlF?!t*-Z#1yW?xEh#NB8K+hwTs2ARHSl_4{@>D z0=~q>hPR0QlXbAlxRxzL1k^7X>WUS0eX_E?>o^fQqLPk#7GJ^wQ(Ho;y9#!Cw-D5o zz0?auT^(t~JWlr$$ybF*cYEV%+3k%>xE%pind_i7@1}F(9=`7Pu9hyATt+{j4yF6RNb~kIXwS=&_^4G1S zxTQ31aTo0tO1zfI(lZ~J5sZ=VP~u${{3i-RQ5t6LD|R3WWjE;ldRd2BX9 z&bk)Q?gcBZ$7h_FyL9`l-n!qPvgrMPh>~j(Upf(273%o_%)bBM+24J>W8DAm@9sX| z-2bnme6gf^F?;~b-z5qNWl<-e;+Zlb3BQ8OeFskT1_k#4*%c0l?&S~Me0FDF0s})A zb}gvj6vaiCeCbN}qV=zZ=k&a|`+@OCG3&K6$6+E|++)JNkYFh;6cH2Q*OZ)Evv3OB zIiEzzJJ12g;V?#&%D;}(ABg`$RZ561K9(k*31-!I01Mde7fA(IQhG{{P^#VyMlnf< zM}iJGKRlh)L1nlRTOTHt|_@ z`<@n8#Jb!{q5y13iHCRWDi<5N4IXXVO^B9&F@-MpcU#lKp~qnXF9$|U?hR%x5g8<` z4Qwcae5v?=2L)U(G~{~NQo@)L^f)KK^Bxp>S$HGL-o;;AUi#L`qVj*__v<_U$}&g( zZ@2gN4EcX|XJ>aK|F5G|*=LCV3ez}^m?Zjh>JL%EpScVlH|k70*E@IVVsN#&#)cgkcy@vDOzLZ+_@>M#i_-s?1ZYtPFqi(fcTM`=ezBqd zYbo>Jf6TBD*`0DTnXwN&%~4lp9sCnalM#vWpWND^*?$CcI3odiFwaUnGLA@y!sHgO z71qKCmMZ&5X@%0HE>uTW#%z72UBcO8+GaETjU=yZh$Y7Ew>a8u789-}{IH)y^g(Ek|*F!WH|+^z<$R_*vyB3m}~;^mg|Ka?u}GWE)m#Uiw!n*Z75mh^utV>B&;{_nMS%=_Q{y^Z~6Jw+GZfqMue*vA16Y~voB9!vT~ z-Pe$UrrdNK4qcDLh)~xf`XC%2!D$OEA!B4Xd2iys%7QQnU+7i%=IN_rwN;vkF7bsCch#d$QZ>L{88 z9RD}z^J8**Dq(r4!q0mrH{;AB1j~uRS>Ge@E_U&a*!T^Uy7FJ10AOMF@45Q_vlq_| z`LE5YZ{)u<6pQ{}%xO`G*jjwizFl$&*Ca8XD?*pRZYhlwGEaOs!zCW5V{Jr9x^XY$<iwU8 z{u4wK@&Atcng^DtMF{4c|J|M47p423_KVH=Uq`VX+Ee1+_QYnG;V_I@*SRf)-)N3d zFm~yvH6rA)*#R7VY06VZWyYjJv~-IXi4iT`2#ukKO1CsFhDtZu7Q=#OL7+y+yUau1 zmLq~@z&%GanHLw-R#}SAJopKVi6DO zW>T3c9W*Ug`~onW6;i_-IiVyO7}4mpSo98XyzHN1f4u+$XSC4e0dS(q@IC;C1Hx17 za8@@*Ajkr3G7|NlDiGYwoK!{s&yEgWy*+Zr{t{@+O!~jue%5|r_H9U=M@1ehlD zDWHh|KZz6M%Rl-!8N-P3d5k6ziUTqX$dI~?#&_R=^EZEcb=GL~dc8iRqXr}UfRRD~ zeINKR^d~;L;vvatr`1wFpnyauc853_rF{kkaXdtG9MS{^LDo7uG;EYcfrAqdgE2pMr!WFz7TIPXGxK`$?@FheH4bZ3SaU6BG*oON&p=8^9Kc#C^Axtxow~ z1C=2iQ0yZQ#sFSH959}~-FO0$Ya*tBpf|FOOapj@Dh8&DjZF2S*^V5CNlg6IV_h^F z=Q)V_gd{YH`CbAY9jS(o+hBx;qhONvD#6qebEXMQ&>#&cVlZbN{g$QY$&kB{v1c22 z;?+I))LqKA~^%%q?K-2{Xl%qLi z2UMgb%z!(H$v9icPcL`f9kM1+i(%B~8CrKjN9!Y5|`)?8> z)RKpjQI8n+Tb8M8KNb9;#+Kv&VDenTSDa}qvb&xJV11EnVLii_s0TtMI8+}=!%50m z7Q_4jPQZkuF|Q(-$*~~f#yLDE8FkM#Y^@yUoQ*1kb|6vYBm34$OuMx}`E7`P-W{hjZL!_=#v%4i@kpA*~?1}K*= z3LvG#!;sM+z6&|M5vUaK27*lpy_2uyP=~7+cR(0r=WF9UIfrq!3G8PL;GC8siKqFX zVwV;2T?sX*(U^i$)fAXz3SJ@V#h42vrLPaFu%(EVucGtDwBuBkS>GO5S?N-yjVb7v zCY4^kfdZj<1)$kn$~)cT6tB0EeO5C};ILw92^`Ms1N5G|yY4dw1`!U?l4q&SFi$&I zF;P}Q#$%s3-Q&RtNls(Ln8Pxro6k|R&lKi3Krv#gwtLvOWQO81KXtC3Ckntgul^z%lMJA`$YfJM5fcKL$jM|xhO-<^DYzbCZv;Ygg<>#dFptTYB$;|9aM}fjT$kr| za4MwM9Tyxh=@a=jxTnjL3q z4kOs1k3O@pI6!-RvDO#TJzk?5ArB8QUl&t&V*pKiM6RcbhW@HH=1zst?>Jqy1fV*% zK#^%QJvlTxhwN{qEf^3?hy>kACb!Ho1;3&Y3B1qEjHQdR{1R=U&Mi=cX+pRM&N;b6 zVGm5fyNGGmwjh*IXFFLfb^MO4FiVj46>P?et*go^ae1XtHH(s81oC``D0Ci zR-GXwV;Llr!p-XgAUj?9gh4M%gP>QKx$sP_37{#Ej;!mOw3_*s8#!++OlXN?h{MfD zcS@14>*j{k2UJ#1MDttpo;fss#*+{Lxp#wR^ImFpAM!GJn(UN<-9Jq38cT{!uTENGe)Cx|uy4uO0T zM8d(>Su0GF(P4m5m@D#Ad1oCFN^w8n%Dj&$H&%MQDmO9%55)-{umvH?c;|?*O1V6) z-8Z$)n}DMPN0nwsnqOnBg|y(VC0jNV3690jz-Pa+9irkJzW`A^FhRV3&rqA`i94%O zWGbOpNGYCU&?)~}2Ok_Tr9mh(1{kk#5QwX(=&Q^8Q_yQaTRRlxv;QI(r$7b}crYlK zm9GOu>8p4?iV+==z?YP}n<~~Me}5=&WKdkOWx@i*0mMNXBNK|hh@T%M6jz3dIuv6B zeSA0el67$(!MQH}V!-iM48{cHeK(05|dNmuD^t+> z(ER1i`|j&kKR2I>e;vGe)BLowtNz?Lfs41*Q*aPYz!eOzFRdY>5)fX{RJhV{jbHee zDFzIqD8SN zbj5ew9yGuKQZ5q`ZZ0^M?zWf;H;QD0LUW_o=V3_VHJ;p}p(V3N=SVXJho|pbZ_${< z6TaTUeSAoKZdVh{xbrf9VHw~tPVSpkTN>(D)VZ#f4UjkS0#txvb_4ZBeFm=yxm1#y zJd5}4ma0_Nb?#vK)~a|n#o(q{tu+sa2T<09i)rM;1a%Ys41%Yv=uN?U{$u_+BF8`l z#qNWF;u+zdXktlA1*ir^9wz5^EmTAgOu-TRQ3fy&0U`uWo;{qiEDDoHmLhxPJ&HSA z71*bA|75v)%KhLU(Df4o-R{b+@rqFFb7+CM(heGep9!lt2be1 zQ2eHEOV`L>zUkZ2HPXg!`nL4z!SUO=EnWRntSUHuTeqcaxl+XA3|lrNc!@u4me4-JAt5iX`@hAQus zK(r(PJp~@W-pC$RV;(K+-)X3BU6T>$RYpkfZQCsze9GBQpO1JfGQh}-awo{nONInE z1h51qcO4s8yJ*XFOoYCB=LIPKk&-wa>-TnVafrw1Sc^U-uD&S<5o3igo-oQXhFAo9 z6Fn?zc1tW%(A!-T?KT|`rr>w(aiE9IS;Xl8mfRF_Hw4+^x*QQ!fBTt3(QrJlc^wq( zstY(Cl=f<^z6T}hWjY>|ybiLB4vCK*io*dftH0^hEF23v9#|q--K(-j=q+@~+r8&- zE0z`A@bW|o7N4Q=@ntnNOng9xc=ZTqYC77`HkC&>YMA;C|Mm3#={mBkUga?Wpbx!( z%EQB53J*82E%QbEHL5;}ZJM&awpN?aFEHjIN&Et1Di6lpJ7-Wd^+j#yMHR=I`r@6j zYcajCcqDS2Q4jTRcn6;_!Ys2}GrAoSCVf*p40)`ehf`KhwzZ@OW~hhr?9&5>kY|5sdwVFu@0d0h1AQ`^7(Gtf4%zrgS>zLBR5WLjw|f!ZSTiLqNhTDwFU|{`!<{ z^#Lhw5hLa2lBW^}F#E=xnS2g2D|Ej;%*tgQnm{2{hOR`ZEE=2*pwBA47UYqo z3sCIl9<=urig6kq(DxL@9njv{*?9^E^jGn`Nc_papOEm3kVK?2s|j}w#j4CBw*zM$ zssFx0(*mxiA~yVKjIVHjhUkcTP{dpA04@eUWm1Jl#?fg^1~@<+@CArGnrCU4;4xB> zb8i^Ok6<4M{M@p7z>i7P0Uto~;LV#R_yiW&9B7i+d?oL$P#j|)@i5CoM0u07nIget zAsIUb%8VBGaYw|aG@C0W6hT#3sw@PRdYd4SI3oT%g;jM~J-N;Et{U*HfMQ;MMYCE# zStAs!X*A8Dr{F9P<1FJ4W<3C&IFl#tD?I{4gO9BHphG8q8Jx;y+OaGHIKBSY-;@JHO&pb#8^C@t)BBmhfQ#bM@S%1jTu* zdIP|`b8ciDN6F+BF2_We7Bi19Zjx7iDy(}X3?={%fVm3*Q*|F8@&Sbej0oikszu_c z0lp6rnAZSanJ7u+c-0W|cp%L#Pepp1JiA*dpB&Coo2_WBcPgvDJISEPC6)rKIa06^ z2`nCNnSve(@D+-8cAkrrQx|!btvh#KfTAflYEXRW$swkochz=xU#w1s%%E6)HJm|_ z=Nf##WeR#fws%+b?xhUHlPm~*35YyS`@<~SDjiFx=w*#kfF|_)7|~+p9G(CtqzMc? z1YQ%GFqpOuL``t?StJi5z{9bZj<5LBQo?ySO_8*y$$#Sz9G_l2=e(Tn3{#)e{eMnLLws9!goG+$eJG>30(c z%C}Pf=S>QMs3mUqm2)b029pu76o9#BCJAItS)Qs^bRxIkm018NfSRd8WRy&p5PAi! zU<`U^N3V{%7f1hd`tI!f=w4w4RGl6hRQ)k`O1PB#ckNdx}(` zgt4e2a-nKMIf+mV*@t^p)+l`&P-Gl{M$pR=$egGjq$|G&JfQ%JX_k5i-@D9_Q_z!X zFjp=&8c^hcPOe~(QOT}gFzWZGOi>I;!cL&j6g6g~Qg_l~o6MJb&1DLDAr4k)d#r+D zf&#>7*yI!@qaNefFd1=|3!e2SBY;^whw;7DO!Tg03VN+9XY$fJp9RHv#xsLNMvzj$ zU^J9`cTec#I(f8#i{dSB&Rt%UYrwNFr(uEv0M&7oe#L+_pn#-_Tkov1wsMeFpY*SH zqE+_uTxdLv84u1}hk*3dNI>pg#2B`$lOb)l&~KJiodTMABLFFg5yyKR4xh@Mk*~3z zf+V0q3=)av$0WYhec9@9F-y#Dm>Dx4Z9hv?|As*SXBfcH!{M+cetQsQ^^%T)VkxPj zp7m3~QR&nVO8;BOQ*#AHd7zDWWp9a(2a^nnN=kfSCbN}h$1(w#`IyZHWuC=ed-U^A z;i|8{SwUiVt@9ET^;GY7NbxTFyf;bSSD)ftK`{xa{a#sEWW}>;ZVnW+c&yL_ z#bX@GJN+<&-oq)G7-)h*Ac}UGBt5x}*HKI-a3eJ4uhGBmQWh%GZP;A3hvI}k2Nsr( ztg?BI<51;=vRPMwEim=jF00vp5%ePxC(;_+%dh z9}E!1rRonW${SIDqH-fH+)8LPQ{bfLRVx|@w;OiC?{QflE-ENS#q0jec3^^!=J31s z*Zury(atKL7TKVfT><1!w1e(}yf5Hn@HLw+X9%fG`J&-^4qF)w?Utfnw!51QX-#^FxHMP8a9BLn!g^ z`}i(leKw&gT>KW^A$;`{{Y|_>SRXFhL+-0Q1w73DgS~2B9~9-Oa-~%(p9UJFvmqrr36J0;gahh4+n-EitRN*@fR4(f#87GcsKy$W%c>G z6{MmV6COT1fRt(m#?tRx0?c3eXwS6nZCR&7g)Insy$I~(hi~^Q9;*?{{>LA+NcQZH zyT!3Dy$-x%JbMMrO+@>pMzqf_7;T9}idjTP*=^${fk@tY;eCTOKY%qkfCA=&NfNO7 zyZ{*#t?5|m?Ce=qYj-*pO-j+? zAIy@gR*S=7j3_-z14KW3a;Z!RNPF4d0`(jCBSj+3xk!3gqQN`_D(?=&=~sQ@IqiM; zRAaS_yyby2&-sfwny7c%{AcxtUyDR7;-BVLH7fWRVacgF=Q@^+>@2rih83N5&spYamu;;CDDNlt|m45@` zBVWwDY^-@&`$4KcyMvV7NMdDBXNATfzyBTHmdeR^b0xKk^;FmNACj6mx2Fn-) z2vQ`V2}A#30C)9Jv>Qlg*+@mO&JlE|Oj1eFio&KZtE|CLD)Xke5iDk#7T$uKad8(S zB62me`W%`*Ody~MiSK`2j5R{h8Lme>b7i{ttLG*HkXisb9)gC)srwDZA(zOc8SZ|T)w{FmQ1r-n z48shH+9x1CiTLfvOOyM4iuJPkAXqvSV>HAxk=Z1RP&_VTqpG>Gxh=I!LC+`NC5l~4 zR`bTb2t_R`=S(QxbJ4~qQ_$p}i@1n}veoLSnB)**pd$@CBdl zwb<_tUCr#4Sk}v<3*M|nTzs&utY9tH2VQ9=PY}o|JutQ+%jzA} zDq-!YliuQy9ZB)vNm> z5V0Q-&u4@K#CD*U0ZL8LFn*m#AnAiWuxO8>Or@2?^;VTpE=M}KnWnFWg5@QeJWLp> zlELy4ts?q1&|#^gvYu8z!txa!3@~zDqaYZ=5Ny4Az0Ki^K6@h=4pENt^nSv8+FLaQ zbIMU5feM0$2M_#kPeIRvt3K8-q6vwSOZQwMx#Tw4Gx5o^-#FmlA6?Mh0|D`}@Q!{u zj(`KOi(EkWI;~be^)6A;V!ykw-(SrN>MnHU(xHMP`iyCU!=VT%oP)B9IPXp36e%8D zteRcSN!XGYbi1#C7b72q35H)c;??Q_n2?ABWH{;apeu(Yq)7~Mm=q$1WJX0*8&F=I zA*ZUpiWx4c6x>#-7d(cayO-!%Ech+_4Cp1gW@n7M<0K?NF@KkS|I4)3p0`-_ zVbORBMlkjnd7xx)AKwd1dtIr%9fXr>IO&;O26`T%^x{%&_)IQy@Q?1r!QtUiw|nv1 z(LXPaUvb}4-UBFcuCKoG(prTgwZK}tM~7!e=h~9*>3S_|jnNR3u%`6D)_QjI>+!pj zd%8fal-5c|MNw(SS{Vpw3f7B2 zc|+KjVrv)th9=s}2^{iNG64=z_GrQv{{J6CS8R&I%Fjo?9-n}-?g2PGJO2IP{0RJZ z^iTffW9YiB{6GG~(a9@o#g(W)GDV^Y(J!Cn=s*hmW%0wi9L`h4+S=||E1>ftr# zmE7r#ul6{^iMirJ5P^riWMj3zlOP=(7*R?>V>it5B&$T$yJk9?3sRv*@Ou4}-A)q%x!C2(Q4uYNwejzbHpW!$P(9=ev*X#8m9W@>SUM)tE zcvtMh(4Y9|3XGB@qMcSt{eS`zq1YYbWR&(@Oj_Kpo~jPyIN)Og05L_L0raInw*1!w z4qrZVcid+V3?fEX*e8$;+fq*FY=VsjJEgEsu5$lN%9D?dkd(qC;xZi)hg#6iEDEXH zXej3fe1(F^Qvks~58l3!+2Oc+%VEynR*#U#sghFy?WWIzArpe5m|S6>=RIXz$c3x@ z;ZUgpb^%h(K#t{3;5ev)z)#@GlXDzBdC~#@Bq^UmN>L%J+Xt`Kt@Mh}#b?Dd?ksT=NMsV8Sbi1AaXrC*(F7 zACANZfV}5VTMVrkR+H;6AkcTkH%uhhX~H^b+hv>y{`CSKwrKg<4v#rp`3 zC)v^cyQu#Y`1=^r1jWuUCTZlbjs6MzoukuFJ$AIl&>&@6Ck*c$IAG1kI0ȲRWh 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
`itkSUTv6jx-Xu0j;g{;D!zDL3hBX+KB|AU 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 )HF64nye!Nq|AH{K;DssdT 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 P00960Rq^Bh0I(eZKG`%C diff --git a/examples/internal/flights/argocd/flight.go b/examples/internal/flights/argocd/flight.go deleted file mode 100644 index 8ca5c7f..0000000 --- a/examples/internal/flights/argocd/flight.go +++ /dev/null @@ -1,24 +0,0 @@ -package argocd - -import ( - _ "embed" - "fmt" - - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - - "github.com/yokecd/yoke/pkg/helm" -) - -//go:embed argo-cd-6.7.2.tgz -var archive []byte - -// RenderChart renders the chart downloaded from https://argoproj.github.io/argo-helm/argo-cd -// Producing version: 6.7.2 -func RenderChart(release, namespace string, values map[string]any) ([]*unstructured.Unstructured, error) { - chart, err := helm.LoadChartFromZippedArchive(archive) - if err != nil { - return nil, fmt.Errorf("failed to load chart from zipped archive: %w", err) - } - - return chart.Render(release, namespace, values) -} diff --git a/examples/internal/flights/mongodb/flight.go b/examples/internal/flights/mongodb/flight.go deleted file mode 100644 index aa1aa2e..0000000 --- a/examples/internal/flights/mongodb/flight.go +++ /dev/null @@ -1,22 +0,0 @@ -package mongodb - -import ( - _ "embed" - "fmt" - - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - - "github.com/yokecd/yoke/pkg/helm" -) - -//go:embed mongodb-14.13.0.tgz -var archive []byte - -func RenderChart(release, namespace string, values *Values) ([]*unstructured.Unstructured, error) { - chart, err := helm.LoadChartFromZippedArchive(archive) - if err != nil { - return nil, fmt.Errorf("failed to load chart from zipped archive: %w", err) - } - - return chart.Render(release, namespace, values) -} diff --git a/examples/internal/flights/mongodb/mongodb-14.13.0.tgz b/examples/internal/flights/mongodb/mongodb-14.13.0.tgz deleted file mode 100644 index eab6dce9177150d3352703f24de2ac07d35ca167..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91823 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 c>3Mpdo~P&OS<&Dc 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 Date: Tue, 4 Feb 2025 14:33:49 -0500 Subject: [PATCH 04/20] examples: rename to be more descriptive of the example --- Taskfile.yml | 4 ++-- examples/{kube => basic}/main.go | 0 examples/{pg => embeddedfs}/main.go | 0 examples/{pg => embeddedfs}/postgresql/.helmignore | 0 examples/{pg => embeddedfs}/postgresql/Chart.lock | 0 examples/{pg => embeddedfs}/postgresql/Chart.yaml | 0 examples/{pg => embeddedfs}/postgresql/README.md | 0 .../{pg => embeddedfs}/postgresql/charts/common/.helmignore | 0 .../{pg => embeddedfs}/postgresql/charts/common/Chart.yaml | 0 .../{pg => embeddedfs}/postgresql/charts/common/README.md | 0 .../postgresql/charts/common/templates/_affinities.tpl | 0 .../postgresql/charts/common/templates/_capabilities.tpl | 0 .../postgresql/charts/common/templates/_errors.tpl | 0 .../postgresql/charts/common/templates/_images.tpl | 0 .../postgresql/charts/common/templates/_ingress.tpl | 0 .../postgresql/charts/common/templates/_labels.tpl | 0 .../postgresql/charts/common/templates/_names.tpl | 0 .../postgresql/charts/common/templates/_resources.tpl | 0 .../postgresql/charts/common/templates/_secrets.tpl | 0 .../postgresql/charts/common/templates/_storage.tpl | 0 .../postgresql/charts/common/templates/_tplvalues.tpl | 0 .../postgresql/charts/common/templates/_utils.tpl | 0 .../postgresql/charts/common/templates/_warnings.tpl | 0 .../charts/common/templates/validations/_cassandra.tpl | 0 .../charts/common/templates/validations/_mariadb.tpl | 0 .../charts/common/templates/validations/_mongodb.tpl | 0 .../postgresql/charts/common/templates/validations/_mysql.tpl | 0 .../charts/common/templates/validations/_postgresql.tpl | 0 .../postgresql/charts/common/templates/validations/_redis.tpl | 0 .../charts/common/templates/validations/_validations.tpl | 0 .../{pg => embeddedfs}/postgresql/charts/common/values.yaml | 0 examples/{pg => embeddedfs}/postgresql/templates/NOTES.txt | 0 examples/{pg => embeddedfs}/postgresql/templates/_helpers.tpl | 0 .../postgresql/templates/backup/cronjob.yaml | 0 .../{pg => embeddedfs}/postgresql/templates/backup/pvc.yaml | 0 .../{pg => embeddedfs}/postgresql/templates/extra-list.yaml | 0 .../postgresql/templates/primary/configmap.yaml | 0 .../postgresql/templates/primary/extended-configmap.yaml | 0 .../templates/primary/initialization-configmap.yaml | 0 .../postgresql/templates/primary/metrics-configmap.yaml | 0 .../postgresql/templates/primary/metrics-svc.yaml | 0 .../postgresql/templates/primary/networkpolicy.yaml | 0 .../postgresql/templates/primary/servicemonitor.yaml | 0 .../postgresql/templates/primary/statefulset.yaml | 0 .../postgresql/templates/primary/svc-headless.yaml | 0 .../{pg => embeddedfs}/postgresql/templates/primary/svc.yaml | 0 .../postgresql/templates/prometheusrule.yaml | 0 examples/{pg => embeddedfs}/postgresql/templates/psp.yaml | 0 .../postgresql/templates/read/extended-configmap.yaml | 0 .../postgresql/templates/read/metrics-configmap.yaml | 0 .../postgresql/templates/read/metrics-svc.yaml | 0 .../postgresql/templates/read/networkpolicy.yaml | 0 .../postgresql/templates/read/servicemonitor.yaml | 0 .../postgresql/templates/read/statefulset.yaml | 0 .../postgresql/templates/read/svc-headless.yaml | 0 .../{pg => embeddedfs}/postgresql/templates/read/svc.yaml | 0 examples/{pg => embeddedfs}/postgresql/templates/role.yaml | 0 .../{pg => embeddedfs}/postgresql/templates/rolebinding.yaml | 0 examples/{pg => embeddedfs}/postgresql/templates/secrets.yaml | 0 .../postgresql/templates/serviceaccount.yaml | 0 .../{pg => embeddedfs}/postgresql/templates/tls-secrets.yaml | 0 examples/{pg => embeddedfs}/postgresql/values.schema.json | 0 examples/{pg => embeddedfs}/postgresql/values.yaml | 0 examples/{pg => embeddedfs}/values.go | 0 64 files changed, 2 insertions(+), 2 deletions(-) rename examples/{kube => basic}/main.go (100%) rename examples/{pg => embeddedfs}/main.go (100%) rename examples/{pg => embeddedfs}/postgresql/.helmignore (100%) rename examples/{pg => embeddedfs}/postgresql/Chart.lock (100%) rename examples/{pg => embeddedfs}/postgresql/Chart.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/README.md (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/.helmignore (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/Chart.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/README.md (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_affinities.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_capabilities.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_errors.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_images.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_ingress.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_labels.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_names.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_resources.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_secrets.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_storage.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_tplvalues.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_utils.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/_warnings.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/validations/_cassandra.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/validations/_mariadb.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/validations/_mongodb.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/validations/_mysql.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/validations/_postgresql.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/validations/_redis.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/templates/validations/_validations.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/charts/common/values.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/NOTES.txt (100%) rename examples/{pg => embeddedfs}/postgresql/templates/_helpers.tpl (100%) rename examples/{pg => embeddedfs}/postgresql/templates/backup/cronjob.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/backup/pvc.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/extra-list.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/configmap.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/extended-configmap.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/initialization-configmap.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/metrics-configmap.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/metrics-svc.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/networkpolicy.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/servicemonitor.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/statefulset.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/svc-headless.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/primary/svc.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/prometheusrule.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/psp.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/read/extended-configmap.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/read/metrics-configmap.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/read/metrics-svc.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/read/networkpolicy.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/read/servicemonitor.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/read/statefulset.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/read/svc-headless.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/read/svc.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/role.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/rolebinding.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/secrets.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/serviceaccount.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/templates/tls-secrets.yaml (100%) rename examples/{pg => embeddedfs}/postgresql/values.schema.json (100%) rename examples/{pg => embeddedfs}/postgresql/values.yaml (100%) rename examples/{pg => embeddedfs}/values.go (100%) diff --git a/Taskfile.yml b/Taskfile.yml index 434c1ce..c51b7fb 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -46,11 +46,11 @@ tasks: kube: cmds: - - GOOS=wasip1 GOARCH=wasm go build -o kube.wasm ./examples/kube + - GOOS=wasip1 GOARCH=wasm go build -o basic.wasm ./examples/basic pg: cmds: - - GOOS=wasip1 GOARCH=wasm go build -o pg.wasm ./examples/pg + - GOOS=wasip1 GOARCH=wasm go build -o pg.wasm ./examples/embeddedfs redis: cmds: diff --git a/examples/kube/main.go b/examples/basic/main.go similarity index 100% rename from examples/kube/main.go rename to examples/basic/main.go diff --git a/examples/pg/main.go b/examples/embeddedfs/main.go similarity index 100% rename from examples/pg/main.go rename to examples/embeddedfs/main.go diff --git a/examples/pg/postgresql/.helmignore b/examples/embeddedfs/postgresql/.helmignore similarity index 100% rename from examples/pg/postgresql/.helmignore rename to examples/embeddedfs/postgresql/.helmignore diff --git a/examples/pg/postgresql/Chart.lock b/examples/embeddedfs/postgresql/Chart.lock similarity index 100% rename from examples/pg/postgresql/Chart.lock rename to examples/embeddedfs/postgresql/Chart.lock diff --git a/examples/pg/postgresql/Chart.yaml b/examples/embeddedfs/postgresql/Chart.yaml similarity index 100% rename from examples/pg/postgresql/Chart.yaml rename to examples/embeddedfs/postgresql/Chart.yaml diff --git a/examples/pg/postgresql/README.md b/examples/embeddedfs/postgresql/README.md similarity index 100% rename from examples/pg/postgresql/README.md rename to examples/embeddedfs/postgresql/README.md diff --git a/examples/pg/postgresql/charts/common/.helmignore b/examples/embeddedfs/postgresql/charts/common/.helmignore similarity index 100% rename from examples/pg/postgresql/charts/common/.helmignore rename to examples/embeddedfs/postgresql/charts/common/.helmignore diff --git a/examples/pg/postgresql/charts/common/Chart.yaml b/examples/embeddedfs/postgresql/charts/common/Chart.yaml similarity index 100% rename from examples/pg/postgresql/charts/common/Chart.yaml rename to examples/embeddedfs/postgresql/charts/common/Chart.yaml diff --git a/examples/pg/postgresql/charts/common/README.md b/examples/embeddedfs/postgresql/charts/common/README.md similarity index 100% rename from examples/pg/postgresql/charts/common/README.md rename to examples/embeddedfs/postgresql/charts/common/README.md diff --git a/examples/pg/postgresql/charts/common/templates/_affinities.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_affinities.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_affinities.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_affinities.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_capabilities.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_capabilities.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_capabilities.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_capabilities.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_errors.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_errors.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_errors.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_errors.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_images.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_images.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_images.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_images.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_ingress.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_ingress.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_ingress.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_ingress.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_labels.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_labels.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_labels.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_labels.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_names.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_names.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_names.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_names.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_resources.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_resources.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_resources.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_resources.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_secrets.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_secrets.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_secrets.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_secrets.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_storage.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_storage.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_storage.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_storage.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_tplvalues.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_tplvalues.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_tplvalues.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_tplvalues.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_utils.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_utils.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_utils.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_utils.tpl diff --git a/examples/pg/postgresql/charts/common/templates/_warnings.tpl b/examples/embeddedfs/postgresql/charts/common/templates/_warnings.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/_warnings.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/_warnings.tpl diff --git a/examples/pg/postgresql/charts/common/templates/validations/_cassandra.tpl b/examples/embeddedfs/postgresql/charts/common/templates/validations/_cassandra.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/validations/_cassandra.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/validations/_cassandra.tpl diff --git a/examples/pg/postgresql/charts/common/templates/validations/_mariadb.tpl b/examples/embeddedfs/postgresql/charts/common/templates/validations/_mariadb.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/validations/_mariadb.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/validations/_mariadb.tpl diff --git a/examples/pg/postgresql/charts/common/templates/validations/_mongodb.tpl b/examples/embeddedfs/postgresql/charts/common/templates/validations/_mongodb.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/validations/_mongodb.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/validations/_mongodb.tpl diff --git a/examples/pg/postgresql/charts/common/templates/validations/_mysql.tpl b/examples/embeddedfs/postgresql/charts/common/templates/validations/_mysql.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/validations/_mysql.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/validations/_mysql.tpl diff --git a/examples/pg/postgresql/charts/common/templates/validations/_postgresql.tpl b/examples/embeddedfs/postgresql/charts/common/templates/validations/_postgresql.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/validations/_postgresql.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/validations/_postgresql.tpl diff --git a/examples/pg/postgresql/charts/common/templates/validations/_redis.tpl b/examples/embeddedfs/postgresql/charts/common/templates/validations/_redis.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/validations/_redis.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/validations/_redis.tpl diff --git a/examples/pg/postgresql/charts/common/templates/validations/_validations.tpl b/examples/embeddedfs/postgresql/charts/common/templates/validations/_validations.tpl similarity index 100% rename from examples/pg/postgresql/charts/common/templates/validations/_validations.tpl rename to examples/embeddedfs/postgresql/charts/common/templates/validations/_validations.tpl diff --git a/examples/pg/postgresql/charts/common/values.yaml b/examples/embeddedfs/postgresql/charts/common/values.yaml similarity index 100% rename from examples/pg/postgresql/charts/common/values.yaml rename to examples/embeddedfs/postgresql/charts/common/values.yaml diff --git a/examples/pg/postgresql/templates/NOTES.txt b/examples/embeddedfs/postgresql/templates/NOTES.txt similarity index 100% rename from examples/pg/postgresql/templates/NOTES.txt rename to examples/embeddedfs/postgresql/templates/NOTES.txt diff --git a/examples/pg/postgresql/templates/_helpers.tpl b/examples/embeddedfs/postgresql/templates/_helpers.tpl similarity index 100% rename from examples/pg/postgresql/templates/_helpers.tpl rename to examples/embeddedfs/postgresql/templates/_helpers.tpl diff --git a/examples/pg/postgresql/templates/backup/cronjob.yaml b/examples/embeddedfs/postgresql/templates/backup/cronjob.yaml similarity index 100% rename from examples/pg/postgresql/templates/backup/cronjob.yaml rename to examples/embeddedfs/postgresql/templates/backup/cronjob.yaml diff --git a/examples/pg/postgresql/templates/backup/pvc.yaml b/examples/embeddedfs/postgresql/templates/backup/pvc.yaml similarity index 100% rename from examples/pg/postgresql/templates/backup/pvc.yaml rename to examples/embeddedfs/postgresql/templates/backup/pvc.yaml diff --git a/examples/pg/postgresql/templates/extra-list.yaml b/examples/embeddedfs/postgresql/templates/extra-list.yaml similarity index 100% rename from examples/pg/postgresql/templates/extra-list.yaml rename to examples/embeddedfs/postgresql/templates/extra-list.yaml diff --git a/examples/pg/postgresql/templates/primary/configmap.yaml b/examples/embeddedfs/postgresql/templates/primary/configmap.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/configmap.yaml rename to examples/embeddedfs/postgresql/templates/primary/configmap.yaml diff --git a/examples/pg/postgresql/templates/primary/extended-configmap.yaml b/examples/embeddedfs/postgresql/templates/primary/extended-configmap.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/extended-configmap.yaml rename to examples/embeddedfs/postgresql/templates/primary/extended-configmap.yaml diff --git a/examples/pg/postgresql/templates/primary/initialization-configmap.yaml b/examples/embeddedfs/postgresql/templates/primary/initialization-configmap.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/initialization-configmap.yaml rename to examples/embeddedfs/postgresql/templates/primary/initialization-configmap.yaml diff --git a/examples/pg/postgresql/templates/primary/metrics-configmap.yaml b/examples/embeddedfs/postgresql/templates/primary/metrics-configmap.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/metrics-configmap.yaml rename to examples/embeddedfs/postgresql/templates/primary/metrics-configmap.yaml diff --git a/examples/pg/postgresql/templates/primary/metrics-svc.yaml b/examples/embeddedfs/postgresql/templates/primary/metrics-svc.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/metrics-svc.yaml rename to examples/embeddedfs/postgresql/templates/primary/metrics-svc.yaml diff --git a/examples/pg/postgresql/templates/primary/networkpolicy.yaml b/examples/embeddedfs/postgresql/templates/primary/networkpolicy.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/networkpolicy.yaml rename to examples/embeddedfs/postgresql/templates/primary/networkpolicy.yaml diff --git a/examples/pg/postgresql/templates/primary/servicemonitor.yaml b/examples/embeddedfs/postgresql/templates/primary/servicemonitor.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/servicemonitor.yaml rename to examples/embeddedfs/postgresql/templates/primary/servicemonitor.yaml diff --git a/examples/pg/postgresql/templates/primary/statefulset.yaml b/examples/embeddedfs/postgresql/templates/primary/statefulset.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/statefulset.yaml rename to examples/embeddedfs/postgresql/templates/primary/statefulset.yaml diff --git a/examples/pg/postgresql/templates/primary/svc-headless.yaml b/examples/embeddedfs/postgresql/templates/primary/svc-headless.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/svc-headless.yaml rename to examples/embeddedfs/postgresql/templates/primary/svc-headless.yaml diff --git a/examples/pg/postgresql/templates/primary/svc.yaml b/examples/embeddedfs/postgresql/templates/primary/svc.yaml similarity index 100% rename from examples/pg/postgresql/templates/primary/svc.yaml rename to examples/embeddedfs/postgresql/templates/primary/svc.yaml diff --git a/examples/pg/postgresql/templates/prometheusrule.yaml b/examples/embeddedfs/postgresql/templates/prometheusrule.yaml similarity index 100% rename from examples/pg/postgresql/templates/prometheusrule.yaml rename to examples/embeddedfs/postgresql/templates/prometheusrule.yaml diff --git a/examples/pg/postgresql/templates/psp.yaml b/examples/embeddedfs/postgresql/templates/psp.yaml similarity index 100% rename from examples/pg/postgresql/templates/psp.yaml rename to examples/embeddedfs/postgresql/templates/psp.yaml diff --git a/examples/pg/postgresql/templates/read/extended-configmap.yaml b/examples/embeddedfs/postgresql/templates/read/extended-configmap.yaml similarity index 100% rename from examples/pg/postgresql/templates/read/extended-configmap.yaml rename to examples/embeddedfs/postgresql/templates/read/extended-configmap.yaml diff --git a/examples/pg/postgresql/templates/read/metrics-configmap.yaml b/examples/embeddedfs/postgresql/templates/read/metrics-configmap.yaml similarity index 100% rename from examples/pg/postgresql/templates/read/metrics-configmap.yaml rename to examples/embeddedfs/postgresql/templates/read/metrics-configmap.yaml diff --git a/examples/pg/postgresql/templates/read/metrics-svc.yaml b/examples/embeddedfs/postgresql/templates/read/metrics-svc.yaml similarity index 100% rename from examples/pg/postgresql/templates/read/metrics-svc.yaml rename to examples/embeddedfs/postgresql/templates/read/metrics-svc.yaml diff --git a/examples/pg/postgresql/templates/read/networkpolicy.yaml b/examples/embeddedfs/postgresql/templates/read/networkpolicy.yaml similarity index 100% rename from examples/pg/postgresql/templates/read/networkpolicy.yaml rename to examples/embeddedfs/postgresql/templates/read/networkpolicy.yaml diff --git a/examples/pg/postgresql/templates/read/servicemonitor.yaml b/examples/embeddedfs/postgresql/templates/read/servicemonitor.yaml similarity index 100% rename from examples/pg/postgresql/templates/read/servicemonitor.yaml rename to examples/embeddedfs/postgresql/templates/read/servicemonitor.yaml diff --git a/examples/pg/postgresql/templates/read/statefulset.yaml b/examples/embeddedfs/postgresql/templates/read/statefulset.yaml similarity index 100% rename from examples/pg/postgresql/templates/read/statefulset.yaml rename to examples/embeddedfs/postgresql/templates/read/statefulset.yaml diff --git a/examples/pg/postgresql/templates/read/svc-headless.yaml b/examples/embeddedfs/postgresql/templates/read/svc-headless.yaml similarity index 100% rename from examples/pg/postgresql/templates/read/svc-headless.yaml rename to examples/embeddedfs/postgresql/templates/read/svc-headless.yaml diff --git a/examples/pg/postgresql/templates/read/svc.yaml b/examples/embeddedfs/postgresql/templates/read/svc.yaml similarity index 100% rename from examples/pg/postgresql/templates/read/svc.yaml rename to examples/embeddedfs/postgresql/templates/read/svc.yaml diff --git a/examples/pg/postgresql/templates/role.yaml b/examples/embeddedfs/postgresql/templates/role.yaml similarity index 100% rename from examples/pg/postgresql/templates/role.yaml rename to examples/embeddedfs/postgresql/templates/role.yaml diff --git a/examples/pg/postgresql/templates/rolebinding.yaml b/examples/embeddedfs/postgresql/templates/rolebinding.yaml similarity index 100% rename from examples/pg/postgresql/templates/rolebinding.yaml rename to examples/embeddedfs/postgresql/templates/rolebinding.yaml diff --git a/examples/pg/postgresql/templates/secrets.yaml b/examples/embeddedfs/postgresql/templates/secrets.yaml similarity index 100% rename from examples/pg/postgresql/templates/secrets.yaml rename to examples/embeddedfs/postgresql/templates/secrets.yaml diff --git a/examples/pg/postgresql/templates/serviceaccount.yaml b/examples/embeddedfs/postgresql/templates/serviceaccount.yaml similarity index 100% rename from examples/pg/postgresql/templates/serviceaccount.yaml rename to examples/embeddedfs/postgresql/templates/serviceaccount.yaml diff --git a/examples/pg/postgresql/templates/tls-secrets.yaml b/examples/embeddedfs/postgresql/templates/tls-secrets.yaml similarity index 100% rename from examples/pg/postgresql/templates/tls-secrets.yaml rename to examples/embeddedfs/postgresql/templates/tls-secrets.yaml diff --git a/examples/pg/postgresql/values.schema.json b/examples/embeddedfs/postgresql/values.schema.json similarity index 100% rename from examples/pg/postgresql/values.schema.json rename to examples/embeddedfs/postgresql/values.schema.json diff --git a/examples/pg/postgresql/values.yaml b/examples/embeddedfs/postgresql/values.yaml similarity index 100% rename from examples/pg/postgresql/values.yaml rename to examples/embeddedfs/postgresql/values.yaml diff --git a/examples/pg/values.go b/examples/embeddedfs/values.go similarity index 100% rename from examples/pg/values.go rename to examples/embeddedfs/values.go From 13df63751965aedff2e25fb1e5b93047528fce12 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Tue, 4 Feb 2025 14:41:39 -0500 Subject: [PATCH 05/20] wasi/k8s: make lookup generically allocate underlying resource --- pkg/flight/wasi/k8s/k8s.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pkg/flight/wasi/k8s/k8s.go b/pkg/flight/wasi/k8s/k8s.go index 001c5df..b44d84e 100644 --- a/pkg/flight/wasi/k8s/k8s.go +++ b/pkg/flight/wasi/k8s/k8s.go @@ -21,7 +21,7 @@ type ResourceIdentifier struct { ApiVersion string } -func Lookup(identifier ResourceIdentifier, resource any) error { +func Lookup[T any](identifier ResourceIdentifier) (*T, error) { var state wasm.State buffer := lookup( @@ -34,15 +34,19 @@ func Lookup(identifier ResourceIdentifier, resource any) error { switch state { case wasm.StateOK: - return json.Unmarshal(buffer.Slice(), &resource) + var resource T + if err := json.Unmarshal(buffer.Slice(), &resource); err != nil { + return nil, err + } + return &resource, nil case wasm.StateError: - return errors.New(buffer.String()) + return nil, errors.New(buffer.String()) case wasm.StateForbidden: - return ErrorForbidden(buffer.String()) + return nil, ErrorForbidden(buffer.String()) case wasm.StateNotFound: - return ErrorNotFound(buffer.String()) + return nil, ErrorNotFound(buffer.String()) case wasm.StateUnauthenticated: - return ErrorUnauthenticated(buffer.String()) + return nil, ErrorUnauthenticated(buffer.String()) default: panic("unknown state") From 158759c786e2d23a07b8802045a6f968a699515a Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Tue, 4 Feb 2025 14:55:26 -0500 Subject: [PATCH 06/20] examples: add lookup example --- examples/lookup/main.go | 57 +++++++++++++++++++++++++++++++++++++++++ examples/redis/main.go | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 examples/lookup/main.go diff --git a/examples/lookup/main.go b/examples/lookup/main.go new file mode 100644 index 0000000..f4c7b41 --- /dev/null +++ b/examples/lookup/main.go @@ -0,0 +1,57 @@ +package main + +import ( + "crypto/rand" + "encoding/json" + "fmt" + "os" + + "github.com/yokecd/yoke/pkg/flight" + "github.com/yokecd/yoke/pkg/flight/wasi/k8s" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func main() { + if err := run(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +func run() error { + secretName := flight.Release() + "-example" + + secret, err := k8s.Lookup[corev1.Secret](k8s.ResourceIdentifier{ + Name: secretName, + Namespace: flight.Namespace(), + Kind: "Secret", + ApiVersion: "v1", + }) + if err != nil && !k8s.IsErrNotFound(err) { + return fmt.Errorf("failed to lookup secret: %v", err) + } + + if secret != nil { + return json.NewEncoder(os.Stdout).Encode(secret) + } + + return json.NewEncoder(os.Stdout).Encode(corev1.Secret{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "Secret", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: secretName, + }, + StringData: map[string]string{ + "example": RandomString(), + }, + }) +} + +func RandomString() string { + buf := make([]byte, 6) + rand.Read(buf) + return fmt.Sprintf("%x", buf) +} diff --git a/examples/redis/main.go b/examples/redis/main.go index d967d79..13bd338 100644 --- a/examples/redis/main.go +++ b/examples/redis/main.go @@ -6,7 +6,7 @@ import ( "fmt" "os" - "github.com/yokecd/yoke/cmd/examples/internal/flights/redis" + "github.com/yokecd/yoke/examples/internal/flights/redis" ) func main() { From ab009413811582ae5d96e9ba3848c81af2c6f90b Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Tue, 4 Feb 2025 15:01:28 -0500 Subject: [PATCH 07/20] examples: update lookup example --- examples/lookup/main.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/examples/lookup/main.go b/examples/lookup/main.go index f4c7b41..b1b7831 100644 --- a/examples/lookup/main.go +++ b/examples/lookup/main.go @@ -6,10 +6,11 @@ import ( "fmt" "os" - "github.com/yokecd/yoke/pkg/flight" - "github.com/yokecd/yoke/pkg/flight/wasi/k8s" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/yokecd/yoke/pkg/flight" + "github.com/yokecd/yoke/pkg/flight/wasi/k8s" ) func main() { @@ -32,10 +33,6 @@ func run() error { return fmt.Errorf("failed to lookup secret: %v", err) } - if secret != nil { - return json.NewEncoder(os.Stdout).Encode(secret) - } - return json.NewEncoder(os.Stdout).Encode(corev1.Secret{ TypeMeta: metav1.TypeMeta{ APIVersion: "v1", @@ -45,7 +42,14 @@ func run() error { Name: secretName, }, StringData: map[string]string{ - "example": RandomString(), + "password": func() string { + if secret != nil { + // if the secret already exists we want to reuse the example value instead of generating a new random string. + return string(secret.Data["password"]) + } + // Since the secret does not exist we need to generate a new password via the power of entropy! + return RandomString() + }(), }, }) } From c57db37634580eeb7fdcc77700855708de654da2 Mon Sep 17 00:00:00 2001 From: davidmdm Date: Wed, 5 Feb 2025 01:29:13 -0500 Subject: [PATCH 08/20] wasi/k8s: validate resource ownership on k8s.Lookup --- pkg/flight/wasi/k8s/k8s.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pkg/flight/wasi/k8s/k8s.go b/pkg/flight/wasi/k8s/k8s.go index b44d84e..75759ff 100644 --- a/pkg/flight/wasi/k8s/k8s.go +++ b/pkg/flight/wasi/k8s/k8s.go @@ -4,8 +4,10 @@ import ( "encoding/json" "errors" + "github.com/yokecd/yoke/internal" "github.com/yokecd/yoke/internal/wasm" + "github.com/yokecd/yoke/pkg/flight" // Make sure to include wasi as it contains necessary "malloc" export that will be needed // for the host to allocate a wasm.Buffer. IE: any wasm module that uses this package exports wasi.malloc _ "github.com/yokecd/yoke/pkg/flight/wasi" @@ -34,10 +36,31 @@ func Lookup[T any](identifier ResourceIdentifier) (*T, error) { switch state { case wasm.StateOK: + var obj struct { + Metadata struct { + Labels map[string]string `json:"labels,omitempty"` + } `json:"metadata,omitempty"` + } + if err := json.Unmarshal(buffer.Slice(), &obj); err != nil { + return nil, err + } + + labels := func() map[string]string { + if obj.Metadata.Labels == nil { + return map[string]string{} + } + return obj.Metadata.Labels + }() + + if labels[internal.LabelYokeRelease] != flight.Release() || labels[internal.LabelYokeReleaseNS] != flight.Namespace() { + return nil, ErrorForbidden("cannot access resource outside of target release ownership") + } + var resource T if err := json.Unmarshal(buffer.Slice(), &resource); err != nil { return nil, err } + return &resource, nil case wasm.StateError: return nil, errors.New(buffer.String()) From b08a5b34651abfcb2a7b87ad629a173b5270bc82 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Wed, 5 Feb 2025 14:18:13 -0500 Subject: [PATCH 09/20] yoke: test lookup resource e2e --- cmd/yoke/internal/testing/flight/main.go | 69 ++++++++++++++++++++++++ cmd/yoke/main_test.go | 59 +++++++++++++++++++- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 cmd/yoke/internal/testing/flight/main.go diff --git a/cmd/yoke/internal/testing/flight/main.go b/cmd/yoke/internal/testing/flight/main.go new file mode 100644 index 0000000..e124d94 --- /dev/null +++ b/cmd/yoke/internal/testing/flight/main.go @@ -0,0 +1,69 @@ +package main + +import ( + "crypto/rand" + "encoding/json" + "fmt" + "io" + "os" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/yaml" + + "github.com/yokecd/yoke/pkg/flight" + "github.com/yokecd/yoke/pkg/flight/wasi/k8s" +) + +func main() { + if err := run(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +func run() error { + secretName := flight.Release() + "-example" + + identifier := k8s.ResourceIdentifier{ + Name: secretName, + Namespace: flight.Namespace(), + Kind: "Secret", + ApiVersion: "v1", + } + + if err := yaml.NewYAMLToJSONDecoder(os.Stdin).Decode(&identifier); err != nil && err != io.EOF { + return err + } + + secret, err := k8s.Lookup[corev1.Secret](identifier) + if err != nil && !k8s.IsErrNotFound(err) { + return fmt.Errorf("failed to lookup secret: %v", err) + } + + return json.NewEncoder(os.Stdout).Encode(corev1.Secret{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "Secret", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: secretName, + }, + StringData: map[string]string{ + "password": func() string { + if secret != nil { + // if the secret already exists we want to reuse the example value instead of generating a new random string. + return string(secret.Data["password"]) + } + // Since the secret does not exist we need to generate a new password via the power of entropy! + return RandomString() + }(), + }, + }) +} + +func RandomString() string { + buf := make([]byte, 6) + rand.Read(buf) + return fmt.Sprintf("%x", buf) +} diff --git a/cmd/yoke/main_test.go b/cmd/yoke/main_test.go index 36f9e78..e0dea7b 100644 --- a/cmd/yoke/main_test.go +++ b/cmd/yoke/main_test.go @@ -42,7 +42,7 @@ func TestMain(m *testing.M) { os.Exit(m.Run()) } -var background = context.Background() +var background = internal.WithStdout(context.Background(), io.Discard) func createBasicDeployment(t *testing.T, name, namespace string) io.Reader { labels := map[string]string{"app": name} @@ -743,3 +743,60 @@ func TestTurbulenceFix(t *testing.T) { require.NoError(t, err) require.Equal(t, "value", configmap.Data["key"]) } + +func TestLookupResource(t *testing.T) { + require.NoError(t, x.X("go build -o ./test_output/flight.wasm ./internal/testing/flight", x.Env("GOOS=wasip1", "GOARCH=wasm"))) + + client, err := k8s.NewClientFromKubeConfig(home.Kubeconfig) + require.NoError(t, err) + + params := TakeoffParams{ + GlobalSettings: GlobalSettings{KubeConfigPath: home.Kubeconfig}, + TakeoffParams: yoke.TakeoffParams{ + Release: "foo", + Flight: yoke.FlightParams{ + Path: "./test_output/flight.wasm", + Namespace: "default", + }, + Wait: 10 * time.Second, + Poll: time.Second, + }, + } + + require.NoError(t, TakeOff(background, params)) + defer func() { + require.NoError(t, Mayday(background, MaydayParams{ + GlobalSettings: params.GlobalSettings, + Release: "foo", + })) + }() + + secret, err := client.Clientset.CoreV1().Secrets("default").Get(background, "foo-example", metav1.GetOptions{}) + require.NoError(t, err) + + require.NotEmpty(t, secret.Data["password"]) + + err = TakeOff(background, params) + require.NotNil(t, err) + require.True(t, internal.IsWarning(err), "should be warning but got: %v", err) + require.EqualError(t, err, "resources are the same as previous revision: skipping takeoff") + + require.ErrorContains( + t, + TakeOff(background, TakeoffParams{ + GlobalSettings: GlobalSettings{KubeConfigPath: home.Kubeconfig}, + TakeoffParams: yoke.TakeoffParams{ + Release: "foo", + CreateNamespaces: true, + Flight: yoke.FlightParams{ + Path: "./test_output/flight.wasm", + Namespace: "foo", + Input: strings.NewReader(`{"Namespace": "default"}`), + }, + Wait: 10 * time.Second, + Poll: time.Second, + }, + }), + "cannot access resource outside of target release ownership", + ) +} From 91e8da54b423feb461866928dd4157960d4d2f76 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Wed, 5 Feb 2025 21:20:56 -0500 Subject: [PATCH 10/20] wasi/k8s: use build tags in order to be able to build packages with wasm imports --- pkg/flight/wasi/k8s/k8s.go | 3 --- pkg/flight/wasi/k8s/lookup.go | 9 +++++++++ pkg/flight/wasi/k8s/lookup_wasip1.go | 8 ++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 pkg/flight/wasi/k8s/lookup.go create mode 100644 pkg/flight/wasi/k8s/lookup_wasip1.go diff --git a/pkg/flight/wasi/k8s/k8s.go b/pkg/flight/wasi/k8s/k8s.go index 75759ff..0b58c91 100644 --- a/pkg/flight/wasi/k8s/k8s.go +++ b/pkg/flight/wasi/k8s/k8s.go @@ -13,9 +13,6 @@ import ( _ "github.com/yokecd/yoke/pkg/flight/wasi" ) -//go:wasmimport host k8s_lookup -func lookup(ptr wasm.Ptr, name, namespace, kind, apiversion wasm.String) wasm.Buffer - type ResourceIdentifier struct { Name string Namespace string diff --git a/pkg/flight/wasi/k8s/lookup.go b/pkg/flight/wasi/k8s/lookup.go new file mode 100644 index 0000000..7861514 --- /dev/null +++ b/pkg/flight/wasi/k8s/lookup.go @@ -0,0 +1,9 @@ +//go:build !wasip1 + +package k8s + +import "github.com/yokecd/yoke/internal/wasm" + +func lookup(ptr wasm.Ptr, name, namespace, kind, apiversion wasm.String) wasm.Buffer { + panic("mock lookup not implemented: should be used in the context of wasip1") +} diff --git a/pkg/flight/wasi/k8s/lookup_wasip1.go b/pkg/flight/wasi/k8s/lookup_wasip1.go new file mode 100644 index 0000000..5e621fa --- /dev/null +++ b/pkg/flight/wasi/k8s/lookup_wasip1.go @@ -0,0 +1,8 @@ +//go:build wasip1 + +package k8s + +import "github.com/yokecd/yoke/internal/wasm" + +//go:wasmimport host k8s_lookup +func lookup(ptr wasm.Ptr, name, namespace, kind, apiversion wasm.String) wasm.Buffer From 9897e19fe60924435e7b98205e81a4824403feca Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Wed, 5 Feb 2025 22:58:45 -0500 Subject: [PATCH 11/20] atc-installer: use wasi/k8s api to avoid generating new tls secrets when they already exist --- cmd/atc-installer/installer/run.go | 37 ++++++++++++++++++++++++++---- cmd/atc/main_test.go | 6 ++--- cmd/yoke/main_test.go | 4 ++-- go.mod | 2 +- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/cmd/atc-installer/installer/run.go b/cmd/atc-installer/installer/run.go index 8a15c74..ee06982 100644 --- a/cmd/atc-installer/installer/run.go +++ b/cmd/atc-installer/installer/run.go @@ -23,6 +23,7 @@ import ( "github.com/yokecd/yoke/pkg/apis/airway/v1alpha1" "github.com/yokecd/yoke/pkg/flight" + "github.com/yokecd/yoke/pkg/flight/wasi/k8s" "github.com/yokecd/yoke/pkg/openapi" ) @@ -34,6 +35,7 @@ type Config struct { Port int `json:"port"` ServiceAccountName string `json:"serviceAccountName"` ImagePullPolicy corev1.PullPolicy `json:"ImagePullPolicy"` + GenerateTLS bool `json:"generateTLS"` } var ( @@ -140,7 +142,34 @@ func Run(cfg Config) error { }, } - tls, err := NewTLS(svc) + const ( + keyRootCA = "ca.crt" + keyServerCert = "server.crt" + keyServerKey = "server.key" + ) + + tls, err := func() (*TLS, error) { + if cfg.GenerateTLS { + return NewTLS(svc) + } + secret, err := k8s.Lookup[corev1.Secret](k8s.ResourceIdentifier{ + Name: flight.Release() + "-tls", + Namespace: flight.Namespace(), + Kind: "Secret", + ApiVersion: "v1", + }) + if err != nil && !k8s.IsErrNotFound(err) { + return nil, fmt.Errorf("failed to lookup tls secret: %v", err) + } + if secret != nil { + return &TLS{ + RootCA: secret.Data[keyRootCA], + ServerCert: secret.Data[keyServerCert], + ServerKey: secret.Data[keyServerKey], + }, nil + } + return NewTLS(svc) + }() if err != nil { return err } @@ -155,9 +184,9 @@ func Run(cfg Config) error { Namespace: flight.Namespace(), }, Data: map[string][]byte{ - "ca.crt": tls.RootCA, - "server.crt": tls.ServerCert, - "server.key": tls.ServerKey, + keyRootCA: tls.RootCA, + keyServerCert: tls.ServerCert, + keyServerKey: tls.ServerKey, }, } diff --git a/cmd/atc/main_test.go b/cmd/atc/main_test.go index 0592bc5..c626a01 100644 --- a/cmd/atc/main_test.go +++ b/cmd/atc/main_test.go @@ -382,16 +382,14 @@ func TestAirTrafficController(t *testing.T) { "failed to detect new Backend version", ) - // ALthough we create a v1 version we will be able to fetch it as a v2 version. + // Although we create a v1 version we will be able to fetch it as a v2 version. require.NoError( t, commander.Takeoff(ctx, yoke.TakeoffParams{ Release: "c4ts", Flight: yoke.FlightParams{ Input: testutils.JsonReader(backendv1.Backend{ - ObjectMeta: metav1.ObjectMeta{ - Name: "c4ts", - }, + ObjectMeta: metav1.ObjectMeta{Name: "c4ts"}, Spec: backendv1.BackendSpec{ Image: "yokecd/c4ts:test", Replicas: 1, diff --git a/cmd/yoke/main_test.go b/cmd/yoke/main_test.go index e0dea7b..f105256 100644 --- a/cmd/yoke/main_test.go +++ b/cmd/yoke/main_test.go @@ -786,8 +786,8 @@ func TestLookupResource(t *testing.T) { TakeOff(background, TakeoffParams{ GlobalSettings: GlobalSettings{KubeConfigPath: home.Kubeconfig}, TakeoffParams: yoke.TakeoffParams{ - Release: "foo", - CreateNamespaces: true, + Release: "foo", + CreateNamespace: true, Flight: yoke.FlightParams{ Path: "./test_output/flight.wasm", Namespace: "foo", diff --git a/go.mod b/go.mod index ba321c5..4835686 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/yokecd/yoke // TODO: use go1.24.0 once it is released. Blocker for releasing this feature. // It is needed for the go:wasmexport directive. -go 1.24rc2 +go 1.24rc3 require ( github.com/alecthomas/chroma/v2 v2.15.0 From 34b0a9cc9cb09af1ebae09fd4743ff43793e9bf4 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Tue, 11 Feb 2025 15:51:43 -0500 Subject: [PATCH 12/20] deps: use go1.24.0 --- Dockerfile.atc | 6 +++--- cmd/atc/internal/testing/Dockerfile.wasmcache | 14 +++++++------- go.mod | 4 +--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Dockerfile.atc b/Dockerfile.atc index cb349d6..ab30a1e 100644 --- a/Dockerfile.atc +++ b/Dockerfile.atc @@ -1,16 +1,16 @@ -FROM golang:1.23-alpine AS builder +FROM golang:1.24-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ -RUN GOTOOLCHAIN=auto go mod download +RUN go mod download COPY ./cmd/atc ./cmd/atc COPY ./internal ./internal COPY ./pkg ./pkg -RUN GOTOOLCHAIN=auto go build -o /bin/atc ./cmd/atc +RUN go build -o /bin/atc ./cmd/atc FROM alpine diff --git a/cmd/atc/internal/testing/Dockerfile.wasmcache b/cmd/atc/internal/testing/Dockerfile.wasmcache index c9b0bbb..e0dc4b5 100644 --- a/cmd/atc/internal/testing/Dockerfile.wasmcache +++ b/cmd/atc/internal/testing/Dockerfile.wasmcache @@ -1,19 +1,19 @@ -FROM golang:1.23-alpine AS builder +FROM golang:1.24-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ -RUN GOTOOLCHAIN=auto go mod download +RUN go mod download COPY . . RUN \ - GOTOOLCHAIN=auto GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.v1.wasm ./cmd/atc/internal/testing/apis/backend/v1/flight && \ - GOTOOLCHAIN=auto GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.v2.wasm ./cmd/atc/internal/testing/apis/backend/v2/flight && \ - GOTOOLCHAIN=auto GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.dev.wasm ./cmd/atc/internal/testing/apis/backend/v2/dev && \ - GOTOOLCHAIN=auto GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/converter.wasm ./cmd/atc/internal/testing/apis/backend/converter && \ - GOTOOLCHAIN=auto go build -o ./bin/server ./cmd/atc/internal/testing/wasmcache + GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.v1.wasm ./cmd/atc/internal/testing/apis/backend/v1/flight && \ + GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.v2.wasm ./cmd/atc/internal/testing/apis/backend/v2/flight && \ + GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/flight.dev.wasm ./cmd/atc/internal/testing/apis/backend/v2/dev && \ + GOOS=wasip1 GOARCH=wasm go build -o ./cmd/atc/internal/testing/wasmcache/wasm/converter.wasm ./cmd/atc/internal/testing/apis/backend/converter && \ + go build -o ./bin/server ./cmd/atc/internal/testing/wasmcache FROM alpine diff --git a/go.mod b/go.mod index 4835686..0fb00fa 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module github.com/yokecd/yoke -// TODO: use go1.24.0 once it is released. Blocker for releasing this feature. -// It is needed for the go:wasmexport directive. -go 1.24rc3 +go 1.24.0 require ( github.com/alecthomas/chroma/v2 v2.15.0 From 440327f124c4300294b185184ed2e92a6cf74b36 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Wed, 12 Feb 2025 12:33:27 -0500 Subject: [PATCH 13/20] deps: update deps --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 0fb00fa..171ab56 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.24.0 require ( github.com/alecthomas/chroma/v2 v2.15.0 github.com/charmbracelet/bubbles v0.20.0 - github.com/charmbracelet/bubbletea v1.3.2 + github.com/charmbracelet/bubbletea v1.3.3 github.com/charmbracelet/lipgloss v1.0.0 github.com/davidmdm/ansi v0.0.6 github.com/davidmdm/conf v0.0.8 @@ -13,7 +13,7 @@ require ( github.com/davidmdm/x/xerr v0.0.3 github.com/davidmdm/x/xruntime v0.0.5 github.com/go-git/go-git/v5 v5.13.2 - github.com/jedib0t/go-pretty/v6 v6.6.5 + github.com/jedib0t/go-pretty/v6 v6.6.6 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 github.com/stretchr/testify v1.10.0 github.com/tetratelabs/wazero v1.6.0 @@ -44,7 +44,7 @@ require ( github.com/cloudflare/circl v1.6.0 // indirect github.com/cyphar/filepath-securejoin v0.4.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/dlclark/regexp2 v1.11.4 // indirect + github.com/dlclark/regexp2 v1.11.5 // indirect github.com/emicklei/go-restful/v3 v3.12.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect diff --git a/go.sum b/go.sum index 5a45389..a37a870 100644 --- a/go.sum +++ b/go.sum @@ -33,8 +33,8 @@ github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWp github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE= github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU= -github.com/charmbracelet/bubbletea v1.3.2 h1:nc+gDivH0P8ii8CUcf3zCN/PiUz7LKbp3Iz+vYPScNY= -github.com/charmbracelet/bubbletea v1.3.2/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo= +github.com/charmbracelet/bubbletea v1.3.3 h1:WpU6fCY0J2vDWM3zfS3vIDi/ULq3SYphZhkAGGvmEUY= +github.com/charmbracelet/bubbletea v1.3.3/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo= github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg= github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo= github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= @@ -61,8 +61,8 @@ github.com/davidmdm/x/xerr v0.0.3 h1:WwHvo6qzR+eRmHq69Ftgb7PL9832iwy313XpQyJRGtM github.com/davidmdm/x/xerr v0.0.3/go.mod h1:nEfdhUc3O/FmGUGLiJp2hHRhBeANkon7PJexIQ1DlAE= github.com/davidmdm/x/xruntime v0.0.5 h1:qIL9l5vHae7IDbSRTAAmjb1Tsldespr0uMMYqxpproI= github.com/davidmdm/x/xruntime v0.0.5/go.mod h1:kWVLaIS0EKxZ5NkeSytIDmKBlZjDrAnqbClPhdmUDu4= -github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo= -github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= +github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/elazarl/goproxy v1.4.0 h1:4GyuSbFa+s26+3rmYNSuUVsx+HgPrV1bk1jXI0l9wjM= github.com/elazarl/goproxy v1.4.0/go.mod h1:X/5W/t+gzDyLfHW4DrMdpjqYjpXsURlBt9lpBDxZZZQ= github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU= @@ -121,8 +121,8 @@ github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jedib0t/go-pretty/v6 v6.6.5 h1:9PgMJOVBedpgYLI56jQRJYqngxYAAzfEUua+3NgSqAo= -github.com/jedib0t/go-pretty/v6 v6.6.5/go.mod h1:Uq/HrbhuFty5WSVNfjpQQe47x16RwVGXIveNGEyGtHs= +github.com/jedib0t/go-pretty/v6 v6.6.6 h1:LyezkL+1SuqH2z47e5IMQkYUIcs2BD+MnpdPRiRcN0c= +github.com/jedib0t/go-pretty/v6 v6.6.6/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= From 74b70669b938a67884a4c6c4e138d1a268bd9e1b Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Wed, 12 Feb 2025 12:37:54 -0500 Subject: [PATCH 14/20] example: refactor lookup example --- examples/lookup/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/lookup/main.go b/examples/lookup/main.go index b1b7831..18e4eed 100644 --- a/examples/lookup/main.go +++ b/examples/lookup/main.go @@ -24,10 +24,10 @@ func run() error { secretName := flight.Release() + "-example" secret, err := k8s.Lookup[corev1.Secret](k8s.ResourceIdentifier{ + ApiVersion: "v1", + Kind: "Secret", Name: secretName, Namespace: flight.Namespace(), - Kind: "Secret", - ApiVersion: "v1", }) if err != nil && !k8s.IsErrNotFound(err) { return fmt.Errorf("failed to lookup secret: %v", err) From 2074572bb53409b4595ffb8633b41a1af11837bb Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Wed, 12 Feb 2025 17:07:03 -0500 Subject: [PATCH 15/20] yokecd: bump image version to use go1.24 --- Dockerfile.yokecd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.yokecd b/Dockerfile.yokecd index be06b70..2b5da5c 100644 --- a/Dockerfile.yokecd +++ b/Dockerfile.yokecd @@ -1,4 +1,4 @@ -FROM golang:1.23-alpine +FROM golang:1.24-alpine WORKDIR /cmp From 8f86f3ec31a7a01638764a7e1313ce08f8e38512 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Thu, 13 Feb 2025 12:37:47 -0500 Subject: [PATCH 16/20] yoke: added cluster-access flag to guard wasi/k8s api --- cmd/atc-installer/installer/run.go | 5 +++-- cmd/yoke/cmd_takeoff.go | 1 + internal/wasi/wasi.go | 4 ++++ internal/wasm/wasm.go | 4 ++++ pkg/flight/wasi/k8s/errors.go | 2 ++ pkg/flight/wasi/k8s/k8s.go | 2 ++ pkg/yoke/yoke_takeoff.go | 15 ++++++++++++++- 7 files changed, 30 insertions(+), 3 deletions(-) diff --git a/cmd/atc-installer/installer/run.go b/cmd/atc-installer/installer/run.go index ee06982..b674726 100644 --- a/cmd/atc-installer/installer/run.go +++ b/cmd/atc-installer/installer/run.go @@ -5,6 +5,7 @@ import ( "crypto/sha1" "encoding/hex" "encoding/json" + "errors" "fmt" "maps" "os" @@ -158,8 +159,8 @@ func Run(cfg Config) error { Kind: "Secret", ApiVersion: "v1", }) - if err != nil && !k8s.IsErrNotFound(err) { - return nil, fmt.Errorf("failed to lookup tls secret: %v", err) + if err != nil && !k8s.IsErrNotFound(err) && !errors.Is(err, k8s.ErrorClusterAccessNotGranted) { + return nil, fmt.Errorf("failed to lookup tls secret: %T: %v", err, err) } if secret != nil { return &TLS{ diff --git a/cmd/yoke/cmd_takeoff.go b/cmd/yoke/cmd_takeoff.go index 0b6885c..7e19132 100644 --- a/cmd/yoke/cmd_takeoff.go +++ b/cmd/yoke/cmd_takeoff.go @@ -59,6 +59,7 @@ func GetTakeoffParams(settings GlobalSettings, source io.Reader, args []string) flagset.BoolVar(¶ms.ForceConflicts, "force-conflicts", false, "force apply changes on field manager conflicts") flagset.BoolVar(¶ms.CreateNamespace, "create-namespace", false, "create namespace of target release if not present") flagset.BoolVar(¶ms.MultiNamespaces, "multi-namespaces", false, "allows releases to create resources in other namespaces than the target namespace") + flagset.BoolVar(¶ms.ClusterAccess, "cluster-access", false, "allows flight access to the cluster during takeoff. Only applies when not directing output to stdout or to a local destination.") flagset.BoolVar(¶ms.DiffOnly, "diff-only", false, "show diff between current revision and would be applied state. Does not apply anything to cluster") flagset.BoolVar(¶ms.Color, "color", term.IsTerminal(int(os.Stdout.Fd())), "use colored output in diffs") diff --git a/internal/wasi/wasi.go b/internal/wasi/wasi.go index 4c3e01e..53a7bf9 100644 --- a/internal/wasi/wasi.go +++ b/internal/wasi/wasi.go @@ -161,6 +161,10 @@ func Compile(ctx context.Context, params CompileParams) (Module, error) { for name, fn := range map[string]any{ "k8s_lookup": func(ctx context.Context, module api.Module, stateRef wasm.Ptr, name, namespace, kind, apiVersion wasm.String) wasm.Buffer { + if params.Client == nil { + return wasm.Error(ctx, module, stateRef, wasm.StateFeatureNotGranted, "") + } + gv, err := schema.ParseGroupVersion(apiVersion.Load(module)) if err != nil { return wasm.Error(ctx, module, stateRef, wasm.StateError, err.Error()) diff --git a/internal/wasm/wasm.go b/internal/wasm/wasm.go index 6b8ebd2..edfc875 100644 --- a/internal/wasm/wasm.go +++ b/internal/wasm/wasm.go @@ -28,6 +28,7 @@ type State uint32 const ( StateOK State = iota + StateFeatureNotGranted StateError StateNotFound StateUnauthenticated @@ -73,6 +74,9 @@ func FromString(value string) String { } func FromSlice(value []byte) Buffer { + if len(value) == 0 { + return 0 + } ptr := uint64(uintptr(unsafe.Pointer(&value[0]))) return Buffer(ptr<<32 | uint64(len(value))) } diff --git a/pkg/flight/wasi/k8s/errors.go b/pkg/flight/wasi/k8s/errors.go index 5aa2abe..72d1e08 100644 --- a/pkg/flight/wasi/k8s/errors.go +++ b/pkg/flight/wasi/k8s/errors.go @@ -40,3 +40,5 @@ func (ErrorForbidden) Is(target error) bool { func IsErrForbidden(err error) bool { return errors.Is(err, ErrorForbidden("")) } + +var ErrorClusterAccessNotGranted = errors.New("access to the cluster has not been granted for this flight invocation") diff --git a/pkg/flight/wasi/k8s/k8s.go b/pkg/flight/wasi/k8s/k8s.go index 0b58c91..4df77f9 100644 --- a/pkg/flight/wasi/k8s/k8s.go +++ b/pkg/flight/wasi/k8s/k8s.go @@ -59,6 +59,8 @@ func Lookup[T any](identifier ResourceIdentifier) (*T, error) { } return &resource, nil + case wasm.StateFeatureNotGranted: + return nil, ErrorClusterAccessNotGranted case wasm.StateError: return nil, errors.New(buffer.String()) case wasm.StateForbidden: diff --git a/pkg/yoke/yoke_takeoff.go b/pkg/yoke/yoke_takeoff.go index 9d5d9ea..eee864c 100644 --- a/pkg/yoke/yoke_takeoff.go +++ b/pkg/yoke/yoke_takeoff.go @@ -83,12 +83,25 @@ type TakeoffParams struct { // OwnerReferences to be added to each resource found in release. OwnerReferences []metav1.OwnerReference + + // ClusterAccess grants the flight access to the kubernetes cluster. Users will be able to use the host k8s_lookup function. + ClusterAccess bool } func (commander Commander) Takeoff(ctx context.Context, params TakeoffParams) error { defer internal.DebugTimer(ctx, "takeoff of "+params.Release)() - output, wasm, err := EvalFlight(ctx, commander.k8s, params.Release, params.Flight) + output, wasm, err := EvalFlight( + ctx, + func() *k8s.Client { + if !params.ClusterAccess { + return nil + } + return commander.k8s + }(), + params.Release, + params.Flight, + ) if err != nil { return fmt.Errorf("failed to evaluate flight: %w", err) } From 89836f057c1411bbb250fea2432f82f900971ccd Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Thu, 13 Feb 2025 22:03:51 -0500 Subject: [PATCH 17/20] atc: remove create crd option from airways as it did nothing --- internal/atc/atc.go | 2 -- pkg/apis/airway/v1alpha1/airway.go | 4 ---- 2 files changed, 6 deletions(-) diff --git a/internal/atc/atc.go b/internal/atc/atc.go index c0482e9..19dc10f 100644 --- a/internal/atc/atc.go +++ b/internal/atc/atc.go @@ -355,7 +355,6 @@ func (atc atc) Reconcile(ctx context.Context, event ctrl.Event) (result ctrl.Res Version: storageVersion, Flight: modules.Flight, FixDriftInterval: typedAirway.Spec.FixDriftInterval.Duration(), - CreateCrds: typedAirway.Spec.CreateCRDs, ObjectPath: typedAirway.Spec.ObjectPath, }), Client: ctrl.Client(ctx), @@ -399,7 +398,6 @@ type FlightReconcilerParams struct { Version string Flight *wasm.Module FixDriftInterval time.Duration - CreateCrds bool ObjectPath []string } diff --git a/pkg/apis/airway/v1alpha1/airway.go b/pkg/apis/airway/v1alpha1/airway.go index a312ed1..cbff2f7 100644 --- a/pkg/apis/airway/v1alpha1/airway.go +++ b/pkg/apis/airway/v1alpha1/airway.go @@ -38,10 +38,6 @@ type AirwaySpec struct { // you to enforce the desired state of your resource against external manipulation. FixDriftInterval openapi.Duration `json:"fixDriftInterval,omitempty"` - // CreateCRDs indicates that CRDs generated from instantiating the resource should be applied. By default, - // CRDs are not applied. It is generally recommended to install CustomResourceDefinitions beforehand. - CreateCRDs bool `json:"createCrds,omitempty"` - // Template is the CustomResourceDefinition Specification to create. A CRD will be created using this specification // and bound to the implementation defined by the WasmURLs.Flight property. Template apiextensionsv1.CustomResourceDefinitionSpec `json:"template"` From 8aeabe39c443d3ca5cc9e15cbeba6e1724608781 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Thu, 13 Feb 2025 22:42:01 -0500 Subject: [PATCH 18/20] atc: support cluster access via property of Airway --- internal/atc/atc.go | 29 +++++++++++++---------------- pkg/apis/airway/v1alpha1/airway.go | 3 +++ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/internal/atc/atc.go b/internal/atc/atc.go index 19dc10f..04aab56 100644 --- a/internal/atc/atc.go +++ b/internal/atc/atc.go @@ -350,12 +350,10 @@ func (atc atc) Reconcile(ctx context.Context, event ctrl.Event) (result ctrl.Res flightController, err := ctrl.NewController(flightCtx, ctrl.Params{ GK: flightGK, Handler: atc.FlightReconciler(FlightReconcilerParams{ - GK: flightGK, - Airway: typedAirway.Name, - Version: storageVersion, - Flight: modules.Flight, - FixDriftInterval: typedAirway.Spec.FixDriftInterval.Duration(), - ObjectPath: typedAirway.Spec.ObjectPath, + GK: flightGK, + Airway: typedAirway, + Version: storageVersion, + Flight: modules.Flight, }), Client: ctrl.Client(ctx), Logger: ctrl.RootLogger(ctx), @@ -393,12 +391,10 @@ func (atc atc) Teardown() { } type FlightReconcilerParams struct { - GK schema.GroupKind - Airway string - Version string - Flight *wasm.Module - FixDriftInterval time.Duration - ObjectPath []string + GK schema.GroupKind + Version string + Flight *wasm.Module + Airway v1alpha1.Airway } func (atc atc) FlightReconciler(params FlightReconcilerParams) ctrl.HandleFunc { @@ -494,9 +490,9 @@ func (atc atc) FlightReconciler(params FlightReconcilerParams) ctrl.HandleFunc { return ctrl.Result{}, nil } - object, _, err := unstructured.NestedFieldNoCopy(resource.Object, params.ObjectPath...) + object, _, err := unstructured.NestedFieldNoCopy(resource.Object, params.Airway.Spec.ObjectPath...) if err != nil { - return ctrl.Result{}, fmt.Errorf("failed to get object path from: %q: %v", strings.Join(params.ObjectPath, ","), err) + return ctrl.Result{}, fmt.Errorf("failed to get object path from: %q: %v", strings.Join(params.Airway.Spec.ObjectPath, ","), err) } data, err := json.Marshal(object) @@ -512,6 +508,7 @@ func (atc atc) FlightReconciler(params FlightReconcilerParams) ctrl.HandleFunc { Input: bytes.NewReader(data), Namespace: event.Namespace, }, + ClusterAccess: params.Airway.Spec.ClusterAccess, OwnerReferences: []metav1.OwnerReference{ { APIVersion: resource.GetAPIVersion(), @@ -543,7 +540,7 @@ func (atc atc) FlightReconciler(params FlightReconcilerParams) ctrl.HandleFunc { ctrl.Logger(ctx).Warn("takeoff succeeded despite warnings", "warning", err) } - if params.FixDriftInterval > 0 { + if params.Airway.Spec.FixDriftInterval > 0 { flightStatus("InProgress", "Fixing drift / turbulence") if err := commander.Turbulence(ctx, yoke.TurbulenceParams{ Release: event.String(), @@ -556,7 +553,7 @@ func (atc atc) FlightReconciler(params FlightReconcilerParams) ctrl.HandleFunc { flightStatus("Ready", "Successfully deployed") - return ctrl.Result{RequeueAfter: params.FixDriftInterval}, nil + return ctrl.Result{RequeueAfter: params.Airway.Spec.FixDriftInterval.Duration()}, nil } } diff --git a/pkg/apis/airway/v1alpha1/airway.go b/pkg/apis/airway/v1alpha1/airway.go index cbff2f7..4704073 100644 --- a/pkg/apis/airway/v1alpha1/airway.go +++ b/pkg/apis/airway/v1alpha1/airway.go @@ -38,6 +38,9 @@ type AirwaySpec struct { // you to enforce the desired state of your resource against external manipulation. FixDriftInterval openapi.Duration `json:"fixDriftInterval,omitempty"` + // ClusterAccess allows the flight to lookup resources in the cluster. Resources are limited to those owned by the calling release. + ClusterAccess bool `json:"clusterAccess,omitempty"` + // Template is the CustomResourceDefinition Specification to create. A CRD will be created using this specification // and bound to the implementation defined by the WasmURLs.Flight property. Template apiextensionsv1.CustomResourceDefinitionSpec `json:"template"` From e0182be01b3cb9d19254edfae04bc25d9e3aa248 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Thu, 13 Feb 2025 23:26:03 -0500 Subject: [PATCH 19/20] yoke: fix k8s lookup test --- cmd/yoke/main_test.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/cmd/yoke/main_test.go b/cmd/yoke/main_test.go index f105256..6f0e1b4 100644 --- a/cmd/yoke/main_test.go +++ b/cmd/yoke/main_test.go @@ -750,10 +750,28 @@ func TestLookupResource(t *testing.T) { client, err := k8s.NewClientFromKubeConfig(home.Kubeconfig) require.NoError(t, err) + require.ErrorContains( + t, + TakeOff(background, TakeoffParams{ + GlobalSettings: GlobalSettings{KubeConfigPath: home.Kubeconfig}, + TakeoffParams: yoke.TakeoffParams{ + Release: "foo", + Flight: yoke.FlightParams{ + Path: "./test_output/flight.wasm", + Namespace: "default", + }, + Wait: 10 * time.Second, + Poll: time.Second, + }, + }), + "access to the cluster has not been granted for this flight invocation", + ) + params := TakeoffParams{ GlobalSettings: GlobalSettings{KubeConfigPath: home.Kubeconfig}, TakeoffParams: yoke.TakeoffParams{ - Release: "foo", + Release: "foo", + ClusterAccess: true, Flight: yoke.FlightParams{ Path: "./test_output/flight.wasm", Namespace: "default", @@ -788,6 +806,7 @@ func TestLookupResource(t *testing.T) { TakeoffParams: yoke.TakeoffParams{ Release: "foo", CreateNamespace: true, + ClusterAccess: true, Flight: yoke.FlightParams{ Path: "./test_output/flight.wasm", Namespace: "foo", From 30ea138671166bcf2cbcaccde82dacf5beaa3f2e Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Thu, 13 Feb 2025 23:35:41 -0500 Subject: [PATCH 20/20] pkg/openapi: support omitzero and update tests --- pkg/apis/airway/v1alpha1/airway.go | 2 +- pkg/openapi/schema.go | 2 +- pkg/openapi/schema_test.go | 5 +- pkg/openapi/temp.schema.json | 550 +++++++++++++++++++++++++++++ 4 files changed, 556 insertions(+), 3 deletions(-) create mode 100644 pkg/openapi/temp.schema.json diff --git a/pkg/apis/airway/v1alpha1/airway.go b/pkg/apis/airway/v1alpha1/airway.go index 4704073..d766911 100644 --- a/pkg/apis/airway/v1alpha1/airway.go +++ b/pkg/apis/airway/v1alpha1/airway.go @@ -20,7 +20,7 @@ type Airway struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec AirwaySpec `json:"spec"` - Status flight.Status `json:"status,omitempty"` + Status flight.Status `json:"status,omitzero"` } type AirwaySpec struct { diff --git a/pkg/openapi/schema.go b/pkg/openapi/schema.go index 14ad723..0c06cb8 100644 --- a/pkg/openapi/schema.go +++ b/pkg/openapi/schema.go @@ -115,7 +115,7 @@ func generateSchema(typ reflect.Type, top bool, cache typeCache) *apiext.JSONSch continue } - if !strings.HasSuffix(jTag, ",omitempty") && f.Type.Kind() != reflect.Pointer { + if !strings.HasSuffix(jTag, ",omitempty") && !strings.HasSuffix(jTag, ",omitzero") && f.Type.Kind() != reflect.Pointer { schema.Required = append(schema.Required, key) } diff --git a/pkg/openapi/schema_test.go b/pkg/openapi/schema_test.go index e573a5d..962a658 100644 --- a/pkg/openapi/schema_test.go +++ b/pkg/openapi/schema_test.go @@ -2,6 +2,7 @@ package openapi_test import ( "encoding/json" + "os" "reflect" "testing" @@ -84,6 +85,8 @@ func TestAirwaySchema(t *testing.T) { data, err := json.MarshalIndent(schema, "", " ") require.NoError(t, err) + os.WriteFile("temp.schema.json", data, 0644) + require.JSONEq(t, string(data), `{ "type": "object", "required": [ @@ -97,7 +100,7 @@ func TestAirwaySchema(t *testing.T) { "template" ], "properties": { - "createCrds": { + "clusterAccess": { "type": "boolean" }, "fixDriftInterval": { diff --git a/pkg/openapi/temp.schema.json b/pkg/openapi/temp.schema.json new file mode 100644 index 0000000..b642cc6 --- /dev/null +++ b/pkg/openapi/temp.schema.json @@ -0,0 +1,550 @@ +{ + "type": "object", + "required": [ + "spec" + ], + "properties": { + "spec": { + "type": "object", + "required": [ + "wasmUrls", + "template" + ], + "properties": { + "clusterAccess": { + "type": "boolean" + }, + "fixDriftInterval": { + "type": "string" + }, + "objectPath": { + "type": "array", + "items": { + "type": "string" + } + }, + "template": { + "type": "object", + "required": [ + "group", + "names", + "scope", + "versions" + ], + "properties": { + "conversion": { + "type": "object", + "required": [ + "strategy" + ], + "properties": { + "strategy": { + "type": "string" + }, + "webhook": { + "type": "object", + "required": [ + "conversionReviewVersions" + ], + "properties": { + "clientConfig": { + "type": "object", + "properties": { + "caBundle": { + "type": "array", + "items": { + "type": "integer" + } + }, + "service": { + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "path": { + "type": "string" + }, + "port": { + "type": "integer" + } + } + }, + "url": { + "type": "string" + } + } + }, + "conversionReviewVersions": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "group": { + "type": "string" + }, + "names": { + "type": "object", + "required": [ + "plural", + "kind" + ], + "properties": { + "categories": { + "type": "array", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string" + }, + "listKind": { + "type": "string" + }, + "plural": { + "type": "string" + }, + "shortNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "singular": { + "type": "string" + } + } + }, + "preserveUnknownFields": { + "type": "boolean" + }, + "scope": { + "type": "string" + }, + "versions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "served", + "storage" + ], + "properties": { + "additionalPrinterColumns": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "type", + "jsonPath" + ], + "properties": { + "description": { + "type": "string" + }, + "format": { + "type": "string" + }, + "jsonPath": { + "type": "string" + }, + "name": { + "type": "string" + }, + "priority": { + "type": "integer" + }, + "type": { + "type": "string" + } + } + } + }, + "deprecated": { + "type": "boolean" + }, + "deprecationWarning": { + "type": "string" + }, + "name": { + "type": "string" + }, + "schema": { + "type": "object", + "properties": { + "openAPIV3Schema": { + "type": "object", + "properties": { + "$ref": { + "type": "string" + }, + "$schema": { + "type": "string" + }, + "additionalItems": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaPropsOrBool", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + }, + "additionalProperties": { + "type": "object", + "required": [ + "Allows" + ], + "properties": { + "Allows": { + "type": "boolean" + }, + "Schema": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + } + }, + "allOf": { + "type": "array", + "items": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + }, + "anyOf": { + "type": "array", + "items": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + }, + "default": { + "type": "object", + "required": [ + "-" + ], + "properties": { + "-": { + "type": "array", + "items": { + "type": "integer" + } + } + } + }, + "definitions": { + "type": "object", + "additionalProperties": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "object", + "required": [ + "Property" + ], + "properties": { + "Property": { + "type": "array", + "items": { + "type": "string" + } + }, + "Schema": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + } + } + }, + "description": { + "type": "string" + }, + "enum": { + "type": "array", + "items": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSON", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + }, + "example": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSON", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + }, + "exclusiveMaximum": { + "type": "boolean" + }, + "exclusiveMinimum": { + "type": "boolean" + }, + "externalDocs": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "format": { + "type": "string" + }, + "id": { + "type": "string" + }, + "items": { + "type": "object", + "required": [ + "JSONSchemas" + ], + "properties": { + "JSONSchemas": { + "type": "array", + "items": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + }, + "Schema": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + } + }, + "maxItems": { + "type": "integer" + }, + "maxLength": { + "type": "integer" + }, + "maxProperties": { + "type": "integer" + }, + "maximum": { + "type": "number" + }, + "minItems": { + "type": "integer" + }, + "minLength": { + "type": "integer" + }, + "minProperties": { + "type": "integer" + }, + "minimum": { + "type": "number" + }, + "multipleOf": { + "type": "number" + }, + "not": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + }, + "nullable": { + "type": "boolean" + }, + "oneOf": { + "type": "array", + "items": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + }, + "pattern": { + "type": "string" + }, + "patternProperties": { + "type": "object", + "additionalProperties": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + }, + "properties": { + "type": "object", + "additionalProperties": { + "description": "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:JSONSchemaProps", + "type": "object", + "x-kubernetes-preserve-unknown-fields": true + } + }, + "required": { + "type": "array", + "items": { + "type": "string" + } + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uniqueItems": { + "type": "boolean" + }, + "x-kubernetes-embedded-resource": { + "type": "boolean" + }, + "x-kubernetes-int-or-string": { + "type": "boolean" + }, + "x-kubernetes-list-map-keys": { + "type": "array", + "items": { + "type": "string" + } + }, + "x-kubernetes-list-type": { + "type": "string" + }, + "x-kubernetes-map-type": { + "type": "string" + }, + "x-kubernetes-preserve-unknown-fields": { + "type": "boolean" + }, + "x-kubernetes-validations": { + "type": "array", + "items": { + "type": "object", + "required": [ + "rule" + ], + "properties": { + "fieldPath": { + "type": "string" + }, + "message": { + "type": "string" + }, + "messageExpression": { + "type": "string" + }, + "optionalOldSelf": { + "type": "boolean" + }, + "reason": { + "type": "string" + }, + "rule": { + "type": "string" + } + } + } + } + } + } + } + }, + "selectableFields": { + "type": "array", + "items": { + "type": "object", + "required": [ + "jsonPath" + ], + "properties": { + "jsonPath": { + "type": "string" + } + } + } + }, + "served": { + "type": "boolean" + }, + "storage": { + "type": "boolean" + }, + "subresources": { + "type": "object", + "properties": { + "scale": { + "type": "object", + "required": [ + "specReplicasPath", + "statusReplicasPath" + ], + "properties": { + "labelSelectorPath": { + "type": "string" + }, + "specReplicasPath": { + "type": "string" + }, + "statusReplicasPath": { + "type": "string" + } + } + }, + "status": { + "type": "object" + } + } + } + } + } + } + } + }, + "wasmUrls": { + "type": "object", + "required": [ + "flight" + ], + "properties": { + "converter": { + "type": "string" + }, + "flight": { + "type": "string" + } + } + } + } + }, + "status": { + "type": "object", + "properties": { + "msg": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } +} \ No newline at end of file