2024-03-13 18:06:11 +00:00
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 } `
} ;
2024-06-07 16:09:57 +00:00
if ( sails . config . custom . fleetApiOptionalCookie ) {
headers [ 'Cookie' ] = sails . config . custom . fleetApiOptionalCookie ;
}
2024-03-13 18:06:11 +00:00
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. ` ) ;
}
}
} ;