mirror of
https://github.com/zalando-incubator/kube-metrics-adapter.git
synced 2026-05-30 08:15:25 +00:00
Compare commits
151 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2be79ae0f2 | |||
| bf80e85e58 | |||
| c5017c7f89 | |||
| 613d6ba302 | |||
| 2ed22f04c2 | |||
| b79f3bf065 | |||
| 292bd4fc27 | |||
| be40d664f6 | |||
| 5418c64e8f | |||
| f0a07e0c64 | |||
| a1d90533e8 | |||
| e16119f821 | |||
| 96a1315ad3 | |||
| 8b1245cbc8 | |||
| 30dcc24c7f | |||
| d1d37dca26 | |||
| 221589d630 | |||
| 3acdacf8c9 | |||
| 62c50df209 | |||
| 25e6ce4bd1 | |||
| 52d3980c56 | |||
| da84a4292d | |||
| 80b80c878d | |||
| e44da55641 | |||
| b9308bd8a9 | |||
| 29ce099563 | |||
| a4306be7a5 | |||
| d346066ee7 | |||
| 763ba23fd9 | |||
| f4e7a37a7b | |||
| 21dae23214 | |||
| 7d47ff5c06 | |||
| c027968c71 | |||
| eef3840510 | |||
| 716d03a09b | |||
| f625fe9540 | |||
| 9e38fe15a5 | |||
| 0c7b5bdafe | |||
| b44fcbaae8 | |||
| eb27f6037f | |||
| 6149308e6d | |||
| 62cc9c98f3 | |||
| e03222b12b | |||
| 063d3de6d2 | |||
| 9c8837c8ff | |||
| ec55cda1f8 | |||
| f7dfe8aedf | |||
| e0a1ca5de6 | |||
| 876074ab75 | |||
| 5da796fc9a | |||
| 5f6a683d64 | |||
| d416441688 | |||
| 4204daa44f | |||
| f02956ea35 | |||
| e580c5b5f5 | |||
| 58000627d6 | |||
| 8fefda5935 | |||
| 26baf4baed | |||
| 4168dae7dd | |||
| 6c95e44756 | |||
| 9f26d4b2ed | |||
| c26604c36b | |||
| ca9031228b | |||
| 48f0df44d9 | |||
| 964c4ecf04 | |||
| 498f85e7b1 | |||
| bdb374c4c1 | |||
| 802bf08508 | |||
| ffe65bf915 | |||
| 9ff49a9b5f | |||
| 68fcf9bd2d | |||
| b4447316c1 | |||
| 477f9fd9b9 | |||
| 24e7b2439c | |||
| cd133b0781 | |||
| bf1a0b4631 | |||
| b371621159 | |||
| 0e88d4f910 | |||
| 81e28c98eb | |||
| 527a5fcde7 | |||
| 17d91ad77d | |||
| 45ea288963 | |||
| b0f2f2ce47 | |||
| a3bf15429c | |||
| 4d4dfe07b2 | |||
| 79918e0525 | |||
| 06e0010ce3 | |||
| 52d0261ab9 | |||
| 5863416214 | |||
| 108b45ed79 | |||
| f90c0a1455 | |||
| 42f93ea557 | |||
| c4123ff203 | |||
| 853addb5ab | |||
| 99a20bb7f6 | |||
| 9ca418320b | |||
| b8c79becde | |||
| 8245fbe772 | |||
| 8cfc92e81c | |||
| f9489767ed | |||
| a7007d6924 | |||
| 61d5880f8c | |||
| 12dca32316 | |||
| 900e78a318 | |||
| 35e0241cbf | |||
| cb80a498dd | |||
| f76e7033bd | |||
| f406e860c1 | |||
| 5a543781d7 | |||
| ca8592013c | |||
| 63517ebf70 | |||
| 5c942b9245 | |||
| e49845dc93 | |||
| f55afc0905 | |||
| 04f350698f | |||
| cafe11a109 | |||
| d74b7a1632 | |||
| 460ed1bd4c | |||
| 8831ac62d2 | |||
| ae5c2a538a | |||
| 68bd36ed7b | |||
| 7cd565c100 | |||
| 8f0b25517c | |||
| c8372976e6 | |||
| dcedc0c17e | |||
| f1a2e80d15 | |||
| 2f9aefc4e7 | |||
| 63120a8c1e | |||
| dcf686b9c5 | |||
| 77a04c49b6 | |||
| b237f5a9d2 | |||
| 136d31e97f | |||
| 4d4d5d44bf | |||
| a46a544bce | |||
| ea4a3eb421 | |||
| 897fcdd423 | |||
| 61e5cde106 | |||
| f9141fd882 | |||
| aece0b5efa | |||
| 856ce2c391 | |||
| 66b324bb30 | |||
| c765317359 | |||
| c973a9e712 | |||
| ef26f47884 | |||
| 2ec9b26ec8 | |||
| 7cc533c892 | |||
| c9ab7402c5 | |||
| 0e22243de6 | |||
| 91acacb4f4 | |||
| 0678ef1131 | |||
| 130c67cdf1 |
+14
-2
@@ -3,12 +3,24 @@ updates:
|
|||||||
- package-ecosystem: gomod
|
- package-ecosystem: gomod
|
||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: monthly
|
interval: weekly
|
||||||
time: "07:00"
|
|
||||||
open-pull-requests-limit: 10
|
open-pull-requests-limit: 10
|
||||||
|
groups:
|
||||||
|
all-go-mod-patch-and-minor:
|
||||||
|
patterns: ["*"]
|
||||||
|
update-types: ["patch", "minor"]
|
||||||
|
ignore:
|
||||||
|
# Ignore k8s and its transitives modules as they are upgraded manually
|
||||||
|
- dependency-name: "k8s.io/*"
|
||||||
|
update-types: [ "version-update:semver-major", "version-update:semver-minor" ]
|
||||||
- package-ecosystem: docker
|
- package-ecosystem: docker
|
||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: monthly
|
interval: monthly
|
||||||
time: "07:00"
|
time: "07:00"
|
||||||
open-pull-requests-limit: 10
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ jobs:
|
|||||||
tests:
|
tests:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-go@v2
|
- uses: actions/setup-go@v5
|
||||||
with:
|
with:
|
||||||
go-version: '^1.19'
|
go-version: '^1.24'
|
||||||
- run: go version
|
- run: go version
|
||||||
- run: go install github.com/mattn/goveralls@latest
|
- run: go install github.com/mattn/goveralls@latest
|
||||||
- run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
- run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
||||||
|
|||||||
@@ -38,11 +38,16 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: setup go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: '1.22'
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v2
|
uses: github/codeql-action/init@v3
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@@ -56,7 +61,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v2
|
uses: github/codeql-action/autobuild@v3
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
@@ -69,4 +74,4 @@ jobs:
|
|||||||
# ./location_of_script_within_repo/buildscript.sh
|
# ./location_of_script_within_repo/buildscript.sh
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v2
|
uses: github/codeql-action/analyze@v3
|
||||||
|
|||||||
+1
-3
@@ -1,9 +1,7 @@
|
|||||||
ARG BASE_IMAGE=registry.opensource.zalan.do/library/alpine-3:latest
|
ARG BASE_IMAGE=registry.opensource.zalan.do/library/static:latest
|
||||||
FROM ${BASE_IMAGE}
|
FROM ${BASE_IMAGE}
|
||||||
LABEL maintainer="Team Teapot @ Zalando SE <team-teapot@zalando.de>"
|
LABEL maintainer="Team Teapot @ Zalando SE <team-teapot@zalando.de>"
|
||||||
|
|
||||||
RUN apk add --no-cache tzdata
|
|
||||||
|
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH
|
||||||
|
|
||||||
ADD build/linux/${TARGETARCH}/kube-metrics-adapter /
|
ADD build/linux/${TARGETARCH}/kube-metrics-adapter /
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ $(GENERATED): go.mod $(CRD_TYPE_SOURCE) $(OPENAPI)
|
|||||||
./hack/update-codegen.sh
|
./hack/update-codegen.sh
|
||||||
|
|
||||||
$(GENERATED_CRDS): $(GENERATED) $(CRD_SOURCES)
|
$(GENERATED_CRDS): $(GENERATED) $(CRD_SOURCES)
|
||||||
go run sigs.k8s.io/controller-tools/cmd/controller-gen crd:crdVersions=v1 paths=./pkg/apis/... output:crd:dir=docs || /bin/true || true
|
go run sigs.k8s.io/controller-tools/cmd/controller-gen crd:crdVersions=v1 paths=./pkg/apis/... output:crd:dir=docs
|
||||||
mv docs/zalando.org_clusterscalingschedules.yaml docs/cluster_scaling_schedules_crd.yaml
|
mv docs/zalando.org_clusterscalingschedules.yaml docs/cluster_scaling_schedules_crd.yaml
|
||||||
mv docs/zalando.org_scalingschedules.yaml docs/scaling_schedules_crd.yaml
|
mv docs/zalando.org_scalingschedules.yaml docs/scaling_schedules_crd.yaml
|
||||||
|
|
||||||
@@ -42,11 +42,21 @@ $(OPENAPI): go.mod
|
|||||||
go run k8s.io/kube-openapi/cmd/openapi-gen \
|
go run k8s.io/kube-openapi/cmd/openapi-gen \
|
||||||
--go-header-file hack/boilerplate.go.txt \
|
--go-header-file hack/boilerplate.go.txt \
|
||||||
--logtostderr \
|
--logtostderr \
|
||||||
-i k8s.io/metrics/pkg/apis/custom_metrics,k8s.io/metrics/pkg/apis/custom_metrics/v1beta1,k8s.io/metrics/pkg/apis/custom_metrics/v1beta2,k8s.io/metrics/pkg/apis/external_metrics,k8s.io/metrics/pkg/apis/external_metrics/v1beta1,k8s.io/metrics/pkg/apis/metrics,k8s.io/metrics/pkg/apis/metrics/v1beta1,k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/api/resource,k8s.io/apimachinery/pkg/version,k8s.io/api/core/v1 \
|
--output-dir pkg/api/generated/openapi \
|
||||||
-p pkg/api/generated/openapi \
|
--output-pkg github.com/zalando-incubator/kube-metrics-adapter/pkg/api/generated/openapi \
|
||||||
-o . \
|
--output-file zz_generated.openapi.go \
|
||||||
-O zz_generated.openapi \
|
-r /dev/null \
|
||||||
-r /dev/null
|
k8s.io/metrics/pkg/apis/custom_metrics \
|
||||||
|
k8s.io/metrics/pkg/apis/custom_metrics/v1beta1 \
|
||||||
|
k8s.io/metrics/pkg/apis/custom_metrics/v1beta2 \
|
||||||
|
k8s.io/metrics/pkg/apis/external_metrics \
|
||||||
|
k8s.io/metrics/pkg/apis/external_metrics/v1beta1 \
|
||||||
|
k8s.io/metrics/pkg/apis/metrics \
|
||||||
|
k8s.io/metrics/pkg/apis/metrics/v1beta1 \
|
||||||
|
k8s.io/apimachinery/pkg/apis/meta/v1 \
|
||||||
|
k8s.io/apimachinery/pkg/api/resource \
|
||||||
|
k8s.io/apimachinery/pkg/version \
|
||||||
|
k8s.io/api/core/v1
|
||||||
|
|
||||||
build.local: build/$(BINARY) $(GENERATED_CRDS)
|
build.local: build/$(BINARY) $(GENERATED_CRDS)
|
||||||
build.linux: build/linux/$(BINARY)
|
build.linux: build/linux/$(BINARY)
|
||||||
|
|||||||
@@ -71,6 +71,15 @@ export GO111MODULE=on # needed if the project is checked out in your $GOPATH.
|
|||||||
$ make
|
$ make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Install in Kubernetes
|
||||||
|
|
||||||
|
Clone this repository, and run as below:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ cd kube-metrics-adapter/docs
|
||||||
|
$ kubectl apply -f .
|
||||||
|
```
|
||||||
|
|
||||||
## Collectors
|
## Collectors
|
||||||
|
|
||||||
Collectors are different implementations for getting metrics requested by an
|
Collectors are different implementations for getting metrics requested by an
|
||||||
@@ -82,9 +91,12 @@ HPA resource, or via additional annotations on the HPA resource.
|
|||||||
|
|
||||||
## Pod collector
|
## Pod collector
|
||||||
|
|
||||||
The pod collector allows collecting metrics from each pod matched by the HPA.
|
The pod collector allows collecting metrics from each pod matching the label selector defined in the HPA's `scaleTargetRef`.
|
||||||
Currently only `json-path` collection is supported.
|
Currently only `json-path` collection is supported.
|
||||||
|
|
||||||
|
### Supported HPA `scaleTargetRef`
|
||||||
|
The Pod Collector utilizes the `scaleTargetRef` specified in an HPA resource to obtain the label selector from the referenced Kubernetes object. This enables the identification and management of pods associated with that object. Currently, the supported Kubernetes objects for this operation are: `Deployment`, `StatefulSet` and [`Rollout`](https://argoproj.github.io/argo-rollouts/features/specification/).
|
||||||
|
|
||||||
### Supported metrics
|
### Supported metrics
|
||||||
|
|
||||||
| Metric | Description | Type | K8s Versions |
|
| Metric | Description | Type | K8s Versions |
|
||||||
@@ -104,6 +116,7 @@ metadata:
|
|||||||
annotations:
|
annotations:
|
||||||
# metric-config.<metricType>.<metricName>.<collectorType>/<configKey>
|
# metric-config.<metricType>.<metricName>.<collectorType>/<configKey>
|
||||||
metric-config.pods.requests-per-second.json-path/json-key: "$.http_server.rps"
|
metric-config.pods.requests-per-second.json-path/json-key: "$.http_server.rps"
|
||||||
|
metric-config.pods.requests-per-second.json-path/json-eval: "ceil($['active processes'] / $['total processes'] * 100)" # cannot use both json-eval and json-key
|
||||||
metric-config.pods.requests-per-second.json-path/path: /metrics
|
metric-config.pods.requests-per-second.json-path/path: /metrics
|
||||||
metric-config.pods.requests-per-second.json-path/port: "9090"
|
metric-config.pods.requests-per-second.json-path/port: "9090"
|
||||||
metric-config.pods.requests-per-second.json-path/scheme: "https"
|
metric-config.pods.requests-per-second.json-path/scheme: "https"
|
||||||
@@ -146,6 +159,10 @@ The json-path query support depends on the
|
|||||||
See the README for possible queries. It's expected that the metric you query
|
See the README for possible queries. It's expected that the metric you query
|
||||||
returns something that can be turned into a `float64`.
|
returns something that can be turned into a `float64`.
|
||||||
|
|
||||||
|
The `json-eval` configuration option allows for more complex calculations to be
|
||||||
|
performed on the extracted metric. The `json-eval` expression is evaluated using
|
||||||
|
[ajson's script engine](https://github.com/spyzhov/ajson?tab=readme-ov-file#script-engine).
|
||||||
|
|
||||||
The other configuration options `path`, `port` and `scheme` specify where the metrics
|
The other configuration options `path`, `port` and `scheme` specify where the metrics
|
||||||
endpoint is exposed on the pod. The `path` and `port` options do not have default values
|
endpoint is exposed on the pod. The `path` and `port` options do not have default values
|
||||||
so they must be defined. The `scheme` is optional and defaults to `http`.
|
so they must be defined. The `scheme` is optional and defaults to `http`.
|
||||||
@@ -226,6 +243,10 @@ metadata:
|
|||||||
# If specified, then this prometheus server is used,
|
# If specified, then this prometheus server is used,
|
||||||
# instead of the prometheus server specified as the CLI argument `--prometheus-server`.
|
# instead of the prometheus server specified as the CLI argument `--prometheus-server`.
|
||||||
metric-config.external.processed-events-per-second.prometheus/prometheus-server: http://prometheus.my-namespace.svc
|
metric-config.external.processed-events-per-second.prometheus/prometheus-server: http://prometheus.my-namespace.svc
|
||||||
|
# This annotation is optional.
|
||||||
|
# If specified, this will use one of the additional prometheus servers configured via the
|
||||||
|
# --additional-prometheus-server <name>=<url>,<name>=<url>,... CLI argument.
|
||||||
|
metric-config.external.processed-events-per-second.prometheus/prometheus-server-alias: external-prometheus
|
||||||
# metric-config.<metricType>.<metricName>.<collectorType>/<configKey>
|
# metric-config.<metricType>.<metricName>.<collectorType>/<configKey>
|
||||||
metric-config.external.processed-events-per-second.prometheus/query: |
|
metric-config.external.processed-events-per-second.prometheus/query: |
|
||||||
scalar(sum(rate(event-service_events_count{application="event-service",processed="true"}[1m])))
|
scalar(sum(rate(event-service_events_count{application="event-service",processed="true"}[1m])))
|
||||||
@@ -734,12 +755,12 @@ spec:
|
|||||||
- type: External
|
- type: External
|
||||||
external:
|
external:
|
||||||
metric:
|
metric:
|
||||||
name: my-nakadi-consumer
|
name: my-nakadi-consumer
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
type: nakadi
|
type: nakadi
|
||||||
subscription-id: "708095f6-cece-4d02-840e-ee488d710b29"
|
subscription-id: "708095f6-cece-4d02-840e-ee488d710b29"
|
||||||
metric-type: "consumer-lag-seconds|unconsumed-events"
|
metric-type: "consumer-lag-seconds|unconsumed-events"
|
||||||
target:
|
target:
|
||||||
# value is compatible with the consumer-lag-seconds metric type.
|
# value is compatible with the consumer-lag-seconds metric type.
|
||||||
# It describes the amount of consumer lag in seconds before scaling
|
# It describes the amount of consumer lag in seconds before scaling
|
||||||
@@ -788,6 +809,27 @@ with more consumers.
|
|||||||
For this case you should also account for the average time for processing an
|
For this case you should also account for the average time for processing an
|
||||||
event when defining the target.
|
event when defining the target.
|
||||||
|
|
||||||
|
Alternative to defining `subscription-id` you can also filter based on
|
||||||
|
`owning_application`, `event-types` and `consumer-group`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
metrics:
|
||||||
|
- type: External
|
||||||
|
external:
|
||||||
|
metric:
|
||||||
|
name: my-nakadi-consumer
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
type: nakadi
|
||||||
|
owning-application: "example-app"
|
||||||
|
# comma separated list of event types
|
||||||
|
event-types: "example-event-type,example-event-type2"
|
||||||
|
consumer-group: "abcd1234"
|
||||||
|
metric-type: "consumer-lag-seconds|unconsumed-events"
|
||||||
|
```
|
||||||
|
|
||||||
|
This is useful in dynamic environments where the subscription ID might not be
|
||||||
|
known before deployment time (e.g. because it's created by the same deployment).
|
||||||
|
|
||||||
## HTTP Collector
|
## HTTP Collector
|
||||||
|
|
||||||
@@ -813,6 +855,7 @@ metadata:
|
|||||||
annotations:
|
annotations:
|
||||||
# metric-config.<metricType>.<metricName>.<collectorType>/<configKey>
|
# metric-config.<metricType>.<metricName>.<collectorType>/<configKey>
|
||||||
metric-config.external.unique-metric-name.json-path/json-key: "$.some-metric.value"
|
metric-config.external.unique-metric-name.json-path/json-key: "$.some-metric.value"
|
||||||
|
metric-config.external.unique-metric-name.json-path/json-eval: ceil($['active processes'] / $['total processes'] * 100) # cannot use both json-eval and json-key
|
||||||
metric-config.external.unique-metric-name.json-path/endpoint: "http://metric-source.app-namespace:8080/metrics"
|
metric-config.external.unique-metric-name.json-path/endpoint: "http://metric-source.app-namespace:8080/metrics"
|
||||||
metric-config.external.unique-metric-name.json-path/aggregator: "max"
|
metric-config.external.unique-metric-name.json-path/aggregator: "max"
|
||||||
metric-config.external.unique-metric-name.json-path/interval: "60s" # optional
|
metric-config.external.unique-metric-name.json-path/interval: "60s" # optional
|
||||||
@@ -840,6 +883,8 @@ The HTTP collector similar to the Pod Metrics collector. The following
|
|||||||
configuration values are supported:
|
configuration values are supported:
|
||||||
|
|
||||||
- `json-key` to specify the JSON path of the metric to be queried
|
- `json-key` to specify the JSON path of the metric to be queried
|
||||||
|
- `json-eval` to specify an evaluate string to [evaluate on the script engine](https://github.com/spyzhov/ajson?tab=readme-ov-file#script-engine),
|
||||||
|
cannot be used in conjunction with `json-key`
|
||||||
- `endpoint` the fully formed path to query for the metric. In the above example a Kubernetes _Service_
|
- `endpoint` the fully formed path to query for the metric. In the above example a Kubernetes _Service_
|
||||||
in the namespace `app-namespace` is called.
|
in the namespace `app-namespace` is called.
|
||||||
- `aggregator` is only required if the metric is an array of values and specifies how the values
|
- `aggregator` is only required if the metric is an array of values and specifies how the values
|
||||||
|
|||||||
+1
-1
@@ -42,5 +42,5 @@ pipeline:
|
|||||||
make build.linux.amd64 build.linux.arm64
|
make build.linux.amd64 build.linux.arm64
|
||||||
|
|
||||||
docker buildx create --config /etc/cdp-buildkitd.toml --driver-opt network=host --bootstrap --use
|
docker buildx create --config /etc/cdp-buildkitd.toml --driver-opt network=host --bootstrap --use
|
||||||
docker buildx build --rm --build-arg BASE_IMAGE=container-registry.zalando.net/library/alpine-3:latest -t "${IMAGE}:${VERSION}" --platform linux/amd64,linux/arm64 --push .
|
docker buildx build --rm --build-arg BASE_IMAGE=container-registry.zalando.net/library/static:latest -t "${IMAGE}:${VERSION}" --platform linux/amd64,linux/arm64 --push .
|
||||||
cdp-promote-image "${IMAGE}:${VERSION}"
|
cdp-promote-image "${IMAGE}:${VERSION}"
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
|
|||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.9.0
|
controller-gen.kubebuilder.io/version: v0.17.3
|
||||||
creationTimestamp: null
|
|
||||||
name: clusterscalingschedules.zalando.org
|
name: clusterscalingschedules.zalando.org
|
||||||
spec:
|
spec:
|
||||||
group: zalando.org
|
group: zalando.org
|
||||||
@@ -12,6 +11,10 @@ spec:
|
|||||||
kind: ClusterScalingSchedule
|
kind: ClusterScalingSchedule
|
||||||
listKind: ClusterScalingScheduleList
|
listKind: ClusterScalingScheduleList
|
||||||
plural: clusterscalingschedules
|
plural: clusterscalingschedules
|
||||||
|
shortNames:
|
||||||
|
- css
|
||||||
|
- clustersched
|
||||||
|
- clusterschedule
|
||||||
singular: clusterscalingschedule
|
singular: clusterscalingschedule
|
||||||
scope: Cluster
|
scope: Cluster
|
||||||
versions:
|
versions:
|
||||||
@@ -23,18 +26,24 @@ spec:
|
|||||||
name: v1
|
name: v1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: ClusterScalingSchedule describes a cluster scoped time based
|
description: |-
|
||||||
metric to be used in autoscaling operations.
|
ClusterScalingSchedule describes a cluster scoped time based metric
|
||||||
|
to be used in autoscaling operations.
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: 'APIVersion defines the versioned schema of this representation
|
description: |-
|
||||||
of an object. Servers should convert recognized schemas to the latest
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
type: string
|
type: string
|
||||||
kind:
|
kind:
|
||||||
description: 'Kind is a string value representing the REST resource this
|
description: |-
|
||||||
object represents. Servers may infer this from the endpoint the client
|
Kind is a string value representing the REST resource this object represents.
|
||||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
type: string
|
type: string
|
||||||
metadata:
|
metadata:
|
||||||
type: object
|
type: object
|
||||||
@@ -47,25 +56,30 @@ spec:
|
|||||||
format: int64
|
format: int64
|
||||||
type: integer
|
type: integer
|
||||||
schedules:
|
schedules:
|
||||||
description: Schedules is the list of schedules for this ScalingSchedule
|
description: |-
|
||||||
|
Schedules is the list of schedules for this ScalingSchedule
|
||||||
resource. All the schedules defined here will result on the value
|
resource. All the schedules defined here will result on the value
|
||||||
to the same metric. New metrics require a new ScalingSchedule resource.
|
to the same metric. New metrics require a new ScalingSchedule
|
||||||
|
resource.
|
||||||
items:
|
items:
|
||||||
description: Schedule is the schedule details to be used inside
|
description: Schedule is the schedule details to be used inside
|
||||||
a ScalingSchedule.
|
a ScalingSchedule.
|
||||||
properties:
|
properties:
|
||||||
date:
|
date:
|
||||||
description: Defines the starting date of a OneTime schedule.
|
description: |-
|
||||||
It has to be a RFC3339 formatted date.
|
Defines the starting date of a OneTime schedule. It has to
|
||||||
|
be a RFC3339 formatted date.
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
durationMinutes:
|
durationMinutes:
|
||||||
description: The duration in minutes (default 0) that the configured
|
description: |-
|
||||||
value will be returned for the defined schedule.
|
The duration in minutes (default 0) that the configured value will be
|
||||||
|
returned for the defined schedule.
|
||||||
type: integer
|
type: integer
|
||||||
endDate:
|
endDate:
|
||||||
description: Defines the ending date of a OneTime schedule.
|
description: |-
|
||||||
It must be a RFC3339 formatted date.
|
Defines the ending date of a OneTime schedule. It must be
|
||||||
|
a RFC3339 formatted date.
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
period:
|
period:
|
||||||
@@ -95,8 +109,9 @@ spec:
|
|||||||
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
||||||
type: string
|
type: string
|
||||||
timezone:
|
timezone:
|
||||||
description: The location name corresponding to a file in
|
description: |-
|
||||||
the IANA Time Zone database, like Europe/Berlin.
|
The location name corresponding to a file in the IANA
|
||||||
|
Time Zone database, like Europe/Berlin.
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- days
|
- days
|
||||||
@@ -104,7 +119,8 @@ spec:
|
|||||||
- timezone
|
- timezone
|
||||||
type: object
|
type: object
|
||||||
type:
|
type:
|
||||||
description: Defines if the schedule is a OneTime schedule or
|
description: |-
|
||||||
|
Defines if the schedule is a OneTime schedule or
|
||||||
Repeating one. If OneTime, date has to be defined. If Repeating,
|
Repeating one. If OneTime, date has to be defined. If Repeating,
|
||||||
Period has to be defined.
|
Period has to be defined.
|
||||||
enum:
|
enum:
|
||||||
@@ -129,8 +145,9 @@ spec:
|
|||||||
properties:
|
properties:
|
||||||
active:
|
active:
|
||||||
default: false
|
default: false
|
||||||
description: Active is true if at least one of the schedules defined
|
description: |-
|
||||||
in the scaling schedule is currently active.
|
Active is true if at least one of the schedules defined in the
|
||||||
|
scaling schedule is currently active.
|
||||||
type: boolean
|
type: boolean
|
||||||
type: object
|
type: object
|
||||||
required:
|
required:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
name: kube-metrics-adapter
|
name: kube-metrics-adapter
|
||||||
version: 0.2.0
|
version: 0.2.3
|
||||||
description: kube-metrics-adapter helm chart
|
description: kube-metrics-adapter helm chart
|
||||||
home: https://github.com/zalando-incubator/kube-metrics-adapter
|
home: https://github.com/zalando-incubator/kube-metrics-adapter
|
||||||
maintainers:
|
maintainers:
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
|
|||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.8.0
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
creationTimestamp: null
|
|
||||||
name: clusterscalingschedules.zalando.org
|
name: clusterscalingschedules.zalando.org
|
||||||
spec:
|
spec:
|
||||||
group: zalando.org
|
group: zalando.org
|
||||||
@@ -23,18 +22,24 @@ spec:
|
|||||||
name: v1
|
name: v1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: ClusterScalingSchedule describes a cluster scoped time based
|
description: |-
|
||||||
metric to be used in autoscaling operations.
|
ClusterScalingSchedule describes a cluster scoped time based metric
|
||||||
|
to be used in autoscaling operations.
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: 'APIVersion defines the versioned schema of this representation
|
description: |-
|
||||||
of an object. Servers should convert recognized schemas to the latest
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
type: string
|
type: string
|
||||||
kind:
|
kind:
|
||||||
description: 'Kind is a string value representing the REST resource this
|
description: |-
|
||||||
object represents. Servers may infer this from the endpoint the client
|
Kind is a string value representing the REST resource this object represents.
|
||||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
type: string
|
type: string
|
||||||
metadata:
|
metadata:
|
||||||
type: object
|
type: object
|
||||||
@@ -47,25 +52,30 @@ spec:
|
|||||||
format: int64
|
format: int64
|
||||||
type: integer
|
type: integer
|
||||||
schedules:
|
schedules:
|
||||||
description: Schedules is the list of schedules for this ScalingSchedule
|
description: |-
|
||||||
|
Schedules is the list of schedules for this ScalingSchedule
|
||||||
resource. All the schedules defined here will result on the value
|
resource. All the schedules defined here will result on the value
|
||||||
to the same metric. New metrics require a new ScalingSchedule resource.
|
to the same metric. New metrics require a new ScalingSchedule
|
||||||
|
resource.
|
||||||
items:
|
items:
|
||||||
description: Schedule is the schedule details to be used inside
|
description: Schedule is the schedule details to be used inside
|
||||||
a ScalingSchedule.
|
a ScalingSchedule.
|
||||||
properties:
|
properties:
|
||||||
date:
|
date:
|
||||||
description: Defines the starting date of a OneTime schedule.
|
description: |-
|
||||||
It has to be a RFC3339 formatted date.
|
Defines the starting date of a OneTime schedule. It has to
|
||||||
|
be a RFC3339 formatted date.
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
durationMinutes:
|
durationMinutes:
|
||||||
description: The duration in minutes (default 0) that the configured
|
description: |-
|
||||||
value will be returned for the defined schedule.
|
The duration in minutes (default 0) that the configured value will be
|
||||||
|
returned for the defined schedule.
|
||||||
type: integer
|
type: integer
|
||||||
endDate:
|
endDate:
|
||||||
description: Defines the ending date of a OneTime schedule.
|
description: |-
|
||||||
It must be a RFC3339 formatted date.
|
Defines the ending date of a OneTime schedule. It must be
|
||||||
|
a RFC3339 formatted date.
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
period:
|
period:
|
||||||
@@ -95,8 +105,9 @@ spec:
|
|||||||
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
||||||
type: string
|
type: string
|
||||||
timezone:
|
timezone:
|
||||||
description: The location name corresponding to a file in
|
description: |-
|
||||||
the IANA Time Zone database, like Europe/Berlin.
|
The location name corresponding to a file in the IANA
|
||||||
|
Time Zone database, like Europe/Berlin.
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- days
|
- days
|
||||||
@@ -104,7 +115,8 @@ spec:
|
|||||||
- timezone
|
- timezone
|
||||||
type: object
|
type: object
|
||||||
type:
|
type:
|
||||||
description: Defines if the schedule is a OneTime schedule or
|
description: |-
|
||||||
|
Defines if the schedule is a OneTime schedule or
|
||||||
Repeating one. If OneTime, date has to be defined. If Repeating,
|
Repeating one. If OneTime, date has to be defined. If Repeating,
|
||||||
Period has to be defined.
|
Period has to be defined.
|
||||||
enum:
|
enum:
|
||||||
@@ -129,8 +141,9 @@ spec:
|
|||||||
properties:
|
properties:
|
||||||
active:
|
active:
|
||||||
default: false
|
default: false
|
||||||
description: Active is true if at least one of the schedules defined
|
description: |-
|
||||||
in the scaling schedule is currently active.
|
Active is true if at least one of the schedules defined in the
|
||||||
|
scaling schedule is currently active.
|
||||||
type: boolean
|
type: boolean
|
||||||
type: object
|
type: object
|
||||||
required:
|
required:
|
||||||
@@ -140,10 +153,4 @@ spec:
|
|||||||
storage: true
|
storage: true
|
||||||
subresources:
|
subresources:
|
||||||
status: {}
|
status: {}
|
||||||
status:
|
|
||||||
acceptedNames:
|
|
||||||
kind: ""
|
|
||||||
plural: ""
|
|
||||||
conditions: []
|
|
||||||
storedVersions: []
|
|
||||||
{{- end}}
|
{{- end}}
|
||||||
|
|||||||
@@ -39,170 +39,179 @@ spec:
|
|||||||
args:
|
args:
|
||||||
{{- if .Values.addDirectoryHeader }}
|
{{- if .Values.addDirectoryHeader }}
|
||||||
- --add_dir_header={{ .Values.addDirectoryHeader }}
|
- --add_dir_header={{ .Values.addDirectoryHeader }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.alsoToStderr }}
|
{{- if .Values.log.alsoToStderr }}
|
||||||
- --alsologtostderr={{ .Values.log.alsoToStderr }}
|
- --alsologtostderr={{ .Values.log.alsoToStderr }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.authentication.kubeConfig }}
|
{{- if .Values.authentication.kubeConfig }}
|
||||||
- --authentication-kubeconfig={{ .Values.authentication.kubeConfig }}
|
- --authentication-kubeconfig={{ .Values.authentication.kubeConfig }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.authentication.skipLookup }}
|
{{- if .Values.authentication.skipLookup }}
|
||||||
- --authentication-skip-lookup={{ .Values.authentication.skipLookup }}
|
- --authentication-skip-lookup={{ .Values.authentication.skipLookup }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.authentication.tokenWebhookCacheTtl }}
|
{{- if .Values.authentication.tokenWebhookCacheTtl }}
|
||||||
- --authentication-token-webhook-cache-ttl={{ .Values.authentication.tokenWebhookCacheTtl }}
|
- --authentication-token-webhook-cache-ttl={{ .Values.authentication.tokenWebhookCacheTtl }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.authentication.tolerateLookupFailure }}
|
{{- if .Values.authentication.tolerateLookupFailure }}
|
||||||
- --authentication-tolerate-lookup-failure={{ .Values.authentication.tolerateLookupFailure }}
|
- --authentication-tolerate-lookup-failure={{ .Values.authentication.tolerateLookupFailure }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.authorization.alwaysAllowPaths }}
|
{{- if .Values.authorization.alwaysAllowPaths }}
|
||||||
- --authorization-always-allow-paths={{ .Values.authorization.alwaysAllowPaths }}
|
- --authorization-always-allow-paths={{ .Values.authorization.alwaysAllowPaths }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.authorization.kubeConfig }}
|
{{- if .Values.authorization.kubeConfig }}
|
||||||
- --authorization-kubeconfig={{ .Values.authorization.kubeConfig }}
|
- --authorization-kubeconfig={{ .Values.authorization.kubeConfig }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.authorization.webhookCache.authorizedTtl }}
|
{{- if .Values.authorization.webhookCache.authorizedTtl }}
|
||||||
- --authorization-webhook-cache-authorized-ttl={{ .Values.authorization.webhookCache.authorizedTtl }}
|
- --authorization-webhook-cache-authorized-ttl={{ .Values.authorization.webhookCache.authorizedTtl }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.authorization.webhookCache.unauthorizedTtl }}
|
{{- if .Values.authorization.webhookCache.unauthorizedTtl }}
|
||||||
- --authorization-webhook-cache-unauthorized-ttl={{ .Values.authorization.webhookCache.unauthorizedTtl }}
|
- --authorization-webhook-cache-unauthorized-ttl={{ .Values.authorization.webhookCache.unauthorizedTtl }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.aws.externalMetrics }}
|
{{- if .Values.aws.externalMetrics }}
|
||||||
- --aws-external-metrics={{ .Values.aws.externalMetrics }}
|
- --aws-external-metrics={{ .Values.aws.externalMetrics }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.aws.region }}
|
{{- if .Values.aws.region }}
|
||||||
- --aws-region={{ .Values.aws.region }}
|
- --aws-region={{ .Values.aws.region }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.tls.certificateDirectory }}
|
{{- if .Values.tls.certificateDirectory }}
|
||||||
- --cert-dir={{ .Values.tls.certificateDirectory }}
|
- --cert-dir={{ .Values.tls.certificateDirectory }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.tls.clientCaFile }}
|
{{- if .Values.tls.clientCaFile }}
|
||||||
- --client-ca-file={{ .Values.tls.clientCaFile }}
|
- --client-ca-file={{ .Values.tls.clientCaFile }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.contentionProfiling }}
|
{{- if .Values.contentionProfiling }}
|
||||||
- --contention-profiling={{ .Values.contentionProfiling }}
|
- --contention-profiling={{ .Values.contentionProfiling }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.credentialsDirectory }}
|
{{- if .Values.credentialsDirectory }}
|
||||||
- --credentials-dir={{ .Values.credentialsDirectory }}
|
- --credentials-dir={{ .Values.credentialsDirectory }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.disregardIncompatibleHPAs }}
|
{{- if .Values.disregardIncompatibleHPAs }}
|
||||||
- --disregard-incompatible-hpas={{ .Values.disregardIncompatibleHPAs }}
|
- --disregard-incompatible-hpas={{ .Values.disregardIncompatibleHPAs }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.enableCustomMetricsApi }}
|
{{- if .Values.enableCustomMetricsApi }}
|
||||||
- --enable-custom-metrics-api={{ .Values.enableCustomMetricsApi }}
|
- --enable-custom-metrics-api={{ .Values.enableCustomMetricsApi }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.enableExternalMetricsApi }}
|
{{- if .Values.enableExternalMetricsApi }}
|
||||||
- --enable-external-metrics-api={{ .Values.enableExternalMetricsApi }}
|
- --enable-external-metrics-api={{ .Values.enableExternalMetricsApi }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.http2MaxStreamsPerConnection }}
|
{{- if .Values.http2MaxStreamsPerConnection }}
|
||||||
- --http2-max-streams-per-connection={{ .Values.http2MaxStreamsPerConnection }}
|
- --http2-max-streams-per-connection={{ .Values.http2MaxStreamsPerConnection }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.influxDB.address }}
|
{{- if .Values.influxDB.address }}
|
||||||
- --influxdb-address={{ .Values.influxDB.address }}
|
- --influxdb-address={{ .Values.influxDB.address }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.influxDB.organization }}
|
{{- if .Values.influxDB.organization }}
|
||||||
- --influxdb-org={{ .Values.influxDB.organization }}
|
- --influxdb-org={{ .Values.influxDB.organization }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.influxDB.token }}
|
{{- if .Values.influxDB.token }}
|
||||||
- --influxdb-token={{ .Values.influxDB.token }}
|
- --influxdb-token={{ .Values.influxDB.token }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.listerKubeConfig }}
|
{{- if .Values.listerKubeConfig }}
|
||||||
- --lister-kubeconfig={{ .Values.listerKubeConfig }}
|
- --lister-kubeconfig={{ .Values.listerKubeConfig }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.flushFrequency }}
|
{{- if .Values.log.flushFrequency }}
|
||||||
- --log-flush-frequency={{ .Values.log.flushFrequency }}
|
- --log-flush-frequency={{ .Values.log.flushFrequency }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.backtraceAtTraceLocation }}
|
{{- if .Values.log.backtraceAtTraceLocation }}
|
||||||
- --log_backtrace_at={{ .Values.log.backtraceAtTraceLocation }}
|
- --log_backtrace_at={{ .Values.log.backtraceAtTraceLocation }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.directory }}
|
{{- if .Values.log.directory }}
|
||||||
- --log_dir={{ .Values.log.directory }}
|
- --log_dir={{ .Values.log.directory }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.file }}
|
{{- if .Values.log.file }}
|
||||||
- --log_file={{ .Values.log.file }}
|
- --log_file={{ .Values.log.file }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.fileMaxSize }}
|
{{- if .Values.log.fileMaxSize }}
|
||||||
- --log_file_max_size={{ .Values.log.fileMaxSize }}
|
- --log_file_max_size={{ .Values.log.fileMaxSize }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.toStderr }}
|
{{- if .Values.log.toStderr }}
|
||||||
- --logtostderr={{ .Values.log.toStderr }}
|
- --logtostderr={{ .Values.log.toStderr }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.prometheus.metricsAddress }}
|
{{- if .Values.prometheus.metricsAddress }}
|
||||||
- --metrics-address={{ .Values.prometheus.metricsAddress }}
|
- --metrics-address={{ .Values.prometheus.metricsAddress }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.profiling }}
|
{{- if .Values.profiling }}
|
||||||
- --profiling={{ .Values.profiling }}
|
- --profiling={{ .Values.profiling }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.prometheus.server }}
|
{{- if .Values.prometheus.server }}
|
||||||
- --prometheus-server={{ .Values.prometheus.server }}
|
- --prometheus-server={{ .Values.prometheus.server }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
|
{{- if .Values.prometheus.serverTokenFile }}
|
||||||
|
- --prometheus-server-token-file={{ .Values.prometheus.serverTokenFile }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $name, $url := .Values.prometheus.additionalServers }}
|
||||||
|
- --additional-prometheus-server={{ $name }}={{ $url }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $name, $path := .Values.prometheus.additionalServerTokenFiles }}
|
||||||
|
- --additional-prometheus-server-token-file={{ $name }}={{ $path }}
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.requestHeader.allowedNames }}
|
{{- if .Values.requestHeader.allowedNames }}
|
||||||
- --requestheader-allowed-names={{ .Values.requestHeader.allowedNames }}
|
- --requestheader-allowed-names={{ .Values.requestHeader.allowedNames }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.requestHeader.clientCaFile }}
|
{{- if .Values.requestHeader.clientCaFile }}
|
||||||
- --requestheader-client-ca-file={{ .Values.requestHeader.clientCaFile }}
|
- --requestheader-client-ca-file={{ .Values.requestHeader.clientCaFile }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.requestHeader.extraHeadersPrefix }}
|
{{- if .Values.requestHeader.extraHeadersPrefix }}
|
||||||
- --requestheader-extra-headers-prefix={{ .Values.requestHeader.extraHeadersPrefix }}
|
- --requestheader-extra-headers-prefix={{ .Values.requestHeader.extraHeadersPrefix }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.requestHeader.groupHeaders }}
|
{{- if .Values.requestHeader.groupHeaders }}
|
||||||
- --requestheader-group-headers={{ .Values.requestHeader.groupHeaders }}
|
- --requestheader-group-headers={{ .Values.requestHeader.groupHeaders }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.requestHeader.usernameHeaders }}
|
{{- if .Values.requestHeader.usernameHeaders }}
|
||||||
- --requestheader-username-headers={{ .Values.requestHeader.usernameHeaders }}
|
- --requestheader-username-headers={{ .Values.requestHeader.usernameHeaders }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
- --secure-port={{ .Values.service.internalPort }}
|
- --secure-port={{ .Values.service.internalPort }}
|
||||||
{{- if .Values.log.skipHeaders }}
|
{{- if .Values.log.skipHeaders }}
|
||||||
- --skip_headers={{ .Values.log.skipHeaders }}
|
- --skip_headers={{ .Values.log.skipHeaders }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.skipLogHeaders }}
|
{{- if .Values.log.skipLogHeaders }}
|
||||||
- --skip_log_headers={{ .Values.log.skipLogHeaders }}
|
- --skip_log_headers={{ .Values.log.skipLogHeaders }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.skipperBackendsAnnotation }}
|
{{- if .Values.skipperBackendsAnnotation }}
|
||||||
- --skipper-backends-annotation={{ .Values.skipperBackendsAnnotation }}
|
- --skipper-backends-annotation={{ .Values.skipperBackendsAnnotation }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.skipperIngressMetrics }}
|
{{- if .Values.skipperIngressMetrics }}
|
||||||
- --skipper-ingress-metrics={{ .Values.skipperIngressMetrics }}
|
- --skipper-ingress-metrics={{ .Values.skipperIngressMetrics }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.skipperRouteGroupMetrics }}
|
{{- if .Values.skipperRouteGroupMetrics }}
|
||||||
- --skipper-routegroup-metrics={{ .Values.skipperRouteGroupMetrics }}
|
- --skipper-routegroup-metrics={{ .Values.skipperRouteGroupMetrics }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.stderrThreshold }}
|
{{- if .Values.log.stderrThreshold }}
|
||||||
- --stderrthreshold={{ .Values.log.stderrThreshold }}
|
- --stderrthreshold={{ .Values.log.stderrThreshold }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.tls.certFile }}
|
{{- if .Values.tls.certFile }}
|
||||||
- --tls-cert-file={{ .Values.tls.certFile }}
|
- --tls-cert-file={{ .Values.tls.certFile }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.tls.cipherSuites }}
|
{{- if .Values.tls.cipherSuites }}
|
||||||
- --tls-cipher-suites={{ .Values.tls.cipherSuites }}
|
- --tls-cipher-suites={{ .Values.tls.cipherSuites }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.tls.minVersion }}
|
{{- if .Values.tls.minVersion }}
|
||||||
- --tls-min-version={{ .Values.tls.minVersion }}
|
- --tls-min-version={{ .Values.tls.minVersion }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.tls.privateKeyFile }}
|
{{- if .Values.tls.privateKeyFile }}
|
||||||
- --tls-private-key-file={{ .Values.tls.privateKeyFile }}
|
- --tls-private-key-file={{ .Values.tls.privateKeyFile }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.tls.sniCertKey }}
|
{{- if .Values.tls.sniCertKey }}
|
||||||
- --tls-sni-cert-key={{ .Values.tls.sniCertKey }}
|
- --tls-sni-cert-key={{ .Values.tls.sniCertKey }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.token }}
|
{{- if .Values.token }}
|
||||||
- --token={{ .Values.token }}
|
- --token={{ .Values.token }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.log.level }}
|
{{- if .Values.log.level }}
|
||||||
- --v={{ .Values.log.level }}
|
- --v={{ .Values.log.level }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.vmodule }}
|
{{- if .Values.vmodule }}
|
||||||
- --vmodule={{ .Values.vmodule }}
|
- --vmodule={{ .Values.vmodule }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.zmon.kariosdbEndpoint }}
|
{{- if .Values.zmon.kariosdbEndpoint }}
|
||||||
- --zmon-kariosdb-endpoint={{ .Values.zmon.kariosdbEndpoint }}
|
- --zmon-kariosdb-endpoint={{ .Values.zmon.kariosdbEndpoint }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.zmon.tokenName }}
|
{{- if .Values.zmon.tokenName }}
|
||||||
- --zmon-token-name={{ .Values.zmon.tokenName }}
|
- --zmon-token-name={{ .Values.zmon.tokenName }}
|
||||||
{{- end}}
|
{{- end }}
|
||||||
{{- if .Values.scalingSchedule.enabled }}
|
{{- if .Values.scalingSchedule.enabled }}
|
||||||
- --scaling-schedule
|
- --scaling-schedule
|
||||||
{{- end}}
|
{{- end }}
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpu: {{ .Values.resources.limits.cpu }}
|
cpu: {{ .Values.resources.limits.cpu }}
|
||||||
@@ -210,3 +219,9 @@ spec:
|
|||||||
requests:
|
requests:
|
||||||
cpu: {{ .Values.resources.requests.cpu }}
|
cpu: {{ .Values.resources.requests.cpu }}
|
||||||
memory: {{ .Values.resources.requests.memory }}
|
memory: {{ .Values.resources.requests.memory }}
|
||||||
|
{{- if .Values.volumeMounts }}
|
||||||
|
volumeMounts: {{- toYaml .Values.volumeMounts | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.volumes }}
|
||||||
|
volumes: {{- toYaml .Values.volumes | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
|
|||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.8.0
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
creationTimestamp: null
|
|
||||||
name: scalingschedules.zalando.org
|
name: scalingschedules.zalando.org
|
||||||
spec:
|
spec:
|
||||||
group: zalando.org
|
group: zalando.org
|
||||||
@@ -25,18 +24,24 @@ spec:
|
|||||||
name: v1
|
name: v1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: ScalingSchedule describes a namespaced time based metric to be
|
description: |-
|
||||||
used in autoscaling operations.
|
ScalingSchedule describes a namespaced time based metric to be used
|
||||||
|
in autoscaling operations.
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: 'APIVersion defines the versioned schema of this representation
|
description: |-
|
||||||
of an object. Servers should convert recognized schemas to the latest
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
type: string
|
type: string
|
||||||
kind:
|
kind:
|
||||||
description: 'Kind is a string value representing the REST resource this
|
description: |-
|
||||||
object represents. Servers may infer this from the endpoint the client
|
Kind is a string value representing the REST resource this object represents.
|
||||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
type: string
|
type: string
|
||||||
metadata:
|
metadata:
|
||||||
type: object
|
type: object
|
||||||
@@ -49,25 +54,30 @@ spec:
|
|||||||
format: int64
|
format: int64
|
||||||
type: integer
|
type: integer
|
||||||
schedules:
|
schedules:
|
||||||
description: Schedules is the list of schedules for this ScalingSchedule
|
description: |-
|
||||||
|
Schedules is the list of schedules for this ScalingSchedule
|
||||||
resource. All the schedules defined here will result on the value
|
resource. All the schedules defined here will result on the value
|
||||||
to the same metric. New metrics require a new ScalingSchedule resource.
|
to the same metric. New metrics require a new ScalingSchedule
|
||||||
|
resource.
|
||||||
items:
|
items:
|
||||||
description: Schedule is the schedule details to be used inside
|
description: Schedule is the schedule details to be used inside
|
||||||
a ScalingSchedule.
|
a ScalingSchedule.
|
||||||
properties:
|
properties:
|
||||||
date:
|
date:
|
||||||
description: Defines the starting date of a OneTime schedule.
|
description: |-
|
||||||
It has to be a RFC3339 formatted date.
|
Defines the starting date of a OneTime schedule. It has to
|
||||||
|
be a RFC3339 formatted date.
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
durationMinutes:
|
durationMinutes:
|
||||||
description: The duration in minutes (default 0) that the configured
|
description: |-
|
||||||
value will be returned for the defined schedule.
|
The duration in minutes (default 0) that the configured value will be
|
||||||
|
returned for the defined schedule.
|
||||||
type: integer
|
type: integer
|
||||||
endDate:
|
endDate:
|
||||||
description: Defines the ending date of a OneTime schedule.
|
description: |-
|
||||||
It must be a RFC3339 formatted date.
|
Defines the ending date of a OneTime schedule. It must be
|
||||||
|
a RFC3339 formatted date.
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
period:
|
period:
|
||||||
@@ -97,8 +107,9 @@ spec:
|
|||||||
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
||||||
type: string
|
type: string
|
||||||
timezone:
|
timezone:
|
||||||
description: The location name corresponding to a file in
|
description: |-
|
||||||
the IANA Time Zone database, like Europe/Berlin.
|
The location name corresponding to a file in the IANA
|
||||||
|
Time Zone database, like Europe/Berlin.
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- days
|
- days
|
||||||
@@ -106,7 +117,8 @@ spec:
|
|||||||
- timezone
|
- timezone
|
||||||
type: object
|
type: object
|
||||||
type:
|
type:
|
||||||
description: Defines if the schedule is a OneTime schedule or
|
description: |-
|
||||||
|
Defines if the schedule is a OneTime schedule or
|
||||||
Repeating one. If OneTime, date has to be defined. If Repeating,
|
Repeating one. If OneTime, date has to be defined. If Repeating,
|
||||||
Period has to be defined.
|
Period has to be defined.
|
||||||
enum:
|
enum:
|
||||||
@@ -131,8 +143,9 @@ spec:
|
|||||||
properties:
|
properties:
|
||||||
active:
|
active:
|
||||||
default: false
|
default: false
|
||||||
description: Active is true if at least one of the schedules defined
|
description: |-
|
||||||
in the scaling schedule is currently active.
|
Active is true if at least one of the schedules defined in the
|
||||||
|
scaling schedule is currently active.
|
||||||
type: boolean
|
type: boolean
|
||||||
type: object
|
type: object
|
||||||
required:
|
required:
|
||||||
@@ -142,10 +155,4 @@ spec:
|
|||||||
storage: true
|
storage: true
|
||||||
subresources:
|
subresources:
|
||||||
status: {}
|
status: {}
|
||||||
status:
|
|
||||||
acceptedNames:
|
|
||||||
kind: ""
|
|
||||||
plural: ""
|
|
||||||
conditions: []
|
|
||||||
storedVersions: []
|
|
||||||
{{- end}}
|
{{- end}}
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ apiVersion: v1
|
|||||||
metadata:
|
metadata:
|
||||||
name: kube-metrics-adapter
|
name: kube-metrics-adapter
|
||||||
namespace: {{ .Values.namespace }}
|
namespace: {{ .Values.namespace }}
|
||||||
|
annotations: {{- toYaml .Values.serviceAccountAnnotations | nindent 4 }}
|
||||||
|
|||||||
+15
-6
@@ -3,8 +3,8 @@ namespace: kube-system
|
|||||||
replicas: 1
|
replicas: 1
|
||||||
|
|
||||||
registry:
|
registry:
|
||||||
image: registry.opensource.zalan.do/teapot/kube-metrics-adapter
|
image: ghcr.io/zalando-incubator/kube-metrics-adapter
|
||||||
imageTag: v0.2.0
|
imageTag: v0.2.3
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
|
|
||||||
service:
|
service:
|
||||||
@@ -14,15 +14,15 @@ service:
|
|||||||
addDirectoryHeader:
|
addDirectoryHeader:
|
||||||
contentionProfiling:
|
contentionProfiling:
|
||||||
profiling:
|
profiling:
|
||||||
enableCustomMetricsApi:
|
enableCustomMetricsApi: true
|
||||||
enableExternalMetricsApi:
|
enableExternalMetricsApi: true
|
||||||
credentialsDirectory:
|
credentialsDirectory:
|
||||||
disregardIncompatibleHPAs:
|
disregardIncompatibleHPAs:
|
||||||
http2MaxStreamsPerConnection:
|
http2MaxStreamsPerConnection:
|
||||||
listerKubeConfig:
|
listerKubeConfig:
|
||||||
skipperBackendsAnnotation:
|
skipperBackendsAnnotation:
|
||||||
skipperIngressMetrics:
|
skipperIngressMetrics:
|
||||||
skipperRouteGroupMetrics:
|
skipperRouteGroupMetrics: true
|
||||||
token:
|
token:
|
||||||
vmodule:
|
vmodule:
|
||||||
|
|
||||||
@@ -63,6 +63,9 @@ log:
|
|||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
server: http://prometheus.kube-system.svc.cluster.local
|
server: http://prometheus.kube-system.svc.cluster.local
|
||||||
|
serverTokenFile:
|
||||||
|
additionalServers: {}
|
||||||
|
additionalServerTokenFiles: {}
|
||||||
metricsAddress:
|
metricsAddress:
|
||||||
|
|
||||||
requestHeader:
|
requestHeader:
|
||||||
@@ -95,7 +98,7 @@ resources:
|
|||||||
memory: 100Mi
|
memory: 100Mi
|
||||||
|
|
||||||
scalingSchedule:
|
scalingSchedule:
|
||||||
enabled: false
|
enabled: true
|
||||||
|
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
kubernetes.io/os: linux
|
kubernetes.io/os: linux
|
||||||
@@ -107,3 +110,9 @@ affinity: {}
|
|||||||
priorityClassName: ""
|
priorityClassName: ""
|
||||||
|
|
||||||
podAnnotations: {}
|
podAnnotations: {}
|
||||||
|
|
||||||
|
serviceAccountAnnotations: {}
|
||||||
|
|
||||||
|
volumes: []
|
||||||
|
|
||||||
|
volumeMounts: []
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
|
|||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.9.0
|
controller-gen.kubebuilder.io/version: v0.17.3
|
||||||
creationTimestamp: null
|
|
||||||
name: scalingschedules.zalando.org
|
name: scalingschedules.zalando.org
|
||||||
spec:
|
spec:
|
||||||
group: zalando.org
|
group: zalando.org
|
||||||
@@ -14,6 +13,9 @@ spec:
|
|||||||
kind: ScalingSchedule
|
kind: ScalingSchedule
|
||||||
listKind: ScalingScheduleList
|
listKind: ScalingScheduleList
|
||||||
plural: scalingschedules
|
plural: scalingschedules
|
||||||
|
shortNames:
|
||||||
|
- sched
|
||||||
|
- schedule
|
||||||
singular: scalingschedule
|
singular: scalingschedule
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
versions:
|
versions:
|
||||||
@@ -25,18 +27,24 @@ spec:
|
|||||||
name: v1
|
name: v1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: ScalingSchedule describes a namespaced time based metric to be
|
description: |-
|
||||||
used in autoscaling operations.
|
ScalingSchedule describes a namespaced time based metric to be used
|
||||||
|
in autoscaling operations.
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: 'APIVersion defines the versioned schema of this representation
|
description: |-
|
||||||
of an object. Servers should convert recognized schemas to the latest
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
type: string
|
type: string
|
||||||
kind:
|
kind:
|
||||||
description: 'Kind is a string value representing the REST resource this
|
description: |-
|
||||||
object represents. Servers may infer this from the endpoint the client
|
Kind is a string value representing the REST resource this object represents.
|
||||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
type: string
|
type: string
|
||||||
metadata:
|
metadata:
|
||||||
type: object
|
type: object
|
||||||
@@ -49,25 +57,30 @@ spec:
|
|||||||
format: int64
|
format: int64
|
||||||
type: integer
|
type: integer
|
||||||
schedules:
|
schedules:
|
||||||
description: Schedules is the list of schedules for this ScalingSchedule
|
description: |-
|
||||||
|
Schedules is the list of schedules for this ScalingSchedule
|
||||||
resource. All the schedules defined here will result on the value
|
resource. All the schedules defined here will result on the value
|
||||||
to the same metric. New metrics require a new ScalingSchedule resource.
|
to the same metric. New metrics require a new ScalingSchedule
|
||||||
|
resource.
|
||||||
items:
|
items:
|
||||||
description: Schedule is the schedule details to be used inside
|
description: Schedule is the schedule details to be used inside
|
||||||
a ScalingSchedule.
|
a ScalingSchedule.
|
||||||
properties:
|
properties:
|
||||||
date:
|
date:
|
||||||
description: Defines the starting date of a OneTime schedule.
|
description: |-
|
||||||
It has to be a RFC3339 formatted date.
|
Defines the starting date of a OneTime schedule. It has to
|
||||||
|
be a RFC3339 formatted date.
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
durationMinutes:
|
durationMinutes:
|
||||||
description: The duration in minutes (default 0) that the configured
|
description: |-
|
||||||
value will be returned for the defined schedule.
|
The duration in minutes (default 0) that the configured value will be
|
||||||
|
returned for the defined schedule.
|
||||||
type: integer
|
type: integer
|
||||||
endDate:
|
endDate:
|
||||||
description: Defines the ending date of a OneTime schedule.
|
description: |-
|
||||||
It must be a RFC3339 formatted date.
|
Defines the ending date of a OneTime schedule. It must be
|
||||||
|
a RFC3339 formatted date.
|
||||||
format: date-time
|
format: date-time
|
||||||
type: string
|
type: string
|
||||||
period:
|
period:
|
||||||
@@ -97,8 +110,9 @@ spec:
|
|||||||
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
||||||
type: string
|
type: string
|
||||||
timezone:
|
timezone:
|
||||||
description: The location name corresponding to a file in
|
description: |-
|
||||||
the IANA Time Zone database, like Europe/Berlin.
|
The location name corresponding to a file in the IANA
|
||||||
|
Time Zone database, like Europe/Berlin.
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- days
|
- days
|
||||||
@@ -106,7 +120,8 @@ spec:
|
|||||||
- timezone
|
- timezone
|
||||||
type: object
|
type: object
|
||||||
type:
|
type:
|
||||||
description: Defines if the schedule is a OneTime schedule or
|
description: |-
|
||||||
|
Defines if the schedule is a OneTime schedule or
|
||||||
Repeating one. If OneTime, date has to be defined. If Repeating,
|
Repeating one. If OneTime, date has to be defined. If Repeating,
|
||||||
Period has to be defined.
|
Period has to be defined.
|
||||||
enum:
|
enum:
|
||||||
@@ -131,8 +146,9 @@ spec:
|
|||||||
properties:
|
properties:
|
||||||
active:
|
active:
|
||||||
default: false
|
default: false
|
||||||
description: Active is true if at least one of the schedules defined
|
description: |-
|
||||||
in the scaling schedule is currently active.
|
Active is true if at least one of the schedules defined in the
|
||||||
|
scaling schedule is currently active.
|
||||||
type: boolean
|
type: boolean
|
||||||
type: object
|
type: object
|
||||||
required:
|
required:
|
||||||
|
|||||||
@@ -1,128 +1,197 @@
|
|||||||
module github.com/zalando-incubator/kube-metrics-adapter
|
module github.com/zalando-incubator/kube-metrics-adapter
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/aws/aws-sdk-go v1.49.13
|
github.com/argoproj/argo-rollouts v1.8.2
|
||||||
github.com/influxdata/influxdb-client-go v0.2.0
|
github.com/aws/aws-sdk-go-v2 v1.36.3
|
||||||
github.com/prometheus/client_golang v1.18.0
|
github.com/aws/aws-sdk-go-v2/config v1.29.14
|
||||||
github.com/prometheus/common v0.45.0
|
github.com/aws/aws-sdk-go-v2/service/sqs v1.38.5
|
||||||
|
github.com/influxdata/influxdb-client-go v1.4.0
|
||||||
|
github.com/prometheus/client_golang v1.22.0
|
||||||
|
github.com/prometheus/common v0.63.0
|
||||||
github.com/sirupsen/logrus v1.9.3
|
github.com/sirupsen/logrus v1.9.3
|
||||||
github.com/spf13/cobra v1.8.0
|
github.com/spf13/cobra v1.9.1
|
||||||
github.com/spyzhov/ajson v0.9.0
|
github.com/spyzhov/ajson v0.9.6
|
||||||
github.com/stretchr/testify v1.8.4
|
github.com/stretchr/testify v1.10.0
|
||||||
github.com/szuecs/routegroup-client v0.21.1
|
github.com/szuecs/routegroup-client v0.28.2
|
||||||
github.com/zalando-incubator/cluster-lifecycle-manager v0.0.0-20230601114834-6ed1bba3c85d
|
github.com/zalando-incubator/cluster-lifecycle-manager v0.0.0-20240619093047-7853f3386b71
|
||||||
golang.org/x/net v0.19.0
|
golang.org/x/net v0.40.0
|
||||||
golang.org/x/oauth2 v0.15.0
|
golang.org/x/oauth2 v0.30.0
|
||||||
golang.org/x/sync v0.5.0
|
golang.org/x/sync v0.14.0
|
||||||
k8s.io/api v0.24.17
|
k8s.io/api v0.32.4
|
||||||
k8s.io/apimachinery v0.24.17
|
k8s.io/apimachinery v0.32.4
|
||||||
k8s.io/apiserver v0.24.17
|
k8s.io/apiserver v0.32.4
|
||||||
k8s.io/client-go v0.24.17
|
k8s.io/client-go v0.32.4
|
||||||
k8s.io/code-generator v0.24.17
|
k8s.io/code-generator v0.32.4
|
||||||
k8s.io/component-base v0.24.17
|
k8s.io/component-base v0.32.4
|
||||||
k8s.io/klog v1.0.0
|
k8s.io/klog v1.0.0
|
||||||
k8s.io/kube-openapi v0.0.0-20230614213217-ba0abe644833
|
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff
|
||||||
k8s.io/metrics v0.24.17
|
k8s.io/metrics v0.32.4
|
||||||
sigs.k8s.io/controller-tools v0.9.0
|
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
|
||||||
sigs.k8s.io/custom-metrics-apiserver v1.24.0
|
sigs.k8s.io/controller-tools v0.17.3
|
||||||
|
sigs.k8s.io/custom-metrics-apiserver v1.32.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
cel.dev/expr v0.19.1 // indirect
|
||||||
|
github.com/BurntSushi/toml v1.4.0 // indirect
|
||||||
|
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 // indirect
|
||||||
|
github.com/CloudyKit/jet/v6 v6.2.0 // indirect
|
||||||
|
github.com/Joker/jade v1.1.3 // indirect
|
||||||
github.com/NYTimes/gziphandler v1.1.1 // indirect
|
github.com/NYTimes/gziphandler v1.1.1 // indirect
|
||||||
|
github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 // indirect
|
||||||
|
github.com/andybalholm/brotli v1.1.0 // indirect
|
||||||
|
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
|
||||||
|
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
|
||||||
|
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/credentials v1.17.67 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect
|
||||||
|
github.com/aws/smithy-go v1.22.2 // indirect
|
||||||
|
github.com/aymerick/douceur v0.2.0 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/blang/semver/v4 v4.0.0 // indirect
|
github.com/blang/semver/v4 v4.0.0 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
github.com/bytedance/sonic v1.11.9 // indirect
|
||||||
github.com/coreos/go-semver v0.3.0 // indirect
|
github.com/bytedance/sonic/loader v0.1.1 // indirect
|
||||||
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
|
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||||
github.com/emicklei/go-restful v2.16.0+incompatible // indirect
|
github.com/cloudwego/base64x v0.1.4 // indirect
|
||||||
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
|
github.com/cloudwego/iasm v0.2.0 // indirect
|
||||||
github.com/fatih/color v1.13.0 // indirect
|
github.com/coreos/go-semver v0.3.1 // indirect
|
||||||
github.com/felixge/httpsnoop v1.0.3 // indirect
|
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||||
github.com/go-logr/logr v1.2.4 // indirect
|
github.com/deepmap/oapi-codegen v1.16.3 // indirect
|
||||||
github.com/go-openapi/jsonpointer v0.19.6 // indirect
|
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
|
||||||
github.com/go-openapi/jsonreference v0.20.2 // indirect
|
github.com/fatih/color v1.18.0 // indirect
|
||||||
github.com/go-openapi/swag v0.22.4 // indirect
|
github.com/fatih/structs v1.1.0 // indirect
|
||||||
github.com/gobuffalo/flect v0.2.5 // indirect
|
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||||
|
github.com/flosch/pongo2/v4 v4.0.2 // indirect
|
||||||
|
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||||
|
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.4 // indirect
|
||||||
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
|
github.com/gin-gonic/gin v1.10.0 // indirect
|
||||||
|
github.com/go-logr/logr v1.4.2 // indirect
|
||||||
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
|
github.com/go-openapi/jsonpointer v0.21.0 // indirect
|
||||||
|
github.com/go-openapi/jsonreference v0.21.0 // indirect
|
||||||
|
github.com/go-openapi/swag v0.23.0 // indirect
|
||||||
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
|
github.com/go-playground/validator/v10 v10.22.0 // indirect
|
||||||
|
github.com/gobuffalo/flect v1.0.3 // indirect
|
||||||
|
github.com/goccy/go-json v0.10.3 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
|
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/protobuf v1.5.4 // indirect
|
||||||
github.com/golang/protobuf v1.5.3 // indirect
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
github.com/google/gnostic v0.6.9 // indirect
|
github.com/gomarkdown/markdown v0.0.0-20241205020045-f7e15b2f3e62 // indirect
|
||||||
github.com/google/go-cmp v0.5.9 // indirect
|
github.com/google/btree v1.1.3 // indirect
|
||||||
|
github.com/google/cel-go v0.22.0 // indirect
|
||||||
|
github.com/google/gnostic-models v0.6.9 // indirect
|
||||||
|
github.com/google/go-cmp v0.7.0 // indirect
|
||||||
github.com/google/gofuzz v1.2.0 // indirect
|
github.com/google/gofuzz v1.2.0 // indirect
|
||||||
github.com/google/uuid v1.3.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
|
github.com/gorilla/css v1.0.1 // indirect
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect
|
||||||
github.com/imdario/mergo v0.3.16 // indirect
|
|
||||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf // indirect
|
github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf // indirect
|
||||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
github.com/iris-contrib/schema v0.0.6 // indirect
|
||||||
github.com/josharian/intern v1.0.0 // indirect
|
github.com/josharian/intern v1.0.0 // indirect
|
||||||
|
github.com/jpillora/backoff v1.0.0 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
github.com/kataras/blocks v0.0.8 // indirect
|
||||||
|
github.com/kataras/golog v0.1.12 // indirect
|
||||||
|
github.com/kataras/iris/v12 v12.2.11 // indirect
|
||||||
|
github.com/kataras/pio v0.0.13 // indirect
|
||||||
|
github.com/kataras/sitemap v0.0.6 // indirect
|
||||||
|
github.com/kataras/tunnel v0.0.4 // indirect
|
||||||
|
github.com/klauspost/compress v1.18.0 // indirect
|
||||||
|
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
|
||||||
|
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||||
|
github.com/labstack/echo/v4 v4.12.0 // indirect
|
||||||
|
github.com/labstack/gommon v0.4.2 // indirect
|
||||||
|
github.com/leodido/go-urn v1.4.0 // indirect
|
||||||
|
github.com/mailgun/raymond/v2 v2.0.48 // indirect
|
||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.17 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
|
github.com/microcosm-cc/bluemonday v1.0.26 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||||
|
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
|
||||||
|
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
github.com/prometheus/client_model v0.5.0 // indirect
|
github.com/prometheus/client_model v0.6.1 // indirect
|
||||||
github.com/prometheus/procfs v0.12.0 // indirect
|
github.com/prometheus/procfs v0.15.1 // indirect
|
||||||
github.com/rogpeppe/go-internal v1.11.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/schollz/closestmatch v2.1.0+incompatible // indirect
|
||||||
go.etcd.io/etcd/api/v3 v3.5.9 // indirect
|
github.com/spf13/pflag v1.0.6 // indirect
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
|
github.com/stoewer/go-strcase v1.3.0 // indirect
|
||||||
go.etcd.io/etcd/client/v2 v2.305.7 // indirect
|
github.com/tdewolff/minify/v2 v2.20.34 // indirect
|
||||||
go.etcd.io/etcd/client/v3 v3.5.9 // indirect
|
github.com/tdewolff/parse/v2 v2.7.15 // indirect
|
||||||
go.opentelemetry.io/contrib v0.20.0 // indirect
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0 // indirect
|
github.com/ugorji/go/codec v1.2.12 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0 // indirect
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
go.opentelemetry.io/otel v1.14.0 // indirect
|
github.com/valyala/fasttemplate v1.2.2 // indirect
|
||||||
go.opentelemetry.io/otel/exporters/otlp v0.20.0 // indirect
|
github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
|
||||||
go.opentelemetry.io/otel/metric v0.20.0 // indirect
|
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
|
||||||
go.opentelemetry.io/otel/sdk v0.20.0 // indirect
|
github.com/x448/float16 v0.8.4 // indirect
|
||||||
go.opentelemetry.io/otel/sdk/export/metric v0.20.0 // indirect
|
github.com/yosssi/ace v0.0.5 // indirect
|
||||||
go.opentelemetry.io/otel/sdk/metric v0.20.0 // indirect
|
go.etcd.io/etcd/api/v3 v3.5.21 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.14.0 // indirect
|
go.etcd.io/etcd/client/pkg/v3 v3.5.21 // indirect
|
||||||
go.opentelemetry.io/proto/otlp v0.7.0 // indirect
|
go.etcd.io/etcd/client/v3 v3.5.21 // indirect
|
||||||
go.uber.org/atomic v1.9.0 // indirect
|
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||||
go.uber.org/multierr v1.8.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect
|
||||||
go.uber.org/zap v1.21.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect
|
||||||
golang.org/x/crypto v0.17.0 // indirect
|
go.opentelemetry.io/otel v1.33.0 // indirect
|
||||||
golang.org/x/mod v0.12.0 // indirect
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 // indirect
|
||||||
golang.org/x/sys v0.15.0 // indirect
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 // indirect
|
||||||
golang.org/x/term v0.15.0 // indirect
|
go.opentelemetry.io/otel/metric v1.33.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
go.opentelemetry.io/otel/sdk v1.33.0 // indirect
|
||||||
golang.org/x/time v0.3.0 // indirect
|
go.opentelemetry.io/otel/trace v1.33.0 // indirect
|
||||||
golang.org/x/tools v0.11.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.4.0 // indirect
|
||||||
google.golang.org/appengine v1.6.8 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
|
go.uber.org/zap v1.27.0 // indirect
|
||||||
google.golang.org/grpc v1.56.3 // indirect
|
golang.org/x/arch v0.8.0 // indirect
|
||||||
google.golang.org/protobuf v1.32.0 // indirect
|
golang.org/x/crypto v0.38.0 // indirect
|
||||||
|
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
|
||||||
|
golang.org/x/mod v0.24.0 // indirect
|
||||||
|
golang.org/x/sys v0.33.0 // indirect
|
||||||
|
golang.org/x/term v0.32.0 // indirect
|
||||||
|
golang.org/x/text v0.25.0 // indirect
|
||||||
|
golang.org/x/time v0.9.0 // indirect
|
||||||
|
golang.org/x/tools v0.32.0 // indirect
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect
|
||||||
|
google.golang.org/grpc v1.68.1 // indirect
|
||||||
|
google.golang.org/protobuf v1.36.5 // indirect
|
||||||
|
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
k8s.io/apiextensions-apiserver v0.24.0 // indirect
|
k8s.io/apiextensions-apiserver v0.32.4 // indirect
|
||||||
k8s.io/gengo v0.0.0-20211129171323-c02415ce4185 // indirect
|
k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7 // indirect
|
||||||
k8s.io/klog/v2 v2.100.1 // indirect
|
k8s.io/klog/v2 v2.130.1 // indirect
|
||||||
k8s.io/utils v0.0.0-20230711102312-30195339c3c7 // indirect
|
k8s.io/kms v0.32.4 // indirect
|
||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.37 // indirect
|
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 // indirect
|
||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
|
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
|
sigs.k8s.io/randfill v1.0.0 // indirect
|
||||||
sigs.k8s.io/yaml v1.3.0 // indirect
|
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
|
||||||
|
sigs.k8s.io/yaml v1.4.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
go 1.24.0
|
||||||
go.opentelemetry.io/cotrib v0.20.0 => go.opentelemetry.io/contrib v0.44.0
|
|
||||||
go.opentelemetry.io/otel => go.opentelemetry.io/otel v0.20.0
|
|
||||||
go.opentelemetry.io/otel/sdk => go.opentelemetry.io/otel/sdk v0.20.0
|
|
||||||
go.opentelemetry.io/otel/trace => go.opentelemetry.io/otel/trace v0.20.0
|
|
||||||
k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42
|
|
||||||
)
|
|
||||||
|
|
||||||
go 1.21
|
toolchain go1.24.1
|
||||||
|
|||||||
+12
-23
@@ -24,51 +24,40 @@ CUSTOM_RESOURCE_NAME="zalando.org"
|
|||||||
CUSTOM_RESOURCE_VERSION="v1"
|
CUSTOM_RESOURCE_VERSION="v1"
|
||||||
|
|
||||||
SCRIPT_ROOT="$(dirname "${BASH_SOURCE[0]}")/.."
|
SCRIPT_ROOT="$(dirname "${BASH_SOURCE[0]}")/.."
|
||||||
OUTPUT_BASE="$(dirname "${BASH_SOURCE[0]}")/"
|
|
||||||
|
|
||||||
# generate the code with:
|
OUTPUT_DIR="pkg/client"
|
||||||
# --output-base because this script should also be able to run inside the vendor dir of
|
OUTPUT_PKG="${GOPKG}/${OUTPUT_DIR}"
|
||||||
# k8s.io/kubernetes. The output-base is needed for the generators to output into the vendor dir
|
|
||||||
# instead of the $GOPATH directly. For normal projects this can be dropped.
|
|
||||||
|
|
||||||
OUTPUT_PKG="${GOPKG}/pkg/client"
|
|
||||||
APIS_PKG="${GOPKG}/pkg/apis"
|
APIS_PKG="${GOPKG}/pkg/apis"
|
||||||
GROUPS_WITH_VERSIONS="${CUSTOM_RESOURCE_NAME}:${CUSTOM_RESOURCE_VERSION}"
|
GROUPS_WITH_VERSIONS="${CUSTOM_RESOURCE_NAME}:${CUSTOM_RESOURCE_VERSION}"
|
||||||
|
|
||||||
echo "Generating deepcopy funcs"
|
echo "Generating deepcopy funcs"
|
||||||
go run k8s.io/code-generator/cmd/deepcopy-gen \
|
go run k8s.io/code-generator/cmd/deepcopy-gen \
|
||||||
--input-dirs "${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}" \
|
--output-file zz_generated.deepcopy.go \
|
||||||
-O zz_generated.deepcopy \
|
|
||||||
--bounding-dirs "${APIS_PKG}" \
|
--bounding-dirs "${APIS_PKG}" \
|
||||||
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
--output-base "$OUTPUT_BASE"
|
"${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}"
|
||||||
|
|
||||||
echo "Generating clientset for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/${CLIENTSET_PKG_NAME:-clientset}"
|
echo "Generating clientset for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/${CLIENTSET_PKG_NAME:-clientset}"
|
||||||
go run k8s.io/code-generator/cmd/client-gen \
|
go run k8s.io/code-generator/cmd/client-gen \
|
||||||
--clientset-name versioned \
|
--clientset-name versioned \
|
||||||
--input-base "" \
|
--input-base "" \
|
||||||
--input "${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}" \
|
--input "${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}" \
|
||||||
--output-package "${OUTPUT_PKG}/clientset" \
|
--output-pkg "${OUTPUT_PKG}/clientset" \
|
||||||
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
--output-base "$OUTPUT_BASE"
|
--output-dir "${OUTPUT_DIR}/clientset"
|
||||||
|
|
||||||
echo "Generating listers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/listers"
|
echo "Generating listers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/listers"
|
||||||
go run k8s.io/code-generator/cmd/lister-gen \
|
go run k8s.io/code-generator/cmd/lister-gen \
|
||||||
--input-dirs "${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}" \
|
--output-pkg "${OUTPUT_PKG}/listers" \
|
||||||
--output-package "${OUTPUT_PKG}/listers" \
|
|
||||||
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
--output-base "$OUTPUT_BASE"
|
--output-dir "${OUTPUT_DIR}/listers" \
|
||||||
|
"${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}"
|
||||||
|
|
||||||
echo "Generating informers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/informers"
|
echo "Generating informers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/informers"
|
||||||
go run k8s.io/code-generator/cmd/informer-gen \
|
go run k8s.io/code-generator/cmd/informer-gen \
|
||||||
--input-dirs "${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}" \
|
|
||||||
--versioned-clientset-package "${OUTPUT_PKG}/${CLIENTSET_PKG_NAME:-clientset}/${CLIENTSET_NAME_VERSIONED:-versioned}" \
|
--versioned-clientset-package "${OUTPUT_PKG}/${CLIENTSET_PKG_NAME:-clientset}/${CLIENTSET_NAME_VERSIONED:-versioned}" \
|
||||||
--listers-package "${OUTPUT_PKG}/listers" \
|
--listers-package "${OUTPUT_PKG}/listers" \
|
||||||
--output-package "${OUTPUT_PKG}/informers" \
|
--output-pkg "${OUTPUT_PKG}/informers" \
|
||||||
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
--output-base "$OUTPUT_BASE"
|
--output-dir "${OUTPUT_DIR}/informers" \
|
||||||
|
"${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}"
|
||||||
# hack to make the generated code work with Go module based projects
|
|
||||||
cp -r "$OUTPUT_BASE/$GOPKG/pkg/apis" ./pkg
|
|
||||||
cp -r "$OUTPUT_BASE/$GOPKG/pkg/client" ./pkg
|
|
||||||
rm -rf "${OUTPUT_BASE:?}${SRC}"
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -6,6 +6,13 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ScalingScheduler is an interface that represents a ScalingSchedule resource,
|
||||||
|
// namespaced or cluster wide.
|
||||||
|
type ScalingScheduler interface {
|
||||||
|
Identifier() string
|
||||||
|
ResourceSpec() ScalingScheduleSpec
|
||||||
|
}
|
||||||
|
|
||||||
// +genclient
|
// +genclient
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
// +kubebuilder:object:root=true
|
// +kubebuilder:object:root=true
|
||||||
@@ -13,7 +20,7 @@ import (
|
|||||||
// ScalingSchedule describes a namespaced time based metric to be used
|
// ScalingSchedule describes a namespaced time based metric to be used
|
||||||
// in autoscaling operations.
|
// in autoscaling operations.
|
||||||
// +k8s:deepcopy-gen=true
|
// +k8s:deepcopy-gen=true
|
||||||
// +kubebuilder:resource:categories=all
|
// +kubebuilder:resource:categories=all,shortName=sched;schedule
|
||||||
// +kubebuilder:printcolumn:name="Active",type=boolean,JSONPath=`.status.active`,description="Whether one or more schedules are currently active."
|
// +kubebuilder:printcolumn:name="Active",type=boolean,JSONPath=`.status.active`,description="Whether one or more schedules are currently active."
|
||||||
// +kubebuilder:subresource:status
|
// +kubebuilder:subresource:status
|
||||||
type ScalingSchedule struct {
|
type ScalingSchedule struct {
|
||||||
@@ -25,6 +32,17 @@ type ScalingSchedule struct {
|
|||||||
Status ScalingScheduleStatus `json:"status"`
|
Status ScalingScheduleStatus `json:"status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Identifier returns the namespaced scalingScale Identifier in the format
|
||||||
|
// `<namespace>/<name>`.
|
||||||
|
func (s *ScalingSchedule) Identifier() string {
|
||||||
|
return s.ObjectMeta.Namespace + "/" + s.ObjectMeta.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResourceSpec returns the ScalingScheduleSpec of the ScalingSchedule.
|
||||||
|
func (s *ScalingSchedule) ResourceSpec() ScalingScheduleSpec {
|
||||||
|
return s.Spec
|
||||||
|
}
|
||||||
|
|
||||||
// +genclient
|
// +genclient
|
||||||
// +genclient:nonNamespaced
|
// +genclient:nonNamespaced
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
@@ -33,10 +51,9 @@ type ScalingSchedule struct {
|
|||||||
// ClusterScalingSchedule describes a cluster scoped time based metric
|
// ClusterScalingSchedule describes a cluster scoped time based metric
|
||||||
// to be used in autoscaling operations.
|
// to be used in autoscaling operations.
|
||||||
// +k8s:deepcopy-gen=true
|
// +k8s:deepcopy-gen=true
|
||||||
// +kubebuilder:resource:categories=all
|
// +kubebuilder:resource:scope=Cluster,shortName=css;clustersched;clusterschedule
|
||||||
// +kubebuilder:printcolumn:name="Active",type=boolean,JSONPath=`.status.active`,description="Whether one or more schedules are currently active."
|
// +kubebuilder:printcolumn:name="Active",type=boolean,JSONPath=`.status.active`,description="Whether one or more schedules are currently active."
|
||||||
// +kubebuilder:subresource:status
|
// +kubebuilder:subresource:status
|
||||||
// +kubebuilder:resource:scope=Cluster
|
|
||||||
type ClusterScalingSchedule struct {
|
type ClusterScalingSchedule struct {
|
||||||
metav1.TypeMeta `json:",inline"`
|
metav1.TypeMeta `json:",inline"`
|
||||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||||
@@ -46,6 +63,17 @@ type ClusterScalingSchedule struct {
|
|||||||
Status ScalingScheduleStatus `json:"status"`
|
Status ScalingScheduleStatus `json:"status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Identifier returns the cluster scalingScale Identifier in the format
|
||||||
|
// `<name>`.
|
||||||
|
func (s *ClusterScalingSchedule) Identifier() string {
|
||||||
|
return s.ObjectMeta.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResourceSpec returns the ScalingScheduleSpec of the ClusterScalingSchedule.
|
||||||
|
func (s *ClusterScalingSchedule) ResourceSpec() ScalingScheduleSpec {
|
||||||
|
return s.Spec
|
||||||
|
}
|
||||||
|
|
||||||
// ScalingScheduleSpec is the spec part of the ScalingSchedule.
|
// ScalingScheduleSpec is the spec part of the ScalingSchedule.
|
||||||
// +k8s:deepcopy-gen=true
|
// +k8s:deepcopy-gen=true
|
||||||
type ScalingScheduleSpec struct {
|
type ScalingScheduleSpec struct {
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ limitations under the License.
|
|||||||
package versioned
|
package versioned
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
fmt "fmt"
|
||||||
"net/http"
|
http "net/http"
|
||||||
|
|
||||||
zalandov1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/typed/zalando.org/v1"
|
zalandov1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/typed/zalando.org/v1"
|
||||||
discovery "k8s.io/client-go/discovery"
|
discovery "k8s.io/client-go/discovery"
|
||||||
@@ -33,8 +33,7 @@ type Interface interface {
|
|||||||
ZalandoV1() zalandov1.ZalandoV1Interface
|
ZalandoV1() zalandov1.ZalandoV1Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clientset contains the clients for groups. Each group has exactly one
|
// Clientset contains the clients for groups.
|
||||||
// version included in a Clientset.
|
|
||||||
type Clientset struct {
|
type Clientset struct {
|
||||||
*discovery.DiscoveryClient
|
*discovery.DiscoveryClient
|
||||||
zalandoV1 *zalandov1.ZalandoV1Client
|
zalandoV1 *zalandov1.ZalandoV1Client
|
||||||
|
|||||||
@@ -31,8 +31,12 @@ import (
|
|||||||
|
|
||||||
// NewSimpleClientset returns a clientset that will respond with the provided objects.
|
// NewSimpleClientset returns a clientset that will respond with the provided objects.
|
||||||
// It's backed by a very simple object tracker that processes creates, updates and deletions as-is,
|
// It's backed by a very simple object tracker that processes creates, updates and deletions as-is,
|
||||||
// without applying any validations and/or defaults. It shouldn't be considered a replacement
|
// without applying any field management, validations and/or defaults. It shouldn't be considered a replacement
|
||||||
// for a real clientset and is mostly useful in simple unit tests.
|
// for a real clientset and is mostly useful in simple unit tests.
|
||||||
|
//
|
||||||
|
// DEPRECATED: NewClientset replaces this with support for field management, which significantly improves
|
||||||
|
// server side apply testing. NewClientset is only available when apply configurations are generated (e.g.
|
||||||
|
// via --with-applyconfig).
|
||||||
func NewSimpleClientset(objects ...runtime.Object) *Clientset {
|
func NewSimpleClientset(objects ...runtime.Object) *Clientset {
|
||||||
o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder())
|
o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder())
|
||||||
for _, obj := range objects {
|
for _, obj := range objects {
|
||||||
|
|||||||
@@ -19,15 +19,14 @@ limitations under the License.
|
|||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
context "context"
|
||||||
"time"
|
|
||||||
|
|
||||||
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
||||||
scheme "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
|
scheme "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
rest "k8s.io/client-go/rest"
|
gentype "k8s.io/client-go/gentype"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ClusterScalingSchedulesGetter has a method to return a ClusterScalingScheduleInterface.
|
// ClusterScalingSchedulesGetter has a method to return a ClusterScalingScheduleInterface.
|
||||||
@@ -38,147 +37,34 @@ type ClusterScalingSchedulesGetter interface {
|
|||||||
|
|
||||||
// ClusterScalingScheduleInterface has methods to work with ClusterScalingSchedule resources.
|
// ClusterScalingScheduleInterface has methods to work with ClusterScalingSchedule resources.
|
||||||
type ClusterScalingScheduleInterface interface {
|
type ClusterScalingScheduleInterface interface {
|
||||||
Create(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.CreateOptions) (*v1.ClusterScalingSchedule, error)
|
Create(ctx context.Context, clusterScalingSchedule *zalandoorgv1.ClusterScalingSchedule, opts metav1.CreateOptions) (*zalandoorgv1.ClusterScalingSchedule, error)
|
||||||
Update(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.UpdateOptions) (*v1.ClusterScalingSchedule, error)
|
Update(ctx context.Context, clusterScalingSchedule *zalandoorgv1.ClusterScalingSchedule, opts metav1.UpdateOptions) (*zalandoorgv1.ClusterScalingSchedule, error)
|
||||||
UpdateStatus(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.UpdateOptions) (*v1.ClusterScalingSchedule, error)
|
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
||||||
|
UpdateStatus(ctx context.Context, clusterScalingSchedule *zalandoorgv1.ClusterScalingSchedule, opts metav1.UpdateOptions) (*zalandoorgv1.ClusterScalingSchedule, error)
|
||||||
Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
|
Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
|
||||||
DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
|
DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
|
||||||
Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ClusterScalingSchedule, error)
|
Get(ctx context.Context, name string, opts metav1.GetOptions) (*zalandoorgv1.ClusterScalingSchedule, error)
|
||||||
List(ctx context.Context, opts metav1.ListOptions) (*v1.ClusterScalingScheduleList, error)
|
List(ctx context.Context, opts metav1.ListOptions) (*zalandoorgv1.ClusterScalingScheduleList, error)
|
||||||
Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
|
Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
|
||||||
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterScalingSchedule, err error)
|
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *zalandoorgv1.ClusterScalingSchedule, err error)
|
||||||
ClusterScalingScheduleExpansion
|
ClusterScalingScheduleExpansion
|
||||||
}
|
}
|
||||||
|
|
||||||
// clusterScalingSchedules implements ClusterScalingScheduleInterface
|
// clusterScalingSchedules implements ClusterScalingScheduleInterface
|
||||||
type clusterScalingSchedules struct {
|
type clusterScalingSchedules struct {
|
||||||
client rest.Interface
|
*gentype.ClientWithList[*zalandoorgv1.ClusterScalingSchedule, *zalandoorgv1.ClusterScalingScheduleList]
|
||||||
}
|
}
|
||||||
|
|
||||||
// newClusterScalingSchedules returns a ClusterScalingSchedules
|
// newClusterScalingSchedules returns a ClusterScalingSchedules
|
||||||
func newClusterScalingSchedules(c *ZalandoV1Client) *clusterScalingSchedules {
|
func newClusterScalingSchedules(c *ZalandoV1Client) *clusterScalingSchedules {
|
||||||
return &clusterScalingSchedules{
|
return &clusterScalingSchedules{
|
||||||
client: c.RESTClient(),
|
gentype.NewClientWithList[*zalandoorgv1.ClusterScalingSchedule, *zalandoorgv1.ClusterScalingScheduleList](
|
||||||
|
"clusterscalingschedules",
|
||||||
|
c.RESTClient(),
|
||||||
|
scheme.ParameterCodec,
|
||||||
|
"",
|
||||||
|
func() *zalandoorgv1.ClusterScalingSchedule { return &zalandoorgv1.ClusterScalingSchedule{} },
|
||||||
|
func() *zalandoorgv1.ClusterScalingScheduleList { return &zalandoorgv1.ClusterScalingScheduleList{} },
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get takes name of the clusterScalingSchedule, and returns the corresponding clusterScalingSchedule object, and an error if there is any.
|
|
||||||
func (c *clusterScalingSchedules) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ClusterScalingSchedule, err error) {
|
|
||||||
result = &v1.ClusterScalingSchedule{}
|
|
||||||
err = c.client.Get().
|
|
||||||
Resource("clusterscalingschedules").
|
|
||||||
Name(name).
|
|
||||||
VersionedParams(&options, scheme.ParameterCodec).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// List takes label and field selectors, and returns the list of ClusterScalingSchedules that match those selectors.
|
|
||||||
func (c *clusterScalingSchedules) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ClusterScalingScheduleList, err error) {
|
|
||||||
var timeout time.Duration
|
|
||||||
if opts.TimeoutSeconds != nil {
|
|
||||||
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
|
|
||||||
}
|
|
||||||
result = &v1.ClusterScalingScheduleList{}
|
|
||||||
err = c.client.Get().
|
|
||||||
Resource("clusterscalingschedules").
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Timeout(timeout).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Watch returns a watch.Interface that watches the requested clusterScalingSchedules.
|
|
||||||
func (c *clusterScalingSchedules) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
|
|
||||||
var timeout time.Duration
|
|
||||||
if opts.TimeoutSeconds != nil {
|
|
||||||
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
|
|
||||||
}
|
|
||||||
opts.Watch = true
|
|
||||||
return c.client.Get().
|
|
||||||
Resource("clusterscalingschedules").
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Timeout(timeout).
|
|
||||||
Watch(ctx)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create takes the representation of a clusterScalingSchedule and creates it. Returns the server's representation of the clusterScalingSchedule, and an error, if there is any.
|
|
||||||
func (c *clusterScalingSchedules) Create(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.CreateOptions) (result *v1.ClusterScalingSchedule, err error) {
|
|
||||||
result = &v1.ClusterScalingSchedule{}
|
|
||||||
err = c.client.Post().
|
|
||||||
Resource("clusterscalingschedules").
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Body(clusterScalingSchedule).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update takes the representation of a clusterScalingSchedule and updates it. Returns the server's representation of the clusterScalingSchedule, and an error, if there is any.
|
|
||||||
func (c *clusterScalingSchedules) Update(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.UpdateOptions) (result *v1.ClusterScalingSchedule, err error) {
|
|
||||||
result = &v1.ClusterScalingSchedule{}
|
|
||||||
err = c.client.Put().
|
|
||||||
Resource("clusterscalingschedules").
|
|
||||||
Name(clusterScalingSchedule.Name).
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Body(clusterScalingSchedule).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateStatus was generated because the type contains a Status member.
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
|
||||||
func (c *clusterScalingSchedules) UpdateStatus(ctx context.Context, clusterScalingSchedule *v1.ClusterScalingSchedule, opts metav1.UpdateOptions) (result *v1.ClusterScalingSchedule, err error) {
|
|
||||||
result = &v1.ClusterScalingSchedule{}
|
|
||||||
err = c.client.Put().
|
|
||||||
Resource("clusterscalingschedules").
|
|
||||||
Name(clusterScalingSchedule.Name).
|
|
||||||
SubResource("status").
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Body(clusterScalingSchedule).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete takes name of the clusterScalingSchedule and deletes it. Returns an error if one occurs.
|
|
||||||
func (c *clusterScalingSchedules) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
|
|
||||||
return c.client.Delete().
|
|
||||||
Resource("clusterscalingschedules").
|
|
||||||
Name(name).
|
|
||||||
Body(&opts).
|
|
||||||
Do(ctx).
|
|
||||||
Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteCollection deletes a collection of objects.
|
|
||||||
func (c *clusterScalingSchedules) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
|
|
||||||
var timeout time.Duration
|
|
||||||
if listOpts.TimeoutSeconds != nil {
|
|
||||||
timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second
|
|
||||||
}
|
|
||||||
return c.client.Delete().
|
|
||||||
Resource("clusterscalingschedules").
|
|
||||||
VersionedParams(&listOpts, scheme.ParameterCodec).
|
|
||||||
Timeout(timeout).
|
|
||||||
Body(&opts).
|
|
||||||
Do(ctx).
|
|
||||||
Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Patch applies the patch and returns the patched clusterScalingSchedule.
|
|
||||||
func (c *clusterScalingSchedules) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ClusterScalingSchedule, err error) {
|
|
||||||
result = &v1.ClusterScalingSchedule{}
|
|
||||||
err = c.client.Patch(pt).
|
|
||||||
Resource("clusterscalingschedules").
|
|
||||||
Name(name).
|
|
||||||
SubResource(subresources...).
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Body(data).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|||||||
+24
-105
@@ -19,115 +19,34 @@ limitations under the License.
|
|||||||
package fake
|
package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
||||||
|
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/typed/zalando.org/v1"
|
||||||
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
gentype "k8s.io/client-go/gentype"
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
labels "k8s.io/apimachinery/pkg/labels"
|
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
|
||||||
testing "k8s.io/client-go/testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// FakeClusterScalingSchedules implements ClusterScalingScheduleInterface
|
// fakeClusterScalingSchedules implements ClusterScalingScheduleInterface
|
||||||
type FakeClusterScalingSchedules struct {
|
type fakeClusterScalingSchedules struct {
|
||||||
|
*gentype.FakeClientWithList[*v1.ClusterScalingSchedule, *v1.ClusterScalingScheduleList]
|
||||||
Fake *FakeZalandoV1
|
Fake *FakeZalandoV1
|
||||||
}
|
}
|
||||||
|
|
||||||
var clusterscalingschedulesResource = schema.GroupVersionResource{Group: "zalando.org", Version: "v1", Resource: "clusterscalingschedules"}
|
func newFakeClusterScalingSchedules(fake *FakeZalandoV1) zalandoorgv1.ClusterScalingScheduleInterface {
|
||||||
|
return &fakeClusterScalingSchedules{
|
||||||
var clusterscalingschedulesKind = schema.GroupVersionKind{Group: "zalando.org", Version: "v1", Kind: "ClusterScalingSchedule"}
|
gentype.NewFakeClientWithList[*v1.ClusterScalingSchedule, *v1.ClusterScalingScheduleList](
|
||||||
|
fake.Fake,
|
||||||
// Get takes name of the clusterScalingSchedule, and returns the corresponding clusterScalingSchedule object, and an error if there is any.
|
"",
|
||||||
func (c *FakeClusterScalingSchedules) Get(ctx context.Context, name string, options v1.GetOptions) (result *zalandoorgv1.ClusterScalingSchedule, err error) {
|
v1.SchemeGroupVersion.WithResource("clusterscalingschedules"),
|
||||||
obj, err := c.Fake.
|
v1.SchemeGroupVersion.WithKind("ClusterScalingSchedule"),
|
||||||
Invokes(testing.NewRootGetAction(clusterscalingschedulesResource, name), &zalandoorgv1.ClusterScalingSchedule{})
|
func() *v1.ClusterScalingSchedule { return &v1.ClusterScalingSchedule{} },
|
||||||
if obj == nil {
|
func() *v1.ClusterScalingScheduleList { return &v1.ClusterScalingScheduleList{} },
|
||||||
return nil, err
|
func(dst, src *v1.ClusterScalingScheduleList) { dst.ListMeta = src.ListMeta },
|
||||||
|
func(list *v1.ClusterScalingScheduleList) []*v1.ClusterScalingSchedule {
|
||||||
|
return gentype.ToPointerSlice(list.Items)
|
||||||
|
},
|
||||||
|
func(list *v1.ClusterScalingScheduleList, items []*v1.ClusterScalingSchedule) {
|
||||||
|
list.Items = gentype.FromPointerSlice(items)
|
||||||
|
},
|
||||||
|
),
|
||||||
|
fake,
|
||||||
}
|
}
|
||||||
return obj.(*zalandoorgv1.ClusterScalingSchedule), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// List takes label and field selectors, and returns the list of ClusterScalingSchedules that match those selectors.
|
|
||||||
func (c *FakeClusterScalingSchedules) List(ctx context.Context, opts v1.ListOptions) (result *zalandoorgv1.ClusterScalingScheduleList, err error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewRootListAction(clusterscalingschedulesResource, clusterscalingschedulesKind, opts), &zalandoorgv1.ClusterScalingScheduleList{})
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
label, _, _ := testing.ExtractFromListOptions(opts)
|
|
||||||
if label == nil {
|
|
||||||
label = labels.Everything()
|
|
||||||
}
|
|
||||||
list := &zalandoorgv1.ClusterScalingScheduleList{ListMeta: obj.(*zalandoorgv1.ClusterScalingScheduleList).ListMeta}
|
|
||||||
for _, item := range obj.(*zalandoorgv1.ClusterScalingScheduleList).Items {
|
|
||||||
if label.Matches(labels.Set(item.Labels)) {
|
|
||||||
list.Items = append(list.Items, item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Watch returns a watch.Interface that watches the requested clusterScalingSchedules.
|
|
||||||
func (c *FakeClusterScalingSchedules) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
|
|
||||||
return c.Fake.
|
|
||||||
InvokesWatch(testing.NewRootWatchAction(clusterscalingschedulesResource, opts))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create takes the representation of a clusterScalingSchedule and creates it. Returns the server's representation of the clusterScalingSchedule, and an error, if there is any.
|
|
||||||
func (c *FakeClusterScalingSchedules) Create(ctx context.Context, clusterScalingSchedule *zalandoorgv1.ClusterScalingSchedule, opts v1.CreateOptions) (result *zalandoorgv1.ClusterScalingSchedule, err error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewRootCreateAction(clusterscalingschedulesResource, clusterScalingSchedule), &zalandoorgv1.ClusterScalingSchedule{})
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return obj.(*zalandoorgv1.ClusterScalingSchedule), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update takes the representation of a clusterScalingSchedule and updates it. Returns the server's representation of the clusterScalingSchedule, and an error, if there is any.
|
|
||||||
func (c *FakeClusterScalingSchedules) Update(ctx context.Context, clusterScalingSchedule *zalandoorgv1.ClusterScalingSchedule, opts v1.UpdateOptions) (result *zalandoorgv1.ClusterScalingSchedule, err error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewRootUpdateAction(clusterscalingschedulesResource, clusterScalingSchedule), &zalandoorgv1.ClusterScalingSchedule{})
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return obj.(*zalandoorgv1.ClusterScalingSchedule), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateStatus was generated because the type contains a Status member.
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
|
||||||
func (c *FakeClusterScalingSchedules) UpdateStatus(ctx context.Context, clusterScalingSchedule *zalandoorgv1.ClusterScalingSchedule, opts v1.UpdateOptions) (*zalandoorgv1.ClusterScalingSchedule, error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewRootUpdateSubresourceAction(clusterscalingschedulesResource, "status", clusterScalingSchedule), &zalandoorgv1.ClusterScalingSchedule{})
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return obj.(*zalandoorgv1.ClusterScalingSchedule), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete takes name of the clusterScalingSchedule and deletes it. Returns an error if one occurs.
|
|
||||||
func (c *FakeClusterScalingSchedules) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
|
|
||||||
_, err := c.Fake.
|
|
||||||
Invokes(testing.NewRootDeleteActionWithOptions(clusterscalingschedulesResource, name, opts), &zalandoorgv1.ClusterScalingSchedule{})
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteCollection deletes a collection of objects.
|
|
||||||
func (c *FakeClusterScalingSchedules) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
|
|
||||||
action := testing.NewRootDeleteCollectionAction(clusterscalingschedulesResource, listOpts)
|
|
||||||
|
|
||||||
_, err := c.Fake.Invokes(action, &zalandoorgv1.ClusterScalingScheduleList{})
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Patch applies the patch and returns the patched clusterScalingSchedule.
|
|
||||||
func (c *FakeClusterScalingSchedules) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *zalandoorgv1.ClusterScalingSchedule, err error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewRootPatchSubresourceAction(clusterscalingschedulesResource, name, pt, data, subresources...), &zalandoorgv1.ClusterScalingSchedule{})
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return obj.(*zalandoorgv1.ClusterScalingSchedule), err
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,124 +19,32 @@ limitations under the License.
|
|||||||
package fake
|
package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
||||||
|
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/typed/zalando.org/v1"
|
||||||
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
gentype "k8s.io/client-go/gentype"
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
labels "k8s.io/apimachinery/pkg/labels"
|
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
|
||||||
testing "k8s.io/client-go/testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// FakeScalingSchedules implements ScalingScheduleInterface
|
// fakeScalingSchedules implements ScalingScheduleInterface
|
||||||
type FakeScalingSchedules struct {
|
type fakeScalingSchedules struct {
|
||||||
|
*gentype.FakeClientWithList[*v1.ScalingSchedule, *v1.ScalingScheduleList]
|
||||||
Fake *FakeZalandoV1
|
Fake *FakeZalandoV1
|
||||||
ns string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var scalingschedulesResource = schema.GroupVersionResource{Group: "zalando.org", Version: "v1", Resource: "scalingschedules"}
|
func newFakeScalingSchedules(fake *FakeZalandoV1, namespace string) zalandoorgv1.ScalingScheduleInterface {
|
||||||
|
return &fakeScalingSchedules{
|
||||||
var scalingschedulesKind = schema.GroupVersionKind{Group: "zalando.org", Version: "v1", Kind: "ScalingSchedule"}
|
gentype.NewFakeClientWithList[*v1.ScalingSchedule, *v1.ScalingScheduleList](
|
||||||
|
fake.Fake,
|
||||||
// Get takes name of the scalingSchedule, and returns the corresponding scalingSchedule object, and an error if there is any.
|
namespace,
|
||||||
func (c *FakeScalingSchedules) Get(ctx context.Context, name string, options v1.GetOptions) (result *zalandoorgv1.ScalingSchedule, err error) {
|
v1.SchemeGroupVersion.WithResource("scalingschedules"),
|
||||||
obj, err := c.Fake.
|
v1.SchemeGroupVersion.WithKind("ScalingSchedule"),
|
||||||
Invokes(testing.NewGetAction(scalingschedulesResource, c.ns, name), &zalandoorgv1.ScalingSchedule{})
|
func() *v1.ScalingSchedule { return &v1.ScalingSchedule{} },
|
||||||
|
func() *v1.ScalingScheduleList { return &v1.ScalingScheduleList{} },
|
||||||
if obj == nil {
|
func(dst, src *v1.ScalingScheduleList) { dst.ListMeta = src.ListMeta },
|
||||||
return nil, err
|
func(list *v1.ScalingScheduleList) []*v1.ScalingSchedule { return gentype.ToPointerSlice(list.Items) },
|
||||||
|
func(list *v1.ScalingScheduleList, items []*v1.ScalingSchedule) {
|
||||||
|
list.Items = gentype.FromPointerSlice(items)
|
||||||
|
},
|
||||||
|
),
|
||||||
|
fake,
|
||||||
}
|
}
|
||||||
return obj.(*zalandoorgv1.ScalingSchedule), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// List takes label and field selectors, and returns the list of ScalingSchedules that match those selectors.
|
|
||||||
func (c *FakeScalingSchedules) List(ctx context.Context, opts v1.ListOptions) (result *zalandoorgv1.ScalingScheduleList, err error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewListAction(scalingschedulesResource, scalingschedulesKind, c.ns, opts), &zalandoorgv1.ScalingScheduleList{})
|
|
||||||
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
label, _, _ := testing.ExtractFromListOptions(opts)
|
|
||||||
if label == nil {
|
|
||||||
label = labels.Everything()
|
|
||||||
}
|
|
||||||
list := &zalandoorgv1.ScalingScheduleList{ListMeta: obj.(*zalandoorgv1.ScalingScheduleList).ListMeta}
|
|
||||||
for _, item := range obj.(*zalandoorgv1.ScalingScheduleList).Items {
|
|
||||||
if label.Matches(labels.Set(item.Labels)) {
|
|
||||||
list.Items = append(list.Items, item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Watch returns a watch.Interface that watches the requested scalingSchedules.
|
|
||||||
func (c *FakeScalingSchedules) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
|
|
||||||
return c.Fake.
|
|
||||||
InvokesWatch(testing.NewWatchAction(scalingschedulesResource, c.ns, opts))
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create takes the representation of a scalingSchedule and creates it. Returns the server's representation of the scalingSchedule, and an error, if there is any.
|
|
||||||
func (c *FakeScalingSchedules) Create(ctx context.Context, scalingSchedule *zalandoorgv1.ScalingSchedule, opts v1.CreateOptions) (result *zalandoorgv1.ScalingSchedule, err error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewCreateAction(scalingschedulesResource, c.ns, scalingSchedule), &zalandoorgv1.ScalingSchedule{})
|
|
||||||
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return obj.(*zalandoorgv1.ScalingSchedule), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update takes the representation of a scalingSchedule and updates it. Returns the server's representation of the scalingSchedule, and an error, if there is any.
|
|
||||||
func (c *FakeScalingSchedules) Update(ctx context.Context, scalingSchedule *zalandoorgv1.ScalingSchedule, opts v1.UpdateOptions) (result *zalandoorgv1.ScalingSchedule, err error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewUpdateAction(scalingschedulesResource, c.ns, scalingSchedule), &zalandoorgv1.ScalingSchedule{})
|
|
||||||
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return obj.(*zalandoorgv1.ScalingSchedule), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateStatus was generated because the type contains a Status member.
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
|
||||||
func (c *FakeScalingSchedules) UpdateStatus(ctx context.Context, scalingSchedule *zalandoorgv1.ScalingSchedule, opts v1.UpdateOptions) (*zalandoorgv1.ScalingSchedule, error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewUpdateSubresourceAction(scalingschedulesResource, "status", c.ns, scalingSchedule), &zalandoorgv1.ScalingSchedule{})
|
|
||||||
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return obj.(*zalandoorgv1.ScalingSchedule), err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete takes name of the scalingSchedule and deletes it. Returns an error if one occurs.
|
|
||||||
func (c *FakeScalingSchedules) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
|
|
||||||
_, err := c.Fake.
|
|
||||||
Invokes(testing.NewDeleteActionWithOptions(scalingschedulesResource, c.ns, name, opts), &zalandoorgv1.ScalingSchedule{})
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteCollection deletes a collection of objects.
|
|
||||||
func (c *FakeScalingSchedules) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
|
|
||||||
action := testing.NewDeleteCollectionAction(scalingschedulesResource, c.ns, listOpts)
|
|
||||||
|
|
||||||
_, err := c.Fake.Invokes(action, &zalandoorgv1.ScalingScheduleList{})
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Patch applies the patch and returns the patched scalingSchedule.
|
|
||||||
func (c *FakeScalingSchedules) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *zalandoorgv1.ScalingSchedule, err error) {
|
|
||||||
obj, err := c.Fake.
|
|
||||||
Invokes(testing.NewPatchSubresourceAction(scalingschedulesResource, c.ns, name, pt, data, subresources...), &zalandoorgv1.ScalingSchedule{})
|
|
||||||
|
|
||||||
if obj == nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return obj.(*zalandoorgv1.ScalingSchedule), err
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ type FakeZalandoV1 struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeZalandoV1) ClusterScalingSchedules() v1.ClusterScalingScheduleInterface {
|
func (c *FakeZalandoV1) ClusterScalingSchedules() v1.ClusterScalingScheduleInterface {
|
||||||
return &FakeClusterScalingSchedules{c}
|
return newFakeClusterScalingSchedules(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FakeZalandoV1) ScalingSchedules(namespace string) v1.ScalingScheduleInterface {
|
func (c *FakeZalandoV1) ScalingSchedules(namespace string) v1.ScalingScheduleInterface {
|
||||||
return &FakeScalingSchedules{c, namespace}
|
return newFakeScalingSchedules(c, namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RESTClient returns a RESTClient that is used to communicate
|
// RESTClient returns a RESTClient that is used to communicate
|
||||||
|
|||||||
@@ -19,15 +19,14 @@ limitations under the License.
|
|||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
context "context"
|
||||||
"time"
|
|
||||||
|
|
||||||
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
||||||
scheme "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
|
scheme "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
watch "k8s.io/apimachinery/pkg/watch"
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
rest "k8s.io/client-go/rest"
|
gentype "k8s.io/client-go/gentype"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ScalingSchedulesGetter has a method to return a ScalingScheduleInterface.
|
// ScalingSchedulesGetter has a method to return a ScalingScheduleInterface.
|
||||||
@@ -38,158 +37,34 @@ type ScalingSchedulesGetter interface {
|
|||||||
|
|
||||||
// ScalingScheduleInterface has methods to work with ScalingSchedule resources.
|
// ScalingScheduleInterface has methods to work with ScalingSchedule resources.
|
||||||
type ScalingScheduleInterface interface {
|
type ScalingScheduleInterface interface {
|
||||||
Create(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.CreateOptions) (*v1.ScalingSchedule, error)
|
Create(ctx context.Context, scalingSchedule *zalandoorgv1.ScalingSchedule, opts metav1.CreateOptions) (*zalandoorgv1.ScalingSchedule, error)
|
||||||
Update(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.UpdateOptions) (*v1.ScalingSchedule, error)
|
Update(ctx context.Context, scalingSchedule *zalandoorgv1.ScalingSchedule, opts metav1.UpdateOptions) (*zalandoorgv1.ScalingSchedule, error)
|
||||||
UpdateStatus(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.UpdateOptions) (*v1.ScalingSchedule, error)
|
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
||||||
|
UpdateStatus(ctx context.Context, scalingSchedule *zalandoorgv1.ScalingSchedule, opts metav1.UpdateOptions) (*zalandoorgv1.ScalingSchedule, error)
|
||||||
Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
|
Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
|
||||||
DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
|
DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
|
||||||
Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ScalingSchedule, error)
|
Get(ctx context.Context, name string, opts metav1.GetOptions) (*zalandoorgv1.ScalingSchedule, error)
|
||||||
List(ctx context.Context, opts metav1.ListOptions) (*v1.ScalingScheduleList, error)
|
List(ctx context.Context, opts metav1.ListOptions) (*zalandoorgv1.ScalingScheduleList, error)
|
||||||
Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
|
Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
|
||||||
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ScalingSchedule, err error)
|
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *zalandoorgv1.ScalingSchedule, err error)
|
||||||
ScalingScheduleExpansion
|
ScalingScheduleExpansion
|
||||||
}
|
}
|
||||||
|
|
||||||
// scalingSchedules implements ScalingScheduleInterface
|
// scalingSchedules implements ScalingScheduleInterface
|
||||||
type scalingSchedules struct {
|
type scalingSchedules struct {
|
||||||
client rest.Interface
|
*gentype.ClientWithList[*zalandoorgv1.ScalingSchedule, *zalandoorgv1.ScalingScheduleList]
|
||||||
ns string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// newScalingSchedules returns a ScalingSchedules
|
// newScalingSchedules returns a ScalingSchedules
|
||||||
func newScalingSchedules(c *ZalandoV1Client, namespace string) *scalingSchedules {
|
func newScalingSchedules(c *ZalandoV1Client, namespace string) *scalingSchedules {
|
||||||
return &scalingSchedules{
|
return &scalingSchedules{
|
||||||
client: c.RESTClient(),
|
gentype.NewClientWithList[*zalandoorgv1.ScalingSchedule, *zalandoorgv1.ScalingScheduleList](
|
||||||
ns: namespace,
|
"scalingschedules",
|
||||||
|
c.RESTClient(),
|
||||||
|
scheme.ParameterCodec,
|
||||||
|
namespace,
|
||||||
|
func() *zalandoorgv1.ScalingSchedule { return &zalandoorgv1.ScalingSchedule{} },
|
||||||
|
func() *zalandoorgv1.ScalingScheduleList { return &zalandoorgv1.ScalingScheduleList{} },
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get takes name of the scalingSchedule, and returns the corresponding scalingSchedule object, and an error if there is any.
|
|
||||||
func (c *scalingSchedules) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ScalingSchedule, err error) {
|
|
||||||
result = &v1.ScalingSchedule{}
|
|
||||||
err = c.client.Get().
|
|
||||||
Namespace(c.ns).
|
|
||||||
Resource("scalingschedules").
|
|
||||||
Name(name).
|
|
||||||
VersionedParams(&options, scheme.ParameterCodec).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// List takes label and field selectors, and returns the list of ScalingSchedules that match those selectors.
|
|
||||||
func (c *scalingSchedules) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ScalingScheduleList, err error) {
|
|
||||||
var timeout time.Duration
|
|
||||||
if opts.TimeoutSeconds != nil {
|
|
||||||
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
|
|
||||||
}
|
|
||||||
result = &v1.ScalingScheduleList{}
|
|
||||||
err = c.client.Get().
|
|
||||||
Namespace(c.ns).
|
|
||||||
Resource("scalingschedules").
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Timeout(timeout).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Watch returns a watch.Interface that watches the requested scalingSchedules.
|
|
||||||
func (c *scalingSchedules) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
|
|
||||||
var timeout time.Duration
|
|
||||||
if opts.TimeoutSeconds != nil {
|
|
||||||
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
|
|
||||||
}
|
|
||||||
opts.Watch = true
|
|
||||||
return c.client.Get().
|
|
||||||
Namespace(c.ns).
|
|
||||||
Resource("scalingschedules").
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Timeout(timeout).
|
|
||||||
Watch(ctx)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create takes the representation of a scalingSchedule and creates it. Returns the server's representation of the scalingSchedule, and an error, if there is any.
|
|
||||||
func (c *scalingSchedules) Create(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.CreateOptions) (result *v1.ScalingSchedule, err error) {
|
|
||||||
result = &v1.ScalingSchedule{}
|
|
||||||
err = c.client.Post().
|
|
||||||
Namespace(c.ns).
|
|
||||||
Resource("scalingschedules").
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Body(scalingSchedule).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update takes the representation of a scalingSchedule and updates it. Returns the server's representation of the scalingSchedule, and an error, if there is any.
|
|
||||||
func (c *scalingSchedules) Update(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.UpdateOptions) (result *v1.ScalingSchedule, err error) {
|
|
||||||
result = &v1.ScalingSchedule{}
|
|
||||||
err = c.client.Put().
|
|
||||||
Namespace(c.ns).
|
|
||||||
Resource("scalingschedules").
|
|
||||||
Name(scalingSchedule.Name).
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Body(scalingSchedule).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateStatus was generated because the type contains a Status member.
|
|
||||||
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
|
||||||
func (c *scalingSchedules) UpdateStatus(ctx context.Context, scalingSchedule *v1.ScalingSchedule, opts metav1.UpdateOptions) (result *v1.ScalingSchedule, err error) {
|
|
||||||
result = &v1.ScalingSchedule{}
|
|
||||||
err = c.client.Put().
|
|
||||||
Namespace(c.ns).
|
|
||||||
Resource("scalingschedules").
|
|
||||||
Name(scalingSchedule.Name).
|
|
||||||
SubResource("status").
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Body(scalingSchedule).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete takes name of the scalingSchedule and deletes it. Returns an error if one occurs.
|
|
||||||
func (c *scalingSchedules) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
|
|
||||||
return c.client.Delete().
|
|
||||||
Namespace(c.ns).
|
|
||||||
Resource("scalingschedules").
|
|
||||||
Name(name).
|
|
||||||
Body(&opts).
|
|
||||||
Do(ctx).
|
|
||||||
Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteCollection deletes a collection of objects.
|
|
||||||
func (c *scalingSchedules) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
|
|
||||||
var timeout time.Duration
|
|
||||||
if listOpts.TimeoutSeconds != nil {
|
|
||||||
timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second
|
|
||||||
}
|
|
||||||
return c.client.Delete().
|
|
||||||
Namespace(c.ns).
|
|
||||||
Resource("scalingschedules").
|
|
||||||
VersionedParams(&listOpts, scheme.ParameterCodec).
|
|
||||||
Timeout(timeout).
|
|
||||||
Body(&opts).
|
|
||||||
Do(ctx).
|
|
||||||
Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Patch applies the patch and returns the patched scalingSchedule.
|
|
||||||
func (c *scalingSchedules) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ScalingSchedule, err error) {
|
|
||||||
result = &v1.ScalingSchedule{}
|
|
||||||
err = c.client.Patch(pt).
|
|
||||||
Namespace(c.ns).
|
|
||||||
Resource("scalingschedules").
|
|
||||||
Name(name).
|
|
||||||
SubResource(subresources...).
|
|
||||||
VersionedParams(&opts, scheme.ParameterCodec).
|
|
||||||
Body(data).
|
|
||||||
Do(ctx).
|
|
||||||
Into(result)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ limitations under the License.
|
|||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
http "net/http"
|
||||||
|
|
||||||
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
zalandoorgv1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
||||||
"github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
|
scheme "github.com/zalando-incubator/kube-metrics-adapter/pkg/client/clientset/versioned/scheme"
|
||||||
rest "k8s.io/client-go/rest"
|
rest "k8s.io/client-go/rest"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -90,10 +90,10 @@ func New(c rest.Interface) *ZalandoV1Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func setConfigDefaults(config *rest.Config) error {
|
func setConfigDefaults(config *rest.Config) error {
|
||||||
gv := v1.SchemeGroupVersion
|
gv := zalandoorgv1.SchemeGroupVersion
|
||||||
config.GroupVersion = &gv
|
config.GroupVersion = &gv
|
||||||
config.APIPath = "/apis"
|
config.APIPath = "/apis"
|
||||||
config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
|
config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()
|
||||||
|
|
||||||
if config.UserAgent == "" {
|
if config.UserAgent == "" {
|
||||||
config.UserAgent = rest.DefaultKubernetesUserAgent()
|
config.UserAgent = rest.DefaultKubernetesUserAgent()
|
||||||
|
|||||||
@@ -42,11 +42,17 @@ type sharedInformerFactory struct {
|
|||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
defaultResync time.Duration
|
defaultResync time.Duration
|
||||||
customResync map[reflect.Type]time.Duration
|
customResync map[reflect.Type]time.Duration
|
||||||
|
transform cache.TransformFunc
|
||||||
|
|
||||||
informers map[reflect.Type]cache.SharedIndexInformer
|
informers map[reflect.Type]cache.SharedIndexInformer
|
||||||
// startedInformers is used for tracking which informers have been started.
|
// startedInformers is used for tracking which informers have been started.
|
||||||
// This allows Start() to be called multiple times safely.
|
// This allows Start() to be called multiple times safely.
|
||||||
startedInformers map[reflect.Type]bool
|
startedInformers map[reflect.Type]bool
|
||||||
|
// wg tracks how many goroutines were started.
|
||||||
|
wg sync.WaitGroup
|
||||||
|
// shuttingDown is true when Shutdown has been called. It may still be running
|
||||||
|
// because it needs to wait for goroutines.
|
||||||
|
shuttingDown bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithCustomResyncConfig sets a custom resync period for the specified informer types.
|
// WithCustomResyncConfig sets a custom resync period for the specified informer types.
|
||||||
@@ -75,6 +81,14 @@ func WithNamespace(namespace string) SharedInformerOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithTransform sets a transform on all informers.
|
||||||
|
func WithTransform(transform cache.TransformFunc) SharedInformerOption {
|
||||||
|
return func(factory *sharedInformerFactory) *sharedInformerFactory {
|
||||||
|
factory.transform = transform
|
||||||
|
return factory
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
|
// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
|
||||||
func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory {
|
func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory {
|
||||||
return NewSharedInformerFactoryWithOptions(client, defaultResync)
|
return NewSharedInformerFactoryWithOptions(client, defaultResync)
|
||||||
@@ -107,20 +121,39 @@ func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResy
|
|||||||
return factory
|
return factory
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start initializes all requested informers.
|
|
||||||
func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) {
|
func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) {
|
||||||
f.lock.Lock()
|
f.lock.Lock()
|
||||||
defer f.lock.Unlock()
|
defer f.lock.Unlock()
|
||||||
|
|
||||||
|
if f.shuttingDown {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
for informerType, informer := range f.informers {
|
for informerType, informer := range f.informers {
|
||||||
if !f.startedInformers[informerType] {
|
if !f.startedInformers[informerType] {
|
||||||
go informer.Run(stopCh)
|
f.wg.Add(1)
|
||||||
|
// We need a new variable in each loop iteration,
|
||||||
|
// otherwise the goroutine would use the loop variable
|
||||||
|
// and that keeps changing.
|
||||||
|
informer := informer
|
||||||
|
go func() {
|
||||||
|
defer f.wg.Done()
|
||||||
|
informer.Run(stopCh)
|
||||||
|
}()
|
||||||
f.startedInformers[informerType] = true
|
f.startedInformers[informerType] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WaitForCacheSync waits for all started informers' cache were synced.
|
func (f *sharedInformerFactory) Shutdown() {
|
||||||
|
f.lock.Lock()
|
||||||
|
f.shuttingDown = true
|
||||||
|
f.lock.Unlock()
|
||||||
|
|
||||||
|
// Will return immediately if there is nothing to wait for.
|
||||||
|
f.wg.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool {
|
func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool {
|
||||||
informers := func() map[reflect.Type]cache.SharedIndexInformer {
|
informers := func() map[reflect.Type]cache.SharedIndexInformer {
|
||||||
f.lock.Lock()
|
f.lock.Lock()
|
||||||
@@ -142,7 +175,7 @@ func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[ref
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
// InternalInformerFor returns the SharedIndexInformer for obj using an internal
|
// InformerFor returns the SharedIndexInformer for obj using an internal
|
||||||
// client.
|
// client.
|
||||||
func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer {
|
func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer {
|
||||||
f.lock.Lock()
|
f.lock.Lock()
|
||||||
@@ -160,6 +193,7 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal
|
|||||||
}
|
}
|
||||||
|
|
||||||
informer = newFunc(f.client, resyncPeriod)
|
informer = newFunc(f.client, resyncPeriod)
|
||||||
|
informer.SetTransform(f.transform)
|
||||||
f.informers[informerType] = informer
|
f.informers[informerType] = informer
|
||||||
|
|
||||||
return informer
|
return informer
|
||||||
@@ -167,11 +201,59 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal
|
|||||||
|
|
||||||
// SharedInformerFactory provides shared informers for resources in all known
|
// SharedInformerFactory provides shared informers for resources in all known
|
||||||
// API group versions.
|
// API group versions.
|
||||||
|
//
|
||||||
|
// It is typically used like this:
|
||||||
|
//
|
||||||
|
// ctx, cancel := context.Background()
|
||||||
|
// defer cancel()
|
||||||
|
// factory := NewSharedInformerFactory(client, resyncPeriod)
|
||||||
|
// defer factory.WaitForStop() // Returns immediately if nothing was started.
|
||||||
|
// genericInformer := factory.ForResource(resource)
|
||||||
|
// typedInformer := factory.SomeAPIGroup().V1().SomeType()
|
||||||
|
// factory.Start(ctx.Done()) // Start processing these informers.
|
||||||
|
// synced := factory.WaitForCacheSync(ctx.Done())
|
||||||
|
// for v, ok := range synced {
|
||||||
|
// if !ok {
|
||||||
|
// fmt.Fprintf(os.Stderr, "caches failed to sync: %v", v)
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Creating informers can also be created after Start, but then
|
||||||
|
// // Start must be called again:
|
||||||
|
// anotherGenericInformer := factory.ForResource(resource)
|
||||||
|
// factory.Start(ctx.Done())
|
||||||
type SharedInformerFactory interface {
|
type SharedInformerFactory interface {
|
||||||
internalinterfaces.SharedInformerFactory
|
internalinterfaces.SharedInformerFactory
|
||||||
ForResource(resource schema.GroupVersionResource) (GenericInformer, error)
|
|
||||||
|
// Start initializes all requested informers. They are handled in goroutines
|
||||||
|
// which run until the stop channel gets closed.
|
||||||
|
// Warning: Start does not block. When run in a go-routine, it will race with a later WaitForCacheSync.
|
||||||
|
Start(stopCh <-chan struct{})
|
||||||
|
|
||||||
|
// Shutdown marks a factory as shutting down. At that point no new
|
||||||
|
// informers can be started anymore and Start will return without
|
||||||
|
// doing anything.
|
||||||
|
//
|
||||||
|
// In addition, Shutdown blocks until all goroutines have terminated. For that
|
||||||
|
// to happen, the close channel(s) that they were started with must be closed,
|
||||||
|
// either before Shutdown gets called or while it is waiting.
|
||||||
|
//
|
||||||
|
// Shutdown may be called multiple times, even concurrently. All such calls will
|
||||||
|
// block until all goroutines have terminated.
|
||||||
|
Shutdown()
|
||||||
|
|
||||||
|
// WaitForCacheSync blocks until all started informers' caches were synced
|
||||||
|
// or the stop channel gets closed.
|
||||||
WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
|
WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
|
||||||
|
|
||||||
|
// ForResource gives generic access to a shared informer of the matching type.
|
||||||
|
ForResource(resource schema.GroupVersionResource) (GenericInformer, error)
|
||||||
|
|
||||||
|
// InformerFor returns the SharedIndexInformer for obj using an internal
|
||||||
|
// client.
|
||||||
|
InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer
|
||||||
|
|
||||||
Zalando() zalandoorg.Interface
|
Zalando() zalandoorg.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ limitations under the License.
|
|||||||
package externalversions
|
package externalversions
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
fmt "fmt"
|
||||||
|
|
||||||
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
v1 "github.com/zalando-incubator/kube-metrics-adapter/pkg/apis/zalando.org/v1"
|
||||||
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
schema "k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user