164 lines
4.7 KiB
Python
164 lines
4.7 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2024 Google LLC. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
"""Flags and helpers for the Audit Manager related commands."""
|
|
|
|
from googlecloudsdk.calliope import arg_parsers
|
|
from googlecloudsdk.calliope.concepts import multitype
|
|
from googlecloudsdk.command_lib.audit_manager import resource_args
|
|
from googlecloudsdk.command_lib.util.concepts import concept_parsers
|
|
from googlecloudsdk.command_lib.util.concepts import presentation_specs
|
|
|
|
|
|
_AUDIT_REPORT_FORMATS = ['odf']
|
|
_AUDIT_SCOPE_REPORT_FORMATS = ['odf']
|
|
|
|
|
|
def GetProjectParam(args):
|
|
return f'--project {args.project}'
|
|
|
|
|
|
def GetFolderParam(args):
|
|
return f'--folder {args.folder}'
|
|
|
|
|
|
def GetProjectOrFolderParam(args):
|
|
if args.folder is None:
|
|
return GetProjectParam(args)
|
|
|
|
return GetFolderParam(args)
|
|
|
|
|
|
def GetLocationParam(args):
|
|
return f'--location {args.location}'
|
|
|
|
|
|
def GetEligibleGcsBucketParam(args):
|
|
return f'--eligible-gcs-buckets "{args.gcs_uri}"'
|
|
|
|
|
|
def GetCommandPrefix(command_path):
|
|
idx = command_path.index('audit-manager') + 1
|
|
return ' '.join(command_path[:idx])
|
|
|
|
|
|
def AddDescribeOperationFlags(parser):
|
|
spec = multitype.MultitypeResourceSpec(
|
|
'operation',
|
|
resource_args.GetOperationResourceSpecByFolder(),
|
|
resource_args.GetOperationResourceSpecByProject(),
|
|
allow_inactive=True,
|
|
)
|
|
concept_parsers.ConceptParser([
|
|
presentation_specs.MultitypeResourcePresentationSpec(
|
|
'operation',
|
|
spec,
|
|
'',
|
|
required=True,
|
|
)
|
|
]).AddToParser(parser)
|
|
|
|
|
|
def AddProjectOrFolderFlags(parser, help_text, required=True):
|
|
group = parser.add_mutually_exclusive_group(required=required)
|
|
group.add_argument('--project', help='Project Id {}'.format(help_text))
|
|
group.add_argument('--folder', help='Folder Id {}'.format(help_text))
|
|
|
|
|
|
def AddProjectOrFolderOrOrganizationFlags(parser, help_text, required=True):
|
|
group = parser.add_mutually_exclusive_group(required=required)
|
|
group.add_argument('--project', help='Project Id {}'.format(help_text))
|
|
group.add_argument('--folder', help='Folder Id {}'.format(help_text))
|
|
group.add_argument(
|
|
'--organization', help='Organization Id {}'.format(help_text)
|
|
)
|
|
|
|
|
|
def AddLocationFlag(parser, help_text, required=True):
|
|
parser.add_argument(
|
|
'--location',
|
|
required=required,
|
|
help='The location where {}.'.format(help_text),
|
|
)
|
|
|
|
|
|
def AddComplianceFrameworkFlag(parser, required=True):
|
|
parser.add_argument(
|
|
'--compliance-framework',
|
|
help=(
|
|
'Compliance Framework against which the Report must be generated.'
|
|
' Eg: FEDRAMP_MODERATE'
|
|
),
|
|
required=required,
|
|
)
|
|
|
|
|
|
def AddReportFormatFlag(parser, required=True):
|
|
parser.add_argument(
|
|
'--report-format',
|
|
required=required,
|
|
choices=_AUDIT_REPORT_FORMATS,
|
|
help='The format in which the audit report should be created.',
|
|
)
|
|
|
|
|
|
def AddScopeReportFormatFlag(parser, required=True):
|
|
parser.add_argument(
|
|
'--report-format',
|
|
required=required,
|
|
choices=_AUDIT_SCOPE_REPORT_FORMATS,
|
|
help='The format in which the audit scope report should be created.',
|
|
)
|
|
|
|
|
|
def AddOutputDirectoryFormatFlag(parser, required=False):
|
|
parser.add_argument(
|
|
'--output-directory',
|
|
required=required,
|
|
help='The directory path where the scope report should be created .',
|
|
)
|
|
|
|
|
|
def AddOutputFileNameFormatFlag(parser, required=True):
|
|
parser.add_argument(
|
|
'--output-file-name',
|
|
required=required,
|
|
help='The name by while scope report should be created .',
|
|
)
|
|
|
|
|
|
def AddDestinationFlags(parser, required=True):
|
|
group = parser.add_mutually_exclusive_group(required=required)
|
|
group.add_argument(
|
|
'--gcs-uri',
|
|
help=(
|
|
'Destination Cloud storage bucket where report and evidence must be'
|
|
' uploaded. The Cloud storage bucket provided here must be selected'
|
|
' among the buckets entered during the enrollment process.'
|
|
),
|
|
)
|
|
|
|
|
|
def AddEligibleDestinationsFlags(parser, required=True):
|
|
group = parser.add_group(required=required)
|
|
group.add_argument(
|
|
'--eligible-gcs-buckets',
|
|
metavar='BUCKET URI',
|
|
type=arg_parsers.ArgList(min_length=1),
|
|
help=(
|
|
'Eligible cloud storage buckets where report and evidence can be'
|
|
' uploaded.'
|
|
),
|
|
)
|