uds.
## uds
CLI for UDS Bundles
```
uds COMMAND [flags]
```
### Options
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
-h, --help help for uds
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds completion](/reference/cli/commands/uds_completion/) - Generate the autocompletion script for the specified shell
* [uds create](/reference/cli/commands/uds_create/) - Create a bundle from a given directory or the current directory
* [uds deploy](/reference/cli/commands/uds_deploy/) - Deploy a bundle from a local tarball or oci:// URL
* [uds dev](/reference/cli/commands/uds_dev/) - [beta] Commands useful for developing bundles
* [uds inspect](/reference/cli/commands/uds_inspect/) - Display the metadata of a bundle
* [uds logs](/reference/cli/commands/uds_logs/) - View most recent UDS CLI logs
* [uds monitor](/reference/cli/commands/uds_monitor/) - Monitor a UDS Cluster
* [uds publish](/reference/cli/commands/uds_publish/) - Publish a bundle from the local file system to a remote registry
* [uds pull](/reference/cli/commands/uds_pull/) - Pull a bundle from a remote registry and save to the local file system
* [uds remove](/reference/cli/commands/uds_remove/) - Remove a bundle that has been deployed already
* [uds run](/reference/cli/commands/uds_run/) - Run a task using maru-runner
* [uds version](/reference/cli/commands/uds_version/) - Shows the version of the running UDS-CLI binary
-----
# uds completion
> UDS CLI command reference for uds completion.
## uds completion
Generate the autocompletion script for the specified shell
### Synopsis
Generate the autocompletion script for uds for the specified shell.
See each sub-command's help for details on how to use the generated script.
### Options
```
-h, --help help for completion
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
* [uds completion bash](/reference/cli/commands/uds_completion_bash/) - Generate the autocompletion script for bash
* [uds completion fish](/reference/cli/commands/uds_completion_fish/) - Generate the autocompletion script for fish
* [uds completion zsh](/reference/cli/commands/uds_completion_zsh/) - Generate the autocompletion script for zsh
-----
# uds completion bash
> UDS CLI command reference for uds completion bash.
## uds completion bash
Generate the autocompletion script for bash
### Synopsis
Generate the autocompletion script for the bash shell.
This script depends on the 'bash-completion' package.
If it is not installed already, you can install it via your OS's package manager.
To load completions in your current shell session:
source <(uds completion bash)
To load completions for every new session, execute once:
#### Linux:
uds completion bash > /etc/bash_completion.d/uds
#### macOS:
uds completion bash > $(brew --prefix)/etc/bash_completion.d/uds
You will need to start a new shell for this setup to take effect.
```
uds completion bash
```
### Options
```
-h, --help help for bash
--no-descriptions disable completion descriptions
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds completion](/reference/cli/commands/uds_completion/) - Generate the autocompletion script for the specified shell
-----
# uds completion fish
> UDS CLI command reference for uds completion fish.
## uds completion fish
Generate the autocompletion script for fish
### Synopsis
Generate the autocompletion script for the fish shell.
To load completions in your current shell session:
uds completion fish | source
To load completions for every new session, execute once:
uds completion fish > ~/.config/fish/completions/uds.fish
You will need to start a new shell for this setup to take effect.
```
uds completion fish [flags]
```
### Options
```
-h, --help help for fish
--no-descriptions disable completion descriptions
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds completion](/reference/cli/commands/uds_completion/) - Generate the autocompletion script for the specified shell
-----
# uds completion zsh
> UDS CLI command reference for uds completion zsh.
## uds completion zsh
Generate the autocompletion script for zsh
### Synopsis
Generate the autocompletion script for the zsh shell.
If shell completion is not already enabled in your environment you will need
to enable it. You can execute the following once:
echo "autoload -U compinit; compinit" >> ~/.zshrc
To load completions in your current shell session:
source <(uds completion zsh)
To load completions for every new session, execute once:
#### Linux:
uds completion zsh > "${fpath[1]}/_uds"
#### macOS:
uds completion zsh > $(brew --prefix)/share/zsh/site-functions/_uds
You will need to start a new shell for this setup to take effect.
```
uds completion zsh [flags]
```
### Options
```
-h, --help help for zsh
--no-descriptions disable completion descriptions
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds completion](/reference/cli/commands/uds_completion/) - Generate the autocompletion script for the specified shell
-----
# uds create
> UDS CLI command reference for uds create.
## uds create
Create a bundle from a given directory or the current directory
```
uds create [DIRECTORY] [flags]
```
### Options
```
-c, --confirm Confirm bundle creation without prompting
-h, --help help for create
-n, --name string Specify the name of the bundle
-o, --output string Specify the output (an oci:// URL) for the created bundle
-k, --signing-key string Path to private key file for signing bundles
-p, --signing-key-password string Password to the private key file used for signing bundles
-v, --version string Specify the version of the bundle
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
-----
# uds deploy
> UDS CLI command reference for uds deploy.
## uds deploy
Deploy a bundle from a local tarball or oci:// URL
```
uds deploy [BUNDLE_TARBALL|OCI_REF] [flags]
```
### Options
```
-c, --confirm Confirms bundle deployment without prompting. ONLY use with bundles you trust
-h, --help help for deploy
-p, --packages stringArray Specify which zarf packages you would like to deploy from the bundle. By default all zarf packages in the bundle are deployed.
-r, --resume Only deploys packages from the bundle which haven't already been deployed
--retries int Specify the number of retries for package deployments (applies to all pkgs in a bundle) (default 3)
--set stringToString Specify deployment variables to set on the command line (KEY=value) (default [])
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
-----
# uds dev
> UDS CLI command reference for uds dev.
## uds dev
[beta] Commands useful for developing bundles
### Options
```
-h, --help help for dev
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
* [uds dev deploy](/reference/cli/commands/uds_dev_deploy/) - [beta] Creates and deploys a UDS bundle in dev mode
-----
# uds dev deploy
> UDS CLI command reference for uds dev deploy.
## uds dev deploy
[beta] Creates and deploys a UDS bundle in dev mode
### Synopsis
[beta] Creates and deploys a UDS bundle from a given directory or OCI repository in dev mode, setting package options like YOLO mode for faster iteration.
```
uds dev deploy [BUNDLE_DIR|OCI_REF] [flags]
```
### Options
```
-f, --flavor string [beta] Specify which zarf package flavor you want to use.
--force-create [beta] For local bundles with local packages, specify whether to create a zarf package even if it already exists.
-h, --help help for deploy
-p, --packages stringArray Specify which zarf packages you would like to deploy from the bundle. By default all zarf packages in the bundle are deployed.
-r, --ref stringToString Specify which zarf package ref you want to deploy. By default the ref set in the bundle yaml is used. (default [])
--set stringToString Specify deployment variables to set on the command line (KEY=value) (default [])
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds dev](/reference/cli/commands/uds_dev/) - [beta] Commands useful for developing bundles
-----
# uds inspect
> UDS CLI command reference for uds inspect.
## uds inspect
Display the metadata of a bundle
```
uds inspect [BUNDLE_TARBALL|OCI_REF|BUNDLE_YAML_FILE] [flags]
```
### Options
```
-e, --extract Create a folder of SBOMs contained in the bundle
-h, --help help for inspect
-k, --key string Path to a public key file that will be used to validate a signed bundle
-i, --list-images Derive images from a uds-bundle.yaml file and list them
-v, --list-variables List all configurable variables in a bundle (including zarf variables)
-s, --sbom Create a tarball of SBOMs contained in the bundle
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
-----
# uds logs
> UDS CLI command reference for uds logs.
## uds logs
View most recent UDS CLI logs
```
uds logs [flags]
```
### Options
```
-h, --help help for logs
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
-----
# uds monitor
> UDS CLI command reference for uds monitor.
## uds monitor
Monitor a UDS Cluster
### Synopsis
Tools for monitoring a UDS Cluster and connecting to the UDS Engine for advanced troubleshooting
### Options
```
-h, --help help for monitor
-n, --namespace string Limit monitoring to a specific namespace
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
* [uds monitor pepr](/reference/cli/commands/uds_monitor_pepr/) - Observe Pepr operations in a UDS Cluster
-----
# uds monitor pepr
> UDS CLI command reference for uds monitor pepr.
## uds monitor pepr
Observe Pepr operations in a UDS Cluster
### Synopsis
View UDS Policy enforcements, UDS Operator events and additional Pepr operations
```
uds monitor pepr [policies | operator | allowed | denied | failed | mutated] [flags]
```
### Examples
```
# Aggregates all admission and operator logs into a single stream
uds monitor pepr
# Stream UDS Operator actions (Package processing, status updates, and errors)
uds monitor pepr operator
# Stream UDS Policy logs (Allow, Deny, Mutate)
uds monitor pepr policies
# Stream UDS Policy allow logs
uds monitor pepr allowed
# Stream UDS Policy deny logs
uds monitor pepr denied
# Stream UDS Policy mutation logs
uds monitor pepr mutated
# Stream UDS Policy deny logs and UDS Operator error logs
uds monitor pepr failed
```
### Options
```
-f, --follow Continuously stream Pepr logs
-h, --help help for pepr
--json Return the raw JSON output of the logs
--since duration Only return logs newer than a relative duration like 5s, 2m, or 3h. Defaults to all logs.
-t, --timestamps Show timestamps in Pepr logs
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
-n, --namespace string Limit monitoring to a specific namespace
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds monitor](/reference/cli/commands/uds_monitor/) - Monitor a UDS Cluster
-----
# uds publish
> UDS CLI command reference for uds publish.
## uds publish
Publish a bundle from the local file system to a remote registry
```
uds publish [BUNDLE_TARBALL] [OCI_REF] [flags]
```
### Options
```
-h, --help help for publish
-v, --version string [Deprecated] Specify the version of the bundle to be published. This flag will be removed in a future version. Users should use the --version flag during creation to override the version defined in uds-bundle.yaml
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
-----
# uds pull
> UDS CLI command reference for uds pull.
## uds pull
Pull a bundle from a remote registry and save to the local file system
```
uds pull [OCI_REF] [flags]
```
### Options
```
-h, --help help for pull
-k, --key string Path to a public key file that will be used to validate a signed bundle
-o, --output string Specify the output directory for the pulled bundle
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
-----
# uds remove
> UDS CLI command reference for uds remove.
## uds remove
Remove a bundle that has been deployed already
```
uds remove [BUNDLE_TARBALL|OCI_REF] [flags]
```
### Options
```
-c, --confirm REQUIRED. Confirm the removal action to prevent accidental deletions
-h, --help help for remove
-p, --packages stringArray Specify which zarf packages you would like to remove from the bundle. By default all zarf packages in the bundle are removed.
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
-----
# uds run
> UDS CLI command reference for uds run.
## uds run
Run a task using maru-runner
```
uds run [flags]
```
### Options
```
-h, --help help for run
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
-----
# uds version
> UDS CLI command reference for uds version.
## uds version
Shows the version of the running UDS-CLI binary
### Synopsis
Displays the version of the UDS-CLI release that the current binary was built from.
```
uds version [flags]
```
### Options
```
-h, --help help for version
```
### Options inherited from parent commands
```
-a, --architecture string Architecture for UDS bundles and Zarf packages
--insecure Allow access to insecure registries and disable other recommended security enforcements such as package checksum and signature validation. This flag should only be used if you have a specific reason and accept the reduced security posture.
-l, --log-level string Log level when running UDS-CLI. Valid options are: warn, info, debug, trace (default "info")
--no-color Disable color output
--no-log-file Disable log file creation
--no-progress Disable fancy UI progress bars, spinners, logos, etc
--oci-concurrency int Number of concurrent layer operations to perform when interacting with a remote bundle. (default 3)
--skip-signature-validation Skip signature validation for packages
--tmpdir string Specify the temporary directory to use for intermediate files
--uds-cache string Specify the location of the UDS cache directory (default "~/.uds-cache")
```
### SEE ALSO
* [uds](/reference/cli/commands/uds/) - CLI for UDS Bundles
-----
# Overview
The [UDS CLI](https://github.com/defenseunicorns/uds-cli) is the primary interface for users to interact with various components within the UDS landscape. It streamlines the deployment process of mission applications and secure infrastructure, simplifying tasks involved in running mission applications while maintaining regulatory compliance in a unified and efficient manner.
The UDS CLI simplifies deployment by bundling multiple Zarf Packages into a single deployable artifact. This process ensures that UDS Bundles, which encompass infrastructure, platform, and mission applications, can be efficiently deployed within any Mission Hero's system environment. Additionally, the UDS CLI extends its capabilities to Pepr, where multiple Pepr applications are bundled and deployed as a single Pepr Module to support UDS Bundles during runtime.
-----
# Quickstart and Usage
## Install
Recommended installation method is with Brew:
```bash
brew tap defenseunicorns/tap && brew install uds
```
UDS CLI Binaries are also included with each [Github Release](https://github.com/defenseunicorns/uds-cli/releases)
## Contributing
Build instructions and contributing docs are located in [CONTRIBUTING.md](https://github.com/defenseunicorns/uds-cli/blob/main/CONTRIBUTING.md).
## Quickstart
The UDS-CLI's flagship feature is deploying multiple, independent Zarf packages. To create a `UDSBundle` of Zarf packages, create a `uds-bundle.yaml` file like so:
```yaml
kind: UDSBundle
metadata:
name: example
description: an example UDS bundle
version: 0.0.1
packages:
- name: init
repository: ghcr.io/defenseunicorns/packages/init
ref: v0.33.0
optionalComponents:
- git-server
- name: podinfo
repository: ghcr.io/defenseunicorns/uds-cli/podinfo
ref: 0.0.1
```
The above `UDSBundle` deploys the Zarf init package and podinfo.
The packages referenced in `packages` can exist either locally or in an OCI registry. See [here](https://github.com/defenseunicorns/uds-cli/tree/main/src/test/bundles/03-local-and-remote) for an example that deploys both local and remote Zarf packages. More `UDSBundle` examples can be found in the [src/test/bundles](https://github.com/defenseunicorns/uds-cli/tree/main/src/test/bundles) folder.
### Declarative Syntax
The syntax of a `uds-bundle.yaml` is entirely declarative. As a result, the UDS CLI will not prompt users to deploy optional components in a Zarf package. If you want to deploy an optional Zarf component, it must be specified in the `optionalComponents` key of a particular `package`.
### First-class UDS Support
When running `deploy`,`inspect`,`remove`, and `pull` commands, UDS CLI contains shorthand for interacting with the Defense Unicorns org on GHCR. Specifically, unless otherwise specified, paths will automatically be expanded to the Defense Unicorns org on GHCR. For example:
- `uds deploy unicorn-bundle:v0.1.0` is equivalent to `uds deploy ghcr.io/defenseunicorns/packages/uds/bundles/unicorn-bundle:v0.1.0`
The bundle matching and expansion is ordered as follows:
1. Local with a `tar.zst` extension
2. Remote path: `oci://ghcr.io/defenseunicorns/packages/uds/bundles/| Field | Type | Description |
|---|---|---|
| name | string (enum):
|
| Field | Type | Description |
|---|---|---|
| attributes | Attributes | |
| expose | Expose | |
| networking | Networking | |
| policy | Policy |
| Field | Type | Description |
|---|---|---|
| clusterName | string | Friendly name to associate with your UDS cluster |
| tags | string[] | Tags to apply to your UDS cluster |
| Field | Type | Description |
|---|---|---|
| adminDomain | string | Domain all cluster services on the admin gateway will be exposed on |
| caCert | string | The trusted CA that signed your domain certificates if using Private PKI |
| domain | string | Domain all cluster services will be exposed on |
| Field | Type | Description |
|---|---|---|
| kubeApiCIDR | string | CIDR range for your Kubernetes control plane nodes. This is a manual override that can be used instead of relying on Pepr to automatically watch and update the values |
| kubeNodeCIDRs | string[] | CIDR(s) for all Kubernetes nodes (not just control plane). Similar reason to above,annual override instead of relying on watch |
| Field | Type | Description |
|---|---|---|
| allowAllNsExemptions | boolean | Allow UDS Exemption custom resources to live in any namespace (default false) |
| Field | Type | Description |
|---|---|---|
| spec | Spec |
| Field | Type | Description |
|---|---|---|
| exemptions | Exemptions[] | Policy exemptions |
| Field | Type | Description |
|---|---|---|
| description | string | Reasons as to why this exemption is needed |
| matcher | Matcher | Resource to exempt (Regex allowed for name) |
| policies | Policies[] (enum):
| A list of policies to override |
| title | string | title to give the exemption for reporting purposes |
| Field | Type | Description |
|---|---|---|
| kind | string (enum):
| |
| name | string | |
| namespace | string |
| Field | Type | Description |
|---|---|---|
| spec | Spec |
| Field | Type | Description |
|---|---|---|
| monitor | Monitor[] | Create Service or Pod Monitor configurations |
| network | Network | Network configuration for the package |
| sso | Sso[] | Create SSO client configurations |
| Field | Type | Description |
|---|---|---|
| authorization | Authorization | Authorization settings. |
| description | string | A description of this monitor entry, this will become part of the ServiceMonitor name |
| fallbackScrapeProtocol | string (enum):
| The protocol for Prometheus to use if a scrape returns a blank, unparsable, or otherwise invalid Content-Type |
| kind | string (enum):
| The type of monitor to create; PodMonitor or ServiceMonitor. ServiceMonitor is the default. |
| path | string | HTTP path from which to scrape for metrics, defaults to `/metrics` |
| podSelector | Labels to match pods in the namespace to apply the policy to. Leave empty to apply to all pods in the namespace | |
| portName | string | The port name for the serviceMonitor |
| selector | Labels to match pods in the namespace to apply the policy to. Leave empty to apply to all pods in the namespace | |
| targetPort | number | The service targetPort. This is required so the NetworkPolicy can be generated correctly. |
| Field | Type | Description |
|---|---|---|
| credentials | Credentials | Selects a key of a Secret in the namespace that contains the credentials for authentication. |
| type | string | Defines the authentication type. The value is case-insensitive. "Basic" is not a supported value. Default: "Bearer" |
| Field | Type | Description |
|---|---|---|
| key | string | The key of the secret to select from. Must be a valid secret key. |
| name | string | Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names |
| optional | boolean | Specify whether the Secret or its key must be defined |
| Field | Type | Description |
|---|---|---|
| allow | Allow[] | Allow specific traffic (namespace will have a default-deny policy) |
| expose | Expose[] | Expose a service on an Istio Gateway |
| serviceMesh | ServiceMesh | Service Mesh configuration for the package |
| Field | Type | Description |
|---|---|---|
| description | string | A description of the policy, this will become part of the policy name |
| direction | string (enum):
| The direction of the traffic |
| labels | The labels to apply to the policy | |
| podLabels | Deprecated: use selector | |
| port | number | The port to allow (protocol is always TCP) |
| ports | number[] | A list of ports to allow (protocol is always TCP) |
| remoteCidr | string | Custom generated policy CIDR |
| remoteGenerated | string (enum):
| Custom generated remote selector for the policy |
| remoteHost | string | Remote host to allow traffic out to |
| remoteNamespace | string | The remote namespace to allow traffic to/from. Use * or empty string to allow all namespaces |
| remotePodLabels | Deprecated: use remoteSelector | |
| remoteProtocol | string (enum):
| Protocol used for external connection |
| remoteSelector | The remote pod selector labels to allow traffic to/from | |
| remoteServiceAccount | string | The remote service account to restrict incoming traffic from within the remote namespace. Only valid for Ingress rules. |
| selector | Labels to match pods in the namespace to apply the policy to. Leave empty to apply to all pods in the namespace | |
| serviceAccount | string | The service account to restrict outgoing traffic from within the package namespace. Only valid for Egress rules. |
| Field | Type | Description |
|---|---|---|
| advancedHTTP | AdvancedHTTP | Advanced HTTP settings for the route. |
| description | string | A description of this expose entry, this will become part of the VirtualService name |
| domain | string | The domain to expose the service on, only valid for additional gateways (not tenant, admin, or passthrough) |
| gateway | string | The name of the gateway to expose the service on (default: tenant) |
| host | string | The hostname to expose the service on |
| match | Match[] | Match the incoming request based on custom rules. Not permitted when using the passthrough gateway. |
| podLabels | Deprecated: use selector | |
| port | number | The port number to expose |
| selector | Labels to match pods in the namespace to apply the policy to. Leave empty to apply to all pods in the namespace | |
| service | string | The name of the service to expose |
| targetPort | number | The service targetPort. This defaults to port and is only required if the service port is different from the target port (so the NetworkPolicy can be generated correctly). |
| Field | Type | Description |
|---|---|---|
| corsPolicy | CorsPolicy | Cross-Origin Resource Sharing policy (CORS). |
| directResponse | DirectResponse | A HTTP rule can either return a direct_response, redirect or forward (default) traffic. |
| headers | Headers | |
| match | Match[] | Match the incoming request based on custom rules. Not permitted when using the passthrough gateway. |
| redirect | Redirect | A HTTP rule can either return a direct_response, redirect or forward (default) traffic. |
| retries | Retries | Retry policy for HTTP requests. |
| rewrite | Rewrite | Rewrite HTTP URIs and Authority headers. |
| timeout | string | Timeout for HTTP requests, default is disabled. |
| weight | integer | Weight specifies the relative proportion of traffic to be forwarded to the destination. |
| Field | Type | Description |
|---|---|---|
| allowCredentials | boolean | Indicates whether the caller is allowed to send the actual request (not the preflight) using credentials. |
| allowHeaders | string[] | List of HTTP headers that can be used when requesting the resource. |
| allowMethods | string[] | List of HTTP methods allowed to access the resource. |
| allowOrigin | string[] | |
| allowOrigins | AllowOrigins[] | String patterns that match allowed origins. |
| exposeHeaders | string[] | A list of HTTP headers that the browsers are allowed to access. |
| maxAge | string | Specifies how long the results of a preflight request can be cached. |
| Field | Type | Description |
|---|---|---|
| exact | string | |
| prefix | string | |
| regex | string | RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). |
| Field | Type | Description |
|---|---|---|
| body | Body | Specifies the content of the response body. |
| Field | Type | Description |
|---|---|---|
| bytes | string | response body as base64 encoded bytes. |
| string | string |
| Field | Type | Description |
|---|---|---|
| add | ||
| remove | string[] | |
| set |
| Field | Type | Description |
|---|---|---|
| add | ||
| remove | string[] | |
| set |
| Field | Type | Description |
|---|---|---|
| ignoreUriCase | boolean | Flag to specify whether the URI matching should be case-insensitive. |
| method | Method | |
| name | string | The name assigned to a match. |
| queryParams | Query parameters for matching. | |
| uri | Uri |
| Field | Type | Description |
|---|---|---|
| exact | string | |
| prefix | string | |
| regex | string | RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). |
| Field | Type | Description |
|---|---|---|
| exact | string | |
| prefix | string | |
| regex | string | RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). |
| Field | Type | Description |
|---|---|---|
| authority | string | On a redirect, overwrite the Authority/Host portion of the URL with this value. |
| derivePort | string (enum):
| On a redirect, dynamically set the port: * FROM_PROTOCOL_DEFAULT: automatically set to 80 for HTTP and 443 for HTTPS. Valid Options: FROM_PROTOCOL_DEFAULT, FROM_REQUEST_PORT |
| port | integer | On a redirect, overwrite the port portion of the URL with this value. |
| redirectCode | integer | On a redirect, Specifies the HTTP status code to use in the redirect response. |
| scheme | string | On a redirect, overwrite the scheme portion of the URL with this value. |
| uri | string | On a redirect, overwrite the Path portion of the URL with this value. |
| Field | Type | Description |
|---|---|---|
| attempts | integer | Number of retries to be allowed for a given request. |
| perTryTimeout | string | Timeout per attempt for a given request, including the initial call and any retries. |
| retryOn | string | Specifies the conditions under which retry takes place. |
| retryRemoteLocalities | boolean | Flag to specify whether the retries should retry to other localities. |
| Field | Type | Description |
|---|---|---|
| authority | string | rewrite the Authority/Host header with this value. |
| uri | string | rewrite the path (or the prefix) portion of the URI with this value. |
| uriRegexRewrite | UriRegexRewrite | rewrite the path portion of the URI with the specified regex. |
| Field | Type | Description |
|---|---|---|
| match | string | RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). |
| rewrite | string | The string that should replace into matching portions of original URI. |
| Field | Type | Description |
|---|---|---|
| ignoreUriCase | boolean | Flag to specify whether the URI matching should be case-insensitive. |
| method | Method | |
| name | string | The name assigned to a match. |
| queryParams | Query parameters for matching. | |
| uri | Uri |
| Field | Type | Description |
|---|---|---|
| exact | string | |
| prefix | string | |
| regex | string | RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). |
| Field | Type | Description |
|---|---|---|
| exact | string | |
| prefix | string | |
| regex | string | RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). |
| Field | Type | Description |
|---|---|---|
| mode | string (enum):
| Set the service mesh mode for this package (namespace), defaults to sidecar |
| Field | Type | Description |
|---|---|---|
| adminUrl | string | This URL will be used for every binding to both the SP's Assertion Consumer and Single Logout Services. |
| alwaysDisplayInConsole | boolean | Always list this client in the Account UI, even if the user does not have an active session. |
| attributes | Specifies attributes for the client. | |
| baseUrl | string | Default URL to use when the auth server needs to redirect or link back to the client. |
| clientAuthenticatorType | string (enum):
| The client authenticator type |
| clientId | string | The client identifier registered with the identity provider. |
| defaultClientScopes | string[] | Default client scopes |
| description | string | A description for the client, can be a URL to an image to replace the login logo |
| enableAuthserviceSelector | Labels to match pods to automatically protect with authservice. Leave empty to disable authservice protection | |
| enabled | boolean | Whether the SSO client is enabled |
| groups | Groups | The client SSO group type |
| name | string | Specifies display name of the client |
| protocol | string (enum):
| Specifies the protocol of the client, either 'openid-connect' or 'saml' |
| protocolMappers | ProtocolMappers[] | Protocol Mappers to configure on the client |
| publicClient | boolean | Defines whether the client requires a client secret for authentication |
| redirectUris | string[] | Valid URI pattern a browser can redirect to after a successful login. Simple wildcards are allowed such as 'https://unicorns.uds.dev/*' |
| rootUrl | string | Root URL appended to relative URLs |
| secret | string | The client secret. Typically left blank and auto-generated. |
| secretAnnotations | Additional annotations to apply to the generated secret, can be used for pod reloading with a selector | |
| secretLabels | Additional labels to apply to the generated secret, can be used for pod reloading | |
| secretName | string | The name of the secret to store the client secret |
| secretTemplate | A template for the generated secret | |
| serviceAccountsEnabled | boolean | Enables the client credentials grant based authentication via OpenID Connect protocol. |
| standardFlowEnabled | boolean | Enables the standard OpenID Connect redirect based authentication with authorization code. |
| webOrigins | string[] | Allowed CORS origins. To permit all origins of Valid Redirect URIs, add '+'. This does not include the '*' wildcard though. To permit all origins, explicitly add '*'. |
| Field | Type | Description |
|---|---|---|
| anyOf | string[] | List of groups allowed to access the client |
| Field | Type | Description |
|---|---|---|
| config | Configuration options for the mapper. | |
| consentRequired | boolean | Whether user consent is required for this mapper |
| name | string | Name of the mapper |
| protocol | string (enum):
| Protocol of the mapper |
| protocolMapper | string | Protocol Mapper type of the mapper |
|
|
|
|
|
|
|
|
|
### Is UDS Tactical Edge part of UDS?
- Yes, UDS Tactical Edge is a part of UDS. UDS Tactical Edge is a UDS capability with its own licensing.
### Can you explain what makes UDS Tactical Edge a capability of UDS?
- It is a collection of UDS clients and services that simplifies the use of UDS in resource-constrained environments.
- UDS is being configured specifically for tactical edge environments.
### Has UDS been deployed successfully in resource-constrained environments (edge)?
- Yes, Defense Unicorns has deployed UDS in resource-constrained environments. To discuss real-world applications, please contact [hello@defenseunicorns.com](mailto:hello@defenseunicorns.com) for more information.
### What additional features come with UDS Tactical Edge?
Defense Unicorns offers a variety of capabilities that can be bundled with your UDS Tactical Edge subscription. Some examples include:
- Unicorn or Ironbank Hardened Images
- Software Bill of Materials
- Compliance Artifacts (SCTM, SSP, etc.)
- UDS Registry and observability dashboards
- Infrastructure-specific support
- Hands-on training
To discuss licensing options, please contact [hello@defenseunicorns.com](mailto:hello@defenseunicorns.com) for more information.
### Does UDS Tactical Edge come with 24/7 support?
- Yes, UDS Tactical Edge includes 24/7 customer support via business email and phone number.
### Can you explain what in UDS Tactical Edge is proprietary or open source?
- UDS Tactical Edge is a paid stock-keeping unit (SKU) of products that includes the open-source UDS Core platform along with proprietary components that make application management easier while operating at the tactical edge.
### What happens if I stop paying for UDS Tactical Edge?
If you stop paying for UDS Tactical Edge:
- You would retain access to UDS Core and other open-source components.
- You would revert to the AGPLv3 license for receiving updates for those open-source components.
- You would lose operational support from Defense Unicorns.
- You would no longer receive updates for proprietary components, such as the Android application.
-----
# Tactical Edge Overview
UDS Tactical Edge brings our proven secure software delivery platform, UDS, to the most challenging operational environments. Deploy Kubernetes directly to anything from small remote devices with resource constraints to the DoD’s next-generation weapon systems and platforms.
- Limited resources needed (4GB RAM, such as a Raspberry Pi 5)
- Applications can run with or without connectivity - a fully airgapped solution
- Control deployments using a mobile app (tablets/smartphones) or CLI tools (laptops/desktops).
UDS Tactical Edge ensures your critical operations have the same secure and efficient software delivery capabilities in the field that you expect in enterprise environments.
To learn more watch this product explainer video. [**Contact us**](https://defenseunicorns.com/contactus) if you want to see how we can help your mission.
## One-to-Many Fleet Management
|
|
|
|
|
|
|
|
This is achieved through:
- **Functional Layer Paradigm**: UDS Core’s modular architecture allows unnecessary features to be omitted, optimizing for size, weight, and power (SWaP) constraints.
- **UDS Remote Agent**: A critical service that enables remote operation, facilitating control and monitoring of edge deployments. While primarily for UDS Edge, it can also benefit hub-spoke cloud deployments.
- **UDS Android App**: Designed to provide a mobile interface, ensuring accessibility and operational efficiency in austere environments.
While these services may not be exclusive to UDS Tactical Edge, this implementation serves as their primary use case in the near term, ensuring lightweight, efficient, and flexible deployment models tailored for tactical edge missions.
## Walkthrough Demo
## Technical Features for UDS Tactical Edge
### **1. Distributed Software and Asset Management**
- UDS enables declarative versioning of application states, ensuring consistent and reliable deployments across a distributed fleet.
- Automated or semi-automated execution allows less-experienced personnel to manage deployments, reducing system administrator workload.
- Supports smooth, incremental updates that minimize operational disruptions while maintaining software integrity across disconnected and contested environments.
### **2. Integrate Once, Deploy Anywhere**
- Operator-based architecture allows applications to dynamically adapt to their environment.
- Automates infrastructure configuration, including:
- Domain name management via UDS Package custom resources.
- Single sign-on (SSO) integration.
- Network policy automation.
- Metrics monitoring and logging.
- Ensures seamless application portability across cloud, on-premise, and edge environments.
### **3. Interface Built for Use in Combat Operations**
- Designed for high-stakes environments where user focus on the mission is critical to survival.
- Simplifies complex deployments, making software updates and management intuitive.
- Actively incorporates real user feedback to surface critical information while removing unnecessary distractions.
### **4. Airgapped Mission Applications Where You Need It**
- UDS manages software updates via declarative Open Container Initiative (OCI) artifacts.
- These artifacts include:
- Application binaries.
- Defined end-state configurations.
- Compliance artifacts for security validation.
- Ensures that UDS-deployed applications are self-contained, portable, and built on open standards, enabling seamless transport and deployment anywhere the mission requires.
With these features, UDS Tactical Edge provides a battlefield-ready platform that ensures operational efficiency, security, and adaptability for modern warfighting environments.
-----
# Adding UDS Configuration to a Zarf Package
To consider `podinfo` as a fully integrated [UDS Package](https://uds.defenseunicorns.com/structure/packages/), the `Package` Custom Resource for the UDS Operator must be included as part of the Zarf Package for `podinfo`. In this section, we will cover adding the `podinfo-package.yaml` to the sample UDS Bundle that we created in the [first](/tutorials/deploy-with-uds-core) tutorial.
### Prerequisites
This guide assumes that you created the UDS `Package` Custom Resource in the [previous](/tutorials/create-uds-package) tutorial.
### Adding Package Manifest to Podinfo
Within the `zarf.yaml` file that exists in the `package` directory, modify the `podinfo` component to reference the manifest created in the previous tutorial:
```yaml
kind: ZarfPackageConfig
metadata:
name: podinfo
version: 0.0.1
components:
- name: podinfo
required: true
charts:
- name: podinfo
version: 6.4.0
namespace: podinfo
url: https://github.com/stefanprodan/podinfo.git
gitPath: charts/podinfo
# Add this new manifests section with our Package CR
manifests:
- name: podinfo-uds-config
namespace: podinfo
files:
- podinfo-package.yaml
images:
- ghcr.io/stefanprodan/podinfo:6.4.0
actions:
onDeploy:
after:
- wait:
cluster:
kind: deployment
name: podinfo
namespace: podinfo
condition: available
```
Re-run `zarf package create --confirm` and `uds create --confirm` commands to generate new artifacts that now include the `Package` Custom Resource for `podinfo`. From there, the bundle can be re-deployed (`uds deploy uds-bundle-podinfo-bundle-*-0.0.1.tar.zst --confirm`) and `podinfo` will be automatically integrated with UDS Core.
#### Next Steps
(Optional) This tutorial deployed podinfo in Istio Sidecar mode - the default deployment method for applications in UDS Core. UDS Core releases v0.40.0 and later added support for Istio Ambient Mesh. To walkthrough migrating the podinfo application to Istio Ambient Mesh using the UDS Operator, continue to the next tutorial.
-----
# Integrating an Application with UDS Core
## Background
When UDS Core is deployed into a Kubernetes Cluster, an [operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) is deployed. An operator allows users to extend the functionality of their Kubernetes clusters via [Custom Resource Definitions](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) and custom controllers. This operator, henceforth known as the UDS Operator, looks for `Package` Custom Resources to be created. When a user creates a `Package` resource, the UDS Operator processes the request and performs the necessary operations to create the package per the [specification](/reference/configuration/custom-resources/packages-v1alpha1-cr/) given.
Read more about the UDS Operator [here](https://uds.defenseunicorns.com/reference/configuration/uds-operator/).
### Prerequisites
In this section, we will configure Single Sign On (SSO) for a sample user to access the `podinfo` application. This requires that your Keycloak instance has existing users and groups defined. This configuration has been automated via the `uds` cli.
In the root of the `package` directory, create a new file called `tasks.yaml` and include the lines below:
```yaml
includes:
- common-setup: https://raw.githubusercontent.com/defenseunicorns/uds-common/refs/tags/v0.13.1/tasks/setup.yaml
```
### Integrate Podinfo with UDS Core
You can think of the UDS Operator as the "glue" between your application and the services that are provided by UDS Core. It is a [Kubernetes Operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) that has working knowledge of UDS Core services in the cluster and takes care of integrating your app with those services for you. To register your application with the UDS Operator, you need to create a `Package` Kubernetes Custom Resource. Within the specification of the `Package` resource, you can specify different parameters that dictate how the UDS Operator should integrate your app per its unique requirements. The sections below cover creating a `Package` resource for `podinfo` and integrating `podinfo` with several UDS Core services.
:::note
The `Package` Custom Kubernetes Resource is different from a [UDS Package](https://uds.defenseunicorns.com/structure/packages/), which is a collection of the Zarf Package for your application and the Kubernetes `Package` Custom Resource.
:::
:::note
All resources created by the UDS Operator for `podinfo` will have a `uds/package=podinfo` label applied to it.
:::
#### Create a Package Resource for Podinfo
Below is a baseline definition of a `Package` Custom Resource for the `podinfo` application. As you progress through this demo, you will add values for `network`, `sso`, and `monitor`. These fields instruct the UDS Operator on how to configure networking, SSO, and monitoring for the `podinfo` application.
```yaml
apiVersion: uds.dev/v1alpha1
kind: Package
metadata:
name: podinfo
namespace: podinfo
spec:
network:
# Expose rules generate Istio VirtualServices and related network policies
expose: {}
```
Copy this YAML into a code editor and save the file as `podinfo-package.yaml`.
#### Secure Podinfo with Istio and Network Policies
UDS Core deploys [Istio](https://istio.io/), a powerful networking component that allows cluster administrators to end-to-end encrypt all cluster traffic, set explicit rules for traffic routing, add load balancing, and much more. Building on the existing `Package` definition, add the following configuration under `spec.network.expose` field:
```yaml
apiVersion: uds.dev/v1alpha1
kind: Package
metadata:
name: podinfo
namespace: podinfo
spec:
network:
# Expose rules generate Istio VirtualServices and related network policies
expose:
- service: podinfo
selector:
app.kubernetes.io/name: podinfo
gateway: tenant
host: podinfo
port: 9898
```
This change will allow us to interact with `podinfo` without having to use `kubectl port-forward`.
Save your changes and apply the file:
```bash
kubectl apply -f podinfo-package.yaml
```
View the package resource:
```bash
❯ kubectl get package -n podinfo
NAME STATUS SSO CLIENTS ENDPOINTS MONITORS NETWORK POLICIES AUTHORIZATION POLICIES AGE
podinfo Ready [] ["podinfo.uds.dev"] [] 5 2 4s
```
View the pods. Notice how the podinfo pod has an additional container as a result of the UDS Operator configuring istio:
```bash
❯ kubectl get pods -n podinfo
NAME READY STATUS RESTARTS AGE
podinfo-5cbbf59f6d-bqhsk 2/2 Running 0 2m
```
Observe the Istio VirtualService that the UDS Operator created:
```bash
❯ kubectl get virtualservice -n podinfo
NAME GATEWAYS HOSTS AGE
podinfo-tenant-podinfo-9898-podinfo ["istio-tenant-gateway/tenant-gateway"] ["podinfo.uds.dev"] 60s
```
You will also notice that the UDS Operator automatically generated a set of Kubernetes `NetworkPolicies` that restrict access to your application to only required services:
```bash
❯ kubectl get networkpolicy -n podinfo
NAME POD-SELECTOR AGE
allow-podinfo-egress-dns-lookup-via-coredns