pepr 0.24.1 → 0.26.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.js +254 -152
- package/dist/controller.js +65 -5
- package/dist/lib/assets/pods.d.ts +12 -1
- package/dist/lib/assets/pods.d.ts.map +1 -1
- package/dist/lib/assets/yaml.d.ts.map +1 -1
- package/dist/lib/capability.d.ts.map +1 -1
- package/dist/lib/controller/index.d.ts.map +1 -1
- package/dist/lib/helpers.d.ts +2 -0
- package/dist/lib/helpers.d.ts.map +1 -1
- package/dist/lib/module.d.ts +8 -0
- package/dist/lib/module.d.ts.map +1 -1
- package/dist/lib/queue.d.ts +18 -0
- package/dist/lib/queue.d.ts.map +1 -0
- package/dist/lib/types.d.ts +13 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/watch-processor.d.ts.map +1 -1
- package/dist/lib.js +97 -13
- package/dist/lib.js.map +3 -3
- package/package.json +4 -4
- package/src/cli.ts +2 -1
- package/src/lib/assets/deploy.ts +1 -1
- package/src/lib/assets/pods.ts +38 -18
- package/src/lib/assets/yaml.ts +3 -5
- package/src/lib/capability.ts +16 -3
- package/src/lib/controller/index.ts +17 -10
- package/src/lib/helpers.ts +24 -0
- package/src/lib/module.ts +8 -2
- package/src/lib/queue.ts +77 -0
- package/src/lib/types.ts +14 -0
- package/src/lib/watch-processor.ts +38 -15
- package/src/runtime/controller.ts +11 -3
- package/src/templates/package.json +4 -1
package/dist/controller.js
CHANGED
|
@@ -28,6 +28,7 @@ var import_child_process = require("child_process");
|
|
|
28
28
|
var import_crypto = __toESM(require("crypto"));
|
|
29
29
|
var import_fs = __toESM(require("fs"));
|
|
30
30
|
var import_zlib = require("zlib");
|
|
31
|
+
var import_kubernetes_fluent_client2 = require("kubernetes-fluent-client");
|
|
31
32
|
|
|
32
33
|
// src/lib/logger.ts
|
|
33
34
|
var import_pino = require("pino");
|
|
@@ -48,10 +49,64 @@ if (process.env.LOG_LEVEL) {
|
|
|
48
49
|
var logger_default = Log;
|
|
49
50
|
|
|
50
51
|
// src/templates/data.json
|
|
51
|
-
var packageJSON = { name: "pepr", description: "Kubernetes application engine", author: "Defense Unicorns", homepage: "https://github.com/defenseunicorns/pepr", license: "Apache-2.0", bin: "dist/cli.js", repository: "defenseunicorns/pepr", engines: { node: ">=18.0.0" }, version: "0.
|
|
52
|
+
var packageJSON = { name: "pepr", description: "Kubernetes application engine", author: "Defense Unicorns", homepage: "https://github.com/defenseunicorns/pepr", license: "Apache-2.0", bin: "dist/cli.js", repository: "defenseunicorns/pepr", engines: { node: ">=18.0.0" }, version: "0.26.0", main: "dist/lib.js", types: "dist/lib.d.ts", scripts: { "gen-data-json": "node hack/build-template-data.js", prebuild: "rm -fr dist/* && npm run gen-data-json", build: "tsc && node build.mjs", test: "npm run test:unit && npm run test:journey", "test:unit": "npm run gen-data-json && jest src --coverage --detectOpenHandles --coverageDirectory=./coverage", "test:journey": "npm run test:journey:k3d && npm run test:journey:build && npm run test:journey:image && npm run test:journey:run", "test:journey:prep": "git clone https://github.com/defenseunicorns/pepr-upgrade-test.git", "test:journey-wasm": "npm run test:journey:k3d && npm run test:journey:build && npm run test:journey:image && npm run test:journey:run-wasm", "test:journey:k3d": "k3d cluster delete pepr-dev && k3d cluster create pepr-dev --k3s-arg '--debug@server:0' --wait && kubectl rollout status deployment -n kube-system", "test:journey:build": "npm run build && npm pack", "test:journey:image": "docker buildx build --tag pepr:dev . && k3d image import pepr:dev -c pepr-dev", "test:journey:run": "jest --detectOpenHandles journey/entrypoint.test.ts && npm run test:journey:prep && npm run test:journey:upgrade", "test:journey:run-wasm": "jest --detectOpenHandles journey/entrypoint-wasm.test.ts", "test:journey:upgrade": "npm run test:journey:k3d && npm run test:journey:image && jest --detectOpenHandles journey/pepr-upgrade.test.ts", "format:check": "eslint src && prettier src --check", "format:fix": "eslint src --fix && prettier src --write" }, dependencies: { "@types/ramda": "0.29.10", express: "4.18.2", "fast-json-patch": "3.1.1", "kubernetes-fluent-client": "2.1.3", pino: "8.18.0", "pino-pretty": "10.3.1", "prom-client": "15.1.0", ramda: "0.29.1" }, devDependencies: { "@commitlint/cli": "18.6.1", "@commitlint/config-conventional": "18.6.2", "@jest/globals": "29.7.0", "@types/eslint": "8.56.2", "@types/express": "4.17.21", "@types/node": "18.x.x", "@types/node-forge": "1.3.11", "@types/prompts": "2.4.9", "@types/uuid": "9.0.8", jest: "29.7.0", nock: "13.5.1", "ts-jest": "29.1.2" }, peerDependencies: { "@typescript-eslint/eslint-plugin": "6.15.0", "@typescript-eslint/parser": "6.15.0", commander: "11.1.0", esbuild: "0.19.10", eslint: "8.56.0", "node-forge": "1.3.1", prettier: "3.1.1", prompts: "2.4.2", typescript: "5.3.3", uuid: "9.0.1" } };
|
|
53
|
+
|
|
54
|
+
// src/lib/k8s.ts
|
|
55
|
+
var import_kubernetes_fluent_client = require("kubernetes-fluent-client");
|
|
56
|
+
var PeprStore = class extends import_kubernetes_fluent_client.GenericKind {
|
|
57
|
+
};
|
|
58
|
+
var peprStoreGVK = {
|
|
59
|
+
kind: "PeprStore",
|
|
60
|
+
version: "v1",
|
|
61
|
+
group: "pepr.dev"
|
|
62
|
+
};
|
|
63
|
+
(0, import_kubernetes_fluent_client.RegisterKind)(PeprStore, peprStoreGVK);
|
|
64
|
+
|
|
65
|
+
// src/lib/assets/store.ts
|
|
66
|
+
var { group, version, kind } = peprStoreGVK;
|
|
67
|
+
var singular = kind.toLocaleLowerCase();
|
|
68
|
+
var plural = `${singular}s`;
|
|
69
|
+
var name = `${plural}.${group}`;
|
|
70
|
+
var peprStoreCRD = {
|
|
71
|
+
apiVersion: "apiextensions.k8s.io/v1",
|
|
72
|
+
kind: "CustomResourceDefinition",
|
|
73
|
+
metadata: {
|
|
74
|
+
name
|
|
75
|
+
},
|
|
76
|
+
spec: {
|
|
77
|
+
group,
|
|
78
|
+
versions: [
|
|
79
|
+
{
|
|
80
|
+
// typescript doesn't know this is really already set, which is kind of annoying
|
|
81
|
+
name: version || "v1",
|
|
82
|
+
served: true,
|
|
83
|
+
storage: true,
|
|
84
|
+
schema: {
|
|
85
|
+
openAPIV3Schema: {
|
|
86
|
+
type: "object",
|
|
87
|
+
properties: {
|
|
88
|
+
data: {
|
|
89
|
+
type: "object",
|
|
90
|
+
additionalProperties: {
|
|
91
|
+
type: "string"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
scope: "Namespaced",
|
|
100
|
+
names: {
|
|
101
|
+
plural,
|
|
102
|
+
singular,
|
|
103
|
+
kind
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
};
|
|
52
107
|
|
|
53
108
|
// src/runtime/controller.ts
|
|
54
|
-
var { version } = packageJSON;
|
|
109
|
+
var { version: version2 } = packageJSON;
|
|
55
110
|
function validateHash(expectedHash) {
|
|
56
111
|
if (!expectedHash || expectedHash.length !== 64) {
|
|
57
112
|
logger_default.error("Invalid hash");
|
|
@@ -83,7 +138,12 @@ function runModule(expectedHash) {
|
|
|
83
138
|
process.exit(1);
|
|
84
139
|
}
|
|
85
140
|
}
|
|
86
|
-
logger_default.info(`Pepr Controller (v${
|
|
141
|
+
logger_default.info(`Pepr Controller (v${version2})`);
|
|
87
142
|
var hash = process.argv[2];
|
|
88
|
-
|
|
89
|
-
|
|
143
|
+
var startup = async () => {
|
|
144
|
+
logger_default.info("Applying the Pepr Store CRD if it doesn't exist");
|
|
145
|
+
await (0, import_kubernetes_fluent_client2.K8s)(import_kubernetes_fluent_client2.kind.CustomResourceDefinition).Apply(peprStoreCRD, { force: true });
|
|
146
|
+
validateHash(hash);
|
|
147
|
+
runModule(hash);
|
|
148
|
+
};
|
|
149
|
+
startup().catch((err) => logger_default.error(err));
|
|
@@ -3,16 +3,27 @@ import { V1EnvVar } from "@kubernetes/client-node";
|
|
|
3
3
|
import { kind } from "kubernetes-fluent-client";
|
|
4
4
|
import { Assets } from ".";
|
|
5
5
|
/** Generate the pepr-system namespace */
|
|
6
|
-
export declare
|
|
6
|
+
export declare function namespace(namespaceLabels?: Record<string, string>): {
|
|
7
|
+
apiVersion: string;
|
|
8
|
+
kind: string;
|
|
9
|
+
metadata: {
|
|
10
|
+
name: string;
|
|
11
|
+
labels: Record<string, string>;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
7
14
|
export declare function watcher(assets: Assets, hash: string): {
|
|
8
15
|
apiVersion: string;
|
|
9
16
|
kind: string;
|
|
10
17
|
metadata: {
|
|
11
18
|
name: string;
|
|
12
19
|
namespace: string;
|
|
20
|
+
annotations: {
|
|
21
|
+
"pepr.dev/description": string;
|
|
22
|
+
};
|
|
13
23
|
labels: {
|
|
14
24
|
app: string;
|
|
15
25
|
"pepr.dev/controller": string;
|
|
26
|
+
"pepr.dev/uuid": string;
|
|
16
27
|
};
|
|
17
28
|
};
|
|
18
29
|
spec: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pods.d.ts","sourceRoot":"","sources":["../../../src/lib/assets/pods.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAI3B,yCAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"pods.d.ts","sourceRoot":"","sources":["../../../src/lib/assets/pods.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAI3B,yCAAyC;AACzC,wBAAgB,SAAS,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;EASjE;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAgJnD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,CAsIxE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAuBlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../../src/lib/assets/yaml.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../../src/lib/assets/yaml.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAM3B,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UA0BrE;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAyC7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/lib/capability.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAA2B,MAAM,0BAA0B,CAAC;AAMnG,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAc,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,OAAO,EAGP,aAAa,EACb,gBAAgB,EAMhB,YAAY,EACb,MAAM,SAAS,CAAC;AAKjB;;GAEG;AACH,qBAAa,UAAW,YAAW,gBAAgB;;IASjD,WAAW,EAAE,OAAO,CAAC;IAErB;;;;;OAKG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAqBtC;IAEF;;;;;;OAMG;IACH,KAAK,EAAE,SAAS,CASd;IAEF;;;;;;OAMG;IACH,aAAa,EAAE,SAAS,CAStB;IAEF,IAAI,QAAQ,cAEX;IAED,IAAI,IAAI,WAEP;IAED,IAAI,WAAW,WAEd;IAED,IAAI,UAAU,aAEb;gBAEW,GAAG,EAAE,aAAa;IAU9B;;;;OAIG;IACH,qBAAqB;;MAanB;IAEF;;;;OAIG;IACH,aAAa;;MAaX;IAEF;;;;;;;;OAQG;IACH,IAAI,4CAA6C,gBAAgB,
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/lib/capability.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAA2B,MAAM,0BAA0B,CAAC;AAMnG,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAc,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,OAAO,EAGP,aAAa,EACb,gBAAgB,EAMhB,YAAY,EACb,MAAM,SAAS,CAAC;AAKjB;;GAEG;AACH,qBAAa,UAAW,YAAW,gBAAgB;;IASjD,WAAW,EAAE,OAAO,CAAC;IAErB;;;;;OAKG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAqBtC;IAEF;;;;;;OAMG;IACH,KAAK,EAAE,SAAS,CASd;IAEF;;;;;;OAMG;IACH,aAAa,EAAE,SAAS,CAStB;IAEF,IAAI,QAAQ,cAEX;IAED,IAAI,IAAI,WAEP;IAED,IAAI,WAAW,WAEd;IAED,IAAI,UAAU,aAEb;gBAEW,GAAG,EAAE,aAAa;IAU9B;;;;OAIG;IACH,qBAAqB;;MAanB;IAEF;;;;OAIG;IACH,aAAa;;MAaX;IAEF;;;;;;;;OAQG;IACH,IAAI,4CAA6C,gBAAgB,qBAkI/D;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/controller/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAoB,MAAM,QAAQ,CAAC;AAG5E,OAAO,EAAE,YAAY,EAAe,MAAM,WAAW,CAAC;AAMtD,qBAAa,UAAU;;gBAoBnB,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,EAC5C,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,EACzC,OAAO,CAAC,EAAE,MAAM,IAAI;IAiCtB,+BAA+B;IAC/B,WAAW,SAAU,MAAM,UAqDzB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/controller/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAoB,MAAM,QAAQ,CAAC;AAG5E,OAAO,EAAE,YAAY,EAAe,MAAM,WAAW,CAAC;AAMtD,qBAAa,UAAU;;gBAoBnB,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,EAC5C,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,EACzC,OAAO,CAAC,EAAE,MAAM,IAAI;IAiCtB,+BAA+B;IAC/B,WAAW,SAAU,MAAM,UAqDzB;CAqMH"}
|
package/dist/lib/helpers.d.ts
CHANGED
|
@@ -16,5 +16,7 @@ export declare function generateWatchNamespaceError(ignoredNamespaces: string[],
|
|
|
16
16
|
export declare function namespaceComplianceValidator(capability: CapabilityExport, ignoredNamespaces?: string[]): void;
|
|
17
17
|
export declare function checkDeploymentStatus(namespace: string): Promise<boolean>;
|
|
18
18
|
export declare function namespaceDeploymentsReady(namespace?: string): Promise<true | undefined>;
|
|
19
|
+
export declare function secretOverLimit(str: string): boolean;
|
|
20
|
+
export declare const parseTimeout: (value: string, previous: unknown) => number;
|
|
19
21
|
export {};
|
|
20
22
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/lib/helpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/lib/helpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAI3C,KAAK,OAAO,GAAG;IACb,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,kBAAkB,UAAW,MAAM,EAAE,QAAQ,MAAM,SAI/D,CAAC;AAEF,eAAO,MAAM,aAAa,iBAAkB,gBAAgB,EAAE,KAAG,OAoBhE,CAAC;AAEF,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,iBAU5D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,CAMpE;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,CAMlE;AAED,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAE/F;AAED,wBAAgB,8BAA8B,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAKzG;AAED,wBAAgB,2BAA2B,CACzC,iBAAiB,EAAE,MAAM,EAAE,EAC3B,iBAAiB,EAAE,MAAM,EAAE,EAC3B,oBAAoB,EAAE,MAAM,EAAE,UAoB/B;AAGD,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,QActG;AAID,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,oBAsB5D;AAGD,wBAAsB,yBAAyB,CAAC,SAAS,GAAE,MAAsB,6BAWhF;AAGD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMpD;AAGD,eAAO,MAAM,YAAY,UAAW,MAAM,YAAY,OAAO,KAAG,MAW/D,CAAC"}
|
package/dist/lib/module.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { Capability } from "./capability";
|
|
2
2
|
import { AdmissionRequest, MutateResponse, ValidateResponse, WebhookIgnore } from "./k8s";
|
|
3
|
+
/** Custom Labels Type for package.json */
|
|
4
|
+
export interface CustomLabels {
|
|
5
|
+
namespace?: Record<string, string>;
|
|
6
|
+
}
|
|
3
7
|
/** Global configuration for the Pepr runtime. */
|
|
4
8
|
export type ModuleConfig = {
|
|
5
9
|
/** The user-defined name for the module */
|
|
@@ -12,6 +16,8 @@ export type ModuleConfig = {
|
|
|
12
16
|
uuid: string;
|
|
13
17
|
/** A description of the Pepr module and what it does. */
|
|
14
18
|
description?: string;
|
|
19
|
+
/** The webhookTimeout */
|
|
20
|
+
webhookTimeout?: number;
|
|
15
21
|
/** Reject K8s resource AdmissionRequests on error. */
|
|
16
22
|
onError?: string;
|
|
17
23
|
/** Configure global exclusions that will never be processed by Pepr. */
|
|
@@ -20,6 +26,8 @@ export type ModuleConfig = {
|
|
|
20
26
|
logLevel?: string;
|
|
21
27
|
/** Propagate env variables to in-cluster controllers */
|
|
22
28
|
env?: Record<string, string>;
|
|
29
|
+
/** Custom Labels for Kubernetes Objects */
|
|
30
|
+
customLabels?: CustomLabels;
|
|
23
31
|
};
|
|
24
32
|
export type PackageJSON = {
|
|
25
33
|
description: string;
|
package/dist/lib/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAK1F,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AACD,iDAAiD;AACjD,MAAM,MAAM,YAAY,GAAG;IACzB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,YAAY,EAAE,aAAa,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,2CAA2C;IAC3C,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,qHAAqH;IACrH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAE7C,6GAA6G;IAC7G,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,GAAG,gBAAgB,KAAK,IAAI,CAAC;CAC9D,CAAC;AAGF,eAAO,MAAM,WAAW,eAA+C,CAAC;AAGxE,eAAO,MAAM,WAAW,eAA0C,CAAC;AAEnE,eAAO,MAAM,SAAS,eAAwC,CAAC;AAE/D,qBAAa,UAAU;;IAGrB;;;;;;OAMG;gBACS,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,GAAE,UAAU,EAAO,EAAE,IAAI,GAAE,iBAAsB;IAoD7G;;;;;OAKG;IACH,KAAK,0BAEH;CACH"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { KubernetesObject } from "@kubernetes/client-node";
|
|
2
|
+
/**
|
|
3
|
+
* Queue is a FIFO queue for reconciling
|
|
4
|
+
*/
|
|
5
|
+
export declare class Queue<K extends KubernetesObject> {
|
|
6
|
+
#private;
|
|
7
|
+
constructor();
|
|
8
|
+
setReconcile(reconcile: (...args: unknown[]) => Promise<void>): void;
|
|
9
|
+
/**
|
|
10
|
+
* Enqueue adds an item to the queue and returns a promise that resolves when the item is
|
|
11
|
+
* reconciled.
|
|
12
|
+
*
|
|
13
|
+
* @param item The object to reconcile
|
|
14
|
+
* @returns A promise that resolves when the object is reconciled
|
|
15
|
+
*/
|
|
16
|
+
enqueue(item: K): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/lib/queue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAS3D;;GAEG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,gBAAgB;;;IAS3C,YAAY,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC;IAG7D;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,CAAC;CA2ChB"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -62,6 +62,7 @@ export type Binding = {
|
|
|
62
62
|
isMutate?: boolean;
|
|
63
63
|
isValidate?: boolean;
|
|
64
64
|
isWatch?: boolean;
|
|
65
|
+
isQueue?: boolean;
|
|
65
66
|
readonly model: GenericClass;
|
|
66
67
|
readonly kind: GroupVersionKind;
|
|
67
68
|
readonly filters: {
|
|
@@ -144,6 +145,18 @@ export type ValidateActionChain<T extends GenericClass> = {
|
|
|
144
145
|
* @returns
|
|
145
146
|
*/
|
|
146
147
|
Watch: (action: WatchAction<T, InstanceType<T>>) => void;
|
|
148
|
+
/**
|
|
149
|
+
* Establish a reconcile for the specified resource. The callback function will be executed after the admission controller has
|
|
150
|
+
* processed the resource and the request has been persisted to the cluster.
|
|
151
|
+
*
|
|
152
|
+
* **Beta Function**: This method is still in early testing and edge cases may still exist.
|
|
153
|
+
*
|
|
154
|
+
* @since 0.14.0
|
|
155
|
+
*
|
|
156
|
+
* @param action
|
|
157
|
+
* @returns
|
|
158
|
+
*/
|
|
159
|
+
Reconcile: (action: WatchAction<T, InstanceType<T>>) => void;
|
|
147
160
|
};
|
|
148
161
|
export type MutateActionChain<T extends GenericClass> = ValidateActionChain<T> & {
|
|
149
162
|
/**
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-processor.d.ts","sourceRoot":"","sources":["../../src/lib/watch-processor.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"watch-processor.d.ts","sourceRoot":"","sources":["../../src/lib/watch-processor.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY1C,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,iBAoC5C;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,iBAOxE"}
|
package/dist/lib.js
CHANGED
|
@@ -903,7 +903,11 @@ var Controller = class _Controller {
|
|
|
903
903
|
response: kubeAdmissionResponse
|
|
904
904
|
});
|
|
905
905
|
} else {
|
|
906
|
-
kubeAdmissionResponse = {
|
|
906
|
+
kubeAdmissionResponse = responseList.length === 0 ? {
|
|
907
|
+
uid: request.uid,
|
|
908
|
+
allowed: true,
|
|
909
|
+
status: { message: "no in-scope validations -- allowed!" }
|
|
910
|
+
} : {
|
|
907
911
|
uid: responseList[0].uid,
|
|
908
912
|
allowed: responseList.filter((r) => !r.allowed).length === 0,
|
|
909
913
|
status: {
|
|
@@ -967,6 +971,59 @@ var Controller = class _Controller {
|
|
|
967
971
|
var import_crypto = require("crypto");
|
|
968
972
|
var import_kubernetes_fluent_client3 = require("kubernetes-fluent-client");
|
|
969
973
|
var import_types2 = require("kubernetes-fluent-client/dist/fluent/types");
|
|
974
|
+
|
|
975
|
+
// src/lib/queue.ts
|
|
976
|
+
var Queue = class {
|
|
977
|
+
#queue = [];
|
|
978
|
+
#pendingPromise = false;
|
|
979
|
+
#reconcile;
|
|
980
|
+
constructor() {
|
|
981
|
+
this.#reconcile = async () => await new Promise((resolve) => resolve());
|
|
982
|
+
}
|
|
983
|
+
setReconcile(reconcile) {
|
|
984
|
+
this.#reconcile = reconcile;
|
|
985
|
+
}
|
|
986
|
+
/**
|
|
987
|
+
* Enqueue adds an item to the queue and returns a promise that resolves when the item is
|
|
988
|
+
* reconciled.
|
|
989
|
+
*
|
|
990
|
+
* @param item The object to reconcile
|
|
991
|
+
* @returns A promise that resolves when the object is reconciled
|
|
992
|
+
*/
|
|
993
|
+
enqueue(item) {
|
|
994
|
+
logger_default.debug(`Enqueueing ${item.metadata.namespace}/${item.metadata.name}`);
|
|
995
|
+
return new Promise((resolve, reject) => {
|
|
996
|
+
this.#queue.push({ item, resolve, reject });
|
|
997
|
+
return this.#dequeue();
|
|
998
|
+
});
|
|
999
|
+
}
|
|
1000
|
+
/**
|
|
1001
|
+
* Dequeue reconciles the next item in the queue
|
|
1002
|
+
*
|
|
1003
|
+
* @returns A promise that resolves when the webapp is reconciled
|
|
1004
|
+
*/
|
|
1005
|
+
async #dequeue() {
|
|
1006
|
+
if (this.#pendingPromise)
|
|
1007
|
+
return false;
|
|
1008
|
+
const element = this.#queue.shift();
|
|
1009
|
+
if (!element)
|
|
1010
|
+
return false;
|
|
1011
|
+
try {
|
|
1012
|
+
this.#pendingPromise = true;
|
|
1013
|
+
if (this.#reconcile) {
|
|
1014
|
+
await this.#reconcile(element.item);
|
|
1015
|
+
}
|
|
1016
|
+
element.resolve();
|
|
1017
|
+
} catch (e) {
|
|
1018
|
+
element.reject(e);
|
|
1019
|
+
} finally {
|
|
1020
|
+
this.#pendingPromise = false;
|
|
1021
|
+
await this.#dequeue();
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
};
|
|
1025
|
+
|
|
1026
|
+
// src/lib/watch-processor.ts
|
|
970
1027
|
var storeUpdates = false;
|
|
971
1028
|
var store = {};
|
|
972
1029
|
async function setupStore(uuid) {
|
|
@@ -1011,16 +1068,32 @@ async function runBinding(binding) {
|
|
|
1011
1068
|
retryMax: 5,
|
|
1012
1069
|
retryDelaySec: 5
|
|
1013
1070
|
};
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1071
|
+
let watcher;
|
|
1072
|
+
if (binding.isQueue) {
|
|
1073
|
+
const queue = new Queue();
|
|
1074
|
+
watcher = (0, import_kubernetes_fluent_client3.K8s)(binding.model, binding.filters).Watch(async (obj, type) => {
|
|
1075
|
+
logger_default.debug(obj, `Watch event ${type} received`);
|
|
1076
|
+
if (phaseMatch.includes(type)) {
|
|
1077
|
+
try {
|
|
1078
|
+
queue.setReconcile(async () => await binding.watchCallback?.(obj, type));
|
|
1079
|
+
await queue.enqueue(obj);
|
|
1080
|
+
} catch (e) {
|
|
1081
|
+
logger_default.error(e, "Error executing watch callback");
|
|
1082
|
+
}
|
|
1021
1083
|
}
|
|
1022
|
-
}
|
|
1023
|
-
}
|
|
1084
|
+
}, watchCfg);
|
|
1085
|
+
} else {
|
|
1086
|
+
watcher = (0, import_kubernetes_fluent_client3.K8s)(binding.model, binding.filters).Watch(async (obj, type) => {
|
|
1087
|
+
logger_default.debug(obj, `Watch event ${type} received`);
|
|
1088
|
+
if (phaseMatch.includes(type)) {
|
|
1089
|
+
try {
|
|
1090
|
+
await binding.watchCallback?.(obj, type);
|
|
1091
|
+
} catch (e) {
|
|
1092
|
+
logger_default.error(e, "Error executing watch callback");
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
}, watchCfg);
|
|
1096
|
+
}
|
|
1024
1097
|
const cacheSuffix = (0, import_crypto.createHash)("sha224").update(binding.watchCallback.toString()).digest("hex").substring(0, 5);
|
|
1025
1098
|
const cacheID = [watcher.getCacheID(), cacheSuffix].join("-");
|
|
1026
1099
|
watcher.events.on(import_kubernetes_fluent_client3.WatchEvent.RESOURCE_VERSION, (version) => {
|
|
@@ -1493,7 +1566,7 @@ var Capability = class {
|
|
|
1493
1566
|
};
|
|
1494
1567
|
const bindings = this.#bindings;
|
|
1495
1568
|
const prefix = `${this.#name}: ${model.name}`;
|
|
1496
|
-
const commonChain = { WithLabel, WithAnnotation, Mutate, Validate, Watch };
|
|
1569
|
+
const commonChain = { WithLabel, WithAnnotation, Mutate, Validate, Watch, Reconcile };
|
|
1497
1570
|
const isNotEmpty = (value) => Object.keys(value).length > 0;
|
|
1498
1571
|
const log = (message, cbString) => {
|
|
1499
1572
|
const filteredObj = (0, import_ramda6.pickBy)(isNotEmpty, binding.filters);
|
|
@@ -1510,7 +1583,7 @@ var Capability = class {
|
|
|
1510
1583
|
validateCallback
|
|
1511
1584
|
});
|
|
1512
1585
|
}
|
|
1513
|
-
return { Watch };
|
|
1586
|
+
return { Watch, Reconcile };
|
|
1514
1587
|
}
|
|
1515
1588
|
function Mutate(mutateCallback) {
|
|
1516
1589
|
if (registerAdmission) {
|
|
@@ -1521,7 +1594,7 @@ var Capability = class {
|
|
|
1521
1594
|
mutateCallback
|
|
1522
1595
|
});
|
|
1523
1596
|
}
|
|
1524
|
-
return { Watch, Validate };
|
|
1597
|
+
return { Watch, Validate, Reconcile };
|
|
1525
1598
|
}
|
|
1526
1599
|
function Watch(watchCallback) {
|
|
1527
1600
|
if (registerWatch) {
|
|
@@ -1533,6 +1606,17 @@ var Capability = class {
|
|
|
1533
1606
|
});
|
|
1534
1607
|
}
|
|
1535
1608
|
}
|
|
1609
|
+
function Reconcile(watchCallback) {
|
|
1610
|
+
if (registerWatch) {
|
|
1611
|
+
log("Reconcile Action", watchCallback.toString());
|
|
1612
|
+
bindings.push({
|
|
1613
|
+
...binding,
|
|
1614
|
+
isWatch: true,
|
|
1615
|
+
isQueue: true,
|
|
1616
|
+
watchCallback
|
|
1617
|
+
});
|
|
1618
|
+
}
|
|
1619
|
+
}
|
|
1536
1620
|
function InNamespace(...namespaces) {
|
|
1537
1621
|
logger_default.debug(`Add namespaces filter ${namespaces}`, prefix);
|
|
1538
1622
|
binding.filters.namespaces.push(...namespaces);
|