├── .devcontainer ├── Dockerfile ├── README.md ├── devcontainer.json └── setup.sh ├── .dockerignore ├── .git-blame-ignore-revs ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── bug.md │ └── improvement.md ├── PULL_REQUEST_TEMPLATE.md ├── actions │ ├── add-archive │ │ └── action.yaml │ ├── bastion-tests │ │ └── action.yaml │ ├── bastion-ui-tests │ │ └── action.yaml │ ├── certificates-tests │ │ └── action.yaml │ ├── copy-file-ssh │ │ └── action.yaml │ ├── deploy-solution │ │ └── action.yaml │ ├── destroy-cluster │ │ └── action.yaml │ ├── enable-cp-ingress-managed-vip │ │ └── action.yaml │ ├── export-cloud-env │ │ └── action.yaml │ ├── generate-bootstrap │ │ └── action.yaml │ ├── generate-job-result │ │ └── action.yaml │ ├── generate-snapshots │ │ └── action.yaml │ ├── get-alert-rules │ │ └── action.yaml │ ├── mount-iso │ │ └── action.yaml │ ├── prepare-bastion │ │ └── action.yaml │ ├── prepare-expansion │ │ └── action.yaml │ ├── provision-volumes │ │ └── action.yaml │ ├── remove-archive │ │ └── action.yaml │ ├── remove-node │ │ └── action.yaml │ ├── retrieve-backup │ │ └── action.yaml │ ├── retrieve-iso │ │ └── action.yaml │ ├── retrieve-mountpoint │ │ └── action.yaml │ ├── retrieve-solution-iso │ │ └── action.yaml │ ├── run-bootstrap │ │ └── action.yaml │ ├── run-command-ssh-all-nodes │ │ └── action.yaml │ ├── run-command-ssh │ │ └── action.yaml │ ├── run-downgrade │ │ └── action.yaml │ ├── run-k8s-conformance │ │ └── action.yaml │ ├── run-script-ssh │ │ └── action.yaml │ ├── run-upgrade │ │ └── action.yaml │ ├── save-terraform-context │ │ └── action.yaml │ ├── sosreport-logs │ │ └── action.yaml │ ├── spawn-cluster │ │ └── action.yaml │ ├── untaint │ │ └── action.yaml │ └── wait-pod-stable │ │ └── action.yaml ├── changed-files.yaml ├── dependabot.yml ├── labeler.yml ├── scripts │ ├── build-conformance-pr-content.sh │ ├── create-volumes.sh │ ├── generate_junit_result.sh │ ├── stabilize_snapshot.py │ └── wait_pods_stable.sh ├── spawn │ ├── config │ │ ├── export-openstack.sh │ │ └── utils.sh │ └── tfvars │ │ ├── common.tfvars │ │ └── ovh.tfvars └── workflows │ ├── build-devcontainer.yaml │ ├── build-docs.yaml │ ├── build-shell-ui.yaml │ ├── build.yaml │ ├── codeql.yaml │ ├── create-dev-branch.yaml │ ├── cron-clean-ovh-cloud.yaml │ ├── crons.yaml │ ├── downgrade-test.yaml │ ├── e2e-tests.yaml │ ├── generate-sbom.yaml │ ├── lifecycle-dev.yaml │ ├── lifecycle-promoted.yaml │ ├── multi-node-test.yaml │ ├── nightly.yaml │ ├── post-merge.yaml │ ├── pre-merge.yaml │ ├── promote.yaml │ ├── publish.yaml │ ├── release.yaml │ ├── single-node-test.yaml │ └── upgrade-test.yaml ├── .gitignore ├── .pre-commit-config.yaml ├── .pylint-dict ├── .pylintrc ├── .readthedocs.yaml ├── .salt-lint ├── BUMPING.md ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── VERSION ├── Vagrantfile ├── artwork ├── color.xsl ├── generate.sh ├── generated │ ├── metalk8s-logo-wide-black-400.png │ ├── metalk8s-logo-wide-black.pdf │ ├── metalk8s-logo-wide-black.svg │ ├── metalk8s-logo-wide-white-200.png │ └── metalk8s-logo-wide-white.svg ├── metalk8s-logo-vertical.svg └── metalk8s-logo-wide.svg ├── buildchain ├── buildchain │ ├── __init__.py │ ├── action.py │ ├── build.py │ ├── builder.py │ ├── codegen.py │ ├── config.py │ ├── constants.py │ ├── coreutils.py │ ├── deps.py │ ├── docker_command.py │ ├── docs.py │ ├── format.py │ ├── image.py │ ├── iso.py │ ├── lint.py │ ├── packaging.py │ ├── salt_tree.py │ ├── shell_ui.py │ ├── targets │ │ ├── __init__.py │ │ ├── base.py │ │ ├── checksum.py │ │ ├── directory.py │ │ ├── file_tree.py │ │ ├── image.py │ │ ├── local_image.py │ │ ├── package.py │ │ ├── remote_image.py │ │ ├── repository.py │ │ ├── serialize.py │ │ └── template.py │ ├── types.py │ ├── ui.py │ ├── utils.py │ ├── vagrant.py │ └── versions.py ├── dodo.py ├── platform-requirements.txt ├── requirements.in ├── requirements.txt └── static-container-registry │ ├── .gitignore │ ├── .travis.yml │ ├── Dockerfile │ ├── LICENSE │ ├── README.md │ ├── ci │ ├── before-install.sh │ └── docker │ │ ├── image-provisioner │ │ ├── Dockerfile │ │ └── provision-images.sh │ │ ├── static-container-registry │ │ └── docker-test-entrypoint.sh │ │ └── sut │ │ └── Dockerfile │ ├── docker-compose.test.yml │ ├── entrypoint.sh │ ├── static-container-registry.py │ └── test.sh ├── charts ├── cert-manager.yaml ├── cert-manager │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── cainjector-config.yaml │ │ ├── cainjector-deployment.yaml │ │ ├── cainjector-poddisruptionbudget.yaml │ │ ├── cainjector-psp-clusterrole.yaml │ │ ├── cainjector-psp-clusterrolebinding.yaml │ │ ├── cainjector-psp.yaml │ │ ├── cainjector-rbac.yaml │ │ ├── cainjector-service.yaml │ │ ├── cainjector-serviceaccount.yaml │ │ ├── controller-config.yaml │ │ ├── crds.yaml │ │ ├── deployment.yaml │ │ ├── extras-objects.yaml │ │ ├── networkpolicy-egress.yaml │ │ ├── networkpolicy-webhooks.yaml │ │ ├── poddisruptionbudget.yaml │ │ ├── podmonitor.yaml │ │ ├── psp-clusterrole.yaml │ │ ├── psp-clusterrolebinding.yaml │ │ ├── psp.yaml │ │ ├── rbac.yaml │ │ ├── service.yaml │ │ ├── serviceaccount.yaml │ │ ├── servicemonitor.yaml │ │ ├── startupapicheck-job.yaml │ │ ├── startupapicheck-psp-clusterrole.yaml │ │ ├── startupapicheck-psp-clusterrolebinding.yaml │ │ ├── startupapicheck-psp.yaml │ │ ├── startupapicheck-rbac.yaml │ │ ├── startupapicheck-serviceaccount.yaml │ │ ├── webhook-config.yaml │ │ ├── webhook-deployment.yaml │ │ ├── webhook-mutating-webhook.yaml │ │ ├── webhook-poddisruptionbudget.yaml │ │ ├── webhook-psp-clusterrole.yaml │ │ ├── webhook-psp-clusterrolebinding.yaml │ │ ├── webhook-psp.yaml │ │ ├── webhook-rbac.yaml │ │ ├── webhook-service.yaml │ │ ├── webhook-serviceaccount.yaml │ │ └── webhook-validating-webhook.yaml │ ├── values.schema.json │ └── values.yaml ├── dex.yaml ├── dex │ ├── .helmignore │ ├── Chart.yaml │ ├── LICENSE │ ├── README.md │ ├── ci │ │ ├── config-secret-values.yaml │ │ ├── label-annotations-values.yaml │ │ ├── no-config-secret.yaml │ │ └── test-values.yaml │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── deployment.yaml │ │ ├── hpa.yaml │ │ ├── ingress.yaml │ │ ├── networkpolicy.yaml │ │ ├── poddisruptionbudget.yaml │ │ ├── rbac.yaml │ │ ├── secret.yaml │ │ ├── service.yaml │ │ ├── serviceaccount.yaml │ │ ├── servicemonitor.yaml │ │ └── tests │ │ │ └── no-config-secret.yaml │ └── values.yaml ├── drop-prometheus-rules.yaml ├── fluent-bit.yaml ├── fluent-bit │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── ci │ │ └── ci-values.yaml │ ├── dashboards │ │ └── fluent-bit.json │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── _pod.tpl │ │ ├── clusterrole.yaml │ │ ├── clusterrolebinding.yaml │ │ ├── configmap-dashboards.yaml │ │ ├── configmap-luascripts.yaml │ │ ├── configmap.yaml │ │ ├── daemonset.yaml │ │ ├── deployment.yaml │ │ ├── hpa.yaml │ │ ├── ingress.yaml │ │ ├── networkpolicy.yaml │ │ ├── pdb.yaml │ │ ├── prometheusrule.yaml │ │ ├── psp.yaml │ │ ├── scc.yaml │ │ ├── service.yaml │ │ ├── serviceaccount.yaml │ │ ├── servicemonitor.yaml │ │ ├── tests │ │ │ └── test-connection.yaml │ │ └── vpa.yaml │ └── values.yaml ├── grafana_dashboard_patches.json ├── ingress-nginx-control-plane.yaml ├── ingress-nginx.yaml ├── ingress-nginx │ ├── .helmignore │ ├── Chart.yaml │ ├── OWNERS │ ├── README.md │ ├── README.md.gotmpl │ ├── changelog │ │ ├── helm-chart-2.10.0.md │ │ ├── helm-chart-2.11.0.md │ │ ├── helm-chart-2.11.1.md │ │ ├── helm-chart-2.11.2.md │ │ ├── helm-chart-2.11.3.md │ │ ├── helm-chart-2.12.0.md │ │ ├── helm-chart-2.12.1.md │ │ ├── helm-chart-2.13.0.md │ │ ├── helm-chart-2.14.0.md │ │ ├── helm-chart-2.15.0.md │ │ ├── helm-chart-2.16.0.md │ │ ├── helm-chart-2.9.0.md │ │ ├── helm-chart-2.9.1.md │ │ ├── helm-chart-3.0.0.md │ │ ├── helm-chart-3.10.0.md │ │ ├── helm-chart-3.10.1.md │ │ ├── helm-chart-3.11.0.md │ │ ├── helm-chart-3.11.1.md │ │ ├── helm-chart-3.12.0.md │ │ ├── helm-chart-3.13.0.md │ │ ├── helm-chart-3.14.0.md │ │ ├── helm-chart-3.15.0.md │ │ ├── helm-chart-3.15.1.md │ │ ├── helm-chart-3.16.0.md │ │ ├── helm-chart-3.16.1.md │ │ ├── helm-chart-3.17.0.md │ │ ├── helm-chart-3.18.0.md │ │ ├── helm-chart-3.19.0.md │ │ ├── helm-chart-3.20.0.md │ │ ├── helm-chart-3.20.1.md │ │ ├── helm-chart-3.21.0.md │ │ ├── helm-chart-3.22.0.md │ │ ├── helm-chart-3.23.0.md │ │ ├── helm-chart-3.24.0.md │ │ ├── helm-chart-3.25.0.md │ │ ├── helm-chart-3.26.0.md │ │ ├── helm-chart-3.27.0.md │ │ ├── helm-chart-3.28.0.md │ │ ├── helm-chart-3.29.0.md │ │ ├── helm-chart-3.3.0.md │ │ ├── helm-chart-3.3.1.md │ │ ├── helm-chart-3.30.0.md │ │ ├── helm-chart-3.31.0.md │ │ ├── helm-chart-3.32.0.md │ │ ├── helm-chart-3.33.0.md │ │ ├── helm-chart-3.34.0.md │ │ ├── helm-chart-3.4.0.md │ │ ├── helm-chart-3.5.0.md │ │ ├── helm-chart-3.5.1.md │ │ ├── helm-chart-3.6.0.md │ │ ├── helm-chart-3.7.0.md │ │ ├── helm-chart-3.7.1.md │ │ ├── helm-chart-3.8.0.md │ │ ├── helm-chart-3.9.0.md │ │ ├── helm-chart-4.0.1.md │ │ ├── helm-chart-4.0.10.md │ │ ├── helm-chart-4.0.11.md │ │ ├── helm-chart-4.0.12.md │ │ ├── helm-chart-4.0.13.md │ │ ├── helm-chart-4.0.14.md │ │ ├── helm-chart-4.0.15.md │ │ ├── helm-chart-4.0.18.md │ │ ├── helm-chart-4.0.2.md │ │ ├── helm-chart-4.0.3.md │ │ ├── helm-chart-4.0.5.md │ │ ├── helm-chart-4.0.6.md │ │ ├── helm-chart-4.0.7.md │ │ ├── helm-chart-4.0.9.md │ │ ├── helm-chart-4.1.0.md │ │ ├── helm-chart-4.1.2.md │ │ ├── helm-chart-4.10.0.md │ │ ├── helm-chart-4.10.1.md │ │ ├── helm-chart-4.10.2.md │ │ ├── helm-chart-4.10.3.md │ │ ├── helm-chart-4.10.4.md │ │ ├── helm-chart-4.11.0.md │ │ ├── helm-chart-4.11.1.md │ │ ├── helm-chart-4.11.2.md │ │ ├── helm-chart-4.12.0-beta.0.md │ │ ├── helm-chart-4.12.0.md │ │ ├── helm-chart-4.12.1.md │ │ ├── helm-chart-4.2.0.md │ │ ├── helm-chart-4.2.1.md │ │ ├── helm-chart-4.3.0.md │ │ ├── helm-chart-4.4.0.md │ │ ├── helm-chart-4.5.2.md │ │ ├── helm-chart-4.6.0.md │ │ ├── helm-chart-4.6.1.md │ │ ├── helm-chart-4.7.0.md │ │ ├── helm-chart-4.7.1.md │ │ ├── helm-chart-4.7.2.md │ │ ├── helm-chart-4.8.0-beta.0.md │ │ ├── helm-chart-4.8.0.md │ │ ├── helm-chart-4.8.1.md │ │ ├── helm-chart-4.8.2.md │ │ ├── helm-chart-4.8.3.md │ │ ├── helm-chart-4.9.0.md │ │ ├── helm-chart-4.9.1.md │ │ └── helm-chart.md.gotmpl │ ├── ci │ │ ├── admission-webhooks-cert-manager-values.yaml │ │ ├── controller-configmap-addheaders-values.yaml │ │ ├── controller-configmap-proxyheaders-values.yaml │ │ ├── controller-configmap-values.yaml │ │ ├── controller-daemonset-metrics-values.yaml │ │ ├── controller-daemonset-podannotations-values.yaml │ │ ├── controller-daemonset-values.yaml │ │ ├── controller-deployment-metrics-values.yaml │ │ ├── controller-deployment-podannotations-values.yaml │ │ ├── controller-deployment-values.yaml │ │ ├── controller-hpa-values.yaml │ │ ├── controller-ingressclass-values.yaml │ │ ├── controller-service-internal-values.yaml │ │ └── controller-service-values.yaml │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── _params.tpl │ │ ├── admission-webhooks │ │ │ ├── cert-manager.yaml │ │ │ ├── job-patch │ │ │ │ ├── clusterrole.yaml │ │ │ │ ├── clusterrolebinding.yaml │ │ │ │ ├── job-createSecret.yaml │ │ │ │ ├── job-patchWebhook.yaml │ │ │ │ ├── networkpolicy.yaml │ │ │ │ ├── role.yaml │ │ │ │ ├── rolebinding.yaml │ │ │ │ └── serviceaccount.yaml │ │ │ └── validating-webhook.yaml │ │ ├── clusterrole.yaml │ │ ├── clusterrolebinding.yaml │ │ ├── controller-configmap-addheaders.yaml │ │ ├── controller-configmap-proxyheaders.yaml │ │ ├── controller-configmap-tcp.yaml │ │ ├── controller-configmap-udp.yaml │ │ ├── controller-configmap.yaml │ │ ├── controller-daemonset.yaml │ │ ├── controller-deployment.yaml │ │ ├── controller-hpa.yaml │ │ ├── controller-ingressclass-aliases.yaml │ │ ├── controller-ingressclass.yaml │ │ ├── controller-keda.yaml │ │ ├── controller-networkpolicy.yaml │ │ ├── controller-poddisruptionbudget.yaml │ │ ├── controller-prometheusrule.yaml │ │ ├── controller-role.yaml │ │ ├── controller-rolebinding.yaml │ │ ├── controller-secret.yaml │ │ ├── controller-service-internal.yaml │ │ ├── controller-service-metrics.yaml │ │ ├── controller-service-webhook.yaml │ │ ├── controller-service.yaml │ │ ├── controller-serviceaccount.yaml │ │ ├── controller-servicemonitor.yaml │ │ ├── default-backend-deployment.yaml │ │ ├── default-backend-extra-configmaps.yaml │ │ ├── default-backend-hpa.yaml │ │ ├── default-backend-networkpolicy.yaml │ │ ├── default-backend-poddisruptionbudget.yaml │ │ ├── default-backend-service.yaml │ │ └── default-backend-serviceaccount.yaml │ ├── tests │ │ ├── admission-webhooks │ │ │ ├── job-patch │ │ │ │ ├── clusterrole_test.yaml │ │ │ │ ├── clusterrolebinding_test.yaml │ │ │ │ ├── role_test.yaml │ │ │ │ ├── rolebinding_test.yaml │ │ │ │ └── serviceaccount_test.yaml │ │ │ └── validating-webhook_test.yaml │ │ ├── controller-configmap-addheaders_test.yaml │ │ ├── controller-configmap-proxyheaders_test.yaml │ │ ├── controller-configmap_test.yaml │ │ ├── controller-daemonset_test.yaml │ │ ├── controller-deployment_test.yaml │ │ ├── controller-hpa_test.yaml │ │ ├── controller-ingressclass-aliases_test.yaml │ │ ├── controller-ingressclass_test.yaml │ │ ├── controller-keda_test.yaml │ │ ├── controller-networkpolicy_test.yaml │ │ ├── controller-poddisruptionbudget_test.yaml │ │ ├── controller-prometheusrule_test.yaml │ │ ├── controller-service-internal_test.yaml │ │ ├── controller-service-metrics_test.yaml │ │ ├── controller-service-webhook_test.yaml │ │ ├── controller-service_test.yaml │ │ ├── controller-serviceaccount_test.yaml │ │ ├── controller-servicemonitor_test.yaml │ │ ├── default-backend-deployment_test.yaml │ │ ├── default-backend-extra-configmaps_test.yaml │ │ ├── default-backend-poddisruptionbudget_test.yaml │ │ ├── default-backend-service_test.yaml │ │ └── default-backend-serviceaccount_test.yaml │ └── values.yaml ├── kube-prometheus-stack.yaml ├── kube-prometheus-stack │ ├── .editorconfig │ ├── .helmignore │ ├── CONTRIBUTING.md │ ├── Chart.lock │ ├── Chart.yaml │ ├── README.md │ ├── charts │ │ ├── crds │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ └── crds │ │ │ │ ├── crd-alertmanagerconfigs.yaml │ │ │ │ ├── crd-alertmanagers.yaml │ │ │ │ ├── crd-podmonitors.yaml │ │ │ │ ├── crd-probes.yaml │ │ │ │ ├── crd-prometheusagents.yaml │ │ │ │ ├── crd-prometheuses.yaml │ │ │ │ ├── crd-prometheusrules.yaml │ │ │ │ ├── crd-scrapeconfigs.yaml │ │ │ │ ├── crd-servicemonitors.yaml │ │ │ │ └── crd-thanosrulers.yaml │ │ ├── grafana │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ ├── ci │ │ │ │ ├── default-values.yaml │ │ │ │ ├── with-affinity-values.yaml │ │ │ │ ├── with-dashboard-json-values.yaml │ │ │ │ ├── with-dashboard-values.yaml │ │ │ │ ├── with-extraconfigmapmounts-values.yaml │ │ │ │ ├── with-image-renderer-values.yaml │ │ │ │ ├── with-nondefault-values.yaml │ │ │ │ ├── with-persistence.yaml │ │ │ │ └── with-sidecars-envvaluefrom-values.yaml │ │ │ ├── dashboards │ │ │ │ └── custom-dashboard.json │ │ │ ├── templates │ │ │ │ ├── NOTES.txt │ │ │ │ ├── _config.tpl │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── _pod.tpl │ │ │ │ ├── clusterrole.yaml │ │ │ │ ├── clusterrolebinding.yaml │ │ │ │ ├── configSecret.yaml │ │ │ │ ├── configmap-dashboard-provider.yaml │ │ │ │ ├── configmap.yaml │ │ │ │ ├── dashboards-json-configmap.yaml │ │ │ │ ├── deployment.yaml │ │ │ │ ├── extra-manifests.yaml │ │ │ │ ├── headless-service.yaml │ │ │ │ ├── hpa.yaml │ │ │ │ ├── image-renderer-deployment.yaml │ │ │ │ ├── image-renderer-hpa.yaml │ │ │ │ ├── image-renderer-network-policy.yaml │ │ │ │ ├── image-renderer-service.yaml │ │ │ │ ├── image-renderer-servicemonitor.yaml │ │ │ │ ├── ingress.yaml │ │ │ │ ├── networkpolicy.yaml │ │ │ │ ├── poddisruptionbudget.yaml │ │ │ │ ├── podsecuritypolicy.yaml │ │ │ │ ├── pvc.yaml │ │ │ │ ├── role.yaml │ │ │ │ ├── rolebinding.yaml │ │ │ │ ├── secret-env.yaml │ │ │ │ ├── secret.yaml │ │ │ │ ├── service.yaml │ │ │ │ ├── serviceaccount.yaml │ │ │ │ ├── servicemonitor.yaml │ │ │ │ ├── statefulset.yaml │ │ │ │ └── tests │ │ │ │ │ ├── test-configmap.yaml │ │ │ │ │ ├── test-podsecuritypolicy.yaml │ │ │ │ │ ├── test-role.yaml │ │ │ │ │ ├── test-rolebinding.yaml │ │ │ │ │ ├── test-serviceaccount.yaml │ │ │ │ │ └── test.yaml │ │ │ └── values.yaml │ │ ├── kube-state-metrics │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ ├── templates │ │ │ │ ├── NOTES.txt │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── ciliumnetworkpolicy.yaml │ │ │ │ ├── clusterrolebinding.yaml │ │ │ │ ├── crs-configmap.yaml │ │ │ │ ├── deployment.yaml │ │ │ │ ├── extra-manifests.yaml │ │ │ │ ├── kubeconfig-secret.yaml │ │ │ │ ├── networkpolicy.yaml │ │ │ │ ├── pdb.yaml │ │ │ │ ├── podsecuritypolicy.yaml │ │ │ │ ├── psp-clusterrole.yaml │ │ │ │ ├── psp-clusterrolebinding.yaml │ │ │ │ ├── rbac-configmap.yaml │ │ │ │ ├── role.yaml │ │ │ │ ├── rolebinding.yaml │ │ │ │ ├── service.yaml │ │ │ │ ├── serviceaccount.yaml │ │ │ │ ├── servicemonitor.yaml │ │ │ │ ├── stsdiscovery-role.yaml │ │ │ │ ├── stsdiscovery-rolebinding.yaml │ │ │ │ └── verticalpodautoscaler.yaml │ │ │ └── values.yaml │ │ ├── prometheus-node-exporter │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ ├── ci │ │ │ │ ├── common-labels-values.yaml │ │ │ │ ├── default-values.yaml │ │ │ │ ├── networkpolicy-values.yaml │ │ │ │ ├── pod-labels-values.yaml │ │ │ │ ├── port-values.yaml │ │ │ │ ├── service-labels-values.yaml │ │ │ │ └── serviceport-values.yaml │ │ │ ├── templates │ │ │ │ ├── NOTES.txt │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── clusterrole.yaml │ │ │ │ ├── clusterrolebinding.yaml │ │ │ │ ├── daemonset.yaml │ │ │ │ ├── endpoints.yaml │ │ │ │ ├── extra-manifests.yaml │ │ │ │ ├── networkpolicy.yaml │ │ │ │ ├── podmonitor.yaml │ │ │ │ ├── psp-clusterrole.yaml │ │ │ │ ├── psp-clusterrolebinding.yaml │ │ │ │ ├── psp.yaml │ │ │ │ ├── rbac-configmap.yaml │ │ │ │ ├── service.yaml │ │ │ │ ├── serviceaccount.yaml │ │ │ │ ├── servicemonitor.yaml │ │ │ │ └── verticalpodautoscaler.yaml │ │ │ └── values.yaml │ │ └── prometheus-windows-exporter │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ ├── templates │ │ │ ├── _helpers.tpl │ │ │ ├── config.yaml │ │ │ ├── daemonset.yaml │ │ │ ├── podmonitor.yaml │ │ │ ├── service.yaml │ │ │ ├── serviceaccount.yaml │ │ │ └── servicemonitor.yaml │ │ │ └── values.yaml │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── alertmanager │ │ │ ├── alertmanager.yaml │ │ │ ├── extrasecret.yaml │ │ │ ├── ingress.yaml │ │ │ ├── ingressperreplica.yaml │ │ │ ├── podDisruptionBudget.yaml │ │ │ ├── psp-role.yaml │ │ │ ├── psp-rolebinding.yaml │ │ │ ├── psp.yaml │ │ │ ├── secret.yaml │ │ │ ├── service.yaml │ │ │ ├── serviceaccount.yaml │ │ │ ├── servicemonitor.yaml │ │ │ └── serviceperreplica.yaml │ │ ├── exporters │ │ │ ├── core-dns │ │ │ │ ├── service.yaml │ │ │ │ └── servicemonitor.yaml │ │ │ ├── kube-api-server │ │ │ │ └── servicemonitor.yaml │ │ │ ├── kube-controller-manager │ │ │ │ ├── endpoints.yaml │ │ │ │ ├── service.yaml │ │ │ │ └── servicemonitor.yaml │ │ │ ├── kube-dns │ │ │ │ ├── service.yaml │ │ │ │ └── servicemonitor.yaml │ │ │ ├── kube-etcd │ │ │ │ ├── endpoints.yaml │ │ │ │ ├── service.yaml │ │ │ │ └── servicemonitor.yaml │ │ │ ├── kube-proxy │ │ │ │ ├── endpoints.yaml │ │ │ │ ├── service.yaml │ │ │ │ └── servicemonitor.yaml │ │ │ ├── kube-scheduler │ │ │ │ ├── endpoints.yaml │ │ │ │ ├── service.yaml │ │ │ │ └── servicemonitor.yaml │ │ │ └── kubelet │ │ │ │ └── servicemonitor.yaml │ │ ├── extra-objects.yaml │ │ ├── grafana │ │ │ ├── configmap-dashboards.yaml │ │ │ ├── configmaps-datasources.yaml │ │ │ └── dashboards-1.14 │ │ │ │ ├── alertmanager-overview.yaml │ │ │ │ ├── apiserver.yaml │ │ │ │ ├── cluster-total.yaml │ │ │ │ ├── controller-manager.yaml │ │ │ │ ├── etcd.yaml │ │ │ │ ├── grafana-overview.yaml │ │ │ │ ├── k8s-coredns.yaml │ │ │ │ ├── k8s-resources-cluster.yaml │ │ │ │ ├── k8s-resources-multicluster.yaml │ │ │ │ ├── k8s-resources-namespace.yaml │ │ │ │ ├── k8s-resources-node.yaml │ │ │ │ ├── k8s-resources-pod.yaml │ │ │ │ ├── k8s-resources-windows-cluster.yaml │ │ │ │ ├── k8s-resources-windows-namespace.yaml │ │ │ │ ├── k8s-resources-windows-pod.yaml │ │ │ │ ├── k8s-resources-workload.yaml │ │ │ │ ├── k8s-resources-workloads-namespace.yaml │ │ │ │ ├── k8s-windows-cluster-rsrc-use.yaml │ │ │ │ ├── k8s-windows-node-rsrc-use.yaml │ │ │ │ ├── kubelet.yaml │ │ │ │ ├── namespace-by-pod.yaml │ │ │ │ ├── namespace-by-workload.yaml │ │ │ │ ├── node-cluster-rsrc-use.yaml │ │ │ │ ├── node-rsrc-use.yaml │ │ │ │ ├── nodes-aix.yaml │ │ │ │ ├── nodes-darwin.yaml │ │ │ │ ├── nodes.yaml │ │ │ │ ├── persistentvolumesusage.yaml │ │ │ │ ├── pod-total.yaml │ │ │ │ ├── prometheus-remote-write.yaml │ │ │ │ ├── prometheus.yaml │ │ │ │ ├── proxy.yaml │ │ │ │ ├── scheduler.yaml │ │ │ │ └── workload-total.yaml │ │ ├── prometheus-operator │ │ │ ├── _prometheus-operator.tpl │ │ │ ├── admission-webhooks │ │ │ │ ├── _prometheus-operator-webhook.tpl │ │ │ │ ├── deployment │ │ │ │ │ ├── deployment.yaml │ │ │ │ │ ├── pdb.yaml │ │ │ │ │ ├── service.yaml │ │ │ │ │ └── serviceaccount.yaml │ │ │ │ ├── job-patch │ │ │ │ │ ├── ciliumnetworkpolicy-createSecret.yaml │ │ │ │ │ ├── ciliumnetworkpolicy-patchWebhook.yaml │ │ │ │ │ ├── clusterrole.yaml │ │ │ │ │ ├── clusterrolebinding.yaml │ │ │ │ │ ├── job-createSecret.yaml │ │ │ │ │ ├── job-patchWebhook.yaml │ │ │ │ │ ├── networkpolicy-createSecret.yaml │ │ │ │ │ ├── networkpolicy-patchWebhook.yaml │ │ │ │ │ ├── psp.yaml │ │ │ │ │ ├── role.yaml │ │ │ │ │ ├── rolebinding.yaml │ │ │ │ │ └── serviceaccount.yaml │ │ │ │ ├── mutatingWebhookConfiguration.yaml │ │ │ │ └── validatingWebhookConfiguration.yaml │ │ │ ├── aggregate-clusterroles.yaml │ │ │ ├── certmanager.yaml │ │ │ ├── ciliumnetworkpolicy.yaml │ │ │ ├── clusterrole.yaml │ │ │ ├── clusterrolebinding.yaml │ │ │ ├── deployment.yaml │ │ │ ├── networkpolicy.yaml │ │ │ ├── psp-clusterrole.yaml │ │ │ ├── psp-clusterrolebinding.yaml │ │ │ ├── psp.yaml │ │ │ ├── service.yaml │ │ │ ├── serviceaccount.yaml │ │ │ ├── servicemonitor.yaml │ │ │ └── verticalpodautoscaler.yaml │ │ ├── prometheus │ │ │ ├── _rules.tpl │ │ │ ├── additionalAlertRelabelConfigs.yaml │ │ │ ├── additionalAlertmanagerConfigs.yaml │ │ │ ├── additionalPrometheusRules.yaml │ │ │ ├── additionalScrapeConfigs.yaml │ │ │ ├── ciliumnetworkpolicy.yaml │ │ │ ├── clusterrole.yaml │ │ │ ├── clusterrolebinding.yaml │ │ │ ├── csi-secret.yaml │ │ │ ├── extrasecret.yaml │ │ │ ├── ingress.yaml │ │ │ ├── ingressThanosSidecar.yaml │ │ │ ├── ingressperreplica.yaml │ │ │ ├── networkpolicy.yaml │ │ │ ├── podDisruptionBudget.yaml │ │ │ ├── podmonitors.yaml │ │ │ ├── prometheus.yaml │ │ │ ├── psp-clusterrole.yaml │ │ │ ├── psp-clusterrolebinding.yaml │ │ │ ├── psp.yaml │ │ │ ├── rules-1.14 │ │ │ │ ├── alertmanager.rules.yaml │ │ │ │ ├── config-reloaders.yaml │ │ │ │ ├── etcd.yaml │ │ │ │ ├── general.rules.yaml │ │ │ │ ├── k8s.rules.container_cpu_limits.yaml │ │ │ │ ├── k8s.rules.container_cpu_requests.yaml │ │ │ │ ├── k8s.rules.container_cpu_usage_seconds_total.yaml │ │ │ │ ├── k8s.rules.container_memory_cache.yaml │ │ │ │ ├── k8s.rules.container_memory_limits.yaml │ │ │ │ ├── k8s.rules.container_memory_requests.yaml │ │ │ │ ├── k8s.rules.container_memory_rss.yaml │ │ │ │ ├── k8s.rules.container_memory_swap.yaml │ │ │ │ ├── k8s.rules.container_memory_working_set_bytes.yaml │ │ │ │ ├── k8s.rules.container_resource.yaml │ │ │ │ ├── k8s.rules.pod_owner.yaml │ │ │ │ ├── kube-apiserver-availability.rules.yaml │ │ │ │ ├── kube-apiserver-burnrate.rules.yaml │ │ │ │ ├── kube-apiserver-histogram.rules.yaml │ │ │ │ ├── kube-apiserver-slos.yaml │ │ │ │ ├── kube-prometheus-general.rules.yaml │ │ │ │ ├── kube-prometheus-node-recording.rules.yaml │ │ │ │ ├── kube-scheduler.rules.yaml │ │ │ │ ├── kube-state-metrics.yaml │ │ │ │ ├── kubelet.rules.yaml │ │ │ │ ├── kubernetes-apps.yaml │ │ │ │ ├── kubernetes-resources.yaml │ │ │ │ ├── kubernetes-storage.yaml │ │ │ │ ├── kubernetes-system-apiserver.yaml │ │ │ │ ├── kubernetes-system-controller-manager.yaml │ │ │ │ ├── kubernetes-system-kube-proxy.yaml │ │ │ │ ├── kubernetes-system-kubelet.yaml │ │ │ │ ├── kubernetes-system-scheduler.yaml │ │ │ │ ├── kubernetes-system.yaml │ │ │ │ ├── node-exporter.rules.yaml │ │ │ │ ├── node-exporter.yaml │ │ │ │ ├── node-network.yaml │ │ │ │ ├── node.rules.yaml │ │ │ │ ├── prometheus-operator.yaml │ │ │ │ ├── prometheus.yaml │ │ │ │ ├── windows.node.rules.yaml │ │ │ │ └── windows.pod.rules.yaml │ │ │ ├── secret.yaml │ │ │ ├── service.yaml │ │ │ ├── serviceThanosSidecar.yaml │ │ │ ├── serviceThanosSidecarExternal.yaml │ │ │ ├── serviceaccount.yaml │ │ │ ├── servicemonitor.yaml │ │ │ ├── servicemonitorThanosSidecar.yaml │ │ │ ├── servicemonitors.yaml │ │ │ └── serviceperreplica.yaml │ │ └── thanos-ruler │ │ │ ├── extrasecret.yaml │ │ │ ├── ingress.yaml │ │ │ ├── podDisruptionBudget.yaml │ │ │ ├── ruler.yaml │ │ │ ├── secret.yaml │ │ │ ├── service.yaml │ │ │ ├── serviceaccount.yaml │ │ │ └── servicemonitor.yaml │ └── values.yaml ├── loki.yaml ├── loki │ ├── .helmignore │ ├── Chart.lock │ ├── Chart.yaml │ ├── Makefile │ ├── README.md │ ├── charts │ │ ├── grafana-agent-operator │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ ├── README.md.gotmpl │ │ │ ├── crds │ │ │ │ ├── monitoring.coreos.com_podmonitors.yaml │ │ │ │ ├── monitoring.coreos.com_probes.yaml │ │ │ │ ├── monitoring.coreos.com_servicemonitors.yaml │ │ │ │ ├── monitoring.grafana.com_grafanaagents.yaml │ │ │ │ ├── monitoring.grafana.com_integrations.yaml │ │ │ │ ├── monitoring.grafana.com_logsinstances.yaml │ │ │ │ ├── monitoring.grafana.com_metricsinstances.yaml │ │ │ │ └── monitoring.grafana.com_podlogs.yaml │ │ │ ├── templates │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── operator-clusterrole.yaml │ │ │ │ ├── operator-clusterrolebinding.yaml │ │ │ │ ├── operator-deployment.yaml │ │ │ │ ├── operator-serviceaccount.yaml │ │ │ │ └── tests │ │ │ │ │ └── test-grafanaagent.yaml │ │ │ └── values.yaml │ │ ├── minio │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ ├── templates │ │ │ │ ├── NOTES.txt │ │ │ │ ├── _helper_create_bucket.txt │ │ │ │ ├── _helper_create_policy.txt │ │ │ │ ├── _helper_create_svcacct.txt │ │ │ │ ├── _helper_create_user.txt │ │ │ │ ├── _helper_custom_command.txt │ │ │ │ ├── _helper_policy.tpl │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── ciliumnetworkpolicy.yaml │ │ │ │ ├── configmap.yaml │ │ │ │ ├── console-ingress.yaml │ │ │ │ ├── console-service.yaml │ │ │ │ ├── deployment.yaml │ │ │ │ ├── ingress.yaml │ │ │ │ ├── networkpolicy.yaml │ │ │ │ ├── poddisruptionbudget.yaml │ │ │ │ ├── post-job.yaml │ │ │ │ ├── pvc.yaml │ │ │ │ ├── secrets.yaml │ │ │ │ ├── securitycontextconstraints.yaml │ │ │ │ ├── service.yaml │ │ │ │ ├── serviceaccount.yaml │ │ │ │ ├── servicemonitor.yaml │ │ │ │ └── statefulset.yaml │ │ │ └── values.yaml │ │ └── rollout-operator │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ ├── README.md.gotmpl │ │ │ ├── templates │ │ │ ├── NOTES.txt │ │ │ ├── _helpers.tpl │ │ │ ├── deployment.yaml │ │ │ ├── role.yaml │ │ │ ├── rolebinding.yaml │ │ │ ├── service.yaml │ │ │ ├── serviceaccount.yaml │ │ │ └── servicemonitor.yaml │ │ │ └── values.yaml │ ├── distributed-values.yaml │ ├── docs │ │ └── examples │ │ │ ├── README.md │ │ │ ├── enterprise │ │ │ ├── README.md │ │ │ ├── enterprise-secrets.yaml │ │ │ └── overrides-enterprise-gcs.yaml │ │ │ └── oss │ │ │ ├── README.md │ │ │ ├── oss-secrets.yaml │ │ │ └── overrides-oss-gcs.yaml │ ├── reference.md.gotmpl │ ├── scenarios │ │ ├── README.md │ │ ├── default-single-binary-values.yaml │ │ ├── default-values.yaml │ │ ├── ingress-values.yaml │ │ ├── legacy-monitoring-values.yaml │ │ ├── simple-scalable-aws-kube-irsa-values.yaml │ │ └── simple-thanos-values.yaml │ ├── simple-scalable-values.yaml │ ├── single-binary-values.yaml │ ├── src │ │ ├── .yamllint.yaml │ │ ├── alerts.yaml.tpl │ │ ├── dashboards │ │ │ ├── loki-chunks.json │ │ │ ├── loki-deletion.json │ │ │ ├── loki-logs.json │ │ │ ├── loki-mixin-recording-rules.json │ │ │ ├── loki-operational.json │ │ │ ├── loki-reads-resources.json │ │ │ ├── loki-reads.json │ │ │ ├── loki-retention.json │ │ │ ├── loki-writes-resources.json │ │ │ └── loki-writes.json │ │ ├── helm-test │ │ │ ├── Dockerfile │ │ │ ├── README.md │ │ │ ├── canary_test.go │ │ │ └── default.nix │ │ └── rules.yaml.tpl │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── admin-api │ │ │ ├── _helpers.yaml │ │ │ ├── deployment-admin-api.yaml │ │ │ └── service-admin-api.yaml │ │ ├── backend │ │ │ ├── _helpers-backend.tpl │ │ │ ├── clusterrole.yaml │ │ │ ├── clusterrolebinding.yaml │ │ │ ├── hpa.yaml │ │ │ ├── poddisruptionbudget-backend.yaml │ │ │ ├── query-scheduler-discovery.yaml │ │ │ ├── service-backend-headless.yaml │ │ │ ├── service-backend.yaml │ │ │ └── statefulset-backend.yaml │ │ ├── bloom-builder │ │ │ ├── _helpers-bloom-builder.tpl │ │ │ ├── deployment-bloom-builder.yaml │ │ │ ├── hpa.yaml │ │ │ ├── poddisruptionbudget-bloom-builder.yaml │ │ │ ├── service-bloom-builder-headless.yaml │ │ │ └── service-bloom-builder.yaml │ │ ├── bloom-gateway │ │ │ ├── _helpers-bloom-gateway.tpl │ │ │ ├── service-bloom-gateway-headless.yaml │ │ │ └── statefulset-bloom-gateway.yaml │ │ ├── bloom-planner │ │ │ ├── _helpers-bloom-planner.tpl │ │ │ ├── service-bloom-planner-headless.yaml │ │ │ └── statefulset-bloom-planner.yaml │ │ ├── chunks-cache │ │ │ ├── poddisruptionbudget-chunks-cache.yaml │ │ │ ├── service-chunks-cache-headless.yaml │ │ │ └── statefulset-chunks-cache.yaml │ │ ├── ciliumnetworkpolicy.yaml │ │ ├── compactor │ │ │ ├── _helpers-compactor.tpl │ │ │ ├── service-compactor.yaml │ │ │ └── statefulset-compactor.yaml │ │ ├── config.yaml │ │ ├── distributor │ │ │ ├── _helpers-distributor.tpl │ │ │ ├── deployment-distributor.yaml │ │ │ ├── hpa.yaml │ │ │ ├── poddisruptionbudget-distributor.yaml │ │ │ ├── service-distributor-headless.yaml │ │ │ └── service-distributor.yaml │ │ ├── extra-manifests.yaml │ │ ├── gateway │ │ │ ├── _helpers-gateway.tpl │ │ │ ├── configmap-gateway.yaml │ │ │ ├── deployment-gateway-enterprise.yaml │ │ │ ├── deployment-gateway-nginx.yaml │ │ │ ├── hpa.yaml │ │ │ ├── ingress-gateway.yaml │ │ │ ├── poddisruptionbudget-gateway.yaml │ │ │ ├── secret-gateway.yaml │ │ │ └── service-gateway.yaml │ │ ├── index-gateway │ │ │ ├── _helpers-index-gateway.tpl │ │ │ ├── poddisruptionbudget-index-gateway.yaml │ │ │ ├── service-index-gateway-headless.yaml │ │ │ ├── service-index-gateway.yaml │ │ │ └── statefulset-index-gateway.yaml │ │ ├── ingester │ │ │ ├── _helpers-ingester.tpl │ │ │ ├── hpa-zone-a.yaml │ │ │ ├── hpa-zone-b.yaml │ │ │ ├── hpa-zone-c.yaml │ │ │ ├── hpa.yaml │ │ │ ├── poddisruptionbudget-ingester-rollout.yaml │ │ │ ├── poddisruptionbudget-ingester.yaml │ │ │ ├── service-ingester-headless.yaml │ │ │ ├── service-ingester-zone-a-headless.yaml │ │ │ ├── service-ingester-zone-b-headless.yaml │ │ │ ├── service-ingester-zone-c-headless.yaml │ │ │ ├── service-ingester.yaml │ │ │ ├── statefulset-ingester-zone-a.yaml │ │ │ ├── statefulset-ingester-zone-b.yaml │ │ │ ├── statefulset-ingester-zone-c.yaml │ │ │ └── statefulset-ingester.yaml │ │ ├── ingress.yaml │ │ ├── loki-canary │ │ │ ├── _helpers.tpl │ │ │ ├── daemonset.yaml │ │ │ ├── service.yaml │ │ │ └── serviceaccount.yaml │ │ ├── memcached │ │ │ ├── _memcached-statefulset.tpl │ │ │ └── _memcached-svc.tpl │ │ ├── monitoring │ │ │ ├── _helpers-monitoring.tpl │ │ │ ├── dashboards │ │ │ │ ├── _helpers-dashboards.tpl │ │ │ │ ├── configmap-1.yaml │ │ │ │ └── configmap-2.yaml │ │ │ ├── grafana-agent.yaml │ │ │ ├── logs-instance.yaml │ │ │ ├── loki-alerts.yaml │ │ │ ├── loki-rules.yaml │ │ │ ├── metrics-instance.yaml │ │ │ ├── pod-logs.yaml │ │ │ └── servicemonitor.yaml │ │ ├── networkpolicy.yaml │ │ ├── overrides-exporter │ │ │ ├── _helpers-overrides-exporter.tpl │ │ │ ├── deployment-overrides-exporter.yaml │ │ │ ├── poddisruptionbudget-overrides-exporter.yaml │ │ │ ├── service-overrides-exporter-headless.yaml │ │ │ └── service-overrides-exporter.yaml │ │ ├── pattern-ingester │ │ │ ├── _helpers-pattern-ingester.tpl │ │ │ └── statefulset-pattern-ingester.yaml │ │ ├── podsecuritypolicy.yaml │ │ ├── provisioner │ │ │ ├── _helpers.yaml │ │ │ ├── job-provisioner.yaml │ │ │ ├── role-provisioner.yaml │ │ │ ├── rolebinding-provisioner.yaml │ │ │ └── serviceaccount-provisioner.yaml │ │ ├── querier │ │ │ ├── _helpers-querier.tpl │ │ │ ├── deployment-querier.yaml │ │ │ ├── hpa.yaml │ │ │ ├── poddisruptionbudget-querier.yaml │ │ │ └── service-querier.yaml │ │ ├── query-frontend │ │ │ ├── _helpers-query-frontend.tpl │ │ │ ├── deployment-query-frontend.yaml │ │ │ ├── hpa.yaml │ │ │ ├── poddisruptionbudget-query-frontend.yaml │ │ │ ├── service-query-frontend-headless.yaml │ │ │ └── service-query-frontend.yaml │ │ ├── query-scheduler │ │ │ ├── _helpers-query-scheduler.tpl │ │ │ ├── deployment-query-scheduler.yaml │ │ │ ├── poddisruptionbudget-query-scheduler.yaml │ │ │ └── service-query-scheduler.yaml │ │ ├── read │ │ │ ├── _helpers-read.tpl │ │ │ ├── deployment-read.yaml │ │ │ ├── hpa.yaml │ │ │ ├── poddisruptionbudget-read.yaml │ │ │ ├── service-read-headless.yaml │ │ │ ├── service-read.yaml │ │ │ └── statefulset-read.yaml │ │ ├── results-cache │ │ │ ├── poddisruptionbudget-results-cache.yaml │ │ │ ├── service-results-cache-headless.yaml │ │ │ └── statefulset-results-cache.yaml │ │ ├── role.yaml │ │ ├── rolebinding.yaml │ │ ├── ruler │ │ │ ├── _helpers-ruler.tpl │ │ │ ├── configmap-ruler.yaml │ │ │ ├── poddisruptionbudget-ruler.yaml │ │ │ ├── service-ruler.yaml │ │ │ └── statefulset-ruler.yaml │ │ ├── runtime-configmap.yaml │ │ ├── secret-license.yaml │ │ ├── securitycontextconstraints.yaml │ │ ├── service-memberlist.yaml │ │ ├── serviceaccount.yaml │ │ ├── single-binary │ │ │ ├── _helpers-single-binary.tpl │ │ │ ├── hpa.yaml │ │ │ ├── pdb.yaml │ │ │ ├── service-headless.yaml │ │ │ ├── service.yaml │ │ │ └── statefulset.yaml │ │ ├── table-manager │ │ │ ├── _helpers-table-manager.tpl │ │ │ ├── deployment-table-manager.yaml │ │ │ ├── service-table-manager.yaml │ │ │ └── servicemonitor-table-manager.yaml │ │ ├── tests │ │ │ ├── _helpers.tpl │ │ │ └── test-canary.yaml │ │ ├── tokengen │ │ │ ├── _helpers.yaml │ │ │ ├── clusterrole-tokengen.yaml │ │ │ ├── clusterrolebinding-tokengen.yaml │ │ │ ├── job-tokengen.yaml │ │ │ └── serviceaccount-tokengen.yaml │ │ ├── validate.yaml │ │ └── write │ │ │ ├── _helpers-write.tpl │ │ │ ├── hpa.yaml │ │ │ ├── poddisruptionbudget-write.yaml │ │ │ ├── service-write-headless.yaml │ │ │ ├── service-write.yaml │ │ │ └── statefulset-write.yaml │ ├── test │ │ └── config_test.go │ └── values.yaml ├── prometheus-adapter.yaml ├── prometheus-adapter │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── ci │ │ ├── default-values.yaml │ │ └── external-rules-values.yaml │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── certmanager.yaml │ │ ├── cluster-role-binding-auth-delegator.yaml │ │ ├── cluster-role-binding-auth-reader.yaml │ │ ├── cluster-role-binding-resource-reader.yaml │ │ ├── cluster-role-resource-reader.yaml │ │ ├── configmap.yaml │ │ ├── custom-metrics-apiservice.yaml │ │ ├── custom-metrics-cluster-role-binding-hpa.yaml │ │ ├── custom-metrics-cluster-role.yaml │ │ ├── deployment.yaml │ │ ├── external-metrics-apiservice.yaml │ │ ├── external-metrics-cluster-role-binding-hpa.yaml │ │ ├── external-metrics-cluster-role.yaml │ │ ├── extra-objects.yaml │ │ ├── pdb.yaml │ │ ├── psp.yaml │ │ ├── resource-metrics-apiservice.yaml │ │ ├── resource-metrics-cluster-role-binding.yaml │ │ ├── resource-metrics-cluster-role.yaml │ │ ├── role-binding-auth-reader.yaml │ │ ├── secret.yaml │ │ ├── service.yaml │ │ └── serviceaccount.yaml │ └── values.yaml ├── render.py ├── thanos.yaml └── thanos │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── requirements.yaml │ ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── bucket-deployment.yaml │ ├── bucket-ingress.yaml │ ├── bucket-poddisruptionbudget.yaml │ ├── bucket-service.yaml │ ├── compact-deployment.yaml │ ├── compact-persistentvolumeclaim.yaml │ ├── compact-service.yaml │ ├── compact-servicemonitor.yaml │ ├── query-deployment.yaml │ ├── query-frontend-deployment.yaml │ ├── query-frontend-horizontalpodautoscaler.yaml │ ├── query-frontend-ingress.yml │ ├── query-frontend-poddisruptionbudget.yaml │ ├── query-frontend-psp.yaml │ ├── query-frontend-rbac.yaml │ ├── query-frontend-service.yaml │ ├── query-frontend-servicemonitor.yaml │ ├── query-horizontalpodautoscaler.yaml │ ├── query-ingress.yml │ ├── query-poddisruptionbudget.yaml │ ├── query-psp.yaml │ ├── query-rbac.yaml │ ├── query-service.yaml │ ├── query-servicemonitor.yaml │ ├── rule-configmap.yaml │ ├── rule-ingress.yml │ ├── rule-service.yaml │ ├── rule-servicemonitor.yaml │ ├── rule-statefulset.yaml │ ├── secret.yaml │ ├── sidecar-ingress.yaml │ ├── sidecar-service.yaml │ ├── sidecar-servicemonitor.yaml │ ├── store-deployment.yaml │ ├── store-ingress.yaml │ ├── store-persistentvolumeclaim.yaml │ ├── store-service.yaml │ └── store-servicemonitor.yaml │ └── values.yaml ├── docs ├── .gitignore ├── Dockerfile ├── Makefile ├── README.md ├── _infos │ └── volumes.yaml ├── _jinja │ └── alerting │ │ ├── alert-tree.rst.j2 │ │ ├── composite-rulelist.rst.j2 │ │ └── simple-rulelist.rst.j2 ├── _lib │ └── metalk8s_sphinxext_googleanalytics.py ├── _static │ └── theme-overrides.css ├── build.cmd ├── conf.py ├── developer │ ├── architecture │ │ ├── alert-grouping.rst │ │ ├── alert-history.rst │ │ ├── alerting.rst │ │ ├── authentication.rst │ │ ├── centralized-cli.rst │ │ ├── ci.rst │ │ ├── configurations.rst │ │ ├── control-plane-ingress.rst │ │ ├── deployment.rst │ │ ├── diagrams │ │ │ ├── alert-history_containers.uml │ │ │ ├── deployment.uml │ │ │ ├── logs-components-diagram.uml │ │ │ ├── solutions-interaction.uml │ │ │ ├── volume-creation_seqdiag.uml │ │ │ ├── volume-deletion_decision_tree.uml │ │ │ ├── volume-deletion_seqdiag.uml │ │ │ ├── volume-deploy_volume_flowchart.uml │ │ │ ├── volume-finalize_volume_flowchart.uml │ │ │ └── volume-main_loop_flowchart.uml │ │ ├── img │ │ │ ├── GlobalHealthCpnt.png │ │ │ ├── alertes.jpg │ │ │ ├── metalk8s-overview.jpg │ │ │ ├── navdeck.jpg │ │ │ ├── nodes-page-options.jpg │ │ │ ├── nodes-view.jpg │ │ │ ├── overview.jpg │ │ │ ├── useAlertHistoryDesign.png │ │ │ └── volumes-view.jpg │ │ ├── index.rst │ │ ├── interaction-with-k8s-from-salt.rst │ │ ├── logs.rst │ │ ├── metalk8s-ui.rst │ │ ├── models │ │ │ └── alert-history.dsl │ │ ├── monitoring.rst │ │ ├── requirements.rst │ │ ├── shell-ui.rst │ │ ├── solutions.rst │ │ └── volume.rst │ ├── building │ │ ├── building.rst │ │ ├── configuration.rst │ │ ├── features.rst │ │ ├── index.rst │ │ └── requirements.rst │ ├── deploy │ │ ├── index.rst │ │ └── upgrade.rst │ ├── development │ │ ├── best_practices │ │ │ ├── commit.rst │ │ │ ├── index.rst │ │ │ └── python.rst │ │ ├── index.rst │ │ └── testing │ │ │ ├── ci.rst │ │ │ ├── formulas-unit.rst │ │ │ └── index.rst │ ├── index.rst │ ├── running │ │ ├── cluster.rst │ │ ├── index.rst │ │ ├── storage_operator.rst │ │ └── ui.rst │ ├── solutions │ │ ├── archive.rst │ │ ├── deploy.rst │ │ ├── index.rst │ │ ├── introduction.rst │ │ └── operator.rst │ └── tools │ │ ├── index.rst │ │ └── lib-alert-tree │ │ ├── examples │ │ ├── .gitignore │ │ ├── example.py │ │ ├── example_output.png │ │ └── example_rule.yaml │ │ ├── index.rst │ │ ├── install.rst │ │ ├── reference.rst │ │ └── usage.rst ├── entrypoint.sh ├── glossary.rst ├── index.rst ├── installation │ ├── advanced-guide.rst │ ├── bootstrap.rst │ ├── enable_ip_ip.rst │ ├── expansion.rst │ ├── img │ │ ├── bootstrap-remove-taints.png │ │ ├── bootstrap-single-node-arch.png │ │ ├── compact-arch.png │ │ ├── custom-arch.png │ │ ├── extended-arch.png │ │ ├── standard-arch.png │ │ └── ui │ │ │ ├── click-create-node.png │ │ │ ├── click-node-deploy.png │ │ │ ├── click-node-list.png │ │ │ ├── deployment-progress.png │ │ │ ├── login.png │ │ │ ├── monitoring.png │ │ │ └── notification-node-created.png │ ├── index.rst │ ├── introduction.rst │ ├── post-install.rst │ ├── services.rst │ ├── setup.rst │ └── troubleshooting │ │ ├── bootstrap_installation_errors.rst │ │ ├── index.rst │ │ └── pod_and_service_CIDR_conflicts.rst ├── introduction.rst ├── make.bat ├── operation │ ├── account_administration │ │ ├── index.rst │ │ ├── user_authentication_and_identity_management.rst │ │ └── user_authorization.rst │ ├── changing_control_plane_ingress_ip.rst │ ├── changing_node_hostname.rst │ ├── cluster_and_service_configuration.rst │ ├── cluster_monitoring │ │ ├── alerting.rst │ │ ├── index.rst │ │ ├── monitoring_stack.rst │ │ └── prometheus.rst │ ├── disaster_recovery │ │ ├── bootstrap_backup_restore.rst │ │ └── index.rst │ ├── downgrade.rst │ ├── index.rst │ ├── listening_processes.rst │ ├── metalk8s-utils.rst │ ├── registry_ha.rst │ ├── solutions.rst │ ├── sosreport.rst │ ├── troubleshooting │ │ ├── account_administration_errors.rst │ │ ├── general_kubernetes_resource_errors.rst │ │ └── index.rst │ ├── upgrade.rst │ ├── volume_management │ │ ├── img │ │ │ ├── node_list.png │ │ │ ├── volume_creation.png │ │ │ ├── volume_delete_confirmation.png │ │ │ ├── volume_list.png │ │ │ ├── volume_overview_delete.png │ │ │ └── volume_tab.png │ │ ├── index.rst │ │ ├── storageclass_creation.rst │ │ ├── volume_creation_deletion_cli.rst │ │ └── volume_creation_deletion_gui.rst │ └── workload_plane_ingress_vips.rst ├── requirements.in ├── requirements.txt ├── spelling-wordlist.txt ├── toctree.rst.j2 └── troubleshooting-get-support.rst ├── doit.cfg ├── doit.sh ├── examples ├── block-device-volumes.yaml ├── loki-sparse.yaml ├── lvm-lv-volumes.yaml ├── new-node.yaml ├── new-node_vagrant.yaml └── prometheus-sparse.yaml ├── go └── solution-operator-lib │ ├── go.mod │ ├── go.sum │ └── pkg │ └── config │ ├── config.go │ ├── config_test.go │ ├── errors.go │ └── testdata │ ├── error-bad-format.txt │ ├── invalid-bad-version.yaml │ ├── invalid-empty-version.yaml │ ├── invalid-no-apiversion.yaml │ ├── invalid-no-kind.yaml │ ├── invalid-no-repository.yaml │ ├── invalid-repository-bad-image.yaml │ ├── invalid-repository-no-endpoint.yaml │ ├── invalid-wrong-apiversion.yaml │ ├── invalid-wrong-kind.yaml │ ├── metalk8s-config.yaml │ └── online-config.yaml ├── images ├── metalk8s-alert-logger │ ├── Dockerfile │ ├── go.mod │ └── main.go ├── metalk8s-keepalived │ ├── Dockerfile │ ├── README.md │ ├── check-get.sh │ ├── entrypoint.sh │ ├── generate-config.py │ ├── keepalived.conf.j2 │ └── liveness-probe.sh ├── metalk8s-ui │ ├── Dockerfile │ └── conf │ │ └── nginx.conf ├── metalk8s-utils │ └── Dockerfile └── salt-master │ ├── Dockerfile │ └── README.md ├── operator ├── .dockerignore ├── .gitignore ├── .golangci.yml ├── Dockerfile ├── Makefile ├── PROJECT ├── README.md ├── api │ └── v1alpha1 │ │ ├── clusterconfig_types.go │ │ ├── clusterconfig_types_test.go │ │ ├── conditions.go │ │ ├── conditions_test.go │ │ ├── groupversion_info.go │ │ ├── v1alpha1_suite_test.go │ │ ├── virtualippool_types.go │ │ ├── virtualippool_types_test.go │ │ └── zz_generated.deepcopy.go ├── cmd │ └── main.go ├── config │ ├── crd │ │ ├── bases │ │ │ ├── metalk8s.scality.com_clusterconfigs.yaml │ │ │ └── metalk8s.scality.com_virtualippools.yaml │ │ ├── kustomization.yaml │ │ ├── kustomizeconfig.yaml │ │ └── patches │ │ │ ├── cainjection_in_clusterconfigs.yaml │ │ │ ├── cainjection_in_virtualippools.yaml │ │ │ ├── webhook_in_clusterconfigs.yaml │ │ │ └── webhook_in_virtualippools.yaml │ ├── default │ │ ├── kustomization.yaml │ │ ├── manager_metrics_patch.yaml │ │ ├── manager_webhook_patch.yaml │ │ ├── metrics_service.yaml │ │ └── webhookcainjection_patch.yaml │ ├── manager │ │ ├── kustomization.yaml │ │ └── manager.yaml │ ├── manifests │ │ └── kustomization.yaml │ ├── metalk8s │ │ ├── delete_ns.yaml │ │ ├── deploy_patch.yaml │ │ └── kustomization.yaml │ ├── prometheus │ │ ├── kustomization.yaml │ │ └── monitor.yaml │ ├── rbac │ │ ├── clusterconfig_editor_role.yaml │ │ ├── clusterconfig_viewer_role.yaml │ │ ├── kustomization.yaml │ │ ├── leader_election_role.yaml │ │ ├── leader_election_role_binding.yaml │ │ ├── metrics_auth_role.yaml │ │ ├── metrics_auth_role_binding.yaml │ │ ├── metrics_reader_role.yaml │ │ ├── role.yaml │ │ ├── role_binding.yaml │ │ ├── service_account.yaml │ │ ├── virtualippool_editor_role.yaml │ │ └── virtualippool_viewer_role.yaml │ ├── samples │ │ ├── _v1alpha1_clusterconfig.yaml │ │ ├── _v1alpha1_virtualippool.yaml │ │ └── kustomization.yaml │ └── scorecard │ │ ├── bases │ │ └── config.yaml │ │ ├── kustomization.yaml │ │ └── patches │ │ ├── basic.config.yaml │ │ └── olm.config.yaml ├── deploy │ └── manifests.yaml ├── go.mod ├── go.sum ├── hack │ └── boilerplate.go.txt ├── internal │ └── controller │ │ ├── clusterconfig_controller.go │ │ ├── suite_test.go │ │ └── virtualippool_controller.go ├── pkg │ └── controller │ │ ├── clusterconfig │ │ ├── controller.go │ │ ├── controlplane │ │ │ └── ingress.go │ │ └── workloadplane │ │ │ └── virtualippool.go │ │ ├── utils │ │ ├── image.go │ │ ├── image_test.go │ │ ├── object.go │ │ ├── object_test.go │ │ ├── reconcile.go │ │ ├── reconcile_test.go │ │ └── utils_suite_test.go │ │ └── virtualippool │ │ ├── controller.go │ │ └── hl_config.go └── version │ └── version.go ├── packages ├── common │ └── metalk8s-sosreport │ │ ├── .pylintrc │ │ ├── metalk8s.py │ │ └── metalk8s_containerd.py └── redhat │ ├── 8 │ └── Dockerfile │ └── common │ ├── 0001-Revert-commit-for-Windows-metrics.patch │ ├── containerd.service │ ├── containerd.spec │ ├── containerd.toml │ ├── entrypoint.sh │ ├── metalk8s-sosreport.spec │ ├── rpmlintrc │ └── yum_repositories │ ├── kubernetes.repo │ └── saltstack.repo ├── pillar ├── metalk8s │ └── roles │ │ ├── bootstrap.sls │ │ ├── ca.sls │ │ ├── etcd.sls │ │ ├── master.sls │ │ ├── minion.sls │ │ └── node.sls └── top.sls.in ├── salt ├── .pylintrc ├── _auth │ └── kubernetes_rbac.py ├── _beacons │ └── metalk8s_kubeconfig_info.py ├── _modules │ ├── containerd.py │ ├── cri.py │ ├── metalk8s.py │ ├── metalk8s_checks.py │ ├── metalk8s_cordon.py │ ├── metalk8s_drain.py │ ├── metalk8s_etcd.py │ ├── metalk8s_grafana.py │ ├── metalk8s_kubeconfig.py │ ├── metalk8s_kubernetes.py │ ├── metalk8s_kubernetes_cronjob.py │ ├── metalk8s_kubernetes_utils.py │ ├── metalk8s_monitoring.py │ ├── metalk8s_network.py │ ├── metalk8s_os.py │ ├── metalk8s_package_manager_yum.py │ ├── metalk8s_service_configuration.py │ ├── metalk8s_solutions.py │ ├── metalk8s_solutions_k8s.py │ ├── metalk8s_sysctl.py │ └── metalk8s_volumes.py ├── _pillar │ ├── metalk8s.py │ ├── metalk8s_endpoints.py │ ├── metalk8s_etcd.py │ ├── metalk8s_nodes.py │ ├── metalk8s_private.py │ └── metalk8s_solutions.py ├── _renderers │ └── metalk8s_kubernetes.py ├── _roster │ └── kubernetes_nodes.py ├── _runners │ ├── metalk8s_checks.py │ └── metalk8s_saltutil.py ├── _states │ ├── containerd.py │ ├── kubeconfig.py │ ├── metalk8s.py │ ├── metalk8s_checks.py │ ├── metalk8s_cordon.py │ ├── metalk8s_drain.py │ ├── metalk8s_etcd.py │ ├── metalk8s_kubernetes.py │ ├── metalk8s_package_manager.py │ ├── metalk8s_sysctl.py │ └── metalk8s_volumes.py ├── _utils │ ├── metalk8s_kubernetes.py │ ├── metalk8s_utils.py │ ├── pillar_utils.py │ └── volume_utils.py ├── metalk8s │ ├── addons │ │ ├── alert-logger │ │ │ └── deployed │ │ │ │ ├── deployment.sls │ │ │ │ ├── init.sls │ │ │ │ └── service.sls │ │ ├── alert-tree │ │ │ └── deployed.sls │ │ ├── cert-manager │ │ │ └── deployed │ │ │ │ ├── chart.sls │ │ │ │ ├── init.sls │ │ │ │ └── namespace.sls │ │ ├── dex │ │ │ ├── ca │ │ │ │ ├── advertised.sls │ │ │ │ ├── init.sls │ │ │ │ └── installed.sls │ │ │ ├── certs │ │ │ │ ├── init.sls │ │ │ │ └── server.sls │ │ │ ├── config │ │ │ │ └── dex.yaml.j2 │ │ │ └── deployed │ │ │ │ ├── chart.sls │ │ │ │ ├── clusterrolebinding.sls │ │ │ │ ├── init.sls │ │ │ │ ├── namespace.sls │ │ │ │ ├── nginx-ingress-ca-cert-configmap.sls │ │ │ │ ├── secret.sls │ │ │ │ ├── service-configuration.sls │ │ │ │ └── tls-secret.sls │ │ ├── logging │ │ │ ├── deployed │ │ │ │ ├── init.sls │ │ │ │ └── namespace.sls │ │ │ ├── fluent-bit │ │ │ │ ├── config │ │ │ │ │ └── fluent-bit.yaml.j2 │ │ │ │ └── deployed │ │ │ │ │ ├── chart.sls │ │ │ │ │ ├── configmap.sls │ │ │ │ │ ├── init.sls │ │ │ │ │ └── service-configuration.sls │ │ │ └── loki │ │ │ │ ├── config │ │ │ │ └── loki.yaml │ │ │ │ └── deployed │ │ │ │ ├── chart.sls │ │ │ │ ├── dashboards.sls │ │ │ │ ├── datasource.sls │ │ │ │ ├── files │ │ │ │ ├── logs.json │ │ │ │ └── loki.json │ │ │ │ ├── init.sls │ │ │ │ ├── loki-configuration-secret.sls │ │ │ │ ├── macro.j2 │ │ │ │ ├── service-configuration.sls │ │ │ │ ├── service.sls │ │ │ │ └── workaround-job-dep.sls │ │ ├── metalk8s-operator │ │ │ └── deployed │ │ │ │ ├── init.sls │ │ │ │ └── manifests.sls.in │ │ ├── nginx-ingress-control-plane │ │ │ ├── certs │ │ │ │ ├── init.sls │ │ │ │ └── server.sls │ │ │ ├── config │ │ │ │ └── ingress-controller.yaml.j2 │ │ │ └── deployed │ │ │ │ ├── chart.sls │ │ │ │ ├── config-map.sls │ │ │ │ ├── init.sls │ │ │ │ ├── service-configuration.sls │ │ │ │ └── tls-secret.sls │ │ ├── nginx-ingress │ │ │ ├── ca │ │ │ │ ├── advertised.sls │ │ │ │ ├── init.sls │ │ │ │ └── installed.sls │ │ │ ├── certs │ │ │ │ ├── init.sls │ │ │ │ └── server.sls │ │ │ ├── config │ │ │ │ └── ingress-controller.yaml.j2 │ │ │ └── deployed │ │ │ │ ├── chart.sls │ │ │ │ ├── config-map.sls │ │ │ │ ├── dashboards.sls │ │ │ │ ├── files │ │ │ │ ├── ingress-nginx-performance.json │ │ │ │ └── ingress-nginx.json │ │ │ │ ├── init.sls │ │ │ │ ├── namespace.sls │ │ │ │ ├── service-configuration.sls │ │ │ │ └── tls-secret.sls │ │ ├── prometheus-adapter │ │ │ └── deployed │ │ │ │ ├── chart.sls │ │ │ │ └── init.sls │ │ ├── prometheus-operator │ │ │ ├── config │ │ │ │ ├── alertmanager.yaml │ │ │ │ ├── grafana.yaml.j2 │ │ │ │ └── prometheus.yaml │ │ │ ├── deployed │ │ │ │ ├── alertmanager-configuration-secret.sls │ │ │ │ ├── chart.sls │ │ │ │ ├── dashboards.sls │ │ │ │ ├── files │ │ │ │ │ └── node-exporter-full.json │ │ │ │ ├── grafana-ini-configmap.sls │ │ │ │ ├── init.sls │ │ │ │ ├── kube-alerts-rules.sls │ │ │ │ ├── namespace.sls │ │ │ │ ├── node-alerts-rules.sls │ │ │ │ ├── service-configuration.sls │ │ │ │ ├── thanos-chart.sls │ │ │ │ └── thanos-query-sd-files.sls │ │ │ ├── macros.j2 │ │ │ ├── post-cleanup.sls │ │ │ ├── post-downgrade.sls │ │ │ └── post-upgrade.sls │ │ ├── solutions │ │ │ └── deployed │ │ │ │ ├── configmap.sls │ │ │ │ ├── init.sls │ │ │ │ └── namespace.sls │ │ ├── storageclass │ │ │ └── deployed.sls │ │ ├── ui │ │ │ ├── config │ │ │ │ ├── deployed-ui-apps.yaml.j2.in │ │ │ │ ├── metalk8s-shell-ui-config.yaml.j2 │ │ │ │ ├── metalk8s-ui-config.yaml.j2 │ │ │ │ └── workloadplane-shell-ui-config.yaml.j2 │ │ │ ├── deployed │ │ │ │ ├── dependencies.sls │ │ │ │ ├── files │ │ │ │ │ └── metalk8s-ui-deployment.yaml.j2 │ │ │ │ ├── ingress.sls │ │ │ │ ├── init.sls │ │ │ │ ├── namespace.sls │ │ │ │ ├── ui-configuration.sls │ │ │ │ └── ui.sls.in │ │ │ └── post-upgrade.sls │ │ └── volumes │ │ │ └── deployed │ │ │ ├── init.sls │ │ │ └── manifests.sls.in │ ├── archives │ │ ├── configured.sls │ │ ├── init.sls │ │ ├── mounted.sls │ │ └── unmounted.sls │ ├── backup │ │ ├── certs │ │ │ ├── ca.sls │ │ │ └── server.sls │ │ ├── configured.sls │ │ └── deployed │ │ │ ├── configmap-ca-cert.sls │ │ │ ├── configmap-nginx-config.sls │ │ │ ├── deployment.sls │ │ │ ├── init.sls │ │ │ ├── networkpolicy.sls │ │ │ ├── secret-credentials.sls │ │ │ ├── secret-tls.sls │ │ │ └── service.sls │ ├── beacon │ │ └── certificates.sls │ ├── container-engine │ │ ├── containerd │ │ │ ├── files │ │ │ │ └── 50-metalk8s.conf.j2 │ │ │ ├── init.sls │ │ │ ├── installed.sls │ │ │ └── running.sls │ │ ├── init.sls │ │ └── running.sls │ ├── defaults.yaml │ ├── deployed │ │ ├── core.sls │ │ └── init.sls │ ├── internal │ │ ├── bootstrap │ │ │ └── post-upgrade.sls │ │ ├── m2crypto │ │ │ ├── absent.sls │ │ │ ├── init.sls │ │ │ └── installed.sls │ │ └── preflight │ │ │ ├── init.sls │ │ │ ├── mandatory.sls │ │ │ └── recommended.sls │ ├── kubectl │ │ ├── configured.sls │ │ ├── init.sls │ │ └── installed.sls │ ├── kubernetes │ │ ├── admin │ │ │ └── deployed.sls │ │ ├── apiserver-proxy │ │ │ ├── files │ │ │ │ ├── apiserver-proxy.conf.j2 │ │ │ │ └── apiserver-proxy.yaml.j2 │ │ │ ├── init.sls │ │ │ └── installed.sls │ │ ├── apiserver │ │ │ ├── certs │ │ │ │ ├── etcd-client.sls │ │ │ │ ├── front-proxy-client.sls │ │ │ │ ├── init.sls │ │ │ │ ├── kubelet-client.sls │ │ │ │ └── server.sls │ │ │ ├── cryptconfig.sls │ │ │ ├── init.sls │ │ │ ├── installed.sls │ │ │ └── kubeconfig.sls │ │ ├── ca │ │ │ ├── advertised.sls │ │ │ ├── etcd │ │ │ │ ├── advertised.sls │ │ │ │ ├── init.sls │ │ │ │ └── installed.sls │ │ │ ├── front-proxy │ │ │ │ ├── advertised.sls │ │ │ │ ├── init.sls │ │ │ │ └── installed.sls │ │ │ ├── init.sls │ │ │ └── kubernetes │ │ │ │ ├── advertised.sls │ │ │ │ ├── exported.sls │ │ │ │ ├── init.sls │ │ │ │ └── installed.sls │ │ ├── cni │ │ │ └── calico │ │ │ │ └── deployed.sls │ │ ├── controller-manager │ │ │ ├── init.sls │ │ │ ├── installed.sls │ │ │ └── kubeconfig.sls │ │ ├── coredns │ │ │ ├── deployed.sls │ │ │ └── files │ │ │ │ └── coredns-deployment.yaml.j2 │ │ ├── etcd │ │ │ ├── certs │ │ │ │ ├── healthcheck-client.sls │ │ │ │ ├── init.sls │ │ │ │ ├── peer.sls │ │ │ │ └── server.sls │ │ │ ├── files │ │ │ │ └── manifest.yaml.j2 │ │ │ ├── init.sls │ │ │ ├── installed.sls │ │ │ └── prepared.sls │ │ ├── files │ │ │ └── control-plane-manifest.yaml.j2 │ │ ├── kube-proxy │ │ │ └── deployed.sls │ │ ├── kubelet │ │ │ ├── configured.sls │ │ │ ├── files │ │ │ │ ├── kubeadm.env.j2 │ │ │ │ ├── service-standalone-systemd.conf.j2 │ │ │ │ └── service-systemd.conf.j2 │ │ │ ├── init.sls │ │ │ ├── installed.sls │ │ │ ├── running.sls │ │ │ └── standalone.sls │ │ ├── mark-control-plane │ │ │ ├── deployed.sls │ │ │ └── files │ │ │ │ └── bootstrap_node_update.yaml.j2.in │ │ ├── sa │ │ │ ├── advertised.sls │ │ │ ├── init.sls │ │ │ └── installed.sls │ │ └── scheduler │ │ │ ├── init.sls │ │ │ ├── installed.sls │ │ │ └── kubeconfig.sls │ ├── macro.sls │ ├── map.jinja │ ├── node │ │ ├── grains.sls │ │ └── rocky-linux-grains.sls │ ├── orchestrate │ │ ├── apiserver.sls │ │ ├── backup │ │ │ ├── files │ │ │ │ └── job.yaml.j2 │ │ │ └── replication.sls │ │ ├── bootstrap │ │ │ ├── accept-minion.sls │ │ │ ├── init.sls │ │ │ ├── pre-downgrade.sls │ │ │ └── pre-upgrade.sls │ │ ├── certs │ │ │ └── renew.sls │ │ ├── deploy_node.sls │ │ ├── downgrade │ │ │ ├── init.sls │ │ │ ├── post.sls │ │ │ └── pre.sls │ │ ├── etcd.sls │ │ ├── register_etcd.sls │ │ ├── solutions │ │ │ ├── deploy-components.sls │ │ │ ├── files │ │ │ │ └── operator │ │ │ │ │ ├── configmap.yaml.j2 │ │ │ │ │ ├── deployment.yaml.j2 │ │ │ │ │ ├── role_binding.yaml.j2 │ │ │ │ │ └── service_account.yaml.j2 │ │ │ ├── import-components.sls │ │ │ └── prepare-environment.sls │ │ ├── update-control-plane-ingress-ip.sls │ │ └── upgrade │ │ │ ├── init.sls │ │ │ ├── post.sls │ │ │ └── pre.sls │ ├── reactor │ │ └── certs │ │ │ └── renew.sls.in │ ├── repo │ │ ├── configured.sls │ │ ├── deployed.sls │ │ ├── files │ │ │ ├── metalk8s-registry-config.inc.j2 │ │ │ ├── nginx.conf.j2 │ │ │ └── repositories-manifest.yaml.j2 │ │ ├── init.sls │ │ ├── installed.sls │ │ ├── macro.sls │ │ └── redhat.sls │ ├── roles │ │ ├── README.md │ │ ├── bootstrap │ │ │ ├── absent.sls │ │ │ ├── init.sls │ │ │ └── local.sls │ │ ├── ca │ │ │ ├── absent.sls │ │ │ └── init.sls │ │ ├── etcd │ │ │ ├── absent.sls │ │ │ └── init.sls │ │ ├── infra │ │ │ ├── absent.sls │ │ │ └── init.sls │ │ ├── internal │ │ │ └── early-stage-bootstrap.sls │ │ ├── master │ │ │ ├── absent.sls │ │ │ └── init.sls │ │ ├── minion │ │ │ └── init.sls │ │ └── node │ │ │ ├── absent.sls │ │ │ └── init.sls │ ├── salt │ │ ├── master │ │ │ ├── certs │ │ │ │ ├── etcd-client.sls │ │ │ │ ├── init.sls │ │ │ │ └── salt-api.sls │ │ │ ├── configured.sls │ │ │ ├── deployed.sls │ │ │ ├── files │ │ │ │ ├── master-99-metalk8s.conf.j2 │ │ │ │ └── salt-master-manifest.yaml.j2 │ │ │ ├── init.sls │ │ │ ├── installed.sls │ │ │ └── kubeconfig.sls │ │ └── minion │ │ │ ├── configured.sls │ │ │ ├── dependencies.sls │ │ │ ├── files │ │ │ └── minion-99-metalk8s.conf.j2 │ │ │ ├── init.sls │ │ │ ├── installed.sls │ │ │ ├── local.sls │ │ │ └── restart.sls │ ├── service-configuration │ │ └── deployed │ │ │ └── init.sls │ ├── solutions │ │ ├── available.sls │ │ └── init.sls │ ├── sreport │ │ ├── init.sls │ │ └── installed.sls │ ├── utils │ │ ├── httpd-tools │ │ │ ├── init.sls │ │ │ └── installed.sls │ │ └── init.sls │ └── volumes │ │ ├── files │ │ ├── metalk8s-sparse-volume@.service │ │ └── sparse_volume_cleanup.py │ │ ├── init.sls │ │ ├── installed.sls │ │ ├── prepared.sls │ │ └── unprepared.sls ├── tests │ ├── README.md │ ├── __init__.py │ ├── conftest.py │ ├── pytest.ini │ ├── requirements.in │ ├── requirements.txt │ └── unit │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── formulas │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── config.py │ │ ├── config.yaml │ │ ├── conftest.py │ │ ├── data │ │ │ ├── base_grains.yaml │ │ │ ├── base_pillar.yaml │ │ │ └── kubernetes │ │ │ │ └── base.yaml │ │ ├── fixtures │ │ │ ├── __init__.py │ │ │ ├── context.py │ │ │ ├── data.py │ │ │ ├── environment.py │ │ │ ├── kubernetes.py │ │ │ ├── salt.py │ │ │ └── templates.py │ │ ├── paths.py │ │ └── test_formulas.py │ │ ├── log_utils.py │ │ ├── mixins.py │ │ ├── mocks │ │ ├── __init__.py │ │ └── kubernetes.py │ │ ├── modules │ │ ├── files │ │ │ ├── test_cri.yaml │ │ │ ├── test_metalk8s.yaml │ │ │ ├── test_metalk8s_checks.yaml │ │ │ ├── test_metalk8s_drain.yaml │ │ │ ├── test_metalk8s_grafana.yaml │ │ │ ├── test_metalk8s_kubeconfig.yaml │ │ │ ├── test_metalk8s_kubernetes.yaml │ │ │ ├── test_metalk8s_kubernetes_cronjob.yaml │ │ │ ├── test_metalk8s_kubernetes_utils.yaml │ │ │ ├── test_metalk8s_monitoring.yaml │ │ │ ├── test_metalk8s_network.yaml │ │ │ ├── test_metalk8s_os.yaml │ │ │ ├── test_metalk8s_package_manager_yum.yaml │ │ │ ├── test_metalk8s_service_configuration.yaml │ │ │ ├── test_metalk8s_solutions.yaml │ │ │ ├── test_metalk8s_solutions_k8s.yaml │ │ │ ├── test_metalk8s_sysctl.yaml │ │ │ └── test_metalk8s_volumes.yaml │ │ ├── test_containerd.py │ │ ├── test_cri.py │ │ ├── test_metalk8s.py │ │ ├── test_metalk8s_checks.py │ │ ├── test_metalk8s_cordon.py │ │ ├── test_metalk8s_drain.py │ │ ├── test_metalk8s_etcd.py │ │ ├── test_metalk8s_grafana.py │ │ ├── test_metalk8s_kubeconfig.py │ │ ├── test_metalk8s_kubernetes.py │ │ ├── test_metalk8s_kubernetes_cronjob.py │ │ ├── test_metalk8s_kubernetes_utils.py │ │ ├── test_metalk8s_monitoring.py │ │ ├── test_metalk8s_network.py │ │ ├── test_metalk8s_os.py │ │ ├── test_metalk8s_package_manager_yum.py │ │ ├── test_metalk8s_service_configuration.py │ │ ├── test_metalk8s_solutions.py │ │ ├── test_metalk8s_solutions_k8s.py │ │ ├── test_metalk8s_sysctl.py │ │ └── test_metalk8s_volumes.py │ │ ├── runners │ │ ├── files │ │ │ ├── test_metalk8s_checks.yaml │ │ │ └── test_metalk8s_saltutil.yaml │ │ ├── test_metalk8s_saltutil.py │ │ └── test_run_metalk8s_checks.py │ │ └── utils.py └── top.sls.in ├── scripts ├── backup.sh.in ├── bootstrap.sh.in ├── common.sh.in ├── downgrade.sh.in ├── iso-manager.sh ├── restore.sh.in ├── solutions.sh └── upgrade.sh.in ├── shell-ui ├── .dockerignore ├── .gitignore ├── .prettierrc ├── Dockerfile ├── README.md ├── babel.config.js ├── conf │ └── nginx.conf ├── entrypoint.sh ├── index-template.html ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── brand │ │ ├── assets │ │ │ ├── fonts │ │ │ │ └── lato │ │ │ │ │ ├── Lato-Bold.woff │ │ │ │ │ ├── Lato-Bold.woff2 │ │ │ │ │ ├── Lato-Regular.woff │ │ │ │ │ └── Lato-Regular.woff2 │ │ │ ├── logo-dark.svg │ │ │ ├── logo-darkRebrand.svg │ │ │ └── logo-light.svg │ │ └── favicon-metalk8s.svg │ ├── mockServiceWorker.js │ └── shell │ │ ├── config.json │ │ └── deployed-ui-apps.json ├── rspack.config.ts ├── src │ ├── FederatedApp.spec.tsx │ ├── FederatedApp.tsx │ ├── NotificationCenterProvider.tsx │ ├── QueryClientProvider.tsx │ ├── alerts │ │ ├── AlertProvider.tsx │ │ ├── Alerts.spec.tsx │ │ ├── alertContext.ts │ │ ├── alertHooks.test.tsx │ │ ├── alertHooks.ts │ │ ├── index.mdx │ │ ├── index.ts │ │ └── services │ │ │ ├── alertManager.ts │ │ │ ├── alertUtils.ts │ │ │ └── loki.ts │ ├── auth │ │ ├── AuthConfigProvider.tsx │ │ ├── AuthProvider.tsx │ │ ├── FirstTimeLoginProvider.tsx │ │ └── useFirstTimeLogin.spec.tsx │ ├── hooks │ │ └── useShellHooks.ts │ ├── index.css │ ├── index.tsx │ ├── initFederation │ │ ├── ConfigurationProviders.tsx │ │ ├── ShellConfigProvider.tsx │ │ ├── ShellHistoryProvider.tsx │ │ ├── ShellThemeSelectorProvider.tsx │ │ ├── UIListProvider.spec.tsx │ │ └── UIListProvider.tsx │ ├── navbar │ │ ├── InstanceName.spec.tsx │ │ ├── InstanceName.tsx │ │ ├── NavBar.tsx │ │ ├── NavbarConfigProvider.tsx │ │ ├── NavbarUpdaterComponents.tsx │ │ ├── NotificationCenter.spec.tsx │ │ ├── NotificationCenter.tsx │ │ ├── SleepingNotificationBell.tsx │ │ ├── __TESTS__ │ │ │ ├── testMultipleHooks.tsx │ │ │ └── utils.ts │ │ ├── auth │ │ │ ├── logout.ts │ │ │ ├── permissionUtils.spec.ts │ │ │ └── permissionUtils.ts │ │ ├── events.ts │ │ ├── favicon.ts │ │ ├── index.mdx │ │ ├── index.spec.tsx │ │ ├── index.tsx │ │ ├── lang.tsx │ │ ├── library.ts │ │ ├── navbarContext.ts │ │ ├── navbarHooks.ts │ │ └── translations │ │ │ ├── en.json │ │ │ └── fr.json │ ├── platform │ │ ├── library.ts │ │ └── service │ │ │ ├── k8s.spec.tsx │ │ │ └── k8s.ts │ ├── setupTests.ts │ ├── styled.d.ts │ └── useNotificationCenter.ts └── tsconfig.json ├── storage-operator ├── .dockerignore ├── .gitignore ├── .golangci.yml ├── Dockerfile ├── Makefile ├── PROJECT ├── api │ └── v1alpha1 │ │ ├── groupversion_info.go │ │ ├── volume_types.go │ │ ├── volume_types_test.go │ │ └── zz_generated.deepcopy.go ├── cmd │ └── main.go ├── config │ ├── crd │ │ ├── bases │ │ │ └── storage.metalk8s.scality.com_volumes.yaml │ │ ├── kustomization.yaml │ │ ├── kustomizeconfig.yaml │ │ └── patches │ │ │ ├── cainjection_in_volumes.yaml │ │ │ └── webhook_in_volumes.yaml │ ├── default │ │ ├── kustomization.yaml │ │ ├── manager_metrics_patch.yaml │ │ ├── manager_webhook_path.yaml │ │ ├── metrics_service.yaml │ │ └── webhookcainjection_patch.yaml │ ├── manager │ │ ├── kustomization.yaml │ │ └── manager.yaml │ ├── manifests │ │ └── kustomization.yaml │ ├── metalk8s │ │ ├── delete_ns.yaml │ │ ├── deploy_patch.yaml │ │ └── kustomization.yaml │ ├── prometheus │ │ ├── kustomization.yaml │ │ └── monitor.yaml │ ├── rbac │ │ ├── kustomization.yaml │ │ ├── leader_election_role.yaml │ │ ├── leader_election_role_binding.yaml │ │ ├── metrics_auth_role.yaml │ │ ├── metrics_auth_role_binding.yaml │ │ ├── metrics_reader_role.yaml │ │ ├── role.yaml │ │ ├── role_binding.yaml │ │ ├── service_account.yaml │ │ ├── volume_editor_role.yaml │ │ └── volume_viewer_role.yaml │ ├── samples │ │ ├── kustomization.yaml │ │ └── storage_v1alpha1_volume.yaml │ └── scorecard │ │ ├── bases │ │ └── config.yaml │ │ ├── kustomization.yaml │ │ └── patches │ │ ├── basic.config.yaml │ │ └── olm.config.yaml ├── deploy │ └── manifests.yaml ├── go.mod ├── go.sum ├── hack │ └── boilerplate.go.txt ├── internal │ └── controller │ │ ├── slice.go │ │ ├── suite_test.go │ │ ├── volume_controller.go │ │ └── volume_controller_test.go └── salt │ ├── client.go │ ├── client_test.go │ ├── creds.go │ ├── creds_test.go │ ├── job.go │ ├── job_test.go │ ├── token.go │ └── token_test.go ├── tests ├── .gitignore ├── README.md ├── __init__.py ├── conftest.py ├── files │ └── utils.yaml ├── install │ ├── features │ │ └── expansion.feature │ └── steps │ │ ├── files │ │ └── control-plane-node.yaml.tpl │ │ └── test_expansion.py ├── kube_utils.py ├── post │ ├── features │ │ ├── authentication.feature │ │ ├── backup.feature │ │ ├── bootstrap.feature │ │ ├── cert_manager.feature │ │ ├── dns_resolution.feature │ │ ├── ingress.feature │ │ ├── logging.feature │ │ ├── monitoring.feature │ │ ├── network.feature │ │ ├── operator.feature │ │ ├── registry.feature │ │ ├── restore.feature │ │ ├── salt_api.feature │ │ ├── salt_metalk8s_kubernetes_cronjob.feature │ │ ├── salt_metalk8s_monitoring.feature │ │ ├── salt_ssh.feature │ │ ├── sanity.feature │ │ ├── seccomp.feature │ │ ├── service_configuration.feature │ │ ├── solutions.feature │ │ ├── static_pods.feature │ │ ├── ui_alive.feature │ │ ├── versions.feature │ │ └── volume.feature │ └── steps │ │ ├── conftest.py │ │ ├── files │ │ ├── cronjob.yaml │ │ ├── grafana_dashboard_uids.json │ │ ├── logger-pod.yaml │ │ └── static-pod.yaml.tpl │ │ ├── test_authentication.py │ │ ├── test_backup.py │ │ ├── test_bootstrap.py │ │ ├── test_cert_manager.py │ │ ├── test_dns.py │ │ ├── test_ingress.py │ │ ├── test_logging.py │ │ ├── test_monitoring.py │ │ ├── test_network.py │ │ ├── test_operator.py │ │ ├── test_registry.py │ │ ├── test_restore.py │ │ ├── test_salt_api.py │ │ ├── test_salt_metalk8s_kubernetes_cronjob.py │ │ ├── test_salt_metalk8s_monitoring.py │ │ ├── test_salt_ssh.py │ │ ├── test_sanity.py │ │ ├── test_seccomp.py │ │ ├── test_service_configuration.py │ │ ├── test_solutions.py │ │ ├── test_static_pods.py │ │ ├── test_ui.py │ │ ├── test_versions.py │ │ └── test_volume.py ├── requirements.in ├── requirements.txt ├── test-certificates-beacon.sh ├── test-containerd.sh ├── test-kubelet.sh ├── utils.py └── versions.py ├── tools ├── crd-client-generator-js │ ├── .gitignore │ ├── README.md │ ├── babel.config.js │ ├── package-lock.json │ ├── package.json │ ├── sample │ │ ├── GeneratedClient.js │ │ └── GeneratedClient.ts │ ├── src │ │ ├── __TESTS__ │ │ │ ├── .prettierrc │ │ │ ├── expected.v1.multiversion.namespaced.crd.client.ts │ │ │ ├── expected.v1.namespaced.crd.client.ts │ │ │ ├── expected.v1beta1.clustered.crd.client.ts │ │ │ ├── expected.v1beta1.namespaced.crd.client.ts │ │ │ ├── v1.multiversion.namespaced.crd.yaml │ │ │ ├── v1.namespaced.crd.yaml │ │ │ ├── v1beta1.clustered.crd.yaml │ │ │ └── v1beta1.namespaced.crd.yaml │ │ ├── generateClient.spec.ts │ │ ├── generateClient.ts │ │ └── index.ts │ └── tsconfig.json ├── get-kubeadm-manifests │ ├── Dockerfile │ └── README.md ├── lib-alert-tree │ ├── .gitignore │ ├── Dockerfile │ ├── README.rst │ ├── lib_alert_tree │ │ ├── __init__.py │ │ ├── cli.py │ │ ├── kubernetes.py │ │ ├── models.py │ │ └── prometheus.py │ ├── metalk8s │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── network.py │ │ ├── nodes.py │ │ ├── platform │ │ │ ├── __init__.py │ │ │ ├── access.py │ │ │ ├── core.py │ │ │ └── observability.py │ │ └── volumes.py │ ├── poetry.lock │ ├── pyproject.toml │ ├── requirements.txt │ └── tests │ │ ├── __init__.py │ │ ├── test_cli.py │ │ ├── test_kubernetes.py │ │ ├── test_lib_alert_tree.py │ │ ├── test_models.py │ │ └── test_prometheus.py └── rule_extractor │ ├── alerting_rules.json │ ├── rule_extractor.py │ └── rules.json ├── tox.ini ├── ui ├── .dockerignore ├── .gitignore ├── .prettierrc ├── @mf-types │ ├── index.d.ts │ └── shell │ │ ├── App.d.ts │ │ ├── alerts │ │ ├── AlertProvider.d.ts │ │ └── alertHooks.d.ts │ │ ├── auth │ │ └── AuthProvider.d.ts │ │ ├── compiled-types │ │ └── src │ │ │ ├── FederatedApp.d.ts │ │ │ ├── NotificationCenterProvider.d.ts │ │ │ ├── QueryClientProvider.d.ts │ │ │ ├── alerts │ │ │ ├── AlertProvider.d.ts │ │ │ ├── alertContext.d.ts │ │ │ ├── alertHooks.d.ts │ │ │ ├── index.d.ts │ │ │ └── services │ │ │ │ ├── alertManager.d.ts │ │ │ │ ├── alertUtils.d.ts │ │ │ │ └── loki.d.ts │ │ │ ├── auth │ │ │ ├── AuthConfigProvider.d.ts │ │ │ ├── AuthProvider.d.ts │ │ │ └── FirstTimeLoginProvider.d.ts │ │ │ ├── hooks │ │ │ └── useShellHooks.d.ts │ │ │ ├── initFederation │ │ │ ├── ConfigurationProviders.d.ts │ │ │ ├── ShellConfigProvider.d.ts │ │ │ ├── ShellHistoryProvider.d.ts │ │ │ ├── ShellThemeSelectorProvider.d.ts │ │ │ └── UIListProvider.d.ts │ │ │ ├── navbar │ │ │ ├── InstanceName.d.ts │ │ │ ├── NavBar.d.ts │ │ │ ├── NavbarConfigProvider.d.ts │ │ │ ├── NavbarUpdaterComponents.d.ts │ │ │ ├── NotificationCenter.d.ts │ │ │ ├── SleepingNotificationBell.d.ts │ │ │ ├── auth │ │ │ │ └── permissionUtils.d.ts │ │ │ ├── events.d.ts │ │ │ ├── favicon.d.ts │ │ │ ├── index.d.ts │ │ │ ├── lang.d.ts │ │ │ ├── library.d.ts │ │ │ ├── navbarContext.d.ts │ │ │ └── navbarHooks.d.ts │ │ │ └── useNotificationCenter.d.ts │ │ ├── lang.d.ts │ │ ├── moduleFederation │ │ ├── ConfigurationProvider.d.ts │ │ ├── ShellConfigurationProvider.d.ts │ │ └── UIListProvider.d.ts │ │ ├── navbar │ │ └── navbarHooks.d.ts │ │ ├── node_modules │ │ ├── @scality │ │ │ └── core-ui │ │ │ │ ├── dist │ │ │ │ ├── components │ │ │ │ │ ├── UnsuccessfulResult.component.d.ts │ │ │ │ │ ├── accordion │ │ │ │ │ │ └── Accordion.component.d.ts │ │ │ │ │ ├── areachart │ │ │ │ │ │ └── AreaChart.component.d.ts │ │ │ │ │ ├── banner │ │ │ │ │ │ └── Banner.component.d.ts │ │ │ │ │ ├── barchart │ │ │ │ │ │ └── BarChart.component.d.ts │ │ │ │ │ ├── box │ │ │ │ │ │ └── Box.d.ts │ │ │ │ │ ├── breadcrumb │ │ │ │ │ │ └── Breadcrumb.component.d.ts │ │ │ │ │ ├── button │ │ │ │ │ │ └── Button.component.d.ts │ │ │ │ │ ├── buttonv2 │ │ │ │ │ │ ├── Buttonv2.component.d.ts │ │ │ │ │ │ └── CopyButton.component.d.ts │ │ │ │ │ ├── card │ │ │ │ │ │ └── Card.component.d.ts │ │ │ │ │ ├── checkbox │ │ │ │ │ │ └── Checkbox.component.d.ts │ │ │ │ │ ├── chips │ │ │ │ │ │ └── Chips.component.d.ts │ │ │ │ │ ├── circularprogressbar │ │ │ │ │ │ ├── CircularProgressBar.component.d.ts │ │ │ │ │ │ └── CircularProgressBar.component.style.d.ts │ │ │ │ │ ├── cloudprogressbar │ │ │ │ │ │ └── CloudProgressBar.component.d.ts │ │ │ │ │ ├── collapsiblepanel │ │ │ │ │ │ └── CollapsiblePanel.component.d.ts │ │ │ │ │ ├── constants.d.ts │ │ │ │ │ ├── constrainedtext │ │ │ │ │ │ └── Constrainedtext.component.d.ts │ │ │ │ │ ├── coreuithemeprovider │ │ │ │ │ │ └── CoreUiThemeProvider.d.ts │ │ │ │ │ ├── date │ │ │ │ │ │ ├── FormattedDateTime.d.ts │ │ │ │ │ │ ├── FormattedDateTime.spec.d.ts │ │ │ │ │ │ ├── dateDiffer.d.ts │ │ │ │ │ │ └── dateDiffer.spec.d.ts │ │ │ │ │ ├── dropdown │ │ │ │ │ │ └── Dropdown.component.d.ts │ │ │ │ │ ├── dropzone │ │ │ │ │ │ └── Dropzone.d.ts │ │ │ │ │ ├── emptystate │ │ │ │ │ │ └── Emptystate.component.d.ts │ │ │ │ │ ├── emptytable │ │ │ │ │ │ └── Emptytable.component.d.ts │ │ │ │ │ ├── error-pages │ │ │ │ │ │ ├── ErrorPage401.component.d.ts │ │ │ │ │ │ ├── ErrorPage404.component.d.ts │ │ │ │ │ │ ├── ErrorPage500.component.d.ts │ │ │ │ │ │ ├── ErrorPageAuth.component.d.ts │ │ │ │ │ │ └── ErrorPageStyle.d.ts │ │ │ │ │ ├── form │ │ │ │ │ │ └── Form.component.d.ts │ │ │ │ │ ├── globalhealthbar │ │ │ │ │ │ ├── GlobalHealthBar.component.d.ts │ │ │ │ │ │ └── tooltip │ │ │ │ │ │ │ └── index.d.ts │ │ │ │ │ ├── healthselectorv2 │ │ │ │ │ │ └── HealthSelector.component.d.ts │ │ │ │ │ ├── icon │ │ │ │ │ │ ├── CustomsIcons.d.ts │ │ │ │ │ │ └── Icon.component.d.ts │ │ │ │ │ ├── iconhelper │ │ │ │ │ │ └── IconHelper.d.ts │ │ │ │ │ ├── infomessage │ │ │ │ │ │ ├── InfoMessage.component.d.ts │ │ │ │ │ │ └── InfoMessageUtils.d.ts │ │ │ │ │ ├── inlineinput │ │ │ │ │ │ └── InlineInput.d.ts │ │ │ │ │ ├── inputlist │ │ │ │ │ │ ├── InputButtons.d.ts │ │ │ │ │ │ └── InputList.component.d.ts │ │ │ │ │ ├── inputv2 │ │ │ │ │ │ └── inputv2.d.ts │ │ │ │ │ ├── lateralnavbarlayout │ │ │ │ │ │ └── LateralNavbarLayout.component.d.ts │ │ │ │ │ ├── layout │ │ │ │ │ │ ├── Layout.component.d.ts │ │ │ │ │ │ └── v2 │ │ │ │ │ │ │ ├── AppContainer.d.ts │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ └── panels.d.ts │ │ │ │ │ ├── linechart │ │ │ │ │ │ └── LineChart.component.d.ts │ │ │ │ │ ├── linetemporalchart │ │ │ │ │ │ ├── ChartUtil.d.ts │ │ │ │ │ │ ├── LineTemporalChart.component.d.ts │ │ │ │ │ │ ├── MetricTimespanProvider.d.ts │ │ │ │ │ │ └── tooltip │ │ │ │ │ │ │ └── index.d.ts │ │ │ │ │ ├── loader │ │ │ │ │ │ └── Loader.component.d.ts │ │ │ │ │ ├── modal │ │ │ │ │ │ └── Modal.component.d.ts │ │ │ │ │ ├── multiselect │ │ │ │ │ │ └── MultiSelect.component.d.ts │ │ │ │ │ ├── navbar │ │ │ │ │ │ └── Navbar.component.d.ts │ │ │ │ │ ├── notifications │ │ │ │ │ │ ├── Notification.component.d.ts │ │ │ │ │ │ └── Notifications.component.d.ts │ │ │ │ │ ├── prettybytes │ │ │ │ │ │ └── PrettyBytes.component.d.ts │ │ │ │ │ ├── progressbar │ │ │ │ │ │ └── ProgressBar.component.d.ts │ │ │ │ │ ├── scrollbarwrapper │ │ │ │ │ │ └── ScrollbarWrapper.component.d.ts │ │ │ │ │ ├── searchinput │ │ │ │ │ │ └── SearchInput.component.d.ts │ │ │ │ │ ├── select │ │ │ │ │ │ └── Select.component.d.ts │ │ │ │ │ ├── selectv2 │ │ │ │ │ │ ├── SelectStyle.d.ts │ │ │ │ │ │ └── Selectv2.component.d.ts │ │ │ │ │ ├── sidebar │ │ │ │ │ │ └── Sidebar.component.d.ts │ │ │ │ │ ├── spacedbox │ │ │ │ │ │ └── SpacedBox.d.ts │ │ │ │ │ ├── sparkline │ │ │ │ │ │ └── SparkLine.component.d.ts │ │ │ │ │ ├── statusicon │ │ │ │ │ │ └── StatusIcon.component.d.ts │ │ │ │ │ ├── statuswrapper │ │ │ │ │ │ └── Statuswrapper.component.d.ts │ │ │ │ │ ├── steppers │ │ │ │ │ │ ├── Stepper.component.d.ts │ │ │ │ │ │ └── Steppers.component.d.ts │ │ │ │ │ ├── tablev2 │ │ │ │ │ │ ├── MultiSelectableContent.d.ts │ │ │ │ │ │ ├── Search.d.ts │ │ │ │ │ │ ├── SearchWithQueryParams.d.ts │ │ │ │ │ │ ├── SingleSelectableContent.d.ts │ │ │ │ │ │ ├── TableCommon.d.ts │ │ │ │ │ │ ├── TableUtils.d.ts │ │ │ │ │ │ ├── Tablestyle.d.ts │ │ │ │ │ │ ├── Tablev2.component.d.ts │ │ │ │ │ │ ├── react-table-config.d.ts │ │ │ │ │ │ ├── useCheckbox.d.ts │ │ │ │ │ │ └── useSyncedScroll.d.ts │ │ │ │ │ ├── tabsv2 │ │ │ │ │ │ ├── ScrollButton.d.ts │ │ │ │ │ │ ├── StyledTabs.d.ts │ │ │ │ │ │ ├── Tab.d.ts │ │ │ │ │ │ ├── Tabsv2.component.d.ts │ │ │ │ │ │ └── useScrollingTabs.d.ts │ │ │ │ │ ├── text │ │ │ │ │ │ └── Text.component.d.ts │ │ │ │ │ ├── textarea │ │ │ │ │ │ └── TextArea.component.d.ts │ │ │ │ │ ├── textbadge │ │ │ │ │ │ └── TextBadge.component.d.ts │ │ │ │ │ ├── toast │ │ │ │ │ │ ├── DurationBasedProgressBar.d.ts │ │ │ │ │ │ ├── Toast.component.d.ts │ │ │ │ │ │ ├── ToastPositionHelpers.d.ts │ │ │ │ │ │ ├── ToastProvider.d.ts │ │ │ │ │ │ ├── useMutationsHandler.d.ts │ │ │ │ │ │ └── useToastParameters.d.ts │ │ │ │ │ ├── toggle │ │ │ │ │ │ └── Toggle.component.d.ts │ │ │ │ │ ├── tooltip │ │ │ │ │ │ └── Tooltip.component.d.ts │ │ │ │ │ ├── vegachart │ │ │ │ │ │ └── VegaChart.component.d.ts │ │ │ │ │ └── vegachartv2 │ │ │ │ │ │ ├── SyncedCursorCharts.d.ts │ │ │ │ │ │ └── VegaChartV2.component.d.ts │ │ │ │ ├── hooks.d.ts │ │ │ │ ├── icons │ │ │ │ │ ├── branding-logo.d.ts │ │ │ │ │ ├── branding.d.ts │ │ │ │ │ └── scality-loading.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── next.d.ts │ │ │ │ ├── organisms │ │ │ │ │ └── attachments │ │ │ │ │ │ ├── AttachmentConfirmationModal.d.ts │ │ │ │ │ │ ├── AttachmentTable.d.ts │ │ │ │ │ │ └── AttachmentTypes.d.ts │ │ │ │ ├── spacing.d.ts │ │ │ │ ├── style │ │ │ │ │ └── theme.d.ts │ │ │ │ ├── testUtils.d.ts │ │ │ │ └── utils.d.ts │ │ │ │ ├── package.json │ │ │ │ ├── src │ │ │ │ └── lib │ │ │ │ │ └── components │ │ │ │ │ └── steppers │ │ │ │ │ └── Stepper.component.d.ts │ │ │ │ └── types │ │ │ │ └── styled.d.ts │ │ ├── @types │ │ │ └── react │ │ │ │ ├── canary.d.ts │ │ │ │ ├── experimental.d.ts │ │ │ │ ├── global.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── jsx-dev-runtime.d.ts │ │ │ │ ├── jsx-runtime.d.ts │ │ │ │ ├── package.json │ │ │ │ └── ts5.0 │ │ │ │ ├── canary.d.ts │ │ │ │ ├── experimental.d.ts │ │ │ │ ├── global.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── jsx-dev-runtime.d.ts │ │ │ │ └── jsx-runtime.d.ts │ │ ├── oidc-client-ts │ │ │ ├── dist │ │ │ │ ├── esm │ │ │ │ │ └── package.json │ │ │ │ └── types │ │ │ │ │ └── oidc-client-ts.d.ts │ │ │ └── package.json │ │ ├── react-query │ │ │ ├── broadcastQueryClient-experimental │ │ │ │ └── package.json │ │ │ ├── core │ │ │ │ └── package.json │ │ │ ├── createAsyncStoragePersistor-experimental │ │ │ │ └── package.json │ │ │ ├── createWebStoragePersistor-experimental │ │ │ │ └── package.json │ │ │ ├── devtools │ │ │ │ ├── development │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── hydration │ │ │ │ └── package.json │ │ │ ├── package.json │ │ │ ├── persistQueryClient-experimental │ │ │ │ └── package.json │ │ │ ├── react │ │ │ │ └── package.json │ │ │ └── types │ │ │ │ ├── broadcastQueryClient-experimental │ │ │ │ └── index.d.ts │ │ │ │ ├── core │ │ │ │ ├── focusManager.d.ts │ │ │ │ ├── hydration.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── infiniteQueryBehavior.d.ts │ │ │ │ ├── infiniteQueryObserver.d.ts │ │ │ │ ├── logger.d.ts │ │ │ │ ├── mutation.d.ts │ │ │ │ ├── mutationCache.d.ts │ │ │ │ ├── mutationObserver.d.ts │ │ │ │ ├── notifyManager.d.ts │ │ │ │ ├── onlineManager.d.ts │ │ │ │ ├── queriesObserver.d.ts │ │ │ │ ├── query.d.ts │ │ │ │ ├── queryCache.d.ts │ │ │ │ ├── queryClient.d.ts │ │ │ │ ├── queryObserver.d.ts │ │ │ │ ├── retryer.d.ts │ │ │ │ ├── subscribable.d.ts │ │ │ │ ├── types.d.ts │ │ │ │ └── utils.d.ts │ │ │ │ ├── createAsyncStoragePersistor-experimental │ │ │ │ └── index.d.ts │ │ │ │ ├── createWebStoragePersistor-experimental │ │ │ │ └── index.d.ts │ │ │ │ ├── devtools │ │ │ │ ├── Explorer.d.ts │ │ │ │ ├── Logo.d.ts │ │ │ │ ├── devtools.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── styledComponents.d.ts │ │ │ │ ├── theme.d.ts │ │ │ │ ├── useLocalStorage.d.ts │ │ │ │ ├── useMediaQuery.d.ts │ │ │ │ └── utils.d.ts │ │ │ │ ├── hydration │ │ │ │ └── index.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── persistQueryClient-experimental │ │ │ │ └── index.d.ts │ │ │ │ ├── react │ │ │ │ ├── Hydrate.d.ts │ │ │ │ ├── QueryClientProvider.d.ts │ │ │ │ ├── QueryErrorResetBoundary.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── logger.d.ts │ │ │ │ ├── reactBatchedUpdates.d.ts │ │ │ │ ├── setBatchUpdatesFn.d.ts │ │ │ │ ├── setLogger.d.ts │ │ │ │ ├── types.d.ts │ │ │ │ ├── useBaseQuery.d.ts │ │ │ │ ├── useInfiniteQuery.d.ts │ │ │ │ ├── useIsFetching.d.ts │ │ │ │ ├── useIsMutating.d.ts │ │ │ │ ├── useMutation.d.ts │ │ │ │ ├── useQueries.d.ts │ │ │ │ ├── useQuery.d.ts │ │ │ │ └── utils.d.ts │ │ │ │ └── ts3.8 │ │ │ │ ├── index.d.ts │ │ │ │ └── useQueries.d.ts │ │ └── react-router │ │ │ ├── dist │ │ │ ├── development │ │ │ │ ├── data-CQbyyGzl.d.ts │ │ │ │ ├── dom-export.d.ts │ │ │ │ ├── fog-of-war-CbNQuoo8.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── lib │ │ │ │ │ └── types │ │ │ │ │ │ └── route-module.d.ts │ │ │ │ └── route-data-DuV3tXo2.d.ts │ │ │ └── production │ │ │ │ ├── data-CQbyyGzl.d.ts │ │ │ │ ├── dom-export.d.ts │ │ │ │ ├── fog-of-war-CbNQuoo8.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── lib │ │ │ │ └── types │ │ │ │ │ └── route-module.d.ts │ │ │ │ └── route-data-DuV3tXo2.d.ts │ │ │ └── package.json │ │ └── useNotificationCenter.d.ts ├── Dockerfile ├── README.md ├── babel.config.js ├── cypress.config.js ├── cypress │ ├── downloads │ │ └── runtime-app-configuration │ ├── e2e │ │ ├── error_pages.cy.js │ │ ├── node │ │ │ ├── nodelist.cy.js │ │ │ └── nodetabs.cy.js │ │ ├── sidebar.cy.js │ │ └── volume │ │ │ ├── volume_creation_error.cy.js │ │ │ ├── volume_creation_form.cy.js │ │ │ ├── volumelist.cy.js │ │ │ └── volumetabs.cy.js │ ├── fixtures │ │ ├── alertmanager │ │ │ └── alerts.json │ │ ├── config.json │ │ ├── deployed-ui-apps.json │ │ ├── kubernetes │ │ │ ├── namespace-kube-system.json │ │ │ ├── nodes.json │ │ │ ├── persistentvolumeclaims.json │ │ │ ├── persistentvolumes.json │ │ │ ├── pods.json │ │ │ ├── storageclasses.json │ │ │ ├── volumecreation.json │ │ │ └── volumes.json │ │ ├── openid-config.json │ │ ├── prometheus │ │ │ ├── empty-alerts.json │ │ │ ├── node-uname-info.json │ │ │ ├── query-up-ok.json │ │ │ ├── query-volumes-capacity.json │ │ │ ├── query-volumes-latency.json │ │ │ └── query-volumes-used.json │ │ ├── runtime-app-configuration │ │ ├── salt-api │ │ │ ├── ip-grains.json │ │ │ └── login.json │ │ └── shell-config.json │ ├── plugins │ │ └── index.js │ ├── requirements.sh │ └── support │ │ ├── commands.js │ │ ├── e2e.js │ │ └── mockUtils.js ├── entrypoint.sh ├── package-lock.json ├── package.json ├── public │ ├── .well-known │ │ ├── micro-app-configuration │ │ └── runtime-app-configuration │ ├── brand │ │ ├── assets │ │ │ ├── fonts │ │ │ │ └── lato │ │ │ │ │ ├── Lato-Bold.woff │ │ │ │ │ ├── Lato-Bold.woff2 │ │ │ │ │ ├── Lato-Regular.woff │ │ │ │ │ └── Lato-Regular.woff2 │ │ │ ├── login │ │ │ │ ├── favicon.png │ │ │ │ ├── logo-light.png │ │ │ │ ├── logo.png │ │ │ │ ├── styles-light.css │ │ │ │ └── styles.css │ │ │ ├── logo-dark.svg │ │ │ ├── logo-darkRebrand.svg │ │ │ └── logo-light.svg │ │ ├── email.html │ │ └── favicon-metalk8s.svg │ ├── config.json │ └── manifest.json ├── rspack.config.ts ├── src │ ├── FederableApp.tsx │ ├── QueryClientProvider.tsx │ ├── alert-configuration │ │ ├── ConfigureAlerting.test.tsx │ │ ├── ConfigureAlerting.tsx │ │ ├── domain │ │ │ └── AlertConfigurationDomain.ts │ │ ├── infrastructure │ │ │ ├── AlertManagerTypes.ts │ │ │ └── Metalk8sCSCAlertConfigurationStore.ts │ │ └── test-yaml │ │ │ ├── simple-cram-md5.yaml │ │ │ ├── simple-login.yaml │ │ │ ├── simple-noauth.yaml │ │ │ └── simple-plain.yaml │ ├── components │ │ ├── ActiveAlertsCounter.tsx │ │ ├── ActiveAlertsFilters.spec.tsx │ │ ├── ActiveAlertsFilters.tsx │ │ ├── AlertNavbarUpdaterComponent.test.tsx │ │ ├── AlertNavbarUpdaterComponent.tsx │ │ ├── AlertsTab.tsx │ │ ├── CircleStatus.tsx │ │ ├── DashboardAlerts.test.tsx │ │ ├── DashboardAlerts.tsx │ │ ├── DashboardBandwidthChart.tsx │ │ ├── DashboardChartCpuUsage.tsx │ │ ├── DashboardChartMemory.tsx │ │ ├── DashboardChartSystemLoad.tsx │ │ ├── DashboardChartThroughput.tsx │ │ ├── DashboardGlobalHealth.tsx │ │ ├── DashboardInventory.test.tsx │ │ ├── DashboardInventory.tsx │ │ ├── DashboardMetrics.tsx │ │ ├── DashboardNetwork.tsx │ │ ├── DashboardPlane.test.tsx │ │ ├── DashboardPlaneHealth.tsx │ │ ├── DashboardServices.test.tsx │ │ ├── DashboardServices.tsx │ │ ├── HealthItem.tsx │ │ ├── InformationList.ts │ │ ├── Latency.spec.tsx │ │ ├── Latency.tsx │ │ ├── LinechartSpec.ts │ │ ├── MetricChart.tsx │ │ ├── MetricSymmetricalChart.tsx │ │ ├── ModalFormStyle.ts │ │ ├── NoRowsRenderer.tsx │ │ ├── NodeDetailsTab.tsx │ │ ├── NodeListTable.tsx │ │ ├── NodePageOverviewTab.spec.tsx │ │ ├── NodePageOverviewTab.tsx │ │ ├── NodePagePartitionTab.tsx │ │ ├── NodePagePodsTab.spec.tsx │ │ ├── NodePagePodsTab.tsx │ │ ├── NodePageVolumesTab.tsx │ │ ├── NodePageVolumesTable.tsx │ │ ├── NodePartitionTable.test.tsx │ │ ├── NodePartitionTable.tsx │ │ ├── NonSymmetricalQuantileChart.tsx │ │ ├── StatusIcon.tsx │ │ ├── SymmetricalQuantileChart.tsx │ │ ├── TableBasedPageStyle.ts │ │ ├── TableRow.tsx │ │ ├── VolumeCharts.tsx │ │ ├── VolumeDetailsTab.tsx │ │ ├── VolumeListTable.tsx │ │ ├── VolumeMetricsTab.tsx │ │ ├── VolumeOverviewTab.tsx │ │ ├── __TEST__ │ │ │ └── util.tsx │ │ └── style │ │ │ ├── BreadcrumbStyle.ts │ │ │ ├── CommonLayoutStyle.ts │ │ │ ├── ModalFormStyle.ts │ │ │ ├── TableBasedPageStyle.ts │ │ │ └── TableStyle.ts │ ├── constants.ts │ ├── containers │ │ ├── About.tsx │ │ ├── AlertPage.tsx │ │ ├── AlertProvider.tsx │ │ ├── App.tsx │ │ ├── ConfigProvider.tsx │ │ ├── CreateVolume.tsx │ │ ├── DashboardPage.tsx │ │ ├── IntlProvider.tsx │ │ ├── Layout.tsx │ │ ├── NodeCreateForm.tsx │ │ ├── NodePage.tsx │ │ ├── NodePageContent.tsx │ │ ├── NodePageMetricsTab.tsx │ │ ├── NodePageRSP.tsx │ │ ├── PrivateRoute.tsx │ │ ├── StartTimeProvider.tsx │ │ ├── TimespanSelector.tsx │ │ ├── VolumePage.tsx │ │ ├── VolumePageContent.tsx │ │ └── VolumePageRSP.tsx │ ├── ducks │ │ ├── app │ │ │ ├── authError.ts │ │ │ ├── monitoring.test.ts │ │ │ ├── monitoring.ts │ │ │ ├── nodes.test.ts │ │ │ ├── nodes.ts │ │ │ ├── notifications.ts │ │ │ ├── pods.ts │ │ │ ├── salt.test.ts │ │ │ ├── salt.ts │ │ │ └── volumes.ts │ │ ├── config.test.ts │ │ ├── config.ts │ │ ├── history.ts │ │ ├── login.test.ts │ │ ├── login.ts │ │ ├── oidc.ts │ │ ├── reducer.ts │ │ └── sagas.ts │ ├── hooks.tsx │ ├── hooks │ │ ├── monitoring.ts │ │ ├── nodes.ts │ │ └── volumes.ts │ ├── index.ts │ ├── serviceWorker.ts │ ├── services │ │ ├── ApiClient.ts │ │ ├── NodeUtils.ts │ │ ├── NodeVolumesUtils.test.ts │ │ ├── NodeVolumesUtils.ts │ │ ├── NodeVolumesUtilsData.ts │ │ ├── PodUtils.ts │ │ ├── alertUtils.test.ts │ │ ├── alertUtils.ts │ │ ├── alertUtilsData.ts │ │ ├── alertmanager │ │ │ └── api.ts │ │ ├── api.ts │ │ ├── errorhandler.ts │ │ ├── graphUtils.test.ts │ │ ├── graphUtils.ts │ │ ├── k8s │ │ │ ├── Metalk8sLocalVolumeProvider.test.ts │ │ │ ├── Metalk8sLocalVolumeProvider.ts │ │ │ ├── Metalk8sVolumeClient.generated.ts │ │ │ ├── api.ts │ │ │ ├── core.key.ts │ │ │ ├── core.ts │ │ │ └── volumes.ts │ │ ├── loki │ │ │ └── api.ts │ │ ├── platformlibrary │ │ │ ├── k8s.spec.tsx │ │ │ ├── k8s.ts │ │ │ └── metrics.ts │ │ ├── prometheus │ │ │ ├── api.ts │ │ │ └── fetchMetrics.ts │ │ ├── salt │ │ │ ├── api.ts │ │ │ ├── utils.test.ts │ │ │ └── utils.ts │ │ ├── utils.test.ts │ │ └── utils.ts │ ├── setupTests.tsx │ ├── tests │ │ └── mocks │ │ │ ├── localStorage.ts │ │ │ ├── salt │ │ │ ├── constants.ts │ │ │ ├── eventRet.ts │ │ │ └── printJob.ts │ │ │ └── util.ts │ ├── translations │ │ ├── en.json │ │ └── fr.json │ ├── typeGuard.ts │ └── types.ts ├── standalone-nginx.conf └── tsconfig.json └── vagrant_config.rb.example /.dockerignore: -------------------------------------------------------------------------------- 1 | _build/ 2 | __pycache__/ 3 | 4 | .mypy_cache/ 5 | .vagrant/ 6 | .tox/ 7 | 8 | buildchain/.venv/ 9 | 10 | .doit.db 11 | 12 | *.pyc 13 | 14 | node_modules 15 | npm-debug.log 16 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # Format all Python files with black 2 | d66ec12cd2854e286253012a1954bba6b3c653b4 3 | 69c71596307c14a80cd604db5d38ee3c410e17ca 4 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @scality/metalk8s 2 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | **Component**: 2 | 3 | 4 | 5 | **Context**: 6 | 7 | **Summary**: 8 | 9 | **Acceptance criteria**: 10 | 11 | 12 | --- 13 | 14 | 15 | 16 | Closes: #ISSUE_NUMBER 17 | 18 | 23 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/ui" 5 | schedule: 6 | interval: "daily" 7 | allow: 8 | - dependency-name: "@scality/core-ui" 9 | 10 | - package-ecosystem: "github-actions" 11 | directory: "/" 12 | schedule: 13 | interval: "daily" 14 | -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | ui: 2 | - 'ui/*' 3 | 4 | dependencies: 5 | - '**/requirements*.in' 6 | - '**/requirements*.txt' 7 | - '**/package.json' 8 | - '**/package-lock.json' 9 | - '**/go.mod' 10 | - '**/go.sum' 11 | 12 | docs: 13 | - 'docs/*' 14 | 15 | storage: 16 | - 'storage-operator/*' 17 | 18 | tests: 19 | - 'tests/*' 20 | 21 | build: 22 | - 'buildchain/*' 23 | - 'packages/*' 24 | - 'images/*' 25 | 26 | ci: 27 | - 'eve/*' 28 | - '.github/workflows/*' 29 | - '.github/labeler.yml' 30 | -------------------------------------------------------------------------------- /.github/spawn/tfvars/common.tfvars: -------------------------------------------------------------------------------- 1 | component = "metalk8s" 2 | offline = false 3 | open_egress_tcp_ports = [80, 443] 4 | open_egress_udp_ports = [123] 5 | -------------------------------------------------------------------------------- /.github/spawn/tfvars/ovh.tfvars: -------------------------------------------------------------------------------- 1 | cloud = "ovh" 2 | flavor = "c2-15" 3 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | build: 4 | os: ubuntu-22.04 5 | tools: 6 | python: "3.11" 7 | 8 | apt_packages: 9 | - plantuml 10 | 11 | python: 12 | install: 13 | - requirements: docs/requirements.txt 14 | 15 | sphinx: 16 | builder: html 17 | configuration: docs/conf.py 18 | fail_on_warning: true 19 | -------------------------------------------------------------------------------- /.salt-lint: -------------------------------------------------------------------------------- 1 | skip_list: 2 | - 204 # Line too long 3 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | VERSION_MAJOR=130 2 | VERSION_MINOR=0 3 | VERSION_PATCH=1 4 | VERSION_SUFFIX=-dev 5 | -------------------------------------------------------------------------------- /artwork/generated/metalk8s-logo-wide-black-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/artwork/generated/metalk8s-logo-wide-black-400.png -------------------------------------------------------------------------------- /artwork/generated/metalk8s-logo-wide-black.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/artwork/generated/metalk8s-logo-wide-black.pdf -------------------------------------------------------------------------------- /artwork/generated/metalk8s-logo-wide-white-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/artwork/generated/metalk8s-logo-wide-white-200.png -------------------------------------------------------------------------------- /buildchain/buildchain/__init__.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | 4 | """The build chain module. 5 | 6 | It defines tasks and helper for the build system. 7 | """ 8 | 9 | 10 | from pathlib import Path 11 | 12 | 13 | # Root of the repository. 14 | ROOT: Path = (Path(__file__) / "../../../").resolve() 15 | -------------------------------------------------------------------------------- /buildchain/platform-requirements.txt: -------------------------------------------------------------------------------- 1 | # Note: these come from 'buildchain/platform-requirements.txt' 2 | macfsevents==0.8.1; sys_platform=="darwin" # via doit 3 | pyinotify==0.9.6; sys_platform=="linux" # via doit 4 | -------------------------------------------------------------------------------- /buildchain/requirements.in: -------------------------------------------------------------------------------- 1 | -c platform-requirements.txt 2 | doit ~= 0.34.0 3 | docker ~= 4.1.0 4 | PyYAML ~= 5.3.1 5 | -------------------------------------------------------------------------------- /buildchain/static-container-registry/ci/docker/image-provisioner/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM docker.io/ubuntu:xenial 2 | 3 | RUN apt-get update \ 4 | && \ 5 | apt-get install -y software-properties-common\ 6 | && \ 7 | add-apt-repository ppa:projectatomic/ppa \ 8 | && \ 9 | apt-get update \ 10 | && \ 11 | apt-get install -y skopeo 12 | 13 | RUN apt-get install \ 14 | hardlink 15 | 16 | COPY provision-images.sh /provision-images.sh 17 | -------------------------------------------------------------------------------- /buildchain/static-container-registry/ci/docker/static-container-registry/docker-test-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -ue 4 | 5 | printf "Waiting for images to be pulled..." 1>&2 6 | while [ ! -f /var/lib/images/.pulled ]; do 7 | sleep 0.5 8 | done 9 | echo " done" 1>&2 10 | 11 | exec /entrypoint.sh nginx -g 'daemon off;' 12 | -------------------------------------------------------------------------------- /buildchain/static-container-registry/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -ue 4 | 5 | python3 /static-container-registry.py /var/lib/images > /var/run/static-container-registry.conf 6 | 7 | exec "$@" 8 | -------------------------------------------------------------------------------- /charts/cert-manager/templates/extras-objects.yaml: -------------------------------------------------------------------------------- 1 | {{ range .Values.extraObjects }} 2 | --- 3 | {{ tpl . $ }} 4 | {{ end }} 5 | -------------------------------------------------------------------------------- /charts/dex/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | 25 | README.md.gotmpl 26 | -------------------------------------------------------------------------------- /charts/dex/ci/config-secret-values.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | issuer: https://my-issuer.com 3 | 4 | storage: 5 | type: memory 6 | 7 | enablePasswordDB: true 8 | 9 | configSecret: 10 | name: my-super-special-dex-secret 11 | -------------------------------------------------------------------------------- /charts/dex/ci/label-annotations-values.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | issuer: https://my-issuer.com 3 | 4 | storage: 5 | type: memory 6 | 7 | enablePasswordDB: true 8 | 9 | deploymentAnnotations: 10 | reloader.stakater.com/auto: "true" 11 | 12 | podAnnotations: 13 | vault.security.banzaicloud.io/vault-addr: "https://vault.vault:8200" 14 | 15 | deploymentLabels: 16 | hello: world 17 | 18 | podLabels: 19 | hello: world 20 | -------------------------------------------------------------------------------- /charts/dex/ci/no-config-secret.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | issuer: https://my-issuer.com 3 | 4 | storage: 5 | type: memory 6 | 7 | enablePasswordDB: true 8 | 9 | configSecret: 10 | create: false 11 | -------------------------------------------------------------------------------- /charts/dex/ci/test-values.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | issuer: https://my-issuer.com 3 | 4 | storage: 5 | type: memory 6 | 7 | enablePasswordDB: true 8 | -------------------------------------------------------------------------------- /charts/dex/templates/secret.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.configSecret.create -}} 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: {{ include "dex.configSecretName" . }} 6 | namespace: {{ include "dex.namespace" . }} 7 | labels: 8 | {{- include "dex.labels" . | nindent 4 }} 9 | type: Opaque 10 | data: 11 | config.yaml: {{ .Values.config | toYaml | b64enc | quote }} 12 | {{- end }} 13 | -------------------------------------------------------------------------------- /charts/dex/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "dex.serviceAccountName" . }} 6 | namespace: {{ include "dex.namespace" . }} 7 | labels: 8 | {{- include "dex.labels" . | nindent 4 }} 9 | {{- with .Values.serviceAccount.annotations }} 10 | annotations: 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | {{- end }} 14 | -------------------------------------------------------------------------------- /charts/dex/templates/tests/no-config-secret.yaml: -------------------------------------------------------------------------------- 1 | {{- if not .Values.configSecret.create -}} 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: {{ include "dex.configSecretName" . }}-test-no-create 6 | labels: 7 | {{- include "dex.labels" . | nindent 4 }} 8 | annotations: 9 | "helm.sh/hook": test 10 | type: Opaque 11 | data: 12 | config.yaml: {{ .Values.config | toYaml | b64enc | quote }} 13 | {{- end }} 14 | -------------------------------------------------------------------------------- /charts/fluent-bit/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /charts/fluent-bit/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | Get Fluent Bit build information by running these commands: 2 | 3 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "fluent-bit.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 4 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 2020:2020 5 | curl http://127.0.0.1:2020 6 | 7 | -------------------------------------------------------------------------------- /charts/fluent-bit/templates/configmap-luascripts.yaml: -------------------------------------------------------------------------------- 1 | {{- if or .Values.luaScripts .Values.hotReload.enabled -}} 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: {{ include "fluent-bit.fullname" . }}-luascripts 6 | namespace: {{ .Release.Namespace }} 7 | labels: 8 | {{- include "fluent-bit.labels" . | nindent 4 }} 9 | data: 10 | {{ range $key, $value := .Values.luaScripts }} 11 | {{ $key }}: {{ (tpl $value $) | quote }} 12 | {{ end }} 13 | {{- end -}} 14 | -------------------------------------------------------------------------------- /charts/fluent-bit/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "fluent-bit.serviceAccountName" . }} 6 | namespace: {{ .Release.Namespace }} 7 | labels: 8 | {{- include "fluent-bit.labels" . | nindent 4 }} 9 | {{- with .Values.serviceAccount.annotations }} 10 | annotations: 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | {{- end -}} 14 | -------------------------------------------------------------------------------- /charts/ingress-nginx/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | __snapshot__ 24 | -------------------------------------------------------------------------------- /charts/ingress-nginx/OWNERS: -------------------------------------------------------------------------------- 1 | # See the OWNERS docs: https://www.kubernetes.dev/docs/guide/owners 2 | 3 | labels: 4 | - area/helm 5 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-2.11.2.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 2.11.2 6 | 7 | * [#5951](https://github.com/kubernetes/ingress-nginx/pull/5951) Bump chart patch version 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/ingress-nginx-2.11.1...ingress-nginx-2.11.2 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-2.11.3.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 2.11.3 6 | 7 | * [#6038](https://github.com/kubernetes/ingress-nginx/pull/6038) Bump chart version PATCH 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/ingress-nginx-2.11.2...ingress-nginx-2.11.3 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.0.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.0.0 6 | 7 | * [#6167](https://github.com/kubernetes/ingress-nginx/pull/6167) Update chart requirements 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/ingress-nginx-2.16.0...ingress-nginx-3.0.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.10.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.10.0 6 | 7 | * Fix routing regression introduced in 0.41.0 with PathType Exact 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/ingress-nginx-3.9.0...ingress-nginx-3.10.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.10.1.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.10.1 6 | 7 | * Fix regression introduced in 0.41.0 with external authentication 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/ingress-nginx-3.10.0...ingress-nginx-3.10.1 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.11.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.11.0 6 | 7 | * Support Keda Autoscaling 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/ingress-nginx-3.10.1...ingress-nginx-3.11.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.15.1.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.15.1 6 | 7 | * Fix chart-releaser action 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/ingress-nginx-3.15.0...ingress-nginx-3.15.1 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.16.1.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.16.1 6 | 7 | * Fix chart-releaser action 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.16.0...helm-chart-3.16.1 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.17.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.17.0 6 | 7 | * Update ingress-nginx v0.42.0 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.16.1...helm-chart-3.17.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.19.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.19.0 6 | 7 | * Update ingress-nginx v0.43.0 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.18.0...helm-chart-3.19.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.20.1.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.20.1 6 | 7 | * Do not create KEDA in case of DaemonSets. 8 | * Fix KEDA v2 definition 9 | 10 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.20.0...helm-chart-3.20.1 11 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.23.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.23.0 6 | 7 | * Update ingress-nginx v0.44.0 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.22.0...helm-chart-3.23.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.27.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.27.0 6 | 7 | * Update ingress-nginx v0.45.0 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.26.0...helm-chart-3.27.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.28.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.28.0 6 | 7 | * [#6900](https://github.com/kubernetes/ingress-nginx/pull/6900) Support existing PSPs 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.27.0...helm-chart-3.28.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.31.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.31.0 6 | 7 | * [7137] https://github.com/kubernetes/ingress-nginx/pull/7137 Add support for custom probes 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.30.0...helm-chart-3.31.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.32.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.32.0 6 | 7 | * [7117] https://github.com/kubernetes/ingress-nginx/pull/7117 Add annotations for HPA 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.31.0...helm-chart-3.32.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.33.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.33.0 6 | 7 | * [7164] https://github.com/kubernetes/ingress-nginx/pull/7164 Update nginx to v1.20.1 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.32.0...helm-chart-3.33.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.5.1.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.5.1 6 | 7 | * [#6299](https://github.com/kubernetes/ingress-nginx/pull/6299) Fix helm chart release 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/ingress-nginx-3.5.0...ingress-nginx-3.5.1 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-3.6.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 3.6.0 6 | 7 | * [#6305](https://github.com/kubernetes/ingress-nginx/pull/6305) Add default linux nodeSelector 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/ingress-nginx-3.5.1...ingress-nginx-3.6.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.0.1.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.0.1 6 | 7 | * [7535] https://github.com/kubernetes/ingress-nginx/pull/7535 Release v1.0.0 ingress-nginx 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-3.34.0...helm-chart-4.0.1 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.0.10.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.0.10 6 | 7 | * [7964] https://github.com/kubernetes/ingress-nginx/pull/7964 Update controller version to v1.1.0 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.0.9...helm-chart-4.0.10 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.0.2.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.0.2 6 | 7 | * [7681] https://github.com/kubernetes/ingress-nginx/pull/7681 Release v1.0.1 of ingress-nginx 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.0.1...helm-chart-4.0.2 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.0.3.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.0.3 6 | 7 | * [7707] https://github.com/kubernetes/ingress-nginx/pull/7707 Release v1.0.2 of ingress-nginx 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.0.2...helm-chart-4.0.3 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.0.5.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.0.5 6 | 7 | * [7740] https://github.com/kubernetes/ingress-nginx/pull/7740 Release v1.0.3 of ingress-nginx 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.0.3...helm-chart-4.0.5 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.10.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.10.0 6 | 7 | * - "Update Ingress-Nginx version controller-v1.10.0" 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.9.1...helm-chart-4.10.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.10.3.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.10.3 6 | 7 | * Update Ingress-Nginx version controller-v1.10.3 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.10.2...helm-chart-4.10.3 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.10.4.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.10.4 6 | 7 | * Update Ingress-Nginx version controller-v1.10.4 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.10.3...helm-chart-4.10.4 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.11.1.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.11.1 6 | 7 | * Update Ingress-Nginx version controller-v1.11.1 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.11.0...helm-chart-4.11.1 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.11.2.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.11.2 6 | 7 | * Update Ingress-Nginx version controller-v1.11.2 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.11.1...helm-chart-4.11.2 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.12.0-beta.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.12.0-beta.0 6 | 7 | * Update Ingress-Nginx version controller-v1.12.0-beta.0 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.11.0...helm-chart-4.12.0-beta.0 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.12.0.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.12.0 6 | 7 | * CI: Fix chart testing. (#12258) 8 | * Update Ingress-Nginx version controller-v1.12.0 9 | 10 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.11.0...helm-chart-4.12.0 11 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.12.1.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.12.1 6 | 7 | * Update Ingress-Nginx version controller-v1.12.1 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.12.0...helm-chart-4.12.1 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.7.2.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.7.2 6 | 7 | * Update Ingress-Nginx version controller-v1.8.2 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.7.1...helm-chart-4.7.2 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.8.1.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.8.1 6 | 7 | * Update Ingress-Nginx version controller-v1.9.1 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.8.0...helm-chart-4.8.1 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/changelog/helm-chart-4.8.3.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). 4 | 5 | ### 4.8.3 6 | 7 | * Update Ingress-Nginx version controller-v1.9.4 8 | 9 | **Full Changelog**: https://github.com/kubernetes/ingress-nginx/compare/helm-chart-4.8.2...helm-chart-4.8.3 10 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/admission-webhooks-cert-manager-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | admissionWebhooks: 11 | certManager: 12 | enabled: true 13 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-configmap-addheaders-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | addHeaders: 11 | X-Frame-Options: deny 12 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-configmap-proxyheaders-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | proxySetHeaders: 11 | X-Forwarded-Proto: https 12 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-configmap-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | config: 11 | use-proxy-protocol: "true" 12 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-daemonset-metrics-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | kind: DaemonSet 11 | 12 | metrics: 13 | enabled: true 14 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-daemonset-podannotations-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | kind: DaemonSet 11 | 12 | podAnnotations: 13 | prometheus.io/scrape: "true" 14 | prometheus.io/port: "10254" 15 | prometheus.io/scheme: http 16 | prometheus.io/path: /metrics 17 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-daemonset-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | kind: DaemonSet 11 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-deployment-metrics-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | kind: Deployment 11 | 12 | metrics: 13 | enabled: true 14 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-deployment-podannotations-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | kind: Deployment 11 | 12 | podAnnotations: 13 | prometheus.io/scrape: "true" 14 | prometheus.io/port: "10254" 15 | prometheus.io/scheme: http 16 | prometheus.io/path: /metrics 17 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-deployment-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | kind: Deployment 11 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-hpa-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | autoscaling: 11 | enabled: true 12 | behavior: 13 | scaleDown: 14 | stabilizationWindowSeconds: 300 15 | policies: 16 | - type: Pods 17 | value: 1 18 | periodSeconds: 180 19 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-ingressclass-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | ingressClassResource: 11 | name: custom-nginx 12 | default: true 13 | controllerValue: k8s.io/custom-nginx 14 | 15 | watchIngressWithoutClass: true 16 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-service-internal-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: ClusterIP 9 | 10 | internal: 11 | enabled: true 12 | annotations: 13 | service.beta.kubernetes.io/aws-load-balancer-internal: "true" 14 | -------------------------------------------------------------------------------- /charts/ingress-nginx/ci/controller-service-values.yaml: -------------------------------------------------------------------------------- 1 | controller: 2 | image: 3 | repository: ingress-controller/controller 4 | tag: 1.0.0-dev 5 | digest: null 6 | 7 | service: 8 | type: NodePort 9 | 10 | nodePorts: 11 | tcp: 12 | 9000: 30090 13 | udp: 14 | 9001: 30091 15 | 16 | portNamePrefix: port 17 | 18 | tcp: 19 | 9000: default/test:8080 20 | 21 | udp: 22 | 9001: default/test:8080 23 | -------------------------------------------------------------------------------- /charts/ingress-nginx/tests/admission-webhooks/job-patch/clusterrole_test.yaml: -------------------------------------------------------------------------------- 1 | suite: Admission Webhooks > Patch Job > ClusterRole 2 | templates: 3 | - admission-webhooks/job-patch/clusterrole.yaml 4 | 5 | tests: 6 | - it: should not create a ClusterRole if `controller.admissionWebhooks.patch.rbac.create` is false 7 | set: 8 | controller.admissionWebhooks.patch.rbac.create: false 9 | asserts: 10 | - hasDocuments: 11 | count: 0 12 | -------------------------------------------------------------------------------- /charts/ingress-nginx/tests/admission-webhooks/job-patch/clusterrolebinding_test.yaml: -------------------------------------------------------------------------------- 1 | suite: Admission Webhooks > Patch Job > ClusterRoleBinding 2 | templates: 3 | - admission-webhooks/job-patch/clusterrolebinding.yaml 4 | 5 | tests: 6 | - it: should not create a ClusterRoleBinding if `controller.admissionWebhooks.patch.rbac.create` is false 7 | set: 8 | controller.admissionWebhooks.patch.rbac.create: false 9 | asserts: 10 | - hasDocuments: 11 | count: 0 12 | -------------------------------------------------------------------------------- /charts/ingress-nginx/tests/admission-webhooks/job-patch/role_test.yaml: -------------------------------------------------------------------------------- 1 | suite: Admission Webhooks > Patch Job > Role 2 | templates: 3 | - admission-webhooks/job-patch/role.yaml 4 | 5 | tests: 6 | - it: should not create a Role if `controller.admissionWebhooks.patch.rbac.create` is false 7 | set: 8 | controller.admissionWebhooks.patch.rbac.create: false 9 | asserts: 10 | - hasDocuments: 11 | count: 0 12 | -------------------------------------------------------------------------------- /charts/ingress-nginx/tests/admission-webhooks/job-patch/rolebinding_test.yaml: -------------------------------------------------------------------------------- 1 | suite: Admission Webhooks > Patch Job > RoleBinding 2 | templates: 3 | - admission-webhooks/job-patch/rolebinding.yaml 4 | 5 | tests: 6 | - it: should not create a RoleBinding if `controller.admissionWebhooks.patch.rbac.create` is false 7 | set: 8 | controller.admissionWebhooks.patch.rbac.create: false 9 | asserts: 10 | - hasDocuments: 11 | count: 0 12 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [files/dashboards/*.json] 4 | indent_size = 2 5 | indent_style = space -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/crds/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: crds 3 | version: 0.0.0 4 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/crds/README.md: -------------------------------------------------------------------------------- 1 | # crds subchart 2 | 3 | See: [https://github.com/prometheus-community/helm-charts/issues/3548](https://github.com/prometheus-community/helm-charts/issues/3548) 4 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/grafana/ci/default-values.yaml: -------------------------------------------------------------------------------- 1 | # Leave this file empty to ensure that CI runs builds against the default configuration in values.yaml. 2 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/grafana/ci/with-extraconfigmapmounts-values.yaml: -------------------------------------------------------------------------------- 1 | extraConfigmapMounts: 2 | - name: '{{ include "grafana.fullname" . }}' 3 | configMap: '{{ include "grafana.fullname" . }}' 4 | mountPath: /var/lib/grafana/dashboards/test-dashboard.json 5 | # This is not a realistic test, but for this we only care about extraConfigmapMounts not being empty and pointing to an existing ConfigMap 6 | subPath: grafana.ini 7 | readOnly: true 8 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/grafana/ci/with-nondefault-values.yaml: -------------------------------------------------------------------------------- 1 | global: 2 | environment: prod 3 | ingress: 4 | enabled: true 5 | hosts: 6 | - monitoring-{{ .Values.global.environment }}.example.com 7 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/grafana/ci/with-persistence.yaml: -------------------------------------------------------------------------------- 1 | persistence: 2 | type: pvc 3 | enabled: true 4 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/grafana/dashboards/custom-dashboard.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/grafana/templates/extra-manifests.yaml: -------------------------------------------------------------------------------- 1 | {{ range .Values.extraObjects }} 2 | --- 3 | {{ tpl (toYaml .) $ }} 4 | {{ end }} 5 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/kube-state-metrics/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/kube-state-metrics/templates/extra-manifests.yaml: -------------------------------------------------------------------------------- 1 | {{ range .Values.extraManifests }} 2 | --- 3 | {{ tpl (toYaml .) $ }} 4 | {{ end }} 5 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/kube-state-metrics/templates/kubeconfig-secret.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.kubeconfig.enabled -}} 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: {{ template "kube-state-metrics.fullname" . }}-kubeconfig 6 | namespace: {{ template "kube-state-metrics.namespace" . }} 7 | labels: 8 | {{- include "kube-state-metrics.labels" . | indent 4 }} 9 | type: Opaque 10 | data: 11 | config: '{{ .Values.kubeconfig.secret }}' 12 | {{- end -}} 13 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-node-exporter/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-node-exporter/ci/common-labels-values.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | commonLabels: 3 | foo: bar 4 | baz: '{{ include "prometheus-node-exporter.fullname" . }}' 5 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-node-exporter/ci/default-values.yaml: -------------------------------------------------------------------------------- 1 | ## Default values test case 2 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-node-exporter/ci/networkpolicy-values.yaml: -------------------------------------------------------------------------------- 1 | networkPolicy: 2 | enabled: true 3 | ingress: 4 | - ports: 5 | - port: 9100 6 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-node-exporter/ci/pod-labels-values.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | podLabels: 3 | foo: bar 4 | baz: '{{ .Chart.AppVersion }}' 5 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-node-exporter/ci/port-values.yaml: -------------------------------------------------------------------------------- 1 | service: 2 | targetPort: 9102 3 | port: 9102 4 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-node-exporter/ci/service-labels-values.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | service: 3 | labels: 4 | foo: bar 5 | baz: quux 6 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-node-exporter/ci/serviceport-values.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | service: 3 | servicePort: 80 4 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-node-exporter/templates/extra-manifests.yaml: -------------------------------------------------------------------------------- 1 | {{ range .Values.extraManifests }} 2 | --- 3 | {{ tpl . $ }} 4 | {{ end }} 5 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/charts/prometheus-windows-exporter/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | {{ $.Chart.Name }} has been installed. Check its status by running: 2 | kubectl --namespace {{ template "kube-prometheus-stack.namespace" . }} get pods -l "release={{ $.Release.Name }}" 3 | 4 | Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator. 5 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/templates/extra-objects.yaml: -------------------------------------------------------------------------------- 1 | {{ range .Values.extraManifests }} 2 | --- 3 | {{ tpl (toYaml .) $ }} 4 | {{ end }} 5 | -------------------------------------------------------------------------------- /charts/kube-prometheus-stack/templates/prometheus-operator/_prometheus-operator.tpl: -------------------------------------------------------------------------------- 1 | {{/* Generate basic labels for prometheus-operator */}} 2 | {{- define "kube-prometheus-stack.prometheus-operator.labels" }} 3 | {{- include "kube-prometheus-stack.labels" . }} 4 | app: {{ template "kube-prometheus-stack.name" . }}-operator 5 | app.kubernetes.io/name: {{ template "kube-prometheus-stack.name" . }}-prometheus-operator 6 | app.kubernetes.io/component: prometheus-operator 7 | {{- end }} 8 | -------------------------------------------------------------------------------- /charts/loki/Chart.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: minio 3 | repository: https://charts.min.io/ 4 | version: 5.4.0 5 | - name: grafana-agent-operator 6 | repository: https://grafana.github.io/helm-charts 7 | version: 0.5.1 8 | - name: rollout-operator 9 | repository: https://grafana.github.io/helm-charts 10 | version: 0.24.0 11 | digest: sha256:beb08aeb31a1fa6b88c326b307c9960ca5fc5032892f7acd5deae6b859884638 12 | generated: "2025-02-26T01:09:19.861074559Z" 13 | -------------------------------------------------------------------------------- /charts/loki/charts/grafana-agent-operator/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /charts/loki/charts/grafana-agent-operator/templates/operator-serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ template "ga-operator.serviceAccountName" . }} 6 | namespace: {{ .Release.Namespace }} 7 | labels: 8 | {{ include "ga-operator.labels" . | indent 4 }} 9 | {{- end -}} 10 | 11 | -------------------------------------------------------------------------------- /charts/loki/charts/minio/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | # OWNERS file for Kubernetes 23 | OWNERS -------------------------------------------------------------------------------- /charts/loki/charts/minio/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | appVersion: RELEASE.2024-12-18T13-15-44Z 3 | description: High Performance Object Storage 4 | home: https://min.io 5 | icon: https://min.io/resources/img/logo/MINIO_wordmark.png 6 | keywords: 7 | - minio 8 | - storage 9 | - object-storage 10 | - s3 11 | - cluster 12 | maintainers: 13 | - email: dev@minio.io 14 | name: MinIO, Inc 15 | name: minio 16 | sources: 17 | - https://github.com/minio/minio 18 | version: 5.4.0 19 | -------------------------------------------------------------------------------- /charts/loki/charts/minio/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create }} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ .Values.serviceAccount.name | quote }} 6 | {{- end }} 7 | -------------------------------------------------------------------------------- /charts/loki/charts/rollout-operator/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /charts/loki/charts/rollout-operator/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | appVersion: v0.24.0 3 | description: Grafana rollout-operator 4 | home: https://github.com/grafana/rollout-operator 5 | kubeVersion: ^1.10.0-0 6 | name: rollout-operator 7 | type: application 8 | version: 0.24.0 9 | -------------------------------------------------------------------------------- /charts/loki/charts/rollout-operator/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | Repo : {{ .Chart.Home }} 2 | 3 | Validation: 4 | 5 | Check the logs of the pod and ensure messages for reconcilliation of the statefulsets are present. 6 | ``` 7 | kubectl logs -n {{ .Release.Namespace }} -l {{ include "cli.labels" . }} 8 | ``` 9 | Example log line: 10 | level=debug ts=2022-04-20T13:59:52.783051541Z msg="reconciling StatefulSet" statefulset=mimir-store-gateway-zone-a 11 | -------------------------------------------------------------------------------- /charts/loki/charts/rollout-operator/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "rollout-operator.serviceAccountName" . }} 6 | labels: 7 | {{- include "rollout-operator.labels" . | nindent 4 }} 8 | {{- with .Values.serviceAccount.annotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- end }} 13 | -------------------------------------------------------------------------------- /charts/loki/docs/examples/enterprise/enterprise-secrets.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: gel-secrets 5 | type: Opaque 6 | stringData: 7 | gcp_service_account.json: | 8 | { 9 | GCP_SERVICE_ACCOUNT_JSON_HERE 10 | } 11 | 12 | license.jwt: LICENSE_HERE 13 | -------------------------------------------------------------------------------- /charts/loki/docs/examples/oss/oss-secrets.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: loki-secrets 5 | type: Opaque 6 | stringData: 7 | gcp_service_account.json: | 8 | { 9 | GCP_SERVICE_ACCOUNT_JSON_HERE 10 | } -------------------------------------------------------------------------------- /charts/loki/scenarios/default-values.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | loki: 3 | commonConfig: 4 | replication_factor: 1 5 | useTestSchema: true 6 | storage: 7 | bucketNames: 8 | chunks: chunks 9 | ruler: ruler 10 | admin: admin 11 | read: 12 | replicas: 1 13 | write: 14 | replicas: 1 15 | backend: 16 | replicas: 1 17 | -------------------------------------------------------------------------------- /charts/loki/src/.yamllint.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | rules: 3 | quoted-strings: 4 | required: true 5 | -------------------------------------------------------------------------------- /charts/loki/templates/chunks-cache/service-chunks-cache-headless.yaml: -------------------------------------------------------------------------------- 1 | {{- include "loki.memcached.service" (dict "ctx" $ "valuesSection" "chunksCache" "component" "chunks-cache" ) }} 2 | -------------------------------------------------------------------------------- /charts/loki/templates/chunks-cache/statefulset-chunks-cache.yaml: -------------------------------------------------------------------------------- 1 | {{- include "loki.memcached.statefulSet" (dict "ctx" $ "valuesSection" "chunksCache" "component" "chunks-cache" ) }} 2 | -------------------------------------------------------------------------------- /charts/loki/templates/extra-manifests.yaml: -------------------------------------------------------------------------------- 1 | {{- range .Values.extraObjects }} 2 | --- 3 | {{- if kindIs "map" . }} 4 | {{ tpl (toYaml .) $ }} 5 | {{- else }} 6 | {{ tpl . $ }} 7 | {{- end }} 8 | {{- end }} 9 | -------------------------------------------------------------------------------- /charts/loki/templates/gateway/configmap-gateway.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.gateway.enabled (not (and .Values.enterprise.enabled .Values.enterprise.gelGateway)) }} 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: {{ include "loki.gatewayFullname" . }} 6 | namespace: {{ $.Release.Namespace }} 7 | labels: 8 | {{- include "loki.gatewayLabels" . | nindent 4 }} 9 | data: 10 | nginx.conf: | 11 | {{- tpl .Values.gateway.nginxConfig.file . | indent 2 }} 12 | {{- end }} 13 | -------------------------------------------------------------------------------- /charts/loki/templates/gateway/secret-gateway.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.gateway }} 2 | {{- if and .enabled .basicAuth.enabled (not .basicAuth.existingSecret) }} 3 | apiVersion: v1 4 | kind: Secret 5 | metadata: 6 | name: {{ include "loki.gatewayFullname" $ }} 7 | namespace: {{ $.Release.Namespace }} 8 | labels: 9 | {{- include "loki.gatewayLabels" $ | nindent 4 }} 10 | stringData: 11 | .htpasswd: | 12 | {{- tpl .basicAuth.htpasswd $ | nindent 4 }} 13 | {{- end }} 14 | {{- end }} 15 | -------------------------------------------------------------------------------- /charts/loki/templates/monitoring/dashboards/_helpers-dashboards.tpl: -------------------------------------------------------------------------------- 1 | {{/* 2 | dashboards name 3 | */}} 4 | {{- define "loki.dashboardsName" -}} 5 | {{ include "loki.name" . }}-dashboards 6 | {{- end }} 7 | -------------------------------------------------------------------------------- /charts/loki/templates/results-cache/service-results-cache-headless.yaml: -------------------------------------------------------------------------------- 1 | {{- include "loki.memcached.service" (dict "ctx" $ "valuesSection" "resultsCache" "component" "results-cache" ) }} 2 | -------------------------------------------------------------------------------- /charts/loki/templates/results-cache/statefulset-results-cache.yaml: -------------------------------------------------------------------------------- 1 | {{- include "loki.memcached.statefulSet" (dict "ctx" $ "valuesSection" "resultsCache" "component" "results-cache" ) }} 2 | -------------------------------------------------------------------------------- /charts/loki/templates/runtime-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "loki.name" . }}-runtime 5 | namespace: {{ $.Release.Namespace }} 6 | labels: 7 | {{- include "loki.labels" . | nindent 4 }} 8 | data: 9 | runtime-config.yaml: | 10 | {{- tpl (toYaml .Values.loki.runtimeConfig) . | nindent 4 }} 11 | -------------------------------------------------------------------------------- /charts/loki/templates/secret-license.yaml: -------------------------------------------------------------------------------- 1 | {{- if and (not .Values.enterprise.useExternalLicense) .Values.enterprise.enabled -}} 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: enterprise-logs-license 6 | namespace: {{ $.Release.Namespace }} 7 | labels: 8 | {{- include "loki.labels" . | nindent 4 }} 9 | data: 10 | license.jwt: {{ .Values.enterprise.license.contents | b64enc }} 11 | {{- end }} 12 | -------------------------------------------------------------------------------- /charts/loki/templates/tests/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* 2 | Docker image name for loki helm test 3 | */}} 4 | {{- define "loki.helmTestImage" -}} 5 | {{- $dict := dict "service" .Values.test.image "global" .Values.global.image "defaultVersion" "latest" -}} 6 | {{- include "loki.baseImage" $dict -}} 7 | {{- end -}} 8 | 9 | 10 | {{/* 11 | test common labels 12 | */}} 13 | {{- define "loki.helmTestLabels" -}} 14 | {{ include "loki.labels" . }} 15 | app.kubernetes.io/component: helm-test 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /charts/prometheus-adapter/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /charts/prometheus-adapter/ci/default-values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/charts/prometheus-adapter/ci/default-values.yaml -------------------------------------------------------------------------------- /charts/prometheus-adapter/ci/external-rules-values.yaml: -------------------------------------------------------------------------------- 1 | rules: 2 | external: 3 | - seriesQuery: '{__name__=~"^some_metric_count$"}' 4 | resources: 5 | template: <<.Resource>> 6 | name: 7 | matches: "" 8 | as: "my_custom_metric" 9 | metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>) 10 | -------------------------------------------------------------------------------- /charts/prometheus-adapter/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | {{ template "k8s-prometheus-adapter.fullname" . }} has been deployed. 2 | In a few minutes you should be able to list metrics using the following command(s): 3 | {{ if .Values.rules.resource }} 4 | kubectl get --raw /apis/metrics.k8s.io/v1beta1 5 | {{- end }} 6 | kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1 7 | {{ if .Values.rules.external }} 8 | kubectl get --raw /apis/external.metrics.k8s.io/v1beta1 9 | {{- end }} 10 | -------------------------------------------------------------------------------- /charts/prometheus-adapter/templates/extra-objects.yaml: -------------------------------------------------------------------------------- 1 | {{ range .Values.extraManifests }} 2 | --- 3 | {{ tpl (toYaml .) $ }} 4 | {{ end }} 5 | -------------------------------------------------------------------------------- /charts/thanos/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /charts/thanos/requirements.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/charts/thanos/requirements.yaml -------------------------------------------------------------------------------- /charts/thanos/templates/NOTES.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/charts/thanos/templates/NOTES.txt -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore images generated from UML diagrams 2 | *.png 3 | *.svg 4 | 5 | # Don't ignore images to include in docs 6 | !/installation/img/**/*.png 7 | !/operation/volume_management/img/**/*.png 8 | 9 | /_build/ 10 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # MetalK8s documentation 2 | 3 | Please see the [documentation index](./index.rst). 4 | 5 | 6 | [//]: # (TODO: link to a hosted docs website, since GH doesn't render Sphinx) 7 | -------------------------------------------------------------------------------- /docs/build.cmd: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eE 2 | :<<"::batch" 3 | @echo off 4 | .\docs\make.bat %* 5 | goto :end 6 | ::batch 7 | make -C docs $* 8 | exit $? 9 | :<<"::done" 10 | :end 11 | ::done 12 | -------------------------------------------------------------------------------- /docs/developer/architecture/img/GlobalHealthCpnt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/architecture/img/GlobalHealthCpnt.png -------------------------------------------------------------------------------- /docs/developer/architecture/img/alertes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/architecture/img/alertes.jpg -------------------------------------------------------------------------------- /docs/developer/architecture/img/metalk8s-overview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/architecture/img/metalk8s-overview.jpg -------------------------------------------------------------------------------- /docs/developer/architecture/img/navdeck.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/architecture/img/navdeck.jpg -------------------------------------------------------------------------------- /docs/developer/architecture/img/nodes-page-options.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/architecture/img/nodes-page-options.jpg -------------------------------------------------------------------------------- /docs/developer/architecture/img/nodes-view.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/architecture/img/nodes-view.jpg -------------------------------------------------------------------------------- /docs/developer/architecture/img/overview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/architecture/img/overview.jpg -------------------------------------------------------------------------------- /docs/developer/architecture/img/useAlertHistoryDesign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/architecture/img/useAlertHistoryDesign.png -------------------------------------------------------------------------------- /docs/developer/architecture/img/volumes-view.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/architecture/img/volumes-view.jpg -------------------------------------------------------------------------------- /docs/developer/architecture/index.rst: -------------------------------------------------------------------------------- 1 | Architecture Documents 2 | ====================== 3 | 4 | .. toctree:: 5 | 6 | alert-history 7 | alerting 8 | alert-grouping 9 | authentication 10 | centralized-cli 11 | ci 12 | configurations 13 | control-plane-ingress 14 | deployment 15 | interaction-with-k8s-from-salt 16 | logs 17 | shell-ui 18 | metalk8s-ui 19 | monitoring 20 | requirements 21 | solutions 22 | volume 23 | -------------------------------------------------------------------------------- /docs/developer/building/index.rst: -------------------------------------------------------------------------------- 1 | How to build MetalK8s 2 | ===================== 3 | 4 | .. toctree:: 5 | 6 | requirements 7 | building 8 | configuration 9 | features 10 | -------------------------------------------------------------------------------- /docs/developer/deploy/index.rst: -------------------------------------------------------------------------------- 1 | Deploy new MetalK8s image 2 | ========================= 3 | 4 | .. toctree:: 5 | 6 | upgrade 7 | -------------------------------------------------------------------------------- /docs/developer/development/best_practices/index.rst: -------------------------------------------------------------------------------- 1 | Development Best Practices 2 | ========================== 3 | 4 | .. toctree:: 5 | 6 | commit 7 | python 8 | -------------------------------------------------------------------------------- /docs/developer/development/index.rst: -------------------------------------------------------------------------------- 1 | Development 2 | =========== 3 | 4 | .. toctree:: 5 | 6 | testing/index 7 | best_practices/index 8 | -------------------------------------------------------------------------------- /docs/developer/development/testing/index.rst: -------------------------------------------------------------------------------- 1 | Developing Tests 2 | ================ 3 | 4 | .. toctree:: 5 | 6 | ci 7 | formulas-unit 8 | -------------------------------------------------------------------------------- /docs/developer/index.rst: -------------------------------------------------------------------------------- 1 | Developer Guide 2 | =============== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | architecture/index 8 | building/index 9 | running/index 10 | deploy/index 11 | development/index 12 | solutions/index 13 | tools/index 14 | -------------------------------------------------------------------------------- /docs/developer/running/index.rst: -------------------------------------------------------------------------------- 1 | How to run components locally 2 | ============================= 3 | 4 | .. toctree:: 5 | 6 | cluster 7 | storage_operator 8 | ui 9 | -------------------------------------------------------------------------------- /docs/developer/solutions/index.rst: -------------------------------------------------------------------------------- 1 | Integrating with MetalK8s 2 | ========================= 3 | 4 | .. toctree:: 5 | 6 | introduction 7 | archive 8 | operator 9 | deploy 10 | -------------------------------------------------------------------------------- /docs/developer/tools/lib-alert-tree/examples/.gitignore: -------------------------------------------------------------------------------- 1 | /__pycache__ 2 | 3 | !/example_output.png 4 | -------------------------------------------------------------------------------- /docs/developer/tools/lib-alert-tree/examples/example_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/developer/tools/lib-alert-tree/examples/example_output.png -------------------------------------------------------------------------------- /docs/installation/img/bootstrap-remove-taints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/bootstrap-remove-taints.png -------------------------------------------------------------------------------- /docs/installation/img/bootstrap-single-node-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/bootstrap-single-node-arch.png -------------------------------------------------------------------------------- /docs/installation/img/compact-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/compact-arch.png -------------------------------------------------------------------------------- /docs/installation/img/custom-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/custom-arch.png -------------------------------------------------------------------------------- /docs/installation/img/extended-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/extended-arch.png -------------------------------------------------------------------------------- /docs/installation/img/standard-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/standard-arch.png -------------------------------------------------------------------------------- /docs/installation/img/ui/click-create-node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/ui/click-create-node.png -------------------------------------------------------------------------------- /docs/installation/img/ui/click-node-deploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/ui/click-node-deploy.png -------------------------------------------------------------------------------- /docs/installation/img/ui/click-node-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/ui/click-node-list.png -------------------------------------------------------------------------------- /docs/installation/img/ui/deployment-progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/ui/deployment-progress.png -------------------------------------------------------------------------------- /docs/installation/img/ui/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/ui/login.png -------------------------------------------------------------------------------- /docs/installation/img/ui/monitoring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/ui/monitoring.png -------------------------------------------------------------------------------- /docs/installation/img/ui/notification-node-created.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/installation/img/ui/notification-node-created.png -------------------------------------------------------------------------------- /docs/operation/cluster_monitoring/index.rst: -------------------------------------------------------------------------------- 1 | Cluster Monitoring 2 | ================== 3 | 4 | This section covers the MetalK8s monitoring and alerting stack operations. 5 | It also describes the metrics monitored using Prometheus, with the list 6 | of pre-configured alerting and recording rules. 7 | 8 | .. toctree:: 9 | 10 | monitoring_stack 11 | alerting 12 | prometheus 13 | -------------------------------------------------------------------------------- /docs/operation/disaster_recovery/index.rst: -------------------------------------------------------------------------------- 1 | Disaster Recovery 2 | ================= 3 | 4 | This section offers a series of recovery operations such as the 5 | backup and restoration of the MetalK8s bootstrap node. 6 | 7 | .. toctree:: 8 | 9 | bootstrap_backup_restore 10 | -------------------------------------------------------------------------------- /docs/operation/troubleshooting/account_administration_errors.rst: -------------------------------------------------------------------------------- 1 | Account Administration Errors 2 | ============================= 3 | 4 | Forgot the MetalK8s GUI Password 5 | -------------------------------- 6 | 7 | If you forget the MetalK8s GUI user name or password, 8 | refer to :ref:`Changing Static User Password ` 9 | to reset or change your credentials. 10 | -------------------------------------------------------------------------------- /docs/operation/troubleshooting/index.rst: -------------------------------------------------------------------------------- 1 | .. _Troubleshooting Operation Guide: 2 | 3 | Troubleshooting 4 | =============== 5 | 6 | This section covers some of the common issues users face during and 7 | after a MetalK8s operation. 8 | 9 | .. include:: ../../troubleshooting-get-support.rst 10 | 11 | .. toctree:: 12 | 13 | account_administration_errors 14 | general_kubernetes_resource_errors 15 | -------------------------------------------------------------------------------- /docs/operation/volume_management/img/node_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/operation/volume_management/img/node_list.png -------------------------------------------------------------------------------- /docs/operation/volume_management/img/volume_creation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/operation/volume_management/img/volume_creation.png -------------------------------------------------------------------------------- /docs/operation/volume_management/img/volume_delete_confirmation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/operation/volume_management/img/volume_delete_confirmation.png -------------------------------------------------------------------------------- /docs/operation/volume_management/img/volume_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/operation/volume_management/img/volume_list.png -------------------------------------------------------------------------------- /docs/operation/volume_management/img/volume_overview_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/operation/volume_management/img/volume_overview_delete.png -------------------------------------------------------------------------------- /docs/operation/volume_management/img/volume_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/docs/operation/volume_management/img/volume_tab.png -------------------------------------------------------------------------------- /docs/operation/volume_management/index.rst: -------------------------------------------------------------------------------- 1 | .. _volume-management: 2 | 3 | Volume Management 4 | ================= 5 | 6 | This section covers MetalK8s volume management operations, from 7 | creating a StorageClass, to creating and deleting a volume using 8 | the CLI or the UI. Volumes enable the use of persistent data 9 | storage within a MetalK8s Cluster. 10 | 11 | .. toctree:: 12 | 13 | storageclass_creation 14 | volume_creation_deletion_cli 15 | volume_creation_deletion_gui 16 | -------------------------------------------------------------------------------- /docs/spelling-wordlist.txt: -------------------------------------------------------------------------------- 1 | Quickstart 2 | -------------------------------------------------------------------------------- /docs/toctree.rst.j2: -------------------------------------------------------------------------------- 1 | .. toctree:: 2 | :maxdepth: 2 3 | :caption: Contents: 4 | 5 | installation/index 6 | operation/index 7 | {%- if metadata.mode == "development" or metadata.on_readthedocs %} 8 | developer/index 9 | {%- endif %} 10 | glossary 11 | -------------------------------------------------------------------------------- /doit.cfg: -------------------------------------------------------------------------------- 1 | [GLOBAL] 2 | dodoFile = buildchain/dodo.py 3 | -------------------------------------------------------------------------------- /go/solution-operator-lib/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/scality/metalk8s/go/solution-operator-lib 2 | 3 | go 1.13 4 | 5 | require ( 6 | github.com/stretchr/testify v1.6.1 7 | gopkg.in/yaml.v2 v2.3.0 8 | ) 9 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/error-bad-format.txt: -------------------------------------------------------------------------------- 1 | This is not valid YAML, 2 | unfortunately. 3 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/invalid-bad-version.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: solutions.metalk8s.scality.com/v1alpha1 2 | kind: OperatorConfig 3 | repositories: 4 | "": 5 | - endpoint: docker.io/grafana 6 | images: 7 | - grafana:6.7.4 8 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/invalid-empty-version.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: solutions.metalk8s.scality.com/v1alpha1 2 | kind: OperatorConfig 3 | repositories: 4 | 1.0.0: [] 5 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/invalid-no-apiversion.yaml: -------------------------------------------------------------------------------- 1 | kind: OperatorConfig 2 | repositories: {} 3 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/invalid-no-kind.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: solutions.metalk8s.scality.com/v1alpha1 2 | repositories: {} 3 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/invalid-no-repository.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: solutions.metalk8s.scality.com/v1alpha1 2 | kind: OperatorConfig 3 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/invalid-repository-bad-image.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: solutions.metalk8s.scality.com/v1alpha1 2 | kind: OperatorConfig 3 | repositories: 4 | 1.0.0: 5 | - endpoint: docker.io/grafana 6 | images: 7 | - "" 8 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/invalid-repository-no-endpoint.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: solutions.metalk8s.scality.com/v1alpha1 2 | kind: OperatorConfig 3 | repositories: 4 | 1.0.0: 5 | - images: 6 | - grafana:6.7.4 7 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/invalid-wrong-apiversion.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: unknown.com/v1 2 | kind: OperatorConfig 3 | repositories: {} 4 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/invalid-wrong-kind.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: solutions.metalk8s.scality.com/v1alpha1 2 | kind: InvalidKind 3 | repositories: {} 4 | -------------------------------------------------------------------------------- /go/solution-operator-lib/pkg/config/testdata/online-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: solutions.metalk8s.scality.com/v1alpha1 2 | kind: OperatorConfig 3 | repositories: 4 | 1.0.0: 5 | - endpoint: docker.io/grafana 6 | images: 7 | - grafana:6.7.4 8 | - endpoint: docker.io/prom 9 | images: 10 | - prometheus:v2.16.0 11 | - endpoint: docker.io/bitnami 12 | images: 13 | - prometheus-operator:v0.38.1 14 | -------------------------------------------------------------------------------- /images/metalk8s-alert-logger/go.mod: -------------------------------------------------------------------------------- 1 | module metalk8s-alert-logger 2 | 3 | go 1.24 4 | 5 | require github.com/prometheus/alertmanager @@ALERTMANAGER_VERSION@@ 6 | -------------------------------------------------------------------------------- /images/metalk8s-keepalived/check-get.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -xue -o pipefail 4 | 5 | TIMEOUT=2 6 | 7 | curl --insecure --silent --max-time "$TIMEOUT" \ 8 | --output /dev/null --show-error --fail \ 9 | "$1" 10 | -------------------------------------------------------------------------------- /images/metalk8s-keepalived/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -xue -o pipefail 4 | 5 | /generate-config.py --input "$1" --template "/etc/keepalived/keepalived.conf.j2" --output "/etc/keepalived/keepalived.conf" 6 | 7 | exec keepalived \ 8 | --log-console --log-detail \ 9 | --dont-fork --dont-respawn \ 10 | --address-monitoring \ 11 | --dump-conf --use-file "/etc/keepalived/keepalived.conf" 12 | -------------------------------------------------------------------------------- /images/metalk8s-keepalived/liveness-probe.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -xue -o pipefail 4 | 5 | # Simple check to ensure that the config does not need to be updated 6 | /generate-config.py --input /etc/keepalived/keepalived-input.yaml --template /etc/keepalived/keepalived.conf.j2 | diff -qw /etc/keepalived/keepalived.conf - -------------------------------------------------------------------------------- /images/metalk8s-ui/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG NGINX_IMAGE_VERSION=1.15.8 2 | 3 | FROM nginx:${NGINX_IMAGE_VERSION} 4 | 5 | COPY metalk8s-ui-nginx.conf /etc/nginx/conf.d/default.conf 6 | 7 | RUN rm -rf /usr/share/nginx/html/* 8 | 9 | COPY ui /usr/share/nginx/html/ 10 | COPY docs/html /usr/share/nginx/html/docs 11 | COPY shell-ui /usr/share/nginx/html/shell 12 | 13 | CMD ["nginx", "-g", "daemon off;"] 14 | -------------------------------------------------------------------------------- /operator/.dockerignore: -------------------------------------------------------------------------------- 1 | # More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file 2 | # Ignore build and test binaries. 3 | bin/ 4 | testbin/ 5 | -------------------------------------------------------------------------------- /operator/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Binaries for programs and plugins 3 | *.exe 4 | *.exe~ 5 | *.dll 6 | *.so 7 | *.dylib 8 | bin 9 | testbin/* 10 | 11 | # Test binary, build with `go test -c` 12 | *.test 13 | 14 | # Output of the go coverage tool, specifically when used with LiteIDE 15 | *.out 16 | 17 | # Kubernetes Generated files - skip generated files, except for vendored files 18 | 19 | !vendor/**/zz_generated.* 20 | 21 | # editor and IDE paraphernalia 22 | .idea 23 | *.swp 24 | *.swo 25 | *~ 26 | -------------------------------------------------------------------------------- /operator/api/v1alpha1/v1alpha1_suite_test.go: -------------------------------------------------------------------------------- 1 | package v1alpha1_test 2 | 3 | import ( 4 | "testing" 5 | 6 | . "github.com/onsi/ginkgo/v2" 7 | . "github.com/onsi/gomega" 8 | ) 9 | 10 | func TestUtils(t *testing.T) { 11 | RegisterFailHandler(Fail) 12 | RunSpecs(t, "Utils Test Suite") 13 | } 14 | -------------------------------------------------------------------------------- /operator/config/crd/patches/cainjection_in_clusterconfigs.yaml: -------------------------------------------------------------------------------- 1 | # The following patch adds a directive for certmanager to inject CA into the CRD 2 | apiVersion: apiextensions.k8s.io/v1 3 | kind: CustomResourceDefinition 4 | metadata: 5 | annotations: 6 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 7 | name: clusterconfigs.metalk8s.scality.com 8 | -------------------------------------------------------------------------------- /operator/config/crd/patches/cainjection_in_virtualippools.yaml: -------------------------------------------------------------------------------- 1 | # The following patch adds a directive for certmanager to inject CA into the CRD 2 | apiVersion: apiextensions.k8s.io/v1 3 | kind: CustomResourceDefinition 4 | metadata: 5 | annotations: 6 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 7 | name: virtualippools.metalk8s.scality.com 8 | -------------------------------------------------------------------------------- /operator/config/default/manager_metrics_patch.yaml: -------------------------------------------------------------------------------- 1 | # This patch adds the args to allow exposing the metrics endpoint using HTTPS 2 | - op: add 3 | path: /spec/template/spec/containers/0/args/0 4 | value: --metrics-bind-address=:8443 5 | -------------------------------------------------------------------------------- /operator/config/default/metrics_service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | control-plane: controller-manager 6 | app.kubernetes.io/name: operator 7 | app.kubernetes.io/managed-by: kustomize 8 | name: controller-manager-metrics-service 9 | namespace: system 10 | spec: 11 | ports: 12 | - name: https 13 | port: 8443 14 | protocol: TCP 15 | targetPort: 8443 16 | selector: 17 | control-plane: controller-manager 18 | -------------------------------------------------------------------------------- /operator/config/manager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manager.yaml 3 | apiVersion: kustomize.config.k8s.io/v1beta1 4 | kind: Kustomization 5 | images: 6 | - name: controller 7 | newName: controller 8 | newTag: latest 9 | -------------------------------------------------------------------------------- /operator/config/metalk8s/delete_ns.yaml: -------------------------------------------------------------------------------- 1 | $patch: delete 2 | apiVersion: v1 3 | kind: Namespace 4 | metadata: 5 | name: system 6 | -------------------------------------------------------------------------------- /operator/config/prometheus/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - monitor.yaml 3 | -------------------------------------------------------------------------------- /operator/config/rbac/leader_election_role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: operator 6 | app.kubernetes.io/managed-by: kustomize 7 | name: leader-election-rolebinding 8 | roleRef: 9 | apiGroup: rbac.authorization.k8s.io 10 | kind: Role 11 | name: leader-election-role 12 | subjects: 13 | - kind: ServiceAccount 14 | name: controller-manager 15 | namespace: system 16 | -------------------------------------------------------------------------------- /operator/config/rbac/metrics_auth_role.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: metrics-auth-role 5 | rules: 6 | - apiGroups: 7 | - authentication.k8s.io 8 | resources: 9 | - tokenreviews 10 | verbs: 11 | - create 12 | - apiGroups: 13 | - authorization.k8s.io 14 | resources: 15 | - subjectaccessreviews 16 | verbs: 17 | - create 18 | -------------------------------------------------------------------------------- /operator/config/rbac/metrics_auth_role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | name: metrics-auth-rolebinding 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: ClusterRole 8 | name: metrics-auth-role 9 | subjects: 10 | - kind: ServiceAccount 11 | name: controller-manager 12 | namespace: system 13 | -------------------------------------------------------------------------------- /operator/config/rbac/metrics_reader_role.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: metrics-reader 5 | rules: 6 | - nonResourceURLs: 7 | - "/metrics" 8 | verbs: 9 | - get 10 | -------------------------------------------------------------------------------- /operator/config/rbac/role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: operator 6 | app.kubernetes.io/managed-by: kustomize 7 | name: manager-rolebinding 8 | roleRef: 9 | apiGroup: rbac.authorization.k8s.io 10 | kind: ClusterRole 11 | name: manager-role 12 | subjects: 13 | - kind: ServiceAccount 14 | name: controller-manager 15 | namespace: system 16 | -------------------------------------------------------------------------------- /operator/config/rbac/service_account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: operator 6 | app.kubernetes.io/managed-by: kustomize 7 | name: controller-manager 8 | namespace: system 9 | -------------------------------------------------------------------------------- /operator/config/rbac/virtualippool_viewer_role.yaml: -------------------------------------------------------------------------------- 1 | # permissions for end users to view virtualippools. 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: ClusterRole 4 | metadata: 5 | name: virtualippool-viewer-role 6 | rules: 7 | - apiGroups: 8 | - metalk8s.scality.com 9 | resources: 10 | - virtualippools 11 | verbs: 12 | - get 13 | - list 14 | - watch 15 | - apiGroups: 16 | - metalk8s.scality.com 17 | resources: 18 | - virtualippools/status 19 | verbs: 20 | - get 21 | -------------------------------------------------------------------------------- /operator/config/samples/_v1alpha1_clusterconfig.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: metalk8s.scality.com/v1alpha1 2 | kind: ClusterConfig 3 | metadata: 4 | name: clusterconfig-sample 5 | spec: 6 | # TODO(user): Add fields here 7 | -------------------------------------------------------------------------------- /operator/config/samples/_v1alpha1_virtualippool.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: metalk8s.scality.com/v1alpha1 2 | kind: VirtualIPPool 3 | metadata: 4 | name: virtualippool-sample 5 | spec: 6 | # TODO(user): Add fields here 7 | -------------------------------------------------------------------------------- /operator/config/samples/kustomization.yaml: -------------------------------------------------------------------------------- 1 | ## Append samples you want in your CSV to this file as resources ## 2 | resources: 3 | - _v1alpha1_clusterconfig.yaml 4 | - _v1alpha1_virtualippool.yaml 5 | #+kubebuilder:scaffold:manifestskustomizesamples 6 | -------------------------------------------------------------------------------- /operator/config/scorecard/bases/config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: scorecard.operatorframework.io/v1alpha3 2 | kind: Configuration 3 | metadata: 4 | name: config 5 | stages: 6 | - parallel: true 7 | tests: [] 8 | -------------------------------------------------------------------------------- /operator/config/scorecard/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - bases/config.yaml 3 | patchesJson6902: 4 | - path: patches/basic.config.yaml 5 | target: 6 | group: scorecard.operatorframework.io 7 | version: v1alpha3 8 | kind: Configuration 9 | name: config 10 | - path: patches/olm.config.yaml 11 | target: 12 | group: scorecard.operatorframework.io 13 | version: v1alpha3 14 | kind: Configuration 15 | name: config 16 | #+kubebuilder:scaffold:patchesJson6902 17 | -------------------------------------------------------------------------------- /operator/config/scorecard/patches/basic.config.yaml: -------------------------------------------------------------------------------- 1 | - op: add 2 | path: /stages/0/tests/- 3 | value: 4 | entrypoint: 5 | - scorecard-test 6 | - basic-check-spec 7 | image: quay.io/operator-framework/scorecard-test:unknown 8 | labels: 9 | suite: basic 10 | test: basic-check-spec-test 11 | -------------------------------------------------------------------------------- /operator/pkg/controller/utils/utils_suite_test.go: -------------------------------------------------------------------------------- 1 | package utils_test 2 | 3 | import ( 4 | "testing" 5 | 6 | . "github.com/onsi/ginkgo/v2" 7 | . "github.com/onsi/gomega" 8 | ) 9 | 10 | func TestUtils(t *testing.T) { 11 | RegisterFailHandler(Fail) 12 | RunSpecs(t, "Utils Test Suite") 13 | } 14 | -------------------------------------------------------------------------------- /operator/version/version.go: -------------------------------------------------------------------------------- 1 | package version 2 | 3 | // This variable is filled out at build time 4 | var Version = "unknown" 5 | -------------------------------------------------------------------------------- /packages/common/metalk8s-sosreport/.pylintrc: -------------------------------------------------------------------------------- 1 | [MESSAGES CONTROL] 2 | 3 | disable=duplicate-code 4 | -------------------------------------------------------------------------------- /packages/redhat/common/containerd.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=containerd container runtime 3 | Documentation=https://containerd.io 4 | After=network.target 5 | 6 | [Service] 7 | ExecStartPre=/sbin/modprobe overlay 8 | ExecStart=/usr/bin/containerd 9 | Delegate=yes 10 | KillMode=process 11 | 12 | [Install] 13 | WantedBy=multi-user.target 14 | -------------------------------------------------------------------------------- /packages/redhat/common/containerd.toml: -------------------------------------------------------------------------------- 1 | #root = "/var/lib/containerd" 2 | #state = "/run/containerd" 3 | #subreaper = true 4 | #oom_score = 0 5 | 6 | #[grpc] 7 | # address = "/run/containerd/containerd.sock" 8 | # uid = 0 9 | # gid = 0 10 | 11 | #[debug] 12 | # address = "/run/containerd/debug.sock" 13 | # uid = 0 14 | # gid = 0 15 | # level = "info" 16 | -------------------------------------------------------------------------------- /packages/redhat/common/rpmlintrc: -------------------------------------------------------------------------------- 1 | addFilter("metalk8s-sosreport.x86_64: W: no-url-tag") 2 | addFilter("metalk8s-sosreport.x86_64: E: no-binary") 3 | addFilter("metalk8s-sosreport.x86_64: W: no-documentation") 4 | addFilter("metalk8s-sosreport.x86_64: E: script-without-shebang") 5 | -------------------------------------------------------------------------------- /packages/redhat/common/yum_repositories/kubernetes.repo: -------------------------------------------------------------------------------- 1 | [kubernetes] 2 | name=Kubernetes 3 | baseurl=https://pkgs.k8s.io/core:/stable:/v@K8S_SHORT_VERSION@/rpm/ 4 | enabled=1 5 | gpgcheck=1 6 | gpgkey=https://pkgs.k8s.io/core:/stable:/v@K8S_SHORT_VERSION@/rpm/repodata/repomd.xml.key 7 | -------------------------------------------------------------------------------- /packages/redhat/common/yum_repositories/saltstack.repo: -------------------------------------------------------------------------------- 1 | [saltstack] 2 | name=Scality SaltStack repo for RHEL/CentOS $releasever 3 | baseurl=https://downloads.scality.com/repository/redhat/$releasever/saltstack/@SALT_VERSION@ 4 | enabled=1 5 | gpgcheck=1 6 | gpgkey=https://downloads.scality.com/repository/redhat/$releasever/saltstack/@SALT_VERSION@/SALTSTACK-GPG-KEY.pub 7 | -------------------------------------------------------------------------------- /pillar/metalk8s/roles/etcd.sls: -------------------------------------------------------------------------------- 1 | certificates: 2 | client: 3 | files: 4 | etcd-healthcheck: 5 | watched: True 6 | kubeconfig: 7 | files: 8 | kubelet: 9 | watched: True 10 | server: 11 | files: 12 | etcd-peer: 13 | watched: True 14 | etcd: 15 | watched: True 16 | -------------------------------------------------------------------------------- /pillar/metalk8s/roles/minion.sls: -------------------------------------------------------------------------------- 1 | mine_functions: 2 | control_plane_ip: 3 | - mine_function: grains.get 4 | - metalk8s:control_plane_ip 5 | workload_plane_ip: 6 | - mine_function: grains.get 7 | - metalk8s:workload_plane_ip 8 | -------------------------------------------------------------------------------- /pillar/metalk8s/roles/node.sls: -------------------------------------------------------------------------------- 1 | certificates: 2 | kubeconfig: 3 | files: 4 | kubelet: 5 | watched: True 6 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/alert-logger/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.addons.prometheus-operator.deployed.namespace 3 | - .service 4 | - .deployment 5 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/alert-tree/deployed.sls: -------------------------------------------------------------------------------- 1 | Define the full hierarchy of logical alerts for MetalK8s and the systems underneath: 2 | metalk8s_kubernetes.object_present: 3 | - name: salt://{{ slspath }}/files/prometheus_rule.yaml 4 | - template: null 5 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/cert-manager/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .namespace 3 | - .chart 4 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/cert-manager/deployed/namespace.sls: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | 3 | apiVersion: v1 4 | kind: Namespace 5 | metadata: 6 | name: metalk8s-certs 7 | labels: 8 | app.kubernetes.io/managed-by: salt 9 | app.kubernetes.io/part-of: metalk8s 10 | heritage: metalk8s 11 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/dex/ca/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage Dex Certificate Authority 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> install and advertise as Dex CA 8 | # * advertised -> deploy the Dex CA certificate 9 | # 10 | include: 11 | - .installed 12 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/dex/certs/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .server 3 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/dex/deployed/clusterrolebinding.sls: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | 3 | apiVersion: rbac.authorization.k8s.io/v1 4 | kind: ClusterRoleBinding 5 | metadata: 6 | name: dex-administrator 7 | subjects: 8 | - kind: User 9 | name: "oidc:admin@metalk8s.invalid" 10 | apiGroup: rbac.authorization.k8s.io 11 | roleRef: 12 | kind: ClusterRole 13 | name: cluster-admin 14 | apiGroup: rbac.authorization.k8s.io 15 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/dex/deployed/namespace.sls: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | 3 | apiVersion: v1 4 | kind: Namespace 5 | metadata: 6 | name: metalk8s-auth 7 | labels: 8 | app.kubernetes.io/managed-by: salt 9 | app.kubernetes.io/part-of: metalk8s 10 | heritage: metalk8s 11 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/logging/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .namespace 3 | - metalk8s.addons.logging.loki.deployed 4 | - metalk8s.addons.logging.fluent-bit.deployed 5 | - metalk8s.addons.prometheus-operator.deployed.namespace -------------------------------------------------------------------------------- /salt/metalk8s/addons/logging/deployed/namespace.sls: -------------------------------------------------------------------------------- 1 | #! metalk8s_kubernetes 2 | 3 | apiVersion: v1 4 | kind: Namespace 5 | metadata: 6 | name: metalk8s-logging 7 | labels: 8 | app.kubernetes.io/managed-by: metalk8s 9 | app.kubernetes.io/part-of: metalk8s 10 | heritage: metalk8s 11 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/logging/loki/deployed/dashboards.sls: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | {%- from "metalk8s/addons/prometheus-operator/macros.j2" 3 | import configmaps_from_dashboards with context %} 4 | 5 | {{ configmaps_from_dashboards([ 6 | { 7 | 'name': 'logs', 8 | 'title': 'Logs', 9 | 'tags': ['logging'], 10 | }, 11 | { 12 | 'name': 'loki', 13 | 'title': 'Loki', 14 | 'tags': ['logging'], 15 | } 16 | ]) }} -------------------------------------------------------------------------------- /salt/metalk8s/addons/metalk8s-operator/deployed/manifests.sls.in: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | {%- from "metalk8s/repo/macro.sls" import build_image_name with context %} 3 | 4 | @@Manifests 5 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/nginx-ingress-control-plane/certs/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .server 3 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/nginx-ingress-control-plane/config/ingress-controller.yaml.j2: -------------------------------------------------------------------------------- 1 | #!jinja|yaml 2 | 3 | # Defaults for configuration of Ingress Controller 4 | apiVersion: addons.metalk8s.scality.com/v1alpha2 5 | kind: IngressControllerConfig 6 | spec: 7 | config: 8 | allow-snippet-annotations: 'true' 9 | annotations-risk-level: 'Critical' 10 | hide-headers: 'Server,X-Powered-By' 11 | ssl-ciphers: 'EECDH+AESGCM:EDH+AESGCM' 12 | ssl-protocols: 'TLSv1.2 TLSv1.3' 13 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/nginx-ingress-control-plane/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.addons.nginx-ingress.deployed.namespace 3 | - .tls-secret 4 | - .chart 5 | - .service-configuration 6 | - .config-map 7 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/nginx-ingress/ca/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage self-signed Ingress Certificate Authority 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> install and advertise as Ingress CA 8 | # * advertised -> deploy the Ingress CA certificate 9 | # 10 | 11 | include: 12 | - .installed 13 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/nginx-ingress/certs/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .server 3 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/nginx-ingress/config/ingress-controller.yaml.j2: -------------------------------------------------------------------------------- 1 | #!jinja|yaml 2 | 3 | # Defaults for configuration of Ingress Controller 4 | apiVersion: addons.metalk8s.scality.com/v1alpha2 5 | kind: IngressControllerConfig 6 | spec: 7 | config: 8 | allow-snippet-annotations: 'true' 9 | annotations-risk-level: 'Critical' 10 | hide-headers: 'Server,X-Powered-By' 11 | ssl-ciphers: 'EECDH+AESGCM:EDH+AESGCM' 12 | ssl-protocols: 'TLSv1.2 TLSv1.3' 13 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/nginx-ingress/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .namespace 3 | - .tls-secret 4 | - .chart 5 | - metalk8s.addons.prometheus-operator.deployed.namespace 6 | - .dashboards 7 | - .service-configuration 8 | - .config-map 9 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/nginx-ingress/deployed/namespace.sls: -------------------------------------------------------------------------------- 1 | #! metalk8s_kubernetes 2 | 3 | apiVersion: v1 4 | kind: Namespace 5 | metadata: 6 | name: metalk8s-ingress 7 | labels: 8 | app.kubernetes.io/managed-by: metalk8s 9 | app.kubernetes.io/part-of: metalk8s 10 | heritage: metalk8s 11 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/prometheus-adapter/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.addons.prometheus-operator.deployed.namespace 3 | - .chart 4 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/prometheus-operator/deployed/dashboards.sls: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | {%- from "metalk8s/addons/prometheus-operator/macros.j2" 3 | import configmaps_from_dashboards with context %} 4 | 5 | {{ configmaps_from_dashboards([ 6 | { 7 | 'name': 'node-exporter-full', 8 | 'title': 'Nodes (Detailed)', 9 | 'tags': ['nodes'], 10 | }, 11 | ]) }} 12 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/prometheus-operator/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - ...storageclass.deployed 3 | - .namespace 4 | - .alertmanager-configuration-secret 5 | - .grafana-ini-configmap 6 | - .dashboards 7 | - .service-configuration 8 | - .chart 9 | - .node-alerts-rules 10 | - .kube-alerts-rules 11 | - .thanos-query-sd-files 12 | - .thanos-chart 13 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/prometheus-operator/deployed/namespace.sls: -------------------------------------------------------------------------------- 1 | #! metalk8s_kubernetes 2 | 3 | apiVersion: v1 4 | kind: Namespace 5 | metadata: 6 | name: metalk8s-monitoring 7 | labels: 8 | app.kubernetes.io/managed-by: metalk8s 9 | app.kubernetes.io/part-of: metalk8s 10 | heritage: metalk8s 11 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/prometheus-operator/deployed/thanos-query-sd-files.sls: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | 3 | {% raw %} 4 | 5 | apiVersion: v1 6 | kind: ConfigMap 7 | metadata: 8 | name: thanos-query-sd-files 9 | namespace: metalk8s-monitoring 10 | labels: 11 | app.kubernetes.io/component: query 12 | app.kubernetes.io/instance: thanos 13 | 14 | {% endraw %} 15 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/prometheus-operator/post-downgrade.sls: -------------------------------------------------------------------------------- 1 | # Include here all states that should be called after downgrading 2 | 3 | include: 4 | - .post-cleanup 5 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/prometheus-operator/post-upgrade.sls: -------------------------------------------------------------------------------- 1 | # Include here all states that should be called after upgrading 2 | 3 | include: 4 | - .post-cleanup 5 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/solutions/deployed/configmap.sls: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | 3 | {%- set data = {} %} 4 | {%- set solutions = pillar.get('metalk8s', {}).get('solutions', {}).get('available', {}) %} 5 | {%- for solution, versions in solutions.items() %} 6 | {%- do data.update({solution: versions | tojson}) %} 7 | {%- endfor %} 8 | 9 | apiVersion: v1 10 | kind: ConfigMap 11 | metadata: 12 | name: metalk8s-solutions 13 | namespace: metalk8s-solutions 14 | data: {{ data | tojson }} 15 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/solutions/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .namespace 3 | - .configmap 4 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/solutions/deployed/namespace.sls: -------------------------------------------------------------------------------- 1 | #!metalk8s_kubernetes 2 | 3 | apiVersion: v1 4 | kind: Namespace 5 | metadata: 6 | name: metalk8s-solutions 7 | labels: 8 | app.kubernetes.io/managed-by: metalk8s 9 | app.kubernetes.io/part-of: metalk8s 10 | heritage: metalk8s 11 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/ui/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .namespace 3 | - .dependencies 4 | - .ui-configuration 5 | - .ui 6 | - .ingress 7 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/ui/deployed/namespace.sls: -------------------------------------------------------------------------------- 1 | #! metalk8s_kubernetes 2 | 3 | kind: Namespace 4 | apiVersion: v1 5 | metadata: 6 | name: metalk8s-ui 7 | labels: 8 | app.kubernetes.io/managed-by: salt 9 | app.kubernetes.io/part-of: metalk8s 10 | heritage: metalk8s 11 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/ui/post-upgrade.sls: -------------------------------------------------------------------------------- 1 | Delete old prometheus proxy service: 2 | metalk8s_kubernetes.object_absent: 3 | - apiVersion: v1 4 | - kind: Service 5 | - name: prometheus-api 6 | - namespace: metalk8s-ui 7 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/volumes/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .manifests 3 | -------------------------------------------------------------------------------- /salt/metalk8s/addons/volumes/deployed/manifests.sls.in: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | {%- from "metalk8s/repo/macro.sls" import build_image_name with context %} 3 | 4 | @@Manifests 5 | -------------------------------------------------------------------------------- /salt/metalk8s/archives/configured.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.salt.master.configured 3 | - metalk8s.repo.configured 4 | -------------------------------------------------------------------------------- /salt/metalk8s/archives/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .mounted 3 | - metalk8s.repo.installed 4 | - metalk8s.salt.master 5 | -------------------------------------------------------------------------------- /salt/metalk8s/backup/configured.sls: -------------------------------------------------------------------------------- 1 | Schedule daily backup: 2 | schedule.present: 3 | - function: metalk8s.backup_node 4 | - seconds: 86400 5 | -------------------------------------------------------------------------------- /salt/metalk8s/backup/deployed/configmap-ca-cert.sls: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | 3 | {%- set ca_cert = salt.file.read('/etc/metalk8s/pki/backup-server/ca.crt') %} 4 | 5 | apiVersion: v1 6 | kind: ConfigMap 7 | metadata: 8 | name: backup-ca-cert 9 | namespace: kube-system 10 | labels: 11 | app.kubernetes.io/name: backup 12 | app.kubernetes.io/part-of: metalk8s 13 | app.kubernetes.io/managed-by: salt 14 | data: 15 | ca.crt: |- 16 | {{ ca_cert | indent(4, False) }} 17 | -------------------------------------------------------------------------------- /salt/metalk8s/backup/deployed/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .configmap-ca-cert 3 | - .configmap-nginx-config 4 | - .secret-tls 5 | - .secret-credentials 6 | - .networkpolicy 7 | - .deployment 8 | - .service 9 | -------------------------------------------------------------------------------- /salt/metalk8s/backup/deployed/service.sls: -------------------------------------------------------------------------------- 1 | #!jinja | metalk8s_kubernetes 2 | 3 | apiVersion: v1 4 | kind: Service 5 | metadata: 6 | name: backup 7 | namespace: kube-system 8 | labels: 9 | app.kubernetes.io/name: backup 10 | app.kubernetes.io/part-of: metalk8s 11 | app.kubernetes.io/managed-by: salt 12 | spec: 13 | selector: 14 | app.kubernetes.io/name: backup 15 | ports: 16 | - name: https 17 | protocol: TCP 18 | port: 443 19 | targetPort: https 20 | -------------------------------------------------------------------------------- /salt/metalk8s/container-engine/containerd/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .installed 3 | -------------------------------------------------------------------------------- /salt/metalk8s/container-engine/init.sls: -------------------------------------------------------------------------------- 1 | {%- from "metalk8s/map.jinja" import kubelet with context %} 2 | 3 | {%- if kubelet.container_engine %} 4 | 5 | include: 6 | - .{{ kubelet.container_engine }} 7 | 8 | {%- else %} 9 | 10 | No container engine to configure: 11 | test.succeed_without_changes 12 | 13 | {%- endif %} 14 | -------------------------------------------------------------------------------- /salt/metalk8s/deployed/core.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.kubernetes.kube-proxy.deployed 3 | - metalk8s.kubernetes.cni.calico.deployed 4 | - metalk8s.kubernetes.coredns.deployed 5 | - metalk8s.kubernetes.admin.deployed 6 | - metalk8s.repo.deployed 7 | - metalk8s.salt.master.deployed 8 | - metalk8s.backup.deployed 9 | - metalk8s.addons.metalk8s-operator.deployed 10 | -------------------------------------------------------------------------------- /salt/metalk8s/internal/bootstrap/post-upgrade.sls: -------------------------------------------------------------------------------- 1 | Update Bootstrap config: 2 | metalk8s.bootstrap_config_updated 3 | -------------------------------------------------------------------------------- /salt/metalk8s/internal/m2crypto/absent.sls: -------------------------------------------------------------------------------- 1 | Remove m2crypto: 2 | pkg.removed: 3 | - name: m2crypto 4 | - reload_modules: true 5 | -------------------------------------------------------------------------------- /salt/metalk8s/internal/m2crypto/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # Install m2crypto to manage x509 certs 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> Install m2crypto 8 | # * absent -> Uninstall m2crypto 9 | # 10 | include: 11 | - .installed 12 | -------------------------------------------------------------------------------- /salt/metalk8s/internal/m2crypto/installed.sls: -------------------------------------------------------------------------------- 1 | {%- from "metalk8s/macro.sls" import pkg_installed with context %} 2 | 3 | include: 4 | - metalk8s.repo 5 | 6 | Install m2crypto: 7 | {{ pkg_installed('m2crypto') }} 8 | - require: 9 | - test: Repositories configured 10 | -------------------------------------------------------------------------------- /salt/metalk8s/internal/preflight/recommended.sls: -------------------------------------------------------------------------------- 1 | {%- from "metalk8s/macro.sls" import pkg_installed with context %} 2 | {%- from "metalk8s/map.jinja" import kubeadm_preflight with context %} 3 | 4 | include: 5 | - metalk8s.repo 6 | 7 | {%- for pkg_name in kubeadm_preflight.recommended.packages %} 8 | Install recommended package "{{ pkg_name }}": 9 | {{ pkg_installed(pkg_name) }} 10 | - require: 11 | - test: Repositories configured 12 | {%- endfor %} 13 | -------------------------------------------------------------------------------- /salt/metalk8s/kubectl/configured.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .installed 3 | 4 | Create kubectl bash completion file: 5 | file.managed: 6 | - name: /etc/bash_completion.d/kubectl 7 | - contents: __slot__:salt:cmd.run('kubectl completion bash') 8 | - makedirs: True 9 | - dir_mode: '0755' 10 | - mode: '0644' 11 | - user: root 12 | - group: root 13 | - require: 14 | - metalk8s_package_manager: Install kubectl 15 | -------------------------------------------------------------------------------- /salt/metalk8s/kubectl/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage kubectl. 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> Ensure kubectl is installed 8 | # * configured -> Configure bash completion for kubectl 9 | # 10 | 11 | include: 12 | - .configured 13 | -------------------------------------------------------------------------------- /salt/metalk8s/kubectl/installed.sls: -------------------------------------------------------------------------------- 1 | {%- from "metalk8s/macro.sls" import pkg_installed with context %} 2 | 3 | include : 4 | - metalk8s.repo 5 | 6 | Install kubectl: 7 | {{ pkg_installed('kubectl') }} 8 | - require: 9 | - test: Repositories configured 10 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/apiserver-proxy/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .installed 3 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/apiserver/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage API server deployment 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> deploy apiserver manifest 8 | # * kubeconfig -> create admin kubeconfig file 9 | # * cryptconfig -> create apiserver encryption configuration 10 | # 11 | include: 12 | - .installed 13 | - .kubeconfig 14 | - .cryptconfig 15 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/ca/advertised.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .kubernetes.advertised 3 | - .etcd.advertised 4 | - .front-proxy.advertised 5 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/ca/etcd/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage etcd CA server 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> install and advertise as CA server 8 | # * advertised -> deploy the etcd CA certificate 9 | # 10 | include: 11 | - .installed 12 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/ca/front-proxy/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage front-proxy CA server 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> install and advertise as CA server 8 | # * advertised -> deploy the front-proxy CA certificate 9 | # 10 | include: 11 | - .installed 12 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/ca/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage all kubernetes CA server 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * kubernetes -> manage kubernetes CA 8 | # * etcd -> manage etcd CA 9 | # * front-proxy -> manage front-proxy CA 10 | include: 11 | - .kubernetes 12 | - .etcd 13 | - .front-proxy 14 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/ca/kubernetes/exported.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .installed 3 | 4 | Advertise CA certificate in the mine: 5 | module.wait: 6 | - mine.send: 7 | - kubernetes_root_ca_b64 8 | - mine_function: hashutil.base64_encodefile 9 | - /etc/kubernetes/pki/ca.crt 10 | - watch: 11 | - x509: Generate CA certificate 12 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/ca/kubernetes/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage kubernetes CA server 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> install as CA server 8 | # * exported -> export the CA certificate in the mine 9 | # * advertised -> deploy the kubernetes CA certificate 10 | # 11 | include: 12 | - .exported 13 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/controller-manager/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage Controller Manager deployment 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> deploy controller-manager manifest 8 | # * kubeconfig -> create controller-manager kubeconfig file 9 | # 10 | include: 11 | - .installed 12 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/etcd/certs/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage etcd certs signed by the etcd CA server 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * healthcheck-client -> generate etcd healthcheck client key and certificate 8 | # * peer -> generate etcd peer key and certificate 9 | # * server -> generate etcd server key and certificate 10 | include: 11 | - .healthcheck-client 12 | - .peer 13 | - .server 14 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/etcd/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage etcd deployment 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * prepared -> setup etcd dependencies 8 | # * installed -> deploy etcd manifest 9 | # 10 | include: 11 | - .prepared 12 | - .installed 13 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/etcd/prepared.sls: -------------------------------------------------------------------------------- 1 | {%- from "metalk8s/repo/macro.sls" import build_image_name with context %} 2 | 3 | include: 4 | - metalk8s.kubernetes.ca.etcd.advertised 5 | - .certs 6 | 7 | Pre-pull the etcd image: 8 | containerd.image_managed: 9 | - name: {{ build_image_name('etcd') }} 10 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/kubelet/files/kubeadm.env.j2: -------------------------------------------------------------------------------- 1 | # Environment file generated by MetalK8s 2 | KUBELET_KUBEADM_ARGS={% for key, value in options.items() %}--{{ key }}={{ value }} {% endfor %} 3 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/kubelet/installed.sls: -------------------------------------------------------------------------------- 1 | {%- from "metalk8s/macro.sls" import pkg_installed with context %} 2 | {%- from "metalk8s/map.jinja" import kubelet with context %} 3 | 4 | include: 5 | - metalk8s.repo 6 | - metalk8s.container-engine 7 | 8 | Install kubelet: 9 | {{ pkg_installed('kubelet') }} 10 | - require: 11 | - test: Repositories configured 12 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/kubelet/running.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .installed 3 | 4 | Ensure kubelet running: 5 | service.running: 6 | - name: kubelet 7 | - enable: True 8 | - watch: 9 | - metalk8s_package_manager: Install kubelet 10 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/sa/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage SA keys 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> install and advertise SA keys 8 | # * advertised -> deploy the SA public key 9 | # 10 | include: 11 | - .installed 12 | -------------------------------------------------------------------------------- /salt/metalk8s/kubernetes/scheduler/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to manage Scheduler deployment 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # * installed -> deploy scheduler manifest 8 | # * kubeconfig -> create scheduler kubeconfig file 9 | # 10 | include: 11 | - .installed 12 | -------------------------------------------------------------------------------- /salt/metalk8s/orchestrate/downgrade/post.sls: -------------------------------------------------------------------------------- 1 | # Include here all states that should be called after downgrading 2 | 3 | include: 4 | - metalk8s.addons.prometheus-operator.post-downgrade 5 | -------------------------------------------------------------------------------- /salt/metalk8s/orchestrate/downgrade/pre.sls: -------------------------------------------------------------------------------- 1 | # Include here all states that should be called before downgrading 2 | # NOTE: This state should be called by salt-master using the saltenv of 3 | # the current version (salt-master should not have been downgraded yet) 4 | 5 | Nothing to do before downgrading: 6 | test.nop: [] 7 | -------------------------------------------------------------------------------- /salt/metalk8s/orchestrate/upgrade/post.sls: -------------------------------------------------------------------------------- 1 | # Include here all states that should be called after upgrading 2 | 3 | include: 4 | - metalk8s.addons.prometheus-operator.post-upgrade 5 | - metalk8s.addons.ui.post-upgrade 6 | 7 | Post upgrade on Bootstrap: 8 | salt.state: 9 | - sls: 10 | - metalk8s.internal.bootstrap.post-upgrade 11 | - tgt: {{ salt['metalk8s.minions_by_role']('bootstrap') | first }} 12 | - saltenv: {{ saltenv }} 13 | - sync_mods: all 14 | -------------------------------------------------------------------------------- /salt/metalk8s/repo/files/metalk8s-registry-config.inc.j2: -------------------------------------------------------------------------------- 1 | {%- for env in archives.keys() %} 2 | set ${{ env | replace('.', '_') | replace('-', '_') }}_images "/srv/scality/{{ env }}/images/"; 3 | {%- endfor %} 4 | -------------------------------------------------------------------------------- /salt/metalk8s/repo/files/nginx.conf.j2: -------------------------------------------------------------------------------- 1 | server { 2 | listen {{ listening_address }}:{{ listening_port }}; 3 | server_name localhost; 4 | 5 | location / { 6 | root /var/www/repositories; 7 | autoindex on; 8 | } 9 | 10 | include conf.d/*.inc; 11 | } 12 | -------------------------------------------------------------------------------- /salt/metalk8s/repo/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .{{ grains['os_family'] | lower }} 3 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/bootstrap/absent.sls: -------------------------------------------------------------------------------- 1 | Uninstall bootstrap: 2 | test.succeed_without_changes 3 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/bootstrap/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .local 3 | - metalk8s.kubernetes.kubelet 4 | - metalk8s.salt.master 5 | - metalk8s.utils 6 | - metalk8s.backup.configured 7 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/bootstrap/local.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.archives.mounted 3 | - metalk8s.kubernetes.kubelet.standalone 4 | - metalk8s.internal.preflight 5 | - metalk8s.repo.installed 6 | - metalk8s.salt.master.certs.salt-api 7 | - metalk8s.salt.master.installed 8 | - metalk8s.kubectl 9 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/ca/absent.sls: -------------------------------------------------------------------------------- 1 | Uninstall CA: 2 | test.succeed_without_changes 3 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/ca/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.kubernetes.ca 3 | - metalk8s.kubernetes.sa 4 | - metalk8s.addons.nginx-ingress.ca 5 | {%- if pillar.addons.dex.enabled %} 6 | - metalk8s.addons.dex.ca 7 | {%- endif %} 8 | - metalk8s.backup.certs.ca 9 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/etcd/absent.sls: -------------------------------------------------------------------------------- 1 | Uninstall etcd member: 2 | test.succeed_without_changes 3 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/etcd/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.roles.node 3 | - metalk8s.kubernetes.etcd 4 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/infra/absent.sls: -------------------------------------------------------------------------------- 1 | Uninstall infra node: 2 | test.succeed_without_changes 3 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/infra/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.roles.node 3 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/internal/early-stage-bootstrap.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.kubernetes.ca.kubernetes.installed 3 | - metalk8s.roles.bootstrap.local 4 | - metalk8s.roles.minion 5 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/master/absent.sls: -------------------------------------------------------------------------------- 1 | Uninstall control plane node: 2 | test.succeed_without_changes 3 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/master/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.roles.node 3 | - metalk8s.kubernetes.apiserver 4 | - metalk8s.kubernetes.controller-manager 5 | - metalk8s.kubernetes.scheduler 6 | - metalk8s.kubectl 7 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/minion/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.salt.minion.configured 3 | - metalk8s.sreport.installed 4 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/node/absent.sls: -------------------------------------------------------------------------------- 1 | Uninstall workload plane node: 2 | test.succeed_without_changes 3 | -------------------------------------------------------------------------------- /salt/metalk8s/roles/node/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - metalk8s.node.grains 3 | - metalk8s.kubernetes.kubelet 4 | - metalk8s.kubernetes.apiserver-proxy 5 | - metalk8s.internal.preflight 6 | - metalk8s.beacon.certificates 7 | -------------------------------------------------------------------------------- /salt/metalk8s/salt/master/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .certs 3 | - .kubeconfig 4 | - .configured 5 | - .installed 6 | -------------------------------------------------------------------------------- /salt/metalk8s/salt/minion/files/minion-99-metalk8s.conf.j2: -------------------------------------------------------------------------------- 1 | master: {{ master_hostname }} 2 | id: {{ minion_id }} 3 | 4 | retry_dns_count: 5 5 | enable_fqdns_grains: false 6 | 7 | grains_cache: true 8 | 9 | # use new module.run format 10 | use_superseded: 11 | - module.run 12 | 13 | log_level_logfile: {{ 'debug' if debug else 'info' }} 14 | 15 | saltenv: {{ saltenv }} 16 | -------------------------------------------------------------------------------- /salt/metalk8s/salt/minion/restart.sls: -------------------------------------------------------------------------------- 1 | Restart salt-minion: 2 | cmd.wait: # noqa: 213 3 | - order: last 4 | - name: 'salt-call --local service.restart salt-minion > /dev/null' 5 | - bg: True 6 | -------------------------------------------------------------------------------- /salt/metalk8s/sreport/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .installed 3 | -------------------------------------------------------------------------------- /salt/metalk8s/sreport/installed.sls: -------------------------------------------------------------------------------- 1 | {%- from "metalk8s/macro.sls" import pkg_installed with context %} 2 | 3 | include: 4 | - metalk8s.repo 5 | 6 | Install sos report and custom plugins: 7 | {{ pkg_installed('metalk8s-sosreport') }} 8 | - require: 9 | - test: Repositories configured 10 | -------------------------------------------------------------------------------- /salt/metalk8s/utils/httpd-tools/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # 3 | # Available states 4 | # ================ 5 | # 6 | # * installed -> install the given utility 7 | # 8 | # 9 | # 10 | 11 | include: 12 | - .installed 13 | -------------------------------------------------------------------------------- /salt/metalk8s/utils/httpd-tools/installed.sls: -------------------------------------------------------------------------------- 1 | {%- from "metalk8s/macro.sls" import pkg_installed with context %} 2 | 3 | include: 4 | - metalk8s.repo 5 | 6 | Install httpd-tools: 7 | {{ pkg_installed('httpd-tools') }} 8 | - require: 9 | - test: Repositories configured 10 | -------------------------------------------------------------------------------- /salt/metalk8s/utils/init.sls: -------------------------------------------------------------------------------- 1 | # 2 | # State to install utilities . 3 | # 4 | # Available states 5 | # ================ 6 | # 7 | # 8 | 9 | include: 10 | - .httpd-tools 11 | -------------------------------------------------------------------------------- /salt/metalk8s/volumes/init.sls: -------------------------------------------------------------------------------- 1 | include: 2 | - .prepared 3 | -------------------------------------------------------------------------------- /salt/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/salt/tests/__init__.py -------------------------------------------------------------------------------- /salt/tests/conftest.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/salt/tests/conftest.py -------------------------------------------------------------------------------- /salt/tests/pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | markers = 3 | formulas: mark formulas rendering tests (deselect with '-m "not formulas"') 4 | -------------------------------------------------------------------------------- /salt/tests/requirements.in: -------------------------------------------------------------------------------- 1 | pytest 2 | pytest-cov 3 | salt == 3002.9 4 | mock == 3.0.5 5 | parameterized == 0.7.4 6 | etcd3 != 0.11.0 7 | kubernetes == 30.1.0 8 | urllib3 9 | pyfakefs 10 | psutil 11 | -------------------------------------------------------------------------------- /salt/tests/unit/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/salt/tests/unit/__init__.py -------------------------------------------------------------------------------- /salt/tests/unit/conftest.py: -------------------------------------------------------------------------------- 1 | import os.path 2 | import sys 3 | 4 | # Add our Salt module directory to the python path 5 | sys.path.insert( 6 | 0, 7 | os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), 8 | ) 9 | -------------------------------------------------------------------------------- /salt/tests/unit/formulas/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/salt/tests/unit/formulas/__init__.py -------------------------------------------------------------------------------- /salt/tests/unit/formulas/fixtures/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/salt/tests/unit/formulas/fixtures/__init__.py -------------------------------------------------------------------------------- /salt/tests/unit/formulas/paths.py: -------------------------------------------------------------------------------- 1 | """Expose constant paths for use in tests and fixture definitions.""" 2 | 3 | from pathlib import Path 4 | 5 | # /salt/tests/unit/formulas 6 | BASE_DIR = Path(__file__).parent.resolve() 7 | 8 | # /salt/tests/unit/formulas/data 9 | DATA_DIR = BASE_DIR / "data" 10 | 11 | # 12 | REPO_ROOT = (BASE_DIR / "../../../../").resolve() 13 | 14 | # /salt 15 | SALT_DIR = REPO_ROOT / "salt" 16 | -------------------------------------------------------------------------------- /salt/tests/unit/mocks/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/salt/tests/unit/mocks/__init__.py -------------------------------------------------------------------------------- /shell-ui/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | build/ 3 | -------------------------------------------------------------------------------- /shell-ui/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | @mf-types 4 | build_ts/ 5 | -------------------------------------------------------------------------------- /shell-ui/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "tabWidth": 2, 4 | "trailingComma": "all" 5 | } 6 | -------------------------------------------------------------------------------- /shell-ui/babel.config.js: -------------------------------------------------------------------------------- 1 | if (process.env.NODE_ENV === 'test') { 2 | module.exports = { 3 | presets: [ 4 | '@babel/preset-env', 5 | '@babel/preset-typescript', 6 | [ 7 | '@babel/preset-react', 8 | { 9 | runtime: 'automatic', 10 | }, 11 | ], 12 | ], 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /shell-ui/index-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /shell-ui/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | transformIgnorePatterns: [ 3 | '/node_modules/(?!vega-lite|@scality|pretty-bytes)', 4 | ], 5 | setupFilesAfterEnv: ['./src/setupTests.ts'], 6 | clearMocks: true, 7 | moduleNameMapper: { 8 | '\\.(css|less)$': 'identity-obj-proxy', 9 | }, 10 | testEnvironment: 'jsdom', 11 | }; 12 | -------------------------------------------------------------------------------- /shell-ui/public/brand/assets/fonts/lato/Lato-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/shell-ui/public/brand/assets/fonts/lato/Lato-Bold.woff -------------------------------------------------------------------------------- /shell-ui/public/brand/assets/fonts/lato/Lato-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/shell-ui/public/brand/assets/fonts/lato/Lato-Bold.woff2 -------------------------------------------------------------------------------- /shell-ui/public/brand/assets/fonts/lato/Lato-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/shell-ui/public/brand/assets/fonts/lato/Lato-Regular.woff -------------------------------------------------------------------------------- /shell-ui/public/brand/assets/fonts/lato/Lato-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/shell-ui/public/brand/assets/fonts/lato/Lato-Regular.woff2 -------------------------------------------------------------------------------- /shell-ui/public/mockServiceWorker.js: -------------------------------------------------------------------------------- 1 | // This file will be filled with a script to run msw mocked URLs in order to facilitate development of new features which lack backend at the moment 2 | -------------------------------------------------------------------------------- /shell-ui/public/shell/deployed-ui-apps.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "kind": "metalk8s-ui", 4 | "name": "metalk8s.eu-west-1", 5 | "version": "local-dev", 6 | "url": "http://localhost:3000", 7 | "appHistoryBasePath": "" 8 | } 9 | ] 10 | -------------------------------------------------------------------------------- /shell-ui/src/QueryClientProvider.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | QueryClient, 3 | QueryClientProvider as BaseQueryClientProvider, 4 | } from 'react-query'; 5 | 6 | export const QueryClientProvider = 7 | BaseQueryClientProvider as React.ComponentType<{ 8 | client: QueryClient; 9 | contextSharing?: boolean; 10 | children?: React.ReactNode; 11 | }>; 12 | -------------------------------------------------------------------------------- /shell-ui/src/alerts/alertContext.ts: -------------------------------------------------------------------------------- 1 | import { createContext } from 'react'; 2 | 3 | export const AlertContext = createContext(null); 4 | -------------------------------------------------------------------------------- /shell-ui/src/alerts/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AlertProvider'; 2 | export * from './alertHooks'; -------------------------------------------------------------------------------- /shell-ui/src/index.tsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from 'react-dom/client'; 2 | import App from './FederatedApp'; 3 | 4 | const rootElement = document.getElementById('app'); 5 | 6 | if (rootElement) { 7 | const root = createRoot(rootElement); 8 | root.render(); 9 | } 10 | -------------------------------------------------------------------------------- /shell-ui/src/navbar/__TESTS__/utils.ts: -------------------------------------------------------------------------------- 1 | import { screen, waitForElementToBeRemoved } from '@testing-library/react'; 2 | export const waitForLoadingToFinish = () => 3 | waitForElementToBeRemoved( 4 | () => [ 5 | ...screen.queryAllByLabelText(/loading/i), 6 | ...screen.queryAllByText(/loading/i), 7 | ], 8 | { 9 | timeout: 4000, 10 | }, 11 | ); -------------------------------------------------------------------------------- /shell-ui/src/navbar/auth/logout.ts: -------------------------------------------------------------------------------- 1 | import { UserManager } from 'oidc-react'; 2 | export function logOut(userManager?: UserManager, providerLogout?: boolean) { 3 | if (userManager) { 4 | userManager.revokeTokens(); 5 | 6 | if (providerLogout) { 7 | userManager.signoutRedirect(); 8 | } else { 9 | userManager.removeUser(); 10 | location.reload(); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /shell-ui/src/navbar/events.ts: -------------------------------------------------------------------------------- 1 | const EVENTS_PREFIX = 'solutions-navbar--'; 2 | export const AUTHENTICATED_EVENT: string = EVENTS_PREFIX + 'authenticated'; 3 | export const LANGUAGE_CHANGED_EVENT: string = 4 | EVENTS_PREFIX + 'language-changed'; 5 | export const THEME_CHANGED_EVENT: string = EVENTS_PREFIX + 'theme-changed'; -------------------------------------------------------------------------------- /shell-ui/src/navbar/favicon.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | export const useFavicon = (favicon: string) => { 3 | useEffect(() => { 4 | const link: HTMLLinkElement = 5 | document.querySelector("link[rel*='icon']") || 6 | document.createElement('link'); 7 | link.type = 'image/x-icon'; 8 | link.rel = 'shortcut icon'; 9 | link.href = favicon; 10 | document.getElementsByTagName('head')[0].appendChild(link); 11 | }, [favicon]); 12 | }; 13 | -------------------------------------------------------------------------------- /shell-ui/src/navbar/navbarContext.ts: -------------------------------------------------------------------------------- 1 | import { createContext } from 'react'; 2 | import type { Navbar } from './navbarHooks'; 3 | import './navbarHooks'; 4 | 5 | export const NavbarContext = createContext(null); 6 | -------------------------------------------------------------------------------- /shell-ui/src/navbar/translations/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "sign-out": "Log Out" 3 | } 4 | -------------------------------------------------------------------------------- /shell-ui/src/navbar/translations/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "sign-out": "Déconnexion" 3 | } 4 | -------------------------------------------------------------------------------- /shell-ui/src/platform/library.ts: -------------------------------------------------------------------------------- 1 | import packageJson from '../../package.json'; 2 | const { version } = packageJson; 3 | import * as k8s from './service/k8s'; 4 | // @ts-expect-error - FIXME when you are working on it 5 | window.shellUIPlatform = { 6 | ///spread shellUI to keep all versions libraries 7 | // @ts-expect-error - FIXME when you are working on it 8 | ...window.shellUIPlatform, 9 | [version]: k8s, 10 | }; 11 | -------------------------------------------------------------------------------- /shell-ui/src/styled.d.ts: -------------------------------------------------------------------------------- 1 | import { CoreUITheme } from '@scality/core-ui/dist/style/theme'; 2 | import 'styled-components'; 3 | 4 | declare module 'styled-components' { 5 | export interface DefaultTheme extends CoreUITheme {} 6 | } 7 | -------------------------------------------------------------------------------- /storage-operator/.dockerignore: -------------------------------------------------------------------------------- 1 | # More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file 2 | # Ignore build and test binaries. 3 | bin/ 4 | testbin/ 5 | -------------------------------------------------------------------------------- /storage-operator/config/crd/patches/cainjection_in_volumes.yaml: -------------------------------------------------------------------------------- 1 | # The following patch adds a directive for certmanager to inject CA into the CRD 2 | apiVersion: apiextensions.k8s.io/v1 3 | kind: CustomResourceDefinition 4 | metadata: 5 | annotations: 6 | cert-manager.io/inject-ca-from: CERTIFICATE_NAMESPACE/CERTIFICATE_NAME 7 | name: volumes.storage.metalk8s.scality.com 8 | -------------------------------------------------------------------------------- /storage-operator/config/default/manager_metrics_patch.yaml: -------------------------------------------------------------------------------- 1 | # This patch adds the args to allow exposing the metrics endpoint using HTTPS 2 | - op: add 3 | path: /spec/template/spec/containers/0/args/0 4 | value: --metrics-bind-address=:8443 5 | -------------------------------------------------------------------------------- /storage-operator/config/manager/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - manager.yaml 3 | apiVersion: kustomize.config.k8s.io/v1beta1 4 | kind: Kustomization 5 | images: 6 | - name: controller 7 | newName: controller 8 | newTag: latest 9 | -------------------------------------------------------------------------------- /storage-operator/config/metalk8s/delete_ns.yaml: -------------------------------------------------------------------------------- 1 | $patch: delete 2 | apiVersion: v1 3 | kind: Namespace 4 | metadata: 5 | name: system 6 | -------------------------------------------------------------------------------- /storage-operator/config/prometheus/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - monitor.yaml 3 | -------------------------------------------------------------------------------- /storage-operator/config/rbac/leader_election_role_binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: storage-operator 6 | app.kubernetes.io/managed-by: kustomize 7 | name: leader-election-rolebinding 8 | roleRef: 9 | apiGroup: rbac.authorization.k8s.io 10 | kind: Role 11 | name: leader-election-role 12 | subjects: 13 | - kind: ServiceAccount 14 | name: controller-manager 15 | namespace: system 16 | -------------------------------------------------------------------------------- /storage-operator/config/rbac/metrics_auth_role.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: metrics-auth-role 5 | rules: 6 | - apiGroups: 7 | - authentication.k8s.io 8 | resources: 9 | - tokenreviews 10 | verbs: 11 | - create 12 | - apiGroups: 13 | - authorization.k8s.io 14 | resources: 15 | - subjectaccessreviews 16 | verbs: 17 | - create 18 | -------------------------------------------------------------------------------- /storage-operator/config/rbac/metrics_auth_role_binding.yaml: -------------------------------------------------------------------------------- 1 | kind: ClusterRoleBinding 2 | metadata: 3 | name: metrics-auth-rolebinding 4 | roleRef: 5 | apiGroup: rbac.authorization.k8s.io 6 | kind: ClusterRole 7 | name: metrics-auth-role 8 | subjects: 9 | - kind: ServiceAccount 10 | name: controller-manager 11 | namespace: system 12 | -------------------------------------------------------------------------------- /storage-operator/config/rbac/metrics_reader_role.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | name: metrics-reader 5 | rules: 6 | - nonResourceURLs: 7 | - "/metrics" 8 | verbs: 9 | - get 10 | -------------------------------------------------------------------------------- /storage-operator/config/rbac/service_account.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: storage-operator 6 | app.kubernetes.io/managed-by: kustomize 7 | name: controller-manager 8 | namespace: system 9 | -------------------------------------------------------------------------------- /storage-operator/config/samples/kustomization.yaml: -------------------------------------------------------------------------------- 1 | ## Append samples you want in your CSV to this file as resources ## 2 | resources: 3 | - storage_v1alpha1_volume.yaml 4 | #+kubebuilder:scaffold:manifestskustomizesamples 5 | -------------------------------------------------------------------------------- /storage-operator/config/samples/storage_v1alpha1_volume.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: storage.metalk8s.scality.com/v1alpha1 2 | kind: Volume 3 | metadata: 4 | name: volume-sample 5 | spec: 6 | # Add fields here 7 | -------------------------------------------------------------------------------- /storage-operator/config/scorecard/bases/config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: scorecard.operatorframework.io/v1alpha3 2 | kind: Configuration 3 | metadata: 4 | name: config 5 | stages: 6 | - parallel: true 7 | tests: [] 8 | -------------------------------------------------------------------------------- /storage-operator/config/scorecard/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - bases/config.yaml 3 | patchesJson6902: 4 | - path: patches/basic.config.yaml 5 | target: 6 | group: scorecard.operatorframework.io 7 | version: v1alpha3 8 | kind: Configuration 9 | name: config 10 | - path: patches/olm.config.yaml 11 | target: 12 | group: scorecard.operatorframework.io 13 | version: v1alpha3 14 | kind: Configuration 15 | name: config 16 | #+kubebuilder:scaffold:patchesJson6902 17 | -------------------------------------------------------------------------------- /storage-operator/config/scorecard/patches/basic.config.yaml: -------------------------------------------------------------------------------- 1 | - op: add 2 | path: /stages/0/tests/- 3 | value: 4 | entrypoint: 5 | - scorecard-test 6 | - basic-check-spec 7 | image: quay.io/operator-framework/scorecard-test:v1.15.0 8 | labels: 9 | suite: basic 10 | test: basic-check-spec-test 11 | -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | -------------------------------------------------------------------------------- /tests/README.md: -------------------------------------------------------------------------------- 1 | # Tests 2 | 3 | ## Tags 4 | Tags are used to filter tests and are indicated by `@` at the top of the feature file. 5 | 6 | To limit the scope of the test session to the scenarios with tag `@example_tag`, specify the 7 | filter to tox with `-k`, which will pass it through to the underlying pytest command. 8 | 9 | `tox -e tests -- -k "example_tag"` 10 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/tests/__init__.py -------------------------------------------------------------------------------- /tests/post/features/backup.feature: -------------------------------------------------------------------------------- 1 | @post @ci @local @backup 2 | Feature: Backup 3 | Scenario: Backup multiple times 4 | When we run the backup script 6 times 5 | And we wait 60 seconds for the backup-replication job to complete 6 | Then we have 5 backups on each node 7 | -------------------------------------------------------------------------------- /tests/post/features/bootstrap.feature: -------------------------------------------------------------------------------- 1 | @post @ci @local @slow @bootstrap 2 | Feature: Bootstrap 3 | Scenario: Re-run bootstrap 4 | Given the Kubernetes API is available 5 | When we run bootstrap a second time 6 | Then the Kubernetes API is available 7 | -------------------------------------------------------------------------------- /tests/post/features/salt_ssh.feature: -------------------------------------------------------------------------------- 1 | @post @ci @local @saltssh 2 | Feature: saltssh 3 | Scenario: salt-ssh state work on every non-bootstrap nodes 4 | Given the Kubernetes API is available 5 | And we are on a multi node cluster 6 | Then we are able to run 'metalk8s.node.grains' using salt-ssh on non-bootstrap nodes 7 | -------------------------------------------------------------------------------- /tests/post/features/seccomp.feature: -------------------------------------------------------------------------------- 1 | @post @ci @local @seccomp 2 | Feature: seccomp 3 | Scenario: Running a Pod with the 'runtime/default' seccomp profile works 4 | Given the Kubernetes API is available 5 | When we create a utils Pod with labels {'test': 'seccomp1'} and using 'RuntimeDefault' seccomp profile 6 | Then pods with label 'test=seccomp1' are 'Ready' 7 | -------------------------------------------------------------------------------- /tests/post/features/static_pods.feature: -------------------------------------------------------------------------------- 1 | @ci @local @post @salt 2 | Feature: Static Pods management 3 | Scenario: Static Pods restart on configuration change 4 | Given the Kubernetes API is available 5 | And I have set up a static pod 6 | When I edit the configuration of the static pod 7 | And I use Salt to manage the static pod 8 | Then the static pod was changed 9 | -------------------------------------------------------------------------------- /tests/post/features/ui_alive.feature: -------------------------------------------------------------------------------- 1 | @post @local @ci @ui 2 | Feature: The UI should be reachable 3 | Scenario: Reach the UI 4 | Given the Kubernetes API is available 5 | Then we can reach the UI 6 | -------------------------------------------------------------------------------- /tests/post/features/versions.feature: -------------------------------------------------------------------------------- 1 | @post @ci @local 2 | Feature: Check versions in the running cluster 3 | Scenario: Check the cluster's Kubernetes version 4 | Given the Kubernetes API is available 5 | Then the Kubernetes version deployed is the same as the configured one 6 | -------------------------------------------------------------------------------- /tests/post/steps/files/cronjob.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: CronJob 3 | spec: 4 | schedule: "*/1 * * * *" 5 | jobTemplate: 6 | spec: 7 | template: 8 | spec: 9 | containers: 10 | - name: test-container 11 | image: "" 12 | command: 13 | - /bin/sh 14 | - -c 15 | - echo "Hello, World!" && sleep 300 && echo "Goodbye, World!" 16 | restartPolicy: OnFailure 17 | -------------------------------------------------------------------------------- /tests/post/steps/test_ui.py: -------------------------------------------------------------------------------- 1 | from pytest_bdd import scenario, then 2 | import requests 3 | 4 | 5 | # Scenarios 6 | @scenario("../features/ui_alive.feature", "Reach the UI") 7 | def test_ui(host): 8 | pass 9 | 10 | 11 | @then("we can reach the UI") 12 | def reach_UI(host, control_plane_ingress_ep): 13 | response = requests.get( 14 | control_plane_ingress_ep, 15 | verify=False, 16 | ) 17 | 18 | assert response.status_code == 200, response.text 19 | -------------------------------------------------------------------------------- /tests/requirements.in: -------------------------------------------------------------------------------- 1 | pytest ~=4.3.0 2 | pytest-bdd ~=3.2.1 3 | testinfra >=2.0.0 4 | paramiko >=2.4.2 # testinfra backend 5 | cryptography ~=39.0 6 | kubernetes >= 8.0.0 7 | pytest-custom_exit_code >=0.3.0 8 | rsa ~=4.7 9 | -------------------------------------------------------------------------------- /tests/versions.py: -------------------------------------------------------------------------------- 1 | ../buildchain/buildchain/versions.py -------------------------------------------------------------------------------- /tools/crd-client-generator-js/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /tools/crd-client-generator-js/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | ['@babel/preset-env', {targets: {node: 'current'}}], 4 | '@babel/preset-typescript', 5 | ], 6 | }; 7 | 8 | -------------------------------------------------------------------------------- /tools/crd-client-generator-js/src/__TESTS__/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "tabWidth": 2, 4 | "trailingComma": "all" 5 | } 6 | -------------------------------------------------------------------------------- /tools/crd-client-generator-js/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "moduleResolution": "node", 5 | "allowSyntheticDefaultImports": true, 6 | "resolveJsonModule": true 7 | } 8 | } -------------------------------------------------------------------------------- /tools/lib-alert-tree/.gitignore: -------------------------------------------------------------------------------- 1 | /dist 2 | -------------------------------------------------------------------------------- /tools/lib-alert-tree/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG PYTHON_VERSION=3.6-slim 2 | FROM python:${PYTHON_VERSION} 3 | 4 | ARG POETRY_VERSION=1.1.9 5 | RUN pip install poetry==${POETRY_VERSION} 6 | 7 | WORKDIR /project/ 8 | COPY poetry.lock pyproject.toml ./ 9 | 10 | ARG INSTALL_EXTRAS="-E cli" 11 | RUN poetry config virtualenvs.create false && \ 12 | poetry install --no-interaction --no-ansi ${INSTALL_EXTRAS} 13 | -------------------------------------------------------------------------------- /tools/lib-alert-tree/lib_alert_tree/__init__.py: -------------------------------------------------------------------------------- 1 | """Library for creating and manipulating hierarchies of Prometheus alerts.""" 2 | 3 | __version__ = "0.1.0" 4 | """The version of this project.""" 5 | -------------------------------------------------------------------------------- /tools/lib-alert-tree/metalk8s/__main__.py: -------------------------------------------------------------------------------- 1 | """CLI entry-point for manipulating MetalK8s alert tree.""" 2 | 3 | from lib_alert_tree.cli import generate_cli 4 | 5 | from . import CLUSTER_WARNING, CLUSTER_CRITICAL 6 | 7 | main = generate_cli( 8 | roots={"cluster-degraded": CLUSTER_WARNING, "cluster-at-risk": CLUSTER_CRITICAL}, 9 | prometheus_rule_labels={"metalk8s.scality.com/monitor": ""}, 10 | ) 11 | 12 | if __name__ == "__main__": 13 | main() 14 | -------------------------------------------------------------------------------- /tools/lib-alert-tree/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/tools/lib-alert-tree/tests/__init__.py -------------------------------------------------------------------------------- /tools/lib-alert-tree/tests/test_lib_alert_tree.py: -------------------------------------------------------------------------------- 1 | """Check constants in the `lib_alert_tree` package root.""" 2 | 3 | from lib_alert_tree import __version__ 4 | 5 | 6 | def test_version(): 7 | """Check the hard-coded version.""" 8 | assert __version__ == "0.1.0" 9 | -------------------------------------------------------------------------------- /ui/.dockerignore: -------------------------------------------------------------------------------- 1 | build/ 2 | junit/ 3 | node_modules/ 4 | tmp/ 5 | -------------------------------------------------------------------------------- /ui/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env*.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | 22 | # cypress 23 | cypress/screenshots/ 24 | cypress/videos/ 25 | 26 | # federated types 27 | build_ts/ 28 | -------------------------------------------------------------------------------- /ui/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "tabWidth": 2, 4 | "trailingComma": "all" 5 | } 6 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/App.d.ts: -------------------------------------------------------------------------------- 1 | export * from './compiled-types/src/FederatedApp'; 2 | export { default } from './compiled-types/src/FederatedApp'; -------------------------------------------------------------------------------- /ui/@mf-types/shell/alerts/AlertProvider.d.ts: -------------------------------------------------------------------------------- 1 | export * from './../compiled-types/src/alerts/AlertProvider'; 2 | export { default } from './../compiled-types/src/alerts/AlertProvider'; -------------------------------------------------------------------------------- /ui/@mf-types/shell/alerts/alertHooks.d.ts: -------------------------------------------------------------------------------- 1 | export * from './../compiled-types/src/alerts/alertHooks'; 2 | export { default } from './../compiled-types/src/alerts/alertHooks'; -------------------------------------------------------------------------------- /ui/@mf-types/shell/auth/AuthProvider.d.ts: -------------------------------------------------------------------------------- 1 | export * from './../compiled-types/src/auth/AuthProvider'; 2 | export { default } from './../compiled-types/src/auth/AuthProvider'; -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/QueryClientProvider.d.ts: -------------------------------------------------------------------------------- 1 | import { QueryClient } from 'react-query'; 2 | export declare const QueryClientProvider: React.ComponentType<{ 3 | client: QueryClient; 4 | contextSharing?: boolean; 5 | children?: React.ReactNode; 6 | }>; 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/alerts/alertContext.d.ts: -------------------------------------------------------------------------------- 1 | export declare const AlertContext: import("react").Context; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/alerts/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './AlertProvider'; 2 | export * from './alertHooks'; 3 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/alerts/services/loki.d.ts: -------------------------------------------------------------------------------- 1 | import type { Alert } from './alertUtils'; 2 | export type StreamValue = { 3 | stream: Record; 4 | values: [string, string][]; 5 | }[]; 6 | export declare function getLast7DaysAlerts(lokiUrl: string): Promise; 7 | export declare function getAlertsLoki(lokiUrl: string, start: string, end: string): Promise; 8 | export declare function isLokiReady(lokiUrl: string): Promise; 9 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/auth/FirstTimeLoginProvider.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export declare const useFirstTimeLogin: () => { 3 | firstTimeLogin: boolean | null; 4 | }; 5 | export declare function FirstTimeLoginProvider({ children, }: { 6 | children: React.ReactNode; 7 | }): import("react/jsx-runtime").JSX.Element; 8 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/initFederation/ShellHistoryProvider.d.ts: -------------------------------------------------------------------------------- 1 | export declare const useShellHistory: () => import("react-router").NavigateFunction; 2 | export declare const ShellHistoryProvider: ({ children }: { 3 | children: any; 4 | }) => import("react/jsx-runtime").JSX.Element; 5 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/navbar/NavbarConfigProvider.d.ts: -------------------------------------------------------------------------------- 1 | import { ReactElement } from 'react'; 2 | import './navbarHooks'; 3 | export declare const NavbarConfigProvider: ({ children, }: { 4 | children: ReactElement; 5 | }) => ReactElement; 6 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/navbar/NavbarUpdaterComponents.d.ts: -------------------------------------------------------------------------------- 1 | export declare const NavbarUpdaterComponents: () => import("react/jsx-runtime").JSX.Element; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/navbar/NotificationCenter.d.ts: -------------------------------------------------------------------------------- 1 | declare const NotificationCenter: () => import("react/jsx-runtime").JSX.Element; 2 | export default NotificationCenter; 3 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/navbar/SleepingNotificationBell.d.ts: -------------------------------------------------------------------------------- 1 | export declare const SleepingNotificationBell: () => import("react/jsx-runtime").JSX.Element; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/navbar/events.d.ts: -------------------------------------------------------------------------------- 1 | export declare const AUTHENTICATED_EVENT: string; 2 | export declare const LANGUAGE_CHANGED_EVENT: string; 3 | export declare const THEME_CHANGED_EVENT: string; 4 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/navbar/favicon.d.ts: -------------------------------------------------------------------------------- 1 | export declare const useFavicon: (favicon: string) => void; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/navbar/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './library'; 3 | export type SolutionsNavbarProps = { 4 | children?: React.ReactNode; 5 | }; 6 | export declare const SolutionsNavbar: ({ children }: SolutionsNavbarProps) => import("react/jsx-runtime").JSX.Element; 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/navbar/library.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/navbar/navbarContext.d.ts: -------------------------------------------------------------------------------- 1 | import type { Navbar } from './navbarHooks'; 2 | import './navbarHooks'; 3 | export declare const NavbarContext: import("react").Context; 4 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/compiled-types/src/useNotificationCenter.d.ts: -------------------------------------------------------------------------------- 1 | import { Notification } from './NotificationCenterProvider'; 2 | export declare const useNotificationCenter: () => { 3 | notifications: import("./NotificationCenterProvider").InternalNotification[]; 4 | readAllNotifications: () => void; 5 | publish: (notification: Notification) => void; 6 | unPublish: (id: string) => void; 7 | }; 8 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/lang.d.ts: -------------------------------------------------------------------------------- 1 | export * from './compiled-types/src/navbar/lang'; 2 | export { default } from './compiled-types/src/navbar/lang'; -------------------------------------------------------------------------------- /ui/@mf-types/shell/moduleFederation/ConfigurationProvider.d.ts: -------------------------------------------------------------------------------- 1 | export * from './../compiled-types/src/initFederation/ConfigurationProviders'; 2 | export { default } from './../compiled-types/src/initFederation/ConfigurationProviders'; -------------------------------------------------------------------------------- /ui/@mf-types/shell/moduleFederation/ShellConfigurationProvider.d.ts: -------------------------------------------------------------------------------- 1 | export * from './../compiled-types/src/initFederation/ShellConfigProvider'; 2 | export { default } from './../compiled-types/src/initFederation/ShellConfigProvider'; -------------------------------------------------------------------------------- /ui/@mf-types/shell/moduleFederation/UIListProvider.d.ts: -------------------------------------------------------------------------------- 1 | export * from './../compiled-types/src/initFederation/UIListProvider'; 2 | export { default } from './../compiled-types/src/initFederation/UIListProvider'; -------------------------------------------------------------------------------- /ui/@mf-types/shell/navbar/navbarHooks.d.ts: -------------------------------------------------------------------------------- 1 | export * from './../compiled-types/src/navbar/navbarHooks'; 2 | export { default } from './../compiled-types/src/navbar/navbarHooks'; -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/accordion/Accordion.component.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export type AccordionProps = { 3 | title: string; 4 | id: string; 5 | children: React.ReactNode; 6 | style?: React.CSSProperties; 7 | }; 8 | export declare const Accordion: ({ title, id, style, children }: AccordionProps) => import("react/jsx-runtime").JSX.Element; 9 | //# sourceMappingURL=Accordion.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/banner/Banner.component.d.ts: -------------------------------------------------------------------------------- 1 | import { Variant } from '../constants'; 2 | export type Props = { 3 | icon?: React.ReactNode; 4 | title?: string; 5 | children: React.ReactNode; 6 | variant: Variant; 7 | }; 8 | declare function Banner({ icon, title, children, variant, ...rest }: Props): import("react/jsx-runtime").JSX.Element; 9 | export { Banner }; 10 | //# sourceMappingURL=Banner.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/breadcrumb/Breadcrumb.component.d.ts: -------------------------------------------------------------------------------- 1 | type Props = { 2 | paths: Array; 3 | }; 4 | declare const Breadcrumb: ({ paths, ...rest }: Props) => import("react/jsx-runtime").JSX.Element; 5 | export { Breadcrumb }; 6 | //# sourceMappingURL=Breadcrumb.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/coreuithemeprovider/CoreUiThemeProvider.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { CoreUITheme } from '../../style/theme'; 3 | type Props = { 4 | theme: CoreUITheme; 5 | children: React.ReactNode; 6 | }; 7 | declare const CoreUiThemeProvider: ({ theme, children }: Props) => import("react/jsx-runtime").JSX.Element; 8 | export { CoreUiThemeProvider }; 9 | //# sourceMappingURL=CoreUiThemeProvider.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/date/FormattedDateTime.spec.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | //# sourceMappingURL=FormattedDateTime.spec.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/date/dateDiffer.d.ts: -------------------------------------------------------------------------------- 1 | export declare function getDateDaysDiff(startDate: Date, endDate: Date, unit: 'months' | 'days' | 'hours' | 'minutes'): number; 2 | //# sourceMappingURL=dateDiffer.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/date/dateDiffer.spec.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | //# sourceMappingURL=dateDiffer.spec.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/emptytable/Emptytable.component.d.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | type Props = { 3 | children: Node | React.ReactNode; 4 | useDiv?: boolean; 5 | }; 6 | declare function EmptyTable(props: Props): import("react/jsx-runtime").JSX.Element; 7 | export { EmptyTable }; 8 | //# sourceMappingURL=Emptytable.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/error-pages/ErrorPage404.component.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | type Props = { 3 | locale?: string; 4 | onReturnHomeClick?: (event: React.MouseEvent) => void; 5 | }; 6 | declare function ErrorPage404({ locale, onReturnHomeClick, ...rest }: Props): import("react/jsx-runtime").JSX.Element; 7 | export { ErrorPage404 }; 8 | //# sourceMappingURL=ErrorPage404.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/error-pages/ErrorPageAuth.component.d.ts: -------------------------------------------------------------------------------- 1 | type Props = { 2 | supportLink?: string; 3 | locale?: string; 4 | }; 5 | declare function ErrorPageAuth({ supportLink, locale, ...rest }: Props): import("react/jsx-runtime").JSX.Element; 6 | export { ErrorPageAuth }; 7 | //# sourceMappingURL=ErrorPageAuth.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/globalhealthbar/tooltip/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Format the value to be shown in the tooltip. 3 | * 4 | * @param value The value to show in the tooltip. 5 | * @param valueToHtml Function to convert a single cell value to an HTML string 6 | */ 7 | export declare function formatValue(): (value: any, valueToHtml: (value: any) => string, maxDepth: number) => string; 8 | //# sourceMappingURL=index.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/infomessage/InfoMessage.component.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | type Props = { 3 | title: string | React.ReactNode; 4 | content: React.ReactNode; 5 | link?: string; 6 | }; 7 | export declare const InfoMessage: ({ title, content, link }: Props) => import("react/jsx-runtime").JSX.Element; 8 | export {}; 9 | //# sourceMappingURL=InfoMessage.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/infomessage/InfoMessageUtils.d.ts: -------------------------------------------------------------------------------- 1 | import { DefaultTheme } from 'styled-components'; 2 | export declare const useComputeBackgroundColor: () => { 3 | containerRef: import("react").MutableRefObject; 4 | backgroundColor: string; 5 | }; 6 | export declare const getBackgroundColor: (element: HTMLElement, theme: DefaultTheme) => any; 7 | //# sourceMappingURL=InfoMessageUtils.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/lateralnavbarlayout/LateralNavbarLayout.component.d.ts: -------------------------------------------------------------------------------- 1 | import { Props as SidebarProps } from '../sidebar/Sidebar.component'; 2 | type Props = { 3 | sidebar: SidebarProps; 4 | children: JSX.Element; 5 | }; 6 | declare function LateralNavbarLayout({ children, sidebar, ...rest }: Props): import("react/jsx-runtime").JSX.Element; 7 | export { LateralNavbarLayout }; 8 | //# sourceMappingURL=LateralNavbarLayout.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/layout/v2/index.d.ts: -------------------------------------------------------------------------------- 1 | import { ReactElement } from 'react'; 2 | export declare function Layout({ children: app, headerNavigation, }: { 3 | children: ReactElement | ReactElement[]; 4 | headerNavigation: ReactElement; 5 | }): import("react/jsx-runtime").JSX.Element; 6 | //# sourceMappingURL=index.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/loader/Loader.component.d.ts: -------------------------------------------------------------------------------- 1 | import { LOADER_SIZE as SIZE } from '../constants'; 2 | type Props = { 3 | size?: keyof typeof SIZE; 4 | color?: string; 5 | children?: JSX.Element; 6 | centered?: boolean; 7 | }; 8 | declare function Loader({ children, color, size, centered, ...rest }: Props): import("react/jsx-runtime").JSX.Element; 9 | export { Loader }; 10 | //# sourceMappingURL=Loader.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/prettybytes/PrettyBytes.component.d.ts: -------------------------------------------------------------------------------- 1 | type Props = { 2 | bytes?: number | null; 3 | decimals?: number | null; 4 | unit?: 'iB' | 'B'; 5 | }; 6 | declare function PrettyBytes({ bytes, decimals, unit }: Props): import("react/jsx-runtime").JSX.Element; 7 | export { PrettyBytes }; 8 | //# sourceMappingURL=PrettyBytes.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/scrollbarwrapper/ScrollbarWrapper.component.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | type Props = { 3 | children: React.ReactNode; 4 | }; 5 | declare function ScrollbarWrapper({ children }: Props): import("react/jsx-runtime").JSX.Element; 6 | export { ScrollbarWrapper }; 7 | //# sourceMappingURL=ScrollbarWrapper.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/selectv2/SelectStyle.d.ts: -------------------------------------------------------------------------------- 1 | declare const SelectStyle: import("styled-components").StyledComponent; 2 | export { SelectStyle }; 3 | //# sourceMappingURL=SelectStyle.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/statusicon/StatusIcon.component.d.ts: -------------------------------------------------------------------------------- 1 | export declare enum Status { 2 | HEALTHY = "healthy", 3 | WARNING = "warning", 4 | CRITICAL = "critical", 5 | UNKNOWN = "unknown", 6 | LOADING = "loading" 7 | } 8 | export declare const StatusIcon: ({ status }: { 9 | status: Status; 10 | }) => import("react/jsx-runtime").JSX.Element; 11 | //# sourceMappingURL=StatusIcon.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/statuswrapper/Statuswrapper.component.d.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Status } from '../constants'; 3 | type Props = { 4 | status: Status; 5 | children: React.ReactNode; 6 | }; 7 | declare function StatusWrapper({ status, children }: Props): import("react/jsx-runtime").JSX.Element; 8 | export { StatusWrapper }; 9 | //# sourceMappingURL=Statuswrapper.component.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/tablev2/SearchWithQueryParams.d.ts: -------------------------------------------------------------------------------- 1 | import { SearchProps } from './Search'; 2 | export type SearchWithQueryParamsProps = { 3 | queryParams?: string; 4 | } & Omit & Partial>; 5 | export declare function SearchWithQueryParams(props: SearchWithQueryParamsProps): import("react/jsx-runtime").JSX.Element; 6 | //# sourceMappingURL=SearchWithQueryParams.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/tablev2/useCheckbox.d.ts: -------------------------------------------------------------------------------- 1 | import { Hooks } from 'react-table'; 2 | export declare const useCheckbox: { 3 | (hooks: Hooks): void; 4 | pluginName: string; 5 | }; 6 | //# sourceMappingURL=useCheckbox.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/tablev2/useSyncedScroll.d.ts: -------------------------------------------------------------------------------- 1 | import { Row } from 'react-table'; 2 | import { FixedSizeList } from 'react-window'; 3 | export default function useSyncedScroll = Record>(): { 4 | headerRef: (element: HTMLDivElement) => void; 5 | bodyRef: React.RefObject[]>>; 6 | }; 7 | //# sourceMappingURL=useSyncedScroll.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/tabsv2/ScrollButton.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | type Props = { 3 | direction: 'left' | 'right'; 4 | onClick: (arg0: React.SyntheticEvent) => void; 5 | }; 6 | declare const ScrollButton: React.ForwardRefExoticComponent>; 7 | export { ScrollButton }; 8 | //# sourceMappingURL=ScrollButton.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/toast/DurationBasedProgressBar.d.ts: -------------------------------------------------------------------------------- 1 | export declare function DurationBasedProgressBar({ duration, color, }: { 2 | duration: number | null; 3 | color: string; 4 | }): import("react/jsx-runtime").JSX.Element; 5 | //# sourceMappingURL=DurationBasedProgressBar.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/toast/ToastPositionHelpers.d.ts: -------------------------------------------------------------------------------- 1 | import { CSSProperties } from 'react'; 2 | export type ToastPosition = 'top-left' | 'top-right' | 'top-center' | 'bottom-left' | 'bottom-right' | 'bottom-center'; 3 | export declare const positionOutput: Record; 4 | //# sourceMappingURL=ToastPositionHelpers.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/components/toast/useToastParameters.d.ts: -------------------------------------------------------------------------------- 1 | interface ToastParameters { 2 | duration?: number | null; 3 | open?: boolean; 4 | onClose?: () => void; 5 | } 6 | export declare function useToastParameters(params: ToastParameters): { 7 | params: ToastParameters; 8 | }; 9 | export {}; 10 | //# sourceMappingURL=useToastParameters.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/hooks.d.ts: -------------------------------------------------------------------------------- 1 | export declare function useMemoCompare(next: T, compare: (previous: T | null, next: T) => boolean): T | null; 2 | //# sourceMappingURL=hooks.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/icons/branding-logo.d.ts: -------------------------------------------------------------------------------- 1 | declare const Logo: () => import("react/jsx-runtime").JSX.Element; 2 | export { Logo }; 3 | //# sourceMappingURL=branding-logo.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/icons/branding.d.ts: -------------------------------------------------------------------------------- 1 | declare const Logo: () => import("react/jsx-runtime").JSX.Element; 2 | export { Logo }; 3 | //# sourceMappingURL=branding.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/icons/scality-loading.d.ts: -------------------------------------------------------------------------------- 1 | declare const LoaderIcon: () => import("react/jsx-runtime").JSX.Element; 2 | export { LoaderIcon }; 3 | //# sourceMappingURL=scality-loading.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/dist/testUtils.d.ts: -------------------------------------------------------------------------------- 1 | import { QueryClient } from 'react-query'; 2 | export declare const getWrapper: () => { 3 | Wrapper: ({ children }: { 4 | children: React.ReactNode; 5 | }) => import("react/jsx-runtime").JSX.Element; 6 | queryClient: QueryClient; 7 | }; 8 | //# sourceMappingURL=testUtils.d.ts.map -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/@scality/core-ui/types/styled.d.ts: -------------------------------------------------------------------------------- 1 | import 'styled-components'; 2 | import { CoreUITheme } from '../src/lib/style/theme'; 3 | 4 | declare module 'styled-components' { 5 | export interface DefaultTheme extends CoreUITheme {} 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/oidc-client-ts/dist/esm/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module", 3 | "version": "3.1.0" 4 | } 5 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/broadcastQueryClient-experimental/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "internal": true, 3 | "main": "../lib/broadcastQueryClient-experimental/index.js", 4 | "module": "../es/broadcastQueryClient-experimental/index.js", 5 | "types": "../types/broadcastQueryClient-experimental/index.d.ts" 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/core/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "internal": true, 3 | "main": "../lib/core/index.js", 4 | "module": "../es/core/index.js", 5 | "types": "../types/core/index.d.ts" 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/createAsyncStoragePersistor-experimental/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "internal": true, 3 | "main": "../lib/createAsyncStoragePersistor-experimental/index.js", 4 | "module": "../es/createAsyncStoragePersistor-experimental/index.js", 5 | "types": "../types/createAsyncStoragePersistor-experimental/index.d.ts" 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/createWebStoragePersistor-experimental/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "internal": true, 3 | "main": "../lib/createWebStoragePersistor-experimental/index.js", 4 | "module": "../es/createWebStoragePersistor-experimental/index.js", 5 | "types": "../types/createWebStoragePersistor-experimental/index.d.ts" 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/devtools/development/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "internal": true, 3 | "main": "../../lib/devtools/index.js", 4 | "module": "../../es/devtools/index.js", 5 | "types": "../../types/devtools/index.d.ts" 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/devtools/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "internal": true, 3 | "main": "./index.js", 4 | "module": "./index.js", 5 | "types": "../types/devtools/index.d.ts" 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/hydration/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "internal": true, 3 | "main": "../lib/hydration/index.js", 4 | "module": "../es/hydration/index.js", 5 | "types": "../types/hydration/index.d.ts" 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/persistQueryClient-experimental/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "internal": true, 3 | "main": "../lib/persistQueryClient-experimental/index.js", 4 | "module": "../es/persistQueryClient-experimental/index.js", 5 | "types": "../types/persistQueryClient-experimental/index.d.ts" 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/react/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "internal": true, 3 | "main": "../lib/react/index.js", 4 | "module": "../es/react/index.js", 5 | "types": "../types/react/index.d.ts" 6 | } 7 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/broadcastQueryClient-experimental/index.d.ts: -------------------------------------------------------------------------------- 1 | import { QueryClient } from '../core'; 2 | interface BroadcastQueryClientOptions { 3 | queryClient: QueryClient; 4 | broadcastChannel?: string; 5 | } 6 | export declare function broadcastQueryClient({ queryClient, broadcastChannel, }: BroadcastQueryClientOptions): void; 7 | export {}; 8 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/core/logger.d.ts: -------------------------------------------------------------------------------- 1 | export interface Logger { 2 | log: LogFunction; 3 | warn: LogFunction; 4 | error: LogFunction; 5 | } 6 | declare type LogFunction = (...args: any[]) => void; 7 | export declare function getLogger(): Logger; 8 | export declare function setLogger(newLogger: Logger): void; 9 | export {}; 10 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/core/subscribable.d.ts: -------------------------------------------------------------------------------- 1 | declare type Listener = () => void; 2 | export declare class Subscribable { 3 | protected listeners: TListener[]; 4 | constructor(); 5 | subscribe(listener?: TListener): () => void; 6 | hasListeners(): boolean; 7 | protected onSubscribe(): void; 8 | protected onUnsubscribe(): void; 9 | } 10 | export {}; 11 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/devtools/Logo.d.ts: -------------------------------------------------------------------------------- 1 | export default function Logo(props: any): JSX.Element; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/devtools/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './devtools'; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/devtools/useLocalStorage.d.ts: -------------------------------------------------------------------------------- 1 | export default function useLocalStorage(key: string, defaultValue: T | undefined): [T | undefined, (newVal: T | ((prevVal: T) => T)) => void]; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/devtools/useMediaQuery.d.ts: -------------------------------------------------------------------------------- 1 | export default function useMediaQuery(query: string): boolean | undefined; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/hydration/index.d.ts: -------------------------------------------------------------------------------- 1 | export { dehydrate, hydrate, useHydrate, Hydrate } from 'react-query'; 2 | export { DehydrateOptions, DehydratedState, HydrateOptions, ShouldDehydrateMutationFunction, ShouldDehydrateQueryFunction, } from '../core/hydration'; 3 | export { HydrateProps } from '../react/Hydrate'; 4 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './core'; 2 | export * from './react'; 3 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/react/Hydrate.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { HydrateOptions } from '../core'; 3 | export declare function useHydrate(state: unknown, options?: HydrateOptions): void; 4 | export interface HydrateProps { 5 | state?: unknown; 6 | options?: HydrateOptions; 7 | } 8 | export declare const Hydrate: React.FC; 9 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/react/logger.d.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from '../core/logger'; 2 | export declare const logger: Logger; 3 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/react/reactBatchedUpdates.d.ts: -------------------------------------------------------------------------------- 1 | import ReactDOM from 'react-dom'; 2 | export declare const unstable_batchedUpdates: typeof ReactDOM.unstable_batchedUpdates; 3 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/react/setBatchUpdatesFn.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/react/setLogger.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/react/useBaseQuery.d.ts: -------------------------------------------------------------------------------- 1 | import { QueryKey } from '../core'; 2 | import { QueryObserver } from '../core/queryObserver'; 3 | import { UseBaseQueryOptions } from './types'; 4 | export declare function useBaseQuery(options: UseBaseQueryOptions, Observer: typeof QueryObserver): import("../core").QueryObserverResult; 5 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/react/useIsFetching.d.ts: -------------------------------------------------------------------------------- 1 | import { QueryKey } from '../core/types'; 2 | import { QueryFilters } from '../core/utils'; 3 | export declare function useIsFetching(filters?: QueryFilters): number; 4 | export declare function useIsFetching(queryKey?: QueryKey, filters?: QueryFilters): number; 5 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/react/useIsMutating.d.ts: -------------------------------------------------------------------------------- 1 | import { QueryKey } from '../core/types'; 2 | import { MutationFilters } from '../core/utils'; 3 | export declare function useIsMutating(filters?: MutationFilters): number; 4 | export declare function useIsMutating(queryKey?: QueryKey, filters?: MutationFilters): number; 5 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/react/utils.d.ts: -------------------------------------------------------------------------------- 1 | export declare function shouldThrowError(suspense: boolean | undefined, _useErrorBoundary: boolean | ((err: TError) => boolean) | undefined, error: TError): boolean; 2 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/ts3.8/index.d.ts: -------------------------------------------------------------------------------- 1 | import { useQueries } from './useQueries'; 2 | export { useQueries }; 3 | export * from '..'; 4 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/node_modules/react-query/types/ts3.8/useQueries.d.ts: -------------------------------------------------------------------------------- 1 | import { UseQueryOptions, UseQueryResult } from '../react/types'; 2 | /** 3 | * Backwards-compatible definition for TS < 4.1 4 | */ 5 | export declare function useQueries(queries: UseQueryOptions[]): UseQueryResult[]; 6 | -------------------------------------------------------------------------------- /ui/@mf-types/shell/useNotificationCenter.d.ts: -------------------------------------------------------------------------------- 1 | export * from './compiled-types/src/useNotificationCenter'; 2 | export { default } from './compiled-types/src/useNotificationCenter'; -------------------------------------------------------------------------------- /ui/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | ['@babel/plugin-proposal-optional-chaining', { loose: false }], 4 | ['@babel/plugin-proposal-nullish-coalescing-operator'], 5 | ], 6 | presets: [ 7 | '@babel/preset-env', 8 | '@babel/preset-typescript', 9 | [ 10 | '@babel/preset-react', 11 | { 12 | runtime: 'automatic', 13 | }, 14 | ], 15 | ], 16 | }; 17 | -------------------------------------------------------------------------------- /ui/cypress/fixtures/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "url": "/api/kubernetes", 3 | "url_salt": "/api/salt", 4 | "url_prometheus": "/api/prometheus", 5 | "url_grafana": "/grafana", 6 | "url_doc": "/docs", 7 | "url_alertmanager": "/api/alertmanager", 8 | "url_navbar_config": "/shell/config.json", 9 | "url_support": "https://support.com" 10 | } 11 | -------------------------------------------------------------------------------- /ui/cypress/fixtures/deployed-ui-apps.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "kind": "metalk8s-ui", 4 | "name": "metalk8s.eu-west-1", 5 | "version": "local-dev", 6 | "url": "http://localhost", 7 | "appHistoryBasePath": "" 8 | } 9 | ] 10 | -------------------------------------------------------------------------------- /ui/cypress/fixtures/kubernetes/pods.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "PodList", 3 | "apiVersion": "v1", 4 | "metadata": { 5 | "selfLink": "/api/v1/pods", 6 | "resourceVersion": "27305765" 7 | }, 8 | "items": [ 9 | ] 10 | } -------------------------------------------------------------------------------- /ui/cypress/fixtures/prometheus/empty-alerts.json: -------------------------------------------------------------------------------- 1 | { "status": "success", "data": { "alerts": [] } } 2 | -------------------------------------------------------------------------------- /ui/cypress/fixtures/prometheus/query-up-ok.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": "success", 3 | "data": { 4 | "resultType": "vector", 5 | "result": [{ "metric": {}, "value": [1603349562.59, "1"] }] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /ui/cypress/fixtures/salt-api/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "return": [ 3 | { 4 | "perms": [{ "*": [".*"] }, "@wheel", "@runner", "@jobs"], 5 | "start": 1603349562.577489, 6 | "token": "fc14fe8d2c99b575642546ee219cc714204cf31a", 7 | "expire": 1603392762.577489, 8 | "user": "oidc:admin@metalk8s.invalid", 9 | "eauth": "kubernetes_rbac" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /ui/public/brand/assets/fonts/lato/Lato-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/ui/public/brand/assets/fonts/lato/Lato-Bold.woff -------------------------------------------------------------------------------- /ui/public/brand/assets/fonts/lato/Lato-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/ui/public/brand/assets/fonts/lato/Lato-Bold.woff2 -------------------------------------------------------------------------------- /ui/public/brand/assets/fonts/lato/Lato-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/ui/public/brand/assets/fonts/lato/Lato-Regular.woff -------------------------------------------------------------------------------- /ui/public/brand/assets/fonts/lato/Lato-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/ui/public/brand/assets/fonts/lato/Lato-Regular.woff2 -------------------------------------------------------------------------------- /ui/public/brand/assets/login/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/ui/public/brand/assets/login/favicon.png -------------------------------------------------------------------------------- /ui/public/brand/assets/login/logo-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/ui/public/brand/assets/login/logo-light.png -------------------------------------------------------------------------------- /ui/public/brand/assets/login/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/ui/public/brand/assets/login/logo.png -------------------------------------------------------------------------------- /ui/public/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "url": "/api/kubernetes", 3 | "url_salt": "/api/salt", 4 | "url_prometheus": "/api/prometheus", 5 | "url_grafana": "/grafana", 6 | "url_doc": "/docs", 7 | "url_alertmanager": "/api/alertmanager", 8 | "url_loki": "/api/loki", 9 | "flags": [], 10 | "url_navbar_config": "/shell/config.json", 11 | "ui_base_path":"/", 12 | "alerts_lib_version": "1.0.0", 13 | "url_support": "https://github.com/scality/metalk8s/discussions/new" 14 | } 15 | -------------------------------------------------------------------------------- /ui/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Platform UI", 3 | "name": "Scality Platform UI", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /ui/src/QueryClientProvider.tsx: -------------------------------------------------------------------------------- 1 | import { ComponentType, ReactNode } from 'react'; 2 | import { 3 | QueryClient, 4 | QueryClientProvider as BaseQueryClientProvider, 5 | } from 'react-query'; 6 | 7 | export const QueryClientProvider = BaseQueryClientProvider as ComponentType<{ 8 | client: QueryClient; 9 | contextSharing?: boolean; 10 | children?: ReactNode; 11 | }>; 12 | -------------------------------------------------------------------------------- /ui/src/components/TableBasedPageStyle.ts: -------------------------------------------------------------------------------- 1 | import { padding } from '@scality/core-ui/dist/style/theme'; 2 | import styled from 'styled-components'; 3 | const TableBasedPageStyle = styled.div` 4 | box-sizing: border-box; 5 | display: flex; 6 | flex-direction: column; 7 | height: 100%; 8 | padding: ${padding.small}; 9 | `; 10 | export default TableBasedPageStyle; -------------------------------------------------------------------------------- /ui/src/components/style/BreadcrumbStyle.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | import { Link } from 'react-router-dom'; 3 | import { fontSize, padding } from '@scality/core-ui/dist/style/theme'; 4 | export const BreadcrumbContainer = styled.div` 5 | padding: 0 0 ${padding.smaller} ${padding.base}; 6 | `; 7 | export const BreadcrumbLabel = styled.span` 8 | font-size: ${fontSize.large}; 9 | `; 10 | export const StyledLink = styled(Link)` 11 | font-size: ${fontSize.large}; 12 | `; -------------------------------------------------------------------------------- /ui/src/components/style/TableBasedPageStyle.ts: -------------------------------------------------------------------------------- 1 | import { padding } from '@scality/core-ui/dist/style/theme'; 2 | import styled from 'styled-components'; 3 | const TableBasedPageStyle = styled.div` 4 | box-sizing: border-box; 5 | display: flex; 6 | flex-direction: column; 7 | height: 100%; 8 | padding: ${padding.small}; 9 | `; 10 | export default TableBasedPageStyle; -------------------------------------------------------------------------------- /ui/src/components/style/TableStyle.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | import { padding, fontWeight } from '@scality/core-ui/dist/style/theme'; 3 | export const TooltipContent = styled.div` 4 | color: ${(props) => props.theme.textSecondary}; 5 | font-weight: ${fontWeight.bold}; 6 | min-width: 60px; 7 | `; -------------------------------------------------------------------------------- /ui/src/containers/ConfigProvider.tsx: -------------------------------------------------------------------------------- 1 | import { useShellHooks } from '@scality/module-federation'; 2 | 3 | export function useLinkOpener() { 4 | const { useLinkOpener } = useShellHooks(); 5 | return useLinkOpener(); 6 | } 7 | export function useDiscoveredViews() { 8 | const { useDiscoveredViews } = useShellHooks(); 9 | return useDiscoveredViews(); 10 | } 11 | -------------------------------------------------------------------------------- /ui/src/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scality/metalk8s/10ba7524002d7e3302c0f93cf1984ddb86f54498/ui/src/index.ts -------------------------------------------------------------------------------- /ui/src/services/errorhandler.ts: -------------------------------------------------------------------------------- 1 | export class AuthError extends Error {} 2 | export function handleUnAuthorizedError({ error }) { 3 | if ( 4 | error?.response?.statusCode === 401 || 5 | error?.response?.statusCode === 403 || 6 | error?.response?.status === 401 || 7 | error?.response?.status === 403 8 | ) { 9 | throw new AuthError(); 10 | } 11 | 12 | return { 13 | error, 14 | }; 15 | } -------------------------------------------------------------------------------- /ui/src/services/k8s/core.key.ts: -------------------------------------------------------------------------------- 1 | export const nodeKey = { 2 | all: ['nodes', 'list'], 3 | }; -------------------------------------------------------------------------------- /ui/src/tests/mocks/salt/constants.ts: -------------------------------------------------------------------------------- 1 | export const JOB_ID = '20190527152722429535'; 2 | export const NODE_NAME = 'node1'; 3 | export const METAL_VERSION = '2.4.2'; -------------------------------------------------------------------------------- /ui/src/typeGuard.ts: -------------------------------------------------------------------------------- 1 | export function notFalsyTypeGuard( 2 | entityOrFalsy: T | null | undefined | 0 | '', 3 | message = 'Entity not defined', 4 | ): T { 5 | if (!entityOrFalsy) { 6 | throw new Error(message); 7 | } 8 | 9 | return entityOrFalsy; 10 | } 11 | -------------------------------------------------------------------------------- /ui/src/types.ts: -------------------------------------------------------------------------------- 1 | export type Result = 2 | | { 3 | error: any; 4 | } 5 | | T; 6 | export type APIResult = Result<{ 7 | body: T; 8 | }>; -------------------------------------------------------------------------------- /vagrant_config.rb.example: -------------------------------------------------------------------------------- 1 | DEBUG = 'false' 2 | RHSM_USERNAME = '' 3 | RHSM_PASSWORD = '' 4 | RHSM_POOL = '' 5 | --------------------------------------------------------------------------------