|
| 1 | +from datetime import datetime |
| 2 | +from typing import ClassVar, Dict, Optional, List, Type, Any |
| 3 | + |
| 4 | +from attr import define, field |
| 5 | + |
| 6 | +from fix_plugin_gcp.gcp_client import GcpApiSpec |
| 7 | +from fix_plugin_gcp.resources.base import GcpResource, GcpDeprecationStatus |
| 8 | +from fixlib.baseresources import BaseServerlessFunction |
| 9 | +from fixlib.json_bender import Bender, S, Bend, ForallBend |
| 10 | + |
| 11 | + |
| 12 | +@define(eq=False, slots=False) |
| 13 | +class GcpRepoSource: |
| 14 | + kind: ClassVar[str] = "gcp_repo_source" |
| 15 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 16 | + "branch_name": S("branchName"), |
| 17 | + "commit_sha": S("commitSha"), |
| 18 | + "dir": S("dir"), |
| 19 | + "project_id": S("projectId"), |
| 20 | + "repo_name": S("repoName"), |
| 21 | + "tag_name": S("tagName"), |
| 22 | + } |
| 23 | + branch_name: Optional[str] = field(default=None) |
| 24 | + commit_sha: Optional[str] = field(default=None) |
| 25 | + dir: Optional[str] = field(default=None) |
| 26 | + project_id: Optional[str] = field(default=None) |
| 27 | + repo_name: Optional[str] = field(default=None) |
| 28 | + tag_name: Optional[str] = field(default=None) |
| 29 | + |
| 30 | + |
| 31 | +@define(eq=False, slots=False) |
| 32 | +class GcpStorageSource: |
| 33 | + kind: ClassVar[str] = "gcp_storage_source" |
| 34 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 35 | + "bucket": S("bucket"), |
| 36 | + "generation": S("generation"), |
| 37 | + "object": S("object"), |
| 38 | + "source_upload_url": S("sourceUploadUrl"), |
| 39 | + } |
| 40 | + bucket: Optional[str] = field(default=None) |
| 41 | + generation: Optional[str] = field(default=None) |
| 42 | + object: Optional[str] = field(default=None) |
| 43 | + source_upload_url: Optional[str] = field(default=None) |
| 44 | + |
| 45 | + |
| 46 | +@define(eq=False, slots=False) |
| 47 | +class GcpSource: |
| 48 | + kind: ClassVar[str] = "gcp_source" |
| 49 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 50 | + "git_uri": S("gitUri"), |
| 51 | + "repo_source": S("repoSource", default={}) >> Bend(GcpRepoSource.mapping), |
| 52 | + "storage_source": S("storageSource", default={}) >> Bend(GcpStorageSource.mapping), |
| 53 | + } |
| 54 | + git_uri: Optional[str] = field(default=None) |
| 55 | + repo_source: Optional[GcpRepoSource] = field(default=None) |
| 56 | + storage_source: Optional[GcpStorageSource] = field(default=None) |
| 57 | + |
| 58 | + |
| 59 | +@define(eq=False, slots=False) |
| 60 | +class GcpSourceProvenance: |
| 61 | + kind: ClassVar[str] = "gcp_source_provenance" |
| 62 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 63 | + "git_uri": S("gitUri"), |
| 64 | + "resolved_repo_source": S("resolvedRepoSource", default={}) >> Bend(GcpRepoSource.mapping), |
| 65 | + "resolved_storage_source": S("resolvedStorageSource", default={}) >> Bend(GcpStorageSource.mapping), |
| 66 | + } |
| 67 | + git_uri: Optional[str] = field(default=None) |
| 68 | + resolved_repo_source: Optional[GcpRepoSource] = field(default=None) |
| 69 | + resolved_storage_source: Optional[GcpStorageSource] = field(default=None) |
| 70 | + |
| 71 | + |
| 72 | +@define(eq=False, slots=False) |
| 73 | +class GcpBuildConfig: |
| 74 | + kind: ClassVar[str] = "gcp_build_config" |
| 75 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 76 | + "automatic_update_policy": S("automaticUpdatePolicy", default={}), |
| 77 | + "build": S("build"), |
| 78 | + "docker_registry": S("dockerRegistry"), |
| 79 | + "docker_repository": S("dockerRepository"), |
| 80 | + "entry_point": S("entryPoint"), |
| 81 | + "environment_variables": S("environmentVariables"), |
| 82 | + "on_deploy_update_policy": S("onDeployUpdatePolicy", "runtimeVersion"), |
| 83 | + "runtime": S("runtime"), |
| 84 | + "service_account": S("serviceAccount"), |
| 85 | + "source": S("source", default={}) >> Bend(GcpSource.mapping), |
| 86 | + "source_provenance": S("sourceProvenance", default={}) >> Bend(GcpSourceProvenance.mapping), |
| 87 | + "source_token": S("sourceToken"), |
| 88 | + "worker_pool": S("workerPool"), |
| 89 | + } |
| 90 | + automatic_update_policy: Optional[Dict[str, Any]] = field(default=None) |
| 91 | + build: Optional[str] = field(default=None) |
| 92 | + docker_registry: Optional[str] = field(default=None) |
| 93 | + docker_repository: Optional[str] = field(default=None) |
| 94 | + entry_point: Optional[str] = field(default=None) |
| 95 | + environment_variables: Optional[Dict[str, str]] = field(default=None) |
| 96 | + on_deploy_update_policy: Optional[str] = field(default=None) |
| 97 | + runtime: Optional[str] = field(default=None) |
| 98 | + service_account: Optional[str] = field(default=None) |
| 99 | + source: Optional[GcpSource] = field(default=None) |
| 100 | + source_provenance: Optional[GcpSourceProvenance] = field(default=None) |
| 101 | + source_token: Optional[str] = field(default=None) |
| 102 | + worker_pool: Optional[str] = field(default=None) |
| 103 | + |
| 104 | + |
| 105 | +@define(eq=False, slots=False) |
| 106 | +class GcpEventFilter: |
| 107 | + kind: ClassVar[str] = "gcp_event_filter" |
| 108 | + mapping: ClassVar[Dict[str, Bender]] = {"attribute": S("attribute"), "operator": S("operator"), "value": S("value")} |
| 109 | + attribute: Optional[str] = field(default=None) |
| 110 | + operator: Optional[str] = field(default=None) |
| 111 | + value: Optional[str] = field(default=None) |
| 112 | + |
| 113 | + |
| 114 | +@define(eq=False, slots=False) |
| 115 | +class GcpEventTrigger: |
| 116 | + kind: ClassVar[str] = "gcp_event_trigger" |
| 117 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 118 | + "channel": S("channel"), |
| 119 | + "event_filters": S("eventFilters", default=[]) >> ForallBend(GcpEventFilter.mapping), |
| 120 | + "event_type": S("eventType"), |
| 121 | + "pubsub_topic": S("pubsubTopic"), |
| 122 | + "retry_policy": S("retryPolicy"), |
| 123 | + "service": S("service"), |
| 124 | + "service_account_email": S("serviceAccountEmail"), |
| 125 | + "trigger": S("trigger"), |
| 126 | + "trigger_region": S("triggerRegion"), |
| 127 | + } |
| 128 | + channel: Optional[str] = field(default=None) |
| 129 | + event_filters: Optional[List[GcpEventFilter]] = field(default=None) |
| 130 | + event_type: Optional[str] = field(default=None) |
| 131 | + pubsub_topic: Optional[str] = field(default=None) |
| 132 | + retry_policy: Optional[str] = field(default=None) |
| 133 | + service: Optional[str] = field(default=None) |
| 134 | + service_account_email: Optional[str] = field(default=None) |
| 135 | + trigger: Optional[str] = field(default=None) |
| 136 | + trigger_region: Optional[str] = field(default=None) |
| 137 | + |
| 138 | + |
| 139 | +@define(eq=False, slots=False) |
| 140 | +class GcpSecretEnvVar: |
| 141 | + kind: ClassVar[str] = "gcp_secret_env_var" |
| 142 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 143 | + "key": S("key"), |
| 144 | + "project_id": S("projectId"), |
| 145 | + "secret": S("secret"), |
| 146 | + "version": S("version"), |
| 147 | + } |
| 148 | + key: Optional[str] = field(default=None) |
| 149 | + project_id: Optional[str] = field(default=None) |
| 150 | + secret: Optional[str] = field(default=None) |
| 151 | + version: Optional[str] = field(default=None) |
| 152 | + |
| 153 | + |
| 154 | +@define(eq=False, slots=False) |
| 155 | +class GcpSecretVersion: |
| 156 | + kind: ClassVar[str] = "gcp_secret_version" |
| 157 | + mapping: ClassVar[Dict[str, Bender]] = {"path": S("path"), "version": S("version")} |
| 158 | + path: Optional[str] = field(default=None) |
| 159 | + version: Optional[str] = field(default=None) |
| 160 | + |
| 161 | + |
| 162 | +@define(eq=False, slots=False) |
| 163 | +class GcpSecretVolume: |
| 164 | + kind: ClassVar[str] = "gcp_secret_volume" |
| 165 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 166 | + "mount_path": S("mountPath"), |
| 167 | + "project_id": S("projectId"), |
| 168 | + "secret": S("secret"), |
| 169 | + "versions": S("versions", default=[]) >> ForallBend(GcpSecretVersion.mapping), |
| 170 | + } |
| 171 | + mount_path: Optional[str] = field(default=None) |
| 172 | + project_id: Optional[str] = field(default=None) |
| 173 | + secret: Optional[str] = field(default=None) |
| 174 | + versions: Optional[List[GcpSecretVersion]] = field(default=None) |
| 175 | + |
| 176 | + |
| 177 | +@define(eq=False, slots=False) |
| 178 | +class GcpServiceConfig: |
| 179 | + kind: ClassVar[str] = "gcp_service_config" |
| 180 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 181 | + "all_traffic_on_latest_revision": S("allTrafficOnLatestRevision"), |
| 182 | + "available_cpu": S("availableCpu"), |
| 183 | + "available_memory": S("availableMemory"), |
| 184 | + "binary_authorization_policy": S("binaryAuthorizationPolicy"), |
| 185 | + "environment_variables": S("environmentVariables"), |
| 186 | + "ingress_settings": S("ingressSettings"), |
| 187 | + "max_instance_count": S("maxInstanceCount"), |
| 188 | + "max_instance_request_concurrency": S("maxInstanceRequestConcurrency"), |
| 189 | + "min_instance_count": S("minInstanceCount"), |
| 190 | + "revision": S("revision"), |
| 191 | + "secret_environment_variables": S("secretEnvironmentVariables", default=[]) |
| 192 | + >> ForallBend(GcpSecretEnvVar.mapping), |
| 193 | + "secret_volumes": S("secretVolumes", default=[]) >> ForallBend(GcpSecretVolume.mapping), |
| 194 | + "security_level": S("securityLevel"), |
| 195 | + "service": S("service"), |
| 196 | + "service_account_email": S("serviceAccountEmail"), |
| 197 | + "timeout_seconds": S("timeoutSeconds"), |
| 198 | + "uri": S("uri"), |
| 199 | + "vpc_connector": S("vpcConnector"), |
| 200 | + "vpc_connector_egress_settings": S("vpcConnectorEgressSettings"), |
| 201 | + } |
| 202 | + all_traffic_on_latest_revision: Optional[bool] = field(default=None) |
| 203 | + available_cpu: Optional[str] = field(default=None) |
| 204 | + available_memory: Optional[str] = field(default=None) |
| 205 | + binary_authorization_policy: Optional[str] = field(default=None) |
| 206 | + environment_variables: Optional[Dict[str, str]] = field(default=None) |
| 207 | + ingress_settings: Optional[str] = field(default=None) |
| 208 | + max_instance_count: Optional[int] = field(default=None) |
| 209 | + max_instance_request_concurrency: Optional[int] = field(default=None) |
| 210 | + min_instance_count: Optional[int] = field(default=None) |
| 211 | + revision: Optional[str] = field(default=None) |
| 212 | + secret_environment_variables: Optional[List[GcpSecretEnvVar]] = field(default=None) |
| 213 | + secret_volumes: Optional[List[GcpSecretVolume]] = field(default=None) |
| 214 | + security_level: Optional[str] = field(default=None) |
| 215 | + service: Optional[str] = field(default=None) |
| 216 | + service_account_email: Optional[str] = field(default=None) |
| 217 | + timeout_seconds: Optional[int] = field(default=None) |
| 218 | + uri: Optional[str] = field(default=None) |
| 219 | + vpc_connector: Optional[str] = field(default=None) |
| 220 | + vpc_connector_egress_settings: Optional[str] = field(default=None) |
| 221 | + |
| 222 | + |
| 223 | +@define(eq=False, slots=False) |
| 224 | +class GcpCloudFunctionsStateMessage: |
| 225 | + kind: ClassVar[str] = "gcp_cloud_functions_state_message" |
| 226 | + mapping: ClassVar[Dict[str, Bender]] = {"message": S("message"), "severity": S("severity"), "type": S("type")} |
| 227 | + message: Optional[str] = field(default=None) |
| 228 | + severity: Optional[str] = field(default=None) |
| 229 | + type: Optional[str] = field(default=None) |
| 230 | + |
| 231 | + |
| 232 | +@define(eq=False, slots=False) |
| 233 | +class GcpUpgradeInfo: |
| 234 | + kind: ClassVar[str] = "gcp_upgrade_info" |
| 235 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 236 | + "build_config": S("buildConfig", default={}) >> Bend(GcpBuildConfig.mapping), |
| 237 | + "event_trigger": S("eventTrigger", default={}) >> Bend(GcpEventTrigger.mapping), |
| 238 | + "service_config": S("serviceConfig", default={}) >> Bend(GcpServiceConfig.mapping), |
| 239 | + "upgrade_state": S("upgradeState"), |
| 240 | + } |
| 241 | + build_config: Optional[GcpBuildConfig] = field(default=None) |
| 242 | + event_trigger: Optional[GcpEventTrigger] = field(default=None) |
| 243 | + service_config: Optional[GcpServiceConfig] = field(default=None) |
| 244 | + upgrade_state: Optional[str] = field(default=None) |
| 245 | + |
| 246 | + |
| 247 | +@define(eq=False, slots=False) |
| 248 | +class GcpCloudFunction(GcpResource, BaseServerlessFunction): |
| 249 | + kind: ClassVar[str] = "gcp_cloud_function" |
| 250 | + _kind_display: ClassVar[str] = "GCP Cloud Function" |
| 251 | + _kind_description: ClassVar[str] = ( |
| 252 | + "GCP Cloud Function is a serverless execution environment for building and connecting cloud services." |
| 253 | + " It allows you to run your code in response to events without provisioning or managing servers." |
| 254 | + ) |
| 255 | + _docs_url: ClassVar[str] = "https://cloud.google.com/functions/docs" |
| 256 | + _kind_service: ClassVar[Optional[str]] = "cloudfunctions" |
| 257 | + _metadata: ClassVar[Dict[str, Any]] = {"icon": "function", "group": "compute"} |
| 258 | + api_spec: ClassVar[GcpApiSpec] = GcpApiSpec( |
| 259 | + service="cloudfunctions", |
| 260 | + version="v2", |
| 261 | + accessors=["projects", "locations", "functions"], |
| 262 | + action="list", |
| 263 | + request_parameter={"parent": "projects/{project}/locations/-"}, |
| 264 | + request_parameter_in={"project"}, |
| 265 | + response_path="functions", |
| 266 | + response_regional_sub_path=None, |
| 267 | + ) |
| 268 | + mapping: ClassVar[Dict[str, Bender]] = { |
| 269 | + "id": S("name").or_else(S("id")).or_else(S("selfLink")), |
| 270 | + "tags": S("labels", default={}), |
| 271 | + "name": S("name"), |
| 272 | + "ctime": S("creationTimestamp"), |
| 273 | + "description": S("description"), |
| 274 | + "link": S("selfLink"), |
| 275 | + "label_fingerprint": S("labelFingerprint"), |
| 276 | + "deprecation_status": S("deprecated", default={}) >> Bend(GcpDeprecationStatus.mapping), |
| 277 | + "build_config": S("buildConfig", default={}) >> Bend(GcpBuildConfig.mapping), |
| 278 | + "create_time": S("createTime"), |
| 279 | + "environment": S("environment"), |
| 280 | + "event_trigger": S("eventTrigger", default={}) >> Bend(GcpEventTrigger.mapping), |
| 281 | + "kms_key_name": S("kmsKeyName"), |
| 282 | + "satisfies_pzs": S("satisfiesPzs"), |
| 283 | + "service_config": S("serviceConfig", default={}) >> Bend(GcpServiceConfig.mapping), |
| 284 | + "state": S("state"), |
| 285 | + "state_messages": S("stateMessages", default=[]) >> ForallBend(GcpCloudFunctionsStateMessage.mapping), |
| 286 | + "update_time": S("updateTime"), |
| 287 | + "upgrade_info": S("upgradeInfo", default={}) >> Bend(GcpUpgradeInfo.mapping), |
| 288 | + "url": S("url"), |
| 289 | + } |
| 290 | + build_config: Optional[GcpBuildConfig] = field(default=None) |
| 291 | + create_time: Optional[datetime] = field(default=None) |
| 292 | + environment: Optional[str] = field(default=None) |
| 293 | + event_trigger: Optional[GcpEventTrigger] = field(default=None) |
| 294 | + kms_key_name: Optional[str] = field(default=None) |
| 295 | + satisfies_pzs: Optional[bool] = field(default=None) |
| 296 | + service_config: Optional[GcpServiceConfig] = field(default=None) |
| 297 | + state: Optional[str] = field(default=None) |
| 298 | + state_messages: Optional[List[GcpCloudFunctionsStateMessage]] = field(default=None) |
| 299 | + update_time: Optional[datetime] = field(default=None) |
| 300 | + upgrade_info: Optional[GcpUpgradeInfo] = field(default=None) |
| 301 | + url: Optional[str] = field(default=None) |
| 302 | + |
| 303 | + |
| 304 | +resources: List[Type[GcpResource]] = [GcpCloudFunction] |
0 commit comments