Skip to content

Instantly share code, notes, and snippets.

@codegold79
Last active November 14, 2022 21:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codegold79/0b4e76d437e58173dc17fbb2047e2e69 to your computer and use it in GitHub Desktop.
Save codegold79/0b4e76d437e58173dc17fbb2047e2e69 to your computer and use it in GitHub Desktop.
Manual testing of Tanzu CLI Feature Plugin - 11/11/2022

Feature Plugin CLI Demonstration

First, let's start with features, but no featuregates in the cluster. The Feature plugin should list the features.

$ kubectl get featuregates
No resources found
$ kubectl get features -o yaml
apiVersion: v1
items:
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"big-cache"},"spec":{"description":"A sample big cache Feature","stability":"Stable"}}
    creationTimestamp: "2022-11-12T04:50:56Z"
    generation: 2
    name: big-cache
    resourceVersion: "210712"
    uid: 0521cb11-437f-46d0-8d65-2de83d40d614
  spec:
    description: A sample big cache Feature
    stability: Stable
  status:
    activated: true
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"bite-size-cache"},"spec":{"description":"A bite-size small cache Feature","stability":"Technical Preview"}}
    creationTimestamp: "2022-11-12T04:50:56Z"
    generation: 2
    name: bite-size-cache
    resourceVersion: "210726"
    uid: 30663bf7-30e7-447c-a5d2-80cb21e7ae9f
  spec:
    description: A bite-size small cache Feature
    stability: Technical Preview
  status:
    activated: false
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"dupe-cache"},"spec":{"description":"A sample medium cache Feature","stability":"Deprecated"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 2
    name: dupe-cache
    resourceVersion: "210723"
    uid: b46bd4b6-569b-49f2-9460-b3ea66665c8d
  spec:
    description: A sample medium cache Feature
    stability: Deprecated
  status:
    activated: true
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"medium-cache"},"spec":{"description":"A sample medium cache Feature","stability":"Deprecated"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 2
    name: medium-cache
    resourceVersion: "210725"
    uid: 2644c504-e5b0-4ab3-958a-9858490aa5da
  spec:
    description: A sample medium cache Feature
    stability: Deprecated
  status:
    activated: false
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"new-cache"},"spec":{"description":"A sample medium cache Feature","stability":"Experimental"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 2
    name: new-cache
    resourceVersion: "210728"
    uid: 6407b12d-4754-4af2-a544-3e51f08b2c23
  spec:
    description: A sample medium cache Feature
    stability: Experimental
  status:
    activated: false
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"small-cache"},"spec":{"description":"A sample small cache Feature","stability":"Technical Preview"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 2
    name: small-cache
    resourceVersion: "210718"
    uid: adbb56f1-0ab6-4ebc-b59b-fef755185264
  spec:
    description: A sample small cache Feature
    stability: Technical Preview
  status:
    activated: false
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"tiny-cache"},"spec":{"description":"A sample medium cache Feature","stability":"Experimental"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 2
    name: tiny-cache
    resourceVersion: "210730"
    uid: aae87111-8042-4115-b1ac-4fd0950507e6
  spec:
    description: A sample medium cache Feature
    stability: Experimental
  status:
    activated: false
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

See the help for the Feature plugin base command.

$ ./build/feature
Operate on features and featuregates

Usage:
  tanzu feature [command]

Available Commands:
  activate      Activate features
  completion    Generate the autocompletion script for the specified shell
  deactivate    Deactivate Features
  list          List features

Flags:
  -h, --help   help for feature

Use "tanzu feature [command] --help" for more information about a command.

$ ./build/feature list --help
List features

Usage:
  tanzu feature list [flags]

Examples:

	# List feature(s) referenced in featuregate(s)
	tanzu feature list --activated
	tanzu feature list --deactivated

Flags:
  -a, --activated              List only activated features
  -d, --deactivated            List only deactivated features
  -e, --extended               Include extended output
  -f, --featuregate string     List features gated by specified FeatureGate
  -h, --help                   help for list
  -x, --include-experimental   Include experimental features in list
  -o, --output string          Output format (yaml|json|table)
$ ./build/feature list --activated

  NAME        ACTIVATION STATE  FEATUREGATE
  dupe-cache  true              --
  big-cache   true              --
$ ./build/feature list --deactivated

  NAME             ACTIVATION STATE  FEATUREGATE
  medium-cache     false             --
  small-cache      false             --
  bite-size-cache  false             --
$ ./build/feature list  --extended
  NAME             ACTIVATION STATE  STABILITY          DESCRIPTION                      IMMUTABLE  FEATUREGATE
  medium-cache     false             Deprecated         A sample medium cache Feature    false      --
  small-cache      false             Technical Preview  A sample small cache Feature     false      --
  big-cache        true              Stable             A sample big cache Feature       true       --
  bite-size-cache  false             Technical Preview  A bite-size small cache Feature  false      --
  dupe-cache       true              Deprecated         A sample medium cache Feature    false      --
$ ./build/feature list  --include-experimental
  NAME             ACTIVATION STATE  FEATUREGATE
  bite-size-cache  false             --
  dupe-cache       true              --
  medium-cache     false             --
  new-cache        false             --
  small-cache      false             --
  tiny-cache       false             --
  big-cache        true              --

Now, add featuregates. Note that none of the warranties for any of the features have been voided.

$ kubectl apply -f /Users/fgold/Documents/Tech/tanzu-framework/notes/How-To-Test-Locally/fg-feat.yaml
featuregate.core.tanzu.vmware.com/tkg-system-a created
featuregate.core.tanzu.vmware.com/tkg-system-b created
feature.core.tanzu.vmware.com/big-cache unchanged
feature.core.tanzu.vmware.com/bite-size-cache unchanged
feature.core.tanzu.vmware.com/small-cache unchanged
feature.core.tanzu.vmware.com/medium-cache unchanged
feature.core.tanzu.vmware.com/dupe-cache unchanged
feature.core.tanzu.vmware.com/medium-cache unchanged
feature.core.tanzu.vmware.com/tiny-cache unchanged
feature.core.tanzu.vmware.com/new-cache unchanged
$ kubectl get featuregates -o yaml
apiVersion: v1
items:
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: FeatureGate
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"FeatureGate","metadata":{"annotations":{},"name":"tkg-system-a"},"spec":{"features":[{"activate":false,"name":"medium-cache"},{"activate":true,"name":"big-cache"},{"activate":false,"name":"unknown-cache"},{"activate":false,"name":"tiny-cache"},{"activate":true,"name":"dupe-cache"}]}}
    creationTimestamp: "2022-11-12T04:52:48Z"
    generation: 1
    name: tkg-system-a
    resourceVersion: "210872"
    uid: a20a4cd6-28de-45b2-af72-df4917563e5c
  spec:
    features:
    - activate: false
      name: medium-cache
    - activate: true
      name: big-cache
    - activate: false
      name: unknown-cache
    - activate: false
      name: tiny-cache
    - activate: true
      name: dupe-cache
  status:
    results:
    - message: Feature does not exist in cluster
      name: unknown-cache
      status: Invalid
    - message: Feature has been successfully toggled
      name: tiny-cache
      status: Applied
    - message: Feature has been successfully toggled
      name: dupe-cache
      status: Applied
    - message: Feature has been successfully toggled
      name: medium-cache
      status: Applied
    - message: Feature has been successfully toggled
      name: big-cache
      status: Applied
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: FeatureGate
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"FeatureGate","metadata":{"annotations":{},"name":"tkg-system-b"},"spec":{"features":[{"activate":false,"name":"small-cache"},{"activate":true,"name":"dupe-cache"},{"activate":false,"name":"new-cache"}]}}
    creationTimestamp: "2022-11-12T04:52:48Z"
    generation: 1
    name: tkg-system-b
    resourceVersion: "210874"
    uid: b411b5a4-9ca1-46ea-bf29-fa270a1095c8
  spec:
    features:
    - activate: false
      name: small-cache
    - activate: true
      name: dupe-cache
    - activate: false
      name: new-cache
  status:
    results:
    - message: Feature has been successfully toggled
      name: small-cache
      status: Applied
    - message: Feature has been successfully toggled
      name: new-cache
      status: Applied
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
$ ./build/feature list  --include-experimental

  NAME             ACTIVATION STATE  FEATUREGATE
  unknown-cache    false             tkg-system-a
  big-cache        true              tkg-system-a
  bite-size-cache  false             --
  dupe-cache       true              tkg-system-b
  medium-cache     false             tkg-system-a
  new-cache        false             tkg-system-b
  small-cache      false             tkg-system-b
  tiny-cache       false             tkg-system-a
$ ./build/feature list  --include-experimental --featuregate tkg-system-a

  NAME           ACTIVATION STATE  FEATUREGATE
  medium-cache   false             tkg-system-a
  tiny-cache     false             tkg-system-a
  unknown-cache  false             tkg-system-a
  big-cache      true              tkg-system-a
$ ./build/feature list  --include-experimental --featuregate tkg-system-a --extended

  NAME           ACTIVATION STATE  STABILITY     DESCRIPTION                    IMMUTABLE  FEATUREGATE
  medium-cache   false             Deprecated    A sample medium cache Feature  false      tkg-system-a
  tiny-cache     false             Experimental  A sample medium cache Feature  false      tkg-system-a
  unknown-cache  false                                                          false      tkg-system-a
  big-cache      true              Stable        A sample big cache Feature     true       tkg-system-a

Try to activate a Feature that is already active.

$ ./build/feature activate big-cache
The Feature Reference big-cache is already set to be activated in FeatureGate tkg-system-a.
Feature big-cache gated by FeatureGate tkg-system-a is activated.

Try to deactivate a Feature that is stable. It should not be allowed.

$ ./build/feature deactivate big-cache
Error: could not deactivate Feature big-cache gated by FeatureGate tkg-system-a: could not validate Feature changing activation set point: activation setting for Feature big-cache cannot be toggled as its stability level is Stable: Forbidden
Usage:
  tanzu feature deactivate <feature> [flags]

Examples:

	# Deactivate a cluster Feature
	tanzu feature deactivate myfeature

Flags:
  -f, --featuregate string   Deactivate Feature gated by a particular FeatureGate
  -h, --help                 help for deactivate

Activation and deactivation of a deprecated Feature is allowed.

$ ./build/feature activate medium-cache
Feature medium-cache gated by FeatureGate tkg-system-a is activated.
$ ./build/feature deactivate medium-cache
Feature medium-cache gated by FeatureGate tkg-system-a is deactivated.
$ ./build/feature list -e

  NAME             ACTIVATION STATE  STABILITY          DESCRIPTION                      IMMUTABLE  FEATUREGATE
  unknown-cache    false                                                                 false      tkg-system-a
  big-cache        true              Stable             A sample big cache Feature       true       tkg-system-a
  bite-size-cache  false             Technical Preview  A bite-size small cache Feature  false      --
  dupe-cache       true              Deprecated         A sample medium cache Feature    false      tkg-system-b
  medium-cache     false             Deprecated         A sample medium cache Feature    false      tkg-system-a
  small-cache      false             Technical Preview  A sample small cache Feature     false      tkg-system-b

Features that are not gated by FeatureGates cannot be activated nor deactivated.

$ ./build/feature activate bite-size-cache
Error: could not activate Feature bite-size-cache gated by FeatureGate : could not validate Feature changing activation set point: the Feature bite-size-cache must exist in one FeatureGate: Not found
Usage:
  tanzu feature activate <feature> [flags]

Examples:

	# Activate a cluster Feature
	tanzu feature activate myfeature

Flags:
  -h, --help                                  help for activate
      --permanentlyVoidAllSupportGuarantees   Allow for the permanent voiding of all support guarantees for this environment. For some features, e.g. experimental features, if a user sets the activation status to one that does not match the default activation, all support guarantees for this environment will be permanently voided.

Technical preview Features must show a warning when being activated.

$ ./build/feature activate small-cache
Warning: Technical preview features are not ready, but are not believed to be dangerous. The feature itself is unsupported, but activating technical preview features does not affect the support status of the environment. Use at your own risk.

Feature small-cache gated by FeatureGate tkg-system-b is activated.
$ ./build/feature activate small-cache
The Feature Reference small-cache is already set to be activated in FeatureGate tkg-system-b.
Warning: Technical preview features are not ready, but are not believed to be dangerous. The feature itself is unsupported, but activating technical preview features does not affect the support status of the environment. Use at your own risk.
Feature small-cache gated by FeatureGate tkg-system-b is activated.
$ ./build/feature deactivate small-cache
Feature small-cache gated by FeatureGate tkg-system-b is deactivated.
$ ./build/feature deactivate small-cache
The Feature Reference small-cache is already set to be deactivated in FeatureGate tkg-system-b.
Feature small-cache gated by FeatureGate tkg-system-b is deactivated.

Activating an experimental Feature can be done via user interaction.

$ ./build/feature list -e -x

  NAME             ACTIVATION STATE  STABILITY          DESCRIPTION                      IMMUTABLE  FEATUREGATE
  new-cache        false             Experimental       A sample medium cache Feature    false      tkg-system-b
  small-cache      false             Technical Preview  A sample small cache Feature     false      tkg-system-b
  tiny-cache       false             Experimental       A sample medium cache Feature    false      tkg-system-a
  unknown-cache    false                                                                 false      tkg-system-a
  big-cache        true              Stable             A sample big cache Feature       true       tkg-system-a
  bite-size-cache  false             Technical Preview  A bite-size small cache Feature  false      --
  dupe-cache       true              Deprecated         A sample medium cache Feature    false      tkg-system-b
  medium-cache     false             Deprecated         A sample medium cache Feature    false      tkg-system-a
$ ./build/feature list -e -x -f tkg-system-b

  NAME         ACTIVATION STATE  STABILITY          DESCRIPTION                    IMMUTABLE  FEATUREGATE
  small-cache  false             Technical Preview  A sample small cache Feature   false      tkg-system-b
  dupe-cache   true              Deprecated         A sample medium cache Feature  false      tkg-system-b
  new-cache    false             Experimental       A sample medium cache Feature  false      tkg-system-b
$ ./build/feature activate new-cache
Warning: activating "new-cache", a Experimental Feature will irrevocably void all support guarantees for this environment. You will need to recreate the environment to return to a supported state.
Would you like to continue [y/N]?no
Error: could not activate Feature new-cache gated by FeatureGate tkg-system-b: warranty will be voided with new activation set point, but user has not given express permission to void the warranty: Forbidden
Usage:
  tanzu feature activate <feature> [flags]

Examples:

	# Activate a cluster Feature
	tanzu feature activate myfeature

Flags:
  -h, --help                                  help for activate
      --permanentlyVoidAllSupportGuarantees   Allow for the permanent voiding of all support guarantees for this environment. For some features, e.g. experimental features, if a user sets the activation status to one that does not match the default activation, all support guarantees for this environment will be permanently voided.

$ ./build/feature activate new-cache
Warning: activating "new-cache", a Experimental Feature will irrevocably void all support guarantees for this environment. You will need to recreate the environment to return to a supported state.
Would you like to continue [y/N]?n
Error: could not activate Feature new-cache gated by FeatureGate tkg-system-b: warranty will be voided with new activation set point, but user has not given express permission to void the warranty: Forbidden
Usage:
  tanzu feature activate <feature> [flags]

Examples:

	# Activate a cluster Feature
	tanzu feature activate myfeature

Flags:
  -h, --help                                  help for activate
      --permanentlyVoidAllSupportGuarantees   Allow for the permanent voiding of all support guarantees for this environment. For some features, e.g. experimental features, if a user sets the activation status to one that does not match the default activation, all support guarantees for this environment will be permanently voided.

$ ./build/feature activate new-cache
Warning: activating "new-cache", a Experimental Feature will irrevocably void all support guarantees for this environment. You will need to recreate the environment to return to a supported state.
Would you like to continue [y/N]?
Error: could not activate Feature new-cache gated by FeatureGate tkg-system-b: warranty will be voided with new activation set point, but user has not given express permission to void the warranty: Forbidden
Usage:
  tanzu feature activate <feature> [flags]

Examples:

	# Activate a cluster Feature
	tanzu feature activate myfeature

Flags:
  -h, --help                                  help for activate
      --permanentlyVoidAllSupportGuarantees   Allow for the permanent voiding of all support guarantees for this environment. For some features, e.g. experimental features, if a user sets the activation status to one that does not match the default activation, all support guarantees for this environment will be permanently voided.

$ ./build/feature activate new-cache
Warning: activating "new-cache", a Experimental Feature will irrevocably void all support guarantees for this environment. You will need to recreate the environment to return to a supported state.
Would you like to continue [y/N]?y
Feature new-cache gated by FeatureGate tkg-system-b is activated.

The FeatureGate for the activated experimental Feature now shows the warranty has been permanently voided. Once voided, the Feature can be activate and deactivated without further notices and/or warnings.

$ kubectl get featuregates tkg-system-b -o yaml
apiVersion: core.tanzu.vmware.com/v1alpha2
kind: FeatureGate
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"FeatureGate","metadata":{"annotations":{},"name":"tkg-system-b"},"spec":{"features":[{"activate":false,"name":"small-cache"},{"activate":true,"name":"dupe-cache"},{"activate":false,"name":"new-cache"}]}}
  creationTimestamp: "2022-11-12T04:52:48Z"
  generation: 5
  name: tkg-system-b
  resourceVersion: "211124"
  uid: b411b5a4-9ca1-46ea-bf29-fa270a1095c8
spec:
  features:
  - name: small-cache
  - activate: true
    name: dupe-cache
  - activate: true
    name: new-cache
    permanentlyVoidAllSupportGuarantees: true
status:
  results:
  - message: Feature has been successfully toggled
    name: small-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: new-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: dupe-cache
    status: Applied
$ ./build/feature deactivate new-cache
Feature new-cache gated by FeatureGate tkg-system-b is deactivated.
$ ./build/feature activate new-cache
Feature new-cache gated by FeatureGate tkg-system-b is activated.

Experimental features can also be activated non-interactively, using a flag. Doing so will also void the warranty.

$ ./build/feature list -e -x -f tkg-system-a

  NAME           ACTIVATION STATE  STABILITY     DESCRIPTION                    IMMUTABLE  FEATUREGATE
  medium-cache   false             Deprecated    A sample medium cache Feature  false      tkg-system-a
  tiny-cache     false             Experimental  A sample medium cache Feature  false      tkg-system-a
  unknown-cache  false                                                          false      tkg-system-a
  big-cache      true              Stable        A sample big cache Feature     true       tkg-system-a
$ ./build/feature activate tiny-cache
Warning: activating "tiny-cache", a Experimental Feature will irrevocably void all support guarantees for this environment. You will need to recreate the environment to return to a supported state.
Would you like to continue [y/N]?no
Error: could not activate Feature tiny-cache gated by FeatureGate tkg-system-a: warranty will be voided with new activation set point, but user has not given express permission to void the warranty: Forbidden
Usage:
  tanzu feature activate <feature> [flags]

Examples:

	# Activate a cluster Feature
	tanzu feature activate myfeature

Flags:
  -h, --help                                  help for activate
      --permanentlyVoidAllSupportGuarantees   Allow for the permanent voiding of all support guarantees for this environment. For some features, e.g. experimental features, if a user sets the activation status to one that does not match the default activation, all support guarantees for this environment will be permanently voided.

$ ./build/feature activate tiny-cache --permanentlyVoidAllSupportGuarantees
Feature tiny-cache gated by FeatureGate tkg-system-a is activated.
$ kubectl get featuregates tkg-system-a -o yaml
apiVersion: core.tanzu.vmware.com/v1alpha2
kind: FeatureGate
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"FeatureGate","metadata":{"annotations":{},"name":"tkg-system-a"},"spec":{"features":[{"activate":false,"name":"medium-cache"},{"activate":true,"name":"big-cache"},{"activate":false,"name":"unknown-cache"},{"activate":false,"name":"tiny-cache"},{"activate":true,"name":"dupe-cache"}]}}
  creationTimestamp: "2022-11-12T04:52:48Z"
  generation: 5
  name: tkg-system-a
  resourceVersion: "211201"
  uid: a20a4cd6-28de-45b2-af72-df4917563e5c
spec:
  features:
  - name: medium-cache
  - activate: true
    name: big-cache
  - name: unknown-cache
  - activate: true
    name: tiny-cache
    permanentlyVoidAllSupportGuarantees: true
  - activate: true
    name: dupe-cache
status:
  results:
  - message: Feature does not exist in cluster
    name: unknown-cache
    status: Invalid
  - message: Feature has been successfully toggled
    name: tiny-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: dupe-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: medium-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: big-cache
    status: Applied

Even when an experimental Feature whose warranty has been voided is deactivated, the warranty remains void.

$ ./build/feature deactivate tiny-cache
Feature tiny-cache gated by FeatureGate tkg-system-a is deactivated.
$ kubectl get featuregates tkg-system-a -o yaml
apiVersion: core.tanzu.vmware.com/v1alpha2
kind: FeatureGate
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"FeatureGate","metadata":{"annotations":{},"name":"tkg-system-a"},"spec":{"features":[{"activate":false,"name":"medium-cache"},{"activate":true,"name":"big-cache"},{"activate":false,"name":"unknown-cache"},{"activate":false,"name":"tiny-cache"},{"activate":true,"name":"dupe-cache"}]}}
  creationTimestamp: "2022-11-12T04:52:48Z"
  generation: 6
  name: tkg-system-a
  resourceVersion: "211230"
  uid: a20a4cd6-28de-45b2-af72-df4917563e5c
spec:
  features:
  - name: medium-cache
  - activate: true
    name: big-cache
  - name: unknown-cache
  - name: tiny-cache
    permanentlyVoidAllSupportGuarantees: true
  - activate: true
    name: dupe-cache
status:
  results:
  - message: Feature does not exist in cluster
    name: unknown-cache
    status: Invalid
  - message: Feature has been successfully toggled
    name: tiny-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: dupe-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: medium-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: big-cache
    status: Applied
$ kubectl get featuregates tkg-system-b -o yaml
apiVersion: core.tanzu.vmware.com/v1alpha2
kind: FeatureGate
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"FeatureGate","metadata":{"annotations":{},"name":"tkg-system-b"},"spec":{"features":[{"activate":false,"name":"small-cache"},{"activate":true,"name":"dupe-cache"},{"activate":false,"name":"new-cache"}]}}
  creationTimestamp: "2022-11-12T04:52:48Z"
  generation: 7
  name: tkg-system-b
  resourceVersion: "211167"
  uid: b411b5a4-9ca1-46ea-bf29-fa270a1095c8
spec:
  features:
  - name: small-cache
  - activate: true
    name: dupe-cache
  - activate: true
    name: new-cache
    permanentlyVoidAllSupportGuarantees: true
status:
  results:
  - message: Feature has been successfully toggled
    name: small-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: new-cache
    status: Applied
  - message: Feature has been successfully toggled
    name: dupe-cache
    status: Applied

Here is the final status of the features.

$ kubectl get features -o yaml
apiVersion: v1
items:
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"big-cache"},"spec":{"description":"A sample big cache Feature","stability":"Stable"}}
    creationTimestamp: "2022-11-12T04:50:56Z"
    generation: 2
    name: big-cache
    resourceVersion: "210712"
    uid: 0521cb11-437f-46d0-8d65-2de83d40d614
  spec:
    description: A sample big cache Feature
    stability: Stable
  status:
    activated: true
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"bite-size-cache"},"spec":{"description":"A bite-size small cache Feature","stability":"Technical Preview"}}
    creationTimestamp: "2022-11-12T04:50:56Z"
    generation: 2
    name: bite-size-cache
    resourceVersion: "210726"
    uid: 30663bf7-30e7-447c-a5d2-80cb21e7ae9f
  spec:
    description: A bite-size small cache Feature
    stability: Technical Preview
  status:
    activated: false
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"dupe-cache"},"spec":{"description":"A sample medium cache Feature","stability":"Deprecated"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 2
    name: dupe-cache
    resourceVersion: "210723"
    uid: b46bd4b6-569b-49f2-9460-b3ea66665c8d
  spec:
    description: A sample medium cache Feature
    stability: Deprecated
  status:
    activated: true
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"medium-cache"},"spec":{"description":"A sample medium cache Feature","stability":"Deprecated"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 4
    name: medium-cache
    resourceVersion: "210972"
    uid: 2644c504-e5b0-4ab3-958a-9858490aa5da
  spec:
    description: A sample medium cache Feature
    stability: Deprecated
  status:
    activated: false
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"new-cache"},"spec":{"description":"A sample medium cache Feature","stability":"Experimental"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 5
    name: new-cache
    resourceVersion: "211168"
    uid: 6407b12d-4754-4af2-a544-3e51f08b2c23
  spec:
    description: A sample medium cache Feature
    stability: Experimental
  status:
    activated: true
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"small-cache"},"spec":{"description":"A sample small cache Feature","stability":"Technical Preview"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 4
    name: small-cache
    resourceVersion: "211053"
    uid: adbb56f1-0ab6-4ebc-b59b-fef755185264
  spec:
    description: A sample small cache Feature
    stability: Technical Preview
  status:
    activated: false
- apiVersion: core.tanzu.vmware.com/v1alpha2
  kind: Feature
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"core.tanzu.vmware.com/v1alpha2","kind":"Feature","metadata":{"annotations":{},"name":"tiny-cache"},"spec":{"description":"A sample medium cache Feature","stability":"Experimental"}}
    creationTimestamp: "2022-11-12T04:50:57Z"
    generation: 4
    name: tiny-cache
    resourceVersion: "211231"
    uid: aae87111-8042-4115-b1ac-4fd0950507e6
  spec:
    description: A sample medium cache Feature
    stability: Experimental
  status:
    activated: false
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment