Skip to content

Latest commit

 

History

History
412 lines (292 loc) · 21.5 KB

CHANGELOG.md

File metadata and controls

412 lines (292 loc) · 21.5 KB

Changelog

v0.15.2 (Mar 5, 2022)

  • Add ability to filter by namespaces using -p and -P and the ability to filter out cluster-scoped-objects via --include-cluster-objects=false

v0.15.1 (Feb 4, 2022)

  • Fix info in qbec version

v0.15.0 (Feb 4, 2022)

  • apply now waits for batch/job objects (thanks @kvaps)
  • Improved error message includes helpful hints on operations requiring exactly one qbec environment as input (thanks @kalhanreddy)
  • eval now supports inline datasources without the need to specify a qbec environment
  • Kubernetes list operations now use a page size of 1000 by default. --k8s:list-page-size can be used to adjust the size Setting this value too low can impact performance when dealing with large lists
  • Update jsonnet library to v0.18.0, k8s client libs to v1.23.1 and golang version to 1.17
  • Misc. housekeeping improvements

Backward incompatibilities:

  • apply now waits for batch/job objects. To disable waiting for all objects --wait-all=false can be used.
  • Adjustments to the internal behaviour around listing Kubernetes objects. Use --k8s:list-page-size with appropriate values.
  • Any corner-case behavior from updating k8s client, jsonnet libraries or golang version

v0.14.8 (Sep 11, 2021)

  • Expose data source creation in the VM implementation for public use

v0.14.7 (Sep 9, 2021)

  • Expose VM implementation as a publicly consumable library
  • Change params.jsonnet created by qbec init to automatically pull environment files using the glob importer (thanks to @kvaps)

v0.14.6 (Aug 16, 2021)

  • Add a renderYaml native function to the qbec VM to generate YAML output compatible with qbec fmt. If this native function is passed an array, it will render multiple YAML docs with separators. Top-level nils are ignored for output. If you want an array value to be serialized as a single document, wrap it in a single-element array.

v0.14.5 (Aug 12, 2021)

  • Fix a bug where glob imports could not import relative files outside the qbec root/ current working dir

v0.14.4 (Jul 7, 2021)

  • fmt and alpha lint commands now accept exclusion patterns using which vendored files, intentionally bad test data etc. can be filtered out. Pattern matching of exlcudes is done using the doublestar library.
  • qbec.yaml can now contain examples of data source outputs. These are returned by the mock linter implementation when data source imports are found. This allows you to correctly lint files that use data source imports.

v0.14.3 (Jun 27, 2021)

  • fmt is now a top-level qbec command. The alpha fmt version is deprecated and will be removed in a later release.
  • fmt has the following enhancements:
    • no longer requires a qbec.yaml to be present to function
    • prints all errors in check mode as opposed to failing fast on the first error encountered
    • prints the filenames of all files that were modified in write mode
    • allows for explicit control on whether it should fail fast or not. The default behavior is to fail fast when not in check mode and continue on errors otherwise.
  • a new alpha lint command can now be used to lint jsonnet and libsonnet files using jsonnet-lint. This command is alpha quality in both interface and implementation although it should work just fine on most projects. Known issues are:
  • Releases now contain ARM64 builds for Darwin and Linux
  • Allows the QPS and Burst for the kubernetes client to be configured on the command line via the k8s:qps and k8s:burst flags. Setting these values can be beneficial to large projects producing thousands of objects to improve the performance of diff and apply.

v0.14.2 (Mar 31, 2021)

  • Add ability to inherit the qbec shell environment when processing data sources.

v0.14.1 (Mar 2, 2021)

There are no changes in this release. The previous release used a jsonnet version that had a regression in the std.manifestJson[Ex] functions. This version uses a commit that fixes this issue.

v0.14.0 (Feb 27, 2021)

Note: there is a regression with the std.manifestJson[Ex] function in this release. Please use v0.14.1 instead.

  • qbec now allows data to be imported from external data sources. The current implementation allows you to run a command whose standard output may be included in your jsonnet component code. The reference page has more details. At this point, the expandHelmTemplate native function should be considered deprecated and will be removed in a future release. There is nothing that this function could do that cannot be accomplished using an external data source.

  • A new command qbec eval can now evaluate a single jsonnet file similar to jsonnet eval. This can also be run in the context of a qbec environment to be able to access environment specific properties. See qbec eval --help for more details. This deprecates the jsonnet-qbec executable that is packaged in the release. This executable may no longer be packaged in a future release.

  • qbec now allows computed variables to be defined in qbec.yaml. This works especially well with external data sources and also allow you to cache complex calculations. The reference page for qbec.yaml has more details.

  • Environment files for a qbec environment may now be specified as a glob pattern. qbec will load all matching files in sorted alphabetical order.

  • Miscellaneous improvements and optimizations for jsonnet evaluation. Most users, unless they are generating hundreds of objects or using complex jsonnet libraries will not see any significant performance improvements.

Incompatibilities

  • Preprocessors introduced in v0.13.4 have now been removed. These had awkward semantics and were honestly not ready for prime-time. No one was probably using this. The replacement functionality is more general and allows you to define computed vaiables in qbec.yaml.

  • Qbec no longer sets the qbec.io/component variable when evaluating components. This was also introduced in v0.13.4 and had dodgy semantics. There is no replacement for this functionality. If you started using this and are now stuck, please raise an issue where we can discuss this.

v0.13.4 (Jan 11, 2021)

Note: some of the features in this release have been removed in v0.14.0. Please refer to those release notes as well.

a.k.a the "scale" release. This release mainly contains enhancements that allow qbec to be used at scale on large monorepos and/ or when deploying to tens of clusters.

This release has no backwards-incompatible changes.

  • update the glob importer to support ** patterns. Glob references are now matched using the doublestar library
  • Add a native function labelsMatchSelector to expose K8s label matching in jsonnet code
  • Allow componentsDir to be a glob as opposed to a single directory. This change makes qbec load components from potentially multiple directories but does not introduce any namespace semantics. Components must still be uniquely named across all such directories. It is only useful for compartmentalizing files in a monorepo where different directories have different code owners.
  • Add support for pre-processors. A pre-processor is some jsonnet code that is evaluated before any components is. The return value of every such preprocessor is set as the external code variable called computed.qbec.io/<base-name> where <base-name> is the base name of the preprocessor file without its extension. This variable is available for use in component code. This allows for caching values that are costly to compute.
  • qbec now sets the qbec.io/component external variable when it evaluates components, pre- and post-processors. This may be used in component code to key into a params object, for example. For pre- and post-processors, the component name is set to <pre|post>processor.qbec.io/<base-name> where <base-name> has the same semantics as described above.
  • Allow multiple pre- and post-processors. The qbec.yaml attributes, preProcessor and postProcessor although singular, can be set to a list of files separated by :. Attribute names will be fixed to be in plural form and accept an array of strings in a future, backwards-incompatible release.

v0.13.3 (Dec 23, 2020)

  • Add ability to add the component name as a label in addition to the existing annotation. This is opt-in and is activated by setting the addComponentLabel property to true in qbec.yaml (thanks @korroot and @hudymi).

v0.13.2 (Dec 3, 2020)

  • Allow force options to be set via environment variables (thanks @splkforrest)

v0.13.1 (Dec 2, 2020)

  • Fix a bug where the alpha fmt command would stop processing arguments after encountering a directory.

v0.13.0 (Nov 27, 2020)

  • Misc. CI build changes
  • Update jsonnet library to v0.17.0 and k8s client libs to v1.17.13
  • Add json formatter to the qbec alpha fmt command
  • Fix diff commands to show skipped updates and deletes based on qbec directives specified for existing objects. This will no longer show spurious diffs for deletes and updates if those have been turned off.
  • Use per-namespace queries by default when multiple namespaces are present, allow using cluster-scoped queries using an opt-in flag.
  • The --env-file option now allows http(s) URLs in addition to local files. In addition, the envFiles attribute in qbec.yaml can also contain http(s) URLs. (thanks @dan1)
  • String data in secrets is now obfuscated in addition to binary data

Incompatibilities

This release is incompatible from previous minor versions in the following ways:

  • qbec apply will now wait on all objects by default. That is, the --wait-all now defaults to true. To get the previous behavior, you need to add --wait-all=false to the apply command.
  • qbec diff now exits 0 by default even when diffs are found. To restore previous behavior, add --error-exit to the command.
  • qbec now defaults to per-namespace queries when multiple namespaces are present. To get the previous behavior of using cluster-scoped queries add clusterScopedLists: true under spec in qbec.yaml
  • The command line syntax of the qbec alpha fmt command has changed in incompatible ways. Instead of options like --jsonnet, --yaml etc. you need to specify options as --type=jsonnet, --type=yaml and so on.
  • YAML formatter now follows prettier conventions requiring arrays to be indented under the parent key.
  • Any corner-case behavior from updating k8s client and jsonnet libraries.

v0.12.5 (Oct 2, 2020)

  • Add a new wait-policy directive to disable waits on specific deployments and daemonsets. The annotation "directives.qbec.io/wait-policy": "never" will cause qbec to not wait on the deployment even if it has changed.

v0.12.4 (Sep 24, 2020)

  • Add --wait-all flag to the apply command to wait on all objects instead of just the ones that were changed in the current run.

v0.12.3 (Sep 9, 2020)

  • Add ability to import a bag of files using a glob pattern (see #153 for details). At this point this should be considered experimental. Do not rely on it yet until the next release when we will have docs for it.
  • Add windows build in CI, thanks to @harsimranmaan

v0.12.2 (Aug 30, 2020)

  • Fix a bug where under certain circumstances of failed discovery, qbec would delete resources not meant to be deleted. Thanks to @sj14 for the bug report and partial fix.
  • Add a warning when remote listing for GC switches to cluster scoped mode with a reason as to why this is happening. These are typically setup errors by authors who want to deploy to a single namespace.
  • Fix pluralization for more kinds when using the kind filter
  • Create and run basic integration tests for qbec against a local kind cluster

v0.12.1 (Jun 20, 2020)

  • Add an error-exit option to the diff command to be able to exit 0 even when diffs are present. This currently has a true default for backwards compatibility. The next minor release of qbec will flip this default to false.
  • Improve error message when object processing fails due to bad json created by a component. Thanks to @wurbanski for this contribution.

v0.12.0 (Jun 8, 2020)

There are no backwards-incompatible changes in this release. The minor version upgrade is to account for any inadvertent incompatibilities introduced by the jsonnet library upgrade.

  • Add alpha fmt command to format jsonnet/ libsonnet files and, optionally, yaml files (thanks to @harsimranmaan). This also has facilities to only check if all files are well-formatted. Type qbec alpha fmt --help for details.

v0.11.2 (May 27, 2020)

  • Fix regression in previous release where LD_FLAGS were not set correctly causing qbec to report a wrong version.

Please avoid using v0.11.1 as a result.

v0.11.1 (May 24, 2020)

  • Add ability to refer to an environment by context name rather than server URL. This is useful for environments such as minikube and kind that do not have a stable URL. Since this requires a shared context name, it should be used sparingly.
  • Add ability to introduce an environment file not declared in qbec.yaml. This is controlled by the --env-file parameter to qbec commands. Environments in this additional file will override environments of the same name if they already exist.
  • Add ability to force namespace to the current value in the kubeconfig using the keywork __current__. This can only be done only if the context is also similarly forced.
  • Reduce verbosity of apply output. By default, dry-run works as before and actual apply only shows a single line per object added/ updated/ deleted. This behavior can be explicitly controlled by the --show-details flag for the apply command.

v0.11.0 (Mar 26, 2020)

There are no backwards-incompatible changes in this release. The minor version upgrade is to account for any inadvertent incompatibilities introduced by the jsonnet library upgrade.

  • Fix a bug with namespace forced on the command line not being used in every place that it should have, especially when setting the qbec.io/defaultNs external variable.
  • Upgrade jsonnet to v0.15.0

v0.10.5 (Feb 1, 2020)

  • change alogirthm of merging environment properties with base properties to not use a merge patch. This means that nulls in property values will be retained.

v0.10.4 (Jan 21, 2020)

  • no code changes in this release. This version will be the first to be published as a brew tap thanks to @harsimranmaan and @aaqel-s

v0.10.3 (Dec 19, 2019)

  • when returning environment properties introduced in the previous release, first apply a JSON merge-patch on to base properties before returning it.

v0.10.2 (Dec 11, 2019)

  • Provide the ability to load environment definitions from external files in addition to defining them inline.
  • Add the ability to associate a properties object with every environment and also define baseline properties. These are exposed as the qbec.io/envProperties external variable.

The test app under examples demonstrates both of these features.

  • Internal build improvements: add code coverage (thanks @harsimranmaan)

v0.10.1 (Dec 1, 2019)

Fix a regression in the metadata check introduced in v0.10.0. Nil maps for annotations and labels were being reported as an error, when they shouldn't have.

v0.10.0 (Nov 30, 2019)

  • better support for custom types that are created lazily, for example, by an operator.
    • qbec now waits for custom types to be available in discovery for up to 2 minutes before applying their instances.
  • support for annotations to control qbec processing. This includes the ability to lock objects for updates and deletes, and to specify a custom apply order for objects. This includes standard rules to ensure that the default and system namespaces are never deleted.
  • various internal CI and release process fixes (thanks @harsimranmaan)

Backward incompatibilities:

qbec now checks every object to ensure that their labels and annotations have values that are strictly strings. Previously metadata having non-string values were dropped in their entirety.

v0.9.0 (Nov 16, 2019)

  • allow for component subdirectories at one level of nesting. A subdirectory directly under the components directory is treated as a multi-file component if it has an index.jsonnet file (which is the file loaded for the component), or an index.yaml file (in which case all JSON and YAML files in the directory are loaded).
  • add --force:* options to be able to override K8s context and namespace from command line (thanks @abhide). This allows for new use-cases like in-cluster applies. qbec options shows the available options and special values. Note that using these options suppresses qbec safety checks. Use with care.
  • add QBEC_YES environment variable as default for the --yes option. Provide better messages when a non-interactive build needs confirmation (thanks @harsimranmaan)
  • update client-go version to kubernetes-1.15.5. Add client-go version to the list of versions displayed by the qbec version command.
  • various internal CI improvements (thanks @harsimranmaan)
    • github actions workflow for builds
    • release workflow for tags
    • break build on gofmt failures

Backward incompatibilities:

  • If you previously had a component subdirectory that has an index.jsonnet or index.yaml file, qbec will now treat it as a component. Rename these files to restore previous behavior.
  • client-go upgrade has the potential to be backwards-incompatible for edge cases.

v0.8.0 (Oct 31, 2019)

  • update jsonnet version to v0.14.0
  • add initial version of bash completion command (thanks @e-zhang)
  • add qbec logo (thanks @kvaps)
  • minor bug fixes

There are no backwards-incompatible changes in this release. The minor version upgrade is to account for any unintentional backward incompatibilities caused by the jsonnet library upgrade.

v0.7.5 (Jul 28, 2019)

  • Fixes #51 by aligning the patch logic between qbec and kubectl more closely.

v0.7.4 (Jul 28, 2019)

  • Fix a bug (#33) where the original object for patches was using the live server object when it was not supposed to
  • Add kubectl's last applied annotation as a source for the original object when qbec annotation not found

v0.7.3 (Jul 22, 2019)

  • allow user to define a jsonnet post-processor in qbec.yaml that is provided with every object returned from evaliating jsonnet components and has the ability to decorate it, typically with additional annotations and labels. This allows common metadata to be set in one place.
  • add a --clean option to the show command that strips qbec metadata from the output. This reduces the noise when inspecting objects for debugging. Introduce a standard external variable called qbec.io/cleanMode that is off by default for all commands and only turned on for the show --clean command.
  • the above means that the post processor can use the value of the external variable to add annotations or not. This provides for a "real clean" experience.

v0.7.2 (Jul 19, 2019)

  • add a --wait option to the apply command to automatically wait for deployments, daemonsets and statefulsets to be rolled out before the command exits.

v0.7.1 (Jul 7, 2019)

  • update jsonnet version to v0.13
  • add env list and env vars command to enable arbitrary scripts to iterate over and get cluster information from qbec environments.
  • add support for transient objects that do not have a name but have generateName set. Always create such objects and garbage collect the versions of the object created in previous runs.

v0.7.0 (Jun 20, 2019)

safety feature: add duplicate checks to disallow more than one object with the same API group, kind, namespace and name.

These checks occur before any component or kind filtering and cannot be suppressed. To this end, this release may be backwards-incompatible if you already have duplicate objects in your component list.

v0.6.6 (Jun 19, 2019)

  • add global options to pass in a list of string var definitions from a file

v0.6.5 (Jun 14, 2019)

  • add --silent option to validate to suppress success/ unknown type messages

v0.6.4 (Jun 13, 2019)

  • enhance diffs to show content that will be added and removed rather than single lines that said 'object not on sever', 'object not present locally' etc.

v0.6.3 (Apr 20, 2019)

  • correctly configure the Kubernetes client such that auth plugins are supported. There are no features in this release.

v0.6.2 (Apr 16, 2019)

v0.6.1 (Apr 1, 2019)

v0.6

  • initial release