github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/jackal.schema.json (about)

     1  {
     2    "$schema": "http://json-schema.org/draft-04/schema#",
     3    "$ref": "#/definitions/JackalPackage",
     4    "definitions": {
     5      "BigBang": {
     6        "required": [
     7          "version"
     8        ],
     9        "properties": {
    10          "version": {
    11            "type": "string",
    12            "description": "The version of Big Bang to use"
    13          },
    14          "repo": {
    15            "type": "string",
    16            "description": "Override repo to pull Big Bang from instead of Repo One"
    17          },
    18          "valuesFiles": {
    19            "items": {
    20              "type": "string"
    21            },
    22            "type": "array",
    23            "description": "The list of values files to pass to Big Bang; these will be merged together"
    24          },
    25          "skipFlux": {
    26            "type": "boolean",
    27            "description": "Whether to skip deploying flux; Defaults to false"
    28          },
    29          "fluxPatchFiles": {
    30            "items": {
    31              "type": "string"
    32            },
    33            "type": "array",
    34            "description": "Optional paths to Flux kustomize strategic merge patch files"
    35          }
    36        },
    37        "additionalProperties": false,
    38        "type": "object",
    39        "patternProperties": {
    40          "^x-": {}
    41        }
    42      },
    43      "DeprecatedJackalComponentScripts": {
    44        "properties": {
    45          "showOutput": {
    46            "type": "boolean",
    47            "description": "Show the output of the script during package deployment"
    48          },
    49          "timeoutSeconds": {
    50            "type": "integer",
    51            "description": "Timeout in seconds for the script"
    52          },
    53          "retry": {
    54            "type": "boolean",
    55            "description": "Retry the script if it fails"
    56          },
    57          "prepare": {
    58            "items": {
    59              "type": "string"
    60            },
    61            "type": "array",
    62            "description": "Scripts to run before the component is added during package create"
    63          },
    64          "before": {
    65            "items": {
    66              "type": "string"
    67            },
    68            "type": "array",
    69            "description": "Scripts to run before the component is deployed"
    70          },
    71          "after": {
    72            "items": {
    73              "type": "string"
    74            },
    75            "type": "array",
    76            "description": "Scripts to run after the component successfully deploys"
    77          }
    78        },
    79        "additionalProperties": false,
    80        "type": "object",
    81        "patternProperties": {
    82          "^x-": {}
    83        }
    84      },
    85      "Shell": {
    86        "properties": {
    87          "windows": {
    88            "type": "string",
    89            "description": "(default 'powershell') Indicates a preference for the shell to use on Windows systems (note that choosing 'cmd' will turn off migrations like touch -> New-Item)",
    90            "examples": [
    91              "powershell",
    92              "cmd",
    93              "pwsh",
    94              "sh",
    95              "bash",
    96              "gsh"
    97            ]
    98          },
    99          "linux": {
   100            "type": "string",
   101            "description": "(default 'sh') Indicates a preference for the shell to use on Linux systems",
   102            "examples": [
   103              "sh",
   104              "bash",
   105              "fish",
   106              "zsh",
   107              "pwsh"
   108            ]
   109          },
   110          "darwin": {
   111            "type": "string",
   112            "description": "(default 'sh') Indicates a preference for the shell to use on macOS systems",
   113            "examples": [
   114              "sh",
   115              "bash",
   116              "fish",
   117              "zsh",
   118              "pwsh"
   119            ]
   120          }
   121        },
   122        "additionalProperties": false,
   123        "type": "object",
   124        "patternProperties": {
   125          "^x-": {}
   126        }
   127      },
   128      "JackalBuildData": {
   129        "required": [
   130          "terminal",
   131          "user",
   132          "architecture",
   133          "timestamp",
   134          "version"
   135        ],
   136        "properties": {
   137          "terminal": {
   138            "type": "string",
   139            "description": "The machine name that created this package"
   140          },
   141          "user": {
   142            "type": "string",
   143            "description": "The username who created this package"
   144          },
   145          "architecture": {
   146            "type": "string",
   147            "description": "The architecture this package was created on"
   148          },
   149          "timestamp": {
   150            "type": "string",
   151            "description": "The timestamp when this package was created"
   152          },
   153          "version": {
   154            "type": "string",
   155            "description": "The version of Jackal used to build this package"
   156          },
   157          "migrations": {
   158            "items": {
   159              "type": "string"
   160            },
   161            "type": "array",
   162            "description": "Any migrations that have been run on this package"
   163          },
   164          "registryOverrides": {
   165            "patternProperties": {
   166              ".*": {
   167                "type": "string"
   168              }
   169            },
   170            "type": "object",
   171            "description": "Any registry domains that were overridden on package create when pulling images"
   172          },
   173          "differential": {
   174            "type": "boolean",
   175            "description": "Whether this package was created with differential components"
   176          },
   177          "differentialPackageVersion": {
   178            "type": "string",
   179            "description": "Version of a previously built package used as the basis for creating this differential package"
   180          },
   181          "differentialMissing": {
   182            "items": {
   183              "type": "string"
   184            },
   185            "type": "array",
   186            "description": "List of components that were not included in this package due to differential packaging"
   187          },
   188          "lastNonBreakingVersion": {
   189            "type": "string",
   190            "description": "The minimum version of Jackal that does not have breaking package structure changes"
   191          },
   192          "flavor": {
   193            "type": "string",
   194            "description": "The flavor of Jackal used to build this package"
   195          }
   196        },
   197        "additionalProperties": false,
   198        "type": "object",
   199        "patternProperties": {
   200          "^x-": {}
   201        }
   202      },
   203      "JackalChart": {
   204        "required": [
   205          "name",
   206          "namespace"
   207        ],
   208        "properties": {
   209          "name": {
   210            "type": "string",
   211            "description": "The name of the chart within Jackal; note that this must be unique and does not need to be the same as the name in the chart repo"
   212          },
   213          "version": {
   214            "type": "string",
   215            "description": "The version of the chart to deploy; for git-based charts this is also the tag of the git repo by default (when not using the '@' syntax for 'repos')"
   216          },
   217          "url": {
   218            "type": "string",
   219            "description": "The URL of the OCI registry, chart repository, or git repo where the helm chart is stored",
   220            "examples": [
   221              "OCI registry: oci://ghcr.io/stefanprodan/charts/podinfo",
   222              "helm chart repo: https://stefanprodan.github.io/podinfo",
   223              "git repo: https://github.com/stefanprodan/podinfo (note the '@' syntax for 'repos' is supported here too)"
   224            ]
   225          },
   226          "repoName": {
   227            "type": "string",
   228            "description": "The name of a chart within a Helm repository (defaults to the Jackal name of the chart)"
   229          },
   230          "gitPath": {
   231            "type": "string",
   232            "description": "(git repo only) The sub directory to the chart within a git repo",
   233            "examples": [
   234              "charts/your-chart"
   235            ]
   236          },
   237          "localPath": {
   238            "type": "string",
   239            "description": "The path to a local chart's folder or .tgz archive"
   240          },
   241          "namespace": {
   242            "type": "string",
   243            "description": "The namespace to deploy the chart to"
   244          },
   245          "releaseName": {
   246            "type": "string",
   247            "description": "The name of the Helm release to create (defaults to the Jackal name of the chart)"
   248          },
   249          "noWait": {
   250            "type": "boolean",
   251            "description": "Whether to not wait for chart resources to be ready before continuing"
   252          },
   253          "valuesFiles": {
   254            "items": {
   255              "type": "string"
   256            },
   257            "type": "array",
   258            "description": "List of local values file paths or remote URLs to include in the package; these will be merged together when deployed"
   259          }
   260        },
   261        "additionalProperties": false,
   262        "type": "object",
   263        "patternProperties": {
   264          "^x-": {}
   265        }
   266      },
   267      "JackalComponent": {
   268        "required": [
   269          "name"
   270        ],
   271        "properties": {
   272          "name": {
   273            "pattern": "^[a-z0-9\\-]*[a-z0-9]$",
   274            "type": "string",
   275            "description": "The name of the component"
   276          },
   277          "description": {
   278            "type": "string",
   279            "description": "Message to include during package deploy describing the purpose of this component"
   280          },
   281          "default": {
   282            "type": "boolean",
   283            "description": "Determines the default Y/N state for installing this component on package deploy"
   284          },
   285          "required": {
   286            "type": "boolean",
   287            "description": "Do not prompt user to install this component"
   288          },
   289          "only": {
   290            "$schema": "http://json-schema.org/draft-04/schema#",
   291            "$ref": "#/definitions/JackalComponentOnlyTarget",
   292            "description": "Filter when this component is included in package creation or deployment"
   293          },
   294          "group": {
   295            "type": "string",
   296            "description": "[Deprecated] Create a user selector field based on all components in the same group. This will be removed in Jackal v1.0.0. Consider using 'only.flavor' instead."
   297          },
   298          "cosignKeyPath": {
   299            "type": "string",
   300            "description": "[Deprecated] Specify a path to a public key to validate signed online resources. This will be removed in Jackal v1.0.0."
   301          },
   302          "import": {
   303            "$schema": "http://json-schema.org/draft-04/schema#",
   304            "$ref": "#/definitions/JackalComponentImport",
   305            "description": "Import a component from another Jackal package"
   306          },
   307          "manifests": {
   308            "items": {
   309              "$schema": "http://json-schema.org/draft-04/schema#",
   310              "$ref": "#/definitions/JackalManifest"
   311            },
   312            "type": "array",
   313            "description": "Kubernetes manifests to be included in a generated Helm chart on package deploy"
   314          },
   315          "charts": {
   316            "items": {
   317              "$schema": "http://json-schema.org/draft-04/schema#",
   318              "$ref": "#/definitions/JackalChart"
   319            },
   320            "type": "array",
   321            "description": "Helm charts to install during package deploy"
   322          },
   323          "dataInjections": {
   324            "items": {
   325              "$schema": "http://json-schema.org/draft-04/schema#",
   326              "$ref": "#/definitions/JackalDataInjection"
   327            },
   328            "type": "array",
   329            "description": "Datasets to inject into a container in the target cluster"
   330          },
   331          "files": {
   332            "items": {
   333              "$schema": "http://json-schema.org/draft-04/schema#",
   334              "$ref": "#/definitions/JackalFile"
   335            },
   336            "type": "array",
   337            "description": "Files or folders to place on disk during package deployment"
   338          },
   339          "images": {
   340            "items": {
   341              "type": "string"
   342            },
   343            "type": "array",
   344            "description": "List of OCI images to include in the package"
   345          },
   346          "repos": {
   347            "items": {
   348              "type": "string"
   349            },
   350            "type": "array",
   351            "description": "List of git repos to include in the package"
   352          },
   353          "extensions": {
   354            "$schema": "http://json-schema.org/draft-04/schema#",
   355            "$ref": "#/definitions/JackalComponentExtensions",
   356            "description": "Extend component functionality with additional features"
   357          },
   358          "scripts": {
   359            "$schema": "http://json-schema.org/draft-04/schema#",
   360            "$ref": "#/definitions/DeprecatedJackalComponentScripts",
   361            "description": "[Deprecated] (replaced by actions) Custom commands to run before or after package deployment.  This will be removed in Jackal v1.0.0."
   362          },
   363          "actions": {
   364            "$schema": "http://json-schema.org/draft-04/schema#",
   365            "$ref": "#/definitions/JackalComponentActions",
   366            "description": "Custom commands to run at various stages of a package lifecycle"
   367          }
   368        },
   369        "additionalProperties": false,
   370        "type": "object",
   371        "patternProperties": {
   372          "^x-": {}
   373        }
   374      },
   375      "JackalComponentAction": {
   376        "properties": {
   377          "mute": {
   378            "type": "boolean",
   379            "description": "Hide the output of the command during package deployment (default false)"
   380          },
   381          "maxTotalSeconds": {
   382            "type": "integer",
   383            "description": "Timeout in seconds for the command (default to 0"
   384          },
   385          "maxRetries": {
   386            "type": "integer",
   387            "description": "Retry the command if it fails up to given number of times (default 0)"
   388          },
   389          "dir": {
   390            "type": "string",
   391            "description": "The working directory to run the command in (default is CWD)"
   392          },
   393          "env": {
   394            "items": {
   395              "type": "string"
   396            },
   397            "type": "array",
   398            "description": "Additional environment variables to set for the command"
   399          },
   400          "cmd": {
   401            "type": "string",
   402            "description": "The command to run. Must specify either cmd or wait for the action to do anything."
   403          },
   404          "shell": {
   405            "$ref": "#/definitions/Shell",
   406            "description": "(cmd only) Indicates a preference for a shell for the provided cmd to be executed in on supported operating systems"
   407          },
   408          "setVariable": {
   409            "pattern": "^[A-Z0-9_]+$",
   410            "type": "string",
   411            "description": "[Deprecated] (replaced by setVariables) (onDeploy/cmd only) The name of a variable to update with the output of the command. This variable will be available to all remaining actions and components in the package. This will be removed in Jackal v1.0.0"
   412          },
   413          "setVariables": {
   414            "items": {
   415              "$schema": "http://json-schema.org/draft-04/schema#",
   416              "$ref": "#/definitions/JackalComponentActionSetVariable"
   417            },
   418            "type": "array",
   419            "description": "(onDeploy/cmd only) An array of variables to update with the output of the command. These variables will be available to all remaining actions and components in the package."
   420          },
   421          "description": {
   422            "type": "string",
   423            "description": "Description of the action to be displayed during package execution instead of the command"
   424          },
   425          "wait": {
   426            "$schema": "http://json-schema.org/draft-04/schema#",
   427            "$ref": "#/definitions/JackalComponentActionWait",
   428            "description": "Wait for a condition to be met before continuing. Must specify either cmd or wait for the action. See the 'jackal tools wait-for' command for more info."
   429          }
   430        },
   431        "additionalProperties": false,
   432        "type": "object",
   433        "patternProperties": {
   434          "^x-": {}
   435        }
   436      },
   437      "JackalComponentActionDefaults": {
   438        "properties": {
   439          "mute": {
   440            "type": "boolean",
   441            "description": "Hide the output of commands during execution (default false)"
   442          },
   443          "maxTotalSeconds": {
   444            "type": "integer",
   445            "description": "Default timeout in seconds for commands (default to 0"
   446          },
   447          "maxRetries": {
   448            "type": "integer",
   449            "description": "Retry commands given number of times if they fail (default 0)"
   450          },
   451          "dir": {
   452            "type": "string",
   453            "description": "Working directory for commands (default CWD)"
   454          },
   455          "env": {
   456            "items": {
   457              "type": "string"
   458            },
   459            "type": "array",
   460            "description": "Additional environment variables for commands"
   461          },
   462          "shell": {
   463            "$schema": "http://json-schema.org/draft-04/schema#",
   464            "$ref": "#/definitions/Shell",
   465            "description": "(cmd only) Indicates a preference for a shell for the provided cmd to be executed in on supported operating systems"
   466          }
   467        },
   468        "additionalProperties": false,
   469        "type": "object",
   470        "patternProperties": {
   471          "^x-": {}
   472        }
   473      },
   474      "JackalComponentActionSet": {
   475        "properties": {
   476          "defaults": {
   477            "$schema": "http://json-schema.org/draft-04/schema#",
   478            "$ref": "#/definitions/JackalComponentActionDefaults",
   479            "description": "Default configuration for all actions in this set"
   480          },
   481          "before": {
   482            "items": {
   483              "$schema": "http://json-schema.org/draft-04/schema#",
   484              "$ref": "#/definitions/JackalComponentAction"
   485            },
   486            "type": "array",
   487            "description": "Actions to run at the start of an operation"
   488          },
   489          "after": {
   490            "items": {
   491              "$ref": "#/definitions/JackalComponentAction"
   492            },
   493            "type": "array",
   494            "description": "Actions to run at the end of an operation"
   495          },
   496          "onSuccess": {
   497            "items": {
   498              "$ref": "#/definitions/JackalComponentAction"
   499            },
   500            "type": "array",
   501            "description": "Actions to run if all operations succeed"
   502          },
   503          "onFailure": {
   504            "items": {
   505              "$ref": "#/definitions/JackalComponentAction"
   506            },
   507            "type": "array",
   508            "description": "Actions to run if all operations fail"
   509          }
   510        },
   511        "additionalProperties": false,
   512        "type": "object",
   513        "patternProperties": {
   514          "^x-": {}
   515        }
   516      },
   517      "JackalComponentActionSetVariable": {
   518        "required": [
   519          "name"
   520        ],
   521        "properties": {
   522          "name": {
   523            "pattern": "^[A-Z0-9_]+$",
   524            "type": "string",
   525            "description": "The name to be used for the variable"
   526          },
   527          "type": {
   528            "enum": [
   529              "raw",
   530              "file"
   531            ],
   532            "type": "string",
   533            "description": "Changes the handling of a variable to load contents differently (i.e. from a file rather than as a raw variable - templated files should be kept below 1 MiB)"
   534          },
   535          "pattern": {
   536            "type": "string",
   537            "description": "An optional regex pattern that a variable value must match before a package deployment can continue."
   538          },
   539          "sensitive": {
   540            "type": "boolean",
   541            "description": "Whether to mark this variable as sensitive to not print it in the Jackal log"
   542          },
   543          "autoIndent": {
   544            "type": "boolean",
   545            "description": "Whether to automatically indent the variable's value (if multiline) when templating. Based on the number of chars before the start of ###JACKAL_VAR_."
   546          }
   547        },
   548        "additionalProperties": false,
   549        "type": "object",
   550        "patternProperties": {
   551          "^x-": {}
   552        }
   553      },
   554      "JackalComponentActionWait": {
   555        "properties": {
   556          "cluster": {
   557            "$schema": "http://json-schema.org/draft-04/schema#",
   558            "$ref": "#/definitions/JackalComponentActionWaitCluster",
   559            "description": "Wait for a condition to be met in the cluster before continuing. Only one of cluster or network can be specified."
   560          },
   561          "network": {
   562            "$schema": "http://json-schema.org/draft-04/schema#",
   563            "$ref": "#/definitions/JackalComponentActionWaitNetwork",
   564            "description": "Wait for a condition to be met on the network before continuing. Only one of cluster or network can be specified."
   565          }
   566        },
   567        "additionalProperties": false,
   568        "type": "object",
   569        "patternProperties": {
   570          "^x-": {}
   571        }
   572      },
   573      "JackalComponentActionWaitCluster": {
   574        "required": [
   575          "kind",
   576          "name"
   577        ],
   578        "properties": {
   579          "kind": {
   580            "type": "string",
   581            "description": "The kind of resource to wait for",
   582            "examples": [
   583              "Pod",
   584              "Deployment)"
   585            ]
   586          },
   587          "name": {
   588            "type": "string",
   589            "description": "The name of the resource or selector to wait for",
   590            "examples": [
   591              "podinfo",
   592              "app=podinfo"
   593            ]
   594          },
   595          "namespace": {
   596            "type": "string",
   597            "description": "The namespace of the resource to wait for"
   598          },
   599          "condition": {
   600            "type": "string",
   601            "description": "The condition or jsonpath state to wait for; defaults to exist",
   602            "examples": [
   603              "Ready",
   604              "Available"
   605            ]
   606          }
   607        },
   608        "additionalProperties": false,
   609        "type": "object",
   610        "patternProperties": {
   611          "^x-": {}
   612        }
   613      },
   614      "JackalComponentActionWaitNetwork": {
   615        "required": [
   616          "protocol",
   617          "address"
   618        ],
   619        "properties": {
   620          "protocol": {
   621            "enum": [
   622              "tcp",
   623              "http",
   624              "https"
   625            ],
   626            "type": "string",
   627            "description": "The protocol to wait for"
   628          },
   629          "address": {
   630            "type": "string",
   631            "description": "The address to wait for",
   632            "examples": [
   633              "localhost:8080",
   634              "1.1.1.1"
   635            ]
   636          },
   637          "code": {
   638            "type": "integer",
   639            "description": "The HTTP status code to wait for if using http or https",
   640            "examples": [
   641              200,
   642              404
   643            ]
   644          }
   645        },
   646        "additionalProperties": false,
   647        "type": "object",
   648        "patternProperties": {
   649          "^x-": {}
   650        }
   651      },
   652      "JackalComponentActions": {
   653        "properties": {
   654          "onCreate": {
   655            "$schema": "http://json-schema.org/draft-04/schema#",
   656            "$ref": "#/definitions/JackalComponentActionSet",
   657            "description": "Actions to run during package creation"
   658          },
   659          "onDeploy": {
   660            "$ref": "#/definitions/JackalComponentActionSet",
   661            "description": "Actions to run during package deployment"
   662          },
   663          "onRemove": {
   664            "$ref": "#/definitions/JackalComponentActionSet",
   665            "description": "Actions to run during package removal"
   666          }
   667        },
   668        "additionalProperties": false,
   669        "type": "object",
   670        "patternProperties": {
   671          "^x-": {}
   672        }
   673      },
   674      "JackalComponentExtensions": {
   675        "properties": {
   676          "bigbang": {
   677            "$schema": "http://json-schema.org/draft-04/schema#",
   678            "$ref": "#/definitions/BigBang",
   679            "description": "Configurations for installing Big Bang and Flux in the cluster"
   680          }
   681        },
   682        "additionalProperties": false,
   683        "type": "object",
   684        "patternProperties": {
   685          "^x-": {}
   686        }
   687      },
   688      "JackalComponentImport": {
   689        "properties": {
   690          "name": {
   691            "type": "string",
   692            "description": "The name of the component to import from the referenced jackal.yaml"
   693          },
   694          "path": {
   695            "type": "string",
   696            "description": "The relative path to a directory containing a jackal.yaml to import from"
   697          },
   698          "url": {
   699            "pattern": "^oci://.*$",
   700            "type": "string",
   701            "description": "[beta] The URL to a Jackal package to import via OCI"
   702          }
   703        },
   704        "additionalProperties": false,
   705        "type": "object",
   706        "patternProperties": {
   707          "^x-": {}
   708        }
   709      },
   710      "JackalComponentOnlyCluster": {
   711        "properties": {
   712          "architecture": {
   713            "enum": [
   714              "amd64",
   715              "arm64"
   716            ],
   717            "type": "string",
   718            "description": "Only create and deploy to clusters of the given architecture"
   719          },
   720          "distros": {
   721            "items": {
   722              "type": "string"
   723            },
   724            "type": "array",
   725            "description": "A list of kubernetes distros this package works with (Reserved for future use)"
   726          }
   727        },
   728        "additionalProperties": false,
   729        "type": "object",
   730        "patternProperties": {
   731          "^x-": {}
   732        }
   733      },
   734      "JackalComponentOnlyTarget": {
   735        "properties": {
   736          "localOS": {
   737            "enum": [
   738              "linux",
   739              "darwin",
   740              "windows"
   741            ],
   742            "type": "string",
   743            "description": "Only deploy component to specified OS"
   744          },
   745          "cluster": {
   746            "$schema": "http://json-schema.org/draft-04/schema#",
   747            "$ref": "#/definitions/JackalComponentOnlyCluster",
   748            "description": "Only deploy component to specified clusters"
   749          },
   750          "flavor": {
   751            "type": "string",
   752            "description": "Only include this component when a matching '--flavor' is specified on 'jackal package create'"
   753          }
   754        },
   755        "additionalProperties": false,
   756        "type": "object",
   757        "patternProperties": {
   758          "^x-": {}
   759        }
   760      },
   761      "JackalContainerTarget": {
   762        "required": [
   763          "namespace",
   764          "selector",
   765          "container",
   766          "path"
   767        ],
   768        "properties": {
   769          "namespace": {
   770            "type": "string",
   771            "description": "The namespace to target for data injection"
   772          },
   773          "selector": {
   774            "type": "string",
   775            "description": "The K8s selector to target for data injection",
   776            "examples": [
   777              "app=data-injection"
   778            ]
   779          },
   780          "container": {
   781            "type": "string",
   782            "description": "The container name to target for data injection"
   783          },
   784          "path": {
   785            "type": "string",
   786            "description": "The path within the container to copy the data into"
   787          }
   788        },
   789        "additionalProperties": false,
   790        "type": "object",
   791        "patternProperties": {
   792          "^x-": {}
   793        }
   794      },
   795      "JackalDataInjection": {
   796        "required": [
   797          "source",
   798          "target"
   799        ],
   800        "properties": {
   801          "source": {
   802            "type": "string",
   803            "description": "Either a path to a local folder/file or a remote URL of a file to inject into the given target pod + container"
   804          },
   805          "target": {
   806            "$schema": "http://json-schema.org/draft-04/schema#",
   807            "$ref": "#/definitions/JackalContainerTarget",
   808            "description": "The target pod + container to inject the data into"
   809          },
   810          "compress": {
   811            "type": "boolean",
   812            "description": "Compress the data before transmitting using gzip.  Note: this requires support for tar/gzip locally and in the target image."
   813          }
   814        },
   815        "additionalProperties": false,
   816        "type": "object",
   817        "patternProperties": {
   818          "^x-": {}
   819        }
   820      },
   821      "JackalFile": {
   822        "required": [
   823          "source",
   824          "target"
   825        ],
   826        "properties": {
   827          "source": {
   828            "type": "string",
   829            "description": "Local folder or file path or remote URL to pull into the package"
   830          },
   831          "shasum": {
   832            "type": "string",
   833            "description": "(files only) Optional SHA256 checksum of the file"
   834          },
   835          "target": {
   836            "type": "string",
   837            "description": "The absolute or relative path where the file or folder should be copied to during package deploy"
   838          },
   839          "executable": {
   840            "type": "boolean",
   841            "description": "(files only) Determines if the file should be made executable during package deploy"
   842          },
   843          "symlinks": {
   844            "items": {
   845              "type": "string"
   846            },
   847            "type": "array",
   848            "description": "List of symlinks to create during package deploy"
   849          },
   850          "extractPath": {
   851            "type": "string",
   852            "description": "Local folder or file to be extracted from a 'source' archive"
   853          }
   854        },
   855        "additionalProperties": false,
   856        "type": "object",
   857        "patternProperties": {
   858          "^x-": {}
   859        }
   860      },
   861      "JackalManifest": {
   862        "required": [
   863          "name"
   864        ],
   865        "properties": {
   866          "name": {
   867            "type": "string",
   868            "description": "A name to give this collection of manifests; this will become the name of the dynamically-created helm chart"
   869          },
   870          "namespace": {
   871            "type": "string",
   872            "description": "The namespace to deploy the manifests to"
   873          },
   874          "files": {
   875            "items": {
   876              "type": "string"
   877            },
   878            "type": "array",
   879            "description": "List of local K8s YAML files or remote URLs to deploy (in order)"
   880          },
   881          "kustomizeAllowAnyDirectory": {
   882            "type": "boolean",
   883            "description": "Allow traversing directory above the current directory if needed for kustomization"
   884          },
   885          "kustomizations": {
   886            "items": {
   887              "type": "string"
   888            },
   889            "type": "array",
   890            "description": "List of local kustomization paths or remote URLs to include in the package"
   891          },
   892          "noWait": {
   893            "type": "boolean",
   894            "description": "Whether to not wait for manifest resources to be ready before continuing"
   895          }
   896        },
   897        "additionalProperties": false,
   898        "type": "object",
   899        "patternProperties": {
   900          "^x-": {}
   901        }
   902      },
   903      "JackalMetadata": {
   904        "required": [
   905          "name"
   906        ],
   907        "properties": {
   908          "name": {
   909            "pattern": "^[a-z0-9\\-]*[a-z0-9]$",
   910            "type": "string",
   911            "description": "Name to identify this Jackal package"
   912          },
   913          "description": {
   914            "type": "string",
   915            "description": "Additional information about this package"
   916          },
   917          "version": {
   918            "type": "string",
   919            "description": "Generic string set by a package author to track the package version (Note: JackalInitConfigs will always be versioned to the CLIVersion they were created with)"
   920          },
   921          "url": {
   922            "type": "string",
   923            "description": "Link to package information when online"
   924          },
   925          "image": {
   926            "type": "string",
   927            "description": "An image URL to embed in this package (Reserved for future use in Jackal UI)"
   928          },
   929          "uncompressed": {
   930            "type": "boolean",
   931            "description": "Disable compression of this package"
   932          },
   933          "architecture": {
   934            "type": "string",
   935            "description": "The target cluster architecture for this package",
   936            "examples": [
   937              "arm64",
   938              "amd64"
   939            ]
   940          },
   941          "yolo": {
   942            "type": "boolean",
   943            "description": "Yaml OnLy Online (YOLO): True enables deploying a Jackal package without first running jackal init against the cluster. This is ideal for connected environments where you want to use existing VCS and container registries."
   944          },
   945          "authors": {
   946            "type": "string",
   947            "description": "Comma-separated list of package authors (including contact info)",
   948            "examples": [
   949              "Doug <hello@defenseunicorns.com>, Pepr <hello@defenseunicorns.com>"
   950            ]
   951          },
   952          "documentation": {
   953            "type": "string",
   954            "description": "Link to package documentation when online"
   955          },
   956          "source": {
   957            "type": "string",
   958            "description": "Link to package source code when online"
   959          },
   960          "vendor": {
   961            "type": "string",
   962            "description": "Name of the distributing entity, organization or individual."
   963          },
   964          "aggregateChecksum": {
   965            "type": "string",
   966            "description": "Checksum of a checksums.txt file that contains checksums all the layers within the package."
   967          }
   968        },
   969        "additionalProperties": false,
   970        "type": "object",
   971        "patternProperties": {
   972          "^x-": {}
   973        }
   974      },
   975      "JackalPackage": {
   976        "required": [
   977          "kind",
   978          "components"
   979        ],
   980        "properties": {
   981          "kind": {
   982            "enum": [
   983              "JackalInitConfig",
   984              "JackalPackageConfig"
   985            ],
   986            "type": "string",
   987            "description": "The kind of Jackal package",
   988            "default": "JackalPackageConfig"
   989          },
   990          "metadata": {
   991            "$schema": "http://json-schema.org/draft-04/schema#",
   992            "$ref": "#/definitions/JackalMetadata",
   993            "description": "Package metadata"
   994          },
   995          "build": {
   996            "$schema": "http://json-schema.org/draft-04/schema#",
   997            "$ref": "#/definitions/JackalBuildData",
   998            "description": "Jackal-generated package build data"
   999          },
  1000          "components": {
  1001            "items": {
  1002              "$schema": "http://json-schema.org/draft-04/schema#",
  1003              "$ref": "#/definitions/JackalComponent"
  1004            },
  1005            "type": "array",
  1006            "description": "List of components to deploy in this package"
  1007          },
  1008          "constants": {
  1009            "items": {
  1010              "$schema": "http://json-schema.org/draft-04/schema#",
  1011              "$ref": "#/definitions/JackalPackageConstant"
  1012            },
  1013            "type": "array",
  1014            "description": "Constant template values applied on deploy for K8s resources"
  1015          },
  1016          "variables": {
  1017            "items": {
  1018              "$schema": "http://json-schema.org/draft-04/schema#",
  1019              "$ref": "#/definitions/JackalPackageVariable"
  1020            },
  1021            "type": "array",
  1022            "description": "Variable template values applied on deploy for K8s resources"
  1023          }
  1024        },
  1025        "additionalProperties": false,
  1026        "type": "object",
  1027        "patternProperties": {
  1028          "^x-": {}
  1029        }
  1030      },
  1031      "JackalPackageConstant": {
  1032        "required": [
  1033          "name",
  1034          "value"
  1035        ],
  1036        "properties": {
  1037          "name": {
  1038            "pattern": "^[A-Z0-9_]+$",
  1039            "type": "string",
  1040            "description": "The name to be used for the constant"
  1041          },
  1042          "value": {
  1043            "type": "string",
  1044            "description": "The value to set for the constant during deploy"
  1045          },
  1046          "description": {
  1047            "type": "string",
  1048            "description": "A description of the constant to explain its purpose on package create or deploy confirmation prompts"
  1049          },
  1050          "autoIndent": {
  1051            "type": "boolean",
  1052            "description": "Whether to automatically indent the variable's value (if multiline) when templating. Based on the number of chars before the start of ###JACKAL_CONST_."
  1053          },
  1054          "pattern": {
  1055            "type": "string",
  1056            "description": "An optional regex pattern that a constant value must match before a package can be created."
  1057          }
  1058        },
  1059        "additionalProperties": false,
  1060        "type": "object",
  1061        "patternProperties": {
  1062          "^x-": {}
  1063        }
  1064      },
  1065      "JackalPackageVariable": {
  1066        "required": [
  1067          "name"
  1068        ],
  1069        "properties": {
  1070          "name": {
  1071            "pattern": "^[A-Z0-9_]+$",
  1072            "type": "string",
  1073            "description": "The name to be used for the variable"
  1074          },
  1075          "description": {
  1076            "type": "string",
  1077            "description": "A description of the variable to be used when prompting the user a value"
  1078          },
  1079          "default": {
  1080            "type": "string",
  1081            "description": "The default value to use for the variable"
  1082          },
  1083          "prompt": {
  1084            "type": "boolean",
  1085            "description": "Whether to prompt the user for input for this variable"
  1086          },
  1087          "sensitive": {
  1088            "type": "boolean",
  1089            "description": "Whether to mark this variable as sensitive to not print it in the Jackal log"
  1090          },
  1091          "autoIndent": {
  1092            "type": "boolean",
  1093            "description": "Whether to automatically indent the variable's value (if multiline) when templating. Based on the number of chars before the start of ###JACKAL_VAR_."
  1094          },
  1095          "pattern": {
  1096            "type": "string",
  1097            "description": "An optional regex pattern that a variable value must match before a package can be deployed."
  1098          },
  1099          "type": {
  1100            "enum": [
  1101              "raw",
  1102              "file"
  1103            ],
  1104            "type": "string",
  1105            "description": "Changes the handling of a variable to load contents differently (i.e. from a file rather than as a raw variable - templated files should be kept below 1 MiB)"
  1106          }
  1107        },
  1108        "additionalProperties": false,
  1109        "type": "object",
  1110        "patternProperties": {
  1111          "^x-": {}
  1112        }
  1113      }
  1114    }
  1115  }