pepr 0.46.2 → 0.46.3-nightly.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/banner.d.ts.map +1 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.helpers.d.ts.map +1 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/format.d.ts.map +1 -0
- package/dist/cli/format.helpers.d.ts.map +1 -0
- package/dist/cli/init/enums.d.ts.map +1 -0
- package/dist/cli/init/index.d.ts.map +1 -0
- package/dist/{src/cli → cli}/init/templates.d.ts +2 -6
- package/dist/cli/init/templates.d.ts.map +1 -0
- package/dist/cli/init/utils.d.ts.map +1 -0
- package/dist/cli/init/walkthrough.d.ts.map +1 -0
- package/dist/cli/kfc.d.ts.map +1 -0
- package/dist/cli/monitor.d.ts.map +1 -0
- package/dist/cli/root.d.ts.map +1 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/uuid.d.ts.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +79 -23
- package/dist/controller.js +1 -1
- package/dist/fixtures/loader.d.ts.map +1 -0
- package/dist/lib/assets/assets.d.ts.map +1 -0
- package/dist/lib/assets/defaultTestObjects.d.ts.map +1 -0
- package/dist/lib/assets/deploy.d.ts.map +1 -0
- package/dist/lib/assets/destroy.d.ts.map +1 -0
- package/dist/lib/assets/helm.d.ts.map +1 -0
- package/dist/lib/assets/index.d.ts.map +1 -0
- package/dist/lib/assets/loader.d.ts.map +1 -0
- package/dist/lib/assets/networking.d.ts.map +1 -0
- package/dist/lib/assets/pods.d.ts.map +1 -0
- package/dist/lib/assets/rbac.d.ts.map +1 -0
- package/dist/lib/assets/store.d.ts.map +1 -0
- package/dist/lib/assets/webhooks.d.ts.map +1 -0
- package/dist/lib/assets/yaml/generateAllYaml.d.ts.map +1 -0
- package/dist/lib/assets/yaml/generateZarfYaml.d.ts.map +1 -0
- package/dist/lib/assets/yaml/overridesFile.d.ts.map +1 -0
- package/dist/lib/common-types.d.ts.map +1 -0
- package/dist/lib/controller/index.d.ts.map +1 -0
- package/dist/lib/controller/index.util.d.ts.map +1 -0
- package/dist/lib/controller/store.d.ts.map +1 -0
- package/dist/lib/controller/storeCache.d.ts.map +1 -0
- package/dist/lib/core/capability.d.ts.map +1 -0
- package/dist/lib/core/envChecks.d.ts.map +1 -0
- package/dist/lib/core/module.d.ts.map +1 -0
- package/dist/lib/core/queue.d.ts.map +1 -0
- package/dist/lib/core/schedule.d.ts.map +1 -0
- package/dist/lib/core/storage.d.ts.map +1 -0
- package/dist/lib/deploymentChecks.d.ts.map +1 -0
- package/dist/lib/enums.d.ts.map +1 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/filesystemService.d.ts.map +1 -0
- package/dist/lib/filter/adjudicators/admissionRequest.d.ts.map +1 -0
- package/dist/lib/filter/adjudicators/binding.d.ts.map +1 -0
- package/dist/lib/filter/adjudicators/defaultTestObjects.d.ts.map +1 -0
- package/dist/lib/filter/adjudicators/kubernetesObject.d.ts.map +1 -0
- package/dist/lib/filter/adjudicators/mismatch.d.ts.map +1 -0
- package/dist/lib/filter/adjudicators/postCollection.d.ts.map +1 -0
- package/dist/lib/filter/filter.d.ts.map +1 -0
- package/dist/lib/finalizer.d.ts.map +1 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/included-files.d.ts.map +1 -0
- package/dist/lib/k8s.d.ts.map +1 -0
- package/dist/lib/mutate-request.d.ts.map +1 -0
- package/dist/lib/processors/decode-utils.d.ts.map +1 -0
- package/dist/lib/processors/mutate-processor.d.ts.map +1 -0
- package/dist/lib/processors/validate-processor.d.ts.map +1 -0
- package/dist/lib/processors/watch-processor.d.ts.map +1 -0
- package/dist/lib/telemetry/logger.d.ts.map +1 -0
- package/dist/lib/telemetry/metrics.d.ts.map +1 -0
- package/dist/lib/telemetry/timeUtils.d.ts.map +1 -0
- package/dist/lib/telemetry/webhookTimeouts.d.ts.map +1 -0
- package/dist/lib/tls.d.ts.map +1 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/validate-request.d.ts.map +1 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +124 -38
- package/dist/lib.js.map +2 -2
- package/dist/{src/runtime → runtime}/controller.d.ts.map +1 -1
- package/dist/sdk/heredoc.d.ts.map +1 -0
- package/dist/sdk/sdk.d.ts.map +1 -0
- package/package.json +8 -13
- package/src/lib/assets/assets.ts +46 -11
- package/src/lib/assets/defaultTestObjects.ts +13 -2
- package/src/lib/assets/deploy.ts +25 -5
- package/src/lib/assets/index.ts +8 -2
- package/src/lib/assets/pods.ts +5 -1
- package/src/lib/assets/webhooks.ts +12 -3
- package/src/lib/assets/yaml/generateAllYaml.ts +12 -2
- package/src/lib/controller/index.ts +9 -3
- package/src/lib/core/capability.ts +32 -8
- package/src/lib/core/module.ts +5 -1
- package/src/lib/core/storage.ts +3 -1
- package/src/lib/deploymentChecks.ts +3 -1
- package/src/lib/filter/adjudicators/admissionRequest.ts +4 -1
- package/src/lib/filter/adjudicators/binding.ts +17 -4
- package/src/lib/filter/adjudicators/kubernetesObject.ts +4 -2
- package/src/lib/filter/adjudicators/mismatch.ts +25 -6
- package/src/lib/filter/adjudicators/postCollection.ts +15 -3
- package/src/lib/filter/filter.ts +63 -15
- package/src/lib/helpers.ts +36 -10
- package/src/lib/included-files.ts +5 -1
- package/src/lib/processors/decode-utils.ts +4 -1
- package/src/lib/processors/mutate-processor.ts +4 -1
- package/src/lib/processors/validate-processor.ts +4 -1
- package/src/lib/processors/watch-processor.ts +49 -19
- package/src/lib/telemetry/metrics.ts +6 -2
- package/src/lib/telemetry/webhookTimeouts.ts +4 -1
- package/src/templates/.prettierrc.json +3 -2
- package/src/templates/capabilities/hello-pepr.ts +2 -8
- package/dist/.github/workflows/pepr-excellent-examples-matrix.d.ts +0 -2
- package/dist/.github/workflows/pepr-excellent-examples-matrix.d.ts.map +0 -1
- package/dist/commitlint.config.d.ts +0 -4
- package/dist/commitlint.config.d.ts.map +0 -1
- package/dist/integration/helpers/cmd.d.ts +0 -22
- package/dist/integration/helpers/cmd.d.ts.map +0 -1
- package/dist/integration/helpers/pepr.d.ts +0 -5
- package/dist/integration/helpers/pepr.d.ts.map +0 -1
- package/dist/integration/helpers/resource.d.ts +0 -18
- package/dist/integration/helpers/resource.d.ts.map +0 -1
- package/dist/integration/helpers/time.d.ts +0 -4
- package/dist/integration/helpers/time.d.ts.map +0 -1
- package/dist/integration/helpers/workdir.d.ts +0 -12
- package/dist/integration/helpers/workdir.d.ts.map +0 -1
- package/dist/scripts/set-version.d.ts +0 -2
- package/dist/scripts/set-version.d.ts.map +0 -1
- package/dist/src/cli/banner.d.ts.map +0 -1
- package/dist/src/cli/build.d.ts.map +0 -1
- package/dist/src/cli/build.helpers.d.ts.map +0 -1
- package/dist/src/cli/deploy.d.ts.map +0 -1
- package/dist/src/cli/dev.d.ts.map +0 -1
- package/dist/src/cli/format.d.ts.map +0 -1
- package/dist/src/cli/format.helpers.d.ts.map +0 -1
- package/dist/src/cli/init/enums.d.ts.map +0 -1
- package/dist/src/cli/init/index.d.ts.map +0 -1
- package/dist/src/cli/init/templates.d.ts.map +0 -1
- package/dist/src/cli/init/utils.d.ts.map +0 -1
- package/dist/src/cli/init/walkthrough.d.ts.map +0 -1
- package/dist/src/cli/kfc.d.ts.map +0 -1
- package/dist/src/cli/monitor.d.ts.map +0 -1
- package/dist/src/cli/root.d.ts.map +0 -1
- package/dist/src/cli/types.d.ts.map +0 -1
- package/dist/src/cli/update.d.ts.map +0 -1
- package/dist/src/cli/uuid.d.ts.map +0 -1
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/fixtures/loader.d.ts.map +0 -1
- package/dist/src/lib/assets/assets.d.ts.map +0 -1
- package/dist/src/lib/assets/defaultTestObjects.d.ts.map +0 -1
- package/dist/src/lib/assets/deploy.d.ts.map +0 -1
- package/dist/src/lib/assets/destroy.d.ts.map +0 -1
- package/dist/src/lib/assets/helm.d.ts.map +0 -1
- package/dist/src/lib/assets/index.d.ts.map +0 -1
- package/dist/src/lib/assets/loader.d.ts.map +0 -1
- package/dist/src/lib/assets/networking.d.ts.map +0 -1
- package/dist/src/lib/assets/pods.d.ts.map +0 -1
- package/dist/src/lib/assets/rbac.d.ts.map +0 -1
- package/dist/src/lib/assets/store.d.ts.map +0 -1
- package/dist/src/lib/assets/webhooks.d.ts.map +0 -1
- package/dist/src/lib/assets/yaml/generateAllYaml.d.ts.map +0 -1
- package/dist/src/lib/assets/yaml/generateZarfYaml.d.ts.map +0 -1
- package/dist/src/lib/assets/yaml/overridesFile.d.ts.map +0 -1
- package/dist/src/lib/common-types.d.ts.map +0 -1
- package/dist/src/lib/controller/index.d.ts.map +0 -1
- package/dist/src/lib/controller/index.util.d.ts.map +0 -1
- package/dist/src/lib/controller/store.d.ts.map +0 -1
- package/dist/src/lib/controller/storeCache.d.ts.map +0 -1
- package/dist/src/lib/core/capability.d.ts.map +0 -1
- package/dist/src/lib/core/envChecks.d.ts.map +0 -1
- package/dist/src/lib/core/module.d.ts.map +0 -1
- package/dist/src/lib/core/queue.d.ts.map +0 -1
- package/dist/src/lib/core/schedule.d.ts.map +0 -1
- package/dist/src/lib/core/storage.d.ts.map +0 -1
- package/dist/src/lib/deploymentChecks.d.ts.map +0 -1
- package/dist/src/lib/enums.d.ts.map +0 -1
- package/dist/src/lib/errors.d.ts.map +0 -1
- package/dist/src/lib/filesystemService.d.ts.map +0 -1
- package/dist/src/lib/filter/adjudicators/admissionRequest.d.ts.map +0 -1
- package/dist/src/lib/filter/adjudicators/binding.d.ts.map +0 -1
- package/dist/src/lib/filter/adjudicators/defaultTestObjects.d.ts.map +0 -1
- package/dist/src/lib/filter/adjudicators/kubernetesObject.d.ts.map +0 -1
- package/dist/src/lib/filter/adjudicators/mismatch.d.ts.map +0 -1
- package/dist/src/lib/filter/adjudicators/postCollection.d.ts.map +0 -1
- package/dist/src/lib/filter/filter.d.ts.map +0 -1
- package/dist/src/lib/finalizer.d.ts.map +0 -1
- package/dist/src/lib/helpers.d.ts.map +0 -1
- package/dist/src/lib/included-files.d.ts.map +0 -1
- package/dist/src/lib/k8s.d.ts.map +0 -1
- package/dist/src/lib/mutate-request.d.ts.map +0 -1
- package/dist/src/lib/processors/decode-utils.d.ts.map +0 -1
- package/dist/src/lib/processors/mutate-processor.d.ts.map +0 -1
- package/dist/src/lib/processors/validate-processor.d.ts.map +0 -1
- package/dist/src/lib/processors/watch-processor.d.ts.map +0 -1
- package/dist/src/lib/telemetry/logger.d.ts.map +0 -1
- package/dist/src/lib/telemetry/metrics.d.ts.map +0 -1
- package/dist/src/lib/telemetry/timeUtils.d.ts.map +0 -1
- package/dist/src/lib/telemetry/webhookTimeouts.d.ts.map +0 -1
- package/dist/src/lib/tls.d.ts.map +0 -1
- package/dist/src/lib/types.d.ts.map +0 -1
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/validate-request.d.ts.map +0 -1
- package/dist/src/lib.d.ts.map +0 -1
- package/dist/src/sdk/cosign.d.ts +0 -18
- package/dist/src/sdk/cosign.d.ts.map +0 -1
- package/dist/src/sdk/heredoc.d.ts.map +0 -1
- package/dist/src/sdk/sdk.d.ts.map +0 -1
- package/src/lib/.prettierrc +0 -14
- package/src/sdk/cosign.ts +0 -327
- /package/dist/{src/cli → cli}/banner.d.ts +0 -0
- /package/dist/{src/cli → cli}/build.d.ts +0 -0
- /package/dist/{src/cli → cli}/build.helpers.d.ts +0 -0
- /package/dist/{src/cli → cli}/deploy.d.ts +0 -0
- /package/dist/{src/cli → cli}/dev.d.ts +0 -0
- /package/dist/{src/cli → cli}/format.d.ts +0 -0
- /package/dist/{src/cli → cli}/format.helpers.d.ts +0 -0
- /package/dist/{src/cli → cli}/init/enums.d.ts +0 -0
- /package/dist/{src/cli → cli}/init/index.d.ts +0 -0
- /package/dist/{src/cli → cli}/init/utils.d.ts +0 -0
- /package/dist/{src/cli → cli}/init/walkthrough.d.ts +0 -0
- /package/dist/{src/cli → cli}/kfc.d.ts +0 -0
- /package/dist/{src/cli → cli}/monitor.d.ts +0 -0
- /package/dist/{src/cli → cli}/root.d.ts +0 -0
- /package/dist/{src/cli → cli}/types.d.ts +0 -0
- /package/dist/{src/cli → cli}/update.d.ts +0 -0
- /package/dist/{src/cli → cli}/uuid.d.ts +0 -0
- /package/dist/{src/cli.d.ts → cli.d.ts} +0 -0
- /package/dist/{src/fixtures → fixtures}/loader.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/assets.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/defaultTestObjects.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/deploy.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/destroy.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/helm.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/index.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/loader.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/networking.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/pods.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/rbac.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/store.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/webhooks.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/yaml/generateAllYaml.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/yaml/generateZarfYaml.d.ts +0 -0
- /package/dist/{src/lib → lib}/assets/yaml/overridesFile.d.ts +0 -0
- /package/dist/{src/lib → lib}/common-types.d.ts +0 -0
- /package/dist/{src/lib → lib}/controller/index.d.ts +0 -0
- /package/dist/{src/lib → lib}/controller/index.util.d.ts +0 -0
- /package/dist/{src/lib → lib}/controller/store.d.ts +0 -0
- /package/dist/{src/lib → lib}/controller/storeCache.d.ts +0 -0
- /package/dist/{src/lib → lib}/core/capability.d.ts +0 -0
- /package/dist/{src/lib → lib}/core/envChecks.d.ts +0 -0
- /package/dist/{src/lib → lib}/core/module.d.ts +0 -0
- /package/dist/{src/lib → lib}/core/queue.d.ts +0 -0
- /package/dist/{src/lib → lib}/core/schedule.d.ts +0 -0
- /package/dist/{src/lib → lib}/core/storage.d.ts +0 -0
- /package/dist/{src/lib → lib}/deploymentChecks.d.ts +0 -0
- /package/dist/{src/lib → lib}/enums.d.ts +0 -0
- /package/dist/{src/lib → lib}/errors.d.ts +0 -0
- /package/dist/{src/lib → lib}/filesystemService.d.ts +0 -0
- /package/dist/{src/lib → lib}/filter/adjudicators/admissionRequest.d.ts +0 -0
- /package/dist/{src/lib → lib}/filter/adjudicators/binding.d.ts +0 -0
- /package/dist/{src/lib → lib}/filter/adjudicators/defaultTestObjects.d.ts +0 -0
- /package/dist/{src/lib → lib}/filter/adjudicators/kubernetesObject.d.ts +0 -0
- /package/dist/{src/lib → lib}/filter/adjudicators/mismatch.d.ts +0 -0
- /package/dist/{src/lib → lib}/filter/adjudicators/postCollection.d.ts +0 -0
- /package/dist/{src/lib → lib}/filter/filter.d.ts +0 -0
- /package/dist/{src/lib → lib}/finalizer.d.ts +0 -0
- /package/dist/{src/lib → lib}/helpers.d.ts +0 -0
- /package/dist/{src/lib → lib}/included-files.d.ts +0 -0
- /package/dist/{src/lib → lib}/k8s.d.ts +0 -0
- /package/dist/{src/lib → lib}/mutate-request.d.ts +0 -0
- /package/dist/{src/lib → lib}/processors/decode-utils.d.ts +0 -0
- /package/dist/{src/lib → lib}/processors/mutate-processor.d.ts +0 -0
- /package/dist/{src/lib → lib}/processors/validate-processor.d.ts +0 -0
- /package/dist/{src/lib → lib}/processors/watch-processor.d.ts +0 -0
- /package/dist/{src/lib → lib}/telemetry/logger.d.ts +0 -0
- /package/dist/{src/lib → lib}/telemetry/metrics.d.ts +0 -0
- /package/dist/{src/lib → lib}/telemetry/timeUtils.d.ts +0 -0
- /package/dist/{src/lib → lib}/telemetry/webhookTimeouts.d.ts +0 -0
- /package/dist/{src/lib → lib}/tls.d.ts +0 -0
- /package/dist/{src/lib → lib}/types.d.ts +0 -0
- /package/dist/{src/lib → lib}/utils.d.ts +0 -0
- /package/dist/{src/lib → lib}/validate-request.d.ts +0 -0
- /package/dist/{src/lib.d.ts → lib.d.ts} +0 -0
- /package/dist/{src/runtime → runtime}/controller.d.ts +0 -0
- /package/dist/{src/sdk → sdk}/heredoc.d.ts +0 -0
- /package/dist/{src/sdk → sdk}/sdk.d.ts +0 -0
|
@@ -32,7 +32,12 @@ import {
|
|
|
32
32
|
carriedNamespace,
|
|
33
33
|
missingDeletionTimestamp,
|
|
34
34
|
} from "./kubernetesObject";
|
|
35
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
declaredOperation,
|
|
37
|
+
declaredGroup,
|
|
38
|
+
declaredVersion,
|
|
39
|
+
declaredKind,
|
|
40
|
+
} from "./admissionRequest";
|
|
36
41
|
import { Event, Operation } from "../../enums";
|
|
37
42
|
import { AdmissionRequest } from "../../common-types";
|
|
38
43
|
|
|
@@ -48,12 +53,20 @@ export const mismatchedName = allPass([
|
|
|
48
53
|
|
|
49
54
|
export const mismatchedNameRegex = allPass([
|
|
50
55
|
pipe(nthArg(0), definesNameRegex),
|
|
51
|
-
pipe(
|
|
56
|
+
pipe(
|
|
57
|
+
(binding, kubernetesObject) =>
|
|
58
|
+
new RegExp(definedNameRegex(binding)).test(carriedName(kubernetesObject)),
|
|
59
|
+
not,
|
|
60
|
+
),
|
|
52
61
|
]);
|
|
53
62
|
|
|
54
63
|
export const mismatchedNamespace = allPass([
|
|
55
64
|
pipe(nthArg(0), definesNamespaces),
|
|
56
|
-
pipe(
|
|
65
|
+
pipe(
|
|
66
|
+
(binding, kubernetesObject) =>
|
|
67
|
+
definedNamespaces(binding).includes(carriedNamespace(kubernetesObject)),
|
|
68
|
+
not,
|
|
69
|
+
),
|
|
57
70
|
]);
|
|
58
71
|
|
|
59
72
|
export const mismatchedNamespaceRegex = allPass([
|
|
@@ -95,12 +108,16 @@ export const metasMismatch = pipe(
|
|
|
95
108
|
|
|
96
109
|
export const mismatchedAnnotations = allPass([
|
|
97
110
|
pipe(nthArg(0), definesAnnotations),
|
|
98
|
-
pipe((binding, kubernetesObject) =>
|
|
111
|
+
pipe((binding, kubernetesObject) =>
|
|
112
|
+
metasMismatch(definedAnnotations(binding), carriedAnnotations(kubernetesObject)),
|
|
113
|
+
),
|
|
99
114
|
]);
|
|
100
115
|
|
|
101
116
|
export const mismatchedLabels = allPass([
|
|
102
117
|
pipe(nthArg(0), definesLabels),
|
|
103
|
-
pipe((binding, kubernetesObject) =>
|
|
118
|
+
pipe((binding, kubernetesObject) =>
|
|
119
|
+
metasMismatch(definedLabels(binding), carriedLabels(kubernetesObject)),
|
|
120
|
+
),
|
|
104
121
|
]);
|
|
105
122
|
|
|
106
123
|
export const mismatchedEvent = pipe(
|
|
@@ -126,5 +143,7 @@ export const mismatchedKind = allPass([
|
|
|
126
143
|
export const operationMatchesEvent = anyPass([
|
|
127
144
|
pipe(nthArg(1), equals(Event.ANY)),
|
|
128
145
|
pipe((operation: Operation, event: Event): boolean => operation.valueOf() === event.valueOf()),
|
|
129
|
-
pipe((operation: Operation, event: Event): boolean =>
|
|
146
|
+
pipe((operation: Operation, event: Event): boolean =>
|
|
147
|
+
operation ? event.includes(operation) : false,
|
|
148
|
+
),
|
|
130
149
|
]);
|
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
|
|
4
4
|
import { __, allPass, curry, difference, equals, gt, length, not, nthArg, pipe } from "ramda";
|
|
5
5
|
import { KubernetesObject } from "kubernetes-fluent-client";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
definedKind,
|
|
8
|
+
definedNamespaces,
|
|
9
|
+
definesDelete,
|
|
10
|
+
definesDeletionTimestamp,
|
|
11
|
+
definesNamespaces,
|
|
12
|
+
} from "./binding";
|
|
7
13
|
import { carriedNamespace, carriesNamespace } from "./kubernetesObject";
|
|
8
14
|
|
|
9
15
|
/*
|
|
@@ -14,7 +20,10 @@ import { carriedNamespace, carriesNamespace } from "./kubernetesObject";
|
|
|
14
20
|
*/
|
|
15
21
|
|
|
16
22
|
export const bindsToKind = curry(
|
|
17
|
-
allPass([
|
|
23
|
+
allPass([
|
|
24
|
+
pipe(nthArg(0), definedKind, equals(""), not),
|
|
25
|
+
pipe((binding, kind) => definedKind(binding) === kind),
|
|
26
|
+
]),
|
|
18
27
|
);
|
|
19
28
|
export const bindsToNamespace = curry(pipe(bindsToKind(__, "Namespace")));
|
|
20
29
|
export const misboundNamespace = allPass([bindsToNamespace, definesNamespaces]);
|
|
@@ -74,4 +83,7 @@ export const unbindableNamespaces = allPass([
|
|
|
74
83
|
),
|
|
75
84
|
]);
|
|
76
85
|
|
|
77
|
-
export const misboundDeleteWithDeletionTimestamp = allPass([
|
|
86
|
+
export const misboundDeleteWithDeletionTimestamp = allPass([
|
|
87
|
+
definesDelete,
|
|
88
|
+
definesDeletionTimestamp,
|
|
89
|
+
]);
|
package/src/lib/filter/filter.ts
CHANGED
|
@@ -12,7 +12,12 @@ import {
|
|
|
12
12
|
unbindableNamespaces,
|
|
13
13
|
uncarryableNamespace,
|
|
14
14
|
} from "./adjudicators/postCollection";
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
declaredOperation,
|
|
17
|
+
declaredGroup,
|
|
18
|
+
declaredVersion,
|
|
19
|
+
declaredKind,
|
|
20
|
+
} from "./adjudicators/admissionRequest";
|
|
16
21
|
import {
|
|
17
22
|
definedEvent,
|
|
18
23
|
definedName,
|
|
@@ -25,7 +30,12 @@ import {
|
|
|
25
30
|
definedNamespaceRegexes,
|
|
26
31
|
definedNameRegex,
|
|
27
32
|
} from "./adjudicators/binding";
|
|
28
|
-
import {
|
|
33
|
+
import {
|
|
34
|
+
carriedName,
|
|
35
|
+
carriedNamespace,
|
|
36
|
+
carriedLabels,
|
|
37
|
+
carriedAnnotations,
|
|
38
|
+
} from "./adjudicators/kubernetesObject";
|
|
29
39
|
import {
|
|
30
40
|
mismatchedDeletionTimestamp,
|
|
31
41
|
mismatchedEvent,
|
|
@@ -137,49 +147,72 @@ export function adjudicateMisboundNamespace(binding: Binding): AdjudicationResul
|
|
|
137
147
|
return misboundNamespace(binding) ? "Cannot use namespace filter on a namespace object." : null;
|
|
138
148
|
}
|
|
139
149
|
|
|
140
|
-
export function adjudicateMisboundDeleteWithDeletionTimestamp(
|
|
150
|
+
export function adjudicateMisboundDeleteWithDeletionTimestamp(
|
|
151
|
+
binding: Binding,
|
|
152
|
+
): AdjudicationResult {
|
|
141
153
|
return misboundDeleteWithDeletionTimestamp(binding)
|
|
142
154
|
? "Cannot use deletionTimestamp filter on a DELETE operation."
|
|
143
155
|
: null;
|
|
144
156
|
}
|
|
145
157
|
|
|
146
|
-
export function adjudicateMismatchedDeletionTimestamp(
|
|
158
|
+
export function adjudicateMismatchedDeletionTimestamp(
|
|
159
|
+
binding: Binding,
|
|
160
|
+
obj: KubernetesObject,
|
|
161
|
+
): AdjudicationResult {
|
|
147
162
|
return mismatchedDeletionTimestamp(binding, obj)
|
|
148
163
|
? "Binding defines deletionTimestamp but Object does not carry it."
|
|
149
164
|
: null;
|
|
150
165
|
}
|
|
151
166
|
|
|
152
|
-
export function adjudicateMismatchedEvent(
|
|
167
|
+
export function adjudicateMismatchedEvent(
|
|
168
|
+
binding: Binding,
|
|
169
|
+
req: AdmissionRequest,
|
|
170
|
+
): AdjudicationResult {
|
|
153
171
|
return mismatchedEvent(binding, req)
|
|
154
172
|
? `Binding defines event '${definedEvent(binding)}' but Request declares '${declaredOperation(req)}'.`
|
|
155
173
|
: null;
|
|
156
174
|
}
|
|
157
175
|
|
|
158
|
-
export function adjudicateMismatchedName(
|
|
176
|
+
export function adjudicateMismatchedName(
|
|
177
|
+
binding: Binding,
|
|
178
|
+
obj: KubernetesObject,
|
|
179
|
+
): AdjudicationResult {
|
|
159
180
|
return mismatchedName(binding, obj)
|
|
160
181
|
? `Binding defines name '${definedName(binding)}' but Object carries '${carriedName(obj)}'.`
|
|
161
182
|
: null;
|
|
162
183
|
}
|
|
163
184
|
|
|
164
|
-
export function adjudicateMismatchedGroup(
|
|
185
|
+
export function adjudicateMismatchedGroup(
|
|
186
|
+
binding: Binding,
|
|
187
|
+
req: AdmissionRequest,
|
|
188
|
+
): AdjudicationResult {
|
|
165
189
|
return mismatchedGroup(binding, req)
|
|
166
190
|
? `Binding defines group '${definedGroup(binding)}' but Request declares '${declaredGroup(req)}'.`
|
|
167
191
|
: null;
|
|
168
192
|
}
|
|
169
193
|
|
|
170
|
-
export function adjudicateMismatchedVersion(
|
|
194
|
+
export function adjudicateMismatchedVersion(
|
|
195
|
+
binding: Binding,
|
|
196
|
+
req: AdmissionRequest,
|
|
197
|
+
): AdjudicationResult {
|
|
171
198
|
return mismatchedVersion(binding, req)
|
|
172
199
|
? `Binding defines version '${definedVersion(binding)}' but Request declares '${declaredVersion(req)}'.`
|
|
173
200
|
: null;
|
|
174
201
|
}
|
|
175
202
|
|
|
176
|
-
export function adjudicateMismatchedKind(
|
|
203
|
+
export function adjudicateMismatchedKind(
|
|
204
|
+
binding: Binding,
|
|
205
|
+
req: AdmissionRequest,
|
|
206
|
+
): AdjudicationResult {
|
|
177
207
|
return mismatchedKind(binding, req)
|
|
178
208
|
? `Binding defines kind '${definedKind(binding)}' but Request declares '${declaredKind(req)}'.`
|
|
179
209
|
: null;
|
|
180
210
|
}
|
|
181
211
|
|
|
182
|
-
export function adjudicateUnbindableNamespaces(
|
|
212
|
+
export function adjudicateUnbindableNamespaces(
|
|
213
|
+
capabilityNamespaces: string[],
|
|
214
|
+
binding: Binding,
|
|
215
|
+
): AdjudicationResult {
|
|
183
216
|
return unbindableNamespaces(capabilityNamespaces, binding)
|
|
184
217
|
? `Binding defines namespaces ${JSON.stringify(definedNamespaces(binding))} but namespaces allowed by Capability are '${JSON.stringify(capabilityNamespaces)}'.`
|
|
185
218
|
: null;
|
|
@@ -194,31 +227,46 @@ export function adjudicateUncarryableNamespace(
|
|
|
194
227
|
: null;
|
|
195
228
|
}
|
|
196
229
|
|
|
197
|
-
export function adjudicateMismatchedNamespace(
|
|
230
|
+
export function adjudicateMismatchedNamespace(
|
|
231
|
+
binding: Binding,
|
|
232
|
+
obj: KubernetesObject,
|
|
233
|
+
): AdjudicationResult {
|
|
198
234
|
return mismatchedNamespace(binding, obj)
|
|
199
235
|
? `Binding defines namespaces '${JSON.stringify(definedNamespaces(binding))}' but Object carries '${carriedNamespace(obj)}'.`
|
|
200
236
|
: null;
|
|
201
237
|
}
|
|
202
238
|
|
|
203
|
-
export function adjudicateMismatchedLabels(
|
|
239
|
+
export function adjudicateMismatchedLabels(
|
|
240
|
+
binding: Binding,
|
|
241
|
+
obj: KubernetesObject,
|
|
242
|
+
): AdjudicationResult {
|
|
204
243
|
return mismatchedLabels(binding, obj)
|
|
205
244
|
? `Binding defines labels '${JSON.stringify(definedLabels(binding))}' but Object carries '${JSON.stringify(carriedLabels(obj))}'.`
|
|
206
245
|
: null;
|
|
207
246
|
}
|
|
208
247
|
|
|
209
|
-
export function adjudicateMismatchedAnnotations(
|
|
248
|
+
export function adjudicateMismatchedAnnotations(
|
|
249
|
+
binding: Binding,
|
|
250
|
+
obj: KubernetesObject,
|
|
251
|
+
): AdjudicationResult {
|
|
210
252
|
return mismatchedAnnotations(binding, obj)
|
|
211
253
|
? `Binding defines annotations '${JSON.stringify(definedAnnotations(binding))}' but Object carries '${JSON.stringify(carriedAnnotations(obj))}'.`
|
|
212
254
|
: null;
|
|
213
255
|
}
|
|
214
256
|
|
|
215
|
-
export function adjudicateMismatchedNamespaceRegex(
|
|
257
|
+
export function adjudicateMismatchedNamespaceRegex(
|
|
258
|
+
binding: Binding,
|
|
259
|
+
obj: KubernetesObject,
|
|
260
|
+
): AdjudicationResult {
|
|
216
261
|
return mismatchedNamespaceRegex(binding, obj)
|
|
217
262
|
? `Binding defines namespace regexes '${JSON.stringify(definedNamespaceRegexes(binding))}' but Object carries '${carriedNamespace(obj)}'.`
|
|
218
263
|
: null;
|
|
219
264
|
}
|
|
220
265
|
|
|
221
|
-
export function adjudicateMismatchedNameRegex(
|
|
266
|
+
export function adjudicateMismatchedNameRegex(
|
|
267
|
+
binding: Binding,
|
|
268
|
+
obj: KubernetesObject,
|
|
269
|
+
): AdjudicationResult {
|
|
222
270
|
return mismatchedNameRegex(binding, obj)
|
|
223
271
|
? `Binding defines name regex '${definedNameRegex(binding)}' but Object carries '${carriedName(obj)}'.`
|
|
224
272
|
: null;
|
package/src/lib/helpers.ts
CHANGED
|
@@ -15,7 +15,9 @@ export function validateCapabilityNames(capabilities: CapabilityExport[] | undef
|
|
|
15
15
|
if (capabilities && capabilities.length > 0) {
|
|
16
16
|
for (let i = 0; i < capabilities.length; i++) {
|
|
17
17
|
if (capabilities[i].name !== sanitizeResourceName(capabilities[i].name)) {
|
|
18
|
-
throw new ValidationError(
|
|
18
|
+
throw new ValidationError(
|
|
19
|
+
`Capability name is not a valid Kubernetes resource name: ${capabilities[i].name}`,
|
|
20
|
+
);
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
}
|
|
@@ -88,15 +90,23 @@ export function hasAnyOverlap<T>(array1: T[], array2: T[]): boolean {
|
|
|
88
90
|
return array1.some(element => array2.includes(element));
|
|
89
91
|
}
|
|
90
92
|
|
|
91
|
-
export function ignoredNamespaceConflict(
|
|
93
|
+
export function ignoredNamespaceConflict(
|
|
94
|
+
ignoreNamespaces: string[],
|
|
95
|
+
bindingNamespaces: string[],
|
|
96
|
+
): boolean {
|
|
92
97
|
return hasAnyOverlap(bindingNamespaces, ignoreNamespaces);
|
|
93
98
|
}
|
|
94
99
|
|
|
95
|
-
export function bindingAndCapabilityNSConflict(
|
|
100
|
+
export function bindingAndCapabilityNSConflict(
|
|
101
|
+
bindingNamespaces: string[],
|
|
102
|
+
capabilityNamespaces: string[],
|
|
103
|
+
): boolean {
|
|
96
104
|
if (!capabilityNamespaces) {
|
|
97
105
|
return false;
|
|
98
106
|
}
|
|
99
|
-
return
|
|
107
|
+
return (
|
|
108
|
+
capabilityNamespaces.length !== 0 && !hasEveryOverlap(bindingNamespaces, capabilityNamespaces)
|
|
109
|
+
);
|
|
100
110
|
}
|
|
101
111
|
|
|
102
112
|
export function generateWatchNamespaceError(
|
|
@@ -125,9 +135,14 @@ export function generateWatchNamespaceError(
|
|
|
125
135
|
}
|
|
126
136
|
|
|
127
137
|
// namespaceComplianceValidator ensures that capability bindings respect ignored and capability namespaces
|
|
128
|
-
export function namespaceComplianceValidator(
|
|
138
|
+
export function namespaceComplianceValidator(
|
|
139
|
+
capability: CapabilityExport,
|
|
140
|
+
ignoredNamespaces?: string[],
|
|
141
|
+
): void {
|
|
129
142
|
const { namespaces: capabilityNamespaces, bindings, name } = capability;
|
|
130
|
-
const bindingNamespaces: string[] = bindings.flatMap(
|
|
143
|
+
const bindingNamespaces: string[] = bindings.flatMap(
|
|
144
|
+
(binding: Binding) => binding.filters.namespaces,
|
|
145
|
+
);
|
|
131
146
|
const bindingRegexNamespaces: string[] = bindings.flatMap(
|
|
132
147
|
(binding: Binding) => binding.filters.regexNamespaces || [],
|
|
133
148
|
);
|
|
@@ -153,12 +168,18 @@ const matchRegexToCapababilityNamespace = (
|
|
|
153
168
|
bindingRegexNamespaces: string[],
|
|
154
169
|
capabilityNamespaces: string[] | undefined,
|
|
155
170
|
): void => {
|
|
156
|
-
if (
|
|
171
|
+
if (
|
|
172
|
+
bindingRegexNamespaces.length > 0 &&
|
|
173
|
+
capabilityNamespaces &&
|
|
174
|
+
capabilityNamespaces.length > 0
|
|
175
|
+
) {
|
|
157
176
|
for (const regexNamespace of bindingRegexNamespaces) {
|
|
158
177
|
let matches = false;
|
|
159
178
|
matches =
|
|
160
179
|
regexNamespace !== "" &&
|
|
161
|
-
capabilityNamespaces.some(capabilityNamespace =>
|
|
180
|
+
capabilityNamespaces.some(capabilityNamespace =>
|
|
181
|
+
matchesRegex(regexNamespace, capabilityNamespace),
|
|
182
|
+
);
|
|
162
183
|
if (!matches) {
|
|
163
184
|
throw new Error(
|
|
164
185
|
`Ignoring Watch Callback: Object namespace does not match any capability namespace with regex ${regexNamespace}.`,
|
|
@@ -168,10 +189,15 @@ const matchRegexToCapababilityNamespace = (
|
|
|
168
189
|
}
|
|
169
190
|
};
|
|
170
191
|
|
|
171
|
-
const checkRegexNamespaces = (
|
|
192
|
+
const checkRegexNamespaces = (
|
|
193
|
+
bindingRegexNamespaces: string[],
|
|
194
|
+
ignoredNamespaces: string[] | undefined,
|
|
195
|
+
): void => {
|
|
172
196
|
if (bindingRegexNamespaces.length > 0 && ignoredNamespaces && ignoredNamespaces.length > 0) {
|
|
173
197
|
for (const regexNamespace of bindingRegexNamespaces) {
|
|
174
|
-
const matchedNS = ignoredNamespaces.find(ignoredNS =>
|
|
198
|
+
const matchedNS = ignoredNamespaces.find(ignoredNS =>
|
|
199
|
+
matchesRegex(regexNamespace, ignoredNS),
|
|
200
|
+
);
|
|
175
201
|
if (matchedNS) {
|
|
176
202
|
throw new Error(
|
|
177
203
|
`Ignoring Watch Callback: Regex namespace: ${regexNamespace}, is an ignored namespace: ${matchedNS}.`,
|
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
import { promises as fs } from "fs";
|
|
5
5
|
|
|
6
|
-
export async function createDockerfile(
|
|
6
|
+
export async function createDockerfile(
|
|
7
|
+
version: string,
|
|
8
|
+
description: string,
|
|
9
|
+
includedFiles: string[],
|
|
10
|
+
): Promise<void> {
|
|
7
11
|
const file = `
|
|
8
12
|
# Use an official Node.js runtime as the base image
|
|
9
13
|
FROM ghcr.io/defenseunicorns/pepr/controller:v${version}
|
|
@@ -18,7 +18,10 @@ export function decodeData(wrapped: PeprMutateRequest<KubernetesObject>): {
|
|
|
18
18
|
return { skipped, wrapped };
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
export function reencodeData(
|
|
21
|
+
export function reencodeData(
|
|
22
|
+
wrapped: PeprMutateRequest<KubernetesObject>,
|
|
23
|
+
skipped: string[],
|
|
24
|
+
): KubernetesObject {
|
|
22
25
|
const transformed = clone(wrapped.Raw);
|
|
23
26
|
|
|
24
27
|
const isSecret = wrapped.Request.kind.version === "v1" && wrapped.Request.kind.kind === "Secret";
|
|
@@ -195,7 +195,10 @@ export async function mutateProcessor(
|
|
|
195
195
|
return { ...response, allowed: true };
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
export function updateResponsePatchAndWarnings(
|
|
198
|
+
export function updateResponsePatchAndWarnings(
|
|
199
|
+
patches: Operation[],
|
|
200
|
+
response: MutateResponse,
|
|
201
|
+
): void {
|
|
199
202
|
// Only add the patch if there are patches to apply
|
|
200
203
|
if (patches.length > 0) {
|
|
201
204
|
response.patchType = "JSONPatch";
|
|
@@ -41,7 +41,10 @@ export async function processRequest(
|
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
Log.info(
|
|
44
|
+
Log.info(
|
|
45
|
+
actionMetadata,
|
|
46
|
+
`Validation action complete (${label}): ${callbackResp.allowed ? "allowed" : "denied"}`,
|
|
47
|
+
);
|
|
45
48
|
return valResp;
|
|
46
49
|
} catch (e) {
|
|
47
50
|
// If any validation throws an error, note the failure in the Response
|
|
@@ -4,7 +4,13 @@ import Log from "../telemetry/logger";
|
|
|
4
4
|
import { Binding } from "../types";
|
|
5
5
|
import { Capability } from "../core/capability";
|
|
6
6
|
import { Event } from "../enums";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
K8s,
|
|
9
|
+
KubernetesObject,
|
|
10
|
+
WatchCfg,
|
|
11
|
+
WatchEvent,
|
|
12
|
+
GenericClass,
|
|
13
|
+
} from "kubernetes-fluent-client";
|
|
8
14
|
import { Queue } from "../core/queue";
|
|
9
15
|
import { WatchPhase, WatcherType } from "kubernetes-fluent-client/dist/fluent/types";
|
|
10
16
|
import { KubernetesListObject } from "kubernetes-fluent-client/dist/types";
|
|
@@ -51,8 +57,12 @@ export function getOrCreateQueue(obj: KubernetesObject): Queue<KubernetesObject>
|
|
|
51
57
|
|
|
52
58
|
// Watch configuration
|
|
53
59
|
const watchCfg: WatchCfg = {
|
|
54
|
-
resyncFailureMax: process.env.PEPR_RESYNC_FAILURE_MAX
|
|
55
|
-
|
|
60
|
+
resyncFailureMax: process.env.PEPR_RESYNC_FAILURE_MAX
|
|
61
|
+
? parseInt(process.env.PEPR_RESYNC_FAILURE_MAX, 10)
|
|
62
|
+
: 5,
|
|
63
|
+
resyncDelaySec: process.env.PEPR_RESYNC_DELAY_SECONDS
|
|
64
|
+
? parseInt(process.env.PEPR_RESYNC_DELAY_SECONDS, 10)
|
|
65
|
+
: 5,
|
|
56
66
|
lastSeenLimitSeconds: process.env.PEPR_LAST_SEEN_LIMIT_SECONDS
|
|
57
67
|
? parseInt(process.env.PEPR_LAST_SEEN_LIMIT_SECONDS, 10)
|
|
58
68
|
: 300,
|
|
@@ -79,7 +89,9 @@ export function setupWatch(capabilities: Capability[], ignoredNamespaces?: strin
|
|
|
79
89
|
capabilities.map(capability =>
|
|
80
90
|
capability.bindings
|
|
81
91
|
.filter(binding => binding.isWatch)
|
|
82
|
-
.forEach(bindingElement =>
|
|
92
|
+
.forEach(bindingElement =>
|
|
93
|
+
runBinding(bindingElement, capability.namespaces, ignoredNamespaces),
|
|
94
|
+
),
|
|
83
95
|
);
|
|
84
96
|
}
|
|
85
97
|
|
|
@@ -100,12 +112,20 @@ async function runBinding(
|
|
|
100
112
|
// The watch callback is run when an object is received or dequeued
|
|
101
113
|
Log.debug({ watchCfg }, "Effective WatchConfig");
|
|
102
114
|
|
|
103
|
-
const watchCallback = async (
|
|
115
|
+
const watchCallback = async (
|
|
116
|
+
kubernetesObject: KubernetesObject,
|
|
117
|
+
phase: WatchPhase,
|
|
118
|
+
): Promise<void> => {
|
|
104
119
|
// First, filter the object based on the phase
|
|
105
120
|
if (phaseMatch.includes(phase)) {
|
|
106
121
|
try {
|
|
107
122
|
// Then, check if the object matches the filter
|
|
108
|
-
const filterMatch = filterNoMatchReason(
|
|
123
|
+
const filterMatch = filterNoMatchReason(
|
|
124
|
+
binding,
|
|
125
|
+
kubernetesObject,
|
|
126
|
+
capabilityNamespaces,
|
|
127
|
+
ignoredNamespaces,
|
|
128
|
+
);
|
|
109
129
|
if (filterMatch !== "") {
|
|
110
130
|
Log.debug(filterMatch);
|
|
111
131
|
return;
|
|
@@ -139,7 +159,10 @@ async function runBinding(
|
|
|
139
159
|
// [ true, void, undefined ] SHOULD remove finalizer
|
|
140
160
|
// [ false ] should NOT remove finalizer
|
|
141
161
|
if (shouldRemoveFinalizer === false) {
|
|
142
|
-
Log.debug(
|
|
162
|
+
Log.debug(
|
|
163
|
+
{ obj: kubernetesObject },
|
|
164
|
+
`Skipping removal of finalizer '${peprFinal}' from '${resource}'`,
|
|
165
|
+
);
|
|
143
166
|
} else {
|
|
144
167
|
await removeFinalizer(binding, kubernetesObject);
|
|
145
168
|
}
|
|
@@ -147,16 +170,19 @@ async function runBinding(
|
|
|
147
170
|
};
|
|
148
171
|
|
|
149
172
|
// Setup the resource watch
|
|
150
|
-
const watcher = K8s(binding.model, { ...binding.filters, kindOverride: binding.kind }).Watch(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
173
|
+
const watcher = K8s(binding.model, { ...binding.filters, kindOverride: binding.kind }).Watch(
|
|
174
|
+
async (obj, phase) => {
|
|
175
|
+
Log.debug(obj, `Watch event ${phase} received`);
|
|
176
|
+
|
|
177
|
+
if (binding.isQueue) {
|
|
178
|
+
const queue = getOrCreateQueue(obj);
|
|
179
|
+
await queue.enqueue(obj, phase, watchCallback);
|
|
180
|
+
} else {
|
|
181
|
+
await watchCallback(obj, phase);
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
watchCfg,
|
|
185
|
+
);
|
|
160
186
|
|
|
161
187
|
// Register event handlers
|
|
162
188
|
registerWatchEventHandlers(watcher, logEvent, metricsCollector);
|
|
@@ -214,10 +240,14 @@ export function registerWatchEventHandlers(
|
|
|
214
240
|
[WatchEvent.CONNECT]: url => logEvent(WatchEvent.CONNECT, url),
|
|
215
241
|
[WatchEvent.DATA_ERROR]: err => logEvent(WatchEvent.DATA_ERROR, err.message),
|
|
216
242
|
[WatchEvent.RECONNECT]: retryCount =>
|
|
217
|
-
logEvent(
|
|
243
|
+
logEvent(
|
|
244
|
+
WatchEvent.RECONNECT,
|
|
245
|
+
`Reconnecting after ${retryCount} attempt${retryCount === 1 ? "" : "s"}`,
|
|
246
|
+
),
|
|
218
247
|
[WatchEvent.RECONNECT_PENDING]: () => logEvent(WatchEvent.RECONNECT_PENDING),
|
|
219
248
|
[WatchEvent.ABORT]: err => logEvent(WatchEvent.ABORT, err.message),
|
|
220
|
-
[WatchEvent.OLD_RESOURCE_VERSION]: errMessage =>
|
|
249
|
+
[WatchEvent.OLD_RESOURCE_VERSION]: errMessage =>
|
|
250
|
+
logEvent(WatchEvent.OLD_RESOURCE_VERSION, errMessage),
|
|
221
251
|
[WatchEvent.NETWORK_ERROR]: err => logEvent(WatchEvent.NETWORK_ERROR, err.message),
|
|
222
252
|
[WatchEvent.LIST_ERROR]: err => logEvent(WatchEvent.LIST_ERROR, err.message),
|
|
223
253
|
[WatchEvent.LIST]: list => logEvent(WatchEvent.LIST, JSON.stringify(list, undefined, 2)),
|
|
@@ -56,7 +56,9 @@ export class MetricsCollector {
|
|
|
56
56
|
this.addSummary(this.#metricNames.mutate, "Mutation operation summary");
|
|
57
57
|
this.addSummary(this.#metricNames.validate, "Validation operation summary");
|
|
58
58
|
this.addGauge(this.#metricNames.cacheMiss, "Number of cache misses per window", ["window"]);
|
|
59
|
-
this.addGauge(this.#metricNames.resyncFailureCount, "Number of failures per resync operation", [
|
|
59
|
+
this.addGauge(this.#metricNames.resyncFailureCount, "Number of failures per resync operation", [
|
|
60
|
+
"count",
|
|
61
|
+
]);
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
#getMetricName = (name: string): string => `${this.#prefix}_${name}`;
|
|
@@ -173,7 +175,9 @@ export class MetricsCollector {
|
|
|
173
175
|
if (firstKey !== undefined) {
|
|
174
176
|
this.#cacheMissWindows.delete(firstKey);
|
|
175
177
|
}
|
|
176
|
-
this.#gauges
|
|
178
|
+
this.#gauges
|
|
179
|
+
.get(this.#getMetricName(this.#metricNames.cacheMiss))
|
|
180
|
+
?.remove({ window: firstKey });
|
|
177
181
|
}
|
|
178
182
|
};
|
|
179
183
|
}
|
|
@@ -9,7 +9,10 @@ export class MeasureWebhookTimeout {
|
|
|
9
9
|
|
|
10
10
|
constructor(webhookType: WebhookType) {
|
|
11
11
|
this.#webhookType = webhookType;
|
|
12
|
-
metricsCollector.addCounter(
|
|
12
|
+
metricsCollector.addCounter(
|
|
13
|
+
`${webhookType}_timeouts`,
|
|
14
|
+
`Number of ${webhookType} webhook timeouts`,
|
|
15
|
+
);
|
|
13
16
|
}
|
|
14
17
|
|
|
15
18
|
start(timeout: number = 10): void {
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
"bracketSpacing": true,
|
|
5
5
|
"embeddedLanguageFormatting": "auto",
|
|
6
6
|
"insertPragma": false,
|
|
7
|
-
"printWidth":
|
|
7
|
+
"printWidth": 100,
|
|
8
8
|
"quoteProps": "as-needed",
|
|
9
9
|
"requirePragma": false,
|
|
10
10
|
"semi": true,
|
|
11
11
|
"tabWidth": 2,
|
|
12
|
-
"useTabs": false
|
|
12
|
+
"useTabs": false,
|
|
13
|
+
"vueIndentScriptAndStyle": false
|
|
13
14
|
}
|
|
@@ -89,9 +89,7 @@ When(a.ConfigMap)
|
|
|
89
89
|
.IsCreated()
|
|
90
90
|
.WithName("example-1")
|
|
91
91
|
.Mutate(request => {
|
|
92
|
-
request
|
|
93
|
-
.SetLabel("pepr", "was-here")
|
|
94
|
-
.SetAnnotation("pepr.dev", "annotations-work-too");
|
|
92
|
+
request.SetLabel("pepr", "was-here").SetAnnotation("pepr.dev", "annotations-work-too");
|
|
95
93
|
|
|
96
94
|
// Use the Store to persist data between requests and Pepr controller pods
|
|
97
95
|
Store.setItem("example-1", "was-here");
|
|
@@ -228,11 +226,7 @@ function example4Cb(cm: PeprMutateRequest<a.ConfigMap>) {
|
|
|
228
226
|
* Note because the Capability defines namespaces, the namespace specified here must be one of those.
|
|
229
227
|
* Alternatively, you can remove the namespace from the Capability definition and specify it here.
|
|
230
228
|
*/
|
|
231
|
-
When(a.ConfigMap)
|
|
232
|
-
.IsCreated()
|
|
233
|
-
.InNamespace("pepr-demo-2")
|
|
234
|
-
.WithName("example-4a")
|
|
235
|
-
.Mutate(example4Cb);
|
|
229
|
+
When(a.ConfigMap).IsCreated().InNamespace("pepr-demo-2").WithName("example-4a").Mutate(example4Cb);
|
|
236
230
|
|
|
237
231
|
/**
|
|
238
232
|
* ---------------------------------------------------------------------------------------------------
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pepr-excellent-examples-matrix.d.ts","sourceRoot":"","sources":["../../../.github/workflows/pepr-excellent-examples-matrix.js"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commitlint.config.d.ts","sourceRoot":"","sources":["../commitlint.config.js"],"names":[],"mappings":""}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export interface Spec {
|
|
2
|
-
cmd: string;
|
|
3
|
-
stdin?: string[];
|
|
4
|
-
cwd?: string;
|
|
5
|
-
env?: object;
|
|
6
|
-
}
|
|
7
|
-
export interface Result {
|
|
8
|
-
stdout: string[];
|
|
9
|
-
stderr: string[];
|
|
10
|
-
exitcode: number;
|
|
11
|
-
}
|
|
12
|
-
export declare class Cmd {
|
|
13
|
-
result?: Result;
|
|
14
|
-
cmd: string;
|
|
15
|
-
stdin: string[];
|
|
16
|
-
cwd: string;
|
|
17
|
-
env: object;
|
|
18
|
-
constructor(spec: Spec);
|
|
19
|
-
runRaw(): Promise<Result>;
|
|
20
|
-
run(): Promise<Result>;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=cmd.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cmd.d.ts","sourceRoot":"","sources":["../../../integration/helpers/cmd.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,GAAG;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;gBAEA,IAAI,EAAE,IAAI;IAOtB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAoCzB,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;CAQvB"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Spec, Result } from "./cmd";
|
|
2
|
-
export declare function projectRoot(): Promise<string>;
|
|
3
|
-
export declare function tgzifyModule(modulePath: string): Promise<void>;
|
|
4
|
-
export declare function cli(workdir: string, spec: Spec): Promise<Result>;
|
|
5
|
-
//# sourceMappingURL=pepr.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pepr.d.ts","sourceRoot":"","sources":["../../../integration/helpers/pepr.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAO,MAAM,EAAE,MAAM,OAAO,CAAC;AAM1C,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAKnD;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpE;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAetE"}
|