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)
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
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))
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))
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)
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))
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
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))
def Run(self, args): with transaction_util.TransactionFile( args.transaction_file) as trans_file: return transaction_util.ChangeFromYamlFile(trans_file)