From 7c5d90fe40d199f174aae12f4225024c5262cd1d Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Fri, 1 Mar 2019 09:50:37 +0100 Subject: [PATCH] feat(xo-server/createCloudInit): support network config (#3997) * feat(xo-server/createCloudInit): support network config See #3872 * Update index.js --- packages/xo-server/src/api/vm.js | 16 ++++++++++++++-- packages/xo-server/src/xapi/index.js | 14 ++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/packages/xo-server/src/api/vm.js b/packages/xo-server/src/api/vm.js index 2dd281aa0..ae3fa07a6 100644 --- a/packages/xo-server/src/api/vm.js +++ b/packages/xo-server/src/api/vm.js @@ -1461,14 +1461,25 @@ getCloudInitConfig.resolve = { // ------------------------------------------------------------------- -export async function createCloudInitConfigDrive({ vm, sr, config, coreos }) { +export async function createCloudInitConfigDrive({ + config, + coreos, + networkConfig, + sr, + vm, +}) { const xapi = this.getXapi(vm) if (coreos) { // CoreOS is a special CloudConfig drive created by XS plugin await xapi.createCoreOsCloudInitConfigDrive(vm._xapiId, sr._xapiId, config) } else { // use generic Cloud Init drive - await xapi.createCloudInitConfigDrive(vm._xapiId, sr._xapiId, config) + await xapi.createCloudInitConfigDrive( + vm._xapiId, + sr._xapiId, + config, + networkConfig + ) } } @@ -1476,6 +1487,7 @@ createCloudInitConfigDrive.params = { vm: { type: 'string' }, sr: { type: 'string' }, config: { type: 'string' }, + networkConfig: { type: 'string', optional: true }, } createCloudInitConfigDrive.resolve = { diff --git a/packages/xo-server/src/xapi/index.js b/packages/xo-server/src/xapi/index.js index ea074279c..775cb8b99 100644 --- a/packages/xo-server/src/xapi/index.js +++ b/packages/xo-server/src/xapi/index.js @@ -2361,8 +2361,16 @@ export default class Xapi extends XapiBase { } // Generic Config Drive + // + // https://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html @deferrable - async createCloudInitConfigDrive($defer, vmId, srId, config) { + async createCloudInitConfigDrive( + $defer, + vmId, + srId, + userConfig, + networkConfig + ) { const vm = this.getObject(vmId) const sr = this.getObject(srId) @@ -2380,7 +2388,9 @@ export default class Xapi extends XapiBase { await Promise.all([ fs.writeFile('meta-data', 'instance-id: ' + vm.uuid + '\n'), - fs.writeFile('user-data', config), + fs.writeFile('user-data', userConfig), + networkConfig !== undefined && + fs.writeFile('network-config', networkConfig), ]) // ignore errors, I (JFT) don't understand why they are emitted