From 67867880ec4fec21e5755eff0580c7a666f54893 Mon Sep 17 00:00:00 2001 From: Christopher Kolstad Date: Tue, 4 Apr 2023 11:59:15 +0200 Subject: [PATCH] task: Added Helm chart for Unleash-Edge. (#67) Co-authored-by: Thomas Heartman --- charts/unleash-edge/.helmignore | 22 +++++ charts/unleash-edge/Chart.yaml | 14 +++ charts/unleash-edge/README.md | 59 ++++++++++++ .../unleash-edge/ci}/unleash-edge-values.yaml | 3 + .../unleash-edge/examples/minimumvalues.yaml | 10 ++ charts/unleash-edge/features.json | 1 + charts/unleash-edge/templates/NOTES.txt | 22 +++++ charts/unleash-edge/templates/_helpers.tpl | 62 ++++++++++++ charts/unleash-edge/templates/deployment.yaml | 76 +++++++++++++++ charts/unleash-edge/templates/hpa.yaml | 32 +++++++ charts/unleash-edge/templates/ingress.yaml | 61 ++++++++++++ charts/unleash-edge/templates/service.yaml | 15 +++ .../templates/serviceaccount.yaml | 12 +++ charts/unleash-edge/values.yaml | 94 +++++++++++++++++++ 14 files changed, 483 insertions(+) create mode 100644 charts/unleash-edge/.helmignore create mode 100644 charts/unleash-edge/Chart.yaml create mode 100644 charts/unleash-edge/README.md rename {.github/helmvalues/unleash-edge => charts/unleash-edge/ci}/unleash-edge-values.yaml (66%) create mode 100644 charts/unleash-edge/examples/minimumvalues.yaml create mode 100644 charts/unleash-edge/features.json create mode 100644 charts/unleash-edge/templates/NOTES.txt create mode 100644 charts/unleash-edge/templates/_helpers.tpl create mode 100644 charts/unleash-edge/templates/deployment.yaml create mode 100644 charts/unleash-edge/templates/hpa.yaml create mode 100644 charts/unleash-edge/templates/ingress.yaml create mode 100644 charts/unleash-edge/templates/service.yaml create mode 100644 charts/unleash-edge/templates/serviceaccount.yaml create mode 100644 charts/unleash-edge/values.yaml diff --git a/charts/unleash-edge/.helmignore b/charts/unleash-edge/.helmignore new file mode 100644 index 0000000..50af031 --- /dev/null +++ b/charts/unleash-edge/.helmignore @@ -0,0 +1,22 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/unleash-edge/Chart.yaml b/charts/unleash-edge/Chart.yaml new file mode 100644 index 0000000..c0de338 --- /dev/null +++ b/charts/unleash-edge/Chart.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: v2 +name: unleash-edge +description: A Helm chart for deploying Unleash Edge to kubernetes +icon: https://docs.getunleash.io/img/logo.svg +type: application +version: 1.0.0 + +appVersion: "v1.0.0" +maintainers: + - name: chriswk + - name: sighphyre + - name: nunogois + - name: gastonfournier diff --git a/charts/unleash-edge/README.md b/charts/unleash-edge/README.md new file mode 100644 index 0000000..d5b102d --- /dev/null +++ b/charts/unleash-edge/README.md @@ -0,0 +1,59 @@ +# Unleash Edge + +Unleash Edge offers a way to use Unleash in client-side applications, such as single page and native apps. It can also be used for server-side applications, taking the place of the main Unleash server. This has the added benefit of not triggering database operations for every client refresh. + +See the [reference documentation](https://docs.getunleash.io/reference/unleash-edge) for more on the reasons why you might want to deploy Edge in your cluster. + +This chart bootstraps an [Unleash Edge](https://github.com/Unleash/unleash-edge) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + +No extra configuration is needed besides pointing edge to an Upstream URL. + +## Prerequisites + +- Kubernetes 1.23+ +- Helm 3+ + +## Get Repository Info + +```console +helm repo add unleash https://docs.getunleash.io/helm-charts +helm repo update +``` + +_See [the helm repository docs](https://helm.sh/docs/helm/helm_repo/) for command documentation._ + +## Install Chart + +```console +helm install unleash-edge unleash/unleash-edge +``` + +_See [configuration](#configuration) below._ + +_See [helm install](https://helm.sh/docs/helm/helm_install/) for command documentation._ + +## Dependencies + +You'll need a running Unleash instance in your kubernetes cluster, or a hosted instance (Get one at [https://www.getunleash.io](https://www.getunleash.io)). + +## Uninstall Chart + +```console +helm uninstall unleash-edge +``` + +This removes all the Kubernetes components associated with the chart and deletes the release. + +_See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command documentation._ + +## Upgrading Chart + +```console +helm upgrade unleash-edge unleash/unleash-edge --install +``` + +_See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documentation._ + +## Configuration + +See description of configuration in the values.yaml diff --git a/.github/helmvalues/unleash-edge/unleash-edge-values.yaml b/charts/unleash-edge/ci/unleash-edge-values.yaml similarity index 66% rename from .github/helmvalues/unleash-edge/unleash-edge-values.yaml rename to charts/unleash-edge/ci/unleash-edge-values.yaml index 8e1899d..71372d6 100644 --- a/.github/helmvalues/unleash-edge/unleash-edge-values.yaml +++ b/charts/unleash-edge/ci/unleash-edge-values.yaml @@ -5,3 +5,6 @@ autoscaling: ingress: enabled: true + +edge: + upstreamUrl: "http://unleash:4242" diff --git a/charts/unleash-edge/examples/minimumvalues.yaml b/charts/unleash-edge/examples/minimumvalues.yaml new file mode 100644 index 0000000..5304fbf --- /dev/null +++ b/charts/unleash-edge/examples/minimumvalues.yaml @@ -0,0 +1,10 @@ +edge: + upstreamUrl: http://unleash.unleash:4242 + +resources: + requests: + cpu: 100m + memory: 64Mi + limits: + cpu: 200m + memory: 64Mi \ No newline at end of file diff --git a/charts/unleash-edge/features.json b/charts/unleash-edge/features.json new file mode 100644 index 0000000..4bbfd14 --- /dev/null +++ b/charts/unleash-edge/features.json @@ -0,0 +1 @@ +{"version":2,"features":[{"strategies":[{"name":"applicationHostname","constraints":[],"parameters":{"hostNames":""}},{"name":"userWithId","constraints":[],"parameters":{"userIds":""}}],"impressionData":false,"enabled":true,"name":"1234","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"userWithId","constraints":[],"parameters":{"userIds":"44113858,77331345,54502293,95104627,55505705,128535,72247905"}},{"name":"userWithId","constraints":[],"parameters":{"userIds":"48755422"}},{"name":"userWithId","constraints":[],"parameters":{"userIds":"128535"}}],"impressionData":false,"enabled":true,"name":"demoApp.step2","description":"Enable a feature for a specific userId","project":"demo-app","stale":false,"type":"permission","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"res","description":"","project":"default","stale":false,"type":"kill-switch","variants":[]},{"strategies":[{"name":"userWithId","constraints":[{"values":["then","this"],"inverted":false,"operator":"IN","contextName":"appName","caseInsensitive":false},{"values":["1234567"],"inverted":false,"operator":"IN","contextName":"companyId","caseInsensitive":false},{"values":["123","456"],"inverted":true,"operator":"IN","contextName":"userId","caseInsensitive":false},{"values":["4","5"],"inverted":true,"operator":"IN","contextName":"AccountId","caseInsensitive":false}],"parameters":{"userIds":""}},{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"demoApp.step3","rollout":"100","stickiness":"userId"}}],"impressionData":false,"enabled":true,"name":"demoApp.step3","description":"Gradual rollout of feature toggle","project":"demo-app","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"atf1","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"atf1","description":"haha","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"userWithId","constraints":[],"parameters":{"userIds":"95104627,128535"}},{"name":"userWithId","constraints":[],"parameters":{"userIds":"82895148,dfsfsd,vsdfvsdf,qsv,44113858"}}],"impressionData":true,"enabled":true,"name":"demoApp.step4","description":"Demonstration on how to use multiple variants","project":"demo-app","stale":false,"type":"experiment","variants":[{"name":"cyan","weight":10,"payload":{"type":"string","value":"cyan"},"overrides":[],"stickiness":"default","weightType":"variable"},{"name":"orange","weight":950,"payload":{"type":"string","value":"orange"},"overrides":[],"stickiness":"default","weightType":"fix"},{"name":"red","weight":30,"payload":{"type":"string","value":"red"},"overrides":[{"values":["82895148"],"contextName":"userId"}],"stickiness":"default","weightType":"fix"},{"name":"userId","weight":10,"payload":{"type":"string","value":"54388052"},"overrides":[],"stickiness":"default","weightType":"variable"}]},{"strategies":[{"name":"default","constraints":[],"parameters":{}},{"name":"default","constraints":[{"values":["1","2"],"inverted":true,"operator":"IN","contextName":"userId","caseInsensitive":false},{"values":["666","678","689"],"inverted":false,"operator":"IN","contextName":"pc","caseInsensitive":false},{"values":["1272"],"inverted":false,"operator":"IN","contextName":"country","caseInsensitive":false}],"parameters":{}},{"name":"flexibleRollout","constraints":[{"values":["then"],"inverted":false,"operator":"IN","contextName":"appName","caseInsensitive":false},{"values":["666","678","689"],"inverted":false,"operator":"IN","contextName":"pc","caseInsensitive":false},{"values":["1272"],"inverted":false,"operator":"IN","contextName":"country","caseInsensitive":false}],"parameters":{"groupId":"demoApp.step1","rollout":"100","stickiness":"default"}},{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"demoApp.step1","rollout":"50","stickiness":"default"}}],"impressionData":true,"enabled":true,"name":"demoApp.step1","description":"Enable for all users","project":"demo-app","stale":false,"type":"release","variants":[{"name":"Main","weight":500,"payload":{"type":"string","value":"hestarsomfestar"},"overrides":[],"stickiness":"default","weightType":"variable"},{"name":"Opa","weight":500,"payload":{"type":"string","value":"asAS"},"overrides":[],"stickiness":"default","weightType":"variable"}]},{"strategies":[{"name":"remoteAddress","constraints":[],"parameters":{"IPs":"192.168.0.1"}},{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"bbtoggles","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"bbtoggles","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"testttttttttttt","rollout":"50","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"testttttttttttt","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"default","constraints":[],"parameters":{}}],"impressionData":false,"enabled":false,"name":"HideLogo","description":"This option for hide logo","project":"default","stale":false,"type":"experiment","variants":[{"name":"test","weight":1000,"payload":{"type":"string","value":"asdf"},"overrides":[{"values":["this"],"contextName":"appName"},{"values":["then"],"contextName":"appName"}],"stickiness":"default","weightType":"variable"}]},{"strategies":[],"impressionData":false,"enabled":false,"name":"Test44","description":"","project":"default","stale":false,"type":"operational","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"fd","description":"","project":"default","stale":false,"type":"experiment","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"earphones","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":false,"name":"earphones","description":"","project":"test-project","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"toggle2","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"length","rollout":"100","stickiness":"default"}}],"impressionData":true,"enabled":true,"name":"length","description":"길이","project":"KTest","stale":false,"type":"release","variants":[{"name":"variant","weight":1000,"payload":{"type":"string","value":"TEST!!"},"overrides":[{"values":["1","2","3"],"contextName":"companyId"},{"values":["4","5","6"],"contextName":"companyId"}],"stickiness":"default","weightType":"variable"}]},{"strategies":[{"name":"userWithId","constraints":[{"values":["then"],"inverted":false,"operator":"IN","contextName":"appName","caseInsensitive":false},{"values":["1","2","3"],"inverted":false,"operator":"IN","contextName":"companyId","caseInsensitive":false}],"parameters":{"userIds":""}}],"impressionData":false,"enabled":false,"name":"expTest","description":"","project":"KTest","stale":false,"type":"experiment","variants":[]},{"strategies":[{"name":"default","constraints":[{"values":["67686","6799","6554"],"inverted":false,"operator":"IN","contextName":"companyId","caseInsensitive":false}],"parameters":{}},{"name":"default","constraints":[{"values":["1272","1092"],"inverted":false,"operator":"IN","contextName":"country","caseInsensitive":false}],"parameters":{}},{"name":"userrole","constraints":[{"values":["1092"],"inverted":false,"operator":"IN","contextName":"country","caseInsensitive":false},{"values":["699","698","697"],"inverted":false,"operator":"IN","contextName":"pc","caseInsensitive":false},{"values":["DC","FARM"],"inverted":false,"operator":"IN","contextName":"role","caseInsensitive":false}],"parameters":{}},{"name":"userrole","constraints":[{"values":["1272"],"inverted":false,"operator":"IN","contextName":"country","caseInsensitive":false},{"values":["666","667","668"],"inverted":false,"operator":"IN","contextName":"pc","caseInsensitive":false},{"values":["FARM","DC","BRKR"],"inverted":false,"operator":"IN","contextName":"role","caseInsensitive":false}],"parameters":{}}],"impressionData":false,"enabled":false,"name":"price","description":"","project":"SALT","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"feat123","description":"","project":"mh-project","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"cc","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"cc","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"1q","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"1q","description":"1","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"show-frontend","description":"","project":"smart-mash","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"show-button","description":"","project":"smart-mash","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"toggle_bun","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"toggle_bun","description":"","project":"1","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"fuga","description":"","project":"hoge","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"YZTesting","rollout":"50","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"YZTesting","description":"","project":"default","stale":false,"type":"experiment","variants":[{"name":"x1","weight":334,"payload":{"type":"string","value":"hello"},"overrides":[],"stickiness":"default","weightType":"variable"},{"name":"x2","weight":333,"payload":{"type":"string","value":"byebye"},"overrides":[],"stickiness":"default","weightType":"variable"},{"name":"x3","weight":333,"payload":{"type":"string","value":"bonjour"},"overrides":[],"stickiness":"default","weightType":"variable"}]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"cccc","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"cccc","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"feature_01","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"feature_01","description":"","project":"gl-jaje","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"default","constraints":[{"values":["india","belgium","france"],"inverted":false,"operator":"IN","contextName":"country","caseInsensitive":false}],"parameters":{}}],"impressionData":true,"enabled":false,"name":"transics1","description":"","project":"3","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"teste2","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"teste2","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"transics2","description":"Add toggle through CI/CD pipeline","project":"3","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"turnlight","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"turnlight","description":"turn on/off light","project":"projectAAA","stale":true,"type":"kill-switch","variants":[]},{"strategies":[],"impressionData":true,"enabled":false,"name":"horrendouswarning","description":"Test for warning","project":"konk-test","stale":false,"type":"experiment","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"T1","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":false,"name":"T1","description":"","project":"Test","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"snow","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"snow","description":"","project":"projectAAA","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"tenants","constraints":[],"parameters":{"ids":"45,34"}}],"impressionData":false,"enabled":true,"name":"new-login","description":"","project":"default","stale":false,"type":"experiment","variants":[]},{"strategies":[{"name":"default","constraints":[{"values":["hamish@foobs.com"],"inverted":true,"operator":"IN","contextName":"email","caseInsensitive":false}],"parameters":{}},{"name":"userWithId","constraints":[],"parameters":{"userIds":"123,345"}}],"impressionData":true,"enabled":true,"name":"loginAllowed","description":"","project":"default","stale":false,"type":"permission","variants":[]},{"strategies":[{"name":"default","constraints":[],"parameters":{}},{"name":"default","constraints":[],"parameters":{}}],"impressionData":true,"enabled":true,"name":"snowing","description":"Enable snowing feature","project":"demo-app","stale":false,"type":"release","variants":[{"name":"appName","weight":250,"overrides":[{"values":["ios-mpa"],"contextName":"appName"}],"stickiness":"default","weightType":"variable"},{"name":"test","weight":250,"payload":{"type":"json","value":"{\"asd\":\"asd\"}"},"overrides":[{"values":["v1"],"contextName":"appName"},{"values":["axon"],"contextName":"companyId"}],"stickiness":"default","weightType":"variable"},{"name":"teste","weight":250,"payload":{"type":"string","value":"true"},"overrides":[{"values":["teste"],"contextName":"country"}],"stickiness":"default","weightType":"variable"},{"name":"US","weight":0,"payload":{"type":"string","value":"us"},"overrides":[{"values":["south"],"contextName":"region"}],"stickiness":"default","weightType":"fix"},{"name":"xyz","weight":250,"payload":{"type":"string","value":"test"},"overrides":[{"values":["spot"],"contextName":"institutionId"}],"stickiness":"default","weightType":"variable"}]},{"strategies":[{"name":"default","constraints":[],"parameters":{}}],"impressionData":false,"enabled":false,"name":"CMTestToggle","description":"","project":"CMTest","stale":false,"type":"release","variants":[{"name":"Variant2","weight":1000,"payload":{"type":"json","value":"{\"hello\":\"world\"}"},"overrides":[],"stickiness":"default","weightType":"variable"}]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"TEst","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"TEst","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"transics3","description":"","project":"3","stale":true,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"pricefeature","description":"","project":"SALT-New","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"userWithId","constraints":[],"parameters":{"userIds":"hakon"}}],"impressionData":false,"enabled":false,"name":"isAdmin","description":"only available for user admin users","project":"hptest","stale":false,"type":"permission","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"is-appS","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"is-appS","description":"","project":"sms-reminder-test","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"default","constraints":[],"parameters":{}}],"impressionData":false,"enabled":true,"name":"testexperiment","description":"test-experiment","project":"default","stale":false,"type":"experiment","variants":[{"name":"clear","weight":500,"overrides":[],"stickiness":"default","weightType":"variable"},{"name":"dark","weight":500,"overrides":[],"stickiness":"default","weightType":"variable"}]},{"strategies":[],"impressionData":false,"enabled":false,"name":"aaaaaaaaaaaaaa","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"lalala1","rollout":"50","stickiness":"default"}}],"impressionData":false,"enabled":false,"name":"lalala1","description":"asdfsf","project":"lala","stale":true,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"feature_001","description":"","project":"MerchantTest","stale":false,"type":"experiment","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"feature_002","description":"","project":"MerchantTest","stale":false,"type":"permission","variants":[]},{"strategies":[{"name":"userWithId","constraints":[],"parameters":{"userIds":"12,3214,4124124"}}],"impressionData":false,"enabled":false,"name":"Tester","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"default","constraints":[{"value":"3.9.1","values":[],"inverted":false,"operator":"SEMVER_GT","contextName":"version","caseInsensitive":false}],"parameters":{}}],"impressionData":false,"enabled":true,"name":"TestVersion","description":"","project":"default","stale":false,"type":"release","variants":[{"name":"productcode","weight":1000,"payload":{"type":"string","value":"asdadasd"},"overrides":[{"values":["11111"],"contextName":"currentTime"},{"values":["22222"],"contextName":"currentTime"}],"stickiness":"default","weightType":"variable"}]},{"strategies":[],"impressionData":false,"enabled":false,"name":"test_wow2","description":"","project":"test.test","stale":false,"type":"release","variants":[{"name":"test","weight":1000,"payload":{"type":"string","value":"test"},"overrides":[],"stickiness":"default","weightType":"variable"}]},{"strategies":[],"impressionData":false,"enabled":false,"name":"dasdas","description":"dasdasdas","project":"testdasdas","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"HistoricSync","rollout":"50","stickiness":"default"}}],"impressionData":false,"enabled":false,"name":"HistoricSync","description":"","project":"projid","stale":false,"type":"experiment","variants":[]},{"strategies":[],"impressionData":true,"enabled":false,"name":"ytuyghgdfhfj","description":"","project":"default","stale":false,"type":"operational","variants":[]},{"strategies":[{"name":"default","constraints":[],"parameters":{}}],"impressionData":false,"enabled":false,"name":"Blah","description":"","project":"test","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"testf","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"Tenants","constraints":[{"values":["tenant"],"inverted":false,"operator":"IN","contextName":"starter","caseInsensitive":false}],"parameters":{}}],"impressionData":true,"enabled":true,"name":"proto-test","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"userWithId","constraints":[{"values":["10869984482"],"inverted":false,"operator":"IN","contextName":"userId","caseInsensitive":false}],"parameters":{"userIds":""}},{"name":"default","constraints":[],"parameters":{}}],"impressionData":false,"enabled":false,"name":"PIX","description":"","project":"caio-test","stale":false,"type":"permission","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"TestTest123","rollout":"100","stickiness":"default"}}],"impressionData":true,"enabled":true,"name":"TestTest123","description":"","project":"test123","stale":false,"type":"experiment","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"disableDemo1","rollout":"100","stickiness":"default"}}],"impressionData":true,"enabled":true,"name":"disableDemo1","description":"disable Demo 1","project":"5555","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"HistoricSyncInGarmin2","description":"","project":"projid","stale":false,"type":"permission","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"nextjs-poc","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"nextjs-poc","description":"","project":"default","stale":false,"type":"experiment","variants":[{"name":"A","weight":500,"payload":{"type":"string","value":"a"},"overrides":[],"stickiness":"default","weightType":"variable"},{"name":"B","weight":500,"payload":{"type":"string","value":"b"},"overrides":[],"stickiness":"default","weightType":"variable"}]},{"strategies":[{"name":"remoteAddress","constraints":[{"values":["666","678","689"],"inverted":false,"operator":"IN","contextName":"pc","caseInsensitive":false},{"values":["1272"],"inverted":false,"operator":"IN","contextName":"country","caseInsensitive":false}],"parameters":{"IPs":"19.23.33.44"}}],"impressionData":false,"enabled":false,"name":"test2023","description":"teste","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"ciatest","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"demo001","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"demo001","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[{"value":"20","values":[],"inverted":false,"operator":"NUM_GTE","contextName":"age","caseInsensitive":false}],"parameters":{"groupId":"ff-rollout","rollout":"50","stickiness":"default"}}],"impressionData":false,"enabled":false,"name":"ff-rollout","description":"","project":"roll","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":false,"enabled":false,"name":"test-release-toggle-1","description":"","project":"testtest","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"test999999","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"test999999","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[],"impressionData":true,"enabled":false,"name":"permy","description":"","project":"default","stale":false,"type":"permission","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"test_wow","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":false,"name":"test_wow","description":"","project":"test.test","stale":false,"type":"operational","variants":[{"name":"test","weight":1000,"payload":{"type":"string","value":"wow"},"overrides":[{"values":["then"],"contextName":"appName"}],"stickiness":"default","weightType":"variable"}]},{"strategies":[],"impressionData":true,"enabled":false,"name":"go1toggle","description":"","project":"default","stale":false,"type":"release","variants":[{"name":"CTAButtonSend","weight":334,"payload":{"type":"string","value":"Submit"},"overrides":[],"stickiness":"default","weightType":"variable"},{"name":"CTAButtonShare","weight":333,"payload":{"type":"string","value":"Share"},"overrides":[],"stickiness":"default","weightType":"variable"},{"name":"CTAButtonSubmit","weight":333,"payload":{"type":"string","value":"Submit"},"overrides":[],"stickiness":"default","weightType":"variable"}]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"beamer","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":false,"name":"beamer","description":"","project":"creative-suite","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"flexibleRollout","constraints":[],"parameters":{"groupId":"disabled_Second","rollout":"100","stickiness":"default"}}],"impressionData":false,"enabled":true,"name":"disabled_Second","description":"test second option","project":"5555","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"default","constraints":[],"parameters":{}}],"impressionData":false,"enabled":true,"name":"DemoToggle2222","description":"","project":"default","stale":false,"type":"release","variants":[]},{"strategies":[{"name":"default","constraints":[{"values":["1234567"],"inverted":false,"operator":"IN","contextName":"companyId","caseInsensitive":false}],"parameters":{}}],"impressionData":false,"enabled":false,"name":"Addm","description":"asdadasda","project":"default","stale":false,"type":"experiment","variants":[{"name":"sdds","weight":1000,"payload":{"type":"string","value":"dsds"},"overrides":[],"stickiness":"default","weightType":"variable"}]}],"query":{"environment":"default","inlineSegmentConstraints":true}} \ No newline at end of file diff --git a/charts/unleash-edge/templates/NOTES.txt b/charts/unleash-edge/templates/NOTES.txt new file mode 100644 index 0000000..aa18b2c --- /dev/null +++ b/charts/unleash-edge/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "unleash-edge.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "unleash-edge.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "unleash-edge.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "unleash-edge.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:3063 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 3063:$CONTAINER_PORT +{{- end }} diff --git a/charts/unleash-edge/templates/_helpers.tpl b/charts/unleash-edge/templates/_helpers.tpl new file mode 100644 index 0000000..20624a6 --- /dev/null +++ b/charts/unleash-edge/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "unleash-edge.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "unleash-edge.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "unleash-edge.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "unleash-edge.labels" -}} +helm.sh/chart: {{ include "unleash-edge.chart" . }} +{{ include "unleash-edge.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "unleash-edge.selectorLabels" -}} +app.kubernetes.io/name: {{ include "unleash-edge.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "unleash-edge.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "unleash-edge.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/charts/unleash-edge/templates/deployment.yaml b/charts/unleash-edge/templates/deployment.yaml new file mode 100644 index 0000000..ff1abed --- /dev/null +++ b/charts/unleash-edge/templates/deployment.yaml @@ -0,0 +1,76 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "unleash-edge.fullname" . }} + labels: + {{- include "unleash-edge.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "unleash-edge.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "unleash-edge.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "unleash-edge.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + args: ["edge"] + env: + - name: UPSTREAM_URL + value: "{{ .Values.edge.upstreamUrl }}" + {{- if .Values.edge.logLevel }} + - name: RUST_LOG + value: "{{ .Values.edge.logLevel }}" + {{- end }} + {{- if .Values.existingSecrets }} + {{- toYaml .Values.existingSecrets | nindent 12 }} + {{- end }} + {{- if .Values.env }} + {{- toYaml .Values.env | nindent 12 }} + {{- end }} + + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 3063 + protocol: TCP + livenessProbe: + httpGet: + path: /internal-backstage/health + port: http + readinessProbe: + httpGet: + path: /internal-backstage/health + port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/unleash-edge/templates/hpa.yaml b/charts/unleash-edge/templates/hpa.yaml new file mode 100644 index 0000000..25eaaf8 --- /dev/null +++ b/charts/unleash-edge/templates/hpa.yaml @@ -0,0 +1,32 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "unleash-edge.fullname" . }} + labels: + {{- include "unleash-edge.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "unleash-edge.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/charts/unleash-edge/templates/ingress.yaml b/charts/unleash-edge/templates/ingress.yaml new file mode 100644 index 0000000..1e4916b --- /dev/null +++ b/charts/unleash-edge/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "unleash-edge.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "unleash-edge.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/charts/unleash-edge/templates/service.yaml b/charts/unleash-edge/templates/service.yaml new file mode 100644 index 0000000..43d479c --- /dev/null +++ b/charts/unleash-edge/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "unleash-edge.fullname" . }} + labels: + {{- include "unleash-edge.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "unleash-edge.selectorLabels" . | nindent 4 }} diff --git a/charts/unleash-edge/templates/serviceaccount.yaml b/charts/unleash-edge/templates/serviceaccount.yaml new file mode 100644 index 0000000..14d4655 --- /dev/null +++ b/charts/unleash-edge/templates/serviceaccount.yaml @@ -0,0 +1,12 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "unleash-edge.serviceAccountName" . }} + labels: + {{- include "unleash-edge.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/charts/unleash-edge/values.yaml b/charts/unleash-edge/values.yaml new file mode 100644 index 0000000..33df50c --- /dev/null +++ b/charts/unleash-edge/values.yaml @@ -0,0 +1,94 @@ +--- +## Default values for unleash-edge +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: unleashorg/unleash-edge + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion + tag: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 3063 + +resources: + requests: + cpu: 100m + memory: 64Mi + limits: + cpu: 200m + memory: 64Mi + +ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # + + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 4 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} + +# Adds environment variables +env: [] +# - name: LOG_LEVEL +# value: info + +# adds environmentvars for existing secrets to the container via tpl function +existingSecrets: + "" + # - name: TOKENS + # valueFrom: + # secretKeyRef: + # name: secretname + # key: secretkey + +edge: + upstreamUrl: "http://unleash.unleash:4242" + logLevel: "warn"