diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..8c139c7 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: +- package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e27a060..e0dd4ac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,27 +11,59 @@ on: - 'main' env: + REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: - build: + audit: + name: Audit runs-on: ubuntu-latest - permissions: - contents: read - packages: write - steps: - name: Checkout repository uses: actions/checkout@v3 + with: + fetch-depth: 0 - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v4 with: - go-version: '^1.18.0' + go-version: '^1.20.0' - - name: Execute go tests + - name: Audit run: | go mod download - go test ./... + make audit + + - name: Check Sonar Token + id: check-sonar + shell: bash + run: | + if [ "${{ secrets.SONAR_TOKEN }}" != '' ]; then + echo "available=true" >> $GITHUB_OUTPUT; + else + echo "available=false" >> $GITHUB_OUTPUT; + fi + + - name: SonarCloud Scan + if: ${{ steps.check-sonar.outputs.available == 'true' }} + uses: SonarSource/sonarcloud-github-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + + build-images: + name: Build Docker Images + needs: + - audit + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 - name: Set up QEMU uses: docker/setup-qemu-action@v2 @@ -43,17 +75,18 @@ jobs: if: github.event_name != 'pull_request' uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@v4 with: - images: steadybit/extension-kong + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - name: Build and push Docker image - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: context: ./ push: ${{ github.event_name != 'pull_request' }} @@ -64,3 +97,93 @@ jobs: NAME=${{ github.repository }} VERSION=${{ steps.meta.outputs.version }} REVISION=${{ github.sha }} + + test-helm-charts: + name: "Test Helm Charts" + runs-on: ubuntu-latest + needs: + - build-images + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up Helm + uses: azure/setup-helm@v3 + with: + version: v3.9.0 + + - name: Add dependency chart repos + run: | + helm repo add steadybit https://steadybit.github.io/helm-charts + + - uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Add unit testing plugin + run: | + helm plugin install https://github.com/quintush/helm-unittest + + - name: Run unit tests + run: make charttesting + + - name: Set up chart-testing + uses: helm/chart-testing-action@v2.4.0 + + - name: Run chart-testing (lint) + run: ct lint --config chartTesting.yaml + + - name: Run chart-testing (list-changed) + id: list-changed + run: | + changed=$(ct list-changed --config chartTesting.yaml) + if [[ -n "$changed" ]]; then + echo "::set-output name=changed::true" + fi + + - name: Create kind cluster + uses: helm/kind-action@v1.5.0 + if: steps.list-changed.outputs.changed == 'true' + + - name: Run chart-testing (install) + run: ct install --config chartTesting.yaml + + + release-helm-chart: + name: "Release Helm Chart" + runs-on: ubuntu-latest + needs: + - test-helm-charts + if: github.ref == 'refs/heads/main' + + permissions: + contents: write + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Configure Git + run: | + git config user.name "$GITHUB_ACTOR" + git config user.email "$GITHUB_ACTOR@users.noreply.github.com" + + - name: Install Helm + uses: azure/setup-helm@v3 + with: + version: v3.8.1 + + - name: Add dependency chart repos + run: | + helm repo add steadybit https://steadybit.github.io/helm-charts + + - name: Run chart-releaser + uses: helm/chart-releaser-action@v1.5.0 + with: + charts_dir: charts + env: + CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.gitignore b/.gitignore index a04e1db..b525a8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ extension-kong *.iml +/coverage.out diff --git a/Dockerfile b/Dockerfile index b928ca4..ae97ca8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ## ## Build ## -FROM golang:1.18-alpine AS build +FROM golang:1.20-alpine AS build ARG NAME ARG VERSION @@ -18,11 +18,11 @@ RUN go mod download COPY . . RUN go build \ - -ldflags="\ - -X 'github.com/steadybit/extension-kit/extbuild.ExtensionName=${NAME}' \ - -X 'github.com/steadybit/extension-kit/extbuild.Version=${VERSION}' \ - -X 'github.com/steadybit/extension-kit/extbuild.Revision=${REVISION}'" \ - -o /extension-kong + -ldflags="\ + -X 'github.com/steadybit/extension-kit/extbuild.ExtensionName=${NAME}' \ + -X 'github.com/steadybit/extension-kit/extbuild.Version=${VERSION}' \ + -X 'github.com/steadybit/extension-kit/extbuild.Revision=${REVISION}'" \ + -o ./extension ## ## Runtime @@ -38,8 +38,9 @@ USER $USERNAME WORKDIR / -COPY --from=build /extension-kong /extension-kong +COPY --from=build /app/extension /extension EXPOSE 8084 +EXPOSE 8085 -ENTRYPOINT ["/extension-kong"] +ENTRYPOINT ["/extension"] diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..1b705dc --- /dev/null +++ b/Makefile @@ -0,0 +1,61 @@ +# ==================================================================================== # +# HELPERS +# ==================================================================================== # + +## help: print this help message +.PHONY: help +help: + @echo 'Usage:' + @sed -n 's/^##//p' ${MAKEFILE_LIST} | column -t -s ':' | sed -e 's/^/ /' + + +# ==================================================================================== # +# QUALITY CONTROL +# ==================================================================================== # + +## tidy: format code and tidy modfile +.PHONY: tidy +tidy: + go fmt ./... + go mod tidy -v + +## audit: run quality control checks +.PHONY: audit +audit: + go vet ./... + go run honnef.co/go/tools/cmd/staticcheck@latest -checks=all,-ST1000,-U1000,-ST1003 ./... + go test -race -vet=off -coverprofile=coverage.out ./... + go mod verify + +## charttesting: Run Helm chart unit tests +.PHONY: charttesting +charttesting: + for dir in charts/steadybit-extension-*; do \ + echo "Unit Testing $$dir"; \ + helm unittest $$dir; \ + done + +## chartlint: Lint charts +.PHONY: chartlint +chartlint: + ct lint --config chartTesting.yaml + +# ==================================================================================== # +# BUILD +# ==================================================================================== # + +## build: build the extension +.PHONY: build +build: + go mod verify + go build -o=./extension + +## run: run the extension +.PHONY: run +run: tidy build + ./extension + +## container: build the container image +.PHONY: container +container: + docker build -t extension-kong:latest . diff --git a/README.md b/README.md index d0d7d1e..0c6eb6c 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ A [Steadybit](https://www.steadybit.com/) attack implementation to inject HTTP f ## Deployment -We recommend that you deploy the extension with our [official Helm chart](https://github.com/steadybit/helm-charts/tree/main/charts/steadybit-extension-kong). +We recommend that you deploy the extension with our [official Helm chart](https://github.com/steadybit/extension-kong/tree/main/charts/steadybit-extension-kong). ## Agent Configuration diff --git a/chartTesting.yaml b/chartTesting.yaml new file mode 100644 index 0000000..797e96d --- /dev/null +++ b/chartTesting.yaml @@ -0,0 +1,8 @@ +# See https://github.com/helm/chart-testing#configuration +remote: origin +target-branch: main +chart-dirs: + - charts +chart-repos: + - steadybit=https://steadybit.github.io/helm-charts +helm-extra-args: --timeout 600s diff --git a/charts/steadybit-extension-kong/.helmignore b/charts/steadybit-extension-kong/.helmignore new file mode 100644 index 0000000..5b6e763 --- /dev/null +++ b/charts/steadybit-extension-kong/.helmignore @@ -0,0 +1,24 @@ +# 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 +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +tests/ \ No newline at end of file diff --git a/charts/steadybit-extension-kong/Chart.lock b/charts/steadybit-extension-kong/Chart.lock new file mode 100644 index 0000000..bb31f01 --- /dev/null +++ b/charts/steadybit-extension-kong/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: extensionlib + repository: https://steadybit.github.io/helm-charts + version: 1.1.0 +digest: sha256:50f7816a312812729400e1ead5cfe1a89de8aabcc66ff2cc6eac262d0952912b +generated: "2023-04-24T10:21:31.14342+02:00" diff --git a/charts/steadybit-extension-kong/Chart.yaml b/charts/steadybit-extension-kong/Chart.yaml new file mode 100644 index 0000000..1b1e1b3 --- /dev/null +++ b/charts/steadybit-extension-kong/Chart.yaml @@ -0,0 +1,25 @@ +apiVersion: v2 +name: steadybit-extension-kong +description: Steadybit Kong extension Helm chart for Kubernetes. +version: 1.6.4 +appVersion: latest +home: https://www.steadybit.com/ +icon: https://steadybit-website-assets.s3.amazonaws.com/logo-symbol-transparent.png +maintainers: + - email: daniel.reuter@steadybit.com + name: reuda +sources: + - https://github.com/steadybit/extension-kong +annotations: + artifacthub.io/images: | + - name: logo + image: https://steadybit-website-assets.s3.amazonaws.com/logo-symbol-transparent.png + artifacthub.io/links: |- + - name: Steadybit website + url: https://www.steadybit.com + - name: Steadybit reliability hub + url: https://hub.steadybit.com +dependencies: + - name: extensionlib + version: 1.1.0 + repository: https://steadybit.github.io/helm-charts diff --git a/charts/steadybit-extension-kong/README.md b/charts/steadybit-extension-kong/README.md new file mode 100644 index 0000000..9a990cb --- /dev/null +++ b/charts/steadybit-extension-kong/README.md @@ -0,0 +1 @@ +For documentation, please refer to the repository's [main documentation](../../README.md). diff --git a/charts/steadybit-extension-kong/charts/extensionlib-1.1.0.tgz b/charts/steadybit-extension-kong/charts/extensionlib-1.1.0.tgz new file mode 100644 index 0000000..35104bc Binary files /dev/null and b/charts/steadybit-extension-kong/charts/extensionlib-1.1.0.tgz differ diff --git a/charts/steadybit-extension-kong/templates/deployment.yaml b/charts/steadybit-extension-kong/templates/deployment.yaml new file mode 100644 index 0000000..c7e0c27 --- /dev/null +++ b/charts/steadybit-extension-kong/templates/deployment.yaml @@ -0,0 +1,76 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "extensionlib.names.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- range $key, $value := .Values.extraLabels }} + {{ $key }}: {{ $value }} + {{- end }} +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: {{ include "extensionlib.names.name" . }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "extensionlib.names.name" . }} + spec: + containers: + - image: {{ .Values.image.name }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: extension + resources: + requests: + memory: {{ .Values.resources.requests.memory }} + cpu: {{ .Values.resources.requests.cpu }} + limits: + memory: {{ .Values.resources.limits.memory }} + cpu: {{ .Values.resources.limits.cpu }} + env: + {{- include "extensionlib.deployment.env" (list .) | nindent 12 }} + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_NAME + value: {{ .Values.kong.name | quote }} + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_ORIGIN + value: {{ .Values.kong.origin | quote }} + {{- if and (.Values.kong.headerKey) (.Values.kong.headerValue) }} + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_HEADER_KEY + valueFrom: + secretKeyRef: + name: {{ include "extensionlib.names.name" . }}-header + key: key + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_HEADER_VALUE + valueFrom: + secretKeyRef: + name: {{ include "extensionlib.names.name" . }}-header + key: value + {{- end }} + volumeMounts: + {{- include "extensionlib.deployment.volumeMounts" (list .) | nindent 12 }} + livenessProbe: + httpGet: + path: /health/liveness + port: 8085 + readinessProbe: + httpGet: + path: /health/readiness + port: 8085 + volumes: + {{- include "extensionlib.deployment.volumes" (list .) | nindent 8 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.topologySpreadConstraints }} + topologySpreadConstraints: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/steadybit-extension-kong/templates/secret.yaml b/charts/steadybit-extension-kong/templates/secret.yaml new file mode 100644 index 0000000..da3cd60 --- /dev/null +++ b/charts/steadybit-extension-kong/templates/secret.yaml @@ -0,0 +1,15 @@ +{{- if and (.Values.kong.headerKey) (.Values.kong.headerValue) -}} +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "extensionlib.names.name" . }}-header + namespace: {{ .Release.Namespace }} + labels: + {{- range $key, $value := .Values.extraLabels }} + {{ $key }}: {{ $value }} + {{- end }} +type: Opaque +data: + key: {{ .Values.kong.headerKey | b64enc | quote }} + value: {{ .Values.kong.headerValue | b64enc | quote }} +{{- end }} diff --git a/charts/steadybit-extension-kong/templates/service.yaml b/charts/steadybit-extension-kong/templates/service.yaml new file mode 100644 index 0000000..646f0f8 --- /dev/null +++ b/charts/steadybit-extension-kong/templates/service.yaml @@ -0,0 +1 @@ +{{- include "extensionlib.service" (list . 8084 (list "ACTION" "DISCOVERY")) -}} diff --git a/charts/steadybit-extension-kong/tests/__snapshot__/deployment_test.yaml.snap b/charts/steadybit-extension-kong/tests/__snapshot__/deployment_test.yaml.snap new file mode 100644 index 0000000..31b47b0 --- /dev/null +++ b/charts/steadybit-extension-kong/tests/__snapshot__/deployment_test.yaml.snap @@ -0,0 +1,175 @@ +manifest should match snapshot with TLS: + 1: | + apiVersion: apps/v1 + kind: Deployment + metadata: + labels: null + name: RELEASE-NAME-steadybit-extension-kong + namespace: NAMESPACE + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: steadybit-extension-kong + template: + metadata: + labels: + app.kubernetes.io/name: steadybit-extension-kong + spec: + containers: + - env: + - name: STEADYBIT_LOG_LEVEL + value: INFO + - name: STEADYBIT_LOG_FORMAT + value: text + - name: STEADYBIT_EXTENSION_TLS_SERVER_CERT + value: /etc/extension/certificates/server-cert/tls.crt + - name: STEADYBIT_EXTENSION_TLS_SERVER_KEY + value: /etc/extension/certificates/server-cert/tls.key + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_NAME + value: null + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_ORIGIN + value: null + image: steadybit/extension-kong:latest + imagePullPolicy: Always + livenessProbe: + httpGet: + path: /health/liveness + port: 8085 + name: extension + readinessProbe: + httpGet: + path: /health/readiness + port: 8085 + resources: + limits: + cpu: 200m + memory: 128Mi + requests: + cpu: 50m + memory: 64Mi + volumeMounts: + - mountPath: /etc/extension/certificates/server-cert + name: certificate-server-cert + readOnly: true + volumes: + - name: certificate-server-cert + secret: + optional: false + secretName: server-cert +manifest should match snapshot with mutual TLS: + 1: | + apiVersion: apps/v1 + kind: Deployment + metadata: + labels: null + name: RELEASE-NAME-steadybit-extension-kong + namespace: NAMESPACE + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: steadybit-extension-kong + template: + metadata: + labels: + app.kubernetes.io/name: steadybit-extension-kong + spec: + containers: + - env: + - name: STEADYBIT_LOG_LEVEL + value: INFO + - name: STEADYBIT_LOG_FORMAT + value: text + - name: STEADYBIT_EXTENSION_TLS_SERVER_CERT + value: /etc/extension/certificates/server-cert/tls.crt + - name: STEADYBIT_EXTENSION_TLS_SERVER_KEY + value: /etc/extension/certificates/server-cert/tls.key + - name: STEADYBIT_EXTENSION_TLS_CLIENT_CAS + value: /etc/extension/certificates/client-cert-a/tls.crt,/etc/extension/certificates/client-cert-a/tls.crt + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_NAME + value: null + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_ORIGIN + value: null + image: steadybit/extension-kong:latest + imagePullPolicy: Always + livenessProbe: + httpGet: + path: /health/liveness + port: 8085 + name: extension + readinessProbe: + httpGet: + path: /health/readiness + port: 8085 + resources: + limits: + cpu: 200m + memory: 128Mi + requests: + cpu: 50m + memory: 64Mi + volumeMounts: + - mountPath: /etc/extension/certificates/client-cert-a + name: certificate-client-cert-a + readOnly: true + - mountPath: /etc/extension/certificates/server-cert + name: certificate-server-cert + readOnly: true + volumes: + - name: certificate-client-cert-a + secret: + optional: false + secretName: client-cert-a + - name: certificate-server-cert + secret: + optional: false + secretName: server-cert +manifest should match snapshot without TLS: + 1: | + apiVersion: apps/v1 + kind: Deployment + metadata: + labels: null + name: RELEASE-NAME-steadybit-extension-kong + namespace: NAMESPACE + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: steadybit-extension-kong + template: + metadata: + labels: + app.kubernetes.io/name: steadybit-extension-kong + spec: + containers: + - env: + - name: STEADYBIT_LOG_LEVEL + value: INFO + - name: STEADYBIT_LOG_FORMAT + value: text + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_NAME + value: null + - name: STEADYBIT_EXTENSION_KONG_INSTANCE_0_ORIGIN + value: null + image: steadybit/extension-kong:latest + imagePullPolicy: Always + livenessProbe: + httpGet: + path: /health/liveness + port: 8085 + name: extension + readinessProbe: + httpGet: + path: /health/readiness + port: 8085 + resources: + limits: + cpu: 200m + memory: 128Mi + requests: + cpu: 50m + memory: 64Mi + volumeMounts: null + volumes: null diff --git a/charts/steadybit-extension-kong/tests/__snapshot__/service_test.yaml.snap b/charts/steadybit-extension-kong/tests/__snapshot__/service_test.yaml.snap new file mode 100644 index 0000000..7077faf --- /dev/null +++ b/charts/steadybit-extension-kong/tests/__snapshot__/service_test.yaml.snap @@ -0,0 +1,68 @@ +manifest should match snapshot with TLS: + 1: | + apiVersion: v1 + kind: Service + metadata: + annotations: + steadybit.com/extension-auto-discovery: "{\n \"extensions\": [\n {\n \"port\": 8084,\n \"types\": [\"ACTION\",\"DISCOVERY\"],\n \"tls\": {\n \"server\": {\n \"extraCertsFile\": \"/opt/steadybit/agent/etc/extension-mtls/server-cert/tls.crt\"\n }\n \n }\n }\n ]\n}\n" + labels: null + name: RELEASE-NAME-steadybit-extension-kong + namespace: NAMESPACE + spec: + ports: + - port: 8084 + protocol: TCP + targetPort: 8084 + selector: + app.kubernetes.io/name: steadybit-extension-kong +manifest should match snapshot with mutual TLS: + 1: | + apiVersion: v1 + kind: Service + metadata: + annotations: + steadybit.com/extension-auto-discovery: | + { + "extensions": [ + { + "port": 8084, + "types": ["ACTION","DISCOVERY"], + "tls": { + "server": { + "extraCertsFile": "/opt/steadybit/agent/etc/extension-mtls/server-cert/tls.crt" + }, + "client": { + "certChainFile": "/opt/steadybit/agent/etc/extension-mtls/client-cert-a/tls.crt", + "certKeyFile": "/opt/steadybit/agent/etc/extension-mtls/client-cert-a/tls.key" + } + } + } + ] + } + labels: null + name: RELEASE-NAME-steadybit-extension-kong + namespace: NAMESPACE + spec: + ports: + - port: 8084 + protocol: TCP + targetPort: 8084 + selector: + app.kubernetes.io/name: steadybit-extension-kong +manifest should match snapshot without TLS: + 1: | + apiVersion: v1 + kind: Service + metadata: + annotations: + steadybit.com/extension-auto-discovery: "{\n \"extensions\": [\n {\n \"port\": 8084,\n \"types\": [\"ACTION\",\"DISCOVERY\"],\n \"tls\": {\n \n }\n }\n ]\n}\n" + labels: null + name: RELEASE-NAME-steadybit-extension-kong + namespace: NAMESPACE + spec: + ports: + - port: 8084 + protocol: TCP + targetPort: 8084 + selector: + app.kubernetes.io/name: steadybit-extension-kong diff --git a/charts/steadybit-extension-kong/tests/deployment_test.yaml b/charts/steadybit-extension-kong/tests/deployment_test.yaml new file mode 100644 index 0000000..453c68c --- /dev/null +++ b/charts/steadybit-extension-kong/tests/deployment_test.yaml @@ -0,0 +1,27 @@ +templates: + - deployment.yaml +tests: + - it: manifest should match snapshot without TLS + asserts: + - matchSnapshot: { } + - it: manifest should match snapshot with TLS + set: + tls: + server: + certificate: + fromSecret: server-cert + asserts: + - matchSnapshot: { } + - it: manifest should match snapshot with mutual TLS + set: + tls: + server: + certificate: + fromSecret: server-cert + client: + certificates: + fromSecrets: + - client-cert-a + - client-cert-a + asserts: + - matchSnapshot: {} diff --git a/charts/steadybit-extension-kong/tests/service_test.yaml b/charts/steadybit-extension-kong/tests/service_test.yaml new file mode 100644 index 0000000..eef3482 --- /dev/null +++ b/charts/steadybit-extension-kong/tests/service_test.yaml @@ -0,0 +1,27 @@ +templates: + - service.yaml +tests: + - it: manifest should match snapshot without TLS + asserts: + - matchSnapshot: { } + - it: manifest should match snapshot with TLS + set: + tls: + server: + certificate: + fromSecret: server-cert + asserts: + - matchSnapshot: { } + - it: manifest should match snapshot with mutual TLS + set: + tls: + server: + certificate: + fromSecret: server-cert + client: + certificates: + fromSecrets: + - client-cert-a + - client-cert-a + asserts: + - matchSnapshot: {} diff --git a/charts/steadybit-extension-kong/values.yaml b/charts/steadybit-extension-kong/values.yaml new file mode 100644 index 0000000..dbe807f --- /dev/null +++ b/charts/steadybit-extension-kong/values.yaml @@ -0,0 +1,68 @@ +# Default values for steadybit-extension-kong. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +kong: + # kong.name -- An alias/label for the Kong instance. Will be presented in Steadybit's user interface. + name: null + # kong.origin -- Origin under which the Kong admin endpoint is available, e.g., http://kong.example.com:8001, + origin: null + # kong.headerKey -- Optional header key which will be transmitted to the Kong instance. Can be used for authentication purposes + headerKey: null + # kong.headerValue -- Optional header value which will be transmitted to the Kong instance. Can be used for authentication purposes + headerValue: null + +image: + # image.name -- The container image to use for the steadybit Kong extension. + name: steadybit/extension-kong + # image.tag -- tag name of the extension-kong container image to use. + # See https://hub.docker.com/r/steadybit/extension-kong for all tags. + tag: latest + # image.pullPolicy -- Specifies when to pull the image container. + pullPolicy: Always + +tls: + server: + certificate: + # tls.server.certificate.fromSecret -- The name of the secret containing the TLS certificate for the extension. The extension will then create + # an HTTPS server instead of an HTTP server. + fromSecret: null + client: + certificates: + # tls.client.certificates.fromSecrets -- List of secret names containing TLS certificates for the extension to trust. The extension will require + # clients to authenticate using one of these certificates. In essence, this will enable mutual TLS. + fromSecrets: [] + +logging: + # logging.level -- The active log level. Valid values are: TRACE, DEBUG, INFO, WARN, ERROR + level: INFO + # logging.format -- The format of the log entries. One of text, json + format: text + +resources: + requests: + # resources.requests.memory -- The minimal amount of memory needed + memory: "64Mi" + # resources.requests.cpu -- The minimal amount of cpu shares needed + cpu: "50m" + limits: + # resources.limits.memory -- The limit of memory to be used + memory: "128Mi" + # resources.limits.cpu -- The limit of cpu share to be used during its interval + cpu: "200m" + +# extra labels to apply to the Kubernetes resources +extraLabels: {} + +# nodeSelector -- Node labels for pod assignment +nodeSelector: {} + +# tolerations -- Tolerations to influence pod assignment +tolerations: [] + +# topologySpreadConstraints -- Spread constraints to influence pod assignment. +# https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ +topologySpreadConstraints: [] + +# affinity -- Affinities to influence pod assignment. +affinity: {} diff --git a/go.mod b/go.mod index 3820731..d6ddc0e 100644 --- a/go.mod +++ b/go.mod @@ -3,18 +3,19 @@ module github.com/steadybit/extension-kong -go 1.18 +go 1.20 -require github.com/kong/go-kong v0.33.0 +require github.com/kong/go-kong v0.40.0 -require github.com/steadybit/attack-kit/go/attack_kit_api v0.1.0 +require github.com/steadybit/attack-kit/go/attack_kit_api v0.5.0 require ( github.com/mitchellh/mapstructure v1.5.0 - github.com/rs/zerolog v1.27.0 - github.com/steadybit/discovery-kit/go/discovery_kit_api v0.1.0 - github.com/steadybit/extension-kit v1.7.1 - github.com/stretchr/testify v1.8.0 + github.com/rs/zerolog v1.29.1 + github.com/steadybit/action-kit/go/action_kit_sdk v1.0.2 + github.com/steadybit/discovery-kit/go/discovery_kit_api v1.3.0 + github.com/steadybit/extension-kit v1.7.10 + github.com/stretchr/testify v1.8.2 github.com/testcontainers/testcontainers-go v0.13.0 ) @@ -42,12 +43,12 @@ require ( github.com/golang/protobuf v1.5.2 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/imdario/mergo v0.3.12 // indirect + github.com/imdario/mergo v0.3.15 // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect github.com/kong/semver/v4 v4.0.1 // indirect github.com/magiconair/properties v1.8.5 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.18 // indirect github.com/moby/sys/mount v0.2.0 // indirect github.com/moby/sys/mountinfo v0.5.0 // indirect github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect @@ -58,14 +59,15 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sirupsen/logrus v1.8.1 // indirect - github.com/tidwall/gjson v1.14.3 // indirect + github.com/steadybit/action-kit/go/action_kit_api/v2 v2.4.5 // indirect + github.com/tidwall/gjson v1.14.4 // indirect github.com/tidwall/match v1.1.1 // indirect - github.com/tidwall/pretty v1.2.0 // indirect + github.com/tidwall/pretty v1.2.1 // indirect go.opencensus.io v0.23.0 // indirect golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect + golang.org/x/sys v0.7.0 // indirect google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect google.golang.org/grpc v1.47.0 // indirect - google.golang.org/protobuf v1.28.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index cea9767..17c5188 100644 --- a/go.sum +++ b/go.sum @@ -268,7 +268,7 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -520,8 +520,9 @@ github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= +github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= @@ -550,8 +551,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/kong/go-kong v0.33.0 h1:bCcbfFp0W5qtnUVIauSLjz7yYJm8fRPMUtuCB0a7STA= -github.com/kong/go-kong v0.33.0/go.mod h1:9+f3mJCymGTJvGYCeMII3pcKXEXEvyntSpYlHu4flq4= +github.com/kong/go-kong v0.40.0 h1:6rd70L4GbPz90j3ey+wjHd4aC21uFgbqsoASJhbcbdU= +github.com/kong/go-kong v0.40.0/go.mod h1:t3siZEEGBB3FA5EQv9CL5EcaiogPTG0A175VQ6KvEHE= github.com/kong/semver/v4 v4.0.1 h1:DIcNR8W3gfx0KabFBADPalxxsp+q/5COwIFkkhrFQ2Y= github.com/kong/semver/v4 v4.0.1/go.mod h1:LImQ0oT15pJvSns/hs2laLca2zcYoHu5EsSNY0J6/QA= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -580,13 +581,16 @@ github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= @@ -752,9 +756,9 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= +github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= @@ -797,12 +801,16 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/steadybit/attack-kit/go/attack_kit_api v0.1.0 h1:FpY7E+k5xcUYyKSKUCDOYe0BGSTaYDsL+Zsm2jTibBA= -github.com/steadybit/attack-kit/go/attack_kit_api v0.1.0/go.mod h1:mt4cEAhluP5pRjXXDq7dJ78fZfhmgRyIrKa8fX3O3es= -github.com/steadybit/discovery-kit/go/discovery_kit_api v0.1.0 h1:CM7Ghsa+JVFZGBL4fwYLcwg3LvZzANy1gcMoLe+MDwI= -github.com/steadybit/discovery-kit/go/discovery_kit_api v0.1.0/go.mod h1:OnIfjrBhmMQCYxriHmr8mT1wCpvqIZxwBHWnanFhgNA= -github.com/steadybit/extension-kit v1.7.1 h1:znUl8db9tv2g38C6H02CBnxvku0fVBiLXxXhrPXhAHg= -github.com/steadybit/extension-kit v1.7.1/go.mod h1:zC5Tw+wrJTx4xvOlsIY+MfMoRYoglj83vR15Xr3aP5c= +github.com/steadybit/action-kit/go/action_kit_api/v2 v2.4.5 h1:9J5u9bWoZ7Afn2OKE/K1vLvkw5pGrdyaHGf6d+8GgrE= +github.com/steadybit/action-kit/go/action_kit_api/v2 v2.4.5/go.mod h1:4yGr/DzsHpw6elju1XHCeUsY/qoqNTcLY3ytgnNcMt8= +github.com/steadybit/action-kit/go/action_kit_sdk v1.0.2 h1:pYpKm1BaRY296OH56oMXTfUQjEJLwE2e6ESxRoBuyME= +github.com/steadybit/action-kit/go/action_kit_sdk v1.0.2/go.mod h1:mTMPHv8eCORj2cVHL3BMDEcUlU86A0mRyaCNsVi25AQ= +github.com/steadybit/attack-kit/go/attack_kit_api v0.5.0 h1:pFBriZjr55uVi0Tzdwh6GMS2N9QqPDDWJJWxGzI3vZA= +github.com/steadybit/attack-kit/go/attack_kit_api v0.5.0/go.mod h1:Om4Mnj5sTU1FgmDhJXBu7Ezfkz/UBz6zEGm6nqkIpAY= +github.com/steadybit/discovery-kit/go/discovery_kit_api v1.3.0 h1:HwvovoYbAYpJ5PnMeiJUgrjwVkV5EpveAjeHH9pPDMQ= +github.com/steadybit/discovery-kit/go/discovery_kit_api v1.3.0/go.mod h1:OnIfjrBhmMQCYxriHmr8mT1wCpvqIZxwBHWnanFhgNA= +github.com/steadybit/extension-kit v1.7.10 h1:9u/709e9dYkiZgEsTyEwfFhZUMGq/OsP1Zxdm8BNprQ= +github.com/steadybit/extension-kit v1.7.10/go.mod h1:zC5Tw+wrJTx4xvOlsIY+MfMoRYoglj83vR15Xr3aP5c= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -810,6 +818,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -818,8 +827,9 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= @@ -827,12 +837,13 @@ github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/testcontainers/testcontainers-go v0.13.0 h1:OUujSlEGsXVo/ykPVZk3KanBNGN0TYb/7oKIPVn15JA= github.com/testcontainers/testcontainers-go v0.13.0/go.mod h1:z1abufU633Eb/FmSBTzV6ntZAC1eZBYPtaFsn4nPuDk= -github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw= -github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= +github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -1131,8 +1142,10 @@ golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1326,8 +1339,9 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1432,3 +1446,4 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= diff --git a/kong/request_termination_attack.go b/kong/request_termination_attack.go index 036637c..dffae0e 100644 --- a/kong/request_termination_attack.go +++ b/kong/request_termination_attack.go @@ -131,10 +131,10 @@ func isDefinedString(v interface{}) bool { return v != nil && len(v.(string)) > 0 } -func decodeAttackState(attackState attack_kit_api.AttackState) (error, RequestTerminationState) { +func decodeAttackState(attackState attack_kit_api.AttackState) (RequestTerminationState, error) { var result RequestTerminationState err := mapstructure.Decode(attackState, &result) - return err, result + return result, err } func startRequestTermination(w http.ResponseWriter, _ *http.Request, body []byte) { @@ -203,7 +203,7 @@ func StopRequestTermination(body []byte) *attack_kit_api.AttackKitError { return attack_kit_api.Ptr(utils.ToError("Failed to parse request body", err)) } - err, state := decodeAttackState(stopAttackRequest.State) + state, err := decodeAttackState(stopAttackRequest.State) if err != nil { return attack_kit_api.Ptr(utils.ToError("Failed to decode attack state", err)) } diff --git a/main.go b/main.go index bf71271..2a6b6d4 100644 --- a/main.go +++ b/main.go @@ -5,9 +5,11 @@ package main import ( "github.com/rs/zerolog/log" + "github.com/steadybit/action-kit/go/action_kit_sdk" "github.com/steadybit/attack-kit/go/attack_kit_api" "github.com/steadybit/discovery-kit/go/discovery_kit_api" "github.com/steadybit/extension-kit/extbuild" + "github.com/steadybit/extension-kit/exthealth" "github.com/steadybit/extension-kit/exthttp" "github.com/steadybit/extension-kit/extlogging" "github.com/steadybit/extension-kong/config" @@ -19,6 +21,9 @@ func main() { extlogging.InitZeroLog() extbuild.PrintBuildInformation() + exthealth.SetReady(false) + exthealth.StartProbes(8085) + utils.RegisterHttpHandler("/", utils.GetterAsHandler(getExtensionDescription)) kong.RegisterAttributeDescriptionHandlers() @@ -35,6 +40,8 @@ func main() { log.Log().Msgf(" %s: %s", instance.Name, instance.BaseUrl) } } + action_kit_sdk.InstallSignalHandler() + exthealth.SetReady(true) exthttp.Listen(exthttp.ListenOpts{ Port: 8084, }) @@ -51,38 +58,38 @@ func getExtensionDescription() ExtensionListResponse { return ExtensionListResponse{ Attacks: []attack_kit_api.DescribingEndpointReference{ { - "GET", - kong.ServiceAttackEndpoint, + Method: "GET", + Path: kong.ServiceAttackEndpoint, }, { - "GET", - kong.RouteAttackEndpoint, + Method: "GET", + Path: kong.RouteAttackEndpoint, }, }, Discoveries: []discovery_kit_api.DescribingEndpointReference{ { - "GET", - kong.ServiceDiscoveryEndpoint, + Method: "GET", + Path: kong.ServiceDiscoveryEndpoint, }, { - "GET", - kong.RouteDiscoveryEndpoint, + Method: "GET", + Path: kong.RouteDiscoveryEndpoint, }, }, TargetTypes: []discovery_kit_api.DescribingEndpointReference{ { - "GET", - kong.ServiceDiscoveryEndpoint + "/target-description", + Method: "GET", + Path: kong.ServiceDiscoveryEndpoint + "/target-description", }, { - "GET", - kong.RouteDiscoveryEndpoint + "/target-description", + Method: "GET", + Path: kong.RouteDiscoveryEndpoint + "/target-description", }, }, TargetAttributes: []discovery_kit_api.DescribingEndpointReference{ { - "GET", - "/kong/attribute-descriptions", + Method: "GET", + Path: "/kong/attribute-descriptions", }, }, } diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..f06ccf5 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,9 @@ +sonar.projectKey=steadybit_extension-kong +sonar.organization=steadybit + +sonar.sources=. +sonar.exclusions=**/*_test.go +sonar.tests=. +sonar.test.inclusions=**/*_test.go + +sonar.go.coverage.reportPaths=coverage.out diff --git a/utils/utils.go b/utils/utils.go index 6e2a691..8fb5528 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -9,7 +9,7 @@ import ( "github.com/rs/zerolog/log" "github.com/steadybit/attack-kit/go/attack_kit_api" "github.com/steadybit/discovery-kit/go/discovery_kit_api" - "io/ioutil" + "io" "net/http" "runtime/debug" ) @@ -54,7 +54,7 @@ func PanicRecovery(next func(w http.ResponseWriter, r *http.Request)) http.Handl func LogRequest(next func(w http.ResponseWriter, r *http.Request, body []byte)) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - body, bodyReadErr := ioutil.ReadAll(r.Body) + body, bodyReadErr := io.ReadAll(r.Body) if bodyReadErr != nil { http.Error(w, bodyReadErr.Error(), http.StatusBadRequest) return