Full Code of kiwigrid/helm-charts for AI

master 01c942ae9f9d cached
333 files
898.4 KB
221.8k tokens
1 requests
Download .txt
Showing preview only (988K chars total). Download the full file or copy to clipboard to get everything.
Repository: kiwigrid/helm-charts
Branch: master
Commit: 01c942ae9f9d
Files: 333
Total size: 898.4 KB

Directory structure:
gitextract_8u9zkvau/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── check-for-chart-changes.sh
│   ├── config.yml
│   ├── ct.yaml
│   ├── deploy-chart.sh
│   ├── kind-config.yaml
│   ├── kubeval.sh
│   ├── lint-scripts.sh
│   ├── stale.yml
│   └── workflows/
│       ├── ci.yaml
│       └── deploy.yaml
├── .gitignore
├── LICENSE
├── README.md
└── charts/
    ├── any-resource/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   └── any-resources.yaml
    │   └── values.yaml
    ├── ditto-digital-twins/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── nginx-config/
    │   │   ├── index.html
    │   │   ├── nginx-cors.conf
    │   │   └── nginx.htpasswd
    │   ├── openapi/
    │   │   ├── ditto-api-1.yml
    │   │   └── ditto-api-2.yml
    │   ├── requirements.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── concierge-deployment.yaml
    │   │   ├── concierge-networkpolicy.yaml
    │   │   ├── concierge-pdb.yaml
    │   │   ├── connectivity-deployment.yaml
    │   │   ├── connectivity-networkpolicy.yaml
    │   │   ├── connectivity-pdb.yaml
    │   │   ├── gateway-deployment.yaml
    │   │   ├── gateway-networkpolicy.yaml
    │   │   ├── gateway-pdb.yaml
    │   │   ├── gateway-secret.yaml
    │   │   ├── gateway-service.yaml
    │   │   ├── mongodb-secret.yaml
    │   │   ├── nginx-config.yaml
    │   │   ├── nginx-configmap.yaml
    │   │   ├── nginx-deployment.yaml
    │   │   ├── nginx-ingress.yaml
    │   │   ├── nginx-service.yaml
    │   │   ├── policies-deployment.yaml
    │   │   ├── policies-networkpolicy.yaml
    │   │   ├── policies-pdb.yaml
    │   │   ├── role.yaml
    │   │   ├── rolebinding.yaml
    │   │   ├── serviceaccount.yaml
    │   │   ├── swaggerui-config.yaml
    │   │   ├── swaggerui-deployment.yaml
    │   │   ├── swaggerui-networkpolicy.yaml
    │   │   ├── swaggerui-pdb.yaml
    │   │   ├── swaggerui-service.yaml
    │   │   ├── things-deployment.yaml
    │   │   ├── things-networkpolicy.yaml
    │   │   ├── things-pdb.yaml
    │   │   ├── thingssearch-deployment.yaml
    │   │   ├── thingssearch-networkpolicy.yaml
    │   │   └── thingssearch-pdb.yaml
    │   └── values.yaml
    ├── enmasse/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── ci/
    │   │   └── test-values.yaml
    │   ├── requirements.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── api-server-cert-secret.yaml
    │   │   ├── api-service-v1alpha1-enmasse-io.yaml
    │   │   ├── api-service-v1alpha1-user-enmasse-io.yaml
    │   │   ├── api-service-v1beta1-enmasse-io.yaml
    │   │   ├── api-service-v1beta1-user-enmasse-io.yaml
    │   │   ├── cluster-role-api-server.yaml
    │   │   ├── cluster-role-binding-api-server.yaml
    │   │   ├── cluster-role-binding-enmasse-operator.yaml
    │   │   ├── cluster-role-binding-standard-authservice.yaml
    │   │   ├── cluster-role-enmasse-operator.yaml
    │   │   ├── cluster-role-standard-authservice.yaml
    │   │   ├── deployment-address-space-controller.yaml
    │   │   ├── deployment-api-server.yaml
    │   │   ├── deployment-enmasse-operator.yaml
    │   │   ├── role-address-space-admin.yaml
    │   │   ├── role-address-space-controller.yaml
    │   │   ├── role-api-server.yaml
    │   │   ├── role-binding-address-space-admin.yaml
    │   │   ├── role-binding-address-space-controller.yaml
    │   │   ├── role-binding-api-server.yaml
    │   │   ├── role-binding-enmasse-operator.yaml
    │   │   ├── role-enmasse-operator.yaml
    │   │   ├── service-account-address-space-admin.yaml
    │   │   ├── service-account-address-space-controller.yaml
    │   │   ├── service-account-api-server.yaml
    │   │   ├── service-account-enmasse-operator.yaml
    │   │   ├── service-account-standard-authservice.yaml
    │   │   ├── service-address-space-controller.yaml
    │   │   └── service-api-server.yaml
    │   └── values.yaml
    ├── enmasse-crd/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── addressplans.crd.yaml
    │   │   ├── addressspaceplans.crd.yaml
    │   │   ├── authenticationservices.crd.yaml
    │   │   ├── brokeredinfraconfigs.crd.yaml
    │   │   ├── consoleservices.crd.yaml
    │   │   ├── iotconfigs.crd.yaml
    │   │   ├── iotprojects.crd.yaml
    │   │   └── standardinfraconfigs.crd.yaml
    │   └── values.yaml
    ├── error-pages/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── deployment.yaml
    │   │   ├── ingress.yaml
    │   │   └── service.yaml
    │   └── values.yaml
    ├── fluentd-elasticsearch/
    │   ├── Chart.yaml
    │   ├── OWNERS
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── clusterrole.yaml
    │   │   ├── clusterrolebinding.yaml
    │   │   ├── configmaps.yaml
    │   │   ├── daemonset.yaml
    │   │   ├── metrics-service.yaml
    │   │   ├── pod-security-policy.yaml
    │   │   ├── prometheusrule.yaml
    │   │   ├── role.yaml
    │   │   ├── rolebinding.yaml
    │   │   ├── service-account.yaml
    │   │   ├── service.yaml
    │   │   └── servicemonitor.yaml
    │   └── values.yaml
    ├── gcp-serviceaccount-controller/
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── gcpnamespacerestriction_crd.yaml
    │   │   ├── gcpserviceaccount_crd.yaml
    │   │   ├── rbac_role.yaml
    │   │   ├── rbac_role_binding.yaml
    │   │   ├── secret.yaml
    │   │   ├── service.yaml
    │   │   └── stateful_set.yaml
    │   └── values.yaml
    ├── grafana-dashboards/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── dashboards/
    │   │   └── grafana-dummy-dashboard.json
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   └── configmap.yaml
    │   └── values.yaml
    ├── graphite/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── OWNERS
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap-statsd.yaml
    │   │   ├── configmap.yaml
    │   │   ├── ingress.yaml
    │   │   ├── pvc.yaml
    │   │   ├── role.yaml
    │   │   ├── rolebinding.yaml
    │   │   ├── service.yaml
    │   │   ├── serviceaccount.yaml
    │   │   └── statefulset.yaml
    │   └── values.yaml
    ├── hawkbit-update-server/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── requirements.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap.yaml
    │   │   ├── deployment.yaml
    │   │   ├── ingress.yaml
    │   │   ├── poddisruptionbudget.yaml
    │   │   ├── secrets.yaml
    │   │   ├── service.yaml
    │   │   └── tests/
    │   │       └── test-connection.yaml
    │   └── values.yaml
    ├── influxdb-backup/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── ci/
    │   │   └── test-values.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap.yaml
    │   │   ├── cronjob.yaml
    │   │   ├── pvc.yaml
    │   │   └── secrets.yaml
    │   └── values.yaml
    ├── ingress-annotator/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap.yaml
    │   │   ├── deployment.yaml
    │   │   ├── rbac_role.yaml
    │   │   ├── rbac_role_binding.yaml
    │   │   └── serviceaccount.yaml
    │   └── values.yaml
    ├── keycloak-controller/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap.yaml
    │   │   ├── deployment.yaml
    │   │   └── rbac/
    │   │       ├── role.yaml
    │   │       ├── role_binding.yaml
    │   │       └── serviceaccount.yaml
    │   └── values.yaml
    ├── kubernetes-policy-controller/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── clusterrolebinding.yaml
    │   │   ├── deployment.yaml
    │   │   ├── matches-configmap.yaml
    │   │   ├── policymatches-configmap.yaml
    │   │   ├── role.yaml
    │   │   ├── rolebinding.yaml
    │   │   ├── service.yaml
    │   │   └── webhookconfiguration.yaml
    │   └── values.yaml
    ├── prometheus-pingdom-exporter/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── deployment.yaml
    │   │   ├── secret.yaml
    │   │   └── service.yaml
    │   └── values.yaml
    ├── prometheus-thanos/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── ci/
    │   │   └── test-values.yaml
    │   ├── requirements.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── bucket-web/
    │   │   │   ├── deployment.yaml
    │   │   │   ├── service.yaml
    │   │   │   └── serviceaccount.yaml
    │   │   ├── compactor/
    │   │   │   ├── service.yaml
    │   │   │   ├── serviceaccount.yaml
    │   │   │   └── statefulset.yaml
    │   │   ├── querier/
    │   │   │   ├── deployment-hpa.yaml
    │   │   │   ├── deployment.yaml
    │   │   │   ├── service.yaml
    │   │   │   └── serviceaccount.yaml
    │   │   ├── query-frontend/
    │   │   │   ├── deployment-hpa.yaml
    │   │   │   ├── deployment.yaml
    │   │   │   ├── service.yaml
    │   │   │   └── serviceaccount.yaml
    │   │   ├── receiver/
    │   │   │   ├── hashring-configmap.yaml
    │   │   │   ├── service.yaml
    │   │   │   ├── serviceaccount.yaml
    │   │   │   └── statefulset.yaml
    │   │   ├── ruler/
    │   │   │   ├── clusterrole.yaml
    │   │   │   ├── clusterrolebinding.yaml
    │   │   │   ├── configmap.yaml
    │   │   │   ├── service.yaml
    │   │   │   ├── serviceaccount.yaml
    │   │   │   └── statefulset.yaml
    │   │   └── store-gateway/
    │   │       ├── service.yaml
    │   │       ├── serviceaccount.yaml
    │   │       ├── statefulset-hpa.yaml
    │   │       └── statefulset.yaml
    │   └── values.yaml
    ├── pull-secret-distributor/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── cluster-role.yaml
    │   │   ├── cluster-rolebinding.yaml
    │   │   ├── deployment.yaml
    │   │   └── serviceaccount.yaml
    │   └── values.yaml
    ├── secret-replicator/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── cluster-role.yaml
    │   │   ├── cluster-rolebinding.yaml
    │   │   ├── deployment.yaml
    │   │   └── serviceaccount.yaml
    │   └── values.yaml
    ├── spring-cloud-config-server/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── deployment.yaml
    │   │   ├── ingress.yaml
    │   │   ├── secret.yaml
    │   │   └── service.yaml
    │   └── values.yaml
    ├── stackdriver-exporter/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── deployment.yaml
    │   │   ├── gcpserviceaccount.yaml
    │   │   └── secret.yaml
    │   └── values.yaml
    └── zipkin-stackdriver-proxy/
        ├── .helmignore
        ├── Chart.yaml
        ├── README.md
        ├── templates/
        │   ├── NOTES.txt
        │   ├── _helpers.tpl
        │   ├── deployment.yaml
        │   └── service.yaml
        └── values.yaml

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!-- Thanks for filing an issue!
Before hitting the button, please answer these questions.
It's helpful to search the existing GitHub issues first.
It's likely that another user has already reported the issue you're facing,
or it's a known issue that we're already aware of-->

**Is this a request for help?**:

---

**Is this a BUG REPORT or FEATURE REQUEST?** (choose one):

<!--
If this is a BUG REPORT, please:
  - Fill in as much of the template below as you can.  If you leave out
    information, we can't help you as well.

If this is a FEATURE REQUEST, please:
  - Describe *in detail* the feature/behavior/change you'd like to see.

In both cases, be ready for followup questions, and please respond in a timely
manner.  If we can't reproduce a bug or think a feature already exists, we
might close your issue.  If we're wrong, PLEASE feel free to reopen it and
explain why.
-->

**Version of Helm and Kubernetes**:


**Which chart in which version**:


**What happened**:


**What you expected to happen**:


**How to reproduce it** (as minimally and precisely as possible):


**Anything else we need to know**:


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Thank you for contributing to kiwigrid/charts. Before you submit this PR we'd like to
make sure you are aware of our technical requirements and best practices:

* https://github.com/helm/charts/blob/master/CONTRIBUTING.md#technical-requirements
* https://github.com/helm/helm/tree/master/docs/chart_best_practices

For a quick overview across what we will look at reviewing your PR, please read
our review guidelines:

* https://github.com/helm/charts/blob/master/REVIEW_GUIDELINES.md

Following our best practices right from the start will accelerate the review process and
help get your PR merged quicker.

When updates to your PR are requested, please add new commits and do not squash the
history. This will make it easier to identify new changes. The PR will be squashed
anyways when it is merged. Thanks.

For fast feedback, please @-mention maintainers that are listed in the Chart.yaml file.

Please make sure you test your changes before you push them. Once pushed, a Github Action
will run across your changes and do some initial checks and linting. These checks run
very quickly. Please check the results. We would like these checks to pass before we
even continue reviewing your changes.
-->

#### What this PR does / why we need it:


#### Which issue this PR fixes
*(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*
  - fixes #


#### Special notes for your reviewer:


#### Checklist
[Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.]
- [ ] [DCO](https://developercertificate.org) signed
- [ ] Chart Version bumped (if the pr is an update to an existing chart)
- [ ] Variables are documented in the README.md
- [ ] Title of the PR starts with chart name (e.g. `[fluentd-elasticsearch]`)


================================================
FILE: .github/check-for-chart-changes.sh
================================================
#!/bin/bash
#
# check for chart changes to speedup ci
#

set -x
set -o errexit
set -o pipefail

echo "Check for chart changes to speedup ci..."

CHART_CHANGES="$(git diff --find-renames --name-only "$(git rev-parse --abbrev-ref HEAD)" remotes/origin/master -- charts)"

if [ -z "${CHART_CHANGES}" ]; then
  echo -e "\n\n Error! No chart changes detected! Exiting... \n"
  exit 1
else
  echo -e "\nChanges found in:"
  echo "${CHART_CHANGES}"
  echo -e "\nContinue with next job... \n"
fi


================================================
FILE: .github/config.yml
================================================
# Configuration for request-info - https://github.com/behaviorbot/request-info

# *OPTIONAL* Comment to reply with
# Can be either a string :
# requestInfoReplyComment: >
#   We would appreciate it if you could provide us with more info about this issue/pr!

# Or an array:
requestInfoReplyComment:
 - Ah no! young blade! That was a trifle short!
 - Tell me more !
 - I am sure you can be more effusive ;-)

# *OPTIONAL* default titles to check against for lack of descriptiveness
# MUST BE ALL LOWERCASE
requestInfoDefaultTitles:
  - Update README.md

# *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given
requestInfoLabelToAdd: needs-more-info

# *OPTIONAL* Require Issues to contain more information than what is provided in the issue templates
# Will fail if the issue's body is equal to a provided template
checkIssueTemplate: true

# *OPTIONAL* Require Pull Requests to contain more information than what is provided in the PR template
# Will fail if the pull request's body is equal to the provided template
checkPullRequestTemplate: true

# # *OPTIONAL* Only warn about insufficient information on these events type
# # Keys must be lowercase. Valid values are 'issue' and 'pullRequest'
# requestInfoOn:
#   pullRequest: true
#   issue: true

# # *OPTIONAL* Add a list of people whose Issues/PRs will not be commented on
# # keys must be GitHub usernames
# requestInfoUserstoExclude:
#   - monotek
#   - axdotl


================================================
FILE: .github/ct.yaml
================================================
helm-extra-args: --timeout 1200s
check-version-increment: true
debug: true
chart-repos:
  - kiwigrid=https://kiwigrid.github.io/
  - minio=https://helm.min.io


================================================
FILE: .github/deploy-chart.sh
================================================
#!/bin/bash
#
# deploy kiwigrid charts to kiwigrid.github.io
#

set -x
set -o errexit
set -o pipefail

CHART_DIR="charts"
CHART_REPO="git@github.com:kiwigrid/kiwigrid.github.io.git"
REPO_DIR="kiwigrid.github.io"
REPO_ROOT="$(git rev-parse --show-toplevel)"
TMP_DIR="tmp"
# needed for github actions as home dir would be /github/home/ otherwise
HOME="/home/gkh"

# ssh config
mkdir -p /home/gkh/.ssh
echo "${SSH_PRIVATE_KEY}" > /home/gkh/.ssh/id_rsa
chmod 600 /home/gkh/.ssh/id_rsa
ssh-keyscan github.com >> /home/gkh/.ssh/known_hosts

# get kiwigrid.github.io
test -d "${REPO_ROOT}"/"${REPO_DIR}" && rm -rf "${REPO_ROOT:=?}"/"${REPO_DIR:=?}"
git clone "${CHART_REPO}" "${REPO_ROOT}"/"${REPO_DIR}"

# get not builded charts
while read -r FILE; do
  echo "check file ${FILE}"
  if [ ! -f "${REPO_ROOT}/${REPO_DIR}/$(yq r - name < "${FILE}")-$(yq r - version < "${FILE}").tgz" ]; then
    echo "append chart ${FILE}"
    CHARTS="${CHARTS} $(yq r - name < "${FILE}")"
  fi
done < <(find "${REPO_ROOT}/${CHART_DIR}" -maxdepth 2 -mindepth 2 -type f -name "[Cc]hart.yaml")

if [ -z "${CHARTS}" ]; then
  echo "no chart changes... so no chart build and upload needed... exiting..."
  exit 0
fi

# set original file dates
(
cd "${REPO_ROOT}"/"${REPO_DIR}" || exit
while read -r FILE; do
  ORG_FILE_TIME=$(git log --pretty=format:%cd --date=format:'%y%m%d%H%M' "${FILE}" | tail -n 1)
  echo "set original time ${ORG_FILE_TIME} to ${FILE}"
  touch -c -t "${ORG_FILE_TIME}" "${FILE}"
done < <(git ls-files charts)
)

# preserve dates in index.yaml by moving old charts and index out of the repo before packaging the new version
mkdir -p "${REPO_ROOT}"/"${TMP_DIR}"
mv "${REPO_ROOT}"/"${REPO_DIR}"/index.yaml "${REPO_ROOT}"/"${TMP_DIR}" || true
mv "${REPO_ROOT}"/"${REPO_DIR}"/*.tgz "${REPO_ROOT}"/"${TMP_DIR}"

#add helm repos
if ! helm repo list | grep -q "^stable"; then
  helm repo add stable https://kubernetes-charts.storage.googleapis.com
fi
helm repo add kiwigrid https://kiwigrid.github.io
helm repo add minio https://helm.min.io
helm repo update

# build helm dependencies for all charts
find "${REPO_ROOT}"/"${CHART_DIR}" -mindepth 1 -maxdepth 1 -type d -exec helm dependency build {} \;

# package only changed charts
for CHART in ${CHARTS}; do
  echo "building ${CHART} chart..."
  helm package "${REPO_ROOT}"/"${CHART_DIR}"/"${CHART}" --destination "${REPO_ROOT}"/"${REPO_DIR}"
done

# Create index and merge with previous index which contains the non-changed charts
helm repo index --merge "${REPO_ROOT}"/"${TMP_DIR}"/index.yaml --url https://"${REPO_DIR}" "${REPO_ROOT}"/"${REPO_DIR}"

# move old charts back into git repo
mv "${REPO_ROOT}"/"${TMP_DIR}"/*.tgz "${REPO_ROOT}"/"${REPO_DIR}"

# push changes to github
cd "${REPO_ROOT}"/"${REPO_DIR}"
git config --global user.email "ci@kiwigrid-robot.com"
git config --global user.name "kiwigrid-ci-bot"
git add --all .
git commit -m "Push Kiwigrid charts via Github action build nr. ${GITHUB_RUN_NUMBER}"
git push --set-upstream origin master


================================================
FILE: .github/kind-config.yaml
================================================
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
# the control plane node config
- role: control-plane
# the 2 workers
- role: worker
- role: worker


================================================
FILE: .github/kubeval.sh
================================================
#!/bin/bash
#
# use kubeval to validate helm generated kubernetes manifest
#

set -x
set -o errexit
set -o pipefail

CHART_DIRS="$(git diff --find-renames --name-only "$(git rev-parse --abbrev-ref HEAD)" remotes/origin/master -- charts | grep '[cC]hart.yaml' | sed -e 's#/[Cc]hart.yaml##g')"
HELM_VERSION="v3.1.2"
KUBEVAL_VERSION="0.15.0"
SCHEMA_LOCATION="https://raw.githubusercontent.com/instrumenta/kubernetes-json-schema/master/"

# install helm
curl --silent --show-error --fail --location --output get_helm.sh https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get
chmod 700 get_helm.sh
./get_helm.sh --version "${HELM_VERSION}"

# install kubeval
curl --silent --show-error --fail --location --output /tmp/kubeval.tar.gz https://github.com/instrumenta/kubeval/releases/download/"${KUBEVAL_VERSION}"/kubeval-linux-amd64.tar.gz
sudo tar -C /usr/local/bin -xf /tmp/kubeval.tar.gz kubeval

# validate charts
for CHART_DIR in ${CHART_DIRS};do
  echo "helm dependency build..."
  helm dependency build "${CHART_DIR}"

  echo "kubeval(idating) ${CHART_DIR##charts/} chart..."
  helm template "${CHART_DIR}" | kubeval --strict --ignore-missing-schemas --kubernetes-version "${KUBERNETES_VERSION#v}" --schema-location "${SCHEMA_LOCATION}"
done


================================================
FILE: .github/lint-scripts.sh
================================================
#!/bin/sh
#
# lint bash scripts
#

set -x
set -o errexit

CONFIG_DIR=".github"

TMP_FILE="$(mktemp)"

find "${CONFIG_DIR}" -type f -name "*.sh" > "${TMP_FILE}"

while read -r FILE; do
  echo lint "${FILE}"
  shellcheck -x "${FILE}"
done < "${TMP_FILE}"


================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
  - pinned
  - security
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
  This issue has been automatically marked as stale because it has not had
  recent activity. It will be closed if no further activity occurs. Thank you
  for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false


================================================
FILE: .github/workflows/ci.yaml
================================================
name: ci

on:
  pull_request:

env:
  helm-version: "v3.9.0"
  kubeval-version: "v0.16.1"

jobs:
  lint-bash-scripts:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Lint Bash scripts
        uses: docker://koalaman/shellcheck-alpine:v0.7.0
        with:
          args: .github/lint-scripts.sh

  check-for-chart-changes:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Fetch history
        run: git fetch --prune --unshallow
      - name: Check for chart changes
        run: .github/check-for-chart-changes.sh

  lint-chart:
    runs-on: ubuntu-latest
    needs: check-for-chart-changes
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Fetch history
        run: git fetch --prune --unshallow
      - name: Run chart-testing (lint)
        uses: helm/chart-testing-action@main
        with:
          command: lint
          config: .github/ct.yaml

  kubeval-chart:
    runs-on: ubuntu-20.04
    needs:
      - lint-chart
    strategy:
      matrix:
        k8s:
          - v1.21.10
          - v1.22.7
          - v1.23.5
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Set up Helm
        uses: azure/setup-helm@v3.1
        with:
          version: "${{ env.helm-version }}"
      - name: Run kubeval
        env:
          KUBERNETES_VERSION: ${{ matrix.k8s }}
          KUBEVAL_VERSION: "${{ env.kubeval-version }}"
        run: .github/kubeval.sh

  install-chart:
    name: install-chart
    runs-on: ubuntu-latest
    needs:
      - lint-chart
      - kubeval-chart
    strategy:
      matrix:
        k8s:
          - v1.21.10
          - v1.22.7
          - v1.23.5
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Set up Helm
        uses: azure/setup-helm@v3.1
        with:
          version: "${{ env.helm-version }}"
      - uses: actions/setup-python@v4.1.0
        with:
          python-version: 3.7
      - name: Set up chart-testing
        uses: helm/chart-testing-action@v2.2.1
      - name: Run chart-testing (list-changed)
        id: list-changed
        run: |
          changed=$(ct list-changed --config .github/ct.yaml)
          if [[ -n "$changed" ]]; then
            echo "::set-output name=changed::true"
          fi
      - name: Create kind cluster
        uses: helm/kind-action@v1.3.0
        if: steps.list-changed.outputs.changed == 'true'
        with:
          config: .github/kind-config.yaml
          node_image: kindest/node:${{ matrix.k8s }}
      - name: Run chart-testing (install)
        run: ct install --config .github/ct.yaml


================================================
FILE: .github/workflows/deploy.yaml
================================================
name: deploy

on:
  push:
    branches: [master]

jobs:
  deploy-chart:
    name: deploy-chart
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Fetch history
        run: git fetch --prune --unshallow  
      - name: Lint Bash scripts
        uses: docker://koalaman/shellcheck-alpine:v0.7.0
        with:
          args: /github/workspace/.github/lint-scripts.sh        
      - name: Set user permissions
        run: chmod -R 777 /home/runner/work
      - name: Deploy Helm chart
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY_KIWIGRID_GITHUB_IO }}
        uses: docker://kiwigrid/gcloud-kubectl-helm:2.16.1-272.0.0-184
        with:
          args: /github/workspace/.github/deploy-chart.sh



================================================
FILE: .gitignore
================================================
*.tgz
.ci/test.sh
charts/*/charts
charts/*/requirements.lock
kiwigrid.github.io
tmp


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2018 Kiwigrid GmbH

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# Kiwigrid Helm charts

[![Github Action](https://github.com/kiwigrid/helm-charts/workflows/deploy/badge.svg)](https://github.com/kiwigrid/helm-charts/actions)

## Add repo

```console
$ helm repo add kiwigrid https://kiwigrid.github.io
```

## Support

* Please don't write mails directly to the maintainers.
* Use the Github issue tracker instead.

## Adding charts

* Use a fork of this repo
* Always sign your commits (git commit -s -m 'usefull commitmessage')
* Do NOT touch default (master) branch in any forks
* Always create new branches to work on
* Create a Github pull request and fill out the PR template
* Follow Helm best practices: [https://docs.helm.sh/chart_best_practices](https://docs.helm.sh/chart_best_practices)


================================================
FILE: charts/any-resource/.helmignore
================================================
# 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/


================================================
FILE: charts/any-resource/Chart.yaml
================================================
apiVersion: v1
appVersion: "0.1.0"
description: A Helm chart to bring any kind of resources in a k8s cluster
name: any-resource
version: 0.1.0
home: https://github.com/kiwigrid/helm-charts
maintainers:
- name: axdotl
  email: axel.koehler@kiwigrid.com


================================================
FILE: charts/any-resource/README.md
================================================
# A Helm Chart for any Kind of Resources

The purpose of this chart is to become able to manage every installed resources in a Kubernetes cluster via HELM.

For example:
  * Global secrets (e.g. TLS certs or `imagePullSecrets`)
  * ConfigMaps (e.g. grafana-dashboards, see https://github.com/helm/charts/tree/master/stable/grafana#sidecar-for-dashboards)
  * Custom Resources (e.g. `GcpNamespaceRestriction`, see https://github.com/kiwigrid/gcp-serviceaccount-controller)

## Example

Create a file called `custom-values.yaml` with following content:
```yaml
anyResources:
  myPullSecret: |-
    apiVersion: v1
    data:
      .dockercfg: eyJodHRwczovL215LmRvY2tlci5yZWdpc3RyeSI6eyJ1c2VybmFtZSI6ImRvY2tlciIsInBhc3N3b3JkIjoidW5rbm93biIsImF1dGgiOiJFaWsxYWhrdXVzaG9ocGhpdWY5emFocGhlZVRoYXhhPSJ9fQo=
    kind: Secret
    metadata:
      name: my-pull-secret
    type: kubernetes.io/dockercfg
```

Install
```console
helm upgrade --install my-pull-secret --values custom-values.yaml kiwigrid/any-resource
```

## Open Issue

* HELM standard label support


================================================
FILE: charts/any-resource/templates/NOTES.txt
================================================
Any resources deployed.


================================================
FILE: charts/any-resource/templates/_helpers.tpl
================================================
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "any-resource.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 "any-resource.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 "any-resource.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}


================================================
FILE: charts/any-resource/templates/any-resources.yaml
================================================
{{- if .Values.anyResources -}}
{{- range $key, $value := .Values.anyResources -}}
{{ $value }}
---
{{ end -}}
{{ else }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "any-resource.fullname" . }}-dummy
  labels:
    app.kubernetes.io/name: {{ include "any-resource.name" . }}
    helm.sh/chart: {{ include "any-resource.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
data:
  foo: bar
{{- end -}}


================================================
FILE: charts/any-resource/values.yaml
================================================
anyResources: {}
#  exampleResource: |-
#    apiVersion: v1
#    kind: ConfigMap
#    metadata:
#      name: example-resource
#    data:
#      foo: bar


================================================
FILE: charts/ditto-digital-twins/.helmignore
================================================
# 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/


================================================
FILE: charts/ditto-digital-twins/Chart.yaml
================================================
apiVersion: v1
appVersion: "1.0.0-M3"
description: A Helm chart for Eclipse Ditto
name: ditto-digital-twins
version: 0.7.1
home: www.eclipse.org/ditto
sources:
- https://github.com/eclipse/ditto
- https://github.com/kiwigrid/helm-charts/tree/master/charts/ditto-digital-twins
icon: https://www.eclipse.org/ditto/images/ditto.svg
deprecated: true


================================================
FILE: charts/ditto-digital-twins/README.md
================================================
# This chart is deprecated. Ditto is now maintained within the [Eclipse Packages project](https://github.com/eclipse/packages/tree/master/charts/ditto)

## Introduction

[Eclipse Ditto™](https://www.eclipse.org/ditto/) is a technology in the IoT implementing a software pattern called “digital twins”.
A digital twin is a virtual, cloud based, representation of his real world counterpart (real world “Things”, e.g. devices like sensors, smart heating, connected cars, smart grids, EV charging stations, …).

This chart uses `eclipse/ditto-XXX` containers to run Ditto inside Kubernetes.

## Motivation

This chart is based on the [Eclipse Ditto Helm chart](https://github.com/eclipse/ditto/tree/master/deployment/helm).
Unfortunately the referenced chart is not available in a Helm registry.
This is the main reason why we decided to provide our own chart.
Furthermore we want to cover some other points:

* Enhance flexibility
* Enable Prometheus support
* Usage of dedicated ServiceAccount
* PodDisruptionBudget
* Ingress
* OIDC support w/o manual change of nginx config

## Prerequisites

* Has been tested on Kubernetes 1.11+

## Installing the Chart

To install the chart with the release name `ditto-digital-twins`, run the following command:

```bash
helm install kiwigrid/ditto-digital-twins --name ditto-digital-twins
```

## Uninstalling the Chart

To uninstall/delete the `ditto-digital-twins` deployment:

```bash
helm delete ditto-digital-twins
```

The command removes all the Kubernetes components associated with the chart and deletes the release.

> **Tip**: To completely remove the release, run `helm delete --purge ditto-digital-twins`

## Configuration

Please view the `values.yaml` for the list of possible configuration values with its documentation.

Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example:

```bash
helm install --name ditto-digital-twins --set swaggerui.enabled=false kiwigrid/ditto-digital-twins
```

Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart.

## Configuration Examples

### OpenID Connect (OIDC)

To enable OIDC authentiaction adjust following properties:

```yaml
global:
  jwtOnly: true

gateway:
  enableDummyAuth: false
  systemProps:
    - "-Dditto.gateway.authentication.oauth.openid-connect-issuers.myprovider=openid-connect.onelogin.com/oidc"
```

### Securing Devops Resource

To secure /devops and /status resource adjust configuration to (username will be `devops`):

```yaml
gateway:
  enableDummyAuth: false
  devopsSecureStatus: true
  devopsPassword: foo
  statusPassword: bar
``


================================================
FILE: charts/ditto-digital-twins/nginx-config/index.html
================================================
<!doctype html>
<html>
<head>
  <title>Welcome to Eclipse Ditto</title>
  <style>
    body {
      text-align: center;
      padding: 150px;
    }

    h1 {
      font-size: 50px;
    }

    body {
      font: 20px Helvetica, sans-serif;
      color: #333;
    }

    article {
      display: block;
      text-align: left;
      width: 750px;
      margin: 0 auto;
    }

    a {
      color: #dc8100;
      text-decoration: none;
    }

    a:hover {
      color: #333;
      text-decoration: none;
    }
  </style>
</head>
<body>

<article>
  <h1>You have started Eclipse Ditto</h1>
  <div>
    <p>Thank you for trying out Eclipse Ditto!</p>
    <p>In order to get started quickly, you can now have a look at the OpenAPI documentation for
    <ul>
      <li><a href="/apidoc/1">API version 1</a></li>
      <li><a href="/apidoc/2">API version 2</a></li>
    </ul>
    <p>Try out the HTTP APIs by using username "ditto" and password "ditto" when asked for by your browser.</p>
    <p>We'll add more documentation and examples soon.</p>
    <p>&mdash; the Ditto team</p>
  </div>
</article>

</body>
</html>



================================================
FILE: charts/ditto-digital-twins/nginx-config/nginx-cors.conf
================================================
#
# CORS header support
#
# As of Nginx 1.7.5, add_header supports an "always" parameter which
# allows CORS to work if the backend returns 4xx or 5xx status code.
#
# For more information on CORS, please see: http://enable-cors.org/
# From this Gist: https://gist.github.com/Stanback/7145487
# And this: https://gist.github.com/pauloricardomg/7084524
#

set $cors '1';

# OPTIONS indicates a CORS pre-flight request
if ($request_method = 'OPTIONS') {
  set $cors "${cors}o";
}

if ($cors = '1') {
  add_header 'Access-Control-Allow-Origin' '*' always;
  add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
  add_header 'Access-Control-Allow-Credentials' 'true' always;
  add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,Content-Length,DNT,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Origin,User-Agent,X-Requested-With' always;
}

# OPTIONS (pre-flight) request from allowed CORS domain. return response directly
if ($cors = '1o') {
  # Tell client that this pre-flight info is valid for 20 days
  add_header 'Access-Control-Max-Age' 1728000;
  add_header 'Access-Control-Allow-Origin' '*' always;
  add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
  add_header 'Access-Control-Allow-Credentials' 'true' always;
  add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,Content-Length,DNT,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Origin,User-Agent,X-Requested-With' always;
  add_header 'Content-Type' 'text/plain charset=UTF-8';
  add_header 'Content-Length' 0;
  return 200;
}


================================================
FILE: charts/ditto-digital-twins/nginx-config/nginx.htpasswd
================================================
# this file contains sample users and their hashed password
ditto:A6BgmB8IEtPTs


================================================
FILE: charts/ditto-digital-twins/openapi/ditto-api-1.yml
================================================
# Copyright (c) 2017 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0
#
# SPDX-License-Identifier: EPL-2.0
openapi: 3.0.0
info:
  title: Eclipse Ditto HTTP API
  description: JSON-based, REST-like API for Eclipse Ditto
  version: "1"
servers:
  - url: https://ditto.eclipse.org/api/1
    description: "online Ditto Sandbox"
  - url: /api/1
    description: "local Ditto"
tags:
  - name: Things
    description: Manage every Thing
  - name: Features
    description: Structure the Features of your Things
  - name: Things-Search
    description: Find every Thing
  - name: Messages
    description: Talk with your Things
security:
#  - Google:
#    - openid
  - basicAuth: []
  - bearerAuth: []
paths:
  /things:
    get:
      summary: List all available Things
      description: |-
        Returns all Things passed in by the required parameter `ids`.

        Optionally you can use field selectors (see parameter `fields`) to only get the specified fields.

        To retrieve all Things the logged in user is allowed to read, please use the `GET /search/things` operation.
      tags:
        - Things
      parameters:
        - name: ids
          in: query
          description: Contains a comma separated list of `thingId`s to retrieve in one single request.
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/thingFieldsQueryParam'
      responses:
        '200':
          description: The successfully completed request contains as its result the first 200 for the user available Things, sorted by their `thingId`.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Thing'
        '400':
          description: The request could not be completed. At least one of the defined query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '414':
          description: The request could not be completed due to an URI length exceeding 8k characters.
    post:
      summary: Create a new Thing
      description: |-
        Creates the Thing defined in the optional JSON body.

        The ID of the created Thing is a UUID generated by the service with the default namespace `org.eclipse.ditto`.
        Any `thingId`
        specified in the request body is therefore ignored. The ACL of the created Thing must include at least one
        entry with `READ`, `WRITE` and `ADMINISTRATE` permissions set to `true`.
        If no ACL is provided, a default ACL with an entry for the authorized subject with all permissions set to
        `true` will be created.
      tags:
        - Things
      responses:
        '201':
          description: The Thing was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
            Location:
              description: The location of the created Thing resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thing'
        '400':
          description: |-
            The request could not be completed. The JSON of the Thing to be created was invalid or the `thingId` was
            wrongly set in the request body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewThing'
            example: {}
        description: |-
          JSON representation of the Thing to be created.


          Use the placeholder `{{ request:subjectId }}` in order to let the backend insert the authenticated subjectId of the HTTP request.
  /things/{thingId}:
    get:
      summary: Retrieve a specific Thing
      description: |-
        Returns the Thing identified by the `thingId` path parameter.
        The response includes all details about the Thing.
        Optionally you can use field selectors (see parameter `fields`) to only get the specified fields.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/thingFieldsQueryParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The request successfully returned the specific Thing.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thing'
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or one of the defined query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update a Thing with a specified ID
      description: |-
        Create or update the Thing specified by the `thingId` path parameter and the optional JSON body. The `thingId` has to:

          * contain a mandatory namespace prefix (java package notation + `:` colon) - periods (`.`) may be used in namespace but not as first or last character
          * conform to RFC-2396 (URI)

        #### Valid examples

          * `org.eclipse.ditto.myproject:myFridge1`
          * `mynamespace:myFridge1`

        #### Invalid examples

          * `42:myFridge1`
          * `.foo:myFridge1`
          * `bar.:myFridge1`

        The ID of a Thing can't be changed after creation. Any `thingId` specified in the request body is therefore ignored.

        ### Creation of a new Thing

        The ACL of the created Thing must include at least one entry with `READ`, `WRITE` and `ADMINISTRATE` permissions set to `true`.
        If no ACL is provided, a default ACL with an entry for the authorized subject with all permissions set to `true` will be created.


        Use the placeholder `{{ request:subjectId }}` in order to let the backend insert the authenticated subjectId of the HTTP request.

        ### Permissions for updating an existing Thing

        For updating an existing Thing the authorized subject has to have the `WRITE` permission.
        If the new Thing to update contains an `acl` entry, the authorized subject additionally has to have the `ADMINISTRATE` permission.
        For authorized subjects which don't have the `ADMINISTRATE` permission, the complete Thing may be updated if the `acl` entry is not set.

        ### Partially updating an existing Thing

        When updating an existing Thing already containing `attributes`, `acl` or `features` the already existing fields
        must not explicitly be provided again. For this "PUT Thing" request (and only for this top-level update on the
        Thing) the top-level field to update is merged with the existing top-level fields of the Thing.


        For example: A Thing already exists with this content:

        ```

        {
          "thingId": "namespace:thing-name",
          "acl": {...},
          "attributes": {
            "foo": 1
          },
          "features": {...}
        }

        ```

        The Thing's `attributes` may be modified without having to pass the `acl` or the `features` in again. The content
        of the request's body would be sufficient for updating the `attributes`:

        ```

        {
          "attributes": {
            "foo": 2,
            "bar": false
          }
        }

        ```

        The `acl` and `features` of the Thing will not be overwritten, the Thing will be merged as one would expect it:

        ```

        {
          "thingId": "namespace:thing-name",
          "acl": {...},
          "attributes": {
            "foo": 2,
            "bar": false
          },
          "features": {...}
        }

        ```
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Thing was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
            Location:
              description: The location of the created Thing resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thing'
        '204':
          description: The Thing was successfully modified.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON of the Thing to be created/modified was either invalid or did contain a `thingId` which did not match the ID in the URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For modifying an existing Thing `WRITE` permission is required.

            If the `acl` of the Thing should be updated as well, the permission `ADMINISTRATE` is additionally required.
            The complete Thing without `acl` can however be updated with `WRITE` permission if the body does not contain an `acl` entry.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewThing'
            example: {}
        description: |-
          JSON representation of the Thing to be modified.


          Use the placeholder `{{ request:subjectId }}` in order to let the backend insert the authenticated subjectId of the HTTP request.
    delete:
      summary: Delete a specific Thing
      description: |-
        Deletes the Thing identified by the `thingId` path parameter.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Thing was successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For deleting an existing Thing `WRITE` and `ADMINISTRATE` permissions are required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
  /things/{thingId}/acl:
    get:
      summary: Retrieve the complete ACL of a Thing
      description: |-
        Returns the Access Control List (ACL) of the Thing identified by the `thingId` path parameter.
        The response contains the ACL as JSON object containing a key for each subject having ACL permissions.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The request successfully returned completed and returned is the Access Control List.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Acl'
              example:
                {
                  "authorizationSubject1": {
                    "READ": true,
                    "WRITE": true,
                    "ADMINISTRATE": true
                  },
                  "authorizationSubjectN": {
                    "READ": true,
                    "WRITE": true,
                    "ADMINISTRATE": true
                  }
                }
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '404':
          description: The request could not be completed. The Thing with the given ID was not found in the context of the authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Modify the complete ACL of a Thing
      description: |-
        Modify the complete Access Control List (ACL) of the Thing identified by the `thingId` path parameter.

        The ACL must include at least one entry with `READ`, `WRITE` and `ADMINISTRATE` permissions set to `true`.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Access Control List was successfully updated.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON was invalid, or no valid ACL JSON object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For modifying the ACL of an existing Thing `ADMINISTRATE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found in the context of the authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Acl'
            example:
              {
                "{{ request:subjectId }}":{
                  "READ": true,
                  "WRITE": true,
                  "ADMINISTRATE": true
                }
              }
        description: |-
          JSON representation of the Access Control List (ACL).


          Use the placeholder `{{ request:subjectId }}` in order to let the backend insert the authenticated subjectId of the HTTP request.
        required: true
  /things/{thingId}/acl/{authorizationSubject}:
    get:
      summary: Retrieve one ACL entry of a Thing for a specific subject
      description: |-
        Returns one Access Control List (ACL) entry of the Thing identified by the `thingId` path parameter and for the subject
        identified by the `authorizationSubject` path parameter.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/authorizationSubjectPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The request successfully returned completed and returned is the ACL entry.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AclEntry'
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID or the ACL entry was not found in the context of the authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or modify one ACL entry of a Thing for a specific subject
      description: |-
        Create or modify the Access Control List (ACL) entry of the Thing identified by the `thingId` path parameter and for the subject
        identified by the `authorizationSubject` path parameter.

        An ACL entry must contain values for `READ`, `WRITE` and `ADMINISTRATE` permissions, all other permissions will be ignored.
        The ACL must contain at least one entry with all permissions set to `true`.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/authorizationSubjectPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The ACL entry was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
            Location:
              description: The location of the created ACL entry
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AclEntry'
        '204':
          description: The ACL entry was successfully updated.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON was invalid, or no valid ACL JSON object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For modifying an ACL entry of an existing Thing `ADMINISTRATE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found in the context of the authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/AclEntry'
    delete:
      summary: Delete one ACL entry of a Thing for a specific subject
      description: |-
        Deletes the the Access Control List (ACL) entry of the Thing identified by the `thingId` path parameter and for the subject
        identified by the `authorizationSubject` path parameter.

        The ACL must contain at least one entry with all permissions set to `true`.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/authorizationSubjectPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The ACL entry was successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For deleting an ACL entry of an existing Thing `ADMINISTRATE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found in the context of the authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  '/things/{thingId}/attributes':
    get:
      summary: List all Attributes of a specific Thing
      description: |-
        Returns all Attributes of the Thing identified by the `thingId` path parameter.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/attributesFieldsQueryParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The Attributes of the specific Thing were successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attributes'
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update all Attributes of a specific Thing at once
      description: |-
        Create or update the Attributes of a Thing identified by the `thingId` path parameter at once.
        The Attributes will be replaced by the request body's JSON.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Attributes were successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
            Location:
              description: The location of the created Attribute resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attributes'
        '204':
          description: The Attributes were successfully updated.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON was invalid or was not a JSON object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For modifying the Attributes of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/Attributes'
    delete:
      summary: Delete all Attributes of a specific Thing at once
      description: |-
        Deletes all Attributes of the Thing identified by the `thingId` path parameter at once.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Attributes were successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
             For deleting all Attributes of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID or its Attributes were not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  '/things/{thingId}/attributes/{attributePath}':
    get:
      ummary: Retrieve a specific Attribute of a specific Thing
      description: |-
        Returns a specific Attribute of the Thing identified by the `thingId` path parameter. The Attribute (JSON) can be referenced hierarchically by applying JSON Pointer notation (RFC-6901), e.g.:
        `/things/{thingId}/attributes/address/city` in order to retrieve the `city` field of an `address` object.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/attributePathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The Attribute was successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID or the Attribute at the specified path was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update a specific Attribute of a specific Thing
      description: |-
        Create or update a specific Attribute of the Thing identified by the `thingId` path parameter.
        The Attribute will be created if it doesn't exist or else updated. The Attribute (JSON) can be referenced hierarchically by applying JSON Pointer notation (RFC-6901), e.g.:
        `/things/{thingId}/attributes/address/city` in order to create/update the `city` field of an `address` object.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/attributePathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Attribute was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
            Location:
              description: The location of the created Attribute resource
              schema:
                type: string
        '204':
          description: The Attribute was successfully modified.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For modifying a single Attribute of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/Value'
    delete:
      summary: Delete a specific Attribute of a specific Thing
      description: |-
        Deletes a specific Attribute of the Thing identified by the `thingId` path parameter. The Attribute (JSON) can be referenced hierarchically by applying JSON Pointer notation (RFC-6901), e.g.:
        `/things/{thingId}/attributes/address/city` in order to delete the `city` field of an `address` object.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/attributePathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Attribute was successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For deleting a single Attribute of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID or the Attribute at the specified path was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  /things/{thingId}/features:
    get:
      summary: List all Features of a specific Thing
      description: |-
        Returns all Features of the Thing identified by the `thingId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featuresFieldsQueryParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The list of Features of the specific Thing were successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Features'
              example:
                {
                  "featureId1": {
                    "definition": [ "namespace:definition1:v1.0" ],
                    "properties": { "property1": "value1" }
                  },
                  "featureId2": {
                    "definition": [ "namespace:definition2:v1.0" ],
                    "properties": { "property2": "value2" }
                  }
                }
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found or the Features have not been defined.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or modify all Features of a specific Thing at once
      description: |-
        Create or modify the Features of a Thing identified by the `thingId` path parameter at once. The list of Features will be replaced by the request body's JSON.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Features were successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
            Location:
              description: The location of the created Features resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Features'
              example:
                {}
        '204':
          description: The Features were successfully modified.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON was invalid or was not a JSON object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For modifying all features of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Features'
            example: {}
        description: |-
          JSON object of the Features to be modified at once. It can be also `null` or an empty object `{}` (all features cleared).
        required: true
    delete:
      summary: Delete all Features of a specific Thing
      description: |-
        Deletes all features of the Thing identified by the `thingId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Features were successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For deleting all features of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found or the Features have not been defined.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  '/things/{thingId}/features/{featureId}':
    get:
      summary: Retrieve a specific Feature of a specific Thing
      description: |-
        Returns a specific Feature identified by the `featureId` path parameter of the Thing identified by the `thingId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/featureFieldsQueryParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The Feature was successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Feature'
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID or the Feature with the specified `featureId` was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or modify a specific Feature of a specific Thing
      description: |-
        Create or modify a specific Feature identified by the `featureId` path parameter of the Thing identified by the `thingId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Feature was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
            Location:
              description: The location of the created Feature resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Feature'
        '204':
          description: The Feature was successfully modified.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON of the Feature to be created was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For modifying a single feature of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Feature'
            example: {}
        description: |-
          JSON representation of the Feature to be created/modified. It can also be `null` or an empty object `{}`.
        required: true
    delete:
      summary: Delete a specific Feature of a specific Thing
      description: |-
        Deletes a specific Feature identified by the `featureId` path parameter of the Thing identified by the `thingId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Feature was successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For deleting a single feature of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID or the Feature at the specified path was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  '/things/{thingId}/features/{featureId}/definition':
    get:
      summary: List the Definition of a Feature
      description: |-
        Returns the complete Definition of the Feature identified by the `thingId` and
        `featureId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The Definition was successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeatureDefinition'
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The specified Feature has no
            Definition or the Thing with the specified `thingId` or the Feature
            with `featureId` was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update the Definition of a Feature
      description: |-
        Create or update the complete Definition of a Feature identified by the `thingId`
        and `featureId` path parameter at once. The Definition will be replaced
        by the request body's JSON array.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Definition was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
            Location:
              description: The location of the created Definition resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeatureDefinition'
        '204':
          description: The Definition was successfully updated.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For modifying the Definition of an existing Feature `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The Thing or the Feature with
            the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FeatureDefinition'
            example: {}
        description: |-
          JSON array of the complete Definition to be updated. Consider that
          the value has to be a JSON array or `null`. The content of the JSON array
          are strings in the format `"namespace:name:version"` which is enforced.
        required: true
    delete:
      summary: Delete the Definition of a Feature
      description: |-
        Deletes the complete Definition of the Feature identified by the `thingId` and
        `featureId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Definition was successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For deleting the Definition of an existing Feature `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The specified Feature has no
            Definition or the Thing with the specified `thingId` or the Feature
            with `featureId` was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  '/things/{thingId}/features/{featureId}/properties':
    get:
      summary: List all Properties of a Feature.
      description: |-
        Returns all Properties of the Feature identified by the `thingId` and `featureId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/propertiesFieldsQueryParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The Properties were successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeatureProperties'
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The specified Feature has no Properties or the Thing with the specified `thingId` or the Feature with `featureId` was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update all Properties of a Feature at once.
      description: |-
        Create or update the Properties of a Feature identified by the `thingId` and `featureId` path parameter at once.
        The Properties will be replaced by the request body's JSON.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Properties were successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeatureProperties'
        '204':
          description: The Properties were successfully updated.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For modifying the Properties of an existing Feature `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing or the Feature with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FeatureProperties'
            example: {}
        description: |-
          JSON object of all Properties to be updated at once. Consider that the value has to be a JSON object or `null`. We strongly recommend to use a restricted set of characters for the key (identifier). Currently these identifiers should follow the pattern: [_a-zA-Z][_a-zA-Z0-9\-]*
        required: true
    delete:
      summary: Delete all Properties of a Feature.
      description: |-
        Deletes all Properties of the Feature identified by the `thingId` and `featureId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Properties were successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For deleting the Properties of an existing Feature `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The specified Feature has no Properties or the Thing with the specified `thingId` or the Feature with `featureId` was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  /things/{thingId}/features/{featureId}/properties/{propertyPath}:
    get:
      summary: Retrieve a specific Property of a Feature.
      description: |-
        Returns the Property of the Feature identified by the `thingId` and `featureId` path parameter. The Property (JSON) can be referenced hierarchically by applying JSON Pointer notation (RFC-6901), e.g.:
        `/things/{thingId}/features/{featureId}/properties/location/latitude` in order to retrieve the `latitude` field of an `location` Property.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/propertyPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The Property was successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The specified Property or the Thing with the specified `thingId` or the Feature with `featureId` was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update a specific Property of a Feature.
      description: |-
        Create or update a specific Property of a Feature identified by the `thingId` and `featureId` path parameter.
        The Property will be created if it doesn't exist or else updated. The Property (JSON) can be referenced hierarchically by applying JSON Pointer notation (RFC-6901), e.g.:
        `/things/{thingId}/features/{featureId}/properties/location/latitude` in order to create/update the `latitude` field of an `location` object.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/propertyPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Property was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '204':
          description: The Property was successfully updated.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions.
            For creating/updating a Property of an existing Feature `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing or the Feature with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/Value'
    delete:
      summary: Delete a specific Property of a Feature.
      description: |-
        Deletes a specific Property of the Feature identified by the `thingId` and `featureId` path parameter.  The Property (JSON) can be referenced hierarchically by applying JSON Pointer notation (RFC-6901), e.g.:
        `/things/{thingId}/features/{featureId}/properties/location/latitude` in order to delete the `latitude` field of an `location` Property.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/propertyPathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Property was successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The specified Property or the Thing with the specified `thingId` or the Feature with `featureId` was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  /things/{thingId}/inbox/claim:
    post:
      summary: Initiates claiming a specific Thing in order to gain access.
      description: |-
        Send a Claim message to the Thing identified by the `thingId` path
        parameter in order to gain access to it. The Claim message is forwarded
        together with the request body and `Content-Type` header to client(s)
        which registered for Claim messages of the specific Thing.


        The decision whether to grant access (by setting permissions) is
        completely up to the client(s) which handle the Claim message.


        The HTTP request blocks until a response to the issued Claim message is
        available or until the `timeout` is expired. If many clients respond to
        the issued message, the first response will complete the HTTP request.
        No special permissions are required to issue a Claim message.
      tags:
        - Messages
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/messageClaimTimeoutParam'
      responses:
        '200':
          description: The Claim message was processed successfully and the response body contains the custom response. The response body may contain arbitrary data chosen by the recipient. The response code defaults to `200` but may be chosen by the recipient too.
        '204':
          description: The Claim message was processed successfully and no custom response body was set. The response code defaults to `204` but may be chosen by the recipient.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined path parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '413':
          $ref: '#/components/responses/messageTooLarge'
        '429':
          description: The user has sent too many requests in a given amount of time ("rate limiting").
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
      requestBody:
        $ref: '#/components/requestBodies/Payload'
  /things/{thingId}/inbox/messages/{messageSubject}:
    post:
      summary: Send a message TO a specific Thing.
      description: |-
        Send a message with the subject `messageSubject` `TO` the Thing
        identified by the `thingId` path parameter. The request body contains
        the message payload and the `Content-Type` header defines its type. The
        API does not provide any kind of acknowledgement that the message was
        received by the Thing. In order to send a message, the user needs `WRITE`
        permission at the Thing level.

        The HTTP request blocks until a response to the message is available
        or until the `timeout` is expired. If many clients respond to
        the issued message, the first response will complete the HTTP request.

        In order to handle the message in a fire and forget manner, add
        a query-parameter `timeout=0` to the request.
      tags:
        - Messages
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/messageSubjectPathParam'
        - $ref: '#/components/parameters/messageTimeoutParam'
      responses:
        '202':
          description: The message was sent but not necessarly received by the Thing (fire and forget).
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined path parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller does not have `WRITE` permission at the Thing level.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '413':
          $ref: '#/components/responses/messageTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/Payload'
  /things/{thingId}/outbox/messages/{messageSubject}:
    post:
      summary: Send a message FROM a specific Thing.
      description: |-
        Send a message with the subject `messageSubject` `FROM` the Thing
        identified by the `thingId` path parameter. The request body contains
        the message payload and the `Content-Type` header defines its type.
        In order to send a message, the user needs `WRITE` permission at the
        Thing level.

        The HTTP request blocks until a response to the message is available
        or until the `timeout` is expired. If many clients respond to
        the issued message, the first response will complete the HTTP request.

        In order to handle the message in a fire and forget manner, add
        a query-parameter `timeout=0` to the request.
      tags:
        - Messages
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/messageSubjectPathParam'
        - $ref: '#/components/parameters/messageTimeoutParam'
      responses:
        '202':
          description: The message was sent (fire and forget).
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined path parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller does not have `WRITE` permission at the Thing level.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '413':
          $ref: '#/components/responses/messageTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/Payload'
  /things/{thingId}/features/{featureId}/inbox/messages/{messageSubject}:
    post:
      summary: Send a message TO a specific Feature of a specific Thing.
      description: |-
        Send a message with the subject `messageSubject` `TO` the Feature
        specified by the `featureId` and `thingId` path parameter. The request
        body contains the message payload and the `Content-Type` header defines
        its type. The API does not provide any kind of acknowledgement that the
        message was received by the Feature. In order to send a message, the user needs `WRITE` permission at the Thing level.

        The HTTP request blocks until a response to the message is available
        or until the `timeout` is expired. If many clients respond to
        the issued message, the first response will complete the HTTP request.

        In order to handle the message in a fire and forget manner, add
        a query-parameter `timeout=0` to the request.
      tags:
        - Messages
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/messageSubjectPathParam'
        - $ref: '#/components/parameters/messageTimeoutParam'
      responses:
        '202':
          description: The message was sent but not necessarly received by the Feature (fire and forget).
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined path parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller does not have `WRITE` permission at the Thing level.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '413':
          $ref: '#/components/responses/messageTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/Payload'
  /things/{thingId}/features/{featureId}/outbox/messages/{messageSubject}:
    post:
      summary: Send a message FROM a specific Feature of a specific Thing.
      description: |-
        Send a message with the subject `messageSubject` `FROM` the Feature
        specified by the `featureId` and `thingId` path parameter. The request
        body contains the message payload and the `Content-Type` header defines
        its type. In order to send a message, the user needs `WRITE` permission
        at the Thing level.

        The HTTP request blocks until a response to the message is available
        or until the `timeout` is expired. If many clients respond to
        the issued message, the first response will complete the HTTP request.

        In order to handle the message in a fire and forget manner, add
        a query-parameter `timeout=0` to the request.
      tags:
        - Messages
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/messageSubjectPathParam'
        - $ref: '#/components/parameters/messageTimeoutParam'
      responses:
        '202':
          description: The message was sent (fire and forget).
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined path parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller does not have `WRITE` permission at the Thing level.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '413':
          $ref: '#/components/responses/messageTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/Payload'
  /search/things:
    get:
      summary: Search for Things
      description: |-
        This resource can be used to search for things.

        The query parameter `filter` is not mandatory. If it is not set there are returned all things which the logged
        in user is allowed to read. The resource supports sorting
        and paging. If paging is not explicitly specified by means of the `limit`
        option, a default count of `25` documents is returned.

        To search for nested properties, we use JSON Pointer notation (RFC-6901).
        See the following example how to search for the sub property `location`
        of the parent property `attributes` with a forward slash as separator:

        ```eq(attributes/location,"kitchen")```
      parameters:
        - $ref: '#/components/parameters/searchFilter'
        - $ref: '#/components/parameters/namespacesFilter'
        - $ref: '#/components/parameters/thingFieldsQueryParam'
        - name: option
          in: query
          description: |-
            Possible values for the parameter:

            ###### Sort operations

            * ```sort([+|-]{property})```
            * ```sort([+|-]{property},[+|-]{property},...)```

            ###### Paging operations

            * ```size({page-size})```  Maximum allowed page-size is `200`.
            * ```cursor({cursor-id})```  Start the search from the cursor location. Specify the cursor ID without
            quotation marks. Cursor IDs are given in responses and mark the position after the final search result.
            The meaning of cursor IDs is unspecified and may change without notice.

            The paging option `limit({offset},{count})` is deprecated.
            It may result in slow queries, time-outs and will be removed eventually.

            ##### Examples:

            * ```sort(+thingId)```
            * ```sort(-attributes/manufacturer)```
            * ```sort(+thingId,-attributes/manufacturer)```
            * ```size(10)``` return 10 results
            * ```cursor(LOREMIPSUM)```  return results after the position of the cursor `LOREMIPSUM`.

            ##### Combine:

            If you need to specify multiple options, when using the swagger UI just write each option in a new line.
            When using the plain REST API programmatically,
            you will need to separate the options using a comma (,) character.

            ```size(200),cursor(LOREMIPSUM)```

            The deprecated paging option `limit` may not combine with the other paging options `size` and `cursor`.
          required: false
          schema:
            type: array
            items:
              type: string

      tags:
        - Things-Search
      responses:
        '200':
          description: An array of the matching things.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResultThings'
        '400':
          description: The request could not be completed. A provided parameter was in a wrong format.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: The request could not be completed due to an invalid authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '504':
          description: The request ran out of time to execute on the the back-end. Optimize your query and try again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

  /search/things/count:
    get:
      summary: Count Things
      description: |-
        This resource can be used to count things.

        The query parameter `filter` is not mandatory. If it is not set there is returned the total amount of things which the logged
        in user is allowed to read.

        To search for nested properties, we use JSON Pointer notation (RFC-6901).
        See the following example how to search for the sub property `location`
        of the parent property `attributes` with a forward slash as separator:

        ```eq(attributes/location,"kitchen")```
      parameters:
        - $ref: '#/components/parameters/searchFilter'
        - $ref: '#/components/parameters/namespacesFilter'

      tags:
        - Things-Search
      responses:
        '200':
          description: A number indicating the amount of matched things
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResultThingsCount'
        '400':
          description: The request could not be completed. A provided parameter was in a wrong format.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: The request could not be completed due to an invalid authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '504':
          description: The request ran out of time to execute on the the back-end. Optimize your query and try again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

components:
  requestBodies:
    Attributes:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Attributes'
          example: {}
      description: |-
        JSON object of all Attributes to be modified at once.
        Consider that the value has to be a JSON object or `null`, examples:

          * an object: `{ "key": "value"}` -} We strongly recommend to use a restricted set of characters for the key (identifier). Currently these identifiers should follow the pattern: [_a-zA-Z][_a-zA-Z0-9\-]*
          * an empty object: `{}`
      required: true
    AclEntry:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AclEntry'
          example:
            {
              "READ": true,
              "WRITE": true,
              "ADMINISTRATE": true
            }
      description: |-
        JSON representation of the Access Control List (ACL) entry for a single
        authorization subject
      required: true
    Payload:
      content:
        application/json:
          schema:
            type: string
            example: ''
        application/octet-stream:
          schema:
            type: string
            example: ''
        text/plain:
          schema:
            type: string
            example: ''
      description: |-
        Payload of the message with max size of 250 kB. It can be any HTTP
        supported content, including binary content.
    Value:
      content:
        application/json:
          schema:
            type: object
            example: {}
      description: |-
        JSON representation of the value to be created/updated. This may be as
        well `null` or an empty object.

        Consider that the value has to be a JSON value, examples:

          * for a number, the JSON value is the number: `42`

          * for a string, the JSON value must be quoted: `"aString"`

          * for a boolean, the JSON value is the boolean: `true`

          * for an object, the JSON value is the object: `{ "key": "value"}` -} We strongly recommend to use a restricted set of characters for the key (identifier). Currently these identifiers should follow the pattern: [_a-zA-Z][_a-zA-Z0-9\-]*

          * for an list, the JSON value is the list: `[ 1,2,3 ]`
      required: true
  securitySchemes:
    basicAuth:
      type: http
      description: |-
        Eclipse Ditto sandbox demo user (demo1 ... demo9) + password (demo)
      scheme: basic
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |-
        A JSON Web Token issued by a supported OAuth 2.0 Identity Provider, e.g. a Google "id_token"
  schemas:
    Error:
      properties:
        status:
          type: integer
          description: The HTTP status of the error
        message:
          type: string
          description: The message of the error - what went wrong
        description:
          type: string
          description: A description how to fix the error or more details
        href:
          type: string
          description: A link to further information about the error and how to fix it
      required:
        - status
        - message
    AdvancedError:
      properties:
        status:
          type: integer
          description: The HTTP status of the error
        error:
          type: string
          description: The error code of the occurred exception
        message:
          type: string
          description: The message of the error - what went wrong
        description:
          type: string
          description: A description how to fix the error or more details
        href:
          type: string
          description: A link to further information about the error and how to fix it
      required:
        - status
        - error
        - message
    Attributes:
      type: object
      description: An arbitrary JSON object.
    FeatureDefinition:
      type: array
      items:
        $ref: '#/components/schemas/FeatureDefinitionString'
    FeatureDefinitionString:
      type: string
      description: "A single fully qualified identifier of a Feature Definition in the form 'namespace:name:version'"
      pattern: ([_a-zA-Z0-9\-.]+):([_a-zA-Z0-9\-.]+):([_a-zA-Z0-9\-.]+)
    FeatureProperties:
      type: object
      description: An arbitrary JSON object.
    Feature:
      type: object
      properties:
        definition:
          $ref: '#/components/schemas/FeatureDefinition'
          description: The Definition of this Feature
        properties:
          $ref: '#/components/schemas/FeatureProperties'
          description: The Properties of this Feature
    SearchResultThings:
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Thing'
        cursor:
          type: string
    SearchResultThingsCount:
      type: integer
    NewThing:
      type: object
      properties:
        acl:
          $ref: '#/components/schemas/Acl'
          description: The Access Control List of this Thing containing one AclEntry for each
        attributes:
          $ref: '#/components/schemas/Attributes'
          description: The attributes of this Thing
        features:
          $ref: '#/components/schemas/Features'
          description: The Features of this Thing
    Thing:
      type: object
      required:
        - thingId
        - acl
        - attributes
        - features
      properties:
        thingId:
          type: string
          description: |-
            Unique identifier representing the Thing - has to:

              * contain the mandatory namespace prefix (java package notation + `:` colon) - periods (`.`) may be used in namespace but not as first or last character
              * conform to RFC-2396 (URI)
        acl:
          $ref: '#/components/schemas/Acl'
          description: The Access Control List of this Thing containing one AclEntry for each arbitrary `authorizationSubject` key
        attributes:
          $ref: '#/components/schemas/Attributes'
          description: The attributes of this Thing
        features:
          $ref: '#/components/schemas/Features'
          description: The Features of this Thing
    Acl:
      type: object
      description: Access Control List containing one AclEntry for each arbitrary `authorizationSubject` key
      properties:
      additionalProperties:
        $ref: '#/components/schemas/AclEntry'
    AclEntry:
      type: object
      description: Single Access Control List entry containing the permissions (READ, WRITE, ADMINISTRATE) for the Authorization Subject.
      required:
        - READ
        - WRITE
        - ADMINISTRATE
      properties:
        READ:
          type: boolean
          description: Whether the Authorization Subject has permissions to read this entity
        WRITE:
          type: boolean
          description: Whether the Authorization Subject has permissions to modify this entity
        ADMINISTRATE:
          type: boolean
          description: Whether the Authorization Subject has permissions to modify this entity's Access Control List
    Features:
      type: object
      description: List of Features where the key represents the `featureId` of each Feature. The `featureId` key must be unique in the list.
      properties:
      additionalProperties:
        $ref: '#/components/schemas/Feature'
  responses:
    entityTooLarge:
      description: |-
        The created or modified entity is larger than the accepted limit of 100 kB.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AdvancedError'
    messageTooLarge:
      description: |-
        The size of the send message is larger than the accepted limit of 250 kB.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AdvancedError'
    notModified:
      description: |-
        The (sub-)resource has not been modified. This happens when you specified a If-None-Match header which
        matches the current ETag of the (sub-)resource.
      headers:
        ETag:
          description: |-
            The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
            "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
          schema:
            type: string
    preconditionFailed:
      description: |-
        A precondition for reading or writing the (sub-)resource failed. This will happen for write requests, when you
        specified an If-Match or If-None-Match header which fails the precondition check against the current ETag of
        the (sub-)resource. For read requests, this error may only happen for a failing If-Match header. In case of a
        failing If-None-Match header for a read request, status 304 will be returned instead.
      headers:
        ETag:
          description: |-
            The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
            "rev:<revision>", for sub-resources it has the format "hash:<calculated-hash>".
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AdvancedError'
  parameters:
    ifMatchHeaderParam:
      name: If-Match
      in: header
      description:  >-
        The `If-Match` header which has to conform to RFC-7232 (Conditional Requests). Common usages are:
          * optimistic locking by specifying the `ETag` from a previous GET response, e.g. `If-Match: "rev:4711"`
          * retrieving or modifying a resource only if it already exists, e.g. `If-Match: *`
      required: false
      schema:
        type: string
    ifNoneMatchHeaderParam:
      name: If-None-Match
      in: header
      description:  >-
        The `If-None-Match` header which has to conform to RFC-7232 (Conditional Requests). A common usage scenario is to
        modify a resource only if it does not yet exist, thus to create it, by specifying `If-None-Match: *`.
      required: false
      schema:
        type: string
    featureIdPathPathParam:
      name: featureId
      in: path
      description: The ID of the Feature - has to conform to RFC-2396 (URI)
      required: true
      schema:
        type: string
    attributePathPathParam:
      name: attributePath
      in: path
      description: The path to the Attribute
      required: true
      schema:
        type: string
    thingIdPathParam:
      name: thingId
      in: path
      description: |-
        The ID of the Thing - has to:

          * contain the mandatory namespace prefix (java package notation + `:` colon)
          * conform to RFC-2396 (URI)
      required: true
      schema:
        type: string
    messageSubjectPathParam:
      name: messageSubject
      in: path
      description: The subject of the Message - has to conform to RFC-2396 (URI)
      required: true
      schema:
        type: string
    messageClaimTimeoutParam:
      name: timeout
      in: query
      description: |-
        Contains an optional timeout (in seconds) of how long to wait for the Claim response and therefore block the
        HTTP request. Default value (if omitted): 60 seconds. Maximum value: 600 seconds. A value of 0 seconds applies
        fire and forget semantics for the message.
      required: false
      schema:
        type: integer
    messageTimeoutParam:
      name: timeout
      in: query
      description: |-
        Contains an optional timeout (in seconds) of how long to wait for the message response and therefore block the
        HTTP request. Default value (if omitted): 10 seconds. Maximum value: 60 seconds. A value of 0 seconds applies
        fire and forget semantics for the message.
      required: false
      schema:
        type: integer
    authorizationSubjectPathParam:
      name: authorizationSubject
      in: path
      description: The subject for authorization (e.g. a user id) inside an ACL
      required: true
      schema:
        type: string
    propertyPathPathParam:
      name: propertyPath
      in: path
      description: The path to the Property
      required: true
      schema:
        type: string
    thingFieldsQueryParam:
      name: fields
      in: query
      description: |-
        Contains a comma separated list of fields to be included in the returned JSON. Attributes can be selected in the same manner.

        #### Selectable fields

        * `thingId`

        * `acl`

        * `attributes`

          Supports selecting arbitrary sub-fields by using a comma separated list:
            * several attribute paths can be passed as a comma separated list of JSON pointers (RFC-6901)

              For example:
                * `?fields=attributes/model` would select only `model` attribute value (if present)
                * `?fields=attributes/model,attributes/make` would select only `model` and `make` attribute values (if present)

          Supports selecting arbitrary sub-fields of objects by wrapping sub-fields inside parentheses `( )`:
            * a comma-separated list of sub-fields (a sub-field is a JSON pointer (RFC-6901) separated with `/`) to select
            * sub-selectors can be used to request only specific sub-fields by placing expressions in parentheses `( )` after a selected subfield

              For example:
               * `?fields=attributes(model,make)` would select only `model` and `make` attribute values (if present)
               * `?fields=attributes(location/longitude)` would select the `longitude` value inside the `location` object
               * `?fields=attributes/address/postal(city,street)` would select the `city` and `street` values inside the `postal` object inside the `address` object


        * `features`

          Supports selecting arbitrary fields in features similar to `attributes` (see also Features documentation for more details)

        * `_namespace`

          Specifically selects the namespace also contained in the `thingId`

        * `_revision`

          Specifically selects the revision of the Thing. The revision is a counter which is incremented on each modification of a Thing.

        * `_modified`

          Specifically selects the modified timestamp of the Thing in ISO-8601 UTC format. The timestamp is set on each modification of a Thing.

        #### Examples

        * `?fields=thingId,attributes,features`

        * `?fields=attributes(model,make),features`

        * `?fields=thingId,attributes/location/longitude,attributes/address(city,street)`

      required: false
      schema:
        type: string
    attributesFieldsQueryParam:
      name: fields
      in: query
      description: |-
        Contains a comma separated list of fields from the attributes to be included in the returned JSON.

        #### Selectable fields

        Supports selecting arbitrary sub-fields as defined in the attributes by using a comma separated list:
          * several properties paths can be passed as a comma separated list of JSON pointers (RFC-6901)

            For example:
              * `?fields=model` would select only `model` attribute value (if present)
              * `?fields=model,make` would select only `model` and `make` attribute values (if present)

        Supports selecting arbitrary sub-fields of objects by wrapping sub-fields inside parentheses `( )`:
          * a comma-separated list of sub-fields (a sub-field is a JSON pointer (RFC-6901) separated with `/`) to select
          * sub-selectors can be used to request only specific sub-fields by placing expressions in parentheses `( )` after a selected subfield

            For example:
             * `?fields=location(longitude,latitude)` would select the `longitude` and `latitude` value inside the `location` attribute

        #### Examples

        * `?fields=model,make,location(longitude,latitude)`

        * `?fields=listOfAddresses/postal(city,street))`

      required: false
      schema:
        type: string
    propertiesFieldsQueryParam:
      name: fields
      in: query
      description: |-
        Contains a comma separated list of fields from the properties to be included in the returned JSON.

        #### Selectable fields

        Supports selecting arbitrary sub-fields as defined in the properties by using a comma separated list:
          * several properties paths can be passed as a comma separated list of JSON pointers (RFC-6901)

            For example:
              * `?fields=temperature` would select only `temperature` property value (if present)
              * `?fields=temperature,humidity` would select only `temperature` and `humidity` property values (if present)

        Supports selecting arbitrary sub-fields of objects by wrapping sub-fields inside parentheses `( )`:
          * a comma-separated list of sub-fields (a sub-field is a JSON pointer (RFC-6901) separated with `/`) to select
          * sub-selectors can be used to request only specific sub-fields by placing expressions in parentheses `( )` after a selected subfield

            For example:
             * `?fields=location(longitude,latitude)` would select the `longitude` and `latitude` value inside the `location` property

        #### Examples

        * `?fields=temperature,humidity,location(longitude,latitude)`

        * `?fields=configuration,status(powerConsumption/watts)`

      required: false
      schema:
        type: string
    featuresFieldsQueryParam:
      name: fields
      in: query
      description: |-
        Contains a comma separated list of fields from one or more Features to be included in the returned JSON.

        #### Selectable fields

        * `{featureId}` The ID of the Feature to select properties in

          * `properties`

            Supports selecting arbitrary sub-fields by using a comma separated list:
              * several properties paths can be passed as a comma separated list of JSON pointers (RFC-6901)

                For example:
                  * `?fields={featureId}/properties/color` would select only `color` property value (if present) of the Feature identified with `{featureId}`
                  * `?fields={featureId}/properties/color,properties/brightness` would select only `color` and `brightness` property values (if present) of the Feature identified with `{featureId}`

            Supports selecting arbitrary sub-fields of objects by wrapping sub-fields inside parentheses `( )`:
              * a comma-separated list of sub-fields (a sub-field is a JSON pointer (RFC-6901) separated with `/`) to select
              * sub-selectors can be used to request only specific sub-fields by placing expressions in parentheses `( )` after a selected subfield

                For example:
                 * `?fields={featureId}/properties(color,brightness)` would select only `color` and `brightness` property values (if present) of the Feature identified with `{featureId}`
                 * `?fields={featureId}/properties(location/longitude)` would select the `longitude` value inside the `location` object of the Feature identified with `{featureId}`


        #### Examples

        * `?fields=EnvironmentScanner/properties(temperature,humidity)`

        * `?fields=EnvironmentScanner/properties(temperature,humidity),Vehicle/properties/configuration`

      required: false
      schema:
        type: string
    featureFieldsQueryParam:
      name: fields
      in: query
      description: |-
        Contains a comma separated list of fields from the selected Feature to be included in the returned JSON.

        #### Selectable fields

        * `properties`

          Supports selecting arbitrary sub-fields by using a comma separated list:
            * several properties paths can be passed as a comma separated list of JSON pointers (RFC-6901)

              For example:
                * `?fields=properties/color` would select only `color` property value (if present)
                * `?fields=properties/color,properties/brightness` would select only `color` and `brightness` property values (if present)

          Supports selecting arbitrary sub-fields of objects by wrapping sub-fields inside parentheses `( )`:
            * a comma-separated list of sub-fields (a sub-field is a JSON pointer (RFC-6901) separated with `/`) to select
            * sub-selectors can be used to request only specific sub-fields by placing expressions in parentheses `( )` after a selected subfield

              For example:
               * `?fields=properties(color,brightness)` would select only `color` and `brightness` property values (if present)
               * `?fields=properties(location/longitude)` would select the `longitude` value inside the `location` object

        #### Examples

        * `?fields=properties(color,brightness)`

      required: false
      schema:
        type: string
    searchFilter:
      name: filter
      in: query
      description: |-
        Possible values for the parameter:

        ##### Filter operations

        * ```eq({property},{value})```

        * ```ne({property},{value})```

        * ```gt({property},{value})```

        * ```ge({property},{value})```

        * ```lt({property},{value})```

        * ```le({property},{value})```

        * ```in({property},{value},{value},...)```

        * ```like({property},{value})```

        * ```exists({property})```


        Note: When using filter operations, only things with the specified properties are returned.
        For example, the filter `ne(attributes/owner, "SID123")` will only return things that have the `owner` attribute.


        ##### logical operations

        * ```and({query},{query},...)```

        * ```or({query},{query},...)```

        * ```not({query})```


        ##### Examples

        * ```eq(attributes/location,"kitchen")```

        * ```exists(features/featureId)```

        * ```and(eq(attributes/location,"kitchen"),eq(attributes/color,"red"))```

        * ```or(eq(attributes/location,"kitchen"),eq(attributes/location,"living-room"))```
      required: false
      schema:
        type: string
    namespacesFilter:
      name: namespaces
      in: query
      description: |-
        A comma separated list of namespaces. This list is used to limit the query to things in the given namespaces
        only. When this parameter is omitted, all namespaces will be queried.


        #### Examples:

        * `?namespaces=com.example.namespace`

        * `?namespaces=com.example.namespace1,com.example.namespace2`
      required: false
      schema:
        type: string


================================================
FILE: charts/ditto-digital-twins/openapi/ditto-api-2.yml
================================================
# Copyright (c) 2017 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0
#
# SPDX-License-Identifier: EPL-2.0
openapi: 3.0.0
info:
  title: Eclipse Ditto HTTP API
  description: JSON-based, REST-like API for Eclipse Ditto
  version: "2"
servers:
  - url: https://ditto.eclipse.org/api/2
    description: "online Ditto Sandbox"
  - url: /api/2
    description: "local Ditto"
tags:
  - name: Things
    description: Manage every Thing
  - name: Features
    description: Structure the Features of your Things
  - name: Policies
    description: Control access to your Things
  - name: Things-Search
    description: Find every Thing
  - name: Messages
    description: Talk with your Things
security:
  #  - Google:
  #    - openid
  - basicAuth: []
  - bearerAuth: []
paths:
  ###
  ### Things
  ###
  /things:
    get:
      summary: List all available Things
      description: |-
        Returns all Things passed in by the required parameter `ids`. Optionally
        you can use field selectors (see parameter `fields`) to only get the
        specified fields.
      tags:
        - Things
      parameters:
        - name: ids
          in: query
          description: |-
            Contains a comma separated list of `thingId`s to retrieve in one
            single request.
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/thingFieldsQueryParam'
      responses:
        '200':
          description: |-
            The successfully completed request contains as its result the first
            200 for the user available Things, sorted by their `thingId`.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Thing'
        '400':
          description: |-
            The request could not be completed. At least one of the defined
            query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '414':
          description: |-
            The request could not be completed due to an URI length exceeding 8k
            characters.
    post:
      summary: Create a new Thing
      description: |-
        Creates the Thing defined in the optional JSON body.

        The ID of the created Thing is a UUID generated by the service with the default namespace `org.eclipse.ditto`.
        Any `thingId` specified in the request body is
        therefore ignored. The Policy must include at least one entry with
        `WRITE` permission on the `policy:/` resource. If no Policy is provided,
        a default Policy will be created which grants all permissions to the
        authorized subject on the root thing and policy resource.
      tags:
        - Things
      responses:
        '201':
          description: The Thing was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
            Location:
              description: The location of the created Thing resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thing'
        '400':
          description: |-
            The request could not be completed. Possible reasons:

              * the `thingId` was wrongly set in the request body
              * the JSON of the Thing to be created was invalid

          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '403':
          description: |-
            The request could not be completed. Either
              * as the caller would not have access to the thing after creating it with the given policy.
              * as the caller had insufficient permissions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed as either:
              * the referenced thing does not exist.
              * the caller had insufficient permissions to read the referenced thing.
              * the Policy that should be copied does not exist.
              * the caller had insufficient permissions to read the Policy that should be copied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewThing'
            example: {}
        description: JSON representation of the Thing to be created.
  '/things/{thingId}':
    get:
      summary: Retrieve a specific Thing
      description: |-
        Returns the Thing identified by the `thingId` path parameter. The
        response includes details about the Thing. Note that the Thing's Policy
        is not included in the response per default. Optionally you can use
        field selectors (see parameter `fields`) to only get the specified
        fields. E.g., you can get the Thing's Policy by using a field selector.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/thingFieldsQueryParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The request successfully returned the specific Thing.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thing'
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or one of the defined query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '404':
          description: |-
            The request could not be completed. The Thing with the given ID was
            not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update a Thing with a specified ID
      description: |-
        Create or update the Thing specified by the `thingId` path parameter and
        the optional JSON body. The `thingId` has to:

          * contain a mandatory namespace prefix (java package notation + `:` colon) - periods (`.`) may be used in namespace but not as first or last character
          * conform to RFC-2396 (URI)

        #### Valid examples

          * `com.bosch.myproject:myFridge1`
          * `mynamespace:myFridge1`

        #### Invalid examples

          * `42:myFridge1`
          * `.foo:myFridge1`
          * `bar.:myFridge1`

        The ID of a Thing can't be changed after creation. Any `thingId`
        specified in the request body is therefore ignored.

        ### Creation of a new Thing

        The Policy must include at least one entry with `WRITE` permission on
        the `policy:/` resource. If no Policy is provided, a default Policy will
        be created which grants all permissions to the authorized subject on the
        root thing and policy resource.

        ### Permissions for updating an existing Thing

        For updating an existing Thing the authorized subject has to have an
        unrestricted `WRITE` permission on the Thing's root resource.

        ### Partially updating an existing Thing

        When updating an existing Thing already containing `attributes`, `policyId` or `features` the already existing fields
        must not explicitly be provided again. For this "PUT Thing" request (and only for this top-level update on the
        Thing) the top-level field to update is merged with the existing top-level fields of the Thing.


        For example: A Thing already exists with this content:

        ```

        {
          "thingId": "namespace:thing-name",
          "policyId": "namespace:policy-name",
          "attributes": {
            "foo": 1
          },
          "features": {...}
        }

        ```

        The Thing's `attributes` may be modified without having to pass the `policyId` or the `features` in again. The content
        of the request's body would be sufficient for updating the `attributes`:

        ```

        {
          "attributes": {
            "foo": 2,
            "bar": false
          }
        }

        ```

        The `policyId` and `features` of the Thing will not be overwritten, the Thing will be merged as one would expect it:

        ```

        {
          "thingId": "namespace:thing-name",
          "policyId": "namespace:policy-name",
          "attributes": {
            "foo": 2,
            "bar": false
          },
          "features": {...}
        }

        ```
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Thing was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
            Location:
              description: The location of the created Thing resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Thing'
        '204':
          description: The Thing was successfully modified.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON of the Thing to be created/modified was either invalid
            or did contain a `thingId` which did not match the ID in the URL.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '403':
          description: |-
            The request could not be completed. Either
              * as the caller would not have access to the thing after creating it with the given policy.
              * as the caller had insufficient permissions.
                For modifying an existing Thing an unrestricted `WRITE` permission on the Thing's root resource is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed as either:
              * the referenced thing does not exist.
              * the caller had insufficient permissions to read the referenced thing.
              * the Policy that should be copied does not exist.
              * the caller had insufficient permissions to read the Policy that should be copied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewThing'
            example: {}
        description: JSON representation of the Thing to be modified.
    delete:
      summary: Delete a specific Thing
      description: |-
        Deletes the Thing identified by the `thingId` path parameter. This will
        not delete the Policy used for controlling access to this Thing managed
        by resource `/policies/{policyId}`.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Thing was successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For deleting an existing Thing an unrestricted `WRITE` permission on the Thing's root resource is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The Thing with the given ID was
            not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  '/things/{thingId}/policyId':
    get:
      summary: Retrieve the Policy ID of a Thing
      description: |-
        Returns the Policy ID of the Thing identified by the `thingId` path parameter.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The request successfully returned the Policy ID.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
          content:
            application/json:
              schema:
                type: string
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: The request could not be completed. The Thing with the given ID was not found in the context of the authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update the Policy ID of a Thing
      description: |-
        Create or update the Policy ID of the Thing identified by the `thingId`
        path parameter. If the Thing had not yet a `policyId` set it was
        considered to be in API version 1, access controlled by the `acl`
        mechanism. In that case PUTing a `policyId` will create the Policy ID.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: |-
            The Policy ID was successfully created - the Thing was migrated to API version 2.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
          content:
            application/json:
              schema:
                type: string
        '204':
          description: The Policy ID was successfully updated.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'


        '404':
          description: |-
            The request could not be completed. The Thing with the given ID was
            not found in the context of the authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              type: string
              example: '<namespace>:<policyName>'
        description: |-
          The Policy ID used for controlling access to this Thing. Managed by
          resource `/policies/{policyId}`.

            * contain the mandatory namespace prefix (java package notation + `:` colon) - periods (`.`) may be used in namespace but not as first or last character
            * conform to RFC-2396 (URI)
        required: true
  '/things/{thingId}/attributes':
    get:
      summary: List all Attributes of a specific Thing
      description: |-
        Returns all Attributes of the Thing identified by the `thingId` path parameter.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/attributesFieldsQueryParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The Attributes of the specific Thing were successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attributes'
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '404':
          description: |-
            The request could not be completed. The Thing with the given ID was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update all Attributes of a specific Thing at once
      description: |-
        Create or update the Attributes of a Thing identified by the `thingId`
        path parameter at once. The Attributes will be replaced by the request
        body's JSON.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Attributes were successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
            Location:
              description: The location of the created Attribute resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Attributes'
        '204':
          description: The Attributes were successfully updated.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON was invalid or was not a JSON object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For modifying the Attributes of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The Thing with the given ID was
            not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/Attributes'
    delete:
      summary: Delete all Attributes of a specific Thing at once
      description: |-
        Deletes all Attributes of the Thing identified by the `thingId` path
        parameter at once.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Attributes were successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For deleting all Attributes of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The Thing with the given ID or
            its Attributes were not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  '/things/{thingId}/attributes/{attributePath}':
    get:
      summary: Retrieve a specific Attribute of a specific Thing
      description: |-
        Returns a specific Attribute of the Thing identified by the `thingId`
        path parameter. The Attribute (JSON) can be referenced hierarchically by
        applying JSON Pointer notation (RFC-6901), e.g.:
        `/things/{thingId}/attributes/address/city` in order to retrieve the
        `city` field of an `address` object.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/attributePathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The Attribute was successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '404':
          description: |-
            The request could not be completed. The Thing with the given ID or
            the Attribute at the specified path was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or update a specific Attribute of a specific Thing
      description: |-
        Create or update a specific Attribute of the Thing identified by the
        `thingId` path parameter. The Attribute will be created if it doesn't
        exist or else updated. The Attribute (JSON) can be referenced
        hierarchically by applying JSON Pointer notation (RFC-6901), e.g.:
        `/things/{thingId}/attributes/address/city` in order to create/update
        the `city` field of an `address` object.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/attributePathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Attribute was successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
            Location:
              description: The location of the created Attribute resource
              schema:
                type: string
        '204':
          description: The Attribute was successfully modified.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For modifying a single Attribute of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The Thing with the given ID was
            not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        $ref: '#/components/requestBodies/Value'
    delete:
      summary: Delete a specific Attribute of a specific Thing
      description: |-
        Deletes a specific Attribute of the Thing identified by the `thingId`
        path parameter. The Attribute (JSON) can be referenced hierarchically by
        applying JSON Pointer notation (RFC-6901), e.g.:
        `/things/{thingId}/attributes/address/city` in order to delete the
        `city` field of an `address` object.
      tags:
        - Things
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/attributePathPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Attribute was successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For deleting a single Attribute of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The Thing with the given ID or
            the Attribute at the specified path was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  ###
  ### Features
  ###
  '/things/{thingId}/features':
    get:
      summary: List all Features of a specific Thing
      description: |-
        Returns all Features of the Thing identified by the `thingId` path
        parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featuresFieldsQueryParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: |-
            The list of Features of the specific Thing were successfully
            retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Features'
              example:
                {
                  "featureId1": {
                    "definition": [ "namespace:definition1:v1.0" ],
                    "properties": { "property1": "value1" }
                  },
                  "featureId2": {
                    "definition": [ "namespace:definition2:v1.0" ],
                    "properties": { "property2": "value2" }
                  }
                }
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '404':
          description: |-
            The request could not be completed. The Thing with the given ID was
            not found or the Features have not been defined.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
    put:
      summary: Create or modify all Features of a specific Thing at once
      description: |-
        Create or modify the Features of a Thing identified by the `thingId`
        path parameter at once. The list of Features will be replaced by the
        request body's JSON.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '201':
          description: The Features were successfully created.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
            Location:
              description: The location of the created Features resource
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Features'
              example:
                {}
        '204':
          description: The Features were successfully modified.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or the JSON was invalid or was not a JSON object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For modifying all features of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The Thing with the given ID was
            not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
        '413':
          $ref: '#/components/responses/entityTooLarge'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Features'
            example: {}
        description: |-
          JSON object of the Features to be modified at once. It can be also
          `null` or an empty object `{}` (all features cleared).
        required: true
    delete:
      summary: Delete all Features of a specific Thing
      description: |-
        Deletes all features of the Thing identified by the `thingId` path
        parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '204':
          description: The Features were successfully deleted.
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '403':
          description: |-
            The request could not be completed as the caller had insufficient permissions. For deleting all features of an existing Thing `WRITE` permission is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '404':
          description: |-
            The request could not be completed. The Thing with the given ID was
            not found or the Features have not been defined.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '412':
          $ref: '#/components/responses/preconditionFailed'
  '/things/{thingId}/features/{featureId}':
    get:
      summary: Retrieve a specific Feature of a specific Thing
      description: |-
        Returns a specific Feature identified by the `featureId` path parameter
        of the Thing identified by the `thingId` path parameter.
      tags:
        - Features
      parameters:
        - $ref: '#/components/parameters/thingIdPathParam'
        - $ref: '#/components/parameters/featureIdPathPathParam'
        - $ref: '#/components/parameters/featureFieldsQueryParam'
        - $ref: '#/components/parameters/ifMatchHeaderParam'
        - $ref: '#/components/parameters/ifNoneMatchHeaderParam'
      responses:
        '200':
          description: The Feature was successfully retrieved.
          headers:
            ETag:
              description: |-
                The (current server-side) ETag for this (sub-)resource. For top-level resources it is in the format
                "rev:[revision]", for sub-resources it has the format "hash:[calculated-hash]".
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Feature'
        '304':
          $ref: '#/components/responses/notModified'
        '400':
          description: |-
            The request could not be completed. The `thingId` either

              * does not contain the mandatory namespace prefix (java package notation + `:` colon)
              * does not conform to RFC-2396 (URI)

            Or at least one of the defined query parameters was invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'
        '401':
          description: The request could not be completed due to missing authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvancedError'

        '404':
          description: |-
            The request could not be completed. The Thing with the given ID or
     
Download .txt
gitextract_8u9zkvau/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── check-for-chart-changes.sh
│   ├── config.yml
│   ├── ct.yaml
│   ├── deploy-chart.sh
│   ├── kind-config.yaml
│   ├── kubeval.sh
│   ├── lint-scripts.sh
│   ├── stale.yml
│   └── workflows/
│       ├── ci.yaml
│       └── deploy.yaml
├── .gitignore
├── LICENSE
├── README.md
└── charts/
    ├── any-resource/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   └── any-resources.yaml
    │   └── values.yaml
    ├── ditto-digital-twins/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── nginx-config/
    │   │   ├── index.html
    │   │   ├── nginx-cors.conf
    │   │   └── nginx.htpasswd
    │   ├── openapi/
    │   │   ├── ditto-api-1.yml
    │   │   └── ditto-api-2.yml
    │   ├── requirements.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── concierge-deployment.yaml
    │   │   ├── concierge-networkpolicy.yaml
    │   │   ├── concierge-pdb.yaml
    │   │   ├── connectivity-deployment.yaml
    │   │   ├── connectivity-networkpolicy.yaml
    │   │   ├── connectivity-pdb.yaml
    │   │   ├── gateway-deployment.yaml
    │   │   ├── gateway-networkpolicy.yaml
    │   │   ├── gateway-pdb.yaml
    │   │   ├── gateway-secret.yaml
    │   │   ├── gateway-service.yaml
    │   │   ├── mongodb-secret.yaml
    │   │   ├── nginx-config.yaml
    │   │   ├── nginx-configmap.yaml
    │   │   ├── nginx-deployment.yaml
    │   │   ├── nginx-ingress.yaml
    │   │   ├── nginx-service.yaml
    │   │   ├── policies-deployment.yaml
    │   │   ├── policies-networkpolicy.yaml
    │   │   ├── policies-pdb.yaml
    │   │   ├── role.yaml
    │   │   ├── rolebinding.yaml
    │   │   ├── serviceaccount.yaml
    │   │   ├── swaggerui-config.yaml
    │   │   ├── swaggerui-deployment.yaml
    │   │   ├── swaggerui-networkpolicy.yaml
    │   │   ├── swaggerui-pdb.yaml
    │   │   ├── swaggerui-service.yaml
    │   │   ├── things-deployment.yaml
    │   │   ├── things-networkpolicy.yaml
    │   │   ├── things-pdb.yaml
    │   │   ├── thingssearch-deployment.yaml
    │   │   ├── thingssearch-networkpolicy.yaml
    │   │   └── thingssearch-pdb.yaml
    │   └── values.yaml
    ├── enmasse/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── ci/
    │   │   └── test-values.yaml
    │   ├── requirements.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── api-server-cert-secret.yaml
    │   │   ├── api-service-v1alpha1-enmasse-io.yaml
    │   │   ├── api-service-v1alpha1-user-enmasse-io.yaml
    │   │   ├── api-service-v1beta1-enmasse-io.yaml
    │   │   ├── api-service-v1beta1-user-enmasse-io.yaml
    │   │   ├── cluster-role-api-server.yaml
    │   │   ├── cluster-role-binding-api-server.yaml
    │   │   ├── cluster-role-binding-enmasse-operator.yaml
    │   │   ├── cluster-role-binding-standard-authservice.yaml
    │   │   ├── cluster-role-enmasse-operator.yaml
    │   │   ├── cluster-role-standard-authservice.yaml
    │   │   ├── deployment-address-space-controller.yaml
    │   │   ├── deployment-api-server.yaml
    │   │   ├── deployment-enmasse-operator.yaml
    │   │   ├── role-address-space-admin.yaml
    │   │   ├── role-address-space-controller.yaml
    │   │   ├── role-api-server.yaml
    │   │   ├── role-binding-address-space-admin.yaml
    │   │   ├── role-binding-address-space-controller.yaml
    │   │   ├── role-binding-api-server.yaml
    │   │   ├── role-binding-enmasse-operator.yaml
    │   │   ├── role-enmasse-operator.yaml
    │   │   ├── service-account-address-space-admin.yaml
    │   │   ├── service-account-address-space-controller.yaml
    │   │   ├── service-account-api-server.yaml
    │   │   ├── service-account-enmasse-operator.yaml
    │   │   ├── service-account-standard-authservice.yaml
    │   │   ├── service-address-space-controller.yaml
    │   │   └── service-api-server.yaml
    │   └── values.yaml
    ├── enmasse-crd/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── addressplans.crd.yaml
    │   │   ├── addressspaceplans.crd.yaml
    │   │   ├── authenticationservices.crd.yaml
    │   │   ├── brokeredinfraconfigs.crd.yaml
    │   │   ├── consoleservices.crd.yaml
    │   │   ├── iotconfigs.crd.yaml
    │   │   ├── iotprojects.crd.yaml
    │   │   └── standardinfraconfigs.crd.yaml
    │   └── values.yaml
    ├── error-pages/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── deployment.yaml
    │   │   ├── ingress.yaml
    │   │   └── service.yaml
    │   └── values.yaml
    ├── fluentd-elasticsearch/
    │   ├── Chart.yaml
    │   ├── OWNERS
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── clusterrole.yaml
    │   │   ├── clusterrolebinding.yaml
    │   │   ├── configmaps.yaml
    │   │   ├── daemonset.yaml
    │   │   ├── metrics-service.yaml
    │   │   ├── pod-security-policy.yaml
    │   │   ├── prometheusrule.yaml
    │   │   ├── role.yaml
    │   │   ├── rolebinding.yaml
    │   │   ├── service-account.yaml
    │   │   ├── service.yaml
    │   │   └── servicemonitor.yaml
    │   └── values.yaml
    ├── gcp-serviceaccount-controller/
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── gcpnamespacerestriction_crd.yaml
    │   │   ├── gcpserviceaccount_crd.yaml
    │   │   ├── rbac_role.yaml
    │   │   ├── rbac_role_binding.yaml
    │   │   ├── secret.yaml
    │   │   ├── service.yaml
    │   │   └── stateful_set.yaml
    │   └── values.yaml
    ├── grafana-dashboards/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── dashboards/
    │   │   └── grafana-dummy-dashboard.json
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   └── configmap.yaml
    │   └── values.yaml
    ├── graphite/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── OWNERS
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap-statsd.yaml
    │   │   ├── configmap.yaml
    │   │   ├── ingress.yaml
    │   │   ├── pvc.yaml
    │   │   ├── role.yaml
    │   │   ├── rolebinding.yaml
    │   │   ├── service.yaml
    │   │   ├── serviceaccount.yaml
    │   │   └── statefulset.yaml
    │   └── values.yaml
    ├── hawkbit-update-server/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── requirements.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap.yaml
    │   │   ├── deployment.yaml
    │   │   ├── ingress.yaml
    │   │   ├── poddisruptionbudget.yaml
    │   │   ├── secrets.yaml
    │   │   ├── service.yaml
    │   │   └── tests/
    │   │       └── test-connection.yaml
    │   └── values.yaml
    ├── influxdb-backup/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── ci/
    │   │   └── test-values.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap.yaml
    │   │   ├── cronjob.yaml
    │   │   ├── pvc.yaml
    │   │   └── secrets.yaml
    │   └── values.yaml
    ├── ingress-annotator/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap.yaml
    │   │   ├── deployment.yaml
    │   │   ├── rbac_role.yaml
    │   │   ├── rbac_role_binding.yaml
    │   │   └── serviceaccount.yaml
    │   └── values.yaml
    ├── keycloak-controller/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── configmap.yaml
    │   │   ├── deployment.yaml
    │   │   └── rbac/
    │   │       ├── role.yaml
    │   │       ├── role_binding.yaml
    │   │       └── serviceaccount.yaml
    │   └── values.yaml
    ├── kubernetes-policy-controller/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── clusterrolebinding.yaml
    │   │   ├── deployment.yaml
    │   │   ├── matches-configmap.yaml
    │   │   ├── policymatches-configmap.yaml
    │   │   ├── role.yaml
    │   │   ├── rolebinding.yaml
    │   │   ├── service.yaml
    │   │   └── webhookconfiguration.yaml
    │   └── values.yaml
    ├── prometheus-pingdom-exporter/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── deployment.yaml
    │   │   ├── secret.yaml
    │   │   └── service.yaml
    │   └── values.yaml
    ├── prometheus-thanos/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── ci/
    │   │   └── test-values.yaml
    │   ├── requirements.yaml
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── bucket-web/
    │   │   │   ├── deployment.yaml
    │   │   │   ├── service.yaml
    │   │   │   └── serviceaccount.yaml
    │   │   ├── compactor/
    │   │   │   ├── service.yaml
    │   │   │   ├── serviceaccount.yaml
    │   │   │   └── statefulset.yaml
    │   │   ├── querier/
    │   │   │   ├── deployment-hpa.yaml
    │   │   │   ├── deployment.yaml
    │   │   │   ├── service.yaml
    │   │   │   └── serviceaccount.yaml
    │   │   ├── query-frontend/
    │   │   │   ├── deployment-hpa.yaml
    │   │   │   ├── deployment.yaml
    │   │   │   ├── service.yaml
    │   │   │   └── serviceaccount.yaml
    │   │   ├── receiver/
    │   │   │   ├── hashring-configmap.yaml
    │   │   │   ├── service.yaml
    │   │   │   ├── serviceaccount.yaml
    │   │   │   └── statefulset.yaml
    │   │   ├── ruler/
    │   │   │   ├── clusterrole.yaml
    │   │   │   ├── clusterrolebinding.yaml
    │   │   │   ├── configmap.yaml
    │   │   │   ├── service.yaml
    │   │   │   ├── serviceaccount.yaml
    │   │   │   └── statefulset.yaml
    │   │   └── store-gateway/
    │   │       ├── service.yaml
    │   │       ├── serviceaccount.yaml
    │   │       ├── statefulset-hpa.yaml
    │   │       └── statefulset.yaml
    │   └── values.yaml
    ├── pull-secret-distributor/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── cluster-role.yaml
    │   │   ├── cluster-rolebinding.yaml
    │   │   ├── deployment.yaml
    │   │   └── serviceaccount.yaml
    │   └── values.yaml
    ├── secret-replicator/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── cluster-role.yaml
    │   │   ├── cluster-rolebinding.yaml
    │   │   ├── deployment.yaml
    │   │   └── serviceaccount.yaml
    │   └── values.yaml
    ├── spring-cloud-config-server/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── deployment.yaml
    │   │   ├── ingress.yaml
    │   │   ├── secret.yaml
    │   │   └── service.yaml
    │   └── values.yaml
    ├── stackdriver-exporter/
    │   ├── .helmignore
    │   ├── Chart.yaml
    │   ├── README.md
    │   ├── templates/
    │   │   ├── NOTES.txt
    │   │   ├── _helpers.tpl
    │   │   ├── deployment.yaml
    │   │   ├── gcpserviceaccount.yaml
    │   │   └── secret.yaml
    │   └── values.yaml
    └── zipkin-stackdriver-proxy/
        ├── .helmignore
        ├── Chart.yaml
        ├── README.md
        ├── templates/
        │   ├── NOTES.txt
        │   ├── _helpers.tpl
        │   ├── deployment.yaml
        │   └── service.yaml
        └── values.yaml
Condensed preview — 333 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (975K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 1123,
    "preview": "<!-- Thanks for filing an issue!\nBefore hitting the button, please answer these questions.\nIt's helpful to search the ex"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 1813,
    "preview": "<!--\nThank you for contributing to kiwigrid/charts. Before you submit this PR we'd like to\nmake sure you are aware of ou"
  },
  {
    "path": ".github/check-for-chart-changes.sh",
    "chars": 488,
    "preview": "#!/bin/bash\n#\n# check for chart changes to speedup ci\n#\n\nset -x\nset -o errexit\nset -o pipefail\n\necho \"Check for chart ch"
  },
  {
    "path": ".github/config.yml",
    "chars": 1460,
    "preview": "# Configuration for request-info - https://github.com/behaviorbot/request-info\n\n# *OPTIONAL* Comment to reply with\n# Can"
  },
  {
    "path": ".github/ct.yaml",
    "chars": 159,
    "preview": "helm-extra-args: --timeout 1200s\ncheck-version-increment: true\ndebug: true\nchart-repos:\n  - kiwigrid=https://kiwigrid.gi"
  },
  {
    "path": ".github/deploy-chart.sh",
    "chars": 2993,
    "preview": "#!/bin/bash\n#\n# deploy kiwigrid charts to kiwigrid.github.io\n#\n\nset -x\nset -o errexit\nset -o pipefail\n\nCHART_DIR=\"charts"
  },
  {
    "path": ".github/kind-config.yaml",
    "chars": 156,
    "preview": "kind: Cluster\napiVersion: kind.x-k8s.io/v1alpha4\nnodes:\n# the control plane node config\n- role: control-plane\n# the 2 wo"
  },
  {
    "path": ".github/kubeval.sh",
    "chars": 1256,
    "preview": "#!/bin/bash\n#\n# use kubeval to validate helm generated kubernetes manifest\n#\n\nset -x\nset -o errexit\nset -o pipefail\n\nCHA"
  },
  {
    "path": ".github/lint-scripts.sh",
    "chars": 253,
    "preview": "#!/bin/sh\n#\n# lint bash scripts\n#\n\nset -x\nset -o errexit\n\nCONFIG_DIR=\".github\"\n\nTMP_FILE=\"$(mktemp)\"\n\nfind \"${CONFIG_DIR"
  },
  {
    "path": ".github/stale.yml",
    "chars": 684,
    "preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 60\n# Number of days of inactivity before a "
  },
  {
    "path": ".github/workflows/ci.yaml",
    "chars": 2788,
    "preview": "name: ci\n\non:\n  pull_request:\n\nenv:\n  helm-version: \"v3.9.0\"\n  kubeval-version: \"v0.16.1\"\n\njobs:\n  lint-bash-scripts:\n  "
  },
  {
    "path": ".github/workflows/deploy.yaml",
    "chars": 777,
    "preview": "name: deploy\n\non:\n  push:\n    branches: [master]\n\njobs:\n  deploy-chart:\n    name: deploy-chart\n    runs-on: ubuntu-lates"
  },
  {
    "path": ".gitignore",
    "chars": 84,
    "preview": "*.tgz\n.ci/test.sh\ncharts/*/charts\ncharts/*/requirements.lock\nkiwigrid.github.io\ntmp\n"
  },
  {
    "path": "LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2018 Kiwigrid GmbH\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "README.md",
    "chars": 734,
    "preview": "# Kiwigrid Helm charts\n\n[![Github Action](https://github.com/kiwigrid/helm-charts/workflows/deploy/badge.svg)](https://g"
  },
  {
    "path": "charts/any-resource/.helmignore",
    "chars": 342,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/any-resource/Chart.yaml",
    "chars": 252,
    "preview": "apiVersion: v1\nappVersion: \"0.1.0\"\ndescription: A Helm chart to bring any kind of resources in a k8s cluster\nname: any-r"
  },
  {
    "path": "charts/any-resource/README.md",
    "chars": 1050,
    "preview": "# A Helm Chart for any Kind of Resources\n\nThe purpose of this chart is to become able to manage every installed resource"
  },
  {
    "path": "charts/any-resource/templates/NOTES.txt",
    "chars": 24,
    "preview": "Any resources deployed.\n"
  },
  {
    "path": "charts/any-resource/templates/_helpers.tpl",
    "chars": 1060,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"any-resource.name\" -}}\n{{- def"
  },
  {
    "path": "charts/any-resource/templates/any-resources.yaml",
    "chars": 485,
    "preview": "{{- if .Values.anyResources -}}\n{{- range $key, $value := .Values.anyResources -}}\n{{ $value }}\n---\n{{ end -}}\n{{ else }"
  },
  {
    "path": "charts/any-resource/values.yaml",
    "chars": 153,
    "preview": "anyResources: {}\n#  exampleResource: |-\n#    apiVersion: v1\n#    kind: ConfigMap\n#    metadata:\n#      name: example-res"
  },
  {
    "path": "charts/ditto-digital-twins/.helmignore",
    "chars": 342,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/ditto-digital-twins/Chart.yaml",
    "chars": 346,
    "preview": "apiVersion: v1\nappVersion: \"1.0.0-M3\"\ndescription: A Helm chart for Eclipse Ditto\nname: ditto-digital-twins\nversion: 0.7"
  },
  {
    "path": "charts/ditto-digital-twins/README.md",
    "chars": 2663,
    "preview": "# This chart is deprecated. Ditto is now maintained within the [Eclipse Packages project](https://github.com/eclipse/pac"
  },
  {
    "path": "charts/ditto-digital-twins/nginx-config/index.html",
    "chars": 1110,
    "preview": "<!doctype html>\n<html>\n<head>\n  <title>Welcome to Eclipse Ditto</title>\n  <style>\n    body {\n      text-align: center;\n "
  },
  {
    "path": "charts/ditto-digital-twins/nginx-config/nginx-cors.conf",
    "chars": 1642,
    "preview": "#\n# CORS header support\n#\n# As of Nginx 1.7.5, add_header supports an \"always\" parameter which\n# allows CORS to work if "
  },
  {
    "path": "charts/ditto-digital-twins/nginx-config/nginx.htpasswd",
    "chars": 80,
    "preview": "# this file contains sample users and their hashed password\nditto:A6BgmB8IEtPTs\n"
  },
  {
    "path": "charts/ditto-digital-twins/openapi/ditto-api-1.yml",
    "chars": 123553,
    "preview": "# Copyright (c) 2017 Contributors to the Eclipse Foundation\n#\n# See the NOTICE file(s) distributed with this work for ad"
  },
  {
    "path": "charts/ditto-digital-twins/openapi/ditto-api-2.yml",
    "chars": 180481,
    "preview": "# Copyright (c) 2017 Contributors to the Eclipse Foundation\n#\n# See the NOTICE file(s) distributed with this work for ad"
  },
  {
    "path": "charts/ditto-digital-twins/requirements.yaml",
    "chars": 147,
    "preview": "dependencies:\n  - name: mongodb\n    repository: https://kubernetes-charts.storage.googleapis.com\n    version: 7.4.4\n    "
  },
  {
    "path": "charts/ditto-digital-twins/templates/NOTES.txt",
    "chars": 847,
    "preview": "Eclipse Ditto installed!\n\nAccess ditto in your browser (http://localhost:8080) by running:\n\n    kubectl --namespace {{ ."
  },
  {
    "path": "charts/ditto-digital-twins/templates/_helpers.tpl",
    "chars": 1756,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"ditto-digital-twins.name\" -}}\n"
  },
  {
    "path": "charts/ditto-digital-twins/templates/concierge-deployment.yaml",
    "chars": 5364,
    "preview": "{{- if .Values.concierge.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"ditto-digital-tw"
  },
  {
    "path": "charts/ditto-digital-twins/templates/concierge-networkpolicy.yaml",
    "chars": 886,
    "preview": "{{- if .Values.concierge.networkPolicy.enabled }}\nkind: NetworkPolicy\napiVersion: networking.k8s.io/v1\nmetadata:\n  name:"
  },
  {
    "path": "charts/ditto-digital-twins/templates/concierge-pdb.yaml",
    "chars": 632,
    "preview": "{{- if and .Values.concierge.podDisruptionBudget.enabled (gt .Values.concierge.replicaCount 1.0) -}}\napiVersion: policy/"
  },
  {
    "path": "charts/ditto-digital-twins/templates/connectivity-deployment.yaml",
    "chars": 5460,
    "preview": "{{- if .Values.connectivity.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"ditto-digital"
  },
  {
    "path": "charts/ditto-digital-twins/templates/connectivity-networkpolicy.yaml",
    "chars": 900,
    "preview": "{{- if .Values.connectivity.networkPolicy.enabled }}\nkind: NetworkPolicy\napiVersion: networking.k8s.io/v1\nmetadata:\n  na"
  },
  {
    "path": "charts/ditto-digital-twins/templates/connectivity-pdb.yaml",
    "chars": 650,
    "preview": "{{- if and .Values.connectivity.podDisruptionBudget.enabled (gt .Values.connectivity.replicaCount 1.0) -}}\napiVersion: p"
  },
  {
    "path": "charts/ditto-digital-twins/templates/gateway-deployment.yaml",
    "chars": 5639,
    "preview": "{{- if .Values.gateway.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"ditto-digital-twin"
  },
  {
    "path": "charts/ditto-digital-twins/templates/gateway-networkpolicy.yaml",
    "chars": 1147,
    "preview": "{{- if .Values.gateway.networkPolicy.enabled }}\nkind: NetworkPolicy\napiVersion: networking.k8s.io/v1\nmetadata:\n  name: {"
  },
  {
    "path": "charts/ditto-digital-twins/templates/gateway-pdb.yaml",
    "chars": 620,
    "preview": "{{- if and .Values.gateway.podDisruptionBudget.enabled (gt .Values.gateway.replicaCount 1.0) -}}\napiVersion: policy/v1be"
  },
  {
    "path": "charts/ditto-digital-twins/templates/gateway-secret.yaml",
    "chars": 681,
    "preview": "apiVersion: v1\nkind: Secret\nmetadata:\n  name: {{ include \"ditto-digital-twins.fullname\" . }}-gateway-secret\n  labels:\n  "
  },
  {
    "path": "charts/ditto-digital-twins/templates/gateway-service.yaml",
    "chars": 668,
    "preview": "{{- if .Values.gateway.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"ditto-digital-twins.fullna"
  },
  {
    "path": "charts/ditto-digital-twins/templates/mongodb-secret.yaml",
    "chars": 629,
    "preview": "apiVersion: v1\nkind: Secret\nmetadata:\n  name: {{ include \"ditto-digital-twins.fullname\" . }}-mongodb-secret\n  labels:\n  "
  },
  {
    "path": "charts/ditto-digital-twins/templates/nginx-config.yaml",
    "chars": 581,
    "preview": "{{- if .Values.nginx.enabled -}}\n{{- $releaseName := .Release.Name -}}\n{{- $name := include \"ditto-digital-twins.name\" ."
  },
  {
    "path": "charts/ditto-digital-twins/templates/nginx-configmap.yaml",
    "chars": 5699,
    "preview": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: {{ .Release.Name }}-nginx-conf\n  labels:\n    app.kubernetes.io/name: {{"
  },
  {
    "path": "charts/ditto-digital-twins/templates/nginx-deployment.yaml",
    "chars": 3616,
    "preview": "{{- if .Values.nginx.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"ditto-digital-twins."
  },
  {
    "path": "charts/ditto-digital-twins/templates/nginx-ingress.yaml",
    "chars": 1080,
    "preview": "{{- if .Values.ingress.enabled -}}\n{{- $fullName := include \"ditto-digital-twins.fullname\" . -}}\n{{- if semverCompare \">"
  },
  {
    "path": "charts/ditto-digital-twins/templates/nginx-service.yaml",
    "chars": 689,
    "preview": "{{- if .Values.nginx.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"ditto-digital-twins.fullname"
  },
  {
    "path": "charts/ditto-digital-twins/templates/policies-deployment.yaml",
    "chars": 5330,
    "preview": "{{- if .Values.policies.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"ditto-digital-twi"
  },
  {
    "path": "charts/ditto-digital-twins/templates/policies-networkpolicy.yaml",
    "chars": 884,
    "preview": "{{- if .Values.policies.networkPolicy.enabled }}\nkind: NetworkPolicy\napiVersion: networking.k8s.io/v1\nmetadata:\n  name: "
  },
  {
    "path": "charts/ditto-digital-twins/templates/policies-pdb.yaml",
    "chars": 626,
    "preview": "{{- if and .Values.policies.podDisruptionBudget.enabled (gt .Values.policies.replicaCount 1.0) -}}\napiVersion: policy/v1"
  },
  {
    "path": "charts/ditto-digital-twins/templates/role.yaml",
    "chars": 379,
    "preview": "{{- if .Values.rbac.enabled -}}\nkind: Role\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n  name: {{ include \"ditto-"
  },
  {
    "path": "charts/ditto-digital-twins/templates/rolebinding.yaml",
    "chars": 519,
    "preview": "{{- if .Values.rbac.enabled -}}\nkind: RoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n  name: {{ include "
  },
  {
    "path": "charts/ditto-digital-twins/templates/serviceaccount.yaml",
    "chars": 302,
    "preview": "{{- if .Values.serviceAccount.create -}}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: {{ template \"ditto-digita"
  },
  {
    "path": "charts/ditto-digital-twins/templates/swaggerui-config.yaml",
    "chars": 359,
    "preview": "{{- if .Values.swaggerui.enabled -}}\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: {{ include \"ditto-digital-twins.fu"
  },
  {
    "path": "charts/ditto-digital-twins/templates/swaggerui-deployment.yaml",
    "chars": 2026,
    "preview": "{{- if .Values.swaggerui.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"ditto-digital-tw"
  },
  {
    "path": "charts/ditto-digital-twins/templates/swaggerui-networkpolicy.yaml",
    "chars": 799,
    "preview": "{{- if .Values.swaggerui.networkPolicy.enabled }}\nkind: NetworkPolicy\napiVersion: networking.k8s.io/v1\nmetadata:\n  name:"
  },
  {
    "path": "charts/ditto-digital-twins/templates/swaggerui-pdb.yaml",
    "chars": 632,
    "preview": "{{- if and .Values.swaggerui.podDisruptionBudget.enabled (gt .Values.swaggerui.replicaCount 1.0) -}}\napiVersion: policy/"
  },
  {
    "path": "charts/ditto-digital-twins/templates/swaggerui-service.yaml",
    "chars": 672,
    "preview": "{{- if .Values.swaggerui.enabled -}}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"ditto-digital-twins.full"
  },
  {
    "path": "charts/ditto-digital-twins/templates/things-deployment.yaml",
    "chars": 5266,
    "preview": "{{- if .Values.things.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"ditto-digital-twins"
  },
  {
    "path": "charts/ditto-digital-twins/templates/things-networkpolicy.yaml",
    "chars": 1151,
    "preview": "{{- if .Values.things.networkPolicy.enabled }}\nkind: NetworkPolicy\napiVersion: networking.k8s.io/v1\nmetadata:\n  name: {{"
  },
  {
    "path": "charts/ditto-digital-twins/templates/things-pdb.yaml",
    "chars": 614,
    "preview": "{{- if and .Values.things.podDisruptionBudget.enabled (gt .Values.things.replicaCount 1.0) -}}\napiVersion: policy/v1beta"
  },
  {
    "path": "charts/ditto-digital-twins/templates/thingssearch-deployment.yaml",
    "chars": 5446,
    "preview": "{{- if .Values.thingsSearch.enabled -}}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"ditto-digital"
  },
  {
    "path": "charts/ditto-digital-twins/templates/thingssearch-networkpolicy.yaml",
    "chars": 900,
    "preview": "{{- if .Values.thingsSearch.networkPolicy.enabled }}\nkind: NetworkPolicy\napiVersion: networking.k8s.io/v1\nmetadata:\n  na"
  },
  {
    "path": "charts/ditto-digital-twins/templates/thingssearch-pdb.yaml",
    "chars": 632,
    "preview": "{{- if and .Values.things.podDisruptionBudget.enabled (gt .Values.things.replicaCount 1.0) -}}\napiVersion: policy/v1beta"
  },
  {
    "path": "charts/ditto-digital-twins/values.yaml",
    "chars": 24071,
    "preview": "# Default values for ditto-digital-twins.\n# This is a YAML-formatted file.\n# Declare variables to be passed into your te"
  },
  {
    "path": "charts/enmasse/.helmignore",
    "chars": 342,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/enmasse/Chart.yaml",
    "chars": 315,
    "preview": "apiVersion: v1\nappVersion: \"0.30.1\"\ndescription: A Helm chart for enmasse\nname: enmasse\nversion: 0.1.0\nhome: https://enm"
  },
  {
    "path": "charts/enmasse/ci/test-values.yaml",
    "chars": 29,
    "preview": "enmasse-crd:\n  enabled: true\n"
  },
  {
    "path": "charts/enmasse/requirements.yaml",
    "chars": 125,
    "preview": "dependencies:\n- name: enmasse-crd\n  version: 0.1.0\n  repository: https://kiwigrid.github.io/\n  condition: enmasse-crd.en"
  },
  {
    "path": "charts/enmasse/templates/NOTES.txt",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "charts/enmasse/templates/_helpers.tpl",
    "chars": 1727,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"enmasse.name\" -}}\n{{- default "
  },
  {
    "path": "charts/enmasse/templates/api-server-cert-secret.yaml",
    "chars": 435,
    "preview": "{{- $cn := printf \"%s.%s.svc.cluster.local\" ( include \"enmasse.fullname\" . ) .Release.Namespace }}\n{{- $ca := genCA \"enm"
  },
  {
    "path": "charts/enmasse/templates/api-service-v1alpha1-enmasse-io.yaml",
    "chars": 412,
    "preview": "apiVersion: apiregistration.k8s.io/v1beta1\nkind: APIService\nmetadata:\n  name: v1alpha1.enmasse.io\n  labels:\n{{ include \""
  },
  {
    "path": "charts/enmasse/templates/api-service-v1alpha1-user-enmasse-io.yaml",
    "chars": 394,
    "preview": "apiVersion: apiregistration.k8s.io/v1beta1\nkind: APIService\nmetadata:\n  labels:\n{{ include \"enmasse.labels\" . | indent 4"
  },
  {
    "path": "charts/enmasse/templates/api-service-v1beta1-enmasse-io.yaml",
    "chars": 382,
    "preview": "apiVersion: apiregistration.k8s.io/v1beta1\nkind: APIService\nmetadata:\n  labels:\n{{ include \"enmasse.labels\" . | indent 4"
  },
  {
    "path": "charts/enmasse/templates/api-service-v1beta1-user-enmasse-io.yaml",
    "chars": 392,
    "preview": "apiVersion: apiregistration.k8s.io/v1beta1\nkind: APIService\nmetadata:\n  labels:\n{{ include \"enmasse.labels\" . | indent 4"
  },
  {
    "path": "charts/enmasse/templates/cluster-role-api-server.yaml",
    "chars": 569,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: {{ include \""
  },
  {
    "path": "charts/enmasse/templates/cluster-role-binding-api-server.yaml",
    "chars": 469,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: {{ in"
  },
  {
    "path": "charts/enmasse/templates/cluster-role-binding-enmasse-operator.yaml",
    "chars": 463,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: {{ in"
  },
  {
    "path": "charts/enmasse/templates/cluster-role-binding-standard-authservice.yaml",
    "chars": 499,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: {{ in"
  },
  {
    "path": "charts/enmasse/templates/cluster-role-enmasse-operator.yaml",
    "chars": 355,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: {{ include \""
  },
  {
    "path": "charts/enmasse/templates/cluster-role-standard-authservice.yaml",
    "chars": 336,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  name: {{ include \""
  },
  {
    "path": "charts/enmasse/templates/deployment-address-space-controller.yaml",
    "chars": 3445,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  labels:\n{{ include \"enmasse.labels\" . | indent 4 }}\n  name: {{ include "
  },
  {
    "path": "charts/enmasse/templates/deployment-api-server.yaml",
    "chars": 2443,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  labels:\n{{ include \"enmasse.labels\" . | indent 4 }}\n  name: {{ include "
  },
  {
    "path": "charts/enmasse/templates/deployment-enmasse-operator.yaml",
    "chars": 1739,
    "preview": "kind: Deployment\napiVersion: apps/v1\nmetadata:\n  name: {{ include \"enmasse.fullname\" . }}-operator\n  labels:\n{{ include "
  },
  {
    "path": "charts/enmasse/templates/role-address-space-admin.yaml",
    "chars": 1100,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  name: {{ include \"enmasse"
  },
  {
    "path": "charts/enmasse/templates/role-address-space-controller.yaml",
    "chars": 1481,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  name: {{ include \"enmasse"
  },
  {
    "path": "charts/enmasse/templates/role-api-server.yaml",
    "chars": 698,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  name: {{ include \"enmasse"
  },
  {
    "path": "charts/enmasse/templates/role-binding-address-space-admin.yaml",
    "chars": 447,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  name: {{ include \""
  },
  {
    "path": "charts/enmasse/templates/role-binding-address-space-controller.yaml",
    "chars": 497,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  name: {{ include \""
  },
  {
    "path": "charts/enmasse/templates/role-binding-api-server.yaml",
    "chars": 455,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  name: {{ include \""
  },
  {
    "path": "charts/enmasse/templates/role-binding-enmasse-operator.yaml",
    "chars": 449,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  name: {{ include \""
  },
  {
    "path": "charts/enmasse/templates/role-enmasse-operator.yaml",
    "chars": 1251,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  name: {{ include \"enmasse"
  },
  {
    "path": "charts/enmasse/templates/service-account-address-space-admin.yaml",
    "chars": 169,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: address-space-admin\n  labels:\n{{ in"
  },
  {
    "path": "charts/enmasse/templates/service-account-address-space-controller.yaml",
    "chars": 209,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: {{ include \"enmasse.fullname\" . }}-"
  },
  {
    "path": "charts/enmasse/templates/service-account-api-server.yaml",
    "chars": 195,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: {{ include \"enmasse.fullname\" . }}-"
  },
  {
    "path": "charts/enmasse/templates/service-account-enmasse-operator.yaml",
    "chars": 193,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: {{ include \"enmasse.fullname\" . }}-"
  },
  {
    "path": "charts/enmasse/templates/service-account-standard-authservice.yaml",
    "chars": 205,
    "preview": "{{- if .Values.rbac.enabled }}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: {{ include \"enmasse.fullname\" . }}-"
  },
  {
    "path": "charts/enmasse/templates/service-address-space-controller.yaml",
    "chars": 532,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"enmasse.fullname\" . }}-address-space-controller\n  labels:\n{{ "
  },
  {
    "path": "charts/enmasse/templates/service-api-server.yaml",
    "chars": 718,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"enmasse.fullname\" . }}-api-server\n  labels:\n{{ include \"enmas"
  },
  {
    "path": "charts/enmasse/values.yaml",
    "chars": 3669,
    "preview": "# Default values for enmasse.\n# This is a YAML-formatted file.\n# Declare variables to be passed into your templates.\n\nen"
  },
  {
    "path": "charts/enmasse-crd/.helmignore",
    "chars": 342,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/enmasse-crd/Chart.yaml",
    "chars": 329,
    "preview": "apiVersion: v1\nappVersion: \"0.30.1\"\ndescription: A Helm chart for enmasse CRD's\nname: enmasse-crd\nversion: 0.1.0\nhome: h"
  },
  {
    "path": "charts/enmasse-crd/templates/NOTES.txt",
    "chars": 34,
    "preview": "Enmasse CRD's successful installed"
  },
  {
    "path": "charts/enmasse-crd/templates/_helpers.tpl",
    "chars": 1759,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"enmasse-crd.name\" -}}\n{{- defa"
  },
  {
    "path": "charts/enmasse-crd/templates/addressplans.crd.yaml",
    "chars": 1791,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  name: addressplans.admin.enmasse.io "
  },
  {
    "path": "charts/enmasse-crd/templates/addressspaceplans.crd.yaml",
    "chars": 2131,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  name: addressspaceplans.admin.enmass"
  },
  {
    "path": "charts/enmasse-crd/templates/authenticationservices.crd.yaml",
    "chars": 5630,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  name: authenticationservices.admin.e"
  },
  {
    "path": "charts/enmasse-crd/templates/brokeredinfraconfigs.crd.yaml",
    "chars": 3318,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  name: brokeredinfraconfigs.admin.enm"
  },
  {
    "path": "charts/enmasse-crd/templates/consoleservices.crd.yaml",
    "chars": 1564,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  name: consoleservices.admin.enmasse."
  },
  {
    "path": "charts/enmasse-crd/templates/iotconfigs.crd.yaml",
    "chars": 508,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  name: iotconfigs.iot.enmasse.io\n  la"
  },
  {
    "path": "charts/enmasse-crd/templates/iotprojects.crd.yaml",
    "chars": 1027,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  name: iotprojects.iot.enmasse.io\n  l"
  },
  {
    "path": "charts/enmasse-crd/templates/standardinfraconfigs.crd.yaml",
    "chars": 5151,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  name: standardinfraconfigs.admin.enm"
  },
  {
    "path": "charts/enmasse-crd/values.yaml",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "charts/error-pages/.helmignore",
    "chars": 342,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/error-pages/Chart.yaml",
    "chars": 292,
    "preview": "apiVersion: v1\nappVersion: \"1.0\"\ndescription: A Helm chart for Kubernetes error pages for traefik\nname: error-pages\nvers"
  },
  {
    "path": "charts/error-pages/README.md",
    "chars": 2214,
    "preview": "# Global Error Pages\n\n## Introduction\n\nThis chart installs a controller for [Traefik](https://traefik.io/) global [error"
  },
  {
    "path": "charts/error-pages/templates/NOTES.txt",
    "chars": 41,
    "preview": "Your error page service is up and running"
  },
  {
    "path": "charts/error-pages/templates/_helpers.tpl",
    "chars": 1057,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"error-pages.name\" -}}\n{{- defa"
  },
  {
    "path": "charts/error-pages/templates/deployment.yaml",
    "chars": 1379,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"error-pages.fullname\" . }}\n  labels:\n    app.kubernet"
  },
  {
    "path": "charts/error-pages/templates/ingress.yaml",
    "chars": 773,
    "preview": "{{- if .Values.ingress.enabled -}}\n{{- $fullName := include \"error-pages.fullname\" . -}}\napiVersion: networking.k8s.io/v"
  },
  {
    "path": "charts/error-pages/templates/service.yaml",
    "chars": 599,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"error-pages.fullname\" . }}\n  labels:\n    app.kubernetes.io/na"
  },
  {
    "path": "charts/error-pages/values.yaml",
    "chars": 891,
    "preview": "# Default values for error-pages.\n# This is a YAML-formatted file.\n# Declare variables to be passed into your templates."
  },
  {
    "path": "charts/fluentd-elasticsearch/Chart.yaml",
    "chars": 720,
    "preview": "apiVersion: v1\nname: fluentd-elasticsearch\nversion: 9.6.2\nappVersion: 3.0.4\nhome: https://www.fluentd.org/\ndescription: "
  },
  {
    "path": "charts/fluentd-elasticsearch/OWNERS",
    "chars": 60,
    "preview": "approvers:\n- axdotl\n- monotek\nreviewers:\n- axdotl\n- monotek\n"
  },
  {
    "path": "charts/fluentd-elasticsearch/README.md",
    "chars": 27811,
    "preview": "# !DEPRECATED! - Fluentd Elasticsearch\n\n**!! Chart has been deprecated and moved to <https://github.com/kokuwaio/helm-ch"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/NOTES.txt",
    "chars": 1887,
    "preview": "1. To verify that Fluentd has started, run:\n\n  kubectl --namespace={{ .Release.Namespace }} get pods -l \"app.kubernetes."
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/_helpers.tpl",
    "chars": 1838,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"fluentd-elasticsearch.name\" -}"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/clusterrole.yaml",
    "chars": 584,
    "preview": "{{- if .Values.rbac.create -}}\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0 -}}\nkind: Clu"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/clusterrolebinding.yaml",
    "chars": 821,
    "preview": "{{- if .Values.rbac.create -}}\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0 -}}\nkind: Clu"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/configmaps.yaml",
    "chars": 19239,
    "preview": "\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0 -}}\napiVersion: v1\nkind: ConfigMap\nmetadata"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/daemonset.yaml",
    "chars": 10660,
    "preview": "\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0 -}}\n{{- if semverCompare \">= 1.9\" $striped_"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/metrics-service.yaml",
    "chars": 814,
    "preview": "{{- if or (.Values.serviceMonitor.enabled) (.Values.serviceMetric.enabled) }}\n{{- $striped_version := (split \"-\" .Capabi"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/pod-security-policy.yaml",
    "chars": 1459,
    "preview": "{{- if .Values.podSecurityPolicy.enabled }}\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0 "
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/prometheusrule.yaml",
    "chars": 2605,
    "preview": "{{- if .Values.prometheusRule.enabled }}\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0 -}}"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/role.yaml",
    "chars": 741,
    "preview": "{{- if .Values.podSecurityPolicy.enabled }}\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0 "
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/rolebinding.yaml",
    "chars": 735,
    "preview": "\n{{- if .Values.podSecurityPolicy.enabled }}\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/service-account.yaml",
    "chars": 868,
    "preview": "{{- if .Values.serviceAccount.create -}}\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0 -}}"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/service.yaml",
    "chars": 1075,
    "preview": "{{- if .Values.service }}\n{{- range $port := .Values.service.ports  }}\n{{- $service_type := $port.type | default \"Cluste"
  },
  {
    "path": "charts/fluentd-elasticsearch/templates/servicemonitor.yaml",
    "chars": 1348,
    "preview": "{{- if .Values.serviceMonitor.enabled }}\n{{- $striped_version := (split \"-\" .Capabilities.KubeVersion.GitVersion)._0 -}}"
  },
  {
    "path": "charts/fluentd-elasticsearch/values.yaml",
    "chars": 8208,
    "preview": "image:\n  repository: quay.io/fluentd_elasticsearch/fluentd\n## Specify an imagePullPolicy (Required)\n## It's recommended "
  },
  {
    "path": "charts/gcp-serviceaccount-controller/Chart.yaml",
    "chars": 380,
    "preview": "apiVersion: v1\nappVersion: \"0.3.0\"\ndescription: A Helm chart for a Kubernetes Controller to create secrets for GCP Servi"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/README.md",
    "chars": 4341,
    "preview": "# Gcp Service Account Controller\n\n- **Source:** https://github.com/kiwigrid/gcp-serviceaccount-controller\n\n[gcp-servicea"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/templates/NOTES.txt",
    "chars": 504,
    "preview": "{{- if and (eq \"\" .Values.gcpCredentials) (not .Values.existingSecret)}}\nNo Service Account key or existing secret defin"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/templates/_helpers.tpl",
    "chars": 1111,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"gcp-serviceaccount-controller."
  },
  {
    "path": "charts/gcp-serviceaccount-controller/templates/gcpnamespacerestriction_crd.yaml",
    "chars": 2847,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    controller-gen.kube"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/templates/gcpserviceaccount_crd.yaml",
    "chars": 3631,
    "preview": "apiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n  annotations:\n    controller-gen.kube"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/templates/rbac_role.yaml",
    "chars": 1131,
    "preview": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  labels:\n    app.kubernetes.io/name: {{ include \"g"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/templates/rbac_role_binding.yaml",
    "chars": 552,
    "preview": "apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: manager-rolebinding\n  labels:\n    ap"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/templates/secret.yaml",
    "chars": 485,
    "preview": "{{- if not .Values.existingSecret }}\napiVersion: v1\nkind: Secret\nmetadata:\n  name: {{ include \"gcp-serviceaccount-contro"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/templates/service.yaml",
    "chars": 663,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"gcp-serviceaccount-controller.fullname\" . }}\n  labels:\n    ap"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/templates/stateful_set.yaml",
    "chars": 2469,
    "preview": "apiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: {{ include \"gcp-serviceaccount-controller.fullname\" . }}\n  label"
  },
  {
    "path": "charts/gcp-serviceaccount-controller/values.yaml",
    "chars": 537,
    "preview": "image:\n  repository: kiwigrid/gcp-serviceaccount-controller\n  tag: 0.3.0\n  pullPolicy: IfNotPresent\n\nnameOverride: \"\"\nfu"
  },
  {
    "path": "charts/grafana-dashboards/.helmignore",
    "chars": 349,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/grafana-dashboards/Chart.yaml",
    "chars": 392,
    "preview": "apiVersion: v1\nname: grafana-dashboards\ndescription: A Helm chart to import Grafana Dashboards\nversion: 0.2.0\nicon: http"
  },
  {
    "path": "charts/grafana-dashboards/README.md",
    "chars": 759,
    "preview": "# grafana-dashboards\n\nThis charts will convert all Grafana dashboards saved as json file in the dashboards directory to "
  },
  {
    "path": "charts/grafana-dashboards/dashboards/grafana-dummy-dashboard.json",
    "chars": 2857,
    "preview": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": \"-- Grafana --\",\n      "
  },
  {
    "path": "charts/grafana-dashboards/templates/NOTES.txt",
    "chars": 210,
    "preview": "Following dahsboards will be imported to Grafana (if sidecar import enabled):\n\n{{- $root := . }}\n{{ range $path, $bytes "
  },
  {
    "path": "charts/grafana-dashboards/templates/_helpers.tpl",
    "chars": 1607,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"grafana-dashboards.name\" -}}\n{"
  },
  {
    "path": "charts/grafana-dashboards/templates/configmap.yaml",
    "chars": 712,
    "preview": "{{ $root := . }}\n{{ range $path, $_ :=  .Files.Glob  \"dashboards/**.json\" }}\n{{- with $root }}\napiVersion: v1\nkind: Conf"
  },
  {
    "path": "charts/grafana-dashboards/values.yaml",
    "chars": 312,
    "preview": "## labels to be added to the config maps\nlabels:\n  ## grafana_dashboard Enables dashboard import via Grafana sidecar\n  #"
  },
  {
    "path": "charts/graphite/.helmignore",
    "chars": 333,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/graphite/Chart.yaml",
    "chars": 447,
    "preview": "apiVersion: v2\nversion: 2.0.0\nappVersion: \"1.1.10-3\"\ndescription: Graphite metrics server\nname: graphite\nhome: https://g"
  },
  {
    "path": "charts/graphite/OWNERS",
    "chars": 78,
    "preview": "approvers:\n- fabian-schlegel\n- monotek\nreviewers:\n- fabian-schlegel\n- monotek\n"
  },
  {
    "path": "charts/graphite/README.md",
    "chars": 6251,
    "preview": "# Graphite\n\n[Graphite](https://graphiteapp.org/) is a monitoring tool.\n\n## Introduction\n\nThis chart uses graphiteapp/gra"
  },
  {
    "path": "charts/graphite/templates/NOTES.txt",
    "chars": 1448,
    "preview": "1. Get the application URL by running these commands:\n{{- if .Values.ingress.enabled }}\n{{- range .Values.ingress.hosts "
  },
  {
    "path": "charts/graphite/templates/_helpers.tpl",
    "chars": 1208,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"graphite.name\" -}}\n{{- default"
  },
  {
    "path": "charts/graphite/templates/configmap-statsd.yaml",
    "chars": 446,
    "preview": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: {{ template \"graphite.fullname\" . }}-statsd-configmap\n  labels:\n    app"
  },
  {
    "path": "charts/graphite/templates/configmap.yaml",
    "chars": 369,
    "preview": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: {{ template \"graphite.fullname\" . }}-configmap\n  labels:\n    app: {{ te"
  },
  {
    "path": "charts/graphite/templates/ingress.yaml",
    "chars": 1088,
    "preview": "{{- if .Values.ingress.enabled -}}\n{{- $fullName := include \"graphite.fullname\" . -}}\n{{- $ingressPath := .Values.ingres"
  },
  {
    "path": "charts/graphite/templates/pvc.yaml",
    "chars": 810,
    "preview": "{{- if .Values.persistence.enabled -}}\n{{- if not .Values.persistence.existingClaim -}}\nkind: PersistentVolumeClaim\napiV"
  },
  {
    "path": "charts/graphite/templates/role.yaml",
    "chars": 616,
    "preview": "---\n{{- if .Values.rbac.create }}\nkind: Role\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n  name: {{ include \"grap"
  },
  {
    "path": "charts/graphite/templates/rolebinding.yaml",
    "chars": 718,
    "preview": "---\n{{- if .Values.rbac.create }}\nkind: RoleBinding\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n  name: {{ includ"
  },
  {
    "path": "charts/graphite/templates/service.yaml",
    "chars": 1222,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: {{ template \"graphite.fullname\" . }}\n  labels:\n    app.kubernetes.io/name"
  },
  {
    "path": "charts/graphite/templates/serviceaccount.yaml",
    "chars": 460,
    "preview": "{{- if and (.Values.serviceAccount.enabled) (.Values.serviceAccount.create) }}\napiVersion: v1\nkind: ServiceAccount\nmetad"
  },
  {
    "path": "charts/graphite/templates/statefulset.yaml",
    "chars": 3805,
    "preview": "apiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: {{ template \"graphite.fullname\" . }}\n  labels:\n    app.kubernete"
  },
  {
    "path": "charts/graphite/values.yaml",
    "chars": 43885,
    "preview": "# Default values for graphite.\n\nimage:\n  repository: graphiteapp/graphite-statsd\n  tag: 1.1.7-6\n  pullPolicy: IfNotPrese"
  },
  {
    "path": "charts/hawkbit-update-server/.helmignore",
    "chars": 342,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/hawkbit-update-server/Chart.yaml",
    "chars": 385,
    "preview": "apiVersion: v1\nversion: 2.1.2\nappVersion: \"0.3.0M5-mysql\"\ndescription: A Helm chart for hawkbit update server\nname: hawk"
  },
  {
    "path": "charts/hawkbit-update-server/README.md",
    "chars": 11221,
    "preview": "# Hawkbit update server (DEPRECATED!)\n\n## THIS CHART IS DEPRECATED AS WAS MOVED TO:\n* https://github.com/eclipse/package"
  },
  {
    "path": "charts/hawkbit-update-server/requirements.yaml",
    "chars": 280,
    "preview": "dependencies:\n  - name: mysql\n    version: 1.3.2\n    repository: https://kubernetes-charts.storage.googleapis.com/\n    c"
  },
  {
    "path": "charts/hawkbit-update-server/templates/NOTES.txt",
    "chars": 1590,
    "preview": "1. Get the application URL by running these commands:\n{{- if .Values.ingress.enabled }}\n{{- range $host := .Values.ingre"
  },
  {
    "path": "charts/hawkbit-update-server/templates/_helpers.tpl",
    "chars": 1499,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"hawkbit-update-server.name\" -}"
  },
  {
    "path": "charts/hawkbit-update-server/templates/configmap.yaml",
    "chars": 247,
    "preview": "kind: ConfigMap\napiVersion: v1\nmetadata:\n  name: {{ include \"hawkbit-update-server.fullname\" . }}\n  labels:\n{{ include \""
  },
  {
    "path": "charts/hawkbit-update-server/templates/deployment.yaml",
    "chars": 4447,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"hawkbit-update-server.fullname\" . }}\n  labels:\n{{ inc"
  },
  {
    "path": "charts/hawkbit-update-server/templates/ingress.yaml",
    "chars": 866,
    "preview": "{{- if .Values.ingress.enabled -}}\n{{- $fullName := include \"hawkbit-update-server.fullname\" . -}}\napiVersion: extension"
  },
  {
    "path": "charts/hawkbit-update-server/templates/poddisruptionbudget.yaml",
    "chars": 507,
    "preview": "{{- if and .Values.podDisruptionBudget.enabled (gt .Values.replicaCount 1.0) -}}\napiVersion: policy/v1beta1\nkind: PodDis"
  },
  {
    "path": "charts/hawkbit-update-server/templates/secrets.yaml",
    "chars": 724,
    "preview": "apiVersion: v1\nkind: Secret\nmetadata:\n  name: {{ template \"hawkbit-update-server.fullname\" . }}\n  labels:\n{{ include \"ha"
  },
  {
    "path": "charts/hawkbit-update-server/templates/service.yaml",
    "chars": 552,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"hawkbit-update-server.fullname\" . }}\n  labels:\n{{ include \"ha"
  },
  {
    "path": "charts/hawkbit-update-server/templates/tests/test-connection.yaml",
    "chars": 613,
    "preview": "apiVersion: v1\nkind: Pod\nmetadata:\n  name: \"{{ include \"hawkbit-update-server.fullname\" . }}-test-connection\"\n  labels:\n"
  },
  {
    "path": "charts/hawkbit-update-server/values.yaml",
    "chars": 3735,
    "preview": "image:\n  repository: \"hawkbit/hawkbit-update-server\"\n  tag: 0.3.0M5-mysql\n  pullPolicy: IfNotPresent\n\nreplicaCount: 1\n\n#"
  },
  {
    "path": "charts/influxdb-backup/.helmignore",
    "chars": 349,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/influxdb-backup/Chart.yaml",
    "chars": 428,
    "preview": "apiVersion: v1\nversion: 0.2.0\nappVersion: 1.7.10\nname: influxdb-backup\ndescription: InfluxDB backup Helm chart for Kuber"
  },
  {
    "path": "charts/influxdb-backup/README.md",
    "chars": 12135,
    "preview": "# InfluxDB-Backup\n\n## Introduction\n\nThis Helm chart is able to backup multiple InfluxDB instances and upload it to a sto"
  },
  {
    "path": "charts/influxdb-backup/ci/test-values.yaml",
    "chars": 32,
    "preview": "backup:\n  schedule: \"* * * * *\"\n"
  },
  {
    "path": "charts/influxdb-backup/templates/NOTES.txt",
    "chars": 1245,
    "preview": "{{- if not .Values.backup.restore.enabled }}\n{{- if .Values.backup.instances}}\nThe following InfluxDB Backups are set up"
  },
  {
    "path": "charts/influxdb-backup/templates/_helpers.tpl",
    "chars": 1582,
    "preview": "{{/* vim: set filetype=mustache: */}}\n{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"influxdb-backup.name\" -}}\n{{- "
  }
]

// ... and 133 more files (download for full content)

About this extraction

This page contains the full source code of the kiwigrid/helm-charts GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 333 files (898.4 KB), approximately 221.8k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!