@microagi/alchemy-gcp 0.5.0 → 0.6.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.
Files changed (90) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/lib/ArtifactRegistry/Repository.d.ts +1 -1
  3. package/lib/ArtifactRegistry/Repository.d.ts.map +1 -1
  4. package/lib/ArtifactRegistry/Repository.js +8 -9
  5. package/lib/ArtifactRegistry/Repository.js.map +1 -1
  6. package/lib/Auth/Credentials.d.ts +10 -3
  7. package/lib/Auth/Credentials.d.ts.map +1 -1
  8. package/lib/Auth/Credentials.js +13 -3
  9. package/lib/Auth/Credentials.js.map +1 -1
  10. package/lib/CloudResourceManager/Project.d.ts +1 -1
  11. package/lib/Compute/Address.d.ts +97 -0
  12. package/lib/Compute/Address.d.ts.map +1 -0
  13. package/lib/Compute/Address.js +143 -0
  14. package/lib/Compute/Address.js.map +1 -0
  15. package/lib/Compute/Firewall.d.ts +108 -0
  16. package/lib/Compute/Firewall.d.ts.map +1 -0
  17. package/lib/Compute/Firewall.js +163 -0
  18. package/lib/Compute/Firewall.js.map +1 -0
  19. package/lib/Compute/ForwardingRule.d.ts +106 -0
  20. package/lib/Compute/ForwardingRule.d.ts.map +1 -0
  21. package/lib/Compute/ForwardingRule.js +152 -0
  22. package/lib/Compute/ForwardingRule.js.map +1 -0
  23. package/lib/Compute/GlobalAddress.d.ts +1 -1
  24. package/lib/Compute/Network.d.ts +1 -1
  25. package/lib/Compute/SharedVpcHost.d.ts +1 -1
  26. package/lib/Compute/SharedVpcServiceProject.d.ts +1 -1
  27. package/lib/Compute/Subnetwork.d.ts +1 -1
  28. package/lib/Compute/index.d.ts +3 -0
  29. package/lib/Compute/index.d.ts.map +1 -1
  30. package/lib/Compute/index.js +3 -0
  31. package/lib/Compute/index.js.map +1 -1
  32. package/lib/Container/Cluster.d.ts +21 -1
  33. package/lib/Container/Cluster.d.ts.map +1 -1
  34. package/lib/Container/Cluster.js +5 -2
  35. package/lib/Container/Cluster.js.map +1 -1
  36. package/lib/Container/NodePool.d.ts +27 -2
  37. package/lib/Container/NodePool.d.ts.map +1 -1
  38. package/lib/Container/NodePool.js +45 -8
  39. package/lib/Container/NodePool.js.map +1 -1
  40. package/lib/Kubernetes/Secret.d.ts +89 -0
  41. package/lib/Kubernetes/Secret.d.ts.map +1 -0
  42. package/lib/Kubernetes/Secret.js +139 -0
  43. package/lib/Kubernetes/Secret.js.map +1 -0
  44. package/lib/Kubernetes/client.d.ts +58 -0
  45. package/lib/Kubernetes/client.d.ts.map +1 -0
  46. package/lib/Kubernetes/client.js +131 -0
  47. package/lib/Kubernetes/client.js.map +1 -0
  48. package/lib/Kubernetes/index.d.ts +2 -0
  49. package/lib/Kubernetes/index.d.ts.map +1 -0
  50. package/lib/Kubernetes/index.js +2 -0
  51. package/lib/Kubernetes/index.js.map +1 -0
  52. package/lib/ManagedLustre/Instance.d.ts +1 -1
  53. package/lib/ManagedLustre/Instance.d.ts.map +1 -1
  54. package/lib/ManagedLustre/Instance.js +25 -5
  55. package/lib/ManagedLustre/Instance.js.map +1 -1
  56. package/lib/Providers.d.ts +1 -1
  57. package/lib/Providers.d.ts.map +1 -1
  58. package/lib/Providers.js +9 -1
  59. package/lib/Providers.js.map +1 -1
  60. package/lib/Run/Job.d.ts +1 -1
  61. package/lib/Run/Service.d.ts +1 -1
  62. package/lib/ServiceNetworking/PsaConnection.d.ts +1 -1
  63. package/lib/ServiceUsage/ApiEnable.d.ts +1 -1
  64. package/lib/Sqladmin/Database.d.ts +1 -1
  65. package/lib/Sqladmin/Instance.d.ts +1 -1
  66. package/lib/Sqladmin/Instance.d.ts.map +1 -1
  67. package/lib/Sqladmin/Instance.js +28 -6
  68. package/lib/Sqladmin/Instance.js.map +1 -1
  69. package/lib/Sqladmin/User.d.ts +1 -1
  70. package/lib/Tags.d.ts +4 -4
  71. package/lib/index.d.ts +1 -0
  72. package/lib/index.d.ts.map +1 -1
  73. package/lib/index.js +1 -0
  74. package/lib/index.js.map +1 -1
  75. package/package.json +1 -1
  76. package/src/ArtifactRegistry/Repository.ts +13 -9
  77. package/src/Auth/Credentials.ts +15 -4
  78. package/src/Compute/Address.ts +288 -0
  79. package/src/Compute/Firewall.ts +330 -0
  80. package/src/Compute/ForwardingRule.ts +301 -0
  81. package/src/Compute/index.ts +3 -0
  82. package/src/Container/Cluster.ts +25 -2
  83. package/src/Container/NodePool.ts +87 -13
  84. package/src/Kubernetes/Secret.ts +274 -0
  85. package/src/Kubernetes/client.ts +219 -0
  86. package/src/Kubernetes/index.ts +1 -0
  87. package/src/ManagedLustre/Instance.ts +35 -6
  88. package/src/Providers.ts +18 -0
  89. package/src/Sqladmin/Instance.ts +36 -7
  90. package/src/index.ts +1 -0
@@ -0,0 +1,163 @@
1
+ import * as compute from "@distilled.cloud/gcp/compute-v1";
2
+ import { Resource } from "alchemy";
3
+ import { Unowned } from "alchemy/AdoptPolicy";
4
+ import { deepEqual, isResolved, somePropsAreDifferent } from "alchemy/Diff";
5
+ import { createPhysicalName } from "alchemy/PhysicalName";
6
+ import * as Provider from "alchemy/Provider";
7
+ import * as Effect from "effect/Effect";
8
+ import { descriptionHasAlchemyMarker, gcpAlchemyDescription, stripAlchemyMarker, } from "../Tags.js";
9
+ import { makeAwaitGlobalOperation } from "./Operations.js";
10
+ export const Firewall = Resource("GCP.Firewall");
11
+ const toFirewallAttributes = (f, parent) => ({
12
+ name: f.name ?? "",
13
+ project: parent.project,
14
+ selfLink: f.selfLink ?? "",
15
+ id: f.id ?? "",
16
+ network: f.network ?? "",
17
+ direction: f.direction,
18
+ priority: f.priority,
19
+ sourceRanges: f.sourceRanges,
20
+ allowed: f.allowed,
21
+ targetTags: f.targetTags,
22
+ targetServiceAccounts: f.targetServiceAccounts,
23
+ description: stripAlchemyMarker(f.description),
24
+ disabled: f.disabled,
25
+ });
26
+ /**
27
+ * Normalize for drift comparison: GCP reorders list fields and the
28
+ * `allowed` entries' ports — compare order-insensitively so a
29
+ * cosmetic reordering doesn't trigger a PATCH every reconcile.
30
+ */
31
+ const normalized = (f) => ({
32
+ priority: f.priority ?? 1000,
33
+ sourceRanges: [...(f.sourceRanges ?? [])].sort(),
34
+ destinationRanges: [...(f.destinationRanges ?? [])].sort(),
35
+ allowed: [...(f.allowed ?? [])]
36
+ .map((a) => ({
37
+ IPProtocol: (a.IPProtocol ?? "").toLowerCase(),
38
+ ports: [...(a.ports ?? [])].sort(),
39
+ }))
40
+ .sort((x, y) => x.IPProtocol.localeCompare(y.IPProtocol)),
41
+ targetTags: [...(f.targetTags ?? [])].sort(),
42
+ targetServiceAccounts: [...(f.targetServiceAccounts ?? [])].sort(),
43
+ disabled: f.disabled ?? false,
44
+ description: f.description,
45
+ });
46
+ export const FirewallProvider = () => Provider.effect(Firewall, Effect.gen(function* () {
47
+ const getFirewalls = yield* compute.getFirewalls;
48
+ const insertFirewalls = yield* compute.insertFirewalls;
49
+ const patchFirewalls = yield* compute.patchFirewalls;
50
+ const deleteFirewalls = yield* compute.deleteFirewalls;
51
+ const getGlobalOperations = yield* compute.getGlobalOperations;
52
+ const awaitOp = makeAwaitGlobalOperation(getGlobalOperations);
53
+ const observe = (project, name) => getFirewalls({ project, firewall: name }).pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)), Effect.catchTag("Forbidden", () => Effect.succeed(undefined)));
54
+ return {
55
+ stables: ["name", "project", "selfLink", "id", "network"],
56
+ diff: Effect.fn(function* ({ news, olds = {} }) {
57
+ if (!isResolved(news))
58
+ return undefined;
59
+ if (somePropsAreDifferent(olds, news, [
60
+ "project",
61
+ "name",
62
+ "network",
63
+ "direction",
64
+ ])) {
65
+ return { action: "replace" };
66
+ }
67
+ return undefined;
68
+ }),
69
+ reconcile: Effect.fn(function* ({ id, news, session }) {
70
+ if (news.targetTags?.length && news.targetServiceAccounts?.length) {
71
+ return yield* Effect.fail(new Error("Firewall: targetTags and targetServiceAccounts are mutually exclusive (GCP rejects rules with both)"));
72
+ }
73
+ const desiredName = news.name ??
74
+ (yield* createPhysicalName({ id, maxLength: 63 })).toLowerCase();
75
+ const desiredDescription = yield* gcpAlchemyDescription(id, news.description);
76
+ const mutableBody = () => ({
77
+ description: desiredDescription,
78
+ ...(news.priority !== undefined ? { priority: news.priority } : {}),
79
+ ...(news.sourceRanges
80
+ ? { sourceRanges: [...news.sourceRanges] }
81
+ : {}),
82
+ ...(news.destinationRanges
83
+ ? { destinationRanges: [...news.destinationRanges] }
84
+ : {}),
85
+ allowed: news.allowed.map((a) => ({
86
+ IPProtocol: a.IPProtocol,
87
+ ...(a.ports ? { ports: [...a.ports] } : {}),
88
+ })),
89
+ // Always send both target fields: switching tags → service
90
+ // accounts must CLEAR the other side, and PATCH leaves
91
+ // omitted fields untouched.
92
+ targetTags: [...(news.targetTags ?? [])],
93
+ targetServiceAccounts: [...(news.targetServiceAccounts ?? [])],
94
+ disabled: news.disabled ?? false,
95
+ });
96
+ // 1. Observe — collapse 403 to "missing" alongside 404.
97
+ let observed = yield* observe(news.project, desiredName);
98
+ // 2. Ensure — create if missing. `Conflict` covers concurrent
99
+ // creates and state-persistence races.
100
+ if (!observed) {
101
+ const op = yield* insertFirewalls({
102
+ project: news.project,
103
+ body: {
104
+ name: desiredName,
105
+ network: news.network,
106
+ ...(news.direction ? { direction: news.direction } : {}),
107
+ ...mutableBody(),
108
+ },
109
+ }).pipe(Effect.catchTag("Conflict", () => Effect.succeed(undefined)));
110
+ if (op?.name)
111
+ yield* awaitOp(news.project, op.name, session);
112
+ observed = yield* getFirewalls({
113
+ project: news.project,
114
+ firewall: desiredName,
115
+ });
116
+ }
117
+ // 3. Sync — everything except name/network/direction is
118
+ // PATCHable. Diff against OBSERVED state (cloud is
119
+ // authoritative), order-insensitively.
120
+ const desired = mutableBody();
121
+ if (!deepEqual(normalized(observed), normalized(desired))) {
122
+ const op = yield* patchFirewalls({
123
+ project: news.project,
124
+ firewall: desiredName,
125
+ body: desired,
126
+ });
127
+ if (op.name)
128
+ yield* awaitOp(news.project, op.name, session);
129
+ }
130
+ const final = yield* getFirewalls({
131
+ project: news.project,
132
+ firewall: desiredName,
133
+ });
134
+ return toFirewallAttributes(final, { project: news.project });
135
+ }),
136
+ delete: Effect.fn(function* ({ output, session }) {
137
+ yield* deleteFirewalls({
138
+ project: output.project,
139
+ firewall: output.name,
140
+ }).pipe(Effect.flatMap((op) => op.name
141
+ ? awaitOp(output.project, op.name, session)
142
+ : Effect.succeed(op)), Effect.catchTag("NotFound", () => Effect.void));
143
+ }),
144
+ read: Effect.fn(function* ({ id, output, olds }) {
145
+ const project = output?.project ?? olds?.project;
146
+ if (!project)
147
+ return undefined;
148
+ const name = output?.name ??
149
+ olds?.name ??
150
+ (yield* createPhysicalName({ id, maxLength: 63 })).toLowerCase();
151
+ const observed = yield* observe(project, name);
152
+ if (!observed)
153
+ return undefined;
154
+ const attrs = toFirewallAttributes(observed, { project });
155
+ // Adoption gate via the description marker — firewalls have
156
+ // no labels field (same situation as GCP.Network).
157
+ return (yield* descriptionHasAlchemyMarker(id, observed.description))
158
+ ? attrs
159
+ : Unowned(attrs);
160
+ }),
161
+ };
162
+ }));
163
+ //# sourceMappingURL=Firewall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Firewall.js","sourceRoot":"","sources":["../../src/Compute/Firewall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { Resource } from "alchemy";
2
+ import * as Provider from "alchemy/Provider";
3
+ import type * as GCP from "../Providers.ts";
4
+ /**
5
+ * A regional forwarding rule. The intended use here is a **Private
6
+ * Service Connect consumer endpoint** — binding a reserved internal
7
+ * {@link Address} to a producer *service attachment* (e.g. the one
8
+ * Cloud SQL publishes per PSC-enabled instance), so clients in this
9
+ * VPC reach the producer service at that IP.
10
+ *
11
+ * PSC endpoint rules carry no ports / load-balancing scheme — the API
12
+ * requires `loadBalancingScheme: ""` for them, which is what this
13
+ * resource sends. The endpoint must be created in the **same region as
14
+ * the service attachment**; set `allowPscGlobalAccess` so clients in
15
+ * other regions of the VPC can still use it.
16
+ *
17
+ * Other forwarding-rule shapes (L4 ILB, NetLB, proxy LBs) are not
18
+ * modelled — add props if/when needed.
19
+ *
20
+ * All connection-defining props are immutable here and trigger replace;
21
+ * a PSC endpoint is cheap to recreate. Labels are mutable.
22
+ *
23
+ * @section Creating a PSC endpoint
24
+ * @example Cloud SQL PSC endpoint with global access
25
+ * ```typescript
26
+ * const endpoint = yield* GCP.ForwardingRule("DbPscEndpoint", {
27
+ * project: hostProject.projectId,
28
+ * region: "europe-west1",
29
+ * network: vpc.selfLink,
30
+ * ipAddress: endpointIp.selfLink,
31
+ * target: "projects/<producer>/regions/europe-west1/serviceAttachments/<sa>",
32
+ * allowPscGlobalAccess: true,
33
+ * });
34
+ * ```
35
+ */
36
+ export type ForwardingRuleProps = {
37
+ /** GCP project ID hosting the rule. Immutable — replace if changed. */
38
+ project: string;
39
+ /** GCP region. Must match the target service attachment's region. Immutable — replace. */
40
+ region: string;
41
+ /**
42
+ * Rule name. Defaults to `createPhysicalName({ id, lowercase: true,
43
+ * maxLength: 63 })`. Immutable — replace if changed.
44
+ */
45
+ name?: string;
46
+ /** Description (free-form). Set on create; immutable. */
47
+ description?: string;
48
+ /**
49
+ * URL of the consumer VPC. Pass `vpc.selfLink` from a `GCP.Network`
50
+ * to make alchemy sequence the rule after the VPC. Immutable — replace.
51
+ */
52
+ network: string;
53
+ /**
54
+ * The endpoint IP — a URL of a reserved `GCP.Address` (pass
55
+ * `address.selfLink` for the dep edge) or a literal IP. Immutable —
56
+ * replace.
57
+ */
58
+ ipAddress: string;
59
+ /**
60
+ * URI of the producer service attachment to connect to
61
+ * (`projects/{p}/regions/{r}/serviceAttachments/{name}`). Immutable —
62
+ * replace.
63
+ */
64
+ target: string;
65
+ /**
66
+ * Let clients in any region of the VPC use this endpoint (PSC global
67
+ * access). Defaults to `false`. Immutable — replace.
68
+ */
69
+ allowPscGlobalAccess?: boolean;
70
+ /**
71
+ * Resource labels. Alchemy internal labels (`alchemy_app`,
72
+ * `alchemy_stage`, `alchemy_id`) are merged on top automatically and
73
+ * are reserved. Mutable via `setLabels`.
74
+ */
75
+ labels?: Record<string, string>;
76
+ };
77
+ export type ForwardingRuleAttributes = {
78
+ /** Rule name. */
79
+ name: string;
80
+ /** GCP project ID, threaded through from props for delete/read. */
81
+ project: string;
82
+ /** GCP region, threaded through from props for delete/read. */
83
+ region: string;
84
+ /** Server-defined URL. */
85
+ selfLink: string;
86
+ /** Server-assigned numeric id. */
87
+ id: string;
88
+ /** The endpoint IP (the API always returns the literal IP). */
89
+ ipAddress: string;
90
+ /** Producer service attachment URI. */
91
+ target: string | undefined;
92
+ /** Consumer VPC URL. */
93
+ network: string | undefined;
94
+ /** PSC global access flag. */
95
+ allowPscGlobalAccess: boolean;
96
+ /** Server-assigned PSC connection id. */
97
+ pscConnectionId: string | undefined;
98
+ /** PSC connection status: `ACCEPTED`, `PENDING`, `REJECTED`, `CLOSED`, … */
99
+ pscConnectionStatus: string | undefined;
100
+ /** Labels currently set, including the alchemy internals. */
101
+ labels: Record<string, string>;
102
+ };
103
+ export type ForwardingRule = Resource<"GCP.ForwardingRule", ForwardingRuleProps, ForwardingRuleAttributes, never, GCP.Providers>;
104
+ export declare const ForwardingRule: import("alchemy").ResourceClass<ForwardingRule>;
105
+ export declare const ForwardingRuleProvider: () => import("effect/Layer").Layer<Provider.Provider<ForwardingRule>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
106
+ //# sourceMappingURL=ForwardingRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForwardingRule.d.ts","sourceRoot":"","sources":["../../src/Compute/ForwardingRule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAG5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,wBAAwB;IACxB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,8BAA8B;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,yCAAyC;IACzC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,4EAA4E;IAC5E,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,CACnC,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,EACL,GAAG,CAAC,SAAS,CACd,CAAC;AACF,eAAO,MAAM,cAAc,iDAAiD,CAAC;AAoB7E,eAAO,MAAM,sBAAsB,qOAgKhC,CAAC"}
@@ -0,0 +1,152 @@
1
+ import * as compute from "@distilled.cloud/gcp/compute-v1";
2
+ import { Resource } from "alchemy";
3
+ import { Unowned } from "alchemy/AdoptPolicy";
4
+ import { deepEqual, isResolved, somePropsAreDifferent } from "alchemy/Diff";
5
+ import { createPhysicalName } from "alchemy/PhysicalName";
6
+ import * as Provider from "alchemy/Provider";
7
+ import * as Effect from "effect/Effect";
8
+ import { gcpInternalLabels, hasAlchemyLabels } from "../Tags.js";
9
+ import { makeAwaitRegionOperation } from "./Operations.js";
10
+ export const ForwardingRule = Resource("GCP.ForwardingRule");
11
+ const toForwardingRuleAttributes = (f, parent) => ({
12
+ name: f.name ?? "",
13
+ project: parent.project,
14
+ region: parent.region,
15
+ selfLink: f.selfLink ?? "",
16
+ id: f.id ?? "",
17
+ ipAddress: f.IPAddress ?? "",
18
+ target: f.target,
19
+ network: f.network,
20
+ allowPscGlobalAccess: f.allowPscGlobalAccess ?? false,
21
+ pscConnectionId: f.pscConnectionId,
22
+ pscConnectionStatus: f.pscConnectionStatus,
23
+ labels: { ...(f.labels ?? {}) },
24
+ });
25
+ export const ForwardingRuleProvider = () => Provider.effect(ForwardingRule, Effect.gen(function* () {
26
+ const getForwardingRules = yield* compute.getForwardingRules;
27
+ const insertForwardingRules = yield* compute.insertForwardingRules;
28
+ const deleteForwardingRules = yield* compute.deleteForwardingRules;
29
+ const setLabelsForwardingRules = yield* compute.setLabelsForwardingRules;
30
+ const getRegionOperations = yield* compute.getRegionOperations;
31
+ const awaitOp = makeAwaitRegionOperation(getRegionOperations);
32
+ const observe = (project, region, name) => getForwardingRules({ project, region, forwardingRule: name }).pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)), Effect.catchTag("Forbidden", () => Effect.succeed(undefined)));
33
+ const syncLabels = Effect.fn(function* (args) {
34
+ if (deepEqual(args.observed.labels ?? {}, args.desired))
35
+ return;
36
+ const op = yield* setLabelsForwardingRules({
37
+ project: args.project,
38
+ region: args.region,
39
+ resource: args.observed.name ?? "",
40
+ body: {
41
+ labels: args.desired,
42
+ labelFingerprint: args.observed.labelFingerprint,
43
+ },
44
+ });
45
+ if (op.name) {
46
+ yield* awaitOp(args.project, args.region, op.name, args.session);
47
+ }
48
+ });
49
+ return {
50
+ stables: ["name", "project", "region", "selfLink", "id"],
51
+ diff: Effect.fn(function* ({ news, olds = {} }) {
52
+ if (!isResolved(news))
53
+ return undefined;
54
+ if (somePropsAreDifferent(olds, news, [
55
+ "project",
56
+ "region",
57
+ "name",
58
+ "network",
59
+ "ipAddress",
60
+ "target",
61
+ "allowPscGlobalAccess",
62
+ ])) {
63
+ return { action: "replace" };
64
+ }
65
+ return undefined;
66
+ }),
67
+ reconcile: Effect.fn(function* ({ id, news, session }) {
68
+ const internalLabels = yield* gcpInternalLabels(id);
69
+ const desiredName = news.name ??
70
+ (yield* createPhysicalName({ id, maxLength: 63 })).toLowerCase();
71
+ const desiredLabels = {
72
+ ...(news.labels ?? {}),
73
+ ...internalLabels,
74
+ };
75
+ let observed = yield* observe(news.project, news.region, desiredName);
76
+ if (!observed) {
77
+ const body = {
78
+ name: desiredName,
79
+ ...(news.description ? { description: news.description } : {}),
80
+ network: news.network,
81
+ IPAddress: news.ipAddress,
82
+ target: news.target,
83
+ // PSC consumer endpoints take no scheme — the API rejects
84
+ // anything other than the empty string for them.
85
+ loadBalancingScheme: "",
86
+ ...(news.allowPscGlobalAccess !== undefined
87
+ ? { allowPscGlobalAccess: news.allowPscGlobalAccess }
88
+ : {}),
89
+ labels: desiredLabels,
90
+ };
91
+ const op = yield* insertForwardingRules({
92
+ project: news.project,
93
+ region: news.region,
94
+ body,
95
+ }).pipe(Effect.catchTag("Conflict", () => Effect.succeed(undefined)));
96
+ if (op?.name) {
97
+ yield* awaitOp(news.project, news.region, op.name, session);
98
+ }
99
+ observed = yield* getForwardingRules({
100
+ project: news.project,
101
+ region: news.region,
102
+ forwardingRule: desiredName,
103
+ });
104
+ }
105
+ yield* syncLabels({
106
+ project: news.project,
107
+ region: news.region,
108
+ observed,
109
+ desired: desiredLabels,
110
+ session,
111
+ });
112
+ const final = yield* getForwardingRules({
113
+ project: news.project,
114
+ region: news.region,
115
+ forwardingRule: desiredName,
116
+ });
117
+ return toForwardingRuleAttributes(final, {
118
+ project: news.project,
119
+ region: news.region,
120
+ });
121
+ }),
122
+ delete: Effect.fn(function* ({ output, session }) {
123
+ yield* deleteForwardingRules({
124
+ project: output.project,
125
+ region: output.region,
126
+ forwardingRule: output.name,
127
+ }).pipe(Effect.flatMap((op) => op.name
128
+ ? awaitOp(output.project, output.region, op.name, session)
129
+ : Effect.succeed(op)), Effect.catchTag("NotFound", () => Effect.void));
130
+ }),
131
+ read: Effect.fn(function* ({ id, output, olds }) {
132
+ const project = output?.project ?? olds?.project;
133
+ const region = output?.region ?? olds?.region;
134
+ if (!project || !region)
135
+ return undefined;
136
+ const name = output?.name ??
137
+ olds?.name ??
138
+ (yield* createPhysicalName({ id, maxLength: 63 })).toLowerCase();
139
+ const observed = yield* observe(project, region, name);
140
+ if (!observed)
141
+ return undefined;
142
+ const attrs = toForwardingRuleAttributes(observed, {
143
+ project,
144
+ region,
145
+ });
146
+ return (yield* hasAlchemyLabels(id, observed.labels))
147
+ ? attrs
148
+ : Unowned(attrs);
149
+ }),
150
+ };
151
+ }));
152
+ //# sourceMappingURL=ForwardingRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForwardingRule.js","sourceRoot":"","sources":["../../src/Compute/ForwardingRule.ts"],"names":[],"mappings":"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"}
@@ -97,5 +97,5 @@ export type GlobalAddressAttributes = {
97
97
  };
98
98
  export type GlobalAddress = Resource<"GCP.GlobalAddress", GlobalAddressProps, GlobalAddressAttributes, never, GCP.Providers>;
99
99
  export declare const GlobalAddress: import("alchemy").ResourceClass<GlobalAddress>;
100
- export declare const GlobalAddressProvider: () => import("effect/Layer").Layer<Provider.Provider<GlobalAddress>, never, import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").Stage | import("alchemy").Stack | import("@distilled.cloud/gcp").Credentials>;
100
+ export declare const GlobalAddressProvider: () => import("effect/Layer").Layer<Provider.Provider<GlobalAddress>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
101
101
  //# sourceMappingURL=GlobalAddress.d.ts.map
@@ -146,6 +146,6 @@ export type NetworkAttributes = {
146
146
  };
147
147
  export type Network = Resource<"GCP.Network", NetworkProps, NetworkAttributes, never, GCP.Providers>;
148
148
  export declare const Network: import("alchemy").ResourceClass<Network>;
149
- export declare const NetworkProvider: () => import("effect/Layer").Layer<Provider.Provider<Network>, never, import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").Stage | import("alchemy").Stack | import("@distilled.cloud/gcp").Credentials>;
149
+ export declare const NetworkProvider: () => import("effect/Layer").Layer<Provider.Provider<Network>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
150
150
  export {};
151
151
  //# sourceMappingURL=Network.d.ts.map
@@ -40,5 +40,5 @@ export type SharedVpcHostAttributes = {
40
40
  };
41
41
  export type SharedVpcHost = Resource<"GCP.SharedVpcHost", SharedVpcHostProps, SharedVpcHostAttributes, never, GCP.Providers>;
42
42
  export declare const SharedVpcHost: import("alchemy").ResourceClass<SharedVpcHost>;
43
- export declare const SharedVpcHostProvider: () => import("effect/Layer").Layer<Provider.Provider<SharedVpcHost>, never, import("effect/unstable/http/HttpClient").HttpClient | import("@distilled.cloud/gcp").Credentials>;
43
+ export declare const SharedVpcHostProvider: () => import("effect/Layer").Layer<Provider.Provider<SharedVpcHost>, never, import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
44
44
  //# sourceMappingURL=SharedVpcHost.d.ts.map
@@ -42,5 +42,5 @@ export type SharedVpcServiceProjectAttributes = {
42
42
  };
43
43
  export type SharedVpcServiceProject = Resource<"GCP.SharedVpcServiceProject", SharedVpcServiceProjectProps, SharedVpcServiceProjectAttributes, never, GCP.Providers>;
44
44
  export declare const SharedVpcServiceProject: import("alchemy").ResourceClass<SharedVpcServiceProject>;
45
- export declare const SharedVpcServiceProjectProvider: () => import("effect/Layer").Layer<Provider.Provider<SharedVpcServiceProject>, never, import("effect/unstable/http/HttpClient").HttpClient | import("@distilled.cloud/gcp").Credentials>;
45
+ export declare const SharedVpcServiceProjectProvider: () => import("effect/Layer").Layer<Provider.Provider<SharedVpcServiceProject>, never, import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
46
46
  //# sourceMappingURL=SharedVpcServiceProject.d.ts.map
@@ -119,5 +119,5 @@ export type SubnetworkBindingContract = {
119
119
  };
120
120
  export type Subnetwork = Resource<"GCP.Subnetwork", SubnetworkProps, SubnetworkAttributes, SubnetworkBindingContract, GCP.Providers>;
121
121
  export declare const Subnetwork: import("alchemy").ResourceClass<Subnetwork>;
122
- export declare const SubnetworkProvider: () => import("effect/Layer").Layer<Provider.Provider<Subnetwork>, never, import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").Stage | import("alchemy").Stack | import("@distilled.cloud/gcp").Credentials>;
122
+ export declare const SubnetworkProvider: () => import("effect/Layer").Layer<Provider.Provider<Subnetwork>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
123
123
  //# sourceMappingURL=Subnetwork.d.ts.map
@@ -1,3 +1,6 @@
1
+ export * from "./Address.ts";
2
+ export * from "./Firewall.ts";
3
+ export * from "./ForwardingRule.ts";
1
4
  export * from "./GlobalAddress.ts";
2
5
  export * from "./Network.ts";
3
6
  export * from "./SharedVpcHost.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Compute/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Compute/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC"}
@@ -1,3 +1,6 @@
1
+ export * from "./Address.js";
2
+ export * from "./Firewall.js";
3
+ export * from "./ForwardingRule.js";
1
4
  export * from "./GlobalAddress.js";
2
5
  export * from "./Network.js";
3
6
  export * from "./SharedVpcHost.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Compute/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Compute/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC"}
@@ -62,6 +62,26 @@ export type ClusterProps = {
62
62
  clusterSecondaryRangeName?: string;
63
63
  servicesSecondaryRangeName?: string;
64
64
  };
65
+ /**
66
+ * Cluster-level network settings. `datapathProvider:
67
+ * "ADVANCED_DATAPATH"` enables GKE Dataplane V2 (eBPF/Cilium
68
+ * dataplane with built-in NetworkPolicy enforcement). GKE only
69
+ * honors this at cluster creation — existing clusters cannot be
70
+ * migrated in place.
71
+ *
72
+ * **Consumed only on the create path** (like `initialNodePool`):
73
+ * changing it on an existing cluster is a silent no-op, NOT a
74
+ * replace trigger. A diff-driven same-name replace would be
75
+ * destructive here — the engine creates the new generation first,
76
+ * which observe-adopts the still-existing same-name cluster, and
77
+ * end-of-deploy GC would then delete that physical cluster out from
78
+ * under the "new" generation. To rebuild with a different datapath,
79
+ * delete the cluster out-of-band and redeploy; reconcile observes
80
+ * it missing and creates with the new setting.
81
+ */
82
+ networkConfig?: {
83
+ datapathProvider?: "LEGACY_DATAPATH" | "ADVANCED_DATAPATH";
84
+ };
65
85
  /** GKE release channel. Mutable via `update` (`desiredReleaseChannel`). */
66
86
  releaseChannel?: {
67
87
  channel: "RAPID" | "REGULAR" | "STABLE" | "UNSPECIFIED";
@@ -237,5 +257,5 @@ export type ClusterAttributes = {
237
257
  */
238
258
  export type Cluster = Resource<"GCP.Cluster", ClusterProps, ClusterAttributes, never, GCP.Providers>;
239
259
  export declare const Cluster: import("alchemy").ResourceClass<Cluster>;
240
- export declare const ClusterProvider: () => import("effect/Layer").Layer<Provider.Provider<Cluster>, never, import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").Stage | import("alchemy").Stack | import("@distilled.cloud/gcp").Credentials>;
260
+ export declare const ClusterProvider: () => import("effect/Layer").Layer<Provider.Provider<Cluster>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
241
261
  //# sourceMappingURL=Cluster.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cluster.d.ts","sourceRoot":"","sources":["../../src/Container/Cluster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Cluster.d.ts","sourceRoot":"","sources":["../../src/Container/Cluster.ts"],"names":[],"mappings":"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"}
@@ -201,8 +201,10 @@ export const ClusterProvider = () => Provider.effect(Cluster, Effect.gen(functio
201
201
  if (!deepEqual(olds.ipAllocationPolicy, news.ipAllocationPolicy)) {
202
202
  return { action: "replace" };
203
203
  }
204
- // `initialNodePool` is intentionally NOT part of diff — it is
205
- // consumed only on create. See ClusterProps JSDoc.
204
+ // `initialNodePool` and `networkConfig` are intentionally NOT
205
+ // part of diff — both are consumed only on create. See the
206
+ // ClusterProps JSDoc (networkConfig explains why a same-name
207
+ // replace would be destructive).
206
208
  return undefined;
207
209
  }),
208
210
  reconcile: Effect.fn(function* ({ id, news, session }) {
@@ -243,6 +245,7 @@ export const ClusterProvider = () => Provider.effect(Cluster, Effect.gen(functio
243
245
  ...(news.ipAllocationPolicy
244
246
  ? { ipAllocationPolicy: news.ipAllocationPolicy }
245
247
  : {}),
248
+ ...(news.networkConfig ? { networkConfig: news.networkConfig } : {}),
246
249
  ...(news.releaseChannel ? { releaseChannel: news.releaseChannel } : {}),
247
250
  ...(news.workloadIdentityConfig
248
251
  ? { workloadIdentityConfig: news.workloadIdentityConfig }