Automating Bulk Deletion of Cloudflare DNS Records using Node.js and Axios
Bulk Delete Cloudflare DNS Records
Introduction:
Cloudflare is a popular service that provides various features, including DNS management. As your online presence grows, managing DNS records can become a time consuming task, especially when dealing with numerous records. This article will guide you through the process of automating the bulk deletion of Cloudflare DNS records using a Node.js script powered by the Axios library.
Prerequisites:
Before getting started, ensure you have the following prerequisites installed on your system:
1. Node.js: Download and install Node.js from [nodejs.org](https://nodejs.org/).
2. Axios: Axios is a promise-based HTTP client for the browser and Node.js. Install it using the following command in your terminal or command prompt:
npm install axios
Script Overview:
The provided Node.js script utilizes the Axios library to interact with Cloudflare’s API for managing DNS records. It consists of three main functions:
1. getDnsRecords: Fetches a list of DNS records associated with your Cloudflare account.
2. deleteDNSRecord: Deletes a specific DNS record identified by its record ID.
3. deleteDNSRecords: Combines the above functions to delete all DNS records associated with your Cloudflare account.
Script Usage:
1. Obtain API Key, Email, and Zone ID:
– Log in to your Cloudflare account.
– Navigate to the API section and generate an API key.
– Note your email associated with the Cloudflare account.
– Obtain your Zone ID from the Cloudflare dashboard.
2. Insert Credentials:
– Open the script in a text editor.
– Replace ‘API_KEY’, ‘YOUR_EMAIL’, and ‘YOUR_ZONE_ID’ with your actual Cloudflare API key, email, and Zone ID, respectively.
3. Run the Script:
– Open a terminal or command prompt.
– Navigate to the directory containing the script.
– Run the script using the following command:
node scriptFileName.js
Replace `scriptFileName.js` with the actual name of your script file.
4. Monitor Deletion Process:
– The script will display information about each deleted record, including the record ID and the Cloudflare API response.
Conclusion:
Automating the bulk deletion of Cloudflare DNS records using this Node.js script can save time and effort, especially when managing a large number of records. Regularly cleaning up unused or unnecessary records contributes to a more organized and efficient DNS management system. Feel free to customize the script further to suit your specific requirements or integrate it into your existing workflow.
Script:
const axios = require(‘axios’);
const apiKey = ‘API_KEY‘;
const email = ‘YOUR_EMAIL‘;
const zoneId = ‘YOUR_ZONE_ID‘;
const apiUrl = `https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`;
const getDnsRecords = async () => {
const headers = {
‘X-Auth-Email’: email,
‘X-Auth-Key’: apiKey,
‘Content-Type’: ‘application/json’,
};
let allRecords = [];
let page = 1;
while (true) {
try {
const response = await axios.get(apiUrl, {
params: { page },
headers,
});
if (response.status === 200) {
const records = response.data.result.map(record => record.id);
allRecords = allRecords.concat(records);
// Check if there are more pages
if (response.data.result_info && response.data.result_info.page < response.data.result_info.total_pages) {
page++;
} else {
break;
}
} else {
console.error(`Failed to get DNS records. Status: ${response.status}, Error: ${JSON.stringify(response.data.errors)}`);
break;
}
} catch (error) {
console.error(`Error: ${error.message}`);
break;
}
}
return allRecords;
};
const deleteDNSRecord = async (recordId) => {
const url = `https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records/${recordId}`;
const headers = {
‘Content-Type’: ‘application/json’,
‘X-Auth-Key’: apiKey,
‘X-Auth-Email’: email,
};
try {
const response = await axios.delete(url, { headers });
console.log(`Record ID ${recordId} deleted successfully. Response:`, response.data);
} catch (error) {
console.error(`Error deleting record ID ${recordId}:`, error.response ? error.response.data : error.message);
}
};
const deleteDNSRecords = async () => {
const dnsRecordIds = await getDnsRecords();
if (dnsRecordIds.length > 0) {
console.log(‘Deleting DNS Records:’);
for (const recordId of dnsRecordIds) {
await deleteDNSRecord(recordId);
}
} else {
console.log(‘No DNS records found.’);
}
};
deleteDNSRecords();