def _ValidateArgs(self, args): instances_flags.ValidateKonletArgs(args) instances_flags.ValidateDiskCommonFlags(args) instances_flags.ValidateServiceAccountAndScopeArgs(args) if instance_utils.UseExistingBootDisk(args.disk or []): raise exceptions.InvalidArgumentException( '--disk', 'Boot disk specified for containerized VM.')
def _ValidateArgs(self, args): self._ValidateTrackSpecificArgs(args) instances_flags.ValidateAcceleratorArgs(args) instances_flags.ValidateNicFlags(args) instances_flags.ValidateNetworkTierArgs(args) instances_flags.ValidateKonletArgs(args) instances_flags.ValidateDiskCommonFlags(args) instances_flags.ValidateServiceAccountAndScopeArgs(args) instances_flags.ValidatePublicPtrFlags(args) if instance_utils.UseExistingBootDisk(args.disk or []): raise exceptions.InvalidArgumentException( '--disk', 'Boot disk specified for containerized VM.')
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)])