Commit graph

160 commits

Author SHA1 Message Date
Vincent Ambo
5b82bc60fc chore: Update dependency versions 2019-09-04 11:58:58 +01:00
Vincent Ambo
d0f52766b3 fix(context): Ensure resource set paths are made absolute
Resolving of files (for `insertFile` and `insertTemplate`) should
always be relative to the resource set location, the previous
behaviour was considered a bug.

This is fixed by ensuring that resource set paths are absolute at
context loading time.
2019-09-04 11:15:58 +01:00
Jude Venn
75a3cd2534 docs: Update configHash tip to use insertTemplate function
An advantage of this method over the previous one is that any edits to
the ConfigMap yaml file will also trigger a rolling update.

It also keeps knowledge of what the ConfigMap contains inside its yaml
file instead of the Deployment needing to know which variables to hash.
2019-05-01 23:30:19 +01:00
Jude Venn
c422686f84 test(templater): Add a test for the insertTemplate function 2019-05-01 23:30:19 +01:00
Jude Venn
6353ed9d14 feat(templater): Add insertTemplate function
Similar to insertFile, but runs the templating against the file before
inserting.

This is useful for sharing common config between yaml files, e.g. volume
mounts in a deployment.yaml and cronjob.yaml, and it's useful to be able
to use the `configHash` annotation pattern with a templated
configmap.yaml
2019-05-01 23:30:19 +01:00
Vincent Ambo
8abe03de3c fix(build): Make Nix build work with recent nixpkgs
Changes in the Go build environment for Nix have caused the parallel
vetting to run in a subshell which does not have the required function
definitions.

This commit fixes the error by not running vet in parallel (there's no
point to that anyways as the project is tiny).
2019-05-01 17:24:09 +01:00
Felix Wiedmann
245d3bd154 chore(build): kubectl upgraded to the latest stable version (1.13.2)
Updates the kubectl version used in the Docker build to the latest
stable release. Please see the Kubernetes documentation for details.
2019-01-21 11:25:07 +01:00
Vincent Ambo
2682d05ffc chore(build): Move Nix commit for releases to latest NixOS stable
Updates a few build dependencies, most notably Go to 1.11. The chosen
commit is the current stable `nixos-18.09` tag in nixpkgs-channels.

While doing this I also checked whether it is now possible to remove
the exception for allowing references, but it's not.

Go may in the future gain support for fully reproducible builds, see
for example issue #16860 on their compiler. At that point maybe we can
drop a few settings here.
2019-01-21 11:25:07 +01:00
Vincent Ambo
a53e75741f fix(build): Depend on GNU Parallel during build
CI builds for `master` track unstable nixpkgs releases, in which
parallel is no longer part of the standard build environment.

However, this tool is required for executing some of the tests.
2019-01-21 11:25:07 +01:00
Martin Lehmann
54db9785d6 feat(main): Support specifying kubectl args in ResourceSets 2018-12-11 10:58:52 +01:00
Vincent Ambo
5f433c46c1 docs(README): Add note about installing on NixOS 2018-08-15 21:27:10 +02:00
Vincent Ambo
20b9432f16 chore(image): Update image for Kontemplate 1.7.0
Version changes:

* Kontemplate 1.7.0
* Kubectl 1.11.0
* Alpine 3.8
2018-08-15 21:27:10 +02:00
Vincent Ambo
f31a7d33b6 chore(brew): Update Homebrew formula for 1.7.0 2018-08-15 21:27:10 +02:00
Vincent Ambo
511ae92224 chore(build): Update dependencies to newest version
Updates the following dependencies to latest:

* Masterminds/semver
* Masterminds/sprig
* ghodss/yaml
* satori/go.uuid -> google/uuid
* huandu/xstrings
* imdario/mergo
* crypto
* alecthomas/kingpin.v2
* yaml.v2

As usual Go libraries are YOLO-versioned, so who knows what changed
here. I'll be going through `sprig` at least to add that to the
changelog.

This relates to #152.
2018-08-15 19:46:33 +02:00
Vincent Ambo
df1a9a1625 test(templater): Add a test for the default template function 2018-07-14 23:21:36 +02:00
Phillip Johnsen
ab059ad41c feat(templater): override sprig default function with guarded alternative
These changes overrides the `default` function provided by sprig with
an alternative to retrieve variable values from variables that might
not have been declared at all.

Referencing a variable in a template that is not declared, will lead
to the underlying templating functionality raising an error, causing
kontemplate to exit.

The override alternative to `default` accepts a second string argument
with the variable name. If the variable in question has not been
declared the first argument's value would be returned, just as the
original `default` function does.
2018-07-14 23:21:36 +02:00
Vincent Ambo
6b39254917 chore: Bump version to 1.7.0 2018-06-26 21:06:38 +02:00
Vincent Ambo
6d8214bfc8 test(context): Introduce an explicit value merging test
Introduces a test which will merge variables defined at every possible
layer together and ensure that the loaded context configuration is as
expected.

The test data provides an actual resource set template that can be
tested locally from a kontemplate source checkout:

    kontemplate template context/testdata/merging/context.yaml --var cliVar=cliVar
2018-06-26 21:06:38 +02:00
Vincent Ambo
4a6f087fbf chore(context): Remove previous value override test 2018-06-26 21:06:38 +02:00
Vincent Ambo
2db3bbcdbe refactor(context): Rewrite and explain value merging logic
Changes the logic for merging context values to be unambiguous and
easy to follow.

* loadDefaultVars returns the default vars directly instead of
  performing merging in addition
* all merging is performed in `mergeContextValues` using explicit
  explanations for every step of the merge.

After this commit the order of merging goes from least to most
"specific", please read the explanatory comments for more information.

This relates to #142.
2018-06-26 21:06:38 +02:00
Vincent Ambo
bd5980a5d7 feat(main): Add CLI flag for setting kubectl executable
This lets users choose the executable (either by full path or via a
$PATH-entry) to be used when executing `kubectl`.

This is useful in, for example, OpenShift based setups.

This fixes #143
2018-06-26 12:29:49 +02:00
Vincent Ambo
92c5c846e2 fix(context): Use SplitN to split CLI variable specifications
In some cases the value of a variable may contain an equals sign,
which would not work in the previous version.

This uses `SplitN` to split the variable specifier into a
pre-determined number (2) of sub-slices. Further `=`-symbols will then
be included in the second substring.
2018-06-21 14:07:47 +02:00
Vincent Ambo
01f771fa2f chore(image): Bump version to 1.6.0
* kontemplate 1.6.0
* kubectl 1.10.4
2018-06-09 22:13:42 +02:00
Vincent Ambo
e9992aec0b chore(brew): Update Homebrew formula for 1.6.0 2018-06-09 22:13:42 +02:00
Vincent Ambo
3a688191af fix(build): Fix shebang in build-release.sh 2018-06-09 22:13:42 +02:00
Vincent Ambo
97bef90387 chore: Bump version to 1.6.0 2018-06-09 21:34:58 +02:00
Vincent Ambo
c91cb21f70 feat(templater): Support single-template resource sets
Supports resource sets in which the `path` is pointed at a single
template file.

The example has been updated with ... an example of this.

This closes #81.
2018-06-09 21:23:48 +02:00
Vincent Ambo
77ca5b47cf fix(context): Global values have precedence over defaults 2018-06-09 21:16:27 +02:00
Vincent Ambo
ae6d960df9 feat(context): Support loading import variables from absolute paths
This lets users specify the paths from which to import additional
variables using absolute paths in addition to relative paths.

This enables both loading of configuration files placed outside of the
resource set folder (if desired), as well as special use-cases such as
specifying `/dev/stdin` as an input path to read variables from
standard input.

This change supersedes #131
2018-06-09 20:21:29 +02:00
Vincent Ambo
141355f350 refactor(util): Use YAML parser for both JSON & YAML files
JSON is a subset of YAML and the previous detection logic is
unnecessary.
2018-06-09 20:21:29 +02:00
Vincent Ambo
b33c353233 refactor(context): Implement more explicit merging of variables
The hierarchy for loading variables was previously not expressed
explicitly.

This commit refactors the logic for merging variables to explicitly
set the different layers of variables as values on the context object
and merge them for each resource set in `mergeContextValues`.
2018-06-09 19:16:23 +02:00
Phillip Johnsen
5cf9d53e80 feat(context): allow explicit variables to be defined as argument
These changes allows variables to be defined when executing
`kontemplate` via one or more `--variable` arguments.

With this in place one can either define new variables or override
existing variables loaded from a file:

```
$ kontemplate apply --variable version=v1.0 example/fancy-app.yaml
```

This avoids the need to write variables into a temporary file that is
only needed to provide "external variables" into resource sets.

Closes https://github.com/tazjin/kontemplate/issues/122
2018-06-09 19:16:23 +02:00
Vincent Ambo
09869cf8fc docs: Add contribution guidelines
This document is intended to provide some information about how to
contribute to the project, from basic sanity checks and code quality
to information about how to structure git commits.

These are the most common things that I encounter in pull requests
sent to my projects.
2018-05-15 11:25:25 +02:00
Vincent Ambo
fa5c12a9a2 chore(image): Bump version to 1.5.0
* Kontemplate 1.5.0
* kubectl 1.10.2
2018-05-08 12:11:33 +02:00
Vincent Ambo
75c92172af chore(brew): Update Homebrew formula for v1.5.0 2018-05-08 12:11:33 +02:00
Vincent Ambo
c68518d6c9 chore: Bump version to 1.5.0 2018-05-08 11:32:56 +02:00
Vincent Ambo
ea297abe1d fix(main): Use 'app.Fatalf' for fatal kubectl errors 2018-05-08 11:32:56 +02:00
Vincent Ambo
b8c3264019 fix(main): Handle errors & logic when templating to directory
This does several changes to the new "template to directory" feature
introduced in the previous commit:

1. Errors are now "handled". In classic Go-style, it is of course all
   too easy to do absolutely nothing with errors, but we can't have
   that. I'm onto you, Renee French's husband!

2. Resource sets containing similarly named files are now templated
   correctly by prepending the resource set name to the filename.

3. In the same vein as the previous point, nested resource sets are
   now also output correctly by replacing slashes (`/`) with
   dashes (`-`) to guarantee that the output files are a flat list.

Some minor cosmetic fixes have also been applied.
2018-05-08 11:23:59 +02:00
Niklas Wik
84dcc294bf feat(main): Support output directories in template function.
This introduces a new command line flag `--output` (or `-o` for short)
which makes it possible to template all specified resource sets into a
folder (instead of to stdout) when using `kontemplate template`.
2018-05-08 11:23:59 +02:00
noqcks
3ea3bed7ac fix(templater): add baseDir to gitHead cmd so that directory is overwritten
This makes it so that when gitHead is called in a template the git hash
that is returned is the hash of the folder containing the template, not
the hash of the folder where kontemplate is called.
2018-05-05 10:29:47 +02:00
noqcks
ac445d5235 refactor(templater) Refactor templator to use exec.Command directly instead of executing in sh 2018-03-29 20:05:30 +02:00
noqcks
e1c2c19330 feat(templater) Add a template function to insert surrounding repo's Git hash
A template function has been added that allows one to template the
Git hash of the surrounding repo. This is useful to be able to inspect the
deployment revision of an object in Kubernetes.
2018-03-29 20:05:30 +02:00
Vincent Ambo
867f40307e chore(brew): Bump Homebrew formula to 1.4.0 2018-03-17 23:20:13 +01:00
Vincent Ambo
e2effbb289 chore(image): Bump image version to 1.4
* upgrade Alpine release
* upgrade kubectl to 1.9.4
* upgrade Kontemplate to 1.4.0
2018-03-17 23:20:13 +01:00
Vincent Ambo
1f373caba0 chore: Bump version to 1.4.0 2018-03-17 22:47:57 +01:00
Vincent Ambo
03838ff31b fix(example): Add missing file to example folder 2018-03-17 22:47:57 +01:00
Vincent Ambo
3aa2cb8d3e refactor: Remove old error handling library
Removes the old error handling library and switches to plain
fmt.Errorf calls.

There are several reasons for this:

* There are no useful types or handling here anyways, so output format
  is the only priority.
* Users don't care about getting stacktraces.
* My emotional wellbeing.

Fin de siècle.
2018-03-09 15:23:57 +01:00
Vincent Ambo
b8722ce83b refactor(templater): Pass resource set path to insertFile function
This is actually several refactors in one:

* rename "fileContent" function to "insertFile"
* pass the resource set path to the "insetFile" function
* update docs and example with a pipeline including indentation
  adjustments for the inserted file
2018-03-09 14:54:20 +01:00
Niklas Wik
bafb792339 feat(templater): Added support for file include
Adds a 'fileContent' template function to insert the literal contents
of a file specified in the template.

Signed-off-by: Niklas Wik <niklas.wik@nokia.com>
2018-03-09 14:54:20 +01:00
Vincent Ambo
850fdcf3e0 feat(build): Pin nixpkgs used for release build
Pin the nixpkgs-commit used for building the Kontemplate release to a
specific commit.

Kontemplate builds should now be fully repeatable (and most likely
reproducible!) on any machine running Nix.
2018-03-09 14:51:05 +01:00