From 81022d2c6bb756481c5ba974ab885be9fdf73f20 Mon Sep 17 00:00:00 2001 From: aeneasr Date: Wed, 19 Jun 2019 14:42:40 +0200 Subject: [PATCH] helm: Rename ory-oathkeeper to ory/oathkeeper --- .circleci/config.yml | 4 +-- docs/helm/README.md | 10 +++--- docs/helm/charts/index.yaml | 30 ------------------ docs/helm/charts/ory-oathkeeper-0.0.4.tgz | Bin 10313 -> 0 bytes .../.helmignore | 0 .../{ory-oathkeeper => oathkeeper}/Chart.yaml | 2 +- .../demo/access-rules.json | 0 .../demo/authenticator.jwt.jwks.json | 0 .../demo/mutator.id_token.jwks.json | 0 .../stub/local-jwks-config.yaml | 0 .../stub/remote-config.yaml | 6 ++-- .../templates/NOTES.txt | 16 +++++----- .../templates/_helpers.tpl | 12 +++---- .../templates/configmap.yaml | 12 +++---- .../templates/deployment.yaml | 20 ++++++------ .../templates/ingress-api.yaml | 4 +-- .../templates/ingress-proxy.yaml | 4 +-- .../templates/secret-jwks.yaml | 4 +-- .../templates/service-api.yaml | 6 ++-- .../templates/service-proxy.yaml | 6 ++-- .../templates/tests/test-connection.yaml | 19 +++++++++++ .../values.yaml | 8 ++--- .../templates/tests/test-connection.yaml | 19 ----------- 23 files changed, 76 insertions(+), 106 deletions(-) delete mode 100644 docs/helm/charts/index.yaml delete mode 100644 docs/helm/charts/ory-oathkeeper-0.0.4.tgz rename helm/charts/{ory-oathkeeper => oathkeeper}/.helmignore (100%) rename helm/charts/{ory-oathkeeper => oathkeeper}/Chart.yaml (95%) rename helm/charts/{ory-oathkeeper => oathkeeper}/demo/access-rules.json (100%) rename helm/charts/{ory-oathkeeper => oathkeeper}/demo/authenticator.jwt.jwks.json (100%) rename helm/charts/{ory-oathkeeper => oathkeeper}/demo/mutator.id_token.jwks.json (100%) rename helm/charts/{ory-oathkeeper => oathkeeper}/stub/local-jwks-config.yaml (100%) rename helm/charts/{ory-oathkeeper => oathkeeper}/stub/remote-config.yaml (72%) rename helm/charts/{ory-oathkeeper => oathkeeper}/templates/NOTES.txt (84%) rename helm/charts/{ory-oathkeeper => oathkeeper}/templates/_helpers.tpl (81%) rename helm/charts/{ory-oathkeeper => oathkeeper}/templates/configmap.yaml (75%) rename helm/charts/{ory-oathkeeper => oathkeeper}/templates/deployment.yaml (77%) rename helm/charts/{ory-oathkeeper => oathkeeper}/templates/ingress-api.yaml (87%) rename helm/charts/{ory-oathkeeper => oathkeeper}/templates/ingress-proxy.yaml (87%) rename helm/charts/{ory-oathkeeper => oathkeeper}/templates/secret-jwks.yaml (69%) rename helm/charts/{ory-oathkeeper => oathkeeper}/templates/service-api.yaml (65%) rename helm/charts/{ory-oathkeeper => oathkeeper}/templates/service-proxy.yaml (66%) create mode 100644 helm/charts/oathkeeper/templates/tests/test-connection.yaml rename helm/charts/{ory-oathkeeper => oathkeeper}/values.yaml (94%) delete mode 100644 helm/charts/ory-oathkeeper/templates/tests/test-connection.yaml diff --git a/.circleci/config.yml b/.circleci/config.yml index bd92731a60..6202d5e8fa 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ jobs: steps: - checkout - run: curl -L https://git.io/get_helm.sh | bash - - run: helm lint ./helm/charts/ory-oathkeeper/ + - run: helm lint ./helm/charts/oathkeeper/ release: docker: @@ -17,7 +17,7 @@ jobs: - checkout - run: curl -L https://git.io/get_helm.sh | bash - run: helm init --client-only - - run: helm package -d docs/helm/charts/ ./helm/charts/ory-oathkeeper/ --version `echo $CIRCLE_TAG | sed s/v//g` + - run: helm package -d docs/helm/charts/ ./helm/charts/oathkeeper/ --version `echo $CIRCLE_TAG | sed s/v//g` - run: helm repo index docs/helm/charts/ - run: git config --global user.email "hi@ory.sh" - run: git config --global user.name "ORY Continuous Integration" diff --git a/docs/helm/README.md b/docs/helm/README.md index adda3d37a8..096409ff0e 100644 --- a/docs/helm/README.md +++ b/docs/helm/README.md @@ -16,7 +16,7 @@ The ORY Oathkeeper Helm Chart helps you deploy ORY Oathkeeper on Kubernetes usin Installing ORY Oathkeeper using Helm with ```bash -$ helm install ory-oathkeeper +$ helm install ory/oathkeeper ``` which sets up a very basic configuration with no access rules and no enabled authenticators, authorizers, or @@ -30,7 +30,7 @@ This Helm Chart supports a demo mode which deploys access rules for urls that point to [httpbin.org](https://httpbin.org). To install ORY Oathkeeper in demo-mode, run: ```bash -$ helm install --set demo=true ory-oathkeeper +$ helm install --set demo=true ory/oathkeeper ``` Be aware that this mode uses JSON Web Keys and other secrets that are publicly accessible via GitHub. @@ -57,7 +57,7 @@ oathkeeper: and passing that as a value override to helm: ```bash -$ helm install -f ./path/to/config.yaml ory-oathkeeper +$ helm install -f ./path/to/config.yaml ory/oathkeeper ``` Values such as the proxy / api port will be automatically propagated to the service and ingress definitions. @@ -73,7 +73,7 @@ from disk and deploying it as a Kubernetes Secret: ```bash $ helm install \ --set-file oathkeeper.mutatorIdTokenJWKs=./path/to/jwks.json \ - ory-oathkeeper + ory/oathkeeper ``` Please note that any configuration values set for `oathkeeper.config.mutator.id_token.jwks_url` using e.g. @@ -86,7 +86,7 @@ Instead of fetching access rules from remote locations, you can set your access ```bash $ helm install \ --set-file oathkeeper.accessRules=./path/to/access-rules.json \ - ory-oathkeeper + ory/oathkeeper ``` Please note that any configuration values set for `oathkeeper.config.access_rules.repositories` using e.g. diff --git a/docs/helm/charts/index.yaml b/docs/helm/charts/index.yaml deleted file mode 100644 index a3a26432ac..0000000000 --- a/docs/helm/charts/index.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: v1 -entries: - ory-oathkeeper: - - apiVersion: v1 - appVersion: v0.16.0-beta.4 - created: "2019-06-19T12:32:48.020148296Z" - description: A Helm chart for deployoing ORY Oathkeeper in Kubernetes - digest: be3b11a76d2cd9a732f3e0ff44a38996e5ed7b80270d2fb51054cca83d687d24 - home: https://www.ory.sh/ - keywords: - - zero-trust - - beyond-corp - - access-control - - reverse-proxy - - nginx - - envoy - - ambassador - - auth-filter - maintainers: - - email: hi@ory.sh - name: aeneasr - url: https://www.ory.sh/ - name: ory-oathkeeper - sources: - - https://github.com/ory/oathkeeper - - https://github.com/ory/k8s - urls: - - ory-oathkeeper-0.0.4.tgz - version: 0.0.4 -generated: "2019-06-19T12:32:48.019219884Z" diff --git a/docs/helm/charts/ory-oathkeeper-0.0.4.tgz b/docs/helm/charts/ory-oathkeeper-0.0.4.tgz deleted file mode 100644 index 03ec45facacf0f1ad26ac8d567a696620e7f5b46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10313 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 b=A(VIkM`02E!zJJ00960Rrcuk0G