Home | History | Annotate | Download | only in dns_v1
      1 #!/usr/bin/env python
      2 """CLI for dns, version v1."""
      3 # NOTE: This file is autogenerated and should not be edited by hand.
      4 
      5 import code
      6 import os
      7 import platform
      8 import sys
      9 
     10 from apitools.base.protorpclite import message_types
     11 from apitools.base.protorpclite import messages
     12 
     13 from google.apputils import appcommands
     14 import gflags as flags
     15 
     16 import apitools.base.py as apitools_base
     17 from apitools.base.py import cli as apitools_base_cli
     18 import dns_v1_client as client_lib
     19 import dns_v1_messages as messages
     20 
     21 
     22 def _DeclareDnsFlags():
     23   """Declare global flags in an idempotent way."""
     24   if 'api_endpoint' in flags.FLAGS:
     25     return
     26   flags.DEFINE_string(
     27       'api_endpoint',
     28       u'https://www.googleapis.com/dns/v1/',
     29       'URL of the API endpoint to use.',
     30       short_name='dns_url')
     31   flags.DEFINE_string(
     32       'history_file',
     33       u'~/.dns.v1.history',
     34       'File with interactive shell history.')
     35   flags.DEFINE_multistring(
     36       'add_header', [],
     37       'Additional http headers (as key=value strings). '
     38       'Can be specified multiple times.')
     39   flags.DEFINE_string(
     40       'service_account_json_keyfile', '',
     41       'Filename for a JSON service account key downloaded'
     42       ' from the Developer Console.')
     43   flags.DEFINE_enum(
     44       'alt',
     45       u'json',
     46       [u'json'],
     47       u'Data format for the response.')
     48   flags.DEFINE_string(
     49       'fields',
     50       None,
     51       u'Selector specifying which fields to include in a partial response.')
     52   flags.DEFINE_string(
     53       'key',
     54       None,
     55       u'API key. Your API key identifies your project and provides you with '
     56       u'API access, quota, and reports. Required unless you provide an OAuth '
     57       u'2.0 token.')
     58   flags.DEFINE_string(
     59       'oauth_token',
     60       None,
     61       u'OAuth 2.0 token for the current user.')
     62   flags.DEFINE_boolean(
     63       'prettyPrint',
     64       'True',
     65       u'Returns response with indentations and line breaks.')
     66   flags.DEFINE_string(
     67       'quotaUser',
     68       None,
     69       u'Available to use for quota purposes for server-side applications. Can'
     70       u' be any arbitrary string assigned to a user, but should not exceed 40'
     71       u' characters. Overrides userIp if both are provided.')
     72   flags.DEFINE_string(
     73       'trace',
     74       None,
     75       'A tracing token of the form "token:<tokenid>" to include in api '
     76       'requests.')
     77   flags.DEFINE_string(
     78       'userIp',
     79       None,
     80       u'IP address of the site where the request originates. Use this if you '
     81       u'want to enforce per-user limits.')
     82 
     83 
     84 FLAGS = flags.FLAGS
     85 apitools_base_cli.DeclareBaseFlags()
     86 _DeclareDnsFlags()
     87 
     88 
     89 def GetGlobalParamsFromFlags():
     90   """Return a StandardQueryParameters based on flags."""
     91   result = messages.StandardQueryParameters()
     92   if FLAGS['alt'].present:
     93     result.alt = messages.StandardQueryParameters.AltValueValuesEnum(FLAGS.alt)
     94   if FLAGS['fields'].present:
     95     result.fields = FLAGS.fields.decode('utf8')
     96   if FLAGS['key'].present:
     97     result.key = FLAGS.key.decode('utf8')
     98   if FLAGS['oauth_token'].present:
     99     result.oauth_token = FLAGS.oauth_token.decode('utf8')
    100   if FLAGS['prettyPrint'].present:
    101     result.prettyPrint = FLAGS.prettyPrint
    102   if FLAGS['quotaUser'].present:
    103     result.quotaUser = FLAGS.quotaUser.decode('utf8')
    104   if FLAGS['trace'].present:
    105     result.trace = FLAGS.trace.decode('utf8')
    106   if FLAGS['userIp'].present:
    107     result.userIp = FLAGS.userIp.decode('utf8')
    108   return result
    109 
    110 
    111 def GetClientFromFlags():
    112   """Return a client object, configured from flags."""
    113   log_request = FLAGS.log_request or FLAGS.log_request_response
    114   log_response = FLAGS.log_response or FLAGS.log_request_response
    115   api_endpoint = apitools_base.NormalizeApiEndpoint(FLAGS.api_endpoint)
    116   additional_http_headers = dict(x.split('=', 1) for x in FLAGS.add_header)
    117   credentials_args = {
    118       'service_account_json_keyfile': os.path.expanduser(FLAGS.service_account_json_keyfile)
    119   }
    120   try:
    121     client = client_lib.DnsV1(
    122         api_endpoint, log_request=log_request,
    123         log_response=log_response,
    124         credentials_args=credentials_args,
    125         additional_http_headers=additional_http_headers)
    126   except apitools_base.CredentialsError as e:
    127     print 'Error creating credentials: %s' % e
    128     sys.exit(1)
    129   return client
    130 
    131 
    132 class PyShell(appcommands.Cmd):
    133 
    134   def Run(self, _):
    135     """Run an interactive python shell with the client."""
    136     client = GetClientFromFlags()
    137     params = GetGlobalParamsFromFlags()
    138     for field in params.all_fields():
    139       value = params.get_assigned_value(field.name)
    140       if value != field.default:
    141         client.AddGlobalParam(field.name, value)
    142     banner = """
    143            == dns interactive console ==
    144                  client: a dns client
    145           apitools_base: base apitools module
    146          messages: the generated messages module
    147     """
    148     local_vars = {
    149         'apitools_base': apitools_base,
    150         'client': client,
    151         'client_lib': client_lib,
    152         'messages': messages,
    153     }
    154     if platform.system() == 'Linux':
    155       console = apitools_base_cli.ConsoleWithReadline(
    156           local_vars, histfile=FLAGS.history_file)
    157     else:
    158       console = code.InteractiveConsole(local_vars)
    159     try:
    160       console.interact(banner)
    161     except SystemExit as e:
    162       return e.code
    163 
    164 
    165 class ChangesCreate(apitools_base_cli.NewCmd):
    166   """Command wrapping changes.Create."""
    167 
    168   usage = """changes_create <project> <managedZone>"""
    169 
    170   def __init__(self, name, fv):
    171     super(ChangesCreate, self).__init__(name, fv)
    172     flags.DEFINE_string(
    173         'change',
    174         None,
    175         u'A Change resource to be passed as the request body.',
    176         flag_values=fv)
    177 
    178   def RunWithArgs(self, project, managedZone):
    179     """Atomically update the ResourceRecordSet collection.
    180 
    181     Args:
    182       project: Identifies the project addressed by this request.
    183       managedZone: Identifies the managed zone addressed by this request. Can
    184         be the managed zone name or id.
    185 
    186     Flags:
    187       change: A Change resource to be passed as the request body.
    188     """
    189     client = GetClientFromFlags()
    190     global_params = GetGlobalParamsFromFlags()
    191     request = messages.DnsChangesCreateRequest(
    192         project=project.decode('utf8'),
    193         managedZone=managedZone.decode('utf8'),
    194         )
    195     if FLAGS['change'].present:
    196       request.change = apitools_base.JsonToMessage(messages.Change, FLAGS.change)
    197     result = client.changes.Create(
    198         request, global_params=global_params)
    199     print apitools_base_cli.FormatOutput(result)
    200 
    201 
    202 class ChangesGet(apitools_base_cli.NewCmd):
    203   """Command wrapping changes.Get."""
    204 
    205   usage = """changes_get <project> <managedZone> <changeId>"""
    206 
    207   def __init__(self, name, fv):
    208     super(ChangesGet, self).__init__(name, fv)
    209 
    210   def RunWithArgs(self, project, managedZone, changeId):
    211     """Fetch the representation of an existing Change.
    212 
    213     Args:
    214       project: Identifies the project addressed by this request.
    215       managedZone: Identifies the managed zone addressed by this request. Can
    216         be the managed zone name or id.
    217       changeId: The identifier of the requested change, from a previous
    218         ResourceRecordSetsChangeResponse.
    219     """
    220     client = GetClientFromFlags()
    221     global_params = GetGlobalParamsFromFlags()
    222     request = messages.DnsChangesGetRequest(
    223         project=project.decode('utf8'),
    224         managedZone=managedZone.decode('utf8'),
    225         changeId=changeId.decode('utf8'),
    226         )
    227     result = client.changes.Get(
    228         request, global_params=global_params)
    229     print apitools_base_cli.FormatOutput(result)
    230 
    231 
    232 class ChangesList(apitools_base_cli.NewCmd):
    233   """Command wrapping changes.List."""
    234 
    235   usage = """changes_list <project> <managedZone>"""
    236 
    237   def __init__(self, name, fv):
    238     super(ChangesList, self).__init__(name, fv)
    239     flags.DEFINE_integer(
    240         'maxResults',
    241         None,
    242         u'Optional. Maximum number of results to be returned. If unspecified,'
    243         u' the server will decide how many results to return.',
    244         flag_values=fv)
    245     flags.DEFINE_string(
    246         'pageToken',
    247         None,
    248         u'Optional. A tag returned by a previous list request that was '
    249         u'truncated. Use this parameter to continue a previous list request.',
    250         flag_values=fv)
    251     flags.DEFINE_enum(
    252         'sortBy',
    253         u'changeSequence',
    254         [u'changeSequence'],
    255         u'Sorting criterion. The only supported value is change sequence.',
    256         flag_values=fv)
    257     flags.DEFINE_string(
    258         'sortOrder',
    259         None,
    260         u"Sorting order direction: 'ascending' or 'descending'.",
    261         flag_values=fv)
    262 
    263   def RunWithArgs(self, project, managedZone):
    264     """Enumerate Changes to a ResourceRecordSet collection.
    265 
    266     Args:
    267       project: Identifies the project addressed by this request.
    268       managedZone: Identifies the managed zone addressed by this request. Can
    269         be the managed zone name or id.
    270 
    271     Flags:
    272       maxResults: Optional. Maximum number of results to be returned. If
    273         unspecified, the server will decide how many results to return.
    274       pageToken: Optional. A tag returned by a previous list request that was
    275         truncated. Use this parameter to continue a previous list request.
    276       sortBy: Sorting criterion. The only supported value is change sequence.
    277       sortOrder: Sorting order direction: 'ascending' or 'descending'.
    278     """
    279     client = GetClientFromFlags()
    280     global_params = GetGlobalParamsFromFlags()
    281     request = messages.DnsChangesListRequest(
    282         project=project.decode('utf8'),
    283         managedZone=managedZone.decode('utf8'),
    284         )
    285     if FLAGS['maxResults'].present:
    286       request.maxResults = FLAGS.maxResults
    287     if FLAGS['pageToken'].present:
    288       request.pageToken = FLAGS.pageToken.decode('utf8')
    289     if FLAGS['sortBy'].present:
    290       request.sortBy = messages.DnsChangesListRequest.SortByValueValuesEnum(FLAGS.sortBy)
    291     if FLAGS['sortOrder'].present:
    292       request.sortOrder = FLAGS.sortOrder.decode('utf8')
    293     result = client.changes.List(
    294         request, global_params=global_params)
    295     print apitools_base_cli.FormatOutput(result)
    296 
    297 
    298 class ManagedZonesCreate(apitools_base_cli.NewCmd):
    299   """Command wrapping managedZones.Create."""
    300 
    301   usage = """managedZones_create <project>"""
    302 
    303   def __init__(self, name, fv):
    304     super(ManagedZonesCreate, self).__init__(name, fv)
    305     flags.DEFINE_string(
    306         'managedZone',
    307         None,
    308         u'A ManagedZone resource to be passed as the request body.',
    309         flag_values=fv)
    310 
    311   def RunWithArgs(self, project):
    312     """Create a new ManagedZone.
    313 
    314     Args:
    315       project: Identifies the project addressed by this request.
    316 
    317     Flags:
    318       managedZone: A ManagedZone resource to be passed as the request body.
    319     """
    320     client = GetClientFromFlags()
    321     global_params = GetGlobalParamsFromFlags()
    322     request = messages.DnsManagedZonesCreateRequest(
    323         project=project.decode('utf8'),
    324         )
    325     if FLAGS['managedZone'].present:
    326       request.managedZone = apitools_base.JsonToMessage(messages.ManagedZone, FLAGS.managedZone)
    327     result = client.managedZones.Create(
    328         request, global_params=global_params)
    329     print apitools_base_cli.FormatOutput(result)
    330 
    331 
    332 class ManagedZonesDelete(apitools_base_cli.NewCmd):
    333   """Command wrapping managedZones.Delete."""
    334 
    335   usage = """managedZones_delete <project> <managedZone>"""
    336 
    337   def __init__(self, name, fv):
    338     super(ManagedZonesDelete, self).__init__(name, fv)
    339 
    340   def RunWithArgs(self, project, managedZone):
    341     """Delete a previously created ManagedZone.
    342 
    343     Args:
    344       project: Identifies the project addressed by this request.
    345       managedZone: Identifies the managed zone addressed by this request. Can
    346         be the managed zone name or id.
    347     """
    348     client = GetClientFromFlags()
    349     global_params = GetGlobalParamsFromFlags()
    350     request = messages.DnsManagedZonesDeleteRequest(
    351         project=project.decode('utf8'),
    352         managedZone=managedZone.decode('utf8'),
    353         )
    354     result = client.managedZones.Delete(
    355         request, global_params=global_params)
    356     print apitools_base_cli.FormatOutput(result)
    357 
    358 
    359 class ManagedZonesGet(apitools_base_cli.NewCmd):
    360   """Command wrapping managedZones.Get."""
    361 
    362   usage = """managedZones_get <project> <managedZone>"""
    363 
    364   def __init__(self, name, fv):
    365     super(ManagedZonesGet, self).__init__(name, fv)
    366 
    367   def RunWithArgs(self, project, managedZone):
    368     """Fetch the representation of an existing ManagedZone.
    369 
    370     Args:
    371       project: Identifies the project addressed by this request.
    372       managedZone: Identifies the managed zone addressed by this request. Can
    373         be the managed zone name or id.
    374     """
    375     client = GetClientFromFlags()
    376     global_params = GetGlobalParamsFromFlags()
    377     request = messages.DnsManagedZonesGetRequest(
    378         project=project.decode('utf8'),
    379         managedZone=managedZone.decode('utf8'),
    380         )
    381     result = client.managedZones.Get(
    382         request, global_params=global_params)
    383     print apitools_base_cli.FormatOutput(result)
    384 
    385 
    386 class ManagedZonesList(apitools_base_cli.NewCmd):
    387   """Command wrapping managedZones.List."""
    388 
    389   usage = """managedZones_list <project>"""
    390 
    391   def __init__(self, name, fv):
    392     super(ManagedZonesList, self).__init__(name, fv)
    393     flags.DEFINE_string(
    394         'dnsName',
    395         None,
    396         u'Restricts the list to return only zones with this domain name.',
    397         flag_values=fv)
    398     flags.DEFINE_integer(
    399         'maxResults',
    400         None,
    401         u'Optional. Maximum number of results to be returned. If unspecified,'
    402         u' the server will decide how many results to return.',
    403         flag_values=fv)
    404     flags.DEFINE_string(
    405         'pageToken',
    406         None,
    407         u'Optional. A tag returned by a previous list request that was '
    408         u'truncated. Use this parameter to continue a previous list request.',
    409         flag_values=fv)
    410 
    411   def RunWithArgs(self, project):
    412     """Enumerate ManagedZones that have been created but not yet deleted.
    413 
    414     Args:
    415       project: Identifies the project addressed by this request.
    416 
    417     Flags:
    418       dnsName: Restricts the list to return only zones with this domain name.
    419       maxResults: Optional. Maximum number of results to be returned. If
    420         unspecified, the server will decide how many results to return.
    421       pageToken: Optional. A tag returned by a previous list request that was
    422         truncated. Use this parameter to continue a previous list request.
    423     """
    424     client = GetClientFromFlags()
    425     global_params = GetGlobalParamsFromFlags()
    426     request = messages.DnsManagedZonesListRequest(
    427         project=project.decode('utf8'),
    428         )
    429     if FLAGS['dnsName'].present:
    430       request.dnsName = FLAGS.dnsName.decode('utf8')
    431     if FLAGS['maxResults'].present:
    432       request.maxResults = FLAGS.maxResults
    433     if FLAGS['pageToken'].present:
    434       request.pageToken = FLAGS.pageToken.decode('utf8')
    435     result = client.managedZones.List(
    436         request, global_params=global_params)
    437     print apitools_base_cli.FormatOutput(result)
    438 
    439 
    440 class ProjectsGet(apitools_base_cli.NewCmd):
    441   """Command wrapping projects.Get."""
    442 
    443   usage = """projects_get <project>"""
    444 
    445   def __init__(self, name, fv):
    446     super(ProjectsGet, self).__init__(name, fv)
    447 
    448   def RunWithArgs(self, project):
    449     """Fetch the representation of an existing Project.
    450 
    451     Args:
    452       project: Identifies the project addressed by this request.
    453     """
    454     client = GetClientFromFlags()
    455     global_params = GetGlobalParamsFromFlags()
    456     request = messages.DnsProjectsGetRequest(
    457         project=project.decode('utf8'),
    458         )
    459     result = client.projects.Get(
    460         request, global_params=global_params)
    461     print apitools_base_cli.FormatOutput(result)
    462 
    463 
    464 class ResourceRecordSetsList(apitools_base_cli.NewCmd):
    465   """Command wrapping resourceRecordSets.List."""
    466 
    467   usage = """resourceRecordSets_list <project> <managedZone>"""
    468 
    469   def __init__(self, name, fv):
    470     super(ResourceRecordSetsList, self).__init__(name, fv)
    471     flags.DEFINE_integer(
    472         'maxResults',
    473         None,
    474         u'Optional. Maximum number of results to be returned. If unspecified,'
    475         u' the server will decide how many results to return.',
    476         flag_values=fv)
    477     flags.DEFINE_string(
    478         'name',
    479         None,
    480         u'Restricts the list to return only records with this fully qualified'
    481         u' domain name.',
    482         flag_values=fv)
    483     flags.DEFINE_string(
    484         'pageToken',
    485         None,
    486         u'Optional. A tag returned by a previous list request that was '
    487         u'truncated. Use this parameter to continue a previous list request.',
    488         flag_values=fv)
    489     flags.DEFINE_string(
    490         'type',
    491         None,
    492         u'Restricts the list to return only records of this type. If present,'
    493         u' the "name" parameter must also be present.',
    494         flag_values=fv)
    495 
    496   def RunWithArgs(self, project, managedZone):
    497     """Enumerate ResourceRecordSets that have been created but not yet
    498     deleted.
    499 
    500     Args:
    501       project: Identifies the project addressed by this request.
    502       managedZone: Identifies the managed zone addressed by this request. Can
    503         be the managed zone name or id.
    504 
    505     Flags:
    506       maxResults: Optional. Maximum number of results to be returned. If
    507         unspecified, the server will decide how many results to return.
    508       name: Restricts the list to return only records with this fully
    509         qualified domain name.
    510       pageToken: Optional. A tag returned by a previous list request that was
    511         truncated. Use this parameter to continue a previous list request.
    512       type: Restricts the list to return only records of this type. If
    513         present, the "name" parameter must also be present.
    514     """
    515     client = GetClientFromFlags()
    516     global_params = GetGlobalParamsFromFlags()
    517     request = messages.DnsResourceRecordSetsListRequest(
    518         project=project.decode('utf8'),
    519         managedZone=managedZone.decode('utf8'),
    520         )
    521     if FLAGS['maxResults'].present:
    522       request.maxResults = FLAGS.maxResults
    523     if FLAGS['name'].present:
    524       request.name = FLAGS.name.decode('utf8')
    525     if FLAGS['pageToken'].present:
    526       request.pageToken = FLAGS.pageToken.decode('utf8')
    527     if FLAGS['type'].present:
    528       request.type = FLAGS.type.decode('utf8')
    529     result = client.resourceRecordSets.List(
    530         request, global_params=global_params)
    531     print apitools_base_cli.FormatOutput(result)
    532 
    533 
    534 def main(_):
    535   appcommands.AddCmd('pyshell', PyShell)
    536   appcommands.AddCmd('changes_create', ChangesCreate)
    537   appcommands.AddCmd('changes_get', ChangesGet)
    538   appcommands.AddCmd('changes_list', ChangesList)
    539   appcommands.AddCmd('managedZones_create', ManagedZonesCreate)
    540   appcommands.AddCmd('managedZones_delete', ManagedZonesDelete)
    541   appcommands.AddCmd('managedZones_get', ManagedZonesGet)
    542   appcommands.AddCmd('managedZones_list', ManagedZonesList)
    543   appcommands.AddCmd('projects_get', ProjectsGet)
    544   appcommands.AddCmd('resourceRecordSets_list', ResourceRecordSetsList)
    545 
    546   apitools_base_cli.SetupLogger()
    547   if hasattr(appcommands, 'SetDefaultCommand'):
    548     appcommands.SetDefaultCommand('pyshell')
    549 
    550 
    551 run_main = apitools_base_cli.run_main
    552 
    553 if __name__ == '__main__':
    554   appcommands.Run()
    555