Exemple #1
0
    def Run(self, args):
        holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
        client = holder.client
        messages = client.messages

        instance_ref = instance_flags.INSTANCE_ARG.ResolveAsResource(
            args,
            holder.resources,
            scope_lister=instance_flags.GetInstanceZoneScopeLister(client))

        maintenance_policy_ref = util.ParseMaintenancePolicy(
            holder.resources,
            args.resource_maintenance_policies,
            project=instance_ref.project,
            region=util.GetRegionFromZone(instance_ref.zone))

        add_request = messages.ComputeInstancesAddMaintenancePoliciesRequest(
            instance=instance_ref.Name(),
            project=instance_ref.project,
            zone=instance_ref.zone,
            instancesAddMaintenancePoliciesRequest=messages.
            InstancesAddMaintenancePoliciesRequest(
                maintenancePolicies=[maintenance_policy_ref.SelfLink()]))

        return client.MakeRequests([(client.apitools_client.instances,
                                     'AddMaintenancePolicies', add_request)])
Exemple #2
0
    def _CreateRequests(self, args, instance_refs, compute_client,
                        resource_parser, holder):
        # 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.
        source_instance_template = self.GetSourceInstanceTemplate(
            args, resource_parser)
        skip_defaults = source_instance_template is not None

        # This feature is only exposed in alpha/beta
        allow_rsa_encrypted = self.ReleaseTrack() in [
            base.ReleaseTrack.ALPHA, base.ReleaseTrack.BETA
        ]
        csek_keys = csek_utils.CsekKeyStore.FromArgs(args, allow_rsa_encrypted)
        scheduling = instance_utils.GetScheduling(args, compute_client,
                                                  skip_defaults)
        tags = instance_utils.GetTags(args, compute_client)
        labels = instance_utils.GetLabels(args, compute_client)
        metadata = instance_utils.GetMetadata(args, compute_client,
                                              skip_defaults)
        boot_disk_size_gb = instance_utils.GetBootDiskSizeGb(args)

        # Compute the shieldedVMConfig message.
        if self.ReleaseTrack() == base.ReleaseTrack.ALPHA:
            shieldedvm_config_message = self.BuildShieldedVMConfigMessage(
                messages=compute_client.messages, args=args)

        network_interfaces = self._GetNetworkInterfacesWithValidation(
            args, resource_parser, compute_client, holder, instance_refs,
            skip_defaults)

        machine_type_uris = instance_utils.GetMachineTypeUris(
            args, compute_client, holder, instance_refs, skip_defaults)

        create_boot_disk = not instance_utils.UseExistingBootDisk(args.disk
                                                                  or [])
        image_uri = self._GetImageUri(args, compute_client, create_boot_disk,
                                      instance_refs, resource_parser)

        disks_messages = self._GetDiskMessagess(args, skip_defaults,
                                                instance_refs, compute_client,
                                                resource_parser,
                                                create_boot_disk,
                                                boot_disk_size_gb, image_uri,
                                                csek_keys)

        project_to_sa = self._GetProjectToServiceAccountMap(
            args, instance_refs, compute_client, skip_defaults)

        requests = []
        for instance_ref, machine_type_uri, disks in zip(
                instance_refs, machine_type_uris, disks_messages):

            can_ip_forward = instance_utils.GetCanIpForward(
                args, skip_defaults)
            guest_accelerators = instance_utils.GetAccelerators(
                args, compute_client, resource_parser, instance_ref)

            instance = compute_client.messages.Instance(
                canIpForward=can_ip_forward,
                deletionProtection=args.deletion_protection,
                description=args.description,
                disks=disks,
                guestAccelerators=guest_accelerators,
                labels=labels,
                machineType=machine_type_uri,
                metadata=metadata,
                minCpuPlatform=args.min_cpu_platform,
                name=instance_ref.Name(),
                networkInterfaces=network_interfaces,
                serviceAccounts=project_to_sa[instance_ref.project],
                scheduling=scheduling,
                tags=tags)

            if self.ReleaseTrack() in [base.ReleaseTrack.ALPHA]:
                instance.shieldedVmConfig = shieldedvm_config_message

            sole_tenancy_host = self._GetGetSoleTenancyHost(
                args, resource_parser, instance_ref)
            if sole_tenancy_host:
                instance.host = sole_tenancy_host

            resource_maintenance_policies = getattr(
                args, 'resource_maintenance_policies', None)
            if resource_maintenance_policies:
                maintenance_policy_ref = maintenance_util.ParseMaintenancePolicy(
                    resource_parser,
                    args.resource_maintenance_policies,
                    project=instance_ref.project,
                    region=maintenance_util.GetRegionFromZone(
                        instance_ref.zone))
                instance.maintenancePolicies = [
                    maintenance_policy_ref.SelfLink()
                ]

            request = compute_client.messages.ComputeInstancesInsertRequest(
                instance=instance,
                project=instance_ref.project,
                zone=instance_ref.zone)

            if source_instance_template:
                request.sourceInstanceTemplate = source_instance_template

            requests.append(
                (compute_client.apitools_client.instances, 'Insert', request))
        return requests