diff --git a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.html b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.html index f3595d1e..4a35095d 100644 --- a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.html +++ b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.html @@ -4,9 +4,164 @@

Cloud configuration

-
-
-
+
+ + + + + General + + + + + + + + + + + + + + + {{category[0]}} + + + + + + + {{type}} + + + + + + + + + + + + + + + + + Ethernet interfaces + + +
+
{{port.name}}


+
+ + + + {{type}} + + + + +
+ + + + TAP interfaces + + +
+
{{port.name}}


+
+ + + + +
+ + + + UDP tunnels + + + + + + + + + + + + + + + + + + + + + + + + + +
Name {{element.name}} Local port {{element.rport}} Type {{element.rhost}} Remote port {{element.lport}}

+ + + + + + + + + + + + + +
+

diff --git a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.scss b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.scss index ceb5950c..504a43bd 100644 --- a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.scss +++ b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.scss @@ -6,3 +6,15 @@ .select { width: 100%; } + +th { + border: 0px!important; +} + +th.mat-header-cell { + padding-bottom: 15px; +} + +td.mat-cell { + padding-top: 15px; +} diff --git a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.ts b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.ts index f2ce3247..4dc5cc10 100644 --- a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.ts +++ b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.ts @@ -3,9 +3,9 @@ import { ActivatedRoute } from '@angular/router'; import { ServerService } from '../../../../../services/server.service'; import { Server } from '../../../../../models/server'; import { ToasterService } from '../../../../../services/toaster.service'; -import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms'; import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; import { CloudTemplate } from '../../../../../models/templates/cloud-template'; +import { PortsMappingEntity } from '../../../../../models/ethernetHub/ports-mapping-enity'; @Component({ @@ -16,18 +16,34 @@ import { CloudTemplate } from '../../../../../models/templates/cloud-template'; export class CloudNodesTemplateDetailsComponent implements OnInit { server: Server; cloudNodeTemplate: CloudTemplate; - inputForm: FormGroup; + + categories = [["Default", "guest"], + ["Routers", "router"], + ["Switches", "switch"], + ["End devices", "end_device"], + ["Security devices", "security_device"]]; + consoleTypes: string[] = ['telnet', 'none']; + + tapInterface: string = ''; + ethernetInterface: string = ''; + ethernetInterfaces: string[] = ['Ethernet 2', 'Ethernet 3']; + ports_mapping_ethernet: PortsMappingEntity[] = []; + ports_mapping_tap: PortsMappingEntity[] = []; + ports_mapping_udp: PortsMappingEntity[] = []; + newPort: PortsMappingEntity; + displayedColumns: string[] = ['name', 'lport', 'rhost', 'rport']; + dataSourceUdp: PortsMappingEntity[] = []; constructor( private route: ActivatedRoute, private serverService: ServerService, private builtInTemplatesService: BuiltInTemplatesService, - private toasterService: ToasterService, - private formBuilder: FormBuilder + private toasterService: ToasterService ) { - this.inputForm = this.formBuilder.group({ - templateName: new FormControl('', Validators.required) - }); + this.newPort = { + name: '', + port_number: 0, + }; } ngOnInit() { @@ -38,17 +54,58 @@ export class CloudNodesTemplateDetailsComponent implements OnInit { this.builtInTemplatesService.getTemplate(this.server, template_id).subscribe((cloudNodeTemplate: CloudTemplate) => { this.cloudNodeTemplate = cloudNodeTemplate; + + this.ports_mapping_ethernet = this.cloudNodeTemplate.ports_mapping + .filter((elem) => elem.type === 'ethernet'); + + this.ports_mapping_tap = this.cloudNodeTemplate.ports_mapping + .filter((elem) => elem.type === 'tap'); + + this.ports_mapping_udp = this.cloudNodeTemplate.ports_mapping + .filter((elem) => elem.type === 'udp'); + + this.dataSourceUdp = this.ports_mapping_udp; }); }); } - onSave() { - if (this.inputForm.invalid) { - this.toasterService.error(`Fill all required fields`); - } else { - this.builtInTemplatesService.saveTemplate(this.server, this.cloudNodeTemplate).subscribe((cloudNodeTemplate: CloudTemplate) => { - this.toasterService.success("Changes saved"); + onAddEthernetInterface() { + if (this.ethernetInterface) { + this.ports_mapping_ethernet.push({ + interface: this.ethernetInterface, + name: this.ethernetInterface, + port_number: 0, + type: "ethernet" }); } } + + onAddTapInterface() { + if (this.tapInterface) { + this.ports_mapping_tap.push({ + interface: this.tapInterface, + name: this.tapInterface, + port_number: 0, + type: "tap" + }); + } + } + + onAddUdpInterface() { + this.ports_mapping_udp.push(this.newPort); + this.dataSourceUdp = [...this.ports_mapping_udp]; + + this.newPort = { + name: '', + port_number: 0, + }; + } + + onSave() { + this.cloudNodeTemplate.ports_mapping = [...this.ports_mapping_ethernet, ...this.ports_mapping_tap]; + + this.builtInTemplatesService.saveTemplate(this.server, this.cloudNodeTemplate).subscribe((cloudNodeTemplate: CloudTemplate) => { + this.toasterService.success("Changes saved"); + }); + } } diff --git a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component.ts b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component.ts index 922cde13..b686fa87 100644 --- a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component.ts +++ b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component.ts @@ -38,7 +38,7 @@ export class EthernetSwitchesTemplateDetailsComponent implements OnInit { private builtInTemplatesService: BuiltInTemplatesService, private toasterService: ToasterService, private formBuilder: FormBuilder - ) { + ){ this.inputForm = this.formBuilder.group({ templateName: new FormControl('', Validators.required), defaultName: new FormControl('', Validators.required), diff --git a/src/app/models/ethernetHub/ports-mapping-enity.ts b/src/app/models/ethernetHub/ports-mapping-enity.ts index d95691ec..ba470929 100644 --- a/src/app/models/ethernetHub/ports-mapping-enity.ts +++ b/src/app/models/ethernetHub/ports-mapping-enity.ts @@ -1,7 +1,11 @@ export interface PortsMappingEntity { ethertype?: string; + interface?: string, name: string; port_number: number; type?: string; vlan?: number; + rhost?: string; + lport?: number; + rport?: number; }