mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-05-12 21:43:26 +00:00
* Update ReleaseNotes.txt * Release 2.2.22 * Updating dependencies * Update package.json * Update project-map.component.ts * Updating dependencies * Update main.yml * Bump postcss from 7.0.35 to 7.0.36 Bumps [postcss](https://github.com/postcss/postcss) from 7.0.35 to 7.0.36. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/7.0.35...7.0.36) --- updated-dependencies: - dependency-name: postcss dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Bump ws from 6.2.1 to 6.2.2 Bumps [ws](https://github.com/websockets/ws) from 6.2.1 to 6.2.2. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/6.2.1...6.2.2) --- updated-dependencies: - dependency-name: ws dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * fix: package.json & yarn.lock to reduce vulnerabilities The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-JSZIP-1251497 * Updating packages to latest versions * Release 2.2.23 * Updating dependencies * Bump tar from 6.1.0 to 6.1.6 Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.6. - [Release notes](https://github.com/npm/node-tar/releases) - [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.6) --- updated-dependencies: - dependency-name: tar dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Bump url-parse from 1.5.1 to 1.5.3 Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.3. - [Release notes](https://github.com/unshiftio/url-parse/releases) - [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.3) --- updated-dependencies: - dependency-name: url-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Updating dependencies * Removing vulnerabilities * Updating angular-devkit/build-angular * Update yarn.lock * Fix for https://github.com/GNS3/gns3-web-ui/issues/1184 * Release 2.2.24 * Option to access system status from servers page * Updating dependencies * Release 2.2.25 * Update package.json * Bump nth-check from 2.0.0 to 2.0.1 Bumps [nth-check](https://github.com/fb55/nth-check) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/fb55/nth-check/releases) - [Commits](https://github.com/fb55/nth-check/compare/v2.0.0...v2.0.1) --- updated-dependencies: - dependency-name: nth-check dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Fix for theming * Update template.component.ts * Updating dependencies * Update yarn.lock * Update yarn.lock * Update yarn.lock * Release 2.2.26 * Update package.json * show upload file progress when uploading qemu template. * fix progress bar incorrect when upload file twice * Updating packages * Updating packages * Update package.json * Update yarn.lock * updating packages * Updating angular material * Fix for error with component factory after migration to angular v13 * Update yarn.lock * Update .gitignore * Fix for builds on github * Removing electron builder * Removing sentry/cli * Updating dependencies * Release web UI 2.2.27 * Reverting updates * Angular version set to 12.2.12 * Updating snyk version * Update configurator-docker.component.ts * Update new-template-dialog.component.html * Mouse pointer #1219 * Update topology-summary.component.ts * Update project-map.component.ts * Update project-map.component.ts * Release web UI 2.2.28 Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: snyk-bot <snyk-bot@snyk.io> Co-authored-by: potats0 <potatso>
448 lines
16 KiB
HTML
448 lines
16 KiB
HTML
<h1 mat-dialog-title>Add new template</h1>
|
|
|
|
<mat-horizontal-stepper [linear]="false" #stepper>
|
|
<mat-step>
|
|
<ng-template matStepLabel>Please select how you want to create new template</ng-template>
|
|
|
|
<mat-radio-group class="radio-group">
|
|
<mat-radio-button class="radio-button" value="1" (click)="setAction('install')" checked
|
|
>Install new appliance from the GNS server</mat-radio-button
|
|
><br />
|
|
<mat-radio-button class="radio-button" value="2" (click)="setAction('import')"
|
|
>Import an appliance file</mat-radio-button
|
|
>
|
|
</mat-radio-group>
|
|
|
|
<div>
|
|
<button mat-button matStepperNext>Next</button>
|
|
<button mat-button (click)="onCloseClick()">Cancel</button>
|
|
</div>
|
|
</mat-step>
|
|
|
|
<mat-step>
|
|
<ng-template matStepLabel>{{ actionTitle }}</ng-template>
|
|
|
|
<mat-card [hidden]="!(action === 'install')">
|
|
<div class="tableHeader">
|
|
<mat-form-field class="filter-field">
|
|
<input matInput [(ngModel)]="searchText" placeholder="Filter" />
|
|
</mat-form-field>
|
|
|
|
<mat-select
|
|
(selectionChange)="filterAppliances($event)"
|
|
[ngModelOptions]="{ standalone: true }"
|
|
placeholder="Category"
|
|
[(ngModel)]="category"
|
|
>
|
|
<mat-option *ngFor="let category of categories" [value]="category">
|
|
{{ category }}
|
|
</mat-option>
|
|
</mat-select>
|
|
</div>
|
|
|
|
<mat-table
|
|
class="mat-table"
|
|
#table
|
|
matSort
|
|
multiTemplateDataRows
|
|
(matSortChange)="sortData($event)"
|
|
[dataSource]="dataSource | datasourcefilter: searchText"
|
|
>
|
|
<ng-container matColumnDef="name">
|
|
<mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
|
|
<mat-cell *matCellDef="let row"> {{ row.name }} </mat-cell>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="emulator">
|
|
<mat-header-cell *matHeaderCellDef> Emulator </mat-header-cell>
|
|
<mat-cell *matCellDef="let row"> {{ row.emulator }} </mat-cell>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="vendor">
|
|
<mat-header-cell *matHeaderCellDef> Vendor </mat-header-cell>
|
|
<mat-cell *matCellDef="let row"> {{ row.vendor_name }} </mat-cell>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="actions">
|
|
<mat-header-cell *matHeaderCellDef> Actions </mat-header-cell>
|
|
<mat-cell *matCellDef="let row" style="text-align: right">
|
|
<button mat-icon-button matTooltip="Install" matTooltipClass="custom-tooltip" (click)="install(row)">
|
|
<mat-icon aria-label="Install">archive</mat-icon>
|
|
</button>
|
|
|
|
<button mat-icon-button matTooltip="Show info" matTooltipClass="custom-tooltip" (click)="showInfo(row)">
|
|
<mat-icon aria-label="Show info">info</mat-icon>
|
|
</button>
|
|
</mat-cell>
|
|
</ng-container>
|
|
|
|
<!-- <ng-container matColumnDef="expandedDetail">
|
|
<mat-cell *matCellDef="let detail">
|
|
The symbol for {{detail.element}}
|
|
</mat-cell>
|
|
</ng-container> -->
|
|
|
|
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
|
|
<mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
|
|
|
|
<!-- <mat-row
|
|
*matRowDef="let row; columns: displayedColumns;"
|
|
matRipple
|
|
class="element-row"
|
|
[class.expanded]="expandedElement == row"
|
|
(click)="expandedElement = row">
|
|
</mat-row>
|
|
<mat-row
|
|
*matRowDef="let row; columns: ['expandedDetail']; when: isExpansionDetailRow"
|
|
[@detailExpand]="row.element == expandedElement ? 'expanded' : 'collapsed'"
|
|
style="overflow: hidden">
|
|
</mat-row> -->
|
|
</mat-table>
|
|
|
|
<mat-paginator [pageSizeOptions]="[5, 10, 20, 50, 100]" showFirstLastButtons></mat-paginator>
|
|
</mat-card>
|
|
|
|
<mat-card [hidden]="action === 'install'">
|
|
<input
|
|
type="file"
|
|
accept=".gns3appliance, .gns3a"
|
|
class="non-visible"
|
|
#file
|
|
(change)="addAppliance($event)"
|
|
ng2FileSelect
|
|
[uploader]="uploader"
|
|
/>
|
|
<button mat-raised-button color="primary" (click)="file.click()" class="create-button">
|
|
Click to import appliance
|
|
</button>
|
|
</mat-card>
|
|
|
|
<div>
|
|
<button mat-button matStepperPrevious>Back</button>
|
|
<button mat-button [hidden]="action !== 'install'" (click)="updateAppliances()">
|
|
Update from online registry
|
|
</button>
|
|
<button mat-button (click)="onCloseClick()">Cancel</button>
|
|
</div>
|
|
</mat-step>
|
|
|
|
<mat-step *ngIf="applianceToInstall">
|
|
<ng-template matStepLabel>{{ secondActionTitle }}</ng-template>
|
|
|
|
<mat-card [hidden]="!(!isLinuxPlatform && !applianceToInstall.dynamips)">
|
|
Please configure GNS3 VM to install selected appliance
|
|
</mat-card>
|
|
|
|
<mat-card [hidden]="!(isLinuxPlatform || applianceToInstall.dynamips)">
|
|
<div *ngIf="applianceToInstall.qemu">
|
|
<div>
|
|
Server type<br />
|
|
<mat-radio-group class="radio-group">
|
|
<mat-radio-button
|
|
[disabled]="!isLinuxPlatform"
|
|
[checked]="isLocalComputerChosen"
|
|
class="radio-button"
|
|
value="1"
|
|
(click)="setServerType('local')"
|
|
>Install the appliance locally</mat-radio-button
|
|
>
|
|
</mat-radio-group>
|
|
</div>
|
|
<div>
|
|
Qemu binary<br />
|
|
<mat-select
|
|
class="selection-group"
|
|
placeholder="Qemu binary"
|
|
[(ngModel)]="selectedBinary"
|
|
[ngModelOptions]="{ standalone: true }"
|
|
>
|
|
<mat-option *ngFor="let binary of qemuBinaries" [value]="binary">
|
|
{{ binary.path }}
|
|
</mat-option>
|
|
</mat-select>
|
|
</div>
|
|
<div>
|
|
Install required files
|
|
<button
|
|
mat-icon-button
|
|
matTooltip="Refresh list of images"
|
|
matTooltipClass="custom-tooltip"
|
|
(click)="refreshImages()"
|
|
>
|
|
<mat-icon aria-label="Refresh list of images">refresh</mat-icon></button
|
|
><br />
|
|
<div>
|
|
<div *ngFor="let version of applianceToInstall.versions">
|
|
<div class="list-item">
|
|
<span>{{ applianceToInstall.name }} version {{ version.name }}</span>
|
|
|
|
<div>
|
|
<button
|
|
class="button"
|
|
mat-raised-button
|
|
color="primary"
|
|
(click)="createQemuTemplateFromVersion(version)"
|
|
>
|
|
Create
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="list-item-inside" *ngIf="version.images.bios_image">
|
|
<span>
|
|
{{ version.images.bios_image }}
|
|
</span>
|
|
|
|
<div>
|
|
<span *ngIf="checkImageFromVersion(version.images.bios_image)"
|
|
><mat-icon matTooltip="Ready to install" matTooltipClass="custom-tooltip">check</mat-icon></span
|
|
>
|
|
<span *ngIf="!checkImageFromVersion(version.images.bios_image)"
|
|
><mat-icon matTooltip="Missing" matTooltipClass="custom-tooltip">close</mat-icon></span
|
|
>
|
|
|
|
<input
|
|
type="file"
|
|
class="non-visible"
|
|
#fileBios
|
|
(change)="importImage($event, version.images.bios_image)"
|
|
ng2FileSelect
|
|
[uploader]="uploaderImage"
|
|
/>
|
|
<button class="button" mat-raised-button (click)="fileBios.click()">Import</button>
|
|
<button
|
|
class="button"
|
|
mat-raised-button
|
|
(click)="downloadImageFromVersion(version.images.bios_image)"
|
|
>
|
|
Download
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="list-item-inside" *ngIf="version.images.hda_disk_image">
|
|
<span>
|
|
{{ version.images.hda_disk_image }}
|
|
</span>
|
|
|
|
<div>
|
|
<span *ngIf="checkImageFromVersion(version.images.hda_disk_image)"
|
|
><mat-icon matTooltip="Ready to install" matTooltipClass="custom-tooltip">check</mat-icon></span
|
|
>
|
|
<span *ngIf="!checkImageFromVersion(version.images.hda_disk_image)"
|
|
><mat-icon matTooltip="Missing" matTooltipClass="custom-tooltip">close</mat-icon></span
|
|
>
|
|
|
|
<input
|
|
type="file"
|
|
class="non-visible"
|
|
#file2
|
|
(change)="importImage($event, version.images.hda_disk_image)"
|
|
ng2FileSelect
|
|
[uploader]="uploaderImage"
|
|
/>
|
|
<button class="button" mat-raised-button (click)="file2.click()">Import</button>
|
|
<button
|
|
class="button"
|
|
mat-raised-button
|
|
(click)="downloadImageFromVersion(version.images.hda_disk_image)"
|
|
>
|
|
Download
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="list-item-inside" *ngIf="version.images.hdb_disk_image">
|
|
<span>
|
|
{{ version.images.hdb_disk_image }}
|
|
</span>
|
|
|
|
<div>
|
|
<span *ngIf="checkImageFromVersion(version.images.hdb_disk_image)"
|
|
><mat-icon matTooltip="Ready to install" matTooltipClass="custom-tooltip">check</mat-icon></span
|
|
>
|
|
<span *ngIf="!checkImageFromVersion(version.images.hdb_disk_image)"
|
|
><mat-icon matTooltip="Missing" matTooltipClass="custom-tooltip">close</mat-icon></span
|
|
>
|
|
|
|
<input
|
|
type="file"
|
|
class="non-visible"
|
|
#file3
|
|
(change)="importImage($event, version.images.hdb_disk_image)"
|
|
ng2FileSelect
|
|
[uploader]="uploaderImage"
|
|
/>
|
|
<button class="button" mat-raised-button (click)="file3.click()">Import</button>
|
|
<button
|
|
class="button"
|
|
mat-raised-button
|
|
(click)="downloadImageFromVersion(version.images.hdb_disk_image)"
|
|
>
|
|
Download
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="list-item-inside" *ngIf="version.images.cdrom_image">
|
|
<span>
|
|
{{ version.images.cdrom_image}}
|
|
</span>
|
|
|
|
<div>
|
|
<span *ngIf="checkImageFromVersion(version.images.cdrom_image)"
|
|
><mat-icon matTooltip="Ready to install" matTooltipClass="custom-tooltip">check</mat-icon></span
|
|
>
|
|
<span *ngIf="!checkImageFromVersion(version.images.cdrom_image)"
|
|
><mat-icon matTooltip="Missing" matTooltipClass="custom-tooltip">close</mat-icon></span
|
|
>
|
|
|
|
<input
|
|
type="file"
|
|
class="non-visible"
|
|
#file4
|
|
(change)="importImage($event, version.images.cdrom_image)"
|
|
ng2FileSelect
|
|
[uploader]="uploaderImage"
|
|
/>
|
|
<button class="button" mat-raised-button (click)="file4.click()">Import</button>
|
|
<button
|
|
class="button"
|
|
mat-raised-button
|
|
(click)="downloadImageFromVersion(version.images.cdrom_image)"
|
|
>
|
|
Download
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div *ngIf="applianceToInstall.docker">
|
|
<div>
|
|
Server type<br />
|
|
<mat-radio-group class="radio-group">
|
|
<mat-radio-button
|
|
[disabled]="!isLinuxPlatform"
|
|
[checked]="isLocalComputerChosen"
|
|
class="radio-button"
|
|
value="1"
|
|
(click)="setServerType('local')"
|
|
>Install the appliance locally</mat-radio-button
|
|
>
|
|
</mat-radio-group>
|
|
</div>
|
|
<button mat-raised-button color="primary" (click)="createDockerTemplate()" class="create-button">
|
|
Create docker template
|
|
</button>
|
|
</div>
|
|
|
|
<div *ngIf="applianceToInstall.dynamips">
|
|
<div>
|
|
Server type<br />
|
|
<mat-radio-group class="radio-group">
|
|
<mat-radio-button
|
|
[checked]="isLocalComputerChosen"
|
|
class="radio-button"
|
|
value="1"
|
|
(click)="setServerType('local')"
|
|
>Install the appliance locally</mat-radio-button
|
|
>
|
|
</mat-radio-group>
|
|
</div>
|
|
<div>
|
|
Install required files
|
|
<button
|
|
mat-icon-button
|
|
matTooltip="Refresh list of images"
|
|
matTooltipClass="custom-tooltip"
|
|
(click)="refreshImages()"
|
|
>
|
|
<mat-icon aria-label="Refresh list of images">refresh</mat-icon></button
|
|
><br />
|
|
<mat-list>
|
|
<mat-list-item *ngFor="let image of applianceToInstall.images">
|
|
<div class="list-item">
|
|
<div>
|
|
{{ image.filename }}
|
|
</div>
|
|
<div>
|
|
<input
|
|
type="file"
|
|
class="non-visible"
|
|
#file2
|
|
(change)="importImage($event, image.filename)"
|
|
ng2FileSelect
|
|
[uploader]="uploaderImage"
|
|
/>
|
|
<button class="button" mat-raised-button (click)="file2.click()">Import</button>
|
|
<button class="button" mat-raised-button color="primary" (click)="createIosTemplate(image)">
|
|
Create
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
</mat-list>
|
|
</div>
|
|
</div>
|
|
|
|
<div *ngIf="applianceToInstall.iou">
|
|
<div>
|
|
Server type<br />
|
|
<mat-radio-group class="radio-group">
|
|
<mat-radio-button
|
|
[disabled]="!isLinuxPlatform"
|
|
[checked]="isLocalComputerChosen"
|
|
class="radio-button"
|
|
value="1"
|
|
(click)="setServerType('local')"
|
|
>Install the appliance locally</mat-radio-button
|
|
>
|
|
</mat-radio-group>
|
|
</div>
|
|
<div>
|
|
Install required files
|
|
<button
|
|
mat-icon-button
|
|
matTooltip="Refresh list of images"
|
|
matTooltipClass="custom-tooltip"
|
|
(click)="refreshImages()"
|
|
>
|
|
<mat-icon aria-label="Refresh list of images">refresh</mat-icon></button
|
|
><br />
|
|
<mat-list>
|
|
<mat-list-item *ngFor="let image of applianceToInstall.images">
|
|
<div class="list-item">
|
|
<div>
|
|
{{ image.filename }}
|
|
</div>
|
|
<div>
|
|
<input
|
|
type="file"
|
|
class="non-visible"
|
|
#file2
|
|
(change)="importImage($, image.filename)"
|
|
ng2FileSelect
|
|
[uploader]="uploaderImage"
|
|
/>
|
|
<button class="button" mat-raised-button (click)="file2.click()">Import</button>
|
|
<button class="button" mat-raised-button color="primary" (click)="createIouTemplate(image)">
|
|
Create
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</mat-list-item>
|
|
</mat-list>
|
|
</div>
|
|
</div>
|
|
</mat-card>
|
|
|
|
<div>
|
|
<button mat-button matStepperPrevious>Back</button>
|
|
<button mat-button (click)="onCloseClick()">Cancel</button>
|
|
</div>
|
|
</mat-step>
|
|
</mat-horizontal-stepper>
|