def Run(self, args): self._ValidateArgs(args) holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client source_instance_template = instance_utils.GetSourceInstanceTemplate( args, holder.resources, self.SOURCE_INSTANCE_TEMPLATE) skip_defaults = instance_utils.GetSkipDefaults( source_instance_template) scheduling = instance_utils.GetScheduling(args, client, skip_defaults) service_accounts = instance_utils.GetServiceAccounts( args, client, skip_defaults) user_metadata = instance_utils.GetValidatedMetadata(args, client) boot_disk_size_gb = instance_utils.GetBootDiskSizeGb(args) instance_refs = instance_utils.GetInstanceRefs(args, client, holder) network_interfaces = self.GetNetworkInterfaces(args, holder.resources, client, holder, instance_refs, skip_defaults) machine_type_uris = instance_utils.GetMachineTypeUris( args, client, holder, instance_refs, skip_defaults) image_uri = self.GetImageUri(args, client, holder, instance_refs) labels = containers_utils.GetLabelsMessageWithCosVersion( args.labels, image_uri, holder.resources, client.messages.Instance) can_ip_forward = instance_utils.GetCanIpForward(args, skip_defaults) tags = containers_utils.CreateTagsMessage(client.messages, args.tags) requests = [] for instance_ref, machine_type_uri in zip(instance_refs, machine_type_uris): metadata = containers_utils.CreateKonletMetadataMessage( client.messages, args, instance_ref.Name(), user_metadata) disks = instance_utils.CreateDiskMessages(holder, args, boot_disk_size_gb, image_uri, instance_ref, skip_defaults) request = client.messages.ComputeInstancesInsertRequest( instance=client.messages.Instance( canIpForward=can_ip_forward, disks=disks, description=args.description, labels=labels, machineType=machine_type_uri, metadata=metadata, minCpuPlatform=args.min_cpu_platform, name=instance_ref.Name(), networkInterfaces=network_interfaces, serviceAccounts=service_accounts, scheduling=scheduling, tags=tags), sourceInstanceTemplate=source_instance_template, project=instance_ref.project, zone=instance_ref.zone) requests.append( (client.apitools_client.instances, 'Insert', request)) return client.MakeRequests(requests)
def Run(self, args): """Issues an InstanceTemplates.Insert request. Args: args: the argparse arguments that this command was invoked with. Returns: an InstanceTemplate message object """ self._ValidateBetaArgs(args) instances_flags.ValidateNetworkTierArgs(args) holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client instance_template_ref = self._GetInstanceTemplateRef(args, holder) image_uri = self._GetImageUri(args, client, holder, instance_template_ref) labels = containers_utils.GetLabelsMessageWithCosVersion( None, image_uri, holder.resources, client.messages.InstanceProperties) argument_labels = labels_util.ParseCreateArgs( args, client.messages.InstanceProperties.LabelsValue) if argument_labels: labels.additionalProperties.extend( argument_labels.additionalProperties) metadata = self._GetUserMetadata(args, client, instance_template_ref) network_interface = self._GetNetworkInterface(args, client, holder) scheduling = self._GetScheduling(args, client) service_accounts = self._GetServiceAccounts(args, client) machine_type = self._GetMachineType(args) disks = self._GetDisks(args, client, holder, instance_template_ref, image_uri) request = client.messages.ComputeInstanceTemplatesInsertRequest( instanceTemplate=client.messages.InstanceTemplate( properties=client.messages.InstanceProperties( machineType=machine_type, disks=disks, canIpForward=args.can_ip_forward, labels=labels, metadata=metadata, minCpuPlatform=args.min_cpu_platform, networkInterfaces=[network_interface], serviceAccounts=service_accounts, scheduling=scheduling, tags=containers_utils.CreateTagsMessage( client.messages, args.tags), ), description=args.description, name=instance_template_ref.Name(), ), project=instance_template_ref.project) return client.MakeRequests([(client.apitools_client.instanceTemplates, 'Insert', request)])
def Run(self, args): self._ValidateArgs(args) holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) compute_client = holder.client resource_parser = holder.resources container_mount_disk = instances_flags.GetValidatedContainerMountDisk( holder, args.container_mount_disk, args.disk, args.create_disk) source_instance_template = instance_utils.GetSourceInstanceTemplate( args, resource_parser, self.SOURCE_INSTANCE_TEMPLATE) skip_defaults = instance_utils.GetSkipDefaults( source_instance_template) scheduling = instance_utils.GetScheduling(args, compute_client, skip_defaults, support_min_node_cpu=False) service_accounts = instance_utils.GetServiceAccounts( args, compute_client, skip_defaults) user_metadata = instance_utils.GetValidatedMetadata( args, compute_client) boot_disk_size_gb = instance_utils.GetBootDiskSizeGb(args) instance_refs = instance_utils.GetInstanceRefs(args, compute_client, holder) network_interfaces = self.GetNetworkInterfaces( args, resource_parser, compute_client, holder, instance_refs[0].project, instance_refs[0].zone, compute_scopes.ScopeEnum.ZONE, skip_defaults) image_uri = self.GetImageUri(args, compute_client, resource_parser, instance_refs) labels = containers_utils.GetLabelsMessageWithCosVersion( args.labels, image_uri, resource_parser, compute_client.messages.Instance) can_ip_forward = instance_utils.GetCanIpForward(args, skip_defaults) tags = containers_utils.CreateTagsMessage(compute_client.messages, args.tags) confidential_vm = (args.IsSpecified('confidential_compute') and args.confidential_compute) requests = [] for instance_ref in instance_refs: metadata = containers_utils.CreateKonletMetadataMessage( compute_client.messages, args, instance_ref.Name(), user_metadata, container_mount_disk_enabled=self. _container_mount_disk_enabled, container_mount_disk=container_mount_disk) disks = [] if self.CheckDiskMessageArgs(args, skip_defaults): disks = create_utils.CreateDiskMessages( args=args, instance_name=instance_ref.Name(), project=instance_ref.project, location=instance_ref.zone, scope=compute_scopes.ScopeEnum.ZONE, compute_client=compute_client, resource_parser=resource_parser, boot_disk_size_gb=boot_disk_size_gb, image_uri=image_uri, create_boot_disk=self._support_create_boot_disk, support_nvdimm=self._support_nvdimm, support_match_container_mount_disks=self. _support_match_container_mount_disks) machine_type_uri = None if instance_utils.CheckSpecifiedMachineTypeArgs( args, skip_defaults): machine_type_uri = create_utils.CreateMachineTypeUri( args=args, compute_client=compute_client, resource_parser=resource_parser, project=instance_ref.project, location=instance_ref.zone, scope=compute_scopes.ScopeEnum.ZONE, confidential_vm=confidential_vm) guest_accelerators = create_utils.GetAccelerators( args=args, compute_client=compute_client, resource_parser=resource_parser, project=instance_ref.project, location=instance_ref.zone, scope=compute_scopes.ScopeEnum.ZONE) instance = compute_client.messages.Instance( canIpForward=can_ip_forward, disks=disks, guestAccelerators=guest_accelerators, description=args.description, labels=labels, machineType=machine_type_uri, metadata=metadata, minCpuPlatform=args.min_cpu_platform, name=instance_ref.Name(), networkInterfaces=network_interfaces, serviceAccounts=service_accounts, scheduling=scheduling, tags=tags) if args.private_ipv6_google_access_type is not None: instance.privateIpv6GoogleAccess = ( instances_flags.GetPrivateIpv6GoogleAccessTypeFlagMapper( compute_client.messages).GetEnumForChoice( args.private_ipv6_google_access_type)) confidential_instance_config = ( create_utils.BuildConfidentialInstanceConfigMessage( messages=compute_client.messages, args=args)) if confidential_instance_config: instance.confidentialInstanceConfig = confidential_instance_config has_threads_per_core = (self._support_threads_per_core and args.threads_per_core is not None) if (args.enable_nested_virtualization is not None or has_threads_per_core): threads_per_core = args.threads_per_core if has_threads_per_core else None instance.advancedMachineFeatures = ( instance_utils.CreateAdvancedMachineFeaturesMessage( compute_client.messages, args.enable_nested_virtualization, threads_per_core)) shielded_instance_config = create_utils.BuildShieldedInstanceConfigMessage( messages=compute_client.messages, args=args) if shielded_instance_config: instance.shieldedInstanceConfig = shielded_instance_config if self._support_network_performance_configs and \ args.IsSpecified('network_performance_configs'): instance.networkPerformanceConfig = \ instance_utils.GetNetworkPerformanceConfig(args, compute_client) request = compute_client.messages.ComputeInstancesInsertRequest( instance=instance, sourceInstanceTemplate=source_instance_template, project=instance_ref.project, zone=instance_ref.zone) requests.append( (compute_client.apitools_client.instances, 'Insert', request)) return compute_client.MakeRequests(requests)
def CreateRequests(self, args): instances_flags.ValidateDockerArgs(args) instances_flags.ValidateDiskCommonFlags(args) instances_flags.ValidateLocalSsdFlags(args) if instance_utils.UseExistingBootDisk(args.disk or []): raise exceptions.InvalidArgumentException( '--disk', 'Boot disk specified for containerized VM.') scheduling = instance_utils.CreateSchedulingMessage( messages=self.messages, maintenance_policy=args.maintenance_policy, preemptible=args.preemptible, restart_on_failure=args.restart_on_failure) service_accounts = instance_utils.CreateServiceAccountMessages( messages=self.messages, scopes=([] if args.no_scopes else args.scopes)) user_metadata = metadata_utils.ConstructMetadataMessage( self.messages, metadata=args.metadata, metadata_from_file=args.metadata_from_file) containers_utils.ValidateUserMetadata(user_metadata) boot_disk_size_gb = utils.BytesToGb(args.boot_disk_size) utils.WarnIfDiskSizeIsTooSmall(boot_disk_size_gb, args.boot_disk_type) instance_refs = instances_flags.INSTANCES_ARG.ResolveAsResource( args, self.resources, scope_lister=flags.GetDefaultScopeLister(self.compute_client, self.project)) # Check if the zone is deprecated or has maintenance coming. self.WarnForZonalCreation(instance_refs) network_interface = instance_utils.CreateNetworkInterfaceMessage( resources=self.resources, compute_client=self.compute_client, network=args.network, subnet=args.subnet, private_network_ip=args.private_network_ip, no_address=args.no_address, address=args.address, instance_refs=instance_refs) machine_type_uris = instance_utils.CreateMachineTypeUris( resources=self.resources, compute_client=self.compute_client, project=self.project, machine_type=args.machine_type, custom_cpu=args.custom_cpu, custom_memory=args.custom_memory, instance_refs=instance_refs) image_uri = containers_utils.ExpandGciImageFlag(self.compute_client) requests = [] for instance_ref, machine_type_uri in zip(instance_refs, machine_type_uris): metadata = containers_utils.CreateMetadataMessage( self.messages, args.run_as_privileged, args.container_manifest, args.docker_image, args.port_mappings, args.run_command, user_metadata, instance_ref.Name()) requests.append( self.messages.ComputeInstancesInsertRequest( instance=self.messages.Instance( canIpForward=args.can_ip_forward, disks=(self._CreateDiskMessages( args, boot_disk_size_gb, image_uri, instance_ref)), description=args.description, machineType=machine_type_uri, metadata=metadata, name=instance_ref.Name(), networkInterfaces=[network_interface], serviceAccounts=service_accounts, scheduling=scheduling, tags=containers_utils.CreateTagsMessage( self.messages, args.tags), ), project=self.project, zone=instance_ref.zone)) return requests
def Run(self, args): """Issues an InstanceTemplates.Insert request. Args: args: the argparse arguments that this command was invoked with. Returns: an InstanceTemplate message object """ self._ValidateArgs(args) instances_flags.ValidateNetworkTierArgs(args) holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) container_mount_disk = instances_flags.GetValidatedContainerMountDisk( holder, args.container_mount_disk, args.disk, args.create_disk) client = holder.client instance_template_ref = self._GetInstanceTemplateRef(args, holder) image_uri = self._GetImageUri(args, client, holder, instance_template_ref) labels = containers_utils.GetLabelsMessageWithCosVersion( None, image_uri, holder.resources, client.messages.InstanceProperties) argument_labels = labels_util.ParseCreateArgs( args, client.messages.InstanceProperties.LabelsValue) if argument_labels: labels.additionalProperties.extend(argument_labels.additionalProperties) metadata = self._GetUserMetadata( args, client, instance_template_ref, container_mount_disk_enabled=True, container_mount_disk=container_mount_disk) network_interfaces = self._GetNetworkInterfaces(args, client, holder) scheduling = self._GetScheduling(args, client) service_accounts = self._GetServiceAccounts(args, client) machine_type = self._GetMachineType(args) disks = self._GetDisks( args, client, holder, instance_template_ref, image_uri, match_container_mount_disks=True) guest_accelerators = ( instance_template_utils.CreateAcceleratorConfigMessages( client.messages, getattr(args, 'accelerator', None))) properties = client.messages.InstanceProperties( machineType=machine_type, disks=disks, canIpForward=args.can_ip_forward, labels=labels, metadata=metadata, minCpuPlatform=args.min_cpu_platform, networkInterfaces=network_interfaces, serviceAccounts=service_accounts, scheduling=scheduling, tags=containers_utils.CreateTagsMessage(client.messages, args.tags), guestAccelerators=guest_accelerators) if args.private_ipv6_google_access_type is not None: properties.privateIpv6GoogleAccess = ( instances_flags.GetPrivateIpv6GoogleAccessTypeFlagMapperForTemplate( client.messages).GetEnumForChoice( args.private_ipv6_google_access_type)) request = client.messages.ComputeInstanceTemplatesInsertRequest( instanceTemplate=client.messages.InstanceTemplate( properties=properties, description=args.description, name=instance_template_ref.Name(), ), project=instance_template_ref.project) return client.MakeRequests([(client.apitools_client.instanceTemplates, 'Insert', request)])
def CreateRequests(self, args): """Creates and returns an InstanceTemplates.Insert request. Args: args: the argparse arguments that this command was invoked with. Returns: request: a ComputeInstanceTemplatesInsertRequest message object """ instances_flags.ValidateDockerArgs(args) instances_flags.ValidateDiskCommonFlags(args) instances_flags.ValidateLocalSsdFlags(args) instances_flags.ValidateServiceAccountAndScopeArgs(args) if instance_utils.UseExistingBootDisk(args.disk or []): raise exceptions.InvalidArgumentException( '--disk', 'Boot disk specified for containerized VM.') boot_disk_size_gb = utils.BytesToGb(args.boot_disk_size) utils.WarnIfDiskSizeIsTooSmall(boot_disk_size_gb, args.boot_disk_type) instance_template_ref = ( CreateFromContainer.InstanceTemplateArg.ResolveAsResource( args, self.resources)) user_metadata = metadata_utils.ConstructMetadataMessage( self.messages, metadata=args.metadata, metadata_from_file=args.metadata_from_file) containers_utils.ValidateUserMetadata(user_metadata) network_interface = instance_template_utils.CreateNetworkInterfaceMessage( resources=self.resources, scope_lister=flags.GetDefaultScopeLister(self.compute_client), messages=self.messages, network=args.network, region=args.region, subnet=args.subnet, address=(instance_template_utils.EPHEMERAL_ADDRESS if not args.no_address and not args.address else args.address)) scheduling = instance_utils.CreateSchedulingMessage( messages=self.messages, maintenance_policy=args.maintenance_policy, preemptible=args.preemptible, restart_on_failure=args.restart_on_failure) if args.no_service_account: service_account = None else: service_account = args.service_account service_accounts = instance_utils.CreateServiceAccountMessages( messages=self.messages, scopes=[] if args.no_scopes else args.scopes, service_account=service_account) image_uri = containers_utils.ExpandCosImageFlag(self.compute_client) machine_type = instance_utils.InterpretMachineType( machine_type=args.machine_type, custom_cpu=args.custom_cpu, custom_memory=args.custom_memory, ext=getattr(args, 'custom_extensions', None)) metadata = containers_utils.CreateMetadataMessage( self.messages, args.run_as_privileged, args.container_manifest, args.docker_image, args.port_mappings, args.run_command, user_metadata, instance_template_ref.Name()) request = self.messages.ComputeInstanceTemplatesInsertRequest( instanceTemplate=self.messages.InstanceTemplate( properties=self.messages.InstanceProperties( machineType=machine_type, disks=self._CreateDiskMessages(args, boot_disk_size_gb, image_uri, instance_template_ref.project), canIpForward=args.can_ip_forward, metadata=metadata, minCpuPlatform=args.min_cpu_platform, networkInterfaces=[network_interface], serviceAccounts=service_accounts, scheduling=scheduling, tags=containers_utils.CreateTagsMessage( self.messages, args.tags), ), description=args.description, name=instance_template_ref.Name(), ), project=instance_template_ref.project) return [request]
def Run(self, args): holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client source_instance_template = self.GetSourceInstanceTemplate( args, holder.resources) # gcloud creates default values for some fields in Instance resource # when no value was specified on command line. # When --source-instance-template was specified, defaults are taken from # Instance Template and gcloud flags are used to override them - by default # fields should not be initialized. skip_defaults = source_instance_template is not None instances_flags.ValidateDockerArgs(args) instances_flags.ValidateDiskCommonFlags(args) instances_flags.ValidateLocalSsdFlags(args) instances_flags.ValidateServiceAccountAndScopeArgs(args) if instance_utils.UseExistingBootDisk(args.disk or []): raise exceptions.InvalidArgumentException( '--disk', 'Boot disk specified for containerized VM.') if (skip_defaults and not args.IsSpecified('maintenance_policy') and not args.IsSpecified('preemptible') and not args.IsSpecified('restart_on_failure')): scheduling = None else: scheduling = instance_utils.CreateSchedulingMessage( messages=client.messages, maintenance_policy=args.maintenance_policy, preemptible=args.preemptible, restart_on_failure=args.restart_on_failure) if args.no_service_account: service_account = None else: service_account = args.service_account if (skip_defaults and not args.IsSpecified('scopes') and not args.IsSpecified('no_scopes') and not args.IsSpecified('service_account') and not args.IsSpecified('no_service_account')): service_accounts = [] else: service_accounts = instance_utils.CreateServiceAccountMessages( messages=client.messages, scopes=[] if args.no_scopes else args.scopes, service_account=service_account) user_metadata = metadata_utils.ConstructMetadataMessage( client.messages, metadata=args.metadata, metadata_from_file=args.metadata_from_file) containers_utils.ValidateUserMetadata(user_metadata) boot_disk_size_gb = utils.BytesToGb(args.boot_disk_size) utils.WarnIfDiskSizeIsTooSmall(boot_disk_size_gb, args.boot_disk_type) instance_refs = instances_flags.INSTANCES_ARG.ResolveAsResource( args, holder.resources, scope_lister=flags.GetDefaultScopeLister(client)) # Check if the zone is deprecated or has maintenance coming. zone_resource_fetcher = zone_utils.ZoneResourceFetcher(client) zone_resource_fetcher.WarnForZonalCreation(instance_refs) instances_flags.ValidatePublicDnsFlags(args) if (skip_defaults and not args.IsSpecified('network') and not args.IsSpecified('subnet') and not args.IsSpecified('private_network_ip') and not args.IsSpecified('no_address') and not args.IsSpecified('address') and not args.IsSpecified('network_tier') and not args.IsSpecified('no_public_dns') and not args.IsSpecified('public_dns') and not args.IsSpecified('no_public_ptr') and not args.IsSpecified('public_ptr') and not args.IsSpecified('no_public_ptr_domain') and not args.IsSpecified('public_ptr_domain')): network_interfaces = [] else: network_interfaces = [ instance_utils.CreateNetworkInterfaceMessage( resources=holder.resources, compute_client=client, network=args.network, subnet=args.subnet, private_network_ip=args.private_network_ip, no_address=args.no_address, address=args.address, instance_refs=instance_refs, network_tier=args.network_tier, no_public_dns=getattr(args, 'no_public_dns', None), public_dns=getattr(args, 'public_dns', None), no_public_ptr=getattr(args, 'no_public_ptr', None), public_ptr=getattr(args, 'public_ptr', None), no_public_ptr_domain=getattr(args, 'no_public_ptr_domain', None), public_ptr_domain=getattr(args, 'public_ptr_domain', None)) ] if (skip_defaults and not args.IsSpecified('machine_type') and not args.IsSpecified('custom_cpu') and not args.IsSpecified('custom_memory')): machine_type_uris = [None for _ in instance_refs] else: machine_type_uris = instance_utils.CreateMachineTypeUris( resources=holder.resources, compute_client=client, machine_type=args.machine_type, custom_cpu=args.custom_cpu, custom_memory=args.custom_memory, ext=getattr(args, 'custom_extensions', None), instance_refs=instance_refs) image_uri = containers_utils.ExpandCosImageFlag(client) args_labels = getattr(args, 'labels', None) labels = None if args_labels: labels = client.messages.Instance.LabelsValue( additionalProperties=[ client.messages.Instance.LabelsValue.AdditionalProperty( key=key, value=value) for key, value in sorted(args.labels.iteritems()) ]) if skip_defaults and not args.IsSpecified('can_ip_forward'): can_ip_forward = None else: can_ip_forward = args.can_ip_forward requests = [] for instance_ref, machine_type_uri in zip(instance_refs, machine_type_uris): metadata = containers_utils.CreateMetadataMessage( client.messages, args.run_as_privileged, args.container_manifest, args.docker_image, args.port_mappings, args.run_command, user_metadata, instance_ref.Name()) request = client.messages.ComputeInstancesInsertRequest( instance=client.messages.Instance( canIpForward=can_ip_forward, disks=(self._CreateDiskMessages(holder, args, boot_disk_size_gb, image_uri, instance_ref, skip_defaults)), description=args.description, machineType=machine_type_uri, metadata=metadata, minCpuPlatform=args.min_cpu_platform, name=instance_ref.Name(), networkInterfaces=network_interfaces, serviceAccounts=service_accounts, scheduling=scheduling, tags=containers_utils.CreateTagsMessage( client.messages, args.tags)), project=instance_ref.project, zone=instance_ref.zone) if labels: request.instance.labels = labels if source_instance_template: request.sourceInstanceTemplate = source_instance_template requests.append( (client.apitools_client.instances, 'Insert', request)) return client.MakeRequests(requests)
def Run(self, args): """Issues an InstanceTemplates.Insert request. Args: args: the argparse arguments that this command was invoked with. Returns: an InstanceTemplate message object """ holder = base_classes.ComputeApiHolder(self.ReleaseTrack()) client = holder.client instances_flags.ValidateKonletArgs(args) instances_flags.ValidateDiskCommonFlags(args) instances_flags.ValidateLocalSsdFlags(args) instances_flags.ValidateServiceAccountAndScopeArgs(args) instances_flags.ValidateNetworkTierArgs(args, support_network_tier=True) if instance_utils.UseExistingBootDisk(args.disk or []): raise exceptions.InvalidArgumentException( '--disk', 'Boot disk specified for containerized VM.') boot_disk_size_gb = utils.BytesToGb(args.boot_disk_size) utils.WarnIfDiskSizeIsTooSmall(boot_disk_size_gb, args.boot_disk_type) instance_template_ref = ( CreateWithContainer.InstanceTemplateArg.ResolveAsResource( args, holder.resources)) user_metadata = metadata_utils.ConstructMetadataMessage( client.messages, metadata=args.metadata, metadata_from_file=args.metadata_from_file) containers_utils.ValidateUserMetadata(user_metadata) network_interface = instance_template_utils.CreateNetworkInterfaceMessage( resources=holder.resources, scope_lister=flags.GetDefaultScopeLister(client), messages=client.messages, network=args.network, region=args.region, subnet=args.subnet, address=(instance_template_utils.EPHEMERAL_ADDRESS if not args.no_address and not args.address else args.address), network_tier=getattr(args, 'network_tier', None)) scheduling = instance_utils.CreateSchedulingMessage( messages=client.messages, maintenance_policy=args.maintenance_policy, preemptible=args.preemptible, restart_on_failure=args.restart_on_failure) if args.no_service_account: service_account = None else: service_account = args.service_account service_accounts = instance_utils.CreateServiceAccountMessages( messages=client.messages, scopes=[] if args.no_scopes else args.scopes, service_account=service_account) if (args.IsSpecified('image') or args.IsSpecified('image_family') or args.IsSpecified('image_project')): image_expander = image_utils.ImageExpander(client, holder.resources) image_uri, _ = image_expander.ExpandImageFlag( user_project=instance_template_ref.project, image=args.image, image_family=args.image_family, image_project=args.image_project) if holder.resources.Parse(image_uri).project != 'cos-cloud': log.warn( 'This container deployment mechanism requires a ' 'Container-Optimized OS image in order to work. Select an ' 'image from a cos-cloud project (cost-stable, cos-beta, ' 'cos-dev image families).') else: image_uri = containers_utils.ExpandKonletCosImageFlag(client) machine_type = instance_utils.InterpretMachineType( machine_type=args.machine_type, custom_cpu=args.custom_cpu, custom_memory=args.custom_memory, ext=getattr(args, 'custom_extensions', None)) metadata = containers_utils.CreateKonletMetadataMessage( client.messages, args, instance_template_ref.Name(), user_metadata) request = client.messages.ComputeInstanceTemplatesInsertRequest( instanceTemplate=client.messages.InstanceTemplate( properties=client.messages.InstanceProperties( machineType=machine_type, disks=self._CreateDiskMessages( holder, args, boot_disk_size_gb, image_uri, instance_template_ref.project), canIpForward=args.can_ip_forward, metadata=metadata, minCpuPlatform=args.min_cpu_platform, networkInterfaces=[network_interface], serviceAccounts=service_accounts, scheduling=scheduling, tags=containers_utils.CreateTagsMessage( client.messages, args.tags), ), description=args.description, name=instance_template_ref.Name(), ), project=instance_template_ref.project) return client.MakeRequests([(client.apitools_client.instanceTemplates, 'Insert', request)])
def CreateRequests(self, args): instances_flags.ValidateDockerArgs(args) instances_flags.ValidateDiskCommonFlags(args) instances_flags.ValidateLocalSsdFlags(args) instances_flags.ValidateServiceAccountAndScopeArgs(args) if instance_utils.UseExistingBootDisk(args.disk or []): raise exceptions.InvalidArgumentException( '--disk', 'Boot disk specified for containerized VM.') scheduling = instance_utils.CreateSchedulingMessage( messages=self.messages, maintenance_policy=args.maintenance_policy, preemptible=args.preemptible, restart_on_failure=args.restart_on_failure) if args.no_service_account: service_account = None else: service_account = args.service_account service_accounts = instance_utils.CreateServiceAccountMessages( messages=self.messages, scopes=[] if args.no_scopes else args.scopes, service_account=service_account) user_metadata = metadata_utils.ConstructMetadataMessage( self.messages, metadata=args.metadata, metadata_from_file=args.metadata_from_file) containers_utils.ValidateUserMetadata(user_metadata) boot_disk_size_gb = utils.BytesToGb(args.boot_disk_size) utils.WarnIfDiskSizeIsTooSmall(boot_disk_size_gb, args.boot_disk_type) instance_refs = instances_flags.INSTANCES_ARG.ResolveAsResource( args, self.resources, scope_lister=flags.GetDefaultScopeLister(self.compute_client, self.project)) # Check if the zone is deprecated or has maintenance coming. zone_resource_fetcher = zone_utils.ZoneResourceFetcher( self.compute_client) zone_resource_fetcher.WarnForZonalCreation(instance_refs) instances_flags.ValidatePublicDnsFlags(args) network_interface = instance_utils.CreateNetworkInterfaceMessage( resources=self.resources, compute_client=self.compute_client, network=args.network, subnet=args.subnet, private_network_ip=args.private_network_ip, no_address=args.no_address, address=args.address, instance_refs=instance_refs, network_tier=args.network_tier, no_public_dns=getattr(args, 'no_public_dns', None), public_dns=getattr(args, 'public_dns', None), no_public_ptr=getattr(args, 'no_public_ptr', None), public_ptr=getattr(args, 'public_ptr', None), no_public_ptr_domain=getattr(args, 'no_public_ptr_domain', None), public_ptr_domain=getattr(args, 'public_ptr_domain', None)) machine_type_uris = instance_utils.CreateMachineTypeUris( resources=self.resources, compute_client=self.compute_client, project=self.project, machine_type=args.machine_type, custom_cpu=args.custom_cpu, custom_memory=args.custom_memory, ext=getattr(args, 'custom_extensions', None), instance_refs=instance_refs) image_uri = containers_utils.ExpandCosImageFlag(self.compute_client) args_labels = getattr(args, 'labels', None) labels = None if args_labels: labels = self.messages.Instance.LabelsValue(additionalProperties=[ self.messages.Instance.LabelsValue.AdditionalProperty( key=key, value=value) for key, value in sorted(args.labels.iteritems()) ]) requests = [] for instance_ref, machine_type_uri in zip(instance_refs, machine_type_uris): metadata = containers_utils.CreateMetadataMessage( self.messages, args.run_as_privileged, args.container_manifest, args.docker_image, args.port_mappings, args.run_command, user_metadata, instance_ref.Name()) request = self.messages.ComputeInstancesInsertRequest( instance=self.messages.Instance( canIpForward=args.can_ip_forward, disks=(self._CreateDiskMessages(args, boot_disk_size_gb, image_uri, instance_ref)), description=args.description, machineType=machine_type_uri, metadata=metadata, minCpuPlatform=args.min_cpu_platform, name=instance_ref.Name(), networkInterfaces=[network_interface], serviceAccounts=service_accounts, scheduling=scheduling, tags=containers_utils.CreateTagsMessage( self.messages, args.tags), ), project=self.project, zone=instance_ref.zone) if labels: request.instance.labels = labels requests.append(request) return requests