@intentius/chant-lexicon-gcp 0.124.31 → 0.124.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/index.js +45 -0
- package/dist/api/read-client.js +105 -0
- package/dist/codegen/docs-cli.js +6 -0
- package/dist/codegen/docs.js +115 -0
- package/dist/codegen/generate-cli.js +17 -0
- package/dist/codegen/generate.js +218 -0
- package/dist/codegen/naming.js +164 -0
- package/dist/codegen/package.js +43 -0
- package/dist/composites/catalog.d.ts.map +1 -1
- package/dist/composites/catalog.js +1251 -0
- package/dist/composites/cloud-function.js +65 -0
- package/dist/composites/cloud-run-service.d.ts +7 -3
- package/dist/composites/cloud-run-service.d.ts.map +1 -1
- package/dist/composites/cloud-run-service.js +75 -0
- package/dist/composites/cloud-sql-instance.js +85 -0
- package/dist/composites/gcs-bucket.js +64 -0
- package/dist/composites/gke-cluster.js +113 -0
- package/dist/composites/gke-crdb-region.js +137 -0
- package/dist/composites/gpu-node-pool.js +74 -0
- package/dist/composites/index.js +15 -0
- package/dist/composites/landing-zone.js +89 -0
- package/dist/composites/managed-certificate.js +46 -0
- package/dist/composites/memorystore-redis.js +52 -0
- package/dist/composites/multi-region-vpc.js +108 -0
- package/dist/composites/private-service.js +50 -0
- package/dist/composites/pubsub-pipeline.js +63 -0
- package/dist/composites/secure-project.js +85 -0
- package/dist/composites/vpc-network.js +113 -0
- package/dist/coverage.js +28 -0
- package/dist/deep-observe-hooks.js +152 -0
- package/dist/deep-observe.js +273 -0
- package/dist/default-labels.js +67 -0
- package/dist/describe-resources.js +264 -0
- package/dist/detect.js +16 -0
- package/dist/export-resources.js +59 -0
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/generated/index.js +1804 -0
- package/dist/generated/runtime.js +4 -0
- package/dist/governance.js +98 -0
- package/dist/health.d.ts +42 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +87 -0
- package/dist/import/generator.js +68 -0
- package/dist/import/live-export.js +73 -0
- package/dist/import/parser.js +61 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -0
- package/dist/integrity.json +5 -5
- package/dist/lint/audit-catalog.js +38 -0
- package/dist/lint/audit-lineage.js +63 -0
- package/dist/lint/post-synth/gcp-helpers.js +91 -0
- package/dist/lint/post-synth/index.js +54 -0
- package/dist/lint/post-synth/schema-registry.d.ts.map +1 -1
- package/dist/lint/post-synth/schema-registry.js +69 -0
- package/dist/lint/post-synth/wgc101.js +47 -0
- package/dist/lint/post-synth/wgc102.js +29 -0
- package/dist/lint/post-synth/wgc103.js +37 -0
- package/dist/lint/post-synth/wgc104.js +34 -0
- package/dist/lint/post-synth/wgc105.js +39 -0
- package/dist/lint/post-synth/wgc106.js +30 -0
- package/dist/lint/post-synth/wgc107.js +33 -0
- package/dist/lint/post-synth/wgc108.js +34 -0
- package/dist/lint/post-synth/wgc109.js +33 -0
- package/dist/lint/post-synth/wgc110.js +32 -0
- package/dist/lint/post-synth/wgc111.js +47 -0
- package/dist/lint/post-synth/wgc112.js +46 -0
- package/dist/lint/post-synth/wgc113.js +35 -0
- package/dist/lint/post-synth/wgc201.js +30 -0
- package/dist/lint/post-synth/wgc202.js +33 -0
- package/dist/lint/post-synth/wgc203.js +35 -0
- package/dist/lint/post-synth/wgc204.js +33 -0
- package/dist/lint/post-synth/wgc301.js +28 -0
- package/dist/lint/post-synth/wgc302.js +28 -0
- package/dist/lint/post-synth/wgc303.js +29 -0
- package/dist/lint/post-synth/wgc401.js +50 -0
- package/dist/lint/post-synth/wgc402.js +46 -0
- package/dist/lint/post-synth/wgc403.js +74 -0
- package/dist/lint/post-synth/wgc501.js +63 -0
- package/dist/lint/post-synth/wgc502.js +37 -0
- package/dist/lint/post-synth/wgc503.js +49 -0
- package/dist/lint/rules/hardcoded-project.js +51 -0
- package/dist/lint/rules/hardcoded-region.js +51 -0
- package/dist/lint/rules/index.js +3 -0
- package/dist/lint/rules/public-iam.js +37 -0
- package/dist/lsp/completions.d.ts.map +1 -1
- package/dist/lsp/completions.js +15 -0
- package/dist/lsp/hover.d.ts.map +1 -1
- package/dist/lsp/hover.js +46 -0
- package/dist/manifest.json +1 -1
- package/dist/meta.json +1848 -481
- package/dist/okf/types/API.md +2 -0
- package/dist/okf/types/APIConfig.md +3 -0
- package/dist/okf/types/APIQuotaAdjusterSettings.md +2 -0
- package/dist/okf/types/APIQuotaPreference.md +2 -0
- package/dist/okf/types/AccessBoundaryPolicy.md +2 -0
- package/dist/okf/types/AccessLevel.md +2 -0
- package/dist/okf/types/AccessLevelCondition.md +1 -0
- package/dist/okf/types/AccessPolicy.md +4 -0
- package/dist/okf/types/AddonsConfig.md +1 -0
- package/dist/okf/types/AgentPool.md +2 -0
- package/dist/okf/types/AiplatformModel.md +2 -0
- package/dist/okf/types/AistreamsCluster.md +2 -0
- package/dist/okf/types/AlertPolicy.md +2 -0
- package/dist/okf/types/AlloydbBackup.md +9 -0
- package/dist/okf/types/AlloydbCluster.md +5 -0
- package/dist/okf/types/AlloydbInstance.md +10 -0
- package/dist/okf/types/AnalyticsAccount.md +2 -0
- package/dist/okf/types/AndroidApp.md +4 -0
- package/dist/okf/types/AnywhereCache.md +2 -0
- package/dist/okf/types/ApigatewayGateway.md +3 -0
- package/dist/okf/types/ApigeeEnvironment.md +5 -0
- package/dist/okf/types/ApigeeInstance.md +2 -0
- package/dist/okf/types/ApihubDeployment.md +2 -0
- package/dist/okf/types/ApikeysKey.md +2 -0
- package/dist/okf/types/AppConnection.md +1 -0
- package/dist/okf/types/AppConnector.md +2 -0
- package/dist/okf/types/AppGateway.md +3 -0
- package/dist/okf/types/AppProfile.md +3 -0
- package/dist/okf/types/Application.md +2 -0
- package/dist/okf/types/ArtifactRegistryRepository.md +4 -0
- package/dist/okf/types/Assignment.md +2 -0
- package/dist/okf/types/Attestor.md +2 -0
- package/dist/okf/types/AuthorizationPolicy.md +4 -0
- package/dist/okf/types/AuthorizedView.md +2 -0
- package/dist/okf/types/AutokeyConfig.md +2 -0
- package/dist/okf/types/Automation.md +2 -0
- package/dist/okf/types/Autoscaler.md +3 -0
- package/dist/okf/types/AutoscalingPolicy.md +2 -0
- package/dist/okf/types/BQJob.md +3 -0
- package/dist/okf/types/BackendBucket.md +3 -0
- package/dist/okf/types/BackendBucketSignedURLKey.md +1 -0
- package/dist/okf/types/BackendService.md +5 -0
- package/dist/okf/types/BackendServiceSignedURLKey.md +1 -0
- package/dist/okf/types/BackupPlanAssociation.md +2 -0
- package/dist/okf/types/BackupPolicy.md +2 -0
- package/dist/okf/types/BackupdrBackupPlan.md +2 -0
- package/dist/okf/types/BackupdrBackupVault.md +2 -0
- package/dist/okf/types/Batch.md +2 -0
- package/dist/okf/types/BatchJob.md +2 -0
- package/dist/okf/types/BatchTask.md +3 -0
- package/dist/okf/types/BigLakeCatalog.md +2 -0
- package/dist/okf/types/BigLakeDatabase.md +2 -0
- package/dist/okf/types/BigLakeTable.md +2 -0
- package/dist/okf/types/BigQueryDataPolicy.md +2 -0
- package/dist/okf/types/BigQueryDataset.md +6 -0
- package/dist/okf/types/BigQueryExport.md +2 -0
- package/dist/okf/types/BigQueryTable.md +11 -0
- package/dist/okf/types/BigqueryconnectionConnection.md +2 -0
- package/dist/okf/types/BigquerydatatransferConfig.md +2 -0
- package/dist/okf/types/BigqueryreservationReservation.md +2 -0
- package/dist/okf/types/BigtableInstance.md +1 -0
- package/dist/okf/types/BigtableTable.md +2 -0
- package/dist/okf/types/BillingAccount.md +2 -0
- package/dist/okf/types/BinaryauthorizationPolicy.md +3 -0
- package/dist/okf/types/Brand.md +2 -0
- package/dist/okf/types/BtBackup.md +2 -0
- package/dist/okf/types/BtCluster.md +2 -0
- package/dist/okf/types/Bucket.md +2 -0
- package/dist/okf/types/BucketAccessControl.md +3 -0
- package/dist/okf/types/Budget.md +2 -0
- package/dist/okf/types/CAPool.md +1 -0
- package/dist/okf/types/CapacityCommitment.md +5 -0
- package/dist/okf/types/CertificateAuthority.md +7 -0
- package/dist/okf/types/CertificateIssuanceConfig.md +2 -0
- package/dist/okf/types/CertificateMap.md +3 -0
- package/dist/okf/types/CertificateMapEntry.md +4 -0
- package/dist/okf/types/CertificateTemplate.md +3 -0
- package/dist/okf/types/CertificatemanagerCertificate.md +1 -0
- package/dist/okf/types/ClientConnectorService.md +2 -0
- package/dist/okf/types/ClientTLSPolicy.md +3 -0
- package/dist/okf/types/CloudBatchResourceAllowance.md +2 -0
- package/dist/okf/types/CloudFunction.md +4 -0
- package/dist/okf/types/CloudRunJob.md +13 -0
- package/dist/okf/types/CloudRunService.md +13 -0
- package/dist/okf/types/CloudbuildTrigger.md +4 -0
- package/dist/okf/types/ClouddmsPrivateConnection.md +2 -0
- package/dist/okf/types/CloudidentityGroup.md +5 -0
- package/dist/okf/types/CloudidentityMembership.md +6 -0
- package/dist/okf/types/CloudidsEndpoint.md +1 -0
- package/dist/okf/types/CloudschedulerJob.md +5 -0
- package/dist/okf/types/ComposerEnvironment.md +2 -0
- package/dist/okf/types/ComputeAddress.md +4 -0
- package/dist/okf/types/ComputeDisk.md +9 -0
- package/dist/okf/types/ComputeFirewallPolicy.md +7 -0
- package/dist/okf/types/ComputeHealthCheck.md +4 -0
- package/dist/okf/types/ComputeInstance.md +8 -0
- package/dist/okf/types/ComputeNetworkPeering.md +3 -0
- package/dist/okf/types/ComputeNodeGroup.md +3 -0
- package/dist/okf/types/ComputeReservation.md +6 -0
- package/dist/okf/types/ComputeRoute.md +3 -0
- package/dist/okf/types/ComputeSnapshot.md +7 -0
- package/dist/okf/types/ConfigcontrollerInstance.md +3 -0
- package/dist/okf/types/ConnectionProfile.md +2 -0
- package/dist/okf/types/ConnectivityTest.md +2 -0
- package/dist/okf/types/Connector.md +3 -0
- package/dist/okf/types/ConsentStore.md +1 -0
- package/dist/okf/types/ConsumerGroup.md +2 -0
- package/dist/okf/types/ConsumerQuotaOverride.md +2 -0
- package/dist/okf/types/Contact.md +2 -0
- package/dist/okf/types/ContainerattachedCluster.md +8 -0
- package/dist/okf/types/ConversionWorkspace.md +2 -0
- package/dist/okf/types/CryptoKeyVersion.md +5 -0
- package/dist/okf/types/CustomClass.md +2 -0
- package/dist/okf/types/CustomConstraint.md +2 -0
- package/dist/okf/types/CustomRole.md +3 -0
- package/dist/okf/types/CustomTargetType.md +2 -0
- package/dist/okf/types/DICOMStore.md +2 -0
- package/dist/okf/types/DNSAuthorization.md +2 -0
- package/dist/okf/types/DNSManagedZone.md +3 -0
- package/dist/okf/types/DNSRecordSet.md +1 -0
- package/dist/okf/types/Dashboard.md +2 -0
- package/dist/okf/types/DataExchange.md +2 -0
- package/dist/okf/types/DataLabelingJob.md +2 -0
- package/dist/okf/types/DataPolicy.md +2 -0
- package/dist/okf/types/DataStore.md +2 -0
- package/dist/okf/types/DataStoreTargetSite.md +2 -0
- package/dist/okf/types/Database.md +2 -0
- package/dist/okf/types/DatacatalogEntryGroup.md +2 -0
- package/dist/okf/types/DataflowJob.md +4 -0
- package/dist/okf/types/DataformRepository.md +2 -0
- package/dist/okf/types/DatafusionInstance.md +10 -0
- package/dist/okf/types/DataplexEntryGroup.md +2 -0
- package/dist/okf/types/DataplexTask.md +2 -0
- package/dist/okf/types/DataprocCluster.md +2 -0
- package/dist/okf/types/DataprocJob.md +2 -0
- package/dist/okf/types/DataprocNodeGroup.md +2 -0
- package/dist/okf/types/DataprocSession.md +2 -0
- package/dist/okf/types/DatasetAccess.md +2 -0
- package/dist/okf/types/DatastoreIndex.md +2 -0
- package/dist/okf/types/DatastreamPrivateConnection.md +2 -0
- package/dist/okf/types/DatastreamRoute.md +2 -0
- package/dist/okf/types/DefaultObjectAccessControl.md +5 -0
- package/dist/okf/types/DefaultSupportedIDPConfig.md +2 -0
- package/dist/okf/types/DeidentifyTemplate.md +4 -0
- package/dist/okf/types/DeliveryPipeline.md +2 -0
- package/dist/okf/types/DenyPolicy.md +2 -0
- package/dist/okf/types/DeployPolicy.md +2 -0
- package/dist/okf/types/DeploymentResourcePool.md +2 -0
- package/dist/okf/types/DeploymentmanagerDeployment.md +4 -0
- package/dist/okf/types/Device.md +8 -0
- package/dist/okf/types/DeviceRegistry.md +1 -0
- package/dist/okf/types/DevicestreamingSession.md +2 -0
- package/dist/okf/types/DialogflowAgent.md +2 -0
- package/dist/okf/types/DialogflowEntityType.md +2 -0
- package/dist/okf/types/DialogflowIntent.md +3 -0
- package/dist/okf/types/DialogflowcxAgent.md +3 -0
- package/dist/okf/types/DialogflowcxEntityType.md +2 -0
- package/dist/okf/types/DialogflowcxIntent.md +2 -0
- package/dist/okf/types/DiscoveredService.md +2 -0
- package/dist/okf/types/DiscoveredWorkload.md +2 -0
- package/dist/okf/types/DiskResourcePolicyAttachment.md +1 -0
- package/dist/okf/types/DnsPolicy.md +1 -0
- package/dist/okf/types/Document.md +2 -0
- package/dist/okf/types/DomainMapping.md +2 -0
- package/dist/okf/types/EdgeCacheKeyset.md +1 -0
- package/dist/okf/types/EdgeCacheOrigin.md +1 -0
- package/dist/okf/types/EdgeCacheService.md +1 -0
- package/dist/okf/types/EdgecontainerCluster.md +9 -0
- package/dist/okf/types/EdgecontainerNodePool.md +4 -0
- package/dist/okf/types/EdgenetworkNetwork.md +4 -0
- package/dist/okf/types/EndpointAttachment.md +2 -0
- package/dist/okf/types/EndpointPolicy.md +3 -0
- package/dist/okf/types/Engine.md +2 -0
- package/dist/okf/types/Enrollment.md +2 -0
- package/dist/okf/types/Entitlement.md +2 -0
- package/dist/okf/types/Entry.md +2 -0
- package/dist/okf/types/EntryType.md +2 -0
- package/dist/okf/types/Envgroup.md +2 -0
- package/dist/okf/types/EnvgroupAttachment.md +2 -0
- package/dist/okf/types/EventarcChannel.md +2 -0
- package/dist/okf/types/EventarcTrigger.md +5 -0
- package/dist/okf/types/ExampleStore.md +2 -0
- package/dist/okf/types/ExternalAccessRule.md +2 -0
- package/dist/okf/types/ExternalAddress.md +2 -0
- package/dist/okf/types/ExternalVPNGateway.md +3 -0
- package/dist/okf/types/FHIRStore.md +2 -0
- package/dist/okf/types/Feature.md +4 -0
- package/dist/okf/types/FeatureMembership.md +1 -0
- package/dist/okf/types/Featurestore.md +2 -0
- package/dist/okf/types/FeaturestoreEntityType.md +5 -0
- package/dist/okf/types/FeaturestoreEntityTypeFeature.md +5 -0
- package/dist/okf/types/Federation.md +2 -0
- package/dist/okf/types/Feed.md +2 -0
- package/dist/okf/types/Field.md +2 -0
- package/dist/okf/types/FilestoreBackup.md +7 -0
- package/dist/okf/types/FilestoreInstance.md +5 -0
- package/dist/okf/types/FilestoreSnapshot.md +4 -0
- package/dist/okf/types/FirebaseProject.md +3 -0
- package/dist/okf/types/FirebasedatabaseInstance.md +4 -0
- package/dist/okf/types/FirebasehostingChannel.md +2 -0
- package/dist/okf/types/FirestoreBackupSchedule.md +2 -0
- package/dist/okf/types/FirestoreIndex.md +2 -0
- package/dist/okf/types/Firewall.md +3 -0
- package/dist/okf/types/FirewallPolicyAssociation.md +2 -0
- package/dist/okf/types/FirewallPolicyRule.md +4 -0
- package/dist/okf/types/FirewallRule.md +1 -0
- package/dist/okf/types/FlexTemplateJob.md +4 -0
- package/dist/okf/types/FlexibleAppVersion.md +2 -0
- package/dist/okf/types/Flow.md +2 -0
- package/dist/okf/types/FolderFeed.md +3 -0
- package/dist/okf/types/ForwardingRule.md +10 -0
- package/dist/okf/types/Fulfillment.md +2 -0
- package/dist/okf/types/Function.md +5 -0
- package/dist/okf/types/FutureReservation.md +2 -0
- package/dist/okf/types/GCPServiceAccount.md +5 -0
- package/dist/okf/types/GCPUserAccessBinding.md +2 -0
- package/dist/okf/types/GCPolicy.md +1 -0
- package/dist/okf/types/GKECluster.md +8 -0
- package/dist/okf/types/GRPCRoute.md +4 -0
- package/dist/okf/types/GcsFolder.md +2 -0
- package/dist/okf/types/GkebackupBackup.md +2 -0
- package/dist/okf/types/GkebackupBackupPlan.md +2 -0
- package/dist/okf/types/GkehubMembership.md +6 -0
- package/dist/okf/types/GkehubNamespace.md +2 -0
- package/dist/okf/types/GlobalNetworkEndpoint.md +1 -0
- package/dist/okf/types/GlobalNetworkEndpointGroup.md +2 -0
- package/dist/okf/types/GoogleChannelConfig.md +2 -0
- package/dist/okf/types/GuestPolicy.md +4 -0
- package/dist/okf/types/HL7V2Store.md +2 -0
- package/dist/okf/types/HMACKey.md +5 -0
- package/dist/okf/types/HTTPHealthCheck.md +3 -0
- package/dist/okf/types/HTTPRoute.md +4 -0
- package/dist/okf/types/HTTPSHealthCheck.md +3 -0
- package/dist/okf/types/HealthcareDataset.md +2 -0
- package/dist/okf/types/Hub.md +5 -0
- package/dist/okf/types/IAMAuditConfig.md +1 -0
- package/dist/okf/types/IAMPolicy.md +1 -0
- package/dist/okf/types/IAMPolicyMember.md +1 -0
- package/dist/okf/types/IdentityAwareProxyClient.md +2 -0
- package/dist/okf/types/IdentityplatformConfig.md +2 -0
- package/dist/okf/types/Image.md +5 -0
- package/dist/okf/types/ImportJob.md +2 -0
- package/dist/okf/types/InboundSAMLConfig.md +1 -0
- package/dist/okf/types/IndexEndpoint.md +6 -0
- package/dist/okf/types/InspectTemplate.md +4 -0
- package/dist/okf/types/InstanceAttachment.md +2 -0
- package/dist/okf/types/InstanceConfig.md +2 -0
- package/dist/okf/types/InstanceEndpoint.md +1 -0
- package/dist/okf/types/InstanceGroup.md +3 -0
- package/dist/okf/types/InstanceGroupManager.md +8 -0
- package/dist/okf/types/InstanceGroupNamedPort.md +1 -0
- package/dist/okf/types/InstanceTemplate.md +5 -0
- package/dist/okf/types/InterceptDeployment.md +2 -0
- package/dist/okf/types/InterceptEndpointGroup.md +2 -0
- package/dist/okf/types/Interconnect.md +2 -0
- package/dist/okf/types/InterconnectAttachment.md +9 -0
- package/dist/okf/types/InternalRange.md +2 -0
- package/dist/okf/types/JobTrigger.md +5 -0
- package/dist/okf/types/KMSCryptoKey.md +2 -0
- package/dist/okf/types/KMSKeyRing.md +2 -0
- package/dist/okf/types/KeyHandle.md +2 -0
- package/dist/okf/types/KeyRingImportJob.md +4 -0
- package/dist/okf/types/LBRouteExtension.md +2 -0
- package/dist/okf/types/Lake.md +2 -0
- package/dist/okf/types/Lien.md +3 -0
- package/dist/okf/types/Link.md +2 -0
- package/dist/okf/types/Listing.md +2 -0
- package/dist/okf/types/LocationTagBinding.md +3 -0
- package/dist/okf/types/LogBucket.md +4 -0
- package/dist/okf/types/LogExclusion.md +3 -0
- package/dist/okf/types/LogMetric.md +3 -0
- package/dist/okf/types/LogSink.md +2 -0
- package/dist/okf/types/LogView.md +3 -0
- package/dist/okf/types/LogicalView.md +3 -0
- package/dist/okf/types/Machine.md +2 -0
- package/dist/okf/types/MachineImage.md +2 -0
- package/dist/okf/types/ManagedFolder.md +2 -0
- package/dist/okf/types/ManagedSSLCertificate.md +1 -0
- package/dist/okf/types/ManagedkafkaCluster.md +2 -0
- package/dist/okf/types/ManagedkafkaTopic.md +2 -0
- package/dist/okf/types/ManagementServer.md +2 -0
- package/dist/okf/types/MaterializedView.md +3 -0
- package/dist/okf/types/MembershipBinding.md +2 -0
- package/dist/okf/types/MemcacheInstance.md +4 -0
- package/dist/okf/types/MemorystoreInstance.md +2 -0
- package/dist/okf/types/Mesh.md +4 -0
- package/dist/okf/types/MetadataStore.md +2 -0
- package/dist/okf/types/MetastoreBackup.md +2 -0
- package/dist/okf/types/MetastoreService.md +2 -0
- package/dist/okf/types/MetricDescriptor.md +2 -0
- package/dist/okf/types/MigrationJob.md +2 -0
- package/dist/okf/types/MlengineModel.md +1 -0
- package/dist/okf/types/MonGroup.md +1 -0
- package/dist/okf/types/MonService.md +1 -0
- package/dist/okf/types/MonitoredProject.md +2 -0
- package/dist/okf/types/MuteConfig.md +2 -0
- package/dist/okf/types/NATAddress.md +3 -0
- package/dist/okf/types/NetappBackupVault.md +2 -0
- package/dist/okf/types/NetworkAttachment.md +2 -0
- package/dist/okf/types/NetworkEdgeSecurityService.md +2 -0
- package/dist/okf/types/NetworkEndpoint.md +1 -0
- package/dist/okf/types/NetworkEndpointGroup.md +3 -0
- package/dist/okf/types/NetworkFirewallPolicy.md +7 -0
- package/dist/okf/types/NetworkFirewallPolicyAssociation.md +2 -0
- package/dist/okf/types/NetworkFirewallPolicyRule.md +3 -0
- package/dist/okf/types/NetworkPeeringRoutesConfig.md +1 -0
- package/dist/okf/types/NetworkPolicy.md +2 -0
- package/dist/okf/types/NetworkservicesGateway.md +4 -0
- package/dist/okf/types/Node.md +2 -0
- package/dist/okf/types/NodePool.md +2 -0
- package/dist/okf/types/NodeTemplate.md +4 -0
- package/dist/okf/types/Note.md +3 -0
- package/dist/okf/types/NotebookInstance.md +2 -0
- package/dist/okf/types/NotebooksEnvironment.md +2 -0
- package/dist/okf/types/Notification.md +3 -0
- package/dist/okf/types/NotificationChannel.md +3 -0
- package/dist/okf/types/NotificationConfig.md +3 -0
- package/dist/okf/types/OAuthIDPConfig.md +1 -0
- package/dist/okf/types/OSPolicyAssignment.md +9 -0
- package/dist/okf/types/Occurrence.md +5 -0
- package/dist/okf/types/Organization.md +10 -0
- package/dist/okf/types/OrganizationFeed.md +2 -0
- package/dist/okf/types/OrganizationSecurityPolicy.md +3 -0
- package/dist/okf/types/OrganizationSecurityPolicyAssociation.md +2 -0
- package/dist/okf/types/OrganizationSecurityPolicyRule.md +1 -0
- package/dist/okf/types/OrgpolicyPolicy.md +2 -0
- package/dist/okf/types/PacketMirroring.md +4 -0
- package/dist/okf/types/Page.md +2 -0
- package/dist/okf/types/Parameter.md +2 -0
- package/dist/okf/types/ParameterVersion.md +2 -0
- package/dist/okf/types/PartialPolicy.md +1 -0
- package/dist/okf/types/PatchDeployment.md +5 -0
- package/dist/okf/types/PeeredDNSDomain.md +2 -0
- package/dist/okf/types/PerInstanceConfig.md +1 -0
- package/dist/okf/types/PhraseSet.md +2 -0
- package/dist/okf/types/PlatformPolicy.md +2 -0
- package/dist/okf/types/PolicyTag.md +3 -0
- package/dist/okf/types/PrivateCloud.md +2 -0
- package/dist/okf/types/PrivatecaCertificate.md +5 -0
- package/dist/okf/types/Processor.md +2 -0
- package/dist/okf/types/ProcessorDefaultVersion.md +1 -0
- package/dist/okf/types/ProcessorVersion.md +2 -0
- package/dist/okf/types/ProjectDefaultConfig.md +2 -0
- package/dist/okf/types/ProjectFeed.md +2 -0
- package/dist/okf/types/ProjectMetadata.md +1 -0
- package/dist/okf/types/PubSubSnapshot.md +2 -0
- package/dist/okf/types/PubSubSubscription.md +1 -0
- package/dist/okf/types/PubSubTopic.md +1 -0
- package/dist/okf/types/PubsubliteReservation.md +1 -0
- package/dist/okf/types/PubsubliteTopic.md +1 -0
- package/dist/okf/types/RecaptchaenterpriseFirewallPolicy.md +2 -0
- package/dist/okf/types/RecaptchaenterpriseKey.md +2 -0
- package/dist/okf/types/Recognizer.md +2 -0
- package/dist/okf/types/RedisCluster.md +2 -0
- package/dist/okf/types/RedisInstance.md +8 -0
- package/dist/okf/types/RegionAutoscaler.md +3 -0
- package/dist/okf/types/RegionDiskResourcePolicyAttachment.md +1 -0
- package/dist/okf/types/RegionNetworkEndpointGroup.md +2 -0
- package/dist/okf/types/RegionPerInstanceConfig.md +1 -0
- package/dist/okf/types/RegionSSLPolicy.md +4 -0
- package/dist/okf/types/RegionalEndpoint.md +2 -0
- package/dist/okf/types/ResourceBundle.md +2 -0
- package/dist/okf/types/ResourcePolicy.md +3 -0
- package/dist/okf/types/ResourcemanagerFolder.md +5 -0
- package/dist/okf/types/ResourcemanagerPolicy.md +3 -0
- package/dist/okf/types/ResourcemanagerProject.md +2 -0
- package/dist/okf/types/ResponsePolicy.md +1 -0
- package/dist/okf/types/ResponsePolicyRule.md +1 -0
- package/dist/okf/types/Restore.md +2 -0
- package/dist/okf/types/RestorePlan.md +2 -0
- package/dist/okf/types/Router.md +3 -0
- package/dist/okf/types/RouterInterface.md +1 -0
- package/dist/okf/types/RouterNAT.md +1 -0
- package/dist/okf/types/RouterPeer.md +2 -0
- package/dist/okf/types/Routine.md +3 -0
- package/dist/okf/types/Runtime.md +2 -0
- package/dist/okf/types/RuntimeTemplate.md +2 -0
- package/dist/okf/types/SQLDatabase.md +2 -0
- package/dist/okf/types/SQLInstance.md +10 -0
- package/dist/okf/types/SQLUser.md +1 -0
- package/dist/okf/types/SSHPublicKey.md +2 -0
- package/dist/okf/types/SSLCert.md +8 -0
- package/dist/okf/types/SSLCertificate.md +5 -0
- package/dist/okf/types/SSLPolicy.md +4 -0
- package/dist/okf/types/SavedQuery.md +2 -0
- package/dist/okf/types/Schema.md +1 -0
- package/dist/okf/types/Scope.md +5 -0
- package/dist/okf/types/ScopeRBACRoleBinding.md +2 -0
- package/dist/okf/types/SecretCiphertext.md +2 -0
- package/dist/okf/types/SecretManagerSecret.md +3 -0
- package/dist/okf/types/SecretManagerSecretVersion.md +6 -0
- package/dist/okf/types/SecuresourcemanagerInstance.md +2 -0
- package/dist/okf/types/SecuresourcemanagerRepository.md +2 -0
- package/dist/okf/types/SecurityPolicy.md +3 -0
- package/dist/okf/types/ServerTLSPolicy.md +3 -0
- package/dist/okf/types/ServiceAccountKey.md +6 -0
- package/dist/okf/types/ServiceAttachment.md +5 -0
- package/dist/okf/types/ServiceBinding.md +2 -0
- package/dist/okf/types/ServiceConnectionPolicy.md +2 -0
- package/dist/okf/types/ServiceIdentity.md +2 -0
- package/dist/okf/types/ServiceLevelObjective.md +4 -0
- package/dist/okf/types/ServicePerimeter.md +4 -0
- package/dist/okf/types/ServicePerimeterResource.md +1 -0
- package/dist/okf/types/ServiceProjectAttachment.md +2 -0
- package/dist/okf/types/ServiceSplitTraffic.md +1 -0
- package/dist/okf/types/ServicedirectoryEndpoint.md +2 -0
- package/dist/okf/types/ServicedirectoryNamespace.md +2 -0
- package/dist/okf/types/ServicedirectoryService.md +2 -0
- package/dist/okf/types/ServicenetworkingConnection.md +2 -0
- package/dist/okf/types/ServiceusageService.md +1 -0
- package/dist/okf/types/Settings.md +2 -0
- package/dist/okf/types/SharedVPCHostProject.md +1 -0
- package/dist/okf/types/SharedVPCServiceProject.md +1 -0
- package/dist/okf/types/Site.md +3 -0
- package/dist/okf/types/Source.md +2 -0
- package/dist/okf/types/SourcerepoRepository.md +3 -0
- package/dist/okf/types/SpannerBackupSchedule.md +2 -0
- package/dist/okf/types/SpannerDatabase.md +2 -0
- package/dist/okf/types/SpannerInstance.md +3 -0
- package/dist/okf/types/Spoke.md +5 -0
- package/dist/okf/types/StandardAppVersion.md +2 -0
- package/dist/okf/types/StorageBucket.md +3 -0
- package/dist/okf/types/StoragetransferJob.md +5 -0
- package/dist/okf/types/StoredInfoType.md +1 -0
- package/dist/okf/types/Stream.md +3 -0
- package/dist/okf/types/Subnet.md +5 -0
- package/dist/okf/types/Subnetwork.md +8 -0
- package/dist/okf/types/Subscription.md +1 -0
- package/dist/okf/types/SyncAuthorization.md +2 -0
- package/dist/okf/types/TCPRoute.md +4 -0
- package/dist/okf/types/TLSRoute.md +4 -0
- package/dist/okf/types/Tag.md +2 -0
- package/dist/okf/types/TagBinding.md +3 -0
- package/dist/okf/types/TagKey.md +6 -0
- package/dist/okf/types/TagTemplate.md +2 -0
- package/dist/okf/types/TagValue.md +6 -0
- package/dist/okf/types/Target.md +2 -0
- package/dist/okf/types/TargetGRPCProxy.md +5 -0
- package/dist/okf/types/TargetHTTPProxy.md +4 -0
- package/dist/okf/types/TargetHTTPSProxy.md +5 -0
- package/dist/okf/types/TargetInstance.md +3 -0
- package/dist/okf/types/TargetPool.md +2 -0
- package/dist/okf/types/TargetSSLProxy.md +4 -0
- package/dist/okf/types/TargetTCPProxy.md +5 -0
- package/dist/okf/types/TargetVPNGateway.md +4 -0
- package/dist/okf/types/TasksQueue.md +2 -0
- package/dist/okf/types/Taxonomy.md +3 -0
- package/dist/okf/types/Tenant.md +1 -0
- package/dist/okf/types/TenantDefaultSupportedIDPConfig.md +2 -0
- package/dist/okf/types/TenantInboundSAMLConfig.md +1 -0
- package/dist/okf/types/TenantOAuthIDPConfig.md +1 -0
- package/dist/okf/types/Tensorboard.md +6 -0
- package/dist/okf/types/URLMap.md +5 -0
- package/dist/okf/types/UptimeCheckConfig.md +1 -0
- package/dist/okf/types/User.md +2 -0
- package/dist/okf/types/VPCNetwork.md +3 -0
- package/dist/okf/types/VPNGateway.md +2 -0
- package/dist/okf/types/VPNTunnel.md +7 -0
- package/dist/okf/types/VertexaiDataset.md +1 -0
- package/dist/okf/types/VertexaiEndpoint.md +1 -0
- package/dist/okf/types/VertexaiIndex.md +1 -0
- package/dist/okf/types/VirtualMachine.md +2 -0
- package/dist/okf/types/VmwareengineNetwork.md +2 -0
- package/dist/okf/types/VmwareengineNetworkPeering.md +2 -0
- package/dist/okf/types/VpnConnection.md +3 -0
- package/dist/okf/types/WasmPlugin.md +2 -0
- package/dist/okf/types/WebApp.md +3 -0
- package/dist/okf/types/Webhook.md +3 -0
- package/dist/okf/types/WorkerPool.md +2 -0
- package/dist/okf/types/Workflow.md +2 -0
- package/dist/okf/types/WorkflowTemplate.md +4 -0
- package/dist/okf/types/WorkflowsExecution.md +2 -0
- package/dist/okf/types/WorkforcePool.md +3 -0
- package/dist/okf/types/WorkforcePoolProvider.md +2 -0
- package/dist/okf/types/Workload.md +2 -0
- package/dist/okf/types/WorkloadIdentityPool.md +2 -0
- package/dist/okf/types/WorkloadIdentityPoolProvider.md +2 -0
- package/dist/okf/types/Workstation.md +2 -0
- package/dist/okf/types/WorkstationCluster.md +2 -0
- package/dist/okf/types/WorkstationConfig.md +2 -0
- package/dist/okf/types/Zone.md +2 -0
- package/dist/op/activities/floci-gcp.js +49 -0
- package/dist/op/activities/gcp-apply.js +618 -0
- package/dist/op/activities/index.js +10 -0
- package/dist/op/builders.js +50 -0
- package/dist/ownership.js +38 -0
- package/dist/package-cli.js +20 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +377 -0
- package/dist/pseudo.js +15 -0
- package/dist/rules/schema-registry.ts +2 -1
- package/dist/serializer.d.ts.map +1 -1
- package/dist/serializer.js +247 -0
- package/dist/spec/fetch.js +107 -0
- package/dist/spec/parse.d.ts +1 -1
- package/dist/spec/parse.js +339 -0
- package/dist/types/index.d.ts +1367 -0
- package/dist/validate-cli.js +11 -0
- package/dist/validate.js +24 -0
- package/dist/variables.js +15 -0
- package/package.json +8 -8
- package/src/attributes.test.ts +16 -0
- package/src/codegen/generate.ts +8 -3
- package/src/codegen/package.ts +2 -2
- package/src/composites/catalog.ts +7 -1
- package/src/composites/cloud-run-service.ts +12 -5
- package/src/composites/composites.test.ts +17 -0
- package/src/generated/index.d.ts +1367 -0
- package/src/generated/index.ts +487 -487
- package/src/generated/lexicon-gcp.json +1848 -481
- package/src/health.test.ts +59 -0
- package/src/health.ts +123 -0
- package/src/index.ts +3 -0
- package/src/lint/post-synth/schema-registry.ts +2 -1
- package/src/lsp/completions.ts +2 -1
- package/src/lsp/hover.ts +2 -1
- package/src/plugin.ts +8 -0
- package/src/serializer-outputs.test.ts +26 -0
- package/src/serializer.ts +21 -3
- package/src/spec/parse.test.ts +42 -2
- package/src/spec/parse.ts +17 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudFunctionWithTrigger composite — CloudFunction + source bucket + optional PubSub/HTTP trigger + invoker IAM.
|
|
3
|
+
*/
|
|
4
|
+
import { Composite, mergeDefaults } from "@intentius/chant";
|
|
5
|
+
import { CloudFunction as CloudFunctionResource, StorageBucket, IAMPolicyMember, } from "../generated/index.js";
|
|
6
|
+
export const CloudFunctionWithTrigger = Composite((props) => {
|
|
7
|
+
const { name, runtime, entryPoint, region, availableMemoryMb = "256M", timeout = 60, triggerType = "http", triggerTopic, publicAccess = false, environmentVariables, labels: extraLabels = {}, namespace, defaults: defs, } = props;
|
|
8
|
+
const commonLabels = {
|
|
9
|
+
"app.kubernetes.io/name": name,
|
|
10
|
+
"app.kubernetes.io/managed-by": "chant",
|
|
11
|
+
...extraLabels,
|
|
12
|
+
};
|
|
13
|
+
const sourceBucket = new StorageBucket(mergeDefaults({
|
|
14
|
+
metadata: {
|
|
15
|
+
name: `${name}-source`,
|
|
16
|
+
...(namespace && { namespace }),
|
|
17
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "source" },
|
|
18
|
+
},
|
|
19
|
+
location: region ?? "US",
|
|
20
|
+
uniformBucketLevelAccess: true,
|
|
21
|
+
}, defs?.sourceBucket));
|
|
22
|
+
const eventTrigger = triggerType === "pubsub" && triggerTopic
|
|
23
|
+
? { eventType: "google.cloud.pubsub.topic.v1.messagePublished", pubsubTopic: triggerTopic }
|
|
24
|
+
: undefined;
|
|
25
|
+
const fn = new CloudFunctionResource(mergeDefaults({
|
|
26
|
+
metadata: {
|
|
27
|
+
name,
|
|
28
|
+
...(namespace && { namespace }),
|
|
29
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "function" },
|
|
30
|
+
},
|
|
31
|
+
...(region && { location: region }),
|
|
32
|
+
runtime,
|
|
33
|
+
entryPoint,
|
|
34
|
+
availableMemoryMb,
|
|
35
|
+
timeout: `${timeout}s`,
|
|
36
|
+
buildConfig: {
|
|
37
|
+
sourceRef: {
|
|
38
|
+
storageBucketRef: { name: `${name}-source` },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
...(eventTrigger && { eventTrigger }),
|
|
42
|
+
...(environmentVariables && { environmentVariables }),
|
|
43
|
+
}, defs?.function));
|
|
44
|
+
const result = {
|
|
45
|
+
function: fn,
|
|
46
|
+
sourceBucket,
|
|
47
|
+
};
|
|
48
|
+
if (publicAccess && triggerType === "http") {
|
|
49
|
+
result.invokerIam = new IAMPolicyMember(mergeDefaults({
|
|
50
|
+
metadata: {
|
|
51
|
+
name: `${name}-invoker`,
|
|
52
|
+
...(namespace && { namespace }),
|
|
53
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "iam" },
|
|
54
|
+
},
|
|
55
|
+
member: "allUsers",
|
|
56
|
+
role: "roles/cloudfunctions.invoker",
|
|
57
|
+
resourceRef: {
|
|
58
|
+
apiVersion: "cloudfunctions.cnrm.cloud.google.com/v1beta1",
|
|
59
|
+
kind: "CloudFunctionsFunction",
|
|
60
|
+
name,
|
|
61
|
+
},
|
|
62
|
+
}, defs?.invokerIam));
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}, "CloudFunctionWithTrigger");
|
|
@@ -7,8 +7,10 @@ export interface CloudRunServiceProps {
|
|
|
7
7
|
name: string;
|
|
8
8
|
/** Container image. */
|
|
9
9
|
image: string;
|
|
10
|
-
/** GCP region. */
|
|
10
|
+
/** GCP region (default: GCP.Region, resolved from GCP_REGION at build). */
|
|
11
11
|
location?: string;
|
|
12
|
+
/** GCP project the service runs in, as `projectRef.external` (default: GCP.ProjectId, resolved from GCP_PROJECT_ID at build). */
|
|
13
|
+
projectId?: string;
|
|
12
14
|
/** Port the container listens on (default: 8080). */
|
|
13
15
|
port?: number;
|
|
14
16
|
/** CPU limit (default: "1000m"). */
|
|
@@ -43,10 +45,12 @@ export interface CloudRunServiceProps {
|
|
|
43
45
|
*
|
|
44
46
|
* @example
|
|
45
47
|
* ```ts
|
|
46
|
-
* import {
|
|
48
|
+
* import { CloudRunServiceComposite } from "@intentius/chant-lexicon-gcp";
|
|
47
49
|
*
|
|
48
|
-
* const { service, publicIam } =
|
|
50
|
+
* const { service, publicIam } = CloudRunServiceComposite({
|
|
49
51
|
* name: "my-api",
|
|
52
|
+
* projectId: "my-project",
|
|
53
|
+
* location: "us-central1",
|
|
50
54
|
* image: "gcr.io/my-project/my-api:latest",
|
|
51
55
|
* publicAccess: true,
|
|
52
56
|
* });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-run-service.d.ts","sourceRoot":"","sources":["../../src/composites/cloud-run-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,eAAe,IAAI,uBAAuB,EAC1C,eAAe,EAChB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-run-service.d.ts","sourceRoot":"","sources":["../../src/composites/cloud-run-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,eAAe,IAAI,uBAAuB,EAC1C,eAAe,EAChB,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,oBAAoB;IACnC,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iIAAiI;IACjI,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6BAA6B;IAC7B,GAAG,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,SAAS,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACvE,CAAC;CACH;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,wBAAwB,2FA0EP,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudRunServiceComposite composite — RunService + optional IAMPolicyMember for public access.
|
|
3
|
+
*/
|
|
4
|
+
import { Composite, mergeDefaults } from "@intentius/chant";
|
|
5
|
+
import { CloudRunService as CloudRunServiceResource, IAMPolicyMember, } from "../generated/index.js";
|
|
6
|
+
import { GCP } from "../pseudo.js";
|
|
7
|
+
/**
|
|
8
|
+
* Create a CloudRunService composite.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { CloudRunServiceComposite } from "@intentius/chant-lexicon-gcp";
|
|
13
|
+
*
|
|
14
|
+
* const { service, publicIam } = CloudRunServiceComposite({
|
|
15
|
+
* name: "my-api",
|
|
16
|
+
* projectId: "my-project",
|
|
17
|
+
* location: "us-central1",
|
|
18
|
+
* image: "gcr.io/my-project/my-api:latest",
|
|
19
|
+
* publicAccess: true,
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export const CloudRunServiceComposite = Composite((props) => {
|
|
24
|
+
const { name, image, location, projectId, port = 8080, cpuLimit = "1000m", memoryLimit = "512Mi", maxInstanceRequestConcurrency = 80, minInstanceCount = 0, maxInstanceCount = 100, publicAccess = false, env, labels: extraLabels = {}, namespace, defaults: defs, } = props;
|
|
25
|
+
const commonLabels = {
|
|
26
|
+
"app.kubernetes.io/name": name,
|
|
27
|
+
"app.kubernetes.io/managed-by": "chant",
|
|
28
|
+
...extraLabels,
|
|
29
|
+
};
|
|
30
|
+
const containers = [
|
|
31
|
+
{
|
|
32
|
+
image,
|
|
33
|
+
ports: [{ containerPort: port, name: "http1" }],
|
|
34
|
+
resources: {
|
|
35
|
+
limits: { cpu: cpuLimit, memory: memoryLimit },
|
|
36
|
+
},
|
|
37
|
+
...(env && env.length > 0 && { env }),
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
const service = new CloudRunServiceResource(mergeDefaults({
|
|
41
|
+
metadata: {
|
|
42
|
+
name,
|
|
43
|
+
...(namespace && { namespace }),
|
|
44
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "service" },
|
|
45
|
+
},
|
|
46
|
+
location: location ?? GCP.Region,
|
|
47
|
+
projectRef: { external: projectId ?? GCP.ProjectId },
|
|
48
|
+
template: {
|
|
49
|
+
maxInstanceRequestConcurrency,
|
|
50
|
+
scaling: {
|
|
51
|
+
minInstanceCount,
|
|
52
|
+
maxInstanceCount,
|
|
53
|
+
},
|
|
54
|
+
containers,
|
|
55
|
+
},
|
|
56
|
+
}, defs?.service));
|
|
57
|
+
const result = { service };
|
|
58
|
+
if (publicAccess) {
|
|
59
|
+
result.publicIam = new IAMPolicyMember(mergeDefaults({
|
|
60
|
+
metadata: {
|
|
61
|
+
name: `${name}-public`,
|
|
62
|
+
...(namespace && { namespace }),
|
|
63
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "iam" },
|
|
64
|
+
},
|
|
65
|
+
member: "allUsers",
|
|
66
|
+
role: "roles/run.invoker",
|
|
67
|
+
resourceRef: {
|
|
68
|
+
apiVersion: "run.cnrm.cloud.google.com/v1beta1",
|
|
69
|
+
kind: "RunService",
|
|
70
|
+
name,
|
|
71
|
+
},
|
|
72
|
+
}, defs?.publicIam));
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}, "CloudRunServiceComposite");
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudSqlInstance composite — SQLInstance + SQLDatabase + SQLUser.
|
|
3
|
+
*/
|
|
4
|
+
import { Composite, mergeDefaults } from "@intentius/chant";
|
|
5
|
+
import { SQLInstance, SQLDatabase, SQLUser } from "../generated/index.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create a CloudSqlInstance composite.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { CloudSqlInstance } from "@intentius/chant-lexicon-gcp";
|
|
12
|
+
*
|
|
13
|
+
* const { instance, database, user } = CloudSqlInstance({
|
|
14
|
+
* name: "my-db",
|
|
15
|
+
* databaseVersion: "POSTGRES_15",
|
|
16
|
+
* tier: "db-custom-2-7680",
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export const CloudSqlInstance = Composite((props) => {
|
|
21
|
+
const { name, databaseVersion = "POSTGRES_15", tier = "db-f1-micro", region, databaseName = name, userName = "admin", diskSize = 10, diskAutoresize = true, backupEnabled = true, highAvailability = false, labels: extraLabels = {}, namespace, defaults: defs, } = props;
|
|
22
|
+
// K8s metadata name must be a valid DNS subdomain (no underscores).
|
|
23
|
+
// When databaseName differs from the instance name, prefix with instance name
|
|
24
|
+
// to guarantee uniqueness across instances sharing the same databaseName.
|
|
25
|
+
const sanitizedDbName = databaseName.replace(/_/g, "-");
|
|
26
|
+
const databaseK8sName = databaseName === name ? sanitizedDbName : `${name}-${sanitizedDbName}`;
|
|
27
|
+
const commonLabels = {
|
|
28
|
+
"app.kubernetes.io/name": name,
|
|
29
|
+
"app.kubernetes.io/managed-by": "chant",
|
|
30
|
+
...extraLabels,
|
|
31
|
+
};
|
|
32
|
+
const settings = {
|
|
33
|
+
tier,
|
|
34
|
+
diskSize,
|
|
35
|
+
diskAutoresize,
|
|
36
|
+
...(highAvailability && { availabilityType: "REGIONAL" }),
|
|
37
|
+
};
|
|
38
|
+
if (backupEnabled) {
|
|
39
|
+
settings.backupConfiguration = {
|
|
40
|
+
enabled: true,
|
|
41
|
+
startTime: "03:00",
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const instance = new SQLInstance(mergeDefaults({
|
|
45
|
+
metadata: {
|
|
46
|
+
name,
|
|
47
|
+
...(namespace && { namespace }),
|
|
48
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "database" },
|
|
49
|
+
},
|
|
50
|
+
databaseVersion,
|
|
51
|
+
...(region && { region }),
|
|
52
|
+
settings,
|
|
53
|
+
}, defs?.instance));
|
|
54
|
+
const database = new SQLDatabase(mergeDefaults({
|
|
55
|
+
metadata: {
|
|
56
|
+
name: databaseK8sName,
|
|
57
|
+
...(namespace && { namespace }),
|
|
58
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "database" },
|
|
59
|
+
},
|
|
60
|
+
instanceRef: { name },
|
|
61
|
+
// resourceID sets the actual Cloud SQL database name when the K8s-safe name differs
|
|
62
|
+
...(databaseName !== sanitizedDbName && { resourceID: databaseName }),
|
|
63
|
+
}, defs?.database));
|
|
64
|
+
const user = new SQLUser(mergeDefaults({
|
|
65
|
+
metadata: {
|
|
66
|
+
// K8s name scoped to the instance for uniqueness (e.g. "mydb-admin").
|
|
67
|
+
// Without resourceID, Config Connector uses metadata.name as the actual
|
|
68
|
+
// Cloud SQL username — so the PG username IS the K8s resource name.
|
|
69
|
+
// Callers can override via defaults.user.resourceID if a shorter name is needed.
|
|
70
|
+
name: `${name}-${userName}`,
|
|
71
|
+
...(namespace && { namespace }),
|
|
72
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "database" },
|
|
73
|
+
},
|
|
74
|
+
instanceRef: { name },
|
|
75
|
+
password: {
|
|
76
|
+
valueFrom: {
|
|
77
|
+
secretKeyRef: {
|
|
78
|
+
name: `${name}-db-password`,
|
|
79
|
+
key: "password",
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
}, defs?.user));
|
|
84
|
+
return { instance, database, user };
|
|
85
|
+
}, "CloudSqlInstance");
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GcsBucket composite — StorageBucket with encryption, uniform access, and lifecycle.
|
|
3
|
+
*/
|
|
4
|
+
import { Composite, mergeDefaults } from "@intentius/chant";
|
|
5
|
+
import { StorageBucket } from "../generated/index.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create a GcsBucket composite.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { GcsBucket } from "@intentius/chant-lexicon-gcp";
|
|
12
|
+
*
|
|
13
|
+
* const { bucket } = GcsBucket({
|
|
14
|
+
* name: "my-data-bucket",
|
|
15
|
+
* location: "US",
|
|
16
|
+
* versioning: true,
|
|
17
|
+
* lifecycleDeleteAfterDays: 365,
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export const GcsBucket = Composite((props) => {
|
|
22
|
+
const { name, location = "US", storageClass = "STANDARD", uniformBucketLevelAccess = true, versioning = false, kmsKeyName, lifecycleDeleteAfterDays, lifecycleNearlineAfterDays, labels: extraLabels = {}, namespace, defaults: defs, } = props;
|
|
23
|
+
const commonLabels = {
|
|
24
|
+
"app.kubernetes.io/name": name,
|
|
25
|
+
"app.kubernetes.io/managed-by": "chant",
|
|
26
|
+
...extraLabels,
|
|
27
|
+
};
|
|
28
|
+
const spec = {
|
|
29
|
+
location,
|
|
30
|
+
storageClass,
|
|
31
|
+
uniformBucketLevelAccess,
|
|
32
|
+
};
|
|
33
|
+
if (versioning) {
|
|
34
|
+
spec.versioning = { enabled: true };
|
|
35
|
+
}
|
|
36
|
+
if (kmsKeyName) {
|
|
37
|
+
spec.encryption = { kmsKeyRef: { external: kmsKeyName } };
|
|
38
|
+
}
|
|
39
|
+
const lifecycleRules = [];
|
|
40
|
+
if (lifecycleDeleteAfterDays) {
|
|
41
|
+
lifecycleRules.push({
|
|
42
|
+
action: { type: "Delete" },
|
|
43
|
+
condition: { age: lifecycleDeleteAfterDays },
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if (lifecycleNearlineAfterDays) {
|
|
47
|
+
lifecycleRules.push({
|
|
48
|
+
action: { type: "SetStorageClass", storageClass: "NEARLINE" },
|
|
49
|
+
condition: { age: lifecycleNearlineAfterDays },
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (lifecycleRules.length > 0) {
|
|
53
|
+
spec.lifecycleRule = lifecycleRules;
|
|
54
|
+
}
|
|
55
|
+
const bucket = new StorageBucket(mergeDefaults({
|
|
56
|
+
metadata: {
|
|
57
|
+
name,
|
|
58
|
+
...(namespace && { namespace }),
|
|
59
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "storage" },
|
|
60
|
+
},
|
|
61
|
+
...spec,
|
|
62
|
+
}, defs?.bucket));
|
|
63
|
+
return { bucket };
|
|
64
|
+
}, "GcsBucket");
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GkeCluster composite — ContainerCluster + ContainerNodePool.
|
|
3
|
+
*
|
|
4
|
+
* Creates a GKE cluster with a default node pool configured for
|
|
5
|
+
* workload identity and autoscaling.
|
|
6
|
+
*/
|
|
7
|
+
import { Composite, mergeDefaults } from "@intentius/chant";
|
|
8
|
+
import { GKECluster, NodePool } from "../generated/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Create a GkeCluster composite — returns declarable instances for
|
|
11
|
+
* a ContainerCluster and ContainerNodePool.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { GkeCluster } from "@intentius/chant-lexicon-gcp";
|
|
16
|
+
*
|
|
17
|
+
* const { cluster, nodePool } = GkeCluster({
|
|
18
|
+
* name: "my-cluster",
|
|
19
|
+
* projectId: "my-project",
|
|
20
|
+
* location: "us-central1",
|
|
21
|
+
* maxNodeCount: 10,
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export const GkeCluster = Composite((props) => {
|
|
26
|
+
const { name, projectId, location, initialNodeCount = 1, machineType = "e2-medium", minNodeCount = 1, maxNodeCount = 5, workloadIdentity = true, diskSizeGb = 100, diskType = "pd-standard", network: networkName, subnetwork: subnetworkName, privateNodes = false, masterCidr, nodeLocations, releaseChannel = "REGULAR", labels: extraLabels = {}, namespace, defaults: defs, } = props;
|
|
27
|
+
const commonLabels = {
|
|
28
|
+
"app.kubernetes.io/name": name,
|
|
29
|
+
"app.kubernetes.io/managed-by": "chant",
|
|
30
|
+
...extraLabels,
|
|
31
|
+
};
|
|
32
|
+
const clusterSpec = {
|
|
33
|
+
// GKE API requires initialNodeCount > 0 even when using a separate
|
|
34
|
+
// ContainerNodePool. Force pd-standard so the default pool doesn't
|
|
35
|
+
// consume SSD_TOTAL_GB quota (pd-balanced counts as SSD).
|
|
36
|
+
initialNodeCount: 1,
|
|
37
|
+
nodeConfig: {
|
|
38
|
+
machineType,
|
|
39
|
+
diskType: "pd-standard",
|
|
40
|
+
diskSizeGb: 50,
|
|
41
|
+
},
|
|
42
|
+
releaseChannel: { channel: releaseChannel },
|
|
43
|
+
...(location && { location }),
|
|
44
|
+
...(networkName && { networkRef: { name: networkName } }),
|
|
45
|
+
...(subnetworkName && { subnetworkRef: { name: subnetworkName } }),
|
|
46
|
+
...(nodeLocations && { nodeLocations }),
|
|
47
|
+
...(privateNodes && {
|
|
48
|
+
privateClusterConfig: {
|
|
49
|
+
enablePrivateNodes: true,
|
|
50
|
+
// Keep master endpoint public so kubectl works from outside the VPC.
|
|
51
|
+
enablePrivateEndpoint: false,
|
|
52
|
+
...(masterCidr && { masterIpv4CidrBlock: masterCidr }),
|
|
53
|
+
},
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
if (workloadIdentity) {
|
|
57
|
+
clusterSpec.workloadIdentityConfig = {
|
|
58
|
+
workloadPool: `${projectId}.svc.id.goog`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const cluster = new GKECluster(mergeDefaults({
|
|
62
|
+
metadata: {
|
|
63
|
+
name,
|
|
64
|
+
...(namespace && { namespace }),
|
|
65
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "cluster" },
|
|
66
|
+
},
|
|
67
|
+
...clusterSpec,
|
|
68
|
+
}, defs?.cluster));
|
|
69
|
+
const nodePoolName = `${name}-nodes`;
|
|
70
|
+
const nodePool = new NodePool(mergeDefaults({
|
|
71
|
+
metadata: {
|
|
72
|
+
name: nodePoolName,
|
|
73
|
+
...(namespace && { namespace }),
|
|
74
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "node-pool" },
|
|
75
|
+
},
|
|
76
|
+
clusterRef: { name },
|
|
77
|
+
initialNodeCount,
|
|
78
|
+
autoscaling: {
|
|
79
|
+
minNodeCount,
|
|
80
|
+
maxNodeCount,
|
|
81
|
+
},
|
|
82
|
+
nodeConfig: {
|
|
83
|
+
machineType,
|
|
84
|
+
diskSizeGb,
|
|
85
|
+
diskType,
|
|
86
|
+
oauthScopes: ["https://www.googleapis.com/auth/cloud-platform"],
|
|
87
|
+
...(workloadIdentity && {
|
|
88
|
+
workloadMetadataConfig: { mode: "GKE_METADATA" },
|
|
89
|
+
}),
|
|
90
|
+
},
|
|
91
|
+
management: {
|
|
92
|
+
autoRepair: true,
|
|
93
|
+
autoUpgrade: true,
|
|
94
|
+
},
|
|
95
|
+
...(location && { location }),
|
|
96
|
+
}, defs?.nodePool));
|
|
97
|
+
// Adopt and scale the GKE-required default pool to 0.
|
|
98
|
+
// resourceID maps this K8s resource to the GCP pool named "default-pool".
|
|
99
|
+
// Config Connector retries until the workload pool has nodes, at which
|
|
100
|
+
// point GKE accepts the resize-to-zero.
|
|
101
|
+
const defaultPool = new NodePool(mergeDefaults({
|
|
102
|
+
metadata: {
|
|
103
|
+
name: `${name}-default-pool`,
|
|
104
|
+
...(namespace && { namespace }),
|
|
105
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "default-pool" },
|
|
106
|
+
},
|
|
107
|
+
resourceID: "default-pool",
|
|
108
|
+
clusterRef: { name },
|
|
109
|
+
nodeCount: 0,
|
|
110
|
+
...(location && { location }),
|
|
111
|
+
}, defs?.defaultPool));
|
|
112
|
+
return { cluster, nodePool, defaultPool };
|
|
113
|
+
}, "GkeCluster");
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GkeCrdbRegion composite — GKE cluster + public DNS zone + per-region IAM for a CockroachDB region.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the 2-file per-region GCP infra pattern (infra/cluster.ts + infra/dns.ts) with
|
|
5
|
+
* a single composite call. Handles the GKE cluster, the public DNS zone, and all per-region
|
|
6
|
+
* Workload Identity IAM bindings for both ExternalDNS and CockroachDB pods.
|
|
7
|
+
*/
|
|
8
|
+
import { Composite } from "@intentius/chant";
|
|
9
|
+
import { GkeCluster } from "./gke-cluster.js";
|
|
10
|
+
import { DNSManagedZone, GCPServiceAccount, IAMPolicyMember } from "../generated/index.js";
|
|
11
|
+
/**
|
|
12
|
+
* Create a GkeCrdbRegion composite — returns all GCP resources for one CockroachDB region:
|
|
13
|
+
* GKE cluster, public DNS zone, per-region GSAs, and Workload Identity IAM bindings.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { GkeCrdbRegion } from "@intentius/chant-lexicon-gcp";
|
|
18
|
+
*
|
|
19
|
+
* export const east = GkeCrdbRegion({
|
|
20
|
+
* region: "us-east4",
|
|
21
|
+
* clusterName: "gke-crdb-east",
|
|
22
|
+
* network: "crdb-multi-region",
|
|
23
|
+
* subnetwork: "crdb-multi-region-east-nodes",
|
|
24
|
+
* domain: "east.crdb.example.com",
|
|
25
|
+
* project: GCP_PROJECT_ID,
|
|
26
|
+
* crdbNamespace: "crdb-east",
|
|
27
|
+
* masterCidr: "172.16.0.0/28",
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export const GkeCrdbRegion = Composite((props) => {
|
|
32
|
+
const { region, clusterName, network, subnetwork, domain, project, crdbNamespace, crdbK8sSa = "cockroachdb", masterCidr = "172.16.0.0/28", nodeConfig = {}, releaseChannel = "REGULAR", backupBucket, labels: extraLabels = {}, namespace, } = props;
|
|
33
|
+
const { machineType = "n2-standard-2", diskSizeGb = 100, nodeCount = 1, maxNodeCount = 3, } = nodeConfig;
|
|
34
|
+
const commonLabels = {
|
|
35
|
+
"app.kubernetes.io/name": clusterName,
|
|
36
|
+
"app.kubernetes.io/managed-by": "chant",
|
|
37
|
+
...extraLabels,
|
|
38
|
+
};
|
|
39
|
+
const meta = (component, resourceName) => ({
|
|
40
|
+
name: resourceName,
|
|
41
|
+
...(namespace && { namespace }),
|
|
42
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": component },
|
|
43
|
+
});
|
|
44
|
+
// ── GKE Cluster ──────────────────────────────────────────────────────────────
|
|
45
|
+
const { cluster, nodePool, defaultPool } = GkeCluster({
|
|
46
|
+
name: clusterName,
|
|
47
|
+
projectId: project,
|
|
48
|
+
location: region,
|
|
49
|
+
machineType,
|
|
50
|
+
diskSizeGb,
|
|
51
|
+
initialNodeCount: nodeCount,
|
|
52
|
+
minNodeCount: nodeCount,
|
|
53
|
+
maxNodeCount,
|
|
54
|
+
network,
|
|
55
|
+
subnetwork,
|
|
56
|
+
workloadIdentity: true,
|
|
57
|
+
privateNodes: true,
|
|
58
|
+
masterCidr,
|
|
59
|
+
releaseChannel,
|
|
60
|
+
labels: extraLabels,
|
|
61
|
+
...(namespace && { namespace }),
|
|
62
|
+
});
|
|
63
|
+
// ── Public DNS Zone ───────────────────────────────────────────────────────────
|
|
64
|
+
const dnsZoneName = `${clusterName}-zone`;
|
|
65
|
+
const dnsZone = new DNSManagedZone({
|
|
66
|
+
metadata: meta("dns", dnsZoneName),
|
|
67
|
+
dnsName: `${domain}.`,
|
|
68
|
+
description: `CockroachDB ${region} UI — managed by chant`,
|
|
69
|
+
});
|
|
70
|
+
// ── ExternalDNS Service Account ───────────────────────────────────────────────
|
|
71
|
+
const dnsGsaName = `${clusterName}-dns`;
|
|
72
|
+
const dnsGsa = new GCPServiceAccount({
|
|
73
|
+
metadata: meta("iam", dnsGsaName),
|
|
74
|
+
displayName: `CockroachDB ${region} ExternalDNS workload identity`,
|
|
75
|
+
});
|
|
76
|
+
const dnsWiBinding = new IAMPolicyMember({
|
|
77
|
+
metadata: meta("iam", `${dnsGsaName}-wi`),
|
|
78
|
+
member: `serviceAccount:${project}.svc.id.goog[kube-system/external-dns-sa]`,
|
|
79
|
+
role: "roles/iam.workloadIdentityUser",
|
|
80
|
+
resourceRef: {
|
|
81
|
+
apiVersion: "iam.cnrm.cloud.google.com/v1beta1",
|
|
82
|
+
kind: "IAMServiceAccount",
|
|
83
|
+
name: dnsGsaName,
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
const dnsAdminBinding = new IAMPolicyMember({
|
|
87
|
+
metadata: meta("iam", `${dnsGsaName}-admin`),
|
|
88
|
+
member: `serviceAccount:${dnsGsaName}@${project}.iam.gserviceaccount.com`,
|
|
89
|
+
role: "roles/dns.admin",
|
|
90
|
+
resourceRef: {
|
|
91
|
+
apiVersion: "resourcemanager.cnrm.cloud.google.com/v1beta1",
|
|
92
|
+
kind: "Project",
|
|
93
|
+
external: `projects/${project}`,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
// ── CockroachDB Service Account ───────────────────────────────────────────────
|
|
97
|
+
const crdbGsaName = `${clusterName}-crdb`;
|
|
98
|
+
const crdbGsa = new GCPServiceAccount({
|
|
99
|
+
metadata: meta("iam", crdbGsaName),
|
|
100
|
+
displayName: `CockroachDB ${region} workload identity`,
|
|
101
|
+
});
|
|
102
|
+
const crdbWiBinding = new IAMPolicyMember({
|
|
103
|
+
metadata: meta("iam", `${crdbGsaName}-wi`),
|
|
104
|
+
member: `serviceAccount:${project}.svc.id.goog[${crdbNamespace}/${crdbK8sSa}]`,
|
|
105
|
+
role: "roles/iam.workloadIdentityUser",
|
|
106
|
+
resourceRef: {
|
|
107
|
+
apiVersion: "iam.cnrm.cloud.google.com/v1beta1",
|
|
108
|
+
kind: "IAMServiceAccount",
|
|
109
|
+
name: crdbGsaName,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
const result = {
|
|
113
|
+
cluster,
|
|
114
|
+
nodePool,
|
|
115
|
+
defaultPool,
|
|
116
|
+
dnsZone,
|
|
117
|
+
dnsGsa,
|
|
118
|
+
dnsWiBinding,
|
|
119
|
+
dnsAdminBinding,
|
|
120
|
+
crdbGsa,
|
|
121
|
+
crdbWiBinding,
|
|
122
|
+
};
|
|
123
|
+
// Optional: GCS backup access for CRDB GSA
|
|
124
|
+
if (backupBucket) {
|
|
125
|
+
result.crdbBackupBinding = new IAMPolicyMember({
|
|
126
|
+
metadata: meta("iam", `${crdbGsaName}-backup`),
|
|
127
|
+
member: `serviceAccount:${crdbGsaName}@${project}.iam.gserviceaccount.com`,
|
|
128
|
+
role: "roles/storage.objectAdmin",
|
|
129
|
+
resourceRef: {
|
|
130
|
+
apiVersion: "storage.cnrm.cloud.google.com/v1beta1",
|
|
131
|
+
kind: "StorageBucket",
|
|
132
|
+
name: backupBucket,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}, "GkeCrdbRegion");
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GpuNodePool composite — ContainerNodePool with GPU accelerators.
|
|
3
|
+
*
|
|
4
|
+
* Promoted from the hand-wired `gpuNodePool` in the ray-kuberay-gke example
|
|
5
|
+
* (examples/ray-kuberay-gke/src/infra/cluster.ts). Attaches to an existing
|
|
6
|
+
* GKE cluster (e.g. one created by `GkeCluster`) and adds a separate,
|
|
7
|
+
* scale-to-zero pool for GPU-tainted workloads.
|
|
8
|
+
*
|
|
9
|
+
* NOTE: GKE auto-installs the nvidia-device-plugin DaemonSet when a node
|
|
10
|
+
* pool has accelerators. Do NOT emit it as a K8s manifest — it will
|
|
11
|
+
* conflict with the GKE-managed version.
|
|
12
|
+
*/
|
|
13
|
+
import { Composite, mergeDefaults } from "@intentius/chant";
|
|
14
|
+
import { NodePool } from "../generated/index.js";
|
|
15
|
+
const DEFAULT_TAINT = [
|
|
16
|
+
{ key: "nvidia.com/gpu", value: "present", effect: "NO_SCHEDULE" },
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Create a GpuNodePool composite — a scale-to-zero ContainerNodePool with
|
|
20
|
+
* GPU accelerators, tainted so only pods with a matching toleration land there.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* import { GpuNodePool } from "@intentius/chant-lexicon-gcp";
|
|
25
|
+
*
|
|
26
|
+
* const { nodePool } = GpuNodePool({
|
|
27
|
+
* name: "ray-gke-gpu",
|
|
28
|
+
* clusterRef: { name: "ray-gke" },
|
|
29
|
+
* location: "us-central1",
|
|
30
|
+
* acceleratorType: "nvidia-tesla-t4",
|
|
31
|
+
* maxNodeCount: 4,
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export const GpuNodePool = Composite((props) => {
|
|
36
|
+
const { name, clusterRef, location, machineType = "n1-standard-8", acceleratorType = "nvidia-tesla-t4", acceleratorCount = 1, minNodeCount = 0, maxNodeCount = 4, diskSizeGb = 200, diskType = "pd-ssd", taint = DEFAULT_TAINT, workloadMetadata = true, gpuSharingConfig, gpuPartitionSize, labels: extraLabels = {}, namespace, defaults: defs, } = props;
|
|
37
|
+
const commonLabels = {
|
|
38
|
+
"app.kubernetes.io/name": name,
|
|
39
|
+
"app.kubernetes.io/managed-by": "chant",
|
|
40
|
+
...extraLabels,
|
|
41
|
+
};
|
|
42
|
+
const guestAccelerator = {
|
|
43
|
+
count: acceleratorCount,
|
|
44
|
+
type: acceleratorType,
|
|
45
|
+
...(gpuSharingConfig && { gpuSharingConfig }),
|
|
46
|
+
...(gpuPartitionSize && { gpuPartitionSize }),
|
|
47
|
+
};
|
|
48
|
+
const nodePool = new NodePool(mergeDefaults({
|
|
49
|
+
metadata: {
|
|
50
|
+
name,
|
|
51
|
+
...(namespace && { namespace }),
|
|
52
|
+
labels: { ...commonLabels, "app.kubernetes.io/component": "gpu-node-pool" },
|
|
53
|
+
},
|
|
54
|
+
clusterRef,
|
|
55
|
+
location,
|
|
56
|
+
initialNodeCount: 0,
|
|
57
|
+
autoscaling: {
|
|
58
|
+
minNodeCount,
|
|
59
|
+
maxNodeCount,
|
|
60
|
+
locationPolicy: "ANY",
|
|
61
|
+
},
|
|
62
|
+
nodeConfig: {
|
|
63
|
+
machineType,
|
|
64
|
+
diskSizeGb,
|
|
65
|
+
diskType,
|
|
66
|
+
guestAccelerator: [guestAccelerator],
|
|
67
|
+
...(taint.length > 0 && { taint }),
|
|
68
|
+
...(workloadMetadata && { workloadMetadataConfig: { mode: "GKE_METADATA" } }),
|
|
69
|
+
oauthScopes: ["https://www.googleapis.com/auth/cloud-platform"],
|
|
70
|
+
},
|
|
71
|
+
management: { autoRepair: true, autoUpgrade: true },
|
|
72
|
+
}, defs?.nodePool));
|
|
73
|
+
return { nodePool };
|
|
74
|
+
}, "GpuNodePool");
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { GovernanceFoundation, LocationRestriction, OrganizationAuditConfig } from "./landing-zone.js";
|
|
2
|
+
export { GkeCluster } from "./gke-cluster.js";
|
|
3
|
+
export { CloudRunServiceComposite } from "./cloud-run-service.js";
|
|
4
|
+
export { CloudSqlInstance } from "./cloud-sql-instance.js";
|
|
5
|
+
export { GcsBucket } from "./gcs-bucket.js";
|
|
6
|
+
export { VpcNetwork } from "./vpc-network.js";
|
|
7
|
+
export { PubSubPipeline } from "./pubsub-pipeline.js";
|
|
8
|
+
export { CloudFunctionWithTrigger } from "./cloud-function.js";
|
|
9
|
+
export { PrivateService } from "./private-service.js";
|
|
10
|
+
export { ManagedCertificate } from "./managed-certificate.js";
|
|
11
|
+
export { SecureProject } from "./secure-project.js";
|
|
12
|
+
export { MemorystoreRedis } from "./memorystore-redis.js";
|
|
13
|
+
export { MultiRegionVpc } from "./multi-region-vpc.js";
|
|
14
|
+
export { GkeCrdbRegion } from "./gke-crdb-region.js";
|
|
15
|
+
export { GpuNodePool } from "./gpu-node-pool.js";
|