CHANGES:
- initial K8S 1.31 release
- deprecating 1.28 release
FIXES:
- fixed issue with using
_HT*
get transformation path syntax within_HT!
tpl functions when there is an overlap in the paths of the_HT*
expressions. Since expressions were resolved in order of appearance this could lead to unexpected results where parts of longer expressions were incorrectly overwritten. For example, having get expressions_HT*hull.config.specific.path.api
and_HT*hull.config.specific.path.api-user.password
could lead to_HT*hull.config.specific.path.api
being resolved incorrectly in the latter expresison leaving-user.password
as an invalid remainder. By sorting the found expressions by descending length instead of order of appearance, it is guaranteed that the longer paths are resolved correctly before any shorter paths that may have an overlap. - fixed rendering error in case a Secret or ConfigMap that was referred to via the
hashsumAnnotation
feature was set toenabled: false
. Disabled ConfigMaps or Secrets are now ignored for the calculation of hashsums.
FIXES:
- fixed unwanted fields being merged when using the
sources
feature. When adding multiple sources, the intermediate results were not only merged into the target object but were also added to the sources themselves permanently. If_HULL_OBJECT_TYPE_DEFAULT_
is in the sources list, this could lead to unwanted fields merged back into object instances that did not have sources specified and only inherited from_HULL_OBJECT_TYPE_DEFAULT_
implicitly.
FIXES:
- If HULL errors are detected during processing, the processing is not stopped immediately. Instead, all errors are collected and printed after all objects were processed, making it easier to fix multiple problems in one go.
- Multiple HULL errors in one fields value are detectable now and can be shown. Previously only one error per field value was supported.
CHANGES:
- allow combination of bool and include transformations using extended
_HT?/
prefix. Include functions in Helm can only return string values details in this Helm issue so it is not possible to set a boolean value via retrieving the result of an include function triggered by_HT/
include. Using_HT?/
this is possible now, when the include returns a literaltrue
orfalse
this is treated as a boolean value using this syntax. See the transformation documentation for a detailed explanation and examples. - allow usage of
_HT*
get transformation path syntax within_HT!
tpl functions and_HT?
bool transformations to referencevalues.yaml
fields. Opposed to a more implementation heavy extension of_HT*
to add more flexibility, this solution combines full Go templating flexibility while retaining a concise way of referencing fields in thevalues.yaml
via_HT*
syntax. Additionally, in the case, where only one templating operation is required, the extended_HT!*
prefix allows to omit the double curly brace wrapping for even more conciseness. To e.g. reference and lower case and trim a.yaml
suffix of avalues.yaml
field, this expression may be used:field: _HT!* _HT*hull.config.specific.source | lower | trimSuffix ".yaml"
- due to the introduction of combined transformations with two characters after
_HT
(_HT?/
and_HT!*
), the syntax for_HT**
with added serialization instructions has been changed too so that_HT**toJson|hull.config.specific.abc
is the valid syntax now. The former legal form,_HT*toJson|*hull.config.specific.abc
, is still usable but considered legacy from now on.
CHANGES:
- allow to force render an otherwise disabled object using
hull.object.base.xyz
include by setting FORCE_ENABLED to true. This opens up the possibility to define object instance templates in HULL which are not deployed by HULL itself (by settingenabled: false
). Instead, the object template can be rendered to a ConfigMap as a full-fledged Kubernetes YAML object which for example can serve as an object template the underlying application creates instances from.
FIXES:
- fix default RoleBinding between default Role and default ServiceAccount. Since namespace was not set for the default ServiceAccount reference, the default RBAC RoleBinding did not apply to the default ServiceAccount as intended.
CHANGES:
- add possibility to access array items in
_HT*
via using the item index for arrays instead of a dictionary key for dictionaries in the dotted path. Accessing into multiple nested arrays is possible like for example_HT*hull.config.specific.outer-list.0.inner-list.1.key
. Related feature issue is this one - improve debugging broken YAML errors by including all available info in the generated error message. The error message now contains the actual YAML error and the reference to the specific object type and instance which could not be rendered.
- started adding reusable helper functions for use with
_HT/
in_util_tools.tpl
. Populating thedata
for a Secret or ConfigMap with external files matching a GLOB pattern can be achieved by usinghull.util.tools.virtualdata.data.glob
. Withhull.util.tools.file.get
, the contents of an external file can be loaded conveniently outside of the ConfigMap and Secretdata
context. Thanks ievgenii-shepeliuk for the ideas in this isue
CHANGES:
- initial K8S 1.30 release
- deprecating 1.27 release
CHANGES:
- added possibility to get values from the charts root with notation
_HT**
CHANGES:
- added possibility to access the current object instance key and object type in
_HT*
transformations by using special keys§OBJECT_INSTANCE_KEY§
and§OBJECT_TYPE§
in the dotted path
FIXES:
- fixed
OBJECT_INSTANCE_KEY
andOBJECT_TYPE
not existing in context of_HT?
boolean transformations. Access toOBJECT_INSTANCE_KEY
andOBJECT_TYPE
is now provided same as in context of_HT!
and_HT/
transformations - fixed inability to use
OBJECT_INSTANCE_KEY
andOBJECT_TYPE
for_HULL_OBJECT_TYPE_DEFAULT_
instances in context of_HT/
include transformations. This fix allows to combinepostRender
replacements in content created by_HT/
transformations on a_HULL_OBJECT_TYPE_DEFAULT_
instance
FIXES:
- fixed problem with running both HULL transformations and
tpl
onpath
content in ConfigMaps and Secrets. After loading the external files content, decide whether to run HULL transformations ortpl
based on HULL transformation prefix presence - fixed checks for
virtualFolderDataPathExists
andvirtualFolderDataInlineValid
in the case of Secrets. Due to the Base64 encoding of data any error signaling strings weren't properly detected. With added Base64 decoding of the content for secrets the error checks now work for both ConfigMaps and Secrets - make all keys within
.Values
available for reference in Secret and ConfigMapdata
inline
andpath
content templating. Due to obsolete code, all other keys thanhull
were removed from the parent charts.Values
context when being passed to ConfigMap and Secret for template processing. Thanks again khmarochos for pointing out the problem in this isue
CHANGES:
- avoid rendering of empty collections. All
annotations
,labels
and several other fields, which are explicitly handled by HULL, now are fully omitted if they resolve to empty dictionaries or arrays. This changed behaviour can be reverted by individually choosing to renderemptyAnnotations
,emptyLabels
,emptyTemplateAnnotations
,emptyTemplateLabels
and/oremptyHullObjects
underconfig.global.render
. This default behavior change is in favor of improving compatibility with tools that potentially auto-prune empty collection fields like ArgoCD and thus may have syncing issues with empty collections. In terms of severity this change is considered non-breaking. Down the line, Kubernetes treats missing and empty collection fields in the same way. Note that per the schema, some collection fields are required (containers
inpod
andpaths
iningress
rules
) and omitting them or leaving them empty now violates the Kubernetes schema. However, in these cases Kubernetes also verifies that at least one element is in the collection on deployment so the problem only shows earlier. Thanks alexrimlin for the suggestion!
CHANGES:
- removed hardcoded
type: Opaque
and allow to freely set type of Secrets, thanks khmarochos for PR - enabled specification of
configmap
andsecret
data
inlinefields as dictionaries or lists and added implicit and explicit serialization to
configmapand
secretentries. Implicit and automatic serialization takes place for files ending with
.json(
toPrettyJson) and files ending with
.yamland
.yml(
toYaml) if the
inlinecontent is a dictionary or a list. Explicit serialization is possible using the new
serializationproperty for
dataelements and can be applied to dictionary, list and string
inlineentries and string
path` contents. Thanks khmarochos for the idea in this report - added optional serialization arguments to
_HT/
and_HT*
to serialize dictioanry and liststoJson
,toPrettyJson
,toRawJson
,toString
ortoYaml
, also thanks khmarochos for the idea in this report - added optional
postRender
option to inject object instance key or object name strings into rendered object YAML. This enables very efficient specification of multiple identical object instances via thesources
and_HULL_OBJECT_TYPE_DEFAULT_
feature and last-minute insertion of the actual object instance key or name into the rendered YAML string. Handle with caution since this can invalidate the YAML structure! - added error checks in HULL to prevent common configuration errors by failing the Helm command. By default verify
image
specifications exist and are valid for allcontainers
, files pointed to viapath
physically exist and all tree elements in a_HT*
references are resolvable
FIXES:
- fixed hashsumAnnotation calculation of secrets incorrectly being done on Base64 encoded value instead of decoded value
- centralized
configmap
andsecret
functionality and tests to guarantee exact same handling whether content is definedinline
or in a file withpath
. Code difference betweensecret
andconfigmap
reduced to only late base64 value encoding in the case of secrets. - improve code in helper functions, thanks JuryA for PR
CHANGES:
- removed all required field definitions from values.schema.json. Validating required fields is helpful on the output side because it indicates which fields are important in the rendered output but on input side side they block the full potential of efficient defaulting. When present, The JSON schema demands that required fields are added to all individual instances of an object - even when a source or HULL_OBJECT_TYPE_DEFAULT has already set them appropriately and concisely. This leads often to unnecessary bloat and complexity in the values.yaml and therefore the usage of required fields in the JSON schema was dropped favor of cleaner chart design.
- added tests to solidify expectations on workarounds for YAML parser issues with large numbers (unwanted rendering in scientific notation, unwanted interpretation of strings as scientific notation). The issues mentioned in this report cannot be solved in HULL but the tests should from now on indicate if something has changed in Helm about the applicability of the workarounds, thanks seniorquico
FIXES:
- fixed bug where imagePullSecrets cannot be overwritten with empty list, thanks khmarochos
CHANGES:
- initial K8S 1.29 release
- deprecating 1.26 release
FIXES:
- fix still broken CronJob rendering which is now in line with the rendering style of other object types
FIXES:
- fix broken HULL_OBJECT_TYPE_DEFAULT defaulting of CronJobs properties where all values from HULL_OBJECT_TYPE_DEFAULT or sources where not merged to rendered CronJob instances
- fix missing rendering of embedded Job Kubernetes properties in a Cronjobs jobTemplate where any Kubernetes property of an embedded Job was missing from the rendered output
FIXES:
- fix sources feature not properly working for non-pod based object types
- fix OBJECT_INSTANCE_KEY handling causes error for calls to hull.util.transformation.tpl originating outside of hull.util.transformation
CHANGES:
- introducing more flexible mechanism to populate default values for object intances. It is possible to opt to load default values from zero to multiple object instances by using new hull.base.v1 property sources. All referenced object instances are merged in the provided order to allow sharing definitions between object instances and object types. The default behavior to merge default values from HULL_OBJECT_TYPE_DEFAULT remains intact.
FIXES:
- added icon to Chart.yaml to fix linter warning
- fail with speaking error message instead of hard to decode error message when path elements in get transformations are not found
FIXES:
- extend loosening of schema type to env fields. User input of type float, integer or boolean is now allowed and on rendering a late to string conversion is taking place to guarantee the Kubernetes schema is not violated demanding string values.
FIXES:
- loosen schema types of image tag, annotation and label values. For image tag values user input of type float or integer and for annotation and label values user input of type float, integer and boolean is allowed. On rendering a late to string conversion is taking place to guarantee the Kubernetes schema is not violated demanding string values. Reasoning behind is that for these fields correct quoting of user input is often missing in case of values which are interpreted as non-strings. Allowing a flexible input type and late guaranteed conversion to string helps avoid unncessary and unexpected errors due to user input.
- drop kubeVersion from Chart.yaml to support running hull-demo in lower version clusters, kubeVersion field does not seem to have relevance for hull as a library chart but is copied over to hull-demo Chart.yaml
CHANGES:
- initial K8S 1.28 release
- deprecating 1.25 release
- allow to use implicitly set OBJECT_INSTANCE_KEY and OBJECT_TYPE context variables for accessing an object instance's key and type as strings in the context of transformations executed within an object instance's specification.
CHANGES:
- allow to set an explicit namespaceOverride via chart configuration on the object instances rendered. This is helpful for usage with helm template command so that rendered templates contain a namespace and can be used directly in GitOps style declarative workflows. If no namespaceOverride is provided, the namespace is now still always added to the object instances and falls back to the release namespace.
CHANGES:
- initial K8S 1.27 release
- deprecating 1.24 release
CHANGES:
- by adding property hashsumAnnotation: true to a pods volumeMount, env or envFrom referencing a ConfigMap or Secret, a pod restart can be enforced in case of changed contents. This works by calculation of a hashsum of the contents and adding it to the pods template annotations. This is recommended practice as documented in the Helm documentation in order to handle applications that require restarts on certain configuration changes.
CHANGES:
- add metadataNameOverride possibility to Hull.Object.Base to allow setting an object instance metadata.name that is different from the implicit component key. This enables special use-cases where e.g. the definition of a custom resource instance is done in the chart's values.yaml under a fixed key and the CustomResources actual instance name - maybe playing an important role for the operator functionality - is only set at deployment time dynamically
CHANGES:
- initial K8S 1.26 release
- deprecating 1.23 release
- build and release hull-demo chart for easy demoing and bootstrapping HULL based Helm Charts
FIXES:
- improved schema structure for centrally defined probe configurations (PR, thanks matthias4217)
- fix merging order for tests with additional overlay values.yamls
FIXES:
- when a dictionary structure contains a HULL_TRANSFORMATION key for producing dynamically rendered key-value content and additional static keys side-by-side, transformations were not being correctly processed for the structures beneath the static key contents
- some minor documentation fixes (links in main README.md, broken structures)
FIXES:
- fixed incorrect schema structure for imagePullPolicy enums (thanks matthias4217)
FIXES:
- fixed general linter error due to bad whitespace chomping between YAML objects, this did not affect template rendering however (vidispine#186)
- added strict linting to test cases, now all cases must not emit linting WARNINGs or ERRORs to be considered successful
FIXES:
- extend transformation scope from objects spec to Values.hull when computing initial transformations, fixes cases with first transformation resolving to another transformation which is then not resolved itself
- speed up rendering by only run transformations once on complete Values.hull dictionary instead of running it once for each object type
FIXES:
- render emtpy string instead of when ConfigMap or Secret inline input is nil pointer
CHANGES:
- add debug option renderNilWhenInlineIsNil to print out instead of empty string when an inline value resolves to a nil pointer
- add debug option renderPathMissingWhenPathIsNonExistent to print out information about a missing file for a path value instead of an empty string when a path value does not resolve to an actual file
CHANGES:
- changed transformation notation for include for better readability
FIXES:
- fixed and improve include transformation
CHANGES:
- add new include transformation and short form to allow compact usage of includes with minimum typing in values.yaml.
FIXES:
- quote versions in Chart.yaml (vidispine#169)
CHANGES:
- for ConfigMap and Secret data, inline specification now always has precedence over path specification to make sure that content can always be overwritten at configuration time if required
- add active property to allow selecting amongst multiple volume definitions if they exist, eg. if a volume is defaulting to an emptyDir and is to be made a persistentVolumeClaim, the value of the active property (if specified) declares the concrete volume to render, otherwise Kubernetes will not accept multiple volume type definitions for a volume.
CHANGES:
- remove required property for endpoints and selector in ServiceMonitors from schema to allow better defaulting
CHANGES:
- add debug option renderBrokenHullGetTransformationReferences which allows to render HULL charts containing broken Get transformation references with non existing keys. By rendering these transformations with an informative placeholder instead of failing the chart rendering the broken references can be traced and fixed more easily before finishing writing the chart
- allows to use placeholder § to escape dots within key names so GET references also work when dots are within key names
CHANGES:
- initial K8S 1.25 release
- deprecating 1.22 release
- removed PodSecurityPolicy
CHANGES:
- improve intro documentation and add KH quote
- add Helm 3.9.0 to tests
- add option noObjectNamePrefixes to remove all object name prefixes globally
CHANGES:
- initial K8S 1.24 release
- deprecating 1.21 release
- added option to include ConfigMap binaryData from external path
CHANGES:
-
added new objects Namespace, EndpointSlice and LimitRange
-
update documentation
FIXES:
- disabling RBAC did not prevent rendering of Roles and ClusterRoles
CHANGES:
- added transformation pattern to array fields from ServiceMonitor definition
- update documentation
FIXES:
- HULL rules must be dictionary for roles in values.yaml
CHANGES:
- get transformation can now return complex dictionaries and array types
- introduce selector transformation and _HT& shortcut
FIXES:
- use fixed name template lower-case 'release-name' for helm template command compatibility with Helm 3.8. Previous versions created upper case 'RELEASE-NAME' by default for Release.Name which is changed to lowercase 'release-name' with Helm 3.8
CHANGES:
- allow to choose between rendering to single file or multiple files per object type to potentially eliminate performance penalty due to having one file only
- add test environments for both single and multi file usage
- add two example values.yamls
FIXES:
- allow using 63 instead of 54 chars for a fullname and name override
- remove dots end of labels and names
CHANGES:
- initial K8S 1.23 release
- deprecating 1.20 release
FIXES:
- changed probe port schema to anyOf to avoid clash when using oneOf transformation or string
FIXES:
- allow mixed transform only when dictionary is returned from transformation and other keys exist besides transformation trigger
CHANGES:
- added tests for get transformation results
- make every object field subjectable to string transformations irrelevant of input type by large scale extension of JSON schema
FIXES:
- using a get transformation to poulate Configmap/Secret contents produced bad character sequences
CHANGES:
- added short forms for transformations
- documentation improved
CHANGES:
- fix enabled properties allowed on policyrules in roles, envfrom and tls in ingresses
- allow shorter form of (index . "$") to access parent context
CHANGES:
-
add hull.util.transformation.bool transformation
-
BREAKING! change fields for registry population to overwrite any explicit registry fields
CHANGES:
- add CHANGELOG.md
- add ingressclass objects as main objects
- allow to specify rules in roles key-value based instead of as an array (array also supported)
- add unit tests for ClusterRole and ClusterRoleBindings
FIXES:
- clusterrole and clusterrolebinding objects with enabled=false or nulled were rendering incorrectly as empty objects
- cronjob pods must not have selector set
CHANGES:
- allow enabled property on all key-value pair HULL objects
- allow to use string as input for enabled property in order to use HULL transformations on enabled properties