Comments (6)
Perhaps you can call it twice, once with CRDs and controller enabled and explicitly gateway disabled. Second the other way around.
from tanka.
The problem lies in the fact that the kong
chart template emits the very same CRDs regardless of the values
.
So the possible workarounds are:
Reimplement the umbrella chart in jsonnet
- instead of templating
kong/ingress
we templatekong/kong
twice, one for controller and one for ingress includeCRDs = true
only for one component
Pros: it's still declarative and you can tk apply
once
Cons: if the umbrella chart changes upstream, the workaround does not work anymore
Template the umbrella chart twice with different values
- we template
kong/ingress
twice, with values for controller and for ingress includeCRDs = true
only for one call ofhelm.template
Pros: it's still declarative and you can tk apply
once, compatible with upstream chart as long as the values don't change
Cons: leaves user wondering why we are templating the same thing twice
Template the umbrella chart once but apply twice
kong/ingress
templated only once in the jsonnet code- change values and apply twice
includeCRDs= true
only in one apply call
Pros: committed code looks like we're just applying an helm chart
Cons: not declarative, what values have been applied before needs to be documented
from tanka.
Can we have a relaxed mode for duplicated resources for niche cases like this one?
from tanka.
I was able to get it execute this way:
local tanka = import 'github.com/grafana/jsonnet-libs/tanka-util/main.libsonnet';
local helm = tanka.helm.new(std.thisFile);
{
_config:: {
ns: 'kong',
},
kong_ingress_controller: helm.template('kong', './charts/ingress/', {
namespace: $._config.ns,
includeCRDs: true,
values+: {
gateway+: { enabled: false },
},
}),
kong_ingress_gateway: helm.template('kong', './charts/ingress/', {
namespace: $._config.ns,
includeCRDs: false,
values+: {
controller+: { enabled: false },
},
}),
kong_namespace: {
apiVersion: 'v1',
kind: 'Namespace',
metadata: {
name: $._config.ns,
},
},
}
from tanka.
@Duologic Thank you for your help, that's the mid option described above and it works.
I still feel it is a workaround and would like to see a way to tell Tanka "yes there are duplicated resources, deal with it".
So I'm going to close this issue about kong. Let me know if I should open another one for a feature request "relaxed duplicated resources". If you feel this is not needed or in general not in the scope of tanka, I won't ask for it.
from tanka.
The duplication protection prevents unintended ambiguity. Imagine you have a Deployment defined twice, but one of them has replicas: 1
and the other replicas: 10
, which value should Tanka choose? This kind of ambiguity leads to mistakes down the line and making it harder to debug.
Or with other words, the Helm chart should probably not spit out the CRDs twice.
from tanka.
Related Issues (20)
- Helm-Templating: if $.Capabilities... HOT 3
- container cannot start HOT 2
- Tanka init fail HOT 3
- Add TANKA_PAGER env var HOT 1
- Helm tool credentials management for private repo charts
- tk apply crashes by creating Role from helm chart HOT 3
- Manifests not sorted by .metadata.generateName HOT 1
- `tk fmt` is inconsistent in printing final newline
- Additional verbosity level for `tk fmt`: Only print changed files, not all files HOT 1
- tk using wrong kubeconfig context HOT 4
- Go version mismatch
- Keep comments in chartfile.yaml? HOT 2
- tk env list throws error if environments/envx/sub/main.jsonnet exists
- Tanka panics if non-string annotation values are passed HOT 1
- ingressFor HOT 3
- std.objectKeysValues fails tk lint HOT 1
- `tk apply|diff ...` panics with `panic: runtime error: slice bounds out of range [:200] with length 197` HOT 2
- Update website dependencies HOT 1
- Is there a way to generate documentation from code-comments? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tanka.