mirror of
https://github.com/kasmtech/kasm-install-wizard.git
synced 2026-01-23 02:34:27 +00:00
Merge pull request #4 from kasmtech/feature/KASM-4200-113-updates
KASM-4200 Updates for 1.13 release
This commit is contained in:
commit
e599398710
2 changed files with 39 additions and 88 deletions
71
index.js
71
index.js
|
|
@ -60,7 +60,7 @@ async function installerBlobs() {
|
|||
installerBlobs();
|
||||
|
||||
// GPU image yaml merging
|
||||
async function setGpu(imagesD) {
|
||||
async function setGpu(imagesI) {
|
||||
if (upgradeSettings['forceGpu'] !== undefined) {
|
||||
installSettings = upgradeSettings;
|
||||
}
|
||||
|
|
@ -73,24 +73,17 @@ async function setGpu(imagesD) {
|
|||
if (gpuName.indexOf('NVIDIA') !== -1) {
|
||||
baseRun = JSON.parse('{"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"],"device_requests":[{"driver": "","count": -1,"device_ids": null,"capabilities":[["gpu"]],"options":{}}]}');
|
||||
} else {
|
||||
baseRun = JSON.parse('{"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"]}');
|
||||
baseRun = JSON.parse('{"environment":{"DRINODE":"/dev/dri/renderD' + render + '", "HW3D": true},"devices":["/dev/dri/card' + card + ':/dev/dri/card' + card + ':rwm","/dev/dri/renderD' + render + ':/dev/dri/renderD' + render + ':rwm"]}');
|
||||
}
|
||||
let baseExec = JSON.parse('{"first_launch":{"user":"root","cmd": "bash -c \'chown -R kasm-user:kasm-user /dev/dri/*\'"}}');
|
||||
for await (let image of Object.keys(images.images)) {
|
||||
if (imagesD.images[image]['run_config']) {
|
||||
finalRun = _.merge(JSON.parse(imagesD.images[image]['run_config']), baseRun)
|
||||
} else {
|
||||
finalRun = baseRun;
|
||||
}
|
||||
if (imagesD.images[image]['exec_config']) {
|
||||
finalExec = _.merge(JSON.parse(imagesD.images[image]['exec_config']), baseExec)
|
||||
} else {
|
||||
finalExec = baseExec;
|
||||
}
|
||||
imagesD.images[image]['run_config'] = JSON.stringify(finalRun);
|
||||
imagesD.images[image]['exec_config'] = JSON.stringify(finalExec);
|
||||
for (var i=0; i<imagesI.images.length; i++) {
|
||||
console.log(imagesI.images[i]['run_config']);
|
||||
finalRun = _.merge(imagesI.images[i]['run_config'], baseRun)
|
||||
finalExec = _.merge(imagesI.images[i]['exec_config'], baseExec)
|
||||
imagesI.images[i]['run_config'] = finalRun;
|
||||
imagesI.images[i]['exec_config'] = finalExec;
|
||||
}
|
||||
return imagesD;
|
||||
return imagesI;
|
||||
}
|
||||
|
||||
//// Http server ////
|
||||
|
|
@ -111,37 +104,19 @@ io.on('connection', async function (socket) {
|
|||
async function install(data) {
|
||||
// Determine install settings
|
||||
installSettings = data[0];
|
||||
let imagesI = data[1];
|
||||
let imagesD = images;
|
||||
installFlags = ['/kasm_release/install.sh', '-A', '-B' ,'-H', '-e', '-L', port, '-P', installSettings.adminPass, '-U', installSettings.userPass];
|
||||
if (installSettings.useRolling == true) {
|
||||
installFlags.push('-O');
|
||||
}
|
||||
if ((installSettings.noDownload == true) || (imagesI == false)) {
|
||||
installFlags.push('-u');
|
||||
}
|
||||
if ((imagesI.hasOwnProperty('images')) && (Object.keys(imagesI.images).length < 10)) {
|
||||
var imagesI = data[1];
|
||||
installFlags = ['/kasm_release/install.sh', '-W', '-A', '-B' ,'-H', '-e', '-L', port, '-P', installSettings.adminPass, '-U', installSettings.userPass];
|
||||
if ((imagesI.hasOwnProperty('images')) && (imagesI.images.length < 10)) {
|
||||
installFlags.push('-b');
|
||||
}
|
||||
|
||||
// Flag the images properly based on selection
|
||||
for await (let image of Object.keys(images.images)) {
|
||||
if ((imagesI.hasOwnProperty('images')) && (imagesI.images.hasOwnProperty(image))) {
|
||||
imagesD.images[image].enabled = true;
|
||||
imagesD.images[image].hidden = false;
|
||||
} else {
|
||||
imagesD.images[image].enabled = false;
|
||||
imagesD.images[image].hidden = true;
|
||||
}
|
||||
}
|
||||
|
||||
// GPU yaml merge
|
||||
if (installSettings.forceGpu !== 'disabled') {
|
||||
imagesD = await setGpu(imagesD);
|
||||
imagesI = await setGpu(imagesI);
|
||||
}
|
||||
|
||||
// Write finalized image data
|
||||
let yamlStr = yaml.dump(imagesD);
|
||||
let yamlStr = yaml.dump(imagesI);
|
||||
await fsw.writeFile('/kasm_release/conf/database/seed_data/default_images_' + arch + '.yaml', yamlStr);
|
||||
|
||||
// Copy over version
|
||||
|
|
@ -163,8 +138,7 @@ io.on('connection', async function (socket) {
|
|||
async function upgrade(data) {
|
||||
// Determine upgrade settings
|
||||
upgradeSettings = data[0];
|
||||
let imagesI = data[1];
|
||||
let imagesD = images;
|
||||
var imagesI = data[1];
|
||||
upgradeFlags = ['/kasm_release/upgrade.sh', '-A', '-L', port];
|
||||
if (upgradeSettings.keepOldImages == true) {
|
||||
upgradeFlags.push('-K');
|
||||
|
|
@ -172,24 +146,13 @@ io.on('connection', async function (socket) {
|
|||
upgradeFlags.push('-U');
|
||||
}
|
||||
|
||||
// Flag the images properly based on selection
|
||||
for await (let image of Object.keys(images.images)) {
|
||||
if ((imagesI.hasOwnProperty('images')) && (imagesI.images.hasOwnProperty(image))) {
|
||||
imagesD.images[image].enabled = true;
|
||||
imagesD.images[image].hidden = false;
|
||||
} else {
|
||||
imagesD.images[image].enabled = false;
|
||||
imagesD.images[image].hidden = true;
|
||||
}
|
||||
}
|
||||
|
||||
// GPU yaml merge
|
||||
if (upgradeSettings.forceGpu !== 'disabled') {
|
||||
imagesD = await setGpu(imagesD);
|
||||
imagesI = await setGpu(imagesI);
|
||||
}
|
||||
|
||||
// Write finalized image data
|
||||
let yamlStr = yaml.dump(imagesD);
|
||||
let yamlStr = yaml.dump(imagesI);
|
||||
await fsw.writeFile('/kasm_release/conf/database/seed_data/default_images_' + arch + '.yaml', yamlStr);
|
||||
|
||||
// Copy over version
|
||||
|
|
|
|||
|
|
@ -27,15 +27,15 @@ async function install() {
|
|||
showTerminal()
|
||||
titleChange('Installing');
|
||||
// Create new object based on image selection
|
||||
let selectedImages = {images: {}};
|
||||
let selectedImages = {alembic_version: images.alembic_version, images: [], group_images: []};
|
||||
if (installImages.length == 0) {
|
||||
socket.emit('install', [installSettings, false]);
|
||||
} else {
|
||||
for await (let image of installImages) {
|
||||
if (images.images[image].hasOwnProperty('enabled')) {
|
||||
images.images[image].enabled = true;
|
||||
}
|
||||
Object.assign(selectedImages.images, {[image]: images.images[image]});
|
||||
let srcImage = images.images.find(x => x.friendly_name === image);
|
||||
srcImage['enabled'] = true;
|
||||
selectedImages.images.push(srcImage);
|
||||
selectedImages.group_images.push({image_id: srcImage.image_id, group_id: "68d557ac-4cac-42cc-a9f3-1c7c853de0f3"});
|
||||
}
|
||||
socket.emit('install', [installSettings, selectedImages]);
|
||||
}
|
||||
|
|
@ -46,15 +46,15 @@ async function upgrade() {
|
|||
showTerminal()
|
||||
titleChange('Upgrading');
|
||||
// Create new object based on image selection
|
||||
let selectedImages = {images: {}};
|
||||
let selectedImages = {alembic_version: images.alembic_version, images: [], group_images: []};
|
||||
if (installImages.length == 0) {
|
||||
socket.emit('upgrade', [upgradeSettings, false]);
|
||||
} else {
|
||||
for await (let image of installImages) {
|
||||
if (images.images[image].hasOwnProperty('enabled')) {
|
||||
images.images[image].enabled = true;
|
||||
}
|
||||
Object.assign(selectedImages.images, {[image]: images.images[image]});
|
||||
let srcImage = images.images.find(x => x.friendly_name === image);
|
||||
srcImage['enabled'] = true;
|
||||
selectedImages.images.push(srcImage);
|
||||
selectedImages.group_images.push({image_id: srcImage.image_id, group_id: "68d557ac-4cac-42cc-a9f3-1c7c853de0f3"});
|
||||
}
|
||||
socket.emit('upgrade', [upgradeSettings, selectedImages]);
|
||||
}
|
||||
|
|
@ -228,14 +228,6 @@ async function pickSettings() {
|
|||
$('<label>', {for: 'userPass'}).text('user@kasm.local Password: '),
|
||||
$('<input>', {name: 'userPass', id: 'userPass', type: 'password', placeholder: 'required'}).prop('required',true)
|
||||
]);
|
||||
let useRolling = $('<div>', {class: 'form-group'}).append([
|
||||
$('<label>', {for: 'useRolling'}).text('Use Rolling Images: '),
|
||||
$('<input>', {name: 'useRolling', id: 'useRolling', type: 'checkbox'})
|
||||
]);
|
||||
let noDownload = $('<div>', {class: 'form-group'}).append([
|
||||
$('<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 + '|' + gpus[card]}).text(card + ' - ' + gpus[card]));
|
||||
|
|
@ -250,8 +242,6 @@ async function pickSettings() {
|
|||
fieldset.append([
|
||||
adminPass,
|
||||
userPass,
|
||||
useRolling,
|
||||
noDownload,
|
||||
forceGpu,
|
||||
submit
|
||||
]);
|
||||
|
|
@ -262,8 +252,6 @@ async function pickSettings() {
|
|||
e.preventDefault();
|
||||
installSettings.adminPass = $('#adminPass').val();
|
||||
installSettings.userPass = $('#userPass').val();
|
||||
installSettings.useRolling = $('#useRolling').is(":checked");
|
||||
installSettings.noDownload = $('#noDownload').is(":checked");
|
||||
installSettings.forceGpu = $('#forceGpu').val();
|
||||
pickImages(false);
|
||||
});
|
||||
|
|
@ -323,15 +311,15 @@ async function pickImages(upgrade) {
|
|||
titleChange('Image Selection');
|
||||
let imagesDiv = $('<div>', {class: 'cardcontainer', id: 'images'});
|
||||
$('#container').append(imagesDiv);
|
||||
for await (let image of Object.keys(images.images).sort(Intl.Collator().compare)) {
|
||||
let imageName = $('<p>').text(image);
|
||||
for await (let image of images.images) {
|
||||
let imageName = $('<p>').text(image.friendly_name);
|
||||
let imageDiv = $('<div>', {
|
||||
class: 'card',
|
||||
id: image.replace(new RegExp(' ', 'g'), '_'),
|
||||
title: images.images[image].description,
|
||||
onclick: 'selectImage(\'' + image.replace(new RegExp(' ', 'g'), '_') + '\')'
|
||||
id: image.friendly_name.replace(new RegExp(' ', 'g'), '_').replace('.', '-'),
|
||||
title: image.description,
|
||||
onclick: 'selectImage(\'' + image.friendly_name.replace(new RegExp(' ', 'g'), '_').replace('.', '-') + '\')'
|
||||
}).append(imageName).css('filter', 'grayscale(100%)')
|
||||
let thumb = $('<img>', {class: 'thumb', src: 'public/' + images.images[image].image_src});
|
||||
let thumb = $('<img>', {class: 'thumb', src: 'public/' + image.image_src});
|
||||
imageDiv.append(thumb);
|
||||
$('#images').append(imageDiv);
|
||||
}
|
||||
|
|
@ -345,7 +333,7 @@ async function pickImages(upgrade) {
|
|||
|
||||
// Select an individual image
|
||||
function selectImage(image) {
|
||||
let imageKey = image.replace(new RegExp('_', 'g'), ' ');
|
||||
let imageKey = image.replace(new RegExp('_', 'g'), ' ').replace('-', '.');
|
||||
if (installImages.includes(imageKey)) {
|
||||
installImages = installImages.filter(e => e !== imageKey)
|
||||
$('#' + image).css({
|
||||
|
|
@ -366,8 +354,8 @@ function selectAll() {
|
|||
installImages = [];
|
||||
if (selected) {
|
||||
selected = false;
|
||||
for (let image of Object.keys(images.images)) {
|
||||
let imageElem = image.replace(new RegExp(' ', 'g'), '_');
|
||||
for (let image of images.images) {
|
||||
let imageElem = image.friendly_name.replace(new RegExp(' ', 'g'), '_').replace('.', '-');
|
||||
$('#' + imageElem).css({
|
||||
filter: 'grayscale(100%)',
|
||||
background: ''
|
||||
|
|
@ -375,9 +363,9 @@ function selectAll() {
|
|||
}
|
||||
} else {
|
||||
selected = true;
|
||||
for (let image of Object.keys(images.images)) {
|
||||
let imageElem = image.replace(new RegExp(' ', 'g'), '_');
|
||||
installImages.push(image);
|
||||
for (let image of images.images) {
|
||||
let imageElem = image.friendly_name.replace(new RegExp(' ', 'g'), '_').replace('.', '-');
|
||||
installImages.push(image.friendly_name);
|
||||
$('#' + imageElem).css({
|
||||
filter: '',
|
||||
background: '#89cff0'
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue