diff --git a/_proto/hapi/chart/metadata.proto b/_proto/hapi/chart/metadata.proto index 48aed2b3b..4a1a623bb 100644 --- a/_proto/hapi/chart/metadata.proto +++ b/_proto/hapi/chart/metadata.proto @@ -73,4 +73,7 @@ message Metadata { // The version of the application enclosed inside of this chart. string appVersion = 13; + + // Whether or not this chart is deprecated + bool deprecated = 14; } diff --git a/docs/charts.md b/docs/charts.md index 4621eca1e..b7d97cc0b 100644 --- a/docs/charts.md +++ b/docs/charts.md @@ -54,6 +54,7 @@ maintainers: # (optional) engine: gotpl # The name of the template engine (optional, defaults to gotpl) icon: A URL to an SVG or PNG image to be used as an icon (optional). appVersion: The version of the app that this contains (optional). This needn't be SemVer. +deprecated: Whether or not this chart is deprecated (optional, boolean) ``` If you are familiar with the `Chart.yaml` file format for Helm Classic, you will @@ -100,6 +101,21 @@ chart may have an `appVersion: 8.2.1`, indicating that the version of Drupal included in the chart (by default) is `8.2.1`. This field is informational, and has no impact on chart version calculations. +### Deprecating Charts + +When managing charts in a Chart Repository, it is sometimes necessary to +deprecate a chart. The optional `deprecated` field in `Chart.yaml` can be used +to mark a chart as deprecated. If the **latest** version of a chart in the +repository is marked as deprecated, then the chart as a whole is considered to +be deprecated. The chart name can later be reused by publishing a newer version +that is not marked as deprecated. The workflow for deprecating charts, as +followed by the [kubernetes/charts](https://github.com/kubernetes/charts) +project is: + - Update chart's `Chart.yaml` to mark the chart as deprecated, bumping the + version + - Release the new chart version in the Chart Repository + - Remove the chart from the source repository (e.g. git) + ## Chart LICENSE, README and NOTES Charts can also contain files that describe the installation, configuration, usage and license of a @@ -214,19 +230,19 @@ team. #### Tags and Condition fields in requirements.yaml -In addition to the other fields above, each requirements entry may contain +In addition to the other fields above, each requirements entry may contain the optional fields `tags` and `condition`. -All charts are loaded by default. If `tags` or `condition` fields are present, -they will be evaluated and used to control loading for the chart(s) they are applied to. +All charts are loaded by default. If `tags` or `condition` fields are present, +they will be evaluated and used to control loading for the chart(s) they are applied to. -Condition - The condition field holds one or more YAML paths (delimited by commas). -If this path exists in the top parent's values and resolves to a boolean value, -the chart will be enabled or disabled based on that boolean value. Only the first +Condition - The condition field holds one or more YAML paths (delimited by commas). +If this path exists in the top parent's values and resolves to a boolean value, +the chart will be enabled or disabled based on that boolean value. Only the first valid path found in the list is evaluated and if no paths exist then the condition has no effect. -Tags - The tags field is a YAML list of labels to associate with this chart. -In the top parent's values, all charts with tags can be enabled or disabled by +Tags - The tags field is a YAML list of labels to associate with this chart. +In the top parent's values, all charts with tags can be enabled or disabled by specifying the tag and a boolean value. ```` @@ -239,7 +255,7 @@ dependencies: tags: - front-end - subchart1 - + - name: subchart2 repository: http://localhost:10191 version: 0.1.0 @@ -257,14 +273,14 @@ subchart1: tags: front-end: false back-end: true -```` +```` -In the above example all charts with the tag `front-end` would be disabled but since the -`subchart1.enabled` path evaluates to 'true' in the parent's values, the condition will override the +In the above example all charts with the tag `front-end` would be disabled but since the +`subchart1.enabled` path evaluates to 'true' in the parent's values, the condition will override the `front-end` tag and `subchart1` will be enabled. -Since `subchart2` is tagged with `back-end` and that tag evaluates to `true`, `subchart2` will be -enabled. Also note that although `subchart2` has a condition specified in `requirements.yaml`, there +Since `subchart2` is tagged with `back-end` and that tag evaluates to `true`, `subchart2` will be +enabled. Also note that although `subchart2` has a condition specified in `requirements.yaml`, there is no corresponding path and value in the parent's values so that condition has no effect. ##### Using the CLI with Tags and Conditions @@ -279,11 +295,11 @@ helm install --set tags.front-end=true --set subchart2.enabled=false ##### Tags and Condition Resolution - * **Conditions (when set in values) always override tags.** The first condition + * **Conditions (when set in values) always override tags.** The first condition path that exists wins and subsequent ones for that chart are ignored. * Tags are evaluated as 'if any of the chart's tags are true then enable the chart'. * Tags and conditions values must be set in the top parent's values. - * The `tags:` key in values must be a top level key. Globals and nested `tags:` tables + * The `tags:` key in values must be a top level key. Globals and nested `tags:` tables are not currently supported. ## Templates and Values diff --git a/pkg/proto/hapi/chart/metadata.pb.go b/pkg/proto/hapi/chart/metadata.pb.go index 0002e6ce3..5feee0bf4 100644 --- a/pkg/proto/hapi/chart/metadata.pb.go +++ b/pkg/proto/hapi/chart/metadata.pb.go @@ -77,6 +77,8 @@ type Metadata struct { Tags string `protobuf:"bytes,12,opt,name=tags" json:"tags,omitempty"` // The version of the application enclosed inside of this chart. AppVersion string `protobuf:"bytes,13,opt,name=appVersion" json:"appVersion,omitempty"` + // Whether or not this chart is deprecated + Deprecated bool `protobuf:"varint,14,opt,name=deprecated" json:"deprecated,omitempty"` } func (m *Metadata) Reset() { *m = Metadata{} } @@ -100,26 +102,27 @@ func init() { func init() { proto.RegisterFile("hapi/chart/metadata.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ - // 321 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x91, 0x5f, 0x4b, 0xc3, 0x30, - 0x14, 0xc5, 0x9d, 0x5d, 0xdb, 0xf5, 0x56, 0x61, 0x5c, 0x64, 0x44, 0x11, 0x29, 0x7b, 0xda, 0x53, - 0x07, 0x0a, 0xe2, 0xb3, 0x20, 0x3e, 0xe8, 0x36, 0x19, 0xfe, 0x01, 0xdf, 0x62, 0x1b, 0xb6, 0xa0, - 0x4d, 0x4a, 0x12, 0x15, 0xbf, 0x8c, 0x9f, 0x55, 0x72, 0xdb, 0x6e, 0x7b, 0xf0, 0xed, 0x9e, 0x73, - 0x7a, 0x4f, 0xf3, 0x4b, 0xe0, 0x78, 0xcd, 0x6b, 0x39, 0x2d, 0xd6, 0xdc, 0xb8, 0x69, 0x25, 0x1c, - 0x2f, 0xb9, 0xe3, 0x79, 0x6d, 0xb4, 0xd3, 0x08, 0x3e, 0xca, 0x29, 0x1a, 0x5f, 0x02, 0xcc, 0xb8, - 0x54, 0x8e, 0x4b, 0x25, 0x0c, 0x22, 0xf4, 0x15, 0xaf, 0x04, 0xeb, 0x65, 0xbd, 0x49, 0xb2, 0xa4, - 0x19, 0x8f, 0x20, 0x14, 0x15, 0x97, 0x1f, 0x6c, 0x9f, 0xcc, 0x46, 0x8c, 0x7f, 0x03, 0x18, 0xcc, - 0xda, 0xda, 0x7f, 0xd7, 0x10, 0xfa, 0x6b, 0x5d, 0x89, 0x76, 0x8b, 0x66, 0x64, 0x10, 0x5b, 0xfd, - 0x69, 0x0a, 0x61, 0x59, 0x90, 0x05, 0x93, 0x64, 0xd9, 0x49, 0x9f, 0x7c, 0x09, 0x63, 0xa5, 0x56, - 0xac, 0x4f, 0x0b, 0x9d, 0xc4, 0x0c, 0xd2, 0x52, 0xd8, 0xc2, 0xc8, 0xda, 0xf9, 0x34, 0xa4, 0x74, - 0xd7, 0xc2, 0x13, 0x18, 0xbc, 0x8b, 0x9f, 0x6f, 0x6d, 0x4a, 0xcb, 0x22, 0xaa, 0xdd, 0x68, 0xbc, - 0x82, 0xb4, 0xda, 0xe0, 0x59, 0x16, 0x67, 0xc1, 0x24, 0x3d, 0x1f, 0xe5, 0xdb, 0x0b, 0xc8, 0xb7, - 0xf4, 0xcb, 0xdd, 0x4f, 0x71, 0x04, 0x91, 0x50, 0x2b, 0xa9, 0x04, 0x1b, 0xd0, 0x2f, 0x5b, 0xe5, - 0xb9, 0x64, 0xa1, 0x15, 0x4b, 0x1a, 0x2e, 0x3f, 0xe3, 0x19, 0x00, 0xaf, 0xe5, 0x73, 0x0b, 0x00, - 0x94, 0xec, 0x38, 0x78, 0x0a, 0x49, 0xa1, 0x55, 0x29, 0x89, 0x20, 0xa5, 0x78, 0x6b, 0xf8, 0x46, - 0xc7, 0x57, 0x96, 0x1d, 0x34, 0x8d, 0x7e, 0x6e, 0x1a, 0xeb, 0xae, 0xf1, 0xb0, 0x6b, 0xec, 0x9c, - 0x71, 0x06, 0xd1, 0x4d, 0x73, 0x9e, 0x14, 0xe2, 0xa7, 0xf9, 0xdd, 0x7c, 0xf1, 0x32, 0x1f, 0xee, - 0x61, 0x02, 0xe1, 0xed, 0xe2, 0xf1, 0xe1, 0x7e, 0xd8, 0xbb, 0x8e, 0x5f, 0x43, 0x02, 0x7c, 0x8b, - 0xe8, 0xd1, 0x2f, 0xfe, 0x02, 0x00, 0x00, 0xff, 0xff, 0x89, 0xc5, 0x76, 0x7c, 0x11, 0x02, 0x00, - 0x00, + // 339 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x92, 0x4f, 0x4b, 0xeb, 0x40, + 0x14, 0xc5, 0x5f, 0x5e, 0x9a, 0x7f, 0x37, 0xef, 0x3d, 0xca, 0xf0, 0x28, 0xa3, 0x88, 0x84, 0xae, + 0xb2, 0x4a, 0x41, 0x41, 0x5c, 0x0b, 0xe2, 0x42, 0xdb, 0x4a, 0xf0, 0x0f, 0xb8, 0x1b, 0x93, 0x4b, + 0x3b, 0x68, 0x66, 0xc2, 0xcc, 0xa8, 0xf8, 0xe5, 0xfc, 0x6c, 0x32, 0x93, 0xa4, 0xcd, 0xc2, 0xdd, + 0x3d, 0xe7, 0x97, 0x7b, 0x92, 0x73, 0x09, 0x1c, 0x6c, 0x59, 0xcb, 0x17, 0xd5, 0x96, 0x29, 0xb3, + 0x68, 0xd0, 0xb0, 0x9a, 0x19, 0x56, 0xb4, 0x4a, 0x1a, 0x49, 0xc0, 0xa2, 0xc2, 0xa1, 0xf9, 0x19, + 0xc0, 0x92, 0x71, 0x61, 0x18, 0x17, 0xa8, 0x08, 0x81, 0x89, 0x60, 0x0d, 0x52, 0x2f, 0xf3, 0xf2, + 0xa4, 0x74, 0x33, 0xf9, 0x0f, 0x01, 0x36, 0x8c, 0xbf, 0xd2, 0xdf, 0xce, 0xec, 0xc4, 0xfc, 0xcb, + 0x87, 0x78, 0xd9, 0xc7, 0xfe, 0xb8, 0x46, 0x60, 0xb2, 0x95, 0x0d, 0xf6, 0x5b, 0x6e, 0x26, 0x14, + 0x22, 0x2d, 0xdf, 0x54, 0x85, 0x9a, 0xfa, 0x99, 0x9f, 0x27, 0xe5, 0x20, 0x2d, 0x79, 0x47, 0xa5, + 0xb9, 0x14, 0x74, 0xe2, 0x16, 0x06, 0x49, 0x32, 0x48, 0x6b, 0xd4, 0x95, 0xe2, 0xad, 0xb1, 0x34, + 0x70, 0x74, 0x6c, 0x91, 0x43, 0x88, 0x5f, 0xf0, 0xf3, 0x43, 0xaa, 0x5a, 0xd3, 0xd0, 0xc5, 0xee, + 0x34, 0x39, 0x87, 0xb4, 0xd9, 0xd5, 0xd3, 0x34, 0xca, 0xfc, 0x3c, 0x3d, 0x99, 0x15, 0xfb, 0x03, + 0x14, 0xfb, 0xf6, 0xe5, 0xf8, 0x51, 0x32, 0x83, 0x10, 0xc5, 0x86, 0x0b, 0xa4, 0xb1, 0x7b, 0x65, + 0xaf, 0x6c, 0x2f, 0x5e, 0x49, 0x41, 0x93, 0xae, 0x97, 0x9d, 0xc9, 0x31, 0x00, 0x6b, 0xf9, 0x43, + 0x5f, 0x00, 0x1c, 0x19, 0x39, 0xe4, 0x08, 0x92, 0x4a, 0x8a, 0x9a, 0xbb, 0x06, 0xa9, 0xc3, 0x7b, + 0xc3, 0x26, 0x1a, 0xb6, 0xd1, 0xf4, 0x4f, 0x97, 0x68, 0xe7, 0x2e, 0xb1, 0x1d, 0x12, 0xff, 0x0e, + 0x89, 0x83, 0x63, 0x79, 0x8d, 0xad, 0xc2, 0x8a, 0x19, 0xac, 0xe9, 0xbf, 0xcc, 0xcb, 0xe3, 0x72, + 0xe4, 0xcc, 0x33, 0x08, 0x2f, 0xbb, 0xef, 0x4d, 0x21, 0xba, 0x5f, 0x5d, 0xaf, 0xd6, 0x8f, 0xab, + 0xe9, 0x2f, 0x92, 0x40, 0x70, 0xb5, 0xbe, 0xbb, 0xbd, 0x99, 0x7a, 0x17, 0xd1, 0x53, 0xe0, 0x0e, + 0xf0, 0x1c, 0xba, 0x9f, 0xe2, 0xf4, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x08, 0xf3, 0xcc, 0x66, 0x31, + 0x02, 0x00, 0x00, }