import docker from './docker' import proc from './proc' export interface Integration { name: string preflight: () => Promise sighup?: () => Promise restart?: () => Promise } // Because we previously supported the Docker integration by // checking for the HEADSCALE_CONTAINER variable, we need to // check for it here as well. // // This ensures that when people upgrade from older versions // of Headplane, they don't explicitly need to define the new // HEADSCALE_INTEGRATION variable that is needed to configure // an integration. export async function checkIntegration() { let integration = process.env.HEADSCALE_INTEGRATION ?.trim() .toLowerCase() // Old HEADSCALE_CONTAINER variable upgrade path if (!integration && process.env.HEADSCALE_CONTAINER) { integration = 'docker' } if (!integration) { console.log('Running Headplane without any integrations') return } let module: Integration | undefined try { module = getIntegration(integration) await module.preflight() } catch (error) { console.error('Failed to load integration', error) return } return module } function getIntegration(name: string) { switch (name) { case 'docker': { return docker } case 'proc': { return proc } default: { throw new Error(`Unknown integration: ${name}`) } } }