Files
capsule/cmd/main.go
T
+83 327296a5b0 feat: add action type for rules and regexp cache (#1957)
* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update codecov/codecov-action action to v5.5.2 (#1783)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to 43a17d6 (#1781)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module k8s.io/dynamic-resource-allocation to v0.34.3 (#1786)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module k8s.io/apiextensions-apiserver to v0.34.3 (#1785)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(controller): allow no spaces in template references (#1789)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix(controller): allow no spaces in template references

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix(controller): allow no spaces in template references

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update securego/gosec action to v2.22.11 (#1788)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1791)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update k8s.io/utils digest to 61b37f7 (#1801)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(controller): template concurrency (#1802)

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1795)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency kubernetes-sigs/kind to v0.31.0 (#1796)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update kubernetes packages to v0.35.0 (#1797)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module k8s.io/dynamic-resource-allocation to v0.35.0 (#1798)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency kubernetes-sigs/controller-tools to v0.20.0 (#1799)

* chore(deps): update dependency kubernetes-sigs/controller-tools to v0.20.0

* chore(deps): update dependency kubernetes-sigs/controller-tools to v0.20.0

Signed-off-by: Hristo Hristov <me@hhristov.info>

---------

Signed-off-by: Hristo Hristov <me@hhristov.info>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update k8s.io/utils digest to 98d557b (#1803)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1793)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module github.com/onsi/ginkgo/v2 to v2.27.3 (#1776)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update github/codeql-action digest to f67ec12 (#1790)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency google/ko to v0.18.1 (#1792)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module github.com/onsi/gomega to v1.38.3 (#1777)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module sigs.k8s.io/cluster-api to v1.12.1 (#1784)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update k8s.io/utils digest to 383b50a (#1804)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update actions/stale digest to a21a081 (#1808)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: adjust makefile and releaser for kubernetes 1.35 (#1809)

* chore: adjust makefile and releaser for kubernetes 1.35

Signed-off-by: Hristo Hristov <me@hhristov.info>

* chore: adjust makefile and releaser for kubernetes 1.35

Signed-off-by: Hristo Hristov <me@hhristov.info>

---------

Signed-off-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1807)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update k8s.io/utils digest to 718f0e5 (#1806)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to a930d0a (#1805)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update helm release kube-prometheus-stack to v80.8.2 (#1810)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add dynamic capsule user evaluation (#1811)

* chore: improve dev targets

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(controller): implement deterministic rolebinding reflection

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(controller): capsule users are determined from configuration status

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(tenantowners): added agreggate option - tenantowners are always considered capsule users

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(tenantowner): add implicit aggregation for tenants

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: remove helm flags

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix(config): remove usergroups default

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update helm release kube-prometheus-stack to v80.9.2 (#1812)

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1814)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update amannn/action-semantic-pull-request digest to 71b07ef (#1815)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update github/codeql-action digest to fd448f7 (#1816)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: use cert-manager certificates by default (#1818)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(helm): use cert-manager certificates by default

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: move dependencies to trackable resources

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: move dependencies to trackable resources

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: move dependencies to trackable resources

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: move dependencies to trackable resources

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: move dependencies to trackable resources

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: move dependencies to trackable resources

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update helm release kube-prometheus-stack to v80.13.2 (#1817)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency prometheus-operator/prometheus-operator to v0.87.1 (#1820)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency golangci/golangci-lint to v2.8.0 (#1823)

* chore(deps): update dependency golangci/golangci-lint to v2.8.0

* chore(deps): update dependency golangci/golangci-lint to v2.8.0

Signed-off-by: Hristo Hristov <me@hhristov.info>

* chore(deps): update dependency golangci/golangci-lint to v2.8.0

Signed-off-by: Hristo Hristov <me@hhristov.info>

* chore(deps): update dependency golangci/golangci-lint to v2.8.0

Signed-off-by: Hristo Hristov <me@hhristov.info>

---------

Signed-off-by: Hristo Hristov <me@hhristov.info>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update helm release kube-prometheus-stack to v80.13.3 (#1827)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module github.com/onsi/gomega to v1.39.0 (#1826)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency prometheus-operator/prometheus-operator to v0.88.0 (#1828)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module github.com/onsi/ginkgo/v2 to v2.27.4 (#1825)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to 0b82b0b (#1824)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update k8s.io/utils digest to 914a6e7 (#1822)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1830)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update actions/stale digest to d6f8a33 (#1843)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update amannn/action-semantic-pull-request digest to b439535 (#1835)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update actions/checkout action to v6.0.2 (#1845)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1847)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1848)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add ruleset api(#1844)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix(config): remove usergroups default

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix(config): remove usergroups default

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* sec(ghsa-2ww6-hf35-mfjm): intercept namespace subresource

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(api): add rulestatus api

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: conflicts

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(api): add rulestatus api

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(api): add rulestatus api

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(api): add rulestatus api

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(api): add rulestatus api

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(api): add rulestatus api

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* feat(api): add rulestatus api

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency alessandrojcm/commitlint-pre-commit-hook to v9.24.0 (#1833)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to deef08a (#1836)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency adrienverge/yamllint to v1.38.0 (#1832)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update github/codeql-action digest to b2ff80d (#1821)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update github/codeql-action digest to f985be5 (#1850)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to 5620efe (#1852)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1851)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1837)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1856)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update github/codeql-action digest to 8aac4e4 (#1855)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: diverse performance improvements (#1861)

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update actions/stale digest to dcd2b94 (#1857)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(docs): update home in chart.yaml (#1864)

* fix(docs): update home in chart.yaml

Signed-off-by: sandert-k8s <sandert98@gmail.com>

* fix: linter

Signed-off-by: sandert-k8s <sandert98@gmail.com>

---------

Signed-off-by: sandert-k8s <sandert98@gmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update actions/stale digest to b5d41d4 (#1866)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update zgosalvez/github-actions-ensure-sha-pinned-actions action to v5 (#1865)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update amannn/action-semantic-pull-request digest to ac7e3fc (#1871)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to 6d473d3 (#1860)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to 17ae174 (#1876)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update github/codeql-action digest to 0ec47d0 (#1858)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to 57aae52 (#1882)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update actions/stale digest to db5d06a (#1886)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to a0a6512 (#1887)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to e22c389 (#1888)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update anchore/sbom-action digest to f0d33c1 (#1893)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(workflows): bump trivy action to 0.35.0 (#1896)

Signed-off-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(webhook): adapt to controller-runtime breaking change in newwebhookmanagedby (#1898)

Signed-off-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add e2e openshift support (#1894)

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

* feat: add e2e openshift support

Signed-off-by: Hristo Hristov <me@hhristov.info>

---------

Signed-off-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1873)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1859)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency alessandrojcm/commitlint-pre-commit-hook to v9.25.0 (#1907)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): set renovate minimum release age to 14 days (#1908)

Signed-off-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: add lfx status badges (#1909)

Signed-off-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* ci: pin slsa provenance workflow (#1903)

Signed-off-by: Akash Kumar <meakash7902@gmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency b1nary-gr0up/nwa to v0.7.8 (#1906)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1900)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: upstream enterprise preview (#1841)

feat: upstream enterprise preview

---------

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
Co-authored-by: CorentinPtrl <pitrel.corentin@gmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: bump supported version (#1918)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: bump makefile 1.35

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: release workflows  (#1919)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: bump makefile 1.35

* fix: release workflows

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: reuse webhookport from values (#1927)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix: reuse webhookport from values

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: consider webhooks.service.port

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: consider webhooks.service.port

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: correct helm values schema for webservcie ports (#1928)

Signed-off-by: bakito <github@bakito.ch>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: correct helm docs for webhook service port schema (#1929)

Signed-off-by: bakito <github@bakito.ch>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update capsule-proxy docker tag to v0.12.0 (#1846)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency prometheus-operator/prometheus-operator to v0.91.0 (#1849)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update dependency grafana/grafana-operator to v5.22.2 (#1819)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: use release age for all managers except helm  (#1931)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: use release age for all managers except helm

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update capsule-proxy docker tag to v0.13.1 (#1932)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add observedgeneration to status object of all crds (#1930)

* feat: add observedgeneration to status object of all crds

Signed-off-by: sandert-k8s <sandert98@gmail.com>

* chore(api): rename rulestatusspec to rulestatusstatus

Signed-off-by: sandert-k8s <sandert98@gmail.com>

---------

Signed-off-by: sandert-k8s <sandert98@gmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: promote sander tervoert as maintainer (#1933)

* chore: promote sander tervoert as maintainer

Signed-off-by: Hristo Hristov <me@hhristov.info>

* chore: promote sander tervoert as maintainer

Signed-off-by: Hristo Hristov <me@hhristov.info>

* chore: promote sander tervoert as maintainer

Signed-off-by: Hristo Hristov <me@hhristov.info>

* chore: promote sander tervoert as maintainer

Signed-off-by: Hristo Hristov <me@hhristov.info>

---------

Signed-off-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: promote sander tervoert as maintainer (#1939)

Signed-off-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* ci: add goreleaser dry run (#1936)

Signed-off-by: Alan <alan747271363-art@users.noreply.github.com>
Co-authored-by: Alan <alan747271363-art@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module gomodules.xyz/jsonpatch/v2 to v3 (#1917)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update helm release kube-prometheus-stack to v85 (#1914)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module go.uber.org/zap to v1.28.0 (#1904)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: avoid rejection when users are classified as administrators (#1941)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix: avoid rejection when users are classified as administrators

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update capsule-proxy docker tag to v0.13.2 (#1942)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module sigs.k8s.io/gateway-api to v1.5.1 (#1878)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: typo in ruleset description crd (#1944)

Signed-off-by: sandert-k8s <sandert98@gmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add tenant list to status of capsuleconfiguration (#1935)

Signed-off-by: sandert-k8s <sandert98@gmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: correct tls reconciler and add tenantowners (#1946)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix: tls controller

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add tenantowner tenant status reference

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: tlsreconciler only patches cabundles

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: refactor logger usage

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: tlsreconciler only patches cabundles

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: tlsreconciler only patches cabundles

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: fix typo (#1945)

* chore: typo in ruleset description crd

Signed-off-by: sandert-k8s <sandert98@gmail.com>

* chore: fix typo

Signed-off-by: sandert-k8s <sandert98@gmail.com>

---------

Signed-off-by: sandert-k8s <sandert98@gmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: allow managed metadata defined per tenant (#1947)

* fix: allow managed metadata defined per tenant

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: allow managed metadata defined per tenant

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: action type

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: preserve ca-bundles injected from external providers  (#1948)

* fix: preserve ca-bundles injected from external providers  (#1948)

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix(deps): update module sigs.k8s.io/cluster-api to v1.13.2 (#1874)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat(deps): bump golang 1.26.4  (#1949)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix: preserve ca-bundles injected from external providers

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat(deps): bump golang 1.26.4

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* feat(deps): bump golang 1.26.4

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update capsule-proxy docker tag to v0.13.3 (#1950)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore(deps): update all-ci-updates (#1902)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: best effort patch reconciling status  (#1952)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix: preserve ca-bundles injected from external providers

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: best effort patch reconciling status

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: use different match strategy for truthy and match (#1953)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix: preserve ca-bundles injected from external providers

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: best effort patch reconciling status

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: use different match strategy for truthy and match

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* progress

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add registry

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add registry

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* chore: update all gihub actions, use digest versioning and remove obsolete docs-lint workflow (#1955)

Signed-off-by: bakito <github@bakito.ch>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: translate serviceaccounts to type serviceaccount not user (#1956)

* fix(controller): decode old object for delete requests

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* chore: modernize golang

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>

* fix: preserve ca-bundles injected from external providers

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* fix: translate serviceaccounts to type serviceaccount not user

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add improved registry enforcement

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
Signed-off-by: Hristo Hristov <me@hhristov.info>
Signed-off-by: sandert-k8s <sandert98@gmail.com>
Signed-off-by: Akash Kumar <meakash7902@gmail.com>
Signed-off-by: bakito <github@bakito.ch>
Signed-off-by: Alan <alan747271363-art@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Hristo Hristov <me@hhristov.info>
Co-authored-by: Sander Tervoert <32864332+sandert-k8s@users.noreply.github.com>
Co-authored-by: Akash Kumar <91385321+AkashKumar7902@users.noreply.github.com>
Co-authored-by: CorentinPtrl <pitrel.corentin@gmail.com>
Co-authored-by: Marc Brugger <github@bakito.ch>
Co-authored-by: alan747271363-art <alan747271363@gmail.com>
Co-authored-by: Alan <alan747271363-art@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-08 23:20:49 +02:00

814 lines
26 KiB
Go

// Copyright 2020-2026 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0
package main
import (
"crypto/tls"
goflag "flag"
"fmt"
"os"
"path/filepath"
goRuntime "runtime"
flag "github.com/spf13/pflag"
_ "go.uber.org/automaxprocs"
"go.uber.org/zap/zapcore"
admissionv1 "k8s.io/api/admissionregistration/v1"
corev1 "k8s.io/api/core/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
utilVersion "k8s.io/apimachinery/pkg/util/version"
"k8s.io/client-go/discovery"
"k8s.io/client-go/dynamic"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
"k8s.io/client-go/rest"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/certwatcher"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/event"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
ctrlwebhook "sigs.k8s.io/controller-runtime/pkg/webhook"
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
capsulev1beta1 "github.com/projectcapsule/capsule/api/v1beta1"
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
"github.com/projectcapsule/capsule/internal/cache"
"github.com/projectcapsule/capsule/internal/controllers/admission"
cacheinvalidator "github.com/projectcapsule/capsule/internal/controllers/cfg/invalidator"
configcontroller "github.com/projectcapsule/capsule/internal/controllers/cfg/status"
customquotacontroller "github.com/projectcapsule/capsule/internal/controllers/customquotas"
podlabelscontroller "github.com/projectcapsule/capsule/internal/controllers/pod"
"github.com/projectcapsule/capsule/internal/controllers/pv"
rbaccontroller "github.com/projectcapsule/capsule/internal/controllers/rbac"
"github.com/projectcapsule/capsule/internal/controllers/resourcepools"
"github.com/projectcapsule/capsule/internal/controllers/resources"
rulestatuscontroller "github.com/projectcapsule/capsule/internal/controllers/rulestatus"
servicelabelscontroller "github.com/projectcapsule/capsule/internal/controllers/servicelabels"
tenantcontroller "github.com/projectcapsule/capsule/internal/controllers/tenant"
tenantownercontroller "github.com/projectcapsule/capsule/internal/controllers/tenantowner"
tlscontroller "github.com/projectcapsule/capsule/internal/controllers/tls"
utilscontroller "github.com/projectcapsule/capsule/internal/controllers/utils"
"github.com/projectcapsule/capsule/internal/metrics"
"github.com/projectcapsule/capsule/internal/webhook"
cfgvalidation "github.com/projectcapsule/capsule/internal/webhook/cfg"
customquotavalidation "github.com/projectcapsule/capsule/internal/webhook/customquota"
"github.com/projectcapsule/capsule/internal/webhook/defaults"
"github.com/projectcapsule/capsule/internal/webhook/dra"
"github.com/projectcapsule/capsule/internal/webhook/gateway"
"github.com/projectcapsule/capsule/internal/webhook/generic"
"github.com/projectcapsule/capsule/internal/webhook/ingress"
namespacemutation "github.com/projectcapsule/capsule/internal/webhook/namespace/mutation"
namespacevalidation "github.com/projectcapsule/capsule/internal/webhook/namespace/validation"
"github.com/projectcapsule/capsule/internal/webhook/node"
"github.com/projectcapsule/capsule/internal/webhook/pod"
"github.com/projectcapsule/capsule/internal/webhook/pvc"
"github.com/projectcapsule/capsule/internal/webhook/resourcepool"
"github.com/projectcapsule/capsule/internal/webhook/route"
"github.com/projectcapsule/capsule/internal/webhook/service"
"github.com/projectcapsule/capsule/internal/webhook/serviceaccounts"
tenantmutation "github.com/projectcapsule/capsule/internal/webhook/tenant/mutation"
tenantvalidation "github.com/projectcapsule/capsule/internal/webhook/tenant/validation"
"github.com/projectcapsule/capsule/pkg/runtime/configuration"
"github.com/projectcapsule/capsule/pkg/runtime/handlers"
"github.com/projectcapsule/capsule/pkg/runtime/indexers"
"github.com/projectcapsule/capsule/pkg/utils"
)
var (
scheme = runtime.NewScheme()
setupLog = ctrl.Log.WithName("setup")
)
func init() {
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
utilruntime.Must(capsulev1beta1.AddToScheme(scheme))
utilruntime.Must(capsulev1beta2.AddToScheme(scheme))
utilruntime.Must(apiextensionsv1.AddToScheme(scheme))
utilruntime.Must(gatewayv1.Install(scheme))
utilruntime.Must(admissionv1.AddToScheme(scheme))
}
func printVersion() {
setupLog.Info(fmt.Sprintf("Capsule Version %s %s%s", GitTag, GitCommit, GitDirty))
setupLog.Info(fmt.Sprintf("Build from: %s", GitRepo))
setupLog.Info(fmt.Sprintf("Build date: %s", BuildTime))
setupLog.Info(fmt.Sprintf("Go Version: %s", goRuntime.Version()))
setupLog.Info(fmt.Sprintf("Go OS/Arch: %s/%s", goRuntime.GOOS, goRuntime.GOARCH))
}
//nolint:maintidx,gocyclo,cyclop,gocognit
func main() {
controllerConfig := utilscontroller.ControllerOptions{}
var (
metricsAddr, metricsCertPath, metricsCertName, metricsCertKey string
webhookCertPath, webhookCertName, webhookCertKey string
enableLeaderElection bool
enablePprof bool
version bool
secureMetrics bool
enableHTTP2 bool
clientConnectionQPS float32
clientConnectionBurst int32
webhookPort int
)
var goFlagSet goflag.FlagSet
var tlsOpts []func(*tls.Config)
flag.StringVar(
&controllerConfig.ConfigurationName,
"configuration-name",
"default",
"The CapsuleConfiguration resource name to use",
)
flag.BoolVar(
&enableLeaderElection,
"enable-leader-election",
false,
"Enable leader election for controller manager. "+
"Enabling this will ensure there is only one active controller manager.",
)
flag.IntVar(
&controllerConfig.MaxConcurrentReconciles,
"workers",
1,
"MaxConcurrentReconciles is the maximum number of concurrent Reconciles which can be run.",
)
flag.StringVar(
&metricsAddr,
"metrics-addr",
":8080",
"The address the metric endpoint binds to.",
)
flag.BoolVar(
&secureMetrics,
"metrics-secure",
false,
"If set, the metrics endpoint is served securely via HTTPS. Use --metrics-secure=false to use HTTP instead.",
)
flag.StringVar(
&metricsCertPath,
"metrics-cert-path",
"",
"The directory that contains the metrics server certificate.",
)
flag.StringVar(
&metricsCertName,
"metrics-cert-name",
"tls.crt",
"The name of the metrics server certificate file.",
)
flag.StringVar(
&metricsCertKey,
"metrics-cert-key",
"tls.key",
"The name of the metrics server key file.",
)
flag.IntVar(
&webhookPort,
"webhook-port",
9443,
"The port the webhook server binds to.",
)
flag.StringVar(
&webhookCertPath,
"webhook-cert-path",
"/tmp/k8s-webhook-server/serving-certs",
"The directory that contains the webhook certificate.",
)
flag.StringVar(
&webhookCertName,
"webhook-cert-name",
"tls.crt",
"The name of the webhook certificate file.",
)
flag.StringVar(
&webhookCertKey,
"webhook-cert-key",
"tls.key",
"The name of the webhook key file.",
)
flag.BoolVar(
&enableHTTP2,
"enable-http2", false,
"If set, HTTP/2 will be enabled for the metrics and webhook servers",
)
flag.Float32Var(
&clientConnectionQPS,
"client-connection-qps",
20.0,
"QPS to use for interacting with kubernetes apiserver.",
)
flag.Int32Var(
&clientConnectionBurst,
"client-connection-burst",
30,
"Burst to use for interacting with kubernetes apiserver.",
)
flag.BoolVar(
&enablePprof,
"enable-pprof",
false,
"Enables Pprof endpoint for profiling (not recommend in production)",
)
flag.BoolVar(
&version,
"version",
false,
"Print the Capsule version and exit",
)
opts := zap.Options{
EncoderConfigOptions: append([]zap.EncoderConfigOption{}, func(config *zapcore.EncoderConfig) {
config.EncodeTime = zapcore.ISO8601TimeEncoder
}),
}
opts.BindFlags(&goFlagSet)
flag.CommandLine.AddGoFlagSet(&goFlagSet)
flag.Parse()
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
printVersion()
if version {
os.Exit(0)
}
ctx := ctrl.SetupSignalHandler()
setupLog.V(5).Info("Controller", "Options", controllerConfig)
var ns string
if ns = os.Getenv(configuration.EnvironmentControllerNamespace); len(ns) == 0 {
setupLog.Error(fmt.Errorf("unable to determinate the Namespace Capsule is running on. Please export %s", configuration.EnvironmentControllerNamespace), "unable to start manager")
os.Exit(1)
}
if serviceAccountName := os.Getenv(configuration.EnvironmentServiceaccountName); len(serviceAccountName) == 0 {
setupLog.Error(fmt.Errorf("unable to determinate the ServiceAccount Capsule is running with. Please export %s", configuration.EnvironmentServiceaccountName), "unable to start manager")
os.Exit(1)
}
if len(controllerConfig.ConfigurationName) == 0 {
setupLog.Error(fmt.Errorf("missing CapsuleConfiguration resource name"), "unable to start manager")
os.Exit(1)
}
restConfig, err := ctrl.GetConfig()
if err != nil {
setupLog.Error(err, "unable to start manager")
os.Exit(1)
}
// Suppress Warnings
restConfig.WarningHandler = rest.NoWarnings{}
restConfig.QPS = clientConnectionQPS
restConfig.Burst = int(clientConnectionBurst)
directClient, err := client.New(ctrl.GetConfigOrDie(), client.Options{
Scheme: scheme,
})
if err != nil {
setupLog.Error(err, "unable to create the direct client")
os.Exit(1)
}
directCfg := configuration.NewCapsuleConfiguration(ctx, directClient, restConfig, controllerConfig.ConfigurationName)
tlsReconciler := &tlscontroller.Reconciler{}
if directCfg.EnableTLSConfiguration() {
tlsReconciler = &tlscontroller.Reconciler{
Client: directClient,
Log: ctrl.Log.WithName("capsule.ctrl").WithName("tls"),
Namespace: ns,
Configuration: directCfg,
}
tlsCert := &corev1.Secret{}
if err = directClient.Get(ctx, types.NamespacedName{
Namespace: ns,
Name: directCfg.TLSSecretName(),
}, tlsCert); err != nil {
if !apierrors.IsNotFound(err) {
setupLog.Error(err, "unable to get Capsule TLS secret")
os.Exit(1)
}
tlsCert = &corev1.Secret{}
tlsCert.Name = directCfg.TLSSecretName()
tlsCert.Namespace = ns
tlsCert.Data = map[string][]byte{}
}
// Reconcile TLS certificates before starting controllers and webhooks
if err = tlsReconciler.ReconcileCertificates(ctx, ctrl.Log.WithName("capsule.setup").WithName("tls"), tlsCert); err != nil {
setupLog.Error(err, "unable to reconcile Capsule TLS secret")
os.Exit(1)
}
}
// if the enable-http2 flag is false (the default), http/2 should be disabled
// due to its vulnerabilities. More specifically, disabling http/2 will
// prevent from being vulnerable to the HTTP/2 Stream Cancellation and
// Rapid Reset CVEs. For more information see:
// - https://github.com/advisories/GHSA-qppj-fm5r-hxr3
// - https://github.com/advisories/GHSA-4374-p667-p6c8
disableHTTP2 := func(c *tls.Config) {
setupLog.Info("disabling http/2")
c.NextProtos = []string{"http/1.1"}
}
if !enableHTTP2 {
tlsOpts = append(tlsOpts, disableHTTP2)
}
// Create watchers for metrics and webhooks certificates
var metricsCertWatcher, webhookCertWatcher *certwatcher.CertWatcher
// Metrics endpoint is enabled in 'config/default/kustomization.yaml'. The Metrics options configure the server.
// More info:
// - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.20.4/pkg/metrics/server
// - https://book.kubebuilder.io/reference/metrics.html
metricsServerOptions := metricsserver.Options{
BindAddress: metricsAddr,
SecureServing: secureMetrics,
TLSOpts: tlsOpts,
}
if secureMetrics {
// FilterProvider is used to protect the metrics endpoint with authn/authz.
// These configurations ensure that only authorized users and service accounts
// can access the metrics endpoint. The RBAC are configured in 'config/rbac/kustomization.yaml'. More info:
// https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.20.4/pkg/metrics/filters#WithAuthenticationAndAuthorization
metricsServerOptions.FilterProvider = filters.WithAuthenticationAndAuthorization
}
// If the certificate is not specified, controller-runtime will automatically
// generate self-signed certificates for the metrics server. While convenient for development and testing,
// this setup is not recommended for production.
//
if len(metricsCertPath) > 0 {
setupLog.Info(
"Initializing metrics certificate watcher using provided certificates",
"metrics-cert-path",
metricsCertPath,
"metrics-cert-name",
metricsCertName,
"metrics-cert-key",
metricsCertKey,
)
var err error
metricsCertWatcher, err = certwatcher.New(
filepath.Join(metricsCertPath, metricsCertName),
filepath.Join(metricsCertPath, metricsCertKey),
)
if err != nil {
setupLog.Error(err, "to initialize metrics certificate watcher", "error", err)
os.Exit(1)
}
metricsServerOptions.TLSOpts = append(
metricsServerOptions.TLSOpts,
func(config *tls.Config) {
config.GetCertificate = metricsCertWatcher.GetCertificate
},
)
}
// Initial webhook TLS options
webhookTLSOpts := tlsOpts
if len(webhookCertPath) > 0 {
setupLog.Info(
"Initializing webhook certificate watcher using provided certificates",
"webhook-cert-path",
webhookCertPath,
"webhook-cert-name",
webhookCertName,
"webhook-cert-key",
webhookCertKey,
)
var err error
webhookCertWatcher, err = certwatcher.New(
filepath.Join(webhookCertPath, webhookCertName),
filepath.Join(webhookCertPath, webhookCertKey),
)
if err != nil {
setupLog.Error(err, "Failed to initialize webhook certificate watcher")
os.Exit(1)
}
webhookTLSOpts = append(webhookTLSOpts, func(config *tls.Config) {
config.GetCertificate = webhookCertWatcher.GetCertificate
})
}
ctrlOpts := ctrl.Options{
Scheme: scheme,
Metrics: metricsServerOptions,
WebhookServer: ctrlwebhook.NewServer(ctrlwebhook.Options{
Port: webhookPort,
TLSOpts: webhookTLSOpts,
}),
LeaderElection: enableLeaderElection,
LeaderElectionID: "42c733ea.clastix.capsule.io",
HealthProbeBindAddress: ":10080",
NewClient: func(config *rest.Config, options client.Options) (client.Client, error) {
options.Cache.Unstructured = true
return client.New(config, options)
},
}
if enablePprof {
ctrlOpts.PprofBindAddress = ":8082"
}
setupLog.Info("initializing manager")
// Suppress Warnings
restConfig.WarningHandler = rest.NoWarnings{}
restConfig.QPS = clientConnectionQPS
restConfig.Burst = int(clientConnectionBurst)
manager, err := ctrl.NewManager(restConfig, ctrlOpts)
if err != nil {
setupLog.Error(err, "unable to start manager")
os.Exit(1)
}
if metricsCertWatcher != nil {
if err := manager.Add(metricsCertWatcher); err != nil {
setupLog.Error(err, "unable to add metrics certificate watcher")
os.Exit(1)
}
}
if webhookCertWatcher != nil {
if err := manager.Add(webhookCertWatcher); err != nil {
setupLog.Error(err, "unable to add webhook certificate watcher")
os.Exit(1)
}
}
_ = manager.AddReadyzCheck("ping", healthz.Ping)
_ = manager.AddHealthzCheck("ping", healthz.Ping)
dc, err := discovery.NewDiscoveryClientForConfig(manager.GetConfig())
if err != nil {
setupLog.Error(err, "unable to create discovery client")
os.Exit(1)
}
dynamicClient, err := dynamic.NewForConfig(manager.GetConfig())
if err != nil {
setupLog.Error(err, "unable to create dynamic client")
os.Exit(1)
}
setupLog.Info("initializing capsule configuration")
cfg := configuration.NewCapsuleConfiguration(ctx, manager.GetClient(), manager.GetConfig(), controllerConfig.ConfigurationName)
setupLog.Info("initializing caches")
// Initialize Notifiers (Channels)
customQuotaCh := make(chan event.TypedGenericEvent[*capsulev1beta2.CustomQuota], 1024)
globalCustomQuotaCh := make(chan event.TypedGenericEvent[*capsulev1beta2.GlobalCustomQuota], 1024)
// Initialize Caches
impersonationCache := cache.NewImpersonationCache()
regexCache := cache.NewRegexCache()
registryCache := cache.NewRegistryRuleSetCache(regexCache)
customQuotaQuantityCache := cache.NewQuantityCache[string]()
jsonPathCache := cache.NewJSONPathCache()
targetsCache := cache.NewCompiledTargetsCache[string]()
if directCfg.EnableTLSConfiguration() {
if err = tlsReconciler.SetupWithManager(manager); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "Namespace")
os.Exit(1)
}
}
if err = (&tenantcontroller.Manager{
RESTConfig: manager.GetConfig(),
Client: manager.GetClient(),
DynamicClient: dynamicClient,
DiscoveryClient: dc,
Metrics: metrics.MustMakeTenantRecorder(),
Log: ctrl.Log.WithName("capsule.ctrl").WithName("tenant"),
Recorder: manager.GetEventRecorder("tenant-controller"),
Configuration: cfg,
}).SetupWithManager(manager, controllerConfig); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "Tenant")
os.Exit(1)
}
if err = (&capsulev1beta1.Tenant{}).SetupWebhookWithManager(manager); err != nil {
setupLog.Error(err, "unable to create conversion webhook", "webhook", "capsulev1beta1.Tenant")
os.Exit(1)
}
setupLog.Info("registering indexers")
if err = indexers.AddToManager(ctx, setupLog, manager); err != nil {
setupLog.Error(err, "unable to setup indexers")
os.Exit(1)
}
var kubeVersion *utilVersion.Version
if kubeVersion, err = utils.GetK8sVersionFromConfig(dc); err != nil {
setupLog.Error(err, "unable to get kubernetes version")
os.Exit(1)
}
setupLog.Info("registering webhooks")
// webhooks: the order matters, don't change it and just append
webhooksList := append(
make([]handlers.Webhook, 0),
route.GenericReplicasHandler(),
route.GenericManagedHandler(cfg),
route.Pod(
pod.Handler(
pod.ImagePullPolicy(),
pod.ContainerRegistryLegacy(cfg),
pod.ContainerRegistry(cfg, registryCache),
pod.PriorityClass(),
pod.RuntimeClass(),
),
),
route.Ingress(ingress.Class(cfg, kubeVersion), ingress.Hostnames(cfg), ingress.Collision(cfg), ingress.Wildcard()),
route.PVCValidating(
pvc.Handler(
pvc.PersistentVolumeValidatingVolume(),
pvc.PersistentVolumeValidatingClass(),
),
),
route.PVCMutating(
pvc.Handler(
pvc.PersistentVolumeMutatingVolume(),
),
),
route.Service(
service.Handler(
service.Validating(),
),
),
route.Node(handlers.InCapsuleGroups(cfg, node.UserMetadataHandler(cfg, kubeVersion))),
route.Cordoning(handlers.InCapsuleGroups(cfg, generic.CordoningHandler(cfg))),
route.ServiceAccounts(
serviceaccounts.Handler(
cfg,
serviceaccounts.Promotion(cfg),
serviceaccounts.OwnerPromotion(cfg),
),
),
route.GenericCustomResources(generic.ResourceCounterHandler(manager.GetClient())),
route.Gateway(gateway.Class(cfg)),
route.DeviceClass(dra.DeviceClass()),
route.Defaults(defaults.Handler(cfg, kubeVersion)),
route.TenantMutation(
tenantmutation.MetaHandler(),
),
route.TenantValidation(
tenantvalidation.Handler(cfg,
tenantvalidation.NameHandler(),
tenantvalidation.NamespaceMetadataHandler(),
tenantvalidation.RoleBindingRegexHandler(),
tenantvalidation.IngressClassRegexHandler(),
tenantvalidation.StorageClassRegexHandler(),
tenantvalidation.ContainerRegistryRegexHandler(),
tenantvalidation.RuleHandler(),
tenantvalidation.HostnameRegexHandler(),
tenantvalidation.FreezedEmitter(),
tenantvalidation.ServiceAccountNameHandler(),
tenantvalidation.ForbiddenAnnotationsRegexHandler(),
tenantvalidation.ProtectedHandler(),
tenantvalidation.RequiredMetadataHandler(),
tenantvalidation.WarningHandler(cfg),
),
),
route.NamespaceValidation(
namespacevalidation.NamespaceHandler(
cfg,
namespacevalidation.CordoningHandler(cfg),
namespacevalidation.QuotaHandler(),
namespacevalidation.PrefixHandler(cfg),
namespacevalidation.UserMetadataHandler(),
namespacevalidation.RequiredMetadataHandler(),
),
),
route.NamespaceMutation(
namespacemutation.NamespaceHandler(
cfg,
namespacemutation.OwnerReferenceHandler(cfg),
namespacemutation.MetadataHandler(cfg),
namespacemutation.NamespacePatchGuardHandler(cfg),
),
),
route.ResourcePoolMutation((resourcepool.PoolMutationHandler(ctrl.Log.WithName("webhooks").WithName("resourcepool")))),
route.ResourcePoolValidation((resourcepool.PoolValidationHandler(ctrl.Log.WithName("webhooks").WithName("resourcepool")))),
route.ResourcePoolClaimMutation((resourcepool.ClaimMutationHandler(ctrl.Log.WithName("webhooks").WithName("resourcepoolclaims")))),
route.ResourcePoolClaimValidation((resourcepool.ClaimValidationHandler(ctrl.Log.WithName("webhooks").WithName("resourcepoolclaims")))),
route.CustomQuotaValidation((customquotavalidation.CustomQuotaValidationHandler(
targetsCache,
jsonPathCache,
))),
route.GlobalCustomQuotaValidation((customquotavalidation.GlobalCustomQuotaValidationHandler(
targetsCache,
jsonPathCache,
))),
route.CalculationCustomQuotas(
customquotavalidation.ObjectCalculationHandler(
targetsCache,
jsonPathCache,
),
),
route.GenericTenantAssignment(
generic.TenantAssignmentHandler(),
),
route.ConfigValidation(
cfgvalidation.Handler(cfg,
cfgvalidation.WarningHandler(),
cfgvalidation.ServiceAccountHandler(),
),
),
)
nodeWebhookSupported, _ := utils.NodeWebhookSupported(kubeVersion)
if !nodeWebhookSupported {
setupLog.Info("disabling node labels verification webhook as current Kubernetes version doesn't have fix for CVE-2021-25735")
}
if err = webhook.Register(manager, webhooksList...); err != nil {
setupLog.Error(err, "unable to setup webhooks")
os.Exit(1)
}
rbacManager := &rbaccontroller.Manager{
Log: ctrl.Log.WithName("capsule.ctrl").WithName("rbac"),
Client: manager.GetClient(),
Configuration: cfg,
}
if err = manager.Add(rbacManager); err != nil {
setupLog.Error(err, "unable to create cluster roles")
os.Exit(1)
}
if err = rbacManager.SetupWithManager(ctx, manager, controllerConfig); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "Rbac")
os.Exit(1)
}
if err = (&tenantownercontroller.TenantOwnerManager{
Log: ctrl.Log.WithName("capsule.ctrl").WithName("tenantowners"),
Client: manager.GetClient(),
}).SetupWithManager(manager, controllerConfig); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "TenantOwners")
os.Exit(1)
}
if err = (&servicelabelscontroller.ServicesLabelsReconciler{
Log: ctrl.Log.WithName("capsule.ctrl").WithName("services"),
}).SetupWithManager(ctx, manager); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "ServiceLabels")
os.Exit(1)
}
if err = (&servicelabelscontroller.EndpointSlicesLabelsReconciler{
Log: ctrl.Log.WithName("capsule.ctrl").WithName("endpointslices"),
}).SetupWithManager(ctx, manager); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "EndpointSliceLabels")
}
if err = (&podlabelscontroller.MetadataReconciler{
Client: manager.GetClient(),
Log: ctrl.Log.WithName("capsule.ctrl").WithName("pods"),
}).SetupWithManager(ctx, manager); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "PodLabels")
os.Exit(1)
}
if err = (&pv.Controller{}).SetupWithManager(manager, controllerConfig); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "PersistentVolume")
os.Exit(1)
}
if err = (&configcontroller.Manager{
Rest: manager.GetConfig(),
Client: manager.GetClient(),
Log: ctrl.Log.WithName("capsule.ctrl").WithName("configuration"),
}).SetupWithManager(manager, controllerConfig); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "CapsuleConfiguration")
os.Exit(1)
}
if err = (&rulestatuscontroller.Manager{
Client: manager.GetClient(),
Log: ctrl.Log.WithName("capsule.ctrl").WithName("ruleset"),
}).SetupWithManager(manager, controllerConfig); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "RuleSet")
os.Exit(1)
}
setupLog.Info("initializing controllers")
localInvalidator := &cacheinvalidator.CacheInvalidator{
Log: ctrl.Log.WithName("capsule.ctrl").WithName("invalidator"),
Client: manager.GetClient(),
Configuration: directCfg,
ImpersonationCache: impersonationCache,
RegistryCache: registryCache,
JSONPathCache: jsonPathCache,
TargetsCache: targetsCache,
RegexCache: regexCache,
}
if err := localInvalidator.SetupWithManager(manager, controllerConfig); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "invalidator")
os.Exit(1)
}
if err := resources.Add(
ctrl.Log.WithName("controllers").WithName("TenantResources"),
manager,
cfg,
controllerConfig,
impersonationCache,
); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "tenantresources")
os.Exit(1)
}
if err := admission.Add(
ctrl.Log.WithName("capsule.ctrl").WithName("admission"),
manager,
manager.GetEventRecorder("admission-ctrl"),
controllerConfig,
directCfg,
); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "admission")
os.Exit(1)
}
if err := resourcepools.Add(
ctrl.Log.WithName("capsule.ctrl").WithName("resourcepools"),
manager,
manager.GetEventRecorder("pools-ctrl"),
controllerConfig,
); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "resourcepools")
os.Exit(1)
}
if err = customquotacontroller.Add(ctrl.Log.WithName("controllers").WithName("CustomQuotas"),
manager,
manager.GetEventRecorder("customquotas-ctrl"),
controllerConfig,
customQuotaQuantityCache,
jsonPathCache,
targetsCache,
customQuotaCh,
globalCustomQuotaCh,
); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "customquotas")
os.Exit(1)
}
setupLog.Info("starting manager")
if err = manager.Start(ctx); err != nil {
setupLog.Error(err, "problem running manager")
os.Exit(1)
}
}