@intentius/chant-lexicon-gcp 0.45.0 → 0.49.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/composites/gke-cluster.d.ts +3 -2
- package/dist/composites/gke-cluster.d.ts.map +1 -1
- package/dist/composites/gke-crdb-region.d.ts.map +1 -1
- package/dist/composites/gpu-node-pool.d.ts +83 -0
- package/dist/composites/gpu-node-pool.d.ts.map +1 -0
- package/dist/composites/index.d.ts +2 -0
- package/dist/composites/index.d.ts.map +1 -1
- package/dist/describe-resources.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/integrity.json +4 -4
- package/dist/manifest.json +1 -1
- package/dist/op/activities/gcp-apply.d.ts +13 -1
- package/dist/op/activities/gcp-apply.d.ts.map +1 -1
- package/dist/op/activities/index.d.ts +1 -1
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/skills/chant-gcp-patterns.md +1 -0
- package/dist/skills/chant-gcp.md +2 -0
- package/package.json +3 -3
- package/src/composites/composites.test.ts +157 -9
- package/src/composites/gke-cluster.ts +4 -5
- package/src/composites/gke-crdb-region.ts +1 -0
- package/src/composites/gpu-node-pool.ts +150 -0
- package/src/composites/index.ts +2 -0
- package/src/describe-resources.ts +4 -1
- package/src/index.ts +2 -1
- package/src/lifecycle-integration.test.ts +28 -0
- package/src/op/activities/gcp-apply.test.ts +39 -0
- package/src/op/activities/gcp-apply.ts +20 -3
- package/src/op/activities/index.ts +1 -0
- package/src/skills/chant-gcp-patterns.md +1 -0
- package/src/skills/chant-gcp.md +2 -0
|
@@ -8,8 +8,8 @@ import { GKECluster, NodePool } from "../generated/index.js";
|
|
|
8
8
|
export interface GkeClusterProps {
|
|
9
9
|
/** Cluster name. */
|
|
10
10
|
name: string;
|
|
11
|
-
/** GCP project ID for workload identity pool.
|
|
12
|
-
projectId
|
|
11
|
+
/** GCP project ID for the workload identity pool. */
|
|
12
|
+
projectId: string;
|
|
13
13
|
/** GCP region for regional cluster (default: uses GCP.Region). */
|
|
14
14
|
location?: string;
|
|
15
15
|
/** Initial node count per zone (default: 1). */
|
|
@@ -71,6 +71,7 @@ export interface GkeClusterProps {
|
|
|
71
71
|
*
|
|
72
72
|
* const { cluster, nodePool } = GkeCluster({
|
|
73
73
|
* name: "my-cluster",
|
|
74
|
+
* projectId: "my-project",
|
|
74
75
|
* location: "us-central1",
|
|
75
76
|
* maxNodeCount: 10,
|
|
76
77
|
* });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gke-cluster.d.ts","sourceRoot":"","sources":["../../src/composites/gke-cluster.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"gke-cluster.d.ts","sourceRoot":"","sources":["../../src/composites/gke-cluster.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,gDAAgD;IAChD,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IAChD,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,WAAW,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAClE,CAAC;CACH;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,UAAU;;;;EAmHP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gke-crdb-region.d.ts","sourceRoot":"","sources":["../../src/composites/gke-crdb-region.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IAChD,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"gke-crdb-region.d.ts","sourceRoot":"","sources":["../../src/composites/gke-crdb-region.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IAChD,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,kHAkJP,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GpuNodePool composite — ContainerNodePool with GPU accelerators.
|
|
3
|
+
*
|
|
4
|
+
* Promoted from the hand-wired `gpuNodePool` in the ray-kuberay-gke example
|
|
5
|
+
* (examples/ray-kuberay-gke/src/infra/cluster.ts). Attaches to an existing
|
|
6
|
+
* GKE cluster (e.g. one created by `GkeCluster`) and adds a separate,
|
|
7
|
+
* scale-to-zero pool for GPU-tainted workloads.
|
|
8
|
+
*
|
|
9
|
+
* NOTE: GKE auto-installs the nvidia-device-plugin DaemonSet when a node
|
|
10
|
+
* pool has accelerators. Do NOT emit it as a K8s manifest — it will
|
|
11
|
+
* conflict with the GKE-managed version.
|
|
12
|
+
*/
|
|
13
|
+
import { NodePool } from "../generated/index.js";
|
|
14
|
+
export interface GpuNodePoolTaint {
|
|
15
|
+
key: string;
|
|
16
|
+
value: string;
|
|
17
|
+
effect: string;
|
|
18
|
+
}
|
|
19
|
+
export interface GpuNodePoolProps {
|
|
20
|
+
/** Node pool name. */
|
|
21
|
+
name: string;
|
|
22
|
+
/** Reference to the GKE cluster this pool attaches to, e.g. `{ name: "my-cluster" }`. */
|
|
23
|
+
clusterRef: Record<string, unknown>;
|
|
24
|
+
/** GCP region or zone of the cluster. */
|
|
25
|
+
location: string;
|
|
26
|
+
/** Machine type for GPU nodes (default: "n1-standard-8"). */
|
|
27
|
+
machineType?: string;
|
|
28
|
+
/** Accelerator type, e.g. "nvidia-tesla-t4", "nvidia-l4", "nvidia-tesla-a100" (default: "nvidia-tesla-t4"). */
|
|
29
|
+
acceleratorType?: string;
|
|
30
|
+
/** Number of accelerators per node (default: 1). */
|
|
31
|
+
acceleratorCount?: number;
|
|
32
|
+
/** Minimum nodes for autoscaling — 0 enables scale-to-zero (default: 0). */
|
|
33
|
+
minNodeCount?: number;
|
|
34
|
+
/** Maximum nodes for autoscaling (default: 4). */
|
|
35
|
+
maxNodeCount?: number;
|
|
36
|
+
/** Boot disk size in GB (default: 200). */
|
|
37
|
+
diskSizeGb?: number;
|
|
38
|
+
/** Boot disk type (default: "pd-ssd"). */
|
|
39
|
+
diskType?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Node taints — only pods with a matching toleration are scheduled here.
|
|
42
|
+
* Default: `nvidia.com/gpu=present:NO_SCHEDULE`. Pass an empty array to omit tainting.
|
|
43
|
+
*/
|
|
44
|
+
taint?: GpuNodePoolTaint[];
|
|
45
|
+
/** Enable GKE metadata server workload identity mode on nodes (default: true). */
|
|
46
|
+
workloadMetadata?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* GPU time-sharing configuration, e.g.
|
|
49
|
+
* `{ maxSharedClientsPerGpu: 2, gpuSharingStrategy: "TIME_SHARING" }`.
|
|
50
|
+
*/
|
|
51
|
+
gpuSharingConfig?: Record<string, unknown>;
|
|
52
|
+
/** Multi-instance GPU (MIG) partition size, e.g. "1g.5gb". */
|
|
53
|
+
gpuPartitionSize?: string;
|
|
54
|
+
/** Additional labels. */
|
|
55
|
+
labels?: Record<string, string>;
|
|
56
|
+
/** Namespace for the node pool resource. */
|
|
57
|
+
namespace?: string;
|
|
58
|
+
/** Per-member defaults for customizing the underlying resource. */
|
|
59
|
+
defaults?: {
|
|
60
|
+
nodePool?: Partial<ConstructorParameters<typeof NodePool>[0]>;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a GpuNodePool composite — a scale-to-zero ContainerNodePool with
|
|
65
|
+
* GPU accelerators, tainted so only pods with a matching toleration land there.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* import { GpuNodePool } from "@intentius/chant-lexicon-gcp";
|
|
70
|
+
*
|
|
71
|
+
* const { nodePool } = GpuNodePool({
|
|
72
|
+
* name: "ray-gke-gpu",
|
|
73
|
+
* clusterRef: { name: "ray-gke" },
|
|
74
|
+
* location: "us-central1",
|
|
75
|
+
* acceleratorType: "nvidia-tesla-t4",
|
|
76
|
+
* maxNodeCount: 4,
|
|
77
|
+
* });
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export declare const GpuNodePool: import("@intentius/chant").CompositeDefinition<GpuNodePoolProps, {
|
|
81
|
+
nodePool: import("@intentius/chant").Declarable & Record<string, string>;
|
|
82
|
+
}>;
|
|
83
|
+
//# sourceMappingURL=gpu-node-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-node-pool.d.ts","sourceRoot":"","sources":["../../src/composites/gpu-node-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+GAA+G;IAC/G,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/D,CAAC;CACH;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,WAAW;;EA6DP,CAAC"}
|
|
@@ -26,4 +26,6 @@ export { MultiRegionVpc } from "./multi-region-vpc.js";
|
|
|
26
26
|
export type { MultiRegionVpcConfig, MultiRegionVpcRegion } from "./multi-region-vpc.js";
|
|
27
27
|
export { GkeCrdbRegion } from "./gke-crdb-region.js";
|
|
28
28
|
export type { GkeCrdbRegionConfig, GkeCrdbRegionNodeConfig } from "./gke-crdb-region.js";
|
|
29
|
+
export { GpuNodePool } from "./gpu-node-pool.js";
|
|
30
|
+
export type { GpuNodePoolProps, GpuNodePoolTaint } from "./gpu-node-pool.js";
|
|
29
31
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composites/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpG,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composites/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpG,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe-resources.d.ts","sourceRoot":"","sources":["../src/describe-resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAsC,MAAM,0BAA0B,CAAC;AAsBtG;;gCAEgC;AAChC,UAAU,eAAe;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACxF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB/F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,SAAS,EAC9D,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,CAQR;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAY3D;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"describe-resources.d.ts","sourceRoot":"","sources":["../src/describe-resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAsC,MAAM,0BAA0B,CAAC;AAsBtG;;gCAEgC;AAChC,UAAU,eAAe;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACxF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB/F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,SAAS,EAC9D,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,CAQR;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAY3D;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwH7B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ export { DEFAULT_LABELS_MARKER, DEFAULT_ANNOTATIONS_MARKER } from "./default-lab
|
|
|
5
5
|
export { GCP, ProjectId, Region, Zone } from "./pseudo.js";
|
|
6
6
|
export { GcpAnnotations } from "./variables.js";
|
|
7
7
|
export * from "./generated/index.js";
|
|
8
|
-
export { GkeCluster, CloudRunServiceComposite, CloudSqlInstance, GcsBucket, VpcNetwork, PubSubPipeline, CloudFunctionWithTrigger, PrivateService, ManagedCertificate, SecureProject, MemorystoreRedis, MultiRegionVpc, GkeCrdbRegion, GovernanceFoundation, LocationRestriction, OrganizationAuditConfig, } from "./composites/index.js";
|
|
9
|
-
export type { GkeClusterProps, CloudRunServiceProps, CloudSqlInstanceProps, GcsBucketProps, VpcNetworkProps, VpcSubnet, PubSubPipelineProps, CloudFunctionWithTriggerProps, PrivateServiceProps, ManagedCertificateProps, SecureProjectProps, MemorystoreRedisProps, MultiRegionVpcConfig, MultiRegionVpcRegion, GkeCrdbRegionConfig, GkeCrdbRegionNodeConfig, GovernanceFoundationProps, LocationRestrictionProps, OrganizationAuditConfigProps, } from "./composites/index.js";
|
|
8
|
+
export { GkeCluster, CloudRunServiceComposite, CloudSqlInstance, GcsBucket, VpcNetwork, PubSubPipeline, CloudFunctionWithTrigger, PrivateService, ManagedCertificate, SecureProject, MemorystoreRedis, MultiRegionVpc, GkeCrdbRegion, GpuNodePool, GovernanceFoundation, LocationRestriction, OrganizationAuditConfig, } from "./composites/index.js";
|
|
9
|
+
export type { GkeClusterProps, CloudRunServiceProps, CloudSqlInstanceProps, GcsBucketProps, VpcNetworkProps, VpcSubnet, PubSubPipelineProps, CloudFunctionWithTriggerProps, PrivateServiceProps, ManagedCertificateProps, SecureProjectProps, MemorystoreRedisProps, MultiRegionVpcConfig, MultiRegionVpcRegion, GkeCrdbRegionConfig, GkeCrdbRegionNodeConfig, GpuNodePoolProps, GpuNodePoolTaint, GovernanceFoundationProps, LocationRestrictionProps, OrganizationAuditConfigProps, } from "./composites/index.js";
|
|
10
10
|
export { landingZoneConfig, resourceLocationRestriction, DISABLE_SA_KEY_CREATION, SKIP_DEFAULT_NETWORK, AUDIT_ALL_SERVICES, FOUNDATION_FOLDERS, } from "./governance.js";
|
|
11
11
|
export type { GcpGovernanceConfig, LandingZoneConfigProps, FolderConfig, OrgPolicyConfig, ProjectConfig } from "./governance.js";
|
|
12
12
|
export { StorageRoles, ComputeRoles, ContainerRoles, IAMRoles, SQLRoles, RunRoles, PubSubRoles } from "./actions/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGrF,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EACL,UAAU,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAC7E,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAC3F,gBAAgB,EAAE,cAAc,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGrF,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EACL,UAAU,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAC7E,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAC3F,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAC5D,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,GACnE,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,eAAe,EAAE,SAAS,EAC1B,mBAAmB,EACnB,6BAA6B,EAC7B,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,uBAAuB,EAC5C,gBAAgB,EAAE,gBAAgB,EAClC,yBAAyB,EAAE,wBAAwB,EAAE,4BAA4B,GAClF,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,iBAAiB,EAAE,2BAA2B,EAC9C,uBAAuB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,GACtF,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG9H,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGxH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1G,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrI,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/integrity.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"algorithm": "sha256",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"manifest.json": "
|
|
4
|
+
"manifest.json": "227727b18bfb8d0875e8ea92b6c572ec1294fadfb0edb8ce0a641f1674c90b1f",
|
|
5
5
|
"meta.json": "475f10909854d059a2e2d4fb541c058803422e38b9c64bd4d6858c0623eedb8c",
|
|
6
6
|
"types/index.d.ts": "5433b54c04b57d6fda8f3d81ef92ed0aca87f7e8e5dd3ea92d8de6e62a3ccfab",
|
|
7
7
|
"rules/hardcoded-project.ts": "228631d3159e1ffcce2359c66073d4ae59bb0285f378e46e446f416aec50481c",
|
|
@@ -35,10 +35,10 @@
|
|
|
35
35
|
"rules/wgc501.ts": "bf99d8dc97537687fdfe9a8d5eb420172bf3279a4147311037f9c1d1f5fd4c85",
|
|
36
36
|
"rules/wgc502.ts": "6460a028f73ef31a66653954e67142079130112b70fa01a79f80464968a1b9f6",
|
|
37
37
|
"rules/wgc503.ts": "44dc51efbf9f9384b61a4e19b173b4c182557143cb59fbaf4da087e70a38f916",
|
|
38
|
-
"skills/chant-gcp.md": "
|
|
38
|
+
"skills/chant-gcp.md": "46a5e711ac59086d9f59ef645085aa54e8b1953afb76a0d93158b7288edf362e",
|
|
39
39
|
"skills/chant-gcp-security.md": "39a1c97b7425ed43b081257132449d11ce9d12f2d4755fc30d8b14bbc38f60bd",
|
|
40
|
-
"skills/chant-gcp-patterns.md": "
|
|
40
|
+
"skills/chant-gcp-patterns.md": "4c6809fc7c37fa1879379ad4c0e2d114dec9497bc6eb9d1bca4e79fddea4f509",
|
|
41
41
|
"skills/chant-gcp-gke.md": "be277019da9a722c851e47cd2dfb9c9536668948c3535fb20db7697e934c4e2b"
|
|
42
42
|
},
|
|
43
|
-
"composite": "
|
|
43
|
+
"composite": "2592321e250e7dbd8adcad67b82a9232652af393445d16192e44bf7a5e1ebda9"
|
|
44
44
|
}
|
package/dist/manifest.json
CHANGED
|
@@ -185,6 +185,17 @@ export declare function referencedNames(resource: GcpResource): string[];
|
|
|
185
185
|
* Pure — a DFS post-order.
|
|
186
186
|
*/
|
|
187
187
|
export declare function orderByReferences(resources: GcpResource[]): GcpResource[];
|
|
188
|
+
/**
|
|
189
|
+
* Resolve the endpoint override (#1449): an explicit `endpoint` arg wins, then
|
|
190
|
+
* the `GCP_ENDPOINT_URL` env — the same variable the read path honours
|
|
191
|
+
* (`describe-resources`, floci-gcp), so an apply lands wherever `--live` is
|
|
192
|
+
* already looking. `undefined` means no override: each kind falls back to its
|
|
193
|
+
* real-GCP host. The same rule the aws applier applies to `AWS_ENDPOINT_URL`
|
|
194
|
+
* (#1694) and the fly applier to `FLY_FLAPS_BASE_URL`. Pure.
|
|
195
|
+
*/
|
|
196
|
+
export declare function resolveGcpEndpoint(args?: {
|
|
197
|
+
endpoint?: string;
|
|
198
|
+
}, env?: NodeJS.ProcessEnv): string | undefined;
|
|
188
199
|
/** Resolve the project: `GOOGLE_CLOUD_PROJECT` env, else the CNRM project-id annotation. Pure. */
|
|
189
200
|
export declare function resolveGcpProject(resource: GcpResource, env?: NodeJS.ProcessEnv): string;
|
|
190
201
|
/** Injectable HTTP client — mirrors argo's injectable fetcher so tests avoid the network. */
|
|
@@ -220,7 +231,8 @@ export declare function parseManifest(content: string, path: string): GcpResourc
|
|
|
220
231
|
export interface GcpApplyArgs {
|
|
221
232
|
/** Path to a built CNRM manifest (YAML multi-doc or JSON). */
|
|
222
233
|
manifestPath: string;
|
|
223
|
-
/** GCS/GCP endpoint override for all kinds (e.g. floci-gcp `:4588`).
|
|
234
|
+
/** GCS/GCP endpoint override for all kinds (e.g. floci-gcp `:4588`).
|
|
235
|
+
* Default: `GCP_ENDPOINT_URL` env, else each kind's real-GCP host. */
|
|
224
236
|
endpoint?: string;
|
|
225
237
|
/** Project override. Default: `GOOGLE_CLOUD_PROJECT` env / CNRM annotation. */
|
|
226
238
|
project?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcp-apply.d.ts","sourceRoot":"","sources":["../../../src/op/activities/gcp-apply.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"gcp-apply.d.ts","sourceRoot":"","sources":["../../../src/op/activities/gcp-apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* (`gcpApply`), which maps CNRM resources to GCP REST calls since GCP has no
|
|
5
5
|
* native deployment service to shell out to.
|
|
6
6
|
*/
|
|
7
|
-
export { gcpApply, gcpDelete, applyResource, deleteResource, waitForOperation, longRunningOperation, bucketInsertBody, pubSubTopicBody, pubSubSubscriptionBody, cloudRunServiceBody, secretBody, serviceAccountBody, storageBucketMapper, pubSubTopicMapper, pubSubSubscriptionMapper, cloudRunServiceMapper, secretManagerSecretMapper, gcpServiceAccountMapper, MAPPERS, referencedNames, orderByReferences, pruneOrphans, toApplyResult, type GcpNotAttempted, type GcpNotPrunable, chantOwnershipLabels, isChantOwned, resolveGcpProject, parseManifest, } from "./gcp-apply.js";
|
|
7
|
+
export { gcpApply, gcpDelete, applyResource, deleteResource, waitForOperation, longRunningOperation, bucketInsertBody, pubSubTopicBody, pubSubSubscriptionBody, cloudRunServiceBody, secretBody, serviceAccountBody, storageBucketMapper, pubSubTopicMapper, pubSubSubscriptionMapper, cloudRunServiceMapper, secretManagerSecretMapper, gcpServiceAccountMapper, MAPPERS, referencedNames, orderByReferences, pruneOrphans, toApplyResult, type GcpNotAttempted, type GcpNotPrunable, chantOwnershipLabels, isChantOwned, resolveGcpEndpoint, resolveGcpProject, parseManifest, } from "./gcp-apply.js";
|
|
8
8
|
export type { GcpApplyArgs, GcpResource, CnrmStorageBucket, BucketInsertBody, PubSubTopicBody, ResourceMapper, OperationSpec, ListSpec, ApplyPlan, GcpHttp, } from "./gcp-apply.js";
|
|
9
9
|
export { flociGcpUp, flociGcpDown, flociGcpRunCommand, flociGcpRmCommand, flociGcpExistsCommand, flociGcpHealthUrl, flociGcpEndpoint, } from "./floci-gcp.js";
|
|
10
10
|
export type { FlociGcpUpArgs, FlociGcpDownArgs } from "./floci-gcp.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/op/activities/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,GACR,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/op/activities/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,GACR,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/skills/chant-gcp.md
CHANGED
|
@@ -201,6 +201,7 @@ Composites group related Config Connector resources with secure defaults. Each r
|
|
|
201
201
|
| `PrivateService` | ComputeGlobalAddress + ServiceNetworkingConnection | RFC 1918 range, automatic peering |
|
|
202
202
|
| `ManagedCertificate` | ComputeManagedSslCertificate | Auto-renewal via Google-managed cert |
|
|
203
203
|
| `SecureProject` | Project + IAMAuditConfig + essential Service resources | Audit logging, required APIs enabled, org policy constraints |
|
|
204
|
+
| `GpuNodePool` | ContainerNodePool with GPU accelerators | Scale-to-zero, nvidia.com/gpu taint, GKE metadata workload identity |
|
|
204
205
|
|
|
205
206
|
### Example: GKE cluster with secure defaults
|
|
206
207
|
|
|
@@ -209,6 +210,7 @@ import { GkeCluster } from "@intentius/chant-lexicon-gcp";
|
|
|
209
210
|
|
|
210
211
|
const { cluster, nodePool } = GkeCluster({
|
|
211
212
|
name: "prod-cluster",
|
|
213
|
+
projectId: "my-project",
|
|
212
214
|
location: "us-central1",
|
|
213
215
|
initialNodeCount: 3,
|
|
214
216
|
minNodeCount: 1,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/chant-lexicon-gcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.0",
|
|
4
4
|
"description": "Google Cloud lexicon for chant — declarative IaC in TypeScript",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://intentius.io/chant",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"fflate": "^0.8.2",
|
|
71
|
-
"js-yaml": "^4.1
|
|
71
|
+
"js-yaml": "^4.3.1",
|
|
72
72
|
"@types/js-yaml": "^4.0.9"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"typescript": "^5.9.3"
|
|
77
77
|
},
|
|
78
78
|
"peerDependencies": {
|
|
79
|
-
"@intentius/chant": "^0.
|
|
79
|
+
"@intentius/chant": "^0.49.0",
|
|
80
80
|
"typescript": "^5.9.3"
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -9,6 +9,7 @@ import { CloudFunctionWithTrigger } from "./cloud-function";
|
|
|
9
9
|
import { PrivateService } from "./private-service";
|
|
10
10
|
import { ManagedCertificate } from "./managed-certificate";
|
|
11
11
|
import { SecureProject } from "./secure-project";
|
|
12
|
+
import { GpuNodePool } from "./gpu-node-pool";
|
|
12
13
|
|
|
13
14
|
/** Helper to extract props from a Declarable member. */
|
|
14
15
|
function p(member: unknown): Record<string, any> {
|
|
@@ -19,35 +20,35 @@ function p(member: unknown): Record<string, any> {
|
|
|
19
20
|
|
|
20
21
|
describe("GkeCluster", () => {
|
|
21
22
|
test("returns cluster and node pool", () => {
|
|
22
|
-
const result = GkeCluster({ name: "my-cluster" });
|
|
23
|
+
const result = GkeCluster({ name: "my-cluster", projectId: "proj" });
|
|
23
24
|
expect(result.cluster).toBeDefined();
|
|
24
25
|
expect(result.nodePool).toBeDefined();
|
|
25
26
|
});
|
|
26
27
|
|
|
27
28
|
test("includes common labels", () => {
|
|
28
|
-
const result = GkeCluster({ name: "my-cluster" });
|
|
29
|
+
const result = GkeCluster({ name: "my-cluster", projectId: "proj" });
|
|
29
30
|
const meta = p(result.cluster).metadata;
|
|
30
31
|
expect(meta.labels["app.kubernetes.io/managed-by"]).toBe("chant");
|
|
31
32
|
});
|
|
32
33
|
|
|
33
34
|
test("node pool references cluster", () => {
|
|
34
|
-
const result = GkeCluster({ name: "my-cluster" });
|
|
35
|
+
const result = GkeCluster({ name: "my-cluster", projectId: "proj" });
|
|
35
36
|
expect(p(result.nodePool).clusterRef.name).toBe("my-cluster");
|
|
36
37
|
});
|
|
37
38
|
|
|
38
39
|
test("respects maxNodeCount", () => {
|
|
39
|
-
const result = GkeCluster({ name: "c", maxNodeCount: 20 });
|
|
40
|
+
const result = GkeCluster({ name: "c", projectId: "proj", maxNodeCount: 20 });
|
|
40
41
|
expect(p(result.nodePool).autoscaling.maxNodeCount).toBe(20);
|
|
41
42
|
});
|
|
42
43
|
|
|
43
44
|
test("sets namespace when provided", () => {
|
|
44
|
-
const result = GkeCluster({ name: "c", namespace: "infra" });
|
|
45
|
+
const result = GkeCluster({ name: "c", projectId: "proj", namespace: "infra" });
|
|
45
46
|
expect(p(result.cluster).metadata.namespace).toBe("infra");
|
|
46
47
|
expect(p(result.nodePool).metadata.namespace).toBe("infra");
|
|
47
48
|
});
|
|
48
49
|
|
|
49
50
|
test("enables workload identity by default", () => {
|
|
50
|
-
const result = GkeCluster({ name: "c" });
|
|
51
|
+
const result = GkeCluster({ name: "c", projectId: "proj" });
|
|
51
52
|
expect(p(result.cluster).workloadIdentityConfig).toBeDefined();
|
|
52
53
|
expect(p(result.nodePool).nodeConfig.workloadMetadataConfig).toBeDefined();
|
|
53
54
|
});
|
|
@@ -59,13 +60,13 @@ describe("GkeCluster", () => {
|
|
|
59
60
|
);
|
|
60
61
|
});
|
|
61
62
|
|
|
62
|
-
test("
|
|
63
|
+
test("ignores GCP_PROJECT_ID env var — projectId comes from props only", () => {
|
|
63
64
|
const prev = process.env.GCP_PROJECT_ID;
|
|
64
65
|
process.env.GCP_PROJECT_ID = "env-project-456";
|
|
65
66
|
try {
|
|
66
|
-
const result = GkeCluster({ name: "c" });
|
|
67
|
+
const result = GkeCluster({ name: "c", projectId: "explicit-project" });
|
|
67
68
|
expect(p(result.cluster).workloadIdentityConfig.workloadPool).toBe(
|
|
68
|
-
"
|
|
69
|
+
"explicit-project.svc.id.goog",
|
|
69
70
|
);
|
|
70
71
|
} finally {
|
|
71
72
|
if (prev === undefined) delete process.env.GCP_PROJECT_ID;
|
|
@@ -462,3 +463,150 @@ describe("SecureProject", () => {
|
|
|
462
463
|
expect(result.loggingSink).toBeUndefined();
|
|
463
464
|
});
|
|
464
465
|
});
|
|
466
|
+
|
|
467
|
+
// ── GpuNodePool ────────────────────────────────────────────────────
|
|
468
|
+
|
|
469
|
+
describe("GpuNodePool", () => {
|
|
470
|
+
test("returns a node pool", () => {
|
|
471
|
+
const result = GpuNodePool({
|
|
472
|
+
name: "ray-gke-gpu",
|
|
473
|
+
clusterRef: { name: "ray-gke" },
|
|
474
|
+
location: "us-central1",
|
|
475
|
+
});
|
|
476
|
+
expect(result.nodePool).toBeDefined();
|
|
477
|
+
});
|
|
478
|
+
|
|
479
|
+
test("scales to zero by default", () => {
|
|
480
|
+
const result = GpuNodePool({
|
|
481
|
+
name: "gpu-pool",
|
|
482
|
+
clusterRef: { name: "c" },
|
|
483
|
+
location: "us-central1",
|
|
484
|
+
});
|
|
485
|
+
expect(p(result.nodePool).initialNodeCount).toBe(0);
|
|
486
|
+
expect(p(result.nodePool).autoscaling.minNodeCount).toBe(0);
|
|
487
|
+
expect(p(result.nodePool).autoscaling.maxNodeCount).toBe(4);
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
test("defaults to a single nvidia-tesla-t4 accelerator", () => {
|
|
491
|
+
const result = GpuNodePool({
|
|
492
|
+
name: "gpu-pool",
|
|
493
|
+
clusterRef: { name: "c" },
|
|
494
|
+
location: "us-central1",
|
|
495
|
+
});
|
|
496
|
+
expect(p(result.nodePool).nodeConfig.guestAccelerator).toEqual([
|
|
497
|
+
{ count: 1, type: "nvidia-tesla-t4" },
|
|
498
|
+
]);
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
test("respects acceleratorType and acceleratorCount", () => {
|
|
502
|
+
const result = GpuNodePool({
|
|
503
|
+
name: "gpu-pool",
|
|
504
|
+
clusterRef: { name: "c" },
|
|
505
|
+
location: "us-central1",
|
|
506
|
+
acceleratorType: "nvidia-l4",
|
|
507
|
+
acceleratorCount: 2,
|
|
508
|
+
});
|
|
509
|
+
expect(p(result.nodePool).nodeConfig.guestAccelerator).toEqual([
|
|
510
|
+
{ count: 2, type: "nvidia-l4" },
|
|
511
|
+
]);
|
|
512
|
+
});
|
|
513
|
+
|
|
514
|
+
test("defaults to the nvidia.com/gpu NoSchedule taint", () => {
|
|
515
|
+
const result = GpuNodePool({
|
|
516
|
+
name: "gpu-pool",
|
|
517
|
+
clusterRef: { name: "c" },
|
|
518
|
+
location: "us-central1",
|
|
519
|
+
});
|
|
520
|
+
expect(p(result.nodePool).nodeConfig.taint).toEqual([
|
|
521
|
+
{ key: "nvidia.com/gpu", value: "present", effect: "NO_SCHEDULE" },
|
|
522
|
+
]);
|
|
523
|
+
});
|
|
524
|
+
|
|
525
|
+
test("omits taint when an empty array is passed", () => {
|
|
526
|
+
const result = GpuNodePool({
|
|
527
|
+
name: "gpu-pool",
|
|
528
|
+
clusterRef: { name: "c" },
|
|
529
|
+
location: "us-central1",
|
|
530
|
+
taint: [],
|
|
531
|
+
});
|
|
532
|
+
expect(p(result.nodePool).nodeConfig.taint).toBeUndefined();
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
test("does not emit a device-plugin manifest — GKE auto-installs it", () => {
|
|
536
|
+
const result = GpuNodePool({
|
|
537
|
+
name: "gpu-pool",
|
|
538
|
+
clusterRef: { name: "c" },
|
|
539
|
+
location: "us-central1",
|
|
540
|
+
});
|
|
541
|
+
expect(Object.keys(result)).toEqual(["nodePool"]);
|
|
542
|
+
});
|
|
543
|
+
|
|
544
|
+
test("enables GKE_METADATA workload identity mode by default", () => {
|
|
545
|
+
const result = GpuNodePool({
|
|
546
|
+
name: "gpu-pool",
|
|
547
|
+
clusterRef: { name: "c" },
|
|
548
|
+
location: "us-central1",
|
|
549
|
+
});
|
|
550
|
+
expect(p(result.nodePool).nodeConfig.workloadMetadataConfig).toEqual({ mode: "GKE_METADATA" });
|
|
551
|
+
});
|
|
552
|
+
|
|
553
|
+
test("supports GPU time-sharing config", () => {
|
|
554
|
+
const result = GpuNodePool({
|
|
555
|
+
name: "gpu-pool",
|
|
556
|
+
clusterRef: { name: "c" },
|
|
557
|
+
location: "us-central1",
|
|
558
|
+
gpuSharingConfig: { maxSharedClientsPerGpu: 2, gpuSharingStrategy: "TIME_SHARING" },
|
|
559
|
+
});
|
|
560
|
+
expect(p(result.nodePool).nodeConfig.guestAccelerator[0].gpuSharingConfig).toEqual({
|
|
561
|
+
maxSharedClientsPerGpu: 2,
|
|
562
|
+
gpuSharingStrategy: "TIME_SHARING",
|
|
563
|
+
});
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
test("supports MIG partition size", () => {
|
|
567
|
+
const result = GpuNodePool({
|
|
568
|
+
name: "gpu-pool",
|
|
569
|
+
clusterRef: { name: "c" },
|
|
570
|
+
location: "us-central1",
|
|
571
|
+
gpuPartitionSize: "1g.5gb",
|
|
572
|
+
});
|
|
573
|
+
expect(p(result.nodePool).nodeConfig.guestAccelerator[0].gpuPartitionSize).toBe("1g.5gb");
|
|
574
|
+
});
|
|
575
|
+
|
|
576
|
+
test("references the target cluster", () => {
|
|
577
|
+
const result = GpuNodePool({
|
|
578
|
+
name: "gpu-pool",
|
|
579
|
+
clusterRef: { name: "ray-gke" },
|
|
580
|
+
location: "us-central1",
|
|
581
|
+
});
|
|
582
|
+
expect(p(result.nodePool).clusterRef).toEqual({ name: "ray-gke" });
|
|
583
|
+
});
|
|
584
|
+
|
|
585
|
+
test("matches the hand-wired ray-kuberay-gke example config", () => {
|
|
586
|
+
const result = GpuNodePool({
|
|
587
|
+
name: "ray-gke-gpu",
|
|
588
|
+
clusterRef: { name: "ray-gke" },
|
|
589
|
+
location: "us-central1",
|
|
590
|
+
machineType: "n1-standard-8",
|
|
591
|
+
acceleratorType: "nvidia-tesla-t4",
|
|
592
|
+
acceleratorCount: 1,
|
|
593
|
+
minNodeCount: 0,
|
|
594
|
+
maxNodeCount: 4,
|
|
595
|
+
diskSizeGb: 200,
|
|
596
|
+
diskType: "pd-ssd",
|
|
597
|
+
});
|
|
598
|
+
const spec = p(result.nodePool);
|
|
599
|
+
expect(spec.initialNodeCount).toBe(0);
|
|
600
|
+
expect(spec.autoscaling).toEqual({ minNodeCount: 0, maxNodeCount: 4, locationPolicy: "ANY" });
|
|
601
|
+
expect(spec.nodeConfig).toEqual({
|
|
602
|
+
machineType: "n1-standard-8",
|
|
603
|
+
diskSizeGb: 200,
|
|
604
|
+
diskType: "pd-ssd",
|
|
605
|
+
guestAccelerator: [{ count: 1, type: "nvidia-tesla-t4" }],
|
|
606
|
+
taint: [{ key: "nvidia.com/gpu", value: "present", effect: "NO_SCHEDULE" }],
|
|
607
|
+
workloadMetadataConfig: { mode: "GKE_METADATA" },
|
|
608
|
+
oauthScopes: ["https://www.googleapis.com/auth/cloud-platform"],
|
|
609
|
+
});
|
|
610
|
+
expect(spec.management).toEqual({ autoRepair: true, autoUpgrade: true });
|
|
611
|
+
});
|
|
612
|
+
});
|
|
@@ -11,8 +11,8 @@ import { GKECluster, NodePool } from "../generated";
|
|
|
11
11
|
export interface GkeClusterProps {
|
|
12
12
|
/** Cluster name. */
|
|
13
13
|
name: string;
|
|
14
|
-
/** GCP project ID for workload identity pool.
|
|
15
|
-
projectId
|
|
14
|
+
/** GCP project ID for the workload identity pool. */
|
|
15
|
+
projectId: string;
|
|
16
16
|
/** GCP region for regional cluster (default: uses GCP.Region). */
|
|
17
17
|
location?: string;
|
|
18
18
|
/** Initial node count per zone (default: 1). */
|
|
@@ -75,6 +75,7 @@ export interface GkeClusterProps {
|
|
|
75
75
|
*
|
|
76
76
|
* const { cluster, nodePool } = GkeCluster({
|
|
77
77
|
* name: "my-cluster",
|
|
78
|
+
* projectId: "my-project",
|
|
78
79
|
* location: "us-central1",
|
|
79
80
|
* maxNodeCount: 10,
|
|
80
81
|
* });
|
|
@@ -83,7 +84,7 @@ export interface GkeClusterProps {
|
|
|
83
84
|
export const GkeCluster = Composite((props: GkeClusterProps) => {
|
|
84
85
|
const {
|
|
85
86
|
name,
|
|
86
|
-
projectId
|
|
87
|
+
projectId,
|
|
87
88
|
location,
|
|
88
89
|
initialNodeCount = 1,
|
|
89
90
|
machineType = "e2-medium",
|
|
@@ -103,8 +104,6 @@ export const GkeCluster = Composite((props: GkeClusterProps) => {
|
|
|
103
104
|
defaults: defs,
|
|
104
105
|
} = props;
|
|
105
106
|
|
|
106
|
-
const projectId = rawProjectId ?? process.env.GCP_PROJECT_ID ?? "PROJECT_ID";
|
|
107
|
-
|
|
108
107
|
const commonLabels: Record<string, string> = {
|
|
109
108
|
"app.kubernetes.io/name": name,
|
|
110
109
|
"app.kubernetes.io/managed-by": "chant",
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GpuNodePool composite — ContainerNodePool with GPU accelerators.
|
|
3
|
+
*
|
|
4
|
+
* Promoted from the hand-wired `gpuNodePool` in the ray-kuberay-gke example
|
|
5
|
+
* (examples/ray-kuberay-gke/src/infra/cluster.ts). Attaches to an existing
|
|
6
|
+
* GKE cluster (e.g. one created by `GkeCluster`) and adds a separate,
|
|
7
|
+
* scale-to-zero pool for GPU-tainted workloads.
|
|
8
|
+
*
|
|
9
|
+
* NOTE: GKE auto-installs the nvidia-device-plugin DaemonSet when a node
|
|
10
|
+
* pool has accelerators. Do NOT emit it as a K8s manifest — it will
|
|
11
|
+
* conflict with the GKE-managed version.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { Composite, mergeDefaults } from "@intentius/chant";
|
|
15
|
+
import { NodePool } from "../generated";
|
|
16
|
+
|
|
17
|
+
export interface GpuNodePoolTaint {
|
|
18
|
+
key: string;
|
|
19
|
+
value: string;
|
|
20
|
+
effect: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface GpuNodePoolProps {
|
|
24
|
+
/** Node pool name. */
|
|
25
|
+
name: string;
|
|
26
|
+
/** Reference to the GKE cluster this pool attaches to, e.g. `{ name: "my-cluster" }`. */
|
|
27
|
+
clusterRef: Record<string, unknown>;
|
|
28
|
+
/** GCP region or zone of the cluster. */
|
|
29
|
+
location: string;
|
|
30
|
+
/** Machine type for GPU nodes (default: "n1-standard-8"). */
|
|
31
|
+
machineType?: string;
|
|
32
|
+
/** Accelerator type, e.g. "nvidia-tesla-t4", "nvidia-l4", "nvidia-tesla-a100" (default: "nvidia-tesla-t4"). */
|
|
33
|
+
acceleratorType?: string;
|
|
34
|
+
/** Number of accelerators per node (default: 1). */
|
|
35
|
+
acceleratorCount?: number;
|
|
36
|
+
/** Minimum nodes for autoscaling — 0 enables scale-to-zero (default: 0). */
|
|
37
|
+
minNodeCount?: number;
|
|
38
|
+
/** Maximum nodes for autoscaling (default: 4). */
|
|
39
|
+
maxNodeCount?: number;
|
|
40
|
+
/** Boot disk size in GB (default: 200). */
|
|
41
|
+
diskSizeGb?: number;
|
|
42
|
+
/** Boot disk type (default: "pd-ssd"). */
|
|
43
|
+
diskType?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Node taints — only pods with a matching toleration are scheduled here.
|
|
46
|
+
* Default: `nvidia.com/gpu=present:NO_SCHEDULE`. Pass an empty array to omit tainting.
|
|
47
|
+
*/
|
|
48
|
+
taint?: GpuNodePoolTaint[];
|
|
49
|
+
/** Enable GKE metadata server workload identity mode on nodes (default: true). */
|
|
50
|
+
workloadMetadata?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* GPU time-sharing configuration, e.g.
|
|
53
|
+
* `{ maxSharedClientsPerGpu: 2, gpuSharingStrategy: "TIME_SHARING" }`.
|
|
54
|
+
*/
|
|
55
|
+
gpuSharingConfig?: Record<string, unknown>;
|
|
56
|
+
/** Multi-instance GPU (MIG) partition size, e.g. "1g.5gb". */
|
|
57
|
+
gpuPartitionSize?: string;
|
|
58
|
+
/** Additional labels. */
|
|
59
|
+
labels?: Record<string, string>;
|
|
60
|
+
/** Namespace for the node pool resource. */
|
|
61
|
+
namespace?: string;
|
|
62
|
+
/** Per-member defaults for customizing the underlying resource. */
|
|
63
|
+
defaults?: {
|
|
64
|
+
nodePool?: Partial<ConstructorParameters<typeof NodePool>[0]>;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const DEFAULT_TAINT: GpuNodePoolTaint[] = [
|
|
69
|
+
{ key: "nvidia.com/gpu", value: "present", effect: "NO_SCHEDULE" },
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Create a GpuNodePool composite — a scale-to-zero ContainerNodePool with
|
|
74
|
+
* GPU accelerators, tainted so only pods with a matching toleration land there.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* import { GpuNodePool } from "@intentius/chant-lexicon-gcp";
|
|
79
|
+
*
|
|
80
|
+
* const { nodePool } = GpuNodePool({
|
|
81
|
+
* name: "ray-gke-gpu",
|
|
82
|
+
* clusterRef: { name: "ray-gke" },
|
|
83
|
+
* location: "us-central1",
|
|
84
|
+
* acceleratorType: "nvidia-tesla-t4",
|
|
85
|
+
* maxNodeCount: 4,
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export const GpuNodePool = Composite((props: GpuNodePoolProps) => {
|
|
90
|
+
const {
|
|
91
|
+
name,
|
|
92
|
+
clusterRef,
|
|
93
|
+
location,
|
|
94
|
+
machineType = "n1-standard-8",
|
|
95
|
+
acceleratorType = "nvidia-tesla-t4",
|
|
96
|
+
acceleratorCount = 1,
|
|
97
|
+
minNodeCount = 0,
|
|
98
|
+
maxNodeCount = 4,
|
|
99
|
+
diskSizeGb = 200,
|
|
100
|
+
diskType = "pd-ssd",
|
|
101
|
+
taint = DEFAULT_TAINT,
|
|
102
|
+
workloadMetadata = true,
|
|
103
|
+
gpuSharingConfig,
|
|
104
|
+
gpuPartitionSize,
|
|
105
|
+
labels: extraLabels = {},
|
|
106
|
+
namespace,
|
|
107
|
+
defaults: defs,
|
|
108
|
+
} = props;
|
|
109
|
+
|
|
110
|
+
const commonLabels: Record<string, string> = {
|
|
111
|
+
"app.kubernetes.io/name": name,
|
|
112
|
+
"app.kubernetes.io/managed-by": "chant",
|
|
113
|
+
...extraLabels,
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const guestAccelerator: Record<string, unknown> = {
|
|
117
|
+
count: acceleratorCount,
|
|
118
|
+
type: acceleratorType,
|
|
119
|
+
...(gpuSharingConfig && { gpuSharingConfig }),
|
|
120
|
+
...(gpuPartitionSize && { gpuPartitionSize }),
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const nodePool = new NodePool(mergeDefaults({
|
|
124
|
+
metadata: {
|
|
125
|
+
name,
|
|
126
|
+
...(namespace && { namespace }),
|
|
127
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "gpu-node-pool" },
|
|
128
|
+
},
|
|
129
|
+
clusterRef,
|
|
130
|
+
location,
|
|
131
|
+
initialNodeCount: 0,
|
|
132
|
+
autoscaling: {
|
|
133
|
+
minNodeCount,
|
|
134
|
+
maxNodeCount,
|
|
135
|
+
locationPolicy: "ANY",
|
|
136
|
+
},
|
|
137
|
+
nodeConfig: {
|
|
138
|
+
machineType,
|
|
139
|
+
diskSizeGb,
|
|
140
|
+
diskType,
|
|
141
|
+
guestAccelerator: [guestAccelerator],
|
|
142
|
+
...(taint.length > 0 && { taint }),
|
|
143
|
+
...(workloadMetadata && { workloadMetadataConfig: { mode: "GKE_METADATA" } }),
|
|
144
|
+
oauthScopes: ["https://www.googleapis.com/auth/cloud-platform"],
|
|
145
|
+
},
|
|
146
|
+
management: { autoRepair: true, autoUpgrade: true },
|
|
147
|
+
} as Record<string, unknown>, defs?.nodePool));
|
|
148
|
+
|
|
149
|
+
return { nodePool };
|
|
150
|
+
}, "GpuNodePool");
|
package/src/composites/index.ts
CHANGED
|
@@ -30,3 +30,5 @@ export { MultiRegionVpc } from "./multi-region-vpc";
|
|
|
30
30
|
export type { MultiRegionVpcConfig, MultiRegionVpcRegion } from "./multi-region-vpc";
|
|
31
31
|
export { GkeCrdbRegion } from "./gke-crdb-region";
|
|
32
32
|
export type { GkeCrdbRegionConfig, GkeCrdbRegionNodeConfig } from "./gke-crdb-region";
|
|
33
|
+
export { GpuNodePool } from "./gpu-node-pool";
|
|
34
|
+
export type { GpuNodePoolProps, GpuNodePoolTaint } from "./gpu-node-pool";
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
import type { ObservationResult, ResourceMetadata, UnobservedEntity } from "@intentius/chant/lexicon";
|
|
40
40
|
import { observation } from "@intentius/chant/observation";
|
|
41
|
-
import { hasOwnershipMarker, classifyOwnership, type ChannelKeys } from "@intentius/chant/ownership";
|
|
41
|
+
import { hasOwnershipMarker, classifyOwnership, readOwnership, type ChannelKeys } from "@intentius/chant/ownership";
|
|
42
42
|
import { getResource, mapperForKind, GcpReadError, isNotFound, type GcpReadClientOptions } from "./api/read-client";
|
|
43
43
|
import { resolveGcpProject, parseManifest } from "./op/activities/gcp-apply";
|
|
44
44
|
import { resolveGVK } from "./serializer";
|
|
@@ -272,6 +272,9 @@ export async function describeResources(options: {
|
|
|
272
272
|
status: statusFromRest(obj),
|
|
273
273
|
lastUpdated: obj.updated ?? obj.timeCreated,
|
|
274
274
|
ownership: obj.labels == null ? "unknown" : classifyOwnership(obj.labels, GCP_OWNERSHIP_LABEL_KEYS),
|
|
275
|
+
// Marker identity (#1222): stack/env from the resource's own labels.
|
|
276
|
+
// Undefined when the payload carries no labels or no managed-by marker.
|
|
277
|
+
marker: readOwnership(obj.labels ?? undefined, GCP_OWNERSHIP_LABEL_KEYS),
|
|
275
278
|
attributes: pruneUndefined({
|
|
276
279
|
labels: obj.labels ?? undefined,
|
|
277
280
|
selfLink: obj.selfLink,
|
package/src/index.ts
CHANGED
|
@@ -22,7 +22,7 @@ export * from "./generated/index";
|
|
|
22
22
|
export {
|
|
23
23
|
GkeCluster, CloudRunServiceComposite, CloudSqlInstance, GcsBucket, VpcNetwork,
|
|
24
24
|
PubSubPipeline, CloudFunctionWithTrigger, PrivateService, ManagedCertificate, SecureProject,
|
|
25
|
-
MemorystoreRedis, MultiRegionVpc, GkeCrdbRegion,
|
|
25
|
+
MemorystoreRedis, MultiRegionVpc, GkeCrdbRegion, GpuNodePool,
|
|
26
26
|
GovernanceFoundation, LocationRestriction, OrganizationAuditConfig,
|
|
27
27
|
} from "./composites/index";
|
|
28
28
|
export type {
|
|
@@ -39,6 +39,7 @@ export type {
|
|
|
39
39
|
MemorystoreRedisProps,
|
|
40
40
|
MultiRegionVpcConfig, MultiRegionVpcRegion,
|
|
41
41
|
GkeCrdbRegionConfig, GkeCrdbRegionNodeConfig,
|
|
42
|
+
GpuNodePoolProps, GpuNodePoolTaint,
|
|
42
43
|
GovernanceFoundationProps, LocationRestrictionProps, OrganizationAuditConfigProps,
|
|
43
44
|
} from "./composites/index";
|
|
44
45
|
|
|
@@ -176,5 +176,33 @@ describeObservationConformance({
|
|
|
176
176
|
});
|
|
177
177
|
},
|
|
178
178
|
},
|
|
179
|
+
{
|
|
180
|
+
name: "a marker-stamped resource surfaces its stack/env identity; a foreign one surfaces none (#1222)",
|
|
181
|
+
declared: ["ownedBucket", "dataBucket"],
|
|
182
|
+
expectPresent: ["ownedBucket", "dataBucket"],
|
|
183
|
+
expectMarker: { ownedBucket: { stack: "shop", env: "prod" } },
|
|
184
|
+
expectNoMarker: ["dataBucket"],
|
|
185
|
+
run: () => {
|
|
186
|
+
fetchMock.mockImplementation((url: string) =>
|
|
187
|
+
Promise.resolve(
|
|
188
|
+
String(url).includes("owned-bucket")
|
|
189
|
+
? restReply(200, {
|
|
190
|
+
id: "b/owned-bucket",
|
|
191
|
+
labels: { "managed-by": "chant", "chant-stack": "shop", "chant-env": "prod" },
|
|
192
|
+
})
|
|
193
|
+
: restReply(200, { id: "b/data-bucket", labels: { team: "data" } }),
|
|
194
|
+
),
|
|
195
|
+
);
|
|
196
|
+
return gcpPlugin.describeResources!({
|
|
197
|
+
environment: "prod",
|
|
198
|
+
buildOutput: "",
|
|
199
|
+
entityNames: ["ownedBucket", "dataBucket"],
|
|
200
|
+
entities: new Map([
|
|
201
|
+
["ownedBucket", { entityType: "GCP::Storage::Bucket", props: { metadata: { name: "owned-bucket" } } }],
|
|
202
|
+
["dataBucket", { entityType: "GCP::Storage::Bucket", props: { metadata: { name: "data-bucket" } } }],
|
|
203
|
+
]),
|
|
204
|
+
});
|
|
205
|
+
},
|
|
206
|
+
},
|
|
179
207
|
],
|
|
180
208
|
});
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
pubSubTopicBody,
|
|
7
7
|
cloudRunServiceBody,
|
|
8
8
|
resolveGcpProject,
|
|
9
|
+
resolveGcpEndpoint,
|
|
9
10
|
applyResource,
|
|
10
11
|
deleteResource,
|
|
11
12
|
waitForOperation,
|
|
@@ -235,6 +236,44 @@ describe("resolveGcpProject (#711)", () => {
|
|
|
235
236
|
});
|
|
236
237
|
});
|
|
237
238
|
|
|
239
|
+
describe("resolveGcpEndpoint (#1449)", () => {
|
|
240
|
+
test("an explicit endpoint arg wins", () => {
|
|
241
|
+
expect(
|
|
242
|
+
resolveGcpEndpoint({ endpoint: "http://arg:1" }, { GCP_ENDPOINT_URL: "http://env:2" } as NodeJS.ProcessEnv),
|
|
243
|
+
).toBe("http://arg:1");
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
test("falls back to GCP_ENDPOINT_URL — the same variable the read path honours", () => {
|
|
247
|
+
expect(resolveGcpEndpoint({}, { GCP_ENDPOINT_URL: "http://localhost:4588" } as NodeJS.ProcessEnv))
|
|
248
|
+
.toBe("http://localhost:4588");
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
test("undefined when neither is set — each kind then uses its real-GCP host", () => {
|
|
252
|
+
expect(resolveGcpEndpoint({}, {} as NodeJS.ProcessEnv)).toBeUndefined();
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
test("gcpApply honours GCP_ENDPOINT_URL, so nativeApply({ target: 'gcp' }) reaches floci-gcp without passing an endpoint", async () => {
|
|
256
|
+
const path = "/tmp/chant-1449-endpoint-test.yaml";
|
|
257
|
+
writeFileSync(path, JSON.stringify(BUCKET));
|
|
258
|
+
const prev = process.env.GCP_ENDPOINT_URL;
|
|
259
|
+
process.env.GCP_ENDPOINT_URL = "http://localhost:4588";
|
|
260
|
+
try {
|
|
261
|
+
const urls: string[] = [];
|
|
262
|
+
const http: GcpHttp = async (_method, url) => {
|
|
263
|
+
urls.push(url);
|
|
264
|
+
return { status: 200, text: "{}" };
|
|
265
|
+
};
|
|
266
|
+
await gcpApply({ manifestPath: path, project: "p" }, undefined, http);
|
|
267
|
+
expect(urls.length).toBeGreaterThan(0);
|
|
268
|
+
for (const url of urls) expect(url.startsWith("http://localhost:4588/")).toBe(true);
|
|
269
|
+
} finally {
|
|
270
|
+
if (prev === undefined) delete process.env.GCP_ENDPOINT_URL;
|
|
271
|
+
else process.env.GCP_ENDPOINT_URL = prev;
|
|
272
|
+
unlinkSync(path);
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
|
|
238
277
|
describe("applyResource create/update (#706)", () => {
|
|
239
278
|
function recorder(getStatus: number): { http: GcpHttp; calls: Array<{ method: string; url: string }> } {
|
|
240
279
|
const calls: Array<{ method: string; url: string }> = [];
|
|
@@ -427,6 +427,21 @@ export function orderByReferences(resources: GcpResource[]): GcpResource[] {
|
|
|
427
427
|
|
|
428
428
|
// ── Resolution + HTTP ─────────────────────────────────────────────────────────
|
|
429
429
|
|
|
430
|
+
/**
|
|
431
|
+
* Resolve the endpoint override (#1449): an explicit `endpoint` arg wins, then
|
|
432
|
+
* the `GCP_ENDPOINT_URL` env — the same variable the read path honours
|
|
433
|
+
* (`describe-resources`, floci-gcp), so an apply lands wherever `--live` is
|
|
434
|
+
* already looking. `undefined` means no override: each kind falls back to its
|
|
435
|
+
* real-GCP host. The same rule the aws applier applies to `AWS_ENDPOINT_URL`
|
|
436
|
+
* (#1694) and the fly applier to `FLY_FLAPS_BASE_URL`. Pure.
|
|
437
|
+
*/
|
|
438
|
+
export function resolveGcpEndpoint(
|
|
439
|
+
args: { endpoint?: string } = {},
|
|
440
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
441
|
+
): string | undefined {
|
|
442
|
+
return args.endpoint || env.GCP_ENDPOINT_URL || undefined;
|
|
443
|
+
}
|
|
444
|
+
|
|
430
445
|
/** Resolve the project: `GOOGLE_CLOUD_PROJECT` env, else the CNRM project-id annotation. Pure. */
|
|
431
446
|
export function resolveGcpProject(resource: GcpResource, env: NodeJS.ProcessEnv = process.env): string {
|
|
432
447
|
const project = env.GOOGLE_CLOUD_PROJECT || resource.metadata?.annotations?.[PROJECT_ID_ANNOTATION];
|
|
@@ -585,7 +600,8 @@ export function parseManifest(content: string, path: string): GcpResource[] {
|
|
|
585
600
|
export interface GcpApplyArgs {
|
|
586
601
|
/** Path to a built CNRM manifest (YAML multi-doc or JSON). */
|
|
587
602
|
manifestPath: string;
|
|
588
|
-
/** GCS/GCP endpoint override for all kinds (e.g. floci-gcp `:4588`).
|
|
603
|
+
/** GCS/GCP endpoint override for all kinds (e.g. floci-gcp `:4588`).
|
|
604
|
+
* Default: `GCP_ENDPOINT_URL` env, else each kind's real-GCP host. */
|
|
589
605
|
endpoint?: string;
|
|
590
606
|
/** Project override. Default: `GOOGLE_CLOUD_PROJECT` env / CNRM annotation. */
|
|
591
607
|
project?: string;
|
|
@@ -742,8 +758,9 @@ export async function gcpApply(
|
|
|
742
758
|
notPrunable: GcpNotPrunable[];
|
|
743
759
|
}> {
|
|
744
760
|
const resources = orderByReferences(parseManifest(readFileSync(args.manifestPath, "utf8"), args.manifestPath));
|
|
761
|
+
const endpoint = resolveGcpEndpoint(args);
|
|
745
762
|
const resolve = (mapper: ResourceMapper, resource?: GcpResource) => ({
|
|
746
|
-
base: (
|
|
763
|
+
base: (endpoint ?? mapper.defaultHost).replace(/\/$/, ""),
|
|
747
764
|
project: args.project ?? (resource ? resolveGcpProject(resource) : ""),
|
|
748
765
|
});
|
|
749
766
|
|
|
@@ -831,7 +848,7 @@ export async function gcpDelete(
|
|
|
831
848
|
notAttempted.push({ kind, name: r.metadata?.name ?? "?", reason: "unsupported-kind" });
|
|
832
849
|
continue;
|
|
833
850
|
}
|
|
834
|
-
const base = (args
|
|
851
|
+
const base = (resolveGcpEndpoint(args) ?? mapper.defaultHost).replace(/\/$/, "");
|
|
835
852
|
const project = args.project ?? resolveGcpProject(r);
|
|
836
853
|
safeHeartbeat({ step: "gcpDelete", kind: mapper.kind, name: r.metadata?.name });
|
|
837
854
|
const result = await deleteResource(mapper, r, { base, project }, http, signal);
|
package/src/skills/chant-gcp.md
CHANGED
|
@@ -201,6 +201,7 @@ Composites group related Config Connector resources with secure defaults. Each r
|
|
|
201
201
|
| `PrivateService` | ComputeGlobalAddress + ServiceNetworkingConnection | RFC 1918 range, automatic peering |
|
|
202
202
|
| `ManagedCertificate` | ComputeManagedSslCertificate | Auto-renewal via Google-managed cert |
|
|
203
203
|
| `SecureProject` | Project + IAMAuditConfig + essential Service resources | Audit logging, required APIs enabled, org policy constraints |
|
|
204
|
+
| `GpuNodePool` | ContainerNodePool with GPU accelerators | Scale-to-zero, nvidia.com/gpu taint, GKE metadata workload identity |
|
|
204
205
|
|
|
205
206
|
### Example: GKE cluster with secure defaults
|
|
206
207
|
|
|
@@ -209,6 +210,7 @@ import { GkeCluster } from "@intentius/chant-lexicon-gcp";
|
|
|
209
210
|
|
|
210
211
|
const { cluster, nodePool } = GkeCluster({
|
|
211
212
|
name: "prod-cluster",
|
|
213
|
+
projectId: "my-project",
|
|
212
214
|
location: "us-central1",
|
|
213
215
|
initialNodeCount: 3,
|
|
214
216
|
minNodeCount: 1,
|