예제 #1
0
  def _TransactionRemoveHelper(self, record_to_remove,
                               domain_name_for_run=None):
    shutil.copyfile(self.initial_transaction, transaction_util.DEFAULT_PATH)

    test_zone = util_beta.GetManagedZones()[0]
    test_record = record_to_remove
    self.mocked_dns_client.resourceRecordSets.List.Expect(
        self.messages_beta.DnsResourceRecordSetsListRequest(
            project=self.Project(),
            managedZone=test_zone.name,
            name=test_record.name,
            type=test_record.type,
            maxResults=100),
        self.messages_beta.ResourceRecordSetsListResponse(
            rrsets=[test_record]))

    if not domain_name_for_run:
      domain_name_for_run = test_record.name

    self.Run('dns record-sets transaction remove -z {0} --name {1} --ttl {2}'
             ' --type {3} {4}'.format(test_zone.name, domain_name_for_run,
                                      test_record.ttl, test_record.type,
                                      ' '.join(test_record.rrdatas)))
    self.AssertErrContains(
        'Record removal appended to transaction at [{0}].'.format(
            transaction_util.DEFAULT_PATH))

    with open(self.initial_transaction) as expected:
      expected_change = transaction_util.ChangeFromYamlFile(
          expected, api_version=self.api_version)
      expected_change.deletions.append(test_record)
    with open(transaction_util.DEFAULT_PATH) as actual:
      actual_change = transaction_util.ChangeFromYamlFile(
          actual, api_version=self.api_version)
      self.assertEqual(expected_change, actual_change)
예제 #2
0
    def Run(self, args):
        with transaction_util.TransactionFile(
                args.transaction_file) as trans_file:
            change = transaction_util.ChangeFromYamlFile(trans_file)

        if import_util.IsOnlySOAIncrement(change):
            log.status.Print('Nothing to do, empty transaction [{0}]'.format(
                args.transaction_file))
            os.remove(args.transaction_file)
            return None

        dns = apis.GetClientInstance('dns', 'v1')
        messages = apis.GetMessagesModule('dns', 'v1')
        zone_ref = resources.REGISTRY.Parse(
            args.zone,
            params={
                'project': properties.VALUES.core.project.GetOrFail,
            },
            collection='dns.managedZones')

        # Send the change to the service.
        result = dns.changes.Create(
            messages.DnsChangesCreateRequest(change=change,
                                             managedZone=zone_ref.Name(),
                                             project=zone_ref.project))
        change_ref = resources.REGISTRY.Create(collection='dns.changes',
                                               project=zone_ref.project,
                                               managedZone=zone_ref.Name(),
                                               changeId=result.id)
        msg = 'Executed transaction [{0}] for managed-zone [{1}].'.format(
            args.transaction_file, zone_ref.Name())
        log.status.Print(msg)
        log.CreatedResource(change_ref)
        os.remove(args.transaction_file)
        return result
예제 #3
0
  def Run(self, args):
    with trans_util.TransactionFile(args.transaction_file) as trans_file:
      change = trans_util.ChangeFromYamlFile(trans_file)

    dns = self.context['dns_client']
    messages = self.context['dns_messages']
    resources = self.context['dns_resources']
    project_id = properties.VALUES.core.project.Get(required=True)

    record_to_remove = trans_util.CreateRecordSetFromArgs(args)

    # Ensure the record to be removed exists
    zone_ref = resources.Parse(args.zone, collection='dns.managedZones')
    existing_records = [record for record in list_pager.YieldFromList(
        dns.resourceRecordSets,
        messages.DnsResourceRecordSetsListRequest(
            project=project_id,
            managedZone=zone_ref.Name(),
            name=util.AppendTrailingDot(args.name),
            type=args.type),
        field='rrsets')]
    if not existing_records or existing_records[0] != record_to_remove:
      raise exceptions.ToolException('Record to be removed does not exist')

    change.deletions.append(record_to_remove)

    with trans_util.TransactionFile(args.transaction_file, 'w') as trans_file:
      trans_util.WriteToYamlFile(trans_file, change)

    log.status.Print(
        'Record removal appended to transaction at [{0}].'.format(
            args.transaction_file))
예제 #4
0
    def Run(self, args):
        with transaction_util.TransactionFile(
                args.transaction_file) as trans_file:
            change = transaction_util.ChangeFromYamlFile(trans_file)

        if import_util.IsOnlySOAIncrement(change):
            log.status.Print('Nothing to do, empty transaction [{0}]'.format(
                args.transaction_file))
            os.remove(args.transaction_file)
            return None

        dns = self.context['dns_client']
        messages = self.context['dns_messages']
        resources = self.context['dns_resources']
        project_id = properties.VALUES.core.project.Get(required=True)
        zone_ref = resources.Parse(args.zone, collection='dns.managedZones')

        # Send the change to the service.
        result = dns.changes.Create(
            messages.DnsChangesCreateRequest(change=change,
                                             managedZone=zone_ref.Name(),
                                             project=project_id))
        change_ref = resources.Create(collection='dns.changes',
                                      project=project_id,
                                      managedZone=zone_ref.Name(),
                                      changeId=result.id)
        msg = 'Executed transaction [{0}] for managed-zone [{1}].'.format(
            args.transaction_file, zone_ref.Name())
        log.status.Print(msg)
        log.CreatedResource(change_ref)
        os.remove(args.transaction_file)
        return result
    def Run(self, args):
        api_version = 'v1'
        # If in the future there are differences between API version, do NOT use
        # this patter of checking ReleaseTrack. Break this into multiple classes.
        if self.ReleaseTrack() == base.ReleaseTrack.BETA:
            api_version = 'v1beta2'
        elif self.ReleaseTrack() == base.ReleaseTrack.ALPHA:
            api_version = 'v1alpha2'

        with trans_util.TransactionFile(args.transaction_file) as trans_file:
            change = trans_util.ChangeFromYamlFile(trans_file,
                                                   api_version=api_version)

        change.additions.append(
            rrsets_util.CreateRecordSetFromArgs(
                args,
                api_version=api_version,
                allow_extended_records=(
                    self.ReleaseTrack() == base.ReleaseTrack.ALPHA)))

        with trans_util.TransactionFile(args.transaction_file,
                                        'w') as trans_file:
            trans_util.WriteToYamlFile(trans_file, change)

        log.status.Print(
            'Record addition appended to transaction at [{0}].'.format(
                args.transaction_file))
예제 #6
0
  def Run(self, args):
    api_version = 'v1'
    # If in the future there are differences between API version, do NOT use
    # this patter of checking ReleaseTrack. Break this into multiple classes.
    if self.ReleaseTrack() == base.ReleaseTrack.BETA:
      api_version = 'v1beta2'

    with transaction_util.TransactionFile(args.transaction_file) as trans_file:
      return transaction_util.ChangeFromYamlFile(
          trans_file, api_version=api_version)
예제 #7
0
  def Run(self, args):
    with trans_util.TransactionFile(args.transaction_file) as trans_file:
      change = trans_util.ChangeFromYamlFile(trans_file)

    change.additions.append(trans_util.CreateRecordSetFromArgs(args))

    with trans_util.TransactionFile(args.transaction_file, 'w') as trans_file:
      trans_util.WriteToYamlFile(trans_file, change)

    log.status.Print(
        'Record addition appended to transaction at [{0}].'.format(
            args.transaction_file))
  def testTransactionAddData(self):
    shutil.copyfile(
        self.initial_transaction, transaction_util.DEFAULT_PATH)

    test_zone = util.GetManagedZones()[0]
    test_record = util.GetRecordSetsForExport()[5]
    self.Run(
        'dns record-sets transaction add -z {0} --name {1} --ttl {2} --type '
        '{3} {4}'.format(test_zone.name, test_record.name,
                         test_record.ttl, test_record.type,
                         ' '.join(test_record.rrdatas)))
    self.AssertErrContains(
        'Record addition appended to transaction at [{0}].'.format(
            transaction_util.DEFAULT_PATH))

    with open(self.initial_transaction) as expected:
      expected_change = transaction_util.ChangeFromYamlFile(expected)
      expected_change.additions.append(test_record)
    with open(transaction_util.DEFAULT_PATH) as actual:
      actual_change = transaction_util.ChangeFromYamlFile(actual)
      self.assertEqual(expected_change, actual_change)
    def Run(self, args):
        api_version = 'v1'
        # If in the future there are differences between API version, do NOT use
        # this patter of checking ReleaseTrack. Break this into multiple classes.
        if self.ReleaseTrack() == base.ReleaseTrack.BETA:
            api_version = 'v1beta2'
        elif self.ReleaseTrack() == base.ReleaseTrack.ALPHA:
            api_version = 'v1alpha2'

        with trans_util.TransactionFile(args.transaction_file) as trans_file:
            change = trans_util.ChangeFromYamlFile(trans_file,
                                                   api_version=api_version)

        dns = util.GetApiClient(api_version)

        record_to_remove = rrsets_util.CreateRecordSetFromArgs(
            args,
            api_version=api_version,
            allow_extended_records=(
                self.ReleaseTrack() == base.ReleaseTrack.ALPHA))

        # Ensure the record to be removed exists
        zone_ref = util.GetRegistry(api_version).Parse(
            args.zone,
            params={
                'project': properties.VALUES.core.project.GetOrFail,
            },
            collection='dns.managedZones')
        existing_records = [
            record for record in list_pager.YieldFromList(
                dns.resourceRecordSets,
                dns.MESSAGES_MODULE.DnsResourceRecordSetsListRequest(
                    project=zone_ref.project,
                    managedZone=zone_ref.Name(),
                    name=util.AppendTrailingDot(args.name),
                    type=args.type),
                field='rrsets')
        ]
        if not existing_records or existing_records[0] != record_to_remove:
            raise trans_util.RecordDoesNotExist(
                'Record to be removed does not exist')

        change.deletions.append(record_to_remove)

        with trans_util.TransactionFile(args.transaction_file,
                                        'w') as trans_file:
            trans_util.WriteToYamlFile(trans_file, change)

        log.status.Print(
            'Record removal appended to transaction at [{0}].'.format(
                args.transaction_file))
예제 #10
0
    def Run(self, args):
        api_version = 'v1'
        # If in the future there are differences between API version, do NOT use
        # this patter of checking ReleaseTrack. Break this into multiple classes.
        if self.ReleaseTrack() == base.ReleaseTrack.BETA:
            api_version = 'v1beta2'
        elif self.ReleaseTrack() == base.ReleaseTrack.ALPHA:
            api_version = 'v1alpha2'

        with transaction_util.TransactionFile(
                args.transaction_file) as trans_file:
            change = transaction_util.ChangeFromYamlFile(
                trans_file, api_version=api_version)

        if import_util.IsOnlySOAIncrement(change, api_version=api_version):
            log.status.Print('Nothing to do, empty transaction [{0}]'.format(
                args.transaction_file))
            os.remove(args.transaction_file)
            return None

        dns = apis.GetClientInstance('dns', api_version)
        zone_ref = util.GetRegistry(api_version).Parse(
            args.zone,
            params={
                'project': properties.VALUES.core.project.GetOrFail,
            },
            collection='dns.managedZones')

        # Send the change to the service.
        result = dns.changes.Create(
            dns.MESSAGES_MODULE.DnsChangesCreateRequest(
                change=change,
                managedZone=zone_ref.Name(),
                project=zone_ref.project))
        change_ref = util.GetRegistry(api_version).Create(
            collection='dns.changes',
            project=zone_ref.project,
            managedZone=zone_ref.Name(),
            changeId=result.id)
        msg = 'Executed transaction [{0}] for managed-zone [{1}].'.format(
            args.transaction_file, zone_ref.Name())
        log.status.Print(msg)
        log.CreatedResource(change_ref)
        os.remove(args.transaction_file)
        return result
예제 #11
0
    def Run(self, args):
        with trans_util.TransactionFile(args.transaction_file) as trans_file:
            change = trans_util.ChangeFromYamlFile(trans_file)

        dns = apis.GetClientInstance('dns', 'v1')
        messages = apis.GetMessagesModule('dns', 'v1')

        record_to_remove = trans_util.CreateRecordSetFromArgs(args)

        # Ensure the record to be removed exists
        zone_ref = resources.REGISTRY.Parse(
            args.zone,
            params={
                'project': properties.VALUES.core.project.GetOrFail,
            },
            collection='dns.managedZones')
        existing_records = [
            record for record in list_pager.YieldFromList(
                dns.resourceRecordSets,
                messages.DnsResourceRecordSetsListRequest(
                    project=zone_ref.project,
                    managedZone=zone_ref.Name(),
                    name=util.AppendTrailingDot(args.name),
                    type=args.type),
                field='rrsets')
        ]
        if not existing_records or existing_records[0] != record_to_remove:
            raise exceptions.ToolException(
                'Record to be removed does not exist')

        change.deletions.append(record_to_remove)

        with trans_util.TransactionFile(args.transaction_file,
                                        'w') as trans_file:
            trans_util.WriteToYamlFile(trans_file, change)

        log.status.Print(
            'Record removal appended to transaction at [{0}].'.format(
                args.transaction_file))
예제 #12
0
 def Run(self, args):
     with transaction_util.TransactionFile(
             args.transaction_file) as trans_file:
         return transaction_util.ChangeFromYamlFile(trans_file)