From 3b202576a4e6d91f93a398d18d87d5dbb7a25223 Mon Sep 17 00:00:00 2001 From: Ruben Vargas Date: Tue, 7 Mar 2023 03:17:34 -0600 Subject: [PATCH] Website documentation (#274) * website documentation Signed-off-by: Ruben Vargas * add tempo-operator slack to contributing Signed-off-by: Ruben Vargas * change website base url default Signed-off-by: Ruben Vargas * fix LICENCE and README.md links Signed-off-by: Ruben Vargas --------- Signed-off-by: Ruben Vargas --- .gitignore | 6 + .gitmodules | 3 + ADOPTERS.md | 32 + CONTRIBUTING.md | 46 + Dockerfile | 2 +- Makefile | 73 +- apis/config/v1alpha1/doc.go | 4 + apis/tempo/register.go | 1 + apis/tempo/v1alpha1/doc.go | 4 + config/docs/config.json | 64 + config/docs/templates/members.tpl | 45 + config/docs/templates/pkg.tpl | 39 + config/docs/templates/type.tpl | 80 + docs/_index.md | 13 + docs/api.md | 2090 --------------- docs/operator/api.md | 3658 +++++++++++++++++++++++++++ docs/operator/compatibility.md | 29 + docs/operator/feature-gates.md | 963 +++++++ docs/prologue/_index.md | 9 + docs/prologue/introduction.md | 27 + docs/tempostack/object_storage.md | 49 + package-lock.json | 1242 +++++++++ package.json | 5 + website/.hugo_build.lock | 0 website/archetypes/default.md | 6 + website/archetypes/docs.md | 16 + website/assets/js/clipboard.js | 18 + website/assets/js/index.js | 140 + website/assets/scss/_variables.scss | 3 + website/assets/scss/app.scss | 37 + website/config.toml | 14 + website/config/_default/config.toml | 27 + website/config/_default/menus.toml | 34 + website/config/_default/params.toml | 47 + website/config/postcss.config.js | 32 + website/content/_index.md | 9 + website/content/adopters.md | 1 + website/content/docs | 1 + website/layouts/index.html | 43 + website/node_modules | 1 + website/static/logo.png | Bin 0 -> 15750 bytes website/static/site.webmanifest | 19 + website/themes/doks | 1 + 43 files changed, 6827 insertions(+), 2106 deletions(-) create mode 100644 .gitmodules create mode 100644 ADOPTERS.md create mode 100644 CONTRIBUTING.md create mode 100644 apis/config/v1alpha1/doc.go create mode 100644 apis/tempo/register.go create mode 100644 apis/tempo/v1alpha1/doc.go create mode 100644 config/docs/config.json create mode 100644 config/docs/templates/members.tpl create mode 100644 config/docs/templates/pkg.tpl create mode 100644 config/docs/templates/type.tpl create mode 100644 docs/_index.md delete mode 100644 docs/api.md create mode 100644 docs/operator/api.md create mode 100644 docs/operator/compatibility.md create mode 100644 docs/operator/feature-gates.md create mode 100644 docs/prologue/_index.md create mode 100644 docs/prologue/introduction.md create mode 100644 docs/tempostack/object_storage.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 website/.hugo_build.lock create mode 100644 website/archetypes/default.md create mode 100644 website/archetypes/docs.md create mode 100644 website/assets/js/clipboard.js create mode 100644 website/assets/js/index.js create mode 100644 website/assets/scss/_variables.scss create mode 100644 website/assets/scss/app.scss create mode 100644 website/config.toml create mode 100644 website/config/_default/config.toml create mode 100644 website/config/_default/menus.toml create mode 100644 website/config/_default/params.toml create mode 100644 website/config/postcss.config.js create mode 100644 website/content/_index.md create mode 120000 website/content/adopters.md create mode 120000 website/content/docs create mode 100644 website/layouts/index.html create mode 120000 website/node_modules create mode 100644 website/static/logo.png create mode 100644 website/static/site.webmanifest create mode 160000 website/themes/doks diff --git a/.gitignore b/.gitignore index 87689c5bc..af93dd08f 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,9 @@ bin/ # Files generated by e2e tests kubeconfig + +# website + +website/public/* +website/resources/* +docs/prologue/contributing.md diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..7ef6eb610 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "website/themes/doks"] + path = website/themes/doks + url = https://github.com/h-enk/doks.git diff --git a/ADOPTERS.md b/ADOPTERS.md new file mode 100644 index 000000000..bb0e42b65 --- /dev/null +++ b/ADOPTERS.md @@ -0,0 +1,32 @@ +--- +title: Adopters +lead: "" +date: 2021-04-30T10:40:00+00:00 +lastmod: 2021-04-30T10:40:00+00:00 +draft: false +images: [] +--- + + + +This document tracks people and use cases for the Tempo Operator in production. By creating a list of production use cases we hope to build a community of advisors that we can reach out to with experience using various the Tempo Operator applications, operation environments, and cluster sizes. The Tempo Operator development team may reach out periodically to check-in on how the Tempo Operator is working in the field and update this list. + + +## Red Hat Inc + +https://www.redhat.com + +Environments: AWS, Azure, Google Cloud, Bare Metal, etc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..8beda2ba6 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,46 @@ +--- +title: Contributing +description: How can I contribute to the Tempo Operator? +lead: "" +lastmod: "2021-03-08T08:48:57+00:00" +draft: false +images: [] +menu: + docs: + parent: prologue +weight: 200 +toc: true +--- + +This project is licensed under the [AGPLv3 license](LICENSE) and accept +contributions via GitHub pull requests. This document outlines some of the +conventions on development workflow, contact points +and other resources to make it easier to get your contribution accepted. + + +# Contributor License Agreement + +By contributing to this project you agree to the Contributor License Agreement. + +# Email and Chat + +The project currently uses the [Grafana Slack](https://grafana.slack.com): +- [#tempo-operator-dev](https://grafana.slack.com/archives/C0414EUU39A) + +## Getting Started + +- Fork the repository on GitHub +- Read the [README](README.md) for build and test instructions +- Play with the project, submit bugs, submit patches! + +## Contribution Flow + +This is a rough outline of what a contributor's workflow looks like: + +- Create a topic branch from where you want to base your work (usually `main`). +- Make commits of logical units. +- Push your changes to a topic branch in your fork of the repository. +- Make sure the tests pass, and add any new tests as appropriate. +- Submit a pull request to the original repository. + +Thanks for your contributions! diff --git a/Dockerfile b/Dockerfile index 0401cd154..96a39c762 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ FROM golang:1.19 as builder WORKDIR /workspace # Cache tool dependencies COPY Makefile Makefile -RUN make controller-gen crdoc kustomize +RUN make controller-gen gen-crd-api-reference-docs kustomize # Copy the Go Modules manifests COPY go.mod go.mod COPY go.sum go.sum diff --git a/Makefile b/Makefile index 94a10dd47..a9a681179 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,13 @@ IMG_REPO ?= tempo-operator IMG ?= ${IMG_PREFIX}/${IMG_REPO}:v${OPERATOR_VERSION} BUNDLE_IMG ?= ${IMG_PREFIX}/${IMG_REPO}-bundle:v${OPERATOR_VERSION} + +# Website generation variables +WEBSITE_DIR ?= website +WEBSITE_BASE_URL ?= https://tempo-operator.netlify.app +HUGO_VERSION = v0.80.0 + + # When the VERBOSE variable is set to 1, all the commands are shown ifeq ("$(VERBOSE)","true") echo_prefix=">>>>" @@ -163,19 +170,20 @@ $(LOCALBIN): ## Tool Versions KUSTOMIZE_VERSION ?= v4.5.5 CONTROLLER_TOOLS_VERSION ?= v0.9.2 -CRDOC_VERSION ?= v0.5.2 -OPERATOR_SDK_VERSION ?= 1.27.0 +GEN_CRD_VERSION ?= v0.0.5 ENVTEST_VERSION ?= latest +OPERATOR_SDK_VERSION ?= 1.27.0 CERTMANAGER_VERSION ?= 1.9.1 ## Tool Binaries KUSTOMIZE ?= $(LOCALBIN)/kustomize-$(KUSTOMIZE_VERSION) CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen-$(CONTROLLER_TOOLS_VERSION) ENVTEST ?= $(LOCALBIN)/setup-envtest-$(ENVTEST_VERSION) -CRDOC = $(LOCALBIN)/crdoc-$(CRDOC_VERSION) +GEN_CRD = $(LOCALBIN)/gen-crd-api-reference-docs-$(GEN_CRD_VERSION) OPERATOR_SDK ?= $(LOCALBIN)/operator-sdk-$(OPERATOR_SDK_VERSION) KIND ?= $(LOCALBIN)/kind KUTTL ?= $(LOCALBIN)/kubectl-kuttl +HUGO ?= $(LOCALBIN)/hugo-$(HUGO_VERSION) # Options for KIND version to use export KUBE_VERSION ?= 1.25 @@ -255,18 +263,10 @@ ci: test ensure-generate-is-noop lint: golangci-lint run -.PHONY: api-docs -api-docs: crdoc kustomize - @{ \ - set -e ;\ - TMP_DIR=$$(mktemp -d) ; \ - $(KUSTOMIZE) build config/crd -o $$TMP_DIR/crd-output.yaml ;\ - $(CRDOC) --resources $$TMP_DIR/crd-output.yaml --output docs/api.md ;\ - } -.PHONY: crdoc -crdoc: ## Download crdoc locally if necessary. - test -s $(LOCALBIN)/crdoc-$(CRDOC_VERSION) || $(call go-get-tool,$(CRDOC), fybrik.io/crdoc,$(CRDOC_VERSION)) +.PHONY: gen-crd-api-reference-docs +gen-crd-api-reference-docs: ## Download gen-crd-api-reference-docs locally if necessary. + test -s $(GEN_CRD) || $(call go-get-tool,$(GEN_CRD),github.com/ViaQ/gen-crd-api-reference-docs,$(GEN_CRD_VERSION)) .PHONY: kustomize @@ -357,7 +357,8 @@ ensure-generate-is-noop: generate bundle @git diff -s --exit-code apis/config/v1alpha1/zz_generated.*.go || (echo "Build failed: a model has been changed but the generated resources aren't up to date. Run 'make generate' and update your PR." && exit 1) @git diff -s --exit-code bundle config || (echo "Build failed: the bundle, config files has been changed but the generated bundle, config files aren't up to date. Run 'make bundle' and update your PR." && git diff && exit 1) @git diff -s --exit-code bundle.Dockerfile || (echo "Build failed: the bundle.Dockerfile file has been changed. The file should be the same as generated one. Run 'make bundle' and update your PR." && git diff && exit 1) - @git diff -s --exit-code docs/api.md || (echo "Build failed: the api.md file has been changed but the generated api.md file isn't up to date. Run 'make api-docs' and update your PR." && git diff && exit 1) + @git diff -s --exit-code docs/operator/api.md || (echo "Build failed: the api.md file has been changed but the generated api.md file isn't up to date. Run 'make api-docs' and update your PR." && git diff && exit 1) + @git diff -s --exit-code docs/operator/feature-gates.md || (echo "Build failed: the feature-gates.md file has been changed but the generated feature-gates.md file isn't up to date. Run 'make api-docs' and update your PR." && git diff && exit 1) .PHONY: cert-manager cert-manager: cmctl @@ -381,3 +382,45 @@ cmctl: mv $$TMP_DIR/cmctl $(CMCTL) ;\ rm -rf $$TMP_DIR ;\ } + +.PHONY: api-docs +api-docs: docs/operator/api.md docs/operator/feature-gates.md + +##@ Website +TYPES_TARGET := $(shell find apis/tempo -type f -iname "*_types.go") +docs/operator/api.md: $(TYPES_TARGET) gen-crd-api-reference-docs + $(GEN_CRD) -api-dir "github.com/os-observability/tempo-operator/apis/tempo/" -config "$(PWD)/config/docs/config.json" -template-dir "$(PWD)/config/docs/templates" -out-file "$(PWD)/$@" + sed -i 's/+docs:/ docs:/' $@ + sed -i 's/+parent:/ parent:/' $@ + sed -i 's/##/\n##/' $@ + sed -i 's/+newline/\n/' $@ + + +FEATURE_GATES_TARGET := $(shell find apis/config -type f -iname "*_types.go") +docs/operator/feature-gates.md: $(FEATURE_GATES_TARGET) gen-crd-api-reference-docs + $(GEN_CRD) -api-dir "github.com/os-observability/tempo-operator/apis/config/v1alpha1/" -config "$(PWD)/config/docs/config.json" -template-dir "$(PWD)/config/docs/templates" -out-file "$(PWD)/$@" + sed -i 's/title: "API"/title: "Feature Gates"/' $@ + sed -i 's/+docs:/ docs:/' $@ + sed -i 's/+parent:/ parent:/' $@ + sed -i 's/##/\n##/' $@ + sed -i 's/+newline/\n/' $@ + +.PHONY: web-pre +web-pre: docs/operator/api.md docs/operator/feature-gates.md + @echo ">> preprocessing docs for website" + @git submodule update --init --recursive + cp CONTRIBUTING.md docs/prologue/contributing.md + sed -i 's/(LICENSE)/(https:\/\/raw.githubusercontent.com\/os-observability\/tempo-operator\/main\/LICENSE)/' docs/prologue/contributing.md + sed -i 's/(README.md)/(https:\/\/github.com\/os-observability\/tempo-operator#readme)/' docs/prologue/contributing.md + cd $(WEBSITE_DIR)/themes/doks/ && npm install && rm -rf content + +.PHONY: web +web: web-pre hugo ## Run production build of the tempo-operator.dev website + cd $(WEBSITE_DIR) && $(HUGO) -b $(WEBSITE_BASE_URL) + +.PHONY: web-serve +web-serve: web-pre ## Run local preview version of the tempo-operator.dev website + @cd $(WEBSITE_DIR) && $(HUGO) serve + +hugo: + test -s $(HUGO) || $(call go-get-tool,$(HUGO),--tags extended github.com/gohugoio/hugo,$(HUGO_VERSION)) diff --git a/apis/config/v1alpha1/doc.go b/apis/config/v1alpha1/doc.go new file mode 100644 index 000000000..327ff06c8 --- /dev/null +++ b/apis/config/v1alpha1/doc.go @@ -0,0 +1,4 @@ +// Package v1alpha1 contains API Schema definitions for the config.tempo v1alpha1 API group. +// +kubebuilder:object:generate=true +// +groupName=config.tempo.grafana.com +package v1alpha1 diff --git a/apis/tempo/register.go b/apis/tempo/register.go new file mode 100644 index 000000000..9d6387db3 --- /dev/null +++ b/apis/tempo/register.go @@ -0,0 +1 @@ +package tempo diff --git a/apis/tempo/v1alpha1/doc.go b/apis/tempo/v1alpha1/doc.go new file mode 100644 index 000000000..d4f577aa0 --- /dev/null +++ b/apis/tempo/v1alpha1/doc.go @@ -0,0 +1,4 @@ +// Package v1alpha1 contains API Schema definitions for the tempo v1alpha1 API group. +// +kubebuilder:object:generate=true +// +groupName=tempo.grafana.com +package v1alpha1 diff --git a/config/docs/config.json b/config/docs/config.json new file mode 100644 index 000000000..ae2d8bc81 --- /dev/null +++ b/config/docs/config.json @@ -0,0 +1,64 @@ +{ + "hideMemberFields": [ + "TypeMeta" + ], + "hideTypePatterns": [ + "ParseError$", + "List$" + ], + "externalPackages": [ + { + "typeMatchPrefix": "^k8s\\.io/apimachinery/pkg/apis/meta/v1\\.Duration$", + "docsURLTemplate": "https://pkg.go.dev/k8s.io/apimachinery/pkg/apis/meta/v1#Duration" + }, + { + "typeMatchPrefix": "^k8s\\.io/apimachinery/pkg/util/intstr\\.IntOrString$", + "docsURLTemplate": "https://pkg.go.dev/k8s.io/apimachinery/pkg/util/intstr#IntOrString" + }, + { + "typeMatchPrefix": "^k8s\\.io/(api|apimachinery/pkg/apis)/", + "docsURLTemplate": "https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#{{lower .TypeIdentifier}}-{{arrIndex .PackageSegments -1}}-{{arrIndex .PackageSegments -2}}" + }, + { + "typeMatchPrefix": "^k8s\\.io/apiextensions-apiserver/pkg/apis/apiextensions/v1\\.JSON$", + "docsURLTemplate": "https://pkg.go.dev/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1#JSON" + }, + { + "typeMatchPrefix": "^github\\.com/os-observability/tempo-operator/apis/tempo/v1alpha1", + "docsURLTemplate": "../v1/api.md#tempo.grafana.com/v1alpha1.{{ .TypeIdentifier}}" + }, + { + "typeMatchPrefix": "^github\\.com/os-observability/tempo-operator/apis/config/v1alpha1", + "docsURLTemplate": "../v1/feature-gates.md#tempo-grafana-com-v1alpha1-{{ .TypeIdentifier}}" + }, + { + "typeMatchPrefix": "^k8s\\.io/component-base/config/v1alpha1\\.LeaderElectionConfiguration$", + "docsURLTemplate": "https://pkg.go.dev/k8s.io/component-base/config#LeaderElectionConfiguration" + }, + { + "typeMatchPrefix": "^sigs\\.k8s\\.io/controller-runtime/pkg/config/v1alpha1\\.ControllerConfigurationSpec$", + "docsURLTemplate": "https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1#ControllerConfigurationSpec" + }, + { + "typeMatchPrefix": "^sigs\\.k8s\\.io/controller-runtime/pkg/config/v1alpha1\\.ControllerMetrics$", + "docsURLTemplate": "https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1#ControllerMetrics" + }, + { + "typeMatchPrefix": "^sigs\\.k8s\\.io/controller-runtime/pkg/config/v1alpha1\\.ControllerHealth$", + "docsURLTemplate": "https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1#ControllerHealth" + }, + { + "typeMatchPrefix": "^sigs\\.k8s\\.io/controller-runtime/pkg/config/v1alpha1\\.ControllerWebhook$", + "docsURLTemplate": "https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1#ControllerWebhook" + } + ], + "typeDisplayNamePrefixOverrides": { + "k8s.io/api/": "Kubernetes ", + "k8s.io/apimachinery/pkg/apis/": "Kubernetes ", + "k8s.io/component-base/config/": "Kubernetes ", + "sigs.k8s.io/controller-runtime/pkg/config/": "K8S Controller-runtime ", + "github.com/os-observability/tempo-operator/apis/tempo/v1alpha1": "Tempo Operator v1alpha1", + "github.com/os-observability/tempo-operator/apis/config/v1alpha1": "Feature Gates" + }, + "markdownDisabled": false +} diff --git a/config/docs/templates/members.tpl b/config/docs/templates/members.tpl new file mode 100644 index 000000000..fa05f205f --- /dev/null +++ b/config/docs/templates/members.tpl @@ -0,0 +1,45 @@ +{{ define "member" }} +{{ if not (hiddenMember .)}} +{{ if fieldEmbedded . }} +{{ range .Type.Members }} +{{ template "member" . }} +{{ end }} +{{ else }} + + + {{ fieldName . }}
+ + {{ if linkMDForType .Type }} + + {{ typeDisplayName .Type }} + + {{ else }} + {{ typeDisplayName .Type }} + {{ end }} + + + + {{ if isOptionalMember .}} + (Optional) + {{ end }} + + {{ safe (renderComments .CommentLines) }} + + {{ if and (eq (.Type.Name.Name) "ObjectMeta") }} + Refer to the Kubernetes API documentation for the fields of the + metadata field. + {{ end }} + + + +{{ end }} +{{ end }} +{{ end }} + +{{ define "members" }} + +{{ range .Members }} +{{ template "member" . }} +{{ end }} + +{{ end }} diff --git a/config/docs/templates/pkg.tpl b/config/docs/templates/pkg.tpl new file mode 100644 index 000000000..e933b3711 --- /dev/null +++ b/config/docs/templates/pkg.tpl @@ -0,0 +1,39 @@ +{{ define "packages" }} +--- +title: "API" +description: "Generated API docs for the Tempo Operator" +lead: "" +draft: false +images: [] +menu: ++docs: ++parent: "operator" +weight: 1000 +toc: true +--- + +This Document contains the types introduced by the Tempo Operator to be consumed by users. + +> This page is automatically generated with `gen-crd-api-reference-docs`. + +{{ range .packages }} + # {{ packageDisplayName . }} { #{{packageMDAnchorID . }} } + {{ with (index .GoPackages 0 )}} + {{ with .DocComments }} +
+ {{ safe (renderComments .) }} +
+ {{ end }} + {{ end }} + + Resource Types: + + {{ range (visibleTypes (sortedTypes .Types))}} + {{ template "type" . }} + {{ end }} +
+ +newline +{{ end }} + +{{ end }} + diff --git a/config/docs/templates/type.tpl b/config/docs/templates/type.tpl new file mode 100644 index 000000000..d8d1ffe15 --- /dev/null +++ b/config/docs/templates/type.tpl @@ -0,0 +1,80 @@ +{{ define "type" }} + +## {{ .Name.Name }} { #{{ anchorIDForTypeMD . }} } + {{ if eq .Kind "Alias" }}({{.Underlying}} alias){{ end -}} +{{ with (typeReferences .) }} +

+ (Appears on: + {{- $prev := "" -}} + {{- range . -}} + {{- if $prev -}}, {{ end -}} + {{- $prev = . -}} + {{ typeDisplayName . }} + {{- end -}} + ) +

+{{ end }} + +
+ {{ safe (renderComments .CommentLines) }} +
+ +{{ with (constantsOfType .) }} + + + + + + + + + {{- range . -}} + + {{- /* + renderComments implicitly creates a

element, so we + add one to the display name as well to make the contents + of the two cells align evenly. + */ -}} +

+ + + {{- end -}} + +
ValueDescription

{{ typeDisplayName . }}

{{ safe (renderComments .CommentLines) }}
+{{ end }} + +{{ if .Members }} + + + + + + + + + {{ if isExportedType . }} + + + + + + + + + {{ end }} + {{ template "members" .}} + +
FieldDescription
+ apiVersion
+ string +
+ + {{apiGroup .}} + +
+ kind
+ string +
{{.Name.Name}}
+{{ end }} + +{{ end }} diff --git a/docs/_index.md b/docs/_index.md new file mode 100644 index 000000000..59f478eca --- /dev/null +++ b/docs/_index.md @@ -0,0 +1,13 @@ +--- +title : "Tempo-Operator Docs" +description: "Documentation for the Tempo-Operator." +lead: "" +date: 2021-04-30T10:40:00+00:00 +lastmod: 2021-04-30T10:40:00+00:00 +draft: false +images: [] +--- + +# Tempo-Operator + +A Kubernetes Operator for Tempo provided by the Grafana Tempo SIG operator. diff --git a/docs/api.md b/docs/api.md deleted file mode 100644 index 5a8381e1d..000000000 --- a/docs/api.md +++ /dev/null @@ -1,2090 +0,0 @@ -# API Reference - -Packages: - -- [tempo.grafana.com/v1alpha1](#tempografanacomv1alpha1) - -# tempo.grafana.com/v1alpha1 - -Resource Types: - -- [TempoStack](#tempostack) - - - - -## TempoStack -[↩ Parent](#tempografanacomv1alpha1 ) - - - - - - -TempoStack is the Schema for the tempostacks API. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
apiVersionstringtempo.grafana.com/v1alpha1true
kindstringTempoStacktrue
metadataobjectRefer to the Kubernetes API documentation for the fields of the `metadata` field.true
specobject - TempoStackSpec defines the desired state of TempoStack.
-
false
statusobject - TempoStackStatus defines the observed state of TempoStack.
-
false
- - -### TempoStack.spec -[↩ Parent](#tempostack) - - - -TempoStackSpec defines the desired state of TempoStack. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
storageobject - Storage defines S3 compatible object storage configuration. User is required to create secret and supply it.
-
true
imagesobject - Images defines the image for each container.
-
false
limitsobject - LimitSpec is used to limit ingestion and querying rates.
-
false
replicationFactorinteger - NOTE: currently this field is not considered. ReplicationFactor is used to define how many component replicas should exist.
-
false
resourcesobject - Resources defines resources configuration.
-
false
retentionobject - NOTE: currently this field is not considered. Retention period defined by dataset. User can specify how long data should be stored.
-
false
searchobject - SearchSpec control the configuration for the search capabilities.
-
false
serviceAccountstring - ServiceAccount defines the service account to use for all tempo components.
-
false
storageClassNamestring - StorageClassName for PVCs used by ingester. Defaults to nil (default storage class in the cluster).
-
false
storageSizeint or string - StorageSize for PVCs used by ingester. Defaults to 10Gi.
-
false
templateobject - Components defines requirements for a set of tempo components.
-
false
tenantsobject - Tenants defines the per-tenant authentication and authorization spec.
-
false
- - -### TempoStack.spec.storage -[↩ Parent](#tempostackspec) - - - -Storage defines S3 compatible object storage configuration. User is required to create secret and supply it. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
secretstring - Secret for object storage authentication. Name of a secret in the same namespace as the tempo TempoStack custom resource.
-
true
tlsobject - TLS configuration for reaching the object storage endpoint.
-
false
- - -### TempoStack.spec.storage.tls -[↩ Parent](#tempostackspecstorage) - - - -TLS configuration for reaching the object storage endpoint. - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
caNamestring - CA is the name of a ConfigMap containing a CA certificate. It needs to be in the same namespace as the Tempo custom resource.
-
false
- - -### TempoStack.spec.images -[↩ Parent](#tempostackspec) - - - -Images defines the image for each container. - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
tempostring - Tempo defines the tempo container image.
-
false
tempoGatewaystring - TempoGateway defines the tempo-gateway container image.
-
false
tempoQuerystring - TempoQuery defines the tempo-query container image.
-
false
- - -### TempoStack.spec.limits -[↩ Parent](#tempostackspec) - - - -LimitSpec is used to limit ingestion and querying rates. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
globalobject - Global is used to define global rate limits.
-
false
perTenantmap[string]object - PerTenant is used to define rate limits per tenant.
-
false
- - -### TempoStack.spec.limits.global -[↩ Parent](#tempostackspeclimits) - - - -Global is used to define global rate limits. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
ingestionobject - Ingestion is used to define ingestion rate limits.
-
false
queryobject - Query is used to define query rate limits.
-
false
- - -### TempoStack.spec.limits.global.ingestion -[↩ Parent](#tempostackspeclimitsglobal) - - - -Ingestion is used to define ingestion rate limits. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
ingestionBurstSizeBytesinteger - IngestionBurstSizeBytes defines the burst size (bytes) used in ingestion.
-
false
ingestionRateLimitBytesinteger - IngestionRateLimitBytes defines the Per-user ingestion rate limit (bytes) used in ingestion.
-
false
maxBytesPerTraceinteger - MaxBytesPerTrace defines the maximum number of bytes of an acceptable trace.
-
false
maxTracesPerUserinteger - MaxTracesPerUser defines the maximum number of traces a user can send.
-
false
- - -### TempoStack.spec.limits.global.query -[↩ Parent](#tempostackspeclimitsglobal) - - - -Query is used to define query rate limits. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
maxBytesPerTagValuesinteger - MaxBytesPerTagValues defines the maximum size in bytes of a tag-values query.
-
false
maxSearchBytesPerTraceinteger - MaxSearchBytesPerTrace defines the maximum size of search data for a single trace in bytes. default: `0` to disable.
-
false
- - -### TempoStack.spec.limits.perTenant[key] -[↩ Parent](#tempostackspeclimits) - - - -RateLimitSpec defines rate limits for Ingestion and Query components. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
ingestionobject - Ingestion is used to define ingestion rate limits.
-
false
queryobject - Query is used to define query rate limits.
-
false
- - -### TempoStack.spec.limits.perTenant[key].ingestion -[↩ Parent](#tempostackspeclimitspertenantkey) - - - -Ingestion is used to define ingestion rate limits. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
ingestionBurstSizeBytesinteger - IngestionBurstSizeBytes defines the burst size (bytes) used in ingestion.
-
false
ingestionRateLimitBytesinteger - IngestionRateLimitBytes defines the Per-user ingestion rate limit (bytes) used in ingestion.
-
false
maxBytesPerTraceinteger - MaxBytesPerTrace defines the maximum number of bytes of an acceptable trace.
-
false
maxTracesPerUserinteger - MaxTracesPerUser defines the maximum number of traces a user can send.
-
false
- - -### TempoStack.spec.limits.perTenant[key].query -[↩ Parent](#tempostackspeclimitspertenantkey) - - - -Query is used to define query rate limits. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
maxBytesPerTagValuesinteger - MaxBytesPerTagValues defines the maximum size in bytes of a tag-values query.
-
false
maxSearchBytesPerTraceinteger - MaxSearchBytesPerTrace defines the maximum size of search data for a single trace in bytes. default: `0` to disable.
-
false
- - -### TempoStack.spec.resources -[↩ Parent](#tempostackspec) - - - -Resources defines resources configuration. - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
totalobject - The total amount of resources for Tempo instance. The operator autonomously splits resources between deployed Tempo components. Only limits are supported, the operator calculates requests automatically. See http://github.com/grafana/tempo/issues/1540.
-
false
- - -### TempoStack.spec.resources.total -[↩ Parent](#tempostackspecresources) - - - -The total amount of resources for Tempo instance. The operator autonomously splits resources between deployed Tempo components. Only limits are supported, the operator calculates requests automatically. See http://github.com/grafana/tempo/issues/1540. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
limitsmap[string]int or string - Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
-
false
requestsmap[string]int or string - Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
-
false
- - -### TempoStack.spec.retention -[↩ Parent](#tempostackspec) - - - -NOTE: currently this field is not considered. Retention period defined by dataset. User can specify how long data should be stored. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
globalobject - Global is used to configure global retention.
-
false
perTenantmap[string]object - PerTenant is used to configure retention per tenant.
-
false
- - -### TempoStack.spec.retention.global -[↩ Parent](#tempostackspecretention) - - - -Global is used to configure global retention. - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
tracesstring - Traces defines retention period. Supported parameter suffixes are “s”, “m” and “h”. example: 336h default: value is 48h.
-
false
- - -### TempoStack.spec.retention.perTenant[key] -[↩ Parent](#tempostackspecretention) - - - -RetentionConfig defines how long data should be provided. - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
tracesstring - Traces defines retention period. Supported parameter suffixes are “s”, “m” and “h”. example: 336h default: value is 48h.
-
false
- - -### TempoStack.spec.search -[↩ Parent](#tempostackspec) - - - -SearchSpec control the configuration for the search capabilities. - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
defaultResultLimitinteger - Limit used for search requests if none is set by the caller (default: 20)
-
false
maxDurationstring - The maximum allowed time range for a search, default: 0s which means unlimited.
-
false
maxResultLimitinteger - The maximum allowed value of the limit parameter on search requests. If the search request limit parameter exceeds the value configured here it will be set to the value configured here. The default value of 0 disables this limit.
-
false
- - -### TempoStack.spec.template -[↩ Parent](#tempostackspec) - - - -Components defines requirements for a set of tempo components. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
compactorobject - Compactor defines the tempo compactor component spec.
-
false
distributorobject - Distributor defines the distributor component spec.
-
false
gatewayobject - Gateway defines the tempo gateway spec.
-
false
ingesterobject - Ingester defines the ingester component spec.
-
false
querierobject - Querier defines the querier component spec.
-
false
queryFrontendobject - TempoQueryFrontendSpec defines the query frontend spec.
-
false
- - -### TempoStack.spec.template.compactor -[↩ Parent](#tempostackspectemplate) - - - -Compactor defines the tempo compactor component spec. - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
nodeSelectormap[string]string - NodeSelector is the simplest recommended form of node selection constraint.
-
false
replicasinteger - Replicas represents the number of replicas to create for this component.
-
- Format: int32
-
false
tolerations[]object - Tolerations defines component specific pod tolerations.
-
false
- - -### TempoStack.spec.template.compactor.tolerations[index] -[↩ Parent](#tempostackspectemplatecompactor) - - - -The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
effectstring - Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
-
false
keystring - Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.
-
false
operatorstring - Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
-
false
tolerationSecondsinteger - TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.
-
- Format: int64
-
false
valuestring - Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.
-
false
- - -### TempoStack.spec.template.distributor -[↩ Parent](#tempostackspectemplate) - - - -Distributor defines the distributor component spec. - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
nodeSelectormap[string]string - NodeSelector is the simplest recommended form of node selection constraint.
-
false
replicasinteger - Replicas represents the number of replicas to create for this component.
-
- Format: int32
-
false
tolerations[]object - Tolerations defines component specific pod tolerations.
-
false
- - -### TempoStack.spec.template.distributor.tolerations[index] -[↩ Parent](#tempostackspectemplatedistributor) - - - -The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
effectstring - Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
-
false
keystring - Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.
-
false
operatorstring - Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
-
false
tolerationSecondsinteger - TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.
-
- Format: int64
-
false
valuestring - Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.
-
false
- - -### TempoStack.spec.template.gateway -[↩ Parent](#tempostackspectemplate) - - - -Gateway defines the tempo gateway spec. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
enabledboolean -
-
true
componentobject - TempoComponentSpec is embedded to extend this definition with further options. - Currently there is no way to inline this field. See: https://github.com/golang/go/issues/6213
-
false
- - -### TempoStack.spec.template.gateway.component -[↩ Parent](#tempostackspectemplategateway) - - - -TempoComponentSpec is embedded to extend this definition with further options. - Currently there is no way to inline this field. See: https://github.com/golang/go/issues/6213 - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
nodeSelectormap[string]string - NodeSelector is the simplest recommended form of node selection constraint.
-
false
replicasinteger - Replicas represents the number of replicas to create for this component.
-
- Format: int32
-
false
tolerations[]object - Tolerations defines component specific pod tolerations.
-
false
- - -### TempoStack.spec.template.gateway.component.tolerations[index] -[↩ Parent](#tempostackspectemplategatewaycomponent) - - - -The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
effectstring - Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
-
false
keystring - Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.
-
false
operatorstring - Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
-
false
tolerationSecondsinteger - TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.
-
- Format: int64
-
false
valuestring - Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.
-
false
- - -### TempoStack.spec.template.ingester -[↩ Parent](#tempostackspectemplate) - - - -Ingester defines the ingester component spec. - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
nodeSelectormap[string]string - NodeSelector is the simplest recommended form of node selection constraint.
-
false
replicasinteger - Replicas represents the number of replicas to create for this component.
-
- Format: int32
-
false
tolerations[]object - Tolerations defines component specific pod tolerations.
-
false
- - -### TempoStack.spec.template.ingester.tolerations[index] -[↩ Parent](#tempostackspectemplateingester) - - - -The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
effectstring - Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
-
false
keystring - Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.
-
false
operatorstring - Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
-
false
tolerationSecondsinteger - TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.
-
- Format: int64
-
false
valuestring - Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.
-
false
- - -### TempoStack.spec.template.querier -[↩ Parent](#tempostackspectemplate) - - - -Querier defines the querier component spec. - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
nodeSelectormap[string]string - NodeSelector is the simplest recommended form of node selection constraint.
-
false
replicasinteger - Replicas represents the number of replicas to create for this component.
-
- Format: int32
-
false
tolerations[]object - Tolerations defines component specific pod tolerations.
-
false
- - -### TempoStack.spec.template.querier.tolerations[index] -[↩ Parent](#tempostackspectemplatequerier) - - - -The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
effectstring - Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
-
false
keystring - Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.
-
false
operatorstring - Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
-
false
tolerationSecondsinteger - TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.
-
- Format: int64
-
false
valuestring - Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.
-
false
- - -### TempoStack.spec.template.queryFrontend -[↩ Parent](#tempostackspectemplate) - - - -TempoQueryFrontendSpec defines the query frontend spec. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
componentobject - TempoComponentSpec is embedded to extend this definition with further options. - Currently there is no way to inline this field. See: https://github.com/golang/go/issues/6213
-
false
jaegerQueryobject - JaegerQuerySpec defines Jaeger Query specific options.
-
false
- - -### TempoStack.spec.template.queryFrontend.component -[↩ Parent](#tempostackspectemplatequeryfrontend) - - - -TempoComponentSpec is embedded to extend this definition with further options. - Currently there is no way to inline this field. See: https://github.com/golang/go/issues/6213 - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
nodeSelectormap[string]string - NodeSelector is the simplest recommended form of node selection constraint.
-
false
replicasinteger - Replicas represents the number of replicas to create for this component.
-
- Format: int32
-
false
tolerations[]object - Tolerations defines component specific pod tolerations.
-
false
- - -### TempoStack.spec.template.queryFrontend.component.tolerations[index] -[↩ Parent](#tempostackspectemplatequeryfrontendcomponent) - - - -The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
effectstring - Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
-
false
keystring - Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.
-
false
operatorstring - Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
-
false
tolerationSecondsinteger - TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.
-
- Format: int64
-
false
valuestring - Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.
-
false
- - -### TempoStack.spec.template.queryFrontend.jaegerQuery -[↩ Parent](#tempostackspectemplatequeryfrontend) - - - -JaegerQuerySpec defines Jaeger Query specific options. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
enabledboolean - Enabled is used to define if Jaeger Query component should be created.
-
false
ingressobject - Ingress defines Jaeger Query Ingress options.
-
false
- - -### TempoStack.spec.template.queryFrontend.jaegerQuery.ingress -[↩ Parent](#tempostackspectemplatequeryfrontendjaegerquery) - - - -Ingress defines Jaeger Query Ingress options. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
annotationsmap[string]string - Annotations defines the annotations of the Ingress object.
-
false
hoststring - Host defines the hostname of the Ingress object.
-
false
ingressClassNamestring - IngressClassName is the name of an IngressClass cluster resource. Ingress controller implementations use this field to know whether they should be serving this Ingress resource.
-
false
routeobject - Route defines OpenShift Route specific options.
-
false
typeenum - Type defines the type of Ingress for the Jaeger Query UI. Currently ingress, route and none are supported.
-
- Enum: ingress, route
-
false
- - -### TempoStack.spec.template.queryFrontend.jaegerQuery.ingress.route -[↩ Parent](#tempostackspectemplatequeryfrontendjaegerqueryingress) - - - -Route defines OpenShift Route specific options. - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
terminationenum - Termination specifies the termination type. By default "edge" is used.
-
- Enum: insecure, edge, passthrough, reencrypt
-
false
- - -### TempoStack.spec.tenants -[↩ Parent](#tempostackspec) - - - -Tenants defines the per-tenant authentication and authorization spec. - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
modeenum - Mode defines the multitenancy mode.
-
- Enum: static, openshift
- Default: static
-
true
authentication[]object - Authentication defines the tempo-gateway component authentication configuration spec per tenant.
-
false
authorizationobject - Authorization defines the tempo-gateway component authorization configuration spec per tenant.
-
false
- - -### TempoStack.spec.tenants.authentication[index] -[↩ Parent](#tempostackspectenants) - - - -AuthenticationSpec defines the oidc configuration per tenant for tempo Gateway component. - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
tenantIdstring - TenantID defines the id of the tenant.
-
true
tenantNamestring - TenantName defines the name of the tenant.
-
true
oidcobject - OIDC defines the spec for the OIDC tenant's authentication.
-
false
- - -### TempoStack.spec.tenants.authentication[index].oidc -[↩ Parent](#tempostackspectenantsauthenticationindex) - - - -OIDC defines the spec for the OIDC tenant's authentication. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
groupClaimstring - Group claim field from ID Token
-
false
issuerURLstring - IssuerURL defines the URL for issuer.
-
false
redirectURLstring - RedirectURL defines the URL for redirect.
-
false
secretobject - Secret defines the spec for the clientID, clientSecret and issuerCAPath for tenant's authentication.
-
false
usernameClaimstring - User claim field from ID Token
-
false
- - -### TempoStack.spec.tenants.authentication[index].oidc.secret -[↩ Parent](#tempostackspectenantsauthenticationindexoidc) - - - -Secret defines the spec for the clientID, clientSecret and issuerCAPath for tenant's authentication. - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
namestring - Name of a secret in the namespace configured for tenant secrets.
-
false
- - -### TempoStack.spec.tenants.authorization -[↩ Parent](#tempostackspectenants) - - - -Authorization defines the tempo-gateway component authorization configuration spec per tenant. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
roleBindings[]object - RoleBindings defines configuration to bind a set of roles to a set of subjects.
-
false
roles[]object - Roles defines a set of permissions to interact with a tenant.
-
false
- - -### TempoStack.spec.tenants.authorization.roleBindings[index] -[↩ Parent](#tempostackspectenantsauthorization) - - - -RoleBindingsSpec binds a set of roles to a set of subjects. - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
namestring -
-
true
roles[]string -
-
true
subjects[]object -
-
true
- - -### TempoStack.spec.tenants.authorization.roleBindings[index].subjects[index] -[↩ Parent](#tempostackspectenantsauthorizationrolebindingsindex) - - - -Subject represents a subject that has been bound to a role. - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
kindenum - SubjectKind is a kind of Tempo Gateway RBAC subject.
-
- Enum: user, group
-
true
namestring -
-
true
- - -### TempoStack.spec.tenants.authorization.roles[index] -[↩ Parent](#tempostackspectenantsauthorization) - - - -RoleSpec describes a set of permissions to interact with a tenant. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
namestring -
-
true
permissions[]enum -
-
true
resources[]string -
-
true
tenants[]string -
-
true
- - -### TempoStack.status -[↩ Parent](#tempostack) - - - -TempoStackStatus defines the observed state of TempoStack. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
componentsobject - Components provides summary of all Tempo pod status grouped per component.
-
false
conditions[]object - Conditions of the Tempo deployment health.
-
false
tempoQueryVersionstring - Version of the Tempo Query component used.
-
false
tempoVersionstring - Version of the managed Tempo instance.
-
false
- - -### TempoStack.status.components -[↩ Parent](#tempostackstatus) - - - -Components provides summary of all Tempo pod status grouped per component. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
compactormap[string][]string - Compactor is a map to the pod status of the compactor pod.
-
false
distributormap[string][]string - Distributor is a map to the per pod status of the distributor deployment
-
false
gatewaymap[string][]string - Gateway is a map to the per pod status of the query frontend deployment
-
false
ingestermap[string][]string - Ingester is a map to the per pod status of the ingester statefulset
-
false
queriermap[string][]string - Querier is a map to the per pod status of the querier deployment
-
false
queryFrontendmap[string][]string - QueryFrontend is a map to the per pod status of the query frontend deployment
-
false
- - -### TempoStack.status.conditions[index] -[↩ Parent](#tempostackstatus) - - - -Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, - type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: "Available", "Progressing", and "Degraded" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` - // other fields } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
lastTransitionTimestring - lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
- Format: date-time
-
true
messagestring - message is a human readable message indicating details about the transition. This may be an empty string.
-
true
reasonstring - reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
-
true
statusenum - status of the condition, one of True, False, Unknown.
-
- Enum: True, False, Unknown
-
true
typestring - type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
-
true
observedGenerationinteger - observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
-
- Format: int64
- Minimum: 0
-
false
\ No newline at end of file diff --git a/docs/operator/api.md b/docs/operator/api.md new file mode 100644 index 000000000..426a32f43 --- /dev/null +++ b/docs/operator/api.md @@ -0,0 +1,3658 @@ + +--- +title: "API" +description: "Generated API docs for the Tempo Operator" +lead: "" +draft: false +images: [] +menu: + docs: + parent: "operator" +weight: 1000 +toc: true +--- + +This Document contains the types introduced by the Tempo Operator to be consumed by users. + +> This page is automatically generated with `gen-crd-api-reference-docs`. + +# tempo.grafana.com/v1alpha1 { #tempo-grafana-com-v1alpha1 } + +
+ +

Package v1alpha1 contains API Schema definitions for the tempo v1alpha1 API group.

+ +
+ +Resource Types: + + +## AuthenticationSpec { #tempo-grafana-com-v1alpha1-AuthenticationSpec } + +

+ +(Appears on:TenantsSpec) + +

+ +
+ +

AuthenticationSpec defines the oidc configuration per tenant for tempo Gateway component.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +tenantName
+ + + +string + + + +
+ +

TenantName defines the name of the tenant.

+ +
+ +tenantId
+ + + +string + + + +
+ +

TenantID defines the id of the tenant.

+ +
+ +oidc
+ + + + + +OIDCSpec + + + + + +
+ +(Optional) + +

OIDC defines the spec for the OIDC tenant’s authentication.

+ +
+ + +## AuthorizationSpec { #tempo-grafana-com-v1alpha1-AuthorizationSpec } + +

+ +(Appears on:TenantsSpec) + +

+ +
+ +

AuthorizationSpec defines the opa, role bindings and roles +configuration per tenant for tempo Gateway component.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +roles
+ + + + + +[]RoleSpec + + + + + +
+ +(Optional) + +

Roles defines a set of permissions to interact with a tenant.

+ +
+ +roleBindings
+ + + + + +[]RoleBindingsSpec + + + + + +
+ +(Optional) + +

RoleBindings defines configuration to bind a set of roles to a set of subjects.

+ +
+ + +## ComponentStatus { #tempo-grafana-com-v1alpha1-ComponentStatus } + +

+ +(Appears on:TempoStackStatus) + +

+ +
+ +

ComponentStatus defines the status of each component.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +compactor
+ + + + + +PodStatusMap + + + + + +
+ +(Optional) + +

Compactor is a map to the pod status of the compactor pod.

+ +
+ +distributor
+ + + + + +PodStatusMap + + + + + +
+ +(Optional) + +

Distributor is a map to the per pod status of the distributor deployment

+ +
+ +ingester
+ + + + + +PodStatusMap + + + + + +
+ +(Optional) + +

Ingester is a map to the per pod status of the ingester statefulset

+ +
+ +querier
+ + + + + +PodStatusMap + + + + + +
+ +(Optional) + +

Querier is a map to the per pod status of the querier deployment

+ +
+ +queryFrontend
+ + + + + +PodStatusMap + + + + + +
+ +(Optional) + +

QueryFrontend is a map to the per pod status of the query frontend deployment

+ +
+ +gateway
+ + + + + +PodStatusMap + + + + + +
+ +(Optional) + +

Gateway is a map to the per pod status of the query frontend deployment

+ +
+ + +## ConditionReason { #tempo-grafana-com-v1alpha1-ConditionReason } + +(string alias) + +
+ +

ConditionReason defines possible reasons for each condition.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription

"CouldNotGetOpenShiftBaseDomain"

ReasonCouldNotGetOpenShiftBaseDomain when operator cannot get OpenShift base domain, that is used for OAuth redirect URL.

+

"CouldNotGetOpenShiftTLSPolicy"

ReasonCouldNotGetOpenShiftTLSPolicy when operator cannot get OpenShift TLS security cluster policy.

+

"FailedComponents"

ReasonFailedComponents when all/some Tempo components fail to roll out.

+

"InvalidStorageConfig"

ReasonInvalidStorageConfig defines that the object storage configuration is invalid (missing or incomplete storage secret).

+

"PendingComponents"

ReasonPendingComponents when all/some Tempo components pending dependencies.

+

"Ready"

ReasonReady defines a healthy tempo instance.

+
+ + +## ConditionStatus { #tempo-grafana-com-v1alpha1-ConditionStatus } + +(string alias) + +
+ +

ConditionStatus defines the status of a condition (e.g. ready or degraded).

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription

"Degraded"

ConditionDegraded defines that one or more components are in a degraded state.

+

"Failed"

ConditionFailed defines that one or more components are in a failed state.

+

"Pending"

ConditionPending defines that one or more components are in a degraded state.

+

"Ready"

ConditionReady defines that all components are ready.

+
+ + +## Defaulter { #tempo-grafana-com-v1alpha1-Defaulter } + +
+ +

Defaulter implements the CustomDefaulter interface.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +ctrlConfig
+ + + + + +Feature Gates.ProjectConfig + + + + + +
+ +
+ + +## IngestionLimitSpec { #tempo-grafana-com-v1alpha1-IngestionLimitSpec } + +

+ +(Appears on:RateLimitSpec) + +

+ +
+ +

IngestionLimitSpec defines the limits applied at the ingestion path.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +ingestionBurstSizeBytes
+ + + +int + + + +
+ +(Optional) + +

IngestionBurstSizeBytes defines the burst size (bytes) used in ingestion.

+ +
+ +ingestionRateLimitBytes
+ + + +int + + + +
+ +(Optional) + +

IngestionRateLimitBytes defines the Per-user ingestion rate limit (bytes) used in ingestion.

+ +
+ +maxBytesPerTrace
+ + + +int + + + +
+ +(Optional) + +

MaxBytesPerTrace defines the maximum number of bytes of an acceptable trace.

+ +
+ +maxTracesPerUser
+ + + +int + + + +
+ +(Optional) + +

MaxTracesPerUser defines the maximum number of traces a user can send.

+ +
+ + +## IngressType { #tempo-grafana-com-v1alpha1-IngressType } + +(string alias) + +

+ +(Appears on:JaegerQueryIngressSpec) + +

+ +
+ +

IngressType represents how a service should be exposed (ingress vs route).

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription

"ingress"

IngressTypeIngress specifies that an ingress entry should be created.

+

""

IngressTypeNone specifies that no ingress or route entry should be created.

+

"route"

IngressTypeRoute specifies that a route entry should be created.

+
+ + +## JaegerQueryIngressSpec { #tempo-grafana-com-v1alpha1-JaegerQueryIngressSpec } + +

+ +(Appears on:JaegerQuerySpec) + +

+ +
+ +

JaegerQueryIngressSpec defines Jaeger Query Ingress options.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +type
+ + + + + +IngressType + + + + + +
+ +(Optional) + +

Type defines the type of Ingress for the Jaeger Query UI. +Currently ingress, route and none are supported.

+ +
+ +annotations
+ + + +map[string]string + + + +
+ +(Optional) + +

Annotations defines the annotations of the Ingress object.

+ +
+ +host
+ + + +string + + + +
+ +(Optional) + +

Host defines the hostname of the Ingress object.

+ +
+ +ingressClassName
+ + + +string + + + +
+ +(Optional) + +

IngressClassName is the name of an IngressClass cluster resource. Ingress +controller implementations use this field to know whether they should be +serving this Ingress resource.

+ +
+ +route
+ + + + + +JaegerQueryRouteSpec + + + + + +
+ +(Optional) + +

Route defines OpenShift Route specific options.

+ +
+ + +## JaegerQueryRouteSpec { #tempo-grafana-com-v1alpha1-JaegerQueryRouteSpec } + +

+ +(Appears on:JaegerQueryIngressSpec) + +

+ +
+ +

JaegerQueryRouteSpec defines OpenShift Route specific options.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +termination
+ + + + + +TLSRouteTerminationType + + + + + +
+ +(Optional) + +

Termination specifies the termination type. By default “edge” is used.

+ +
+ + +## JaegerQuerySpec { #tempo-grafana-com-v1alpha1-JaegerQuerySpec } + +

+ +(Appears on:TempoQueryFrontendSpec) + +

+ +
+ +

JaegerQuerySpec defines Jaeger Query options.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +enabled
+ + + +bool + + + +
+ +(Optional) + +

Enabled is used to define if Jaeger Query component should be created.

+ +
+ +ingress
+ + + + + +JaegerQueryIngressSpec + + + + + +
+ +(Optional) + +

Ingress defines Jaeger Query Ingress options.

+ +
+ + +## LimitSpec { #tempo-grafana-com-v1alpha1-LimitSpec } + +

+ +(Appears on:TempoStackSpec) + +

+ +
+ +

LimitSpec defines Global and PerTenant rate limits.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +perTenant
+ + + + + +map[string]github.com/os-observability/tempo-operator/apis/tempo/v1alpha1.RateLimitSpec + + + + + +
+ +(Optional) + +

PerTenant is used to define rate limits per tenant.

+ +
+ +global
+ + + + + +RateLimitSpec + + + + + +
+ +(Optional) + +

Global is used to define global rate limits.

+ +
+ + +## ModeType { #tempo-grafana-com-v1alpha1-ModeType } + +(string alias) + +

+ +(Appears on:TenantsSpec) + +

+ +
+ +

ModeType is the authentication/authorization mode in which Tempo Gateway +will be configured.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription

"openshift"

OpenShift mode uses TokenReview API for authentication and subject access review for authorization.

+

"static"

Static mode asserts the Authorization Spec’s Roles and RoleBindings +using an in-process OpenPolicyAgent Rego authorizer.

+
+ + +## OIDCSpec { #tempo-grafana-com-v1alpha1-OIDCSpec } + +

+ +(Appears on:AuthenticationSpec) + +

+ +
+ +

OIDCSpec defines the oidc configuration spec for Tempo Gateway component.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +secret
+ + + + + +TenantSecretSpec + + + + + +
+ +(Optional) + +

Secret defines the spec for the clientID, clientSecret and issuerCAPath for tenant’s authentication.

+ +
+ +issuerURL
+ + + +string + + + +
+ +(Optional) + +

IssuerURL defines the URL for issuer.

+ +
+ +redirectURL
+ + + +string + + + +
+ +(Optional) + +

RedirectURL defines the URL for redirect.

+ +
+ +groupClaim
+ + + +string + + + +
+ +(Optional) + +

Group claim field from ID Token

+ +
+ +usernameClaim
+ + + +string + + + +
+ +(Optional) + +

User claim field from ID Token

+ +
+ + +## ObjectStorageSpec { #tempo-grafana-com-v1alpha1-ObjectStorageSpec } + +

+ +(Appears on:TempoStackSpec) + +

+ +
+ +

ObjectStorageSpec defines the requirements to access the object +storage bucket to persist traces by the ingester component.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +tls
+ + + + + +ObjectStorageTLSSpec + + + + + +
+ +(Optional) + +

TLS configuration for reaching the object storage endpoint.

+ +
+ +secret
+ + + +string + + + +
+ +

Secret for object storage authentication. +Name of a secret in the same namespace as the tempo TempoStack custom resource.

+ +
+ + +## ObjectStorageTLSSpec { #tempo-grafana-com-v1alpha1-ObjectStorageTLSSpec } + +

+ +(Appears on:ObjectStorageSpec) + +

+ +
+ +

ObjectStorageTLSSpec is the TLS configuration for reaching the object storage endpoint.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +caName
+ + + +string + + + +
+ +(Optional) + +

CA is the name of a ConfigMap containing a CA certificate. +It needs to be in the same namespace as the Tempo custom resource.

+ +
+ + +## PermissionType { #tempo-grafana-com-v1alpha1-PermissionType } + +(string alias) + +

+ +(Appears on:RoleSpec) + +

+ +
+ +

PermissionType is a Tempo Gateway RBAC permission.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription

"read"

Read gives access to read data from a tenant.

+

"write"

Write gives access to write data to a tenant.

+
+ + +## PodStatusMap { #tempo-grafana-com-v1alpha1-PodStatusMap } + +(map[k8s.io/api/core/v1.PodPhase][]string alias) + +

+ +(Appears on:ComponentStatus) + +

+ +
+ +

PodStatusMap defines the type for mapping pod status to pod name.

+ +
+ + +## QueryLimit { #tempo-grafana-com-v1alpha1-QueryLimit } + +

+ +(Appears on:RateLimitSpec) + +

+ +
+ +

QueryLimit defines query limits.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +maxBytesPerTagValues
+ + + +int + + + +
+ +(Optional) + +

MaxBytesPerTagValues defines the maximum size in bytes of a tag-values query.

+ +
+ +maxSearchBytesPerTrace
+ + + +int + + + +
+ +(Optional) + +

MaxSearchBytesPerTrace defines the maximum size of search data for a single +trace in bytes. +default: 0 to disable.

+ +
+ + +## RateLimitSpec { #tempo-grafana-com-v1alpha1-RateLimitSpec } + +

+ +(Appears on:LimitSpec) + +

+ +
+ +

RateLimitSpec defines rate limits for Ingestion and Query components.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +ingestion
+ + + + + +IngestionLimitSpec + + + + + +
+ +(Optional) + +

Ingestion is used to define ingestion rate limits.

+ +
+ +query
+ + + + + +QueryLimit + + + + + +
+ +(Optional) + +

Query is used to define query rate limits.

+ +
+ + +## Resources { #tempo-grafana-com-v1alpha1-Resources } + +

+ +(Appears on:TempoStackSpec) + +

+ +
+ +

Resources defines resources configuration.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +total
+ + + + + +Kubernetes core/v1.ResourceRequirements + + + + + +
+ +(Optional) + +

The total amount of resources for Tempo instance. +The operator autonomously splits resources between deployed Tempo components. +Only limits are supported, the operator calculates requests automatically. +See http://github.com/grafana/tempo/issues/1540.

+ +
+ + +## RetentionConfig { #tempo-grafana-com-v1alpha1-RetentionConfig } + +

+ +(Appears on:RetentionSpec) + +

+ +
+ +

RetentionConfig defines how long data should be provided.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +traces
+ + + + + +Kubernetes meta/v1.Duration + + + + + +
+ +(Optional) + +

Traces defines retention period. Supported parameter suffixes are “s”, “m” and “h”. +example: 336h +default: value is 48h.

+ +
+ + +## RetentionSpec { #tempo-grafana-com-v1alpha1-RetentionSpec } + +

+ +(Appears on:TempoStackSpec) + +

+ +
+ +

RetentionSpec defines global and per tenant retention configurations.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +perTenant
+ + + + + +map[string]github.com/os-observability/tempo-operator/apis/tempo/v1alpha1.RetentionConfig + + + + + +
+ +(Optional) + +

PerTenant is used to configure retention per tenant.

+ +
+ +global
+ + + + + +RetentionConfig + + + + + +
+ +(Optional) + +

Global is used to configure global retention.

+ +
+ + +## RoleBindingsSpec { #tempo-grafana-com-v1alpha1-RoleBindingsSpec } + +

+ +(Appears on:AuthorizationSpec) + +

+ +
+ +

RoleBindingsSpec binds a set of roles to a set of subjects.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +name
+ + + +string + + + +
+ +
+ +subjects
+ + + + + +[]Subject + + + + + +
+ +
+ +roles
+ + + +[]string + + + +
+ +
+ + +## RoleSpec { #tempo-grafana-com-v1alpha1-RoleSpec } + +

+ +(Appears on:AuthorizationSpec) + +

+ +
+ +

RoleSpec describes a set of permissions to interact with a tenant.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +name
+ + + +string + + + +
+ +
+ +resources
+ + + +[]string + + + +
+ +
+ +tenants
+ + + +[]string + + + +
+ +
+ +permissions
+ + + + + +[]PermissionType + + + + + +
+ +
+ + +## SearchSpec { #tempo-grafana-com-v1alpha1-SearchSpec } + +

+ +(Appears on:TempoStackSpec) + +

+ +
+ +

SearchSpec specified the global search parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +defaultResultLimit
+ + + +int + + + +
+ +(Optional) + +

Limit used for search requests if none is set by the caller (default: 20)

+ +
+ +maxDuration
+ + + + + +Kubernetes meta/v1.Duration + + + + + +
+ +(Optional) + +

The maximum allowed time range for a search, default: 0s which means unlimited.

+ +
+ +maxResultLimit
+ + + +int + + + +
+ +(Optional) + +

The maximum allowed value of the limit parameter on search requests. If the search request limit parameter +exceeds the value configured here it will be set to the value configured here. +The default value of 0 disables this limit.

+ +
+ + +## Subject { #tempo-grafana-com-v1alpha1-Subject } + +

+ +(Appears on:RoleBindingsSpec) + +

+ +
+ +

Subject represents a subject that has been bound to a role.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +name
+ + + +string + + + +
+ +
+ +kind
+ + + + + +SubjectKind + + + + + +
+ +
+ + +## SubjectKind { #tempo-grafana-com-v1alpha1-SubjectKind } + +(string alias) + +

+ +(Appears on:Subject) + +

+ +
+ +

SubjectKind is a kind of Tempo Gateway RBAC subject.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription

"group"

Group represents a subject that is a group.

+

"user"

User represents a subject that is a user.

+
+ + +## TLSRouteTerminationType { #tempo-grafana-com-v1alpha1-TLSRouteTerminationType } + +(string alias) + +

+ +(Appears on:JaegerQueryRouteSpec) + +

+ +
+ +

TLSRouteTerminationType is used to indicate which TLS settings should be used.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription

"edge"

TLSRouteTerminationTypeEdge indicates that encryption should be terminated +at the edge router.

+

"insecure"

TLSRouteTerminationTypeInsecure indicates that insecure connections are allowed.

+

"passthrough"

TLSRouteTerminationTypePassthrough indicates that the destination service is +responsible for decrypting traffic.

+

"reencrypt"

TLSRouteTerminationTypeReencrypt indicates that traffic will be decrypted on the edge +and re-encrypt using a new certificate.

+
+ + +## TempoComponentSpec { #tempo-grafana-com-v1alpha1-TempoComponentSpec } + +

+ +(Appears on:TempoComponentsSpec, TempoGatewaySpec, TempoQueryFrontendSpec) + +

+ +
+ +

TempoComponentSpec defines specific schedule settings for tempo components.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +replicas
+ + + +int32 + + + +
+ +(Optional) + +

Replicas represents the number of replicas to create for this component.

+ +
+ +nodeSelector
+ + + +map[string]string + + + +
+ +(Optional) + +

NodeSelector is the simplest recommended form of node selection constraint.

+ +
+ +tolerations
+ + + + + +[]Kubernetes core/v1.Toleration + + + + + +
+ +(Optional) + +

Tolerations defines component specific pod tolerations.

+ +
+ + +## TempoComponentsSpec { #tempo-grafana-com-v1alpha1-TempoComponentsSpec } + +

+ +(Appears on:TempoStackSpec) + +

+ +
+ +

TempoComponentsSpec defines the template of all requirements to configure +scheduling of all Tempo components to be deployed.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +distributor
+ + + + + +TempoComponentSpec + + + + + +
+ +(Optional) + +

Distributor defines the distributor component spec.

+ +
+ +ingester
+ + + + + +TempoComponentSpec + + + + + +
+ +(Optional) + +

Ingester defines the ingester component spec.

+ +
+ +compactor
+ + + + + +TempoComponentSpec + + + + + +
+ +(Optional) + +

Compactor defines the tempo compactor component spec.

+ +
+ +querier
+ + + + + +TempoComponentSpec + + + + + +
+ +(Optional) + +

Querier defines the querier component spec.

+ +
+ +queryFrontend
+ + + + + +TempoQueryFrontendSpec + + + + + +
+ +(Optional) + +

TempoQueryFrontendSpec defines the query frontend spec.

+ +
+ +gateway
+ + + + + +TempoGatewaySpec + + + + + +
+ +(Optional) + +

Gateway defines the tempo gateway spec.

+ +
+ + +## TempoGatewaySpec { #tempo-grafana-com-v1alpha1-TempoGatewaySpec } + +

+ +(Appears on:TempoComponentsSpec) + +

+ +
+ +

TempoGatewaySpec extends TempoComponentSpec with gateway parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +component
+ + + + + +TempoComponentSpec + + + + + +
+ +(Optional) + +

TempoComponentSpec is embedded to extend this definition with further options.

+ +

Currently there is no way to inline this field. +See: https://github.com/golang/go/issues/6213

+ +
+ +enabled
+ + + +bool + + + +
+ +
+ + +## TempoQueryFrontendSpec { #tempo-grafana-com-v1alpha1-TempoQueryFrontendSpec } + +

+ +(Appears on:TempoComponentsSpec) + +

+ +
+ +

TempoQueryFrontendSpec extends TempoComponentSpec with frontend specific parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +component
+ + + + + +TempoComponentSpec + + + + + +
+ +(Optional) + +

TempoComponentSpec is embedded to extend this definition with further options.

+ +

Currently there is no way to inline this field. +See: https://github.com/golang/go/issues/6213

+ +
+ +jaegerQuery
+ + + + + +JaegerQuerySpec + + + + + +
+ +(Optional) + +

JaegerQuerySpec defines Jaeger Query specific options.

+ +
+ + +## TempoStack { #tempo-grafana-com-v1alpha1-TempoStack } + +
+ +

TempoStack is the Schema for the tempostacks API.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +status
+ + + + + +TempoStackStatus + + + + + +
+ +
+ +metadata
+ + + + + +Kubernetes meta/v1.ObjectMeta + + + + + +
+ +Refer to the Kubernetes API documentation for the fields of the + +metadata field. + +
+ +spec
+ + + + + +TempoStackSpec + + + + + +
+ +
+ + +## TempoStackSpec { #tempo-grafana-com-v1alpha1-TempoStackSpec } + +

+ +(Appears on:TempoStack) + +

+ +
+ +

TempoStackSpec defines the desired state of TempoStack.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +limits
+ + + + + +LimitSpec + + + + + +
+ +(Optional) + +

LimitSpec is used to limit ingestion and querying rates.

+ +
+ +storageClassName
+ + + +string + + + +
+ +(Optional) + +

StorageClassName for PVCs used by ingester. Defaults to nil (default storage class in the cluster).

+ +
+ +resources
+ + + + + +Resources + + + + + +
+ +(Optional) + +

Resources defines resources configuration.

+ +
+ +storageSize
+ + + +k8s.io/apimachinery/pkg/api/resource.Quantity + + + +
+ +(Optional) + +

StorageSize for PVCs used by ingester. Defaults to 10Gi.

+ +
+ +images
+ + + + + +Feature Gates.ImagesSpec + + + + + +
+ +(Optional) + +

Images defines the image for each container.

+ +
+ +storage
+ + + + + +ObjectStorageSpec + + + + + +
+ +

Storage defines S3 compatible object storage configuration. +User is required to create secret and supply it.

+ +
+ +retention
+ + + + + +RetentionSpec + + + + + +
+ +(Optional) + +

NOTE: currently this field is not considered. +Retention period defined by dataset. +User can specify how long data should be stored.

+ +
+ +serviceAccount
+ + + +string + + + +
+ +(Optional) + +

ServiceAccount defines the service account to use for all tempo components.

+ +
+ +search
+ + + + + +SearchSpec + + + + + +
+ +(Optional) + +

SearchSpec control the configuration for the search capabilities.

+ +
+ +template
+ + + + + +TempoComponentsSpec + + + + + +
+ +(Optional) + +

Components defines requirements for a set of tempo components.

+ +
+ +replicationFactor
+ + + +int + + + +
+ +(Optional) + +

NOTE: currently this field is not considered. +ReplicationFactor is used to define how many component replicas should exist.

+ +
+ +tenants
+ + + + + +TenantsSpec + + + + + +
+ +(Optional) + +

Tenants defines the per-tenant authentication and authorization spec.

+ +
+ + +## TempoStackStatus { #tempo-grafana-com-v1alpha1-TempoStackStatus } + +

+ +(Appears on:TempoStack) + +

+ +
+ +

TempoStackStatus defines the observed state of TempoStack.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +tempoVersion
+ + + +string + + + +
+ +(Optional) + +

Version of the managed Tempo instance.

+ +
+ +tempoQueryVersion
+ + + +string + + + +
+ +(Optional) + +

Version of the Tempo Query component used.

+ +
+ +components
+ + + + + +ComponentStatus + + + + + +
+ +(Optional) + +

Components provides summary of all Tempo pod status grouped +per component.

+ +
+ +conditions
+ + + + + +[]Kubernetes meta/v1.Condition + + + + + +
+ +(Optional) + +

Conditions of the Tempo deployment health.

+ +
+ + +## TenantSecretSpec { #tempo-grafana-com-v1alpha1-TenantSecretSpec } + +

+ +(Appears on:OIDCSpec) + +

+ +
+ +

TenantSecretSpec is a secret reference containing name only +for a secret living in the same namespace as the (Tempo) TempoStack custom resource.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +name
+ + + +string + + + +
+ +(Optional) + +

Name of a secret in the namespace configured for tenant secrets.

+ +
+ + +## TenantsSpec { #tempo-grafana-com-v1alpha1-TenantsSpec } + +

+ +(Appears on:TempoStackSpec) + +

+ +
+ +

TenantsSpec defines the mode, authentication and authorization +configuration of the tempo gateway component.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +mode
+ + + + + +ModeType + + + + + +
+ +

Mode defines the multitenancy mode.

+ +
+ +authentication
+ + + + + +[]AuthenticationSpec + + + + + +
+ +(Optional) + +

Authentication defines the tempo-gateway component authentication configuration spec per tenant.

+ +
+ +authorization
+ + + + + +AuthorizationSpec + + + + + +
+ +(Optional) + +

Authorization defines the tempo-gateway component authorization configuration spec per tenant.

+ +
+ +
+ + + + diff --git a/docs/operator/compatibility.md b/docs/operator/compatibility.md new file mode 100644 index 000000000..34d4c4555 --- /dev/null +++ b/docs/operator/compatibility.md @@ -0,0 +1,29 @@ +--- +title: "Compatibility" +description: "The Tempo Operator supports a number of Kubernetes and Tempo releases." +lead: "" +date: 2022-06-21T08:48:45+00:00 +lastmod: 2022-06-21T08:48:45+00:00 +draft: false +images: [] +menu: + docs: + parent: "operator" +weight: 100 +toc: true +--- + +The Tempo Operator supports a number of Kubernetes and Tempo releases. + +## Kubernetes + +The Tempo Operator uses client-go to communicate with Kubernetes clusters. The supported Kubernetes cluster version is determined by client-go. The compatibility matrix for client-go and Kubernetes clusters can be found [here](https://github.com/kubernetes/client-go#compatibility-matrix). All additional compatibility is only best effort, or happens to still/already be supported. The currently used client-go version is "v0.25.0". + +This operator was tested on Kubernetes >= v1.21.0, so at least that version is required. + + +## Tempo + +The versions of Tempo compatible to be run with the Tempo Operator are: + +* v2.0.1 diff --git a/docs/operator/feature-gates.md b/docs/operator/feature-gates.md new file mode 100644 index 000000000..3273d1374 --- /dev/null +++ b/docs/operator/feature-gates.md @@ -0,0 +1,963 @@ + +--- +title: "Feature Gates" +description: "Generated API docs for the Tempo Operator" +lead: "" +draft: false +images: [] +menu: + docs: + parent: "operator" +weight: 1000 +toc: true +--- + +This Document contains the types introduced by the Tempo Operator to be consumed by users. + +> This page is automatically generated with `gen-crd-api-reference-docs`. + +# config.tempo.grafana.com/v1alpha1 { #config-tempo-grafana-com-v1alpha1 } + +
+ +

Package v1alpha1 contains API Schema definitions for the config.tempo v1alpha1 API group.

+ +
+ +Resource Types: + + +## BuiltInCertManagement { #config-tempo-grafana-com-v1alpha1-BuiltInCertManagement } + +

+ +(Appears on:FeatureGates) + +

+ +
+ +

BuiltInCertManagement is the configuration for the built-in facility to generate and rotate +TLS client and serving certificates for all Tempo services and internal clients except +for the tempo-gateway.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +caValidity
+ + + + + +Kubernetes meta/v1.Duration + + + + + +
+ +

CACertValidity defines the total duration of the CA certificate validity.

+ +
+ +caRefresh
+ + + + + +Kubernetes meta/v1.Duration + + + + + +
+ +

CACertRefresh defines the duration of the CA certificate validity until a rotation +should happen. It can be set up to 80% of CA certificate validity or equal to the +CA certificate validity. Latter should be used only for rotating only when expired.

+ +
+ +certValidity
+ + + + + +Kubernetes meta/v1.Duration + + + + + +
+ +

CertValidity defines the total duration of the validity for all Tempo certificates.

+ +
+ +certRefresh
+ + + + + +Kubernetes meta/v1.Duration + + + + + +
+ +

CertRefresh defines the duration of the certificate validity until a rotation +should happen. It can be set up to 80% of certificate validity or equal to the +certificate validity. Latter should be used only for rotating only when expired. +The refresh is applied to all Tempo certificates at once.

+ +
+ +enabled
+ + + +bool + + + +
+ +

Enabled defines to flag to enable/disable built-in certificate management feature gate.

+ +
+ + +## FeatureGates { #config-tempo-grafana-com-v1alpha1-FeatureGates } + +

+ +(Appears on:ProjectConfig) + +

+ +
+ +

FeatureGates is the supported set of all operator feature gates.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +openshift
+ + + + + +OpenShiftFeatureGates + + + + + +
+ +

OpenShift contains a set of feature gates supported only on OpenShift.

+ +
+ +builtInCertManagement
+ + + + + +BuiltInCertManagement + + + + + +
+ +

BuiltInCertManagement enables the built-in facility for generating and rotating +TLS client and serving certificates for the communication between ingesters and distributors and also between +query and queryfrontend, In detail all internal Tempo HTTP and GRPC communication is lifted +to require mTLS. +In addition each service requires a configmap named as the MicroService CR with the +suffix -ca-bundle, e.g. tempo-dev-ca-bundle and the following data: +- service-ca.crt: The CA signing the service certificate in tls.crt.

+ +
+ +httpEncryption
+ + + +bool + + + +
+ +

HTTPEncryption enables TLS encryption for all HTTP TempoStack services. +Each HTTP service requires a secret named as the service with the following data: +- tls.crt: The TLS server side certificate. +- tls.key: The TLS key for server-side encryption. +In addition each service requires a configmap named as the TempoStack CR with the +suffix -ca-bundle, e.g. tempo-dev-ca-bundle and the following data: +- service-ca.crt: The CA signing the service certificate in tls.crt. +This will protect all internal communication between the distributors and ingestors and also +between ingestor and queriers, and between the queriers and the query-frontend component +The only component remains unprotected is the tempo-query (jaeger query UI).

+ +
+ +grpcEncryption
+ + + +bool + + + +
+ +

GRPCEncryption enables TLS encryption for all GRPC TempoStack services. +Each GRPC service requires a secret named as the service with the following data: +- tls.crt: The TLS server side certificate. +- tls.key: The TLS key for server-side encryption. +In addition each service requires a configmap named as the TempoStack CR with the +suffix -ca-bundle, e.g. tempo-dev-ca-bundle and the following data: +- service-ca.crt: The CA signing the service certificate in tls.crt. +This will protect all internal communication between the distributors and ingestors and also +between ingestor and queriers, and between the queriers and the query-frontend component. +The only component remains unprotected is the tempo-query (jaeger query UI).

+ +
+ +tlsProfile
+ + + +string + + + +
+ +

TLSProfile allows to chose a TLS security profile. Enforced +when using HTTPEncryption or GRPCEncryption.

+ +
+ + +## ImagesSpec { #config-tempo-grafana-com-v1alpha1-ImagesSpec } + +

+ +(Appears on:ProjectConfig) + +

+ +
+ +

ImagesSpec defines the image for each container.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +tempo
+ + + +string + + + +
+ +(Optional) + +

Tempo defines the tempo container image.

+ +
+ +tempoQuery
+ + + +string + + + +
+ +(Optional) + +

TempoQuery defines the tempo-query container image.

+ +
+ +tempoGateway
+ + + +string + + + +
+ +(Optional) + +

TempoGateway defines the tempo-gateway container image.

+ +
+ + +## OpenShiftFeatureGates { #config-tempo-grafana-com-v1alpha1-OpenShiftFeatureGates } + +

+ +(Appears on:FeatureGates) + +

+ +
+ +

OpenShiftFeatureGates is the supported set of all operator features gates on OpenShift.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +servingCertsService
+ + + +bool + + + +
+ +

ServingCertsService enables OpenShift service-ca annotations on the TempoStack gateway service only +to use the in-platform CA and generate a TLS cert/key pair per service for +in-cluster data-in-transit encryption. +More details: https://docs.openshift.com/container-platform/latest/security/certificate_types_descriptions/service-ca-certificates.html

+ +
+ +gatewayRoute
+ + + +bool + + + +
+ +

GatewayRoute enables creating an OpenShift Route for the TempoStack +gateway to expose the service to public internet access. +More details: https://docs.openshift.com/container-platform/latest/networking/understanding-networking.html

+ +
+ +openshiftRoute
+ + + +bool + + + +
+ +

OpenShiftRoute enables creating OpenShift Route objects. +More details: https://docs.openshift.com/container-platform/latest/networking/understanding-networking.html

+ +
+ +baseDomain
+ + + +string + + + +
+ +

BaseDomain is used internally for redirect URL in gateway OpenShift auth mode. +If empty the operator automatically derives the domain from the cluster.

+ +
+ +ClusterTLSPolicy
+ + + +bool + + + +
+ +

ClusterTLSPolicy enables usage of TLS policies set in the API Server. +More details: https://docs.openshift.com/container-platform/4.11/security/tls-security-profiles.html

+ +
+ + +## ProjectConfig { #config-tempo-grafana-com-v1alpha1-ProjectConfig } + +
+ +

ProjectConfig is the Schema for the projectconfigs API.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+ +syncPeriod
+ + + + + +Kubernetes meta/v1.Duration + + + + + +
+ +(Optional) + +

SyncPeriod determines the minimum frequency at which watched resources are +reconciled. A lower period will correct entropy more quickly, but reduce +responsiveness to change if there are many watched resources. Change this +value only if you know what you are doing. Defaults to 10 hours if unset. +there will a 10 percent jitter between the SyncPeriod of all controllers +so that all controllers will not send list requests simultaneously.

+ +
+ +leaderElection
+ + + + + +Kubernetes v1alpha1.LeaderElectionConfiguration + + + + + +
+ +(Optional) + +

LeaderElection is the LeaderElection config to be used when configuring +the manager.Manager leader election

+ +
+ +cacheNamespace
+ + + +string + + + +
+ +(Optional) + +

CacheNamespace if specified restricts the manager’s cache to watch objects in +the desired namespace Defaults to all namespaces

+ +

Note: If a namespace is specified, controllers can still Watch for a +cluster-scoped resource (e.g Node). For namespaced resources the cache +will only hold objects from the desired namespace.

+ +
+ +gracefulShutDown
+ + + + + +Kubernetes meta/v1.Duration + + + + + +
+ +

GracefulShutdownTimeout is the duration given to runnable to stop before the manager actually returns on stop. +To disable graceful shutdown, set to time.Duration(0) +To use graceful shutdown without timeout, set to a negative duration, e.G. time.Duration(-1) +The graceful shutdown is skipped for safety reasons in case the leader election lease is lost.

+ +
+ +controller
+ + + + + +K8S Controller-runtime v1alpha1.ControllerConfigurationSpec + + + + + +
+ +(Optional) + +

Controller contains global configuration options for controllers +registered within this manager.

+ +
+ +metrics
+ + + + + +K8S Controller-runtime v1alpha1.ControllerMetrics + + + + + +
+ +(Optional) + +

Metrics contains thw controller metrics configuration

+ +
+ +health
+ + + + + +K8S Controller-runtime v1alpha1.ControllerHealth + + + + + +
+ +(Optional) + +

Health contains the controller health configuration

+ +
+ +webhook
+ + + + + +K8S Controller-runtime v1alpha1.ControllerWebhook + + + + + +
+ +(Optional) + +

Webhook contains the controllers webhook configuration

+ +
+ +images
+ + + + + +ImagesSpec + + + + + +
+ +
+ +featureGates
+ + + + + +FeatureGates + + + + + +
+ +
+ + +## TLSProfileType { #config-tempo-grafana-com-v1alpha1-TLSProfileType } + +(string alias) + +
+ +

TLSProfileType is a TLS security profile based on the Mozilla definitions: +https://wiki.mozilla.org/Security/Server_Side_TLS

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueDescription

"Intermediate"

TLSProfileIntermediateType is a TLS security profile based on: +https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29

+

"Modern"

TLSProfileModernType is a TLS security profile based on: +https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility

+

"Old"

TLSProfileOldType is a TLS security profile based on: +https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility

+
+ +
+ + + + diff --git a/docs/prologue/_index.md b/docs/prologue/_index.md new file mode 100644 index 000000000..930231f89 --- /dev/null +++ b/docs/prologue/_index.md @@ -0,0 +1,9 @@ +--- +title : "Prologue" +description: "Prologue for the Tempo Operator." +lead: "" +date: 2022-06-21T08:48:45+00:00 +lastmod: 2022-06-21T08:48:45+00:00 +draft: false +images: [] +--- diff --git a/docs/prologue/introduction.md b/docs/prologue/introduction.md new file mode 100644 index 000000000..a85f0b5c4 --- /dev/null +++ b/docs/prologue/introduction.md @@ -0,0 +1,27 @@ +--- +title: "Introduction" +description: "The Tempo Operator provides Kubernetes native deployment and management of Tenoi and related tracing components" +lead: "" +date: 2022-06-21T08:48:45+00:00 +lastmod: 2022-06-21T08:48:45+00:00 +draft: false +images: [] +menu: + docs: + parent: "prologue" +weight: 100 +toc: true +--- + +The Tempo Operator provides [Kubernetes](https://kubernetes.io/) native deployment and management of [Tempo](https://github.com/grafana/tempo) and related tracing components. +The purpose of this project is to simplify and automate the configuration of a Tempo based tracing stack for Kubernetes clusters. + +The Tempo operator includes, but is not limited to, the following features: + +* Kubernetes Custom Resources: Use Kubernetes custom resources to deploy and manage Tempo, and related components. +* Simplified Deployment Configuration: Configure the fundamentals of Tempo like tenants, limits, replication factor and storage from a native Kubernetes resource. + +## Get started + +### Quick Start + diff --git a/docs/tempostack/object_storage.md b/docs/tempostack/object_storage.md new file mode 100644 index 000000000..f8e61cd10 --- /dev/null +++ b/docs/tempostack/object_storage.md @@ -0,0 +1,49 @@ +--- +title: "Object Storage" +description: "Setup for storing traces to Object Storage" +lead: "" +date: 2022-06-21T08:48:45+00:00 +lastmod: 2022-06-21T08:48:45+00:00 +draft: false +images: [] +menu: + docs: + parent: "tempostack" +weight: 100 +toc: true +--- + +Tempo Operator supports [Minio](https://min.io/) for TempoStack object storage. + +## Minio + +### Requirements + +* Deploy Minio on your Cluster, e.g. using the [Minio Operator](https://operator.min.io/) + +* Create a [bucket](https://docs.min.io/docs/minio-client-complete-guide.html) on Minio via CLI. + +### Installation + +* Deploy the Tempo Operator to your cluster. + +* Create an Object Storage secret with keys as follows: + + ```console + kubectl create secret generic tempostack-dev-minio \ + --from-literal=bucket="" \ + --from-literal=endpoint="" \ + --from-literal=access_key_id="" \ + --from-literal=access_key_secret="" + ``` + + where `tempostack-dev-minio` is the secret name. + +* Create an instance of TempoStack by referencing the secret name: + + ```yaml + spec: + storage: + secret: + name: tempostack-dev-minio + ``` \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..46235aa56 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1242 @@ +{ + "name": "tempo-operator", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "postcss-cli": "^10.1.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-extra": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "peer": true, + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-cli": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz", + "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==", + "dependencies": { + "chokidar": "^3.3.0", + "dependency-graph": "^0.11.0", + "fs-extra": "^11.0.0", + "get-stdin": "^9.0.0", + "globby": "^13.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^4.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "postcss": "index.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-reporter": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz", + "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==", + "dependencies": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/slash": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz", + "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/thenby": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", + "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", + "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs-extra": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==" + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "dependencies": { + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + } + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "peer": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "peer": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-cli": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz", + "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==", + "requires": { + "chokidar": "^3.3.0", + "dependency-graph": "^0.11.0", + "fs-extra": "^11.0.0", + "get-stdin": "^9.0.0", + "globby": "^13.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^4.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "yargs": "^17.0.0" + } + }, + "postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + } + }, + "postcss-reporter": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz", + "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==", + "requires": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + } + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "slash": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz", + "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "peer": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "thenby": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", + "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yaml": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", + "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==" + }, + "yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..18a6f175e --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "postcss-cli": "^10.1.0" + } +} diff --git a/website/.hugo_build.lock b/website/.hugo_build.lock new file mode 100644 index 000000000..e69de29bb diff --git a/website/archetypes/default.md b/website/archetypes/default.md new file mode 100644 index 000000000..00e77bd79 --- /dev/null +++ b/website/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/website/archetypes/docs.md b/website/archetypes/docs.md new file mode 100644 index 000000000..d2a6282b0 --- /dev/null +++ b/website/archetypes/docs.md @@ -0,0 +1,16 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +description: "" +lead: "" +date: {{ .Date }} +lastmod: {{ .Date }} +draft: true +images: [] +menu: + docs: + parent: "" +weight: 999 +toc: true +--- + +{{< img src="{{ .Name | urlize }}.jpg" alt="{{ replace .Name "-" " " | title }}" caption="{{ replace .Name "-" " " | title }}" >}} diff --git a/website/assets/js/clipboard.js b/website/assets/js/clipboard.js new file mode 100644 index 000000000..b216c12bc --- /dev/null +++ b/website/assets/js/clipboard.js @@ -0,0 +1,18 @@ +import Clipboard from 'clipboard'; + +var clipboard = new Clipboard('.btn-clipboard'); + +clipboard.on('success', function(e) { + /* + console.info('Action:', e.action); + console.info('Text:', e.text); + console.info('Trigger:', e.trigger); + */ + + e.clearSelection(); +}); + +clipboard.on('error', function(e) { + console.error('Action:', e.action); + console.error('Trigger:', e.trigger); +}); diff --git a/website/assets/js/index.js b/website/assets/js/index.js new file mode 100644 index 000000000..19be4e804 --- /dev/null +++ b/website/assets/js/index.js @@ -0,0 +1,140 @@ +var suggestions = document.getElementById('suggestions'); +var userinput = document.getElementById('userinput'); + +document.addEventListener('keydown', inputFocus); + +function inputFocus(e) { + + if (e.keyCode === 191 ) { + e.preventDefault(); + userinput.focus(); + } + + if (e.keyCode === 27 ) { + userinput.blur(); + suggestions.classList.add('d-none'); + } + +} + +document.addEventListener('click', function(event) { + + var isClickInsideElement = suggestions.contains(event.target); + + if (!isClickInsideElement) { + suggestions.classList.add('d-none'); + } + +}); + +/* +Source: + - https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3 +*/ + +document.addEventListener('keydown',suggestionFocus); + +function suggestionFocus(e){ + + const focusableSuggestions= suggestions.querySelectorAll('a'); + const focusable= [...focusableSuggestions]; + const index = focusable.indexOf(document.activeElement); + + let nextIndex = 0; + + if (e.keyCode === 38) { + e.preventDefault(); + nextIndex= index > 0 ? index-1 : 0; + focusableSuggestions[nextIndex].focus(); + } + else if (e.keyCode === 40) { + e.preventDefault(); + nextIndex= index+1 < focusable.length ? index+1 : index; + focusableSuggestions[nextIndex].focus(); + } + +} + + +(function(){ + + var index = new FlexSearch({ + preset: 'score', + cache: true, + doc: { + id: 'id', + field: [ + 'title', + 'description', + 'content', + ], + store: [ + 'href', + 'title', + 'description', + ], + }, + }); + + var docs = [ + {{ range $index, $page := (where .Site.Pages "Section" "docs") -}} + { + id: {{ $index }}, + href: "{{ .RelPermalink | relURL }}", + title: {{ .Title | jsonify }}, + description: {{ .Params.description | jsonify }}, + content: {{ .Content | jsonify }} + }, + {{ end -}} + ]; + + index.add(docs); + + userinput.addEventListener('input', show_results, true); + suggestions.addEventListener('click', accept_suggestion, true); + + function show_results(){ + + var value = this.value; + var results = index.search(value, 5); + var entry, childs = suggestions.childNodes; + var i = 0, len = results.length; + + suggestions.classList.remove('d-none'); + + results.forEach(function(page) { + + entry = document.createElement('div'); + + entry.innerHTML = ''; + + a = entry.querySelector('a'), + t = entry.querySelector('span:first-child'), + d = entry.querySelector('span:nth-child(2)'); + + a.href = page.href; + t.textContent = page.title; + d.textContent = page.description; + + suggestions.appendChild(entry); + + }); + + while(childs.length > len){ + + suggestions.removeChild(childs[i]) + } + + } + + function accept_suggestion(){ + + while(suggestions.lastChild){ + + suggestions.removeChild(suggestions.lastChild); + } + + return false; + } + +}()); diff --git a/website/assets/scss/_variables.scss b/website/assets/scss/_variables.scss new file mode 100644 index 000000000..b69949ef0 --- /dev/null +++ b/website/assets/scss/_variables.scss @@ -0,0 +1,3 @@ +$tempooperator: #2b388f; + +$primary: $tempooperator; diff --git a/website/assets/scss/app.scss b/website/assets/scss/app.scss new file mode 100644 index 000000000..671688882 --- /dev/null +++ b/website/assets/scss/app.scss @@ -0,0 +1,37 @@ +/** Import Bootstrap functions */ +@import "bootstrap/scss/functions"; + +/** Import theme variables */ +@import "../../themes/doks/assets/scss/common/variables"; + +/** Overwrite variables */ +@import "variables"; + +/** Import Bootstrap */ +@import "bootstrap/scss/bootstrap"; + +/** Import highlight.js */ +// @import "highlight.js/scss/dracula"; + +/** Import KaTeX */ +@import "katex/dist/katex"; + +/** Import theme styles */ +@import "../../themes/doks/assets/scss/common/fonts"; +@import "../../themes/doks/assets/scss/common/global"; +@import "../../themes/doks/assets/scss/common/dark"; +@import "../../themes/doks/assets/scss/components/doks"; +// @import "components/syntax"; +@import "../../themes/doks/assets/scss/components/code"; +@import "../../themes/doks/assets/scss/components/alerts"; +@import "../../themes/doks/assets/scss/components/buttons"; +@import "../../themes/doks/assets/scss/components/comments"; +@import "../../themes/doks/assets/scss/components/forms"; +@import "../../themes/doks/assets/scss/components/images"; +@import "../../themes/doks/assets/scss/components/search"; +@import "../../themes/doks/assets/scss/components/tables"; +@import "../../themes/doks/assets/scss/layouts/footer"; +@import "../../themes/doks/assets/scss/layouts/header"; +@import "../../themes/doks/assets/scss/layouts/pages"; +@import "../../themes/doks/assets/scss/layouts/posts"; +@import "../../themes/doks/assets/scss/layouts/sidebar"; diff --git a/website/config.toml b/website/config.toml new file mode 100644 index 000000000..fe12a1e34 --- /dev/null +++ b/website/config.toml @@ -0,0 +1,14 @@ +baseURL = 'https://tempo-operator.dev/' +languageCode = 'en-us' +title = 'Tempo Operator' +theme = 'doks' + +[permalinks] + docs = "/:sections/:filename.md" + +[markup.goldmark.renderer] + unsafe = true +[markup.tableOfContents] + endLevel = 4 + ordered = false + startLevel = 1 diff --git a/website/config/_default/config.toml b/website/config/_default/config.toml new file mode 100644 index 000000000..6a2d22156 --- /dev/null +++ b/website/config/_default/config.toml @@ -0,0 +1,27 @@ +enableGitInfo = true + +[markup] + [markup.highlight] + codeFences = true + guessSyntax = false + hl_Lines = "" + lineNoStart = 1 + lineNos = false + lineNumbersInTable = true + noClasses = false + style = "dracula" + tabWidth = 4 + +[module] + [[module.mounts]] + source = "assets" + target = "assets" + [[module.mounts]] + source = "static" + target = "static" + [[module.mounts]] + source = "node_modules/flexsearch" + target = "assets/js/vendor/flexsearch" + [[module.mounts]] + source = "node_modules/katex" + target = "assets/js/vendor/katex" diff --git a/website/config/_default/menus.toml b/website/config/_default/menus.toml new file mode 100644 index 000000000..1a3507746 --- /dev/null +++ b/website/config/_default/menus.toml @@ -0,0 +1,34 @@ +[[docs]] + name = "Prologue" + weight = 10 + identifier = "prologue" + url = "/docs/prologue" + +[[docs]] + name = "Tempo Operator" + weight = 40 + identifier = "operator" + url = "/docs/operator/" + +[[docs]] + name = "TempoStack" + weight = 40 + identifier = "tempostack" + url = "/docs/tempostack/" + +[[main]] + name = "Docs" + url = "/docs/prologue/introduction.md/" + weight = 10 + +[[main]] + name = "Adopters" + url = "/adopters" + weight = 30 + +[[social]] + name = "GitHub" + pre = "" + url = "https://github.com/os-observability/tempo-operator" + weight = 10 + \ No newline at end of file diff --git a/website/config/_default/params.toml b/website/config/_default/params.toml new file mode 100644 index 000000000..52a61e4c7 --- /dev/null +++ b/website/config/_default/params.toml @@ -0,0 +1,47 @@ +# Meta Data for SEO + +## Homepage +title = "Tempo Operator" +titleSeparator = "-" +titleAddition = "Kubernetes Operator for Tempo" +description = "A Kubernetes Operator for Tempo provided by the Grafana Tempo SIG operator. " + +## Open Graph + Twitter Cards +images = ["logo.png"] +#twitterSite = "" +#twitterCreator = "" +#facebookAuthor = "" +#facebookPublisher = "" +ogLocale = "en_US" + +## JSON-LD +schemaType = "Organization" +schemaLogo = "logo.png" +schemaTwitter = "" +schemaLinkedIn = "" +schemaGitHub = "https://github.com/grafana" +schemaSection = "blog" + +## Sitelinks Search Box +siteLinksSearchBox = false + +## Chrome Browser +themeColor = "#fff" + +# Footer +footer = "Powered by Netlify, Hugo, and based on Doks" + +# Edit Page +docsRepo = "https://github.com/grafana/tempo" +editPage = false + +[options] + lazySizes = false + clipBoard = true + instantPage = false + flexSearch = true + darkMode = true + bootStrapJs = false + breadCrumb = true + highLight = false + kaTex = false diff --git a/website/config/postcss.config.js b/website/config/postcss.config.js new file mode 100644 index 000000000..3e790b7a6 --- /dev/null +++ b/website/config/postcss.config.js @@ -0,0 +1,32 @@ +const autoprefixer = require('autoprefixer'); +const purgecss = require('@fullhuman/postcss-purgecss'); +const whitelister = require('purgecss-whitelister'); + +module.exports = { + plugins: [ + autoprefixer(), + purgecss({ + content: [ + './layouts/**/*.html', + './content/**/*.md', + './themes/doks/layouts/**/*.html', + ], + safelist: [ + 'lazyloaded', + 'table', + 'thead', + 'tbody', + 'tr', + 'th', + 'td', + ...whitelister([ + './themes/doks/assets/scss/components/_doks.scss', + './themes/doks/assets/scss/components/_code.scss', + './themes/doks/assets/scss/components/_search.scss', + './themes/doks/assets/scss/common/_dark.scss', + './node_modules/katex/dist/katex.css', + ]), + ], + }), + ], +} diff --git a/website/content/_index.md b/website/content/_index.md new file mode 100644 index 000000000..d7bd756c0 --- /dev/null +++ b/website/content/_index.md @@ -0,0 +1,9 @@ +--- +title : "Tempo-Operator" +description: "A Kubernetes Operator for Tempo provided by the Grafana Tempo SIG operator. " +lead: "A Kubernetes Operator for Tempo provided by the Grafana Tempo SIG operator. " +date: 2021-04-30T09:45:00+00:00 +lastmod: 2021-04-30T09:45:00+00:00 +draft: false +images: [] +--- \ No newline at end of file diff --git a/website/content/adopters.md b/website/content/adopters.md new file mode 120000 index 000000000..ccfde01ee --- /dev/null +++ b/website/content/adopters.md @@ -0,0 +1 @@ +../../ADOPTERS.md \ No newline at end of file diff --git a/website/content/docs b/website/content/docs new file mode 120000 index 000000000..92a7f8253 --- /dev/null +++ b/website/content/docs @@ -0,0 +1 @@ +../../docs \ No newline at end of file diff --git a/website/layouts/index.html b/website/layouts/index.html new file mode 100644 index 000000000..91b24ccd6 --- /dev/null +++ b/website/layouts/index.html @@ -0,0 +1,43 @@ +{{ define "main" }} +
+
+
+ Tempo Logo +

{{ .Title }}

+
+
+

{{ .Params.lead | safeHTML }}

+ Get started +

AGPLv3 Licensed. GitHub

+
+
+
+{{ end }} + +{{ define "sidebar-prefooter" }} +
+
+
+
+

TempoStack

+

Secure and multi-tenant Tempo instances with built-in authentication/authorization

+
+
+
+
+

Authentication using OIDC/OAuth2/OpenShift

+
+
+
+
+{{ end }} + +{{ define "sidebar-footer" }} +
+
+
+ {{- .Content -}} +
+
+
+{{ end }} diff --git a/website/node_modules b/website/node_modules new file mode 120000 index 000000000..7660d66eb --- /dev/null +++ b/website/node_modules @@ -0,0 +1 @@ +themes/doks/node_modules \ No newline at end of file diff --git a/website/static/logo.png b/website/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..43b92279af97cc8b2525c1b35162f476c222c2dd GIT binary patch literal 15750 zcmb`ti93|v8$Yf>iAu>HQkKHl_cclyOWG_$mMnwDl5E*av=H8rG02iE$!^S8##pi? zW3RCeWnV|uu?@d7`h2hN?+^HL>AHHJ^PF>^`+nWad7b<1o!fe+PV$_jqoX?oy>;Ur z9o><2@P|CX2%f~udk%yDgu7h7eg}H}`o$+tJ>V{`j&yWa-Uq+exYc;=LbFXDhpyOZ zUsliWcTy!HBb6VsN8SBy5h$rqmr(Of*_wQD_Uk%MLv*Tvktb25xKA!iy z-=8~3Ja5tT?8!*1ABEp1T*;uDv`r7v;CCpi+J_fFPM zEbt$x9c}hU9#m=R6(?74v9i8(N_sTZ#M{)Df^G0mSN@@2rXO@${c$hDTY;*gXL~JG zvt{*ipWz}J#utP+qWB8DrNxtYR?d4G{__68S;n9Lu|gS@HC2q?As`8$bUo_awW5`ioI|4H|$iY>s(e>-KxRy6|dX{nTmczYgDX z7WK80bw1J6r1vOIJ>R#?aOzkn#KiU;zj)m$+x_{=>$X|91{XA!$>hbQF}cG15V}ja zr?2bxdEvk;jCKZkH|P#%zZv-4c<_Yj$t{={uwXy!?}*NolxN`Kac`)R?(vyp^bDsJ z&9gcF(9vC_gWk}7@N8%a?_cBS=rcpL+#Lx-R9A@H$l#KQwCmP+bBcQ%Lw(c0by-B? zOLT+p?3T_rU6>&cTYlw<>bn(0)m?S1`>&skcZgmXl%qa&*ldrB zi7&smnjOb+i|73*Aad=(dPS~sS5m7xL#)Q&SlSL3uQ&Bx zy5FlVY6dE8T%FAt_h9C|(_+^JkE9ms`VFY?d; zbarL4Bg}sCt72I+>2XbIR&}Y8v>?xw*;9t$PIYM=&^L_HBz>bdk-Rts>9c9nfazK% zw}ZaU?(<>R$p7j#vZjcXd?EbpIAMg7nR>&$2Pcyl@Nb$E%7(rZLkeq$ zGM21eWzCI;HHHUxdwjM2Zb_H~oMP(9sInJ+hkxhLt*;+$HFRar>E=#IVQSS9lpcRe zCbW;qLlJF!izj92Wm&SQxz`Z6IXV>^SlVWLNn0wjSL`BpIitvpB=Ij_ctJNm z#H`l|VGPO1LTT8l`jJD7m7^5*Sa`V#6jYRjILiwnCFE@(I*k`W0=**V1 zKSxp*m-?TILx#v5Uu7FzaQ)j=%b_(2(t^pbZUelNN5b&&S2mgI8`6Uea7O#1A4W#CMUeYv>MHzLkiQE{B(?*zI`dFo3j9Ie& zO_^mEerf8W<8UA`SMxqGHZ)gXX95v}D9Ui0q> z6jZJ~V6yk{Hf-natM=5uKfiw^$O_hpBL25A)`CK=X%ws~{7xtm4}CxBXB1+;7)<`f z-dR}K-8%N{o7eak%Bi;W^xfT`m&6L=LV5Lv@dKrnO!iXwLsu$*JYD@izLXE`tYIX) zM1OU0FweWP%Wsk~r1(&>d$pUx!05wfzlFkrZt6(itBET+nUh^ok_!Zw%lqb;6CNsP zdxPN72zE^2vaNhg@BH8Dr&6|~GqWt%{QzWjQJkNyQ9#G!htN<;#Z5E8*<%B$r4zX&?`ew=x8WZ0crzh|HOrV0pNDwvP_n)~?^7t=zgFNe_HnOe z;NWG3mL(x{H_PlQF)%8*iJxGEt#AI7{q+k&TgHqb<4aD|!{tW`qAwp6h!;<(Gv8v& z$LC6TQi^YrO8@>kQ7sfo{dzXBC_RK77Q<~`A6?o93))C99W4#)kK>GMU@Xdq#Z~pH zz4Ye&YQ*Rk;<{fE?sf^#vuwUQYCUZ{UW@4+kcUG7x@Xk$MgyuE4!+ zD3f33kC{@3GDgMDC0YMhA^w;>)#=Zg&nNL(x0#A*zCNh7z@VeYdsj~~FJeRB;cGjK zPL%2P058ecSixpZv(%M6RaB-g#Me5&=?>rieA{CKMkCc4PQ8j9JkQ*RjNSWn%0W&F z@t;QY^TlB`Kxm|#NSo~@iowi+{aq?nt<9Dy^Vudj=;`{8+e|xKDxx1HH6|SSHyxb2 zi##1xgkEyn1wa;lJig7ScG2R9@XJwDsX?6NfX~c;hwsg9dtImO-3Ps97Nfd7_rT6f zd;B>rNWNK<_|kjHvt4P~;1(lZxWCW9`q&GRm+ zA9odbE_RW6QA-Al__9F#L7FD*PyIx(Bzreajn?0#eKw5mfvLkG zx=l?5*@#R>75i82#JGz&3s!;Tj|Z6<48iSjDqV^4ANMcKY^hwIsZ$cK>K%WDQW5<7 zvCVd&ShUS{qSy)IM#&-bBuc`&I`*$PYsboCzV5Z%`8NJEKR{Mq7XEpNEViS5y`U23 zL>xz9yf1T0C^Qg;*)jM7gwxXY*jlKJxppk+^a9+m+Y^nnXr@CWFWC{{#BZG;LNA$G z$)_HgjaF!}n0B+f+)aq*Ky&y6hLUf-IRb}lG&dD6ppgN^xow?8!TkeJ*yz`7h+n@m zxfy1X-F&KapxI<)zyN`ZXNhCs@a#GVhZGtzqJuW6TW;DXt8u;+aM=g0#Cx$!`a38T z=E-%}0NL5Xs@xBJY-prNll-9N9!^f3WzA(8%Pt z2B$YuP7I>6qkYsRj&HA?W%UQGeFFw)y9kE}y%che2bLC91!ZkBe(lx*-PH1C;BWaz2WgfU4K%ozpkW5DN(0&Y6a1fr zk;^dKQnGN!pgp$xGT5b^I3!Lxt|3$B!PB%yi#(!p4wOk%Qp`yWEGE09wII6;=(`*O z-`$+)iP;LeV(b{3ZAuIAoE7 z%RzSF2Aabw^wFI#cN>ce%id~L5jSNxM9kfjy%fd>3yK8u|Kvp1rw991#x)lRw+>i6 zV%oXiPb8klDi1$&@!1qf=`YCEcJm`xsD@}nrBt9W;pr?ld#^SyRr}Xqsqsh9NX1mA zCkdvB0ck{@hr3T#LAHyVUj?1`y7H27zck{iuV-Gke*S$}&D1;YS1PoR;`Pn{`W zGw6eRAX*kuE|$9yC4z8>g3}6c7YKJ#f$)|?$vbS|OngHw+fn0njesaI?kVC{ieb`l#FZvk)RgCQvx&i%aj9U3auuJX~zaKoB+~)E6`o+ zvhp${SX3if?1*t|HHo)J6qdhd&}$6w72bWs$&E%Xg6Z?5MBoreak*+bZIqk)DavQq zFuCyDx^Bg2MO$`scHLPxB%#^$1I&Qin%rPA!Y7Y#fzrGv-kzfb@lg+rB@J)f`FL`N zU*nCU%>UH(1{m}|7DWwi*L%YxHg&FkRqaG4)^#z0g+*MmJ@K3lkc+lWW;n#h%J@vN z4&}>tQ4-j!2jMvwlL%zFX9LEleq>3Tq&yZXIEfc1yecdShhRuG)hxnqZm;tmljq4bX1wu*ggr zCNBkEAsa0C8d#V;;}u%d#cmqDY9XDMM$Ea(-Wo@0z%yuAgNr6_H&kw7M$)UVOf7P~ z2Cf(t&7KR$@VpJ0EycTguH+=SF@l&3_kV)TV*7%#=K$=*y7uG0YPebM|VZ z!o0-}fMW@`T8G6gMs%yI?Qk%1t)(FQi$jScC6BQ%Kd)_T^8ey+3l`K1)GjX-CCV+a zH)TSLBoEHZT|*-y$yeo;xcZ69-Bvlfk@%jUi|JLIu?LS}FK_j0p zUqxZEcy{zAhMx^Ug{Pc0ZQip$w0MJF1bY?gFn-Jb%rtvR8rS_DN0I$ zyP$9hfP$gTmaAXRau}Zvhuk%1-x<|L{>@VR2iypU|C$PC13CET9E)BA5G+PC)U_$M zruMy0p^-!MjA)J<`9luU)F2R}rfNW7{ElkfwMypvkdeZ^Sp5nXC5-^yqF`eTye_5k z5iw2~?on1Z%K&0z=BHGEOtFw}rCNT$GM2r*TGAH|y%axs0N- zr3kkvk0Bxri6HsWBxk{9(-akN57!Srvr!CDmMA!>k@nDXQ>VTlVqQ7%%Y#&!gSuu% z=mqF5oJ1qb4L3Fq`0*Pct!4Qv2)lVia@i6u5iB0ZCS6Pt|J*zOaGcoWApI`zBpkxj z>fUqpk;!a6d%L#>w8!hVg;?Q^yF5q$eiH!PwJ3-J;!nP)<6LC*(fn>oXYXpA9?&#a zf**|}M{>X+Zc#2OAaKV${rXCDwkq9QYU`3cu{Tp+d?3a3wR*1%f@w9t6o?1vrB#KJ zA0GX8?u7B@6KLTjPYTYE0Hz?_VpPKv0q2r}Pr)Hx6lYh*J7J^wnN!xoMjUA50}r#C z*$LYYplUFbHE-bf24MP;a>PHYznU@Asix;8>v}|b=x?SZez)G^uVL-aCrTe0as%Kg zrh+1CMTQsnLyJF$s!jUJ%`+39Dsveta%z5qaBM?39hlW062F9k8N80umcq+jAy}-= z8+}`QH>rIx;N>uR%GAQDZCq`J7QH&!Y=wQGAQ zVggqWqege&E3m}JD-zmcfu2OujfU*g5fFGMrM^HokdREU7#NIo zD9Hee6BIXdL!$VR8SSBWo(f!?>4>6MEga@KT8ev2xQ!uMRutXy(QVv09qggwV-`Vr z&SU5My&(JD8bIwvW(176&9-j_VFZU5_y!^N%RnN-?#Jq<*rG5XCqMa@o)0t1RPl@V z&_HcaWO+AarYCw=l^L-TEKbINmu(l@Y zqW0DE6%n4gmSJbt3uiw5jdBlg^HEBs>#z{ZXQ>8tyPGBmKs@Kr578VRZ5vGmj(`2D zn`0RTXD2+=|EQ3AI3Ki8W^_poyw1elZ$C01aL5}|zxW0$3UmHxml$Sgbjl~;;#oyf zUx2p2!5Pt1R?BrGsQ6wt`}$N|FOR8G2G3aVF9jW!6G+}-KIVV-yA&) zcv<5lI^;#a-<(W*$o$>CGY0#sFL3R>KSjG>{tu+ccs0dTDHr#-qwWl^SI1|}aCXU? zyONhS0tXthtJ#A_8(PY_moG@R!QZ+3*h{&LSO{{{CvX=9XQHlZ;a*vHz0`S7R^+<; z?Rz{+0BmO4O6~gn<4n~ypPYk8P$v(c-OFvUeSJ}Ce}taxj7Y?kZ&VmpDZ>RiCsM>g)??BVAr~9 zwLr#oK}FO`vi~u(5#vm$uhVEiY#s#GRcZ9CytNCc?nhjEtkx)F`gg#jcc3u5v}?a2 zSF?rDs?N~f*q_Qw9YIH12}hIe#cDKGCoKU^4V7Kvs~bciMq4mv+3y44v6AcN<__|!BZ zbL;1XSJ*AF%UkBiV-;y$vfpBPz*nkyi8(>p)-yb=;A*jKPgvYJZ1^ z>f98^!sf}JQZXc(^7S=JF*Kllv%gq1=y7G;ZC!GY^-pTuF*iT)M~h-Ei`p1czB4ap zk8jtAY?s=mQ%r@SJ*OMx#tdv^Af=DSE=jpB21Ze%FRNAXA?iMncE!A-HufWhWFiTp ziPO*X{^U{QbqLIzmH&rzNI>d;Dc5NOZq!Ecv?cbw_4(xkP9wp;U1SoooEH{sN*>%x z2+T;I@~}!9cY<#+Dx|%FNP@T=>}$1o3vdnp*L67@iFR6CwO+$clzddMkfv4dorrm* zYM;lW%yBh;+t9|E7QLm9*+8VXBy=WWyfr}xiEt=Eza7qcI5YUTd6&5w0sEEANuhoh zD&{5r>?vgXYYGPkhjJxAO^hengTmI_Ue-Jd76q--TFsvr)BHPjxyr2epejjp=qc7i zfqDbdmm3B%*aRUq+k|#TxNc`hl$E|AelBydEd#ed)15k8#J@h4d27fVBXV;(R>+@p zXC%~6@Hx!DQHg;7O39QoTK0Y*JJ9B{QKu(z^PurX;b!pAP~TrIgO>;PP(xQ6Xu$@6|AGQxvq!}mQ835oPx$o~k5D|JhwEuD02w(&(YLgJ)fv{%1dqu0&O z5;?4E(p5VlXfP%JYuvZ*kY9niJZ3pO{cMeMJZv~njTUJcZ?*w(M?9J zrs(9LLX3m7v09-v9d(XQa4llhpg=MgFl?YyZ7dj;l69%x(@yd^j$#zUDMjr zOVS(*I8rPGA02yTA#;8FDv3pAjof7fswfC=iB?6$bQ&NuOJfm{! z-~O1nQ!QR4t)CC17#;9Jr6iy2gqrYZ2ChI5N=~OrsL`SVijMaypsIy3nbsK!4&!)| z7r9GgcT8@%%MI3Qy~6(ssc^GM<10Fvbdn#Z&l8w~Coz}2GDJkVB!rR&TikWu;V&68 zi2pLqtSq(c2ssCB)$AB0TRQBF{QdbeVRL~kDJ0mprt1SvBYwDCs}mQ z!+cI7>fb(JL>aQ--HLVHV~6%92UHQOD=v>F7&Mx*nhJD5Id90w%;pV>3ZplS)M%Ii zpr4sLEU>t}+ez-+FzJ1*Md2Y>meA5fZn4(m(XdZFa)GO6m4h;E3_lgysiKkVzjOlw z{00gsjhF8X%HlXamke>W!aH|_{d(v z8O-vAXJ^)L*g?hb(){&OP86#yYd zoY?i7x3wsj;u@|rBx;!m-8deLmvR}&GAb><4POYDKS=+SJzVRSivX8x|BrsU8Q&Su z>B{VP#-Elk;v0<(Ccl%qAo-``%$qstetZ6+ZUAcH>pc~U8)AF6{4Zk`v+KqqGHR* zbUu6l)n>ThD^l=n)uO+Y4EhW-U~q9}DzDWY)}r}WL%ne$?a!7=mt6C}eJkcJ84!8} zo}{Tc?jNJf3J}(R`5UXR#$tB{2ifStPV?C=EEm<>=@n>`Po8f{gWiFk#SGd9>Gh^? zge*23kL1FET)a!33cWISW;36cnIHEng;khi@~IZZuGL+xZvRo@e&!6di=c5(DuDiR zMEiBdiun2HgS{=S_&vxmk43J;;?SfBl|v($Vu-bRoyoLL#yfi6YVwBbDhK!n?79rz_C;99+fN zmp#8xrlTYJNWf_>u&KGLkH=Q=g7pepb~fkf#0ql{s3sx0)!TKHjofK9Y^xi z*5x-i4wU>h*J(Ptu}G~m4jz_RYH{_`rU2%MM)e6|B zV?>Zn`!%s-J?D6+-RiLA)A&@Cn-_u=@84tF(1P@B)r(RM+;M>*Q5CXROuci7NY6D8 zSY1F$PD&m*p<2!u`?+1=^ZlF2fk7|aDBd0+yP1fPy(x)DoS|EyDH_DU1?s>*_g!!|+*!`#xt-D|AKX^@q5J)z-$@z^lQ>WxrJ*fVY zy93%zrZDAUrx?b1LcXU2XR8CNCVkYgcuhK!uX_pqM7-&*etC6BOr ze@W=@u&N!n`6{IU5;YK-yOeUjrn-qaS6wXGppZCXC*_B&TnLjA!XOcvcN-d}B>?c%4&eCZgKM}r^ z2&wBeO6-(8omQ=S`=_t*dAZyST1~mFFdu^k6+t;A$hC;m zthb4aB6X?{(Mb9~`U;5Bn=z!ES2l#jHhn@B zh}vK>m#?%Kw;=U{4NyCgZ(td)D52C&0`0SFBa6jqZp3>xhw+1{FYco@o@X4R|2|N? z;Rg+n^-CB5z~L&*}Hp_L*nfTyV$2PP4+3-2K=g(h*BM{X5GPUZQW}q^y|tweBN2 z4vW`$$x@Ru2=4qzX|-cUZ~gxkd3L_^q)B6uVL&cA=o^{m0z_X|Ul!Y*abkzlG;PAH zFS~x=jv=E_S{gnFQ&^ZQ}Xmd$r^@gPQl!uqLzD(08pG&!r=yWP-`;? z-3M)_W)+`lOFh*MiamWo_1c?v(dw0*S$s=l1Yx~O$s`Qw{wLZ@m#`M4h7|bMIKUiT zgpZzXeBtJ&^@}h6F%UbfiPZl=98j$1&-O9Db&2vDt$YWur7eUutiT8|gDZjK7tWP3 zNC2IDdg}Mc1YEZq+jl1xdEQMw1*f4jF7GTU)m#j)PzrFs8oIk40onZ8e-beKqo}Oc zFTcjz7oo=_VLl9Tqd5L)s@VbY|Xo;iL6s2n4IljfRK+!%|$n`05M(^)jl(V0Vc(ubHacN*S5vaM;pk^2U~fbWtEga zDKGPw1_LyCgU2^j=*ZmnnbKOQBAc$+(Llmjev&CIq&u=8G&N{2-ZCH4aLIrI$8oB{k@cG;0IgMBgFe5vsPe^2LKduDTBw4({@ z7)R4oV6^{O&ky)gxWrAs({EYnIaBT`5rCc9u^SpSuHXKr7?^bJx{c6Mo)x%0Y|Evz z+28wz3g148h%mLpum_OiGb;=+Bq8i`2H;N*9)|ddLB9)2gJL;0X{?|*TNmf9JkIq` zEt1WcrL*6j4wE|;Ssa44<)tD&qp)f~VcL>6C<=~Irj|owD`~`AyML42DwsjsQ}t7* zi991TT~GP$K^$-4D53d8TbP!=^XIJAulX^@ z!C-Sr7gT?Iq&fNx6|)D1!@-Q;CQ#T(r$h=)wwlOH<^KmxZM#~t?M+isTMyX_I?32Uz2zFQ)JAyuP#EviuQaJ(NxeP+8vjx zZ$0EjJVzO{Wu(nDx6z9#CtT78l(ygZ0%6&Sz{60{w9|+6S;K~%SW_y7aKYsX+ z^-rFO+qg!{BuP0-?vniPj?wVttLL?xWWpwmND_gIcUb%j9`COgSBIvIgd(kMdn*9> z-UbTJC>Pl2K*9gTE$nAaLBQ?4K|zPfB9M`dwi*8RL%bRy=`V-pB@_k1A^hmWc+*h2 z5y#$YusQOTff4Ym=fd8>AuWt@G|*QnPbf`u79x`{^pEM{*CB(4p{9Odvo_)NkHs*> zx2E&q7w;0J2^Mj!^8ey!Lzjk|`ThGg|CM`N+-)onenh|~VYW^l5WHH<8UBk9lsw|C zFH!t#ySpi#H(hNoc80v$s`AoicwrX{K(1juwH;lz{QWxCSYz8vHn3US?mw8NYe}+D zj7wXBa=$;33;l+|#U{#09@v%D{}#&CQ!Bs|G?4h_UVb8%^Y`j{Nwo4-9Lfz7HYj3WIqKbSpf}MEb8nZJVJ07jCn` znB#%a&}LL@Fy4^!$A&mMEz!Sa4S6n>#JJ}&WOL_!i}LK2p^W+;|JxKE9MsC#}I0h;2plpwUEOxe~mG%_3!8H|d&nkob}Ao)yeZHwO)7~c9_<-4Gb30_^p zt*F&?)DdJ3U{MqsDi|vRNYwek(~wh`;+pC({+Ep_)|Z%)yd824i#S$ z`_9p~o{oiBuDmaJ?GdtE+7-2Xee8qxw6>je-xvdiq3pCO?Ls)Nc4TA#0^$uFbf^|V zPQRs!-{Pf&WP1N0G9&B6d{BPHAK9Rx;x4+vM_+<@&%1R4Np(9(AptP9}{JN=rhvup}L8o@mcR-x`kXa%07Ex z>~GbM#M%UmquNLNtpA~wY4mB#LEbA^2Pn#0SI|H3o&tb6np1$DNms+n^b1?|GW3Xv z_RNC%u*GEWC=*SBRufp;&E6kbf9wXix0~x_Q=J|I06Nx>{X$_X<=q8p{LUC~gMsdD zArY6LuZ3!JIWIGI83|_VIR)TuG6}i?N<%w+`=nOGV<4nzbfKw)3nDLpc%-$JoO17i zLN180+@x2&O%i|}Tp=;yVt=uKI&i-Cy2)sz5mr#QJa;p~ul*_`Ek%KAG*esR_zGWv z0|=8@Qf61Br#BOtJf`-k-y&NtsrSmYmPdBVm7thHYdI(ZHcs3iFr+%^Q!Ry>H5ZJq z&#}0iu{@mET>UQ^d`;DiL>-<6Q^3l3aQ)!IEGPTP&TfmT&Wbe7Zu&k0}3 znSpt=oVZuqyR)&&o_+mks+Hl`z&4Xy(9)8&=31mzU1ifL1~&J54!RWbX*DP@&Cqrq z{-?En?4zQ0v4G7b7h}Ny)0HC6B;C^XI*f6@@4-L~Ge16+9qhEeFX3-)$ewvIXB}~h zm(9c?&tqgi+A7{_%#J(e0^YarjA6*#JDCYr1%DujcA(*`N+vy|Dka!`^bfC;;|3_F zo@6`;8E?Qej_&G0{WzXYkW=QWOS9Lkw?}xFNogv7wgz^1ANsyhD4w!V?e6{FXL&uO^Mb`n}qnPgJ5IW=c*yEsR{HoFYqet2xq^ zYSMQqI>`H+MBeJB4Y<&q6Zz*s3_riOIO4d*IkY!5zx{|970@MCbG%kFrd&Mcb95BH zRYik4q&Q&6w`Z;M?-kW{J8Ib_KC!-T7Ab-Eb6<2AG^S*bnu5uHmervzK%cK&OVOfz zs7|k{QeC^%~VJDlFzWt@EHU|Y-OV7is!Vld~7cH{foY^;2?@g`H(Vv$r$Bqo`&)mEcG0;*)$(xV1sW%}%51u}5 zbEY11P&pR{v!8auDP_u)*x7ad)%)LwW`SU5yo1fi!L)}8Lr$|BWhkDrog1C8{Kx2E zIVM)XlSiB$m{k!%2-!Ox=gaxkNw=IN*GlN|UEcFs*)6hi$cZgerHOp@vw%%q%R^2d zz4E6b^eTtdJ)3L-=-j!aX+q^!#OAHB zv37hr|6Fr4$&hWWeD{P}XrFTa5s=g^2z&WN4Rzm*9j!O^c*EYDhbo}Ul)afyhZsTc zr)mB18mrd_w!6s6VTIlw_RKOvB&S!NI?o0AJ9q*;Wvt?o(i>0G1_<4)drYk`3h`G? za7~i2^dPRfT31iC*dt4h(hj_D7?>3wiVjlb%-U$3N$76uZuj@epZO>%%^kuEOi7nVe;mY-KH+y@6%$qLeaVX0G~hfb)% zQBA9Mk?W9ycp;-$y~_a|ZZEC`r+~adIdFC5`&$bie)z5Jz`UM_5H)yLSKLXbn;p#o zl?|0SEQT+x9NbN;7drVG78NOvc)wsHGebKC|EGa_y>H$7AXAJJjht@1@DQoB+jW0r zu!R?3_3{tu21Pp%$hL$R0S!D7pI56 zpG0F?!rPS2nYB5Vlbl#(K${QkWUGl=azA8k1nnB}pnzac>iNhfbLiD>8q(qOMKH(_T>Iqdk`Zrxdvu>at2JpSl z3{xr)qs&Pg;CXmur4a%r2o7nt?iGMDXxM2w?cRP;)s3@gWVj5k9nnsGE+*p`pd!qb z4`>JAobkiPoZZ^hYu#tP=}w&8{f!TFsMccX`H{r>0i5h=mMJ!~q1pU$0@}x)OT+Fv z%Y*AvKQ6{JCqRR&VKvHJh41r&S9G2f%+<%BugZdVEf1mPpw9K0w$A!U{|8Cw2$NR8 zK19#`dx$b0vAO^34#6Vl?I0bRL+^0mxb1%RJvpdx)*&Tx6@C`iQkqMX|IauU>kH1~ z*Z{#;c;;3+lVs7ZkLm4hIuge=(8(-Ep0f*EfZfAYMo*Ttl zD|3mqXxM0x=Vi6i{^K`t)WLL*%CP=4?>GhyL_G1w zCqN~8g3YfGDkaTy12mcK@x6L6lT^IKzhZlVHo7-fW0<1^gag?eW)E+AKDsc66$~$b zTzU4n7gq~ZTR?jr!N!(&d6tg#VxXUMT`uWNpa~!P7aa21z3xwUW70Ma2)BZMbCkH; zdqFrFUrX!k>J0xqhl;;mPNG@Ut5kI4D7KK+?|7O^^-PN(m`jL^S7>-^Iwv!XAfEf5 zC}n}p&Tfh>Culu6s8b3E&;Qxv@R(Y_kEH-LaVwdAIO(dZ{WpMD1+umYK z!LS&;TefcgsMmc25RaSWIqRk(z&Z%M16Ans7Ju45O?Wr7TBN|bKnSohj0H3dz|6(B zfpU8speu>n4*Rp9Iqx43BGv@=; zUUCONIy)#|stbqwab=B{5-j1;KKwf8peCVfvoV{qJpr0ANj>ru!kWqhBIkSA$GuPJ;K$Raue-TXk~&lV=?0@CU=eT3b=bv*baVEXK26gOH=oA*5h(7d z%Nfua7wI2q(?F$p+V7HIeuhcI!H>+!Koa~22$S_&0wnzG7j{ArSodhtnV?>Lo*U&@ zBg0)!GY{f9z2G4-4Jto|MgmNAX|3-%cGYW#9`HzVU%A1fM+T83m}BCd#?UO!|L!_a z}sV}(ghCXVl{S&I}J`czEGx2voS~<|gca5;u)_(BZ!j%OXmU+}wTm5yZ=ep*|H`V)y`p{j z{S0-Rht}q4n7~RH#=nQy9-98AV}(<1nhq_$e6`yo8UG)Fg7Gpms&vlYkLjP`eV3Cd zr=U2?zJINoc`-^ZSJ8)2&7T}iaZg;p>a4S%ku9y>{XuXITI8^M?|$H>^mC^zU@Bu_ele)?!?}s$4~x!f;y@osl-=!gR@Cs=zjv%r#nuOBo>F0AOMqpYlj-lk z{r$5njiY_X6(5g}5+d2;I|Gyq40QP5VOP_60GHJ5aJnjlR5^KYv-g?e3m4B}{AMKX z2^v|bmb1C1g609ch$;I!e@g4aoRMVnFXl(lZj}1kD8ISJ*Vdc#mbI6_6fSoUW_P51 zQ2iKx=p}YoJjIg47g$gsHMY+C3IqqBpli%p*gt4^$X(u{K{pqinFDcrl;StEz2GYs z1*D^c_Ri`lJrrMK{_vG*jfWZRsvT<<<`J>d2v}(;mJS3%o>RGYXJ0Kis9MS;RUTGa z@pY|MYd2$`X`wl^kJE8U%nQIm^Kq$pxqk8Xa)|^cZGShvx{Bp}OW#onxRwH1tuL3T z*=g{oI+H%%nc*S;T ztppZhe7@0XZ&?vR7%Wat8dLWe{yyxs@yd#D3+Ut`=dhHuC){;kF#dMB$`2&y8l(4vVdz=J{A#H|$Uc|c8IaPhMDryI_$3D(@JR-yj&Sz+rtjBTu9hy# z^o7Qb?5~X&2<)Flvw(qLiXMkjeyB{WO~?gC9^eh?MCQJ)kMo!h16E2U_+9Pf7;?LV zdUf~PH_E{x6wVHyb4M*j%BD6*85_DZom(|WFPD0eG6Plo@M&XY61y9|>Gmx?V@Wc) z{b%C(mlS^4?U%ARME^+DnCj%7&jjHD>g@sZZ_&$Y$czdW+L0Ejd;3O_j&0cg2O`Po A;s5{u literal 0 HcmV?d00001 diff --git a/website/static/site.webmanifest b/website/static/site.webmanifest new file mode 100644 index 000000000..cfd5f677a --- /dev/null +++ b/website/static/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "Tempo Operator", + "short_name": "Tempo Operator", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#fff", + "background_color": "#fff", + "display": "standalone" +} diff --git a/website/themes/doks b/website/themes/doks new file mode 160000 index 000000000..14fe59727 --- /dev/null +++ b/website/themes/doks @@ -0,0 +1 @@ +Subproject commit 14fe597271d6efc7d77461798f22a6af068300d2