KASM-3512 adding select dropdown during installation to force a GPU on all containers

This commit is contained in:
ryan.kuba 2022-11-01 15:44:15 -07:00
parent 76e559fe02
commit 1e5706208c
2 changed files with 34 additions and 1 deletions

View file

@ -19,6 +19,7 @@ var arch = os.arch().replace('x64', 'amd64');
var baseUrl = process.env.SUBFOLDER || '/';
var version = process.env.VERSION || 'stable';
var port = process.env.KASM_PORT || '443';
const { spawn } = require('node:child_process');
var EULA;
var images;
// Grab installer variables
@ -68,6 +69,15 @@ io.on('connection', async function (socket) {
imagesD.images[image].hidden = true;
}
}
if (installSettings.forceGpu !== 'disabled') {
let card = installSettings.forceGpu.slice(-1);
let render = (Number(card) + 128).toString();
console.log(card, render);
for await (let image of Object.keys(images.images)) {
imagesD.images[image]['run_config'] = '{"environment":{"KASM_EGL_CARD":"/dev/dri/card' + card + '","KASM_RENDERD":"/dev/dri/renderD' + render + '"},"devices":["/dev/dri/card' + card + ':/dev/dri/card' + card + ':rwm","/dev/dri/renderD' + render + ':/dev/dri/renderD' + render + ':rwm"]}'
imagesD.images[image]['exec_config'] = '{"first_launch":{"user":"root","cmd": "bash -c \'chown -R kasm-user:kasm-user /dev/dri/*\'"}}'
}
}
let yamlStr = yaml.dump(imagesD);
await fsw.writeFile('/kasm_release/conf/database/seed_data/default_images_' + arch + '.yaml', yamlStr);
let cmd = pty.spawn('/bin/bash', installFlags);
@ -92,7 +102,18 @@ io.on('connection', async function (socket) {
dashinfo['port'] = port;
socket.emit('renderdash', dashinfo);
} else {
socket.emit('renderinstall', [EULA, images]);
let gpuData = [];
let gpuCmd = spawn('/gpuinfo.sh');
gpuCmd.stdout.on('data', function(data) {
gpuData.push(data);
});
gpuCmd.on('close', function(code) {
if (code == 0) {
socket.emit('renderinstall', [EULA, images, JSON.parse(gpuData.join(''))]);
} else {
socket.emit('renderinstall', [EULA, images, {}]);
}
});
}
}
// Disable wizard

View file

@ -1,6 +1,7 @@
// Variables
var EULA;
var images;
var gpus;
var term;
var installImages = [];
var installSettings = {};
@ -73,6 +74,7 @@ function renderInstall(data) {
titleChange('EULA');
EULA = data[0];
images = data[1];
gpus = data[2];
let EULADiv = $('<div>', {id: 'EULA'}).text(EULA);
$('#container').append(EULADiv);
let EULAButton = $('<button>', {id: 'EULAButton', onclick: 'pickSettings()', class: 'btn btn-default btn-ghost'}).text('Accept and continue');
@ -195,6 +197,14 @@ async function pickSettings() {
$('<label>', {for: 'noDownload'}).text('Skip Image Download: '),
$('<input>', {name: 'noDownload', id: 'noDownload', type: 'checkbox'})
]);
let gpuOptions = [$('<option>', {value: 'disabled'}).text('Disabled')];
for await (let card of Object.keys(gpus)) {
gpuOptions.push($('<option>', {value: card}).text(card + ' - ' + gpus[card]));
}
let forceGpu = $('<div>', {class: 'form-group'}).append([
$('<label>', {for: 'forceGpu'}).text('Use GPU on all images: '),
$('<select>', {name: 'forceGpu', id: 'forceGpu',}).append(gpuOptions)
]);
let submit = $('<div>', {class: 'form-group'}).append([
$('<input>', {name: 'submit', type: 'submit', value: 'Next', class: 'btn btn-default btn-ghost'})
]);
@ -203,6 +213,7 @@ async function pickSettings() {
userPass,
useRolling,
noDownload,
forceGpu,
submit
]);
form.append(fieldset);
@ -214,6 +225,7 @@ async function pickSettings() {
installSettings.userPass = $('#userPass').val();
installSettings.useRolling = $('#useRolling').is(":checked");
installSettings.noDownload = $('#noDownload').is(":checked");
installSettings.forceGpu = $('#forceGpu').val();
pickImages();
});
}