Exemple #1
0
  def Run(self, args):
    holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
    client = holder.client
    igm_ref = (instance_groups_flags.MULTISCOPE_INSTANCE_GROUP_MANAGER_ARG
               .ResolveAsResource)(
                   args,
                   holder.resources,
                   default_scope=compute_scope.ScopeEnum.ZONE,
                   scope_lister=flags.GetDefaultScopeLister(client))

    if igm_ref.Collection() not in [
        'compute.instanceGroupManagers', 'compute.regionInstanceGroupManagers'
    ]:
      raise ValueError('Unknown reference type {0}'.format(
          igm_ref.Collection()))

    instance_groups_flags.ValidateMigInstanceRedistributionTypeFlag(
        args.GetValue('instance_redistribution_type'), igm_ref)

    igm_resource = managed_instance_groups_utils.GetInstanceGroupManagerOrThrow(
        igm_ref, client)

    update_policy = (managed_instance_groups_utils
                     .ApplyInstanceRedistributionTypeToUpdatePolicy)(
                         client, args.GetValue('instance_redistribution_type'),
                         igm_resource.updatePolicy)

    auto_healing_policies = self._GetValidatedAutohealingPolicies(
        holder, client, args, igm_resource)

    igm_updated_resource = client.messages.InstanceGroupManager(
        updatePolicy=update_policy)
    if auto_healing_policies is not None:
      igm_updated_resource.autoHealingPolicies = auto_healing_policies
    return self._MakePatchRequest(client, igm_ref, igm_updated_resource)
Exemple #2
0
  def _CreateInstanceGroupManager(self, args, group_ref, template_ref, client,
                                  holder):
    """Create parts of Instance Group Manager shared for the track."""
    instance_groups_flags.ValidateManagedInstanceGroupScopeArgs(
        args, holder.resources)
    health_check = managed_instance_groups_utils.GetHealthCheckUri(
        holder.resources, args)
    auto_healing_policies = (
        managed_instance_groups_utils.CreateAutohealingPolicies(
            client.messages, health_check, args.initial_delay))
    managed_instance_groups_utils.ValidateAutohealingPolicies(
        auto_healing_policies)
    instance_groups_flags.ValidateMigInstanceRedistributionTypeFlag(
        args.GetValue('instance_redistribution_type'), group_ref)
    update_policy = (managed_instance_groups_utils
                     .ApplyInstanceRedistributionTypeToUpdatePolicy)(
                         client, args.GetValue('instance_redistribution_type'),
                         None)

    return client.messages.InstanceGroupManager(
        name=group_ref.Name(),
        description=args.description,
        instanceTemplate=template_ref.SelfLink(),
        baseInstanceName=self._GetInstanceGroupManagerBaseInstanceName(
            args.base_instance_name, group_ref),
        targetPools=self._GetInstanceGroupManagerTargetPools(
            args.target_pool, group_ref, holder),
        targetSize=int(args.size),
        autoHealingPolicies=auto_healing_policies,
        distributionPolicy=self._CreateDistributionPolicy(
            args.zones, holder.resources, client.messages),
        updatePolicy=update_policy,
    )
Exemple #3
0
    def Run(self, args):
        holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
        client = holder.client
        igm_ref = (instance_groups_flags.MULTISCOPE_INSTANCE_GROUP_MANAGER_ARG.
                   ResolveAsResource)(
                       args,
                       holder.resources,
                       default_scope=compute_scope.ScopeEnum.ZONE,
                       scope_lister=flags.GetDefaultScopeLister(client))

        if igm_ref.Collection() not in [
                'compute.instanceGroupManagers',
                'compute.regionInstanceGroupManagers'
        ]:
            raise ValueError('Unknown reference type {0}'.format(
                igm_ref.Collection()))

        instance_groups_flags.ValidateMigInstanceRedistributionTypeFlag(
            args.GetValue('instance_redistribution_type'), igm_ref)

        igm_resource = managed_instance_groups_utils.GetInstanceGroupManagerOrThrow(
            igm_ref, client)

        device_names = instance_groups_flags.GetValidatedUpdateStatefulPolicyParams(
            args, igm_resource.statefulPolicy)

        update_policy = (managed_instance_groups_utils.
                         ApplyInstanceRedistributionTypeToUpdatePolicy)(
                             client,
                             args.GetValue('instance_redistribution_type'),
                             igm_resource.updatePolicy)

        if not device_names:
            # TODO(b/70314588): Use Patch instead of manual Update.
            if args.IsSpecified(
                    'stateful_names') and not args.GetValue('stateful_names'):
                igm_resource.reset('statefulPolicy')
            elif igm_resource.statefulPolicy or args.GetValue(
                    'stateful_names'):
                igm_resource.statefulPolicy = self._UpdateStatefulPolicy(
                    client, [])
            igm_resource.updatePolicy = update_policy
            return self._MakeUpdateRequest(client, igm_ref, igm_resource)

        stateful_policy = self._UpdateStatefulPolicy(client, device_names)
        igm_updated_resource = client.messages.InstanceGroupManager(
            statefulPolicy=stateful_policy, updatePolicy=update_policy)

        return self._MakePatchRequest(client, igm_ref, igm_updated_resource)
 def _PatchRedistributionType(self, igm_patch, args, igm_resource, client,
                              holder):
     igm_ref = (instance_groups_flags.MULTISCOPE_INSTANCE_GROUP_MANAGER_ARG.
                ResolveAsResource)(
                    args,
                    holder.resources,
                    default_scope=compute_scope.ScopeEnum.ZONE,
                    scope_lister=flags.GetDefaultScopeLister(client))
     instance_groups_flags.ValidateMigInstanceRedistributionTypeFlag(
         args.GetValue('instance_redistribution_type'), igm_ref)
     igm_patch.updatePolicy = (
         managed_instance_groups_utils.
         ApplyInstanceRedistributionTypeToUpdatePolicy)(
             client, args.GetValue('instance_redistribution_type'),
             igm_resource.updatePolicy)
Exemple #5
0
    def Run(self, args):
        holder = base_classes.ComputeApiHolder(self.ReleaseTrack())
        client = holder.client
        igm_ref = (instance_groups_flags.MULTISCOPE_INSTANCE_GROUP_MANAGER_ARG.
                   ResolveAsResource)(
                       args,
                       holder.resources,
                       default_scope=compute_scope.ScopeEnum.ZONE,
                       scope_lister=flags.GetDefaultScopeLister(client))

        if igm_ref.Collection() not in [
                'compute.instanceGroupManagers',
                'compute.regionInstanceGroupManagers'
        ]:
            raise ValueError('Unknown reference type {0}'.format(
                igm_ref.Collection()))

        instance_groups_flags.ValidateMigInstanceRedistributionTypeFlag(
            args.GetValue('instance_redistribution_type'), igm_ref)

        igm_resource = managed_instance_groups_utils.GetInstanceGroupManagerOrThrow(
            igm_ref, client)
        if self._StatefulnessIntroduced(args):
            managed_instance_groups_utils.ValidateIgmReadyForStatefulness(
                igm_resource, client)

        device_names = instance_groups_flags.ValidateUpdateStatefulPolicyParams(
            args, igm_resource.statefulPolicy)

        update_policy = (managed_instance_groups_utils.
                         ApplyInstanceRedistributionTypeToUpdatePolicy)(
                             client,
                             args.GetValue('instance_redistribution_type'),
                             igm_resource.updatePolicy)

        auto_healing_policies = self._GetValidatedAutohealingPolicies(
            holder, client, args, igm_resource)

        if not self._StatefulArgsSet(args):
            igm_updated_resource = client.messages.InstanceGroupManager(
                updatePolicy=update_policy)
            if auto_healing_policies is not None:
                igm_updated_resource.autoHealingPolicies = auto_healing_policies
            return self._MakePatchRequest(client, igm_ref,
                                          igm_updated_resource)

        if not device_names:
            # TODO(b/70314588): Use Patch instead of manual Update.
            if igm_resource.statefulPolicy:
                igm_resource.statefulPolicy = self._UpdateStatefulPolicy(
                    client, igm_resource.statefulPolicy,
                    args.update_stateful_disk, args.remove_stateful_disks)
            igm_resource.updatePolicy = update_policy
            if auto_healing_policies is not None:
                igm_resource.autoHealingPolicies = auto_healing_policies
            return self._MakeUpdateRequest(client, igm_ref, igm_resource)

        stateful_policy = self._UpdateStatefulPolicy(
            client, igm_resource.statefulPolicy, args.update_stateful_disk,
            args.remove_stateful_disks)
        igm_updated_resource = client.messages.InstanceGroupManager(
            statefulPolicy=stateful_policy, updatePolicy=update_policy)
        if auto_healing_policies is not None:
            igm_updated_resource.autoHealingPolicies = auto_healing_policies

        return self._MakePatchRequest(client, igm_ref, igm_updated_resource)