Пример #1
0
func (p postgresDb) addRecord(resource shaman.Resource) error {
	resources, err := p.listRecords()
	if err != nil {
		return err
	}

	for i := range resources {
		if resources[i].Domain == resource.Domain {
			// if domains match, check address
			for k := range resources[i].Records {
			next:
				for j := range resource.Records {
					// check if the record exists...
					if resource.Records[j].RType == resources[i].Records[k].RType &&
						resource.Records[j].Address == resources[i].Records[k].Address &&
						resource.Records[j].Class == resources[i].Records[k].Class {
						// if so, skip
						config.Log.Trace("Record exists in persistent, skipping...")
						resource.Records = append(resource.Records[:i], resource.Records[i+1:]...)
						goto next
					}
				}
			}
		}
	}

	// add records
	for i := range resource.Records {
		config.Log.Trace("Adding record to database...")
		_, err = p.pg.Exec(fmt.Sprintf(`
INSERT INTO records(domain, address, ttl, class, type)
VALUES('%v', '%v', '%v', '%v', '%v')`,
			resource.Domain, resource.Records[i].Address, resource.Records[i].TTL,
			resource.Records[i].Class, resource.Records[i].RType))
		if err != nil {
			return fmt.Errorf("Failed to insert into records table - %v", err)
		}
	}

	return nil
}