pepr 0.3.0-rc0 → 0.3.1
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/README.md +3 -46
- package/dist/package.json +8 -6
- package/dist/src/cli/build.js +1 -1
- package/dist/src/cli/dev.js +4 -1
- package/dist/src/cli/init/index.js +1 -1
- package/dist/src/lib/capability.d.ts +29 -0
- package/dist/src/lib/capability.d.ts.map +1 -0
- package/dist/src/lib/controller.d.ts +18 -0
- package/dist/src/lib/controller.d.ts.map +1 -0
- package/dist/src/lib/fetch.d.ts +24 -0
- package/dist/src/lib/fetch.d.ts.map +1 -0
- package/dist/src/lib/filter.d.ts +11 -0
- package/dist/src/lib/filter.d.ts.map +1 -0
- package/dist/src/lib/index.d.ts +15 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/{index.js → src/lib/index.js} +6 -6
- package/dist/src/lib/k8s/index.d.ts +6 -0
- package/dist/src/lib/k8s/index.d.ts.map +1 -0
- package/dist/src/lib/k8s/kinds.d.ts +12 -0
- package/dist/src/lib/k8s/kinds.d.ts.map +1 -0
- package/dist/src/lib/k8s/tls.d.ts +18 -0
- package/dist/src/lib/k8s/tls.d.ts.map +1 -0
- package/dist/src/lib/k8s/types.d.ts +148 -0
- package/dist/src/lib/k8s/types.d.ts.map +1 -0
- package/dist/src/lib/k8s/upstream.d.ts +4 -0
- package/dist/src/lib/k8s/upstream.d.ts.map +1 -0
- package/dist/src/lib/k8s/webhook.d.ts +35 -0
- package/dist/src/lib/k8s/webhook.d.ts.map +1 -0
- package/dist/src/lib/logger.d.ts +56 -0
- package/dist/src/lib/logger.d.ts.map +1 -0
- package/dist/src/lib/module.d.ts +33 -0
- package/dist/src/lib/module.d.ts.map +1 -0
- package/dist/src/lib/processor.d.ts +5 -0
- package/dist/src/lib/processor.d.ts.map +1 -0
- package/dist/src/lib/request.d.ts +78 -0
- package/dist/src/lib/request.d.ts.map +1 -0
- package/dist/src/lib/types.d.ts +188 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/package.json +8 -6
- package/{index.ts → src/lib/index.ts} +6 -6
- package/dist/fixtures/data/cm1.json +0 -75
- package/dist/fixtures/data/deployment1.json +0 -170
- package/dist/fixtures/data/ns1.json +0 -72
- package/dist/fixtures/data/pod1.json +0 -271
- package/dist/fixtures/data/pod2.json +0 -257
- package/dist/fixtures/data/svc1.json +0 -100
- package/dist/fixtures/loader.js +0 -60
- package/dist/src/cli/init/utils.test.js +0 -29
- package/dist/src/cli/init/walkthrough.test.js +0 -21
- package/dist/src/lib/fetch.test.js +0 -98
- package/dist/src/lib/filter.test.js +0 -208
- package/dist/src/lib/k8s/kinds.test.js +0 -296
- package/dist/src/lib/logger.test.js +0 -64
- package/docs/.prettierrc.json +0 -13
- package/docs/actions.md +0 -58
- package/docs/capabilities.md +0 -17
- package/docs/cli.md +0 -58
- package/docs/module.md +0 -90
- package/osv-scanner.toml +0 -4
- package/src/lib/fetch.test.ts +0 -115
- package/src/lib/filter.test.ts +0 -231
- package/src/lib/k8s/kinds.test.ts +0 -333
- package/src/lib/logger.test.ts +0 -80
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Capability } from "./capability";
|
|
2
|
+
import { Request, Response } from "./k8s/types";
|
|
3
|
+
import { ModuleConfig } from "./types";
|
|
4
|
+
export type PackageJSON = {
|
|
5
|
+
description: string;
|
|
6
|
+
pepr: ModuleConfig;
|
|
7
|
+
};
|
|
8
|
+
export type PeprModuleOptions = {
|
|
9
|
+
deferStart?: boolean;
|
|
10
|
+
/** A user-defined callback to pre-process or intercept a Pepr request from K8s immediately before it is processed */
|
|
11
|
+
beforeHook?: (req: Request) => void;
|
|
12
|
+
/** A user-defined callback to post-process or intercept a Pepr response just before it is returned to K8s */
|
|
13
|
+
afterHook?: (res: Response) => void;
|
|
14
|
+
};
|
|
15
|
+
export declare class PeprModule {
|
|
16
|
+
private _controller;
|
|
17
|
+
/**
|
|
18
|
+
* Create a new Pepr runtime
|
|
19
|
+
*
|
|
20
|
+
* @param config The configuration for the Pepr runtime
|
|
21
|
+
* @param capabilities The capabilities to be loaded into the Pepr runtime
|
|
22
|
+
* @param _deferStart (optional) If set to `true`, the Pepr runtime will not be started automatically. This can be used to start the Pepr runtime manually with `start()`.
|
|
23
|
+
*/
|
|
24
|
+
constructor({ description, pepr }: PackageJSON, capabilities?: Capability[], opts?: PeprModuleOptions);
|
|
25
|
+
/**
|
|
26
|
+
* Start the Pepr runtime manually.
|
|
27
|
+
* Normally this is called automatically when the Pepr module is instantiated, but can be called manually if `deferStart` is set to `true` in the constructor.
|
|
28
|
+
*
|
|
29
|
+
* @param port
|
|
30
|
+
*/
|
|
31
|
+
start(port?: number): void;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/lib/module.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOvC,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,OAAO,KAAK,IAAI,CAAC;IAEpC,6GAA6G;IAC7G,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAa;IAEhC;;;;;;OAMG;gBACS,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,GAAE,UAAU,EAAO,EAAE,IAAI,GAAE,iBAAsB;IAc7G;;;;;OAKG;IACH,KAAK,CAAC,IAAI,SAAO;CAGlB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Capability } from "./capability";
|
|
2
|
+
import { Request, Response } from "./k8s/types";
|
|
3
|
+
import { ModuleConfig } from "./types";
|
|
4
|
+
export declare function processor(config: ModuleConfig, capabilities: Capability[], req: Request): Promise<Response>;
|
|
5
|
+
//# sourceMappingURL=processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../../src/lib/processor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsFjH"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { KubernetesObject, Request } from "./k8s";
|
|
2
|
+
import { DeepPartial } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* The RequestWrapper class provides methods to modify Kubernetes objects in the context
|
|
5
|
+
* of a mutating webhook request.
|
|
6
|
+
*/
|
|
7
|
+
export declare class PeprRequest<T extends KubernetesObject> {
|
|
8
|
+
private _input;
|
|
9
|
+
Raw: T;
|
|
10
|
+
get PermitSideEffects(): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Indicates whether the request is a dry run.
|
|
13
|
+
* @returns true if the request is a dry run, false otherwise.
|
|
14
|
+
*/
|
|
15
|
+
get IsDryRun(): boolean | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Provides access to the old resource in the request if available.
|
|
18
|
+
* @returns The old Kubernetes resource object or null if not available.
|
|
19
|
+
*/
|
|
20
|
+
get OldResource(): T | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Provides access to the request object.
|
|
23
|
+
* @returns The request object containing the Kubernetes resource.
|
|
24
|
+
*/
|
|
25
|
+
get Request(): Request<T>;
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new instance of the Action class.
|
|
28
|
+
* @param input - The request object containing the Kubernetes resource to modify.
|
|
29
|
+
*/
|
|
30
|
+
constructor(input: Request<T>);
|
|
31
|
+
/**
|
|
32
|
+
* Deep merges the provided object with the current resource.
|
|
33
|
+
*
|
|
34
|
+
* @param obj - The object to merge with the current resource.
|
|
35
|
+
*/
|
|
36
|
+
Merge(obj: DeepPartial<T>): void;
|
|
37
|
+
/**
|
|
38
|
+
* Updates a label on the Kubernetes resource.
|
|
39
|
+
* @param key - The key of the label to update.
|
|
40
|
+
* @param value - The value of the label.
|
|
41
|
+
* @returns The current Action instance for method chaining.
|
|
42
|
+
*/
|
|
43
|
+
SetLabel(key: string, value: string): this;
|
|
44
|
+
/**
|
|
45
|
+
* Updates an annotation on the Kubernetes resource.
|
|
46
|
+
* @param key - The key of the annotation to update.
|
|
47
|
+
* @param value - The value of the annotation.
|
|
48
|
+
* @returns The current Action instance for method chaining.
|
|
49
|
+
*/
|
|
50
|
+
SetAnnotation(key: string, value: string): this;
|
|
51
|
+
/**
|
|
52
|
+
* Removes a label from the Kubernetes resource.
|
|
53
|
+
* @param key - The key of the label to remove.
|
|
54
|
+
* @returns The current Action instance for method chaining.
|
|
55
|
+
*/
|
|
56
|
+
RemoveLabel(key: string): this;
|
|
57
|
+
/**
|
|
58
|
+
* Removes an annotation from the Kubernetes resource.
|
|
59
|
+
* @param key - The key of the annotation to remove.
|
|
60
|
+
* @returns The current Action instance for method chaining.
|
|
61
|
+
*/
|
|
62
|
+
RemoveAnnotation(key: string): this;
|
|
63
|
+
/**
|
|
64
|
+
* Check if a label exists on the Kubernetes resource.
|
|
65
|
+
*
|
|
66
|
+
* @param key the label key to check
|
|
67
|
+
* @returns
|
|
68
|
+
*/
|
|
69
|
+
HasLabel(key: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Check if an annotation exists on the Kubernetes resource.
|
|
72
|
+
*
|
|
73
|
+
* @param key the annotation key to check
|
|
74
|
+
* @returns
|
|
75
|
+
*/
|
|
76
|
+
HasAnnotation(key: string): boolean;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/lib/request.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;;GAGG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,gBAAgB;IACjD,OAAO,CAAC,MAAM,CAAa;IAEpB,GAAG,EAAE,CAAC,CAAC;IAEd,IAAI,iBAAiB,YAEpB;IAED;;;OAGG;IACH,IAAI,QAAQ,wBAEX;IAED;;;OAGG;IACH,IAAI,WAAW,kBAEd;IAED;;;OAGG;IACH,IAAI,OAAO,eAEV;IAED;;;OAGG;gBACS,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAO7B;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAIzB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAUnC;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAUxC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM;IAOvB;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAO5B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM;CAG1B"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { GroupVersionKind, KubernetesObject, WebhookIgnore } from "./k8s";
|
|
2
|
+
import { PeprRequest } from "./request";
|
|
3
|
+
/**
|
|
4
|
+
* The behavior of this module when an error occurs.
|
|
5
|
+
*/
|
|
6
|
+
export declare enum ErrorBehavior {
|
|
7
|
+
ignore = "ignore",
|
|
8
|
+
audit = "audit",
|
|
9
|
+
reject = "reject"
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The phase of the Kubernetes admission webhook that the capability is registered for.
|
|
13
|
+
*
|
|
14
|
+
* Currently only `mutate` is supported.
|
|
15
|
+
*/
|
|
16
|
+
export declare enum HookPhase {
|
|
17
|
+
mutate = "mutate",
|
|
18
|
+
validate = "validate"
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Recursively make all properties in T optional.
|
|
22
|
+
*/
|
|
23
|
+
export type DeepPartial<T> = {
|
|
24
|
+
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The type of Kubernetes mutating webhook event that the capability action is registered for.
|
|
28
|
+
*/
|
|
29
|
+
export declare enum Event {
|
|
30
|
+
Create = "CREATE",
|
|
31
|
+
Update = "UPDATE",
|
|
32
|
+
Delete = "DELETE",
|
|
33
|
+
CreateOrUpdate = "CREATEORUPDATE"
|
|
34
|
+
}
|
|
35
|
+
export interface CapabilityCfg {
|
|
36
|
+
/**
|
|
37
|
+
* The name of the capability. This should be unique.
|
|
38
|
+
*/
|
|
39
|
+
name: string;
|
|
40
|
+
/**
|
|
41
|
+
* A description of the capability and what it does.
|
|
42
|
+
*/
|
|
43
|
+
description: string;
|
|
44
|
+
/**
|
|
45
|
+
* List of namespaces that this capability applies to, if empty, applies to all namespaces (cluster-wide).
|
|
46
|
+
* This does not supersede the `alwaysIgnore` global configuration.
|
|
47
|
+
*/
|
|
48
|
+
namespaces?: string[];
|
|
49
|
+
/**
|
|
50
|
+
* FUTURE USE.
|
|
51
|
+
*
|
|
52
|
+
* Declare if this capability should be used for mutation or validation. Currently this is not used
|
|
53
|
+
* and everything is considered a mutation.
|
|
54
|
+
*/
|
|
55
|
+
mutateOrValidate?: HookPhase;
|
|
56
|
+
}
|
|
57
|
+
export type ModuleSigning = {
|
|
58
|
+
/**
|
|
59
|
+
* Specifies the signing policy.
|
|
60
|
+
* "requireAuthorizedKey" - only authorized keys are accepted.
|
|
61
|
+
* "requireAnyKey" - any key is accepted, as long as it's valid.
|
|
62
|
+
* "none" - no signing required.
|
|
63
|
+
*/
|
|
64
|
+
signingPolicy?: "requireAuthorizedKey" | "requireAnyKey" | "none";
|
|
65
|
+
/**
|
|
66
|
+
* List of authorized keys for the "requireAuthorizedKey" policy.
|
|
67
|
+
* These keys are allowed to sign Pepr capabilities.
|
|
68
|
+
*/
|
|
69
|
+
authorizedKeys?: string[];
|
|
70
|
+
};
|
|
71
|
+
/** Global configuration for the Pepr runtime. */
|
|
72
|
+
export type ModuleConfig = {
|
|
73
|
+
/** The user-defined name for the module */
|
|
74
|
+
name: string;
|
|
75
|
+
/** The version of Pepr that the module was originally generated with */
|
|
76
|
+
version?: string;
|
|
77
|
+
/** A unique identifier for this Pepr module. This is automatically generated by Pepr. */
|
|
78
|
+
uuid: string;
|
|
79
|
+
/** A description of the Pepr module and what it does. */
|
|
80
|
+
description?: string;
|
|
81
|
+
/** Reject K8s resource AdmissionRequests on error. */
|
|
82
|
+
onError: ErrorBehavior | string;
|
|
83
|
+
/** Configure global exclusions that will never be processed by Pepr. */
|
|
84
|
+
alwaysIgnore: WebhookIgnore;
|
|
85
|
+
/**
|
|
86
|
+
* FUTURE USE.
|
|
87
|
+
*
|
|
88
|
+
* Configure the signing policy for Pepr capabilities.
|
|
89
|
+
* This setting determines the requirements for signing keys in Pepr.
|
|
90
|
+
*/
|
|
91
|
+
signing?: ModuleSigning;
|
|
92
|
+
};
|
|
93
|
+
export type GenericClass = abstract new () => any;
|
|
94
|
+
export type WhenSelector<T extends GenericClass> = {
|
|
95
|
+
/** Register a capability action to be executed when a Kubernetes resource is created or updated. */
|
|
96
|
+
IsCreatedOrUpdated: () => BindingAll<T>;
|
|
97
|
+
/** Register a capability action to be executed when a Kubernetes resource is created. */
|
|
98
|
+
IsCreated: () => BindingAll<T>;
|
|
99
|
+
/** Register a capability action to be executed when a Kubernetes resource is updated. */
|
|
100
|
+
IsUpdated: () => BindingAll<T>;
|
|
101
|
+
/** Register a capability action to be executed when a Kubernetes resource is deleted. */
|
|
102
|
+
IsDeleted: () => BindingAll<T>;
|
|
103
|
+
};
|
|
104
|
+
export type Binding = {
|
|
105
|
+
event?: Event;
|
|
106
|
+
readonly kind: GroupVersionKind;
|
|
107
|
+
readonly filters: {
|
|
108
|
+
name: string;
|
|
109
|
+
namespaces: string[];
|
|
110
|
+
labels: Record<string, string>;
|
|
111
|
+
annotations: Record<string, string>;
|
|
112
|
+
};
|
|
113
|
+
readonly callback: CapabilityAction<GenericClass, InstanceType<GenericClass>>;
|
|
114
|
+
};
|
|
115
|
+
export type BindingFilter<T extends GenericClass> = BindToActionOrSet<T> & {
|
|
116
|
+
/**
|
|
117
|
+
* Only apply the capability action if the resource has the specified label. If no value is specified, the label must exist.
|
|
118
|
+
* Note multiple calls to this method will result in an AND condition. e.g.
|
|
119
|
+
*
|
|
120
|
+
* ```ts
|
|
121
|
+
* When(a.Deployment)
|
|
122
|
+
* .IsCreated()
|
|
123
|
+
* .WithLabel("foo", "bar")
|
|
124
|
+
* .WithLabel("baz", "qux")
|
|
125
|
+
* .Then(...)
|
|
126
|
+
* ```
|
|
127
|
+
*
|
|
128
|
+
* Will only apply the capability action if the resource has both the `foo=bar` and `baz=qux` labels.
|
|
129
|
+
*
|
|
130
|
+
* @param key
|
|
131
|
+
* @param value
|
|
132
|
+
*/
|
|
133
|
+
WithLabel: (key: string, value?: string) => BindingFilter<T>;
|
|
134
|
+
/**
|
|
135
|
+
* Only apply the capability action if the resource has the specified annotation. If no value is specified, the annotation must exist.
|
|
136
|
+
* Note multiple calls to this method will result in an AND condition. e.g.
|
|
137
|
+
*
|
|
138
|
+
* ```ts
|
|
139
|
+
* When(a.Deployment)
|
|
140
|
+
* .IsCreated()
|
|
141
|
+
* .WithAnnotation("foo", "bar")
|
|
142
|
+
* .WithAnnotation("baz", "qux")
|
|
143
|
+
* .Then(...)
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* Will only apply the capability action if the resource has both the `foo=bar` and `baz=qux` annotations.
|
|
147
|
+
*
|
|
148
|
+
* @param key
|
|
149
|
+
* @param value
|
|
150
|
+
*/
|
|
151
|
+
WithAnnotation: (key: string, value?: string) => BindingFilter<T>;
|
|
152
|
+
};
|
|
153
|
+
export type BindingWithName<T extends GenericClass> = BindingFilter<T> & {
|
|
154
|
+
/** Only apply the capability action if the resource name matches the specified name. */
|
|
155
|
+
WithName: (name: string) => BindingFilter<T>;
|
|
156
|
+
};
|
|
157
|
+
export type BindingAll<T extends GenericClass> = BindingWithName<T> & {
|
|
158
|
+
/** Only apply the capability action if the resource is in one of the specified namespaces.*/
|
|
159
|
+
InNamespace: (...namespaces: string[]) => BindingFilter<T>;
|
|
160
|
+
};
|
|
161
|
+
export type BindToAction<T extends GenericClass> = {
|
|
162
|
+
/**
|
|
163
|
+
* Create a new capability action with the specified callback function and previously specified
|
|
164
|
+
* filters.
|
|
165
|
+
* @param action The capability action to be executed when the Kubernetes resource is processed by the AdmissionController.
|
|
166
|
+
*/
|
|
167
|
+
Then: (action: CapabilityAction<T, InstanceType<T>>) => BindToAction<T>;
|
|
168
|
+
};
|
|
169
|
+
export type BindToActionOrSet<T extends GenericClass> = BindToAction<T> & {
|
|
170
|
+
/**
|
|
171
|
+
* Merge the specified updates into the resource, this can only be used once per binding.
|
|
172
|
+
* Note this is just a convenience method for `request.Merge(values)`.
|
|
173
|
+
*
|
|
174
|
+
* Example change the `minReadySeconds` to 3 of a deployment when it is created:
|
|
175
|
+
*
|
|
176
|
+
* ```ts
|
|
177
|
+
* When(a.Deployment)
|
|
178
|
+
* .IsCreated()
|
|
179
|
+
* .ThenSet({ spec: { minReadySeconds: 3 } });
|
|
180
|
+
* ```
|
|
181
|
+
*
|
|
182
|
+
* @param merge
|
|
183
|
+
* @returns
|
|
184
|
+
*/
|
|
185
|
+
ThenSet: (val: DeepPartial<InstanceType<T>>) => BindToAction<T>;
|
|
186
|
+
};
|
|
187
|
+
export type CapabilityAction<T extends GenericClass, K extends KubernetesObject = InstanceType<T>> = (req: PeprRequest<K>) => Promise<void> | void | Promise<PeprRequest<K>> | PeprRequest<K>;
|
|
188
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -9,15 +9,16 @@
|
|
|
9
9
|
"engines": {
|
|
10
10
|
"node": ">=18.0.0"
|
|
11
11
|
},
|
|
12
|
-
"version": "0.3.
|
|
13
|
-
"main": "dist/index.js",
|
|
12
|
+
"version": "0.3.1",
|
|
13
|
+
"main": "dist/src/lib/index.js",
|
|
14
14
|
"scripts": {
|
|
15
15
|
"prebuild": "rm -fr dist/* && node hack/build-template-data.js",
|
|
16
16
|
"build": "tsc",
|
|
17
|
+
"test": "npm run test:unit && npm run test:e2e",
|
|
17
18
|
"test:unit": "npm run build && ava dist/**/*.test.js",
|
|
18
19
|
"test:e2e": "npm run test:e2e:k3d && npm run test:e2e:build && npm run test:e2e:image && npm run test:e2e:run",
|
|
19
20
|
"test:e2e:k3d": "k3d cluster delete pepr-dev && k3d cluster create pepr-dev --k3s-arg '--debug@server:0'",
|
|
20
|
-
"test:e2e:build": "npm run build && npm uninstall pepr -g && npm install -g . && pepr",
|
|
21
|
+
"test:e2e:build": "npm run build && npm pack && npm uninstall pepr -g && npm install -g pepr-0.0.0-development.tgz && pepr",
|
|
21
22
|
"test:e2e:image": "docker buildx build --tag pepr:dev . && k3d image import pepr:dev -c pepr-dev",
|
|
22
23
|
"test:e2e:run": "ava hack/e2e.test.js --sequential --timeout=2m",
|
|
23
24
|
"format:check": "eslint src && prettier src --check",
|
|
@@ -28,7 +29,7 @@
|
|
|
28
29
|
"express": "4.18.2",
|
|
29
30
|
"fast-json-patch": "3.1.1",
|
|
30
31
|
"http-status-codes": "2.2.0",
|
|
31
|
-
"node-fetch": "2.6.
|
|
32
|
+
"node-fetch": "2.6.10",
|
|
32
33
|
"ramda": "0.29.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
@@ -38,8 +39,8 @@
|
|
|
38
39
|
"@types/prompts": "2.4.4",
|
|
39
40
|
"@types/ramda": "0.29.1",
|
|
40
41
|
"@types/uuid": "9.0.1",
|
|
41
|
-
"@typescript-eslint/eslint-plugin": "5.59.
|
|
42
|
-
"@typescript-eslint/parser": "5.59.
|
|
42
|
+
"@typescript-eslint/eslint-plugin": "5.59.5",
|
|
43
|
+
"@typescript-eslint/parser": "5.59.5",
|
|
43
44
|
"ava": "5.2.0",
|
|
44
45
|
"eslint": "8.40.0",
|
|
45
46
|
"nock": "13.3.1",
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
"node-forge": "1.3.1",
|
|
55
56
|
"prompts": "2.4.2",
|
|
56
57
|
"rollup": "3.21.5",
|
|
58
|
+
"ts-node": "10.9.1",
|
|
57
59
|
"typescript": "5.0.4",
|
|
58
60
|
"uuid": "9.0.0"
|
|
59
61
|
},
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import k8s from "@kubernetes/client-node";
|
|
2
2
|
import { StatusCodes as fetchStatus } from "http-status-codes";
|
|
3
3
|
import utils from "ramda";
|
|
4
|
-
import { Capability } from "./
|
|
5
|
-
import { fetch, fetchRaw } from "./
|
|
6
|
-
import { RegisterKind, a } from "./
|
|
7
|
-
import Log from "./
|
|
8
|
-
import { PeprModule } from "./
|
|
9
|
-
import { PeprRequest } from "./
|
|
4
|
+
import { Capability } from "./capability";
|
|
5
|
+
import { fetch, fetchRaw } from "./fetch";
|
|
6
|
+
import { RegisterKind, a } from "./k8s";
|
|
7
|
+
import Log from "./logger";
|
|
8
|
+
import { PeprModule } from "./module";
|
|
9
|
+
import { PeprRequest } from "./request";
|
|
10
10
|
|
|
11
11
|
// Import type information for external packages
|
|
12
12
|
import type * as KubernetesClientNode from "@kubernetes/client-node";
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"uid": "6295e2a5-ad33-43d0-a508-2c5893c7d535",
|
|
3
|
-
"kind": {
|
|
4
|
-
"group": "",
|
|
5
|
-
"version": "v1",
|
|
6
|
-
"kind": "ConfigMap"
|
|
7
|
-
},
|
|
8
|
-
"resource": {
|
|
9
|
-
"group": "",
|
|
10
|
-
"version": "v1",
|
|
11
|
-
"resource": "configmaps"
|
|
12
|
-
},
|
|
13
|
-
"requestKind": {
|
|
14
|
-
"group": "",
|
|
15
|
-
"version": "v1",
|
|
16
|
-
"kind": "ConfigMap"
|
|
17
|
-
},
|
|
18
|
-
"requestResource": {
|
|
19
|
-
"group": "",
|
|
20
|
-
"version": "v1",
|
|
21
|
-
"resource": "configmaps"
|
|
22
|
-
},
|
|
23
|
-
"name": "game-demo",
|
|
24
|
-
"namespace": "apps",
|
|
25
|
-
"operation": "CREATE",
|
|
26
|
-
"userInfo": {
|
|
27
|
-
"username": "kubernetes-admin",
|
|
28
|
-
"groups": ["system:masters", "system:authenticated"]
|
|
29
|
-
},
|
|
30
|
-
"object": {
|
|
31
|
-
"kind": "ConfigMap",
|
|
32
|
-
"apiVersion": "v1",
|
|
33
|
-
"metadata": {
|
|
34
|
-
"name": "game-demo",
|
|
35
|
-
"namespace": "apps",
|
|
36
|
-
"creationTimestamp": null,
|
|
37
|
-
"annotations": {
|
|
38
|
-
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"data\":{\"game.properties\":\"enemy.types=aliens,monsters\\nplayer.maximum-lives=5 \\n\",\"player_initial_lives\":\"3\"},\"kind\":\"ConfigMap\",\"metadata\":{\"annotations\":{},\"name\":\"game-demo\",\"namespace\":\"apps\"}}\n"
|
|
39
|
-
},
|
|
40
|
-
"managedFields": [
|
|
41
|
-
{
|
|
42
|
-
"manager": "kubectl-client-side-apply",
|
|
43
|
-
"operation": "Update",
|
|
44
|
-
"apiVersion": "v1",
|
|
45
|
-
"time": "2023-03-31T19:46:37Z",
|
|
46
|
-
"fieldsType": "FieldsV1",
|
|
47
|
-
"fieldsV1": {
|
|
48
|
-
"f:data": {
|
|
49
|
-
".": {},
|
|
50
|
-
"f:game.properties": {},
|
|
51
|
-
"f:player_initial_lives": {}
|
|
52
|
-
},
|
|
53
|
-
"f:metadata": {
|
|
54
|
-
"f:annotations": {
|
|
55
|
-
".": {},
|
|
56
|
-
"f:kubectl.kubernetes.io/last-applied-configuration": {}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
]
|
|
62
|
-
},
|
|
63
|
-
"data": {
|
|
64
|
-
"game.properties": "enemy.types=aliens,monsters\nplayer.maximum-lives=5 \n",
|
|
65
|
-
"player_initial_lives": "3"
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
"oldObject": null,
|
|
69
|
-
"dryRun": false,
|
|
70
|
-
"options": {
|
|
71
|
-
"kind": "CreateOptions",
|
|
72
|
-
"apiVersion": "meta.k8s.io/v1",
|
|
73
|
-
"fieldManager": "kubectl-client-side-apply"
|
|
74
|
-
}
|
|
75
|
-
}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"uid": "b6b9e558-5b95-488e-bad4-f1d0875569bb",
|
|
3
|
-
"kind": {
|
|
4
|
-
"group": "apps",
|
|
5
|
-
"version": "v1",
|
|
6
|
-
"kind": "Deployment"
|
|
7
|
-
},
|
|
8
|
-
"resource": {
|
|
9
|
-
"group": "apps",
|
|
10
|
-
"version": "v1",
|
|
11
|
-
"resource": "deployments"
|
|
12
|
-
},
|
|
13
|
-
"requestKind": {
|
|
14
|
-
"group": "apps",
|
|
15
|
-
"version": "v1",
|
|
16
|
-
"kind": "Deployment"
|
|
17
|
-
},
|
|
18
|
-
"requestResource": {
|
|
19
|
-
"group": "apps",
|
|
20
|
-
"version": "v1",
|
|
21
|
-
"resource": "deployments"
|
|
22
|
-
},
|
|
23
|
-
"name": "nginx-deployment",
|
|
24
|
-
"namespace": "apps",
|
|
25
|
-
"operation": "CREATE",
|
|
26
|
-
"userInfo": {
|
|
27
|
-
"username": "kubernetes-admin",
|
|
28
|
-
"groups": ["system:masters", "system:authenticated"]
|
|
29
|
-
},
|
|
30
|
-
"object": {
|
|
31
|
-
"kind": "Deployment",
|
|
32
|
-
"apiVersion": "apps/v1",
|
|
33
|
-
"metadata": {
|
|
34
|
-
"name": "nginx-deployment",
|
|
35
|
-
"namespace": "apps",
|
|
36
|
-
"creationTimestamp": null,
|
|
37
|
-
"labels": {
|
|
38
|
-
"app": "nginx"
|
|
39
|
-
},
|
|
40
|
-
"annotations": {
|
|
41
|
-
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"nginx\"},\"name\":\"nginx-deployment\",\"namespace\":\"apps\"},\"spec\":{\"replicas\":1,\"selector\":{\"matchLabels\":{\"app\":\"nginx\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"nginx\"}},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]}]}}}}\n"
|
|
42
|
-
},
|
|
43
|
-
"managedFields": [
|
|
44
|
-
{
|
|
45
|
-
"manager": "kubectl-client-side-apply",
|
|
46
|
-
"operation": "Update",
|
|
47
|
-
"apiVersion": "apps/v1",
|
|
48
|
-
"time": "2023-03-31T19:36:29Z",
|
|
49
|
-
"fieldsType": "FieldsV1",
|
|
50
|
-
"fieldsV1": {
|
|
51
|
-
"f:metadata": {
|
|
52
|
-
"f:annotations": {
|
|
53
|
-
".": {},
|
|
54
|
-
"f:kubectl.kubernetes.io/last-applied-configuration": {}
|
|
55
|
-
},
|
|
56
|
-
"f:labels": {
|
|
57
|
-
".": {},
|
|
58
|
-
"f:app": {}
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
"f:spec": {
|
|
62
|
-
"f:progressDeadlineSeconds": {},
|
|
63
|
-
"f:replicas": {},
|
|
64
|
-
"f:revisionHistoryLimit": {},
|
|
65
|
-
"f:selector": {},
|
|
66
|
-
"f:strategy": {
|
|
67
|
-
"f:rollingUpdate": {
|
|
68
|
-
".": {},
|
|
69
|
-
"f:maxSurge": {},
|
|
70
|
-
"f:maxUnavailable": {}
|
|
71
|
-
},
|
|
72
|
-
"f:type": {}
|
|
73
|
-
},
|
|
74
|
-
"f:template": {
|
|
75
|
-
"f:metadata": {
|
|
76
|
-
"f:labels": {
|
|
77
|
-
".": {},
|
|
78
|
-
"f:app": {}
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
"f:spec": {
|
|
82
|
-
"f:containers": {
|
|
83
|
-
"k:{\"name\":\"nginx\"}": {
|
|
84
|
-
".": {},
|
|
85
|
-
"f:image": {},
|
|
86
|
-
"f:imagePullPolicy": {},
|
|
87
|
-
"f:name": {},
|
|
88
|
-
"f:ports": {
|
|
89
|
-
".": {},
|
|
90
|
-
"k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
|
|
91
|
-
".": {},
|
|
92
|
-
"f:containerPort": {},
|
|
93
|
-
"f:protocol": {}
|
|
94
|
-
}
|
|
95
|
-
},
|
|
96
|
-
"f:resources": {},
|
|
97
|
-
"f:terminationMessagePath": {},
|
|
98
|
-
"f:terminationMessagePolicy": {}
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
"f:dnsPolicy": {},
|
|
102
|
-
"f:restartPolicy": {},
|
|
103
|
-
"f:schedulerName": {},
|
|
104
|
-
"f:securityContext": {},
|
|
105
|
-
"f:terminationGracePeriodSeconds": {}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
]
|
|
112
|
-
},
|
|
113
|
-
"spec": {
|
|
114
|
-
"replicas": 1,
|
|
115
|
-
"selector": {
|
|
116
|
-
"matchLabels": {
|
|
117
|
-
"app": "nginx"
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
"template": {
|
|
121
|
-
"metadata": {
|
|
122
|
-
"creationTimestamp": null,
|
|
123
|
-
"labels": {
|
|
124
|
-
"app": "nginx"
|
|
125
|
-
}
|
|
126
|
-
},
|
|
127
|
-
"spec": {
|
|
128
|
-
"containers": [
|
|
129
|
-
{
|
|
130
|
-
"name": "nginx",
|
|
131
|
-
"image": "nginx:1.14.2",
|
|
132
|
-
"ports": [
|
|
133
|
-
{
|
|
134
|
-
"containerPort": 80,
|
|
135
|
-
"protocol": "TCP"
|
|
136
|
-
}
|
|
137
|
-
],
|
|
138
|
-
"resources": {},
|
|
139
|
-
"terminationMessagePath": "/dev/termination-log",
|
|
140
|
-
"terminationMessagePolicy": "File",
|
|
141
|
-
"imagePullPolicy": "IfNotPresent"
|
|
142
|
-
}
|
|
143
|
-
],
|
|
144
|
-
"restartPolicy": "Always",
|
|
145
|
-
"terminationGracePeriodSeconds": 30,
|
|
146
|
-
"dnsPolicy": "ClusterFirst",
|
|
147
|
-
"securityContext": {},
|
|
148
|
-
"schedulerName": "default-scheduler"
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
"strategy": {
|
|
152
|
-
"type": "RollingUpdate",
|
|
153
|
-
"rollingUpdate": {
|
|
154
|
-
"maxUnavailable": "25%",
|
|
155
|
-
"maxSurge": "25%"
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
"revisionHistoryLimit": 10,
|
|
159
|
-
"progressDeadlineSeconds": 600
|
|
160
|
-
},
|
|
161
|
-
"status": {}
|
|
162
|
-
},
|
|
163
|
-
"oldObject": null,
|
|
164
|
-
"dryRun": false,
|
|
165
|
-
"options": {
|
|
166
|
-
"kind": "CreateOptions",
|
|
167
|
-
"apiVersion": "meta.k8s.io/v1",
|
|
168
|
-
"fieldManager": "kubectl-client-side-apply"
|
|
169
|
-
}
|
|
170
|
-
}
|