...

Source file src/sigs.k8s.io/kustomize/kyaml/fn/framework/command/doc.go

Documentation: sigs.k8s.io/kustomize/kyaml/fn/framework/command

     1  // Copyright 2021 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  // Package command contains a builder for creating cobra.Commands based on configuration functions
     5  // written using the kyaml function framework. The commands this package generates can be used as
     6  // standalone executables or as part of a configuration management pipeline that complies with the
     7  // Configuration Functions Specification (e.g. Kustomize generators or transformers):
     8  // https://github.com/kubernetes-sigs/kustomize/blob/master/cmd/config/docs/api-conventions/functions-spec.md
     9  //
    10  // Example standalone usage
    11  //
    12  // Function template input:
    13  //
    14  //    # config.yaml -- this is the input to the template
    15  //    apiVersion: example.com/v1alpha1
    16  //    kind: Example
    17  //    Key: a
    18  //    Value: b
    19  //
    20  // Additional function inputs:
    21  //
    22  //    # patch.yaml -- this will be applied as a patch
    23  //    apiVersion: apps/v1
    24  //    kind: Deployment
    25  //    metadata:
    26  //      name: foo
    27  //      namespace: default
    28  //      annotations:
    29  //        patch-key: patch-value
    30  //
    31  // Manually run the function:
    32  //
    33  //    # build the function
    34  //    $ go build example-fn/
    35  //
    36  //    # run the function
    37  //    $ ./example-fn config.yaml patch.yaml
    38  //
    39  // Go implementation
    40  //
    41  //   // example-fn/main.go
    42  //	func main() {
    43  //		// Define the template used to generate resources
    44  //		p := framework.TemplateProcessor{
    45  //			MergeResources: true, // apply inputs as patches to the template output
    46  //			TemplateData: new(struct {
    47  //				Key   string `json:"key" yaml:"key"`
    48  //				Value string `json:"value" yaml:"value"`
    49  //			}),
    50  //			ResourceTemplates: []framework.ResourceTemplate{{
    51  //				Templates: framework.StringTemplates(`
    52  //	  apiVersion: apps/v1
    53  //	  kind: Deployment
    54  //	  metadata:
    55  //		name: foo
    56  //		namespace: default
    57  //		annotations:
    58  //		  {{ .Key }}: {{ .Value }}
    59  //	  `)}},
    60  //		}
    61  //
    62  //		// Run the command
    63  //		if err := command.Build(p, command.StandaloneEnabled, true).Execute(); err != nil {
    64  //			fmt.Fprintf(cmd.ErrOrStderr(), "%v\n", err)
    65  //			os.Exit(1)
    66  //		}
    67  //	}
    68  //
    69  // Example function implementation using command.Build with flag input
    70  //
    71  //	func main() {
    72  //		var value string
    73  //		fn := func(rl *framework.ResourceList) error {
    74  //			for i := range rl.Items {
    75  //				// set the annotation on each resource item
    76  //				if err := rl.Items[i].PipeE(yaml.SetAnnotation("value", value)); err != nil {
    77  //					return err
    78  //				}
    79  //			}
    80  //			return nil
    81  //		}
    82  //		cmd := command.Build(framework.ResourceListProcessorFunc(fn), command.StandaloneEnabled, false)
    83  //		cmd.Flags().StringVar(&value, "value", "", "annotation value")
    84  //
    85  //		if err := cmd.Execute(); err != nil {
    86  //			fmt.Println(err)
    87  //			os.Exit(1)
    88  //		}
    89  //	}
    90  package command
    91  

View as plain text