mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-05-08 11:38:38 +00:00
Support for Qemu
This commit is contained in:
parent
9e5985c8c8
commit
d127986b03
@ -84,7 +84,8 @@
|
|||||||
#file
|
#file
|
||||||
class="nonvisible"
|
class="nonvisible"
|
||||||
(change)="uploadImageFile($event)"
|
(change)="uploadImageFile($event)"
|
||||||
ngDefaultContro/>
|
ng2FileSelect
|
||||||
|
[uploader]="uploader"/>
|
||||||
<button mat-raised-button color="primary" (click)="file.click()" class="file-button">Browse</button>
|
<button mat-raised-button color="primary" (click)="file.click()" class="file-button">Browse</button>
|
||||||
<mat-form-field class="file-name-form-field">
|
<mat-form-field class="file-name-form-field">
|
||||||
<input
|
<input
|
||||||
|
@ -13,6 +13,7 @@ import { TemplateMocksService } from '../../../../services/template-mocks.servic
|
|||||||
import { QemuConfigurationService } from '../../../../services/qemu-configuration.service';
|
import { QemuConfigurationService } from '../../../../services/qemu-configuration.service';
|
||||||
import { ComputeService } from '../../../../services/compute.service';
|
import { ComputeService } from '../../../../services/compute.service';
|
||||||
import { Compute } from '../../../../models/compute';
|
import { Compute } from '../../../../models/compute';
|
||||||
|
import { FileUploader, FileItem, ParsedResponseHeaders } from 'ng2-file-upload';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -31,6 +32,7 @@ export class AddQemuVmTemplateComponent implements OnInit {
|
|||||||
selectedImage: QemuImage;
|
selectedImage: QemuImage;
|
||||||
chosenImage: string = '';
|
chosenImage: string = '';
|
||||||
qemuTemplate: QemuTemplate;
|
qemuTemplate: QemuTemplate;
|
||||||
|
uploader: FileUploader;
|
||||||
|
|
||||||
nameForm: FormGroup;
|
nameForm: FormGroup;
|
||||||
memoryForm: FormGroup;
|
memoryForm: FormGroup;
|
||||||
@ -67,6 +69,25 @@ export class AddQemuVmTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
this.uploader = new FileUploader({});
|
||||||
|
this.uploader.onAfterAddingFile = file => {
|
||||||
|
file.withCredentials = false;
|
||||||
|
};
|
||||||
|
this.uploader.onErrorItem = (item: FileItem, response: string, status: number, headers: ParsedResponseHeaders) => {
|
||||||
|
this.toasterService.error('An error occured: ' + response);
|
||||||
|
};
|
||||||
|
this.uploader.onSuccessItem = (
|
||||||
|
item: FileItem,
|
||||||
|
response: string,
|
||||||
|
status: number,
|
||||||
|
headers: ParsedResponseHeaders
|
||||||
|
) => {
|
||||||
|
this.qemuService.getImages(this.server).subscribe((qemuImages: QemuImage[]) => {
|
||||||
|
this.qemuImages = qemuImages;
|
||||||
|
});
|
||||||
|
this.toasterService.success('Image uploaded');
|
||||||
|
};
|
||||||
|
|
||||||
const server_id = this.route.snapshot.paramMap.get("server_id");
|
const server_id = this.route.snapshot.paramMap.get("server_id");
|
||||||
this.serverService.get(parseInt(server_id, 10)).then((server: Server) => {
|
this.serverService.get(parseInt(server_id, 10)).then((server: Server) => {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
@ -106,7 +127,16 @@ export class AddQemuVmTemplateComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uploadImageFile(event) {
|
uploadImageFile(event) {
|
||||||
this.chosenImage = event.target.files[0].name;
|
let name = event.target.files[0].name;
|
||||||
|
this.diskForm.controls['fileName'].setValue(name);
|
||||||
|
|
||||||
|
const url = this.qemuService.getImagePath(this.server, name);
|
||||||
|
this.uploader.queue.forEach(elem => (elem.url = url));
|
||||||
|
|
||||||
|
const itemToUpload = this.uploader.queue[0];
|
||||||
|
if ((itemToUpload as any).options) (itemToUpload as any).options.disableMultipart = true;
|
||||||
|
|
||||||
|
this.uploader.uploadItem(itemToUpload);
|
||||||
}
|
}
|
||||||
|
|
||||||
goBack() {
|
goBack() {
|
||||||
@ -118,7 +148,7 @@ export class AddQemuVmTemplateComponent implements OnInit {
|
|||||||
this.qemuTemplate.ram = this.memoryForm.get("ramMemory").value;
|
this.qemuTemplate.ram = this.memoryForm.get("ramMemory").value;
|
||||||
this.qemuTemplate.qemu_path = this.selectedBinary.path;
|
this.qemuTemplate.qemu_path = this.selectedBinary.path;
|
||||||
if (this.newImageSelected) {
|
if (this.newImageSelected) {
|
||||||
this.qemuTemplate.hda_disk_image = this.chosenImage;
|
this.qemuTemplate.hda_disk_image = this.diskForm.get("fileName").value;
|
||||||
} else {
|
} else {
|
||||||
this.qemuTemplate.hda_disk_image = this.selectedImage.path;
|
this.qemuTemplate.hda_disk_image = this.selectedImage.path;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,10 @@ export class QemuService {
|
|||||||
return this.httpServer.get<QemuTemplate>(server, `/templates/${template_id}`) as Observable<QemuTemplate>;
|
return this.httpServer.get<QemuTemplate>(server, `/templates/${template_id}`) as Observable<QemuTemplate>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getImagePath(server: Server, filename: string): string {
|
||||||
|
return `http://${server.host}:${server.port}/v2/compute/qemu/images/${filename}`;
|
||||||
|
}
|
||||||
|
|
||||||
getBinaries(server: Server): Observable<QemuBinary[]> {
|
getBinaries(server: Server): Observable<QemuBinary[]> {
|
||||||
return this.httpServer.get<QemuBinary[]>(server, '/computes/local/qemu/binaries') as Observable<QemuBinary[]>;
|
return this.httpServer.get<QemuBinary[]>(server, '/computes/local/qemu/binaries') as Observable<QemuBinary[]>;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user