330 lines
8.7 KiB
Python
330 lines
8.7 KiB
Python
# -*- coding: utf-8 -*- #
|
|
# Copyright 2023 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 for Fault Injection Cloud SDK."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import unicode_literals
|
|
|
|
from googlecloudsdk.calliope import arg_parsers
|
|
from googlecloudsdk.calliope.concepts import concepts
|
|
from googlecloudsdk.calliope.concepts import deps
|
|
from googlecloudsdk.command_lib.util.concepts import concept_parsers
|
|
from googlecloudsdk.command_lib.util.concepts import presentation_specs
|
|
|
|
|
|
def GetFaultResourceSpec(arg_name='fault', help_text=None):
|
|
"""Constructs and returns the Resource specification for Fault."""
|
|
|
|
def FaultAttributeConfig():
|
|
return concepts.ResourceParameterAttributeConfig(
|
|
name=arg_name, help_text=help_text
|
|
)
|
|
|
|
return concepts.ResourceSpec(
|
|
'faultinjectiontesting.projects.locations.faults',
|
|
resource_name='fault',
|
|
faultsId=FaultAttributeConfig(),
|
|
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG,
|
|
locationsId=LocationAttributeConfig(),
|
|
)
|
|
|
|
|
|
def GetFaultResourceArg(
|
|
arg_name='fault', help_text=None, positional=True, required=True
|
|
):
|
|
"""Constructs and returns the Fault Resource Argument."""
|
|
|
|
help_text = help_text or 'Name for the Fault'
|
|
|
|
return concept_parsers.ConceptParser.ForResource(
|
|
'{}{}'.format('' if positional else '--', arg_name),
|
|
GetFaultResourceSpec(),
|
|
help_text,
|
|
required=required,
|
|
)
|
|
|
|
|
|
def GetExperimentResourceSpec(arg_name='experiment', help_text=None):
|
|
"""Constructs and returns the Resource specification for Fault."""
|
|
|
|
def ExperimentAttributeConfig():
|
|
return concepts.ResourceParameterAttributeConfig(
|
|
name=arg_name, help_text=help_text
|
|
)
|
|
|
|
return concepts.ResourceSpec(
|
|
'faultinjectiontesting.projects.locations.experiments',
|
|
resource_name='experiment',
|
|
experimentsId=ExperimentAttributeConfig(),
|
|
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG,
|
|
locationsId=LocationAttributeConfig(),
|
|
)
|
|
|
|
|
|
def GetExperimentResourceArg(
|
|
arg_name='experiment', help_text=None, positional=True, required=True
|
|
):
|
|
"""Constructs and returns the Experiment Resource Argument."""
|
|
|
|
help_text = help_text or 'Name for the Experiment'
|
|
|
|
return concept_parsers.ConceptParser.ForResource(
|
|
'{}{}'.format('' if positional else '--', arg_name),
|
|
GetExperimentResourceSpec(),
|
|
help_text,
|
|
required=required,
|
|
)
|
|
|
|
|
|
def GetJobResourceSpec(arg_name='job', help_text=None):
|
|
"""Constructs and returns the Resource specification for Job."""
|
|
|
|
def JobAttributeConfig():
|
|
return concepts.ResourceParameterAttributeConfig(
|
|
name=arg_name, help_text=help_text
|
|
)
|
|
|
|
return concepts.ResourceSpec(
|
|
'faultinjectiontesting.projects.locations.jobs',
|
|
resource_name='job',
|
|
jobsId=JobAttributeConfig(),
|
|
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG,
|
|
locationsId=LocationAttributeConfig(),
|
|
)
|
|
|
|
|
|
def GetJobResourceArg(
|
|
arg_name='job', help_text=None, positional=True, required=True
|
|
):
|
|
"""Constructs and returns the Job Resource Argument."""
|
|
|
|
help_text = help_text or 'Name of the Job'
|
|
|
|
return concept_parsers.ConceptParser.ForResource(
|
|
'{}{}'.format('' if positional else '--', arg_name),
|
|
GetJobResourceSpec(),
|
|
help_text,
|
|
required=required,
|
|
)
|
|
|
|
|
|
def LocationAttributeConfig():
|
|
return concepts.ResourceParameterAttributeConfig(
|
|
name='location',
|
|
help_text='The Cloud location for the {resource}.',
|
|
fallthroughs=[
|
|
deps.ArgFallthrough('--location'),
|
|
],
|
|
)
|
|
|
|
|
|
def GetLocationResourceSpec():
|
|
return concepts.ResourceSpec(
|
|
'faultinjectiontesting.projects.locations',
|
|
resource_name='location',
|
|
locationsId=LocationAttributeConfig(),
|
|
projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG,
|
|
)
|
|
|
|
|
|
def GetLocationResourceArg(
|
|
arg_name='location',
|
|
help_text=None,
|
|
positional=False,
|
|
required=False,
|
|
):
|
|
"""Constructs and returns the Location Resource Argument."""
|
|
|
|
help_text = help_text or 'Location'
|
|
|
|
return concept_parsers.ConceptParser.ForResource(
|
|
'{}{}'.format('' if positional else '--', arg_name),
|
|
GetLocationResourceSpec(),
|
|
help_text,
|
|
required=required,
|
|
)
|
|
|
|
|
|
def AddDescribeFaultFlags(parser):
|
|
GetFaultResourceArg().AddToParser(parser)
|
|
|
|
|
|
def AddDeleteFaultFlags(parser):
|
|
GetFaultResourceArg().AddToParser(parser)
|
|
|
|
|
|
def AddCreateFaultFlags(parser):
|
|
GetFaultResourceArg().AddToParser(parser)
|
|
parser.add_argument(
|
|
'--file',
|
|
type=arg_parsers.YAMLFileContents(),
|
|
metavar='FILE',
|
|
help='The file containing the fault to be created.',
|
|
required=True,
|
|
)
|
|
|
|
|
|
def AddUpdateFaultFlags(parser):
|
|
GetFaultResourceArg().AddToParser(parser)
|
|
parser.add_argument(
|
|
'--file',
|
|
type=arg_parsers.YAMLFileContents(),
|
|
metavar='FILE',
|
|
help='The file containing the updated fault config.',
|
|
required=True,
|
|
)
|
|
|
|
|
|
def AddListFaultFlags(parser):
|
|
GetLocationResourceArg(required=True).AddToParser(parser)
|
|
parser.add_argument(
|
|
'--service-name',
|
|
type=str,
|
|
help='service name.',
|
|
required=False,
|
|
)
|
|
parser.add_argument(
|
|
'--experiment-name',
|
|
type=str,
|
|
help='experiment name.',
|
|
required=False,
|
|
)
|
|
|
|
|
|
def AddDescribeExperimentFlags(parser):
|
|
GetExperimentResourceArg().AddToParser(parser)
|
|
|
|
|
|
def AddDeleteExperimentFlags(parser):
|
|
GetExperimentResourceArg().AddToParser(parser)
|
|
|
|
|
|
def AddCreateExperimentFlags(parser):
|
|
GetExperimentResourceArg().AddToParser(parser)
|
|
parser.add_argument(
|
|
'--file',
|
|
type=arg_parsers.YAMLFileContents(),
|
|
metavar='FILE',
|
|
help='The file containing the experiment to be created.',
|
|
required=True,
|
|
)
|
|
|
|
|
|
def AddUpdateExperimentFlags(parser):
|
|
GetExperimentResourceArg().AddToParser(parser)
|
|
parser.add_argument(
|
|
'--file',
|
|
type=arg_parsers.YAMLFileContents(),
|
|
metavar='FILE',
|
|
help='The file containing the updated experiment config.',
|
|
required=True,
|
|
)
|
|
|
|
|
|
def AddListExperimentFlags(parser):
|
|
GetLocationResourceArg(required=True).AddToParser(parser)
|
|
parser.add_argument(
|
|
'--sd-service-name',
|
|
type=str,
|
|
help='service name.',
|
|
required=False,
|
|
)
|
|
|
|
|
|
def AddDescribeJobFlags(parser):
|
|
GetJobResourceArg().AddToParser(parser)
|
|
|
|
|
|
def AddListJobFlags(parser):
|
|
"""Add job list Flags."""
|
|
|
|
GetLocationResourceArg(required=True).AddToParser(parser)
|
|
concept_parsers.ConceptParser([
|
|
presentation_specs.ResourcePresentationSpec(
|
|
'--experiment',
|
|
GetExperimentResourceSpec(),
|
|
'The experiment resource.',
|
|
prefixes=True,
|
|
required=False,
|
|
),
|
|
presentation_specs.ResourcePresentationSpec(
|
|
'--fault',
|
|
GetFaultResourceSpec(),
|
|
'The fault resource.',
|
|
prefixes=True,
|
|
required=False,
|
|
),
|
|
]).AddToParser(parser)
|
|
parser.add_argument(
|
|
'--target-name',
|
|
type=str,
|
|
help='target name.',
|
|
required=False,
|
|
)
|
|
parser.add_argument(
|
|
'--days',
|
|
type=int,
|
|
help='Days.',
|
|
required=False,
|
|
)
|
|
|
|
|
|
def AddCreateJobFlags(parser):
|
|
"""Add job Create Flags."""
|
|
|
|
concept_parsers.ConceptParser(
|
|
[
|
|
presentation_specs.ResourcePresentationSpec(
|
|
'JOB',
|
|
GetJobResourceSpec(),
|
|
'The Job resource.',
|
|
flag_name_overrides={'location': '--location'},
|
|
prefixes=True,
|
|
required=True,
|
|
),
|
|
presentation_specs.ResourcePresentationSpec(
|
|
'--experiment',
|
|
GetExperimentResourceSpec(),
|
|
'The experiment resource.',
|
|
# This hides the location flag for experiment resource.
|
|
flag_name_overrides={
|
|
'location': '',
|
|
'project': '',
|
|
},
|
|
prefixes=True,
|
|
required=True,
|
|
),
|
|
],
|
|
).AddToParser(parser)
|
|
parser.add_argument(
|
|
'--fault-targets',
|
|
type=arg_parsers.ArgList(),
|
|
metavar='LIST',
|
|
help='targets for the faults in experiment. Provide them in sequence',
|
|
required=True,
|
|
)
|
|
parser.add_argument(
|
|
'--dry-run',
|
|
action='store_true',
|
|
default=False,
|
|
help='Dry run mode.',
|
|
|
|
)
|
|
|
|
|
|
def AddDeleteJobFlags(parser):
|
|
GetJobResourceArg().AddToParser(parser)
|