diff --git a/model/aws/ec2/manifest.yaml b/model/aws/ec2/manifest.yaml index 1c41e7888..40ad3e36a 100644 --- a/model/aws/ec2/manifest.yaml +++ b/model/aws/ec2/manifest.yaml @@ -9,8 +9,6 @@ labels: - ec2 - cloud - infrastructure -releaseNotes: | - - Updated: vpnconnection models: - capacity_manager_data_export.ts - capacity_reservation.ts diff --git a/model/digitalocean/manifest.yaml b/model/digitalocean/manifest.yaml index 2596cc91a..543501ed8 100644 --- a/model/digitalocean/manifest.yaml +++ b/model/digitalocean/manifest.yaml @@ -8,8 +8,6 @@ labels: - digitalocean - cloud - infrastructure -releaseNotes: | - - Updated: database_cluster models: - app_platform.ts - byoip_prefix.ts diff --git a/model/gcp/accesscontextmanager/extensions/models/permissions.ts b/model/gcp/accesscontextmanager/extensions/models/permissions.ts index dd57dce58..433b5424f 100644 --- a/model/gcp/accesscontextmanager/extensions/models/permissions.ts +++ b/model/gcp/accesscontextmanager/extensions/models/permissions.ts @@ -6,7 +6,7 @@ /** * Swamp extension model for Google Cloud Access Context Manager Permissions. * - * Lists all supported permissions in VPC Service Controls ingress and egress rules for Granular Controls. + * Lists all supported permissions in VPCSC Granular Controls. * * Wraps the GCP resource as a swamp model so create, get, update, * delete, and sync can be driven through `swamp model`. @@ -55,7 +55,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Access Context Manager Permissions. Registered at `@swamp/gcp/accesscontextmanager/permissions`. */ export const model = { type: "@swamp/gcp/accesscontextmanager/permissions", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -92,13 +92,18 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, resources: { state: { description: - "Lists all supported permissions in VPC Service Controls ingress and egress ru...", + "Lists all supported permissions in VPCSC Granular Controls.", schema: StateSchema, lifetime: "infinite", garbageCollection: 10, diff --git a/model/gcp/accesscontextmanager/manifest.yaml b/model/gcp/accesscontextmanager/manifest.yaml index d7b22f49d..bab1fdd6d 100644 --- a/model/gcp/accesscontextmanager/manifest.yaml +++ b/model/gcp/accesscontextmanager/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/accesscontextmanager" -version: "2026.05.01.1" +version: "2026.05.04.1" description: "Google Cloud accesscontextmanager infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - accesscontextmanager - cloud - infrastructure +releaseNotes: | + - Updated: permissions models: - accesspolicies.ts - accesspolicies_accesslevels.ts diff --git a/model/gcp/aiplatform/manifest.yaml b/model/gcp/aiplatform/manifest.yaml index 6459ba35b..f0005e763 100644 --- a/model/gcp/aiplatform/manifest.yaml +++ b/model/gcp/aiplatform/manifest.yaml @@ -10,8 +10,6 @@ labels: - aiplatform - cloud - infrastructure -releaseNotes: | - - Updated: batchpredictionjobs, datasets, datasets_datasetversions, locations, cachedcontents, customjobs, datalabelingjobs, datasets_annotationspecs, datasets_dataitems, datasets_dataitems_annotations, datasets_savedqueries, deploymentresourcepools, endpoints, evaluationitems, evaluationruns, evaluationsets, featuregroups, featuregroups_features, featureonlinestores, featureonlinestores_featureviews, featureonlinestores_featureviews_featureviewsyncs, featurestores, featurestores_entitytypes, featurestores_entitytypes_features, hyperparametertuningjobs, indexendpoints, indexes, metadatastores, metadatastores_artifacts, metadatastores_contexts, metadatastores_executions, metadatastores_metadataschemas, modeldeploymentmonitoringjobs, models, models_evaluations, models_evaluations_slices, nasjobs, nasjobs_nastrialdetails, notebookexecutionjobs, notebookruntimetemplates, notebookruntimes, persistentresources, pipelinejobs, ragcorpora, ragcorpora_ragfiles, reasoningengines, reasoningengines_memories, reasoningengines_memories_revisions, reasoningengines_sandboxenvironmentsnapshots, reasoningengines_sandboxenvironmenttemplates, reasoningengines_sandboxenvironments, reasoningengines_sessions, reasoningengines_sessions_events, schedules, specialistpools, studies, studies_trials, tensorboards, tensorboards_experiments, tensorboards_experiments_runs, tensorboards_experiments_runs_timeseries, trainingpipelines, tuningjobs, publishers_models models: - batchpredictionjobs.ts - cachedcontents.ts diff --git a/model/gcp/bigquerydatapolicy/extensions/models/datapolicies.ts b/model/gcp/bigquerydatapolicy/extensions/models/datapolicies.ts index e64f23022..edb66bf9e 100644 --- a/model/gcp/bigquerydatapolicy/extensions/models/datapolicies.ts +++ b/model/gcp/bigquerydatapolicy/extensions/models/datapolicies.ts @@ -99,6 +99,16 @@ const DELETE_CONFIG = { const GlobalArgsSchema = z.object({ dataPolicy: z.object({ + dataGovernanceTag: z.object({ + key: z.string().describe( + "Optional. Tag keys are globally unique. Tag key is expected to be in the namespaced format, for example `parent-id/pii` where `parent-id` is the ID of the parent organization or project resource for this tag key.", + ).optional(), + value: z.string().describe( + "Optional. Specifies the tag value as the short name, for example `sensitive`.", + ).optional(), + }).describe( + "Data Governance tag This is a namespaced name specifying the key and the value. For example: `project-id/pii/sensitive`.", + ).optional(), dataMaskingPolicy: z.object({ predefinedExpression: z.enum([ "PREDEFINED_EXPRESSION_UNSPECIFIED", @@ -143,6 +153,16 @@ const GlobalArgsSchema = z.object({ dataPolicyId: z.string().describe( "Output only. User-assigned (human readable) ID of the data policy that needs to be unique within a project. Used as {data_policy_id} in part of the resource name.", ).optional(), + dataGovernanceTag: z.object({ + key: z.string().describe( + "Optional. Tag keys are globally unique. Tag key is expected to be in the namespaced format, for example `parent-id/pii` where `parent-id` is the ID of the parent organization or project resource for this tag key.", + ).optional(), + value: z.string().describe( + "Optional. Specifies the tag value as the short name, for example `sensitive`.", + ).optional(), + }).describe( + "Data Governance tag This is a namespaced name specifying the key and the value. For example: `project-id/pii/sensitive`.", + ).optional(), dataMaskingPolicy: z.object({ predefinedExpression: z.enum([ "PREDEFINED_EXPRESSION_UNSPECIFIED", @@ -186,6 +206,10 @@ const GlobalArgsSchema = z.object({ }); const StateSchema = z.object({ + dataGovernanceTag: z.object({ + key: z.string(), + value: z.string(), + }).optional(), dataMaskingPolicy: z.object({ predefinedExpression: z.string(), routine: z.string(), @@ -203,6 +227,16 @@ type StateData = z.infer; const InputsSchema = z.object({ dataPolicy: z.object({ + dataGovernanceTag: z.object({ + key: z.string().describe( + "Optional. Tag keys are globally unique. Tag key is expected to be in the namespaced format, for example `parent-id/pii` where `parent-id` is the ID of the parent organization or project resource for this tag key.", + ).optional(), + value: z.string().describe( + "Optional. Specifies the tag value as the short name, for example `sensitive`.", + ).optional(), + }).describe( + "Data Governance tag This is a namespaced name specifying the key and the value. For example: `project-id/pii/sensitive`.", + ).optional(), dataMaskingPolicy: z.object({ predefinedExpression: z.enum([ "PREDEFINED_EXPRESSION_UNSPECIFIED", @@ -247,6 +281,16 @@ const InputsSchema = z.object({ dataPolicyId: z.string().describe( "Output only. User-assigned (human readable) ID of the data policy that needs to be unique within a project. Used as {data_policy_id} in part of the resource name.", ).optional(), + dataGovernanceTag: z.object({ + key: z.string().describe( + "Optional. Tag keys are globally unique. Tag key is expected to be in the namespaced format, for example `parent-id/pii` where `parent-id` is the ID of the parent organization or project resource for this tag key.", + ).optional(), + value: z.string().describe( + "Optional. Specifies the tag value as the short name, for example `sensitive`.", + ).optional(), + }).describe( + "Data Governance tag This is a namespaced name specifying the key and the value. For example: `project-id/pii/sensitive`.", + ).optional(), dataMaskingPolicy: z.object({ predefinedExpression: z.enum([ "PREDEFINED_EXPRESSION_UNSPECIFIED", @@ -292,7 +336,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud BigQuery Data Policy DataPolicies. Registered at `@swamp/gcp/bigquerydatapolicy/datapolicies`. */ export const model = { type: "@swamp/gcp/bigquerydatapolicy/datapolicies", - version: "2026.05.02.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -410,6 +454,11 @@ export const model = { return rest; }, }, + { + toVersion: "2026.05.04.1", + description: "Added: dataGovernanceTag", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -517,6 +566,9 @@ export const model = { if (g["dataPolicyId"] !== undefined) { body["dataPolicyId"] = g["dataPolicyId"]; } + if (g["dataGovernanceTag"] !== undefined) { + body["dataGovernanceTag"] = g["dataGovernanceTag"]; + } if (g["dataMaskingPolicy"] !== undefined) { body["dataMaskingPolicy"] = g["dataMaskingPolicy"]; } diff --git a/model/gcp/bigquerydatapolicy/manifest.yaml b/model/gcp/bigquerydatapolicy/manifest.yaml index 7758e6fa7..501b85675 100644 --- a/model/gcp/bigquerydatapolicy/manifest.yaml +++ b/model/gcp/bigquerydatapolicy/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/bigquerydatapolicy" -version: "2026.05.02.1" +version: "2026.05.04.1" description: "Google Cloud bigquerydatapolicy infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: diff --git a/model/gcp/bigtableadmin/extensions/models/instances_clusters.ts b/model/gcp/bigtableadmin/extensions/models/instances_clusters.ts index 73b02e2cb..08c39d0a6 100644 --- a/model/gcp/bigtableadmin/extensions/models/instances_clusters.ts +++ b/model/gcp/bigtableadmin/extensions/models/instances_clusters.ts @@ -233,7 +233,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Bigtable Admin Instances.Clusters. Registered at `@swamp/gcp/bigtableadmin/instances-clusters`. */ export const model = { type: "@swamp/gcp/bigtableadmin/instances-clusters", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -275,6 +275,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -613,5 +618,48 @@ export const model = { return { result }; }, }, + update_memory_layer: { + description: "update memory layer", + arguments: z.object({ + etag: z.any().optional(), + memoryConfig: z.any().optional(), + name: z.any().optional(), + state: z.any().optional(), + }), + execute: async (args: Record, context: any) => { + const g = context.globalArgs; + const projectId = await getProjectId(); + const params: Record = { project: projectId }; + if (g["parent"] !== undefined && g["name"] !== undefined) { + params["name"] = buildResourceName( + String(g["parent"]), + String(g["name"]), + ); + } + const body: Record = {}; + if (args["etag"] !== undefined) body["etag"] = args["etag"]; + if (args["memoryConfig"] !== undefined) { + body["memoryConfig"] = args["memoryConfig"]; + } + if (args["name"] !== undefined) body["name"] = args["name"]; + if (args["state"] !== undefined) body["state"] = args["state"]; + const result = await createResource( + BASE_URL, + { + "id": "bigtableadmin.projects.instances.clusters.updateMemoryLayer", + "path": "v2/{+name}", + "httpMethod": "PATCH", + "parameterOrder": ["name"], + "parameters": { + "name": { "location": "path", "required": true }, + "updateMask": { "location": "query" }, + }, + }, + params, + body, + ); + return { result }; + }, + }, }, }; diff --git a/model/gcp/bigtableadmin/manifest.yaml b/model/gcp/bigtableadmin/manifest.yaml index 9e7255885..5c8d0485c 100644 --- a/model/gcp/bigtableadmin/manifest.yaml +++ b/model/gcp/bigtableadmin/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/bigtableadmin" -version: "2026.05.01.1" +version: "2026.05.04.1" description: "Google Cloud bigtableadmin infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - bigtableadmin - cloud - infrastructure +releaseNotes: | + - Updated: instances_clusters models: - instances.ts - instances_appprofiles.ts diff --git a/model/gcp/cloudsearch/extensions/models/query_sources.ts b/model/gcp/cloudsearch/extensions/models/query_sources.ts index 620544967..9204329b8 100644 --- a/model/gcp/cloudsearch/extensions/models/query_sources.ts +++ b/model/gcp/cloudsearch/extensions/models/query_sources.ts @@ -32,6 +32,9 @@ const LIST_CONFIG = { "pageToken": { "location": "query", }, + "requestOptions.clientDisplayLanguageCode": { + "location": "query", + }, "requestOptions.debugOptions.enableDebugging": { "location": "query", }, @@ -85,7 +88,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Search Query.Sources. Registered at `@swamp/gcp/cloudsearch/query-sources`. */ export const model = { type: "@swamp/gcp/cloudsearch/query-sources", - version: "2026.04.23.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -117,6 +120,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/cloudsearch/manifest.yaml b/model/gcp/cloudsearch/manifest.yaml index 162d2cf8a..f0e472de9 100644 --- a/model/gcp/cloudsearch/manifest.yaml +++ b/model/gcp/cloudsearch/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/cloudsearch" -version: "2026.04.23.1" +version: "2026.05.04.1" description: "Google Cloud cloudsearch infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - cloudsearch - cloud - infrastructure +releaseNotes: | + - Updated: query_sources models: - debug_datasources_items_unmappedids.ts - debug_identitysources_unmappedids.ts diff --git a/model/gcp/compute/extensions/models/autoscalers.ts b/model/gcp/compute/extensions/models/autoscalers.ts index 837780177..f3b2a2a9a 100644 --- a/model/gcp/compute/extensions/models/autoscalers.ts +++ b/model/gcp/compute/extensions/models/autoscalers.ts @@ -183,7 +183,7 @@ const GlobalArgsSchema = z.object({ scaleInControl: z.object({ maxScaledInReplicas: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -224,9 +224,6 @@ const GlobalArgsSchema = z.object({ ).describe( "Scaling schedules defined for an autoscaler. Multiple schedules can be set on an autoscaler, and they can overlap. During overlapping periods the greatest min_required_replicas of all scaling schedules is applied. Up to 128 scaling schedules are allowed.", ).optional(), - stabilizationPeriodSec: z.number().int().describe( - "The number of seconds that autoscaler waits for load stabilization before making scale-in decisions. This is referred to as the [stabilization period](/compute/docs/autoscaler#stabilization_period). This might appear as a delay in scaling in but it is an important mechanism for your application to not have fluctuating size due to short term load fluctuations. The default stabilization period is 600 seconds.", - ).optional(), }).describe("Cloud Autoscaler policy.").optional(), description: z.string().describe( "An optional description of this resource. Provide this property when you create the resource.", @@ -275,7 +272,6 @@ const StateSchema = z.object({ timeWindowSec: z.number(), }), scalingSchedules: z.record(z.string(), z.unknown()), - stabilizationPeriodSec: z.number(), }).optional(), creationTimestamp: z.string().optional(), description: z.string().optional(), @@ -352,7 +348,7 @@ const InputsSchema = z.object({ scaleInControl: z.object({ maxScaledInReplicas: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -393,9 +389,6 @@ const InputsSchema = z.object({ ).describe( "Scaling schedules defined for an autoscaler. Multiple schedules can be set on an autoscaler, and they can overlap. During overlapping periods the greatest min_required_replicas of all scaling schedules is applied. Up to 128 scaling schedules are allowed.", ).optional(), - stabilizationPeriodSec: z.number().int().describe( - "The number of seconds that autoscaler waits for load stabilization before making scale-in decisions. This is referred to as the [stabilization period](/compute/docs/autoscaler#stabilization_period). This might appear as a delay in scaling in but it is an important mechanism for your application to not have fluctuating size due to short term load fluctuations. The default stabilization period is 600 seconds.", - ).optional(), }).describe("Cloud Autoscaler policy.").optional(), description: z.string().describe( "An optional description of this resource. Provide this property when you create the resource.", @@ -418,7 +411,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine Autoscalers. Registered at `@swamp/gcp/compute/autoscalers`. */ export const model = { type: "@swamp/gcp/compute/autoscalers", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -455,6 +448,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/disks.ts b/model/gcp/compute/extensions/models/disks.ts index d941db32a..5fe11cb96 100644 --- a/model/gcp/compute/extensions/models/disks.ts +++ b/model/gcp/compute/extensions/models/disks.ts @@ -229,7 +229,7 @@ const GlobalArgsSchema = z.object({ options: z.string().describe("Internal use only.").optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional disk params.").optional(), physicalBlockSizeBytes: z.string().describe( @@ -515,7 +515,7 @@ const InputsSchema = z.object({ options: z.string().describe("Internal use only.").optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional disk params.").optional(), physicalBlockSizeBytes: z.string().describe( @@ -627,7 +627,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine Disks. Registered at `@swamp/gcp/compute/disks`. */ export const model = { type: "@swamp/gcp/compute/disks", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -689,6 +689,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/firewallpolicies.ts b/model/gcp/compute/extensions/models/firewallpolicies.ts index 1e04cc592..07bed38a5 100644 --- a/model/gcp/compute/extensions/models/firewallpolicies.ts +++ b/model/gcp/compute/extensions/models/firewallpolicies.ts @@ -263,8 +263,8 @@ const GlobalArgsSchema = z.object({ ).optional(), })).describe("A list of packet mirroring rules that belong to this policy.") .optional(), - policyType: z.enum(["RDMA_ROCE_POLICY", "ULL_POLICY", "VPC_POLICY"]).describe( - "The type of the firewall policy. This field can be one of VPC_POLICY, RDMA_ROCE_POLICY or ULL_POLICY. Note: if not specified then VPC_POLICY will be used.", + policyType: z.enum(["RDMA_ROCE_POLICY", "VPC_POLICY"]).describe( + "The type of the firewall policy. This field can be eitherVPC_POLICY or RDMA_ROCE_POLICY. Note: if not specified then VPC_POLICY will be used.", ).optional(), rules: z.array(z.object({ action: z.string().describe( @@ -707,8 +707,8 @@ const InputsSchema = z.object({ ).optional(), })).describe("A list of packet mirroring rules that belong to this policy.") .optional(), - policyType: z.enum(["RDMA_ROCE_POLICY", "ULL_POLICY", "VPC_POLICY"]).describe( - "The type of the firewall policy. This field can be one of VPC_POLICY, RDMA_ROCE_POLICY or ULL_POLICY. Note: if not specified then VPC_POLICY will be used.", + policyType: z.enum(["RDMA_ROCE_POLICY", "VPC_POLICY"]).describe( + "The type of the firewall policy. This field can be eitherVPC_POLICY or RDMA_ROCE_POLICY. Note: if not specified then VPC_POLICY will be used.", ).optional(), rules: z.array(z.object({ action: z.string().describe( @@ -871,7 +871,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine FirewallPolicies. Registered at `@swamp/gcp/compute/firewallpolicies`. */ export const model = { type: "@swamp/gcp/compute/firewallpolicies", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -913,6 +913,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/globalvmextensionpolicies.ts b/model/gcp/compute/extensions/models/globalvmextensionpolicies.ts deleted file mode 100644 index 7bb5f37fc..000000000 --- a/model/gcp/compute/extensions/models/globalvmextensionpolicies.ts +++ /dev/null @@ -1,618 +0,0 @@ -// Auto-generated extension model for @swamp/gcp/compute/globalvmextensionpolicies -// Do not edit manually. Re-generate with: deno task generate:gcp - -// deno-lint-ignore-file no-explicit-any - -/** - * Swamp extension model for Google Cloud Compute Engine GlobalVmExtensionPolicies. - * - * Message describing GlobalVmExtensionPolicy object. - * - * Wraps the GCP resource as a swamp model so create, get, update, - * delete, and sync can be driven through `swamp model`. - * - * @module - */ - -import { z } from "npm:zod@4.3.6"; -import { - createResource, - deleteResource, - getProjectId, - isResourceNotFoundError, - readResource, - updateResource, -} from "./_lib/gcp.ts"; - -const BASE_URL = "https://compute.googleapis.com/compute/v1/"; - -const GET_CONFIG = { - "id": "compute.globalVmExtensionPolicies.get", - "path": - "projects/{project}/global/vmExtensionPolicies/{globalVmExtensionPolicy}", - "httpMethod": "GET", - "parameterOrder": [ - "project", - "globalVmExtensionPolicy", - ], - "parameters": { - "globalVmExtensionPolicy": { - "location": "path", - "required": true, - }, - "project": { - "location": "path", - "required": true, - }, - }, -} as const; - -const INSERT_CONFIG = { - "id": "compute.globalVmExtensionPolicies.insert", - "path": "projects/{project}/global/vmExtensionPolicies", - "httpMethod": "POST", - "parameterOrder": [ - "project", - ], - "parameters": { - "project": { - "location": "path", - "required": true, - }, - "requestId": { - "location": "query", - }, - }, -} as const; - -const UPDATE_CONFIG = { - "id": "compute.globalVmExtensionPolicies.update", - "path": - "projects/{project}/global/vmExtensionPolicies/{globalVmExtensionPolicy}", - "httpMethod": "PATCH", - "parameterOrder": [ - "project", - "globalVmExtensionPolicy", - ], - "parameters": { - "globalVmExtensionPolicy": { - "location": "path", - "required": true, - }, - "project": { - "location": "path", - "required": true, - }, - "requestId": { - "location": "query", - }, - }, -} as const; - -const DELETE_CONFIG = { - "id": "compute.globalVmExtensionPolicies.delete", - "path": - "projects/{project}/global/vmExtensionPolicies/{globalVmExtensionPolicy}/delete", - "httpMethod": "POST", - "parameterOrder": [ - "project", - "globalVmExtensionPolicy", - ], - "parameters": { - "globalVmExtensionPolicy": { - "location": "path", - "required": true, - }, - "project": { - "location": "path", - "required": true, - }, - "requestId": { - "location": "query", - }, - }, -} as const; - -const GlobalArgsSchema = z.object({ - description: z.string().describe( - "An optional description of this resource. Provide this property when you create the resource.", - ).optional(), - extensionPolicies: z.record( - z.string(), - z.object({ - pinnedVersion: z.string().describe( - "Optional. The version pinning for the extension. If empty, the extension will be installed with the latest version released by the extension producer.", - ).optional(), - stringConfig: z.string().describe( - "Optional. String configuration. Any string payload that the extension understands.", - ).optional(), - }), - ).describe( - 'Required. Map from extension (eg: "cloudops") to its policy configuration. The key is the name of the extension.', - ).optional(), - instanceSelectors: z.array(z.object({ - labelSelector: z.object({ - inclusionLabels: z.record(z.string(), z.string()).describe( - "Optional. Labels as key value pairs. A VM should contain all the pairs specified in this map to be selected; Labels within the LabelSelector are OR'ed.", - ).optional(), - }).describe( - "A LabelSelector is applicable for a VM only if it matches all labels in the LabelSelector.", - ).optional(), - })).describe( - 'Optional. Selector to target VMs for a policy. There is a logical "AND" between instance_selectors.', - ).optional(), - name: z.string().regex(new RegExp("[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?")) - .describe( - "Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply withRFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.", - ).optional(), - priority: z.number().int().describe( - "Optional. Used to resolve conflicts when multiple policies are active for the same extension. Defaults to 0. Larger the number, higher the priority. When the priority is the same, the policy with the newer create time has higher priority.", - ).optional(), - rolloutOperation: z.object({ - rolloutInput: z.object({ - conflictBehavior: z.string().describe( - 'Optional. Specifies the behavior of the rollout if a conflict is detected in a project during a rollout. This only applies to `insert` and `update` methods. A conflict occurs in the following cases: * `insert` method: If the zonal policy already exists when the insert happens. * `update` method: If the zonal policy was modified by a zonal API call outside of this rollout. Possible values are the following: * `""` (empty string): If a conflict occurs, the local value is not overwritten. This is the default behavior. * `"overwrite"`: If a conflict occurs, the local value is overwritten with the rollout value.', - ).optional(), - name: z.string().describe( - "Optional. The name of the rollout plan. Ex. projects//locations/global/rolloutPlans/.", - ).optional(), - predefinedRolloutPlan: z.enum([ - "FAST_ROLLOUT", - "ROLLOUT_PLAN_UNSPECIFIED", - "SLOW_ROLLOUT", - ]).describe( - "Optional. Specifies the predefined rollout plan for the policy. Valid values are `SLOW_ROLLOUT` and `FAST_ROLLOUT`. The recommended value is `SLOW_ROLLOUT` for progressive rollout. For more information, see Rollout plans for global policies.", - ).optional(), - retryUuid: z.string().describe( - "Optional. The UUID that identifies a policy rollout retry attempt for update and delete operations. Set this field only when retrying a rollout for an existing extension policy. * `update` method: Lets you retry policy rollout without changes. An error occurs if you set retry_uuid but the policy is modified. * `delete` method: Lets you retry policy deletion rollout if the previous deletion rollout is not finished and the policy is in the DELETING state. If you set this field when the policy is not in the DELETING state, an error occurs.", - ).optional(), - }).optional(), - rolloutStatus: z.object({ - currentRollouts: z.array(z.object({ - locationRolloutStatus: z.record(z.string(), z.unknown()).describe( - "Output only. [Output Only] The rollout status for each location. The list of the locations is the same as the list of locations in the rollout plan.", - ).optional(), - rollout: z.string().describe( - "Output only. [Output Only] The name of the rollout. Ex. projects//locations/global/rollouts/.", - ).optional(), - rolloutPlan: z.string().describe( - "Output only. [Output Only] The name of the rollout plan. Ex. projects//locations/global/rolloutPlans/.", - ).optional(), - state: z.enum([ - "STATE_CANCELLED", - "STATE_COMPLETED", - "STATE_FAILED", - "STATE_PAUSED", - "STATE_PROCESSING", - "STATE_UNKNOWN", - "STATE_UNSPECIFIED", - ]).describe( - "Output only. [Output Only] The overall state of the rollout.", - ).optional(), - })).describe( - "Output only. [Output Only] The current rollouts for the latest version of the resource. There should be only one current rollout, but for scalability, we make it repeated.", - ).optional(), - previousRollout: z.object({ - locationRolloutStatus: z.record( - z.string(), - z.object({ - state: z.unknown().describe( - "Output only. [Output Only] The state of the location rollout.", - ).optional(), - }), - ).describe( - "Output only. [Output Only] The rollout status for each location. The list of the locations is the same as the list of locations in the rollout plan.", - ).optional(), - rollout: z.string().describe( - "Output only. [Output Only] The name of the rollout. Ex. projects//locations/global/rollouts/.", - ).optional(), - rolloutPlan: z.string().describe( - "Output only. [Output Only] The name of the rollout plan. Ex. projects//locations/global/rolloutPlans/.", - ).optional(), - state: z.enum([ - "STATE_CANCELLED", - "STATE_COMPLETED", - "STATE_FAILED", - "STATE_PAUSED", - "STATE_PROCESSING", - "STATE_UNKNOWN", - "STATE_UNSPECIFIED", - ]).describe( - "Output only. [Output Only] The overall state of the rollout.", - ).optional(), - }).optional(), - }).optional(), - }).describe("Represents the rollout operation").optional(), - requestId: z.string().describe( - "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", - ).optional(), -}); - -const StateSchema = z.object({ - creationTimestamp: z.string().optional(), - description: z.string().optional(), - extensionPolicies: z.record(z.string(), z.unknown()).optional(), - id: z.string().optional(), - instanceSelectors: z.array(z.object({ - labelSelector: z.object({ - inclusionLabels: z.record(z.string(), z.unknown()), - }), - })).optional(), - kind: z.string().optional(), - name: z.string(), - priority: z.number().optional(), - rolloutOperation: z.object({ - rolloutInput: z.object({ - conflictBehavior: z.string(), - name: z.string(), - predefinedRolloutPlan: z.string(), - retryUuid: z.string(), - }), - rolloutStatus: z.object({ - currentRollouts: z.array(z.object({ - locationRolloutStatus: z.record(z.string(), z.unknown()), - rollout: z.string(), - rolloutPlan: z.string(), - state: z.string(), - })), - previousRollout: z.object({ - locationRolloutStatus: z.record(z.string(), z.unknown()), - rollout: z.string(), - rolloutPlan: z.string(), - state: z.string(), - }), - }), - }).optional(), - scopedResourceStatus: z.string().optional(), - selfLink: z.string().optional(), - selfLinkWithId: z.string().optional(), - updateTimestamp: z.string().optional(), -}).passthrough(); - -type StateData = z.infer; - -const InputsSchema = z.object({ - description: z.string().describe( - "An optional description of this resource. Provide this property when you create the resource.", - ).optional(), - extensionPolicies: z.record( - z.string(), - z.object({ - pinnedVersion: z.string().describe( - "Optional. The version pinning for the extension. If empty, the extension will be installed with the latest version released by the extension producer.", - ).optional(), - stringConfig: z.string().describe( - "Optional. String configuration. Any string payload that the extension understands.", - ).optional(), - }), - ).describe( - 'Required. Map from extension (eg: "cloudops") to its policy configuration. The key is the name of the extension.', - ).optional(), - instanceSelectors: z.array(z.object({ - labelSelector: z.object({ - inclusionLabels: z.record(z.string(), z.string()).describe( - "Optional. Labels as key value pairs. A VM should contain all the pairs specified in this map to be selected; Labels within the LabelSelector are OR'ed.", - ).optional(), - }).describe( - "A LabelSelector is applicable for a VM only if it matches all labels in the LabelSelector.", - ).optional(), - })).describe( - 'Optional. Selector to target VMs for a policy. There is a logical "AND" between instance_selectors.', - ).optional(), - name: z.string().regex(new RegExp("[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?")) - .describe( - "Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply withRFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.", - ).optional(), - priority: z.number().int().describe( - "Optional. Used to resolve conflicts when multiple policies are active for the same extension. Defaults to 0. Larger the number, higher the priority. When the priority is the same, the policy with the newer create time has higher priority.", - ).optional(), - rolloutOperation: z.object({ - rolloutInput: z.object({ - conflictBehavior: z.string().describe( - 'Optional. Specifies the behavior of the rollout if a conflict is detected in a project during a rollout. This only applies to `insert` and `update` methods. A conflict occurs in the following cases: * `insert` method: If the zonal policy already exists when the insert happens. * `update` method: If the zonal policy was modified by a zonal API call outside of this rollout. Possible values are the following: * `""` (empty string): If a conflict occurs, the local value is not overwritten. This is the default behavior. * `"overwrite"`: If a conflict occurs, the local value is overwritten with the rollout value.', - ).optional(), - name: z.string().describe( - "Optional. The name of the rollout plan. Ex. projects//locations/global/rolloutPlans/.", - ).optional(), - predefinedRolloutPlan: z.enum([ - "FAST_ROLLOUT", - "ROLLOUT_PLAN_UNSPECIFIED", - "SLOW_ROLLOUT", - ]).describe( - "Optional. Specifies the predefined rollout plan for the policy. Valid values are `SLOW_ROLLOUT` and `FAST_ROLLOUT`. The recommended value is `SLOW_ROLLOUT` for progressive rollout. For more information, see Rollout plans for global policies.", - ).optional(), - retryUuid: z.string().describe( - "Optional. The UUID that identifies a policy rollout retry attempt for update and delete operations. Set this field only when retrying a rollout for an existing extension policy. * `update` method: Lets you retry policy rollout without changes. An error occurs if you set retry_uuid but the policy is modified. * `delete` method: Lets you retry policy deletion rollout if the previous deletion rollout is not finished and the policy is in the DELETING state. If you set this field when the policy is not in the DELETING state, an error occurs.", - ).optional(), - }).optional(), - rolloutStatus: z.object({ - currentRollouts: z.array(z.object({ - locationRolloutStatus: z.record(z.string(), z.unknown()).describe( - "Output only. [Output Only] The rollout status for each location. The list of the locations is the same as the list of locations in the rollout plan.", - ).optional(), - rollout: z.string().describe( - "Output only. [Output Only] The name of the rollout. Ex. projects//locations/global/rollouts/.", - ).optional(), - rolloutPlan: z.string().describe( - "Output only. [Output Only] The name of the rollout plan. Ex. projects//locations/global/rolloutPlans/.", - ).optional(), - state: z.enum([ - "STATE_CANCELLED", - "STATE_COMPLETED", - "STATE_FAILED", - "STATE_PAUSED", - "STATE_PROCESSING", - "STATE_UNKNOWN", - "STATE_UNSPECIFIED", - ]).describe( - "Output only. [Output Only] The overall state of the rollout.", - ).optional(), - })).describe( - "Output only. [Output Only] The current rollouts for the latest version of the resource. There should be only one current rollout, but for scalability, we make it repeated.", - ).optional(), - previousRollout: z.object({ - locationRolloutStatus: z.record( - z.string(), - z.object({ - state: z.unknown().describe( - "Output only. [Output Only] The state of the location rollout.", - ).optional(), - }), - ).describe( - "Output only. [Output Only] The rollout status for each location. The list of the locations is the same as the list of locations in the rollout plan.", - ).optional(), - rollout: z.string().describe( - "Output only. [Output Only] The name of the rollout. Ex. projects//locations/global/rollouts/.", - ).optional(), - rolloutPlan: z.string().describe( - "Output only. [Output Only] The name of the rollout plan. Ex. projects//locations/global/rolloutPlans/.", - ).optional(), - state: z.enum([ - "STATE_CANCELLED", - "STATE_COMPLETED", - "STATE_FAILED", - "STATE_PAUSED", - "STATE_PROCESSING", - "STATE_UNKNOWN", - "STATE_UNSPECIFIED", - ]).describe( - "Output only. [Output Only] The overall state of the rollout.", - ).optional(), - }).optional(), - }).optional(), - }).describe("Represents the rollout operation").optional(), - requestId: z.string().describe( - "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", - ).optional(), -}); - -/** Swamp extension model for Google Cloud Compute Engine GlobalVmExtensionPolicies. Registered at `@swamp/gcp/compute/globalvmextensionpolicies`. */ -export const model = { - type: "@swamp/gcp/compute/globalvmextensionpolicies", - version: "2026.05.01.1", - globalArguments: GlobalArgsSchema, - inputsSchema: InputsSchema, - resources: { - state: { - description: "Message describing GlobalVmExtensionPolicy object.", - schema: StateSchema, - lifetime: "infinite", - garbageCollection: 10, - }, - }, - methods: { - create: { - description: "Create a globalVmExtensionPolicies", - arguments: z.object({}), - execute: async (_args: Record, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - const body: Record = {}; - if (g["description"] !== undefined) { - body["description"] = g["description"]; - } - if (g["extensionPolicies"] !== undefined) { - body["extensionPolicies"] = g["extensionPolicies"]; - } - if (g["instanceSelectors"] !== undefined) { - body["instanceSelectors"] = g["instanceSelectors"]; - } - if (g["name"] !== undefined) body["name"] = g["name"]; - if (g["priority"] !== undefined) body["priority"] = g["priority"]; - if (g["rolloutOperation"] !== undefined) { - body["rolloutOperation"] = g["rolloutOperation"]; - } - if (g["requestId"] !== undefined) body["requestId"] = g["requestId"]; - if (g["name"] !== undefined) { - params["globalVmExtensionPolicy"] = String(g["name"]); - } - const result = await createResource( - BASE_URL, - INSERT_CONFIG, - params, - body, - GET_CONFIG, - ) as StateData; - const instanceName = ((result.name ?? g.name)?.toString() ?? "current") - .replace(/[\/\\]/g, "_").replace(/\.\./g, "_").replace(/\0/g, ""); - const handle = await context.writeResource( - "state", - instanceName, - result, - ); - return { dataHandles: [handle] }; - }, - }, - get: { - description: "Get a globalVmExtensionPolicies", - arguments: z.object({ - identifier: z.string().describe( - "The name of the globalVmExtensionPolicies", - ), - }), - execute: async (args: { identifier: string }, context: any) => { - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - const g = context.globalArgs; - params["globalVmExtensionPolicy"] = args.identifier; - const result = await readResource( - BASE_URL, - GET_CONFIG, - params, - ) as StateData; - const instanceName = - ((result.name ?? g.name)?.toString() ?? args.identifier).replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const handle = await context.writeResource( - "state", - instanceName, - result, - ); - return { dataHandles: [handle] }; - }, - }, - update: { - description: "Update globalVmExtensionPolicies attributes", - arguments: z.object({}), - execute: async (_args: Record, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const instanceName = (g.name?.toString() ?? "current").replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const content = await context.dataRepository.getContent( - context.modelType, - context.modelId, - instanceName, - ); - if (!content) { - throw new Error("No existing state found - run create or get first"); - } - const existing = JSON.parse(new TextDecoder().decode(content)); - const params: Record = { project: projectId }; - params["globalVmExtensionPolicy"] = existing["name"]?.toString() ?? ""; - const body: Record = {}; - if (g["description"] !== undefined) { - body["description"] = g["description"]; - } - if (g["extensionPolicies"] !== undefined) { - body["extensionPolicies"] = g["extensionPolicies"]; - } - if (g["instanceSelectors"] !== undefined) { - body["instanceSelectors"] = g["instanceSelectors"]; - } - if (g["name"] !== undefined) body["name"] = g["name"]; - if (g["priority"] !== undefined) body["priority"] = g["priority"]; - if (g["rolloutOperation"] !== undefined) { - body["rolloutOperation"] = g["rolloutOperation"]; - } - for (const key of Object.keys(existing)) { - if ( - key === "fingerprint" || key === "labelFingerprint" || - key === "etag" || key.endsWith("Fingerprint") - ) { - body[key] = existing[key]; - } - } - const result = await updateResource( - BASE_URL, - UPDATE_CONFIG, - params, - body, - GET_CONFIG, - ) as StateData; - const handle = await context.writeResource( - "state", - instanceName, - result, - ); - return { dataHandles: [handle] }; - }, - }, - delete: { - description: "Delete the globalVmExtensionPolicies", - arguments: z.object({ - identifier: z.string().describe( - "The name of the globalVmExtensionPolicies", - ), - }), - execute: async (args: { identifier: string }, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - params["globalVmExtensionPolicy"] = args.identifier; - const { existed } = await deleteResource( - BASE_URL, - DELETE_CONFIG, - params, - ); - const instanceName = (g.name?.toString() ?? args.identifier).replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const handle = await context.writeResource("state", instanceName, { - identifier: args.identifier, - existed, - status: existed ? "deleted" : "not_found", - deletedAt: new Date().toISOString(), - }); - return { dataHandles: [handle] }; - }, - }, - sync: { - description: "Sync globalVmExtensionPolicies state from GCP", - arguments: z.object({}), - execute: async (_args: Record, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const instanceName = (g.name?.toString() ?? "current").replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const content = await context.dataRepository.getContent( - context.modelType, - context.modelId, - instanceName, - ); - if (!content) { - throw new Error("No existing state found - run create or get first"); - } - const existing = JSON.parse(new TextDecoder().decode(content)); - try { - const params: Record = { project: projectId }; - const identifier = existing.name?.toString() ?? g["name"]?.toString(); - if (!identifier) { - throw new Error( - "No identifier found in existing state or globalArgs", - ); - } - params["globalVmExtensionPolicy"] = identifier; - const result = await readResource( - BASE_URL, - GET_CONFIG, - params, - ) as StateData; - const handle = await context.writeResource( - "state", - instanceName, - result, - ); - return { dataHandles: [handle] }; - } catch (error: unknown) { - if (isResourceNotFoundError(error)) { - const handle = await context.writeResource("state", instanceName, { - status: "not_found", - syncedAt: new Date().toISOString(), - }); - return { dataHandles: [handle] }; - } - throw error; - } - }, - }, - }, -}; diff --git a/model/gcp/compute/extensions/models/images.ts b/model/gcp/compute/extensions/models/images.ts index 1ba5dd1ea..c9606e567 100644 --- a/model/gcp/compute/extensions/models/images.ts +++ b/model/gcp/compute/extensions/models/images.ts @@ -204,7 +204,7 @@ const GlobalArgsSchema = z.object({ ), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the image. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the image. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional image params.").optional(), rawDisk: z.object({ @@ -508,7 +508,7 @@ const InputsSchema = z.object({ ).optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the image. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the image. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional image params.").optional(), rawDisk: z.object({ @@ -629,7 +629,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine Images. Registered at `@swamp/gcp/compute/images`. */ export const model = { type: "@swamp/gcp/compute/images", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -691,6 +691,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/instancegroupmanagers.ts b/model/gcp/compute/extensions/models/instancegroupmanagers.ts index 3dd421515..557d07cb3 100644 --- a/model/gcp/compute/extensions/models/instancegroupmanagers.ts +++ b/model/gcp/compute/extensions/models/instancegroupmanagers.ts @@ -447,7 +447,7 @@ const GlobalArgsSchema = z.object({ ).optional(), maxSurge: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -460,7 +460,7 @@ const GlobalArgsSchema = z.object({ ).optional(), maxUnavailable: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -498,7 +498,7 @@ const GlobalArgsSchema = z.object({ ).optional(), targetSize: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -995,7 +995,7 @@ const InputsSchema = z.object({ ).optional(), maxSurge: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -1008,7 +1008,7 @@ const InputsSchema = z.object({ ).optional(), maxUnavailable: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -1046,7 +1046,7 @@ const InputsSchema = z.object({ ).optional(), targetSize: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -1071,7 +1071,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine InstanceGroupManagers. Registered at `@swamp/gcp/compute/instancegroupmanagers`. */ export const model = { type: "@swamp/gcp/compute/instancegroupmanagers", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1133,6 +1133,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/instances.ts b/model/gcp/compute/extensions/models/instances.ts index 36dc3637b..bd01ab3e5 100644 --- a/model/gcp/compute/extensions/models/instances.ts +++ b/model/gcp/compute/extensions/models/instances.ts @@ -298,7 +298,7 @@ const GlobalArgsSchema = z.object({ "Required for each regional disk associated with the instance. Specify the URLs of the zones where the disk should be replicated to. You must provide exactly two replica zones, and one zone must be the same as the instance zone.", ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.string()).describe( "Resource policies applied to this disk for automatic snapshot creations. Specified using the full or partial URL. For instance template, specify only the resource policy name.", @@ -652,7 +652,7 @@ const GlobalArgsSchema = z.object({ 'A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". Range is approximately 10,000 years.', ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional instance params.").optional(), privateIpv6GoogleAccess: z.enum([ @@ -1282,7 +1282,7 @@ const InputsSchema = z.object({ "Required for each regional disk associated with the instance. Specify the URLs of the zones where the disk should be replicated to. You must provide exactly two replica zones, and one zone must be the same as the instance zone.", ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.string()).describe( "Resource policies applied to this disk for automatic snapshot creations. Specified using the full or partial URL. For instance template, specify only the resource policy name.", @@ -1636,7 +1636,7 @@ const InputsSchema = z.object({ 'A Duration represents a fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". Range is approximately 10,000 years.', ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional instance params.").optional(), privateIpv6GoogleAccess: z.enum([ @@ -1817,7 +1817,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine Instances. Registered at `@swamp/gcp/compute/instances`. */ export const model = { type: "@swamp/gcp/compute/instances", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1882,6 +1882,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/instancetemplates.ts b/model/gcp/compute/extensions/models/instancetemplates.ts index 340cc66b4..6f84501f6 100644 --- a/model/gcp/compute/extensions/models/instancetemplates.ts +++ b/model/gcp/compute/extensions/models/instancetemplates.ts @@ -228,7 +228,7 @@ const GlobalArgsSchema = z.object({ "Required for each regional disk associated with the instance. Specify the URLs of the zones where the disk should be replicated to. You must provide exactly two replica zones, and one zone must be the same as the instance zone.", ).optional(), resourceManagerTags: z.record(z.string(), z.unknown()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.unknown()).describe( "Resource policies applied to this disk for automatic snapshot creations. Specified using the full or partial URL. For instance template, specify only the resource policy name.", @@ -536,7 +536,7 @@ const GlobalArgsSchema = z.object({ "Specifies the reservations that this instance can consume from.", ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys must be in the format `tagKeys/{tag_key_id}`, and values are in the format `tagValues/456`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.string()).describe( "Resource policies (names, not URLs) applied to instances created from these properties. Note that for MachineImage, this is not supported yet.", @@ -1060,7 +1060,7 @@ const InputsSchema = z.object({ "Required for each regional disk associated with the instance. Specify the URLs of the zones where the disk should be replicated to. You must provide exactly two replica zones, and one zone must be the same as the instance zone.", ).optional(), resourceManagerTags: z.record(z.string(), z.unknown()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.unknown()).describe( "Resource policies applied to this disk for automatic snapshot creations. Specified using the full or partial URL. For instance template, specify only the resource policy name.", @@ -1368,7 +1368,7 @@ const InputsSchema = z.object({ "Specifies the reservations that this instance can consume from.", ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys must be in the format `tagKeys/{tag_key_id}`, and values are in the format `tagValues/456`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.string()).describe( "Resource policies (names, not URLs) applied to instances created from these properties. Note that for MachineImage, this is not supported yet.", @@ -1527,7 +1527,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine InstanceTemplates. Registered at `@swamp/gcp/compute/instancetemplates`. */ export const model = { type: "@swamp/gcp/compute/instancetemplates", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1589,6 +1589,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/licensecodes.ts b/model/gcp/compute/extensions/models/licensecodes.ts index 9224a0e1d..175471490 100644 --- a/model/gcp/compute/extensions/models/licensecodes.ts +++ b/model/gcp/compute/extensions/models/licensecodes.ts @@ -50,31 +50,18 @@ const GlobalArgsSchema = z.object({ }); const StateSchema = z.object({ - allowedReplacementLicenses: z.array(z.string()).optional(), - appendableToDisk: z.boolean().optional(), creationTimestamp: z.string().optional(), description: z.string().optional(), id: z.string().optional(), - incompatibleLicenses: z.array(z.string()).optional(), kind: z.string().optional(), licenseAlias: z.array(z.object({ description: z.string(), selfLink: z.string(), })).optional(), - minimumRetention: z.object({ - nanos: z.number(), - seconds: z.string(), - }).optional(), - multiTenantOnly: z.boolean().optional(), name: z.string(), - osLicense: z.boolean().optional(), - removableFromDisk: z.boolean().optional(), - requiredCoattachedLicenses: z.array(z.string()).optional(), selfLink: z.string().optional(), - soleTenantOnly: z.boolean().optional(), state: z.string().optional(), transferable: z.boolean().optional(), - updateTimestamp: z.string().optional(), }).passthrough(); type StateData = z.infer; @@ -86,7 +73,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine LicenseCodes. Registered at `@swamp/gcp/compute/licensecodes`. */ export const model = { type: "@swamp/gcp/compute/licensecodes", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -123,6 +110,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/licenses.ts b/model/gcp/compute/extensions/models/licenses.ts index ce1026e0f..a7bf8b552 100644 --- a/model/gcp/compute/extensions/models/licenses.ts +++ b/model/gcp/compute/extensions/models/licenses.ts @@ -148,7 +148,7 @@ const GlobalArgsSchema = z.object({ ).optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the license. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the license. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional license params.").optional(), removableFromDisk: z.boolean().describe( @@ -246,7 +246,7 @@ const InputsSchema = z.object({ ).optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the license. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the license. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional license params.").optional(), removableFromDisk: z.boolean().describe( @@ -277,7 +277,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine Licenses. Registered at `@swamp/gcp/compute/licenses`. */ export const model = { type: "@swamp/gcp/compute/licenses", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -314,6 +314,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/machineimages.ts b/model/gcp/compute/extensions/models/machineimages.ts index 4906796d0..859785af3 100644 --- a/model/gcp/compute/extensions/models/machineimages.ts +++ b/model/gcp/compute/extensions/models/machineimages.ts @@ -230,7 +230,7 @@ const GlobalArgsSchema = z.object({ "Required for each regional disk associated with the instance. Specify the URLs of the zones where the disk should be replicated to. You must provide exactly two replica zones, and one zone must be the same as the instance zone.", ).optional(), resourceManagerTags: z.record(z.string(), z.unknown()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.unknown()).describe( "Resource policies applied to this disk for automatic snapshot creations. Specified using the full or partial URL. For instance template, specify only the resource policy name.", @@ -538,7 +538,7 @@ const GlobalArgsSchema = z.object({ "Specifies the reservations that this instance can consume from.", ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys must be in the format `tagKeys/{tag_key_id}`, and values are in the format `tagValues/456`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.string()).describe( "Resource policies (names, not URLs) applied to instances created from these properties. Note that for MachineImage, this is not supported yet.", @@ -1624,7 +1624,7 @@ const InputsSchema = z.object({ "Required for each regional disk associated with the instance. Specify the URLs of the zones where the disk should be replicated to. You must provide exactly two replica zones, and one zone must be the same as the instance zone.", ).optional(), resourceManagerTags: z.record(z.string(), z.unknown()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.unknown()).describe( "Resource policies applied to this disk for automatic snapshot creations. Specified using the full or partial URL. For instance template, specify only the resource policy name.", @@ -1932,7 +1932,7 @@ const InputsSchema = z.object({ "Specifies the reservations that this instance can consume from.", ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys must be in the format `tagKeys/{tag_key_id}`, and values are in the format `tagValues/456`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.string()).describe( "Resource policies (names, not URLs) applied to instances created from these properties. Note that for MachineImage, this is not supported yet.", @@ -2495,7 +2495,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine MachineImages. Registered at `@swamp/gcp/compute/machineimages`. */ export const model = { type: "@swamp/gcp/compute/machineimages", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -2557,6 +2557,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/networkfirewallpolicies.ts b/model/gcp/compute/extensions/models/networkfirewallpolicies.ts index 14e8a78b8..ee87436ff 100644 --- a/model/gcp/compute/extensions/models/networkfirewallpolicies.ts +++ b/model/gcp/compute/extensions/models/networkfirewallpolicies.ts @@ -281,8 +281,8 @@ const GlobalArgsSchema = z.object({ ).optional(), })).describe("A list of packet mirroring rules that belong to this policy.") .optional(), - policyType: z.enum(["RDMA_ROCE_POLICY", "ULL_POLICY", "VPC_POLICY"]).describe( - "The type of the firewall policy. This field can be one of VPC_POLICY, RDMA_ROCE_POLICY or ULL_POLICY. Note: if not specified then VPC_POLICY will be used.", + policyType: z.enum(["RDMA_ROCE_POLICY", "VPC_POLICY"]).describe( + "The type of the firewall policy. This field can be eitherVPC_POLICY or RDMA_ROCE_POLICY. Note: if not specified then VPC_POLICY will be used.", ).optional(), rules: z.array(z.object({ action: z.string().describe( @@ -722,8 +722,8 @@ const InputsSchema = z.object({ ).optional(), })).describe("A list of packet mirroring rules that belong to this policy.") .optional(), - policyType: z.enum(["RDMA_ROCE_POLICY", "ULL_POLICY", "VPC_POLICY"]).describe( - "The type of the firewall policy. This field can be one of VPC_POLICY, RDMA_ROCE_POLICY or ULL_POLICY. Note: if not specified then VPC_POLICY will be used.", + policyType: z.enum(["RDMA_ROCE_POLICY", "VPC_POLICY"]).describe( + "The type of the firewall policy. This field can be eitherVPC_POLICY or RDMA_ROCE_POLICY. Note: if not specified then VPC_POLICY will be used.", ).optional(), rules: z.array(z.object({ action: z.string().describe( @@ -883,7 +883,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine NetworkFirewallPolicies. Registered at `@swamp/gcp/compute/networkfirewallpolicies`. */ export const model = { type: "@swamp/gcp/compute/networkfirewallpolicies", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -925,6 +925,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/networks.ts b/model/gcp/compute/extensions/models/networks.ts index 4f6a09864..e691db734 100644 --- a/model/gcp/compute/extensions/models/networks.ts +++ b/model/gcp/compute/extensions/models/networks.ts @@ -299,7 +299,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine Networks. Registered at `@swamp/gcp/compute/networks`. */ export const model = { type: "@swamp/gcp/compute/networks", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -336,6 +336,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -631,51 +636,6 @@ export const model = { return { result }; }, }, - cancel_request_remove_peering: { - description: "cancel request remove peering", - arguments: z.object({ - name: z.any().optional(), - }), - execute: async (args: Record, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - const content = await context.dataRepository.getContent( - context.modelType, - context.modelId, - (g.name?.toString() ?? "current").replace(/[\/\\]/g, "_").replace( - /\.\./g, - "_", - ).replace(/\0/g, ""), - ); - if (!content) { - throw new Error("No existing state found - run create or get first"); - } - const existing = JSON.parse(new TextDecoder().decode(content)); - params["network"] = existing["name"]?.toString() ?? - g["name"]?.toString() ?? ""; - const body: Record = {}; - if (args["name"] !== undefined) body["name"] = args["name"]; - const result = await createResource( - BASE_URL, - { - "id": "compute.networks.cancelRequestRemovePeering", - "path": - "projects/{project}/global/networks/{network}/cancelRequestRemovePeering", - "httpMethod": "POST", - "parameterOrder": ["project", "network"], - "parameters": { - "network": { "location": "path", "required": true }, - "project": { "location": "path", "required": true }, - "requestId": { "location": "query" }, - }, - }, - params, - body, - ); - return { result }; - }, - }, get_effective_firewalls: { description: "get effective firewalls", arguments: z.object({}), diff --git a/model/gcp/compute/extensions/models/regionautoscalers.ts b/model/gcp/compute/extensions/models/regionautoscalers.ts index ced940aad..fe2df9d85 100644 --- a/model/gcp/compute/extensions/models/regionautoscalers.ts +++ b/model/gcp/compute/extensions/models/regionautoscalers.ts @@ -183,7 +183,7 @@ const GlobalArgsSchema = z.object({ scaleInControl: z.object({ maxScaledInReplicas: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -224,9 +224,6 @@ const GlobalArgsSchema = z.object({ ).describe( "Scaling schedules defined for an autoscaler. Multiple schedules can be set on an autoscaler, and they can overlap. During overlapping periods the greatest min_required_replicas of all scaling schedules is applied. Up to 128 scaling schedules are allowed.", ).optional(), - stabilizationPeriodSec: z.number().int().describe( - "The number of seconds that autoscaler waits for load stabilization before making scale-in decisions. This is referred to as the [stabilization period](/compute/docs/autoscaler#stabilization_period). This might appear as a delay in scaling in but it is an important mechanism for your application to not have fluctuating size due to short term load fluctuations. The default stabilization period is 600 seconds.", - ).optional(), }).describe("Cloud Autoscaler policy.").optional(), description: z.string().describe( "An optional description of this resource. Provide this property when you create the resource.", @@ -275,7 +272,6 @@ const StateSchema = z.object({ timeWindowSec: z.number(), }), scalingSchedules: z.record(z.string(), z.unknown()), - stabilizationPeriodSec: z.number(), }).optional(), creationTimestamp: z.string().optional(), description: z.string().optional(), @@ -352,7 +348,7 @@ const InputsSchema = z.object({ scaleInControl: z.object({ maxScaledInReplicas: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -393,9 +389,6 @@ const InputsSchema = z.object({ ).describe( "Scaling schedules defined for an autoscaler. Multiple schedules can be set on an autoscaler, and they can overlap. During overlapping periods the greatest min_required_replicas of all scaling schedules is applied. Up to 128 scaling schedules are allowed.", ).optional(), - stabilizationPeriodSec: z.number().int().describe( - "The number of seconds that autoscaler waits for load stabilization before making scale-in decisions. This is referred to as the [stabilization period](/compute/docs/autoscaler#stabilization_period). This might appear as a delay in scaling in but it is an important mechanism for your application to not have fluctuating size due to short term load fluctuations. The default stabilization period is 600 seconds.", - ).optional(), }).describe("Cloud Autoscaler policy.").optional(), description: z.string().describe( "An optional description of this resource. Provide this property when you create the resource.", @@ -418,7 +411,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine RegionAutoscalers. Registered at `@swamp/gcp/compute/regionautoscalers`. */ export const model = { type: "@swamp/gcp/compute/regionautoscalers", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -455,6 +448,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/regioncommitments.ts b/model/gcp/compute/extensions/models/regioncommitments.ts index 958b82b5e..e2b1c7f6c 100644 --- a/model/gcp/compute/extensions/models/regioncommitments.ts +++ b/model/gcp/compute/extensions/models/regioncommitments.ts @@ -452,7 +452,6 @@ const GlobalArgsSchema = z.object({ "GENERAL_PURPOSE_T2D", "GRAPHICS_OPTIMIZED", "GRAPHICS_OPTIMIZED_G4", - "GRAPHICS_OPTIMIZED_G4_VGPU", "MEMORY_OPTIMIZED", "MEMORY_OPTIMIZED_M3", "MEMORY_OPTIMIZED_M4", @@ -469,7 +468,7 @@ const GlobalArgsSchema = z.object({ "STORAGE_OPTIMIZED_Z3", "TYPE_UNSPECIFIED", ]).describe( - "The type of commitment; specifies the machine series for which you want to commit to purchasing resources. The choice of machine series affects the discount rate and the eligible resource types. The type must be one of the following:ACCELERATOR_OPTIMIZED, ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED, COMPUTE_OPTIMIZED_C2D, COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3, GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2, GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED, GRAPHICS_OPTIMIZED_G4,GRAPHICS_OPTIMIZED_G4_VGPU,MEMORY_OPTIMIZED, MEMORY_OPTIMIZED_M3,MEMORY_OPTIMIZED_X4, STORAGE_OPTIMIZED_Z3. For example, type MEMORY_OPTIMIZED specifies a commitment that applies only to eligible resources of memory optimized M1 and M2 machine series. Type GENERAL_PURPOSE specifies a commitment that applies only to eligible resources of general purpose N1 machine series.", + "The type of commitment; specifies the machine series for which you want to commit to purchasing resources. The choice of machine series affects the discount rate and the eligible resource types. The type must be one of the following:ACCELERATOR_OPTIMIZED, ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED, COMPUTE_OPTIMIZED_C2D, COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3, GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2, GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED, GRAPHICS_OPTIMIZED_G4,MEMORY_OPTIMIZED, MEMORY_OPTIMIZED_M3,MEMORY_OPTIMIZED_X4, STORAGE_OPTIMIZED_Z3. For example, type MEMORY_OPTIMIZED specifies a commitment that applies only to eligible resources of memory optimized M1 and M2 machine series. Type GENERAL_PURPOSE specifies a commitment that applies only to eligible resources of general purpose N1 machine series.", ).optional(), requestId: z.string().describe( "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", @@ -954,7 +953,6 @@ const InputsSchema = z.object({ "GENERAL_PURPOSE_T2D", "GRAPHICS_OPTIMIZED", "GRAPHICS_OPTIMIZED_G4", - "GRAPHICS_OPTIMIZED_G4_VGPU", "MEMORY_OPTIMIZED", "MEMORY_OPTIMIZED_M3", "MEMORY_OPTIMIZED_M4", @@ -971,7 +969,7 @@ const InputsSchema = z.object({ "STORAGE_OPTIMIZED_Z3", "TYPE_UNSPECIFIED", ]).describe( - "The type of commitment; specifies the machine series for which you want to commit to purchasing resources. The choice of machine series affects the discount rate and the eligible resource types. The type must be one of the following:ACCELERATOR_OPTIMIZED, ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED, COMPUTE_OPTIMIZED_C2D, COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3, GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2, GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED, GRAPHICS_OPTIMIZED_G4,GRAPHICS_OPTIMIZED_G4_VGPU,MEMORY_OPTIMIZED, MEMORY_OPTIMIZED_M3,MEMORY_OPTIMIZED_X4, STORAGE_OPTIMIZED_Z3. For example, type MEMORY_OPTIMIZED specifies a commitment that applies only to eligible resources of memory optimized M1 and M2 machine series. Type GENERAL_PURPOSE specifies a commitment that applies only to eligible resources of general purpose N1 machine series.", + "The type of commitment; specifies the machine series for which you want to commit to purchasing resources. The choice of machine series affects the discount rate and the eligible resource types. The type must be one of the following:ACCELERATOR_OPTIMIZED, ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED, COMPUTE_OPTIMIZED_C2D, COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3, GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2, GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED, GRAPHICS_OPTIMIZED_G4,MEMORY_OPTIMIZED, MEMORY_OPTIMIZED_M3,MEMORY_OPTIMIZED_X4, STORAGE_OPTIMIZED_Z3. For example, type MEMORY_OPTIMIZED specifies a commitment that applies only to eligible resources of memory optimized M1 and M2 machine series. Type GENERAL_PURPOSE specifies a commitment that applies only to eligible resources of general purpose N1 machine series.", ).optional(), requestId: z.string().describe( "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", @@ -981,7 +979,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine RegionCommitments. Registered at `@swamp/gcp/compute/regioncommitments`. */ export const model = { type: "@swamp/gcp/compute/regioncommitments", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1049,6 +1047,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/regiondisks.ts b/model/gcp/compute/extensions/models/regiondisks.ts index 9ab337e84..073264062 100644 --- a/model/gcp/compute/extensions/models/regiondisks.ts +++ b/model/gcp/compute/extensions/models/regiondisks.ts @@ -229,7 +229,7 @@ const GlobalArgsSchema = z.object({ options: z.string().describe("Internal use only.").optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional disk params.").optional(), physicalBlockSizeBytes: z.string().describe( @@ -515,7 +515,7 @@ const InputsSchema = z.object({ options: z.string().describe("Internal use only.").optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional disk params.").optional(), physicalBlockSizeBytes: z.string().describe( @@ -627,7 +627,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine RegionDisks. Registered at `@swamp/gcp/compute/regiondisks`. */ export const model = { type: "@swamp/gcp/compute/regiondisks", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -689,6 +689,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/regioninstancegroupmanagers.ts b/model/gcp/compute/extensions/models/regioninstancegroupmanagers.ts index d512c5355..583528bed 100644 --- a/model/gcp/compute/extensions/models/regioninstancegroupmanagers.ts +++ b/model/gcp/compute/extensions/models/regioninstancegroupmanagers.ts @@ -450,7 +450,7 @@ const GlobalArgsSchema = z.object({ ).optional(), maxSurge: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -463,7 +463,7 @@ const GlobalArgsSchema = z.object({ ).optional(), maxUnavailable: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -501,7 +501,7 @@ const GlobalArgsSchema = z.object({ ).optional(), targetSize: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -998,7 +998,7 @@ const InputsSchema = z.object({ ).optional(), maxSurge: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -1011,7 +1011,7 @@ const InputsSchema = z.object({ ).optional(), maxUnavailable: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -1049,7 +1049,7 @@ const InputsSchema = z.object({ ).optional(), targetSize: z.object({ calculated: z.number().int().describe( - "Output only. Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", + "Output only. [Output Only] Absolute value of VM instances calculated based on the specific mode. - If the value is fixed, then the calculated value is equal to the fixed value. - If the value is a percent, then the calculated value is percent/100 * targetSize. For example, the calculated value of a 80% of a managed instance group with 150 instances would be (80/100 * 150) = 120 VM instances. If there is a remainder, the number is rounded.", ).optional(), fixed: z.number().int().describe( "Specifies a fixed number of VM instances. This must be a positive integer.", @@ -1071,7 +1071,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine RegionInstanceGroupManagers. Registered at `@swamp/gcp/compute/regioninstancegroupmanagers`. */ export const model = { type: "@swamp/gcp/compute/regioninstancegroupmanagers", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1133,6 +1133,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/regioninstancetemplates.ts b/model/gcp/compute/extensions/models/regioninstancetemplates.ts index 3f18e335c..d82bfaf86 100644 --- a/model/gcp/compute/extensions/models/regioninstancetemplates.ts +++ b/model/gcp/compute/extensions/models/regioninstancetemplates.ts @@ -245,7 +245,7 @@ const GlobalArgsSchema = z.object({ "Required for each regional disk associated with the instance. Specify the URLs of the zones where the disk should be replicated to. You must provide exactly two replica zones, and one zone must be the same as the instance zone.", ).optional(), resourceManagerTags: z.record(z.string(), z.unknown()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.unknown()).describe( "Resource policies applied to this disk for automatic snapshot creations. Specified using the full or partial URL. For instance template, specify only the resource policy name.", @@ -553,7 +553,7 @@ const GlobalArgsSchema = z.object({ "Specifies the reservations that this instance can consume from.", ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys must be in the format `tagKeys/{tag_key_id}`, and values are in the format `tagValues/456`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.string()).describe( "Resource policies (names, not URLs) applied to instances created from these properties. Note that for MachineImage, this is not supported yet.", @@ -1080,7 +1080,7 @@ const InputsSchema = z.object({ "Required for each regional disk associated with the instance. Specify the URLs of the zones where the disk should be replicated to. You must provide exactly two replica zones, and one zone must be the same as the instance zone.", ).optional(), resourceManagerTags: z.record(z.string(), z.unknown()).describe( - "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the disk. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.unknown()).describe( "Resource policies applied to this disk for automatic snapshot creations. Specified using the full or partial URL. For instance template, specify only the resource policy name.", @@ -1388,7 +1388,7 @@ const InputsSchema = z.object({ "Specifies the reservations that this instance can consume from.", ).optional(), resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the instance. Tag keys and values have the same definition as resource manager tags. Keys must be in the format `tagKeys/{tag_key_id}`, and values are in the format `tagValues/456`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), resourcePolicies: z.array(z.string()).describe( "Resource policies (names, not URLs) applied to instances created from these properties. Note that for MachineImage, this is not supported yet.", @@ -1550,7 +1550,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine RegionInstanceTemplates. Registered at `@swamp/gcp/compute/regioninstancetemplates`. */ export const model = { type: "@swamp/gcp/compute/regioninstancetemplates", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1612,6 +1612,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/regionnetworkfirewallpolicies.ts b/model/gcp/compute/extensions/models/regionnetworkfirewallpolicies.ts index cdf6ef352..5365a2cb1 100644 --- a/model/gcp/compute/extensions/models/regionnetworkfirewallpolicies.ts +++ b/model/gcp/compute/extensions/models/regionnetworkfirewallpolicies.ts @@ -304,8 +304,8 @@ const GlobalArgsSchema = z.object({ ).optional(), })).describe("A list of packet mirroring rules that belong to this policy.") .optional(), - policyType: z.enum(["RDMA_ROCE_POLICY", "ULL_POLICY", "VPC_POLICY"]).describe( - "The type of the firewall policy. This field can be one of VPC_POLICY, RDMA_ROCE_POLICY or ULL_POLICY. Note: if not specified then VPC_POLICY will be used.", + policyType: z.enum(["RDMA_ROCE_POLICY", "VPC_POLICY"]).describe( + "The type of the firewall policy. This field can be eitherVPC_POLICY or RDMA_ROCE_POLICY. Note: if not specified then VPC_POLICY will be used.", ).optional(), region: z.string().describe( "Output only. [Output Only] URL of the region where the regional firewall policy resides. This field is not applicable to global firewall policies. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.", @@ -748,8 +748,8 @@ const InputsSchema = z.object({ ).optional(), })).describe("A list of packet mirroring rules that belong to this policy.") .optional(), - policyType: z.enum(["RDMA_ROCE_POLICY", "ULL_POLICY", "VPC_POLICY"]).describe( - "The type of the firewall policy. This field can be one of VPC_POLICY, RDMA_ROCE_POLICY or ULL_POLICY. Note: if not specified then VPC_POLICY will be used.", + policyType: z.enum(["RDMA_ROCE_POLICY", "VPC_POLICY"]).describe( + "The type of the firewall policy. This field can be eitherVPC_POLICY or RDMA_ROCE_POLICY. Note: if not specified then VPC_POLICY will be used.", ).optional(), region: z.string().describe( "Output only. [Output Only] URL of the region where the regional firewall policy resides. This field is not applicable to global firewall policies. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.", @@ -912,7 +912,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine RegionNetworkFirewallPolicies. Registered at `@swamp/gcp/compute/regionnetworkfirewallpolicies`. */ export const model = { type: "@swamp/gcp/compute/regionnetworkfirewallpolicies", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -954,6 +954,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/regionsnapshots.ts b/model/gcp/compute/extensions/models/regionsnapshots.ts index 7fcb76f3a..876a40ed6 100644 --- a/model/gcp/compute/extensions/models/regionsnapshots.ts +++ b/model/gcp/compute/extensions/models/regionsnapshots.ts @@ -126,7 +126,7 @@ const GlobalArgsSchema = z.object({ ).optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the snapshot. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the snapshot. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional snapshot params.").optional(), region: z.string().describe( @@ -296,7 +296,7 @@ const InputsSchema = z.object({ ).optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the snapshot. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the snapshot. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional snapshot params.").optional(), region: z.string().describe( @@ -376,7 +376,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine RegionSnapshots. Registered at `@swamp/gcp/compute/regionsnapshots`. */ export const model = { type: "@swamp/gcp/compute/regionsnapshots", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.23.1", @@ -388,6 +388,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/regionsslpolicies.ts b/model/gcp/compute/extensions/models/regionsslpolicies.ts index c83ae54dc..89e28dc25 100644 --- a/model/gcp/compute/extensions/models/regionsslpolicies.ts +++ b/model/gcp/compute/extensions/models/regionsslpolicies.ts @@ -147,9 +147,6 @@ const GlobalArgsSchema = z.object({ .describe( "Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.", ).optional(), - postQuantumKeyExchange: z.enum(["DEFAULT", "DEFERRED", "ENABLED"]).describe( - "One of DEFAULT, ENABLED, orDEFERRED. Controls whether the load balancer negotiates X25519MLKEM768 key exchange when clients advertise support for it. When set to DEFAULT, or if no SSL Policy is attached to the target proxy, the load balancer disallows X25519MLKEM768 key exchange before October 2026, and allows it afterward. When set to ENABLED, the load balancer allows X25519MLKEM768 key exchange. When set toDEFERRED, the load balancer disallows X25519MLKEM768 key exchange until October 2027, and allows it afterward.", - ).optional(), profile: z.enum([ "COMPATIBLE", "CUSTOM", @@ -177,7 +174,6 @@ const StateSchema = z.object({ kind: z.string().optional(), minTlsVersion: z.string().optional(), name: z.string(), - postQuantumKeyExchange: z.string().optional(), profile: z.string().optional(), region: z.string().optional(), selfLink: z.string().optional(), @@ -210,9 +206,6 @@ const InputsSchema = z.object({ .describe( "Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.", ).optional(), - postQuantumKeyExchange: z.enum(["DEFAULT", "DEFERRED", "ENABLED"]).describe( - "One of DEFAULT, ENABLED, orDEFERRED. Controls whether the load balancer negotiates X25519MLKEM768 key exchange when clients advertise support for it. When set to DEFAULT, or if no SSL Policy is attached to the target proxy, the load balancer disallows X25519MLKEM768 key exchange before October 2026, and allows it afterward. When set to ENABLED, the load balancer allows X25519MLKEM768 key exchange. When set toDEFERRED, the load balancer disallows X25519MLKEM768 key exchange until October 2027, and allows it afterward.", - ).optional(), profile: z.enum([ "COMPATIBLE", "CUSTOM", @@ -233,7 +226,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine RegionSslPolicies. Registered at `@swamp/gcp/compute/regionsslpolicies`. */ export const model = { type: "@swamp/gcp/compute/regionsslpolicies", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -270,6 +263,15 @@ export const model = { description: "Added: postQuantumKeyExchange", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "Removed: postQuantumKeyExchange", + upgradeAttributes: (old: Record) => { + const { postQuantumKeyExchange: _postQuantumKeyExchange, ...rest } = + old; + return rest; + }, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -305,9 +307,6 @@ export const model = { body["minTlsVersion"] = g["minTlsVersion"]; } if (g["name"] !== undefined) body["name"] = g["name"]; - if (g["postQuantumKeyExchange"] !== undefined) { - body["postQuantumKeyExchange"] = g["postQuantumKeyExchange"]; - } if (g["profile"] !== undefined) body["profile"] = g["profile"]; if (g["requestId"] !== undefined) body["requestId"] = g["requestId"]; if (g["name"] !== undefined) params["sslPolicy"] = String(g["name"]); @@ -396,9 +395,6 @@ export const model = { body["minTlsVersion"] = g["minTlsVersion"]; } if (g["name"] !== undefined) body["name"] = g["name"]; - if (g["postQuantumKeyExchange"] !== undefined) { - body["postQuantumKeyExchange"] = g["postQuantumKeyExchange"]; - } if (g["profile"] !== undefined) body["profile"] = g["profile"]; for (const key of Object.keys(existing)) { if ( diff --git a/model/gcp/compute/extensions/models/rolloutplans.ts b/model/gcp/compute/extensions/models/rolloutplans.ts deleted file mode 100644 index cf8cbc695..000000000 --- a/model/gcp/compute/extensions/models/rolloutplans.ts +++ /dev/null @@ -1,450 +0,0 @@ -// Auto-generated extension model for @swamp/gcp/compute/rolloutplans -// Do not edit manually. Re-generate with: deno task generate:gcp - -// deno-lint-ignore-file no-explicit-any - -/** - * Swamp extension model for Google Cloud Compute Engine RolloutPlans. - * - * RolloutPlan resource. A RolloutPlan is the customer-defined strategy to divide a large-scale change into smaller increments, referred to as "waves". Each wave targets a specific portion of the overall affected area and defines criteria that must be met before progressing to the subsequent wave. - * - * Wraps the GCP resource as a swamp model so create, get, update, - * delete, and sync can be driven through `swamp model`. - * - * @module - */ - -import { z } from "npm:zod@4.3.6"; -import { - createResource, - deleteResource, - getProjectId, - isResourceNotFoundError, - readResource, -} from "./_lib/gcp.ts"; - -const BASE_URL = "https://compute.googleapis.com/compute/v1/"; - -const GET_CONFIG = { - "id": "compute.rolloutPlans.get", - "path": "projects/{project}/global/rolloutPlans/{rolloutPlan}", - "httpMethod": "GET", - "parameterOrder": [ - "project", - "rolloutPlan", - ], - "parameters": { - "project": { - "location": "path", - "required": true, - }, - "rolloutPlan": { - "location": "path", - "required": true, - }, - }, -} as const; - -const INSERT_CONFIG = { - "id": "compute.rolloutPlans.insert", - "path": "projects/{project}/global/rolloutPlans", - "httpMethod": "POST", - "parameterOrder": [ - "project", - ], - "parameters": { - "project": { - "location": "path", - "required": true, - }, - "requestId": { - "location": "query", - }, - }, -} as const; - -const DELETE_CONFIG = { - "id": "compute.rolloutPlans.delete", - "path": "projects/{project}/global/rolloutPlans/{rolloutPlan}", - "httpMethod": "DELETE", - "parameterOrder": [ - "project", - "rolloutPlan", - ], - "parameters": { - "project": { - "location": "path", - "required": true, - }, - "requestId": { - "location": "query", - }, - "rolloutPlan": { - "location": "path", - "required": true, - }, - }, -} as const; - -const GlobalArgsSchema = z.object({ - description: z.string().describe( - "An optional description of this resource. Provide this property when you create the resource.", - ).optional(), - locationScope: z.enum(["LOCATION_SCOPE_UNSPECIFIED", "REGIONAL", "ZONAL"]) - .describe( - "The location scope of the rollout plan. If not specified, the location scope is considered as ZONAL.", - ).optional(), - name: z.string().regex(new RegExp("[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?")) - .describe( - "Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply withRFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.", - ), - waves: z.array(z.object({ - displayName: z.string().describe( - "Optional. The display name of this wave of the rollout plan.", - ).optional(), - number: z.string().describe("Output only. The wave number.").optional(), - orchestrationOptions: z.object({ - delays: z.array(z.object({ - delimiter: z.unknown().describe( - "Optional. Controls whether the delay should only be added between batches of projects corresponding to different locations, or also between batches of projects corresponding to the same location. Must be set to DELIMITER_UNSPECIFIED if no delay is to be added.", - ).optional(), - duration: z.unknown().describe( - "Optional. The duration of the delay, if any, to be added between batches of projects. A zero duration corresponds to no delay.", - ).optional(), - type: z.unknown().describe( - "Optional. Controls whether the specified duration is to be added at the end of each batch, or if the total processing time for each batch will be padded if needed to meet the specified duration. Must be set to TYPE_UNSPECIFIED if no delay is to be added.", - ).optional(), - })).describe( - "Optional. Delays, if any, to be added between batches of projects. We allow multiple Delays to be specified, letting users set separate delays between batches of projects corresponding to different locations and batches of projects corresponding to the same location.", - ).optional(), - maxConcurrentLocations: z.string().describe( - "Optional. Maximum number of locations to be orchestrated in parallel.", - ).optional(), - maxConcurrentResourcesPerLocation: z.string().describe( - "Optional. Maximum number of resources to be orchestrated per location in parallel.", - ).optional(), - }).describe( - "Options to control the pace of orchestration of a wave. These options are required only if the resource being rolled out follows the Orchestrated pattern.", - ).optional(), - selectors: z.array(z.object({ - locationSelector: z.object({ - includedLocations: z.unknown().describe( - 'Optional. Example: "us-central1-a"', - ).optional(), - }).describe("Roll out to resources by location.").optional(), - resourceHierarchySelector: z.object({ - includedFolders: z.unknown().describe( - 'Optional. Format: "folders/{folder_id}"', - ).optional(), - includedOrganizations: z.unknown().describe( - 'Optional. Format: "organizations/{organization_id}"', - ).optional(), - includedProjects: z.unknown().describe( - 'Optional. Format: "projects/{project_id}"', - ).optional(), - }).describe( - "Roll out to resources by Cloud Resource Manager resource hierarchy nodes such as projects, folders, orgs.", - ).optional(), - })).describe( - "Required. The selectors for this wave. There is a logical AND between each selector defined in a wave, so a resource must satisfy the criteria of *all* the specified selectors to be in scope for the wave.", - ).optional(), - validation: z.object({ - timeBasedValidationMetadata: z.object({ - waitDuration: z.string().describe( - "Optional. The duration that the system waits in between waves. This wait starts after all changes in the wave are rolled out.", - ).optional(), - }).describe('Metadata required if type = "time".').optional(), - type: z.string().describe( - 'Required. The type of the validation. If a type of validation is associated with a metadata object, the appropriate metadata field mapping to the validation type must be provided in the validation message. Possible values are in quotes below alongside an explanation: "manual": The system waits for an end-user approval API before progressing to the next wave. "time": The system waits for a user specified duration before progressing to the next wave. TimeBasedValidation must be provided.', - ).optional(), - }).describe( - "The validation to be performed before progressing to the next wave.", - ).optional(), - })).describe("Required. The waves included in this rollout plan.").optional(), - requestId: z.string().describe( - "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", - ).optional(), -}); - -const StateSchema = z.object({ - creationTimestamp: z.string().optional(), - description: z.string().optional(), - id: z.string().optional(), - kind: z.string().optional(), - locationScope: z.string().optional(), - name: z.string(), - selfLink: z.string().optional(), - selfLinkWithId: z.string().optional(), - waves: z.array(z.object({ - displayName: z.string(), - number: z.string(), - orchestrationOptions: z.object({ - delays: z.array(z.object({ - delimiter: z.unknown(), - duration: z.unknown(), - type: z.unknown(), - })), - maxConcurrentLocations: z.string(), - maxConcurrentResourcesPerLocation: z.string(), - }), - selectors: z.array(z.object({ - locationSelector: z.object({ - includedLocations: z.unknown(), - }), - resourceHierarchySelector: z.object({ - includedFolders: z.unknown(), - includedOrganizations: z.unknown(), - includedProjects: z.unknown(), - }), - })), - validation: z.object({ - timeBasedValidationMetadata: z.object({ - waitDuration: z.string(), - }), - type: z.string(), - }), - })).optional(), -}).passthrough(); - -type StateData = z.infer; - -const InputsSchema = z.object({ - description: z.string().describe( - "An optional description of this resource. Provide this property when you create the resource.", - ).optional(), - locationScope: z.enum(["LOCATION_SCOPE_UNSPECIFIED", "REGIONAL", "ZONAL"]) - .describe( - "The location scope of the rollout plan. If not specified, the location scope is considered as ZONAL.", - ).optional(), - name: z.string().regex(new RegExp("[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?")) - .describe( - "Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply withRFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.", - ).optional(), - waves: z.array(z.object({ - displayName: z.string().describe( - "Optional. The display name of this wave of the rollout plan.", - ).optional(), - number: z.string().describe("Output only. The wave number.").optional(), - orchestrationOptions: z.object({ - delays: z.array(z.object({ - delimiter: z.unknown().describe( - "Optional. Controls whether the delay should only be added between batches of projects corresponding to different locations, or also between batches of projects corresponding to the same location. Must be set to DELIMITER_UNSPECIFIED if no delay is to be added.", - ).optional(), - duration: z.unknown().describe( - "Optional. The duration of the delay, if any, to be added between batches of projects. A zero duration corresponds to no delay.", - ).optional(), - type: z.unknown().describe( - "Optional. Controls whether the specified duration is to be added at the end of each batch, or if the total processing time for each batch will be padded if needed to meet the specified duration. Must be set to TYPE_UNSPECIFIED if no delay is to be added.", - ).optional(), - })).describe( - "Optional. Delays, if any, to be added between batches of projects. We allow multiple Delays to be specified, letting users set separate delays between batches of projects corresponding to different locations and batches of projects corresponding to the same location.", - ).optional(), - maxConcurrentLocations: z.string().describe( - "Optional. Maximum number of locations to be orchestrated in parallel.", - ).optional(), - maxConcurrentResourcesPerLocation: z.string().describe( - "Optional. Maximum number of resources to be orchestrated per location in parallel.", - ).optional(), - }).describe( - "Options to control the pace of orchestration of a wave. These options are required only if the resource being rolled out follows the Orchestrated pattern.", - ).optional(), - selectors: z.array(z.object({ - locationSelector: z.object({ - includedLocations: z.unknown().describe( - 'Optional. Example: "us-central1-a"', - ).optional(), - }).describe("Roll out to resources by location.").optional(), - resourceHierarchySelector: z.object({ - includedFolders: z.unknown().describe( - 'Optional. Format: "folders/{folder_id}"', - ).optional(), - includedOrganizations: z.unknown().describe( - 'Optional. Format: "organizations/{organization_id}"', - ).optional(), - includedProjects: z.unknown().describe( - 'Optional. Format: "projects/{project_id}"', - ).optional(), - }).describe( - "Roll out to resources by Cloud Resource Manager resource hierarchy nodes such as projects, folders, orgs.", - ).optional(), - })).describe( - "Required. The selectors for this wave. There is a logical AND between each selector defined in a wave, so a resource must satisfy the criteria of *all* the specified selectors to be in scope for the wave.", - ).optional(), - validation: z.object({ - timeBasedValidationMetadata: z.object({ - waitDuration: z.string().describe( - "Optional. The duration that the system waits in between waves. This wait starts after all changes in the wave are rolled out.", - ).optional(), - }).describe('Metadata required if type = "time".').optional(), - type: z.string().describe( - 'Required. The type of the validation. If a type of validation is associated with a metadata object, the appropriate metadata field mapping to the validation type must be provided in the validation message. Possible values are in quotes below alongside an explanation: "manual": The system waits for an end-user approval API before progressing to the next wave. "time": The system waits for a user specified duration before progressing to the next wave. TimeBasedValidation must be provided.', - ).optional(), - }).describe( - "The validation to be performed before progressing to the next wave.", - ).optional(), - })).describe("Required. The waves included in this rollout plan.").optional(), - requestId: z.string().describe( - "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).", - ).optional(), -}); - -/** Swamp extension model for Google Cloud Compute Engine RolloutPlans. Registered at `@swamp/gcp/compute/rolloutplans`. */ -export const model = { - type: "@swamp/gcp/compute/rolloutplans", - version: "2026.05.01.1", - globalArguments: GlobalArgsSchema, - inputsSchema: InputsSchema, - resources: { - state: { - description: - "RolloutPlan resource. A RolloutPlan is the customer-defined strategy to divid...", - schema: StateSchema, - lifetime: "infinite", - garbageCollection: 10, - }, - }, - methods: { - create: { - description: "Create a rolloutPlans", - arguments: z.object({}), - execute: async (_args: Record, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - const body: Record = {}; - if (g["description"] !== undefined) { - body["description"] = g["description"]; - } - if (g["locationScope"] !== undefined) { - body["locationScope"] = g["locationScope"]; - } - if (g["name"] !== undefined) body["name"] = g["name"]; - if (g["waves"] !== undefined) body["waves"] = g["waves"]; - if (g["requestId"] !== undefined) body["requestId"] = g["requestId"]; - if (g["name"] !== undefined) params["rolloutPlan"] = String(g["name"]); - const result = await createResource( - BASE_URL, - INSERT_CONFIG, - params, - body, - GET_CONFIG, - ) as StateData; - const instanceName = ((result.name ?? g.name)?.toString() ?? "current") - .replace(/[\/\\]/g, "_").replace(/\.\./g, "_").replace(/\0/g, ""); - const handle = await context.writeResource( - "state", - instanceName, - result, - ); - return { dataHandles: [handle] }; - }, - }, - get: { - description: "Get a rolloutPlans", - arguments: z.object({ - identifier: z.string().describe("The name of the rolloutPlans"), - }), - execute: async (args: { identifier: string }, context: any) => { - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - const g = context.globalArgs; - params["rolloutPlan"] = args.identifier; - const result = await readResource( - BASE_URL, - GET_CONFIG, - params, - ) as StateData; - const instanceName = - ((result.name ?? g.name)?.toString() ?? args.identifier).replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const handle = await context.writeResource( - "state", - instanceName, - result, - ); - return { dataHandles: [handle] }; - }, - }, - delete: { - description: "Delete the rolloutPlans", - arguments: z.object({ - identifier: z.string().describe("The name of the rolloutPlans"), - }), - execute: async (args: { identifier: string }, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - params["rolloutPlan"] = args.identifier; - const { existed } = await deleteResource( - BASE_URL, - DELETE_CONFIG, - params, - ); - const instanceName = (g.name?.toString() ?? args.identifier).replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const handle = await context.writeResource("state", instanceName, { - identifier: args.identifier, - existed, - status: existed ? "deleted" : "not_found", - deletedAt: new Date().toISOString(), - }); - return { dataHandles: [handle] }; - }, - }, - sync: { - description: "Sync rolloutPlans state from GCP", - arguments: z.object({}), - execute: async (_args: Record, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const instanceName = (g.name?.toString() ?? "current").replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const content = await context.dataRepository.getContent( - context.modelType, - context.modelId, - instanceName, - ); - if (!content) { - throw new Error("No existing state found - run create or get first"); - } - const existing = JSON.parse(new TextDecoder().decode(content)); - try { - const params: Record = { project: projectId }; - const identifier = existing.name?.toString() ?? g["name"]?.toString(); - if (!identifier) { - throw new Error( - "No identifier found in existing state or globalArgs", - ); - } - params["rolloutPlan"] = identifier; - const result = await readResource( - BASE_URL, - GET_CONFIG, - params, - ) as StateData; - const handle = await context.writeResource( - "state", - instanceName, - result, - ); - return { dataHandles: [handle] }; - } catch (error: unknown) { - if (isResourceNotFoundError(error)) { - const handle = await context.writeResource("state", instanceName, { - status: "not_found", - syncedAt: new Date().toISOString(), - }); - return { dataHandles: [handle] }; - } - throw error; - } - }, - }, - }, -}; diff --git a/model/gcp/compute/extensions/models/rollouts.ts b/model/gcp/compute/extensions/models/rollouts.ts deleted file mode 100644 index e7b098c19..000000000 --- a/model/gcp/compute/extensions/models/rollouts.ts +++ /dev/null @@ -1,282 +0,0 @@ -// Auto-generated extension model for @swamp/gcp/compute/rollouts -// Do not edit manually. Re-generate with: deno task generate:gcp - -// deno-lint-ignore-file no-explicit-any - -/** - * Swamp extension model for Google Cloud Compute Engine Rollouts. - * - * Rollout resource. A Rollout is a specific instance of a RolloutPlan. It represents a single execution of a strategy to roll out a specific resource. It also provides APIs to interact with the rollout. - * - * Wraps the GCP resource as a swamp model so create, get, update, - * delete, and sync can be driven through `swamp model`. - * - * @module - */ - -import { z } from "npm:zod@4.3.6"; -import { - createResource, - deleteResource, - getProjectId, - isResourceNotFoundError, - readResource, -} from "./_lib/gcp.ts"; - -const BASE_URL = "https://compute.googleapis.com/compute/v1/"; - -const GET_CONFIG = { - "id": "compute.rollouts.get", - "path": "projects/{project}/global/rollouts/{rollout}", - "httpMethod": "GET", - "parameterOrder": [ - "project", - "rollout", - ], - "parameters": { - "project": { - "location": "path", - "required": true, - }, - "rollout": { - "location": "path", - "required": true, - }, - }, -} as const; - -const DELETE_CONFIG = { - "id": "compute.rollouts.delete", - "path": "projects/{project}/global/rollouts/{rollout}", - "httpMethod": "DELETE", - "parameterOrder": [ - "project", - "rollout", - ], - "parameters": { - "project": { - "location": "path", - "required": true, - }, - "requestId": { - "location": "query", - }, - "rollout": { - "location": "path", - "required": true, - }, - }, -} as const; - -const GlobalArgsSchema = z.object({ - name: z.string().describe( - "Instance name for this resource (used as the unique identifier in the factory pattern)", - ), -}); - -const StateSchema = z.object({ - cancellationTime: z.string().optional(), - completionTime: z.string().optional(), - creationTimestamp: z.string().optional(), - currentWaveNumber: z.string().optional(), - description: z.string().optional(), - etag: z.string().optional(), - id: z.string().optional(), - kind: z.string().optional(), - name: z.string(), - rolloutEntity: z.object({ - orchestratedEntity: z.object({ - conflictBehavior: z.string(), - orchestrationAction: z.string(), - orchestrationSource: z.string(), - }), - }).optional(), - rolloutPlan: z.string().optional(), - selfLink: z.string().optional(), - selfLinkWithId: z.string().optional(), - state: z.string().optional(), - waveDetails: z.array(z.object({ - orchestratedWaveDetails: z.object({ - completedResourcesCount: z.string(), - estimatedCompletionTime: z.string(), - estimatedTotalResourcesCount: z.string(), - failedLocations: z.array(z.string()), - failedResourcesCount: z.string(), - locationStatus: z.record(z.string(), z.unknown()), - }), - waveDisplayName: z.string(), - waveNumber: z.string(), - })).optional(), -}).passthrough(); - -type StateData = z.infer; - -const InputsSchema = z.object({ - name: z.string().optional(), -}); - -/** Swamp extension model for Google Cloud Compute Engine Rollouts. Registered at `@swamp/gcp/compute/rollouts`. */ -export const model = { - type: "@swamp/gcp/compute/rollouts", - version: "2026.05.01.1", - globalArguments: GlobalArgsSchema, - inputsSchema: InputsSchema, - resources: { - state: { - description: - "Rollout resource. A Rollout is a specific instance of a RolloutPlan. It repre...", - schema: StateSchema, - lifetime: "infinite", - garbageCollection: 10, - }, - }, - methods: { - get: { - description: "Get a rollouts", - arguments: z.object({ - identifier: z.string().describe("The name of the rollouts"), - }), - execute: async (args: { identifier: string }, context: any) => { - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - const g = context.globalArgs; - params["rollout"] = args.identifier; - const result = await readResource( - BASE_URL, - GET_CONFIG, - params, - ) as StateData; - const instanceName = (g.name?.toString() ?? args.identifier).replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const handle = await context.writeResource( - "state", - instanceName, - result, - ); - return { dataHandles: [handle] }; - }, - }, - delete: { - description: "Delete the rollouts", - arguments: z.object({ - identifier: z.string().describe("The name of the rollouts"), - }), - execute: async (args: { identifier: string }, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - params["rollout"] = args.identifier; - const { existed } = await deleteResource( - BASE_URL, - DELETE_CONFIG, - params, - ); - const instanceName = (g.name?.toString() ?? args.identifier).replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const handle = await context.writeResource("state", instanceName, { - identifier: args.identifier, - existed, - status: existed ? "deleted" : "not_found", - deletedAt: new Date().toISOString(), - }); - return { dataHandles: [handle] }; - }, - }, - sync: { - description: "Sync rollouts state from GCP", - arguments: z.object({}), - execute: async (_args: Record, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const instanceName = (g.name?.toString() ?? "current").replace( - /[\/\\]/g, - "_", - ).replace(/\.\./g, "_").replace(/\0/g, ""); - const content = await context.dataRepository.getContent( - context.modelType, - context.modelId, - instanceName, - ); - if (!content) { - throw new Error("No existing state found - run create or get first"); - } - const existing = JSON.parse(new TextDecoder().decode(content)); - try { - const params: Record = { project: projectId }; - const identifier = existing.name?.toString() ?? g["name"]?.toString(); - if (!identifier) { - throw new Error( - "No identifier found in existing state or globalArgs", - ); - } - params["rollout"] = identifier; - const result = await readResource( - BASE_URL, - GET_CONFIG, - params, - ) as StateData; - const handle = await context.writeResource( - "state", - instanceName, - result, - ); - return { dataHandles: [handle] }; - } catch (error: unknown) { - if (isResourceNotFoundError(error)) { - const handle = await context.writeResource("state", instanceName, { - status: "not_found", - syncedAt: new Date().toISOString(), - }); - return { dataHandles: [handle] }; - } - throw error; - } - }, - }, - cancel: { - description: "cancel", - arguments: z.object({}), - execute: async (_args: Record, context: any) => { - const g = context.globalArgs; - const projectId = await getProjectId(); - const params: Record = { project: projectId }; - const content = await context.dataRepository.getContent( - context.modelType, - context.modelId, - (g.name?.toString() ?? "current").replace(/[\/\\]/g, "_").replace( - /\.\./g, - "_", - ).replace(/\0/g, ""), - ); - if (!content) { - throw new Error("No existing state found - run create or get first"); - } - const existing = JSON.parse(new TextDecoder().decode(content)); - params["rollout"] = existing["name"]?.toString() ?? - g["name"]?.toString() ?? ""; - const result = await createResource( - BASE_URL, - { - "id": "compute.rollouts.cancel", - "path": "projects/{project}/global/rollouts/{rollout}", - "httpMethod": "PATCH", - "parameterOrder": ["project", "rollout"], - "parameters": { - "project": { "location": "path", "required": true }, - "requestId": { "location": "query" }, - "rollback": { "location": "query" }, - "rollout": { "location": "path", "required": true }, - }, - }, - params, - {}, - ); - return { result }; - }, - }, - }, -}; diff --git a/model/gcp/compute/extensions/models/snapshots.ts b/model/gcp/compute/extensions/models/snapshots.ts index 20c136db2..bb4bf98df 100644 --- a/model/gcp/compute/extensions/models/snapshots.ts +++ b/model/gcp/compute/extensions/models/snapshots.ts @@ -111,7 +111,7 @@ const GlobalArgsSchema = z.object({ ), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the snapshot. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the snapshot. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional snapshot params.").optional(), snapshotEncryptionKey: z.object({ @@ -278,7 +278,7 @@ const InputsSchema = z.object({ ).optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the snapshot. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the snapshot. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional snapshot params.").optional(), snapshotEncryptionKey: z.object({ @@ -355,7 +355,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine Snapshots. Registered at `@swamp/gcp/compute/snapshots`. */ export const model = { type: "@swamp/gcp/compute/snapshots", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -417,6 +417,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/extensions/models/sslpolicies.ts b/model/gcp/compute/extensions/models/sslpolicies.ts index 85ae3f453..552d5c11b 100644 --- a/model/gcp/compute/extensions/models/sslpolicies.ts +++ b/model/gcp/compute/extensions/models/sslpolicies.ts @@ -127,9 +127,6 @@ const GlobalArgsSchema = z.object({ .describe( "Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.", ).optional(), - postQuantumKeyExchange: z.enum(["DEFAULT", "DEFERRED", "ENABLED"]).describe( - "One of DEFAULT, ENABLED, orDEFERRED. Controls whether the load balancer negotiates X25519MLKEM768 key exchange when clients advertise support for it. When set to DEFAULT, or if no SSL Policy is attached to the target proxy, the load balancer disallows X25519MLKEM768 key exchange before October 2026, and allows it afterward. When set to ENABLED, the load balancer allows X25519MLKEM768 key exchange. When set toDEFERRED, the load balancer disallows X25519MLKEM768 key exchange until October 2027, and allows it afterward.", - ).optional(), profile: z.enum([ "COMPATIBLE", "CUSTOM", @@ -154,7 +151,6 @@ const StateSchema = z.object({ kind: z.string().optional(), minTlsVersion: z.string().optional(), name: z.string(), - postQuantumKeyExchange: z.string().optional(), profile: z.string().optional(), region: z.string().optional(), selfLink: z.string().optional(), @@ -187,9 +183,6 @@ const InputsSchema = z.object({ .describe( "Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.", ).optional(), - postQuantumKeyExchange: z.enum(["DEFAULT", "DEFERRED", "ENABLED"]).describe( - "One of DEFAULT, ENABLED, orDEFERRED. Controls whether the load balancer negotiates X25519MLKEM768 key exchange when clients advertise support for it. When set to DEFAULT, or if no SSL Policy is attached to the target proxy, the load balancer disallows X25519MLKEM768 key exchange before October 2026, and allows it afterward. When set to ENABLED, the load balancer allows X25519MLKEM768 key exchange. When set toDEFERRED, the load balancer disallows X25519MLKEM768 key exchange until October 2027, and allows it afterward.", - ).optional(), profile: z.enum([ "COMPATIBLE", "CUSTOM", @@ -207,7 +200,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine SslPolicies. Registered at `@swamp/gcp/compute/sslpolicies`. */ export const model = { type: "@swamp/gcp/compute/sslpolicies", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -244,6 +237,15 @@ export const model = { description: "Added: postQuantumKeyExchange", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "Removed: postQuantumKeyExchange", + upgradeAttributes: (old: Record) => { + const { postQuantumKeyExchange: _postQuantumKeyExchange, ...rest } = + old; + return rest; + }, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -278,9 +280,6 @@ export const model = { body["minTlsVersion"] = g["minTlsVersion"]; } if (g["name"] !== undefined) body["name"] = g["name"]; - if (g["postQuantumKeyExchange"] !== undefined) { - body["postQuantumKeyExchange"] = g["postQuantumKeyExchange"]; - } if (g["profile"] !== undefined) body["profile"] = g["profile"]; if (g["requestId"] !== undefined) body["requestId"] = g["requestId"]; if (g["name"] !== undefined) params["sslPolicy"] = String(g["name"]); @@ -364,9 +363,6 @@ export const model = { body["minTlsVersion"] = g["minTlsVersion"]; } if (g["name"] !== undefined) body["name"] = g["name"]; - if (g["postQuantumKeyExchange"] !== undefined) { - body["postQuantumKeyExchange"] = g["postQuantumKeyExchange"]; - } if (g["profile"] !== undefined) body["profile"] = g["profile"]; for (const key of Object.keys(existing)) { if ( diff --git a/model/gcp/compute/extensions/models/storagepools.ts b/model/gcp/compute/extensions/models/storagepools.ts index 9de690868..c0a7fa6f6 100644 --- a/model/gcp/compute/extensions/models/storagepools.ts +++ b/model/gcp/compute/extensions/models/storagepools.ts @@ -162,7 +162,7 @@ const GlobalArgsSchema = z.object({ ), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the storage pool. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the storage pool. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional storage pool params.").optional(), performanceProvisioningType: z.enum(["ADVANCED", "STANDARD", "UNSPECIFIED"]) @@ -278,7 +278,7 @@ const InputsSchema = z.object({ ).optional(), params: z.object({ resourceManagerTags: z.record(z.string(), z.string()).describe( - "Input only. Resource manager tags to be bound to the storage pool. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/{tag_value_id}` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", + "Input only. Resource manager tags to be bound to the storage pool. Tag keys and values have the same definition as resource manager tags. Keys and values can be either in numeric format, such as `tagKeys/{tag_key_id}` and `tagValues/456` or in namespaced format such as `{org_id|project_id}/{tag_key_short_name}` and `{tag_value_short_name}`. The field is ignored (both PUT & PATCH) when empty.", ).optional(), }).describe("Additional storage pool params.").optional(), performanceProvisioningType: z.enum(["ADVANCED", "STANDARD", "UNSPECIFIED"]) @@ -306,7 +306,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Compute Engine StoragePools. Registered at `@swamp/gcp/compute/storagepools`. */ export const model = { type: "@swamp/gcp/compute/storagepools", - version: "2026.05.01.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -343,6 +343,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/compute/manifest.yaml b/model/gcp/compute/manifest.yaml index 17b4d61a8..cbdfa2de1 100644 --- a/model/gcp/compute/manifest.yaml +++ b/model/gcp/compute/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/compute" -version: "2026.05.01.1" +version: "2026.05.04.1" description: "Google Cloud compute infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - compute - cloud - infrastructure +releaseNotes: | + - Updated: autoscalers, disks, firewallpolicies, images, instancegroupmanagers, instancetemplates, instances, licensecodes, licenses, machineimages, networkfirewallpolicies, networks, regionautoscalers, regioncommitments, regiondisks, regioninstancegroupmanagers, regioninstancetemplates, regionnetworkfirewallpolicies, regionsnapshots, regionsslpolicies, snapshots, sslpolicies, storagepools models: - acceleratortypes.ts - addresses.ts @@ -28,7 +30,6 @@ models: - globalforwardingrules.ts - globalnetworkendpointgroups.ts - globalpublicdelegatedprefixes.ts - - globalvmextensionpolicies.ts - healthchecks.ts - httphealthchecks.ts - httpshealthchecks.ts @@ -103,8 +104,6 @@ models: - reservationslots.ts - reservationsubblocks.ts - resourcepolicies.ts - - rolloutplans.ts - - rollouts.ts - routers.ts - routes.ts - securitypolicies.ts diff --git a/model/gcp/connectors/manifest.yaml b/model/gcp/connectors/manifest.yaml index cbed4d24c..56d9bf050 100644 --- a/model/gcp/connectors/manifest.yaml +++ b/model/gcp/connectors/manifest.yaml @@ -10,8 +10,6 @@ labels: - connectors - cloud - infrastructure -releaseNotes: | - - Updated: connections_actions, connections_entitytypes, connections_tools models: - connections_actions.ts - connections_entitytypes.ts diff --git a/model/gcp/containeranalysis/manifest.yaml b/model/gcp/containeranalysis/manifest.yaml index 28e44f3e3..bb8e9a704 100644 --- a/model/gcp/containeranalysis/manifest.yaml +++ b/model/gcp/containeranalysis/manifest.yaml @@ -10,8 +10,6 @@ labels: - containeranalysis - cloud - infrastructure -releaseNotes: | - - Updated: notes, notes_occurrences, occurrences models: - notes.ts - notes_occurrences.ts diff --git a/model/gcp/firestore/extensions/models/databases.ts b/model/gcp/firestore/extensions/models/databases.ts index 154f129ed..132754384 100644 --- a/model/gcp/firestore/extensions/models/databases.ts +++ b/model/gcp/firestore/extensions/models/databases.ts @@ -123,7 +123,7 @@ const GlobalArgsSchema = z.object({ "PESSIMISTIC", "OPTIMISTIC_WITH_ENTITY_GROUPS", ]).describe( - "The default concurrency control mode to use for this database. If unspecified in a CreateDatabase request, this will default based on the database edition: Optimistic for Enterprise and Pessimistic for all other databases. While transactions can explicitly specify their own concurrency mode, this setting defines the default behavior when left unspecified. Important: This database-level setting is not respected for Firestore with MongoDB compatibility. All transactions through the MongoDB compatibility layer will use optimistic concurrency control, regardless of this setting.", + "The concurrency control mode to use for this database. If unspecified in a CreateDatabase request, this will default based on the database edition: Optimistic for Enterprise and Pessimistic for all other databases.", ).optional(), databaseEdition: z.enum([ "DATABASE_EDITION_UNSPECIFIED", @@ -258,7 +258,7 @@ const InputsSchema = z.object({ "PESSIMISTIC", "OPTIMISTIC_WITH_ENTITY_GROUPS", ]).describe( - "The default concurrency control mode to use for this database. If unspecified in a CreateDatabase request, this will default based on the database edition: Optimistic for Enterprise and Pessimistic for all other databases. While transactions can explicitly specify their own concurrency mode, this setting defines the default behavior when left unspecified. Important: This database-level setting is not respected for Firestore with MongoDB compatibility. All transactions through the MongoDB compatibility layer will use optimistic concurrency control, regardless of this setting.", + "The concurrency control mode to use for this database. If unspecified in a CreateDatabase request, this will default based on the database edition: Optimistic for Enterprise and Pessimistic for all other databases.", ).optional(), databaseEdition: z.enum([ "DATABASE_EDITION_UNSPECIFIED", @@ -336,7 +336,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Firestore Databases. Registered at `@swamp/gcp/firestore/databases`. */ export const model = { type: "@swamp/gcp/firestore/databases", - version: "2026.05.02.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -373,6 +373,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/firestore/manifest.yaml b/model/gcp/firestore/manifest.yaml index 864851efa..0c61c51f1 100644 --- a/model/gcp/firestore/manifest.yaml +++ b/model/gcp/firestore/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/firestore" -version: "2026.05.02.1" +version: "2026.05.04.1" description: "Google Cloud firestore infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: diff --git a/model/gcp/health/manifest.yaml b/model/gcp/health/manifest.yaml index b5726786f..344ba2157 100644 --- a/model/gcp/health/manifest.yaml +++ b/model/gcp/health/manifest.yaml @@ -10,8 +10,6 @@ labels: - health - cloud - infrastructure -releaseNotes: | - - Updated: users_datatypes_datapoints models: - subscribers.ts - users_datatypes_datapoints.ts diff --git a/model/gcp/networkservices/extensions/models/httproutes.ts b/model/gcp/networkservices/extensions/models/httproutes.ts index 72f2237f2..43250fd6f 100644 --- a/model/gcp/networkservices/extensions/models/httproutes.ts +++ b/model/gcp/networkservices/extensions/models/httproutes.ts @@ -61,6 +61,9 @@ const INSERT_CONFIG = { "location": "path", "required": true, }, + "requestId": { + "location": "query", + }, }, } as const; @@ -338,6 +341,8 @@ const GlobalArgsSchema = z.object({ httpRouteId: z.string().describe( "Required. Short name of the HttpRoute resource to be created.", ).optional(), + requestId: z.string().describe("Optional. Idempotent request UUID.") + .optional(), location: z.string().describe( "The location for this resource (e.g., 'us', 'us-central1', 'europe-west1')", ).optional(), @@ -683,6 +688,8 @@ const InputsSchema = z.object({ httpRouteId: z.string().describe( "Required. Short name of the HttpRoute resource to be created.", ).optional(), + requestId: z.string().describe("Optional. Idempotent request UUID.") + .optional(), location: z.string().describe( "The location for this resource (e.g., 'us', 'us-central1', 'europe-west1')", ).optional(), @@ -691,7 +698,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Network Services HttpRoutes. Registered at `@swamp/gcp/networkservices/httproutes`. */ export const model = { type: "@swamp/gcp/networkservices/httproutes", - version: "2026.04.23.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -728,6 +735,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "Added: requestId", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -762,6 +774,7 @@ export const model = { if (g["httpRouteId"] !== undefined) { body["httpRouteId"] = g["httpRouteId"]; } + if (g["requestId"] !== undefined) body["requestId"] = g["requestId"]; if (g["parent"] !== undefined && g["name"] !== undefined) { params["name"] = buildResourceName( String(g["parent"]), diff --git a/model/gcp/networkservices/manifest.yaml b/model/gcp/networkservices/manifest.yaml index 01780d85f..de031c33b 100644 --- a/model/gcp/networkservices/manifest.yaml +++ b/model/gcp/networkservices/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/networkservices" -version: "2026.04.23.1" +version: "2026.05.04.1" description: "Google Cloud networkservices infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - networkservices - cloud - infrastructure +releaseNotes: | + - Updated: httproutes models: - authzextensions.ts - endpointpolicies.ts diff --git a/model/gcp/paymentsresellersubscription/manifest.yaml b/model/gcp/paymentsresellersubscription/manifest.yaml index f594a5e8d..5ec7c87ae 100644 --- a/model/gcp/paymentsresellersubscription/manifest.yaml +++ b/model/gcp/paymentsresellersubscription/manifest.yaml @@ -10,8 +10,6 @@ labels: - paymentsresellersubscription - cloud - infrastructure -releaseNotes: | - - Updated: partners_subscriptions models: - partners_products.ts - partners_promotions.ts diff --git a/model/gcp/pubsub/extensions/models/snapshots.ts b/model/gcp/pubsub/extensions/models/snapshots.ts index 496b43cf4..ef82a7eac 100644 --- a/model/gcp/pubsub/extensions/models/snapshots.ts +++ b/model/gcp/pubsub/extensions/models/snapshots.ts @@ -94,7 +94,7 @@ const GlobalArgsSchema = z.object({ "Required. The subscription whose backlog the snapshot retains. Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the subscription. More precisely, this is defined as the messages in the subscription's backlog that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as well as: (b) Any messages published to the subscription's topic following the successful completion of the CreateSnapshot request. Format is `projects/{project}/subscriptions/{sub}`.", ).optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), snapshot: z.object({ expireTime: z.string().describe( @@ -135,7 +135,7 @@ const InputsSchema = z.object({ "Required. The subscription whose backlog the snapshot retains. Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the subscription. More precisely, this is defined as the messages in the subscription's backlog that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as well as: (b) Any messages published to the subscription's topic following the successful completion of the CreateSnapshot request. Format is `projects/{project}/subscriptions/{sub}`.", ).optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), snapshot: z.object({ expireTime: z.string().describe( @@ -162,7 +162,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Pub/Sub Snapshots. Registered at `@swamp/gcp/pubsub/snapshots`. */ export const model = { type: "@swamp/gcp/pubsub/snapshots", - version: "2026.05.02.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -204,6 +204,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/pubsub/extensions/models/subscriptions.ts b/model/gcp/pubsub/extensions/models/subscriptions.ts index 1f5e9193e..8d6a46591 100644 --- a/model/gcp/pubsub/extensions/models/subscriptions.ts +++ b/model/gcp/pubsub/extensions/models/subscriptions.ts @@ -6,7 +6,7 @@ /** * Swamp extension model for Google Cloud Pub/Sub Subscriptions. * - * A subscription resource. If none of `push_config`, `bigquery_config`, or `cloud_storage_config` is set, then the subscriber will pull and ack messages using API methods. At most one of these fields may be set. + * A subscription resource. If none of `push_config`, `bigquery_config`, `cloud_storage_config`, or `bigtable_config` is set, then the subscriber will pull and ack messages using API methods. At most one of these fields may be set. * * Wraps the GCP resource as a swamp model so create, get, update, * delete, and sync can be driven through `swamp model`. @@ -325,7 +325,7 @@ const GlobalArgsSchema = z.object({ "A policy that specifies how Pub/Sub retries message delivery. Retry delay will be exponential based on provided minimum and maximum backoffs. https://en.wikipedia.org/wiki/Exponential_backoff. RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded events for a given message. Retry Policy is implemented on a best effort basis. At times, the delay between consecutive deliveries may not match the configuration. That is, delay can be more or less than configured backoff.", ).optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), topic: z.string().describe( "Required. The name of the topic from which this subscription is receiving messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be `_deleted-topic_` if the topic has been deleted.", @@ -572,7 +572,7 @@ const GlobalArgsSchema = z.object({ "Output only. An output-only field indicating whether or not the subscription can receive messages.", ).optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), topic: z.string().describe( "Required. The name of the topic from which this subscription is receiving messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be `_deleted-topic_` if the topic has been deleted.", @@ -581,7 +581,7 @@ const GlobalArgsSchema = z.object({ "Output only. Indicates the minimum duration for which a message is retained after it is published to the subscription's topic. If this field is set, messages published to the subscription's topic in the last `topic_message_retention_duration` are always available to subscribers. See the `message_retention_duration` field in `Topic`. This field is set only in responses from the server; it is ignored if it is set in any requests.", ).optional(), }).describe( - "A subscription resource. If none of `push_config`, `bigquery_config`, or `cloud_storage_config` is set, then the subscriber will pull and ack messages using API methods. At most one of these fields may be set.", + "A subscription resource. If none of `push_config`, `bigquery_config`, `cloud_storage_config`, or `bigtable_config` is set, then the subscriber will pull and ack messages using API methods. At most one of these fields may be set.", ).optional(), updateMask: z.string().describe( "Required. Indicates which fields in the provided subscription to update. Must be specified and non-empty.", @@ -919,7 +919,7 @@ const InputsSchema = z.object({ "A policy that specifies how Pub/Sub retries message delivery. Retry delay will be exponential based on provided minimum and maximum backoffs. https://en.wikipedia.org/wiki/Exponential_backoff. RetryPolicy will be triggered on NACKs or acknowledgment deadline exceeded events for a given message. Retry Policy is implemented on a best effort basis. At times, the delay between consecutive deliveries may not match the configuration. That is, delay can be more or less than configured backoff.", ).optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), topic: z.string().describe( "Required. The name of the topic from which this subscription is receiving messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be `_deleted-topic_` if the topic has been deleted.", @@ -1166,7 +1166,7 @@ const InputsSchema = z.object({ "Output only. An output-only field indicating whether or not the subscription can receive messages.", ).optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), topic: z.string().describe( "Required. The name of the topic from which this subscription is receiving messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be `_deleted-topic_` if the topic has been deleted.", @@ -1175,7 +1175,7 @@ const InputsSchema = z.object({ "Output only. Indicates the minimum duration for which a message is retained after it is published to the subscription's topic. If this field is set, messages published to the subscription's topic in the last `topic_message_retention_duration` are always available to subscribers. See the `message_retention_duration` field in `Topic`. This field is set only in responses from the server; it is ignored if it is set in any requests.", ).optional(), }).describe( - "A subscription resource. If none of `push_config`, `bigquery_config`, or `cloud_storage_config` is set, then the subscriber will pull and ack messages using API methods. At most one of these fields may be set.", + "A subscription resource. If none of `push_config`, `bigquery_config`, `cloud_storage_config`, or `bigtable_config` is set, then the subscriber will pull and ack messages using API methods. At most one of these fields may be set.", ).optional(), updateMask: z.string().describe( "Required. Indicates which fields in the provided subscription to update. Must be specified and non-empty.", @@ -1185,7 +1185,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Pub/Sub Subscriptions. Registered at `@swamp/gcp/pubsub/subscriptions`. */ export const model = { type: "@swamp/gcp/pubsub/subscriptions", - version: "2026.05.02.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1232,13 +1232,18 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, resources: { state: { description: - "A subscription resource. If none of `push_config`, `bigquery_config`, or `clo...", + "A subscription resource. If none of `push_config`, `bigquery_config`, `cloud_...", schema: StateSchema, lifetime: "infinite", garbageCollection: 10, diff --git a/model/gcp/pubsub/extensions/models/topics.ts b/model/gcp/pubsub/extensions/models/topics.ts index 5b0466f90..f3b7ec2f6 100644 --- a/model/gcp/pubsub/extensions/models/topics.ts +++ b/model/gcp/pubsub/extensions/models/topics.ts @@ -327,7 +327,7 @@ const GlobalArgsSchema = z.object({ }).describe("Settings for validating messages published against a schema.") .optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), topic: z.object({ ingestionDataSourceSettings: z.object({ @@ -574,7 +574,7 @@ const GlobalArgsSchema = z.object({ "Output only. An output-only field indicating the state of the topic.", ).optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), }).describe("A topic resource.").optional(), updateMask: z.string().describe( @@ -908,7 +908,7 @@ const InputsSchema = z.object({ }).describe("Settings for validating messages published against a schema.") .optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), topic: z.object({ ingestionDataSourceSettings: z.object({ @@ -1155,7 +1155,7 @@ const InputsSchema = z.object({ "Output only. An output-only field indicating the state of the topic.", ).optional(), tags: z.record(z.string(), z.string()).describe( - 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing"', + 'Optional. Input only. Immutable. Tag keys/values directly bound to this resource. For example: "123/environment": "production", "123/costCenter": "marketing" See https://{$universe.dns_names.final_documentation_domain}/pubsub/docs/tags for more information on using tags with Pub/Sub resources.', ).optional(), }).describe("A topic resource.").optional(), updateMask: z.string().describe( @@ -1166,7 +1166,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Pub/Sub Topics. Registered at `@swamp/gcp/pubsub/topics`. */ export const model = { type: "@swamp/gcp/pubsub/topics", - version: "2026.05.02.1", + version: "2026.05.04.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1213,6 +1213,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.04.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/pubsub/manifest.yaml b/model/gcp/pubsub/manifest.yaml index e40d56a64..33f89ae1d 100644 --- a/model/gcp/pubsub/manifest.yaml +++ b/model/gcp/pubsub/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/pubsub" -version: "2026.05.02.1" +version: "2026.05.04.1" description: "Google Cloud pubsub infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: