diff --git a/model/aws/autoscaling/manifest.yaml b/model/aws/autoscaling/manifest.yaml index ff5126a07..2559a5e58 100644 --- a/model/aws/autoscaling/manifest.yaml +++ b/model/aws/autoscaling/manifest.yaml @@ -9,8 +9,6 @@ labels: - autoscaling - cloud - infrastructure -releaseNotes: | - - Updated: auto_scaling_group models: - auto_scaling_group.ts - launch_configuration.ts diff --git a/model/aws/bedrockagentcore/extensions/models/oauth2credential_provider.ts b/model/aws/bedrockagentcore/extensions/models/oauth2credential_provider.ts index ef4305634..3d1a9b9c7 100644 --- a/model/aws/bedrockagentcore/extensions/models/oauth2credential_provider.ts +++ b/model/aws/bedrockagentcore/extensions/models/oauth2credential_provider.ts @@ -40,16 +40,37 @@ const Oauth2DiscoverySchema = z.object({ ).optional(), }); +const TokenExchangeGrantTypeConfigSchema = z.object({ + ActorTokenContent: z.enum(["NONE", "M2M", "AWS_IAM_ID_TOKEN_JWT"]).describe( + "The actor token content type", + ), + ActorTokenScopes: z.array(z.string()).describe( + "The actor token scopes. Only valid when ActorTokenContent is M2M.", + ).optional(), +}); + +const OnBehalfOfTokenExchangeConfigSchema = z.object({ + GrantType: z.enum(["TOKEN_EXCHANGE", "JWT_AUTHORIZATION_GRANT"]).describe( + "The grant type for on-behalf-of token exchange", + ), + TokenExchangeGrantTypeConfig: TokenExchangeGrantTypeConfigSchema.describe( + "Configuration for RFC 8693 Token Exchange", + ).optional(), +}); + const CustomOauth2ProviderConfigInputSchema = z.object({ OauthDiscovery: Oauth2DiscoverySchema.describe( "Discovery information for an OAuth2 provider", ), ClientId: z.string().min(1).max(256).describe( "The client ID for the custom OAuth2 provider", - ), + ).optional(), ClientSecret: z.string().min(1).max(2048).describe( "The client secret for the custom OAuth2 provider", - ), + ).optional(), + OnBehalfOfTokenExchangeConfig: OnBehalfOfTokenExchangeConfigSchema.describe( + "Configuration for on-behalf-of token exchange", + ).optional(), }); const GoogleOauth2ProviderConfigInputSchema = z.object({ @@ -188,6 +209,9 @@ const GlobalArgsSchema = z.object({ "Discovery information for an OAuth2 provider", ).optional(), ClientId: z.string().min(1).max(256).optional(), + OnBehalfOfTokenExchangeConfig: OnBehalfOfTokenExchangeConfigSchema.describe( + "Configuration for on-behalf-of token exchange", + ).optional(), }).describe("The output configuration for the OAuth2 provider").optional(), Tags: z.array(TagSchema).describe( "Tags to assign to the OAuth2 credential provider", @@ -216,6 +240,7 @@ const StateSchema = z.object({ Oauth2ProviderConfigOutput: z.object({ OauthDiscovery: Oauth2DiscoverySchema, ClientId: z.string(), + OnBehalfOfTokenExchangeConfig: OnBehalfOfTokenExchangeConfigSchema, }).optional(), CreatedTime: z.string().optional(), LastUpdatedTime: z.string().optional(), @@ -297,6 +322,9 @@ const InputsSchema = z.object({ "Discovery information for an OAuth2 provider", ).optional(), ClientId: z.string().min(1).max(256).optional(), + OnBehalfOfTokenExchangeConfig: OnBehalfOfTokenExchangeConfigSchema.describe( + "Configuration for on-behalf-of token exchange", + ).optional(), }).describe("The output configuration for the OAuth2 provider").optional(), Tags: z.array(TagSchema).describe( "Tags to assign to the OAuth2 credential provider", @@ -306,7 +334,7 @@ const InputsSchema = z.object({ /** Swamp extension model for BedrockAgentCore OAuth2CredentialProvider. Registered at `@swamp/aws/bedrockagentcore/oauth2credential-provider`. */ export const model = { type: "@swamp/aws/bedrockagentcore/oauth2credential-provider", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.23.1", @@ -318,6 +346,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/bedrockagentcore/manifest.yaml b/model/aws/bedrockagentcore/manifest.yaml index 55e9cc616..e5fdd65a3 100644 --- a/model/aws/bedrockagentcore/manifest.yaml +++ b/model/aws/bedrockagentcore/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/bedrockagentcore" -version: "2026.05.05.1" +version: "2026.05.08.1" description: "AWS BEDROCKAGENTCORE infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -9,6 +9,8 @@ labels: - bedrockagentcore - cloud - infrastructure +releaseNotes: | + - Updated: oauth2credential_provider models: - api_key_credential_provider.ts - browser_custom.ts diff --git a/model/aws/cloudfront/extensions/models/distribution.ts b/model/aws/cloudfront/extensions/models/distribution.ts index 98dc5c18e..e793c510d 100644 --- a/model/aws/cloudfront/extensions/models/distribution.ts +++ b/model/aws/cloudfront/extensions/models/distribution.ts @@ -440,7 +440,9 @@ const ParameterDefinitionSchema = z.object({ }); const CacheTagConfigSchema = z.object({ - HeaderName: z.string(), + HeaderName: z.string().describe( + "The name of the HTTP header that your origin includes in responses. CloudFront uses this header to extract cache tags. The header value must contain comma-separated tag values (for example, product:electronics, category:tv, brand:example).", + ), }); const TrustStoreConfigSchema = z.object({ @@ -562,7 +564,9 @@ const GlobalArgsSchema = z.object({ }).describe( "This field only supports multi-tenant distributions. You can't specify this field for standard distributions. For more information, see [Unsupported features for SaaS Manager for Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas) in the *Amazon CloudFront Developer Guide*. A distribution tenant configuration.", ).optional(), - CacheTagConfig: CacheTagConfigSchema.optional(), + CacheTagConfig: CacheTagConfigSchema.describe( + "Configuration for cache tag extraction from origin responses. When specified, CloudFront reads the header named in HeaderName from origin responses and stores the comma-separated values as cache tags on the object. Distributions without CacheTagConfig do not extract tags. When CacheTagConfig is removed from a distribution via UpdateDistribution, CloudFront stops extracting tags from origin responses. Changing the HeaderName on an existing distribution does not retroactively affect previously cached objects. Tag-based invalidations will not apply to objects already cached using a previous header. To ensure tag invalidations function after updating the header name, use path-based invalidations to recache all objects that use cache tags.", + ).optional(), ViewerMtlsConfig: ViewerMtlsConfigSchema.describe( "The distribution's viewer mTLS configuration.", ).optional(), @@ -690,7 +694,9 @@ const InputsSchema = z.object({ }).describe( "This field only supports multi-tenant distributions. You can't specify this field for standard distributions. For more information, see [Unsupported features for SaaS Manager for Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas) in the *Amazon CloudFront Developer Guide*. A distribution tenant configuration.", ).optional(), - CacheTagConfig: CacheTagConfigSchema.optional(), + CacheTagConfig: CacheTagConfigSchema.describe( + "Configuration for cache tag extraction from origin responses. When specified, CloudFront reads the header named in HeaderName from origin responses and stores the comma-separated values as cache tags on the object. Distributions without CacheTagConfig do not extract tags. When CacheTagConfig is removed from a distribution via UpdateDistribution, CloudFront stops extracting tags from origin responses. Changing the HeaderName on an existing distribution does not retroactively affect previously cached objects. Tag-based invalidations will not apply to objects already cached using a previous header. To ensure tag invalidations function after updating the header name, use path-based invalidations to recache all objects that use cache tags.", + ).optional(), ViewerMtlsConfig: ViewerMtlsConfigSchema.describe( "The distribution's viewer mTLS configuration.", ).optional(), @@ -709,7 +715,7 @@ const InputsSchema = z.object({ /** Swamp extension model for CloudFront Distribution. Registered at `@swamp/aws/cloudfront/distribution`. */ export const model = { type: "@swamp/aws/cloudfront/distribution", - version: "2026.05.06.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -746,6 +752,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/cloudfront/extensions/models/function.ts b/model/aws/cloudfront/extensions/models/function.ts index 38edc1e1d..6c4b1bb9e 100644 --- a/model/aws/cloudfront/extensions/models/function.ts +++ b/model/aws/cloudfront/extensions/models/function.ts @@ -30,9 +30,13 @@ const KeyValueStoreAssociationSchema = z.object({ const TagSchema = z.object({ Key: z.string().min(1).max(128).regex( new RegExp("^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", "u"), + ).describe( + "A string that contains Tag key. The string length should be between 1 and 128 characters. Valid characters include a-z, A-Z, 0-9, space, and the special characters _ -.: / = + @.", ), Value: z.string().min(0).max(256).regex( new RegExp("^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$", "u"), + ).describe( + "A string that contains an optional Tag value. The string length should be between 0 and 256 characters. Valid characters include a-z, A-Z, 0-9, space, and the special characters _ -.: / = + @.", ), }); @@ -56,7 +60,9 @@ const GlobalArgsSchema = z.object({ "Contains configuration information about a CloudFront function.", ), Name: z.string().describe("A name to identify the function."), - Tags: z.array(TagSchema).optional(), + Tags: z.array(TagSchema).describe( + "A complex type that contains zero or more Tag elements.", + ).optional(), }); const StateSchema = z.object({ @@ -97,13 +103,15 @@ const InputsSchema = z.object({ }).describe("Contains configuration information about a CloudFront function.") .optional(), Name: z.string().describe("A name to identify the function.").optional(), - Tags: z.array(TagSchema).optional(), + Tags: z.array(TagSchema).describe( + "A complex type that contains zero or more Tag elements.", + ).optional(), }); /** Swamp extension model for CloudFront Function. Registered at `@swamp/aws/cloudfront/function`. */ export const model = { type: "@swamp/aws/cloudfront/function", - version: "2026.05.01.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -135,6 +143,11 @@ export const model = { description: "Added: Tags", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/cloudfront/manifest.yaml b/model/aws/cloudfront/manifest.yaml index 17c519dbb..5b1bc6602 100644 --- a/model/aws/cloudfront/manifest.yaml +++ b/model/aws/cloudfront/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/cloudfront" -version: "2026.05.06.1" +version: "2026.05.08.1" description: "AWS CLOUDFRONT infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,7 +10,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: distribution, trust_store + - Updated: distribution, function models: - anycast_ip_list.ts - cache_policy.ts diff --git a/model/aws/datazone/extensions/models/connection.ts b/model/aws/datazone/extensions/models/connection.ts index 6a1d17d16..43c72e4d4 100644 --- a/model/aws/datazone/extensions/models/connection.ts +++ b/model/aws/datazone/extensions/models/connection.ts @@ -21,6 +21,17 @@ import { updateResource, } from "./_lib/aws.ts"; +const ConnectionConfigurationSchema = z.object({ + Classification: z.string().max(64).regex(new RegExp("^[\\w][\\w\\.\\-\\_]*$")) + .describe("The classification of the connection configuration.").optional(), + Properties: z.record( + z.string(), + z.string().min(1).max(2048).regex( + new RegExp("^[\\u0020-\\uD7FF\\uE000-\\uFFFF\\t]*$"), + ), + ).describe("Property Map").optional(), +}); + const AthenaPropertiesInputSchema = z.object({ WorkgroupName: z.string().max(128).regex(new RegExp("^[a-zA-Z0-9._-]+$")), }); @@ -278,6 +289,9 @@ const S3PropertiesInputSchema = z.object({ ).describe( "The Amazon S3 Access Grant location ID that's part of the Amazon S3 properties of a connection.", ).optional(), + RegisterS3AccessGrantLocation: z.boolean().describe( + "Specifies whether to register the S3 Access Grant location.", + ).optional(), }); const MlflowPropertiesInputSchema = z.object({ @@ -291,6 +305,12 @@ const WorkflowsMwaaPropertiesInputSchema = z.object({ .optional(), }); +const LakehousePropertiesInputSchema = z.object({ + GlueLineageSyncEnabled: z.boolean().describe( + "Specifies whether Glue lineage sync is enabled for the lakehouse connection.", + ).optional(), +}); + const GlobalArgsSchema = z.object({ name: z.string().describe( "Instance name for this resource (used as the unique identifier in the factory pattern)", @@ -307,6 +327,9 @@ const GlobalArgsSchema = z.object({ IamConnectionId: z.string().max(128).regex(new RegExp("^[a-zA-Z0-9]+$")) .optional(), }).describe("AWS Location of project").optional(), + Configurations: z.array(ConnectionConfigurationSchema).describe( + "The configurations of the connection.", + ).optional(), Description: z.string().max(128).regex(new RegExp("^[\\S\\s]*$")).describe( "The description of the connection.", ).optional(), @@ -360,6 +383,9 @@ const GlobalArgsSchema = z.object({ WorkflowsServerlessProperties: z.string().describe( "Workflows Serverless Properties Input", ).optional(), + LakehouseProperties: LakehousePropertiesInputSchema.describe( + "Lakehouse Properties Input", + ).optional(), }).optional(), Scope: z.enum(["DOMAIN", "PROJECT"]).describe("The scope of the connection.") .optional(), @@ -372,6 +398,7 @@ const StateSchema = z.object({ AwsRegion: z.string(), IamConnectionId: z.string(), }).optional(), + Configurations: z.array(ConnectionConfigurationSchema).optional(), ConnectionId: z.string(), Description: z.string().optional(), DomainId: z.string(), @@ -397,6 +424,7 @@ const StateSchema = z.object({ MlflowProperties: MlflowPropertiesInputSchema, WorkflowsMwaaProperties: WorkflowsMwaaPropertiesInputSchema, WorkflowsServerlessProperties: z.string(), + LakehouseProperties: LakehousePropertiesInputSchema, }).optional(), Type: z.string().optional(), Scope: z.string().optional(), @@ -418,6 +446,9 @@ const InputsSchema = z.object({ IamConnectionId: z.string().max(128).regex(new RegExp("^[a-zA-Z0-9]+$")) .optional(), }).describe("AWS Location of project").optional(), + Configurations: z.array(ConnectionConfigurationSchema).describe( + "The configurations of the connection.", + ).optional(), Description: z.string().max(128).regex(new RegExp("^[\\S\\s]*$")).describe( "The description of the connection.", ).optional(), @@ -471,6 +502,9 @@ const InputsSchema = z.object({ WorkflowsServerlessProperties: z.string().describe( "Workflows Serverless Properties Input", ).optional(), + LakehouseProperties: LakehousePropertiesInputSchema.describe( + "Lakehouse Properties Input", + ).optional(), }).optional(), Scope: z.enum(["DOMAIN", "PROJECT"]).describe("The scope of the connection.") .optional(), @@ -479,7 +513,7 @@ const InputsSchema = z.object({ /** Swamp extension model for DataZone Connection. Registered at `@swamp/aws/datazone/connection`. */ export const model = { type: "@swamp/aws/datazone/connection", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -516,6 +550,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "Added: Configurations", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/datazone/manifest.yaml b/model/aws/datazone/manifest.yaml index c8d0d82f1..846e294c8 100644 --- a/model/aws/datazone/manifest.yaml +++ b/model/aws/datazone/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/datazone" -version: "2026.05.05.1" +version: "2026.05.08.1" description: "AWS DATAZONE infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -9,6 +9,8 @@ labels: - datazone - cloud - infrastructure +releaseNotes: | + - Updated: connection models: - connection.ts - data_source.ts diff --git a/model/aws/devopsagent/extensions/models/agent_space.ts b/model/aws/devopsagent/extensions/models/agent_space.ts index c9be6beee..ad0d8cc74 100644 --- a/model/aws/devopsagent/extensions/models/agent_space.ts +++ b/model/aws/devopsagent/extensions/models/agent_space.ts @@ -46,6 +46,11 @@ const GlobalArgsSchema = z.object({ KmsKeyArn: z.string().min(1).max(2048).describe( "The ARN of the KMS key to use for encryption.", ).optional(), + Locale: z.string().min(2).max(35).regex( + new RegExp("^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$"), + ).describe( + "The locale for the AgentSpace, which determines the language used in agent responses.", + ).optional(), OperatorApp: z.object({ Iam: IamAuthConfigurationSchema.optional(), Idc: IdcAuthConfigurationSchema.optional(), @@ -60,6 +65,7 @@ const StateSchema = z.object({ Name: z.string().optional(), Description: z.string().optional(), KmsKeyArn: z.string().optional(), + Locale: z.string().optional(), OperatorApp: z.object({ Iam: IamAuthConfigurationSchema, Idc: IdcAuthConfigurationSchema, @@ -82,6 +88,11 @@ const InputsSchema = z.object({ KmsKeyArn: z.string().min(1).max(2048).describe( "The ARN of the KMS key to use for encryption.", ).optional(), + Locale: z.string().min(2).max(35).regex( + new RegExp("^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$"), + ).describe( + "The locale for the AgentSpace, which determines the language used in agent responses.", + ).optional(), OperatorApp: z.object({ Iam: IamAuthConfigurationSchema.optional(), Idc: IdcAuthConfigurationSchema.optional(), @@ -94,7 +105,7 @@ const InputsSchema = z.object({ /** Swamp extension model for DevOpsAgent AgentSpace. Registered at `@swamp/aws/devopsagent/agent-space`. */ export const model = { type: "@swamp/aws/devopsagent/agent-space", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.27.1", @@ -131,6 +142,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "Added: Locale", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/devopsagent/manifest.yaml b/model/aws/devopsagent/manifest.yaml index 013ac09cb..8666560e5 100644 --- a/model/aws/devopsagent/manifest.yaml +++ b/model/aws/devopsagent/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/devopsagent" -version: "2026.05.01.1" +version: "2026.05.08.1" description: "AWS DEVOPSAGENT infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -9,6 +9,8 @@ labels: - devopsagent - cloud - infrastructure +releaseNotes: | + - Updated: agent_space models: - agent_space.ts - association.ts diff --git a/model/aws/eks/manifest.yaml b/model/aws/eks/manifest.yaml index f098fc281..78b7fa0ce 100644 --- a/model/aws/eks/manifest.yaml +++ b/model/aws/eks/manifest.yaml @@ -9,8 +9,6 @@ labels: - eks - cloud - infrastructure -releaseNotes: | - - Updated: addon models: - access_entry.ts - addon.ts diff --git a/model/aws/elasticache/manifest.yaml b/model/aws/elasticache/manifest.yaml index 2f16bbe88..17b218067 100644 --- a/model/aws/elasticache/manifest.yaml +++ b/model/aws/elasticache/manifest.yaml @@ -9,8 +9,6 @@ labels: - elasticache - cloud - infrastructure -releaseNotes: | - - Added: cache_cluster models: - cache_cluster.ts - global_replication_group.ts diff --git a/model/aws/iot/extensions/models/topic_rule.ts b/model/aws/iot/extensions/models/topic_rule.ts index c80f044ff..389a24561 100644 --- a/model/aws/iot/extensions/models/topic_rule.ts +++ b/model/aws/iot/extensions/models/topic_rule.ts @@ -98,6 +98,7 @@ const BatchConfigSchema = z.object({ MaxBatchOpenMs: z.number().int().optional(), MaxBatchSize: z.number().int().optional(), MaxBatchSizeBytes: z.number().int().optional(), + BatchAcrossTopics: z.boolean().optional(), }); const HttpActionSchema = z.object({ @@ -347,7 +348,7 @@ const InputsSchema = z.object({ /** Swamp extension model for IoT TopicRule. Registered at `@swamp/aws/iot/topic-rule`. */ export const model = { type: "@swamp/aws/iot/topic-rule", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -374,6 +375,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/iot/manifest.yaml b/model/aws/iot/manifest.yaml index 15332ca7a..c46e30479 100644 --- a/model/aws/iot/manifest.yaml +++ b/model/aws/iot/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/iot" -version: "2026.04.23.3" +version: "2026.05.08.1" description: "AWS IOT infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -9,6 +9,8 @@ labels: - iot - cloud - infrastructure +releaseNotes: | + - Updated: topic_rule models: - account_audit_configuration.ts - authorizer.ts diff --git a/model/aws/odb/extensions/models/odb_network.ts b/model/aws/odb/extensions/models/odb_network.ts index 93558ba49..f0c0bb3af 100644 --- a/model/aws/odb/extensions/models/odb_network.ts +++ b/model/aws/odb/extensions/models/odb_network.ts @@ -189,6 +189,7 @@ const StateSchema = z.object({ DefaultDnsPrefix: z.string().optional(), DeleteAssociatedResources: z.boolean().optional(), DisplayName: z.string().optional(), + Ec2PlacementGroupIds: z.array(z.string()).optional(), OciNetworkAnchorId: z.string().optional(), OciResourceAnchorName: z.string().optional(), OciVcnUrl: z.string().optional(), @@ -384,7 +385,7 @@ const InputsSchema = z.object({ /** Swamp extension model for ODB OdbNetwork. Registered at `@swamp/aws/odb/odb-network`. */ export const model = { type: "@swamp/aws/odb/odb-network", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -411,6 +412,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/odb/manifest.yaml b/model/aws/odb/manifest.yaml index 1a657b174..0c2e3af65 100644 --- a/model/aws/odb/manifest.yaml +++ b/model/aws/odb/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/odb" -version: "2026.04.23.3" +version: "2026.05.08.1" description: "AWS ODB infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -9,6 +9,8 @@ labels: - odb - cloud - infrastructure +releaseNotes: | + - Updated: odb_network models: - cloud_autonomous_vm_cluster.ts - cloud_exadata_infrastructure.ts diff --git a/model/aws/rds/manifest.yaml b/model/aws/rds/manifest.yaml index 475ca9151..74a1d3b12 100644 --- a/model/aws/rds/manifest.yaml +++ b/model/aws/rds/manifest.yaml @@ -9,8 +9,6 @@ labels: - rds - cloud - infrastructure -releaseNotes: | - - Updated: custom_dbengine_version models: - custom_dbengine_version.ts - dbcluster.ts diff --git a/model/aws/route53resolver/extensions/models/resolver_endpoint.ts b/model/aws/route53resolver/extensions/models/resolver_endpoint.ts index 15e871b2a..74d2c2183 100644 --- a/model/aws/route53resolver/extensions/models/resolver_endpoint.ts +++ b/model/aws/route53resolver/extensions/models/resolver_endpoint.ts @@ -66,6 +66,12 @@ const GlobalArgsSchema = z.object({ RniEnhancedMetricsEnabled: z.boolean().describe( "Specifies whether RNI enhanced metrics are enabled for the Resolver Endpoints. When set to true, one-minute granular metrics are published in CloudWatch for each RNI associated with this endpoint. When set to false, metrics are not published. Default is false.", ).optional(), + Dns64Enabled: z.boolean().describe( + "Specifies whether DNS64 is enabled for the Inbound Resolver Endpoint. When set to true, if a DNS AAAA query is made for a domain that has only an A (IPv4) record, the resolver automatically synthesizes an AAAA (IPv6) response by embedding the IPv4 address into the well-known prefix 64:ff9b::/96. Default is false.", + ).optional(), + Ipv6InternetAccessEnabled: z.boolean().describe( + "Specifies whether IPv6 Internet Gateway access is enabled through the Outbound Resolver Endpoint. When set to true, this property allows your Endpoint ENIs to reach public IPv6 target nameservers through an internet gateway. Default is false.", + ).optional(), Protocols: z.array(z.string()).describe( "Protocols used for the endpoint. DoH-FIPS is applicable for inbound endpoints only.", ).optional(), @@ -91,6 +97,8 @@ const StateSchema = z.object({ PreferredInstanceType: z.string().optional(), TargetNameServerMetricsEnabled: z.boolean().optional(), RniEnhancedMetricsEnabled: z.boolean().optional(), + Dns64Enabled: z.boolean().optional(), + Ipv6InternetAccessEnabled: z.boolean().optional(), Protocols: z.array(z.string()).optional(), ResolverEndpointId: z.string(), ResolverEndpointType: z.string().optional(), @@ -122,6 +130,12 @@ const InputsSchema = z.object({ RniEnhancedMetricsEnabled: z.boolean().describe( "Specifies whether RNI enhanced metrics are enabled for the Resolver Endpoints. When set to true, one-minute granular metrics are published in CloudWatch for each RNI associated with this endpoint. When set to false, metrics are not published. Default is false.", ).optional(), + Dns64Enabled: z.boolean().describe( + "Specifies whether DNS64 is enabled for the Inbound Resolver Endpoint. When set to true, if a DNS AAAA query is made for a domain that has only an A (IPv4) record, the resolver automatically synthesizes an AAAA (IPv6) response by embedding the IPv4 address into the well-known prefix 64:ff9b::/96. Default is false.", + ).optional(), + Ipv6InternetAccessEnabled: z.boolean().describe( + "Specifies whether IPv6 Internet Gateway access is enabled through the Outbound Resolver Endpoint. When set to true, this property allows your Endpoint ENIs to reach public IPv6 target nameservers through an internet gateway. Default is false.", + ).optional(), Protocols: z.array(z.string()).describe( "Protocols used for the endpoint. DoH-FIPS is applicable for inbound endpoints only.", ).optional(), @@ -139,7 +153,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Route53Resolver ResolverEndpoint. Registered at `@swamp/aws/route53resolver/resolver-endpoint`. */ export const model = { type: "@swamp/aws/route53resolver/resolver-endpoint", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -166,6 +180,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "Added: Dns64Enabled, Ipv6InternetAccessEnabled", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/route53resolver/manifest.yaml b/model/aws/route53resolver/manifest.yaml index e992948ce..775058bd2 100644 --- a/model/aws/route53resolver/manifest.yaml +++ b/model/aws/route53resolver/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/route53resolver" -version: "2026.04.23.3" +version: "2026.05.08.1" description: "AWS ROUTE53RESOLVER infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -9,6 +9,8 @@ labels: - route53resolver - cloud - infrastructure +releaseNotes: | + - Updated: resolver_endpoint models: - firewall_domain_list.ts - firewall_rule_group.ts diff --git a/model/aws/sagemaker/extensions/models/domain.ts b/model/aws/sagemaker/extensions/models/domain.ts index 4f6893701..ef091a09b 100644 --- a/model/aws/sagemaker/extensions/models/domain.ts +++ b/model/aws/sagemaker/extensions/models/domain.ts @@ -186,6 +186,8 @@ const ResourceSpecSchema = z.object({ "ml.r6id.16xlarge", "ml.r6id.24xlarge", "ml.r6id.32xlarge", + "ml.p5.4xlarge", + "ml.p6-b200.48xlarge", ]).describe("The instance type that the image version runs on.").optional(), SageMakerImageArn: z.string().max(256).regex( new RegExp( @@ -582,6 +584,8 @@ const StudioWebPortalSettingsSchema = z.object({ "ml.r6id.16xlarge", "ml.r6id.24xlarge", "ml.r6id.32xlarge", + "ml.p5.4xlarge", + "ml.p6-b200.48xlarge", ]), ).describe( "The instance types you are hiding from the Studio user interface.", @@ -1021,7 +1025,7 @@ const InputsSchema = z.object({ /** Swamp extension model for SageMaker Domain. Registered at `@swamp/aws/sagemaker/domain`. */ export const model = { type: "@swamp/aws/sagemaker/domain", - version: "2026.04.24.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.2", @@ -1053,6 +1057,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/sagemaker/extensions/models/processing_job.ts b/model/aws/sagemaker/extensions/models/processing_job.ts index 1882e920e..830cf54c8 100644 --- a/model/aws/sagemaker/extensions/models/processing_job.ts +++ b/model/aws/sagemaker/extensions/models/processing_job.ts @@ -344,9 +344,11 @@ const GlobalArgsSchema = z.object({ }).describe( "Configures the processing job to run a specified Docker container image.", ), - Environment: z.record(z.string(), z.string().max(256)).describe( - "Sets the environment variables in the Docker container", - ).optional(), + Environment: z.record( + z.string(), + z.string().max(256).regex(new RegExp("[\\S\\s]*")), + ).describe("Sets the environment variables in the Docker container") + .optional(), ExperimentConfig: z.object({ ExperimentName: z.string().max(120).regex( new RegExp("[a-zA-Z0-9](-*[a-zA-Z0-9]){0,119}"), @@ -491,9 +493,11 @@ const InputsSchema = z.object({ }).describe( "Configures the processing job to run a specified Docker container image.", ).optional(), - Environment: z.record(z.string(), z.string().max(256)).describe( - "Sets the environment variables in the Docker container", - ).optional(), + Environment: z.record( + z.string(), + z.string().max(256).regex(new RegExp("[\\S\\s]*")), + ).describe("Sets the environment variables in the Docker container") + .optional(), ExperimentConfig: z.object({ ExperimentName: z.string().max(120).regex( new RegExp("[a-zA-Z0-9](-*[a-zA-Z0-9]){0,119}"), @@ -577,7 +581,7 @@ const InputsSchema = z.object({ /** Swamp extension model for SageMaker ProcessingJob. Registered at `@swamp/aws/sagemaker/processing-job`. */ export const model = { type: "@swamp/aws/sagemaker/processing-job", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.2", @@ -604,6 +608,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/aws/sagemaker/manifest.yaml b/model/aws/sagemaker/manifest.yaml index e47800799..7de1a7139 100644 --- a/model/aws/sagemaker/manifest.yaml +++ b/model/aws/sagemaker/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/aws/sagemaker" -version: "2026.04.24.1" +version: "2026.05.08.1" description: "AWS SAGEMAKER infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -9,6 +9,8 @@ labels: - sagemaker - cloud - infrastructure +releaseNotes: | + - Updated: domain, processing_job models: - app.ts - app_image_config.ts diff --git a/model/gcp/accesscontextmanager/manifest.yaml b/model/gcp/accesscontextmanager/manifest.yaml index 4f7410483..f3444aacb 100644 --- a/model/gcp/accesscontextmanager/manifest.yaml +++ b/model/gcp/accesscontextmanager/manifest.yaml @@ -10,8 +10,6 @@ labels: - accesscontextmanager - cloud - infrastructure -releaseNotes: | - - Updated: permissions models: - accesspolicies.ts - accesspolicies_accesslevels.ts diff --git a/model/gcp/androidmanagement/extensions/models/enterprises_policies.ts b/model/gcp/androidmanagement/extensions/models/enterprises_policies.ts index 9bd0ed04f..24d8d4426 100644 --- a/model/gcp/androidmanagement/extensions/models/enterprises_policies.ts +++ b/model/gcp/androidmanagement/extensions/models/enterprises_policies.ts @@ -365,6 +365,11 @@ const GlobalArgsSchema = z.object({ ]).describe( "Whether auto date, time, and time zone are enabled on a company-owned device. If this is set, then autoTimeRequired is ignored.", ).optional(), + autofillPolicy: z.enum([ + "AUTOFILL_POLICY_UNSPECIFIED", + "AUTOFILL_USER_CHOICE", + "AUTOFILL_DISABLED", + ]).describe("Optional. The policy for the autofill service.").optional(), bluetoothConfigDisabled: z.boolean().describe( "Whether configuring bluetooth is disabled.", ).optional(), @@ -1514,6 +1519,7 @@ const StateSchema = z.object({ assistContentPolicy: z.string().optional(), autoDateAndTimeZone: z.string().optional(), autoTimeRequired: z.boolean().optional(), + autofillPolicy: z.string().optional(), blockApplicationsEnabled: z.boolean().optional(), bluetoothConfigDisabled: z.boolean().optional(), bluetoothContactSharingDisabled: z.boolean().optional(), @@ -2131,6 +2137,11 @@ const InputsSchema = z.object({ ]).describe( "Whether auto date, time, and time zone are enabled on a company-owned device. If this is set, then autoTimeRequired is ignored.", ).optional(), + autofillPolicy: z.enum([ + "AUTOFILL_POLICY_UNSPECIFIED", + "AUTOFILL_USER_CHOICE", + "AUTOFILL_DISABLED", + ]).describe("Optional. The policy for the autofill service.").optional(), bluetoothConfigDisabled: z.boolean().describe( "Whether configuring bluetooth is disabled.", ).optional(), @@ -3215,7 +3226,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Android Management Enterprises.Policies. Registered at `@swamp/gcp/androidmanagement/enterprises-policies`. */ export const model = { type: "@swamp/gcp/androidmanagement/enterprises-policies", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -3252,6 +3263,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "Added: autofillPolicy", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -3352,6 +3368,9 @@ export const model = { if (g["autoDateAndTimeZone"] !== undefined) { body["autoDateAndTimeZone"] = g["autoDateAndTimeZone"]; } + if (g["autofillPolicy"] !== undefined) { + body["autofillPolicy"] = g["autofillPolicy"]; + } if (g["bluetoothConfigDisabled"] !== undefined) { body["bluetoothConfigDisabled"] = g["bluetoothConfigDisabled"]; } diff --git a/model/gcp/androidmanagement/manifest.yaml b/model/gcp/androidmanagement/manifest.yaml index c09258ee2..9fb644847 100644 --- a/model/gcp/androidmanagement/manifest.yaml +++ b/model/gcp/androidmanagement/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/androidmanagement" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud androidmanagement infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - androidmanagement - cloud - infrastructure +releaseNotes: | + - Updated: enterprises_policies models: - enterprises.ts - enterprises_applications.ts diff --git a/model/gcp/androidpublisher/extensions/models/generatedapks.ts b/model/gcp/androidpublisher/extensions/models/generatedapks.ts index b6c2928ac..a7646ac99 100644 --- a/model/gcp/androidpublisher/extensions/models/generatedapks.ts +++ b/model/gcp/androidpublisher/extensions/models/generatedapks.ts @@ -6,7 +6,7 @@ /** * Swamp extension model for Google Cloud Google Play Android Developer Generatedapks. * - * Download metadata for split, standalone and universal APKs, as well as asset pack slices, signed with a given key. + * Download metadata for split, standalone and universal APKs, as well as asset pack slices, signed with a given key. Next ID: 10 * * Wraps the GCP resource as a swamp model so create, get, update, * delete, and sync can be driven through `swamp model`. @@ -124,6 +124,16 @@ const StateSchema = z.object({ variantNumber: z.number(), })), }).optional(), + unprotectedGeneratedSplitApks: z.array(z.object({ + downloadId: z.string(), + moduleName: z.string(), + splitId: z.string(), + variantId: z.number(), + })).optional(), + unprotectedGeneratedStandaloneApks: z.array(z.object({ + downloadId: z.string(), + variantId: z.number(), + })).optional(), }).passthrough(); type StateData = z.infer; @@ -135,7 +145,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Google Play Android Developer Generatedapks. Registered at `@swamp/gcp/androidpublisher/generatedapks`. */ export const model = { type: "@swamp/gcp/androidpublisher/generatedapks", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -172,6 +182,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/androidpublisher/manifest.yaml b/model/gcp/androidpublisher/manifest.yaml index 761714ecb..bd5ae2b98 100644 --- a/model/gcp/androidpublisher/manifest.yaml +++ b/model/gcp/androidpublisher/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/androidpublisher" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud androidpublisher infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - androidpublisher - cloud - infrastructure +releaseNotes: | + - Updated: generatedapks models: - applications_devicetierconfigs.ts - applications_tracks_releases.ts diff --git a/model/gcp/bigtableadmin/manifest.yaml b/model/gcp/bigtableadmin/manifest.yaml index f972a46d8..ebf09fcb5 100644 --- a/model/gcp/bigtableadmin/manifest.yaml +++ b/model/gcp/bigtableadmin/manifest.yaml @@ -10,8 +10,6 @@ labels: - bigtableadmin - cloud - infrastructure -releaseNotes: | - - Updated: instances_clusters models: - instances.ts - instances_appprofiles.ts diff --git a/model/gcp/ces/extensions/models/apps.ts b/model/gcp/ces/extensions/models/apps.ts index 562121bdf..4bbb6cec8 100644 --- a/model/gcp/ces/extensions/models/apps.ts +++ b/model/gcp/ces/extensions/models/apps.ts @@ -525,6 +525,11 @@ const GlobalArgsSchema = z.object({ }).describe("Represents a select subset of an OpenAPI 3.0 schema object.") .optional(), })).describe("Optional. The declarations of the variables.").optional(), + vpcScSettings: z.object({ + allowedOrigins: z.array(z.string()).describe( + 'Optional. The allowed HTTP(s) origins that OpenAPI tools in the App are able to directly call when VPC Service Controls are enabled. These strings must match the origin exactly, including the port if specified. For example, "https://example.com" or "https://example.com:443". This list does not yet apply to Python tools that may make direct HTTP calls.', + ).optional(), + }).describe("VPC-SC settings for the app.").optional(), appId: z.string().describe( "Optional. The ID to use for the app, which will become the final component of the app's resource name. If not provided, a unique ID will be automatically assigned for the app.", ).optional(), @@ -694,6 +699,7 @@ const StateSchema = z.object({ }).optional(), toolExecutionMode: z.string().optional(), updateTime: z.string().optional(), + validationErrors: z.array(z.string()).optional(), variableDeclarations: z.array(z.object({ description: z.string(), name: z.string(), @@ -719,6 +725,9 @@ const StateSchema = z.object({ uniqueItems: z.boolean(), }), })).optional(), + vpcScSettings: z.object({ + allowedOrigins: z.array(z.string()), + }).optional(), }).passthrough(); type StateData = z.infer; @@ -1148,6 +1157,11 @@ const InputsSchema = z.object({ }).describe("Represents a select subset of an OpenAPI 3.0 schema object.") .optional(), })).describe("Optional. The declarations of the variables.").optional(), + vpcScSettings: z.object({ + allowedOrigins: z.array(z.string()).describe( + 'Optional. The allowed HTTP(s) origins that OpenAPI tools in the App are able to directly call when VPC Service Controls are enabled. These strings must match the origin exactly, including the port if specified. For example, "https://example.com" or "https://example.com:443". This list does not yet apply to Python tools that may make direct HTTP calls.', + ).optional(), + }).describe("VPC-SC settings for the app.").optional(), appId: z.string().describe( "Optional. The ID to use for the app, which will become the final component of the app's resource name. If not provided, a unique ID will be automatically assigned for the app.", ).optional(), @@ -1159,7 +1173,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Gemini Enterprise for Customer Experience Apps. Registered at `@swamp/gcp/ces/apps`. */ export const model = { type: "@swamp/gcp/ces/apps", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1211,6 +1225,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "Added: vpcScSettings", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -1285,6 +1304,9 @@ export const model = { if (g["variableDeclarations"] !== undefined) { body["variableDeclarations"] = g["variableDeclarations"]; } + if (g["vpcScSettings"] !== undefined) { + body["vpcScSettings"] = g["vpcScSettings"]; + } if (g["appId"] !== undefined) body["appId"] = g["appId"]; if (g["parent"] !== undefined && g["name"] !== undefined) { params["name"] = buildResourceName( @@ -1416,6 +1438,9 @@ export const model = { if (g["variableDeclarations"] !== undefined) { body["variableDeclarations"] = g["variableDeclarations"]; } + if (g["vpcScSettings"] !== undefined) { + body["vpcScSettings"] = g["vpcScSettings"]; + } for (const key of Object.keys(existing)) { if ( key === "fingerprint" || key === "labelFingerprint" || diff --git a/model/gcp/ces/extensions/models/apps_agents.ts b/model/gcp/ces/extensions/models/apps_agents.ts index e80a6effb..c98acf7d4 100644 --- a/model/gcp/ces/extensions/models/apps_agents.ts +++ b/model/gcp/ces/extensions/models/apps_agents.ts @@ -387,6 +387,7 @@ const StateSchema = z.object({ }), })).optional(), updateTime: z.string().optional(), + validationErrors: z.array(z.string()).optional(), }).passthrough(); type StateData = z.infer; @@ -596,7 +597,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Gemini Enterprise for Customer Experience Apps.Agents. Registered at `@swamp/gcp/ces/apps-agents`. */ export const model = { type: "@swamp/gcp/ces/apps-agents", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.2", @@ -628,6 +629,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/ces/extensions/models/apps_tools.ts b/model/gcp/ces/extensions/models/apps_tools.ts index 3e1730fa2..c55a86b90 100644 --- a/model/gcp/ces/extensions/models/apps_tools.ts +++ b/model/gcp/ces/extensions/models/apps_tools.ts @@ -812,6 +812,66 @@ const GlobalArgsSchema = z.object({ "Optional. The Python code to execute for the tool.", ).optional(), }).describe("A Python function tool.").optional(), + remoteAgentTool: z.object({ + agentCard: z.object({ + description: z.string().describe( + "Required. A description of the agent's domain of action/solution space.", + ).optional(), + name: z.string().describe( + "Required. A human-readable name for the agent.", + ).optional(), + skills: z.array(z.object({ + description: z.string().describe( + "Required. A detailed description of the skill.", + ).optional(), + examples: z.array(z.unknown()).describe( + "Example prompts or scenarios that this skill can handle.", + ).optional(), + id: z.string().describe( + "Required. A unique identifier for the agent's skill.", + ).optional(), + inputModes: z.array(z.unknown()).describe( + "The set of supported input media types for this skill, overriding the agent's defaults.", + ).optional(), + name: z.string().describe( + "Required. A human-readable name for the skill.", + ).optional(), + outputModes: z.array(z.unknown()).describe( + "The set of supported output media types for this skill, overriding the agent's defaults.", + ).optional(), + tags: z.array(z.unknown()).describe( + "Required. A set of keywords describing the skill's capabilities.", + ).optional(), + })).describe( + "Required. Skills represent a unit of ability an agent can perform. This may somewhat abstract but represents a more focused set of actions that the agent is highly likely to succeed at.", + ).optional(), + supportedInterfaces: z.array(z.object({ + protocolBinding: z.string().describe( + "Required. The protocol binding supported at this URL. This is an open form string, to be easily extended for other protocol bindings. The core ones officially supported are `JSONRPC`, `GRPC` and `HTTP+JSON`.", + ).optional(), + protocolVersion: z.string().describe( + 'Required. The version of the A2A protocol this interface exposes. Use the latest supported minor version per major version. Examples: "0.3", "1.0"', + ).optional(), + tenant: z.string().describe( + "Tenant ID to be used in the request when calling the agent.", + ).optional(), + url: z.string().describe( + 'Required. The URL where this interface is available. Must be a valid absolute HTTPS URL in production. Example: "https://api.example.com/a2a/v1", "https://grpc.example.com/a2a"', + ).optional(), + })).describe( + "Required. Ordered list of supported interfaces. The first entry is preferred.", + ).optional(), + version: z.string().describe("Required. The version of the agent.") + .optional(), + }).describe( + "AgentCard conveys key information about a remote agent. It is a trimmed version of the AgentCard defined in the A2A protocol https://a2a-protocol.org/dev/specification/#441-agentcard", + ).optional(), + description: z.string().describe("Required. The description of the tool.") + .optional(), + name: z.string().describe("Required. The name of the tool.").optional(), + }).describe( + "Represents a tool that allows the agent to call another remote agent.", + ).optional(), systemTool: z.object({ description: z.string().describe( "Output only. The description of the system tool.", @@ -819,6 +879,9 @@ const GlobalArgsSchema = z.object({ name: z.string().describe("Required. The name of the system tool.") .optional(), }).describe("Pre-defined system tool.").optional(), + timeout: z.string().describe( + "Optional. The timeout for the tool execution. If not set, the default timeout is 30 seconds for `SYNCHRONOUS` tools and 60 seconds for `ASYNCHRONOUS` tools.", + ).optional(), toolFakeConfig: z.object({ codeBlock: z.object({ pythonCode: z.string().describe( @@ -1251,10 +1314,35 @@ const StateSchema = z.object({ name: z.string(), pythonCode: z.string(), }).optional(), + remoteAgentTool: z.object({ + agentCard: z.object({ + description: z.string(), + name: z.string(), + skills: z.array(z.object({ + description: z.string(), + examples: z.array(z.unknown()), + id: z.string(), + inputModes: z.array(z.unknown()), + name: z.string(), + outputModes: z.array(z.unknown()), + tags: z.array(z.unknown()), + })), + supportedInterfaces: z.array(z.object({ + protocolBinding: z.string(), + protocolVersion: z.string(), + tenant: z.string(), + url: z.string(), + })), + version: z.string(), + }), + description: z.string(), + name: z.string(), + }).optional(), systemTool: z.object({ description: z.string(), name: z.string(), }).optional(), + timeout: z.string().optional(), toolFakeConfig: z.object({ codeBlock: z.object({ pythonCode: z.string(), @@ -2018,6 +2106,66 @@ const InputsSchema = z.object({ "Optional. The Python code to execute for the tool.", ).optional(), }).describe("A Python function tool.").optional(), + remoteAgentTool: z.object({ + agentCard: z.object({ + description: z.string().describe( + "Required. A description of the agent's domain of action/solution space.", + ).optional(), + name: z.string().describe( + "Required. A human-readable name for the agent.", + ).optional(), + skills: z.array(z.object({ + description: z.string().describe( + "Required. A detailed description of the skill.", + ).optional(), + examples: z.array(z.unknown()).describe( + "Example prompts or scenarios that this skill can handle.", + ).optional(), + id: z.string().describe( + "Required. A unique identifier for the agent's skill.", + ).optional(), + inputModes: z.array(z.unknown()).describe( + "The set of supported input media types for this skill, overriding the agent's defaults.", + ).optional(), + name: z.string().describe( + "Required. A human-readable name for the skill.", + ).optional(), + outputModes: z.array(z.unknown()).describe( + "The set of supported output media types for this skill, overriding the agent's defaults.", + ).optional(), + tags: z.array(z.unknown()).describe( + "Required. A set of keywords describing the skill's capabilities.", + ).optional(), + })).describe( + "Required. Skills represent a unit of ability an agent can perform. This may somewhat abstract but represents a more focused set of actions that the agent is highly likely to succeed at.", + ).optional(), + supportedInterfaces: z.array(z.object({ + protocolBinding: z.string().describe( + "Required. The protocol binding supported at this URL. This is an open form string, to be easily extended for other protocol bindings. The core ones officially supported are `JSONRPC`, `GRPC` and `HTTP+JSON`.", + ).optional(), + protocolVersion: z.string().describe( + 'Required. The version of the A2A protocol this interface exposes. Use the latest supported minor version per major version. Examples: "0.3", "1.0"', + ).optional(), + tenant: z.string().describe( + "Tenant ID to be used in the request when calling the agent.", + ).optional(), + url: z.string().describe( + 'Required. The URL where this interface is available. Must be a valid absolute HTTPS URL in production. Example: "https://api.example.com/a2a/v1", "https://grpc.example.com/a2a"', + ).optional(), + })).describe( + "Required. Ordered list of supported interfaces. The first entry is preferred.", + ).optional(), + version: z.string().describe("Required. The version of the agent.") + .optional(), + }).describe( + "AgentCard conveys key information about a remote agent. It is a trimmed version of the AgentCard defined in the A2A protocol https://a2a-protocol.org/dev/specification/#441-agentcard", + ).optional(), + description: z.string().describe("Required. The description of the tool.") + .optional(), + name: z.string().describe("Required. The name of the tool.").optional(), + }).describe( + "Represents a tool that allows the agent to call another remote agent.", + ).optional(), systemTool: z.object({ description: z.string().describe( "Output only. The description of the system tool.", @@ -2025,6 +2173,9 @@ const InputsSchema = z.object({ name: z.string().describe("Required. The name of the system tool.") .optional(), }).describe("Pre-defined system tool.").optional(), + timeout: z.string().describe( + "Optional. The timeout for the tool execution. If not set, the default timeout is 30 seconds for `SYNCHRONOUS` tools and 60 seconds for `ASYNCHRONOUS` tools.", + ).optional(), toolFakeConfig: z.object({ codeBlock: z.object({ pythonCode: z.string().describe( @@ -2174,7 +2325,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Gemini Enterprise for Customer Experience Apps.Tools. Registered at `@swamp/gcp/ces/apps-tools`. */ export const model = { type: "@swamp/gcp/ces/apps-tools", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.2", @@ -2221,6 +2372,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "Added: remoteAgentTool, timeout", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -2270,7 +2426,11 @@ export const model = { if (g["pythonFunction"] !== undefined) { body["pythonFunction"] = g["pythonFunction"]; } + if (g["remoteAgentTool"] !== undefined) { + body["remoteAgentTool"] = g["remoteAgentTool"]; + } if (g["systemTool"] !== undefined) body["systemTool"] = g["systemTool"]; + if (g["timeout"] !== undefined) body["timeout"] = g["timeout"]; if (g["toolFakeConfig"] !== undefined) { body["toolFakeConfig"] = g["toolFakeConfig"]; } @@ -2381,7 +2541,11 @@ export const model = { if (g["pythonFunction"] !== undefined) { body["pythonFunction"] = g["pythonFunction"]; } + if (g["remoteAgentTool"] !== undefined) { + body["remoteAgentTool"] = g["remoteAgentTool"]; + } if (g["systemTool"] !== undefined) body["systemTool"] = g["systemTool"]; + if (g["timeout"] !== undefined) body["timeout"] = g["timeout"]; if (g["toolFakeConfig"] !== undefined) { body["toolFakeConfig"] = g["toolFakeConfig"]; } diff --git a/model/gcp/ces/extensions/models/apps_versions.ts b/model/gcp/ces/extensions/models/apps_versions.ts index 52a0c6dee..95065e9ad 100644 --- a/model/gcp/ces/extensions/models/apps_versions.ts +++ b/model/gcp/ces/extensions/models/apps_versions.ts @@ -280,6 +280,9 @@ const GlobalArgsSchema = z.object({ updateTime: z.string().describe( "Output only. Timestamp when the agent was last updated.", ).optional(), + validationErrors: z.array(z.string()).describe( + "Output only. Misconfigurations or errors in the agent that may affect agent quality.", + ).optional(), })).describe("Optional. List of agents in the app.").optional(), app: z.object({ audioProcessingConfig: z.object({ @@ -711,6 +714,9 @@ const GlobalArgsSchema = z.object({ updateTime: z.string().describe( "Output only. Timestamp when the app was last updated.", ).optional(), + validationErrors: z.array(z.string()).describe( + "Output only. Misconfigurations or warnings in the app.", + ).optional(), variableDeclarations: z.array(z.object({ description: z.string().describe( "Required. The description of the variable.", @@ -776,6 +782,11 @@ const GlobalArgsSchema = z.object({ "Represents a select subset of an OpenAPI 3.0 schema object.", ).optional(), })).describe("Optional. The declarations of the variables.").optional(), + vpcScSettings: z.object({ + allowedOrigins: z.array(z.string()).describe( + 'Optional. The allowed HTTP(s) origins that OpenAPI tools in the App are able to directly call when VPC Service Controls are enabled. These strings must match the origin exactly, including the port if specified. For example, "https://example.com" or "https://example.com:443". This list does not yet apply to Python tools that may make direct HTTP calls.', + ).optional(), + }).describe("VPC-SC settings for the app.").optional(), }).describe( "An app serves as a top-level container for a group of agents, including the root agent and its sub-agents, along with their associated configurations. These agents work together to achieve specific goals within the app's context.", ).optional(), @@ -1522,6 +1533,32 @@ const GlobalArgsSchema = z.object({ "Optional. The Python code to execute for the tool.", ).optional(), }).describe("A Python function tool.").optional(), + remoteAgentTool: z.object({ + agentCard: z.object({ + description: z.unknown().describe( + "Required. A description of the agent's domain of action/solution space.", + ).optional(), + name: z.unknown().describe( + "Required. A human-readable name for the agent.", + ).optional(), + skills: z.unknown().describe( + "Required. Skills represent a unit of ability an agent can perform. This may somewhat abstract but represents a more focused set of actions that the agent is highly likely to succeed at.", + ).optional(), + supportedInterfaces: z.unknown().describe( + "Required. Ordered list of supported interfaces. The first entry is preferred.", + ).optional(), + version: z.unknown().describe("Required. The version of the agent.") + .optional(), + }).describe( + "AgentCard conveys key information about a remote agent. It is a trimmed version of the AgentCard defined in the A2A protocol https://a2a-protocol.org/dev/specification/#441-agentcard", + ).optional(), + description: z.string().describe( + "Required. The description of the tool.", + ).optional(), + name: z.string().describe("Required. The name of the tool.").optional(), + }).describe( + "Represents a tool that allows the agent to call another remote agent.", + ).optional(), systemTool: z.object({ description: z.string().describe( "Output only. The description of the system tool.", @@ -1529,6 +1566,9 @@ const GlobalArgsSchema = z.object({ name: z.string().describe("Required. The name of the system tool.") .optional(), }).describe("Pre-defined system tool.").optional(), + timeout: z.string().describe( + "Optional. The timeout for the tool execution. If not set, the default timeout is 30 seconds for `SYNCHRONOUS` tools and 60 seconds for `ASYNCHRONOUS` tools.", + ).optional(), toolFakeConfig: z.object({ codeBlock: z.object({ pythonCode: z.unknown().describe( @@ -1887,6 +1927,7 @@ const StateSchema = z.object({ disablePlannerTransfer: z.unknown(), })), updateTime: z.string(), + validationErrors: z.array(z.string()), })), app: z.object({ audioProcessingConfig: z.object({ @@ -2049,6 +2090,7 @@ const StateSchema = z.object({ }), toolExecutionMode: z.string(), updateTime: z.string(), + validationErrors: z.array(z.string()), variableDeclarations: z.array(z.object({ description: z.string(), name: z.string(), @@ -2074,6 +2116,9 @@ const StateSchema = z.object({ uniqueItems: z.unknown(), }), })), + vpcScSettings: z.object({ + allowedOrigins: z.array(z.string()), + }), }), examples: z.array(z.object({ createTime: z.string(), @@ -2364,10 +2409,22 @@ const StateSchema = z.object({ name: z.string(), pythonCode: z.string(), }), + remoteAgentTool: z.object({ + agentCard: z.object({ + description: z.unknown(), + name: z.unknown(), + skills: z.unknown(), + supportedInterfaces: z.unknown(), + version: z.unknown(), + }), + description: z.string(), + name: z.string(), + }), systemTool: z.object({ description: z.string(), name: z.string(), }), + timeout: z.string(), toolFakeConfig: z.object({ codeBlock: z.object({ pythonCode: z.unknown(), @@ -2677,6 +2734,9 @@ const InputsSchema = z.object({ updateTime: z.string().describe( "Output only. Timestamp when the agent was last updated.", ).optional(), + validationErrors: z.array(z.string()).describe( + "Output only. Misconfigurations or errors in the agent that may affect agent quality.", + ).optional(), })).describe("Optional. List of agents in the app.").optional(), app: z.object({ audioProcessingConfig: z.object({ @@ -3108,6 +3168,9 @@ const InputsSchema = z.object({ updateTime: z.string().describe( "Output only. Timestamp when the app was last updated.", ).optional(), + validationErrors: z.array(z.string()).describe( + "Output only. Misconfigurations or warnings in the app.", + ).optional(), variableDeclarations: z.array(z.object({ description: z.string().describe( "Required. The description of the variable.", @@ -3173,6 +3236,11 @@ const InputsSchema = z.object({ "Represents a select subset of an OpenAPI 3.0 schema object.", ).optional(), })).describe("Optional. The declarations of the variables.").optional(), + vpcScSettings: z.object({ + allowedOrigins: z.array(z.string()).describe( + 'Optional. The allowed HTTP(s) origins that OpenAPI tools in the App are able to directly call when VPC Service Controls are enabled. These strings must match the origin exactly, including the port if specified. For example, "https://example.com" or "https://example.com:443". This list does not yet apply to Python tools that may make direct HTTP calls.', + ).optional(), + }).describe("VPC-SC settings for the app.").optional(), }).describe( "An app serves as a top-level container for a group of agents, including the root agent and its sub-agents, along with their associated configurations. These agents work together to achieve specific goals within the app's context.", ).optional(), @@ -3919,6 +3987,32 @@ const InputsSchema = z.object({ "Optional. The Python code to execute for the tool.", ).optional(), }).describe("A Python function tool.").optional(), + remoteAgentTool: z.object({ + agentCard: z.object({ + description: z.unknown().describe( + "Required. A description of the agent's domain of action/solution space.", + ).optional(), + name: z.unknown().describe( + "Required. A human-readable name for the agent.", + ).optional(), + skills: z.unknown().describe( + "Required. Skills represent a unit of ability an agent can perform. This may somewhat abstract but represents a more focused set of actions that the agent is highly likely to succeed at.", + ).optional(), + supportedInterfaces: z.unknown().describe( + "Required. Ordered list of supported interfaces. The first entry is preferred.", + ).optional(), + version: z.unknown().describe("Required. The version of the agent.") + .optional(), + }).describe( + "AgentCard conveys key information about a remote agent. It is a trimmed version of the AgentCard defined in the A2A protocol https://a2a-protocol.org/dev/specification/#441-agentcard", + ).optional(), + description: z.string().describe( + "Required. The description of the tool.", + ).optional(), + name: z.string().describe("Required. The name of the tool.").optional(), + }).describe( + "Represents a tool that allows the agent to call another remote agent.", + ).optional(), systemTool: z.object({ description: z.string().describe( "Output only. The description of the system tool.", @@ -3926,6 +4020,9 @@ const InputsSchema = z.object({ name: z.string().describe("Required. The name of the system tool.") .optional(), }).describe("Pre-defined system tool.").optional(), + timeout: z.string().describe( + "Optional. The timeout for the tool execution. If not set, the default timeout is 30 seconds for `SYNCHRONOUS` tools and 60 seconds for `ASYNCHRONOUS` tools.", + ).optional(), toolFakeConfig: z.object({ codeBlock: z.object({ pythonCode: z.unknown().describe( @@ -4208,7 +4305,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Gemini Enterprise for Customer Experience Apps.Versions. Registered at `@swamp/gcp/ces/apps-versions`. */ export const model = { type: "@swamp/gcp/ces/apps-versions", - version: "2026.04.23.2", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -4265,6 +4362,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/ces/manifest.yaml b/model/gcp/ces/manifest.yaml index 30cff2109..462570ee5 100644 --- a/model/gcp/ces/manifest.yaml +++ b/model/gcp/ces/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/ces" -version: "2026.04.23.2" +version: "2026.05.08.1" description: "Google Cloud ces infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - ces - cloud - infrastructure +releaseNotes: | + - Updated: apps, apps_agents, apps_tools, apps_versions models: - apps.ts - apps_agents.ts diff --git a/model/gcp/chat/extensions/models/spaces_messages.ts b/model/gcp/chat/extensions/models/spaces_messages.ts index 4dd638517..f6b657c65 100644 --- a/model/gcp/chat/extensions/models/spaces_messages.ts +++ b/model/gcp/chat/extensions/models/spaces_messages.ts @@ -54,6 +54,9 @@ const INSERT_CONFIG = { "parent", ], "parameters": { + "createMessageNotificationOptions.notificationType": { + "location": "query", + }, "messageId": { "location": "query", }, @@ -888,6 +891,9 @@ const GlobalArgsSchema = z.object({ }).describe( "A thread in a Google Chat space. For example usage, see [Start or reply to a message thread](https://developers.google.com/workspace/chat/create-messages#create-message-thread). If you specify a thread when creating a message, you can set the [`messageReplyOption`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/create#messagereplyoption) field to determine what happens if no matching thread is found.", ).optional(), + createMessageNotificationOptions_notificationType: z.string().describe( + "The notification type for the message.", + ).optional(), messageId: z.string().describe( "Optional. A custom ID for a message. Lets Chat apps get, update, or delete a message without needing to store the system-assigned ID in the message's resource name (represented in the message `name` field). The value for this field must meet the following requirements: * Begins with `client-`. For example, `client-custom-name` is a valid custom ID, but `custom-name` is not. * Contains up to 63 characters and only lowercase letters, numbers, and hyphens. * Is unique within a space. A Chat app can't use the same custom ID for different messages. For details, see [Name a message](https://developers.google.com/workspace/chat/create-messages#name_a_created_message).", ).optional(), @@ -1228,6 +1234,7 @@ const StateSchema = z.object({ name: z.string(), type: z.string(), }).optional(), + silent: z.boolean().optional(), slashCommand: z.object({ commandId: z.string(), }).optional(), @@ -2090,6 +2097,9 @@ const InputsSchema = z.object({ }).describe( "A thread in a Google Chat space. For example usage, see [Start or reply to a message thread](https://developers.google.com/workspace/chat/create-messages#create-message-thread). If you specify a thread when creating a message, you can set the [`messageReplyOption`](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/create#messagereplyoption) field to determine what happens if no matching thread is found.", ).optional(), + createMessageNotificationOptions_notificationType: z.string().describe( + "The notification type for the message.", + ).optional(), messageId: z.string().describe( "Optional. A custom ID for a message. Lets Chat apps get, update, or delete a message without needing to store the system-assigned ID in the message's resource name (represented in the message `name` field). The value for this field must meet the following requirements: * Begins with `client-`. For example, `client-custom-name` is a valid custom ID, but `custom-name` is not. * Contains up to 63 characters and only lowercase letters, numbers, and hyphens. * Is unique within a space. A Chat app can't use the same custom ID for different messages. For details, see [Name a message](https://developers.google.com/workspace/chat/create-messages#name_a_created_message).", ).optional(), @@ -2107,7 +2117,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Google Chat Spaces.Messages. Registered at `@swamp/gcp/chat/spaces-messages`. */ export const model = { type: "@swamp/gcp/chat/spaces-messages", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -2154,6 +2164,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "Added: createMessageNotificationOptions_notificationType", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -2207,6 +2222,12 @@ export const model = { if (g["space"] !== undefined) body["space"] = g["space"]; if (g["text"] !== undefined) body["text"] = g["text"]; if (g["thread"] !== undefined) body["thread"] = g["thread"]; + if ( + g["createMessageNotificationOptions_notificationType"] !== undefined + ) { + body["createMessageNotificationOptions_notificationType"] = + g["createMessageNotificationOptions_notificationType"]; + } if (g["messageId"] !== undefined) body["messageId"] = g["messageId"]; if (g["messageReplyOption"] !== undefined) { body["messageReplyOption"] = g["messageReplyOption"]; diff --git a/model/gcp/chat/extensions/models/spaces_spaceevents.ts b/model/gcp/chat/extensions/models/spaces_spaceevents.ts index 19cdeb399..0b98af741 100644 --- a/model/gcp/chat/extensions/models/spaces_spaceevents.ts +++ b/model/gcp/chat/extensions/models/spaces_spaceevents.ts @@ -226,6 +226,7 @@ const StateSchema = z.object({ name: z.unknown(), type: z.unknown(), }), + silent: z.boolean(), slashCommand: z.object({ commandId: z.unknown(), }), @@ -312,6 +313,7 @@ const StateSchema = z.object({ name: z.unknown(), type: z.unknown(), }), + silent: z.boolean(), slashCommand: z.object({ commandId: z.unknown(), }), @@ -398,6 +400,7 @@ const StateSchema = z.object({ name: z.unknown(), type: z.unknown(), }), + silent: z.boolean(), slashCommand: z.object({ commandId: z.unknown(), }), @@ -580,6 +583,7 @@ const StateSchema = z.object({ name: z.string(), type: z.string(), }), + silent: z.boolean(), slashCommand: z.object({ commandId: z.string(), }), @@ -811,6 +815,7 @@ const StateSchema = z.object({ name: z.string(), type: z.string(), }), + silent: z.boolean(), slashCommand: z.object({ commandId: z.string(), }), @@ -1042,6 +1047,7 @@ const StateSchema = z.object({ name: z.string(), type: z.string(), }), + silent: z.boolean(), slashCommand: z.object({ commandId: z.string(), }), @@ -1347,7 +1353,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Google Chat Spaces.SpaceEvents. Registered at `@swamp/gcp/chat/spaces-spaceevents`. */ export const model = { type: "@swamp/gcp/chat/spaces-spaceevents", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.2", @@ -1384,6 +1390,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/chat/manifest.yaml b/model/gcp/chat/manifest.yaml index 76e4fc78d..7a4a0190d 100644 --- a/model/gcp/chat/manifest.yaml +++ b/model/gcp/chat/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/chat" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud chat infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - chat - cloud - infrastructure +releaseNotes: | + - Updated: spaces_messages, spaces_spaceevents models: - customemojis.ts - spaces.ts diff --git a/model/gcp/chromemanagement/extensions/models/customers_connectorconfigs.ts b/model/gcp/chromemanagement/extensions/models/customers_connectorconfigs.ts index 7d2c53ea1..268f184b0 100644 --- a/model/gcp/chromemanagement/extensions/models/customers_connectorconfigs.ts +++ b/model/gcp/chromemanagement/extensions/models/customers_connectorconfigs.ts @@ -303,6 +303,13 @@ const GlobalArgsSchema = z.object({ ).optional(), }).describe("Reporting settings for connector configs.").optional(), }).describe("Google SecOps connector config.").optional(), + mipLabelConfig: z.object({ + domains: z.array(z.string()).describe( + "Optional. Domain can be used optionally for the corner case where one Dasher customer ID maps to multiple Microsoft tenant ID. Each domain can be verified with at most one Microsoft tenant.", + ).optional(), + microsoftTenantId: z.string().describe("Required. Microsoft tenant ID.") + .optional(), + }).describe("MIP label connector config.").optional(), paloAltoNetworksConfig: z.object({ apiKey: z.string().describe( "Required. Input only. API key to use on the ingestion API.", @@ -507,6 +514,7 @@ const GlobalArgsSchema = z.object({ "IDENTITY_BASED_ENROLLMENT", "CERTIFICATE_AUTHORITY", "ROOT_STORE", + "CONTENT_ANALYSIS", ]).describe("Required. The type of the connector.").optional(), connectorConfigId: z.string().describe( "Optional. ID to use for the connector config, which becomes the final component of the connector config's resource name. If provided, the ID must be 1-63 characters long, and contain only lowercase letters, digits, and hyphens. It must start with a letter, and end with a letter or number. If not provided, the connector config will be assigned a random UUID.", @@ -558,6 +566,10 @@ const StateSchema = z.object({ enabledOptInEvents: z.array(z.string()), }), }), + mipLabelConfig: z.object({ + domains: z.array(z.string()), + microsoftTenantId: z.string(), + }), paloAltoNetworksConfig: z.object({ apiKey: z.string(), host: z.string(), @@ -812,6 +824,13 @@ const InputsSchema = z.object({ ).optional(), }).describe("Reporting settings for connector configs.").optional(), }).describe("Google SecOps connector config.").optional(), + mipLabelConfig: z.object({ + domains: z.array(z.string()).describe( + "Optional. Domain can be used optionally for the corner case where one Dasher customer ID maps to multiple Microsoft tenant ID. Each domain can be verified with at most one Microsoft tenant.", + ).optional(), + microsoftTenantId: z.string().describe("Required. Microsoft tenant ID.") + .optional(), + }).describe("MIP label connector config.").optional(), paloAltoNetworksConfig: z.object({ apiKey: z.string().describe( "Required. Input only. API key to use on the ingestion API.", @@ -1016,6 +1035,7 @@ const InputsSchema = z.object({ "IDENTITY_BASED_ENROLLMENT", "CERTIFICATE_AUTHORITY", "ROOT_STORE", + "CONTENT_ANALYSIS", ]).describe("Required. The type of the connector.").optional(), connectorConfigId: z.string().describe( "Optional. ID to use for the connector config, which becomes the final component of the connector config's resource name. If provided, the ID must be 1-63 characters long, and contain only lowercase letters, digits, and hyphens. It must start with a letter, and end with a letter or number. If not provided, the connector config will be assigned a random UUID.", @@ -1028,7 +1048,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Chrome Management Customers.ConnectorConfigs. Registered at `@swamp/gcp/chromemanagement/customers-connectorconfigs`. */ export const model = { type: "@swamp/gcp/chromemanagement/customers-connectorconfigs", - version: "2026.04.24.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.23.1", @@ -1040,6 +1060,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/chromemanagement/manifest.yaml b/model/gcp/chromemanagement/manifest.yaml index 48a2007d9..d6a7abd10 100644 --- a/model/gcp/chromemanagement/manifest.yaml +++ b/model/gcp/chromemanagement/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/chromemanagement" -version: "2026.04.24.1" +version: "2026.05.08.1" description: "Google Cloud chromemanagement infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - chromemanagement - cloud - infrastructure +releaseNotes: | + - Updated: customers_connectorconfigs models: - customers_apps_android.ts - customers_apps_chrome.ts diff --git a/model/gcp/classroom/extensions/models/courses.ts b/model/gcp/classroom/extensions/models/courses.ts index 14e6de668..64e5284df 100644 --- a/model/gcp/classroom/extensions/models/courses.ts +++ b/model/gcp/classroom/extensions/models/courses.ts @@ -144,6 +144,9 @@ const GlobalArgsSchema = z.object({ id: z.string().describe( "Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.", ).optional(), + levels: z.string().describe( + 'Optional. Levels for the course. Examples: "9th grade", "Middle school", "4th - 5th", "K-2", "3000". If set, this field must be a valid UTF-8 string and fewer than 1000 characters. This field can only be cleared using the `PatchCourse` method.', + ).optional(), name: z.string().describe( 'Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.', ).optional(), @@ -223,6 +226,7 @@ const StateSchema = z.object({ }).optional(), guardiansEnabled: z.boolean().optional(), id: z.string(), + levels: z.string().optional(), name: z.string().optional(), ownerId: z.string().optional(), room: z.string().optional(), @@ -304,6 +308,9 @@ const InputsSchema = z.object({ id: z.string().describe( "Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.", ).optional(), + levels: z.string().describe( + 'Optional. Levels for the course. Examples: "9th grade", "Middle school", "4th - 5th", "K-2", "3000". If set, this field must be a valid UTF-8 string and fewer than 1000 characters. This field can only be cleared using the `PatchCourse` method.', + ).optional(), name: z.string().describe( 'Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.', ).optional(), @@ -337,7 +344,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Google Classroom Courses. Registered at `@swamp/gcp/classroom/courses`. */ export const model = { type: "@swamp/gcp/classroom/courses", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -374,6 +381,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "Added: levels", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -423,6 +435,7 @@ export const model = { body["guardiansEnabled"] = g["guardiansEnabled"]; } if (g["id"] !== undefined) body["id"] = g["id"]; + if (g["levels"] !== undefined) body["levels"] = g["levels"]; if (g["name"] !== undefined) body["name"] = g["name"]; if (g["ownerId"] !== undefined) body["ownerId"] = g["ownerId"]; if (g["room"] !== undefined) body["room"] = g["room"]; @@ -531,6 +544,7 @@ export const model = { if (g["guardiansEnabled"] !== undefined) { body["guardiansEnabled"] = g["guardiansEnabled"]; } + if (g["levels"] !== undefined) body["levels"] = g["levels"]; if (g["name"] !== undefined) body["name"] = g["name"]; if (g["ownerId"] !== undefined) body["ownerId"] = g["ownerId"]; if (g["room"] !== undefined) body["room"] = g["room"]; diff --git a/model/gcp/classroom/manifest.yaml b/model/gcp/classroom/manifest.yaml index 3439eace0..faee8ee3c 100644 --- a/model/gcp/classroom/manifest.yaml +++ b/model/gcp/classroom/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/classroom" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud classroom infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - classroom - cloud - infrastructure +releaseNotes: | + - Updated: courses models: - courses.ts - courses_aliases.ts diff --git a/model/gcp/clouddeploy/extensions/models/customtargettypes.ts b/model/gcp/clouddeploy/extensions/models/customtargettypes.ts index fa0098f4d..ba96fb631 100644 --- a/model/gcp/clouddeploy/extensions/models/customtargettypes.ts +++ b/model/gcp/clouddeploy/extensions/models/customtargettypes.ts @@ -202,6 +202,9 @@ const GlobalArgsSchema = z.object({ image: z.string().describe( "Required. Image is the container image to use.", ).optional(), + script: z.string().describe( + "Optional. Shell script to execute. If provided then command and args cannot be specified.", + ).optional(), }).describe( "This task is represented by a container that is executed in the Cloud Build execution environment.", ).optional(), @@ -222,6 +225,9 @@ const GlobalArgsSchema = z.object({ image: z.string().describe( "Required. Image is the container image to use.", ).optional(), + script: z.string().describe( + "Optional. Shell script to execute. If provided then command and args cannot be specified.", + ).optional(), }).describe( "This task is represented by a container that is executed in the Cloud Build execution environment.", ).optional(), @@ -275,6 +281,7 @@ const StateSchema = z.object({ command: z.array(z.string()), env: z.record(z.string(), z.unknown()), image: z.string(), + script: z.string(), }), }), render: z.object({ @@ -283,6 +290,7 @@ const StateSchema = z.object({ command: z.array(z.string()), env: z.record(z.string(), z.unknown()), image: z.string(), + script: z.string(), }), }), }).optional(), @@ -370,6 +378,9 @@ const InputsSchema = z.object({ image: z.string().describe( "Required. Image is the container image to use.", ).optional(), + script: z.string().describe( + "Optional. Shell script to execute. If provided then command and args cannot be specified.", + ).optional(), }).describe( "This task is represented by a container that is executed in the Cloud Build execution environment.", ).optional(), @@ -390,6 +401,9 @@ const InputsSchema = z.object({ image: z.string().describe( "Required. Image is the container image to use.", ).optional(), + script: z.string().describe( + "Optional. Shell script to execute. If provided then command and args cannot be specified.", + ).optional(), }).describe( "This task is represented by a container that is executed in the Cloud Build execution environment.", ).optional(), @@ -410,7 +424,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Deploy CustomTargetTypes. Registered at `@swamp/gcp/clouddeploy/customtargettypes`. */ export const model = { type: "@swamp/gcp/clouddeploy/customtargettypes", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -442,6 +456,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/clouddeploy/extensions/models/deliverypipelines_releases.ts b/model/gcp/clouddeploy/extensions/models/deliverypipelines_releases.ts index 1d400b6b9..9c0f63c20 100644 --- a/model/gcp/clouddeploy/extensions/models/deliverypipelines_releases.ts +++ b/model/gcp/clouddeploy/extensions/models/deliverypipelines_releases.ts @@ -466,6 +466,7 @@ const StateSchema = z.object({ command: z.unknown(), env: z.unknown(), image: z.unknown(), + script: z.unknown(), }), }), render: z.object({ @@ -474,6 +475,7 @@ const StateSchema = z.object({ command: z.unknown(), env: z.unknown(), image: z.unknown(), + script: z.unknown(), }), }), }), @@ -910,7 +912,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Deploy DeliveryPipelines.Releases. Registered at `@swamp/gcp/clouddeploy/deliverypipelines-releases`. */ export const model = { type: "@swamp/gcp/clouddeploy/deliverypipelines-releases", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -947,6 +949,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/clouddeploy/extensions/models/deliverypipelines_releases_rollouts_jobruns.ts b/model/gcp/clouddeploy/extensions/models/deliverypipelines_releases_rollouts_jobruns.ts index 5dea8b702..b01ae22fc 100644 --- a/model/gcp/clouddeploy/extensions/models/deliverypipelines_releases_rollouts_jobruns.ts +++ b/model/gcp/clouddeploy/extensions/models/deliverypipelines_releases_rollouts_jobruns.ts @@ -85,6 +85,7 @@ const StateSchema = z.object({ command: z.unknown(), env: z.unknown(), image: z.unknown(), + script: z.unknown(), }), }), })), @@ -174,7 +175,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Deploy DeliveryPipelines.Releases.Rollouts.JobRuns. Registered at `@swamp/gcp/clouddeploy/deliverypipelines-releases-rollouts-jobruns`. */ export const model = { type: "@swamp/gcp/clouddeploy/deliverypipelines-releases-rollouts-jobruns", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -211,6 +212,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/clouddeploy/manifest.yaml b/model/gcp/clouddeploy/manifest.yaml index 22fe5933c..526a9648e 100644 --- a/model/gcp/clouddeploy/manifest.yaml +++ b/model/gcp/clouddeploy/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/clouddeploy" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud clouddeploy infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - clouddeploy - cloud - infrastructure +releaseNotes: | + - Updated: customtargettypes, deliverypipelines_releases, deliverypipelines_releases_rollouts_jobruns models: - customtargettypes.ts - deliverypipelines.ts diff --git a/model/gcp/compute/extensions/models/autoscalers.ts b/model/gcp/compute/extensions/models/autoscalers.ts index f3b2a2a9a..8bba43ef2 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. [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. 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,6 +224,9 @@ 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.", @@ -272,6 +275,7 @@ 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(), @@ -348,7 +352,7 @@ const InputsSchema = z.object({ scaleInControl: z.object({ maxScaledInReplicas: z.object({ calculated: z.number().int().describe( - "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.", + "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.", @@ -389,6 +393,9 @@ 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.", @@ -411,7 +418,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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -453,6 +460,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 5fe11cb96..e9f03f03a 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/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.", + "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.", ).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/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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -694,6 +694,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 07bed38a5..3b4dc0a68 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", "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.", + 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.", ).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", "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.", + 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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -918,6 +918,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 new file mode 100644 index 000000000..47357a948 --- /dev/null +++ b/model/gcp/compute/extensions/models/globalvmextensionpolicies.ts @@ -0,0 +1,618 @@ +// 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.08.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 c9606e567..e36e6ba4d 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/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.", + "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.", ).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/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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -696,6 +696,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 557d07cb3..172f2adf2 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. [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. 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. [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. 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. [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. 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. [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. 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. [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. 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. [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. 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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1138,6 +1138,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 bd01ab3e5..c0049734b 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/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.", + "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.", ).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/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.", + "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.", ).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/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.", + "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.", ).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/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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1887,6 +1887,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 6f84501f6..630d7f1fc 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/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.", + "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.", ).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 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.", + "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.", ).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/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.", + "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.", ).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 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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1594,6 +1594,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 175471490..e41a5aa5b 100644 --- a/model/gcp/compute/extensions/models/licensecodes.ts +++ b/model/gcp/compute/extensions/models/licensecodes.ts @@ -50,18 +50,31 @@ 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; @@ -73,7 +86,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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -115,6 +128,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 a7bf8b552..2668fbe52 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/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.", + "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.", ).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/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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -319,6 +319,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 859785af3..39ce81343 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/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.", + "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.", ).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 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.", + "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.", ).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/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.", + "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.", ).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 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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -2562,6 +2562,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 ee87436ff..a4e15db2b 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", "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.", + 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.", ).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", "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.", + 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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -930,6 +930,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 e691db734..6c7a27792 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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -341,6 +341,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -636,6 +641,51 @@ 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 fe2df9d85..6c867b3d5 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. [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. 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,6 +224,9 @@ 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.", @@ -272,6 +275,7 @@ 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(), @@ -348,7 +352,7 @@ const InputsSchema = z.object({ scaleInControl: z.object({ maxScaledInReplicas: z.object({ calculated: z.number().int().describe( - "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.", + "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.", @@ -389,6 +393,9 @@ 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.", @@ -411,7 +418,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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -453,6 +460,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 e2b1c7f6c..3145a464e 100644 --- a/model/gcp/compute/extensions/models/regioncommitments.ts +++ b/model/gcp/compute/extensions/models/regioncommitments.ts @@ -452,6 +452,7 @@ const GlobalArgsSchema = z.object({ "GENERAL_PURPOSE_T2D", "GRAPHICS_OPTIMIZED", "GRAPHICS_OPTIMIZED_G4", + "GRAPHICS_OPTIMIZED_G4_VGPU", "MEMORY_OPTIMIZED", "MEMORY_OPTIMIZED_M3", "MEMORY_OPTIMIZED_M4", @@ -468,7 +469,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,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,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.", ).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).", @@ -953,6 +954,7 @@ const InputsSchema = z.object({ "GENERAL_PURPOSE_T2D", "GRAPHICS_OPTIMIZED", "GRAPHICS_OPTIMIZED_G4", + "GRAPHICS_OPTIMIZED_G4_VGPU", "MEMORY_OPTIMIZED", "MEMORY_OPTIMIZED_M3", "MEMORY_OPTIMIZED_M4", @@ -969,7 +971,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,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,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.", ).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).", @@ -979,7 +981,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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1052,6 +1054,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 073264062..f858aae21 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/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.", + "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.", ).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/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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -694,6 +694,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 583528bed..d3b984da6 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. [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. 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. [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. 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. [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. 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. [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. 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. [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. 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. [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. 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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1138,6 +1138,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 d82bfaf86..0ef072c44 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/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.", + "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.", ).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 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.", + "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.", ).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/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.", + "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.", ).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 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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -1617,6 +1617,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 5365a2cb1..383fbe8eb 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", "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.", + 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.", ).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", "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.", + 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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -959,6 +959,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 876a40ed6..b82a5a23d 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/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.", + "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.", ).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/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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.23.1", @@ -393,6 +393,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 89e28dc25..155cf22db 100644 --- a/model/gcp/compute/extensions/models/regionsslpolicies.ts +++ b/model/gcp/compute/extensions/models/regionsslpolicies.ts @@ -147,6 +147,9 @@ 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", @@ -174,6 +177,7 @@ 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(), @@ -206,6 +210,9 @@ 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", @@ -226,7 +233,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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -272,6 +279,11 @@ export const model = { return rest; }, }, + { + toVersion: "2026.05.08.1", + description: "Added: postQuantumKeyExchange", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -307,6 +319,9 @@ 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"]); @@ -395,6 +410,9 @@ 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 new file mode 100644 index 000000000..6f097d35d --- /dev/null +++ b/model/gcp/compute/extensions/models/rolloutplans.ts @@ -0,0 +1,450 @@ +// 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.08.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 new file mode 100644 index 000000000..8e62449e6 --- /dev/null +++ b/model/gcp/compute/extensions/models/rollouts.ts @@ -0,0 +1,282 @@ +// 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.08.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 bb4bf98df..85447b821 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/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.", + "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.", ).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/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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.03.31.1", @@ -422,6 +422,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 552d5c11b..00f668502 100644 --- a/model/gcp/compute/extensions/models/sslpolicies.ts +++ b/model/gcp/compute/extensions/models/sslpolicies.ts @@ -127,6 +127,9 @@ 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", @@ -151,6 +154,7 @@ 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(), @@ -183,6 +187,9 @@ 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", @@ -200,7 +207,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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -246,6 +253,11 @@ export const model = { return rest; }, }, + { + toVersion: "2026.05.08.1", + description: "Added: postQuantumKeyExchange", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -280,6 +292,9 @@ 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"]); @@ -363,6 +378,9 @@ 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 c0a7fa6f6..a522540de 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/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.", + "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.", ).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/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.", + "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.", ).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.04.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -348,6 +348,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 1ffff032f..745660d4d 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.04.1" +version: "2026.05.08.1" description: "Google Cloud compute infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,9 @@ labels: - compute - cloud - infrastructure +releaseNotes: | + - Added: globalvmextensionpolicies, rolloutplans, rollouts + - 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,6 +31,7 @@ models: - globalforwardingrules.ts - globalnetworkendpointgroups.ts - globalpublicdelegatedprefixes.ts + - globalvmextensionpolicies.ts - healthchecks.ts - httphealthchecks.ts - httpshealthchecks.ts @@ -102,6 +106,8 @@ models: - reservationslots.ts - reservationsubblocks.ts - resourcepolicies.ts + - rolloutplans.ts + - rollouts.ts - routers.ts - routes.ts - securitypolicies.ts diff --git a/model/gcp/dataflow/extensions/models/jobs.ts b/model/gcp/dataflow/extensions/models/jobs.ts index 471a88146..f808b1808 100644 --- a/model/gcp/dataflow/extensions/models/jobs.ts +++ b/model/gcp/dataflow/extensions/models/jobs.ts @@ -287,6 +287,9 @@ const GlobalArgsSchema = z.object({ "The resource to read the package from. The supported resource type is: Google Cloud Storage: storage.googleapis.com/{bucket} bucket.storage.googleapis.com/", ).optional(), name: z.unknown().describe("The name of the package.").optional(), + sha256: z.unknown().describe( + "Optional. The hex-encoded SHA256 checksum of the package. If the checksum is provided, the worker will verify the checksum of the package before using it. If the checksum does not match, the worker will fail to start.", + ).optional(), })).describe("Packages to be installed on workers.").optional(), poolArgs: z.record(z.string(), z.string()).describe( "Extra arguments for this worker pool.", @@ -872,6 +875,7 @@ const StateSchema = z.object({ packages: z.array(z.object({ location: z.unknown(), name: z.unknown(), + sha256: z.unknown(), })), poolArgs: z.record(z.string(), z.unknown()), sdkHarnessContainerImages: z.array(z.object({ @@ -1252,6 +1256,9 @@ const InputsSchema = z.object({ "The resource to read the package from. The supported resource type is: Google Cloud Storage: storage.googleapis.com/{bucket} bucket.storage.googleapis.com/", ).optional(), name: z.unknown().describe("The name of the package.").optional(), + sha256: z.unknown().describe( + "Optional. The hex-encoded SHA256 checksum of the package. If the checksum is provided, the worker will verify the checksum of the package before using it. If the checksum does not match, the worker will fail to start.", + ).optional(), })).describe("Packages to be installed on workers.").optional(), poolArgs: z.record(z.string(), z.string()).describe( "Extra arguments for this worker pool.", @@ -1784,7 +1791,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Dataflow Jobs. Registered at `@swamp/gcp/dataflow/jobs`. */ export const model = { type: "@swamp/gcp/dataflow/jobs", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1826,6 +1833,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/dataflow/manifest.yaml b/model/gcp/dataflow/manifest.yaml index d8e24e78c..4137f11fa 100644 --- a/model/gcp/dataflow/manifest.yaml +++ b/model/gcp/dataflow/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/dataflow" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud dataflow infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - dataflow - cloud - infrastructure +releaseNotes: | + - Updated: jobs models: - jobs.ts - jobs_messages.ts diff --git a/model/gcp/datalineage/extensions/models/processes_runs_lineageevents.ts b/model/gcp/datalineage/extensions/models/processes_runs_lineageevents.ts index d7b6e6b86..5853303ce 100644 --- a/model/gcp/datalineage/extensions/models/processes_runs_lineageevents.ts +++ b/model/gcp/datalineage/extensions/models/processes_runs_lineageevents.ts @@ -86,7 +86,18 @@ const GlobalArgsSchema = z.object({ "Optional. The end of the transformation which resulted in this lineage event. For streaming scenarios, it should be the end of the period from which the lineage is being reported.", ).optional(), links: z.array(z.object({ + dependencyInfo: z.object({ + dependencyType: z.enum([ + "DEPENDENCY_TYPE_UNSPECIFIED", + "EXACT_COPY", + "OTHER", + ]).describe("Required. Type of dependency.").optional(), + }).describe("Dependency info describes how one entity depends on another.") + .optional(), source: z.object({ + field: z.array(z.string()).describe( + 'Optional. Field path within the entity. Each nesting level should be a separate value in the repeated field. The order matters. Must be empty for asset level lineage For example to address "salary.net" subfield where "salary" is a column and "net" is a proto field two values in the `field` should be reported, the first is "salary" and the second is "net". Each field length is limited to 500 characters. Maximum supported nesting level is 20.', + ).optional(), fullyQualifiedName: z.string().describe( "Required. [Fully Qualified Name (FQN)](https://cloud.google.com/dataplex/docs/fully-qualified-names) of the entity.", ).optional(), @@ -94,6 +105,9 @@ const GlobalArgsSchema = z.object({ "The soft reference to everything you can attach a lineage event to.", ).optional(), target: z.object({ + field: z.array(z.string()).describe( + 'Optional. Field path within the entity. Each nesting level should be a separate value in the repeated field. The order matters. Must be empty for asset level lineage For example to address "salary.net" subfield where "salary" is a column and "net" is a proto field two values in the `field` should be reported, the first is "salary" and the second is "net". Each field length is limited to 500 characters. Maximum supported nesting level is 20.', + ).optional(), fullyQualifiedName: z.string().describe( "Required. [Fully Qualified Name (FQN)](https://cloud.google.com/dataplex/docs/fully-qualified-names) of the entity.", ).optional(), @@ -120,10 +134,15 @@ const GlobalArgsSchema = z.object({ const StateSchema = z.object({ endTime: z.string().optional(), links: z.array(z.object({ + dependencyInfo: z.object({ + dependencyType: z.string(), + }), source: z.object({ + field: z.array(z.string()), fullyQualifiedName: z.string(), }), target: z.object({ + field: z.array(z.string()), fullyQualifiedName: z.string(), }), })).optional(), @@ -138,7 +157,18 @@ const InputsSchema = z.object({ "Optional. The end of the transformation which resulted in this lineage event. For streaming scenarios, it should be the end of the period from which the lineage is being reported.", ).optional(), links: z.array(z.object({ + dependencyInfo: z.object({ + dependencyType: z.enum([ + "DEPENDENCY_TYPE_UNSPECIFIED", + "EXACT_COPY", + "OTHER", + ]).describe("Required. Type of dependency.").optional(), + }).describe("Dependency info describes how one entity depends on another.") + .optional(), source: z.object({ + field: z.array(z.string()).describe( + 'Optional. Field path within the entity. Each nesting level should be a separate value in the repeated field. The order matters. Must be empty for asset level lineage For example to address "salary.net" subfield where "salary" is a column and "net" is a proto field two values in the `field` should be reported, the first is "salary" and the second is "net". Each field length is limited to 500 characters. Maximum supported nesting level is 20.', + ).optional(), fullyQualifiedName: z.string().describe( "Required. [Fully Qualified Name (FQN)](https://cloud.google.com/dataplex/docs/fully-qualified-names) of the entity.", ).optional(), @@ -146,6 +176,9 @@ const InputsSchema = z.object({ "The soft reference to everything you can attach a lineage event to.", ).optional(), target: z.object({ + field: z.array(z.string()).describe( + 'Optional. Field path within the entity. Each nesting level should be a separate value in the repeated field. The order matters. Must be empty for asset level lineage For example to address "salary.net" subfield where "salary" is a column and "net" is a proto field two values in the `field` should be reported, the first is "salary" and the second is "net". Each field length is limited to 500 characters. Maximum supported nesting level is 20.', + ).optional(), fullyQualifiedName: z.string().describe( "Required. [Fully Qualified Name (FQN)](https://cloud.google.com/dataplex/docs/fully-qualified-names) of the entity.", ).optional(), @@ -172,7 +205,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Data Lineage Processes.Runs.LineageEvents. Registered at `@swamp/gcp/datalineage/processes-runs-lineageevents`. */ export const model = { type: "@swamp/gcp/datalineage/processes-runs-lineageevents", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -204,6 +237,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/datalineage/manifest.yaml b/model/gcp/datalineage/manifest.yaml index a12d4cb03..f1e89c8db 100644 --- a/model/gcp/datalineage/manifest.yaml +++ b/model/gcp/datalineage/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/datalineage" -version: "2026.05.06.1" +version: "2026.05.08.1" description: "Google Cloud datalineage infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -11,7 +11,7 @@ labels: - cloud - infrastructure releaseNotes: | - - Updated: processes_runs + - Updated: processes_runs_lineageevents models: - config.ts - processes.ts diff --git a/model/gcp/datamanager/extensions/models/accounttypes_accounts_userlists.ts b/model/gcp/datamanager/extensions/models/accounttypes_accounts_userlists.ts index 465628139..1ebcce801 100644 --- a/model/gcp/datamanager/extensions/models/accounttypes_accounts_userlists.ts +++ b/model/gcp/datamanager/extensions/models/accounttypes_accounts_userlists.ts @@ -233,9 +233,15 @@ const GlobalArgsSchema = z.object({ displayNetworkMembersCount: z.string().describe( "Output only. Estimated number of members in this user list, on the Google Display Network.", ).optional(), + gmailMembersCount: z.string().describe( + "Output only. Estimated number of members in this user list on Gmail.", + ).optional(), searchNetworkMembersCount: z.string().describe( "Output only. Estimated number of members in this user list in the google.com domain. These are the members available for targeting in Search campaigns.", ).optional(), + youtubeMembersCount: z.string().describe( + "Output only. Estimated number of members in this user list on YouTube.", + ).optional(), }).describe( "Estimated number of members in this user list in different target networks.", ).optional(), @@ -297,7 +303,9 @@ const StateSchema = z.object({ readOnly: z.boolean().optional(), sizeInfo: z.object({ displayNetworkMembersCount: z.string(), + gmailMembersCount: z.string(), searchNetworkMembersCount: z.string(), + youtubeMembersCount: z.string(), }).optional(), targetNetworkInfo: z.object({ eligibleForDisplay: z.boolean(), @@ -437,9 +445,15 @@ const InputsSchema = z.object({ displayNetworkMembersCount: z.string().describe( "Output only. Estimated number of members in this user list, on the Google Display Network.", ).optional(), + gmailMembersCount: z.string().describe( + "Output only. Estimated number of members in this user list on Gmail.", + ).optional(), searchNetworkMembersCount: z.string().describe( "Output only. Estimated number of members in this user list in the google.com domain. These are the members available for targeting in Search campaigns.", ).optional(), + youtubeMembersCount: z.string().describe( + "Output only. Estimated number of members in this user list on YouTube.", + ).optional(), }).describe( "Estimated number of members in this user list in different target networks.", ).optional(), @@ -460,7 +474,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Data Manager AccountTypes.Accounts.UserLists. Registered at `@swamp/gcp/datamanager/accounttypes-accounts-userlists`. */ export const model = { type: "@swamp/gcp/datamanager/accounttypes-accounts-userlists", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -492,6 +506,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/datamanager/manifest.yaml b/model/gcp/datamanager/manifest.yaml index c329d0250..282c50830 100644 --- a/model/gcp/datamanager/manifest.yaml +++ b/model/gcp/datamanager/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/datamanager" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud datamanager infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - datamanager - cloud - infrastructure +releaseNotes: | + - Updated: accounttypes_accounts_userlists models: - accounttypes_accounts_userlistdirectlicenses.ts - accounttypes_accounts_userlistgloballicenses.ts diff --git a/model/gcp/datamigration/manifest.yaml b/model/gcp/datamigration/manifest.yaml index 854f3a730..e2eceb4be 100644 --- a/model/gcp/datamigration/manifest.yaml +++ b/model/gcp/datamigration/manifest.yaml @@ -10,8 +10,6 @@ labels: - datamigration - cloud - infrastructure -releaseNotes: | - - Updated: migrationjobs models: - connectionprofiles.ts - conversionworkspaces.ts diff --git a/model/gcp/dataproc/manifest.yaml b/model/gcp/dataproc/manifest.yaml index 1865bdad9..33dc0fae3 100644 --- a/model/gcp/dataproc/manifest.yaml +++ b/model/gcp/dataproc/manifest.yaml @@ -10,8 +10,6 @@ labels: - dataproc - cloud - infrastructure -releaseNotes: | - - Updated: workflowtemplates, clusters, clusters_nodegroups models: - autoscalingpolicies.ts - batches.ts diff --git a/model/gcp/displayvideo/extensions/models/advertisers_adgroups_targetingtypes_assignedtargetingoptions.ts b/model/gcp/displayvideo/extensions/models/advertisers_adgroups_targetingtypes_assignedtargetingoptions.ts index 868cbb30f..d020f8f35 100644 --- a/model/gcp/displayvideo/extensions/models/advertisers_adgroups_targetingtypes_assignedtargetingoptions.ts +++ b/model/gcp/displayvideo/extensions/models/advertisers_adgroups_targetingtypes_assignedtargetingoptions.ts @@ -738,6 +738,7 @@ const GlobalArgsSchema = z.object({ "GEO_REGION_TYPE_COMMUNE", "GEO_REGION_TYPE_COLLOQUIAL_AREA", "GEO_REGION_TYPE_POST_TOWN", + "GEO_REGION_TYPE_WARD", ]).describe("Output only. The type of geographic region targeting.") .optional(), negative: z.boolean().describe( @@ -2404,6 +2405,7 @@ const InputsSchema = z.object({ "GEO_REGION_TYPE_COMMUNE", "GEO_REGION_TYPE_COLLOQUIAL_AREA", "GEO_REGION_TYPE_POST_TOWN", + "GEO_REGION_TYPE_WARD", ]).describe("Output only. The type of geographic region targeting.") .optional(), negative: z.boolean().describe( @@ -3152,7 +3154,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/displayvideo/advertisers-adgroups-targetingtypes-assignedtargetingoptions", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -3194,6 +3196,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/displayvideo/extensions/models/advertisers_lineitems_targetingtypes_assignedtargetingoptions.ts b/model/gcp/displayvideo/extensions/models/advertisers_lineitems_targetingtypes_assignedtargetingoptions.ts index 7c1753c91..bb7a9d317 100644 --- a/model/gcp/displayvideo/extensions/models/advertisers_lineitems_targetingtypes_assignedtargetingoptions.ts +++ b/model/gcp/displayvideo/extensions/models/advertisers_lineitems_targetingtypes_assignedtargetingoptions.ts @@ -738,6 +738,7 @@ const GlobalArgsSchema = z.object({ "GEO_REGION_TYPE_COMMUNE", "GEO_REGION_TYPE_COLLOQUIAL_AREA", "GEO_REGION_TYPE_POST_TOWN", + "GEO_REGION_TYPE_WARD", ]).describe("Output only. The type of geographic region targeting.") .optional(), negative: z.boolean().describe( @@ -2404,6 +2405,7 @@ const InputsSchema = z.object({ "GEO_REGION_TYPE_COMMUNE", "GEO_REGION_TYPE_COLLOQUIAL_AREA", "GEO_REGION_TYPE_POST_TOWN", + "GEO_REGION_TYPE_WARD", ]).describe("Output only. The type of geographic region targeting.") .optional(), negative: z.boolean().describe( @@ -3152,7 +3154,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/displayvideo/advertisers-lineitems-targetingtypes-assignedtargetingoptions", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -3194,6 +3196,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/displayvideo/extensions/models/advertisers_targetingtypes_assignedtargetingoptions.ts b/model/gcp/displayvideo/extensions/models/advertisers_targetingtypes_assignedtargetingoptions.ts index 2e8d254d5..570e23e27 100644 --- a/model/gcp/displayvideo/extensions/models/advertisers_targetingtypes_assignedtargetingoptions.ts +++ b/model/gcp/displayvideo/extensions/models/advertisers_targetingtypes_assignedtargetingoptions.ts @@ -722,6 +722,7 @@ const GlobalArgsSchema = z.object({ "GEO_REGION_TYPE_COMMUNE", "GEO_REGION_TYPE_COLLOQUIAL_AREA", "GEO_REGION_TYPE_POST_TOWN", + "GEO_REGION_TYPE_WARD", ]).describe("Output only. The type of geographic region targeting.") .optional(), negative: z.boolean().describe( @@ -2383,6 +2384,7 @@ const InputsSchema = z.object({ "GEO_REGION_TYPE_COMMUNE", "GEO_REGION_TYPE_COLLOQUIAL_AREA", "GEO_REGION_TYPE_POST_TOWN", + "GEO_REGION_TYPE_WARD", ]).describe("Output only. The type of geographic region targeting.") .optional(), negative: z.boolean().describe( @@ -3127,7 +3129,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/displayvideo/advertisers-targetingtypes-assignedtargetingoptions", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -3169,6 +3171,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/displayvideo/extensions/models/partners_targetingtypes_assignedtargetingoptions.ts b/model/gcp/displayvideo/extensions/models/partners_targetingtypes_assignedtargetingoptions.ts index 10cee25f1..d489e17e6 100644 --- a/model/gcp/displayvideo/extensions/models/partners_targetingtypes_assignedtargetingoptions.ts +++ b/model/gcp/displayvideo/extensions/models/partners_targetingtypes_assignedtargetingoptions.ts @@ -720,6 +720,7 @@ const GlobalArgsSchema = z.object({ "GEO_REGION_TYPE_COMMUNE", "GEO_REGION_TYPE_COLLOQUIAL_AREA", "GEO_REGION_TYPE_POST_TOWN", + "GEO_REGION_TYPE_WARD", ]).describe("Output only. The type of geographic region targeting.") .optional(), negative: z.boolean().describe( @@ -2381,6 +2382,7 @@ const InputsSchema = z.object({ "GEO_REGION_TYPE_COMMUNE", "GEO_REGION_TYPE_COLLOQUIAL_AREA", "GEO_REGION_TYPE_POST_TOWN", + "GEO_REGION_TYPE_WARD", ]).describe("Output only. The type of geographic region targeting.") .optional(), negative: z.boolean().describe( @@ -3124,7 +3126,7 @@ const InputsSchema = z.object({ export const model = { type: "@swamp/gcp/displayvideo/partners-targetingtypes-assignedtargetingoptions", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -3166,6 +3168,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/displayvideo/manifest.yaml b/model/gcp/displayvideo/manifest.yaml index d9d7c8125..baf1930ab 100644 --- a/model/gcp/displayvideo/manifest.yaml +++ b/model/gcp/displayvideo/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/displayvideo" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud displayvideo infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - displayvideo - cloud - infrastructure +releaseNotes: | + - Updated: advertisers_adgroups_targetingtypes_assignedtargetingoptions, advertisers_lineitems_targetingtypes_assignedtargetingoptions, advertisers_targetingtypes_assignedtargetingoptions, partners_targetingtypes_assignedtargetingoptions models: - advertisers.ts - advertisers_adassets.ts diff --git a/model/gcp/firebasedataconnect/extensions/models/services.ts b/model/gcp/firebasedataconnect/extensions/models/services.ts index abea5a93b..3fab0a05e 100644 --- a/model/gcp/firebasedataconnect/extensions/models/services.ts +++ b/model/gcp/firebasedataconnect/extensions/models/services.ts @@ -192,7 +192,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Firebase Data Connect Services. Registered at `@swamp/gcp/firebasedataconnect/services`. */ export const model = { type: "@swamp/gcp/firebasedataconnect/services", - version: "2026.05.01.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -229,6 +229,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -540,6 +545,74 @@ export const model = { return { result }; }, }, + generate_query: { + description: "generate query", + arguments: z.object({ + prompt: z.any().optional(), + schemas: 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["prompt"] !== undefined) body["prompt"] = args["prompt"]; + if (args["schemas"] !== undefined) body["schemas"] = args["schemas"]; + const result = await createResource( + BASE_URL, + { + "id": + "firebasedataconnect.projects.locations.services.generateQuery", + "path": "v1/{+name}:generateQuery", + "httpMethod": "POST", + "parameterOrder": ["name"], + "parameters": { "name": { "location": "path", "required": true } }, + }, + params, + body, + ); + return { result }; + }, + }, + generate_schema: { + description: "generate schema", + arguments: z.object({ + prompt: 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["prompt"] !== undefined) body["prompt"] = args["prompt"]; + const result = await createResource( + BASE_URL, + { + "id": + "firebasedataconnect.projects.locations.services.generateSchema", + "path": "v1/{+name}:generateSchema", + "httpMethod": "POST", + "parameterOrder": ["name"], + "parameters": { "name": { "location": "path", "required": true } }, + }, + params, + body, + ); + return { result }; + }, + }, introspect_graphql: { description: "introspect graphql", arguments: z.object({ diff --git a/model/gcp/firebasedataconnect/extensions/models/services_schemas.ts b/model/gcp/firebasedataconnect/extensions/models/services_schemas.ts index f9376bdf9..8fa0f36a4 100644 --- a/model/gcp/firebasedataconnect/extensions/models/services_schemas.ts +++ b/model/gcp/firebasedataconnect/extensions/models/services_schemas.ts @@ -159,7 +159,7 @@ const GlobalArgsSchema = z.object({ "SQL_SCHEMA_MIGRATION_UNSPECIFIED", "MIGRATE_COMPATIBLE", ]).describe( - "Optional. Configure how to perform Postgresql schema migration.", + "Optional. Configure how to perform automatic PostgreSQL schema migration before deploying the FDC schema. This is an additive-only operation.", ).optional(), schemaValidation: z.enum([ "SQL_SCHEMA_VALIDATION_UNSPECIFIED", @@ -167,7 +167,7 @@ const GlobalArgsSchema = z.object({ "STRICT", "COMPATIBLE", ]).describe( - "Optional. Configure how much Postgresql schema validation to perform.", + "Optional. Configure how much PostgreSQL schema validation to perform against the live database before deploying the FDC schema.", ).optional(), unlinked: z.boolean().describe( "No Postgres data source is linked. If set, don't allow `database` and `schema_validation` to be configured.", @@ -273,7 +273,7 @@ const InputsSchema = z.object({ "SQL_SCHEMA_MIGRATION_UNSPECIFIED", "MIGRATE_COMPATIBLE", ]).describe( - "Optional. Configure how to perform Postgresql schema migration.", + "Optional. Configure how to perform automatic PostgreSQL schema migration before deploying the FDC schema. This is an additive-only operation.", ).optional(), schemaValidation: z.enum([ "SQL_SCHEMA_VALIDATION_UNSPECIFIED", @@ -281,7 +281,7 @@ const InputsSchema = z.object({ "STRICT", "COMPATIBLE", ]).describe( - "Optional. Configure how much Postgresql schema validation to perform.", + "Optional. Configure how much PostgreSQL schema validation to perform against the live database before deploying the FDC schema.", ).optional(), unlinked: z.boolean().describe( "No Postgres data source is linked. If set, don't allow `database` and `schema_validation` to be configured.", @@ -321,7 +321,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Firebase Data Connect Services.Schemas. Registered at `@swamp/gcp/firebasedataconnect/services-schemas`. */ export const model = { type: "@swamp/gcp/firebasedataconnect/services-schemas", - version: "2026.05.01.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -358,6 +358,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/firebasedataconnect/manifest.yaml b/model/gcp/firebasedataconnect/manifest.yaml index ce77b3549..43fcaec82 100644 --- a/model/gcp/firebasedataconnect/manifest.yaml +++ b/model/gcp/firebasedataconnect/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/firebasedataconnect" -version: "2026.05.01.1" +version: "2026.05.08.1" description: "Google Cloud firebasedataconnect infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - firebasedataconnect - cloud - infrastructure +releaseNotes: | + - Updated: services, services_schemas models: - locations.ts - services.ts diff --git a/model/gcp/firestore/extensions/models/databases.ts b/model/gcp/firestore/extensions/models/databases.ts index cc9bb6740..8deb25c19 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.05.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -383,6 +383,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.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 5a1cbe25b..5e0556dc8 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.05.1" +version: "2026.05.08.1" description: "Google Cloud firestore infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - firestore - cloud - infrastructure +releaseNotes: | + - Updated: databases models: - backups.ts - databases.ts diff --git a/model/gcp/hypercomputecluster/manifest.yaml b/model/gcp/hypercomputecluster/manifest.yaml index 736d4bd45..c1e6f2b76 100644 --- a/model/gcp/hypercomputecluster/manifest.yaml +++ b/model/gcp/hypercomputecluster/manifest.yaml @@ -10,8 +10,6 @@ labels: - hypercomputecluster - cloud - infrastructure -releaseNotes: | - - Updated: clusters models: - clusters.ts - locations.ts diff --git a/model/gcp/logging/manifest.yaml b/model/gcp/logging/manifest.yaml index e94d4c5f8..69e1b9d36 100644 --- a/model/gcp/logging/manifest.yaml +++ b/model/gcp/logging/manifest.yaml @@ -10,8 +10,6 @@ labels: - logging - cloud - infrastructure -releaseNotes: | - - Updated: savedqueries models: - buckets.ts - buckets_links.ts diff --git a/model/gcp/orgpolicy/extensions/models/customconstraints.ts b/model/gcp/orgpolicy/extensions/models/customconstraints.ts index 83463aa88..b2b27a9e9 100644 --- a/model/gcp/orgpolicy/extensions/models/customconstraints.ts +++ b/model/gcp/orgpolicy/extensions/models/customconstraints.ts @@ -116,7 +116,7 @@ const GlobalArgsSchema = z.object({ ).describe("All the operations being applied for this constraint.") .optional(), name: z.string().describe( - "Immutable. Name of the constraint. This is unique within the organization. Format of the name should be * `organizations/{organization_id}/customConstraints/{custom_constraint_id}` Example: `organizations/123/customConstraints/custom.createOnlyE2TypeVms` The max length is 71 characters and the minimum length is 1. Note that the prefix `organizations/{organization_id}/customConstraints/custom.` is not counted.", + "Immutable. Name of the constraint. This is unique within the organization. The name must be of the form: * `organizations/{organization_id}/customConstraints/{custom_constraint_id}` Example: `organizations/123/customConstraints/custom.createOnlyE2TypeVms` The max length is 71 characters and the minimum length is 1. Note that the prefix `organizations/{organization_id}/customConstraints/custom.` is not counted.", ).optional(), resourceTypes: z.array(z.string()).describe( "Immutable. The resource instance type on which this policy applies. Format will be of the form: `/` Example: * `compute.googleapis.com/Instance`.", @@ -164,7 +164,7 @@ const InputsSchema = z.object({ ).describe("All the operations being applied for this constraint.") .optional(), name: z.string().describe( - "Immutable. Name of the constraint. This is unique within the organization. Format of the name should be * `organizations/{organization_id}/customConstraints/{custom_constraint_id}` Example: `organizations/123/customConstraints/custom.createOnlyE2TypeVms` The max length is 71 characters and the minimum length is 1. Note that the prefix `organizations/{organization_id}/customConstraints/custom.` is not counted.", + "Immutable. Name of the constraint. This is unique within the organization. The name must be of the form: * `organizations/{organization_id}/customConstraints/{custom_constraint_id}` Example: `organizations/123/customConstraints/custom.createOnlyE2TypeVms` The max length is 71 characters and the minimum length is 1. Note that the prefix `organizations/{organization_id}/customConstraints/custom.` is not counted.", ).optional(), resourceTypes: z.array(z.string()).describe( "Immutable. The resource instance type on which this policy applies. Format will be of the form: `/` Example: * `compute.googleapis.com/Instance`.", @@ -177,7 +177,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Organization Policy CustomConstraints. Registered at `@swamp/gcp/orgpolicy/customconstraints`. */ export const model = { type: "@swamp/gcp/orgpolicy/customconstraints", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -209,6 +209,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/orgpolicy/extensions/models/policies.ts b/model/gcp/orgpolicy/extensions/models/policies.ts index 5ec9cf61a..9d675a875 100644 --- a/model/gcp/orgpolicy/extensions/models/policies.ts +++ b/model/gcp/orgpolicy/extensions/models/policies.ts @@ -100,7 +100,7 @@ const DELETE_CONFIG = { const GlobalArgsSchema = z.object({ alternate: z.object({ launch: z.string().describe( - "Reference to the launch that will be used while audit logging and to control the launch. Should be set only in the alternate policy.", + "Reference to the launch that will be used while audit logging and to control the launch. Set only in the alternate policy.", ).optional(), spec: z.object({ etag: z.string().describe( @@ -366,7 +366,7 @@ type StateData = z.infer; const InputsSchema = z.object({ alternate: z.object({ launch: z.string().describe( - "Reference to the launch that will be used while audit logging and to control the launch. Should be set only in the alternate policy.", + "Reference to the launch that will be used while audit logging and to control the launch. Set only in the alternate policy.", ).optional(), spec: z.object({ etag: z.string().describe( @@ -556,7 +556,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Organization Policy Policies. Registered at `@swamp/gcp/orgpolicy/policies`. */ export const model = { type: "@swamp/gcp/orgpolicy/policies", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -593,6 +593,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/orgpolicy/manifest.yaml b/model/gcp/orgpolicy/manifest.yaml index 3a345f28a..9ce7432c1 100644 --- a/model/gcp/orgpolicy/manifest.yaml +++ b/model/gcp/orgpolicy/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/orgpolicy" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud orgpolicy infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - orgpolicy - cloud - infrastructure +releaseNotes: | + - Updated: policies, customconstraints models: - constraints.ts - customconstraints.ts diff --git a/model/gcp/privateca/extensions/models/capools.ts b/model/gcp/privateca/extensions/models/capools.ts index ca2c4225f..6ab9f6659 100644 --- a/model/gcp/privateca/extensions/models/capools.ts +++ b/model/gcp/privateca/extensions/models/capools.ts @@ -116,6 +116,9 @@ const GlobalArgsSchema = z.object({ ).optional(), }).describe("The configuration used for encrypting data at rest.").optional(), issuancePolicy: z.object({ + allowRequesterSpecifiedNotBeforeTime: z.boolean().describe( + "Optional. If set to true, allows requesters to specify the requested_not_before_time field when creating a Certificate. Certificates requested with this option enabled will have a 'not_before_time' equal to the value specified in the request. The 'not_after_time' will be adjusted to preserve the requested lifetime. The maximum time that a certificate can be backdated with these options is 48 hours in the past. This option cannot be set if backdate_duration is set.", + ).optional(), allowedIssuanceModes: z.object({ allowConfigBasedIssuance: z.boolean().describe( "Optional. When true, allows callers to create Certificates by specifying a CertificateConfig.", @@ -383,6 +386,7 @@ const StateSchema = z.object({ cloudKmsKey: z.string(), }).optional(), issuancePolicy: z.object({ + allowRequesterSpecifiedNotBeforeTime: z.boolean(), allowedIssuanceModes: z.object({ allowConfigBasedIssuance: z.boolean(), allowCsrBasedIssuance: z.boolean(), @@ -486,6 +490,9 @@ const InputsSchema = z.object({ ).optional(), }).describe("The configuration used for encrypting data at rest.").optional(), issuancePolicy: z.object({ + allowRequesterSpecifiedNotBeforeTime: z.boolean().describe( + "Optional. If set to true, allows requesters to specify the requested_not_before_time field when creating a Certificate. Certificates requested with this option enabled will have a 'not_before_time' equal to the value specified in the request. The 'not_after_time' will be adjusted to preserve the requested lifetime. The maximum time that a certificate can be backdated with these options is 48 hours in the past. This option cannot be set if backdate_duration is set.", + ).optional(), allowedIssuanceModes: z.object({ allowConfigBasedIssuance: z.boolean().describe( "Optional. When true, allows callers to create Certificates by specifying a CertificateConfig.", @@ -751,7 +758,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Certificate Authority CaPools. Registered at `@swamp/gcp/privateca/capools`. */ export const model = { type: "@swamp/gcp/privateca/capools", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -788,6 +795,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "No schema changes", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, diff --git a/model/gcp/privateca/extensions/models/capools_certificates.ts b/model/gcp/privateca/extensions/models/capools_certificates.ts index d6b72525b..2a0cdc685 100644 --- a/model/gcp/privateca/extensions/models/capools_certificates.ts +++ b/model/gcp/privateca/extensions/models/capools_certificates.ts @@ -570,6 +570,9 @@ const GlobalArgsSchema = z.object({ pemCsr: z.string().describe( "Immutable. A pem-encoded X.509 certificate signing request (CSR).", ).optional(), + requestedNotBeforeTime: z.string().describe( + "Optional. The requested not_before_time of this Certificate. This field may only be set if the CaPool.IssuancePolicy.allow_requester_specified_not_before_time field is set to true for the issuing CaPool. If this field is specified, the certificate will be issued with this 'not_before_time'. If this is not specified, the 'not_before_time' will be set to the issuance time or issuance time minus backdate_duration depending on the CaPool configuration.", + ).optional(), revocationDetails: z.object({ revocationState: z.enum([ "REVOCATION_REASON_UNSPECIFIED", @@ -807,6 +810,7 @@ const StateSchema = z.object({ pemCertificate: z.string().optional(), pemCertificateChain: z.array(z.string()).optional(), pemCsr: z.string().optional(), + requestedNotBeforeTime: z.string().optional(), revocationDetails: z.object({ revocationState: z.string(), revocationTime: z.string(), @@ -1294,6 +1298,9 @@ const InputsSchema = z.object({ pemCsr: z.string().describe( "Immutable. A pem-encoded X.509 certificate signing request (CSR).", ).optional(), + requestedNotBeforeTime: z.string().describe( + "Optional. The requested not_before_time of this Certificate. This field may only be set if the CaPool.IssuancePolicy.allow_requester_specified_not_before_time field is set to true for the issuing CaPool. If this field is specified, the certificate will be issued with this 'not_before_time'. If this is not specified, the 'not_before_time' will be set to the issuance time or issuance time minus backdate_duration depending on the CaPool configuration.", + ).optional(), revocationDetails: z.object({ revocationState: z.enum([ "REVOCATION_REASON_UNSPECIFIED", @@ -1337,7 +1344,7 @@ const InputsSchema = z.object({ /** Swamp extension model for Google Cloud Certificate Authority CaPools.Certificates. Registered at `@swamp/gcp/privateca/capools-certificates`. */ export const model = { type: "@swamp/gcp/privateca/capools-certificates", - version: "2026.04.23.1", + version: "2026.05.08.1", upgrades: [ { toVersion: "2026.04.01.1", @@ -1374,6 +1381,11 @@ export const model = { description: "No schema changes", upgradeAttributes: (old: Record) => old, }, + { + toVersion: "2026.05.08.1", + description: "Added: requestedNotBeforeTime", + upgradeAttributes: (old: Record) => old, + }, ], globalArguments: GlobalArgsSchema, inputsSchema: InputsSchema, @@ -1407,6 +1419,9 @@ export const model = { if (g["lifetime"] !== undefined) body["lifetime"] = g["lifetime"]; if (g["name"] !== undefined) body["name"] = g["name"]; if (g["pemCsr"] !== undefined) body["pemCsr"] = g["pemCsr"]; + if (g["requestedNotBeforeTime"] !== undefined) { + body["requestedNotBeforeTime"] = g["requestedNotBeforeTime"]; + } if (g["revocationDetails"] !== undefined) { body["revocationDetails"] = g["revocationDetails"]; } @@ -1505,6 +1520,9 @@ export const model = { } if (g["config"] !== undefined) body["config"] = g["config"]; if (g["labels"] !== undefined) body["labels"] = g["labels"]; + if (g["requestedNotBeforeTime"] !== undefined) { + body["requestedNotBeforeTime"] = g["requestedNotBeforeTime"]; + } if (g["revocationDetails"] !== undefined) { body["revocationDetails"] = g["revocationDetails"]; } diff --git a/model/gcp/privateca/manifest.yaml b/model/gcp/privateca/manifest.yaml index f990bb1f8..20916091b 100644 --- a/model/gcp/privateca/manifest.yaml +++ b/model/gcp/privateca/manifest.yaml @@ -1,7 +1,7 @@ # Auto-generated manifest. Re-generate with the appropriate deno task. manifestVersion: 1 name: "@swamp/gcp/privateca" -version: "2026.04.23.1" +version: "2026.05.08.1" description: "Google Cloud privateca infrastructure models" repository: "https://github.com/systeminit/swamp-extensions" labels: @@ -10,6 +10,8 @@ labels: - privateca - cloud - infrastructure +releaseNotes: | + - Updated: capools, capools_certificates models: - capools.ts - capools_certificateauthorities.ts diff --git a/model/gcp/run/manifest.yaml b/model/gcp/run/manifest.yaml index 78456dd78..fa62e3a61 100644 --- a/model/gcp/run/manifest.yaml +++ b/model/gcp/run/manifest.yaml @@ -10,8 +10,6 @@ labels: - run - cloud - infrastructure -releaseNotes: | - - Updated: instances models: - instances.ts - jobs.ts diff --git a/model/gcp/sqladmin/manifest.yaml b/model/gcp/sqladmin/manifest.yaml index 41caa3627..901c0a7c4 100644 --- a/model/gcp/sqladmin/manifest.yaml +++ b/model/gcp/sqladmin/manifest.yaml @@ -10,8 +10,6 @@ labels: - sqladmin - cloud - infrastructure -releaseNotes: | - - Updated: instances models: - backupruns.ts - connect.ts