From fc2ad3984a0c0f4868166fb4358b4d346709a40d Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Sat, 26 Oct 2024 10:31:46 +0200 Subject: [PATCH 01/31] Add a bootstrap cli command to generate the appOfApps application --- modules/build.nix | 15 ++++- modules/default.nix | 2 +- modules/nixidy.nix | 146 ++++++++++++++++++++++++++++------------ nixidy/nixidy | 25 ++++++- tests/default.nix | 1 + tests/internal-apps.nix | 42 ++++++++++++ 6 files changed, 185 insertions(+), 46 deletions(-) create mode 100644 tests/internal-apps.nix diff --git a/modules/build.nix b/modules/build.nix index 15f2d76..d57f279 100644 --- a/modules/build.nix +++ b/modules/build.nix @@ -46,6 +46,11 @@ in { options = with lib; { build = { + bootstrapPackage = mkOption { + type = types.package; + internal = true; + description = "The package containing the bootstrap appOfApps application manifest."; + }; extrasPackage = mkOption { type = types.package; internal = true; @@ -66,6 +71,8 @@ in { config = { build = { + bootstrapPackage = mkApp config.applications.__bootstrap; + extrasPackage = pkgs.stdenv.mkDerivation { name = "nixidy-extras-${envName}"; @@ -85,11 +92,15 @@ in { }; environmentPackage = let - joined = pkgs.linkFarm "nixidy-apps-joined-${envName}" (lib.mapAttrsToList (_: app: { + joined = pkgs.linkFarm "nixidy-apps-joined-${envName}" ( + map (name: let + app = config.applications.${name}; + in { name = app.output.path; path = mkApp app; }) - config.applications); + config.nixidy.publicApps + ); in pkgs.symlinkJoin { name = "nixidy-environment-${envName}"; diff --git a/modules/default.nix b/modules/default.nix index 8c5777c..a596907 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -35,6 +35,6 @@ }; in { inherit (module) config; - inherit (module.config.build) environmentPackage activationPackage; + inherit (module.config.build) environmentPackage activationPackage bootstrapPackage; meta = {inherit (module.config.nixidy.target) repository branch;}; } diff --git a/modules/nixidy.nix b/modules/nixidy.nix index 7f1606d..b74c472 100644 --- a/modules/nixidy.nix +++ b/modules/nixidy.nix @@ -5,8 +5,6 @@ }: let cfg = config.nixidy; - apps = builtins.removeAttrs config.applications [cfg.appOfApps.name]; - extraFilesOpts = with lib; {name, ...}: { options = { @@ -167,6 +165,11 @@ in { default = "argocd"; description = "Destination namespace for generated Argo CD Applications in the app of apps applications."; }; + project = mkOption { + type = types.str; + default = "default"; + description = "The project of the generated bootstrap app for appOfApps"; + }; }; charts = mkOption { @@ -179,57 +182,116 @@ in { default = null; description = "Path to a directory containing sub-directory structure that can be used to build a charts attrset. This will be passed as `charts` to every module."; }; + + publicApps = mkOption { + type = with types; listOf str; + default = []; + internal = true; + description = '' + List of the names of all applications that do not contain the internal `__` prefix. + ''; + }; }; config = { applications.${cfg.appOfApps.name} = { inherit (cfg.appOfApps) namespace; - resources.applications = - lib.attrsets.mapAttrs ( - n: app: { - metadata = { - inherit (app) name; - annotations = - if app.annotations != {} - then app.annotations - else null; - }; - spec = { - inherit (app) project; - - source = { - repoURL = cfg.target.repository; - targetRevision = cfg.target.branch; - path = lib.path.subpath.join [ - cfg.target.rootPath - app.output.path - ]; - }; - destination = { - inherit (app) namespace; - inherit (app.destination) server; - }; - syncPolicy = - (lib.optionalAttrs app.syncPolicy.autoSync.enabled { - automated = { - inherit (app.syncPolicy.autoSync) prune selfHeal; + resources.applications = let + appsWithoutAppsOfApps = lib.filter (n: n != cfg.appOfApps.name) cfg.publicApps; + in + builtins.listToAttrs + (map ( + name: let + app = config.applications.${name}; + in { + inherit name; + + value = { + metadata = { + inherit (app) name; + annotations = + if app.annotations != {} + then app.annotations + else null; + }; + spec = { + inherit (app) project; + + source = { + repoURL = cfg.target.repository; + targetRevision = cfg.target.branch; + path = lib.path.subpath.join [ + cfg.target.rootPath + app.output.path + ]; + }; + destination = { + inherit (app) namespace; + inherit (app.destination) server; }; - }) - // (lib.optionalAttrs (lib.length app.syncPolicy.finalSyncOpts > 0) { - syncOptions = app.syncPolicy.finalSyncOpts; - }); - }; - } - ) - apps; + syncPolicy = + (lib.optionalAttrs app.syncPolicy.autoSync.enabled { + automated = { + inherit (app.syncPolicy.autoSync) prune selfHeal; + }; + }) + // (lib.optionalAttrs (lib.length app.syncPolicy.finalSyncOpts > 0) { + syncOptions = app.syncPolicy.finalSyncOpts; + }); + }; + }; + } + ) + appsWithoutAppsOfApps); + }; + + # This application's resources are printed on + # stdout when `nixidy bootstrap .#` is run + applications.__bootstrap = let + app = config.applications.${cfg.appOfApps.name}; + in { + inherit (cfg.appOfApps) namespace; + + resources.applications.${cfg.appOfApps.name} = { + metadata.namespace = cfg.appOfApps.namespace; + spec = { + inherit (cfg.appOfApps) project; + + source = { + repoURL = cfg.target.repository; + targetRevision = cfg.target.branch; + path = lib.path.subpath.join [ + cfg.target.rootPath + app.output.path + ]; + }; + destination = { + inherit (app) namespace; + inherit (app.destination) server; + }; + # Maybe this should be configurable but + # generally I think autoSync would be + # desirable on the initial appOfApps. + syncPolicy.automated = { + prune = true; + selfHeal = true; + }; + }; + }; }; _module.args.charts = config.nixidy.charts; - nixidy.charts = lib.optionalAttrs (cfg.chartsDir != null) (mkChartAttrs cfg.chartsDir); + nixidy = { + charts = lib.optionalAttrs (cfg.chartsDir != null) (mkChartAttrs cfg.chartsDir); + + extraFiles = lib.optionalAttrs (cfg.build.revision != null) { + ".revision".text = cfg.build.revision; + }; - nixidy.extraFiles = lib.optionalAttrs (cfg.build.revision != null) { - ".revision".text = cfg.build.revision; + publicApps = + builtins.filter (n: !(lib.hasPrefix "__" n)) + (builtins.attrNames config.applications); }; }; } diff --git a/nixidy/nixidy b/nixidy/nixidy index ab137b5..9f54465 100644 --- a/nixidy/nixidy +++ b/nixidy/nixidy @@ -63,6 +63,22 @@ function doSwitch() { "${ENVIRON}/activate" } +function doBootstrap() { + setFlakeParam + + if [[ -z "$FLAKE_ENV" ]]; then + doHelp + exit 1 + fi + + BOOTSTRAP=$(nix build "${FLAKE_ROOT}#nixidyEnvs.${NIX_SYSTEM}.${FLAKE_ENV}.bootstrapPackage" --no-link --print-out-paths) + + for manifest in "$BOOTSTRAP/*.yaml"; do + echo "---" + cat $manifest + done +} + function doHelp() { echo "Usage: $0 [OPTION] COMMAND" echo @@ -86,6 +102,10 @@ function doHelp() { echo echo " switch FLAKE_URI Build and switch to nixidy environment from flake URI." echo " Example: .#prod" + echo + echo " bootstrap FLAKE_URI" + echo " Output a manifest to bootstrap appOfApps." + echo " Example: .#prod" } COMMAND="" @@ -98,7 +118,7 @@ while [[ $# -gt 0 ]]; do opt="$1" shift case $opt in - build|switch|info|help) + build|switch|info|bootstrap|help) COMMAND="$opt" ;; --no-link) @@ -145,6 +165,9 @@ case $COMMAND in switch) doSwitch ;; + bootstrap) + doBootstrap + ;; help) doHelp ;; diff --git a/tests/default.nix b/tests/default.nix index 2476c24..0bbf207 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -9,6 +9,7 @@ ./create-namespace.nix ./yamls.nix ./override-name.nix + ./internal-apps.nix ./helm/no-values.nix ./helm/with-values.nix ./helm/transformer.nix diff --git a/tests/internal-apps.nix b/tests/internal-apps.nix new file mode 100644 index 0000000..cd46f86 --- /dev/null +++ b/tests/internal-apps.nix @@ -0,0 +1,42 @@ +{ + lib, + config, + ... +}: let + apps = config.applications.${config.nixidy.appOfApps.name}; +in { + # `__` prefix makes an application an + # internal application + applications.__test = { + # Even if you override the name it + # should use the attribute name to + # exclude internal applications + name = "test"; + }; + + test = with lib; { + name = "internal applications"; + description = "Check that applications with the internal application prefix is not a part of appOfApps."; + assertions = [ + { + description = "Application `__test` should not be included."; + + expression = hasAttr "__test" apps.resources.applications; + + expected = false; + } + + { + description = "App of apps should not have an Application resource for an internal application."; + + expression = + findFirst + (x: x.kind == "Application" && x.metadata.name == "test") + null + apps.objects; + + expected = null; + } + ]; + }; +} From f23de31caa32430d25ec1ba26a429e4588babfea Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Sat, 26 Oct 2024 18:05:10 +0200 Subject: [PATCH 02/31] Add a nix app for building and serving docs --- flake.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/flake.nix b/flake.nix index 10fe6e0..4383524 100644 --- a/flake.nix +++ b/flake.nix @@ -177,6 +177,18 @@ type = "app"; program = self.moduleTests.${system}.reportScript.outPath; }; + + # Run a docs server + docsServe = { + type = "app"; + program = + ( + pkgs.writeShellScript "serve-docs" '' + ${pkgs.python3}/bin/python -m http.server -d ${self.packages.${system}.docs.html} 8080 + '' + ) + .outPath; + }; }; })); } From cc82dd854f8fc1f341246aa5733a8e80dd1f35b0 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Sun, 27 Oct 2024 13:12:02 +0100 Subject: [PATCH 03/31] Add full options search to docs --- docs/build-options-doc.nix | 1 + docs/build-options-search.nix | 65 +++++++++++++++++++++++++++++++++++ docs/default.nix | 9 +++++ flake.lock | 59 ++++++++++++++++++++++++++++--- flake.nix | 16 ++++++++- 5 files changed, 145 insertions(+), 5 deletions(-) create mode 100644 docs/build-options-search.nix diff --git a/docs/build-options-doc.nix b/docs/build-options-doc.nix index f5e1174..9056213 100644 --- a/docs/build-options-doc.nix +++ b/docs/build-options-doc.nix @@ -82,6 +82,7 @@ '' # Configuration Options + To see all available resources options, use the [nixidy options search](search) powered by [NüschtOS](https://github.com/NuschtOS/search). '' ] ++ (mapAttrsToList (n: opt: diff --git a/docs/build-options-search.nix b/docs/build-options-search.nix new file mode 100644 index 0000000..07f2857 --- /dev/null +++ b/docs/build-options-search.nix @@ -0,0 +1,65 @@ +{ + pkgs, + lib, + kubenix, + mkSearch, +}: let + nixidyPath = toString ./..; + kubenixPath = toString kubenix; + + # Borrowed from home-manager :) + gitHubDeclaration = user: repo: subpath: { + url = "https://github.com/${user}/${repo}/blob/main/${subpath}"; + name = "${repo}/${subpath}"; + }; + + options = + (lib.evalModules { + modules = + import ../modules/modules.nix + ++ [ + { + nixidy.resourceImports = [ + (kubenix + "/modules/generated/v1.30.nix") + ../modules/generated/argocd.nix + ]; + } + ]; + specialArgs = { + inherit pkgs lib; + }; + }) + .options; + + optionsJSON = + (pkgs.buildPackages.nixosOptionsDoc { + options = removeAttrs options ["_module"]; + transformOptions = opt: + opt + // { + declarations = + map ( + decl: + if lib.hasPrefix nixidyPath (toString decl) + then gitHubDeclaration "arnarg" "nixidy" (lib.removePrefix "/" (lib.removePrefix nixidyPath (toString decl))) + else if lib.hasPrefix kubenixPath (toString decl) + then gitHubDeclaration "hall" "kubenix" (lib.removePrefix "/" (lib.removePrefix kubenixPath (toString decl))) + else if decl == "lib/modules.nix" + then gitHubDeclaration "NixOS" "nixpkgs" decl + else decl + ) + opt.declarations; + } + // (lib.optionalAttrs (opt.description == null) { + description = ""; + }); + }) + .optionsJSON; +in + baseHref: + mkSearch { + inherit baseHref; + optionsJSON = optionsJSON + "/share/doc/nixos/options.json"; + urlPrefix = "https://github.com/arnarg/nixidy/tree/main"; + title = "nixidy options search"; + } diff --git a/docs/default.nix b/docs/default.nix index 5bbd783..2a15ffe 100644 --- a/docs/default.nix +++ b/docs/default.nix @@ -1,9 +1,15 @@ { pkgs, lib ? pkgs.lib, + kubenix, + mkSearch, }: let optionsMd = import ./build-options-doc.nix {inherit pkgs lib;}; + buildSearch = import ./build-options-search.nix { + inherit pkgs lib kubenix mkSearch; + }; + libraryMd = import ./build-library-doc.nix {inherit pkgs lib;}; docsHtml = pkgs.stdenv.mkDerivation { @@ -83,8 +89,11 @@ buildPhase = '' mkdir -p $out python -m mkdocs build + + cp -r ${buildSearch "/nixidy/options/search/"} $out/options/search ''; }; in { html = docsHtml; + search = buildSearch "/"; } diff --git a/flake.lock b/flake.lock index 6b5a81d..ce1e0c7 100644 --- a/flake.lock +++ b/flake.lock @@ -34,6 +34,32 @@ "type": "github" } }, + "ixx": { + "inputs": { + "flake-utils": [ + "nuschtos", + "flake-utils" + ], + "nixpkgs": [ + "nuschtos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729544999, + "narHash": "sha256-YcyJLvTmN6uLEBGCvYoMLwsinblXMkoYkNLEO4WnKus=", + "owner": "NuschtOS", + "repo": "ixx", + "rev": "65c207c92befec93e22086da9456d3906a4e999c", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "ref": "v0.0.5", + "repo": "ixx", + "type": "github" + } + }, "kubenix": { "inputs": { "flake-compat": "flake-compat", @@ -74,11 +100,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1702151865, - "narHash": "sha256-9VAt19t6yQa7pHZLDbil/QctAgVsA66DLnzdRGqDisg=", + "lastModified": 1729880355, + "narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "666fc80e7b2afb570462423cb0e1cf1a3a34fedd", + "rev": "18536bf04cd71abd345f9579158841376fdd0c5a", "type": "github" }, "original": { @@ -88,12 +114,37 @@ "type": "github" } }, + "nuschtos": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "ixx": "ixx", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729992468, + "narHash": "sha256-zzGpWx64+/TfZdF5TjzUIV4ESFWCsscapK5Smx9bexk=", + "owner": "nuschtos", + "repo": "search", + "rev": "3c246cc08ffa8e61956e506dd6689bc6e9d5aa20", + "type": "github" + }, + "original": { + "owner": "nuschtos", + "repo": "search", + "type": "github" + } + }, "root": { "inputs": { "flake-utils": "flake-utils", "kubenix": "kubenix", "nix-kube-generators": "nix-kube-generators", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "nuschtos": "nuschtos" } }, "systems": { diff --git a/flake.nix b/flake.nix index 4383524..6ba8ece 100644 --- a/flake.nix +++ b/flake.nix @@ -6,6 +6,14 @@ flake-utils.url = "github:numtide/flake-utils"; nix-kube-generators.url = "github:farcaller/nix-kube-generators"; + nuschtos = { + url = "github:nuschtos/search"; + inputs = { + nixpkgs.follows = "nixpkgs"; + flake-utils.follows = "flake-utils"; + }; + }; + kubenix = { url = "github:hall/kubenix"; inputs.nixpkgs.follows = "nixpkgs"; @@ -18,6 +26,7 @@ flake-utils, nix-kube-generators, kubenix, + nuschtos, }: { lib = rec { @@ -69,7 +78,12 @@ inherit system; }; docs = import ./docs { - inherit pkgs; + inherit pkgs kubenix; + mkSearch = nuschtos.packages.${system}.mkSearch; + lib = import ./lib { + inherit pkgs; + kubelib = nix-kube-generators; + }; }; packages = import ./nixidy pkgs; in { From 89c120277fb4465048bac624f948bdc951b21cea Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Sun, 27 Oct 2024 13:26:32 +0100 Subject: [PATCH 04/31] Add magic-nix-cache-action to docs workflow --- .github/workflows/docs.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 04ebbcc..ef1d142 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -16,6 +16,8 @@ jobs: extra_nix_config: | extra-experimental-features = nix-command flakes + - uses: DeterminateSystems/magic-nix-cache-action@v7 + - run: | nix build .#docs.html --out-link public From 8e93d8370c00e69c71c06e360a7d1999558c54b6 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Sun, 27 Oct 2024 15:58:58 +0100 Subject: [PATCH 05/31] Add the options search in the description for resources --- docs/build-options-doc.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-options-doc.nix b/docs/build-options-doc.nix index 9056213..3c210ae 100644 --- a/docs/build-options-doc.nix +++ b/docs/build-options-doc.nix @@ -39,7 +39,7 @@ description = '' Kubernetes resources for the application. - The entire list of available resource options is too large for the current documentation setup but its usage is explained [here](https://arnarg.github.io/nixidy/user_guide/typed_resources/). + The entire list of available resource options is too large for the current documentation setup but can be searched in the [nixidy options search](search) powered by [NüschtOS](https://github.com/NuschtOS/search). ''; }; }; From 9470dce216496c8e1944d464c26f061fe620bfc4 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Sun, 27 Oct 2024 16:27:08 +0100 Subject: [PATCH 06/31] Add documentation about bootstrapping a cluster with nixidy --- docs/user_guide/getting_started.md | 37 +++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/docs/user_guide/getting_started.md b/docs/user_guide/getting_started.md index 1db023e..9b74193 100644 --- a/docs/user_guide/getting_started.md +++ b/docs/user_guide/getting_started.md @@ -181,7 +181,7 @@ Applications and their resources are defined under `applications.> tree -l result/ ├── apps │ └── Application-demo.yaml └── demo @@ -229,3 +229,38 @@ A directory with rendered resources is generated for each application declared w See [App of Apps Pattern](https://argo-cd.readthedocs.io/en/stable/operator-manual/cluster-bootstrapping/#app-of-apps-pattern). Running `nixidy switch .#dev` will create the `./manifests/dev` relative to the current working directory and sync the newly generated manifests into it. + +## Bootstrapping Cluster + +After creating a git repository that is specified in `nixidy.target.repository` and pushing the generated manifests (e.g. by running `nixidy switch .#dev`) to the branch specified in `nixidy.target.branch`, your cluster can be bootstrapped. + +Make sure you have access to the Kubernetes API and Argo CD is installed and running on your cluster (refer to Argo CD's [getting started guide](https://argo-cd.readthedocs.io/en/stable/getting_started) for that). + +For quick bootstrapping you can run the command `nixidy bootstrap` to output an initial `Application` that will trigger a deployment of all other applications. + +```sh +>> nixidy bootstrap .#dev +--- +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: apps + namespace: argocd +spec: + destination: + namespace: argocd + server: https://kubernetes.default.svc + project: default + source: + path: ./manifests/dev/apps + repoURL: https://github.com/arnarg/nixidy-demo.git + targetRevision: main + syncPolicy: + automated: + prune: true + selfHeal: true +``` + +To actually deploy it, run `nixidy bootstrap .#dev | kubectl apply -f -` (this assumes that the argocd namespace already exists in the cluster). + +Alternatively, create a new application in the Argo CD Web GUI by specifying the `manifests/dev/apps` path. From 4b1406220f494529a6411cf69a1a3de8b41af829 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Sun, 27 Oct 2024 16:36:12 +0100 Subject: [PATCH 07/31] Add next steps to getting started guide --- docs/user_guide/getting_started.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/user_guide/getting_started.md b/docs/user_guide/getting_started.md index 9b74193..a179908 100644 --- a/docs/user_guide/getting_started.md +++ b/docs/user_guide/getting_started.md @@ -264,3 +264,7 @@ spec: To actually deploy it, run `nixidy bootstrap .#dev | kubectl apply -f -` (this assumes that the argocd namespace already exists in the cluster). Alternatively, create a new application in the Argo CD Web GUI by specifying the `manifests/dev/apps` path. + +## Next Steps + +Now that the cluster is running the applications specified in your nixidy config, you might want to build your applications on top of [helm charts](./helm_charts.md) or have [Github Actions](./github_actions.md) generate the manifests. From 8384b84bca9ca3dea5ffbb4bf129feb1127fee33 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Mon, 28 Oct 2024 10:58:55 +0100 Subject: [PATCH 08/31] Move docs generation out of main flake I do this to prevent every user to have to pull the nuschtos input --- .github/workflows/docs.yaml | 6 +- docs/default.nix | 141 +++++++++++------------------------- docs/docs.nix | 100 +++++++++++++++++++++++++ docs/npins/default.nix | 80 ++++++++++++++++++++ docs/npins/sources.json | 38 ++++++++++ flake.lock | 53 +------------- flake.nix | 31 -------- 7 files changed, 265 insertions(+), 184 deletions(-) create mode 100644 docs/docs.nix create mode 100644 docs/npins/default.nix create mode 100644 docs/npins/sources.json diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index ef1d142..f95ceae 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -11,15 +11,15 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: cachix/install-nix-action@v23 + - uses: cachix/install-nix-action@v30 with: extra_nix_config: | extra-experimental-features = nix-command flakes - - uses: DeterminateSystems/magic-nix-cache-action@v7 + - uses: DeterminateSystems/magic-nix-cache-action@v8 - run: | - nix build .#docs.html --out-link public + nix-build ./docs -A html --out-link public - name: Deploy uses: peaceiris/actions-gh-pages@v3 diff --git a/docs/default.nix b/docs/default.nix index 2a15ffe..4e0aec2 100644 --- a/docs/default.nix +++ b/docs/default.nix @@ -1,99 +1,44 @@ -{ - pkgs, - lib ? pkgs.lib, - kubenix, - mkSearch, -}: let - optionsMd = import ./build-options-doc.nix {inherit pkgs lib;}; - - buildSearch = import ./build-options-search.nix { - inherit pkgs lib kubenix mkSearch; - }; - - libraryMd = import ./build-library-doc.nix {inherit pkgs lib;}; - - docsHtml = pkgs.stdenv.mkDerivation { - inherit optionsMd; - - passAsFile = ["optionsMd"]; - - name = "nixidy-html-docs"; - - src = lib.cleanSource ./..; - - buildInputs = with pkgs.python3.pkgs; [mkdocs-material mkdocs-material-extensions]; - - phases = ["unpackPhase" "patchPhase" "buildPhase"]; - - patchPhase = '' - cat $optionsMdPath > docs/options.md - cp ${libraryMd}/lib.md docs/library.md - cp ${../README.md} docs/index.md - - cat < mkdocs.yml - site_name: nixidy - site_url: https://arnarg.github.io/nixidy/ - site_dir: $out - - repo_url: https://github.com/arnarg/nixidy/ - - exclude_docs: | - *.nix - - theme: - name: material - - palette: - - media: "(prefers-color-scheme: light)" - scheme: default - toggle: - icon: material/brightness-7 - name: Switch to dark mode - - media: "(prefers-color-scheme: dark)" - scheme: slate - toggle: - icon: material/brightness-4 - name: Switch to light mode - - features: - - navigation.footer - - content.tabs.link - - markdown_extensions: - - def_list - - toc: - permalink: "#" - toc_depth: 3 - - admonition - - pymdownx.highlight - - pymdownx.inlinehilite - - pymdownx.superfences - - pymdownx.tabbed: - alternate_style: true - - nav: - - Home: index.md - - 'User Guide': - - 'Getting Started': user_guide/getting_started.md - - 'Using Helm Charts': user_guide/helm_charts.md - - 'Typed Resource Options': user_guide/typed_resources.md - - 'GitHub Actions': user_guide/github_actions.md - - 'Transformers': user_guide/transformers.md - - 'Using nixhelm': user_guide/using_nixhelm.md - - Reference: - - 'Library Functions': library.md - - 'Configuration Options': options.md - EOF - ''; - - buildPhase = '' - mkdir -p $out - python -m mkdocs build - - cp -r ${buildSearch "/nixidy/options/search/"} $out/options/search - ''; +let + # Get some sources from npins. + sources = import ./npins; + pkgs = import sources.nixpkgs {}; + + # Some inputs from the root flake need + # be available to the docs generation. + # To make sure they are the same version + # as is used by the flake I read the flake.lock + # and fetch them below. + flakeLock = builtins.fromJSON (builtins.readFile ../flake.lock); + kubenix = let + lock = flakeLock.nodes.kubenix.locked; + in + pkgs.fetchFromGitHub { + inherit (lock) owner repo rev; + hash = lock.narHash; + }; + kubelib = let + lock = flakeLock.nodes.nix-kube-generators.locked; + in + pkgs.fetchFromGitHub { + inherit (lock) owner repo rev; + hash = lock.narHash; + }; + + # Setup nuschtos without using a flake. + nuschtos = sources.search; + ixx = sources.ixx; + ixxPkgs = { + ixx = pkgs.callPackage "${ixx}/ixx/derivation.nix" {}; + fixx = pkgs.callPackage "${ixx}/fixx/derivation.nix" {}; + libixx = pkgs.callPackage "${ixx}/libixx/derivation.nix" {}; }; -in { - html = docsHtml; - search = buildSearch "/"; -} + nuscht-search = pkgs.callPackage "${nuschtos}/nix/frontend.nix" {}; + mkSearch = (pkgs.callPackage "${nuschtos}/nix/wrapper.nix" {inherit nuscht-search ixxPkgs;}).mkSearch; +in + # Build docs! + import ./docs.nix { + inherit pkgs kubenix mkSearch; + lib = import ../lib { + inherit pkgs kubelib; + }; + } diff --git a/docs/docs.nix b/docs/docs.nix new file mode 100644 index 0000000..3150b55 --- /dev/null +++ b/docs/docs.nix @@ -0,0 +1,100 @@ +{ + pkgs, + lib ? pkgs.lib, + kubenix, + mkSearch, +}: let + optionsMd = import ./build-options-doc.nix {inherit pkgs lib;}; + + buildSearch = import ./build-options-search.nix { + inherit pkgs lib kubenix mkSearch; + }; + + libraryMd = import ./build-library-doc.nix {inherit pkgs lib;}; + + docsHtml = pkgs.stdenv.mkDerivation { + inherit optionsMd; + + passAsFile = ["optionsMd"]; + + name = "nixidy-html-docs"; + + src = lib.cleanSource ./..; + + buildInputs = with pkgs.python3.pkgs; [mkdocs-material mkdocs-material-extensions]; + + phases = ["unpackPhase" "patchPhase" "buildPhase"]; + + patchPhase = '' + cat $optionsMdPath > docs/options.md + cp ${libraryMd}/lib.md docs/library.md + cp ${../README.md} docs/index.md + + cat < mkdocs.yml + site_name: nixidy + site_url: https://arnarg.github.io/nixidy/ + site_dir: $out + + repo_url: https://github.com/arnarg/nixidy/ + + exclude_docs: | + *.nix + /npins/ + + theme: + name: material + + palette: + - media: "(prefers-color-scheme: light)" + scheme: default + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to light mode + + features: + - navigation.footer + - content.tabs.link + + markdown_extensions: + - def_list + - toc: + permalink: "#" + toc_depth: 3 + - admonition + - pymdownx.highlight + - pymdownx.inlinehilite + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + + nav: + - Home: index.md + - 'User Guide': + - 'Getting Started': user_guide/getting_started.md + - 'Using Helm Charts': user_guide/helm_charts.md + - 'Typed Resource Options': user_guide/typed_resources.md + - 'GitHub Actions': user_guide/github_actions.md + - 'Transformers': user_guide/transformers.md + - 'Using nixhelm': user_guide/using_nixhelm.md + - Reference: + - 'Library Functions': library.md + - 'Configuration Options': options.md + EOF + ''; + + buildPhase = '' + mkdir -p $out + python -m mkdocs build + + cp -r ${buildSearch "/nixidy/options/search/"} $out/options/search + ''; + }; +in { + html = docsHtml; + search = buildSearch "/"; +} diff --git a/docs/npins/default.nix b/docs/npins/default.nix new file mode 100644 index 0000000..5e7d086 --- /dev/null +++ b/docs/npins/default.nix @@ -0,0 +1,80 @@ +# Generated by npins. Do not modify; will be overwritten regularly +let + data = builtins.fromJSON (builtins.readFile ./sources.json); + version = data.version; + + mkSource = + spec: + assert spec ? type; + let + path = + if spec.type == "Git" then + mkGitSource spec + else if spec.type == "GitRelease" then + mkGitSource spec + else if spec.type == "PyPi" then + mkPyPiSource spec + else if spec.type == "Channel" then + mkChannelSource spec + else + builtins.throw "Unknown source type ${spec.type}"; + in + spec // { outPath = path; }; + + mkGitSource = + { + repository, + revision, + url ? null, + hash, + branch ? null, + ... + }: + assert repository ? type; + # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository + # In the latter case, there we will always be an url to the tarball + if url != null then + (builtins.fetchTarball { + inherit url; + sha256 = hash; # FIXME: check nix version & use SRI hashes + }) + else + assert repository.type == "Git"; + let + urlToName = + url: rev: + let + matched = builtins.match "^.*/([^/]*)(\\.git)?$" repository.url; + + short = builtins.substring 0 7 rev; + + appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else ""; + in + "${if matched == null then "source" else builtins.head matched}${appendShort}"; + name = urlToName repository.url revision; + in + builtins.fetchGit { + url = repository.url; + rev = revision; + inherit name; + # hash = hash; + }; + + mkPyPiSource = + { url, hash, ... }: + builtins.fetchurl { + inherit url; + sha256 = hash; + }; + + mkChannelSource = + { url, hash, ... }: + builtins.fetchTarball { + inherit url; + sha256 = hash; + }; +in +if version == 3 then + builtins.mapAttrs (_: mkSource) data.pins +else + throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`" diff --git a/docs/npins/sources.json b/docs/npins/sources.json new file mode 100644 index 0000000..8b68be4 --- /dev/null +++ b/docs/npins/sources.json @@ -0,0 +1,38 @@ +{ + "pins": { + "ixx": { + "type": "GitRelease", + "repository": { + "type": "GitHub", + "owner": "nuschtos", + "repo": "ixx" + }, + "pre_releases": false, + "version_upper_bound": null, + "release_prefix": null, + "version": "v0.0.5", + "revision": "65c207c92befec93e22086da9456d3906a4e999c", + "url": "https://api.github.com/repos/nuschtos/ixx/tarball/v0.0.5", + "hash": "1sraly2kpi6jj0c4lcjpp6fj42rg1j5bv0hi225sndz6yhp8kk31" + }, + "nixpkgs": { + "type": "Channel", + "name": "nixpkgs-unstable", + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-24.11pre697431.86e78d3d2084/nixexprs.tar.xz", + "hash": "0wbmh3jc25xan6x6nndfidgkfigip49zqp0rivi6lsdv18sx9mvx" + }, + "search": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "nuschtos", + "repo": "search" + }, + "branch": "main", + "revision": "e373332c1f8237fc1263901745b0fe747228c8ba", + "url": "https://github.com/nuschtos/search/archive/e373332c1f8237fc1263901745b0fe747228c8ba.tar.gz", + "hash": "02vqpp8k3aisnv34301lrcb0129kgnklpy6xf2bb94p1bpv9bg0d" + } + }, + "version": 3 +} \ No newline at end of file diff --git a/flake.lock b/flake.lock index ce1e0c7..1f6c8a9 100644 --- a/flake.lock +++ b/flake.lock @@ -34,32 +34,6 @@ "type": "github" } }, - "ixx": { - "inputs": { - "flake-utils": [ - "nuschtos", - "flake-utils" - ], - "nixpkgs": [ - "nuschtos", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1729544999, - "narHash": "sha256-YcyJLvTmN6uLEBGCvYoMLwsinblXMkoYkNLEO4WnKus=", - "owner": "NuschtOS", - "repo": "ixx", - "rev": "65c207c92befec93e22086da9456d3906a4e999c", - "type": "github" - }, - "original": { - "owner": "NuschtOS", - "ref": "v0.0.5", - "repo": "ixx", - "type": "github" - } - }, "kubenix": { "inputs": { "flake-compat": "flake-compat", @@ -114,37 +88,12 @@ "type": "github" } }, - "nuschtos": { - "inputs": { - "flake-utils": [ - "flake-utils" - ], - "ixx": "ixx", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1729992468, - "narHash": "sha256-zzGpWx64+/TfZdF5TjzUIV4ESFWCsscapK5Smx9bexk=", - "owner": "nuschtos", - "repo": "search", - "rev": "3c246cc08ffa8e61956e506dd6689bc6e9d5aa20", - "type": "github" - }, - "original": { - "owner": "nuschtos", - "repo": "search", - "type": "github" - } - }, "root": { "inputs": { "flake-utils": "flake-utils", "kubenix": "kubenix", "nix-kube-generators": "nix-kube-generators", - "nixpkgs": "nixpkgs", - "nuschtos": "nuschtos" + "nixpkgs": "nixpkgs" } }, "systems": { diff --git a/flake.nix b/flake.nix index 6ba8ece..939ca33 100644 --- a/flake.nix +++ b/flake.nix @@ -6,14 +6,6 @@ flake-utils.url = "github:numtide/flake-utils"; nix-kube-generators.url = "github:farcaller/nix-kube-generators"; - nuschtos = { - url = "github:nuschtos/search"; - inputs = { - nixpkgs.follows = "nixpkgs"; - flake-utils.follows = "flake-utils"; - }; - }; - kubenix = { url = "github:hall/kubenix"; inputs.nixpkgs.follows = "nixpkgs"; @@ -26,7 +18,6 @@ flake-utils, nix-kube-generators, kubenix, - nuschtos, }: { lib = rec { @@ -77,19 +68,9 @@ pkgs = import nixpkgs { inherit system; }; - docs = import ./docs { - inherit pkgs kubenix; - mkSearch = nuschtos.packages.${system}.mkSearch; - lib = import ./lib { - inherit pkgs; - kubelib = nix-kube-generators; - }; - }; packages = import ./nixidy pkgs; in { packages = { - inherit docs; - default = packages.nixidy; generators = import ./pkgs/generators {inherit pkgs;}; }; @@ -191,18 +172,6 @@ type = "app"; program = self.moduleTests.${system}.reportScript.outPath; }; - - # Run a docs server - docsServe = { - type = "app"; - program = - ( - pkgs.writeShellScript "serve-docs" '' - ${pkgs.python3}/bin/python -m http.server -d ${self.packages.${system}.docs.html} 8080 - '' - ) - .outPath; - }; }; })); } From 50dd861199bdbba78be6d6deaa5077971cf02df8 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Wed, 30 Oct 2024 17:22:40 +0100 Subject: [PATCH 09/31] Add initial support for flakeless nix --- default.nix | 41 +++++++++++++++++++++++++ flake.nix | 45 ++------------------------- make-env.nix | 45 +++++++++++++++++++++++++++ nixidy/nixidy | 84 ++++++++++++++++++++++++++++++++++++++++++++------- 4 files changed, 162 insertions(+), 53 deletions(-) create mode 100644 default.nix create mode 100644 make-env.nix diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..13555b2 --- /dev/null +++ b/default.nix @@ -0,0 +1,41 @@ +{nixpkgs ? null}: let + flakeLock = builtins.fromJSON (builtins.readFile ./flake.lock); + + flakeLockMeta = node: let + lock = flakeLock.nodes.${node}.locked; + in { + inherit (lock) owner repo rev type; + hash = lock.narHash; + }; + + npkgs = let + meta = flakeLockMeta "nixpkgs"; + + source = + if nixpkgs == null + then + builtins.fetchTarball { + url = "https://github.com/${meta.owner}/${meta.repo}/archive/${meta.rev}.tar.gz"; + sha256 = meta.hash; + } + else nixpkgs; + in + import source {}; + + importFromFlakeLock = node: let + lock = flakeLockMeta node; + in + if lock.type == "github" + then npkgs.fetchFromGitHub (removeAttrs lock ["type"]) + else throw "fetcher for type ${lock.type} unsupported"; + + kubenix = importFromFlakeLock "kubenix"; + kubelib = importFromFlakeLock "nix-kube-generators"; + + lib = import ./make-env.nix {inherit kubenix kubelib;}; +in { + lib = { + mkEnv = args @ {pkgs ? npkgs, ...}: lib.mkEnv (args // {inherit pkgs;}); + mkEnvs = args @ {pkgs ? npkgs, ...}: lib.mkEnvs (args // {inherit pkgs;}); + }; +} diff --git a/flake.nix b/flake.nix index 939ca33..3dcdafe 100644 --- a/flake.nix +++ b/flake.nix @@ -20,48 +20,9 @@ kubenix, }: { - lib = rec { - mkEnv = { - pkgs, - lib ? pkgs.lib, - modules ? [], - extraSpecialArgs ? {}, - charts ? {}, - libOverlay ? null, - }: - import ./modules { - inherit pkgs lib extraSpecialArgs kubenix libOverlay; - kubelib = nix-kube-generators; - modules = - modules - ++ [ - { - nixidy.charts = charts; - } - ]; - }; - - mkEnvs = { - pkgs, - lib ? pkgs.lib, - modules ? [], - extraSpecialArgs ? {}, - envs ? {}, - charts ? {}, - libOverlay ? null, - }: - lib.mapAttrs ( - env: conf: - mkEnv { - inherit pkgs lib charts libOverlay; - extraSpecialArgs = extraSpecialArgs // (conf.extraSpecialArgs or {}); - modules = - [{nixidy.target.rootPath = lib.mkDefault "./manifests/${env}";}] - ++ modules - ++ (conf.modules or []); - } - ) - envs; + lib = import ./make-env.nix { + inherit kubenix; + kubelib = nix-kube-generators; }; } // (flake-utils.lib.eachDefaultSystem (system: let diff --git a/make-env.nix b/make-env.nix new file mode 100644 index 0000000..dd00c7c --- /dev/null +++ b/make-env.nix @@ -0,0 +1,45 @@ +{ + kubenix, + kubelib, +}: rec { + mkEnv = { + pkgs, + lib ? pkgs.lib, + modules ? [], + extraSpecialArgs ? {}, + charts ? {}, + libOverlay ? null, + }: + import ./modules { + inherit pkgs lib extraSpecialArgs kubenix kubelib libOverlay; + modules = + modules + ++ [ + { + nixidy.charts = charts; + } + ]; + }; + + mkEnvs = { + pkgs, + lib ? pkgs.lib, + modules ? [], + extraSpecialArgs ? {}, + envs ? {}, + charts ? {}, + libOverlay ? null, + }: + lib.mapAttrs ( + env: conf: + mkEnv { + inherit pkgs lib charts libOverlay; + extraSpecialArgs = extraSpecialArgs // (conf.extraSpecialArgs or {}); + modules = + [{nixidy.target.rootPath = lib.mkDefault "./manifests/${env}";}] + ++ modules + ++ (conf.modules or []); + } + ) + envs; +} diff --git a/nixidy/nixidy b/nixidy/nixidy index 9f54465..127327d 100644 --- a/nixidy/nixidy +++ b/nixidy/nixidy @@ -6,11 +6,11 @@ PATH=@DEP_PATH@${PATH:+:}$PATH set -euo pipefail function setFlakeParam() { - local flake="${FLAKE_PARAM%#*}" + local flake="${ENV_PARAM%#*}" - case $FLAKE_PARAM in + case $ENV_PARAM in *#*) - local env="${FLAKE_PARAM#*#}" + local env="${ENV_PARAM#*#}" ;; *) local env="" @@ -19,9 +19,34 @@ function setFlakeParam() { export FLAKE_ROOT="$flake" export FLAKE_ENV="$env" + export NIX_SYSTEM=$(nix eval --expr builtins.currentSystem --raw --impure) } function doInfo() { + if [[ "$USE_FLAKE" == true ]]; then + doInfoFlake + else + doInfoAttr + fi +} + +function doInfoAttr() { + if [[ -z $ENV_PARAM ]]; then + doHelp + exit 1 + fi + + local info=$(nix-instantiate --eval --strict --json "$FILE_PARAM" -A "$ENV_PARAM.meta") + + if [[ "$INFO_JSON" == "true" ]]; then + echo $info + else + echo "Repository: $(echo "$info" | jq -r .repository)" + echo "Branch: $(echo "$info" | jq -r .branch)" + fi +} + +function doInfoFlake() { setFlakeParam if [[ -z "$FLAKE_ENV" ]]; then @@ -40,6 +65,23 @@ function doInfo() { } function doBuild() { + if [[ "$USE_FLAKE" == true ]]; then + doBuildFlake + else + doBuildAttr + fi +} + +function doBuildAttr() { + if [[ -z $ENV_PARAM ]]; then + doHelp + exit 1 + fi + + nix-build "$FILE_PARAM" -A "$ENV_PARAM.environmentPackage" "${BUILD_PARAMS[@]}" +} + +function doBuildFlake() { setFlakeParam if [[ -z "$FLAKE_ENV" ]]; then @@ -51,6 +93,26 @@ function doBuild() { } function doSwitch() { + if [[ "$USE_FLAKE" == true ]]; then + doSwitchFlake + else + doSwitchAttr + fi +} + +function doSwitchAttr() { + if [[ -z $ENV_PARAM ]]; then + doHelp + exit 1 + fi + + # TODO: set link path + ENVIRON=$(nix-build "$FILE_PARAM" -A "$ENV_PARAM.activationPackage") + + "result/activate" +} + +function doSwitchFlake() { setFlakeParam if [[ -z "$FLAKE_ENV" ]]; then @@ -109,7 +171,9 @@ function doHelp() { } COMMAND="" -FLAKE_PARAM="" +USE_FLAKE=true +ENV_PARAM="" +FILE_PARAM="" BUILD_PARAMS=() INFO_JSON="false" @@ -134,12 +198,16 @@ while [[ $# -gt 0 ]]; do --json) INFO_JSON="true" ;; + -f|--file) + FILE_PARAM="$1" + USE_FLAKE=false + ;; -h|--help) doHelp exit 0 ;; *) - FLAKE_PARAM="$opt" + ENV_PARAM="$opt" ;; esac done @@ -149,12 +217,6 @@ if [[ -z $COMMAND ]]; then exit 1 fi -if [[ -z $FLAKE_PARAM ]]; then - FLAKE_PARAM=".#" -fi - -NIX_SYSTEM=$(nix eval --expr builtins.currentSystem --raw --impure) - case $COMMAND in info) doInfo From 8f35489d44023c154d0aac566ff257448eee718d Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Thu, 31 Oct 2024 17:30:55 +0100 Subject: [PATCH 10/31] Update CLI and docs to reflect flake-less support --- .github/workflows/cli-shellcheck.yaml | 30 +++++ .github/workflows/static-lint.yaml | 2 - default.nix | 38 ++++-- docs/default.nix | 27 ++-- docs/docs.nix | 1 + docs/user_guide/getting_started.md | 181 +++++++++++++++++++------- docs/user_guide/using_nixhelm.md | 113 ++++++++++------ flake.nix | 20 +++ modules/build.nix | 2 +- nixidy/nixidy | 85 ++++++++---- 10 files changed, 369 insertions(+), 130 deletions(-) create mode 100644 .github/workflows/cli-shellcheck.yaml diff --git a/.github/workflows/cli-shellcheck.yaml b/.github/workflows/cli-shellcheck.yaml new file mode 100644 index 0000000..d3a76dd --- /dev/null +++ b/.github/workflows/cli-shellcheck.yaml @@ -0,0 +1,30 @@ +name: CLI shellcheck test + +on: + push: + branches: + - main + paths: + - nixidy/** + pull_request: + branches: + - main + paths: + - nixidy/** + +jobs: + static-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: cachix/install-nix-action@v20 + with: + extra_nix_config: | + extra-experimental-features = nix-command flakes + + - uses: DeterminateSystems/magic-nix-cache-action@v7 + + - name: Run statix + run: | + nix run .#cliTest diff --git a/.github/workflows/static-lint.yaml b/.github/workflows/static-lint.yaml index e7d8769..e34fb0c 100644 --- a/.github/workflows/static-lint.yaml +++ b/.github/workflows/static-lint.yaml @@ -4,8 +4,6 @@ on: push: branches: - main - paths-ignore: - - manifests/** pull_request: branches: - main diff --git a/default.nix b/default.nix index 13555b2..12a9297 100644 --- a/default.nix +++ b/default.nix @@ -1,6 +1,11 @@ {nixpkgs ? null}: let + # To not having to maintain versions of dependencies in 2 locations + # we here read the flake.lock to parse revisions and hashes + # for a select few dependencies. flakeLock = builtins.fromJSON (builtins.readFile ./flake.lock); + # Helper function to fetch metadata about a locked input. + # Currently only fetches relevant information for github. flakeLockMeta = node: let lock = flakeLock.nodes.${node}.locked; in { @@ -8,10 +13,10 @@ hash = lock.narHash; }; - npkgs = let + # Import nixpkgs from either parameter or the lock file. + pkgs = let meta = flakeLockMeta "nixpkgs"; - - source = + npkgs = if nixpkgs == null then builtins.fetchTarball { @@ -20,22 +25,35 @@ } else nixpkgs; in - import source {}; + import npkgs {}; - importFromFlakeLock = node: let + # Helper function that can fetch input from flake.lock + # by its name. + fetchFromFlakeLock = node: let lock = flakeLockMeta node; in if lock.type == "github" - then npkgs.fetchFromGitHub (removeAttrs lock ["type"]) + then pkgs.fetchFromGitHub (removeAttrs lock ["type"]) else throw "fetcher for type ${lock.type} unsupported"; - kubenix = importFromFlakeLock "kubenix"; - kubelib = importFromFlakeLock "nix-kube-generators"; + # Get kubenix and nix-kube-generators. + kubenix = fetchFromFlakeLock "kubenix"; + kubelib = let + src = fetchFromFlakeLock "nix-kube-generators"; + in { + lib = import "${src}/lib"; + }; + # Import the lib functions present in the flake. lib = import ./make-env.nix {inherit kubenix kubelib;}; in { + # Wrap the lib functions to use the pkgs imported above + # without having the user needing to pass it in. lib = { - mkEnv = args @ {pkgs ? npkgs, ...}: lib.mkEnv (args // {inherit pkgs;}); - mkEnvs = args @ {pkgs ? npkgs, ...}: lib.mkEnvs (args // {inherit pkgs;}); + mkEnv = args: lib.mkEnv ({inherit pkgs;} // args); + mkEnvs = args: lib.mkEnvs ({inherit pkgs;} // args); }; + + # Have the nixidy cli available. + nixidy = pkgs.callPackage ./nixidy/nixidy.nix {}; } diff --git a/docs/default.nix b/docs/default.nix index 4e0aec2..5933c3d 100644 --- a/docs/default.nix +++ b/docs/default.nix @@ -1,7 +1,10 @@ -let +{pkgs ? null}: let # Get some sources from npins. sources = import ./npins; - pkgs = import sources.nixpkgs {}; + npkgs = + if pkgs == null + then import sources.nixpkgs {} + else pkgs; # Some inputs from the root flake need # be available to the docs generation. @@ -12,14 +15,14 @@ let kubenix = let lock = flakeLock.nodes.kubenix.locked; in - pkgs.fetchFromGitHub { + npkgs.fetchFromGitHub { inherit (lock) owner repo rev; hash = lock.narHash; }; kubelib = let lock = flakeLock.nodes.nix-kube-generators.locked; in - pkgs.fetchFromGitHub { + npkgs.fetchFromGitHub { inherit (lock) owner repo rev; hash = lock.narHash; }; @@ -28,17 +31,19 @@ let nuschtos = sources.search; ixx = sources.ixx; ixxPkgs = { - ixx = pkgs.callPackage "${ixx}/ixx/derivation.nix" {}; - fixx = pkgs.callPackage "${ixx}/fixx/derivation.nix" {}; - libixx = pkgs.callPackage "${ixx}/libixx/derivation.nix" {}; + ixx = npkgs.callPackage "${ixx}/ixx/derivation.nix" {}; + fixx = npkgs.callPackage "${ixx}/fixx/derivation.nix" {}; + libixx = npkgs.callPackage "${ixx}/libixx/derivation.nix" {}; }; - nuscht-search = pkgs.callPackage "${nuschtos}/nix/frontend.nix" {}; - mkSearch = (pkgs.callPackage "${nuschtos}/nix/wrapper.nix" {inherit nuscht-search ixxPkgs;}).mkSearch; + nuscht-search = npkgs.callPackage "${nuschtos}/nix/frontend.nix" {}; + mkSearch = (npkgs.callPackage "${nuschtos}/nix/wrapper.nix" {inherit nuscht-search ixxPkgs;}).mkSearch; in # Build docs! import ./docs.nix { - inherit pkgs kubenix mkSearch; + inherit kubenix mkSearch; + pkgs = npkgs; lib = import ../lib { - inherit pkgs kubelib; + inherit kubelib; + pkgs = npkgs; }; } diff --git a/docs/docs.nix b/docs/docs.nix index 3150b55..499b815 100644 --- a/docs/docs.nix +++ b/docs/docs.nix @@ -69,6 +69,7 @@ - pymdownx.highlight - pymdownx.inlinehilite - pymdownx.superfences + - pymdownx.details - pymdownx.tabbed: alternate_style: true diff --git a/docs/user_guide/getting_started.md b/docs/user_guide/getting_started.md index a179908..e18cbe4 100644 --- a/docs/user_guide/getting_started.md +++ b/docs/user_guide/getting_started.md @@ -1,53 +1,144 @@ # Getting Started -Nixidy only supports [Nix Flakes](https://nixos.wiki/wiki/Flakes) so that needs to be enabled. - ## Initialize Repository -First a `flake.nix` needs to be created in the root of the repository. +=== "flakes" -```nix title="flake.nix" -{ - description = "My ArgoCD configuration with nixidy."; - - inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - inputs.flake-utils.url = "github:numtide/flake-utils"; - inputs.nixidy.url = "github:arnarg/nixidy"; - - outputs = { - self, - nixpkgs, - flake-utils, - nixidy, - }: (flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs { - inherit system; - }; - in { - # This declares the available nixidy envs. - nixidyEnvs = nixidy.lib.mkEnvs { - inherit pkgs; - - envs = { - # Currently we only have the one dev env. - dev.modules = [./env/dev.nix]; - }; - }; + First a `flake.nix` needs to be created in the root of the repository. - # Handy to have nixidy cli available in the local - # flake too. - packages.nixidy = nixidy.packages.${system}.default; + ```nix title="flake.nix" + { + description = "My ArgoCD configuration with nixidy."; - # Useful development shell with nixidy in path. - # Run `nix develop` to enter. - devShells.default = pkgs.mkShell { - buildInputs = [nixidy.packages.${system}.default]; - }; - })); -} -``` + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.nixidy.url = "github:arnarg/nixidy"; + + outputs = { + self, + nixpkgs, + flake-utils, + nixidy, + }: (flake-utils.lib.eachDefaultSystem (system: let + pkgs = import nixpkgs { + inherit system; + }; + in { + # This declares the available nixidy envs. + nixidyEnvs = nixidy.lib.mkEnvs { + inherit pkgs; + + envs = { + # Currently we only have the one dev env. + dev.modules = [./env/dev.nix]; + }; + }; + + # Handy to have nixidy cli available in the local + # flake too. + packages.nixidy = nixidy.packages.${system}.default; + + # Useful development shell with nixidy in path. + # Run `nix develop` to enter. + devShells.default = pkgs.mkShell { + buildInputs = [nixidy.packages.${system}.default]; + }; + })); + } + ``` + + !!! info + + In the rest of the guide when running the `nixidy` cli (e.g. `nixidy build`) you can use `nix run .#nixidy -- build` or enter a nix shell with `nix develop` where `nixidy` will be available, with the `flake.nix` example above. + + The flake declares a single nixidy environment called `dev`. It includes a single nix module found at `./env/dev.nix`, so let's create that. + +=== "flake-less" + + ??? tip "Dependency pinning" + + Instead of using nix channels, the recommended way to use nixidy without flakes is to use either [npins](https://github.com/andir/npins) or [niv](https://github.com/nmattia/niv) to lock dependency versions in your repository. -The flake declares a single nixidy environment called `dev`. It includes a single nix module found at `./env/dev.nix`, so let's create that. + === "npins" + First initialize npins: + ```sh + npins init --bare + ``` + + Then add nixidy: + ```sh + npins add github arnarg nixidy --branch main # or --at vx.x.x + ``` + + === "niv" + First initialize niv: + ```sh + niv init --no-nixpkgs + ``` + + Then add nixidy: + ```sh + niv add github arnarg/nixidy --branch main # or --rev vx.x.x + ``` + + First a `default.nix` needs to be created in the root of the repository. + + ```nix title="default.nix" + let + # With npins + sources = import ./npins; + # With niv + # sources = import ./nix/sources.nix; + + # Import nixidy + nixidy = import sources.nixidy {}; + in + nixidy.lib.mkEnvs { + # This declares the available nixidy envs. + envs = { + # Currently we only have the one dev env. + dev.modules = [./env/dev.nix]; + }; + } + ``` + + It's also a good idea to have `shell.nix` file in the root of the repository to have the necessary tools available. + + ```nix title="shell.nix" + let + # With npins + sources = import ./npins; + # With niv + # sources = import ./nix/sources.nix; + + # nixpkgs added with: + # npins: `npins add --name nixpkgs channel nixos-unstable` + # niv: `niv add github nixos/nixpkgs -b nixos-unstable` + nixpkgs = sources.nixpkgs; + pkgs = import nixpkgs {}; + + # Import nixidy + nixidy = import ../nixidy {inherit nixpkgs;}; + in + pkgs.mkShellNoCC { + packages = with pkgs; [ + # Add nixidy cli + nixidy.nixidy + # npins + npins + # or niv + niv + ]; + } + ``` + + !!! info + In the rest of the guide when running the `nixidy` cli (e.g. `nixidy build`) you can run `nix-shell` to enter a nix shell where `nixidy` will be a avilable, with the `shell.nix` example above. + + !!! warning + In the rest of the guide the `nixidy` commands will also use the flakes format (e.g. `nixidy build .#dev`), when using a flake-less setup the `.#` prefix should be removed (e.g. `nixidy build dev`). + + The `default.nix` file declares a single nixidy environment called `dev`. It includes a single nix module found at `./env/dev.nix`, so let's create that. ```nix title="env/dev.nix" { @@ -68,15 +159,15 @@ The flake declares a single nixidy environment called `dev`. It includes a singl } ``` -Now running `nix run .#nixidy -- info .#dev` (or `nixidy info .#dev` if run in nix shell using `nix develop`) you can get the same info we just declared above. This verifies that things are set up correctly so far. +Now running `nixidy info .#dev` you can get the same info we just declared above. This verifies that things are set up correctly so far. ```shell ->> nix run .#nixidy -- info .#dev +>> nixidy info .#dev Repository: https://github.com/arnarg/nixidy-demo.git Branch: main ``` -If we now attempt to build this new environment with `nix run .#nixidy -- build .#dev` we can see that nothing is generated but an empty folder called `apps`. +If we now attempt to build this new environment with `nixidy build .#dev` we can see that nothing is generated but an empty folder called `apps`. ```shell >> tree result diff --git a/docs/user_guide/using_nixhelm.md b/docs/user_guide/using_nixhelm.md index b660083..36847f0 100644 --- a/docs/user_guide/using_nixhelm.md +++ b/docs/user_guide/using_nixhelm.md @@ -2,53 +2,92 @@ [nixhelm](https://github.com/farcaller/nixhelm) is a collection of Helm Charts that can be used with [nix-kube-generators](https://github.com/farcaller/nixhelm) and as a result also nixidy. The charts are automatically updated to the most recent version by CI regularly. -To use with nixidy, pass the nixhelm derivation attribute set to nixidy's `mkEnv` builder like so. +=== "flakes" + To use with nixidy, pass the nixhelm derivation attribute set to nixidy's `mkEnv` builder like so. -```nix title="flake.nix" -{ - description = "My ArgoCD configuration with nixidy."; - - inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - inputs.flake-utils.url = "github:numtide/flake-utils"; - - inputs.nixidy = { - url = "github:arnarg/nixidy"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + ```nix title="flake.nix" + { + description = "My ArgoCD configuration with nixidy."; - inputs.nixhelm = { - url = "github:farcaller/nixhelm"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; - outputs = { - self, - nixpkgs, - flake-utils, - nixidy, - nixhelm, - }: (flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs { - inherit system; - }; - in { - nixidyEnvs.dev = nixidy.lib.mkEnv { - inherit pkgs; + inputs.nixidy = { + url = "github:arnarg/nixidy"; + inputs.nixpkgs.follows = "nixpkgs"; + }; - # Pass nixhelm to all nixidy modules. - charts = nixhelm.chartsDerivations.${system}; + inputs.nixhelm = { + url = "github:farcaller/nixhelm"; + inputs.nixpkgs.follows = "nixpkgs"; + }; - modules = [./env/dev.nix]; - }; - })); -} -``` + outputs = { + self, + nixpkgs, + flake-utils, + nixidy, + nixhelm, + }: (flake-utils.lib.eachDefaultSystem (system: let + pkgs = import nixpkgs { + inherit system; + }; + in { + nixidyEnvs.dev = nixidy.lib.mkEnv { + inherit pkgs; + + # Pass nixhelm to all nixidy modules. + charts = nixhelm.chartsDerivations.${system}; + + modules = [./env/dev.nix]; + }; + })); + } + ``` + +=== "flake-less" + To use with nixidy, pass the nixhelm `charts/` directory to nixidy in a module like so: + + ```nix title="default.nix" + let + # With npins + sources = import ./npins; + # With niv + # sources = import ./nix/sources.nix; + + # nixhelm added with: + # npins: `npins add github farcaller nixhelm --branch master` + # niv: `niv add github farcaller/nixhelm --branch master` + nixhelm = sources.nixhelm; + + # Import nixidy + nixidy = import sources.nixidy {}; + in + nixidy.lib.mkEnvs { + # These modules get passed to every env. + modules = [ + { + # nixhelm is a flake so we can't just import it + # like we do in flakes (as an input). + # Thankfully the directory structure in nixhelm + # is compatible with the one expected by + # `nixidy.chartsDir`. + nixidy.chartsDir = "${nixhelm}/charts"; + } + ]; + + # This declares the available nixidy envs. + envs = { + # Currently we only have the one dev env. + dev.modules = [./env/dev.nix]; + }; + } + ``` And then the argument `charts` will be passed to every module in nixidy. ```nix title="./env/dev.nix" { - lib, charts, ... }: { diff --git a/flake.nix b/flake.nix index 3dcdafe..8b6ce16 100644 --- a/flake.nix +++ b/flake.nix @@ -133,6 +133,26 @@ type = "app"; program = self.moduleTests.${system}.reportScript.outPath; }; + + # Run shellcheck on nixidy cli + cliTest = { + type = "app"; + program = + (pkgs.writeShellScript "cli-shellcheck-test" '' + ${pkgs.shellcheck}/bin/shellcheck ${self.packages.${system}.default}/bin/nixidy + '') + .outPath; + }; + + # Serve docs + docsServe = { + type = "app"; + program = + (pkgs.writeShellScript "serve-docs" '' + ${pkgs.python3}/bin/python -m http.server -d ${(import ./docs {inherit pkgs;}).html} 8080 + '') + .outPath; + }; }; })); } diff --git a/modules/build.nix b/modules/build.nix index d57f279..6f4a4df 100644 --- a/modules/build.nix +++ b/modules/build.nix @@ -128,7 +128,7 @@ in { # We need to check if there is a difference between # the newly built environment and the destination - # excluding `.revision` because that will most likely + # excluding ".revision" because that will most likely # always change when going through CI, avoiding infinite # loop. if ! ${pkgs.diffutils}/bin/diff -q -r --exclude .revision "${config.build.environmentPackage}" "\$dest" &>/dev/null; then diff --git a/nixidy/nixidy b/nixidy/nixidy index 127327d..8d1d2ac 100644 --- a/nixidy/nixidy +++ b/nixidy/nixidy @@ -17,9 +17,13 @@ function setFlakeParam() { ;; esac - export FLAKE_ROOT="$flake" - export FLAKE_ENV="$env" - export NIX_SYSTEM=$(nix eval --expr builtins.currentSystem --raw --impure) + FLAKE_ROOT="$flake" + FLAKE_ENV="$env" + NIX_SYSTEM=$(nix eval --expr builtins.currentSystem --raw --impure) + + export FLAKE_ROOT + export FLAKE_ENV + export NIX_SYSTEM } function doInfo() { @@ -36,10 +40,11 @@ function doInfoAttr() { exit 1 fi - local info=$(nix-instantiate --eval --strict --json "$FILE_PARAM" -A "$ENV_PARAM.meta") + local info + info=$(nix-instantiate --eval --strict --json "$FILE_PARAM" -A "$ENV_PARAM.meta") if [[ "$INFO_JSON" == "true" ]]; then - echo $info + echo "$info" else echo "Repository: $(echo "$info" | jq -r .repository)" echo "Branch: $(echo "$info" | jq -r .branch)" @@ -47,17 +52,16 @@ function doInfoAttr() { } function doInfoFlake() { - setFlakeParam - if [[ -z "$FLAKE_ENV" ]]; then doHelp exit 1 fi - local info=$(nix eval "${FLAKE_ROOT}#nixidyEnvs.${NIX_SYSTEM}.${FLAKE_ENV}.meta" --json) + local info + info=$(nix eval "${FLAKE_ROOT}#nixidyEnvs.${NIX_SYSTEM}.${FLAKE_ENV}.meta" --json) if [[ "$INFO_JSON" == "true" ]]; then - echo $info + echo "$info" else echo "Repository: $(echo "$info" | jq -r .repository)" echo "Branch: $(echo "$info" | jq -r .branch)" @@ -82,8 +86,6 @@ function doBuildAttr() { } function doBuildFlake() { - setFlakeParam - if [[ -z "$FLAKE_ENV" ]]; then doHelp exit 1 @@ -106,15 +108,12 @@ function doSwitchAttr() { exit 1 fi - # TODO: set link path - ENVIRON=$(nix-build "$FILE_PARAM" -A "$ENV_PARAM.activationPackage") + ENVIRON=$(nix-build "$FILE_PARAM" -A "$ENV_PARAM.activationPackage" --no-link) - "result/activate" + "${ENVIRON}/activate" } function doSwitchFlake() { - setFlakeParam - if [[ -z "$FLAKE_ENV" ]]; then doHelp exit 1 @@ -126,8 +125,28 @@ function doSwitchFlake() { } function doBootstrap() { - setFlakeParam + if [[ "$USE_FLAKE" == true ]]; then + doBootstrapFlake + else + doBootstrapAttr + fi +} +function doBootstrapAttr() { + if [[ -z $ENV_PARAM ]]; then + doHelp + exit 1 + fi + + BOOTSTRAP=$(nix-build "$FILE_PARAM" -A "$ENV_PARAM.bootstrapPackage" --no-link) + + for manifest in "$BOOTSTRAP"/*.yaml; do + echo "---" + cat "$manifest" + done +} + +function doBootstrapFlake() { if [[ -z "$FLAKE_ENV" ]]; then doHelp exit 1 @@ -135,9 +154,9 @@ function doBootstrap() { BOOTSTRAP=$(nix build "${FLAKE_ROOT}#nixidyEnvs.${NIX_SYSTEM}.${FLAKE_ENV}.bootstrapPackage" --no-link --print-out-paths) - for manifest in "$BOOTSTRAP/*.yaml"; do + for manifest in "$BOOTSTRAP"/*.yaml; do echo "---" - cat $manifest + cat "$manifest" done } @@ -150,23 +169,34 @@ function doHelp() { echo " --out-link PATH Create a custom result symlink (only used in build)." echo " --print-out-paths Print the resulting output paths (only used in build)." echo " --json Output info in JSON format (only used in info)." + echo " -f, --file PATH Specify path to entrypoint nix file (only flake-less)." echo " -h Print this help" echo + echo "ENV parameter" + echo + echo " All sub-commands take an \`ENV\` parameter, this parameter is used to" + echo " determine if flakes or flake-less nix should be used and which environment" + echo " should be built." + echo + echo " Example:" + echo " - \`.#prod\`: Uses a flake in the local directory." + echo " - \`prod\`: Does not use flake but builds the \`prod\` environment in" + echo " \`default.nix\` by default (can be overridden with --file)." + echo echo "Commands" echo echo " help Print this help." echo - echo " info FLAKE_URI Get info about environment." + echo " info ENV Get info about environment." echo " Example: .#prod" echo - echo " build FLAKE_URI Build nixidy environment from flake URI." + echo " build ENV Build nixidy environment from flake URI." echo " Example: .#prod" echo - echo " switch FLAKE_URI Build and switch to nixidy environment from flake URI." + echo " switch ENV Build and switch to nixidy environment from flake URI." echo " Example: .#prod" echo - echo " bootstrap FLAKE_URI" - echo " Output a manifest to bootstrap appOfApps." + echo " bootstrap ENV Output a manifest to bootstrap appOfApps." echo " Example: .#prod" } @@ -217,6 +247,13 @@ if [[ -z $COMMAND ]]; then exit 1 fi +# Detect if we should use a flake or flake-less approach +if [[ $ENV_PARAM =~ ^[a-zA-Z0-9\:\/\.]+#[a-zA-Z0-9\.]*$ ]]; then + setFlakeParam +else + USE_FLAKE=false +fi + case $COMMAND in info) doInfo From c23f0df48ed3138f06ac46aa032965c73ce73f6e Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Thu, 31 Oct 2024 18:50:12 +0100 Subject: [PATCH 11/31] Expose the fromCRD generator in default.nix --- default.nix | 3 + docs/user_guide/getting_started.md | 2 +- docs/user_guide/typed_resources.md | 120 +++++++++++++++++++---------- 3 files changed, 83 insertions(+), 42 deletions(-) diff --git a/default.nix b/default.nix index 12a9297..320d835 100644 --- a/default.nix +++ b/default.nix @@ -56,4 +56,7 @@ in { # Have the nixidy cli available. nixidy = pkgs.callPackage ./nixidy/nixidy.nix {}; + + # Have fromCRD generator available. + generators.fromCRD = (import ./pkgs/generators {inherit pkgs;}).fromCRD; } diff --git a/docs/user_guide/getting_started.md b/docs/user_guide/getting_started.md index e18cbe4..a6c32e7 100644 --- a/docs/user_guide/getting_started.md +++ b/docs/user_guide/getting_started.md @@ -118,7 +118,7 @@ pkgs = import nixpkgs {}; # Import nixidy - nixidy = import ../nixidy {inherit nixpkgs;}; + nixidy = import sources.nixidy {inherit nixpkgs;}; in pkgs.mkShellNoCC { packages = with pkgs; [ diff --git a/docs/user_guide/typed_resources.md b/docs/user_guide/typed_resources.md index d1c54db..1ab3ee1 100644 --- a/docs/user_guide/typed_resources.md +++ b/docs/user_guide/typed_resources.md @@ -15,50 +15,88 @@ The lack of availability of typed resource options only hinders the ability to d Thankfully a code generator for generating resource options from CRDs is provided by nixidy (this is based heavily on kubenix's code generator). -As an example, to generate resource options for Cilium's `CiliumNetworkPolicy` and `CiliumClusterwideNetworkPolicy` the following can be defined in `flake.nix`. +=== "flakes" + As an example, to generate resource options for Cilium's `CiliumNetworkPolicy` and `CiliumClusterwideNetworkPolicy` the following can be defined in `flake.nix`. -```nix title="flake.nix" -{ - description = "My ArgoCD configuration with nixidy."; - - inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - inputs.flake-utils.url = "github:numtide/flake-utils"; - - inputs.nixidy = { - url = "github:arnarg/nixidy"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - outputs = { - self, - nixpkgs, - flake-utils, - nixidy, - }: (flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs { - inherit system; - }; - in { - packages = { - generators.cilium = nixidy.packages.${system}.generators.fromCRD { - name = "cilium"; - src = pkgs.fetchFromGitHub { - owner = "cilium"; - repo = "cilium"; - rev = "v1.15.6"; - hash = "sha256-oC6pjtiS8HvqzzRQsE+2bm6JP7Y3cbupXxCKSvP6/kU="; - }; - crds = [ - "pkg/k8s/apis/cilium.io/client/crds/v2/ciliumnetworkpolicies.yaml" - "pkg/k8s/apis/cilium.io/client/crds/v2/ciliumclusterwidenetworkpolicies.yaml" - ]; + ```nix title="flake.nix" + { + description = "My ArgoCD configuration with nixidy."; + + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + + inputs.nixidy = { + url = "github:arnarg/nixidy"; + inputs.nixpkgs.follows = "nixpkgs"; }; - }; - })); -} -``` -Then running `nix build .#generators.cilium` will produce a nix file that can be copied into place in your repository. After that the generated file has to be added to `nixidy.resourceImports` in your nixidy modules. + outputs = { + self, + nixpkgs, + flake-utils, + nixidy, + }: (flake-utils.lib.eachDefaultSystem (system: let + pkgs = import nixpkgs { + inherit system; + }; + in { + packages = { + generators.cilium = nixidy.packages.${system}.generators.fromCRD { + name = "cilium"; + src = pkgs.fetchFromGitHub { + owner = "cilium"; + repo = "cilium"; + rev = "v1.15.6"; + hash = "sha256-oC6pjtiS8HvqzzRQsE+2bm6JP7Y3cbupXxCKSvP6/kU="; + }; + crds = [ + "pkg/k8s/apis/cilium.io/client/crds/v2/ciliumnetworkpolicies.yaml" + "pkg/k8s/apis/cilium.io/client/crds/v2/ciliumclusterwidenetworkpolicies.yaml" + ]; + }; + }; + })); + } + ``` + + Then running `nix build .#generators.cilium` will produce a nix file that can be copied into place in your repository. After that the generated file has to be added to `nixidy.resourceImports` in your nixidy modules. + +=== "flake-less" + As an example, to generate resource options for Cilium's `CiliumNetworkPolicy` and `CiliumClusterwideNetworkPolicy` the following can be defined in `generate.nix`. + + ```nix title="generate.nix" + let + # With npins + sources = import ./npins; + # With niv + # sources = import ./nix/sources.nix; + + # nixpkgs added with: + # npins: `npins add --name nixpkgs channel nixos-unstable` + # niv: `niv add github nixos/nixpkgs -b nixos-unstable` + nixpkgs = sources.nixpkgs; + pkgs = import nixpkgs {}; + + # Import nixidy + nixidy = import sources.nixidy {inherit nixpkgs;}; + in + { + cilium = nixidy.generators.fromCRD { + name = "cilium"; + src = pkgs.fetchFromGitHub { + owner = "cilium"; + repo = "cilium"; + rev = "v1.15.6"; + hash = "sha256-oC6pjtiS8HvqzzRQsE+2bm6JP7Y3cbupXxCKSvP6/kU="; + }; + crds = [ + "pkg/k8s/apis/cilium.io/client/crds/v2/ciliumnetworkpolicies.yaml" + "pkg/k8s/apis/cilium.io/client/crds/v2/ciliumclusterwidenetworkpolicies.yaml" + ]; + }; + } + ``` + ```nix title="env/dev.nix" { From 4f1d561b5c9420583d2db3398e2d3d652a548ea0 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Thu, 31 Oct 2024 18:53:29 +0100 Subject: [PATCH 12/31] Add missing build step for fromCRD generator non-flake documentation --- docs/user_guide/typed_resources.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/user_guide/typed_resources.md b/docs/user_guide/typed_resources.md index 1ab3ee1..19a03cb 100644 --- a/docs/user_guide/typed_resources.md +++ b/docs/user_guide/typed_resources.md @@ -97,6 +97,7 @@ Thankfully a code generator for generating resource options from CRDs is provide } ``` + Then running `nix-build generate.nix -A cilium` will produce a nix file that can be copied into place in your repository. After that the generated file has to be added to `nixidy.resourceImports` in your nixidy modules. ```nix title="env/dev.nix" { From c3f95f37d21ed081f52e1a9f8ac9c64745b2e803 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Thu, 31 Oct 2024 20:15:56 +0100 Subject: [PATCH 13/31] Add explanation in example github actions about non-flakes usage --- docs/user_guide/github_actions.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/user_guide/github_actions.md b/docs/user_guide/github_actions.md index ea5b6b0..e4af495 100644 --- a/docs/user_guide/github_actions.md +++ b/docs/user_guide/github_actions.md @@ -26,6 +26,10 @@ jobs: - uses: cachix/install-nix-action@v20 with: + # The `arnarg/nixidy/actions/build` action depends + # on nix flakes to run the actual nixidy cli. + # Therefore the following setting is required even + # when using nixidy with non-flakes. extra_nix_config: | extra-experimental-features = nix-command flakes @@ -35,6 +39,8 @@ jobs: id: build with: environment: .#dev + # Without flakes: + # environment: dev - shell: bash run: | @@ -82,6 +88,10 @@ jobs: - uses: cachix/install-nix-action@v20 with: + # The `arnarg/nixidy/actions/switch` action depends + # on nix flakes to run the actual nixidy cli. + # Therefore the following setting is required even + # when using nixidy with non-flakes. extra_nix_config: | extra-experimental-features = nix-command flakes @@ -90,6 +100,8 @@ jobs: - uses: arnarg/nixidy/actions/switch@main with: environment: .#dev + # Without flakes: + # environment: dev - uses: EndBug/add-and-commit@v9 id: commit From d28f45aea4d7b93928f1ea94f22a03a3f6dc25f6 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Thu, 31 Oct 2024 21:19:45 +0100 Subject: [PATCH 14/31] Move mkChartAttrs to lib --- docs/user_guide/using_nixhelm.md | 8 ++--- lib/helm.nix | 56 ++++++++++++++++++++++++++++++++ modules/nixidy.nix | 25 +------------- 3 files changed, 61 insertions(+), 28 deletions(-) diff --git a/docs/user_guide/using_nixhelm.md b/docs/user_guide/using_nixhelm.md index 36847f0..db766bc 100644 --- a/docs/user_guide/using_nixhelm.md +++ b/docs/user_guide/using_nixhelm.md @@ -66,14 +66,14 @@ nixidy.lib.mkEnvs { # These modules get passed to every env. modules = [ - { + ({lib, ...}: { # nixhelm is a flake so we can't just import it # like we do in flakes (as an input). # Thankfully the directory structure in nixhelm # is compatible with the one expected by - # `nixidy.chartsDir`. - nixidy.chartsDir = "${nixhelm}/charts"; - } + # `lib.helm.mkChartAttrs`. + nixidy.charts = lib.helm.mkChartAttrs "${nixhelm}/charts"; + }) ]; # This declares the available nixidy envs. diff --git a/lib/helm.nix b/lib/helm.nix index 19a84e7..9fc88fa 100644 --- a/lib/helm.nix +++ b/lib/helm.nix @@ -47,4 +47,60 @@ # Derivation containing helm chart. Usually output of [lib.helm.downloadHelmChart](#libhelmdownloadhelmchart). chart: lib.head (klib.fromYAML (builtins.readFile "${chart}/values.yaml")); + + /* + Walk a directory tree and import all `default.nix` to download helm charts. + + The `default.nix` needs to have the following format: + + ```nix + # ./charts/kubernetes-csi/csi-driver-nfs/default.nix + { + repo = "https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts"; + chart = "csi-driver-nfs"; + version = "4.7.0"; + chartHash = "sha256-EU2qaZglUU3vxa41l1p/2yBscksIhYMr8kSgH8t0vL8="; + } + ``` + + Type: + mkChartAttrs :: Path -> AttrSet + + Example: + mkChartAttrs ./charts + => { + kubernetes-csi = { + csi-driver-nfs = lib.helm.downloadHelmChart { + repo = "https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts"; + chart = "csi-driver-nfs"; + version = "4.7.0"; + chartHash = "sha256-EU2qaZglUU3vxa41l1p/2yBscksIhYMr8kSgH8t0vL8="; + }; + }; + } + */ + mkChartAttrs = + # Path to a directory containing the correct directory structure described above. + dir: let + walkDir = prefix: dir: let + contents = builtins.readDir "${prefix}/${dir}"; + in + if contents ? "default.nix" && contents."default.nix" == "regular" + then lib.helm.downloadHelmChart (import "${prefix}/${dir}") + else + builtins.listToAttrs (map ( + d: { + inherit (d) name; + value = walkDir "${prefix}/${dir}" d.name; + } + ) (lib.filter (c: c.value == "directory") (lib.attrsToList contents))); + + contents = builtins.readDir dir; + in + builtins.listToAttrs (map ( + d: { + inherit (d) name; + value = walkDir dir d.name; + } + ) (lib.filter (c: c.value == "directory") (lib.attrsToList contents))); } diff --git a/modules/nixidy.nix b/modules/nixidy.nix index b74c472..2feb8bd 100644 --- a/modules/nixidy.nix +++ b/modules/nixidy.nix @@ -19,29 +19,6 @@ }; }; }; - - walkDir = prefix: dir: let - contents = builtins.readDir "${prefix}/${dir}"; - in - if contents ? "default.nix" && contents."default.nix" == "regular" - then lib.helm.downloadHelmChart (import "${prefix}/${dir}") - else - builtins.listToAttrs (map ( - d: { - inherit (d) name; - value = walkDir "${prefix}/${dir}" d.name; - } - ) (lib.filter (c: c.value == "directory") (lib.attrsToList contents))); - - mkChartAttrs = dir: let - contents = builtins.readDir dir; - in - builtins.listToAttrs (map ( - d: { - inherit (d) name; - value = walkDir dir d.name; - } - ) (lib.filter (c: c.value == "directory") (lib.attrsToList contents))); in { options.nixidy = with lib; { target = { @@ -283,7 +260,7 @@ in { _module.args.charts = config.nixidy.charts; nixidy = { - charts = lib.optionalAttrs (cfg.chartsDir != null) (mkChartAttrs cfg.chartsDir); + charts = lib.optionalAttrs (cfg.chartsDir != null) (lib.helm.mkChartAttrs cfg.chartsDir); extraFiles = lib.optionalAttrs (cfg.build.revision != null) { ".revision".text = cfg.build.revision; From 84642d0bdb3c17513ff1ba498756a90e1f6d16d6 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Sun, 3 Nov 2024 12:45:09 +0100 Subject: [PATCH 15/31] Document possible git strategies Closes #24 --- docs/docs.nix | 1 + docs/images/env-branches.jpg | Bin 0 -> 72360 bytes docs/images/env-repos.jpg | Bin 0 -> 106973 bytes docs/images/monorepo.jpg | Bin 0 -> 55962 bytes docs/user_guide/git_strategies.md | 127 ++++++++++++++++++++++++++++++ 5 files changed, 128 insertions(+) create mode 100644 docs/images/env-branches.jpg create mode 100644 docs/images/env-repos.jpg create mode 100644 docs/images/monorepo.jpg create mode 100644 docs/user_guide/git_strategies.md diff --git a/docs/docs.nix b/docs/docs.nix index 499b815..23232d6 100644 --- a/docs/docs.nix +++ b/docs/docs.nix @@ -79,6 +79,7 @@ - 'Getting Started': user_guide/getting_started.md - 'Using Helm Charts': user_guide/helm_charts.md - 'Typed Resource Options': user_guide/typed_resources.md + - 'Git Strategies': user_guide/git_strategies.md - 'GitHub Actions': user_guide/github_actions.md - 'Transformers': user_guide/transformers.md - 'Using nixhelm': user_guide/using_nixhelm.md diff --git a/docs/images/env-branches.jpg b/docs/images/env-branches.jpg new file mode 100644 index 0000000000000000000000000000000000000000..deae7ff89f0b5d42270839be91dde3870a59ec8d GIT binary patch literal 72360 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
p;D9|n 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 A&Hw-a literal 0 HcmV?d00001 diff --git a/docs/images/monorepo.jpg b/docs/images/monorepo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76e281875bdf37119a83d28d4a0b6ad178801b72 GIT binary patch literal 55962 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

@u;tlWvf35Vx`laruk1{btK?l41;)RM-1rI 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

g`G&vt1{Q~|84JmG=6ljMOMUlC%`v+r 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 and then followed by `git diff` to see what has actually changed in the generated manifests. + +This strategy does require more complicated access control mechanism such as [CODEOWNER file](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) to make sure not everyone can change the generated manifests. + +### Setup + +In a module that's common to all the environment the target repository and branch needs to be set. + +```nix title="modules/default.nix" +{ + # Set the target repository for the rendered manifests + # and applications. + # This should be replaced with yours. + nixidy.target.repository = "https://github.com/arnarg/nixidy-demo.git"; + + # Set the target branch the rendered manifests for every + # environment should be pushed to in the repository defined + # above. + nixidy.target.branch = "main"; +} +``` + +And in a module that's specific to each environment the target root path needs to be set. + +```nix title="env/dev.nix" +{ + # Set the target sub-directory to copy the generated + # manifests to when running `nixidy switch .#dev`. + nixidy.target.rootPath = "./manifests/dev"; +} +``` + +!!! tip + When using `mkEnvs` from nixidy, each environment's `rootPath` is automatically set to `./manifests/${dev}`. + +## Environment branches + +With this strategy generated manifests are committed and pushed to separate environment specific branches. As these branches will not share any git history with the `main` branch or other environment branches (this is not git flow) they need to be created as orphan branches. + +![Diagram showing the environment branches strategy.](../images/env-branches.jpg) + +The biggest gain from this strategy is that it's simpler to implement access control compared to the monorepo, the branches can be setup with basic branch protection rules. + +### Setup + +In a module that's common to all the environments the target repository needs to be set. Unless you want the root path to differ between the environment's that can also be set here. + +```nix title="modules/default.nix" +{ + # Set the target repository for the rendered manifests + # and applications. + # This should be replaced with yours. + nixidy.target.repository = "https://github.com/arnarg/nixidy-demo.git"; + + # The generated manifests should be at the root of + # each environment branch. + nixidy.target.rootPath = "./"; +} +``` + +And in a module that's specific to each environment the target branch needs to be set. + +```nix title="env/dev.nix" +{ + # Set the target branch the rendered manifests for _this_ + # environment should be pushed to in the repository defined + # above. + nixidy.target.branch = "env/dev"; +} +``` + +!!! info + The environment branches need to be created manually and they _need_ to be created as orphan branches. + + ```sh + git checkout --orphan env/dev + echo "# env/dev" > README.md + git add README.md + git commit -m "Initial commmit" + git push -u origin env/dev + ``` + +## Environment repositories + +With this strategy generated manifests are committed and pushed to separate repositories entirely. + +![Diagram showing the environment repositories strategy.](../images/env-repos.jpg) + +The biggest gain from this strategy is that it's possible to go even further with access control from the environment branches. + +### Setup + +In a module that's common to all the branches only the root path should be set, unless that should differ between the environments. + +```nix title="modules/default.nix" +{ + # The generated manifests should be at the root of + # each environment repository. + nixidy.target.rootPath = "./"; +} +``` + +And in a module that's specific to each environment the target repository and target branch needs to be set. + +```nix title="env/dev.nix" +{ + # Set the target repository for the rendered manifests + # and applications. + # This should be replaced with yours. + nixidy.target.repository = "https://github.com/arnarg/nixidy-demo-dev.git"; + + # Set the target branch the rendered manifests for _this_ + # environment should be pushed to in the repository defined + # above. + nixidy.target.branch = "main"; +} +``` From 149d263c568893e8466fbd3c699506fa6d11f78d Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Sun, 3 Nov 2024 12:52:11 +0100 Subject: [PATCH 16/31] Extend nixidy cli's flake filter --- nixidy/nixidy | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixidy/nixidy b/nixidy/nixidy index 8d1d2ac..b62bae0 100644 --- a/nixidy/nixidy +++ b/nixidy/nixidy @@ -248,7 +248,8 @@ if [[ -z $COMMAND ]]; then fi # Detect if we should use a flake or flake-less approach -if [[ $ENV_PARAM =~ ^[a-zA-Z0-9\:\/\.]+#[a-zA-Z0-9\.]*$ ]]; then +FLAKE_FILTER='^[a-zA-Z0-9\:\/\.\@\_\-]+#[a-zA-Z0-9\.\@\_\-]*$' +if [[ $ENV_PARAM =~ $FLAKE_FILTER ]]; then setFlakeParam else USE_FLAKE=false From af18c4eea4d161f5a1d87a7e9bb0ae3c8c1b5fd1 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Thu, 7 Nov 2024 20:27:55 +0100 Subject: [PATCH 17/31] Update removeLabels to also filter spec.template.metadata.labels Closes #27 --- lib/kube.nix | 59 +++++++++++++++++----- lib/tests.nix | 100 +++++++++++++++++++++++++++++++++++++ tests/helm/transformer.nix | 4 -- 3 files changed, 146 insertions(+), 17 deletions(-) diff --git a/lib/kube.nix b/lib/kube.nix index 2f28793..b2d8b08 100644 --- a/lib/kube.nix +++ b/lib/kube.nix @@ -92,17 +92,50 @@ # List of labels that should be removed labels: # Kubernetes manifest - manifest: - manifest - // { - metadata = - manifest.metadata - // ( - if manifest.metadata ? labels - then { - labels = removeAttrs manifest.metadata.labels labels; - } - else {} - ); - }; + manifest: let + updateFunc = old: removeAttrs old labels; + + hasLabelPath = p: res: (lib.attrByPath p null res) != null; + + specialTemplateKinds = [ + "Deployment" + "ReplicaSet" + "StatefulSet" + "DaemonSet" + "Job" + ]; + in + lib.attrsets.updateManyAttrsByPath ( + # If metadata.labels is present, it should be filtered + (lib.optional (manifest.metadata ? labels) { + path = ["metadata" "labels"]; + update = updateFunc; + }) + # If it's one of the special kinds with + # spec.template.metadata.labels, that should be filtered + # too + ++ (lib.optional ( + (lib.any (k: manifest.kind == k) specialTemplateKinds) + && (hasLabelPath ["spec" "template" "metadata" "labels"] manifest) + ) { + path = ["spec" "template" "metadata" "labels"]; + update = updateFunc; + }) + # CronJob needs to be filtered differently too + ++ ( + lib.optionals + (manifest.kind == "CronJob") + ( + (lib.optional (hasLabelPath ["spec" "jobTemplate" "metadata" "labels"] manifest) { + path = ["spec" "jobTemplate" "metadata" "labels"]; + update = updateFunc; + }) + ++ (lib.optional (hasLabelPath ["spec" "jobTemplate" "spec" "template" "metadata" "labels"] manifest) { + path = ["spec" "jobTemplate" "spec" "template" "metadata" "labels"]; + update = updateFunc; + }) + ) + ) + ) + manifest; } diff --git a/lib/tests.nix b/lib/tests.nix index 47ad7f2..7ef47d7 100644 --- a/lib/tests.nix +++ b/lib/tests.nix @@ -107,6 +107,106 @@ in { }; }; }; + testNoLabels = { + expr = lib.kube.removeLabels ["helm.sh/chart"] { + apiVersion = "apps/v1"; + kind = "Deployment"; + metadata = { + name = "argocd"; + }; + }; + expected = { + apiVersion = "apps/v1"; + kind = "Deployment"; + metadata = { + name = "argocd"; + }; + }; + }; + testSpecialTemplateLabels = { + expr = lib.kube.removeLabels ["helm.sh/chart"] { + apiVersion = "apps/v1"; + kind = "Deployment"; + metadata = { + name = "test1-chart"; + namespace = "test1"; + labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + "helm.sh/chart" = "chart-0.1.0"; + }; + }; + spec = { + replicas = 1; + selector.matchLabels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/name" = "chart"; + }; + template = { + metadata.labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + "helm.sh/chart" = "chart-0.1.0"; + }; + spec.containers = [ + { + name = "chart"; + image = "nginx:latest"; + ports = [ + { + name = "http"; + containerPort = 80; + protocol = "TCP"; + } + ]; + } + ]; + }; + }; + }; + expected = { + apiVersion = "apps/v1"; + kind = "Deployment"; + metadata = { + name = "test1-chart"; + namespace = "test1"; + labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + }; + }; + spec = { + replicas = 1; + selector.matchLabels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/name" = "chart"; + }; + template = { + metadata.labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + }; + spec.containers = [ + { + name = "chart"; + image = "nginx:latest"; + ports = [ + { + name = "http"; + containerPort = 80; + protocol = "TCP"; + } + ]; + } + ]; + }; + }; + }; + }; }; }; } diff --git a/tests/helm/transformer.nix b/tests/helm/transformer.nix index d4dec37..6c901d9 100644 --- a/tests/helm/transformer.nix +++ b/tests/helm/transformer.nix @@ -52,8 +52,6 @@ in { "app.kubernetes.io/instance" = "test1"; "app.kubernetes.io/managed-by" = "Helm"; "app.kubernetes.io/name" = "chart"; - "app.kubernetes.io/version" = "1.16.0"; - "helm.sh/chart" = "chart-0.1.0"; }; spec.containers = [ { @@ -142,8 +140,6 @@ in { "app.kubernetes.io/instance" = "test1"; "app.kubernetes.io/managed-by" = "Helm"; "app.kubernetes.io/name" = "chart"; - "app.kubernetes.io/version" = "1.16.0"; - "helm.sh/chart" = "chart-0.1.0"; }; spec.containers = [ { From eb94d1a4524ac571b2947550ebe5f6065393cdbd Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Fri, 8 Nov 2024 14:14:58 +0100 Subject: [PATCH 18/31] Fix title in mkChartAttrs documentation --- lib/helm.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/helm.nix b/lib/helm.nix index 9fc88fa..6cece5f 100644 --- a/lib/helm.nix +++ b/lib/helm.nix @@ -53,8 +53,7 @@ The `default.nix` needs to have the following format: - ```nix - # ./charts/kubernetes-csi/csi-driver-nfs/default.nix + ```nix title="./charts/kubernetes-csi/csi-driver-nfs/default.nix" { repo = "https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts"; chart = "csi-driver-nfs"; From 18219e7b3b984a74d90d4626d9bda45cf7016572 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Fri, 8 Nov 2024 14:15:15 +0100 Subject: [PATCH 19/31] Add test for removeLabels with CronJob --- lib/tests.nix | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/lib/tests.nix b/lib/tests.nix index 7ef47d7..5b97c82 100644 --- a/lib/tests.nix +++ b/lib/tests.nix @@ -207,6 +207,97 @@ in { }; }; }; + testCronJobTemplateLabels = { + expr = lib.kube.removeLabels ["helm.sh/chart"] { + apiVersion = "batch/v1"; + kind = "CronJob"; + metadata = { + name = "test1-chart"; + namespace = "test1"; + labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + "helm.sh/chart" = "chart-0.1.0"; + }; + }; + spec = { + schedule = "*/20 * * * *"; + jobTemplate = { + metadata.labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + "helm.sh/chart" = "chart-0.1.0"; + }; + spec.template = { + metadata.labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + "helm.sh/chart" = "chart-0.1.0"; + }; + spec.containers = [ + { + name = "chart"; + image = "nginx:latest"; + ports = [ + { + name = "http"; + containerPort = 80; + protocol = "TCP"; + } + ]; + } + ]; + }; + }; + }; + }; + expected = { + apiVersion = "batch/v1"; + kind = "CronJob"; + metadata = { + name = "test1-chart"; + namespace = "test1"; + labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + }; + }; + spec = { + schedule = "*/20 * * * *"; + jobTemplate = { + metadata.labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + }; + spec.template = { + metadata.labels = { + "app.kubernetes.io/instance" = "test1"; + "app.kubernetes.io/managed-by" = "Helm"; + "app.kubernetes.io/name" = "chart"; + }; + spec.containers = [ + { + name = "chart"; + image = "nginx:latest"; + ports = [ + { + name = "http"; + containerPort = 80; + protocol = "TCP"; + } + ]; + } + ]; + }; + }; + }; + }; + }; }; }; } From 76333f5822807abef83aee8a6d09945897447eaa Mon Sep 17 00:00:00 2001 From: Francesco Zanini Date: Fri, 3 Jan 2025 22:50:28 +0100 Subject: [PATCH 20/31] Handle a specific case of anyOf The `anyOf` handling was not considering a case that's already coded in the kubenix generator, the int-or-string case. For reasons beyond my current knowledge, the CRDs I'm using (Cloudnative-PG) contain a property called `x-kubernetes-int-or-string` and not the expected `int-or-string` in the `format` property inside the `type`. This commit handles this case by patching up the definition so that the generator uses `either int str` instead of blindly picking the first one. --- pkgs/generators/crd2jsonschema.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/generators/crd2jsonschema.py b/pkgs/generators/crd2jsonschema.py index 50db4dc..d142f19 100644 --- a/pkgs/generators/crd2jsonschema.py +++ b/pkgs/generators/crd2jsonschema.py @@ -65,9 +65,13 @@ def flatten_ref(definition, key, root=True): if 'type' in definition and definition['type'] == 'object': if not 'properties' in definition: if 'additionalProperties' in definition: - # The nix generator doesn't support anyOf if 'anyOf' in definition['additionalProperties']: - definition['additionalProperties'] = definition['additionalProperties']['anyOf'][0] + if definition['additionalProperties'].get('x-kubernetes-int-or-string', False): + # Patch the definition based on the custom x-kubernetes-int-or-string + definition['additionalProperties'] = { 'type': 'string', 'format': 'int-or-string' } + else: + # The nix generator doesn't support anyOf + definition['additionalProperties'] = definition['additionalProperties']['anyOf'][0] # If additionalProperties only contains 'x-kubernetes-preserve-unknown-fields' # we can just drop the `additionalProperties` entirely and the generator From 5b9dea231f2eabb4c01b84027d13d6f82b034294 Mon Sep 17 00:00:00 2001 From: "Arnar Gauti Ingason\" (aider)" Date: Mon, 3 Feb 2025 11:07:50 +0100 Subject: [PATCH 21/31] feat: Add support for removing labels from Deployment spec.selector.matchLabels --- lib/kube.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/kube.nix b/lib/kube.nix index b2d8b08..a542bd2 100644 --- a/lib/kube.nix +++ b/lib/kube.nix @@ -121,6 +121,13 @@ path = ["spec" "template" "metadata" "labels"]; update = updateFunc; }) + # Handle Deployment selector matchLabels + ++ (lib.optional ( + (manifest.kind == "Deployment") && (hasLabelPath ["spec" "selector" "matchLabels"] manifest) + ) { + path = ["spec" "selector" "matchLabels"]; + update = updateFunc; + }) # CronJob needs to be filtered differently too ++ ( lib.optionals From 0fffdbc1e06ee1aca2a6a2e68c24836de28049fc Mon Sep 17 00:00:00 2001 From: "Arnar Gauti Ingason\" (aider)" Date: Mon, 3 Feb 2025 11:11:28 +0100 Subject: [PATCH 22/31] test: Add test for removing labels from Deployment spec.selector.matchLabels --- lib/tests.nix | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/lib/tests.nix b/lib/tests.nix index 5b97c82..4269c28 100644 --- a/lib/tests.nix +++ b/lib/tests.nix @@ -298,6 +298,42 @@ in { }; }; }; + testDeploymentMatchLabels = { + expr = lib.kube.removeLabels ["helm.sh/chart"] { + apiVersion = "apps/v1"; + kind = "Deployment"; + metadata = { + name = "test-deployment"; + labels = { + "app.kubernetes.io/name" = "test"; + "helm.sh/chart" = "test-chart"; + }; + }; + spec = { + replicas = 1; + selector.matchLabels = { + "app.kubernetes.io/name" = "test"; + "helm.sh/chart" = "test-chart"; + }; + }; + }; + expected = { + apiVersion = "apps/v1"; + kind = "Deployment"; + metadata = { + name = "test-deployment"; + labels = { + "app.kubernetes.io/name" = "test"; + }; + }; + spec = { + replicas = 1; + selector.matchLabels = { + "app.kubernetes.io/name" = "test"; + }; + }; + }; + }; }; }; } From 9334fa5cfc972acdc624b1f15277ab5d60801f5f Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Mon, 3 Feb 2025 11:48:52 +0100 Subject: [PATCH 23/31] Add aider.chat stuff to gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index db01010..bc19361 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ # nix build result result + +# aider.chat stuff +.aider* +.env From d1de45d614b9ef97c250caecd93516932c66579d Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Thu, 27 Feb 2025 11:07:39 +0100 Subject: [PATCH 24/31] Update Argo CD generated options to v2.14.2 --- modules/generated/argocd.nix | 5042 +++++++++++++++++++++++++++++++++- pkgs/generators/default.nix | 4 +- 2 files changed, 4975 insertions(+), 71 deletions(-) diff --git a/modules/generated/argocd.nix b/modules/generated/argocd.nix index f05ab7b..4d4dc26 100644 --- a/modules/generated/argocd.nix +++ b/modules/generated/argocd.nix @@ -161,11 +161,11 @@ with lib; let "argoproj.io.v1alpha1.AppProject" = { options = { "apiVersion" = mkOption { - 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"; + description = "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"; type = types.nullOr types.str; }; "kind" = mkOption { - 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"; + description = "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"; type = types.nullOr types.str; }; "metadata" = mkOption { @@ -202,6 +202,10 @@ with lib; let description = "Description contains optional project description"; type = types.nullOr types.str; }; + "destinationServiceAccounts" = mkOption { + description = "DestinationServiceAccounts holds information about the service accounts to be impersonated for the application sync operation for each destination."; + type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.AppProjectSpecDestinationServiceAccounts")); + }; "destinations" = mkOption { description = "Destinations contains list of destinations available for deployment"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.AppProjectSpecDestinations" "name" []); @@ -250,6 +254,7 @@ with lib; let "clusterResourceBlacklist" = mkOverride 1002 null; "clusterResourceWhitelist" = mkOverride 1002 null; "description" = mkOverride 1002 null; + "destinationServiceAccounts" = mkOverride 1002 null; "destinations" = mkOverride 1002 null; "namespaceResourceBlacklist" = mkOverride 1002 null; "namespaceResourceWhitelist" = mkOverride 1002 null; @@ -290,6 +295,26 @@ with lib; let config = {}; }; + "argoproj.io.v1alpha1.AppProjectSpecDestinationServiceAccounts" = { + options = { + "defaultServiceAccount" = mkOption { + description = "DefaultServiceAccount to be used for impersonation during the sync operation"; + type = types.str; + }; + "namespace" = mkOption { + description = "Namespace specifies the target namespace for the application's resources."; + type = types.nullOr types.str; + }; + "server" = mkOption { + description = "Server specifies the URL of the target cluster's Kubernetes control plane API."; + type = types.str; + }; + }; + + config = { + "namespace" = mkOverride 1002 null; + }; + }; "argoproj.io.v1alpha1.AppProjectSpecDestinations" = { options = { "name" = mkOption { @@ -297,7 +322,7 @@ with lib; let type = types.nullOr types.str; }; "namespace" = mkOption { - 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"; + description = "Namespace specifies the target namespace for the application's resources.\nThe namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace"; type = types.nullOr types.str; }; "server" = mkOption { @@ -504,11 +529,11 @@ with lib; let "argoproj.io.v1alpha1.Application" = { options = { "apiVersion" = mkOption { - 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"; + description = "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"; type = types.nullOr types.str; }; "kind" = mkOption { - 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"; + description = "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"; type = types.nullOr types.str; }; "metadata" = mkOption { @@ -636,6 +661,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationOperationSync" = { options = { + "autoHealAttemptsCount" = mkOption { + description = "SelfHealAttemptsCount contains the number of auto-heal attempts"; + type = types.nullOr types.int; + }; "dryRun" = mkOption { description = "DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync"; type = types.nullOr types.bool; @@ -654,20 +683,21 @@ with lib; let apply = attrsToList; }; "revision" = mkOption { - 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."; + description = "Revision is the revision (Git) or chart version (Helm) which to sync the application to\nIf omitted, will use the revision specified in app spec."; type = types.nullOr types.str; }; "revisions" = mkOption { - 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."; + description = "Revisions is the list of revision (Git) or chart version (Helm) which to sync each source in sources field for the application to\nIf omitted, will use the revision specified in app spec."; type = types.nullOr (types.listOf types.str); }; "source" = mkOption { - 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"; + description = "Source overrides the source definition set in the application.\nThis is typically set in a Rollback operation and is nil during a Sync operation"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationOperationSyncSource"); }; "sources" = mkOption { - 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"; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationOperationSyncSources")); + description = "Sources overrides the source definition set in the application.\nThis is typically set in a Rollback operation and is nil during a Sync operation"; + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationOperationSyncSources" "name" []); + apply = attrsToList; }; "syncOptions" = mkOption { description = "SyncOptions provide per-sync sync-options, e.g. Validate=false"; @@ -680,6 +710,7 @@ with lib; let }; config = { + "autoHealAttemptsCount" = mkOverride 1002 null; "dryRun" = mkOverride 1002 null; "manifests" = mkOverride 1002 null; "prune" = mkOverride 1002 null; @@ -735,6 +766,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationOperationSyncSourceKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -752,7 +787,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -762,6 +797,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -861,6 +897,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationOperationSyncSourceHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationOperationSyncSourceHelmFileParameters" "name" []); @@ -870,6 +910,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationOperationSyncSourceHelmParameters" "name" []); @@ -887,6 +935,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -906,12 +962,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -959,6 +1020,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationOperationSyncSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -987,6 +1052,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -1019,6 +1088,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -1026,6 +1096,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -1201,6 +1272,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationOperationSyncSourcesKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -1218,7 +1293,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -1228,6 +1303,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -1327,6 +1403,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationOperationSyncSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationOperationSyncSourcesHelmFileParameters" "name" []); @@ -1336,6 +1416,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationOperationSyncSourcesHelmParameters" "name" []); @@ -1353,6 +1441,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -1372,12 +1468,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -1425,6 +1526,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationOperationSyncSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -1453,6 +1558,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -1485,6 +1594,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -1492,6 +1602,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -1669,7 +1780,7 @@ with lib; let "argoproj.io.v1alpha1.ApplicationOperationSyncSyncStrategyApply" = { options = { "force" = mkOption { - 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."; + description = "Force indicates whether or not to supply the --force flag to `kubectl apply`.\nThe --force flag deletes and re-create the resource, when PATCH encounters conflict and has\nretried for 5 times."; type = types.nullOr types.bool; }; }; @@ -1681,7 +1792,7 @@ with lib; let "argoproj.io.v1alpha1.ApplicationOperationSyncSyncStrategyHook" = { options = { "force" = mkOption { - 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."; + description = "Force indicates whether or not to supply the --force flag to `kubectl apply`.\nThe --force flag deletes and re-create the resource, when PATCH encounters conflict and has\nretried for 5 times."; type = types.nullOr types.bool; }; }; @@ -1948,9 +2059,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -1963,6 +2079,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -2062,6 +2179,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -2089,6 +2210,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -2188,6 +2310,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHelmFileParameters" "name" []); @@ -2197,6 +2323,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHelmParameters" "name" []); @@ -2214,6 +2348,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -2233,12 +2375,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -2284,8 +2431,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -2314,6 +2527,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -2346,6 +2563,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -2353,6 +2571,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -2528,6 +2747,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -2555,6 +2778,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -2654,6 +2878,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourcesHelmFileParameters" "name" []); @@ -2663,6 +2891,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourcesHelmParameters" "name" []); @@ -2680,6 +2916,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -2699,12 +2943,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -2752,6 +3001,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusterDecisionResourceTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -2780,6 +3033,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -2812,6 +3069,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -2819,6 +3077,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -3083,6 +3342,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClusters" = { options = { + "flatList" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "selector" = mkOption { description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersSelector"); @@ -3098,6 +3361,7 @@ with lib; let }; config = { + "flatList" = mkOverride 1002 null; "selector" = mkOverride 1002 null; "template" = mkOverride 1002 null; "values" = mkOverride 1002 null; @@ -3182,9 +3446,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -3197,6 +3466,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -3296,6 +3566,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -3323,6 +3597,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -3422,6 +3697,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHelmFileParameters" "name" []); @@ -3431,6 +3710,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHelmParameters" "name" []); @@ -3448,6 +3735,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -3467,12 +3762,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -3518,8 +3818,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -3548,6 +3914,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -3580,6 +3950,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -3587,6 +3958,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -3762,6 +4134,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -3789,6 +4165,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -3888,6 +4265,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourcesHelmFileParameters" "name" []); @@ -3897,6 +4278,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourcesHelmParameters" "name" []); @@ -3914,6 +4303,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -3933,12 +4330,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -3986,6 +4388,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsClustersTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -4014,6 +4420,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -4046,6 +4456,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -4053,6 +4464,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -4428,9 +4840,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -4443,6 +4860,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -4542,6 +4960,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -4569,6 +4991,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -4668,6 +5091,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHelmFileParameters" "name" []); @@ -4677,6 +5104,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHelmParameters" "name" []); @@ -4694,6 +5129,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -4713,12 +5156,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -4764,8 +5212,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -4794,6 +5308,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -4826,6 +5344,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -4833,6 +5352,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -5008,6 +5528,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -5035,6 +5559,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -5134,6 +5659,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourcesHelmFileParameters" "name" []); @@ -5143,6 +5672,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourcesHelmParameters" "name" []); @@ -5160,6 +5697,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -5179,12 +5724,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -5232,6 +5782,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsGitTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -5260,6 +5814,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -5292,6 +5850,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -5299,6 +5858,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -5625,9 +6185,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -5640,6 +6205,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -5739,6 +6305,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -5766,6 +6336,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -5865,6 +6436,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHelmFileParameters" "name" []); @@ -5874,6 +6449,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHelmParameters" "name" []); @@ -5891,6 +6474,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -5910,12 +6501,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -5961,8 +6557,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -5991,6 +6653,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -6023,6 +6689,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -6030,6 +6697,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -6205,6 +6873,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -6232,6 +6904,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -6331,6 +7004,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourcesHelmFileParameters" "name" []); @@ -6340,6 +7017,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourcesHelmParameters" "name" []); @@ -6357,6 +7042,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -6376,12 +7069,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -6429,6 +7127,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsListTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -6457,6 +7159,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -6489,6 +7195,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -6496,6 +7203,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -6946,9 +7654,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -6961,6 +7674,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -7060,6 +7774,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -7087,6 +7805,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -7186,6 +7905,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHelmFileParameters" "name" []); @@ -7195,6 +7918,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHelmParameters" "name" []); @@ -7212,6 +7943,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -7231,12 +7970,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -7282,8 +8026,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -7312,6 +8122,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -7344,6 +8158,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -7351,6 +8166,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -7526,6 +8342,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -7553,6 +8373,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -7652,6 +8473,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourcesHelmFileParameters" "name" []); @@ -7661,6 +8486,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourcesHelmParameters" "name" []); @@ -7678,6 +8511,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -7697,12 +8538,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -7750,6 +8596,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusterDecisionResourceTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -7778,6 +8628,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -7810,6 +8664,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -7817,6 +8672,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -8081,6 +8937,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClusters" = { options = { + "flatList" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "selector" = mkOption { description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersSelector"); @@ -8096,6 +8956,7 @@ with lib; let }; config = { + "flatList" = mkOverride 1002 null; "selector" = mkOverride 1002 null; "template" = mkOverride 1002 null; "values" = mkOverride 1002 null; @@ -8180,9 +9041,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -8195,6 +9061,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -8294,6 +9161,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -8321,6 +9192,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -8420,6 +9292,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHelmFileParameters" "name" []); @@ -8429,6 +9305,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHelmParameters" "name" []); @@ -8446,6 +9330,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -8465,12 +9357,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -8516,8 +9413,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -8546,6 +9509,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -8578,6 +9545,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -8585,6 +9553,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -8760,6 +9729,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -8787,6 +9760,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -8886,6 +9860,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourcesHelmFileParameters" "name" []); @@ -8895,6 +9873,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourcesHelmParameters" "name" []); @@ -8912,6 +9898,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -8931,12 +9925,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -8984,6 +9983,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsClustersTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -9012,6 +10015,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -9044,6 +10051,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -9051,6 +10059,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -9426,9 +10435,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -9441,6 +10455,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -9540,6 +10555,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -9567,6 +10586,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -9666,6 +10686,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHelmFileParameters" "name" []); @@ -9675,6 +10699,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHelmParameters" "name" []); @@ -9692,6 +10724,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -9711,12 +10751,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -9762,8 +10807,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -9792,6 +10903,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -9824,6 +10939,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -9831,6 +10947,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -10006,6 +11123,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -10033,6 +11154,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -10132,6 +11254,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourcesHelmFileParameters" "name" []); @@ -10141,6 +11267,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourcesHelmParameters" "name" []); @@ -10158,6 +11292,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -10177,12 +11319,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -10230,6 +11377,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsGitTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -10258,6 +11409,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -10290,6 +11445,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -10297,6 +11453,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -10623,9 +11780,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -10638,6 +11800,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -10737,6 +11900,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -10764,6 +11931,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -10863,6 +12031,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHelmFileParameters" "name" []); @@ -10872,6 +12044,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHelmParameters" "name" []); @@ -10889,6 +12069,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -10908,12 +12096,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -10959,8 +12152,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -10989,6 +12248,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -11021,6 +12284,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -11028,6 +12292,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -11203,6 +12468,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -11230,6 +12499,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -11329,6 +12599,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourcesHelmFileParameters" "name" []); @@ -11338,6 +12612,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourcesHelmParameters" "name" []); @@ -11355,6 +12637,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -11374,12 +12664,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -11427,6 +12722,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsListTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -11455,6 +12754,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -11487,6 +12790,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -11494,6 +12798,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -11851,9 +13156,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -11866,6 +13176,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -11965,6 +13276,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -11992,6 +13307,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -12091,6 +13407,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHelmFileParameters" "name" []); @@ -12100,6 +13420,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHelmParameters" "name" []); @@ -12117,6 +13445,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -12136,12 +13472,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -12187,8 +13528,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -12217,6 +13624,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -12249,6 +13660,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -12256,6 +13668,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -12431,6 +13844,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -12458,6 +13875,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -12557,6 +13975,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourcesHelmFileParameters" "name" []); @@ -12566,6 +13988,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourcesHelmParameters" "name" []); @@ -12583,6 +14013,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -12602,12 +14040,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -12655,6 +14098,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPluginTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -12683,6 +14130,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -12715,6 +14166,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -12722,6 +14174,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -13176,6 +14629,18 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestBitbucketServerBasicAuth"); }; + "bearerToken" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestBitbucketServerBearerToken"); + }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestBitbucketServerCaRef"); + }; + "insecure" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "project" = mkOption { description = ""; type = types.str; @@ -13188,6 +14653,9 @@ with lib; let config = { "basicAuth" = mkOverride 1002 null; + "bearerToken" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; + "insecure" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestBitbucketServerBasicAuth" = { @@ -13218,6 +14686,44 @@ with lib; let config = {}; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestBitbucketServerBearerToken" = { + options = { + "tokenRef" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestBitbucketServerBearerTokenTokenRef"; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestBitbucketServerBearerTokenTokenRef" = { + options = { + "key" = mkOption { + description = ""; + type = types.str; + }; + "secretName" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestBitbucketServerCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestFilters" = { options = { "branchMatch" = mkOption { @@ -13333,6 +14839,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestGitlabCaRef"); + }; "insecure" = mkOption { description = ""; type = types.nullOr types.bool; @@ -13357,12 +14867,27 @@ with lib; let config = { "api" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; "insecure" = mkOverride 1002 null; "labels" = mkOverride 1002 null; "pullRequestState" = mkOverride 1002 null; "tokenRef" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestGitlabCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestGitlabTokenRef" = { options = { "key" = mkOption { @@ -13419,9 +14944,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -13434,6 +14964,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -13533,6 +15064,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -13560,6 +15095,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -13659,6 +15195,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHelmFileParameters" "name" []); @@ -13668,6 +15208,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHelmParameters" "name" []); @@ -13685,6 +15233,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -13704,12 +15260,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -13755,8 +15316,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -13785,6 +15412,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -13817,6 +15448,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -13824,6 +15456,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -13999,6 +15632,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -14026,6 +15663,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -14125,6 +15763,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourcesHelmFileParameters" "name" []); @@ -14134,6 +15776,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourcesHelmParameters" "name" []); @@ -14151,6 +15801,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -14170,12 +15828,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -14223,6 +15886,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -14251,6 +15918,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -14283,6 +15954,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -14290,6 +15962,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -14757,6 +16430,18 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderBitbucketServerBasicAuth"); }; + "bearerToken" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderBitbucketServerBearerToken"); + }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderBitbucketServerCaRef"); + }; + "insecure" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "project" = mkOption { description = ""; type = types.str; @@ -14766,6 +16451,9 @@ with lib; let config = { "allBranches" = mkOverride 1002 null; "basicAuth" = mkOverride 1002 null; + "bearerToken" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; + "insecure" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderBitbucketServerBasicAuth" = { @@ -14796,6 +16484,44 @@ with lib; let config = {}; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderBitbucketServerBearerToken" = { + options = { + "tokenRef" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderBitbucketServerBearerTokenTokenRef"; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderBitbucketServerBearerTokenTokenRef" = { + options = { + "key" = mkOption { + description = ""; + type = types.str; + }; + "secretName" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderBitbucketServerCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderFilters" = { options = { "branchMatch" = mkOption { @@ -14927,6 +16653,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderGitlabCaRef"); + }; "group" = mkOption { description = ""; type = types.str; @@ -14956,6 +16686,7 @@ with lib; let config = { "allBranches" = mkOverride 1002 null; "api" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; "includeSharedProjects" = mkOverride 1002 null; "includeSubgroups" = mkOverride 1002 null; "insecure" = mkOverride 1002 null; @@ -14963,6 +16694,20 @@ with lib; let "topic" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderGitlabCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderGitlabTokenRef" = { options = { "key" = mkOption { @@ -15019,9 +16764,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -15034,6 +16784,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -15133,6 +16884,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -15160,6 +16915,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -15259,6 +17015,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHelmFileParameters" "name" []); @@ -15268,6 +17028,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHelmParameters" "name" []); @@ -15285,6 +17053,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -15304,12 +17080,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -15355,8 +17136,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -15385,6 +17232,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -15417,6 +17268,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -15424,6 +17276,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -15599,6 +17452,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -15626,6 +17483,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -15725,6 +17583,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourcesHelmFileParameters" "name" []); @@ -15734,6 +17596,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourcesHelmParameters" "name" []); @@ -15751,6 +17621,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -15770,12 +17648,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -15823,6 +17706,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsScmProviderTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -15851,6 +17738,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -15883,6 +17774,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -15890,6 +17782,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -16231,9 +18124,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -16246,6 +18144,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -16345,6 +18244,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -16372,6 +18275,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -16471,6 +18375,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHelmFileParameters" "name" []); @@ -16480,6 +18388,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHelmParameters" "name" []); @@ -16497,6 +18413,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -16516,12 +18440,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -16567,8 +18496,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -16597,6 +18592,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -16629,6 +18628,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -16636,6 +18636,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -16811,6 +18812,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -16838,6 +18843,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -16937,6 +18943,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourcesHelmFileParameters" "name" []); @@ -16946,6 +18956,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourcesHelmParameters" "name" []); @@ -16963,6 +18981,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -16982,12 +19008,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -17035,6 +19066,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -17063,6 +19098,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -17095,6 +19134,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -17102,6 +19142,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -17556,9 +19597,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -17571,6 +19617,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -17670,6 +19717,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -17697,6 +19748,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -17796,6 +19848,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHelmFileParameters" "name" []); @@ -17805,6 +19861,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHelmParameters" "name" []); @@ -17822,6 +19886,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -17841,12 +19913,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -17892,8 +19969,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -17922,6 +20065,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -17954,6 +20101,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -17961,6 +20109,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -18136,6 +20285,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -18163,6 +20316,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -18262,6 +20416,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourcesHelmFileParameters" "name" []); @@ -18271,6 +20429,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourcesHelmParameters" "name" []); @@ -18288,6 +20454,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -18307,12 +20481,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -18360,6 +20539,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusterDecisionResourceTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -18388,6 +20571,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -18420,6 +20607,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -18427,6 +20615,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -18691,6 +20880,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClusters" = { options = { + "flatList" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "selector" = mkOption { description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersSelector"); @@ -18706,6 +20899,7 @@ with lib; let }; config = { + "flatList" = mkOverride 1002 null; "selector" = mkOverride 1002 null; "template" = mkOverride 1002 null; "values" = mkOverride 1002 null; @@ -18790,9 +20984,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -18805,6 +21004,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -18904,6 +21104,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -18931,6 +21135,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -19030,6 +21235,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHelmFileParameters" "name" []); @@ -19039,6 +21248,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHelmParameters" "name" []); @@ -19056,6 +21273,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -19075,12 +21300,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -19126,8 +21356,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -19156,6 +21452,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -19188,6 +21488,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -19195,6 +21496,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -19370,6 +21672,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -19397,6 +21703,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -19496,6 +21803,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourcesHelmFileParameters" "name" []); @@ -19505,6 +21816,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourcesHelmParameters" "name" []); @@ -19522,6 +21841,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -19541,12 +21868,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -19594,6 +21926,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsClustersTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -19622,6 +21958,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -19654,6 +21994,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -19661,6 +22002,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -20036,9 +22378,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -20051,6 +22398,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -20150,6 +22498,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -20177,6 +22529,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -20276,6 +22629,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHelmFileParameters" "name" []); @@ -20285,6 +22642,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHelmParameters" "name" []); @@ -20302,6 +22667,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -20321,12 +22694,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -20372,8 +22750,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -20402,6 +22846,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -20434,6 +22882,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -20441,6 +22890,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -20616,6 +23066,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -20643,6 +23097,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -20742,6 +23197,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourcesHelmFileParameters" "name" []); @@ -20751,6 +23210,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourcesHelmParameters" "name" []); @@ -20768,6 +23235,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -20787,12 +23262,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -20840,6 +23320,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsGitTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -20868,6 +23352,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -20900,6 +23388,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -20907,6 +23396,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -21233,9 +23723,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -21248,6 +23743,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -21347,6 +23843,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -21374,6 +23874,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -21473,6 +23974,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHelmFileParameters" "name" []); @@ -21482,6 +23987,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHelmParameters" "name" []); @@ -21499,6 +24012,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -21518,12 +24039,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -21569,8 +24095,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -21599,6 +24191,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -21631,6 +24227,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -21638,6 +24235,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -21813,6 +24411,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -21840,6 +24442,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -21939,6 +24542,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourcesHelmFileParameters" "name" []); @@ -21948,6 +24555,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourcesHelmParameters" "name" []); @@ -21965,6 +24580,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -21984,12 +24607,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -22037,6 +24665,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsListTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -22065,6 +24697,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -22097,6 +24733,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -22104,6 +24741,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -22461,9 +25099,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -22476,6 +25119,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -22575,6 +25219,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -22602,6 +25250,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -22701,6 +25350,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHelmFileParameters" "name" []); @@ -22710,6 +25363,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHelmParameters" "name" []); @@ -22727,6 +25388,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -22746,12 +25415,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -22797,8 +25471,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -22827,6 +25567,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -22859,6 +25603,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -22866,6 +25611,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -23041,6 +25787,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -23068,6 +25818,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -23167,6 +25918,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourcesHelmFileParameters" "name" []); @@ -23176,6 +25931,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourcesHelmParameters" "name" []); @@ -23193,6 +25956,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -23212,12 +25983,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -23265,6 +26041,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPluginTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -23293,6 +26073,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -23325,6 +26109,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -23332,6 +26117,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -23786,6 +26572,18 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestBitbucketServerBasicAuth"); }; + "bearerToken" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestBitbucketServerBearerToken"); + }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestBitbucketServerCaRef"); + }; + "insecure" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "project" = mkOption { description = ""; type = types.str; @@ -23798,6 +26596,9 @@ with lib; let config = { "basicAuth" = mkOverride 1002 null; + "bearerToken" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; + "insecure" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestBitbucketServerBasicAuth" = { @@ -23828,6 +26629,44 @@ with lib; let config = {}; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestBitbucketServerBearerToken" = { + options = { + "tokenRef" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestBitbucketServerBearerTokenTokenRef"; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestBitbucketServerBearerTokenTokenRef" = { + options = { + "key" = mkOption { + description = ""; + type = types.str; + }; + "secretName" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestBitbucketServerCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestFilters" = { options = { "branchMatch" = mkOption { @@ -23943,6 +26782,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestGitlabCaRef"); + }; "insecure" = mkOption { description = ""; type = types.nullOr types.bool; @@ -23967,12 +26810,27 @@ with lib; let config = { "api" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; "insecure" = mkOverride 1002 null; "labels" = mkOverride 1002 null; "pullRequestState" = mkOverride 1002 null; "tokenRef" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestGitlabCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestGitlabTokenRef" = { options = { "key" = mkOption { @@ -24029,9 +26887,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -24044,6 +26907,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -24143,6 +27007,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -24170,6 +27038,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -24269,6 +27138,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHelmFileParameters" "name" []); @@ -24278,6 +27151,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHelmParameters" "name" []); @@ -24295,6 +27176,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -24314,12 +27203,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -24365,8 +27259,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -24395,6 +27355,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -24427,6 +27391,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -24434,6 +27399,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -24609,6 +27575,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -24636,6 +27606,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -24735,6 +27706,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourcesHelmFileParameters" "name" []); @@ -24744,6 +27719,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourcesHelmParameters" "name" []); @@ -24761,6 +27744,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -24780,12 +27771,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -24833,6 +27829,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -24861,6 +27861,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -24893,6 +27897,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -24900,6 +27905,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -25367,6 +28373,18 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderBitbucketServerBasicAuth"); }; + "bearerToken" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderBitbucketServerBearerToken"); + }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderBitbucketServerCaRef"); + }; + "insecure" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "project" = mkOption { description = ""; type = types.str; @@ -25376,6 +28394,9 @@ with lib; let config = { "allBranches" = mkOverride 1002 null; "basicAuth" = mkOverride 1002 null; + "bearerToken" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; + "insecure" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderBitbucketServerBasicAuth" = { @@ -25406,6 +28427,44 @@ with lib; let config = {}; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderBitbucketServerBearerToken" = { + options = { + "tokenRef" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderBitbucketServerBearerTokenTokenRef"; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderBitbucketServerBearerTokenTokenRef" = { + options = { + "key" = mkOption { + description = ""; + type = types.str; + }; + "secretName" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderBitbucketServerCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderFilters" = { options = { "branchMatch" = mkOption { @@ -25537,6 +28596,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderGitlabCaRef"); + }; "group" = mkOption { description = ""; type = types.str; @@ -25566,6 +28629,7 @@ with lib; let config = { "allBranches" = mkOverride 1002 null; "api" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; "includeSharedProjects" = mkOverride 1002 null; "includeSubgroups" = mkOverride 1002 null; "insecure" = mkOverride 1002 null; @@ -25573,6 +28637,20 @@ with lib; let "topic" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderGitlabCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderGitlabTokenRef" = { options = { "key" = mkOption { @@ -25629,9 +28707,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -25644,6 +28727,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -25743,6 +28827,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -25770,6 +28858,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -25869,6 +28958,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHelmFileParameters" "name" []); @@ -25878,6 +28971,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHelmParameters" "name" []); @@ -25895,6 +28996,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -25914,12 +29023,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -25965,8 +29079,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -25995,6 +29175,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -26027,6 +29211,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -26034,6 +29219,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -26209,6 +29395,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -26236,6 +29426,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -26335,6 +29526,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourcesHelmFileParameters" "name" []); @@ -26344,6 +29539,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourcesHelmParameters" "name" []); @@ -26361,6 +29564,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -26380,12 +29591,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -26433,6 +29649,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsScmProviderTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -26461,6 +29681,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -26493,6 +29717,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -26500,6 +29725,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -26841,9 +30067,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -26856,6 +30087,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -26955,6 +30187,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -26982,6 +30218,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -27081,6 +30318,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHelmFileParameters" "name" []); @@ -27090,6 +30331,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHelmParameters" "name" []); @@ -27107,6 +30356,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -27126,12 +30383,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -27177,8 +30439,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -27207,6 +30535,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -27239,6 +30571,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -27246,6 +30579,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -27421,6 +30755,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -27448,6 +30786,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -27547,6 +30886,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourcesHelmFileParameters" "name" []); @@ -27556,6 +30899,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourcesHelmParameters" "name" []); @@ -27573,6 +30924,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -27592,12 +30951,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -27645,6 +31009,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -27673,6 +31041,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -27705,6 +31077,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -27712,6 +31085,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -28069,9 +31443,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -28084,6 +31463,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -28183,6 +31563,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -28210,6 +31594,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -28309,6 +31694,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHelmFileParameters" "name" []); @@ -28318,6 +31707,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHelmParameters" "name" []); @@ -28335,6 +31732,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -28354,12 +31759,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -28405,8 +31815,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -28435,6 +31911,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -28467,6 +31947,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -28474,6 +31955,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -28649,6 +32131,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -28676,6 +32162,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -28775,6 +32262,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourcesHelmFileParameters" "name" []); @@ -28784,6 +32275,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourcesHelmParameters" "name" []); @@ -28801,6 +32300,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -28820,12 +32327,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -28873,6 +32385,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPluginTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -28901,6 +32417,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -28933,6 +32453,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -28940,6 +32461,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -29394,6 +32916,18 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestBitbucketServerBasicAuth"); }; + "bearerToken" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestBitbucketServerBearerToken"); + }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestBitbucketServerCaRef"); + }; + "insecure" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "project" = mkOption { description = ""; type = types.str; @@ -29406,6 +32940,9 @@ with lib; let config = { "basicAuth" = mkOverride 1002 null; + "bearerToken" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; + "insecure" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestBitbucketServerBasicAuth" = { @@ -29436,6 +32973,44 @@ with lib; let config = {}; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestBitbucketServerBearerToken" = { + options = { + "tokenRef" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestBitbucketServerBearerTokenTokenRef"; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestBitbucketServerBearerTokenTokenRef" = { + options = { + "key" = mkOption { + description = ""; + type = types.str; + }; + "secretName" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestBitbucketServerCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestFilters" = { options = { "branchMatch" = mkOption { @@ -29551,6 +33126,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestGitlabCaRef"); + }; "insecure" = mkOption { description = ""; type = types.nullOr types.bool; @@ -29575,12 +33154,27 @@ with lib; let config = { "api" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; "insecure" = mkOverride 1002 null; "labels" = mkOverride 1002 null; "pullRequestState" = mkOverride 1002 null; "tokenRef" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestGitlabCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestGitlabTokenRef" = { options = { "key" = mkOption { @@ -29637,9 +33231,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -29652,6 +33251,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -29751,6 +33351,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -29778,6 +33382,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -29877,6 +33482,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHelmFileParameters" "name" []); @@ -29886,6 +33495,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHelmParameters" "name" []); @@ -29903,6 +33520,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -29922,12 +33547,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -29973,8 +33603,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -30003,6 +33699,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -30035,6 +33735,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -30042,6 +33743,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -30217,6 +33919,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -30244,6 +33950,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -30343,6 +34050,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourcesHelmFileParameters" "name" []); @@ -30352,6 +34063,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourcesHelmParameters" "name" []); @@ -30369,6 +34088,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -30388,12 +34115,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -30441,6 +34173,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -30469,6 +34205,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -30501,6 +34241,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -30508,6 +34249,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -30975,6 +34717,18 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderBitbucketServerBasicAuth"); }; + "bearerToken" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderBitbucketServerBearerToken"); + }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderBitbucketServerCaRef"); + }; + "insecure" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "project" = mkOption { description = ""; type = types.str; @@ -30984,6 +34738,9 @@ with lib; let config = { "allBranches" = mkOverride 1002 null; "basicAuth" = mkOverride 1002 null; + "bearerToken" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; + "insecure" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderBitbucketServerBasicAuth" = { @@ -31014,6 +34771,44 @@ with lib; let config = {}; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderBitbucketServerBearerToken" = { + options = { + "tokenRef" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderBitbucketServerBearerTokenTokenRef"; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderBitbucketServerBearerTokenTokenRef" = { + options = { + "key" = mkOption { + description = ""; + type = types.str; + }; + "secretName" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderBitbucketServerCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderFilters" = { options = { "branchMatch" = mkOption { @@ -31145,6 +34940,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "caRef" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderGitlabCaRef"); + }; "group" = mkOption { description = ""; type = types.str; @@ -31174,6 +34973,7 @@ with lib; let config = { "allBranches" = mkOverride 1002 null; "api" = mkOverride 1002 null; + "caRef" = mkOverride 1002 null; "includeSharedProjects" = mkOverride 1002 null; "includeSubgroups" = mkOverride 1002 null; "insecure" = mkOverride 1002 null; @@ -31181,6 +34981,20 @@ with lib; let "topic" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderGitlabCaRef" = { + options = { + "configMapName" = mkOption { + description = ""; + type = types.str; + }; + "key" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderGitlabTokenRef" = { options = { "key" = mkOption { @@ -31237,9 +35051,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -31252,6 +35071,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -31351,6 +35171,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -31378,6 +35202,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -31477,6 +35302,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHelmFileParameters" "name" []); @@ -31486,6 +35315,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHelmParameters" "name" []); @@ -31503,6 +35340,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -31522,12 +35367,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -31573,8 +35423,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -31603,6 +35519,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -31635,6 +35555,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -31642,6 +35563,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -31817,6 +35739,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -31844,6 +35770,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -31943,6 +35870,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourcesHelmFileParameters" "name" []); @@ -31952,6 +35883,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourcesHelmParameters" "name" []); @@ -31969,6 +35908,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -31988,12 +35935,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -32041,6 +35993,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsScmProviderTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -32069,6 +36025,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -32101,6 +36061,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -32108,6 +36069,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -32573,9 +36535,14 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSource"); }; + "sourceHydrator" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHydrator"); + }; "sources" = mkOption { description = ""; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = ""; @@ -32588,6 +36555,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -32687,6 +36655,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -32714,6 +36686,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -32813,6 +36786,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHelmFileParameters" "name" []); @@ -32822,6 +36799,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHelmParameters" "name" []); @@ -32839,6 +36824,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -32858,12 +36851,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -32909,8 +36907,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = ""; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "repoURL" = mkOption { + description = ""; + type = types.str; + }; + "targetRevision" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = ""; + type = types.str; + }; + "targetBranch" = mkOption { + description = ""; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -32939,6 +37003,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -32971,6 +37039,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -32978,6 +37047,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -33153,6 +37223,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourcesKustomize"); }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "path" = mkOption { description = ""; type = types.nullOr types.str; @@ -33180,6 +37254,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -33279,6 +37354,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourcesHelmFileParameters" "name" []); @@ -33288,6 +37367,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = ""; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourcesHelmParameters" "name" []); @@ -33305,6 +37392,14 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -33324,12 +37419,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -33377,6 +37477,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSetSpecTemplateSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = ""; type = types.nullOr (types.attrsOf types.str); @@ -33405,6 +37509,10 @@ with lib; let description = ""; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = ""; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -33437,6 +37545,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -33444,6 +37553,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -33716,11 +37826,17 @@ with lib; let description = ""; type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSetStatusConditions")); }; + "resources" = mkOption { + description = ""; + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSetStatusResources" "name" []); + apply = attrsToList; + }; }; config = { "applicationStatus" = mkOverride 1002 null; "conditions" = mkOverride 1002 null; + "resources" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetStatusApplicationStatus" = { @@ -33745,6 +37861,10 @@ with lib; let description = ""; type = types.str; }; + "targetRevisions" = mkOption { + description = ""; + type = types.listOf types.str; + }; }; config = { @@ -33779,6 +37899,90 @@ with lib; let "lastTransitionTime" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSetStatusResources" = { + options = { + "group" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "health" = mkOption { + description = ""; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetStatusResourcesHealth"); + }; + "hook" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "kind" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "name" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "requiresDeletionConfirmation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "requiresPruning" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; + "status" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "syncWave" = mkOption { + description = ""; + type = types.nullOr types.int; + }; + "version" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + }; + + config = { + "group" = mkOverride 1002 null; + "health" = mkOverride 1002 null; + "hook" = mkOverride 1002 null; + "kind" = mkOverride 1002 null; + "name" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; + "requiresDeletionConfirmation" = mkOverride 1002 null; + "requiresPruning" = mkOverride 1002 null; + "status" = mkOverride 1002 null; + "syncWave" = mkOverride 1002 null; + "version" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSetStatusResourcesHealth" = { + options = { + "lastTransitionTime" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "message" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + "status" = mkOption { + description = ""; + type = types.nullOr types.str; + }; + }; + + config = { + "lastTransitionTime" = mkOverride 1002 null; + "message" = mkOverride 1002 null; + "status" = mkOverride 1002 null; + }; + }; "argoproj.io.v1alpha1.ApplicationSpec" = { options = { "destination" = mkOption { @@ -33796,20 +38000,25 @@ with lib; let apply = attrsToList; }; "project" = mkOption { - description = "Project is a reference to the project this application belongs to. The empty string means that application belongs to the 'default' project."; + description = "Project is a reference to the project this application belongs to.\nThe empty string means that application belongs to the 'default' project."; type = types.str; }; "revisionHistoryLimit" = mkOption { - 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."; + 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.\nThis should only be changed in exceptional circumstances.\nSetting to zero will store no history. This will reduce storage used.\nIncreasing will increase the space used to store the history, so we do not recommend increasing it.\nDefault is 10."; type = types.nullOr types.int; }; "source" = mkOption { description = "Source is a reference to the location of the application's manifests or chart"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSpecSource"); }; + "sourceHydrator" = mkOption { + description = "SourceHydrator provides a way to push hydrated manifests back to git before syncing them to the cluster."; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSpecSourceHydrator"); + }; "sources" = mkOption { description = "Sources is a reference to the location of the application's manifests or chart"; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationSpecSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSpecSources" "name" []); + apply = attrsToList; }; "syncPolicy" = mkOption { description = "SyncPolicy controls when and how a sync will be performed"; @@ -33822,6 +38031,7 @@ with lib; let "info" = mkOverride 1002 null; "revisionHistoryLimit" = mkOverride 1002 null; "source" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sources" = mkOverride 1002 null; "syncPolicy" = mkOverride 1002 null; }; @@ -33833,7 +38043,7 @@ with lib; let type = types.nullOr types.str; }; "namespace" = mkOption { - 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"; + description = "Namespace specifies the target namespace for the application's resources.\nThe namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace"; type = types.nullOr types.str; }; "server" = mkOption { @@ -33867,7 +38077,7 @@ with lib; let type = types.str; }; "managedFieldsManagers" = mkOption { - 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"; + description = "ManagedFieldsManagers is a list of trusted managers. Fields mutated by those managers will take precedence over the\ndesired state defined in the SCM and won't be displayed in diffs"; type = types.nullOr (types.listOf types.str); }; "name" = mkOption { @@ -33921,6 +38131,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSpecSourceKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -33938,7 +38152,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -33948,6 +38162,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -34047,6 +38262,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSpecSourceHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSpecSourceHelmFileParameters" "name" []); @@ -34056,6 +38275,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSpecSourceHelmParameters" "name" []); @@ -34073,6 +38300,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -34092,12 +38327,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -34143,8 +38383,74 @@ with lib; let "value" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationSpecSourceHydrator" = { + options = { + "drySource" = mkOption { + description = "DrySource specifies where the dry \"don't repeat yourself\" manifest source lives."; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSpecSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = "HydrateTo specifies an optional \"staging\" location to push hydrated manifests to. An external system would then\nhave to move manifests to the SyncSource, e.g. by pull request."; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSpecSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = "SyncSource specifies where to sync hydrated manifests from."; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationSpecSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationSpecSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = "Path is a directory path within the Git repository where the manifests are located"; + type = types.str; + }; + "repoURL" = mkOption { + description = "RepoURL is the URL to the git repository that contains the application manifests"; + type = types.str; + }; + "targetRevision" = mkOption { + description = "TargetRevision defines the revision of the source to hydrate"; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSpecSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = "TargetBranch is the branch to which hydrated manifests should be committed"; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationSpecSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = "Path is a directory path within the git repository where hydrated manifests should be committed to and synced\nfrom. If hydrateTo is set, this is just the path from which hydrated manifests will be synced."; + type = types.str; + }; + "targetBranch" = mkOption { + description = "TargetBranch is the branch to which hydrated manifests should be committed"; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationSpecSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -34173,6 +38479,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -34205,6 +38515,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -34212,6 +38523,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -34387,6 +38699,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSpecSourcesKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -34404,7 +38720,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -34414,6 +38730,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -34513,6 +38830,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSpecSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSpecSourcesHelmFileParameters" "name" []); @@ -34522,6 +38843,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationSpecSourcesHelmParameters" "name" []); @@ -34539,6 +38868,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -34558,12 +38895,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -34611,6 +38953,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationSpecSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -34639,6 +38985,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -34671,6 +39021,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -34678,6 +39029,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -34959,7 +39311,7 @@ with lib; let type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusHistory")); }; "observedAt" = mkOption { - description = "ObservedAt indicates when the application state was updated without querying latest git state Deprecated: controller no longer updates ObservedAt field"; + description = "ObservedAt indicates when the application state was updated without querying latest git state\nDeprecated: controller no longer updates ObservedAt field"; type = types.nullOr types.str; }; "operationState" = mkOption { @@ -34979,6 +39331,10 @@ with lib; let type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusResources" "name" []); apply = attrsToList; }; + "sourceHydrator" = mkOption { + description = "SourceHydrator stores information about the current state of source hydration"; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydrator"); + }; "sourceType" = mkOption { description = "SourceType specifies the type of this application"; type = types.nullOr types.str; @@ -35007,6 +39363,7 @@ with lib; let "reconciledAt" = mkOverride 1002 null; "resourceHealthSource" = mkOverride 1002 null; "resources" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; "sourceType" = mkOverride 1002 null; "sourceTypes" = mkOverride 1002 null; "summary" = mkOverride 1002 null; @@ -35035,6 +39392,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusHealth" = { options = { + "lastTransitionTime" = mkOption { + description = "LastTransitionTime is the time the HealthStatus was set or updated"; + type = types.nullOr types.str; + }; "message" = mkOption { description = "Message is a human-readable informational message describing the health status"; type = types.nullOr types.str; @@ -35046,6 +39407,7 @@ with lib; let }; config = { + "lastTransitionTime" = mkOverride 1002 null; "message" = mkOverride 1002 null; "status" = mkOverride 1002 null; }; @@ -35082,7 +39444,8 @@ with lib; let }; "sources" = mkOption { description = "Sources is a reference to the application sources used for the sync operation"; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusHistorySources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusHistorySources" "name" []); + apply = attrsToList; }; }; @@ -35130,6 +39493,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusHistorySourceKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -35147,7 +39514,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -35157,6 +39524,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -35256,6 +39624,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusHistorySourceHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusHistorySourceHelmFileParameters" "name" []); @@ -35265,6 +39637,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusHistorySourceHelmParameters" "name" []); @@ -35282,6 +39662,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -35301,12 +39689,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -35354,6 +39747,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusHistorySourceKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -35382,6 +39779,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -35414,6 +39815,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -35421,6 +39823,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -35596,6 +39999,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusHistorySourcesKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -35613,7 +40020,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -35623,6 +40030,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -35722,6 +40130,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusHistorySourcesHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusHistorySourcesHelmFileParameters" "name" []); @@ -35731,6 +40143,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusHistorySourcesHelmParameters" "name" []); @@ -35748,6 +40168,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -35767,12 +40195,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -35820,6 +40253,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusHistorySourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -35848,6 +40285,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -35880,6 +40321,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -35887,6 +40329,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -36183,6 +40626,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSync" = { options = { + "autoHealAttemptsCount" = mkOption { + description = "SelfHealAttemptsCount contains the number of auto-heal attempts"; + type = types.nullOr types.int; + }; "dryRun" = mkOption { description = "DryRun specifies to perform a `kubectl apply --dry-run` without actually performing the sync"; type = types.nullOr types.bool; @@ -36201,20 +40648,21 @@ with lib; let apply = attrsToList; }; "revision" = mkOption { - 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."; + description = "Revision is the revision (Git) or chart version (Helm) which to sync the application to\nIf omitted, will use the revision specified in app spec."; type = types.nullOr types.str; }; "revisions" = mkOption { - 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."; + description = "Revisions is the list of revision (Git) or chart version (Helm) which to sync each source in sources field for the application to\nIf omitted, will use the revision specified in app spec."; type = types.nullOr (types.listOf types.str); }; "source" = mkOption { - 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"; + description = "Source overrides the source definition set in the application.\nThis is typically set in a Rollback operation and is nil during a Sync operation"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSource"); }; "sources" = mkOption { - 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"; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSources")); + description = "Sources overrides the source definition set in the application.\nThis is typically set in a Rollback operation and is nil during a Sync operation"; + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSources" "name" []); + apply = attrsToList; }; "syncOptions" = mkOption { description = "SyncOptions provide per-sync sync-options, e.g. Validate=false"; @@ -36227,6 +40675,7 @@ with lib; let }; config = { + "autoHealAttemptsCount" = mkOverride 1002 null; "dryRun" = mkOverride 1002 null; "manifests" = mkOverride 1002 null; "prune" = mkOverride 1002 null; @@ -36282,6 +40731,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourceKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -36299,7 +40752,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -36309,6 +40762,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -36408,6 +40862,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourceHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourceHelmFileParameters" "name" []); @@ -36417,6 +40875,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourceHelmParameters" "name" []); @@ -36434,6 +40900,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -36453,12 +40927,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -36506,6 +40985,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -36534,6 +41017,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -36566,6 +41053,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -36573,6 +41061,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -36748,6 +41237,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourcesKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -36765,7 +41258,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -36775,6 +41268,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -36874,6 +41368,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourcesHelmFileParameters" "name" []); @@ -36883,6 +41381,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourcesHelmParameters" "name" []); @@ -36900,6 +41406,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -36919,12 +41433,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -36972,6 +41491,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -37000,6 +41523,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -37032,6 +41559,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -37039,6 +41567,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -37216,7 +41745,7 @@ with lib; let "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSyncStrategyApply" = { options = { "force" = mkOption { - 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."; + description = "Force indicates whether or not to supply the --force flag to `kubectl apply`.\nThe --force flag deletes and re-create the resource, when PATCH encounters conflict and has\nretried for 5 times."; type = types.nullOr types.bool; }; }; @@ -37228,7 +41757,7 @@ with lib; let "argoproj.io.v1alpha1.ApplicationStatusOperationStateOperationSyncSyncStrategyHook" = { options = { "force" = mkOption { - 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."; + description = "Force indicates whether or not to supply the --force flag to `kubectl apply`.\nThe --force flag deletes and re-create the resource, when PATCH encounters conflict and has\nretried for 5 times."; type = types.nullOr types.bool; }; }; @@ -37262,7 +41791,8 @@ with lib; let }; "sources" = mkOption { description = "Source records the application source information of the sync, used for comparing auto-sync"; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSources" "name" []); + apply = attrsToList; }; }; @@ -37298,7 +41828,7 @@ with lib; let type = types.str; }; "hookPhase" = mkOption { - description = "HookPhase contains the state of any operation associated with this resource OR hook This can also contain values for non-hook resources."; + description = "HookPhase contains the state of any operation associated with this resource OR hook\nThis can also contain values for non-hook resources."; type = types.nullOr types.str; }; "hookType" = mkOption { @@ -37361,6 +41891,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourceKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -37378,7 +41912,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -37388,6 +41922,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -37487,6 +42022,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourceHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourceHelmFileParameters" "name" []); @@ -37496,6 +42035,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourceHelmParameters" "name" []); @@ -37513,6 +42060,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -37532,12 +42087,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -37585,6 +42145,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -37613,6 +42177,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -37645,6 +42213,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -37652,6 +42221,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -37827,6 +42397,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourcesKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -37844,7 +42418,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -37854,6 +42428,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -37953,6 +42528,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourcesHelmFileParameters" "name" []); @@ -37962,6 +42541,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourcesHelmParameters" "name" []); @@ -37979,6 +42566,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -37998,12 +42593,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -38051,6 +42651,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusOperationStateSyncResultSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -38079,6 +42683,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -38111,6 +42719,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -38118,6 +42727,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -38301,6 +42911,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "requiresDeletionConfirmation" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "requiresPruning" = mkOption { description = ""; type = types.nullOr types.bool; @@ -38326,6 +42940,7 @@ with lib; let "kind" = mkOverride 1002 null; "name" = mkOverride 1002 null; "namespace" = mkOverride 1002 null; + "requiresDeletionConfirmation" = mkOverride 1002 null; "requiresPruning" = mkOverride 1002 null; "status" = mkOverride 1002 null; "syncWave" = mkOverride 1002 null; @@ -38334,6 +42949,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusResourcesHealth" = { options = { + "lastTransitionTime" = mkOption { + description = "LastTransitionTime is the time the HealthStatus was set or updated"; + type = types.nullOr types.str; + }; "message" = mkOption { description = "Message is a human-readable informational message describing the health status"; type = types.nullOr types.str; @@ -38345,10 +42964,214 @@ with lib; let }; config = { + "lastTransitionTime" = mkOverride 1002 null; "message" = mkOverride 1002 null; "status" = mkOverride 1002 null; }; }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydrator" = { + options = { + "currentOperation" = mkOption { + description = "CurrentOperation holds the status of the hydrate operation"; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperation"); + }; + "lastSuccessfulOperation" = mkOption { + description = "LastSuccessfulOperation holds info about the most recent successful hydration"; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperation"); + }; + }; + + config = { + "currentOperation" = mkOverride 1002 null; + "lastSuccessfulOperation" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperation" = { + options = { + "drySHA" = mkOption { + description = "DrySHA holds the resolved revision (sha) of the dry source as of the most recent reconciliation"; + type = types.nullOr types.str; + }; + "finishedAt" = mkOption { + description = "FinishedAt indicates when the hydrate operation finished"; + type = types.nullOr types.str; + }; + "hydratedSHA" = mkOption { + description = "HydratedSHA holds the resolved revision (sha) of the hydrated source as of the most recent reconciliation"; + type = types.nullOr types.str; + }; + "message" = mkOption { + description = "Message contains a message describing the current status of the hydrate operation"; + type = types.str; + }; + "phase" = mkOption { + description = "Phase indicates the status of the hydrate operation"; + type = types.str; + }; + "sourceHydrator" = mkOption { + description = "SourceHydrator holds the hydrator config used for the hydrate operation"; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperationSourceHydrator"); + }; + "startedAt" = mkOption { + description = "StartedAt indicates when the hydrate operation started"; + type = types.nullOr types.str; + }; + }; + + config = { + "drySHA" = mkOverride 1002 null; + "finishedAt" = mkOverride 1002 null; + "hydratedSHA" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; + "startedAt" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperationSourceHydrator" = { + options = { + "drySource" = mkOption { + description = "DrySource specifies where the dry \"don't repeat yourself\" manifest source lives."; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperationSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = "HydrateTo specifies an optional \"staging\" location to push hydrated manifests to. An external system would then\nhave to move manifests to the SyncSource, e.g. by pull request."; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperationSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = "SyncSource specifies where to sync hydrated manifests from."; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperationSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperationSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = "Path is a directory path within the Git repository where the manifests are located"; + type = types.str; + }; + "repoURL" = mkOption { + description = "RepoURL is the URL to the git repository that contains the application manifests"; + type = types.str; + }; + "targetRevision" = mkOption { + description = "TargetRevision defines the revision of the source to hydrate"; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperationSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = "TargetBranch is the branch to which hydrated manifests should be committed"; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorCurrentOperationSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = "Path is a directory path within the git repository where hydrated manifests should be committed to and synced\nfrom. If hydrateTo is set, this is just the path from which hydrated manifests will be synced."; + type = types.str; + }; + "targetBranch" = mkOption { + description = "TargetBranch is the branch to which hydrated manifests should be committed"; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperation" = { + options = { + "drySHA" = mkOption { + description = "DrySHA holds the resolved revision (sha) of the dry source as of the most recent reconciliation"; + type = types.nullOr types.str; + }; + "hydratedSHA" = mkOption { + description = "HydratedSHA holds the resolved revision (sha) of the hydrated source as of the most recent reconciliation"; + type = types.nullOr types.str; + }; + "sourceHydrator" = mkOption { + description = "SourceHydrator holds the hydrator config used for the hydrate operation"; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperationSourceHydrator"); + }; + }; + + config = { + "drySHA" = mkOverride 1002 null; + "hydratedSHA" = mkOverride 1002 null; + "sourceHydrator" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperationSourceHydrator" = { + options = { + "drySource" = mkOption { + description = "DrySource specifies where the dry \"don't repeat yourself\" manifest source lives."; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperationSourceHydratorDrySource"; + }; + "hydrateTo" = mkOption { + description = "HydrateTo specifies an optional \"staging\" location to push hydrated manifests to. An external system would then\nhave to move manifests to the SyncSource, e.g. by pull request."; + type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperationSourceHydratorHydrateTo"); + }; + "syncSource" = mkOption { + description = "SyncSource specifies where to sync hydrated manifests from."; + type = submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperationSourceHydratorSyncSource"; + }; + }; + + config = { + "hydrateTo" = mkOverride 1002 null; + }; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperationSourceHydratorDrySource" = { + options = { + "path" = mkOption { + description = "Path is a directory path within the Git repository where the manifests are located"; + type = types.str; + }; + "repoURL" = mkOption { + description = "RepoURL is the URL to the git repository that contains the application manifests"; + type = types.str; + }; + "targetRevision" = mkOption { + description = "TargetRevision defines the revision of the source to hydrate"; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperationSourceHydratorHydrateTo" = { + options = { + "targetBranch" = mkOption { + description = "TargetBranch is the branch to which hydrated manifests should be committed"; + type = types.str; + }; + }; + + config = {}; + }; + "argoproj.io.v1alpha1.ApplicationStatusSourceHydratorLastSuccessfulOperationSourceHydratorSyncSource" = { + options = { + "path" = mkOption { + description = "Path is a directory path within the git repository where hydrated manifests should be committed to and synced\nfrom. If hydrateTo is set, this is just the path from which hydrated manifests will be synced."; + type = types.str; + }; + "targetBranch" = mkOption { + description = "TargetBranch is the branch to which hydrated manifests should be committed"; + type = types.str; + }; + }; + + config = {}; + }; "argoproj.io.v1alpha1.ApplicationStatusSummary" = { options = { "externalURLs" = mkOption { @@ -38409,7 +43232,8 @@ with lib; let }; "sources" = mkOption { description = "Sources is a reference to the application's multiple sources used for comparison"; - type = types.nullOr (types.listOf (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSources")); + type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSources" "name" []); + apply = attrsToList; }; }; @@ -38426,7 +43250,7 @@ with lib; let type = types.nullOr types.str; }; "namespace" = mkOption { - 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"; + description = "Namespace specifies the target namespace for the application's resources.\nThe namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace"; type = types.nullOr types.str; }; "server" = mkOption { @@ -38460,7 +43284,7 @@ with lib; let type = types.str; }; "managedFieldsManagers" = mkOption { - 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"; + description = "ManagedFieldsManagers is a list of trusted managers. Fields mutated by those managers will take precedence over the\ndesired state defined in the SCM and won't be displayed in diffs"; type = types.nullOr (types.listOf types.str); }; "name" = mkOption { @@ -38500,6 +43324,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourceKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -38517,7 +43345,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -38527,6 +43355,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -38626,6 +43455,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourceHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourceHelmFileParameters" "name" []); @@ -38635,6 +43468,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourceHelmParameters" "name" []); @@ -38652,6 +43493,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -38671,12 +43520,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -38724,6 +43578,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourceKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -38752,6 +43610,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -38784,6 +43646,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -38791,6 +43654,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -38966,6 +43830,10 @@ with lib; let description = "Kustomize holds kustomize specific options"; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourcesKustomize"); }; + "name" = mkOption { + description = "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications."; + type = types.nullOr types.str; + }; "path" = mkOption { description = "Path is a directory path within the Git repository, and is only valid for applications sourced from Git."; type = types.nullOr types.str; @@ -38983,7 +43851,7 @@ with lib; let type = types.str; }; "targetRevision" = mkOption { - 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."; + description = "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version."; type = types.nullOr types.str; }; }; @@ -38993,6 +43861,7 @@ with lib; let "directory" = mkOverride 1002 null; "helm" = mkOverride 1002 null; "kustomize" = mkOverride 1002 null; + "name" = mkOverride 1002 null; "path" = mkOverride 1002 null; "plugin" = mkOverride 1002 null; "ref" = mkOverride 1002 null; @@ -39092,6 +43961,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourcesHelm" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "fileParameters" = mkOption { description = "FileParameters are file parameters to the helm template"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourcesHelmFileParameters" "name" []); @@ -39101,6 +43974,14 @@ with lib; let description = "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values"; type = types.nullOr types.bool; }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; + "namespace" = mkOption { + description = "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace."; + type = types.nullOr types.str; + }; "parameters" = mkOption { description = "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation"; type = types.nullOr (coerceAttrsOfSubmodulesToListByKey "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourcesHelmParameters" "name" []); @@ -39118,6 +43999,14 @@ with lib; let description = "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)"; type = types.nullOr types.bool; }; + "skipSchemaValidation" = mkOption { + description = "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)"; + type = types.nullOr types.bool; + }; + "skipTests" = mkOption { + description = "SkipTests skips test manifest installation step (Helm's --skip-tests)."; + type = types.nullOr types.bool; + }; "valueFiles" = mkOption { description = "ValuesFiles is a list of Helm value files to use when generating a template"; type = types.nullOr (types.listOf types.str); @@ -39137,12 +44026,17 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "fileParameters" = mkOverride 1002 null; "ignoreMissingValueFiles" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; "parameters" = mkOverride 1002 null; "passCredentials" = mkOverride 1002 null; "releaseName" = mkOverride 1002 null; "skipCrds" = mkOverride 1002 null; + "skipSchemaValidation" = mkOverride 1002 null; + "skipTests" = mkOverride 1002 null; "valueFiles" = mkOverride 1002 null; "values" = mkOverride 1002 null; "valuesObject" = mkOverride 1002 null; @@ -39190,6 +44084,10 @@ with lib; let }; "argoproj.io.v1alpha1.ApplicationStatusSyncComparedToSourcesKustomize" = { options = { + "apiVersions" = mkOption { + description = "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind."; + type = types.nullOr (types.listOf types.str); + }; "commonAnnotations" = mkOption { description = "CommonAnnotations is a list of additional annotations to add to rendered manifests"; type = types.nullOr (types.attrsOf types.str); @@ -39218,6 +44116,10 @@ with lib; let description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); }; + "kubeVersion" = mkOption { + description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; + type = types.nullOr types.str; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -39250,6 +44152,7 @@ with lib; let }; config = { + "apiVersions" = mkOverride 1002 null; "commonAnnotations" = mkOverride 1002 null; "commonAnnotationsEnvsubst" = mkOverride 1002 null; "commonLabels" = mkOverride 1002 null; @@ -39257,6 +44160,7 @@ with lib; let "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; "images" = mkOverride 1002 null; + "kubeVersion" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -39421,7 +44325,7 @@ in { resources = { "argoproj.io"."v1alpha1"."AppProject" = mkOption { - 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)"; + description = "AppProject provides a logical grouping of applications, providing controls for:\n* where the apps may deploy to (cluster whitelist)\n* what may be deployed (repository whitelist, resource whitelist/blacklist)\n* who can access these applications (roles, OIDC group claims bindings)\n* and what they can do (RBAC policies)\n* automation access to these roles (JWT tokens)"; type = types.attrsOf (submoduleForDefinition "argoproj.io.v1alpha1.AppProject" "appprojects" "AppProject" "argoproj.io" "v1alpha1"); default = {}; }; @@ -39438,7 +44342,7 @@ in { } // { "appProjects" = mkOption { - 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)"; + description = "AppProject provides a logical grouping of applications, providing controls for:\n* where the apps may deploy to (cluster whitelist)\n* what may be deployed (repository whitelist, resource whitelist/blacklist)\n* who can access these applications (roles, OIDC group claims bindings)\n* and what they can do (RBAC policies)\n* automation access to these roles (JWT tokens)"; type = types.attrsOf (submoduleForDefinition "argoproj.io.v1alpha1.AppProject" "appprojects" "AppProject" "argoproj.io" "v1alpha1"); default = {}; }; diff --git a/pkgs/generators/default.nix b/pkgs/generators/default.nix index bb5ea6b..2b75e67 100644 --- a/pkgs/generators/default.nix +++ b/pkgs/generators/default.nix @@ -18,8 +18,8 @@ in { src = pkgs.fetchFromGitHub { owner = "argoproj"; repo = "argo-cd"; - rev = "v2.12.3"; - hash = "sha256-qSrMqByhOitRltYaVjIeubuoTR74x/pQ1Ad+uTPdpJU="; + rev = "v2.14.2"; + hash = "sha256-HiKTJ6X8py/mIcU+jSRonvYBxQMZ6Onzmu0/SorvPKg="; }; crds = [ "manifests/crds/application-crd.yaml" From a2ba79112187a6e7b1a5b4ca41bb30a8ef9c5a65 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Fri, 28 Feb 2025 12:24:08 +0100 Subject: [PATCH 25/31] Rename resourceImports to applicationImports and syncPolicy.autoSync.enabled to enable --- docs/build-options-doc.nix | 2 +- docs/build-options-search.nix | 2 +- docs/user_guide/typed_resources.md | 6 +++--- modules/applications.nix | 10 +++++++--- modules/applications/default.nix | 8 +++++--- modules/default.nix | 2 +- modules/nixidy.nix | 8 ++++++-- modules/testing/default.nix | 2 +- modules/testing/eval.nix | 6 +++--- tests/defaults.nix | 4 ++-- 10 files changed, 30 insertions(+), 20 deletions(-) diff --git a/docs/build-options-doc.nix b/docs/build-options-doc.nix index 3c210ae..9084648 100644 --- a/docs/build-options-doc.nix +++ b/docs/build-options-doc.nix @@ -50,7 +50,7 @@ import ../modules/modules.nix ++ [ { - nixidy.resourceImports = [resourcesCompat]; + nixidy.applicationImports = [resourcesCompat]; } ]; specialArgs = { diff --git a/docs/build-options-search.nix b/docs/build-options-search.nix index 07f2857..3e72542 100644 --- a/docs/build-options-search.nix +++ b/docs/build-options-search.nix @@ -19,7 +19,7 @@ import ../modules/modules.nix ++ [ { - nixidy.resourceImports = [ + nixidy.applicationImports = [ (kubenix + "/modules/generated/v1.30.nix") ../modules/generated/argocd.nix ]; diff --git a/docs/user_guide/typed_resources.md b/docs/user_guide/typed_resources.md index 19a03cb..60140d7 100644 --- a/docs/user_guide/typed_resources.md +++ b/docs/user_guide/typed_resources.md @@ -59,7 +59,7 @@ Thankfully a code generator for generating resource options from CRDs is provide } ``` - Then running `nix build .#generators.cilium` will produce a nix file that can be copied into place in your repository. After that the generated file has to be added to `nixidy.resourceImports` in your nixidy modules. + Then running `nix build .#generators.cilium` will produce a nix file that can be copied into place in your repository. After that the generated file has to be added to `nixidy.applicationImports` in your nixidy modules. === "flake-less" As an example, to generate resource options for Cilium's `CiliumNetworkPolicy` and `CiliumClusterwideNetworkPolicy` the following can be defined in `generate.nix`. @@ -97,11 +97,11 @@ Thankfully a code generator for generating resource options from CRDs is provide } ``` - Then running `nix-build generate.nix -A cilium` will produce a nix file that can be copied into place in your repository. After that the generated file has to be added to `nixidy.resourceImports` in your nixidy modules. + Then running `nix-build generate.nix -A cilium` will produce a nix file that can be copied into place in your repository. After that the generated file has to be added to `nixidy.applicationImports` in your nixidy modules. ```nix title="env/dev.nix" { - nixidy.resourceImports = [ + nixidy.applicationImports = [ ./generated/cilium.nix ]; } diff --git a/modules/applications.nix b/modules/applications.nix index 7c440cf..cf3691b 100644 --- a/modules/applications.nix +++ b/modules/applications.nix @@ -3,11 +3,15 @@ config, ... }: { + imports = [ + (lib.mkRenamedOptionModule ["nixidy" "resourceImports"] ["nixidy" "applicationImports"]) + ]; + options = with lib; { applications = mkOption { type = with types; attrsOf (submoduleWith { - modules = [./applications] ++ config.nixidy.resourceImports; + modules = [./applications] ++ config.nixidy.applicationImports; specialArgs.nixidyDefaults = config.nixidy.defaults; }); default = {}; @@ -44,10 +48,10 @@ }; }; - nixidy.resourceImports = mkOption { + nixidy.applicationImports = mkOption { type = with types; listOf (oneOf [package path (functionTo attrs)]); default = []; - description = "List of modules to import for resource defintion options."; + description = "List of modules to import into `applications.*` submodule (most useful for resource definition options)."; }; }; } diff --git a/modules/applications/default.nix b/modules/applications/default.nix index 62e53e6..c2a2ccb 100644 --- a/modules/applications/default.nix +++ b/modules/applications/default.nix @@ -76,6 +76,8 @@ in { ./kustomize.nix ./yamls.nix ./namespaced.nix + + (lib.mkRenamedOptionModule ["syncPolicy" "autoSync" "enabled"] ["syncPolicy" "autoSync" "enable"]) ]; options = with lib; { @@ -136,10 +138,10 @@ in { }; syncPolicy = { autoSync = { - enabled = mkOption { + enable = mkOption { type = types.bool; - default = nixidyDefaults.syncPolicy.autoSync.enabled; - defaultText = literalExpression "config.nixidy.defaults.syncPolicy.autoSync.enabled"; + default = nixidyDefaults.syncPolicy.autoSync.enable; + defaultText = literalExpression "config.nixidy.defaults.syncPolicy.autoSync.enable"; description = '' Specifies if application should automatically sync. ''; diff --git a/modules/default.nix b/modules/default.nix index a596907..356d18d 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -17,7 +17,7 @@ ++ nixidyModules ++ [ { - nixidy.resourceImports = [ + nixidy.applicationImports = [ (kubenix + "/modules/generated/v1.30.nix") ./generated/argocd.nix ]; diff --git a/modules/nixidy.nix b/modules/nixidy.nix index 2feb8bd..ad09253 100644 --- a/modules/nixidy.nix +++ b/modules/nixidy.nix @@ -20,6 +20,10 @@ }; }; in { + imports = [ + (lib.mkRenamedOptionModule ["nixidy" "defaults" "syncPolicy" "autoSync" "enabled"] ["nixidy" "defaults" "syncPolicy" "autoSync" "enable"]) + ]; + options.nixidy = with lib; { target = { repository = mkOption { @@ -87,7 +91,7 @@ in { syncPolicy = { autoSync = { - enabled = mkOption { + enable = mkOption { type = types.bool; default = false; description = '' @@ -208,7 +212,7 @@ in { inherit (app.destination) server; }; syncPolicy = - (lib.optionalAttrs app.syncPolicy.autoSync.enabled { + (lib.optionalAttrs app.syncPolicy.autoSync.enable { automated = { inherit (app.syncPolicy.autoSync) prune selfHeal; }; diff --git a/modules/testing/default.nix b/modules/testing/default.nix index d6046e5..305f3cd 100644 --- a/modules/testing/default.nix +++ b/modules/testing/default.nix @@ -7,7 +7,7 @@ testModule = { imports = [./eval.nix]; - _module.args.resourceImports = config.nixidy.resourceImports; + _module.args.applicationImports = config.nixidy.applicationImports; }; in { options.testing = with lib; { diff --git a/modules/testing/eval.nix b/modules/testing/eval.nix index 467d98a..ea82dbc 100644 --- a/modules/testing/eval.nix +++ b/modules/testing/eval.nix @@ -1,7 +1,7 @@ { lib, config, - resourceImports, + applicationImports, ... }: let testModuleOptions = { @@ -55,8 +55,8 @@ { nixidy = { - # Import all resourceImports - inherit resourceImports; + # Import all applicationImports + inherit applicationImports; # Set nixidy target target = { diff --git a/tests/defaults.nix b/tests/defaults.nix index 83716c8..89e6865 100644 --- a/tests/defaults.nix +++ b/tests/defaults.nix @@ -12,7 +12,7 @@ in { # Turn on auto sync syncPolicy = { autoSync = { - enabled = true; + enable = true; prune = true; selfHeal = true; }; @@ -26,7 +26,7 @@ in { # Create an applicaton that does override defaults applications.test2 = { destination.server = "https://kubernetes.default.svc:6443"; - syncPolicy.autoSync.enabled = false; + syncPolicy.autoSync.enable = false; }; test = with lib; { From 13ead8c70e616f017e804f0a995c269eabdf76fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Cholewi=C5=84ski?= Date: Tue, 4 Mar 2025 15:00:51 +0100 Subject: [PATCH 26/31] Add ignoreDifferences option to application module --- modules/applications/default.nix | 48 ++++++++++++++++++++++++++++++++ modules/nixidy.nix | 1 + 2 files changed, 49 insertions(+) diff --git a/modules/applications/default.nix b/modules/applications/default.nix index c2a2ccb..f090201 100644 --- a/modules/applications/default.nix +++ b/modules/applications/default.nix @@ -263,6 +263,54 @@ in { ''; }; }; + ignoreDifferences = let + submoduleType = types.submodule ({name, ...}: { + options = { + group = mkOption { + description = ""; + type = types.nullOr types.str; + }; + jqPathExpressions = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; + jsonPointers = mkOption { + description = ""; + type = types.nullOr (types.listOf types.str); + }; + kind = mkOption { + description = ""; + type = types.str; + }; + managedFieldsManagers = mkOption { + description = "ManagedFieldsManagers is a list of trusted managers. Fields mutated by those managers will take precedence over the\ndesired state defined in the SCM and won't be displayed in diffs"; + type = types.nullOr (types.listOf types.str); + }; + name = mkOption { + description = ""; + type = types.nullOr types.str; + }; + namespace = mkOption { + description = ""; + type = types.nullOr types.str; + }; + }; + + config = { + "group" = mkOverride 1002 null; + "jqPathExpressions" = mkOverride 1002 null; + "jsonPointers" = mkOverride 1002 null; + "managedFieldsManagers" = mkOverride 1002 null; + "name" = mkOverride 1002 null; + "namespace" = mkOverride 1002 null; + }; + }); + in + mkOption { + type = with types; nullOr (listOf submoduleType); + description = "IgnoreDifferences is a list of resources and their fields which should be ignored during comparison"; + default = null; + }; objects = mkOption { type = with types; listOf attrs; apply = unique; diff --git a/modules/nixidy.nix b/modules/nixidy.nix index ad09253..3c92c4e 100644 --- a/modules/nixidy.nix +++ b/modules/nixidy.nix @@ -220,6 +220,7 @@ in { // (lib.optionalAttrs (lib.length app.syncPolicy.finalSyncOpts > 0) { syncOptions = app.syncPolicy.finalSyncOpts; }); + inherit (app) ignoreDifferences; }; }; } From bd48a31a9d404827bc03ece6ca5312eb6e1094be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Cholewi=C5=84ski?= Date: Fri, 28 Mar 2025 11:33:45 +0100 Subject: [PATCH 27/31] Fix ignoreDifferences defaults and change type to attribute set --- modules/applications/default.nix | 17 +++++++---------- modules/nixidy.nix | 6 +++++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/modules/applications/default.nix b/modules/applications/default.nix index f090201..dc35911 100644 --- a/modules/applications/default.nix +++ b/modules/applications/default.nix @@ -268,14 +268,17 @@ in { options = { group = mkOption { description = ""; + default = null; type = types.nullOr types.str; }; jqPathExpressions = mkOption { description = ""; + default = null; type = types.nullOr (types.listOf types.str); }; jsonPointers = mkOption { description = ""; + default = null; type = types.nullOr (types.listOf types.str); }; kind = mkOption { @@ -284,30 +287,24 @@ in { }; managedFieldsManagers = mkOption { description = "ManagedFieldsManagers is a list of trusted managers. Fields mutated by those managers will take precedence over the\ndesired state defined in the SCM and won't be displayed in diffs"; + default = null; type = types.nullOr (types.listOf types.str); }; name = mkOption { description = ""; + default = null; type = types.nullOr types.str; }; namespace = mkOption { description = ""; + default = null; type = types.nullOr types.str; }; }; - - config = { - "group" = mkOverride 1002 null; - "jqPathExpressions" = mkOverride 1002 null; - "jsonPointers" = mkOverride 1002 null; - "managedFieldsManagers" = mkOverride 1002 null; - "name" = mkOverride 1002 null; - "namespace" = mkOverride 1002 null; - }; }); in mkOption { - type = with types; nullOr (listOf submoduleType); + type = with types; nullOr (attrsOf submoduleType); description = "IgnoreDifferences is a list of resources and their fields which should be ignored during comparison"; default = null; }; diff --git a/modules/nixidy.nix b/modules/nixidy.nix index 3c92c4e..8f0de41 100644 --- a/modules/nixidy.nix +++ b/modules/nixidy.nix @@ -220,7 +220,11 @@ in { // (lib.optionalAttrs (lib.length app.syncPolicy.finalSyncOpts > 0) { syncOptions = app.syncPolicy.finalSyncOpts; }); - inherit (app) ignoreDifferences; + + ignoreDifferences = + if builtins.isAttrs app.ignoreDifferences + then lib.mapAttrsToList (kind: value: value // {inherit kind;}) app.ignoreDifferences + else null; }; }; } From a1a6e837a33bfebe912f4292dcdd9c7a9611dbbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Cholewi=C5=84ski?= Date: Sun, 30 Mar 2025 20:18:05 +0200 Subject: [PATCH 28/31] ignoreDiffs: default kind, more docs --- modules/applications/default.nix | 7 ++++++- modules/nixidy.nix | 7 +------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/applications/default.nix b/modules/applications/default.nix index dc35911..5294253 100644 --- a/modules/applications/default.nix +++ b/modules/applications/default.nix @@ -283,6 +283,7 @@ in { }; kind = mkOption { description = ""; + default = name; type = types.str; }; managedFieldsManagers = mkOption { @@ -305,7 +306,11 @@ in { in mkOption { type = with types; nullOr (attrsOf submoduleType); - description = "IgnoreDifferences is a list of resources and their fields which should be ignored during comparison"; + description = '' + IgnoreDifferences is a list of resources and their fields which should be ignored during comparison. + + More info [here](https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/). + ''; default = null; }; objects = mkOption { diff --git a/modules/nixidy.nix b/modules/nixidy.nix index 8f0de41..60c5932 100644 --- a/modules/nixidy.nix +++ b/modules/nixidy.nix @@ -197,7 +197,7 @@ in { else null; }; spec = { - inherit (app) project; + inherit (app) project ignoreDifferences; source = { repoURL = cfg.target.repository; @@ -220,11 +220,6 @@ in { // (lib.optionalAttrs (lib.length app.syncPolicy.finalSyncOpts > 0) { syncOptions = app.syncPolicy.finalSyncOpts; }); - - ignoreDifferences = - if builtins.isAttrs app.ignoreDifferences - then lib.mapAttrsToList (kind: value: value // {inherit kind;}) app.ignoreDifferences - else null; }; }; } From 280ea71c48f392cbc46c39c8ec0375bb133d4b8c Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Tue, 13 May 2025 09:55:28 +0200 Subject: [PATCH 29/31] Update Argo CD generated options to v3.0.0 --- modules/generated/argocd.nix | 642 ++++++++++++++++++++++++++++++++++- pkgs/generators/default.nix | 4 +- 2 files changed, 633 insertions(+), 13 deletions(-) diff --git a/modules/generated/argocd.nix b/modules/generated/argocd.nix index 4d4dc26..3f48cd7 100644 --- a/modules/generated/argocd.nix +++ b/modules/generated/argocd.nix @@ -469,6 +469,10 @@ with lib; let }; "argoproj.io.v1alpha1.AppProjectSpecSyncWindows" = { options = { + "andOperator" = mkOption { + description = "UseAndOperator use AND operator for matching applications, namespaces and clusters instead of the default OR operator"; + type = types.nullOr types.bool; + }; "applications" = mkOption { description = "Applications contains a list of applications that the window will apply to"; type = types.nullOr (types.listOf types.str); @@ -504,6 +508,7 @@ with lib; let }; config = { + "andOperator" = mkOverride 1002 null; "applications" = mkOverride 1002 null; "clusters" = mkOverride 1002 null; "duration" = mkOverride 1002 null; @@ -1048,6 +1053,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -1056,6 +1065,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -1095,8 +1108,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -1554,6 +1569,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -1562,6 +1581,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -1601,8 +1624,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -2523,6 +2548,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -2531,6 +2560,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -2570,8 +2603,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -3029,6 +3064,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -3037,6 +3076,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -3076,8 +3119,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -3910,6 +3955,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -3918,6 +3967,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -3957,8 +4010,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -4416,6 +4471,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -4424,6 +4483,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -4463,8 +4526,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -5304,6 +5369,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -5312,6 +5381,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -5351,8 +5424,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -5810,6 +5885,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -5818,6 +5897,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -5857,8 +5940,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -6649,6 +6734,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -6657,6 +6746,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -6696,8 +6789,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -7155,6 +7250,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -7163,6 +7262,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -7202,8 +7305,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -8118,6 +8223,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -8126,6 +8235,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -8165,8 +8278,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -8624,6 +8739,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -8632,6 +8751,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -8671,8 +8794,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -9505,6 +9630,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -9513,6 +9642,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -9552,8 +9685,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -10011,6 +10146,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -10019,6 +10158,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -10058,8 +10201,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -10899,6 +11044,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -10907,6 +11056,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -10946,8 +11099,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -11405,6 +11560,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -11413,6 +11572,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -11452,8 +11615,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -12244,6 +12409,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -12252,6 +12421,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -12291,8 +12464,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -12750,6 +12925,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -12758,6 +12937,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -12797,8 +12980,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -13620,6 +13805,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -13628,6 +13817,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -13667,8 +13860,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -14126,6 +14321,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -14134,6 +14333,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -14173,8 +14376,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -14475,6 +14680,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestTemplate"); }; + "values" = mkOption { + description = ""; + type = types.nullOr (types.attrsOf types.str); + }; }; config = { @@ -14487,6 +14696,7 @@ with lib; let "gitlab" = mkOverride 1002 null; "requeueAfterSeconds" = mkOverride 1002 null; "template" = mkOverride 1002 null; + "values" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMatrixGeneratorsPullRequestAzuredevops" = { @@ -15408,6 +15618,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -15416,6 +15630,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -15455,8 +15673,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -15914,6 +16134,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -15922,6 +16146,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -15961,8 +16189,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -17228,6 +17458,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -17236,6 +17470,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -17275,8 +17513,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -17734,6 +17974,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -17742,6 +17986,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -17781,8 +18029,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -18588,6 +18838,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -18596,6 +18850,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -18635,8 +18893,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -19094,6 +19354,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -19102,6 +19366,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -19141,8 +19409,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -20061,6 +20331,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -20069,6 +20343,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -20108,8 +20386,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -20567,6 +20847,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -20575,6 +20859,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -20614,8 +20902,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -21448,6 +21738,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -21456,6 +21750,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -21495,8 +21793,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -21954,6 +22254,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -21962,6 +22266,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -22001,8 +22309,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -22842,6 +23152,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -22850,6 +23164,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -22889,8 +23207,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -23348,6 +23668,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -23356,6 +23680,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -23395,8 +23723,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -24187,6 +24517,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -24195,6 +24529,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -24234,8 +24572,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -24693,6 +25033,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -24701,6 +25045,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -24740,8 +25088,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -25563,6 +25913,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -25571,6 +25925,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -25610,8 +25968,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -26069,6 +26429,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -26077,6 +26441,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -26116,8 +26484,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -26418,6 +26788,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestTemplate"); }; + "values" = mkOption { + description = ""; + type = types.nullOr (types.attrsOf types.str); + }; }; config = { @@ -26430,6 +26804,7 @@ with lib; let "gitlab" = mkOverride 1002 null; "requeueAfterSeconds" = mkOverride 1002 null; "template" = mkOverride 1002 null; + "values" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsMergeGeneratorsPullRequestAzuredevops" = { @@ -27351,6 +27726,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -27359,6 +27738,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -27398,8 +27781,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -27857,6 +28242,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -27865,6 +28254,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -27904,8 +28297,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -29171,6 +29566,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -29179,6 +29578,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -29218,8 +29621,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -29677,6 +30082,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -29685,6 +30094,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -29724,8 +30137,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -30531,6 +30946,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -30539,6 +30958,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -30578,8 +31001,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -31037,6 +31462,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -31045,6 +31474,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -31084,8 +31517,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -31907,6 +32342,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -31915,6 +32354,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -31954,8 +32397,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -32413,6 +32858,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -32421,6 +32870,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -32460,8 +32913,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -32762,6 +33217,10 @@ with lib; let description = ""; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestTemplate"); }; + "values" = mkOption { + description = ""; + type = types.nullOr (types.attrsOf types.str); + }; }; config = { @@ -32774,6 +33233,7 @@ with lib; let "gitlab" = mkOverride 1002 null; "requeueAfterSeconds" = mkOverride 1002 null; "template" = mkOverride 1002 null; + "values" = mkOverride 1002 null; }; }; "argoproj.io.v1alpha1.ApplicationSetSpecGeneratorsPullRequestAzuredevops" = { @@ -33695,6 +34155,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -33703,6 +34167,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -33742,8 +34210,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -34201,6 +34671,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -34209,6 +34683,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -34248,8 +34726,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -35515,6 +35995,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -35523,6 +36007,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -35562,8 +36050,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -36021,6 +36511,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -36029,6 +36523,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -36068,8 +36566,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -36999,6 +37499,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -37007,6 +37511,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -37046,8 +37554,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -37505,6 +38015,10 @@ with lib; let description = ""; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "images" = mkOption { description = ""; type = types.nullOr (types.listOf types.str); @@ -37513,6 +38027,10 @@ with lib; let description = ""; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = ""; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = ""; type = types.nullOr types.bool; @@ -37552,8 +38070,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -38475,6 +38995,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -38483,6 +39007,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -38522,8 +39050,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -38981,6 +39511,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -38989,6 +39523,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -39028,8 +39566,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -39775,6 +40315,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -39783,6 +40327,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -39822,8 +40370,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -40281,6 +40831,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -40289,6 +40843,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -40328,8 +40886,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -41013,6 +41573,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -41021,6 +41585,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -41060,8 +41628,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -41519,6 +42089,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -41527,6 +42101,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -41566,8 +42144,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -42173,6 +42753,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -42181,6 +42765,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -42220,8 +42808,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -42679,6 +43269,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -42687,6 +43281,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -42726,8 +43324,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -42888,47 +43488,47 @@ with lib; let "argoproj.io.v1alpha1.ApplicationStatusResources" = { options = { "group" = mkOption { - description = ""; + description = "Group represents the API group of the resource (e.g., \"apps\" for Deployments)."; type = types.nullOr types.str; }; "health" = mkOption { - description = "HealthStatus contains information about the currently observed health state of an application or resource"; + description = "Health indicates the health status of the resource (e.g., Healthy, Degraded, Progressing)."; type = types.nullOr (submoduleOf "argoproj.io.v1alpha1.ApplicationStatusResourcesHealth"); }; "hook" = mkOption { - description = ""; + description = "Hook is true if the resource is used as a lifecycle hook in an Argo CD application."; type = types.nullOr types.bool; }; "kind" = mkOption { - description = ""; + description = "Kind specifies the type of the resource (e.g., \"Deployment\", \"Service\")."; type = types.nullOr types.str; }; "name" = mkOption { - description = ""; + description = "Name is the unique name of the resource within the namespace."; type = types.nullOr types.str; }; "namespace" = mkOption { - description = ""; + description = "Namespace defines the Kubernetes namespace where the resource is located."; type = types.nullOr types.str; }; "requiresDeletionConfirmation" = mkOption { - description = ""; + description = "RequiresDeletionConfirmation is true if the resource requires explicit user confirmation before deletion."; type = types.nullOr types.bool; }; "requiresPruning" = mkOption { - description = ""; + description = "RequiresPruning is true if the resource needs to be pruned (deleted) as part of synchronization."; type = types.nullOr types.bool; }; "status" = mkOption { - description = "SyncStatusCode is a type which represents possible comparison results"; + description = "Status represents the synchronization state of the resource (e.g., Synced, OutOfSync)."; type = types.nullOr types.str; }; "syncWave" = mkOption { - description = ""; + description = "SyncWave determines the order in which resources are applied during a sync operation.\nLower values are applied first."; type = types.nullOr types.int; }; "version" = mkOption { - description = ""; + description = "Version indicates the API version of the resource (e.g., \"v1\", \"v1beta1\")."; type = types.nullOr types.str; }; }; @@ -43606,6 +44206,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -43614,6 +44218,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -43653,8 +44261,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; @@ -44112,6 +44722,10 @@ with lib; let description = "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps"; type = types.nullOr types.bool; }; + "ignoreMissingComponents" = mkOption { + description = "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file"; + type = types.nullOr types.bool; + }; "images" = mkOption { description = "Images is a list of Kustomize image override specifications"; type = types.nullOr (types.listOf types.str); @@ -44120,6 +44734,10 @@ with lib; let description = "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster."; type = types.nullOr types.str; }; + "labelIncludeTemplates" = mkOption { + description = "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not"; + type = types.nullOr types.bool; + }; "labelWithoutSelector" = mkOption { description = "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not"; type = types.nullOr types.bool; @@ -44159,8 +44777,10 @@ with lib; let "components" = mkOverride 1002 null; "forceCommonAnnotations" = mkOverride 1002 null; "forceCommonLabels" = mkOverride 1002 null; + "ignoreMissingComponents" = mkOverride 1002 null; "images" = mkOverride 1002 null; "kubeVersion" = mkOverride 1002 null; + "labelIncludeTemplates" = mkOverride 1002 null; "labelWithoutSelector" = mkOverride 1002 null; "namePrefix" = mkOverride 1002 null; "nameSuffix" = mkOverride 1002 null; diff --git a/pkgs/generators/default.nix b/pkgs/generators/default.nix index 2b75e67..478694c 100644 --- a/pkgs/generators/default.nix +++ b/pkgs/generators/default.nix @@ -18,8 +18,8 @@ in { src = pkgs.fetchFromGitHub { owner = "argoproj"; repo = "argo-cd"; - rev = "v2.14.2"; - hash = "sha256-HiKTJ6X8py/mIcU+jSRonvYBxQMZ6Onzmu0/SorvPKg="; + rev = "v3.0.0"; + hash = "sha256-g401mpNEhCNe8H6lk2HToAEZlZa16Py8ozK2z5/UozA="; }; crds = [ "manifests/crds/application-crd.yaml" From 90c16063232902c14bb299e3ff6cbad349bf93b4 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Fri, 6 Jun 2025 14:42:10 +0200 Subject: [PATCH 30/31] Add LLM generated architectural overview --- docs/developer_guide/architecture.md | 176 +++++++++++++++++++++++++++ docs/docs.nix | 8 +- 2 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 docs/developer_guide/architecture.md diff --git a/docs/developer_guide/architecture.md b/docs/developer_guide/architecture.md new file mode 100644 index 0000000..1349279 --- /dev/null +++ b/docs/developer_guide/architecture.md @@ -0,0 +1,176 @@ +# Architectural Overview + +!!! warning "LLM Generated" + + This entire document is generated by an LLM by feeding the output of [files-to-prompt](https://github.com/simonw/files-to-prompt) to Gemini. + +Nixidy is a tool designed to manage Kubernetes clusters declaratively using the Nix package manager and its language. It integrates with Argo CD by generating plain Kubernetes YAML manifests, adhering to the GitOps philosophy and the "Rendered Manifests Pattern". + +## Core Concepts + +* **Declarative Configuration with Nix:** Users define their entire Kubernetes cluster state, including applications, resources, Helm charts, and Kustomize overlays, within Nix expressions. +* **NixOS Module System:** Nixidy leverages a module system similar to NixOS, allowing for structured, modular, and recursively merged configurations. This provides strong typing and discoverability for Kubernetes resource options. +* **Manifest Generation:** The primary output of Nixidy is a set of plain Kubernetes YAML manifests and ArgoCD `Application` custom resources. These are intended to be committed to a Git repository. +* **Argo CD Integration:** Nixidy generates manifests in a structure that is easily consumable by Argo CD, typically following an "App of Apps" pattern for bootstrapping. +* **No Runtime Dependencies on Nix in Cluster:** Nixidy is a build-time tool. The generated YAMLs are standard Kubernetes manifests that Argo CD can deploy without any Nix-specific components in the cluster. +* **Flake-centric (but supports flake-less):** While Nixidy can be used without Nix Flakes, its primary development and examples lean towards a Flake-based setup for managing dependencies and outputs. + +## Key Architectural Components + +Nixidy's architecture can be broken down into several key areas: + +1. **User Configuration (Nix Files):** + * **Entrypoint:** Typically a `flake.nix` (for Flakes) or a `default.nix` (for non-Flakes). + * **Environment Definition:** Users define one or more "environments" (e.g., `dev`, `prod`) using `nixidy.lib.mkEnv` or `nixidy.lib.mkEnvs`. Each environment is a collection of Nixidy modules. + * *(Document 6: `make-env.nix`, Document 13: Getting Started)* + * **Application Modules:** Within these environment modules, users define `applications..*` options to describe their desired state. This includes: + * Kubernetes resources directly in Nix syntax (`applications..resources`). + * Helm chart releases (`applications..helm.releases`). + * Kustomize applications (`applications..kustomize.applications`). + * Raw YAML strings (`applications..yamls`). + * *(Document 2: README example, Document 27: `applications.nix`, Document 32: `modules/applications/default.nix`)* + * **Nixidy Library (`lib.*`):** Nixidy provides a set of helper functions (e.g., `lib.helm.downloadHelmChart`, `lib.kube.fromYAML`) available to user modules for tasks like fetching charts or parsing YAML. + * *(Document 22: `lib/default.nix`, Document 23: `lib/helm.nix`, Document 24: `lib/kube.nix`, Document 25: `lib/kustomize.nix`)* + +2. **Nixidy Core Engine:** + * **Module System:** Located primarily in `./modules`. + * `modules/default.nix` (Document 29): Orchestrates the evaluation of user and internal Nixidy modules. It injects an extended `lib` (Nixpkgs lib + Nixidy lib) and other special arguments. + * `modules/nixidy.nix` (Document 31): Defines global `nixidy.*` configurations like target Git repository details, default sync policies for ArgoCD applications, and App of Apps settings. + * `modules/applications/*`: A collection of modules that define how applications are processed: + * `applications.nix` (Document 27): Defines the top-level `applications` option. + * `default.nix` (Document 32): Defines the submodule for a single application, collecting all resources (from Nix, Helm, Kustomize, YAMLs) into `config.objects`. + * `helm.nix` (Document 33), `kustomize.nix` (Document 34), `yamls.nix` (Document 37): Handle the specifics of rendering Helm charts, Kustomize overlays, and parsing raw YAMLs, respectively. They utilize functions from `nixidy.lib`. + * `namespaced.nix` (Document 36): Sets default namespaces for namespaced Kubernetes resources. + * **Build Logic (`modules/build.nix`, Document 28):** + * Takes the evaluated `config.applications.*.objects` (a list of Nix attribute sets representing Kubernetes resources). + * Generates the final output directory structure: + * A directory for each application (e.g., `result/demo/`). + * YAML files for each resource within its application directory (e.g., `Deployment-nginx.yaml`). Uses `yq-go` for pretty-printing YAML. + * An `apps/` directory containing ArgoCD `Application` CRs for each user-defined application. + * Produces Nix derivations for different purposes: + * `environmentPackage`: Contains all generated manifests for an environment. + * `activationPackage`: Contains `environmentPackage` plus an `activate` script (for `nixidy switch`). + * `bootstrapPackage`: Contains the "App of Apps" ArgoCD `Application` manifest (for `nixidy bootstrap`). + +3. **Nixidy CLI (`nixidy/nixidy`, Document 42):** + * A Bash script that acts as a user-friendly wrapper around underlying `nix` commands (`nix build`, `nix eval`, `nix-build`, `nix-instantiate`). + * **Commands:** + * `nixidy build `: Builds the `environmentPackage`. + * `nixidy switch `: Builds the `activationPackage` and runs its `activate` script to sync manifests to the local filesystem (defined by `nixidy.target.rootPath`). + * `nixidy info `: Displays metadata about the specified environment (repository, branch). + * `nixidy bootstrap `: Outputs the "App of Apps" ArgoCD `Application` manifest for initial cluster bootstrapping. + * Handles both Flake-based and traditional Nix (attribute-based) invocations. + * *(Document 43: `nixidy.nix` package definition)* + +4. **External Dependencies (Managed by Nix):** + * **Nixpkgs:** The standard Nix package collection, providing tools like `bash`, `jq`, `kubectl`, `yq-go`, etc. + * *(Document 3: `default.nix` top-level)* + * **Kubenix:** + * Primarily used for its pre-generated Nix modules that provide typed options for standard Kubernetes resources (e.g., `Deployment`, `Service`). Nixidy imports these options. + * Nixidy's CRD generator is also heavily inspired by Kubenix's. + * *(Document 2: Special Thanks, Document 3, Document 5, Document 10, Document 29)* + * **Nix-Kube-Generators (`kubelib`):** + * Provides the core Nix functions for rendering Helm charts and Kustomize overlays. Nixidy's `lib.helm` and `lib.kustomize` often wrap or re-export functions from `nix-kube-generators`. + * *(Document 2: Special Thanks, Document 3, Document 5, Document 22, Document 23, Document 25)* + +5. **CRD and Schema Generation:** + * **`fromCRD` Generator (`pkgs/generators/crd.nix`, Document 44):** + * Allows users to generate Nixidy-compatible Nix modules from Kubernetes Custom Resource Definition (CRD) YAML files. + * Uses `crd2jsonschema.py` (Document 45) to preprocess CRDs into a JSON schema format. + * Then, `jsonschema.nix` (Document 47) converts this JSON schema into Nix options. + * **Generated Modules:** The output is a Nix file (e.g., `modules/generated/argocd.nix` for ArgoCD CRDs, Document 38) that can be imported via `nixidy.applicationImports` to provide typed options for these CRDs. + * *(Document 18: Typed Resource Options)* + +6. **Documentation System (`docs/`):** + * Uses MkDocs with the Material theme. + * *(Document 12: `docs.nix`)* + * Documentation for configuration options, library functions, and user guides are generated/written. + * Option search is powered by NuschtOS. + * *(Document 8, 9, 10, 11)* + +7. **Testing Framework (`modules/testing/`, `tests/`):** + * **Module Tests (`modules/testing/default.nix`, `eval.nix`, Documents 39, 40):** A system for defining and running tests against Nixidy modules. Assertions are made on the evaluated Nix configuration. + * **Lib Tests (`lib/tests.nix`, Document 26):** Unit tests for functions in `nixidy.lib` using `nix-unit`. + * Example tests are in `tests/` (Documents 50-62, 70-72). + +8. **GitHub Actions (`actions/`):** + * Provides reusable GitHub Actions for CI/CD. + * `actions/build/action.yml` (Document 49): Wraps `nixidy build`. + * `actions/switch/action.yml` (Document 48): Wraps `nixidy switch`. + * *(Document 15: GitHub Actions user guide)* + +## Workflow / Data Flow + +1. **Definition:** The user defines their cluster configuration as Nix expressions using `nixidy.lib.mkEnv` and the Nixidy module system. This includes applications, their resources (Kubernetes objects, Helm charts, Kustomize overlays), namespaces, and ArgoCD settings. +2. **Evaluation & Processing (Triggered by `nixidy` CLI):** + * The Nixidy CLI invokes Nix to evaluate the user's configuration. + * Nixidy's core modules process the defined applications: + * Helm charts are templated via `nix-kube-generators`. + * Kustomize overlays are built using `kubectl kustomize` (via `nix-kube-generators`). + * Plain Nix resources and raw YAMLs are parsed. + * Resource options are validated against types (from Kubenix and generated CRD modules). + * Transformers (`lib.kube.*`) can be applied to modify rendered manifests. +3. **Manifest Generation:** + * The processed resources (now Nix attribute sets) are converted into Kubernetes YAML strings. + * `yq-go` is used to format these YAMLs. + * The manifests are organized into a directory structure: + * A root directory for the environment (e.g., `result/` or specified by `nixidy.target.rootPath`). + * Subdirectories for each application (e.g., `result/demo/`). + * An `apps/` subdirectory containing ArgoCD `Application` CRs that point to the respective application manifest directories. +4. **Deployment (GitOps via Argo CD):** + * The generated manifests in the `result/` directory (or the path configured with `nixidy switch`) are committed to a Git repository. + * Argo CD monitors this Git repository (or specific paths/branches within it). + * Argo CD applies the "App of Apps" manifest from the `apps/` directory, which in turn manages the deployment of individual applications from their respective manifest directories. + +## Architectural Diagram (Conceptual) + +``` mermaid +graph LR + subgraph User Input + A[Nix Configuration] -- Defines --> EnvSetup + end + + subgraph Nixidy Core + EnvSetup[nixidy.lib.mkEnv/.mkEnvs] -- Loads --> NixidyModules[Nixidy Internal Modules] + NixidyModules -- Uses --> NixidyLib[Nixidy Library] + NixidyLib -- Wraps --> Kubelib[nix-kube-generators] + NixidyModules -- Uses --> KubenixTypes[Kubenix Resource Types] + NixidyModules -- Uses --> GeneratedCRDTypes[Generated CRD Types] + + subgraph Resource Processing + direction LR + Helm[Helm Charts] --> NixidyModules + Kustomize[Kustomize Overlays] --> NixidyModules + NixResources[Direct Nix Resources] --> NixidyModules + YAMLStrings[Raw YAML Strings] --> NixidyModules + end + + NixidyModules -- Processes & Merges --> AppConfig[Evaluated Application Config] + AppConfig -- Input to --> BuildLogic[Build Logic] + BuildLogic -- Generates --> OutputPkgs["environmentPackage
activationPackage
bootstrapPackage"] + end + + subgraph Nixidy CLI + CLI_Build["nixidy build "] -- Triggers --> OutputPkgs + CLI_Switch["nixidy switch "] -- Triggers & Executes --> ActivateScript{activate script} + CLI_Info["nixidy info "] -- Reads --> EnvSetup + CLI_Bootstrap["nixidy bootstrap "] -- Outputs --> AppOfAppsYAML((App of Apps YAML)) + + OutputPkgs --> ResultDir[./result] + ActivateScript -- Rsyncs --> ResultDir + ResultDir --> ArgoCD[Argo CD] + end + + subgraph Tooling & Extensibility + CRDs[CRD YAMLs] --> CRDGen[CRD Generator] + CRDGen --> GeneratedCRDTypes + UserDocs[User Guides] --> DocsGen[Documentation Generator] + DocsGen --> DocsSite((Static Docs Site)) + NixidyModules --> Tests[Testing Framework] + GitHubActions[GitHub Actions] -- Wraps --> NixidyCLI[Nixidy CLI Commands] + end + + A --> NixidyCLI +``` + +This overview highlights Nixidy's reliance on the Nix ecosystem for configuration management and its role in producing standard, GitOps-friendly YAML manifests for Kubernetes deployment via Argo CD. Its modular design, coupled with dependencies like Kubenix and nix-kube-generators, allows it to offer a typed and declarative approach to Kubernetes management. diff --git a/docs/docs.nix b/docs/docs.nix index 23232d6..6ecc755 100644 --- a/docs/docs.nix +++ b/docs/docs.nix @@ -68,7 +68,11 @@ - admonition - pymdownx.highlight - pymdownx.inlinehilite - - pymdownx.superfences + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.details - pymdownx.tabbed: alternate_style: true @@ -83,6 +87,8 @@ - 'GitHub Actions': user_guide/github_actions.md - 'Transformers': user_guide/transformers.md - 'Using nixhelm': user_guide/using_nixhelm.md + - 'Developer Guide': + - 'Architectural Overview': developer_guide/architecture.md - Reference: - 'Library Functions': library.md - 'Configuration Options': options.md From 5d575cf07560873f0915d8b411a1242e16d61eb4 Mon Sep 17 00:00:00 2001 From: Arnar Gauti Ingason Date: Fri, 6 Jun 2025 18:13:49 +0200 Subject: [PATCH 31/31] Improve README.md --- README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0adc637..db5a925 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # nixidy +[![LICENSE](https://img.shields.io/github/license/arnarg/nixidy)](./LICENSE) + Kubernetes GitOps with nix and Argo CD. > Kind of sounds like Nix CD. @@ -93,6 +95,16 @@ tree -l result/ └── Service-nginx.yaml ``` +## Key Features + +- **Declarative Cluster Management**: Define your entire Kubernetes cluster state using the Nix language. +- **NixOS-like Experience**: Leverage the power and structure of the NixOS module system for your Kubernetes configurations. +- **GitOps Ready**: Generates plain YAML manifests, aligning with the "Rendered Manifests Pattern" for Argo CD. +- **Strongly-Typed Configuration**: Benefit from NixOS' type system for Kubernetes resources, catching errors early. +- **Simplified Multi-Environment Management**: Easily manage configurations for development, staging, production, etc. +- **Helm & Kustomize Integration**: Seamlessly incorporate existing Helm charts and Kustomize overlays. +- **Extensible**: Generate typed Nix options for your Custom Resource Definitions (CRDs). + ## Getting Started Take a look at the [getting started guide](https://arnarg.github.io/nixidy/user_guide/getting_started/). @@ -101,7 +113,7 @@ Take a look at the [getting started guide](https://arnarg.github.io/nixidy/user_ - [arnarg's cluster configuration](https://github.com/arnarg/cluster) -## Why? +## Why nixidy? It's desirable to manage Kubernetes clusters in a declarative way using a git repository as a source of truth for manifests that should be deployed into the cluster. One popular solution that is often used to achieve this goal is [Argo CD](https://argo-cd.readthedocs.io/). @@ -126,3 +138,11 @@ Therefore I made nixidy as an experiment to see if I can make something better ( [farcaller/nix-kube-generators](https://github.com/farcaller/nix-kube-generators) is used internally to pull and render Helm charts and some functions are re-exposed in the lib passed to modules in nixidy. [hall/kubenix](https://github.com/hall/kubenix) project has code generation of nix module options for every standard kubernetes resource. Instead of doing this work in nixidy I import their generated resource options. The resource option generation scripts in nixidy are also a slight modification of kubenix's. Without their work this wouldn't be possible in nixidy. + +## Contributing + +Contributions are welcome! Whether it's bug reports, feature requests, documentation improvements, or code contributions, please feel free to open an issue or pull request on our [GitHub repository](https://github.com/arnarg/nixidy). + +## License + +nixidy is licensed under the [MIT License](./LICENSE).