# -*- coding: utf-8 -*- # # Copyright 2022 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. """Shared resource arguments for Cloud Batch commands.""" from __future__ import absolute_import from __future__ import division from __future__ import unicode_literals 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 from googlecloudsdk.core import properties INVALIDID = '!@#$%^' def LocationAttributeConfig(): fts = [deps.PropertyFallthrough(properties.VALUES.batch.location)] return concepts.ResourceParameterAttributeConfig( name='location', help_text='Google Cloud location for the {resource}.', fallthroughs=fts) def JobAttributeConfig(): return concepts.ResourceParameterAttributeConfig( name='job', help_text='The job ID for the {resource}.') def TaskGroupAttributeConfig(): return concepts.ResourceParameterAttributeConfig( name='task_group', help_text='The task_group ID for the {resource}.') def TaskAttributeConfig(): return concepts.ResourceParameterAttributeConfig( name='task', help_text='The task ID for the {resource}.') def GetLocationResourceSpec(): return concepts.ResourceSpec( 'batch.projects.locations', resource_name='location', locationsId=LocationAttributeConfig(), projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG) def GetJobResourceSpec(): return concepts.ResourceSpec( 'batch.projects.locations.jobs', resource_name='job', jobsId=JobAttributeConfig(), locationsId=LocationAttributeConfig(), projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG) def GetSubmitJobResourceSpec(): return concepts.ResourceSpec( 'batch.projects.locations.jobs', resource_name='job', jobsId=concepts.ResourceParameterAttributeConfig( name='job', help_text='The job ID for the {resource}.', # Adding invalid job_id to keep job resource in the right format, # this invalid value will be removed if no job_id is specified from # the input and the underlaying client would generate a valid one. fallthroughs=[ deps.ValueFallthrough( INVALIDID, hint=( 'job ID is optional and will be generated if not' ' specified' ), ) ], ), locationsId=LocationAttributeConfig(), projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG, ) def GetTaskResourceSpec(): return concepts.ResourceSpec( 'batch.projects.locations.jobs.taskGroups.tasks', resource_name='task', tasksId=TaskAttributeConfig(), taskGroupsId=TaskGroupAttributeConfig(), jobsId=JobAttributeConfig(), locationsId=LocationAttributeConfig(), projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG) def AddLocationResourceArgs(parser): """Add the location resource argument. Args: parser: the parser for the command. """ arg_specs = [ presentation_specs.ResourcePresentationSpec( '--location', GetLocationResourceSpec(), ('The Batch location resource. If you omit this flag, the default' 'location is used if you set the batch/location property.' 'Otherwise, omitting this flag lists jobs across all locations.'), required=False, ), ] concept_parsers.ConceptParser(arg_specs).AddToParser(parser) def AddJobFlagResourceArgs(parser): """Add the job resource argument as flag. Args: parser: the parser for the command. """ arg_specs = [ presentation_specs.ResourcePresentationSpec( '--job', GetJobResourceSpec(), ('The Batch job resource. If not specified,' 'the current batch/location is used.'), required=True, ), ] concept_parsers.ConceptParser(arg_specs).AddToParser(parser) def AddJobResourceArgs(parser): """Add the job resource argument as positional. Args: parser: the parser for the command. """ arg_specs = [ presentation_specs.ResourcePresentationSpec( 'JOB', GetJobResourceSpec(), ('The Batch job resource. If --location not specified,' 'the current batch/location is used.'), required=True, ), ] concept_parsers.ConceptParser(arg_specs).AddToParser(parser) def AddSubmitJobResourceArgs(parser): """Add the job resource argument as positional. Args: parser: the parser for the command. """ arg_specs = [ presentation_specs.ResourcePresentationSpec( 'JOB', GetSubmitJobResourceSpec(), ('The Batch job resource. If --location not specified,' 'the current batch/location is used.'), required=True, ), ] concept_parsers.ConceptParser(arg_specs).AddToParser(parser) def AddTaskResourceArgs(parser): """Add the task resource argument. Args: parser: the parser for the command. """ arg_specs = [ presentation_specs.ResourcePresentationSpec( 'TASK', GetTaskResourceSpec(), ('The Batch task resource. If not specified,' 'the current batch/location is used.'), required=True, ), ] concept_parsers.ConceptParser(arg_specs).AddToParser(parser) def AddResourceAllowanceResourceArgs(parser): """Add the resource allowance resource argument as positional. Args: parser: the parser for the command. """ arg_specs = [ presentation_specs.ResourcePresentationSpec( 'RESOURCE_ALLOWANCE', GetResourceAllowanceResourceSpec(), ( 'The Batch resource allowance resource. If --location not' ' specified,the current batch/location is used.' ), required=True, ), ] concept_parsers.ConceptParser(arg_specs).AddToParser(parser) def ResourceAllowanceAttributeConfig(): return concepts.ResourceParameterAttributeConfig( name='resource_allowance', help_text='The resource allowance ID for the {resource}.', ) def GetResourceAllowanceResourceSpec(): return concepts.ResourceSpec( 'batch.projects.locations.resourceAllowances', api_version='v1alpha', resource_name='resourceAllowance', projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG, locationsId=LocationAttributeConfig(), resourceAllowancesId=ResourceAllowanceAttributeConfig(), ) def AddCreateResourceAllowanceResourceArgs(parser): """Add the resource allowance resource argument as positional. Args: parser: the parser for the command. """ arg_specs = [ presentation_specs.ResourcePresentationSpec( 'RESOURCE_ALLOWANCE', GetCreateResourceAllowanceResourceSpec(), ( 'The Batch resource allowance resource. If --location not' ' specified,the current batch/location is used.' ), required=True, ), ] concept_parsers.ConceptParser(arg_specs).AddToParser(parser) def GetCreateResourceAllowanceResourceSpec(): return concepts.ResourceSpec( 'batch.projects.locations.resourceAllowances', resource_name='resourceAllowance', api_version='v1alpha', projectsId=concepts.DEFAULT_PROJECT_ATTRIBUTE_CONFIG, locationsId=LocationAttributeConfig(), resourceAllowancesId=concepts.ResourceParameterAttributeConfig( name='resource_allowance', help_text='The resource allowance ID for the {resource}.', # Adding invalid resource_allowance_id to keep resource allowance # in the right format, this invalid value will be removed # if no resource_allowance_id is specified from # the input and the underlaying client would generate a valid one. fallthroughs=[ deps.ValueFallthrough( INVALIDID, hint=( 'resource allowance ID is optional and will be generated' ' if not specified' ), ) ], ), )