def Run(self, args):
        """See base class."""

        release_track = self.ReleaseTrack()
        client = osconfig_api_utils.GetClientInstance(
            release_track, api_version_override='v1beta')
        messages = osconfig_api_utils.GetClientMessages(
            release_track, api_version_override='v1beta')
        ops_agents_policy = agent_policy.CreateOpsAgentPolicy(
            args.description, args.agent_rules, args.group_labels,
            args.os_types, args.zones, args.instances)
        validator.ValidateOpsAgentsPolicy(ops_agents_policy)
        guest_policy = to_guest_policy.ConvertOpsAgentPolicyToGuestPolicy(
            messages, ops_agents_policy)
        project = properties.VALUES.core.project.GetOrFail()
        parent_path = osconfig_command_utils.GetProjectUriPath(project)
        request = messages.OsconfigProjectsGuestPoliciesCreateRequest(
            guestPolicy=guest_policy,
            guestPolicyId=args.POLICY_ID,
            parent=parent_path,
        )
        service = client.projects_guestPolicies
        complete_guest_policy = service.Create(request)
        ops_agents_policy = to_ops_agents.ConvertGuestPolicyToOpsAgentPolicy(
            complete_guest_policy)
        return ops_agents_policy
Example #2
0
  def Run(self, args):
    release_track = self.ReleaseTrack()
    client = osconfig_api_utils.GetClientInstance(release_track)
    messages = osconfig_api_utils.GetClientMessages(release_track)

    if args.organization:
      request = messages.OsconfigOrganizationsGuestPoliciesListRequest(
          pageSize=args.page_size,
          parent=osconfig_command_utils.GetOrganizationUriPath(
              args.organization),
      )
      service = client.organizations_guestPolicies
    elif args.folder:
      request = messages.OsconfigFoldersGuestPoliciesListRequest(
          pageSize=args.page_size,
          parent=osconfig_command_utils.GetFolderUriPath(args.folder),
      )
      service = client.folders_guestPolicies
    else:
      project = properties.VALUES.core.project.GetOrFail()
      request = messages.OsconfigProjectsGuestPoliciesListRequest(
          pageSize=args.page_size,
          parent=osconfig_command_utils.GetProjectUriPath(project),
      )
      service = client.projects_guestPolicies

    return list_pager.YieldFromList(
        service,
        request,
        limit=args.limit,
        batch_size=args.page_size,
        field='guestPolicies',
        batch_size_attribute='pageSize',
    )
Example #3
0
def _CreateExecuteRequestAlpha(messages, project, description, dry_run,
                               duration, patch_config, patch_rollout,
                               display_name, filter_all, filter_group_labels,
                               filter_zones, filter_names, filter_name_prefixes,
                               filter_expression):
  """Creates an ExecuteRequest message for the Alpha track."""
  if filter_expression:
    return messages.OsconfigProjectsPatchJobsExecuteRequest(
        executePatchJobRequest=messages.ExecutePatchJobRequest(
            description=description,
            displayName=display_name,
            dryRun=dry_run,
            duration=duration,
            filter=filter_expression,
            patchConfig=patch_config,
            rollout=patch_rollout,
        ),
        parent=osconfig_command_utils.GetProjectUriPath(project))
  elif not any([
      filter_all, filter_group_labels, filter_zones, filter_names,
      filter_name_prefixes
  ]):
    return messages.OsconfigProjectsPatchJobsExecuteRequest(
        executePatchJobRequest=messages.ExecutePatchJobRequest(
            description=description,
            displayName=display_name,
            dryRun=dry_run,
            duration=duration,
            instanceFilter=messages.PatchInstanceFilter(all=True),
            patchConfig=patch_config,
            rollout=patch_rollout,
        ),
        parent=osconfig_command_utils.GetProjectUriPath(project))
  else:
    return _CreateExecuteRequest(messages, project, description, dry_run,
                                 duration, patch_config, patch_rollout,
                                 display_name, filter_all, filter_group_labels,
                                 filter_zones, filter_names,
                                 filter_name_prefixes)
Example #4
0
def _CreateExecuteRequest(messages, project, description, dry_run, duration,
                          patch_config, patch_rollout, display_name, filter_all,
                          filter_group_labels, filter_zones, filter_names,
                          filter_name_prefixes):
  """Creates an ExecuteRequest message for the Beta track."""
  patch_instance_filter = _CreatePatchInstanceFilter(
      messages,
      filter_all,
      filter_group_labels,
      filter_zones,
      filter_names,
      filter_name_prefixes,
  )

  if patch_rollout:
    return messages.OsconfigProjectsPatchJobsExecuteRequest(
        executePatchJobRequest=messages.ExecutePatchJobRequest(
            description=description,
            displayName=display_name,
            dryRun=dry_run,
            duration=duration,
            instanceFilter=patch_instance_filter,
            patchConfig=patch_config,
            rollout=patch_rollout,
        ),
        parent=osconfig_command_utils.GetProjectUriPath(project))
  else:
    return messages.OsconfigProjectsPatchJobsExecuteRequest(
        executePatchJobRequest=messages.ExecutePatchJobRequest(
            description=description,
            displayName=display_name,
            dryRun=dry_run,
            duration=duration,
            instanceFilter=patch_instance_filter,
            patchConfig=patch_config,
        ),
        parent=osconfig_command_utils.GetProjectUriPath(project))
Example #5
0
    def Run(self, args):
        release_track = self.ReleaseTrack()
        client = osconfig_api_utils.GetClientInstance(release_track)
        messages = osconfig_api_utils.GetClientMessages(release_track)

        (patch_deployment,
         _) = osconfig_command_utils.GetResourceAndUpdateFieldsFromFile(
             args.file, messages.PatchDeployment)

        project = properties.VALUES.core.project.GetOrFail()
        parent_path = osconfig_command_utils.GetProjectUriPath(project)
        request = messages.OsconfigProjectsPatchDeploymentsCreateRequest(
            patchDeployment=patch_deployment,
            patchDeploymentId=args.PATCH_DEPLOYMENT_ID,
            parent=parent_path,
        )

        return client.projects_patchDeployments.Create(request)
Example #6
0
  def Run(self, args):
    """See base class."""
    release_track = self.ReleaseTrack()
    client = osconfig_api_utils.GetClientInstance(
        release_track, api_version_override='v1beta')
    messages = osconfig_api_utils.GetClientMessages(
        release_track, api_version_override='v1beta')

    project = properties.VALUES.core.project.GetOrFail()
    request = messages.OsconfigProjectsGuestPoliciesListRequest(
        pageSize=args.page_size,
        parent=osconfig_command_utils.GetProjectUriPath(project),
    )
    service = client.projects_guestPolicies

    for guest_policy in list_pager.YieldFromList(
        service,
        request,
        limit=args.limit,
        predicate=guest_policy_validator.IsOpsAgentPolicy,
        batch_size=osconfig_command_utils.GetListBatchSize(args),
        field='guestPolicies',
        batch_size_attribute='pageSize',
    ):
      try:
        yield converter.ConvertGuestPolicyToOpsAgentPolicy(guest_policy)
      except exceptions.BadArgumentException:
        log.warning(
            'Encountered a malformed policy. The Ops Agents policy [%s] may '
            'have been modified directly by the OS Config guest policy API / '
            'gcloud commands. If so, please delete and re-create with the Ops '
            'Agents policy gcloud commands. If not, this may be an internal '
            'error.',
            guest_policy.name,
        )
        yield agent_policy.OpsAgentPolicy(
            assignment=None,
            agent_rules=None,
            description='<MALFORMED>',
            etag=None,
            name=guest_policy.name,
            update_time=guest_policy.updateTime,
            create_time=guest_policy.createTime
        )
Example #7
0
  def Run(self, args):
    project = properties.VALUES.core.project.GetOrFail()

    release_track = self.ReleaseTrack()
    client = osconfig_api_utils.GetClientInstance(release_track)
    messages = osconfig_api_utils.GetClientMessages(release_track)

    request = messages.OsconfigProjectsPatchJobsListRequest(
        pageSize=args.page_size,
        parent=osconfig_command_utils.GetProjectUriPath(project))

    return list_pager.YieldFromList(
        client.projects_patchJobs,
        request,
        limit=args.limit,
        batch_size=args.page_size,
        field='patchJobs',
        batch_size_attribute='pageSize',
    )
Example #8
0
  def Run(self, args):
    """See base class."""

    release_track = self.ReleaseTrack()
    client = osconfig_api_utils.GetClientInstance(release_track)
    messages = osconfig_api_utils.GetClientMessages(release_track)

    (guest_policy,
     _) = osconfig_command_utils.GetResourceAndUpdateFieldsFromFile(
         args.file, messages.GuestPolicy)

    project = properties.VALUES.core.project.GetOrFail()
    parent_path = osconfig_command_utils.GetProjectUriPath(project)
    request = messages.OsconfigProjectsGuestPoliciesCreateRequest(
        guestPolicy=guest_policy,
        guestPolicyId=args.POLICY_ID,
        parent=parent_path,
    )
    service = client.projects_guestPolicies

    return service.Create(request)
Example #9
0
    def Run(self, args):
        """See base class."""
        release_track = self.ReleaseTrack()
        client = osconfig_api_utils.GetClientInstance(release_track)
        messages = osconfig_api_utils.GetClientMessages(release_track)

        project = properties.VALUES.core.project.GetOrFail()
        request = messages.OsconfigProjectsGuestPoliciesListRequest(
            pageSize=args.page_size,
            parent=osconfig_command_utils.GetProjectUriPath(project),
        )
        service = client.projects_guestPolicies

        return list_pager.YieldFromList(
            service,
            request,
            limit=args.limit,
            batch_size=osconfig_command_utils.GetListBatchSize(args),
            field='guestPolicies',
            batch_size_attribute='pageSize',
        )
Example #10
0
  def Run(self, args):
    release_track = self.ReleaseTrack()
    client = osconfig_api_utils.GetClientInstance(release_track)
    messages = osconfig_api_utils.GetClientMessages(release_track)

    (guest_policy,
     _) = osconfig_command_utils.GetResourceAndUpdateFieldsFromFile(
         args.file, messages.GuestPolicy)

    if args.organization:
      parent_path = osconfig_command_utils.GetOrganizationUriPath(
          args.organization)
      request = messages.OsconfigOrganizationsGuestPoliciesCreateRequest(
          guestPolicy=guest_policy,
          guestPolicyId=args.POLICY_ID,
          parent=parent_path,
      )
      service = client.organizations_guestPolicies
    elif args.folder:
      parent_path = osconfig_command_utils.GetFolderUriPath(args.folder)
      request = messages.OsconfigFoldersGuestPoliciesCreateRequest(
          guestPolicy=guest_policy,
          guestPolicyId=args.POLICY_ID,
          parent=parent_path,
      )
      service = client.folders_guestPolicies
    else:
      project = properties.VALUES.core.project.GetOrFail()
      parent_path = osconfig_command_utils.GetProjectUriPath(project)
      request = messages.OsconfigProjectsGuestPoliciesCreateRequest(
          guestPolicy=guest_policy,
          guestPolicyId=args.POLICY_ID,
          parent=parent_path,
      )
      service = client.projects_guestPolicies

    return service.Create(request)
  def Run(self, args):
    project = properties.VALUES.core.project.GetOrFail()

    release_track = self.ReleaseTrack()
    client = osconfig_api_utils.GetClientInstance(release_track)
    messages = osconfig_api_utils.GetClientMessages(release_track)

    duration = six.text_type(args.duration) + 's' if args.duration else None
    filter_arg = 'id=*' if not args.instance_filter else args.instance_filter
    reboot_config = getattr(
        messages.PatchConfig.RebootConfigValueValuesEnum,
        args.reboot_config.upper()) if args.reboot_config else None
    retry_strategy = messages.RetryStrategy(
        enabled=True) if args.retry else None
    patch_config = messages.PatchConfig(
        rebootConfig=reboot_config,
        retryStrategy=retry_strategy,
        apt=_GetAptSettings(args, messages),
        windowsUpdate=_GetWindowsUpdateSettings(args, messages),
        yum=_GetYumSettings(args, messages),
        zypper=_GetZypperSettings(args, messages),
        preStep=_GetPrePostPatchStepSettings(
            args, messages, is_pre_patch_step=True),
        postStep=_GetPrePostPatchStepSettings(
            args, messages, is_pre_patch_step=False),
    )

    request = messages.OsconfigProjectsPatchJobsExecuteRequest(
        executePatchJobRequest=messages.ExecutePatchJobRequest(
            description=args.description,
            dryRun=args.dry_run,
            duration=duration,
            filter=filter_arg,
            patchConfig=patch_config,
        ),
        parent=osconfig_command_utils.GetProjectUriPath(project))
    async_response = client.projects_patchJobs.Execute(request)

    patch_job_name = osconfig_command_utils.GetPatchJobName(async_response.name)

    if args.async_:
      log.status.Print(
          'Execution in progress for patch job [{}]'.format(patch_job_name))
      log.status.Print(
          'Run the [{} describe] command to check the status of this execution.'
          .format(self._command_prefix))
      return async_response

    # Execute the patch job synchronously.
    patch_job_poller = osconfig_api_utils.Poller(client, messages)
    get_request = messages.OsconfigProjectsPatchJobsGetRequest(
        name=async_response.name)
    sync_response = waiter.WaitFor(
        patch_job_poller,
        get_request,
        custom_tracker=_GetProgressTracker(patch_job_name),
        tracker_update_func=_UpdateProgressTracker,
        pre_start_sleep_ms=5000,
        exponential_sleep_multiplier=1,  # Constant poll rate of 5s.
        sleep_ms=5000,
    )
    log.status.Print(
        'Execution for patch job [{}] has completed with status [{}].'.format(
            patch_job_name, sync_response.state))
    log.status.Print('Run the [{} list-instance-details] command to view any '
                     'instance failure reasons.'.format(self._command_prefix))
    return sync_response