pepr 0.36.0 → 0.37.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/init/index.d.ts.map +1 -1
- package/dist/cli/init/templates.d.ts +3 -1
- package/dist/cli/init/templates.d.ts.map +1 -1
- package/dist/cli/init/utils.d.ts.map +1 -1
- package/dist/cli/init/walkthrough.d.ts +10 -3
- package/dist/cli/init/walkthrough.d.ts.map +1 -1
- package/dist/cli.js +253 -31
- package/dist/controller.js +138 -1
- package/dist/lib/adjudicators.d.ts +63 -0
- package/dist/lib/adjudicators.d.ts.map +1 -0
- package/dist/lib/adjudicators.test.d.ts +2 -0
- package/dist/lib/adjudicators.test.d.ts.map +1 -0
- package/dist/lib/assets/loader.d.ts.map +1 -1
- package/dist/lib/assets/pods.d.ts +1 -0
- package/dist/lib/assets/pods.d.ts.map +1 -1
- package/dist/lib/capability.d.ts +1 -0
- package/dist/lib/capability.d.ts.map +1 -1
- package/dist/lib/capability.test.d.ts +2 -0
- package/dist/lib/capability.test.d.ts.map +1 -0
- package/dist/lib/controller/index.d.ts.map +1 -1
- package/dist/lib/controller/store.d.ts +4 -0
- package/dist/lib/controller/store.d.ts.map +1 -1
- package/dist/lib/controller/store.test.d.ts +2 -0
- package/dist/lib/controller/store.test.d.ts.map +1 -0
- package/dist/lib/filter.d.ts +2 -3
- package/dist/lib/filter.d.ts.map +1 -1
- package/dist/lib/filter.test.d.ts +2 -1
- package/dist/lib/filter.test.d.ts.map +1 -1
- package/dist/lib/finalizer.d.ts +6 -0
- package/dist/lib/finalizer.d.ts.map +1 -0
- package/dist/lib/finalizer.test.d.ts +2 -0
- package/dist/lib/finalizer.test.d.ts.map +1 -0
- package/dist/lib/helpers.d.ts +2 -2
- package/dist/lib/helpers.d.ts.map +1 -1
- package/dist/lib/helpers.test.d.ts +1 -1
- package/dist/lib/helpers.test.d.ts.map +1 -1
- package/dist/lib/k8s.d.ts.map +1 -1
- package/dist/lib/module.d.ts +2 -1
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/mutate-processor.d.ts +2 -1
- package/dist/lib/mutate-processor.d.ts.map +1 -1
- package/dist/lib/mutate-request.d.ts +1 -2
- package/dist/lib/mutate-request.d.ts.map +1 -1
- package/dist/lib/schedule.d.ts +1 -2
- package/dist/lib/schedule.d.ts.map +1 -1
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/types.d.ts +115 -6
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/validate-processor.d.ts +4 -2
- package/dist/lib/validate-processor.d.ts.map +1 -1
- package/dist/lib/validate-request.d.ts +1 -1
- package/dist/lib/validate-request.d.ts.map +1 -1
- package/dist/lib/watch-processor.d.ts +1 -1
- package/dist/lib/watch-processor.d.ts.map +1 -1
- package/dist/lib.js +383 -204
- package/dist/lib.js.map +4 -4
- package/package.json +9 -7
- package/src/cli/build.ts +3 -3
- package/src/cli/init/index.ts +20 -11
- package/src/cli/init/templates.ts +1 -1
- package/src/cli/init/utils.test.ts +11 -20
- package/src/cli/init/utils.ts +5 -0
- package/src/cli/init/walkthrough.test.ts +92 -11
- package/src/cli/init/walkthrough.ts +71 -16
- package/src/cli/monitor.ts +1 -1
- package/src/cli.ts +4 -2
- package/src/fixtures/data/create-pod.json +1 -1
- package/src/fixtures/data/delete-pod.json +1 -1
- package/src/lib/adjudicators.test.ts +1232 -0
- package/src/lib/adjudicators.ts +235 -0
- package/src/lib/assets/index.ts +1 -1
- package/src/lib/assets/loader.ts +1 -0
- package/src/lib/assets/webhooks.ts +1 -1
- package/src/lib/capability.test.ts +655 -0
- package/src/lib/capability.ts +104 -11
- package/src/lib/controller/index.ts +7 -4
- package/src/lib/controller/store.test.ts +131 -0
- package/src/lib/controller/store.ts +43 -5
- package/src/lib/filter.test.ts +194 -8
- package/src/lib/filter.ts +46 -107
- package/src/lib/finalizer.test.ts +236 -0
- package/src/lib/finalizer.ts +63 -0
- package/src/lib/helpers.test.ts +329 -69
- package/src/lib/helpers.ts +141 -100
- package/src/lib/k8s.ts +4 -0
- package/src/lib/module.ts +3 -3
- package/src/lib/mutate-processor.ts +5 -4
- package/src/lib/mutate-request.test.ts +1 -2
- package/src/lib/mutate-request.ts +1 -3
- package/src/lib/schedule.ts +1 -1
- package/src/lib/storage.ts +5 -6
- package/src/lib/types.ts +151 -5
- package/src/lib/validate-processor.ts +5 -2
- package/src/lib/validate-request.test.ts +1 -4
- package/src/lib/validate-request.ts +1 -1
- package/src/lib/watch-processor.ts +19 -5
|
@@ -5,12 +5,15 @@ import { kind } from "kubernetes-fluent-client";
|
|
|
5
5
|
|
|
6
6
|
import { Capability } from "./capability";
|
|
7
7
|
import { shouldSkipRequest } from "./filter";
|
|
8
|
-
import {
|
|
8
|
+
import { ValidateResponse } from "./k8s";
|
|
9
|
+
import { AdmissionRequest } from "./types";
|
|
9
10
|
import Log from "./logger";
|
|
10
11
|
import { convertFromBase64Map } from "./utils";
|
|
11
12
|
import { PeprValidateRequest } from "./validate-request";
|
|
13
|
+
import { ModuleConfig } from "./module";
|
|
12
14
|
|
|
13
15
|
export async function validateProcessor(
|
|
16
|
+
config: ModuleConfig,
|
|
14
17
|
capabilities: Capability[],
|
|
15
18
|
req: AdmissionRequest,
|
|
16
19
|
reqMetadata: Record<string, string>,
|
|
@@ -41,7 +44,7 @@ export async function validateProcessor(
|
|
|
41
44
|
};
|
|
42
45
|
|
|
43
46
|
// Continue to the next action without doing anything if this one should be skipped
|
|
44
|
-
if (shouldSkipRequest(action, req, namespaces)) {
|
|
47
|
+
if (shouldSkipRequest(action, req, namespaces, config?.alwaysIgnore?.namespaces)) {
|
|
45
48
|
continue;
|
|
46
49
|
}
|
|
47
50
|
|
|
@@ -3,11 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
import { beforeEach, describe, expect, it } from "@jest/globals";
|
|
5
5
|
import { KubernetesObject } from "kubernetes-fluent-client";
|
|
6
|
-
|
|
7
|
-
import { Operation, AdmissionRequest } from "./k8s";
|
|
8
|
-
import { ValidateActionResponse } from "./types";
|
|
6
|
+
import { ValidateActionResponse, AdmissionRequest, Operation } from "./types";
|
|
9
7
|
import { PeprValidateRequest } from "./validate-request";
|
|
10
|
-
|
|
11
8
|
describe("PeprValidateRequest", () => {
|
|
12
9
|
let mockRequest: AdmissionRequest<KubernetesObject>;
|
|
13
10
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { KubernetesObject } from "kubernetes-fluent-client";
|
|
7
7
|
|
|
8
8
|
import { clone } from "ramda";
|
|
9
|
-
import {
|
|
9
|
+
import { AdmissionRequest, Operation } from "./types";
|
|
10
10
|
import { ValidateActionResponse } from "./types";
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -4,6 +4,7 @@ import { K8s, KubernetesObject, WatchCfg, WatchEvent } from "kubernetes-fluent-c
|
|
|
4
4
|
import { WatchPhase } from "kubernetes-fluent-client/dist/fluent/types";
|
|
5
5
|
import { Capability } from "./capability";
|
|
6
6
|
import { filterNoMatchReason } from "./helpers";
|
|
7
|
+
import { removeFinalizer } from "./finalizer";
|
|
7
8
|
import Log from "./logger";
|
|
8
9
|
import { Queue } from "./queue";
|
|
9
10
|
import { Binding, Event } from "./types";
|
|
@@ -72,11 +73,11 @@ const eventToPhaseMap = {
|
|
|
72
73
|
*
|
|
73
74
|
* @param capabilities The capabilities to load watches for
|
|
74
75
|
*/
|
|
75
|
-
export function setupWatch(capabilities: Capability[]) {
|
|
76
|
+
export function setupWatch(capabilities: Capability[], ignoredNamespaces?: string[]) {
|
|
76
77
|
capabilities.map(capability =>
|
|
77
78
|
capability.bindings
|
|
78
79
|
.filter(binding => binding.isWatch)
|
|
79
|
-
.forEach(bindingElement => runBinding(bindingElement, capability.namespaces)),
|
|
80
|
+
.forEach(bindingElement => runBinding(bindingElement, capability.namespaces, ignoredNamespaces)),
|
|
80
81
|
);
|
|
81
82
|
}
|
|
82
83
|
|
|
@@ -86,7 +87,7 @@ export function setupWatch(capabilities: Capability[]) {
|
|
|
86
87
|
* @param binding the binding to watch
|
|
87
88
|
* @param capabilityNamespaces list of namespaces to filter on
|
|
88
89
|
*/
|
|
89
|
-
async function runBinding(binding: Binding, capabilityNamespaces: string[]) {
|
|
90
|
+
async function runBinding(binding: Binding, capabilityNamespaces: string[], ignoredNamespaces?: string[]) {
|
|
90
91
|
// Get the phases to match, fallback to any
|
|
91
92
|
const phaseMatch: WatchPhase[] = eventToPhaseMap[binding.event] || eventToPhaseMap[Event.Any];
|
|
92
93
|
|
|
@@ -98,9 +99,22 @@ async function runBinding(binding: Binding, capabilityNamespaces: string[]) {
|
|
|
98
99
|
if (phaseMatch.includes(phase)) {
|
|
99
100
|
try {
|
|
100
101
|
// Then, check if the object matches the filter
|
|
101
|
-
const filterMatch = filterNoMatchReason(binding, obj, capabilityNamespaces);
|
|
102
|
+
const filterMatch = filterNoMatchReason(binding, obj, capabilityNamespaces, ignoredNamespaces);
|
|
102
103
|
if (filterMatch === "") {
|
|
103
|
-
|
|
104
|
+
if (binding.isFinalize) {
|
|
105
|
+
if (!obj.metadata?.deletionTimestamp) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
await binding.finalizeCallback?.(obj);
|
|
110
|
+
|
|
111
|
+
// irrespective of callback success / failure, remove pepr finalizer
|
|
112
|
+
} finally {
|
|
113
|
+
await removeFinalizer(binding, obj);
|
|
114
|
+
}
|
|
115
|
+
} else {
|
|
116
|
+
await binding.watchCallback?.(obj, phase);
|
|
117
|
+
}
|
|
104
118
|
} else {
|
|
105
119
|
Log.debug(filterMatch);
|
|
106
120
|
}
|