# Usage

nova find --wide

# Options

Flags:
      --chart-ignore-list strings     List of Helm chart names to ignore
      --containers                    Show old container image versions instead of helm chart versions. There will be no helm output if this flag is set.
      --helm                          Show old helm chart versions. You can combine this flag with --containers to have both output in a single run.
  -h, --help                          help for find
      --release-ignore-list strings   List of Helm release names to ignore
      --show-errored-containers       When finding container images, show errors encountered when scanning.
      --show-non-semver               When finding container images, show all containers even if they don't follow semver.
  -t, --timeout uint16                When finding container images, the time in seconds before canceling the operation. (default 10)

Global Flags:
      --alsologtostderr                   log to standard error as well as files (no effect when -logtostderr=true) (default true)
      --config string                     Config file to use. If empty, flags will be used instead
      --context string                    A context to use in the kubeconfig.
  -d, --desired-versions stringToString   A map of chart=override_version to override the helm repository when checking. (default [])
      --format string                     An output format (table, json) (default "json")
  -a, --include-all                       Show all charts even if no latest version is found.
      --logtostderr                       log to standard error instead of files (default true)
  -n, --namespace string                  Namespace to look in. If empty, scan will be cluster-wide
      --output-file string                Path on local filesystem to write file output to
      --poll-artifacthub                  When true, polls artifacthub to match against helm releases in the cluster. If false, you must provide a url list via --url/-u. Default is true. (default true)
      --show-old                          Only show charts that are not on the latest version
  -u, --url strings                       URL for a helm chart repo
  -v, --v Level                           number for the log level verbosity
      --wide                              Output chart name and namespace

# Referencing Private Registries

If you would like to use nova to find outdated releases from charts in private helm repositories, please use the --url flag to point to that registry. Any authentication should be already configured in your local helm repo settings. Additionally, you may want to set --poll-artifacthub=false if there are no releases from public repositories that you wish to find.

# Generate Config

If you would like to generate a config file with all of the defaults for Nova, you can do that:

$ nova generate-config --config=nova.yaml
cat nova.yaml

context: ""
desired-versions: {}
include-all: false
output-file: ""
wide: false

# Helm Scanning Output

Below is sample output for Nova

# CLI

Release Name      Installed    Latest     Old     Deprecated
============      =========    ======     ===     ==========
goldilocks        3.3.1        4.0.1      true    false
metrics-server    5.6.0        5.10.10    true    false
redis             15.4.1       15.5.5     true    false

# CLI (with --wide)

Release Name      Chart Name        Namespace         HelmVersion    Installed    Latest     Old     Deprecated
============      ==========        =========         ===========    =========    ======     ===     ==========
goldilocks        goldilocks        goldilocks        3              3.3.1        4.0.1      true    false
metrics-server    metrics-server    metrics-server    3              5.6.0        5.10.10    true    false
redis             redis             redis             3              15.4.1       15.5.5     true    false

# JSON

{
    "helm": [
        {
          "release": "goldilocks",
          "chartName": "goldilocks",
          "namespace": "goldilocks",
          "description": "A Helm chart for running Fairwinds Goldilocks. See https://github.com/FairwindsOps/goldilocks\n",
          "icon": "https://raw.githubusercontent.com/FairwindsOps/charts/master/stable/goldilocks/icon.png",
          "Installed": {
            "version": "3.3.1",
            "appVersion": "v3.1.4"
          },
          "Latest": {
            "version": "4.0.1",
            "appVersion": "v4.0.0"
          },
          "outdated": true,
          "deprecated": false,
          "helmVersion": "3",
          "overridden": false
        }
    ]
}

# Container Image Output

There are a couple flags that are unique to the container image output.

  • --show-non-semver will also show any container tags running in the cluster that do not have valid semver versions. By default these are not shown.
  • --show-errored-containers will show any containers that returned some sort of error when reaching out to the registry and/or when processing the tags.
  • --timeout will set the time (in seconds) before remote queries to the registry are cancelled. Useful when an image has many tags. Defaults to 10 seconds.

Below is sample output for Nova when using the --containers flag

$ nova find --containers
Container Name                              Current Version    Old     Latest     Latest Minor     Latest Patch
==============                              ===============    ===     ======     =============    =============
k8s.gcr.io/coredns/coredns                  v1.8.0             true    v1.8.6     v1.8.6           v1.8.6
k8s.gcr.io/etcd                             3.4.13-0           true    3.5.3-0    3.4.13-0         3.4.13-0
k8s.gcr.io/kube-apiserver                   v1.21.1            true    v1.23.6    v1.23.6          v1.21.12
k8s.gcr.io/kube-controller-manager          v1.21.1            true    v1.23.6    v1.23.6          v1.21.12
k8s.gcr.io/kube-proxy                       v1.21.1            true    v1.23.6    v1.23.6          v1.21.12
k8s.gcr.io/kube-scheduler                   v1.21.1            true    v1.23.6    v1.23.6          v1.21.12

# Container output with errors

When scanning all containers, nova will capture any errors and move on. To show which containers had errors, use the --show-errored-containers flag. Output will look like:

$ nova find --containers --show-errored-containers
Container Name                              Current Version    Old     Latest     Latest Minor     Latest Patch
==============                              ===============    ===     ======     =============    =============
k8s.gcr.io/coredns/coredns                  v1.8.0             true    v1.8.6     v1.8.6           v1.8.6
k8s.gcr.io/etcd                             3.4.13-0           true    3.5.3-0    3.4.13-0         3.4.13-0
k8s.gcr.io/kube-apiserver                   v1.21.1            true    v1.23.6    v1.23.6          v1.21.12
k8s.gcr.io/kube-controller-manager          v1.21.1            true    v1.23.6    v1.23.6          v1.21.12
k8s.gcr.io/kube-proxy                       v1.21.1            true    v1.23.6    v1.23.6          v1.21.12
k8s.gcr.io/kube-scheduler                   v1.21.1            true    v1.23.6    v1.23.6          v1.21.12


Errors:
Container Name                        Error
==============                        =====
examplething.com/testing:v1.0.0       Get "https://examplething.com/v2/": dial tcp: lookup examplethingert.com: no such host                                                                                                 =====

# Helm Releases and Container Images combined output

If you want to run nova and both helm releases and containers images results in a single run

Below is sample output for Nova when using the --helm --containers flag

$ nova --format=table find --helm --containers
Release Name      Installed    Latest    Old      Deprecated
============      =========    ======    ===      ==========
cert-manager      v1.9.1       1.9.1     false    false
insights-agent    2.0.7        2.6.8     true     false

Container Name                        Current Version    Old     Latest     Latest Minor     Latest Patch
==============                        ===============    ===     ======     =============    =============
k8s.gcr.io/coredns/coredns            v1.8.4             true    v1.9.3     v1.9.3           v1.8.6
k8s.gcr.io/etcd                       3.5.0-0            true    3.5.4-0    3.5.0-0          3.5.0-0
k8s.gcr.io/kube-apiserver             v1.22.9            true    v1.25.0    v1.25.0          v1.22.13
k8s.gcr.io/kube-controller-manager    v1.22.9            true    v1.25.0    v1.25.0          v1.22.13
k8s.gcr.io/kube-proxy                 v1.22.9            true    v1.25.0    v1.25.0          v1.22.13
k8s.gcr.io/kube-scheduler             v1.22.9            true    v1.25.0    v1.25.0          v1.22.13

You can print the output in json format

$ nova --format=json find --helm --containers | jq
{
  "helm": [
    {
      "release": "cert-manager",
      "chartName": "cert-manager",
      "namespace": "cert-manager",
      "description": "A Helm chart for cert-manager",
      "home": "https://github.com/cert-manager/cert-manager",
      "icon": "https://raw.githubusercontent.com/cert-manager/cert-manager/d53c0b9270f8cd90d908460d69502694e1838f5f/logo/logo-small.png",
      "Installed": { "version": "v1.9.1", "appVersion": "v1.9.1" },
      "Latest": { "version": "1.9.1", "appVersion": "v1.9.1" },
      "outdated": false,
      "deprecated": false,
      "helmVersion": "3",
      "overridden": false
    }
  ],
  "include_all": false,
  "container": {
    "container_images": [
      {
        "name": "k8s.gcr.io/kube-scheduler",
        "current_version": "v1.22.9",
        "latest_version": "v1.25.0",
        "latest_minor_version": "v1.25.0",
        "latest_patch_version": "v1.22.13",
        "outdated": true,
        "affectedWorkloads": [
          {
            "name": "kube-scheduler-kind-control-plane",
            "namespace": "kube-system",
            "kind": "Pod",
            "container": "kube-scheduler"
          }
        ]
      }
    ],
    "err_images": null,
    "latest_string_found": false
  }
}