generate/resources/_vm.py (127 lines of code) (raw):

# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from cdktf_cdktf_provider_google import compute_instance as ce from cdktf_cdktf_provider_google.compute_disk import ( ComputeDisk, ComputeDiskGuestOsFeatures, ) from imports.instance_from_template import InstanceFromTemplate from imports.instance_template import InstanceTemplate from imports.mig import Mig from imports.umig import Umig def create_vm(self, vm): "create vm" vm_name = vm["name"] vm["project"] = self.tf_ref("project", vm["project"]) if vm.get("service_account", {}).get("email"): vm["service_account"]["email"] = self.tf_ref( "service_account", vm["service_account"]["email"] ) for disk in vm.get("attached_disk", []): if disk.get("source"): disk["source"] = self.tf_ref("disk", disk["source"]) for ni in vm.get("network_interface", []): if ni.get("network"): ni["network"] = self.tf_ref("network", ni["network"]) if ni.get("subnetwork"): ni["subnetwork"] = self.tf_ref("subnet", ni["subnetwork"]) if ni.get("subnetwork_project"): ni["subnetwork_project"] = self.tf_ref("project", ni["subnetwork_project"]) self.tf_param_list( ni, "alias_ip_range", ce.ComputeInstanceNetworkInterfaceAliasIpRange ) self.tf_param_list( ni, "access_config", ce.ComputeInstanceNetworkInterfaceAccessConfig ) self.tf_param_list( ni, "ipv6_access_config", ce.ComputeInstanceNetworkInterfaceIpv6AccessConfig ) self.tf_param_list(vm, "network_interface", ce.ComputeInstanceNetworkInterface) self.tf_param_list(vm, "scratch_disk", ce.ComputeInstanceScratchDisk) self.tf_param_list(vm, "attached_disk", ce.ComputeInstanceAttachedDisk) self.tf_param_list(vm, "guest_accelerator", ce.ComputeInstanceGuestAccelerator) self.tf_param_list( vm.get("scheduling"), "node_affinities", ce.ComputeInstanceSchedulingNodeAffinities, ) self.tf_param_list( vm, "scheduling_node_affinities", ce.ComputeInstanceSchedulingNodeAffinities ) self.created["vm"][vm_name] = ce.ComputeInstance(self, f"vm_{vm_name}", **vm) def create_disk(self, disk): "create disk" disk_name = disk["name"] disk["project"] = self.tf_ref("project", disk["project"]) self.tf_param_list(disk, "guest_os_features", ComputeDiskGuestOsFeatures) self.created["disk"][disk_name] = ComputeDisk(self, f"disk_{disk_name}", **disk) def create_instance_template(self, cit): "create instance template" cit_name = cit["name_prefix"] cit["project_id"] = self.tf_ref("project", cit["project_id"]) if cit.get("service_account", {}).get("email"): cit["service_account"]["email"] = self.tf_ref( "service_account", cit["service_account"]["email"] ) if cit.get("network"): cit["network"] = self.tf_ref("network", cit["network"]) if cit.get("subnetwork"): cit["subnetwork"] = self.tf_ref("subnet", cit["subnetwork"]) if cit.get("subnetwork_project"): cit["subnetwork_project"] = self.tf_ref("project", cit["subnetwork_project"]) self.created["vm_template"][cit_name] = InstanceTemplate( self, f"vm_tmpl_{cit_name}", **cit ) def create_instance_from_template(self, ift): "create instance from template" ift_name = ift["hostname"] if ift.get("network"): ift["network"] = self.tf_ref("network", ift["network"]) if ift.get("subnetwork"): ift["subnetwork"] = self.tf_ref("subnet", ift["subnetwork"]) if ift.get("subnetwork_project"): ift["subnetwork_project"] = self.tf_ref("project", ift["subnetwork_project"]) ift["instance_template"] = self.tf_ref("vm_template", ift["instance_template"]) self.created["vm_from_template"][ift_name] = InstanceFromTemplate( self, f"vmft_{ift_name}", **ift ) def create_mig(self, mig): "create mig" mig_name = mig["mig_name"] mig["project_id"] = self.tf_ref("project", mig["project_id"]) mig["instance_template"] = self.tf_ref("vm_template", mig["instance_template"]) self.created["mig"][mig_name] = Mig(self, f"mig_{mig_name}", **mig) def create_umig(self, umig): "create umig" umig_name = umig["hostname"] umig["project_id"] = self.tf_ref("project", umig["project_id"]) if umig.get("network"): umig["network"] = self.tf_ref("network", umig["network"]) if umig.get("subnetwork"): umig["subnetwork"] = self.tf_ref("subnet", umig["subnetwork"]) if umig.get("subnetwork_project"): umig["subnetwork_project"] = self.tf_ref("project", umig["subnetwork_project"]) umig["instance_template"] = self.tf_ref("vm_template", umig["instance_template"]) self.created["umig"][umig_name] = Umig(self, f"umig_{umig_name}", **umig) def generate_compute_instances(self, my_resource, resource): "create compute instance" for vm in self.eztf_config.get(my_resource, []): create_vm(self, vm) def generate_compute_disk(self, my_resource, resource): "create compute disk" for disk in self.eztf_config.get(my_resource, []): create_disk(self, disk) def generate_instance_from_template(self, my_resource, resource): "create instance" for vm in self.eztf_config.get(my_resource, []): create_instance_from_template(self, vm) def generate_instance_template(self, my_resource, resource): "create instance template" for vm in self.eztf_config.get(my_resource, []): create_instance_template(self, vm) def generate_mig(self, my_resource, resource): "create mig" for vm in self.eztf_config.get(my_resource, []): create_mig(self, vm) def generate_umig(self, my_resource, resource): "create umig" for vm in self.eztf_config.get(my_resource, []): create_umig(self, vm)