mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-06-02 15:30:50 +00:00
Renamed server.id and serverId into controller.id and controllerId and modified the all unit test cases
This commit is contained in:
parent
56a22ec5c8
commit
ca601e410b
@ -17,25 +17,25 @@ export class ServersPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async clickAddServer() {
|
async clickAddServer() {
|
||||||
let serversTable = await this.checkServersTable();
|
let controllerTable = await this.checkControllersTable();
|
||||||
if (serversTable.length === 0) {
|
if (controllerTable.length === 0) {
|
||||||
let buttons = await browser.driver.findElements(by.className('mat-button mat-button-base'));
|
let buttons = await browser.driver.findElements(by.className('mat-button mat-button-base'));
|
||||||
await buttons[3].click();
|
await buttons[3].click();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
checkServersTable() {
|
checkControllersTable() {
|
||||||
return browser.driver.findElements(by.css('mat-cell'));
|
return browser.driver.findElements(by.css('mat-cell'));
|
||||||
}
|
}
|
||||||
|
|
||||||
async navigateToServerProjects() {
|
async navigateToServerProjects() {
|
||||||
this.helper.sleep(2000);
|
this.helper.sleep(2000);
|
||||||
let hyperlinks = await browser.driver.findElements(by.css('a.table-link'));
|
let hyperlinks = await browser.driver.findElements(by.css('a.table-link'));
|
||||||
let serverLink;
|
let controllerLink;
|
||||||
await this.helper.asyncForEach(hyperlinks, async (element) => {
|
await this.helper.asyncForEach(hyperlinks, async (element) => {
|
||||||
let text = await element.getText();
|
let text = await element.getText();
|
||||||
if (text === '127.0.0.1') serverLink = element;
|
if (text === '127.0.0.1') controllerLink = element;
|
||||||
});
|
});
|
||||||
await serverLink.click();
|
await controllerLink.click();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,21 +4,21 @@ import { ProjectsPage } from './helpers/project.po';
|
|||||||
import { ServersPage } from './helpers/server.po';
|
import { ServersPage } from './helpers/server.po';
|
||||||
|
|
||||||
describe('Project map page', () => {
|
describe('Project map page', () => {
|
||||||
let serversPage: ServersPage;
|
let controllersPage: ServersPage;
|
||||||
let projectsPage: ProjectsPage;
|
let projectsPage: ProjectsPage;
|
||||||
let projectMapPage: ProjectMapPage;
|
let projectMapPage: ProjectMapPage;
|
||||||
let helper: TestHelper;
|
let helper: TestHelper;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
serversPage = new ServersPage();
|
controllersPage = new ServersPage();
|
||||||
projectsPage = new ProjectsPage();
|
projectsPage = new ProjectsPage();
|
||||||
projectMapPage = new ProjectMapPage();
|
projectMapPage = new ProjectMapPage();
|
||||||
helper = new TestHelper();
|
helper = new TestHelper();
|
||||||
|
|
||||||
serversPage.maximizeWindow();
|
controllersPage.maximizeWindow();
|
||||||
await serversPage.navigateToServersPage();
|
await controllersPage.navigateToServersPage();
|
||||||
await serversPage.clickAddServer();
|
await controllersPage.clickAddServer();
|
||||||
await serversPage.navigateToServerProjects();
|
await controllersPage.navigateToServerProjects();
|
||||||
await projectsPage.openAddProjectDialog();
|
await projectsPage.openAddProjectDialog();
|
||||||
helper.sleep(2000);
|
helper.sleep(2000);
|
||||||
await projectsPage.createProject();
|
await projectsPage.createProject();
|
||||||
|
@ -3,22 +3,22 @@ import { ProjectsPage } from './helpers/project.po';
|
|||||||
import { ServersPage } from './helpers/server.po';
|
import { ServersPage } from './helpers/server.po';
|
||||||
|
|
||||||
describe('Projects page', () => {
|
describe('Projects page', () => {
|
||||||
let serversPage: ServersPage;
|
let controllersPage: ServersPage;
|
||||||
let projectsPage: ProjectsPage;
|
let projectsPage: ProjectsPage;
|
||||||
let helper: TestHelper;
|
let helper: TestHelper;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
serversPage = new ServersPage();
|
controllersPage = new ServersPage();
|
||||||
projectsPage = new ProjectsPage();
|
projectsPage = new ProjectsPage();
|
||||||
helper = new TestHelper();
|
helper = new TestHelper();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('user should have possibility to create new project', async () => {
|
it('user should have possibility to create new project', async () => {
|
||||||
// arrange
|
// arrange
|
||||||
serversPage.maximizeWindow();
|
controllersPage.maximizeWindow();
|
||||||
await serversPage.navigateToServersPage();
|
await controllersPage.navigateToServersPage();
|
||||||
await serversPage.clickAddServer();
|
await controllersPage.clickAddServer();
|
||||||
await serversPage.navigateToServerProjects();
|
await controllersPage.navigateToServerProjects();
|
||||||
helper.sleep(2000);
|
helper.sleep(2000);
|
||||||
|
|
||||||
//act
|
//act
|
||||||
|
@ -10,7 +10,7 @@ describe('Servers page', () => {
|
|||||||
helper = new TestHelper();
|
helper = new TestHelper();
|
||||||
});
|
});
|
||||||
|
|
||||||
xit('user should have possibility to add server', async () => {
|
xit('user should have possibility to add controller', async () => {
|
||||||
// arrange
|
// arrange
|
||||||
page.maximizeWindow();
|
page.maximizeWindow();
|
||||||
await page.navigateToServersPage();
|
await page.navigateToServersPage();
|
||||||
@ -19,10 +19,10 @@ describe('Servers page', () => {
|
|||||||
let text = await page.getAddServerNotificationText();
|
let text = await page.getAddServerNotificationText();
|
||||||
|
|
||||||
// assert
|
// assert
|
||||||
expect(text).toBe("We've discovered GNS3 server on 127.0.0.1:3080, would you like to add to the list?");
|
expect(text).toBe("We've discovered GNS3 controller on 127.0.0.1:3080, would you like to add to the list?");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('user should see added server in the list', async () => {
|
it('user should see added controller in the list', async () => {
|
||||||
// arrange
|
// arrange
|
||||||
page.maximizeWindow();
|
page.maximizeWindow();
|
||||||
await page.navigateToServersPage();
|
await page.navigateToServersPage();
|
||||||
@ -30,7 +30,7 @@ describe('Servers page', () => {
|
|||||||
helper.sleep(1000);
|
helper.sleep(1000);
|
||||||
|
|
||||||
// act
|
// act
|
||||||
let firstRowOfServersTable = await page.checkServersTable();
|
let firstRowOfServersTable = await page.checkControllersTable();
|
||||||
let serverData = [];
|
let serverData = [];
|
||||||
await helper.asyncForEach(firstRowOfServersTable, async (element) => {
|
await helper.asyncForEach(firstRowOfServersTable, async (element) => {
|
||||||
serverData.push(await element.getText());
|
serverData.push(await element.getText());
|
||||||
|
144
local-server.js
144
local-server.js
@ -8,9 +8,9 @@ const { app } = require('electron')
|
|||||||
|
|
||||||
const isWin = /^win/.test(process.platform);
|
const isWin = /^win/.test(process.platform);
|
||||||
|
|
||||||
let runningServers = {};
|
let runningControllers = {};
|
||||||
|
|
||||||
exports.getLocalServerPath = async () => {
|
exports.getLocalControllerPath = async () => {
|
||||||
let binary = isWin ? 'gns3server.exe': 'gns3server';
|
let binary = isWin ? 'gns3server.exe': 'gns3server';
|
||||||
return findBinary('exe.', binary);
|
return findBinary('exe.', binary);
|
||||||
}
|
}
|
||||||
@ -20,21 +20,21 @@ exports.getUbridgePath = async () => {
|
|||||||
return findBinary('ubridge', binary);
|
return findBinary('ubridge', binary);
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.startLocalServer = async (server) => {
|
exports.startLocalController = async (controller) => {
|
||||||
return await run(server, {
|
return await run(controller, {
|
||||||
logStdout: true
|
logStdout: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.stopLocalServer = async (server) => {
|
exports.stopLocalServer = async (controller) => {
|
||||||
return await stop(server.name);
|
return await stop(controller.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.getRunningServers = () => {
|
exports.getrunningControllers = () => {
|
||||||
return Object.keys(runningServers);
|
return Object.keys(runningControllers);
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.stopAllLocalServers = async () => {
|
exports.stopAllLocalControllers = async () => {
|
||||||
return await stopAll();
|
return await stopAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,33 +77,33 @@ async function findBinaryInDirectory(baseDirectory, binaryDirectory, filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function getServerArguments(server, overrides, configPath) {
|
function getControllerArguments(controller, overrides, configPath) {
|
||||||
let serverArguments = [];
|
let controllerArguments = [];
|
||||||
if(server.host) {
|
if(controller.host) {
|
||||||
serverArguments.push('--host');
|
controllerArguments.push('--host');
|
||||||
serverArguments.push(server.host);
|
controllerArguments.push(controller.host);
|
||||||
}
|
}
|
||||||
if(server.port) {
|
if(controller.port) {
|
||||||
serverArguments.push('--port');
|
controllerArguments.push('--port');
|
||||||
serverArguments.push(server.port);
|
controllerArguments.push(controller.port);
|
||||||
}
|
}
|
||||||
|
|
||||||
serverArguments.push('--local');
|
controllerArguments.push('--local');
|
||||||
|
|
||||||
if(configPath) {
|
if(configPath) {
|
||||||
serverArguments.push('--config');
|
controllerArguments.push('--config');
|
||||||
serverArguments.push(configPath);
|
controllerArguments.push(configPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
return serverArguments;
|
return controllerArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getChannelForServer(server) {
|
function getChannelForController(controller) {
|
||||||
return `local-server-run-${server.name}`;
|
return `local-controller-run-${controller.name}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function notifyStatus(status) {
|
function notifyStatus(status) {
|
||||||
ipcMain.emit('local-server-status-events', status);
|
ipcMain.emit('local-controller-status-events', status);
|
||||||
}
|
}
|
||||||
|
|
||||||
function filterOutput(line) {
|
function filterOutput(line) {
|
||||||
@ -120,44 +120,44 @@ function filterOutput(line) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function stopAll() {
|
async function stopAll() {
|
||||||
for(var serverName in runningServers) {
|
for(var controllerName in runningControllers) {
|
||||||
let result, error = await stop(serverName);
|
let result, error = await stop(controllerName);
|
||||||
}
|
}
|
||||||
console.log(`Stopped all servers`);
|
console.log(`Stopped all controllers`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function stop(serverName) {
|
async function stop(controllerName) {
|
||||||
let pid = undefined;
|
let pid = undefined;
|
||||||
|
|
||||||
const runningServer = runningServers[serverName];
|
const runningServer = runningControllers[controllerName];
|
||||||
|
|
||||||
if(runningServer !== undefined && runningServer.process) {
|
if(runningServer !== undefined && runningServer.process) {
|
||||||
pid = runningServer.process.pid;
|
pid = runningServer.process.pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`Stopping '${serverName}' with PID='${pid}'`);
|
console.log(`Stopping '${controllerName}' with PID='${pid}'`);
|
||||||
|
|
||||||
const stopped = new Promise((resolve, reject) => {
|
const stopped = new Promise((resolve, reject) => {
|
||||||
if(pid === undefined) {
|
if(pid === undefined) {
|
||||||
resolve(`Server '${serverName} is already stopped`);
|
resolve(`Controller '${controllerName} is already stopped`);
|
||||||
delete runningServers[serverName];
|
delete runningControllers[controllerName];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
kill(pid, (error) => {
|
kill(pid, (error) => {
|
||||||
if(error) {
|
if(error) {
|
||||||
console.error(`Error occured during stopping '${serverName}' with PID='${pid}'`);
|
console.error(`Error occured during stopping '${controllerName}' with PID='${pid}'`);
|
||||||
reject(error);
|
reject(error);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
delete runningServers[serverName];
|
delete runningControllers[controllerName];
|
||||||
console.log(`Stopped '${serverName}' with PID='${pid}'`);
|
console.log(`Stopped '${controllerName}' with PID='${pid}'`);
|
||||||
resolve(`Stopped '${serverName}' with PID='${pid}'`);
|
resolve(`Stopped '${controllerName}' with PID='${pid}'`);
|
||||||
|
|
||||||
notifyStatus({
|
notifyStatus({
|
||||||
serverName: serverName,
|
controllerName: controllerName,
|
||||||
status: 'stopped',
|
status: 'stopped',
|
||||||
message: `Server '${serverName}' stopped'`
|
message: `Controller '${controllerName}' stopped'`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -166,11 +166,11 @@ async function stop(serverName) {
|
|||||||
return stopped;
|
return stopped;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getIniFile(server) {
|
async function getIniFile(controller) {
|
||||||
return path.join(app.getPath('userData'), `gns3_server_${server.id}.ini`);
|
return path.join(app.getPath('userData'), `gns3_controller_${controller.id}.ini`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function configure(configPath, server) {
|
async function configure(configPath, controller) {
|
||||||
if(!fs.existsSync(configPath)) {
|
if(!fs.existsSync(configPath)) {
|
||||||
fs.closeSync(fs.openSync(configPath, 'w'));
|
fs.closeSync(fs.openSync(configPath, 'w'));
|
||||||
console.log(`Configuration file '${configPath}' has been created.`);
|
console.log(`Configuration file '${configPath}' has been created.`);
|
||||||
@ -178,20 +178,20 @@ async function configure(configPath, server) {
|
|||||||
|
|
||||||
var config = ini.parse(fs.readFileSync(configPath, 'utf-8'));
|
var config = ini.parse(fs.readFileSync(configPath, 'utf-8'));
|
||||||
|
|
||||||
if(server.path) {
|
if(controller.path) {
|
||||||
config.path = server.path;
|
config.path = controller.path;
|
||||||
}
|
}
|
||||||
if(server.host) {
|
if(controller.host) {
|
||||||
config.host = server.host;
|
config.host = controller.host;
|
||||||
}
|
}
|
||||||
if(server.port) {
|
if(controller.port) {
|
||||||
config.port = server.port;
|
config.port = controller.port;
|
||||||
}
|
}
|
||||||
if(server.ubridge_path) {
|
if(controller.ubridge_path) {
|
||||||
config.ubridge_path = server.ubridge_path;
|
config.ubridge_path = controller.ubridge_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.writeFileSync(configPath, ini.stringify(config, { section: 'Server' }));
|
fs.writeFileSync(configPath, ini.stringify(config, { section: 'Controller' }));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function setPATHEnv() {
|
async function setPATHEnv() {
|
||||||
@ -216,7 +216,7 @@ async function setPATHEnv() {
|
|||||||
process.env.PATH = extra.join(";");
|
process.env.PATH = extra.join(";");
|
||||||
}
|
}
|
||||||
|
|
||||||
async function run(server, options) {
|
async function run(controller, options) {
|
||||||
if(!options) {
|
if(!options) {
|
||||||
options = {};
|
options = {};
|
||||||
}
|
}
|
||||||
@ -226,34 +226,34 @@ async function run(server, options) {
|
|||||||
|
|
||||||
console.log(`Configuring`);
|
console.log(`Configuring`);
|
||||||
|
|
||||||
const configPath = await getIniFile(server);
|
const configPath = await getIniFile(controller);
|
||||||
await configure(configPath, server);
|
await configure(configPath, controller);
|
||||||
|
|
||||||
console.log(`Setting up PATH`);
|
console.log(`Setting up PATH`);
|
||||||
await setPATHEnv();
|
await setPATHEnv();
|
||||||
|
|
||||||
console.log(`Running '${server.path}'`);
|
console.log(`Running '${controller.path}'`);
|
||||||
|
|
||||||
let serverProcess = spawn(server.path, getServerArguments(server, {}, configPath));
|
let controllerProcess = spawn(controller.path, getControllerArguments(controller, {}, configPath));
|
||||||
|
|
||||||
notifyStatus({
|
notifyStatus({
|
||||||
serverName: server.name,
|
controllerName: controller.name,
|
||||||
status: 'started',
|
status: 'started',
|
||||||
message: `Server '${server.name}' started'`
|
message: `Controller '${controller.name}' started'`
|
||||||
});
|
});
|
||||||
|
|
||||||
runningServers[server.name] = {
|
runningControllers[controller.name] = {
|
||||||
process: serverProcess
|
process: controllerProcess
|
||||||
};
|
};
|
||||||
|
|
||||||
serverProcess.stdout.on('data', function(data) {
|
controllerProcess.stdout.on('data', function(data) {
|
||||||
const line = data.toString();
|
const line = data.toString();
|
||||||
const { isCritical, errorMessage } = filterOutput(line);
|
const { isCritical, errorMessage } = filterOutput(line);
|
||||||
if(isCritical) {
|
if(isCritical) {
|
||||||
notifyStatus({
|
notifyStatus({
|
||||||
serverName: server.name,
|
controllerName: controller.name,
|
||||||
status: 'stderr',
|
status: 'stderr',
|
||||||
message: `Server reported error: '${errorMessage}`
|
message: `Controller reported error: '${errorMessage}`
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,25 +262,25 @@ async function run(server, options) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
serverProcess.stderr.on('data', function(data) {
|
controllerProcess.stderr.on('data', function(data) {
|
||||||
if(logSterr) {
|
if(logSterr) {
|
||||||
console.log(data.toString());
|
console.log(data.toString());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
serverProcess.on('exit', (code, signal) => {
|
controllerProcess.on('exit', (code, signal) => {
|
||||||
notifyStatus({
|
notifyStatus({
|
||||||
serverName: server.name,
|
controllerName: controller.name,
|
||||||
status: 'errored',
|
status: 'errored',
|
||||||
message: `Server '${server.name}' has exited with status='${code}'`
|
message: `controller '${controller.name}' has exited with status='${code}'`
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
serverProcess.on('error', (err) => {
|
controllerProcess.on('error', (err) => {
|
||||||
notifyStatus({
|
notifyStatus({
|
||||||
serverName: server.name,
|
controllerName: controller.name,
|
||||||
status: 'errored',
|
status: 'errored',
|
||||||
message: `Server errored: '${err}`
|
message: `Controller errored: '${err}`
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -297,9 +297,9 @@ async function main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(ipcMain) {
|
if(ipcMain) {
|
||||||
ipcMain.on('local-server-run', async function (event, server) {
|
ipcMain.on('local-controller-run', async function (event, controller) {
|
||||||
const responseChannel = getChannelForServer();
|
const responseChannel = getChannelForController();
|
||||||
await run(server);
|
await run(controller);
|
||||||
event.sender.send(responseChannel, {
|
event.sender.send(responseChannel, {
|
||||||
success: true
|
success: true
|
||||||
});
|
});
|
||||||
|
@ -11,7 +11,7 @@ Bug Fixes & enhancements
|
|||||||
- symbol is not properly selected in change symbol dialog
|
- symbol is not properly selected in change symbol dialog
|
||||||
- issue when using the scroll wheel on the web console
|
- issue when using the scroll wheel on the web console
|
||||||
- missing settings for Docker nodes
|
- missing settings for Docker nodes
|
||||||
- error on servers page
|
- error on controllers page
|
||||||
|
|
||||||
What's new
|
What's new
|
||||||
- double click nodes to open the console
|
- double click nodes to open the console
|
||||||
@ -127,7 +127,7 @@ Bug Fixes
|
|||||||
- Fix for return command in console
|
- Fix for return command in console
|
||||||
- Fix for deleting links
|
- Fix for deleting links
|
||||||
- Fix for duplicating any node type
|
- Fix for duplicating any node type
|
||||||
- Fix for console errors on servers page
|
- Fix for console errors on controllers page
|
||||||
- Fix for console errors on projects page
|
- Fix for console errors on projects page
|
||||||
|
|
||||||
GNS3 Web UI 2019.2.0 v10
|
GNS3 Web UI 2019.2.0 v10
|
||||||
@ -140,12 +140,12 @@ What's New
|
|||||||
- Filtering devices with packet filters on topology summary
|
- Filtering devices with packet filters on topology summary
|
||||||
- Filtering devices with captures on topology summary
|
- Filtering devices with captures on topology summary
|
||||||
- View options taken from map configuration
|
- View options taken from map configuration
|
||||||
- Servers summary widget
|
- Controllers summary widget
|
||||||
- Ability to lock single item on the map
|
- Ability to lock single item on the map
|
||||||
- Editing & import & export config files
|
- Editing & import & export config files
|
||||||
- Context menu for inserted drawings
|
- Context menu for inserted drawings
|
||||||
- Ability to drag topology summary & servers summary & console widgets
|
- Ability to drag topology summary & controllers summary & console widgets
|
||||||
- Ability to resize topology summary & servers summary & console widgets
|
- Ability to resize topology summary & controllers summary & console widgets
|
||||||
- Option to show the grid
|
- Option to show the grid
|
||||||
- Option to snap to grid
|
- Option to snap to grid
|
||||||
- Usage instructions available from context menu
|
- Usage instructions available from context menu
|
||||||
|
@ -73,7 +73,7 @@ const routes: Routes = [
|
|||||||
path: 'controller/:controller_id/projects',
|
path: 'controller/:controller_id/projects',
|
||||||
component: ProjectsComponent,
|
component: ProjectsComponent,
|
||||||
canActivate: [LoginGuard],
|
canActivate: [LoginGuard],
|
||||||
resolve: { server: ServerResolve },
|
resolve: { controller: ServerResolve },
|
||||||
},
|
},
|
||||||
{ path: 'help', component: HelpComponent },
|
{ path: 'help', component: HelpComponent },
|
||||||
{ path: 'settings', component: SettingsComponent },
|
{ path: 'settings', component: SettingsComponent },
|
||||||
@ -86,7 +86,7 @@ const routes: Routes = [
|
|||||||
path: 'controller/:controller_id/project/:project_id/snapshots',
|
path: 'controller/:controller_id/project/:project_id/snapshots',
|
||||||
component: ListOfSnapshotsComponent,
|
component: ListOfSnapshotsComponent,
|
||||||
canActivate: [LoginGuard],
|
canActivate: [LoginGuard],
|
||||||
resolve: { server: ServerResolve },
|
resolve: { controller: ServerResolve },
|
||||||
},
|
},
|
||||||
{ path: 'controller/:controller_id/preferences', component: PreferencesComponent, canActivate: [LoginGuard] },
|
{ path: 'controller/:controller_id/preferences', component: PreferencesComponent, canActivate: [LoginGuard] },
|
||||||
// { path: 'controller/:controller_id/preferences/general', component: GeneralPreferencesComponent },
|
// { path: 'controller/:controller_id/preferences/general', component: GeneralPreferencesComponent },
|
||||||
|
@ -44,6 +44,6 @@
|
|||||||
<app-drawing-resizing></app-drawing-resizing>
|
<app-drawing-resizing></app-drawing-resizing>
|
||||||
<app-selection-control></app-selection-control>
|
<app-selection-control></app-selection-control>
|
||||||
<app-selection-select></app-selection-select>
|
<app-selection-select></app-selection-select>
|
||||||
<app-text-editor #textEditor [server]="server" [svg]="svg"></app-text-editor>
|
<app-text-editor #textEditor [controller]="controller" [svg]="svg"></app-text-editor>
|
||||||
<app-draggable-selection [svg]="svg"></app-draggable-selection>
|
<app-draggable-selection [svg]="svg"></app-draggable-selection>
|
||||||
<app-link-editing [svg]="svg"></app-link-editing>
|
<app-link-editing [svg]="svg"></app-link-editing>
|
||||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
@ -43,7 +43,7 @@ export class D3MapComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
@Input() drawings: Drawing[] = [];
|
@Input() drawings: Drawing[] = [];
|
||||||
@Input() symbols: Symbol[] = [];
|
@Input() symbols: Symbol[] = [];
|
||||||
@Input() project: Project;
|
@Input() project: Project;
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
|
|
||||||
@Input() width = 1500;
|
@Input() width = 1500;
|
||||||
@Input() height = 600;
|
@Input() height = 600;
|
||||||
|
@ -37,7 +37,7 @@ import { Node } from '../../models/node';
|
|||||||
export class TextEditorComponent implements OnInit, OnDestroy {
|
export class TextEditorComponent implements OnInit, OnDestroy {
|
||||||
@ViewChild('temporaryTextElement') temporaryTextElement: ElementRef;
|
@ViewChild('temporaryTextElement') temporaryTextElement: ElementRef;
|
||||||
@Input('svg') svg: SVGSVGElement;
|
@Input('svg') svg: SVGSVGElement;
|
||||||
@Input('server') server: Server;
|
@Input('controller') controller: Server;
|
||||||
|
|
||||||
leftPosition: string = '0px';
|
leftPosition: string = '0px';
|
||||||
topPosition: string = '0px';
|
topPosition: string = '0px';
|
||||||
@ -185,7 +185,7 @@ export class TextEditorComponent implements OnInit, OnDestroy {
|
|||||||
let link: Link = this.linksDataSource.get(this.editedLink.linkId);
|
let link: Link = this.linksDataSource.get(this.editedLink.linkId);
|
||||||
link.nodes.find((n) => n.node_id === this.editedNode.node_id).label.text = innerText;
|
link.nodes.find((n) => n.node_id === this.editedNode.node_id).label.text = innerText;
|
||||||
|
|
||||||
this.linkService.updateLink(this.server, link).subscribe((link: Link) => {
|
this.linkService.updateLink(this.controller, link).subscribe((link: Link) => {
|
||||||
rootElement
|
rootElement
|
||||||
.selectAll<SVGTextElement, TextElement>('text.editingMode')
|
.selectAll<SVGTextElement, TextElement>('text.editingMode')
|
||||||
.attr('visibility', 'visible')
|
.attr('visibility', 'visible')
|
||||||
|
@ -16,13 +16,13 @@ export class MapLink implements Indexed {
|
|||||||
suspend: boolean;
|
suspend: boolean;
|
||||||
link_style?: LinkStyle;
|
link_style?: LinkStyle;
|
||||||
|
|
||||||
distance: number; // this is not from server
|
distance: number; // this is not from controller
|
||||||
length: number; // this is not from server
|
length: number; // this is not from controller
|
||||||
source: MapNode; // this is not from server
|
source: MapNode; // this is not from controller
|
||||||
target: MapNode; // this is not from server
|
target: MapNode; // this is not from controller
|
||||||
|
|
||||||
isSelected = false; // this is not from server
|
isSelected = false; // this is not from controller
|
||||||
isMultiplied = false; // this is not from server
|
isMultiplied = false; // this is not from controller
|
||||||
x: number; // this is not from server
|
x: number; // this is not from controller
|
||||||
y: number; // this is not from server
|
y: number; // this is not from controller
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ describe('BundledServerFinderComponent', () => {
|
|||||||
let router: any;
|
let router: any;
|
||||||
let service: ServerService;
|
let service: ServerService;
|
||||||
let progressService: MockedProgressService = new MockedProgressService();
|
let progressService: MockedProgressService = new MockedProgressService();
|
||||||
let serverServiceMock: jasmine.SpyObj<ServerService>;
|
let controllerServiceMock: jasmine.SpyObj<ServerService>;
|
||||||
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
@ -26,7 +26,7 @@ describe('BundledServerFinderComponent', () => {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
serverServiceMock = jasmine.createSpyObj<ServerService>([
|
controllerServiceMock = jasmine.createSpyObj<ServerService>([
|
||||||
"getLocalServer"
|
"getLocalServer"
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ describe('BundledServerFinderComponent', () => {
|
|||||||
await TestBed.configureTestingModule({
|
await TestBed.configureTestingModule({
|
||||||
providers: [
|
providers: [
|
||||||
{ provide: Router, useValue: router },
|
{ provide: Router, useValue: router },
|
||||||
{ provide: ServerService, useValue: serverServiceMock },
|
{ provide: ServerService, useValue: controllerServiceMock },
|
||||||
{ provide: ProgressService, useValue: progressService },
|
{ provide: ProgressService, useValue: progressService },
|
||||||
],
|
],
|
||||||
declarations: [BundledServerFinderComponent],
|
declarations: [BundledServerFinderComponent],
|
||||||
@ -49,17 +49,17 @@ describe('BundledServerFinderComponent', () => {
|
|||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should create and redirect to server', fakeAsync(() => {
|
it('should create and redirect to controller', fakeAsync(() => {
|
||||||
const server = new Server();
|
const controller = new Server();
|
||||||
server.id = 99;
|
controller.id = 99;
|
||||||
serverServiceMock.getLocalServer.and.returnValue(
|
controllerServiceMock.getLocalServer.and.returnValue(
|
||||||
Promise.resolve(server)
|
Promise.resolve(controller)
|
||||||
);
|
);
|
||||||
expect(component).toBeTruthy();
|
expect(component).toBeTruthy();
|
||||||
tick(101)
|
tick(101)
|
||||||
fixture.detectChanges()
|
fixture.detectChanges()
|
||||||
fixture.whenStable().then(() => {
|
fixture.whenStable().then(() => {
|
||||||
expect(serverServiceMock.getLocalServer).toHaveBeenCalledWith('vps3.gns3.net',3000);
|
expect(controllerServiceMock.getLocalServer).toHaveBeenCalledWith('vps3.gns3.net',3000);
|
||||||
expect(router.navigate).toHaveBeenCalledWith(['/controller', 99, 'projects']);
|
expect(router.navigate).toHaveBeenCalledWith(['/controller', 99, 'projects']);
|
||||||
})
|
})
|
||||||
service = TestBed.inject(ServerService);
|
service = TestBed.inject(ServerService);
|
||||||
|
@ -31,8 +31,8 @@ export class BundledServerFinderComponent implements OnInit {
|
|||||||
port = 80;
|
port = 80;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.serverService.getLocalServer(this.document.location.hostname, port).then((server: Server) => {
|
this.serverService.getLocalServer(this.document.location.hostname, port).then((controller: Server) => {
|
||||||
this.router.navigate(['/controller', server.id, 'projects']);
|
this.router.navigate(['/controller', controller.id, 'projects']);
|
||||||
this.progressService.deactivate();
|
this.progressService.deactivate();
|
||||||
});
|
});
|
||||||
}, 100);
|
}, 100);
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<h1 mat-dialog-title>Add controller</h1>
|
<h1 mat-dialog-title>Add controller</h1>
|
||||||
<form [formGroup]="serverForm">
|
<form [formGroup]="controllerForm">
|
||||||
<div mat-dialog-content>
|
<div mat-dialog-content>
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<input matInput tabindex="1" formControlName="name" placeholder="Name" />
|
<input matInput tabindex="1" formControlName="name" placeholder="Name" />
|
||||||
<mat-error *ngIf="serverForm.get('name').hasError('required')">You must enter a value</mat-error>
|
<mat-error *ngIf="controllerForm.get('name').hasError('required')">You must enter a value</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<!-- <mat-form-field>
|
<!-- <mat-form-field>
|
||||||
@ -12,11 +12,11 @@
|
|||||||
</mat-select>
|
</mat-select>
|
||||||
</mat-form-field> -->
|
</mat-form-field> -->
|
||||||
|
|
||||||
<!-- <mat-form-field *ngIf="serverForm.get('location').value === 'local'">
|
<!-- <mat-form-field *ngIf="controllerForm.get('location').value === 'local'">
|
||||||
<input matInput tabindex="1" formControlName="path" placeholder="Local server path" />
|
<input matInput tabindex="1" formControlName="path" placeholder="Local controller path" />
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<mat-form-field *ngIf="serverForm.get('location').value === 'local'">
|
<mat-form-field *ngIf="controllerForm.get('location').value === 'local'">
|
||||||
<input matInput tabindex="1" formControlName="ubridge_path" placeholder="Ubridge path" />
|
<input matInput tabindex="1" formControlName="ubridge_path" placeholder="Ubridge path" />
|
||||||
</mat-form-field> -->
|
</mat-form-field> -->
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ export class AddControllerDialogComponent implements OnInit {
|
|||||||
];
|
];
|
||||||
locations = [];
|
locations = [];
|
||||||
|
|
||||||
serverForm = new FormGroup({
|
controllerForm = new FormGroup({
|
||||||
name: new FormControl('', [Validators.required]),
|
name: new FormControl('', [Validators.required]),
|
||||||
location: new FormControl(''),
|
location: new FormControl(''),
|
||||||
path: new FormControl(''),
|
path: new FormControl(''),
|
||||||
@ -57,7 +57,7 @@ export class AddControllerDialogComponent implements OnInit {
|
|||||||
async numberOfLocalServers() {
|
async numberOfLocalServers() {
|
||||||
const servers = await this.serverService.findAll();
|
const servers = await this.serverService.findAll();
|
||||||
|
|
||||||
return servers.filter((server) => server.location === 'local').length;
|
return servers.filter((controller) => controller.location === 'local').length;
|
||||||
}
|
}
|
||||||
|
|
||||||
getDefaultHost() {
|
getDefaultHost() {
|
||||||
@ -88,9 +88,9 @@ export class AddControllerDialogComponent implements OnInit {
|
|||||||
const defaultLocalServerPath = await this.getDefaultLocalServerPath();
|
const defaultLocalServerPath = await this.getDefaultLocalServerPath();
|
||||||
const defaultUbridgePath = await this.getDefaultUbridgePath();
|
const defaultUbridgePath = await this.getDefaultUbridgePath();
|
||||||
|
|
||||||
this.serverForm.get('location').valueChanges.subscribe((location: string) => {
|
this.controllerForm.get('location').valueChanges.subscribe((location: string) => {
|
||||||
const pathControl = this.serverForm.get('path');
|
const pathControl = this.controllerForm.get('path');
|
||||||
const ubridgePathControl = this.serverForm.get('ubridge_path');
|
const ubridgePathControl = this.controllerForm.get('ubridge_path');
|
||||||
|
|
||||||
if (location === 'local') {
|
if (location === 'local') {
|
||||||
pathControl.setValue(defaultLocalServerPath);
|
pathControl.setValue(defaultLocalServerPath);
|
||||||
@ -114,29 +114,29 @@ export class AddControllerDialogComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const defaultLocation = await this.getDefaultLocation();
|
const defaultLocation = await this.getDefaultLocation();
|
||||||
this.serverForm.get('location').setValue(defaultLocation);
|
this.controllerForm.get('location').setValue(defaultLocation);
|
||||||
this.serverForm.get('host').setValue(this.getDefaultHost());
|
this.controllerForm.get('host').setValue(this.getDefaultHost());
|
||||||
this.serverForm.get('port').setValue(this.getDefaultPort());
|
this.controllerForm.get('port').setValue(this.getDefaultPort());
|
||||||
}
|
}
|
||||||
|
|
||||||
onAddClick(): void {
|
onAddClick(): void {
|
||||||
if (!this.serverForm.valid) {
|
if (!this.controllerForm.valid) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const server: Server = Object.assign({}, this.serverForm.value);
|
const controller: Server = Object.assign({}, this.controllerForm.value);
|
||||||
this.serverService.checkServerVersion(server).subscribe(
|
this.serverService.checkServerVersion(controller).subscribe(
|
||||||
(serverInfo) => {
|
(serverInfo) => {
|
||||||
if (serverInfo.version.split('.')[0] >= 3) {
|
if (serverInfo.version.split('.')[0] >= 3) {
|
||||||
this.dialogRef.close(server);
|
this.dialogRef.close(controller);
|
||||||
this.toasterService.success(`Server ${server.name} added.`);
|
this.toasterService.success(`Server ${controller.name} added.`);
|
||||||
} else {
|
} else {
|
||||||
this.dialogRef.close();
|
this.dialogRef.close();
|
||||||
this.toasterService.error(`Server version is not supported.`);
|
this.toasterService.error(`Server version is not supported.`);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
this.toasterService.error('Cannot connect to the server: ' + error);
|
this.toasterService.error('Cannot connect to the controller: ' + error);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<mat-card class="info" *ngIf="discoveredServer">
|
<mat-card class="info" *ngIf="discoveredServer">
|
||||||
<mat-card-content align="center">
|
<mat-card-content align="center">
|
||||||
We've discovered GNS3 server on <b>{{ discoveredServer?.host }}:{{ discoveredServer?.port }}</b
|
We've discovered GNS3 controller on <b>{{ discoveredServer?.host }}:{{ discoveredServer?.port }}</b
|
||||||
>, would you like to add to the list?
|
>, would you like to add to the list?
|
||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
<mat-card-actions align="right">
|
<mat-card-actions align="right">
|
||||||
|
@ -47,7 +47,7 @@ it('should create', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('isAvailable', () => {
|
describe('isAvailable', () => {
|
||||||
it('should return server object when server is available', () => {
|
it('should return controller object when controller is available', () => {
|
||||||
const version = new Version();
|
const version = new Version();
|
||||||
version.version = '2.1.8';
|
version.version = '2.1.8';
|
||||||
|
|
||||||
@ -58,20 +58,20 @@ describe('isAvailable', () => {
|
|||||||
expect(s.port).toEqual(3080);
|
expect(s.port).toEqual(3080);
|
||||||
});
|
});
|
||||||
|
|
||||||
const server = new Server();
|
const controller = new Server();
|
||||||
server.host = '127.0.0.1';
|
controller.host = '127.0.0.1';
|
||||||
server.port = 3080;
|
controller.port = 3080;
|
||||||
|
|
||||||
expect(getVersionSpy).toHaveBeenCalledWith(server);
|
expect(getVersionSpy).toHaveBeenCalledWith(controller);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error once server is not available', () => {
|
it('should throw error once controller is not available', () => {
|
||||||
const server = new Server();
|
const controller = new Server();
|
||||||
server.host = '127.0.0.1';
|
controller.host = '127.0.0.1';
|
||||||
server.port = 3080;
|
controller.port = 3080;
|
||||||
|
|
||||||
const getVersionSpy = spyOn(mockedVersionService, 'get').and.returnValue(
|
const getVersionSpy = spyOn(mockedVersionService, 'get').and.returnValue(
|
||||||
Observable.throwError(new Error('server is unavailable'))
|
Observable.throwError(new Error('controller is unavailable'))
|
||||||
);
|
);
|
||||||
let hasExecuted = false;
|
let hasExecuted = false;
|
||||||
|
|
||||||
@ -79,11 +79,11 @@ describe('isAvailable', () => {
|
|||||||
(ver) => { },
|
(ver) => { },
|
||||||
(err) => {
|
(err) => {
|
||||||
hasExecuted = true;
|
hasExecuted = true;
|
||||||
expect(err.toString()).toEqual('Error: server is unavailable');
|
expect(err.toString()).toEqual('Error: controller is unavailable');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(getVersionSpy).toHaveBeenCalledWith(server);
|
expect(getVersionSpy).toHaveBeenCalledWith(controller);
|
||||||
expect(hasExecuted).toBeTruthy();
|
expect(hasExecuted).toBeTruthy();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -94,10 +94,10 @@ describe('discovery', () => {
|
|||||||
version.version = '2.1.8';
|
version.version = '2.1.8';
|
||||||
|
|
||||||
spyOn(component, 'isServerAvailable').and.callFake((ip, port) => {
|
spyOn(component, 'isServerAvailable').and.callFake((ip, port) => {
|
||||||
const server = new Server();
|
const controller = new Server();
|
||||||
server.host = ip;
|
controller.host = ip;
|
||||||
server.port = port;
|
controller.port = port;
|
||||||
return Observable.of(server);
|
return Observable.of(controller);
|
||||||
});
|
});
|
||||||
|
|
||||||
component.discovery().subscribe((discovered) => {
|
component.discovery().subscribe((discovered) => {
|
||||||
@ -112,18 +112,18 @@ describe('discovery', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('discoverFirstAvailableServer', () => {
|
describe('discoverFirstAvailableServer', () => {
|
||||||
let server: Server;
|
let controller: Server;
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
server = new Server();
|
controller = new Server();
|
||||||
(server.host = '199.111.111.1'), (server.port = 3333);
|
(controller.host = '199.111.111.1'), (controller.port = 3333);
|
||||||
|
|
||||||
spyOn(component, 'discovery').and.callFake(() => {
|
spyOn(component, 'discovery').and.callFake(() => {
|
||||||
return Observable.of([server]);
|
return Observable.of([controller]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should get first server from discovered and with no added before', fakeAsync(() => {
|
it('should get first controller from discovered and with no added before', fakeAsync(() => {
|
||||||
expect(component.discoveredServer).toBeUndefined();
|
expect(component.discoveredServer).toBeUndefined();
|
||||||
component.discoverFirstAvailableServer();
|
component.discoverFirstAvailableServer();
|
||||||
tick();
|
tick();
|
||||||
@ -131,8 +131,8 @@ describe('discoverFirstAvailableServer', () => {
|
|||||||
expect(component.discoveredServer.port).toEqual(3333);
|
expect(component.discoveredServer.port).toEqual(3333);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should get first server from discovered and with already added', fakeAsync(() => {
|
it('should get first controller from discovered and with already added', fakeAsync(() => {
|
||||||
mockedServerService.servers.push(server);
|
mockedServerService.servers.push(controller);
|
||||||
|
|
||||||
expect(component.discoveredServer).toBeUndefined();
|
expect(component.discoveredServer).toBeUndefined();
|
||||||
component.discoverFirstAvailableServer();
|
component.discoverFirstAvailableServer();
|
||||||
@ -141,17 +141,17 @@ describe('discoverFirstAvailableServer', () => {
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('accepting and ignoring found server', () => {
|
describe('accepting and ignoring found controller', () => {
|
||||||
let server: Server;
|
let controller: Server;
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
server = new Server();
|
controller = new Server();
|
||||||
(server.host = '199.111.111.1'), (server.port = 3333);
|
(controller.host = '199.111.111.1'), (controller.port = 3333);
|
||||||
component.discoveredServer = server;
|
component.discoveredServer = controller;
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('accept', () => {
|
describe('accept', () => {
|
||||||
it('should add new server', fakeAsync(() => {
|
it('should add new controller', fakeAsync(() => {
|
||||||
component.accept(server);
|
component.accept(controller);
|
||||||
tick();
|
tick();
|
||||||
expect(component.discoveredServer).toBeNull();
|
expect(component.discoveredServer).toBeNull();
|
||||||
expect(mockedServerService.servers[0].host).toEqual('199.111.111.1');
|
expect(mockedServerService.servers[0].host).toEqual('199.111.111.1');
|
||||||
@ -161,8 +161,8 @@ describe('accepting and ignoring found server', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('ignore', () => {
|
describe('ignore', () => {
|
||||||
it('should reject server', fakeAsync(() => {
|
it('should reject controller', fakeAsync(() => {
|
||||||
component.ignore(server);
|
component.ignore(controller);
|
||||||
tick();
|
tick();
|
||||||
expect(component.discoveredServer).toBeNull();
|
expect(component.discoveredServer).toBeNull();
|
||||||
}));
|
}));
|
||||||
|
@ -45,8 +45,8 @@ export class ControllerDiscoveryComponent implements OnInit {
|
|||||||
let local = await this.serverService.findAll();
|
let local = await this.serverService.findAll();
|
||||||
|
|
||||||
local.forEach((added) => {
|
local.forEach((added) => {
|
||||||
discovered = discovered.filter((server) => {
|
discovered = discovered.filter((controller) => {
|
||||||
return !(server.host == added.host && server.port == added.port);
|
return !(controller.host == added.host && controller.port == added.port);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -58,14 +58,14 @@ export class ControllerDiscoveryComponent implements OnInit {
|
|||||||
async discoverServers() {
|
async discoverServers() {
|
||||||
let discoveredServers: Server[] = [];
|
let discoveredServers: Server[] = [];
|
||||||
this.defaultServers.forEach(async (testServer) => {
|
this.defaultServers.forEach(async (testServer) => {
|
||||||
const server = new Server();
|
const controller = new Server();
|
||||||
server.host = testServer.host;
|
controller.host = testServer.host;
|
||||||
server.port = testServer.port;
|
controller.port = testServer.port;
|
||||||
let version = await this.versionService
|
let version = await this.versionService
|
||||||
.get(server)
|
.get(controller)
|
||||||
.toPromise()
|
.toPromise()
|
||||||
.catch((error) => null);
|
.catch((error) => null);
|
||||||
if (version) discoveredServers.push(server);
|
if (version) discoveredServers.push(controller);
|
||||||
});
|
});
|
||||||
return discoveredServers;
|
return discoveredServers;
|
||||||
}
|
}
|
||||||
@ -74,8 +74,8 @@ export class ControllerDiscoveryComponent implements OnInit {
|
|||||||
forkJoin([from(this.serverService.findAll()).pipe(map((s: Server[]) => s)), this.discovery()]).subscribe(
|
forkJoin([from(this.serverService.findAll()).pipe(map((s: Server[]) => s)), this.discovery()]).subscribe(
|
||||||
([local, discovered]) => {
|
([local, discovered]) => {
|
||||||
local.forEach((added) => {
|
local.forEach((added) => {
|
||||||
discovered = discovered.filter((server) => {
|
discovered = discovered.filter((controller) => {
|
||||||
return !(server.host == added.host && server.port == added.port);
|
return !(controller.host == added.host && controller.port == added.port);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
if (discovered.length > 0) {
|
if (discovered.length > 0) {
|
||||||
@ -106,25 +106,25 @@ export class ControllerDiscoveryComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isServerAvailable(ip: string, port: number): Observable<Server> {
|
isServerAvailable(ip: string, port: number): Observable<Server> {
|
||||||
const server = new Server();
|
const controller = new Server();
|
||||||
server.host = ip;
|
controller.host = ip;
|
||||||
server.port = port;
|
controller.port = port;
|
||||||
return this.versionService.get(server).flatMap((version: Version) => Observable.of(server));
|
return this.versionService.get(controller).flatMap((version: Version) => Observable.of(controller));
|
||||||
}
|
}
|
||||||
|
|
||||||
ignore(server: Server) {
|
ignore(controller: Server) {
|
||||||
this.discoveredServer = null;
|
this.discoveredServer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
accept(server: Server) {
|
accept(controller: Server) {
|
||||||
if (server.name == null) {
|
if (controller.name == null) {
|
||||||
server.name = server.host;
|
controller.name = controller.host;
|
||||||
}
|
}
|
||||||
|
|
||||||
server.location = 'remote';
|
controller.location = 'remote';
|
||||||
server.protocol = location.protocol as ServerProtocol;
|
controller.protocol = location.protocol as ServerProtocol;
|
||||||
|
|
||||||
this.serverService.create(server).then((created: Server) => {
|
this.serverService.create(controller).then((created: Server) => {
|
||||||
this.serverDatabase.addServer(created);
|
this.serverDatabase.addServer(created);
|
||||||
this.discoveredServer = null;
|
this.discoveredServer = null;
|
||||||
});
|
});
|
||||||
|
@ -53,22 +53,22 @@
|
|||||||
|
|
||||||
<button
|
<button
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
matTooltip="Start server"
|
matTooltip="Start controller"
|
||||||
matTooltipClass="custom-tooltip"
|
matTooltipClass="custom-tooltip"
|
||||||
(click)="startServer(row)"
|
(click)="startServer(row)"
|
||||||
*ngIf="row.location === 'local' && getServerStatus(row) === 'stopped'"
|
*ngIf="row.location === 'local' && getServerStatus(row) === 'stopped'"
|
||||||
>
|
>
|
||||||
<mat-icon aria-label="Start server">play_arrow</mat-icon>
|
<mat-icon aria-label="Start controller">play_arrow</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
matTooltip="Stop server"
|
matTooltip="Stop controller"
|
||||||
matTooltipClass="custom-tooltip"
|
matTooltipClass="custom-tooltip"
|
||||||
(click)="stopServer(row)"
|
(click)="stopServer(row)"
|
||||||
*ngIf="row.location === 'local' && getServerStatus(row) === 'running'"
|
*ngIf="row.location === 'local' && getServerStatus(row) === 'running'"
|
||||||
>
|
>
|
||||||
<mat-icon aria-label="Stop server">stop</mat-icon>
|
<mat-icon aria-label="Stop controller">stop</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<mat-spinner
|
<mat-spinner
|
||||||
@ -94,7 +94,7 @@
|
|||||||
|
|
||||||
<div class="buttons-bar">
|
<div class="buttons-bar">
|
||||||
<button *ngIf="isElectronApp" mat-raised-button class="button" (click)="startLocalServer()">
|
<button *ngIf="isElectronApp" mat-raised-button class="button" (click)="startLocalServer()">
|
||||||
Start local server
|
Start local controller
|
||||||
</button>
|
</button>
|
||||||
<button mat-raised-button class="button" color="primary" (click)="createModal()">Add Controller</button>
|
<button mat-raised-button class="button" color="primary" (click)="createModal()">Add Controller</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -38,23 +38,23 @@ export class ControllersComponent implements OnInit, OnDestroy {
|
|||||||
private router: Router
|
private router: Router
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
getServers() {
|
getControllers() {
|
||||||
const runningServersNames = this.serverManagement.getRunningServers();
|
const runningServersNames = this.serverManagement.getRunningServers();
|
||||||
|
|
||||||
this.serverService.findAll().then((servers: Server[]) => {
|
this.serverService.findAll().then((controllers: Server[]) => {
|
||||||
servers.forEach((server) => {
|
controllers.forEach((controller) => {
|
||||||
const serverIndex = runningServersNames.findIndex((serverName) => server.name === serverName);
|
const serverIndex = runningServersNames.findIndex((controllerName) => controller.name === controllerName);
|
||||||
if (serverIndex >= 0) {
|
if (serverIndex >= 0) {
|
||||||
server.status = 'running';
|
controller.status = 'running';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
servers.forEach((server) => {
|
controllers.forEach((controller) => {
|
||||||
this.serverService.checkServerVersion(server).subscribe(
|
this.serverService.checkServerVersion(controller).subscribe(
|
||||||
(serverInfo) => {
|
(serverInfo) => {
|
||||||
if (serverInfo.version.split('.')[0] >= 3) {
|
if (serverInfo.version.split('.')[0] >= 3) {
|
||||||
if (!server.protocol) server.protocol = location.protocol as ServerProtocol;
|
if (!controller.protocol) controller.protocol = location.protocol as ServerProtocol;
|
||||||
if (!this.serverDatabase.find(server.name)) this.serverDatabase.addServer(server);
|
if (!this.serverDatabase.find(controller.name)) this.serverDatabase.addServer(controller);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
(error) => { }
|
(error) => { }
|
||||||
@ -66,12 +66,12 @@ export class ControllersComponent implements OnInit, OnDestroy {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.isElectronApp = this.electronService.isElectronApp;
|
this.isElectronApp = this.electronService.isElectronApp;
|
||||||
|
|
||||||
if (this.serverService && this.serverService.isServiceInitialized) this.getServers();
|
if (this.serverService && this.serverService.isServiceInitialized) this.getControllers();
|
||||||
|
|
||||||
if (this.serverService && this.serverService.isServiceInitialized) {
|
if (this.serverService && this.serverService.isServiceInitialized) {
|
||||||
this.serverService.serviceInitialized.subscribe(async (value: boolean) => {
|
this.serverService.serviceInitialized.subscribe(async (value: boolean) => {
|
||||||
if (value) {
|
if (value) {
|
||||||
this.getServers();
|
this.getControllers();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -79,23 +79,23 @@ export class ControllersComponent implements OnInit, OnDestroy {
|
|||||||
this.dataSource = new ServerDataSource(this.serverDatabase);
|
this.dataSource = new ServerDataSource(this.serverDatabase);
|
||||||
|
|
||||||
this.serverStatusSubscription = this.serverManagement.serverStatusChanged.subscribe((serverStatus) => {
|
this.serverStatusSubscription = this.serverManagement.serverStatusChanged.subscribe((serverStatus) => {
|
||||||
const server = this.serverDatabase.find(serverStatus.serverName);
|
const controller = this.serverDatabase.find(serverStatus.serverName);
|
||||||
if (!server) {
|
if (!controller) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (serverStatus.status === 'starting') {
|
if (serverStatus.status === 'starting') {
|
||||||
server.status = 'starting';
|
controller.status = 'starting';
|
||||||
}
|
}
|
||||||
if (serverStatus.status === 'stopped') {
|
if (serverStatus.status === 'stopped') {
|
||||||
server.status = 'stopped';
|
controller.status = 'stopped';
|
||||||
}
|
}
|
||||||
if (serverStatus.status === 'errored') {
|
if (serverStatus.status === 'errored') {
|
||||||
server.status = 'stopped';
|
controller.status = 'stopped';
|
||||||
}
|
}
|
||||||
if (serverStatus.status === 'started') {
|
if (serverStatus.status === 'started') {
|
||||||
server.status = 'running';
|
controller.status = 'running';
|
||||||
}
|
}
|
||||||
this.serverDatabase.update(server);
|
this.serverDatabase.update(controller);
|
||||||
this.changeDetector.detectChanges();
|
this.changeDetector.detectChanges();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -105,12 +105,12 @@ export class ControllersComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
startLocalServer() {
|
startLocalServer() {
|
||||||
const server = this.serverDatabase.data.find((n) => n.location === 'bundled' || 'local');
|
const controller = this.serverDatabase.data.find((n) => n.location === 'bundled' || 'local');
|
||||||
this.startServer(server);
|
this.startServer(controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
openProjects(server) {
|
openProjects(controller) {
|
||||||
this.router.navigate(['/controller', server.id, 'projects']);
|
this.router.navigate(['/controller', controller.id, 'projects']);
|
||||||
}
|
}
|
||||||
|
|
||||||
createModal() {
|
createModal() {
|
||||||
@ -120,43 +120,43 @@ export class ControllersComponent implements OnInit, OnDestroy {
|
|||||||
disableClose: true,
|
disableClose: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
dialogRef.afterClosed().subscribe((server) => {
|
dialogRef.afterClosed().subscribe((controller) => {
|
||||||
if (server) {
|
if (controller) {
|
||||||
this.serverService.create(server).then((created: Server) => {
|
this.serverService.create(controller).then((created: Server) => {
|
||||||
this.serverDatabase.addServer(created);
|
this.serverDatabase.addServer(created);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getServerStatus(server: Server) {
|
getServerStatus(controller: Server) {
|
||||||
if (server.location === 'local') {
|
if (controller.location === 'local') {
|
||||||
if (server.status === undefined) {
|
if (controller.status === undefined) {
|
||||||
return 'stopped';
|
return 'stopped';
|
||||||
}
|
}
|
||||||
return server.status;
|
return controller.status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteServer(server: Server) {
|
deleteServer(controller: Server) {
|
||||||
this.bottomSheet.open(ConfirmationBottomSheetComponent);
|
this.bottomSheet.open(ConfirmationBottomSheetComponent);
|
||||||
let bottomSheetRef = this.bottomSheet._openedBottomSheetRef;
|
let bottomSheetRef = this.bottomSheet._openedBottomSheetRef;
|
||||||
bottomSheetRef.instance.message = 'Do you want to delete the server?';
|
bottomSheetRef.instance.message = 'Do you want to delete the controller?';
|
||||||
const bottomSheetSubscription = bottomSheetRef.afterDismissed().subscribe((result: boolean) => {
|
const bottomSheetSubscription = bottomSheetRef.afterDismissed().subscribe((result: boolean) => {
|
||||||
if (result) {
|
if (result) {
|
||||||
this.serverService.delete(server).then(() => {
|
this.serverService.delete(controller).then(() => {
|
||||||
this.serverDatabase.remove(server);
|
this.serverDatabase.remove(controller);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async startServer(server: Server) {
|
async startServer(controller: Server) {
|
||||||
await this.serverManagement.start(server);
|
await this.serverManagement.start(controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
async stopServer(server: Server) {
|
async stopServer(controller: Server) {
|
||||||
await this.serverManagement.stop(server);
|
await this.serverManagement.stop(controller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div [hidden]="!serverOptionsVisibility" class="content">
|
<div [hidden]="!controllerOptionsVisibility" class="content">
|
||||||
<div class="default-header">
|
<div class="default-header">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 class="col">Add new server</h1>
|
<h1 class="col">Add new controller</h1>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="default-content">
|
<div class="default-content">
|
||||||
@ -26,7 +26,7 @@
|
|||||||
</form>
|
</form>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
<div class="buttons-bar">
|
<div class="buttons-bar">
|
||||||
<button mat-raised-button color="primary" (click)="createServer()">Add server</button>
|
<button mat-raised-button color="primary" (click)="createServer()">Add controller</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -13,9 +13,9 @@ import { ToasterService } from '../../services/toaster.service';
|
|||||||
encapsulation: ViewEncapsulation.None,
|
encapsulation: ViewEncapsulation.None,
|
||||||
})
|
})
|
||||||
export class DirectLinkComponent implements OnInit {
|
export class DirectLinkComponent implements OnInit {
|
||||||
public serverOptionsVisibility = false;
|
public controllerOptionsVisibility = false;
|
||||||
public serverIp;
|
public controllerIp;
|
||||||
public serverPort;
|
public controllerPort;
|
||||||
public projectId;
|
public projectId;
|
||||||
|
|
||||||
protocols = [
|
protocols = [
|
||||||
@ -42,27 +42,27 @@ export class DirectLinkComponent implements OnInit {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
if (this.serverService.isServiceInitialized) this.getServers();
|
if (this.serverService.isServiceInitialized) this.getControllers();
|
||||||
|
|
||||||
this.serverService.serviceInitialized.subscribe(async (value: boolean) => {
|
this.serverService.serviceInitialized.subscribe(async (value: boolean) => {
|
||||||
if (value) {
|
if (value) {
|
||||||
this.getServers();
|
this.getControllers();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private async getServers() {
|
private async getControllers() {
|
||||||
this.serverIp = this.route.snapshot.paramMap.get('server_ip');
|
this.controllerIp = this.route.snapshot.paramMap.get('server_ip');
|
||||||
this.serverPort = +this.route.snapshot.paramMap.get('server_port');
|
this.controllerPort = +this.route.snapshot.paramMap.get('server_port');
|
||||||
this.projectId = this.route.snapshot.paramMap.get('project_id');
|
this.projectId = this.route.snapshot.paramMap.get('project_id');
|
||||||
|
|
||||||
const servers = await this.serverService.findAll();
|
const controllers = await this.serverService.findAll();
|
||||||
const server = servers.filter((server) => server.host === this.serverIp && server.port === this.serverPort)[0];
|
const controller = controllers.filter((controller) => controller.host === this.controllerIp && controller.port === this.controllerPort)[0];
|
||||||
|
|
||||||
if (server) {
|
if (controller) {
|
||||||
this.router.navigate(['/controller', server.id, 'project', this.projectId]);
|
this.router.navigate(['/controller', controller.id, 'project', this.projectId]);
|
||||||
} else {
|
} else {
|
||||||
this.serverOptionsVisibility = true;
|
this.controllerOptionsVisibility = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,8 +73,8 @@ export class DirectLinkComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let serverToAdd: Server = new Server();
|
let serverToAdd: Server = new Server();
|
||||||
serverToAdd.host = this.serverIp;
|
serverToAdd.host = this.controllerIp;
|
||||||
serverToAdd.port = this.serverPort;
|
serverToAdd.port = this.controllerPort;
|
||||||
|
|
||||||
serverToAdd.name = this.serverForm.get('name').value;
|
serverToAdd.name = this.serverForm.get('name').value;
|
||||||
serverToAdd.location = this.serverForm.get('location').value;
|
serverToAdd.location = this.serverForm.get('location').value;
|
||||||
|
@ -16,7 +16,7 @@ import { DrawingService } from '../../../services/drawing.service';
|
|||||||
styleUrls: ['./drawing-added.component.scss'],
|
styleUrls: ['./drawing-added.component.scss'],
|
||||||
})
|
})
|
||||||
export class DrawingAddedComponent implements OnInit, OnDestroy {
|
export class DrawingAddedComponent implements OnInit, OnDestroy {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
@Input() project: Project;
|
@Input() project: Project;
|
||||||
@Input() selectedDrawing: string;
|
@Input() selectedDrawing: string;
|
||||||
@Output() drawingSaved = new EventEmitter<boolean>();
|
@Output() drawingSaved = new EventEmitter<boolean>();
|
||||||
@ -49,7 +49,7 @@ export class DrawingAddedComponent implements OnInit, OnDestroy {
|
|||||||
let svgText = this.mapDrawingToSvgConverter.convert(drawing);
|
let svgText = this.mapDrawingToSvgConverter.convert(drawing);
|
||||||
|
|
||||||
this.drawingService
|
this.drawingService
|
||||||
.add(this.server, this.project.project_id, evt.x, evt.y, svgText)
|
.add(this.controller, this.project.project_id, evt.x, evt.y, svgText)
|
||||||
.subscribe((serverDrawing: Drawing) => {
|
.subscribe((serverDrawing: Drawing) => {
|
||||||
this.drawingsDataSource.add(serverDrawing);
|
this.drawingsDataSource.add(serverDrawing);
|
||||||
this.drawingSaved.emit(true);
|
this.drawingSaved.emit(true);
|
||||||
|
@ -15,7 +15,7 @@ import { DrawingService } from '../../../services/drawing.service';
|
|||||||
styleUrls: ['./drawing-dragged.component.scss'],
|
styleUrls: ['./drawing-dragged.component.scss'],
|
||||||
})
|
})
|
||||||
export class DrawingDraggedComponent implements OnInit, OnDestroy {
|
export class DrawingDraggedComponent implements OnInit, OnDestroy {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
@Input() project: Project;
|
@Input() project: Project;
|
||||||
private drawingDragged: Subscription;
|
private drawingDragged: Subscription;
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ export class DrawingDraggedComponent implements OnInit, OnDestroy {
|
|||||||
drawing.y += draggedEvent.dy;
|
drawing.y += draggedEvent.dy;
|
||||||
|
|
||||||
this.drawingService
|
this.drawingService
|
||||||
.updatePosition(this.server, this.project, drawing, drawing.x, drawing.y)
|
.updatePosition(this.controller, this.project, drawing, drawing.x, drawing.y)
|
||||||
.subscribe((serverDrawing: Drawing) => {
|
.subscribe((serverDrawing: Drawing) => {
|
||||||
this.drawingsDataSource.update(serverDrawing);
|
this.drawingsDataSource.update(serverDrawing);
|
||||||
});
|
});
|
||||||
|
@ -15,7 +15,7 @@ import { DrawingService } from '../../../services/drawing.service';
|
|||||||
styleUrls: ['./drawing-resized.component.scss'],
|
styleUrls: ['./drawing-resized.component.scss'],
|
||||||
})
|
})
|
||||||
export class DrawingResizedComponent implements OnInit, OnDestroy {
|
export class DrawingResizedComponent implements OnInit, OnDestroy {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
private drawingResized: Subscription;
|
private drawingResized: Subscription;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@ -34,7 +34,7 @@ export class DrawingResizedComponent implements OnInit, OnDestroy {
|
|||||||
let svgString = this.mapDrawingToSvgConverter.convert(resizedEvent.datum);
|
let svgString = this.mapDrawingToSvgConverter.convert(resizedEvent.datum);
|
||||||
|
|
||||||
this.drawingService
|
this.drawingService
|
||||||
.updateSizeAndPosition(this.server, drawing, resizedEvent.x, resizedEvent.y, svgString)
|
.updateSizeAndPosition(this.controller, drawing, resizedEvent.x, resizedEvent.y, svgString)
|
||||||
.subscribe((serverDrawing: Drawing) => {
|
.subscribe((serverDrawing: Drawing) => {
|
||||||
this.drawingsDataSource.update(serverDrawing);
|
this.drawingsDataSource.update(serverDrawing);
|
||||||
});
|
});
|
||||||
|
@ -14,7 +14,7 @@ import { LinkService } from '../../../services/link.service';
|
|||||||
styleUrls: ['./interface-label-dragged.component.scss'],
|
styleUrls: ['./interface-label-dragged.component.scss'],
|
||||||
})
|
})
|
||||||
export class InterfaceLabelDraggedComponent {
|
export class InterfaceLabelDraggedComponent {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
private interfaceDragged: Subscription;
|
private interfaceDragged: Subscription;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@ -40,7 +40,7 @@ export class InterfaceLabelDraggedComponent {
|
|||||||
link.nodes[1].label.y += draggedEvent.dy;
|
link.nodes[1].label.y += draggedEvent.dy;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.linkService.updateNodes(this.server, link, link.nodes).subscribe((serverLink: Link) => {
|
this.linkService.updateNodes(this.controller, link, link.nodes).subscribe((serverLink: Link) => {
|
||||||
this.linksDataSource.update(serverLink);
|
this.linksDataSource.update(serverLink);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ import { ProjectService } from '../../../services/project.service';
|
|||||||
styleUrls: ['./link-created.component.scss'],
|
styleUrls: ['./link-created.component.scss'],
|
||||||
})
|
})
|
||||||
export class LinkCreatedComponent implements OnInit, OnDestroy {
|
export class LinkCreatedComponent implements OnInit, OnDestroy {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
@Input() project: Project;
|
@Input() project: Project;
|
||||||
private linkCreated: Subscription;
|
private linkCreated: Subscription;
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ export class LinkCreatedComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
this.linkService
|
this.linkService
|
||||||
.createLink(
|
.createLink(
|
||||||
this.server,
|
this.controller,
|
||||||
sourceNode,
|
sourceNode,
|
||||||
sourcePort,
|
sourcePort,
|
||||||
targetNode,
|
targetNode,
|
||||||
@ -98,7 +98,7 @@ export class LinkCreatedComponent implements OnInit, OnDestroy {
|
|||||||
yLabelTargetNode
|
yLabelTargetNode
|
||||||
)
|
)
|
||||||
.subscribe(() => {
|
.subscribe(() => {
|
||||||
this.projectService.links(this.server, this.project.project_id).subscribe((links: Link[]) => {
|
this.projectService.links(this.controller, this.project.project_id).subscribe((links: Link[]) => {
|
||||||
this.linksDataSource.set(links);
|
this.linksDataSource.set(links);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -15,7 +15,7 @@ import { NodeService } from '../../../services/node.service';
|
|||||||
styleUrls: ['./node-dragged.component.scss'],
|
styleUrls: ['./node-dragged.component.scss'],
|
||||||
})
|
})
|
||||||
export class NodeDraggedComponent implements OnInit, OnDestroy {
|
export class NodeDraggedComponent implements OnInit, OnDestroy {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
@Input() project: Project;
|
@Input() project: Project;
|
||||||
private nodeDragged: Subscription;
|
private nodeDragged: Subscription;
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ export class NodeDraggedComponent implements OnInit, OnDestroy {
|
|||||||
node.x += draggedEvent.dx;
|
node.x += draggedEvent.dx;
|
||||||
node.y += draggedEvent.dy;
|
node.y += draggedEvent.dy;
|
||||||
|
|
||||||
this.nodeService.updatePosition(this.server, this.project, node, node.x, node.y).subscribe((serverNode: Node) => {
|
this.nodeService.updatePosition(this.controller, this.project, node, node.x, node.y).subscribe((serverNode: Node) => {
|
||||||
this.nodesDataSource.update(serverNode);
|
this.nodesDataSource.update(serverNode);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import { NodeService } from '../../../services/node.service';
|
|||||||
styleUrls: ['./node-label-dragged.component.scss'],
|
styleUrls: ['./node-label-dragged.component.scss'],
|
||||||
})
|
})
|
||||||
export class NodeLabelDraggedComponent implements OnInit, OnDestroy {
|
export class NodeLabelDraggedComponent implements OnInit, OnDestroy {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
private nodeLabelDragged: Subscription;
|
private nodeLabelDragged: Subscription;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@ -38,7 +38,7 @@ export class NodeLabelDraggedComponent implements OnInit, OnDestroy {
|
|||||||
const label = this.mapLabelToLabel.convert(mapLabel);
|
const label = this.mapLabelToLabel.convert(mapLabel);
|
||||||
node.label = label;
|
node.label = label;
|
||||||
|
|
||||||
this.nodeService.updateLabel(this.server, node, node.label).subscribe((serverNode: Node) => {
|
this.nodeService.updateLabel(this.controller, node, node.label).subscribe((serverNode: Node) => {
|
||||||
this.nodesDataSource.update(serverNode);
|
this.nodesDataSource.update(serverNode);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ import { DrawingService } from '../../../services/drawing.service';
|
|||||||
styleUrls: ['./text-added.component.scss'],
|
styleUrls: ['./text-added.component.scss'],
|
||||||
})
|
})
|
||||||
export class TextAddedComponent implements OnInit, OnDestroy {
|
export class TextAddedComponent implements OnInit, OnDestroy {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
@Input() project: Project;
|
@Input() project: Project;
|
||||||
@Output() drawingSaved = new EventEmitter<boolean>();
|
@Output() drawingSaved = new EventEmitter<boolean>();
|
||||||
private textAdded: Subscription;
|
private textAdded: Subscription;
|
||||||
@ -43,7 +43,7 @@ export class TextAddedComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
this.drawingService
|
this.drawingService
|
||||||
.add(
|
.add(
|
||||||
this.server,
|
this.controller,
|
||||||
this.project.project_id,
|
this.project.project_id,
|
||||||
(evt.x - (this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x)) /
|
(evt.x - (this.context.getZeroZeroTransformationPoint().x + this.context.transformation.x)) /
|
||||||
this.context.transformation.k,
|
this.context.transformation.k,
|
||||||
|
@ -16,7 +16,7 @@ import { DrawingService } from '../../../services/drawing.service';
|
|||||||
styleUrls: ['./text-edited.component.scss'],
|
styleUrls: ['./text-edited.component.scss'],
|
||||||
})
|
})
|
||||||
export class TextEditedComponent implements OnInit, OnDestroy {
|
export class TextEditedComponent implements OnInit, OnDestroy {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
private textEdited: Subscription;
|
private textEdited: Subscription;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@ -38,7 +38,7 @@ export class TextEditedComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
let drawing = this.drawingsDataSource.get(evt.textDrawingId);
|
let drawing = this.drawingsDataSource.get(evt.textDrawingId);
|
||||||
|
|
||||||
this.drawingService.updateText(this.server, drawing, svgString).subscribe((serverDrawing: Drawing) => {
|
this.drawingService.updateText(this.controller, drawing, svgString).subscribe((serverDrawing: Drawing) => {
|
||||||
this.drawingsDataSource.update(serverDrawing);
|
this.drawingsDataSource.update(serverDrawing);
|
||||||
this.drawingsEventSource.textSaved.emit(true);
|
this.drawingsEventSource.textSaved.emit(true);
|
||||||
});
|
});
|
||||||
|
@ -16,7 +16,7 @@ export class ExportPortableProjectComponent implements OnInit {
|
|||||||
compression_methods: any = [];
|
compression_methods: any = [];
|
||||||
compression_level: any = [];
|
compression_level: any = [];
|
||||||
compression_filter_value: any = [];
|
compression_filter_value: any = [];
|
||||||
server: Server;
|
controller: Server;
|
||||||
project: Project;
|
project: Project;
|
||||||
index: number = 4;
|
index: number = 4;
|
||||||
fileName: string;
|
fileName: string;
|
||||||
@ -30,7 +30,7 @@ export class ExportPortableProjectComponent implements OnInit {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.server = this.data.serverDetails;
|
this.controller = this.data.serverDetails;
|
||||||
this.project = this.data.projectDetails;
|
this.project = this.data.projectDetails;
|
||||||
this.fileName = this.project.name + '.gns3project';
|
this.fileName = this.project.name + '.gns3project';
|
||||||
await this.formControls();
|
await this.formControls();
|
||||||
@ -65,7 +65,7 @@ export class ExportPortableProjectComponent implements OnInit {
|
|||||||
exportPortableProject() {
|
exportPortableProject() {
|
||||||
this.isExport = true;
|
this.isExport = true;
|
||||||
this.export_project_form.value.compression = this.export_project_form.value.compression.value ?? 'zstd';
|
this.export_project_form.value.compression = this.export_project_form.value.compression.value ?? 'zstd';
|
||||||
window.location.assign(this.projectService.getexportPortableProjectPath(this.server, this.project.project_id, this.export_project_form.value))
|
window.location.assign(this.projectService.getexportPortableProjectPath(this.controller, this.project.project_id, this.export_project_form.value))
|
||||||
this.dialogRef.close();
|
this.dialogRef.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ import { MockedToasterService } from 'app/services/toaster.service.spec';
|
|||||||
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
||||||
|
|
||||||
export class MockedImageManagerService {
|
export class MockedImageManagerService {
|
||||||
public getImages(server: Server) {
|
public getImages(controller: Server) {
|
||||||
return of();
|
return of();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import { ToasterService } from '../../../services/toaster.service';
|
|||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class AddImageDialogComponent implements OnInit {
|
export class AddImageDialogComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
isInstallAppliance: boolean = false;
|
isInstallAppliance: boolean = false;
|
||||||
install_appliance: boolean = false;
|
install_appliance: boolean = false;
|
||||||
selectFile: any = [];
|
selectFile: any = [];
|
||||||
@ -36,7 +36,7 @@ export class AddImageDialogComponent implements OnInit {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
public ngOnInit() {
|
public ngOnInit() {
|
||||||
this.server = this.data;
|
this.controller =this.data;
|
||||||
|
|
||||||
this.uploaderImage = new FileUploader({});
|
this.uploaderImage = new FileUploader({});
|
||||||
this.uploaderImage.onAfterAddingFile = (file) => {
|
this.uploaderImage.onAfterAddingFile = (file) => {
|
||||||
@ -98,11 +98,11 @@ export class AddImageDialogComponent implements OnInit {
|
|||||||
let file = event;
|
let file = event;
|
||||||
let fileReader: FileReader = new FileReader();
|
let fileReader: FileReader = new FileReader();
|
||||||
fileReader.onloadend = () => {
|
fileReader.onloadend = () => {
|
||||||
const url = this.imageService.getImagePath(this.server, this.install_appliance, fileName);
|
const url = this.imageService.getImagePath(this.controller, this.install_appliance, fileName);
|
||||||
const itemToUpload = this.uploaderImage.queue[i];
|
const itemToUpload = this.uploaderImage.queue[i];
|
||||||
itemToUpload.url = url;
|
itemToUpload.url = url;
|
||||||
if ((itemToUpload as any).options) (itemToUpload as any).options.disableMultipart = true;
|
if ((itemToUpload as any).options) (itemToUpload as any).options.disableMultipart = true;
|
||||||
(itemToUpload as any).options.headers = [{ name: 'Authorization', value: 'Bearer ' + this.server.authToken }];
|
(itemToUpload as any).options.headers = [{ name: 'Authorization', value: 'Bearer ' + this.controller.authToken }];
|
||||||
this.uploaderImage.uploadItem(itemToUpload);
|
this.uploaderImage.uploadItem(itemToUpload);
|
||||||
};
|
};
|
||||||
fileReader.readAsText(file);
|
fileReader.readAsText(file);
|
||||||
|
@ -17,7 +17,7 @@ import { ImageManagerComponent } from '../image-manager.component';
|
|||||||
import { DeleteAllImageFilesDialogComponent } from './deleteallfiles-dialog.component';
|
import { DeleteAllImageFilesDialogComponent } from './deleteallfiles-dialog.component';
|
||||||
|
|
||||||
export class MockedImageManagerService {
|
export class MockedImageManagerService {
|
||||||
public deleteALLFile(server: Server, image_path) {
|
public deleteALLFile(controller: Server, image_path) {
|
||||||
return of();
|
return of();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,11 @@ import { ToasterService } from 'app/services/toaster.service';
|
|||||||
import { MockedToasterService } from 'app/services/toaster.service.spec';
|
import { MockedToasterService } from 'app/services/toaster.service.spec';
|
||||||
|
|
||||||
export class MockedImageManagerService {
|
export class MockedImageManagerService {
|
||||||
public getImages(server: Server) {
|
public getImages(controller: Server) {
|
||||||
return of();
|
return of();
|
||||||
}
|
}
|
||||||
|
|
||||||
public deleteFile(server: Server, image_path) {
|
public deleteFile(controller: Server, image_path) {
|
||||||
return of();
|
return of();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ import { imageDataSource, imageDatabase } from "./image-database-file";
|
|||||||
styleUrls: ['./image-manager.component.scss']
|
styleUrls: ['./image-manager.component.scss']
|
||||||
})
|
})
|
||||||
export class ImageManagerComponent implements OnInit {
|
export class ImageManagerComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
public version: string;
|
public version: string;
|
||||||
dataSource: imageDataSource;
|
dataSource: imageDataSource;
|
||||||
imageDatabase = new imageDatabase();
|
imageDatabase = new imageDatabase();
|
||||||
@ -41,12 +41,12 @@ export class ImageManagerComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
let controller_id = parseInt(this.route.snapshot.paramMap.get('controller_id'));
|
let controller_id = parseInt(this.route.snapshot.paramMap.get('controller_id'));
|
||||||
this.serverService.get(controller_id).then((server: Server) => {
|
this.serverService.get(controller_id).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
if (server.authToken) {
|
if (controller.authToken) {
|
||||||
this.getImages()
|
this.getImages()
|
||||||
}
|
}
|
||||||
// this.versionService.get(this.server).subscribe((version: Version) => {
|
// this.versionService.get(this.controller).subscribe((version: Version) => {
|
||||||
// this.version = version.version;
|
// this.version = version.version;
|
||||||
// });
|
// });
|
||||||
});
|
});
|
||||||
@ -54,7 +54,7 @@ export class ImageManagerComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getImages() {
|
getImages() {
|
||||||
this.imageService.getImages(this.server).subscribe(
|
this.imageService.getImages(this.controller).subscribe(
|
||||||
(images: Image[]) => {
|
(images: Image[]) => {
|
||||||
this.imageDatabase.addImages(images)
|
this.imageDatabase.addImages(images)
|
||||||
},
|
},
|
||||||
@ -66,7 +66,7 @@ export class ImageManagerComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deleteFile(path) {
|
deleteFile(path) {
|
||||||
this.imageService.deleteFile(this.server, path).subscribe(
|
this.imageService.deleteFile(this.controller, path).subscribe(
|
||||||
(res) => {
|
(res) => {
|
||||||
this.getImages()
|
this.getImages()
|
||||||
this.unChecked()
|
this.unChecked()
|
||||||
@ -106,7 +106,7 @@ export class ImageManagerComponent implements OnInit {
|
|||||||
maxHeight: '550px',
|
maxHeight: '550px',
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
disableClose: true,
|
disableClose: true,
|
||||||
data: this.server
|
data: this.controller
|
||||||
});
|
});
|
||||||
|
|
||||||
dialogRef.afterClosed().subscribe((isAddes: boolean) => {
|
dialogRef.afterClosed().subscribe((isAddes: boolean) => {
|
||||||
@ -128,7 +128,7 @@ export class ImageManagerComponent implements OnInit {
|
|||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
disableClose: true,
|
disableClose: true,
|
||||||
data: {
|
data: {
|
||||||
server: this.server,
|
controller: this.controller,
|
||||||
deleteFilesPaths: this.selection.selected
|
deleteFilesPaths: this.selection.selected
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -18,7 +18,7 @@ import { VersionService } from '../../services/version.service';
|
|||||||
encapsulation: ViewEncapsulation.None,
|
encapsulation: ViewEncapsulation.None,
|
||||||
})
|
})
|
||||||
export class LoginComponent implements OnInit, DoCheck {
|
export class LoginComponent implements OnInit, DoCheck {
|
||||||
private server: Server;
|
private controller: Server;
|
||||||
public version: string;
|
public version: string;
|
||||||
public isLightThemeEnabled: boolean = false;
|
public isLightThemeEnabled: boolean = false;
|
||||||
public loginError: boolean = false;
|
public loginError: boolean = false;
|
||||||
@ -45,14 +45,14 @@ export class LoginComponent implements OnInit, DoCheck {
|
|||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';
|
this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
if (server.authToken) {
|
if (controller.authToken) {
|
||||||
this.router.navigate(['/controller', this.server.id, 'projects']);
|
this.router.navigate(['/controller', this.controller.id, 'projects']);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.versionService.get(this.server).subscribe((version: Version) => {
|
this.versionService.get(this.controller).subscribe((version: Version) => {
|
||||||
this.version = version.version;
|
this.version = version.version;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -78,17 +78,17 @@ export class LoginComponent implements OnInit, DoCheck {
|
|||||||
let username = this.loginForm.get('username').value;
|
let username = this.loginForm.get('username').value;
|
||||||
let password = this.loginForm.get('password').value;
|
let password = this.loginForm.get('password').value;
|
||||||
|
|
||||||
this.loginService.login(this.server, username, password).subscribe(
|
this.loginService.login(this.controller, username, password).subscribe(
|
||||||
async (response: AuthResponse) => {
|
async (response: AuthResponse) => {
|
||||||
let server = this.server;
|
let controller = this.controller;
|
||||||
server.authToken = response.access_token;
|
controller.authToken = response.access_token;
|
||||||
server.username = username;
|
controller.username = username;
|
||||||
server.password = password;
|
controller.password = password;
|
||||||
server.tokenExpired = false;
|
controller.tokenExpired = false;
|
||||||
await this.serverService.update(server);
|
await this.serverService.update(controller);
|
||||||
|
|
||||||
if (this.returnUrl.length <= 1) {
|
if (this.returnUrl.length <= 1) {
|
||||||
this.router.navigate(['/controller', this.server.id, 'projects']);
|
this.router.navigate(['/controller', this.controller.id, 'projects']);
|
||||||
} else {
|
} else {
|
||||||
this.router.navigateByUrl(this.returnUrl);
|
this.router.navigateByUrl(this.returnUrl);
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<div class="default-header">
|
<div class="default-header">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 class="col">Built-in preferences</h1>
|
<h1 class="col">Built-in preferences</h1>
|
||||||
<button class="top-button" class="cancel-button" routerLink="/controller/{{ serverId }}/preferences" mat-button>
|
<button class="top-button" class="cancel-button" routerLink="/controller/{{ controllerId }}/preferences" mat-button>
|
||||||
Back
|
Back
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -10,13 +10,13 @@
|
|||||||
<div class="default-content">
|
<div class="default-content">
|
||||||
<div class="listcontainer mat-elevation-z8">
|
<div class="listcontainer mat-elevation-z8">
|
||||||
<mat-nav-list>
|
<mat-nav-list>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/builtin/ethernet-hubs">
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/builtin/ethernet-hubs">
|
||||||
Ethernet hubs
|
Ethernet hubs
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/builtin/ethernet-switches">
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/builtin/ethernet-switches">
|
||||||
Ethernet switches
|
Ethernet switches
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/builtin/cloud-nodes"> Cloud nodes </mat-list-item>
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/builtin/cloud-nodes"> Cloud nodes </mat-list-item>
|
||||||
</mat-nav-list>
|
</mat-nav-list>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -48,7 +48,7 @@ describe('BuiltInPreferencesComponent', () => {
|
|||||||
expect(component).toBeTruthy();
|
expect(component).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should set correct server id', () => {
|
it('should set correct controller id', () => {
|
||||||
expect(component.serverId).toBe('1');
|
expect(component.controllerId).toBe('1');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -7,11 +7,11 @@ import { ActivatedRoute } from '@angular/router';
|
|||||||
styleUrls: ['./built-in-preferences.component.scss', '../preferences.component.scss'],
|
styleUrls: ['./built-in-preferences.component.scss', '../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class BuiltInPreferencesComponent implements OnInit {
|
export class BuiltInPreferencesComponent implements OnInit {
|
||||||
public serverId: string = '';
|
public controllerId: string = '';
|
||||||
|
|
||||||
constructor(private route: ActivatedRoute) {}
|
constructor(private route: ActivatedRoute) {}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.serverId = this.route.snapshot.paramMap.get('controller_id');
|
this.controllerId = this.route.snapshot.paramMap.get('controller_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ import { MockedActivatedRoute } from '../../../preferences.component.spec';
|
|||||||
import { CloudNodesAddTemplateComponent } from './cloud-nodes-add-template.component';
|
import { CloudNodesAddTemplateComponent } from './cloud-nodes-add-template.component';
|
||||||
|
|
||||||
export class MockedBuiltInTemplatesService {
|
export class MockedBuiltInTemplatesService {
|
||||||
public addTemplate(server: Server, cloudTemplate: CloudTemplate) {
|
public addTemplate(controller: Server, cloudTemplate: CloudTemplate) {
|
||||||
return of(cloudTemplate);
|
return of(cloudTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,7 +80,7 @@ describe('CloudNodesAddTemplateComponent', () => {
|
|||||||
it('should call add template', () => {
|
it('should call add template', () => {
|
||||||
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as CloudTemplate));
|
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as CloudTemplate));
|
||||||
component.templateName = 'sample name';
|
component.templateName = 'sample name';
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
component.formGroup.controls['templateName'].setValue('template name');
|
component.formGroup.controls['templateName'].setValue('template name');
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
@ -92,7 +92,7 @@ describe('CloudNodesAddTemplateComponent', () => {
|
|||||||
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as CloudTemplate));
|
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as CloudTemplate));
|
||||||
spyOn(mockedToasterService, 'error');
|
spyOn(mockedToasterService, 'error');
|
||||||
component.templateName = '';
|
component.templateName = '';
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ import { ToasterService } from '../../../../../services/toaster.service';
|
|||||||
styleUrls: ['./cloud-nodes-add-template.component.scss', '../../../preferences.component.scss'],
|
styleUrls: ['./cloud-nodes-add-template.component.scss', '../../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class CloudNodesAddTemplateComponent implements OnInit {
|
export class CloudNodesAddTemplateComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
templateName: string = '';
|
templateName: string = '';
|
||||||
formGroup: FormGroup;
|
formGroup: FormGroup;
|
||||||
isLocalComputerChosen: boolean = true;
|
isLocalComputerChosen: boolean = true;
|
||||||
@ -39,8 +39,8 @@ export class CloudNodesAddTemplateComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ export class CloudNodesAddTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'builtin', 'cloud-nodes']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'builtin', 'cloud-nodes']);
|
||||||
}
|
}
|
||||||
|
|
||||||
addTemplate() {
|
addTemplate() {
|
||||||
@ -66,7 +66,7 @@ export class CloudNodesAddTemplateComponent implements OnInit {
|
|||||||
cloudTemplate.name = this.formGroup.get('templateName').value;
|
cloudTemplate.name = this.formGroup.get('templateName').value;
|
||||||
cloudTemplate.compute_id = 'local';
|
cloudTemplate.compute_id = 'local';
|
||||||
|
|
||||||
this.builtInTemplatesService.addTemplate(this.server, cloudTemplate).subscribe((cloudNodeTemplate) => {
|
this.builtInTemplatesService.addTemplate(this.controller, cloudTemplate).subscribe((cloudNodeTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -23,11 +23,11 @@ import { MockedActivatedRoute } from '../../../preferences.component.spec';
|
|||||||
import { CloudNodesTemplateDetailsComponent } from './cloud-nodes-template-details.component';
|
import { CloudNodesTemplateDetailsComponent } from './cloud-nodes-template-details.component';
|
||||||
|
|
||||||
export class MockedBuiltInTemplatesService {
|
export class MockedBuiltInTemplatesService {
|
||||||
public getTemplate(server: Server, template_id: string) {
|
public getTemplate(controller: Server, template_id: string) {
|
||||||
return of({ ports_mapping: [] } as CloudTemplate);
|
return of({ ports_mapping: [] } as CloudTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public saveTemplate(server: Server, cloudTemplate: CloudTemplate) {
|
public saveTemplate(controller: Server, cloudTemplate: CloudTemplate) {
|
||||||
return of(cloudTemplate);
|
return of(cloudTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import { ToasterService } from '../../../../../services/toaster.service';
|
|||||||
styleUrls: ['./cloud-nodes-template-details.component.scss', '../../../preferences.component.scss'],
|
styleUrls: ['./cloud-nodes-template-details.component.scss', '../../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class CloudNodesTemplateDetailsComponent implements OnInit {
|
export class CloudNodesTemplateDetailsComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
cloudNodeTemplate: CloudTemplate;
|
cloudNodeTemplate: CloudTemplate;
|
||||||
|
|
||||||
isSymbolSelectionOpened: boolean = false;
|
isSymbolSelectionOpened: boolean = false;
|
||||||
@ -49,12 +49,12 @@ export class CloudNodesTemplateDetailsComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.getConfiguration();
|
this.getConfiguration();
|
||||||
this.builtInTemplatesService
|
this.builtInTemplatesService
|
||||||
.getTemplate(this.server, template_id)
|
.getTemplate(this.controller, template_id)
|
||||||
.subscribe((cloudNodeTemplate: CloudTemplate) => {
|
.subscribe((cloudNodeTemplate: CloudTemplate) => {
|
||||||
this.cloudNodeTemplate = cloudNodeTemplate;
|
this.cloudNodeTemplate = cloudNodeTemplate;
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ export class CloudNodesTemplateDetailsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'builtin', 'cloud-nodes']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'builtin', 'cloud-nodes']);
|
||||||
}
|
}
|
||||||
|
|
||||||
getConfiguration() {
|
getConfiguration() {
|
||||||
@ -114,7 +114,7 @@ export class CloudNodesTemplateDetailsComponent implements OnInit {
|
|||||||
this.cloudNodeTemplate.ports_mapping = [...this.portsMappingEthernet, ...this.portsMappingTap];
|
this.cloudNodeTemplate.ports_mapping = [...this.portsMappingEthernet, ...this.portsMappingTap];
|
||||||
|
|
||||||
this.builtInTemplatesService
|
this.builtInTemplatesService
|
||||||
.saveTemplate(this.server, this.cloudNodeTemplate)
|
.saveTemplate(this.controller, this.cloudNodeTemplate)
|
||||||
.subscribe((cloudNodeTemplate: CloudTemplate) => {
|
.subscribe((cloudNodeTemplate: CloudTemplate) => {
|
||||||
this.toasterService.success('Changes saved');
|
this.toasterService.success('Changes saved');
|
||||||
});
|
});
|
||||||
|
@ -3,18 +3,18 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 class="col">Cloud nodes templates</h1>
|
<h1 class="col">Cloud nodes templates</h1>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
class="cancel-button"
|
class="cancel-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/builtin"
|
routerLink="/controller/{{ controller.id }}/preferences/builtin"
|
||||||
mat-button
|
mat-button
|
||||||
>
|
>
|
||||||
Back
|
Back
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/builtin/cloud-nodes/addtemplate"
|
routerLink="/controller/{{ controller.id }}/preferences/builtin/cloud-nodes/addtemplate"
|
||||||
mat-raised-button
|
mat-raised-button
|
||||||
color="primary"
|
color="primary"
|
||||||
>
|
>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<app-empty-templates-list *ngIf="!cloudNodesTemplates.length"></app-empty-templates-list>
|
<app-empty-templates-list *ngIf="!cloudNodesTemplates.length"></app-empty-templates-list>
|
||||||
<div class="default-content" *ngIf="cloudNodesTemplates.length">
|
<div class="default-content" *ngIf="cloudNodesTemplates.length">
|
||||||
<div class="listcontainer mat-elevation-z8">
|
<div class="listcontainer mat-elevation-z8">
|
||||||
<mat-nav-list *ngIf="server">
|
<mat-nav-list *ngIf="controller">
|
||||||
<div class="list-item" *ngFor="let template of cloudNodesTemplates">
|
<div class="list-item" *ngFor="let template of cloudNodesTemplates">
|
||||||
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
||||||
template.name
|
template.name
|
||||||
@ -43,4 +43,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<app-delete-template #deleteComponent [server]="server" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
<app-delete-template #deleteComponent [controller]="controller" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
||||||
|
@ -18,7 +18,7 @@ import { MockedActivatedRoute } from '../../../preferences.component.spec';
|
|||||||
import { CloudNodesTemplatesComponent } from './cloud-nodes-templates.component';
|
import { CloudNodesTemplatesComponent } from './cloud-nodes-templates.component';
|
||||||
|
|
||||||
export class MockedBuiltInTemplatesService {
|
export class MockedBuiltInTemplatesService {
|
||||||
public getTemplates(server: Server) {
|
public getTemplates(controller: Server) {
|
||||||
return of([{} as CloudTemplate]);
|
return of([{} as CloudTemplate]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import { DeleteTemplateComponent } from '../../../common/delete-template-compone
|
|||||||
styleUrls: ['./cloud-nodes-templates.component.scss', '../../../preferences.component.scss'],
|
styleUrls: ['./cloud-nodes-templates.component.scss', '../../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class CloudNodesTemplatesComponent implements OnInit {
|
export class CloudNodesTemplatesComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
cloudNodesTemplates: CloudTemplate[] = [];
|
cloudNodesTemplates: CloudTemplate[] = [];
|
||||||
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
||||||
|
|
||||||
@ -24,14 +24,14 @@ export class CloudNodesTemplatesComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
this.getTemplates();
|
this.getTemplates();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getTemplates() {
|
getTemplates() {
|
||||||
this.builtInTemplatesService.getTemplates(this.server).subscribe((cloudNodesTemplates: CloudTemplate[]) => {
|
this.builtInTemplatesService.getTemplates(this.controller).subscribe((cloudNodesTemplates: CloudTemplate[]) => {
|
||||||
this.cloudNodesTemplates = cloudNodesTemplates.filter((elem) => elem.template_type === 'cloud' && !elem.builtin);
|
this.cloudNodesTemplates = cloudNodesTemplates.filter((elem) => elem.template_type === 'cloud' && !elem.builtin);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ import { MockedActivatedRoute } from '../../../preferences.component.spec';
|
|||||||
import { EthernetHubsAddTemplateComponent } from './ethernet-hubs-add-template.component';
|
import { EthernetHubsAddTemplateComponent } from './ethernet-hubs-add-template.component';
|
||||||
|
|
||||||
export class MockedBuiltInTemplatesService {
|
export class MockedBuiltInTemplatesService {
|
||||||
public addTemplate(server: Server, ethernetHubTemplate: EthernetHubTemplate) {
|
public addTemplate(controller: Server, ethernetHubTemplate: EthernetHubTemplate) {
|
||||||
return of(ethernetHubTemplate);
|
return of(ethernetHubTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -83,7 +83,7 @@ describe('EthernetHubsAddTemplateComponent', () => {
|
|||||||
it('should call add template', () => {
|
it('should call add template', () => {
|
||||||
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate));
|
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate));
|
||||||
component.templateName = 'sample name';
|
component.templateName = 'sample name';
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
component.formGroup.controls['templateName'].setValue('template name');
|
component.formGroup.controls['templateName'].setValue('template name');
|
||||||
component.formGroup.controls['numberOfPorts'].setValue('1');
|
component.formGroup.controls['numberOfPorts'].setValue('1');
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ describe('EthernetHubsAddTemplateComponent', () => {
|
|||||||
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate));
|
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate));
|
||||||
spyOn(mockedToasterService, 'error');
|
spyOn(mockedToasterService, 'error');
|
||||||
component.templateName = '';
|
component.templateName = '';
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ describe('EthernetHubsAddTemplateComponent', () => {
|
|||||||
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate));
|
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate));
|
||||||
spyOn(mockedToasterService, 'error');
|
spyOn(mockedToasterService, 'error');
|
||||||
component.templateName = 'sample name';
|
component.templateName = 'sample name';
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ import { ToasterService } from '../../../../../services/toaster.service';
|
|||||||
styleUrls: ['./ethernet-hubs-add-template.component.scss', '../../../preferences.component.scss'],
|
styleUrls: ['./ethernet-hubs-add-template.component.scss', '../../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class EthernetHubsAddTemplateComponent implements OnInit {
|
export class EthernetHubsAddTemplateComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
templateName: string = '';
|
templateName: string = '';
|
||||||
formGroup: FormGroup;
|
formGroup: FormGroup;
|
||||||
isLocalComputerChosen: boolean = true;
|
isLocalComputerChosen: boolean = true;
|
||||||
@ -40,8 +40,8 @@ export class EthernetHubsAddTemplateComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ export class EthernetHubsAddTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'builtin', 'ethernet-hubs']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'builtin', 'ethernet-hubs']);
|
||||||
}
|
}
|
||||||
|
|
||||||
addTemplate() {
|
addTemplate() {
|
||||||
@ -74,7 +74,7 @@ export class EthernetHubsAddTemplateComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.builtInTemplatesService.addTemplate(this.server, ethernetHubTemplate).subscribe(() => {
|
this.builtInTemplatesService.addTemplate(this.controller, ethernetHubTemplate).subscribe(() => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -23,11 +23,11 @@ import { MockedActivatedRoute } from '../../../preferences.component.spec';
|
|||||||
import { EthernetHubsTemplateDetailsComponent } from './ethernet-hubs-template-details.component';
|
import { EthernetHubsTemplateDetailsComponent } from './ethernet-hubs-template-details.component';
|
||||||
|
|
||||||
export class MockedBuiltInTemplatesService {
|
export class MockedBuiltInTemplatesService {
|
||||||
public getTemplate(server: Server, template_id: string) {
|
public getTemplate(controller: Server, template_id: string) {
|
||||||
return of({ ports_mapping: [] } as EthernetHubTemplate);
|
return of({ ports_mapping: [] } as EthernetHubTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public saveTemplate(server: Server, cloudTemplate: EthernetHubTemplate) {
|
public saveTemplate(controller: Server, cloudTemplate: EthernetHubTemplate) {
|
||||||
return of(cloudTemplate);
|
return of(cloudTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import { ToasterService } from '../../../../../services/toaster.service';
|
|||||||
styleUrls: ['./ethernet-hubs-template-details.component.scss', '../../../preferences.component.scss'],
|
styleUrls: ['./ethernet-hubs-template-details.component.scss', '../../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class EthernetHubsTemplateDetailsComponent implements OnInit {
|
export class EthernetHubsTemplateDetailsComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
ethernetHubTemplate: EthernetHubTemplate;
|
ethernetHubTemplate: EthernetHubTemplate;
|
||||||
numberOfPorts: number;
|
numberOfPorts: number;
|
||||||
inputForm: FormGroup;
|
inputForm: FormGroup;
|
||||||
@ -41,12 +41,12 @@ export class EthernetHubsTemplateDetailsComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.categories = this.builtInTemplatesConfigurationService.getCategoriesForEthernetHubs();
|
this.categories = this.builtInTemplatesConfigurationService.getCategoriesForEthernetHubs();
|
||||||
this.builtInTemplatesService
|
this.builtInTemplatesService
|
||||||
.getTemplate(this.server, template_id)
|
.getTemplate(this.controller, template_id)
|
||||||
.subscribe((ethernetHubTemplate: EthernetHubTemplate) => {
|
.subscribe((ethernetHubTemplate: EthernetHubTemplate) => {
|
||||||
this.ethernetHubTemplate = ethernetHubTemplate;
|
this.ethernetHubTemplate = ethernetHubTemplate;
|
||||||
this.numberOfPorts = this.ethernetHubTemplate.ports_mapping.length;
|
this.numberOfPorts = this.ethernetHubTemplate.ports_mapping.length;
|
||||||
@ -55,7 +55,7 @@ export class EthernetHubsTemplateDetailsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'builtin', 'ethernet-hubs']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'builtin', 'ethernet-hubs']);
|
||||||
}
|
}
|
||||||
|
|
||||||
onSave() {
|
onSave() {
|
||||||
@ -71,7 +71,7 @@ export class EthernetHubsTemplateDetailsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.builtInTemplatesService
|
this.builtInTemplatesService
|
||||||
.saveTemplate(this.server, this.ethernetHubTemplate)
|
.saveTemplate(this.controller, this.ethernetHubTemplate)
|
||||||
.subscribe((ethernetHubTemplate: EthernetHubTemplate) => {
|
.subscribe((ethernetHubTemplate: EthernetHubTemplate) => {
|
||||||
this.toasterService.success('Changes saved');
|
this.toasterService.success('Changes saved');
|
||||||
});
|
});
|
||||||
|
@ -3,18 +3,18 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 class="col">Ethernet hubs templates</h1>
|
<h1 class="col">Ethernet hubs templates</h1>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
class="cancel-button"
|
class="cancel-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/builtin"
|
routerLink="/controller/{{ controller.id }}/preferences/builtin"
|
||||||
mat-button
|
mat-button
|
||||||
>
|
>
|
||||||
Back
|
Back
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/builtin/ethernet-hubs/addtemplate"
|
routerLink="/controller/{{ controller.id }}/preferences/builtin/ethernet-hubs/addtemplate"
|
||||||
mat-raised-button
|
mat-raised-button
|
||||||
color="primary"
|
color="primary"
|
||||||
>
|
>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<app-empty-templates-list *ngIf="!ethernetHubsTemplates.length"></app-empty-templates-list>
|
<app-empty-templates-list *ngIf="!ethernetHubsTemplates.length"></app-empty-templates-list>
|
||||||
<div class="default-content" *ngIf="ethernetHubsTemplates.length">
|
<div class="default-content" *ngIf="ethernetHubsTemplates.length">
|
||||||
<div class="listcontainer mat-elevation-z8">
|
<div class="listcontainer mat-elevation-z8">
|
||||||
<mat-nav-list *ngIf="server">
|
<mat-nav-list *ngIf="controller">
|
||||||
<div class="list-item" *ngFor="let template of ethernetHubsTemplates">
|
<div class="list-item" *ngFor="let template of ethernetHubsTemplates">
|
||||||
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
||||||
template.name
|
template.name
|
||||||
@ -43,4 +43,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<app-delete-template #deleteComponent [server]="server" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
<app-delete-template #deleteComponent [controller]="controller" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
||||||
|
@ -18,7 +18,7 @@ import { MockedActivatedRoute } from '../../../preferences.component.spec';
|
|||||||
import { EthernetHubsTemplatesComponent } from './ethernet-hubs-templates.component';
|
import { EthernetHubsTemplatesComponent } from './ethernet-hubs-templates.component';
|
||||||
|
|
||||||
export class MockedBuiltInTemplatesService {
|
export class MockedBuiltInTemplatesService {
|
||||||
public getTemplates(server: Server) {
|
public getTemplates(controller: Server) {
|
||||||
return of([{} as EthernetHubTemplate]);
|
return of([{} as EthernetHubTemplate]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import { DeleteTemplateComponent } from '../../../common/delete-template-compone
|
|||||||
styleUrls: ['./ethernet-hubs-templates.component.scss', '../../../preferences.component.scss'],
|
styleUrls: ['./ethernet-hubs-templates.component.scss', '../../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class EthernetHubsTemplatesComponent implements OnInit {
|
export class EthernetHubsTemplatesComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
ethernetHubsTemplates: EthernetHubTemplate[] = [];
|
ethernetHubsTemplates: EthernetHubTemplate[] = [];
|
||||||
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
||||||
|
|
||||||
@ -24,14 +24,14 @@ export class EthernetHubsTemplatesComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
this.getTemplates();
|
this.getTemplates();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getTemplates() {
|
getTemplates() {
|
||||||
this.builtInTemplatesService.getTemplates(this.server).subscribe((ethernetHubsTemplates: EthernetHubTemplate[]) => {
|
this.builtInTemplatesService.getTemplates(this.controller).subscribe((ethernetHubsTemplates: EthernetHubTemplate[]) => {
|
||||||
this.ethernetHubsTemplates = ethernetHubsTemplates.filter(
|
this.ethernetHubsTemplates = ethernetHubsTemplates.filter(
|
||||||
(elem) => elem.template_type === 'ethernet_hub' && !elem.builtin
|
(elem) => elem.template_type === 'ethernet_hub' && !elem.builtin
|
||||||
);
|
);
|
||||||
|
@ -24,7 +24,7 @@ import { MockedActivatedRoute } from '../../../preferences.component.spec';
|
|||||||
import { EthernetSwitchesAddTemplateComponent } from './ethernet-switches-add-template.component';
|
import { EthernetSwitchesAddTemplateComponent } from './ethernet-switches-add-template.component';
|
||||||
|
|
||||||
export class MockedBuiltInTemplatesService {
|
export class MockedBuiltInTemplatesService {
|
||||||
public addTemplate(server: Server, ethernetHubTemplate: EthernetSwitchTemplate) {
|
public addTemplate(controller: Server, ethernetHubTemplate: EthernetSwitchTemplate) {
|
||||||
return of(ethernetHubTemplate);
|
return of(ethernetHubTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -83,7 +83,7 @@ describe('EthernetSwitchesAddTemplateComponent', () => {
|
|||||||
it('should call add template', () => {
|
it('should call add template', () => {
|
||||||
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetSwitchTemplate));
|
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetSwitchTemplate));
|
||||||
component.templateName = 'sample name';
|
component.templateName = 'sample name';
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
component.formGroup.controls['templateName'].setValue('template name');
|
component.formGroup.controls['templateName'].setValue('template name');
|
||||||
component.formGroup.controls['numberOfPorts'].setValue('1');
|
component.formGroup.controls['numberOfPorts'].setValue('1');
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ describe('EthernetSwitchesAddTemplateComponent', () => {
|
|||||||
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetSwitchTemplate));
|
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetSwitchTemplate));
|
||||||
spyOn(mockedToasterService, 'error');
|
spyOn(mockedToasterService, 'error');
|
||||||
component.formGroup.controls['numberOfPorts'].setValue('1');
|
component.formGroup.controls['numberOfPorts'].setValue('1');
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ describe('EthernetSwitchesAddTemplateComponent', () => {
|
|||||||
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetSwitchTemplate));
|
spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetSwitchTemplate));
|
||||||
spyOn(mockedToasterService, 'error');
|
spyOn(mockedToasterService, 'error');
|
||||||
component.formGroup.controls['templateName'].setValue('template name');
|
component.formGroup.controls['templateName'].setValue('template name');
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ import { ToasterService } from '../../../../../services/toaster.service';
|
|||||||
styleUrls: ['./ethernet-switches-add-template.component.scss', '../../../preferences.component.scss'],
|
styleUrls: ['./ethernet-switches-add-template.component.scss', '../../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class EthernetSwitchesAddTemplateComponent implements OnInit {
|
export class EthernetSwitchesAddTemplateComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
templateName: string = '';
|
templateName: string = '';
|
||||||
formGroup: FormGroup;
|
formGroup: FormGroup;
|
||||||
isLocalComputerChosen: boolean = true;
|
isLocalComputerChosen: boolean = true;
|
||||||
@ -40,13 +40,13 @@ export class EthernetSwitchesAddTemplateComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'builtin', 'ethernet-switches']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'builtin', 'ethernet-switches']);
|
||||||
}
|
}
|
||||||
|
|
||||||
setServerType(serverType: string) {
|
setServerType(serverType: string) {
|
||||||
@ -78,7 +78,7 @@ export class EthernetSwitchesAddTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.builtInTemplatesService
|
this.builtInTemplatesService
|
||||||
.addTemplate(this.server, ethernetSwitchTemplate)
|
.addTemplate(this.controller, ethernetSwitchTemplate)
|
||||||
.subscribe((ethernetSwitchTemplate) => {
|
.subscribe((ethernetSwitchTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
|
@ -24,11 +24,11 @@ import { MockedActivatedRoute } from '../../../preferences.component.spec';
|
|||||||
import { EthernetSwitchesTemplateDetailsComponent } from './ethernet-switches-template-details.component';
|
import { EthernetSwitchesTemplateDetailsComponent } from './ethernet-switches-template-details.component';
|
||||||
|
|
||||||
export class MockedBuiltInTemplatesService {
|
export class MockedBuiltInTemplatesService {
|
||||||
public getTemplate(server: Server, template_id: string) {
|
public getTemplate(controller: Server, template_id: string) {
|
||||||
return of({ ports_mapping: [] } as EthernetSwitchTemplate);
|
return of({ ports_mapping: [] } as EthernetSwitchTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public saveTemplate(server: Server, cloudTemplate: EthernetSwitchTemplate) {
|
public saveTemplate(controller: Server, cloudTemplate: EthernetSwitchTemplate) {
|
||||||
return of(cloudTemplate);
|
return of(cloudTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ import { PortsComponent } from '../../../common/ports/ports.component';
|
|||||||
})
|
})
|
||||||
export class EthernetSwitchesTemplateDetailsComponent implements OnInit {
|
export class EthernetSwitchesTemplateDetailsComponent implements OnInit {
|
||||||
@ViewChild(PortsComponent) portsComponent: PortsComponent;
|
@ViewChild(PortsComponent) portsComponent: PortsComponent;
|
||||||
server: Server;
|
controller: Server;
|
||||||
ethernetSwitchTemplate: EthernetSwitchTemplate;
|
ethernetSwitchTemplate: EthernetSwitchTemplate;
|
||||||
inputForm: FormGroup;
|
inputForm: FormGroup;
|
||||||
isSymbolSelectionOpened: boolean = false;
|
isSymbolSelectionOpened: boolean = false;
|
||||||
@ -42,12 +42,12 @@ export class EthernetSwitchesTemplateDetailsComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.getConfiguration();
|
this.getConfiguration();
|
||||||
this.builtInTemplatesService
|
this.builtInTemplatesService
|
||||||
.getTemplate(this.server, template_id)
|
.getTemplate(this.controller, template_id)
|
||||||
.subscribe((ethernetSwitchTemplate: EthernetSwitchTemplate) => {
|
.subscribe((ethernetSwitchTemplate: EthernetSwitchTemplate) => {
|
||||||
this.ethernetSwitchTemplate = ethernetSwitchTemplate;
|
this.ethernetSwitchTemplate = ethernetSwitchTemplate;
|
||||||
});
|
});
|
||||||
@ -60,7 +60,7 @@ export class EthernetSwitchesTemplateDetailsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'builtin', 'ethernet-switches']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'builtin', 'ethernet-switches']);
|
||||||
}
|
}
|
||||||
|
|
||||||
onSave() {
|
onSave() {
|
||||||
@ -69,7 +69,7 @@ export class EthernetSwitchesTemplateDetailsComponent implements OnInit {
|
|||||||
} else {
|
} else {
|
||||||
this.ethernetSwitchTemplate.ports_mapping = this.portsComponent.ethernetPorts;
|
this.ethernetSwitchTemplate.ports_mapping = this.portsComponent.ethernetPorts;
|
||||||
this.builtInTemplatesService
|
this.builtInTemplatesService
|
||||||
.saveTemplate(this.server, this.ethernetSwitchTemplate)
|
.saveTemplate(this.controller, this.ethernetSwitchTemplate)
|
||||||
.subscribe((ethernetSwitchTemplate: EthernetSwitchTemplate) => {
|
.subscribe((ethernetSwitchTemplate: EthernetSwitchTemplate) => {
|
||||||
this.toasterService.success('Changes saved');
|
this.toasterService.success('Changes saved');
|
||||||
});
|
});
|
||||||
|
@ -3,18 +3,18 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 class="col">Ethernet switches templates</h1>
|
<h1 class="col">Ethernet switches templates</h1>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
class="cancel-button"
|
class="cancel-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/builtin"
|
routerLink="/controller/{{ controller.id }}/preferences/builtin"
|
||||||
mat-button
|
mat-button
|
||||||
>
|
>
|
||||||
Back
|
Back
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/builtin/ethernet-switches/addtemplate"
|
routerLink="/controller/{{ controller.id }}/preferences/builtin/ethernet-switches/addtemplate"
|
||||||
mat-raised-button
|
mat-raised-button
|
||||||
color="primary"
|
color="primary"
|
||||||
>
|
>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<app-empty-templates-list *ngIf="!ethernetSwitchesTemplates.length"></app-empty-templates-list>
|
<app-empty-templates-list *ngIf="!ethernetSwitchesTemplates.length"></app-empty-templates-list>
|
||||||
<div class="default-content" *ngIf="ethernetSwitchesTemplates.length">
|
<div class="default-content" *ngIf="ethernetSwitchesTemplates.length">
|
||||||
<div class="listcontainer mat-elevation-z8">
|
<div class="listcontainer mat-elevation-z8">
|
||||||
<mat-nav-list *ngIf="server">
|
<mat-nav-list *ngIf="controller">
|
||||||
<div class="list-item" *ngFor="let template of ethernetSwitchesTemplates">
|
<div class="list-item" *ngFor="let template of ethernetSwitchesTemplates">
|
||||||
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
||||||
template.name
|
template.name
|
||||||
@ -43,4 +43,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<app-delete-template #deleteComponent [server]="server" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
<app-delete-template #deleteComponent [controller]="controller" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
||||||
|
@ -18,7 +18,7 @@ import { MockedActivatedRoute } from '../../../preferences.component.spec';
|
|||||||
import { EthernetSwitchesTemplatesComponent } from './ethernet-switches-templates.component';
|
import { EthernetSwitchesTemplatesComponent } from './ethernet-switches-templates.component';
|
||||||
|
|
||||||
export class MockedBuiltInTemplatesService {
|
export class MockedBuiltInTemplatesService {
|
||||||
public getTemplates(server: Server) {
|
public getTemplates(controller: Server) {
|
||||||
return of([{} as EthernetSwitchTemplate]);
|
return of([{} as EthernetSwitchTemplate]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import { DeleteTemplateComponent } from '../../../common/delete-template-compone
|
|||||||
styleUrls: ['./ethernet-switches-templates.component.scss', '../../../preferences.component.scss'],
|
styleUrls: ['./ethernet-switches-templates.component.scss', '../../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class EthernetSwitchesTemplatesComponent implements OnInit {
|
export class EthernetSwitchesTemplatesComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
ethernetSwitchesTemplates: EthernetSwitchTemplate[] = [];
|
ethernetSwitchesTemplates: EthernetSwitchTemplate[] = [];
|
||||||
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
||||||
|
|
||||||
@ -24,15 +24,15 @@ export class EthernetSwitchesTemplatesComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
this.getTemplates();
|
this.getTemplates();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getTemplates() {
|
getTemplates() {
|
||||||
this.builtInTemplatesService
|
this.builtInTemplatesService
|
||||||
.getTemplates(this.server)
|
.getTemplates(this.controller)
|
||||||
.subscribe((ethernetSwitchesTemplates: EthernetSwitchTemplate[]) => {
|
.subscribe((ethernetSwitchesTemplates: EthernetSwitchTemplate[]) => {
|
||||||
this.ethernetSwitchesTemplates = ethernetSwitchesTemplates.filter(
|
this.ethernetSwitchesTemplates = ethernetSwitchesTemplates.filter(
|
||||||
(elem) => elem.template_type === 'ethernet_switch' && !elem.builtin
|
(elem) => elem.template_type === 'ethernet_switch' && !elem.builtin
|
||||||
|
@ -11,7 +11,7 @@ import { DeleteConfirmationDialogComponent } from '../delete-confirmation-dialog
|
|||||||
styleUrls: ['./delete-template.component.scss'],
|
styleUrls: ['./delete-template.component.scss'],
|
||||||
})
|
})
|
||||||
export class DeleteTemplateComponent {
|
export class DeleteTemplateComponent {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
@Output() deleteEvent = new EventEmitter<string>();
|
@Output() deleteEvent = new EventEmitter<string>();
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@ -33,7 +33,7 @@ export class DeleteTemplateComponent {
|
|||||||
|
|
||||||
dialogRef.afterClosed().subscribe((answer: boolean) => {
|
dialogRef.afterClosed().subscribe((answer: boolean) => {
|
||||||
if (answer) {
|
if (answer) {
|
||||||
this.templateService.deleteTemplate(this.server, templateId).subscribe((answer) => {
|
this.templateService.deleteTemplate(this.controller, templateId).subscribe((answer) => {
|
||||||
this.deleteEvent.emit(templateId);
|
this.deleteEvent.emit(templateId);
|
||||||
this.toasterService.success(`Template ${templateName} deleted.`);
|
this.toasterService.success(`Template ${templateName} deleted.`);
|
||||||
});
|
});
|
||||||
|
@ -7,6 +7,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="default-content">
|
<div class="default-content">
|
||||||
<app-symbols [server]="server" [symbol]="symbol" (symbolChanged)="symbolChanged($event)"></app-symbols>
|
<app-symbols [controller]="controller" [symbol]="symbol" (symbolChanged)="symbolChanged($event)"></app-symbols>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -7,7 +7,7 @@ import { Server } from '../../../../models/server';
|
|||||||
styleUrls: ['./symbols-menu.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./symbols-menu.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class SymbolsMenuComponent {
|
export class SymbolsMenuComponent {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
@Input() symbol: string;
|
@Input() symbol: string;
|
||||||
@Output() symbolChangedEmitter = new EventEmitter<string>();
|
@Output() symbolChangedEmitter = new EventEmitter<string>();
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import { SymbolService } from '../../../../services/symbol.service';
|
|||||||
styleUrls: ['./symbols.component.scss'],
|
styleUrls: ['./symbols.component.scss'],
|
||||||
})
|
})
|
||||||
export class SymbolsComponent implements OnInit {
|
export class SymbolsComponent implements OnInit {
|
||||||
@Input() server: Server;
|
@Input() controller: Server;
|
||||||
@Input() symbol: string;
|
@Input() symbol: string;
|
||||||
@Output() symbolChanged = new EventEmitter<string>();
|
@Output() symbolChanged = new EventEmitter<string>();
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ export class SymbolsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadSymbols() {
|
loadSymbols() {
|
||||||
this.symbolService.list(this.server).subscribe((symbols: Symbol[]) => {
|
this.symbolService.list(this.controller).subscribe((symbols: Symbol[]) => {
|
||||||
this.symbols = symbols;
|
this.symbols = symbols;
|
||||||
this.filteredSymbols = symbols;
|
this.filteredSymbols = symbols;
|
||||||
});
|
});
|
||||||
@ -61,7 +61,7 @@ export class SymbolsComponent implements OnInit {
|
|||||||
fileReader.onloadend = () => {
|
fileReader.onloadend = () => {
|
||||||
let image = fileReader.result;
|
let image = fileReader.result;
|
||||||
let svg = this.createSvgFileForImage(image, imageToUpload);
|
let svg = this.createSvgFileForImage(image, imageToUpload);
|
||||||
this.symbolService.add(this.server, fileName, svg).subscribe(() => {
|
this.symbolService.add(this.controller, fileName, svg).subscribe(() => {
|
||||||
this.loadSymbols();
|
this.loadSymbols();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -78,6 +78,6 @@ export class SymbolsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getImageSourceForTemplate(symbol: string) {
|
getImageSourceForTemplate(symbol: string) {
|
||||||
return `${this.server.protocol}//${this.server.host}:${this.server.port}/${environment.current_version}/symbols/${symbol}/raw`;
|
return `${this.controller.protocol}//${this.controller.host}:${this.controller.port}/${environment.current_version}/symbols/${symbol}/raw`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { AddDockerTemplateComponent } from './add-docker-template.component';
|
import { AddDockerTemplateComponent } from './add-docker-template.component';
|
||||||
|
|
||||||
export class MockedDockerService {
|
export class MockedDockerService {
|
||||||
public addTemplate(server: Server, dockerTemplate: DockerTemplate) {
|
public addTemplate(controller: Server, dockerTemplate: DockerTemplate) {
|
||||||
return of(dockerTemplate);
|
return of(dockerTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./add-docker-template.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./add-docker-template.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class AddDockerTemplateComponent implements OnInit {
|
export class AddDockerTemplateComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
dockerTemplate: DockerTemplate;
|
dockerTemplate: DockerTemplate;
|
||||||
consoleTypes: string[] = [];
|
consoleTypes: string[] = [];
|
||||||
isRemoteComputerChosen: boolean = false;
|
isRemoteComputerChosen: boolean = false;
|
||||||
@ -60,8 +60,8 @@ export class AddDockerTemplateComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.consoleTypes = this.configurationService.getConsoleTypes();
|
this.consoleTypes = this.configurationService.getConsoleTypes();
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ export class AddDockerTemplateComponent implements OnInit {
|
|||||||
this.dockerTemplate = dockerTemplate;
|
this.dockerTemplate = dockerTemplate;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.dockerService.getImages(server).subscribe((images) => {
|
this.dockerService.getImages(controller).subscribe((images) => {
|
||||||
this.dockerImages = images;
|
this.dockerImages = images;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -86,7 +86,7 @@ export class AddDockerTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'docker', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'docker', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
addTemplate() {
|
addTemplate() {
|
||||||
@ -107,7 +107,7 @@ export class AddDockerTemplateComponent implements OnInit {
|
|||||||
this.dockerTemplate.adapters = +this.networkAdaptersForm.get('adapters').value;
|
this.dockerTemplate.adapters = +this.networkAdaptersForm.get('adapters').value;
|
||||||
this.dockerTemplate.compute_id = 'local';
|
this.dockerTemplate.compute_id = 'local';
|
||||||
|
|
||||||
this.dockerService.addTemplate(this.server, this.dockerTemplate).subscribe((template: DockerTemplate) => {
|
this.dockerService.addTemplate(this.controller, this.dockerTemplate).subscribe((template: DockerTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -14,7 +14,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./copy-docker-template.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./copy-docker-template.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class CopyDockerTemplateComponent implements OnInit {
|
export class CopyDockerTemplateComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
templateName: string = '';
|
templateName: string = '';
|
||||||
dockerTemplate: DockerTemplate;
|
dockerTemplate: DockerTemplate;
|
||||||
templateNameForm: FormGroup;
|
templateNameForm: FormGroup;
|
||||||
@ -35,10 +35,10 @@ export class CopyDockerTemplateComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.dockerService.getTemplate(this.server, template_id).subscribe((dockerTemplate: DockerTemplate) => {
|
this.dockerService.getTemplate(this.controller, template_id).subscribe((dockerTemplate: DockerTemplate) => {
|
||||||
this.dockerTemplate = dockerTemplate;
|
this.dockerTemplate = dockerTemplate;
|
||||||
this.templateName = `Copy of ${this.dockerTemplate.name}`;
|
this.templateName = `Copy of ${this.dockerTemplate.name}`;
|
||||||
});
|
});
|
||||||
@ -46,7 +46,7 @@ export class CopyDockerTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'docker', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'docker', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
addTemplate() {
|
addTemplate() {
|
||||||
@ -54,7 +54,7 @@ export class CopyDockerTemplateComponent implements OnInit {
|
|||||||
this.dockerTemplate.template_id = uuid();
|
this.dockerTemplate.template_id = uuid();
|
||||||
this.dockerTemplate.name = this.templateName;
|
this.dockerTemplate.name = this.templateName;
|
||||||
|
|
||||||
this.dockerService.addTemplate(this.server, this.dockerTemplate).subscribe((template: DockerTemplate) => {
|
this.dockerService.addTemplate(this.controller, this.dockerTemplate).subscribe((template: DockerTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -22,11 +22,11 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { DockerTemplateDetailsComponent } from './docker-template-details.component';
|
import { DockerTemplateDetailsComponent } from './docker-template-details.component';
|
||||||
|
|
||||||
export class MockedDockerService {
|
export class MockedDockerService {
|
||||||
public getTemplate(server: Server, template_id: string) {
|
public getTemplate(controller: Server, template_id: string) {
|
||||||
return of({} as DockerTemplate);
|
return of({} as DockerTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public saveTemplate(server: Server, dockerTemplate: DockerTemplate) {
|
public saveTemplate(controller: Server, dockerTemplate: DockerTemplate) {
|
||||||
return of(dockerTemplate);
|
return of(dockerTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./docker-template-details.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./docker-template-details.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class DockerTemplateDetailsComponent implements OnInit {
|
export class DockerTemplateDetailsComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
dockerTemplate: DockerTemplate;
|
dockerTemplate: DockerTemplate;
|
||||||
|
|
||||||
isSymbolSelectionOpened: boolean = false;
|
isSymbolSelectionOpened: boolean = false;
|
||||||
@ -48,11 +48,11 @@ export class DockerTemplateDetailsComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.getConfiguration();
|
this.getConfiguration();
|
||||||
this.dockerService.getTemplate(this.server, template_id).subscribe((dockerTemplate: DockerTemplate) => {
|
this.dockerService.getTemplate(this.controller, template_id).subscribe((dockerTemplate: DockerTemplate) => {
|
||||||
this.dockerTemplate = dockerTemplate;
|
this.dockerTemplate = dockerTemplate;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -65,14 +65,14 @@ export class DockerTemplateDetailsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'docker', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'docker', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
onSave() {
|
onSave() {
|
||||||
if (this.generalSettingsForm.invalid) {
|
if (this.generalSettingsForm.invalid) {
|
||||||
this.toasterService.error(`Fill all required fields`);
|
this.toasterService.error(`Fill all required fields`);
|
||||||
} else {
|
} else {
|
||||||
this.dockerService.saveTemplate(this.server, this.dockerTemplate).subscribe((savedTemplate: DockerTemplate) => {
|
this.dockerService.saveTemplate(this.controller, this.dockerTemplate).subscribe((savedTemplate: DockerTemplate) => {
|
||||||
this.toasterService.success('Changes saved');
|
this.toasterService.success('Changes saved');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -3,18 +3,18 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 class="col">Docker container templates</h1>
|
<h1 class="col">Docker container templates</h1>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
class="cancel-button"
|
class="cancel-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences"
|
routerLink="/controller/{{ controller.id }}/preferences"
|
||||||
mat-button
|
mat-button
|
||||||
>
|
>
|
||||||
Back
|
Back
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/docker/addtemplate"
|
routerLink="/controller/{{ controller.id }}/preferences/docker/addtemplate"
|
||||||
mat-raised-button
|
mat-raised-button
|
||||||
color="primary"
|
color="primary"
|
||||||
>
|
>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<app-empty-templates-list *ngIf="!dockerTemplates.length"></app-empty-templates-list>
|
<app-empty-templates-list *ngIf="!dockerTemplates.length"></app-empty-templates-list>
|
||||||
<div class="default-content" *ngIf="dockerTemplates.length">
|
<div class="default-content" *ngIf="dockerTemplates.length">
|
||||||
<div class="listcontainer mat-elevation-z8">
|
<div class="listcontainer mat-elevation-z8">
|
||||||
<mat-nav-list *ngIf="server">
|
<mat-nav-list *ngIf="controller">
|
||||||
<div class="list-item" *ngFor="let template of dockerTemplates">
|
<div class="list-item" *ngFor="let template of dockerTemplates">
|
||||||
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
||||||
template.name
|
template.name
|
||||||
@ -46,4 +46,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<app-delete-template #deleteComponent [server]="server" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
<app-delete-template #deleteComponent [controller]="controller" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
||||||
|
@ -18,7 +18,7 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { DockerTemplatesComponent } from './docker-templates.component';
|
import { DockerTemplatesComponent } from './docker-templates.component';
|
||||||
|
|
||||||
export class MockedDockerService {
|
export class MockedDockerService {
|
||||||
public getTemplates(server: Server) {
|
public getTemplates(controller: Server) {
|
||||||
return of([{} as DockerTemplate]);
|
return of([{} as DockerTemplate]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import { DeleteTemplateComponent } from '../../common/delete-template-component/
|
|||||||
styleUrls: ['./docker-templates.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./docker-templates.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class DockerTemplatesComponent implements OnInit {
|
export class DockerTemplatesComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
dockerTemplates: DockerTemplate[] = [];
|
dockerTemplates: DockerTemplate[] = [];
|
||||||
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
||||||
|
|
||||||
@ -25,14 +25,14 @@ export class DockerTemplatesComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
this.getTemplates();
|
this.getTemplates();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getTemplates() {
|
getTemplates() {
|
||||||
this.dockerService.getTemplates(this.server).subscribe((dockerTemplates: DockerTemplate[]) => {
|
this.dockerService.getTemplates(this.controller).subscribe((dockerTemplates: DockerTemplate[]) => {
|
||||||
this.dockerTemplates = dockerTemplates.filter((elem) => elem.template_type === 'docker' && !elem.builtin);
|
this.dockerTemplates = dockerTemplates.filter((elem) => elem.template_type === 'docker' && !elem.builtin);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -48,7 +48,7 @@ export class DockerTemplatesComponent implements OnInit {
|
|||||||
copyTemplate(template: DockerTemplate) {
|
copyTemplate(template: DockerTemplate) {
|
||||||
this.router.navigate([
|
this.router.navigate([
|
||||||
'/controller',
|
'/controller',
|
||||||
this.server.id,
|
this.controller.id,
|
||||||
'preferences',
|
'preferences',
|
||||||
'docker',
|
'docker',
|
||||||
'templates',
|
'templates',
|
||||||
|
@ -29,7 +29,7 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { AddIosTemplateComponent } from './add-ios-template.component';
|
import { AddIosTemplateComponent } from './add-ios-template.component';
|
||||||
|
|
||||||
export class MockedIosService {
|
export class MockedIosService {
|
||||||
public addTemplate(server: Server, iosTemplate: IosTemplate) {
|
public addTemplate(controller: Server, iosTemplate: IosTemplate) {
|
||||||
return of(iosTemplate);
|
return of(iosTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,7 +95,7 @@ xdescribe('AddIosTemplateComponent', () => {
|
|||||||
component.iosNameForm.controls['platform'].setValue('platform');
|
component.iosNameForm.controls['platform'].setValue('platform');
|
||||||
component.iosNameForm.controls['chassis'].setValue('chassis');
|
component.iosNameForm.controls['chassis'].setValue('chassis');
|
||||||
component.iosMemoryForm.controls['memory'].setValue(0);
|
component.iosMemoryForm.controls['memory'].setValue(0);
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ xdescribe('AddIosTemplateComponent', () => {
|
|||||||
component.iosNameForm.controls['platform'].setValue('platform');
|
component.iosNameForm.controls['platform'].setValue('platform');
|
||||||
component.iosNameForm.controls['chassis'].setValue('chassis');
|
component.iosNameForm.controls['chassis'].setValue('chassis');
|
||||||
component.iosMemoryForm.controls['memory'].setValue(0);
|
component.iosMemoryForm.controls['memory'].setValue(0);
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ xdescribe('AddIosTemplateComponent', () => {
|
|||||||
component.iosNameForm.controls['platform'].setValue('platform');
|
component.iosNameForm.controls['platform'].setValue('platform');
|
||||||
component.iosNameForm.controls['chassis'].setValue('chassis');
|
component.iosNameForm.controls['chassis'].setValue('chassis');
|
||||||
component.iosMemoryForm.controls['memory'].setValue(0);
|
component.iosMemoryForm.controls['memory'].setValue(0);
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ xdescribe('AddIosTemplateComponent', () => {
|
|||||||
component.iosNameForm.controls['templateName'].setValue('template name');
|
component.iosNameForm.controls['templateName'].setValue('template name');
|
||||||
component.iosNameForm.controls['platform'].setValue('platform');
|
component.iosNameForm.controls['platform'].setValue('platform');
|
||||||
component.iosNameForm.controls['chassis'].setValue('chassis');
|
component.iosNameForm.controls['chassis'].setValue('chassis');
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./add-ios-template.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./add-ios-template.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class AddIosTemplateComponent implements OnInit, OnDestroy {
|
export class AddIosTemplateComponent implements OnInit, OnDestroy {
|
||||||
server: Server;
|
controller: Server;
|
||||||
iosTemplate: IosTemplate;
|
iosTemplate: IosTemplate;
|
||||||
isEtherSwitchRouter: boolean = false;
|
isEtherSwitchRouter: boolean = false;
|
||||||
|
|
||||||
@ -113,8 +113,8 @@ export class AddIosTemplateComponent implements OnInit, OnDestroy {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.getImages();
|
this.getImages();
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ export class AddIosTemplateComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getImages() {
|
getImages() {
|
||||||
this.iosService.getImages(this.server).subscribe((images: IosImage[]) => {
|
this.iosService.getImages(this.controller).subscribe((images: IosImage[]) => {
|
||||||
this.iosImages = images;
|
this.iosImages = images;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -150,11 +150,11 @@ export class AddIosTemplateComponent implements OnInit, OnDestroy {
|
|||||||
this.iosNameForm.controls['templateName'].setValue(name);
|
this.iosNameForm.controls['templateName'].setValue(name);
|
||||||
let fileName = event.target.files[0].name;
|
let fileName = event.target.files[0].name;
|
||||||
|
|
||||||
const url = this.iosService.getImagePath(this.server, fileName);
|
const url = this.iosService.getImagePath(this.controller, fileName);
|
||||||
this.uploader.queue.forEach((elem) => (elem.url = url));
|
this.uploader.queue.forEach((elem) => (elem.url = url));
|
||||||
|
|
||||||
const itemToUpload = this.uploader.queue[0];
|
const itemToUpload = this.uploader.queue[0];
|
||||||
if ((itemToUpload as any).options) (itemToUpload as any).options.disableMultipart = true; ((itemToUpload as any).options.headers = [{ name: 'Authorization', value: 'Bearer ' + this.server.authToken }])
|
if ((itemToUpload as any).options) (itemToUpload as any).options.disableMultipart = true; ((itemToUpload as any).options.headers = [{ name: 'Authorization', value: 'Bearer ' + this.controller.authToken }])
|
||||||
this.uploader.uploadItem(itemToUpload);
|
this.uploader.uploadItem(itemToUpload);
|
||||||
this.snackBar.openFromComponent(UploadingProcessbarComponent, {
|
this.snackBar.openFromComponent(UploadingProcessbarComponent, {
|
||||||
panelClass: 'uplaoding-file-snackabar',
|
panelClass: 'uplaoding-file-snackabar',
|
||||||
@ -187,7 +187,7 @@ export class AddIosTemplateComponent implements OnInit, OnDestroy {
|
|||||||
if (this.networkModulesForTemplate.length > 0) this.completeModulesData();
|
if (this.networkModulesForTemplate.length > 0) this.completeModulesData();
|
||||||
this.iosTemplate.compute_id = 'local';
|
this.iosTemplate.compute_id = 'local';
|
||||||
|
|
||||||
this.iosService.addTemplate(this.server, this.iosTemplate).subscribe((template: IosTemplate) => {
|
this.iosService.addTemplate(this.controller, this.iosTemplate).subscribe((template: IosTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@ -237,7 +237,7 @@ export class AddIosTemplateComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'dynamips', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'dynamips', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
onImageChosen() {
|
onImageChosen() {
|
||||||
|
@ -14,7 +14,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./copy-ios-template.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./copy-ios-template.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class CopyIosTemplateComponent implements OnInit {
|
export class CopyIosTemplateComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
templateName: string = '';
|
templateName: string = '';
|
||||||
iosTemplate: IosTemplate;
|
iosTemplate: IosTemplate;
|
||||||
formGroup: FormGroup;
|
formGroup: FormGroup;
|
||||||
@ -35,10 +35,10 @@ export class CopyIosTemplateComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.iosService.getTemplate(this.server, template_id).subscribe((iosTemplate: IosTemplate) => {
|
this.iosService.getTemplate(this.controller, template_id).subscribe((iosTemplate: IosTemplate) => {
|
||||||
this.iosTemplate = iosTemplate;
|
this.iosTemplate = iosTemplate;
|
||||||
this.templateName = `Copy of ${this.iosTemplate.name}`;
|
this.templateName = `Copy of ${this.iosTemplate.name}`;
|
||||||
});
|
});
|
||||||
@ -46,7 +46,7 @@ export class CopyIosTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'dynamips', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'dynamips', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
addTemplate() {
|
addTemplate() {
|
||||||
@ -54,7 +54,7 @@ export class CopyIosTemplateComponent implements OnInit {
|
|||||||
this.iosTemplate.template_id = uuid();
|
this.iosTemplate.template_id = uuid();
|
||||||
this.iosTemplate.name = this.templateName;
|
this.iosTemplate.name = this.templateName;
|
||||||
|
|
||||||
this.iosService.addTemplate(this.server, this.iosTemplate).subscribe((template: IosTemplate) => {
|
this.iosService.addTemplate(this.controller, this.iosTemplate).subscribe((template: IosTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -10,7 +10,7 @@ import { ServerService } from '../../../../services/server.service';
|
|||||||
styleUrls: ['./dynamips-preferences.component.scss'],
|
styleUrls: ['./dynamips-preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class DynamipsPreferencesComponent implements OnInit {
|
export class DynamipsPreferencesComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
dynamipsPath: string;
|
dynamipsPath: string;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@ -21,8 +21,8 @@ export class DynamipsPreferencesComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,11 +22,11 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { IosTemplateDetailsComponent } from './ios-template-details.component';
|
import { IosTemplateDetailsComponent } from './ios-template-details.component';
|
||||||
|
|
||||||
export class MockedIosService {
|
export class MockedIosService {
|
||||||
public getTemplate(server: Server, template_id: string) {
|
public getTemplate(controller: Server, template_id: string) {
|
||||||
return of({} as IosTemplate);
|
return of({} as IosTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public saveTemplate(server: Server, iosTemplate: IosTemplate) {
|
public saveTemplate(controller: Server, iosTemplate: IosTemplate) {
|
||||||
return of(iosTemplate);
|
return of(iosTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./ios-template-details.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./ios-template-details.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class IosTemplateDetailsComponent implements OnInit {
|
export class IosTemplateDetailsComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
iosTemplate: IosTemplate;
|
iosTemplate: IosTemplate;
|
||||||
|
|
||||||
isSymbolSelectionOpened: boolean = false;
|
isSymbolSelectionOpened: boolean = false;
|
||||||
@ -71,11 +71,11 @@ export class IosTemplateDetailsComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.getConfiguration();
|
this.getConfiguration();
|
||||||
this.iosService.getTemplate(this.server, template_id).subscribe((iosTemplate: IosTemplate) => {
|
this.iosService.getTemplate(this.controller, template_id).subscribe((iosTemplate: IosTemplate) => {
|
||||||
this.iosTemplate = iosTemplate;
|
this.iosTemplate = iosTemplate;
|
||||||
|
|
||||||
this.fillAdaptersData();
|
this.fillAdaptersData();
|
||||||
@ -123,14 +123,14 @@ export class IosTemplateDetailsComponent implements OnInit {
|
|||||||
} else {
|
} else {
|
||||||
this.completeAdaptersData();
|
this.completeAdaptersData();
|
||||||
|
|
||||||
this.iosService.saveTemplate(this.server, this.iosTemplate).subscribe((iosTemplate: IosTemplate) => {
|
this.iosService.saveTemplate(this.controller, this.iosTemplate).subscribe((iosTemplate: IosTemplate) => {
|
||||||
this.toasterService.success('Changes saved');
|
this.toasterService.success('Changes saved');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'dynamips', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'dynamips', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
chooseSymbol() {
|
chooseSymbol() {
|
||||||
|
@ -3,18 +3,18 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 class="col">IOS router templates</h1>
|
<h1 class="col">IOS router templates</h1>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
class="cancel-button"
|
class="cancel-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences"
|
routerLink="/controller/{{ controller.id }}/preferences"
|
||||||
mat-button
|
mat-button
|
||||||
>
|
>
|
||||||
Back
|
Back
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/dynamips/templates/addtemplate"
|
routerLink="/controller/{{ controller.id }}/preferences/dynamips/templates/addtemplate"
|
||||||
mat-raised-button
|
mat-raised-button
|
||||||
color="primary"
|
color="primary"
|
||||||
>
|
>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<app-empty-templates-list *ngIf="!iosTemplates.length"></app-empty-templates-list>
|
<app-empty-templates-list *ngIf="!iosTemplates.length"></app-empty-templates-list>
|
||||||
<div class="default-content" *ngIf="iosTemplates.length">
|
<div class="default-content" *ngIf="iosTemplates.length">
|
||||||
<div class="listcontainer mat-elevation-z8">
|
<div class="listcontainer mat-elevation-z8">
|
||||||
<mat-nav-list *ngIf="server">
|
<mat-nav-list *ngIf="controller">
|
||||||
<div class="list-item" *ngFor="let template of iosTemplates">
|
<div class="list-item" *ngFor="let template of iosTemplates">
|
||||||
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
||||||
template.name
|
template.name
|
||||||
@ -46,4 +46,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<app-delete-template #deleteComponent [server]="server" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
<app-delete-template #deleteComponent [controller]="controller" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
||||||
|
@ -18,7 +18,7 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { IosTemplatesComponent } from './ios-templates.component';
|
import { IosTemplatesComponent } from './ios-templates.component';
|
||||||
|
|
||||||
export class MockedIosService {
|
export class MockedIosService {
|
||||||
public getTemplates(server: Server) {
|
public getTemplates(controller: Server) {
|
||||||
return of([{} as IosTemplate]);
|
return of([{} as IosTemplate]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ import { DeleteTemplateComponent } from '../../common/delete-template-component/
|
|||||||
styleUrls: ['./ios-templates.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./ios-templates.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class IosTemplatesComponent implements OnInit {
|
export class IosTemplatesComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
iosTemplates: IosTemplate[] = [];
|
iosTemplates: IosTemplate[] = [];
|
||||||
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
||||||
|
|
||||||
@ -26,14 +26,14 @@ export class IosTemplatesComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
this.getTemplates();
|
this.getTemplates();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getTemplates() {
|
getTemplates() {
|
||||||
this.iosService.getTemplates(this.server).subscribe((templates: IosTemplate[]) => {
|
this.iosService.getTemplates(this.controller).subscribe((templates: IosTemplate[]) => {
|
||||||
this.iosTemplates = templates.filter((elem) => elem.template_type === 'dynamips' && !elem.builtin);
|
this.iosTemplates = templates.filter((elem) => elem.template_type === 'dynamips' && !elem.builtin);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -49,7 +49,7 @@ export class IosTemplatesComponent implements OnInit {
|
|||||||
copyTemplate(template: IosTemplate) {
|
copyTemplate(template: IosTemplate) {
|
||||||
this.router.navigate([
|
this.router.navigate([
|
||||||
'/controller',
|
'/controller',
|
||||||
this.server.id,
|
this.controller.id,
|
||||||
'preferences',
|
'preferences',
|
||||||
'dynamips',
|
'dynamips',
|
||||||
'templates',
|
'templates',
|
||||||
|
@ -48,7 +48,7 @@ describe('GeneralPreferencesComponent', () => {
|
|||||||
expect(component).toBeTruthy();
|
expect(component).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should set correct server id', () => {
|
it('should set correct controller id', () => {
|
||||||
expect(component.serverId).toBe('1');
|
expect(component.controllerId).toBe('1');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -7,11 +7,11 @@ import { ActivatedRoute } from '@angular/router';
|
|||||||
styleUrls: ['./general-preferences.component.scss'],
|
styleUrls: ['./general-preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class GeneralPreferencesComponent implements OnInit {
|
export class GeneralPreferencesComponent implements OnInit {
|
||||||
public serverId: string = '';
|
public controllerId: string = '';
|
||||||
|
|
||||||
constructor(private route: ActivatedRoute) {}
|
constructor(private route: ActivatedRoute) {}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.serverId = this.route.snapshot.paramMap.get('controller_id');
|
this.controllerId = this.route.snapshot.paramMap.get('controller_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { AddIouTemplateComponent } from './add-iou-template.component';
|
import { AddIouTemplateComponent } from './add-iou-template.component';
|
||||||
|
|
||||||
export class MockedIouService {
|
export class MockedIouService {
|
||||||
public addTemplate(server: Server, iouTemplate: IouTemplate) {
|
public addTemplate(controller: Server, iouTemplate: IouTemplate) {
|
||||||
return of(iouTemplate);
|
return of(iouTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,7 +93,7 @@ xdescribe('AddIouTemplateComponent', () => {
|
|||||||
component.templateNameForm.controls['templateName'].setValue('sample name');
|
component.templateNameForm.controls['templateName'].setValue('sample name');
|
||||||
component.imageForm.controls['imageName'].setValue('sample name');
|
component.imageForm.controls['imageName'].setValue('sample name');
|
||||||
component.newImageSelected = true;
|
component.newImageSelected = true;
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ xdescribe('AddIouTemplateComponent', () => {
|
|||||||
spyOn(mockedIouService, 'addTemplate').and.returnValue(of({} as IouTemplate));
|
spyOn(mockedIouService, 'addTemplate').and.returnValue(of({} as IouTemplate));
|
||||||
component.imageForm.controls['imageName'].setValue('sample name');
|
component.imageForm.controls['imageName'].setValue('sample name');
|
||||||
component.newImageSelected = true;
|
component.newImageSelected = true;
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ xdescribe('AddIouTemplateComponent', () => {
|
|||||||
spyOn(mockedIouService, 'addTemplate').and.returnValue(of({} as IouTemplate));
|
spyOn(mockedIouService, 'addTemplate').and.returnValue(of({} as IouTemplate));
|
||||||
component.templateNameForm.controls['templateName'].setValue('sample name');
|
component.templateNameForm.controls['templateName'].setValue('sample name');
|
||||||
component.newImageSelected = true;
|
component.newImageSelected = true;
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./add-iou-template.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./add-iou-template.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class AddIouTemplateComponent implements OnInit, OnDestroy {
|
export class AddIouTemplateComponent implements OnInit, OnDestroy {
|
||||||
server: Server;
|
controller: Server;
|
||||||
iouTemplate: IouTemplate;
|
iouTemplate: IouTemplate;
|
||||||
isRemoteComputerChosen: boolean = false;
|
isRemoteComputerChosen: boolean = false;
|
||||||
newImageSelected: boolean = false;
|
newImageSelected: boolean = false;
|
||||||
@ -85,8 +85,8 @@ export class AddIouTemplateComponent implements OnInit, OnDestroy {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
this.getImages();
|
this.getImages();
|
||||||
this.templateMocksService.getIouTemplate().subscribe((iouTemplate: IouTemplate) => {
|
this.templateMocksService.getIouTemplate().subscribe((iouTemplate: IouTemplate) => {
|
||||||
this.iouTemplate = iouTemplate;
|
this.iouTemplate = iouTemplate;
|
||||||
@ -102,7 +102,7 @@ export class AddIouTemplateComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getImages() {
|
getImages() {
|
||||||
this.iouService.getImages(this.server).subscribe((images: IouImage[]) => {
|
this.iouService.getImages(this.controller).subscribe((images: IouImage[]) => {
|
||||||
this.iouImages = images;
|
this.iouImages = images;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -121,11 +121,11 @@ export class AddIouTemplateComponent implements OnInit, OnDestroy {
|
|||||||
let name = event.target.files[0].name;
|
let name = event.target.files[0].name;
|
||||||
this.imageForm.controls['imageName'].setValue(name);
|
this.imageForm.controls['imageName'].setValue(name);
|
||||||
|
|
||||||
const url = this.iouService.getImagePath(this.server, name);
|
const url = this.iouService.getImagePath(this.controller, name);
|
||||||
this.uploader.queue.forEach((elem) => (elem.url = url));
|
this.uploader.queue.forEach((elem) => (elem.url = url));
|
||||||
|
|
||||||
const itemToUpload = this.uploader.queue[0];
|
const itemToUpload = this.uploader.queue[0];
|
||||||
if ((itemToUpload as any).options) (itemToUpload as any).options.disableMultipart = true; ((itemToUpload as any).options.headers = [{ name: 'Authorization', value: 'Bearer ' + this.server.authToken }])
|
if ((itemToUpload as any).options) (itemToUpload as any).options.disableMultipart = true; ((itemToUpload as any).options.headers = [{ name: 'Authorization', value: 'Bearer ' + this.controller.authToken }])
|
||||||
this.uploader.uploadItem(itemToUpload);
|
this.uploader.uploadItem(itemToUpload);
|
||||||
this.snackBar.openFromComponent(UploadingProcessbarComponent, {
|
this.snackBar.openFromComponent(UploadingProcessbarComponent, {
|
||||||
panelClass: 'uplaoding-file-snackabar',
|
panelClass: 'uplaoding-file-snackabar',
|
||||||
@ -145,7 +145,7 @@ export class AddIouTemplateComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'iou', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'iou', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
addTemplate() {
|
addTemplate() {
|
||||||
@ -166,7 +166,7 @@ export class AddIouTemplateComponent implements OnInit, OnDestroy {
|
|||||||
this.iouTemplate.serial_adapters = 2;
|
this.iouTemplate.serial_adapters = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.iouService.addTemplate(this.server, this.iouTemplate).subscribe((template: IouTemplate) => {
|
this.iouService.addTemplate(this.controller, this.iouTemplate).subscribe((template: IouTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -14,7 +14,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./copy-iou-template.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./copy-iou-template.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class CopyIouTemplateComponent implements OnInit {
|
export class CopyIouTemplateComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
templateName: string = '';
|
templateName: string = '';
|
||||||
iouTemplate: IouTemplate;
|
iouTemplate: IouTemplate;
|
||||||
templateNameForm: FormGroup;
|
templateNameForm: FormGroup;
|
||||||
@ -35,10 +35,10 @@ export class CopyIouTemplateComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.qemuService.getTemplate(this.server, template_id).subscribe((iouTemplate: IouTemplate) => {
|
this.qemuService.getTemplate(this.controller, template_id).subscribe((iouTemplate: IouTemplate) => {
|
||||||
this.iouTemplate = iouTemplate;
|
this.iouTemplate = iouTemplate;
|
||||||
this.templateName = `Copy of ${this.iouTemplate.name}`;
|
this.templateName = `Copy of ${this.iouTemplate.name}`;
|
||||||
});
|
});
|
||||||
@ -46,7 +46,7 @@ export class CopyIouTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'iou', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'iou', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
addTemplate() {
|
addTemplate() {
|
||||||
@ -54,7 +54,7 @@ export class CopyIouTemplateComponent implements OnInit {
|
|||||||
this.iouTemplate.template_id = uuid();
|
this.iouTemplate.template_id = uuid();
|
||||||
this.iouTemplate.name = this.templateName;
|
this.iouTemplate.name = this.templateName;
|
||||||
|
|
||||||
this.qemuService.addTemplate(this.server, this.iouTemplate).subscribe((template: IouTemplate) => {
|
this.qemuService.addTemplate(this.controller, this.iouTemplate).subscribe((template: IouTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -22,11 +22,11 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { IouTemplateDetailsComponent } from './iou-template-details.component';
|
import { IouTemplateDetailsComponent } from './iou-template-details.component';
|
||||||
|
|
||||||
export class MockedIouService {
|
export class MockedIouService {
|
||||||
public getTemplate(server: Server, template_id: string) {
|
public getTemplate(controller: Server, template_id: string) {
|
||||||
return of({} as IouTemplate);
|
return of({} as IouTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public saveTemplate(server: Server, iouTemplate: IouTemplate) {
|
public saveTemplate(controller: Server, iouTemplate: IouTemplate) {
|
||||||
return of(iouTemplate);
|
return of(iouTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./iou-template-details.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./iou-template-details.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class IouTemplateDetailsComponent implements OnInit {
|
export class IouTemplateDetailsComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
iouTemplate: IouTemplate;
|
iouTemplate: IouTemplate;
|
||||||
|
|
||||||
isSymbolSelectionOpened: boolean = false;
|
isSymbolSelectionOpened: boolean = false;
|
||||||
@ -53,11 +53,11 @@ export class IouTemplateDetailsComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.getConfiguration();
|
this.getConfiguration();
|
||||||
this.iouService.getTemplate(this.server, template_id).subscribe((iouTemplate: IouTemplate) => {
|
this.iouService.getTemplate(this.controller, template_id).subscribe((iouTemplate: IouTemplate) => {
|
||||||
this.iouTemplate = iouTemplate;
|
this.iouTemplate = iouTemplate;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -69,14 +69,14 @@ export class IouTemplateDetailsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'iou', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'iou', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
onSave() {
|
onSave() {
|
||||||
if (this.generalSettingsForm.invalid || this.networkForm.invalid) {
|
if (this.generalSettingsForm.invalid || this.networkForm.invalid) {
|
||||||
this.toasterService.error(`Fill all required fields`);
|
this.toasterService.error(`Fill all required fields`);
|
||||||
} else {
|
} else {
|
||||||
this.iouService.saveTemplate(this.server, this.iouTemplate).subscribe(() => {
|
this.iouService.saveTemplate(this.controller, this.iouTemplate).subscribe(() => {
|
||||||
this.toasterService.success('Changes saved');
|
this.toasterService.success('Changes saved');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -3,18 +3,18 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 class="col">IOU device templates</h1>
|
<h1 class="col">IOU device templates</h1>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
class="cancel-button"
|
class="cancel-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences"
|
routerLink="/controller/{{ controller.id }}/preferences"
|
||||||
mat-button
|
mat-button
|
||||||
>
|
>
|
||||||
Back
|
Back
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/iou/addtemplate"
|
routerLink="/controller/{{ controller.id }}/preferences/iou/addtemplate"
|
||||||
mat-raised-button
|
mat-raised-button
|
||||||
color="primary"
|
color="primary"
|
||||||
>
|
>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<app-empty-templates-list *ngIf="!iouTemplates.length"></app-empty-templates-list>
|
<app-empty-templates-list *ngIf="!iouTemplates.length"></app-empty-templates-list>
|
||||||
<div class="default-content" *ngIf="iouTemplates.length">
|
<div class="default-content" *ngIf="iouTemplates.length">
|
||||||
<div class="listcontainer mat-elevation-z8">
|
<div class="listcontainer mat-elevation-z8">
|
||||||
<mat-nav-list *ngIf="server">
|
<mat-nav-list *ngIf="controller">
|
||||||
<div class="list-item" *ngFor="let template of iouTemplates">
|
<div class="list-item" *ngFor="let template of iouTemplates">
|
||||||
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
<mat-list-item class="template-name" routerLink="{{ template.template_id }}">{{
|
||||||
template.name
|
template.name
|
||||||
@ -46,4 +46,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<app-delete-template #deleteComponent [server]="server" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
<app-delete-template #deleteComponent [controller]="controller" (deleteEvent)="onDeleteEvent()"> </app-delete-template>
|
||||||
|
@ -18,7 +18,7 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { IouTemplatesComponent } from './iou-templates.component';
|
import { IouTemplatesComponent } from './iou-templates.component';
|
||||||
|
|
||||||
export class MockedIouService {
|
export class MockedIouService {
|
||||||
public getTemplates(server: Server) {
|
public getTemplates(controller: Server) {
|
||||||
return of([{} as IouTemplate]);
|
return of([{} as IouTemplate]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import { DeleteTemplateComponent } from '../../common/delete-template-component/
|
|||||||
styleUrls: ['./iou-templates.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./iou-templates.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class IouTemplatesComponent implements OnInit {
|
export class IouTemplatesComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
iouTemplates: IouTemplate[] = [];
|
iouTemplates: IouTemplate[] = [];
|
||||||
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
@ViewChild(DeleteTemplateComponent) deleteComponent: DeleteTemplateComponent;
|
||||||
|
|
||||||
@ -25,14 +25,14 @@ export class IouTemplatesComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
this.getTemplates();
|
this.getTemplates();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getTemplates() {
|
getTemplates() {
|
||||||
this.iouService.getTemplates(this.server).subscribe((iouTemplates: IouTemplate[]) => {
|
this.iouService.getTemplates(this.controller).subscribe((iouTemplates: IouTemplate[]) => {
|
||||||
this.iouTemplates = iouTemplates.filter((elem) => elem.template_type === 'iou' && !elem.builtin);
|
this.iouTemplates = iouTemplates.filter((elem) => elem.template_type === 'iou' && !elem.builtin);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -46,6 +46,6 @@ export class IouTemplatesComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
copyTemplate(template: IouTemplate) {
|
copyTemplate(template: IouTemplate) {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'iou', 'templates', template.template_id, 'copy']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'iou', 'templates', template.template_id, 'copy']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,14 +7,14 @@
|
|||||||
<div class="default-content">
|
<div class="default-content">
|
||||||
<div class="listcontainer mat-elevation-z8">
|
<div class="listcontainer mat-elevation-z8">
|
||||||
<mat-nav-list>
|
<mat-nav-list>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/builtin"> Built-in </mat-list-item>
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/builtin"> Built-in </mat-list-item>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/dynamips/templates"> Dynamips </mat-list-item>
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/dynamips/templates"> Dynamips </mat-list-item>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/iou/templates"> IOS on Unix </mat-list-item>
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/iou/templates"> IOS on Unix </mat-list-item>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/vpcs/templates"> VPCS </mat-list-item>
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/vpcs/templates"> VPCS </mat-list-item>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/qemu/templates"> QEMU </mat-list-item>
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/qemu/templates"> QEMU </mat-list-item>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/virtualbox/templates"> VirtualBox </mat-list-item>
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/virtualbox/templates"> VirtualBox </mat-list-item>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/vmware/templates"> VMware </mat-list-item>
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/vmware/templates"> VMware </mat-list-item>
|
||||||
<mat-list-item routerLink="/controller/{{ serverId }}/preferences/docker/templates"> Docker </mat-list-item>
|
<mat-list-item routerLink="/controller/{{ controllerId }}/preferences/docker/templates"> Docker </mat-list-item>
|
||||||
</mat-nav-list>
|
</mat-nav-list>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -69,6 +69,6 @@ describe('PreferencesComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should save correct server id', () => {
|
it('should save correct server id', () => {
|
||||||
expect(component.serverId).toBe('1');
|
expect(component.controllerId).toBe('1');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -7,11 +7,11 @@ import { ActivatedRoute } from '@angular/router';
|
|||||||
styleUrls: ['./preferences.component.scss'],
|
styleUrls: ['./preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class PreferencesComponent implements OnInit {
|
export class PreferencesComponent implements OnInit {
|
||||||
public serverId: string = '';
|
public controllerId: string = '';
|
||||||
|
|
||||||
constructor(private route: ActivatedRoute) {}
|
constructor(private route: ActivatedRoute) {}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.serverId = this.route.snapshot.paramMap.get('controller_id');
|
this.controllerId = this.route.snapshot.paramMap.get('controller_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,15 +28,15 @@ import { MockedActivatedRoute } from '../../preferences.component.spec';
|
|||||||
import { AddQemuVmTemplateComponent } from './add-qemu-vm-template.component';
|
import { AddQemuVmTemplateComponent } from './add-qemu-vm-template.component';
|
||||||
|
|
||||||
export class MockedQemuService {
|
export class MockedQemuService {
|
||||||
public addTemplate(server: Server, qemuTemplate: QemuTemplate) {
|
public addTemplate(controller: Server, qemuTemplate: QemuTemplate) {
|
||||||
return of(qemuTemplate);
|
return of(qemuTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getBinaries(server: Server) {
|
public getBinaries(controller: Server) {
|
||||||
return of([]);
|
return of([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getImages(server: Server) {
|
public getImages(controller: Server) {
|
||||||
return of([]);
|
return of([]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -110,7 +110,7 @@ xdescribe('AddQemuVmTemplateComponent', () => {
|
|||||||
version: 'version',
|
version: 'version',
|
||||||
};
|
};
|
||||||
component.newImageSelected = true;
|
component.newImageSelected = true;
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ xdescribe('AddQemuVmTemplateComponent', () => {
|
|||||||
version: 'version',
|
version: 'version',
|
||||||
};
|
};
|
||||||
component.newImageSelected = true;
|
component.newImageSelected = true;
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ xdescribe('AddQemuVmTemplateComponent', () => {
|
|||||||
version: 'version',
|
version: 'version',
|
||||||
};
|
};
|
||||||
component.newImageSelected = true;
|
component.newImageSelected = true;
|
||||||
component.server = { id: 1 } as Server;
|
component.controller = { id: 1 } as Server;
|
||||||
|
|
||||||
component.addTemplate();
|
component.addTemplate();
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./add-qemu-vm-template.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./add-qemu-vm-template.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class AddQemuVmTemplateComponent implements OnInit {
|
export class AddQemuVmTemplateComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
qemuBinaries: QemuBinary[] = [];
|
qemuBinaries: QemuBinary[] = [];
|
||||||
selectPlatform: string[] = [];
|
selectPlatform: string[] = [];
|
||||||
selectedPlatform: string;
|
selectedPlatform: string;
|
||||||
@ -88,7 +88,7 @@ export class AddQemuVmTemplateComponent implements OnInit {
|
|||||||
status: number,
|
status: number,
|
||||||
headers: ParsedResponseHeaders
|
headers: ParsedResponseHeaders
|
||||||
) => {
|
) => {
|
||||||
this.qemuService.getImages(this.server).subscribe((qemuImages: QemuImage[]) => {
|
this.qemuService.getImages(this.controller).subscribe((qemuImages: QemuImage[]) => {
|
||||||
this.qemuImages = qemuImages;
|
this.qemuImages = qemuImages;
|
||||||
});
|
});
|
||||||
this.toasterService.success('Image uploaded');
|
this.toasterService.success('Image uploaded');
|
||||||
@ -101,20 +101,20 @@ export class AddQemuVmTemplateComponent implements OnInit {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.templateMocksService.getQemuTemplate().subscribe((qemuTemplate: QemuTemplate) => {
|
this.templateMocksService.getQemuTemplate().subscribe((qemuTemplate: QemuTemplate) => {
|
||||||
this.qemuTemplate = qemuTemplate;
|
this.qemuTemplate = qemuTemplate;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
this.qemuService.getBinaries(this.server).subscribe((qemuBinaries: QemuBinary[]) => {
|
this.qemuService.getBinaries(this.controller).subscribe((qemuBinaries: QemuBinary[]) => {
|
||||||
this.qemuBinaries = qemuBinaries;
|
this.qemuBinaries = qemuBinaries;
|
||||||
if (this.qemuBinaries[0]) this.selectedBinary = this.qemuBinaries[0];
|
if (this.qemuBinaries[0]) this.selectedBinary = this.qemuBinaries[0];
|
||||||
});
|
});
|
||||||
|
|
||||||
this.qemuService.getImages(this.server).subscribe((qemuImages: QemuImage[]) => {
|
this.qemuService.getImages(this.controller).subscribe((qemuImages: QemuImage[]) => {
|
||||||
this.qemuImages = qemuImages;
|
this.qemuImages = qemuImages;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -150,12 +150,12 @@ export class AddQemuVmTemplateComponent implements OnInit {
|
|||||||
let name = event.target.files[0].name;
|
let name = event.target.files[0].name;
|
||||||
this.diskForm.controls['fileName'].setValue(name);
|
this.diskForm.controls['fileName'].setValue(name);
|
||||||
|
|
||||||
const url = this.qemuService.getImagePath(this.server, name);
|
const url = this.qemuService.getImagePath(this.controller, name);
|
||||||
this.uploader.queue.forEach((elem) => (elem.url = url));
|
this.uploader.queue.forEach((elem) => (elem.url = url));
|
||||||
|
|
||||||
const itemToUpload = this.uploader.queue[0];
|
const itemToUpload = this.uploader.queue[0];
|
||||||
|
|
||||||
if ((itemToUpload as any).options) (itemToUpload as any).options.disableMultipart = true; ((itemToUpload as any).options.headers =[{name:'Authorization',value:'Bearer ' + this.server.authToken}])
|
if ((itemToUpload as any).options) (itemToUpload as any).options.disableMultipart = true; ((itemToUpload as any).options.headers =[{name:'Authorization',value:'Bearer ' + this.controller.authToken}])
|
||||||
this.uploader.uploadItem(itemToUpload);
|
this.uploader.uploadItem(itemToUpload);
|
||||||
this.snackBar.openFromComponent(UploadingProcessbarComponent,{panelClass: 'uplaoding-file-snackabar', data:{upload_file_type:'Image'}});
|
this.snackBar.openFromComponent(UploadingProcessbarComponent,{panelClass: 'uplaoding-file-snackabar', data:{upload_file_type:'Image'}});
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ export class AddQemuVmTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'qemu', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'qemu', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
addTemplate() {
|
addTemplate() {
|
||||||
@ -187,7 +187,7 @@ export class AddQemuVmTemplateComponent implements OnInit {
|
|||||||
this.qemuTemplate.name = this.nameForm.get('templateName').value;
|
this.qemuTemplate.name = this.nameForm.get('templateName').value;
|
||||||
this.qemuTemplate.compute_id = 'local';
|
this.qemuTemplate.compute_id = 'local';
|
||||||
|
|
||||||
this.qemuService.addTemplate(this.server, this.qemuTemplate).subscribe((template: QemuTemplate) => {
|
this.qemuService.addTemplate(this.controller, this.qemuTemplate).subscribe((template: QemuTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -15,7 +15,7 @@ import { ToasterService } from '../../../../services/toaster.service';
|
|||||||
styleUrls: ['./copy-qemu-vm-template.component.scss', '../../preferences.component.scss'],
|
styleUrls: ['./copy-qemu-vm-template.component.scss', '../../preferences.component.scss'],
|
||||||
})
|
})
|
||||||
export class CopyQemuVmTemplateComponent implements OnInit {
|
export class CopyQemuVmTemplateComponent implements OnInit {
|
||||||
server: Server;
|
controller: Server;
|
||||||
qemuBinaries: QemuBinary[] = [];
|
qemuBinaries: QemuBinary[] = [];
|
||||||
templateName: string = '';
|
templateName: string = '';
|
||||||
qemuTemplate: QemuTemplate;
|
qemuTemplate: QemuTemplate;
|
||||||
@ -37,10 +37,10 @@ export class CopyQemuVmTemplateComponent implements OnInit {
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
const controller_id = this.route.snapshot.paramMap.get('controller_id');
|
||||||
const template_id = this.route.snapshot.paramMap.get('template_id');
|
const template_id = this.route.snapshot.paramMap.get('template_id');
|
||||||
this.serverService.get(parseInt(controller_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(controller_id, 10)).then((controller: Server) => {
|
||||||
this.server = server;
|
this.controller = controller;
|
||||||
|
|
||||||
this.qemuService.getTemplate(this.server, template_id).subscribe((qemuTemplate: QemuTemplate) => {
|
this.qemuService.getTemplate(this.controller, template_id).subscribe((qemuTemplate: QemuTemplate) => {
|
||||||
this.qemuTemplate = qemuTemplate;
|
this.qemuTemplate = qemuTemplate;
|
||||||
this.templateName = `Copy of ${this.qemuTemplate.name}`;
|
this.templateName = `Copy of ${this.qemuTemplate.name}`;
|
||||||
});
|
});
|
||||||
@ -48,7 +48,7 @@ export class CopyQemuVmTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
this.router.navigate(['/controller', this.server.id, 'preferences', 'qemu', 'templates']);
|
this.router.navigate(['/controller', this.controller.id, 'preferences', 'qemu', 'templates']);
|
||||||
}
|
}
|
||||||
|
|
||||||
addTemplate() {
|
addTemplate() {
|
||||||
@ -56,7 +56,7 @@ export class CopyQemuVmTemplateComponent implements OnInit {
|
|||||||
this.qemuTemplate.template_id = uuid();
|
this.qemuTemplate.template_id = uuid();
|
||||||
this.qemuTemplate.name = this.templateName;
|
this.qemuTemplate.name = this.templateName;
|
||||||
|
|
||||||
this.qemuService.addTemplate(this.server, this.qemuTemplate).subscribe((template: QemuTemplate) => {
|
this.qemuService.addTemplate(this.controller, this.qemuTemplate).subscribe((template: QemuTemplate) => {
|
||||||
this.goBack();
|
this.goBack();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<h1 class="col">QEMU preferences</h1>
|
<h1 class="col">QEMU preferences</h1>
|
||||||
<button
|
<button
|
||||||
*ngIf="server"
|
*ngIf="controller"
|
||||||
class="top-button"
|
class="top-button"
|
||||||
routerLink="/controller/{{ server.id }}/preferences/qemu/templates"
|
routerLink="/controller/{{ controller.id }}/preferences/qemu/templates"
|
||||||
mat-raised-button
|
mat-raised-button
|
||||||
color="primary"
|
color="primary"
|
||||||
>
|
>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user