fleet/ee/vulnerability-dashboard/scripts/replace-placeholder-host-values.js

91 lines
3.2 KiB
JavaScript

module.exports = {
friendlyName: 'Replace placeholder host values',
description: 'This script will update Host records to have the correct hardwareSerialNumber and uuid values.',
extendedDescription: 'This script was designed to be run after the new columns have been added to the Host table, and all existing rows have had these column set to a placeholder value.',
inputs: {
dry: {
description: 'Do a dry run instead of actually modifying the database?',
type: 'boolean',
defaultsTo: false
},
},
fn: async function ({dry}) {
let assert = require('assert');
if (!sails.config.custom.fleetBaseUrl || !sails.config.custom.fleetApiToken) {
throw new Error('sails.config.custom.fleetBaseUrl and sails.config.custom.fleetApiToken must both be provided.');
}
let fleetBaseUrl = sails.config.custom.fleetBaseUrl;
let headers = {
Authorization: `Bearer ${sails.config.custom.fleetApiToken}`
};
if (sails.config.custom.fleetApiOptionalCookie) {
headers['Cookie'] = sails.config.custom.fleetApiOptionalCookie;
}
let page = 0;
let HOSTS_PAGE_SIZE = 100;
let hostRecordsToUpdate = [];
await sails.helpers.flow.until(async()=>{
let hosts;
let byHostFleetApidsSeenInLatestFleetScan = {};
{
let responseData = await sails.helpers.http.get.with({
url: '/api/v1/fleet/hosts',
data: { page: page, per_page: HOSTS_PAGE_SIZE},//eslint-disable-line camelcase
baseUrl: fleetBaseUrl,
headers
})
.timeout(120000)
.retry(['requestFailed', {name: 'TimeoutError'}]);
assert(_.isArray(responseData.hosts));
assert(responseData.hosts.every((host) => _.isNumber(host.id)));
hosts = responseData.hosts;
}//∫
for (let host of hosts) {
byHostFleetApidsSeenInLatestFleetScan[host.id] = {
fleetApid: host.id,
hardwareSerialNumber: host.hardware_serial !== '' ? host.hardware_serial : 'N/A',// Note: If a host does not have a hardware_serial value (e.g., ChromeOS hosts), this value will be set to 'N/A'.
uuid: host.uuid,
};//∞
}
let recognizedHosts = await Host.find({ fleetApid: { in: Object.keys(byHostFleetApidsSeenInLatestFleetScan).map((key)=>Number(key)) } });
for (let $host of recognizedHosts){
if( $host.uuid === '?' || $host.hardwareSerialNumber === '?') { // If you used something else for the placeholder value, modify this line
hostRecordsToUpdate.push(byHostFleetApidsSeenInLatestFleetScan[$host.fleetApid]);
}
}
if(hosts.length < HOSTS_PAGE_SIZE) {
return true;
}
});
if(dry) {
sails.log(`Dry run: Would have updated ${hostRecordsToUpdate.length} host records with placeholder uuid and hardwareSerialNumber values.`);
} else {
for(let updatedHost of hostRecordsToUpdate){
await Host.updateOne({fleetApid: updatedHost.fleetApid}).set({uuid: updatedHost.uuid, hardwareSerialNumber: updatedHost.hardwareSerialNumber});
}
sails.log(`Updated ${hostRecordsToUpdate.length} host records with real uuid and hardwareSerialNumber values.`);
}
}
};