Ejemplo n.º 1
0
    def Run(self, args):
        release_track = self.ReleaseTrack()

        holder = base_classes.ComputeApiHolder(release_track)
        instance_ref = self._GetInstanceRef(holder, args)

        guest_attributes = self._GetGuestInventoryGuestAttributes(
            holder, instance_ref)
        os_info = self._GetOsInfo(guest_attributes)
        os_architecture = os_info.get(self._OS_ARCHITECTURE_KEY)
        os_shortname = os_info.get(self._OS_SHORTNAME_KEY)
        os_version = os_info.get(self._OS_VERSION_KEY)

        client = osconfig_utils.GetClientInstance(release_track)
        messages = osconfig_utils.GetClientMessages(release_track)

        request = messages.OsconfigProjectsZonesInstancesLookupGuestPoliciesRequest(
            instance=instance_ref.RelativeName(),
            lookupEffectiveGuestPoliciesRequest=messages.
            LookupEffectiveGuestPoliciesRequest(osArchitecture=os_architecture,
                                                osShortName=os_shortname,
                                                osVersion=os_version))
        service = client.projects_zones_instances

        response = service.LookupGuestPolicies(request)

        # TODO(b/135553671): add Software Recipes to this check
        if not response.packages and not response.packageRepositories:
            log.status.Print(
                'No effective guest policy found for [{}].'.format(
                    instance_ref.RelativeName()))
        return response
Ejemplo n.º 2
0
  def Run(self, args):
    release_track = self.ReleaseTrack()
    client = osconfig_utils.GetClientInstance(release_track)
    messages = osconfig_utils.GetClientMessages(release_track)

    guest_policy_name = ''
    if args.organization:
      guest_policy_name = osconfig_utils.GetGuestPolicyUriPath(
          'organizations', args.organization, args.POLICY_ID)
      request = messages.OsconfigOrganizationsGuestPoliciesDeleteRequest(
          name=guest_policy_name)
      service = client.organizations_guestPolicies
    elif args.folder:
      guest_policy_name = osconfig_utils.GetGuestPolicyUriPath(
          'folders', args.folder, args.POLICY_ID)
      request = messages.OsconfigFoldersGuestPoliciesDeleteRequest(
          name=guest_policy_name)
      service = client.folders_guestPolicies
    else:
      project = properties.VALUES.core.project.GetOrFail()
      guest_policy_name = osconfig_utils.GetGuestPolicyUriPath(
          'projects', project, args.POLICY_ID)
      request = messages.OsconfigProjectsGuestPoliciesDeleteRequest(
          name=guest_policy_name)
      service = client.projects_guestPolicies

    response = service.Delete(request)
    log.DeletedResource(guest_policy_name)
    return response
Ejemplo n.º 3
0
    def Run(self, args):
        release_track = self.ReleaseTrack()
        client = osconfig_utils.GetClientInstance(release_track)
        messages = osconfig_utils.GetClientMessages(release_track)

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

        if args.organization:
            parent_path = osconfig_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_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_utils.GetProjectUriPath(project)
            request = messages.OsconfigProjectsGuestPoliciesCreateRequest(
                guestPolicy=guest_policy,
                guestPolicyId=args.POLICY_ID,
                parent=parent_path)
            service = client.projects_guestPolicies

        return service.Create(request)
Ejemplo n.º 4
0
    def Run(self, args):
        guest_policy_ref = args.CONCEPTS.guest_policy.Parse()

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

        guest_policy_type = guest_policy_ref.type_
        guest_policy_name = guest_policy_ref.result.RelativeName()

        if guest_policy_type == type(
                guest_policy_type).organization_guest_policy:
            request = messages.OsconfigOrganizationsGuestPoliciesDeleteRequest(
                name=guest_policy_name)
            service = client.organizations_guestPolicies
        elif guest_policy_type == type(guest_policy_type).folder_guest_policy:
            request = messages.OsconfigFoldersGuestPoliciesDeleteRequest(
                name=guest_policy_name)
            service = client.folders_guestPolicies
        else:
            request = messages.OsconfigProjectsGuestPoliciesDeleteRequest(
                name=guest_policy_name)
            service = client.projects_guestPolicies

        response = service.Delete(request)
        log.DeletedResource(guest_policy_name)
        return response
Ejemplo n.º 5
0
    def Run(self, args):
        release_track = self.ReleaseTrack()
        client = osconfig_utils.GetClientInstance(release_track)
        messages = osconfig_utils.GetClientMessages(release_track)

        if args.organization:
            request = messages.OsconfigOrganizationsGuestPoliciesListRequest(
                pageSize=args.page_size,
                parent=osconfig_utils.GetOrganizationUriPath(
                    args.organization))
            service = client.organizations_guestPolicies
        elif args.folder:
            request = messages.OsconfigFoldersGuestPoliciesListRequest(
                pageSize=args.page_size,
                parent=osconfig_utils.GetFolderUriPath(args.folder))
            service = client.folders_guestPolicies
        else:
            project = properties.VALUES.core.project.GetOrFail()
            request = messages.OsconfigProjectsGuestPoliciesListRequest(
                pageSize=args.page_size,
                parent=osconfig_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')
Ejemplo n.º 6
0
    def Run(self, args):
        project = properties.VALUES.core.project.GetOrFail()
        patch_job_ref = args.CONCEPTS.patch_job.Parse()

        release_track = self.ReleaseTrack()
        # TODO(b/133780270): Migrate to v1alpha2.
        api_version = 'v1alpha1'
        client = osconfig_utils.GetClientInstance(
            release_track, api_version_override=api_version)
        messages = osconfig_utils.GetClientMessages(
            release_track, api_version_override=api_version)

        request = messages.OsconfigProjectsPatchJobsInstanceDetailsListRequest(
            pageSize=args.page_size,
            parent=osconfig_utils.GetPatchJobUriPath(project,
                                                     patch_job_ref.Name()))

        results = list(
            list_pager.YieldFromList(client.projects_patchJobs_instanceDetails,
                                     request,
                                     limit=args.limit,
                                     batch_size=args.page_size,
                                     field='patchJobInstanceDetails',
                                     batch_size_attribute='pageSize'))

        return _PostProcessListResult(results)
    def Run(self, args):
        project = properties.VALUES.core.project.GetOrFail()
        patch_job_ref = args.CONCEPTS.patch_job.Parse()

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

        request = messages.OsconfigProjectsPatchJobsGetRequest(
            name=osconfig_utils.GetPatchJobUriPath(project,
                                                   patch_job_ref.Name()))
        return client.projects_patchJobs.Get(request)
Ejemplo n.º 8
0
  def Run(self, args):
    project = properties.VALUES.core.project.GetOrFail()
    patch_job_ref = args.CONCEPTS.patch_job.Parse()

    release_track = self.ReleaseTrack()
    # TODO(b/133780270): Migrate to v1alpha2.
    api_version = 'v1alpha1'
    client = osconfig_utils.GetClientInstance(
        release_track, api_version_override=api_version)
    messages = osconfig_utils.GetClientMessages(
        release_track, api_version_override=api_version)

    request = messages.OsconfigProjectsPatchJobsGetRequest(
        name=osconfig_utils.GetPatchJobUriPath(project, patch_job_ref.Name()))
    return client.projects_patchJobs.Get(request)
Ejemplo n.º 9
0
    def Run(self, args):
        guest_policy_ref = args.CONCEPTS.guest_policy.Parse()
        guest_policy_type = guest_policy_ref.type_
        guest_policy_name = guest_policy_ref.result.RelativeName()

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

        update_fields = []
        if args.file:
            (guest_policy, update_fields
             ) = osconfig_utils.GetResourceAndUpdateFieldsFromFile(
                 args.file, messages.GuestPolicy)
        else:
            guest_policy = messages.GuestPolicy()

        if args.description:
            guest_policy.description = args.description
            update_fields.append('description')
        if args.etag:
            guest_policy.etag = args.etag
            update_fields.append('etag')
        update_mask = ','.join(sorted(list(set(update_fields))))

        if args.organization or guest_policy_type == type(
                guest_policy_type).organization_guest_policy:
            request = messages.OsconfigOrganizationsGuestPoliciesPatchRequest(
                guestPolicy=guest_policy,
                name=guest_policy_name,
                updateMask=update_mask)
            service = client.organizations_guestPolicies
        elif args.folder or guest_policy_type == type(
                guest_policy_type).folder_guest_policy:
            request = messages.OsconfigFoldersGuestPoliciesPatchRequest(
                guestPolicy=guest_policy,
                name=guest_policy_name,
                updateMask=update_mask)
            service = client.folders_guestPolicies
        else:
            request = messages.OsconfigProjectsGuestPoliciesPatchRequest(
                guestPolicy=guest_policy,
                name=guest_policy_name,
                updateMask=update_mask)
            service = client.projects_guestPolicies

        return service.Patch(request)
Ejemplo n.º 10
0
    def Run(self, args):
        project = properties.VALUES.core.project.GetOrFail()

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

        request = messages.OsconfigProjectsPatchJobsListRequest(
            pageSize=args.page_size,
            parent=osconfig_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')
Ejemplo n.º 11
0
  def Run(self, args):
    release_track = self.ReleaseTrack()
    client = osconfig_utils.GetClientInstance(release_track)
    messages = osconfig_utils.GetClientMessages(release_track)

    update_fields = []
    if args.file:
      (guest_policy,
       update_fields) = osconfig_utils.GetResourceAndUpdateFieldsFromFile(
           args.file, messages.GuestPolicy)
    else:
      guest_policy = messages.GuestPolicy()

    if args.description:
      guest_policy.description = args.description
      update_fields.append('description')
    if args.etag:
      guest_policy.etag = args.etag
      update_fields.append('etag')
    update_mask = ','.join(sorted(list(set(update_fields))))

    if args.organization:
      request = messages.OsconfigOrganizationsGuestPoliciesPatchRequest(
          guestPolicy=guest_policy,
          name=osconfig_utils.GetGuestPolicyUriPath('organizations',
                                                    args.organization,
                                                    args.POLICY_ID),
          updateMask=update_mask)
      service = client.organizations_guestPolicies
    elif args.folder:
      request = messages.OsconfigFoldersGuestPoliciesPatchRequest(
          guestPolicy=guest_policy,
          name=osconfig_utils.GetGuestPolicyUriPath('folders', args.folder,
                                                    args.POLICY_ID),
          updateMask=update_mask)
      service = client.folders_guestPolicies
    else:
      project = properties.VALUES.core.project.GetOrFail()
      request = messages.OsconfigProjectsGuestPoliciesPatchRequest(
          guestPolicy=guest_policy,
          name=osconfig_utils.GetGuestPolicyUriPath('projects', project,
                                                    args.POLICY_ID),
          updateMask=update_mask)
      service = client.projects_guestPolicies

    return service.Patch(request)
Ejemplo n.º 12
0
    def Run(self, args):
        project = properties.VALUES.core.project.GetOrFail()

        release_track = self.ReleaseTrack()
        # TODO(b/133780270): Migrate to v1alpha2.
        api_version = 'v1alpha1'
        client = osconfig_utils.GetClientInstance(
            release_track, api_version_override=api_version)
        messages = osconfig_utils.GetClientMessages(
            release_track, api_version_override=api_version)

        request = messages.OsconfigProjectsPatchJobsListRequest(
            pageSize=args.page_size,
            parent=osconfig_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')
Ejemplo n.º 13
0
    def Run(self, args):
        release_track = self.ReleaseTrack()
        client = osconfig_utils.GetClientInstance(release_track)
        messages = osconfig_utils.GetClientMessages(release_track)

        if args.organization:
            request = messages.OsconfigOrganizationsGuestPoliciesGetRequest(
                name=osconfig_utils.GetGuestPolicyUriPath(
                    'organizations', args.organization, args.POLICY_ID))
            service = client.organizations_guestPolicies
        elif args.folder:
            request = messages.OsconfigFoldersGuestPoliciesGetRequest(
                name=osconfig_utils.GetGuestPolicyUriPath(
                    'folders', args.folder, args.POLICY_ID))
            service = client.folders_guestPolicies
        else:
            project = properties.VALUES.core.project.GetOrFail()
            request = messages.OsconfigProjectsGuestPoliciesGetRequest(
                name=osconfig_utils.GetGuestPolicyUriPath(
                    'projects', project, args.POLICY_ID))
            service = client.projects_guestPolicies

        return service.Get(request)
Ejemplo n.º 14
0
    def Run(self, args):
        project = properties.VALUES.core.project.GetOrFail()

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

        duration = str(args.duration) + 's' if args.duration else None
        filter_arg = 'id=*' if not args.instance_filter else args.instance_filter
        apt_settings = messages.AptSettings(
            type=messages.AptSettings.TypeValueValuesEnum.DIST
        ) if args.apt_dist else None
        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(
            apt=apt_settings,
            rebootConfig=reboot_config,
            retryStrategy=retry_strategy,
            windowsUpdate=_GetWindowsUpdateSettings(args, messages),
            yum=_GetYumSettings(args, messages))

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

        patch_job_name = osconfig_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_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