make upsert remove the additional records

This commit is contained in:
Girish Ramakrishnan
2022-02-04 10:22:22 -08:00
parent 856b23d940
commit 7601b4919a
2 changed files with 24 additions and 5 deletions
+15 -5
View File
@@ -82,7 +82,7 @@ async function upsert(domainObject, location, type, values) {
debug('upsert: %s for zone %s of type %s with values %j', name, zoneName, type, values);
const result = await getZoneRecords(domainConfig, zoneName, name, type);
const records = await getZoneRecords(domainConfig, zoneName, name, type);
// used to track available records to update instead of create
let i = 0, recordIds = [];
@@ -103,7 +103,7 @@ async function upsert(domainObject, location, type, values) {
ttl: 30 // Recent DO DNS API break means this value must atleast be 30
};
if (i >= result.length) {
if (i >= records.length) {
const [error, response] = await safe(superagent.post(DIGITALOCEAN_ENDPOINT + '/v2/domains/' + zoneName + '/records')
.set('Authorization', 'Bearer ' + domainConfig.token)
.send(data)
@@ -116,9 +116,9 @@ async function upsert(domainObject, location, type, values) {
if (response.statusCode === 422) throw new BoxError(BoxError.BAD_FIELD, response.body.message);
if (response.statusCode !== 201) throw new BoxError(BoxError.EXTERNAL_ERROR, formatError(response));
recordIds.push(safe.query(result.body, 'domain_record.id'));
recordIds.push(safe.query(records.body, 'domain_record.id'));
} else {
const [error, response] = await safe(superagent.put(DIGITALOCEAN_ENDPOINT + '/v2/domains/' + zoneName + '/records/' + result[i].id)
const [error, response] = await safe(superagent.put(DIGITALOCEAN_ENDPOINT + '/v2/domains/' + zoneName + '/records/' + records[i].id)
.set('Authorization', 'Bearer ' + domainConfig.token)
.send(data)
.timeout(30 * 1000)
@@ -132,10 +132,20 @@ async function upsert(domainObject, location, type, values) {
if (response.statusCode === 422) throw new BoxError(BoxError.BAD_FIELD, response.body.message);
if (response.statusCode !== 200) throw new BoxError(BoxError.EXTERNAL_ERROR, formatError(response));
recordIds.push(safe.query(result.body, 'domain_record.id'));
recordIds.push(safe.query(records.body, 'domain_record.id'));
}
}
for (let j = values.length + 1; j < records.length; j++) {
const [error] = await safe(superagent.del(`${DIGITALOCEAN_ENDPOINT}/v2/domains/${zoneName}/records/${records[j].id}`)
.set('Authorization', 'Bearer ' + domainConfig.token)
.timeout(30 * 1000)
.retry(5)
.ok(() => true));
if (error) debug(`upsert: error removing record ${records[j].id}: ${error.message}`);
}
debug('upsert: completed with recordIds:%j', recordIds);
}