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)
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, )
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)
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)