File

projects/cobbler-frontend/src/app/actions/build-iso/build-iso.component.ts

Implements

OnDestroy

Metadata

Index

Properties
Methods

Constructor

constructor(userService: UserService, cobblerApiService: CobblerApiService, _snackBar: MatSnackBar)
Parameters :
Name Type Optional
userService UserService No
cobblerApiService CobblerApiService No
_snackBar MatSnackBar No

Methods

ngOnDestroy
ngOnDestroy()
Returns : void
runBuildiso
runBuildiso()
Returns : void

Properties

Private Readonly _formBuilder
Default value : inject(FormBuilder)
buildisoFormGroup
Default value : this._formBuilder.group({ iso: '', profiles: '', systems: '', buildisodir: '', distro: '', standalone: false, airgapped: false, source: '', excludeDNS: false, xorrisofsOpts: '', })
Private ngUnsubscribe
Default value : new Subject<void>()
Public userService
Type : UserService
import { Component, inject, OnDestroy } from '@angular/core';
import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatButton } from '@angular/material/button';
import { MatCheckbox } from '@angular/material/checkbox';
import { MatFormField, MatLabel } from '@angular/material/form-field';
import { MatInput } from '@angular/material/input';
import { MatListModule } from '@angular/material/list';
import { MatSnackBar } from '@angular/material/snack-bar';
import { BackgroundBuildisoOptions, CobblerApiService } from 'cobbler-api';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { UserService } from '../../services/user.service';
import Utils from '../../utils';

@Component({
  selector: 'cobbler-build-iso',
  templateUrl: './build-iso.component.html',
  styleUrls: ['./build-iso.component.scss'],
  standalone: true,
  imports: [
    MatListModule,
    FormsModule,
    MatButton,
    MatFormField,
    MatInput,
    MatLabel,
    ReactiveFormsModule,
    MatCheckbox,
  ],
})
export class BuildISOComponent implements OnDestroy {
  // Unsubscribe
  private ngUnsubscribe = new Subject<void>();

  // Form
  private readonly _formBuilder = inject(FormBuilder);
  buildisoFormGroup = this._formBuilder.group({
    iso: '',
    profiles: '',
    systems: '',
    buildisodir: '',
    distro: '',
    standalone: false,
    airgapped: false,
    source: '',
    excludeDNS: false,
    xorrisofsOpts: '',
  });

  constructor(
    public userService: UserService,
    private cobblerApiService: CobblerApiService,
    private _snackBar: MatSnackBar,
  ) {}

  ngOnDestroy(): void {
    this.ngUnsubscribe.next();
    this.ngUnsubscribe.complete();
  }

  runBuildiso(): void {
    const buildisoOptions: BackgroundBuildisoOptions = {
      iso: this.buildisoFormGroup.controls.iso.value,
      profiles: this.buildisoFormGroup.controls.profiles.value,
      systems: this.buildisoFormGroup.controls.systems.value,
      buildisodir: this.buildisoFormGroup.controls.buildisodir.value,
      distro: this.buildisoFormGroup.controls.distro.value,
      standalone: this.buildisoFormGroup.controls.standalone.value,
      airgapped: this.buildisoFormGroup.controls.airgapped.value,
      source: this.buildisoFormGroup.controls.source.value,
      excludeDNS: this.buildisoFormGroup.controls.excludeDNS.value,
      xorrisofsOpts: this.buildisoFormGroup.controls.xorrisofsOpts.value,
    };
    if (this.buildisoFormGroup.invalid) {
      this._snackBar.open('Please fill out all required inputs!', 'Close', {
        duration: 2000,
      });
      return;
    }
    this.cobblerApiService
      .background_buildiso(buildisoOptions, this.userService.token)
      .pipe(takeUntil(this.ngUnsubscribe))
      .subscribe(
        (value) => {
          // TODO
        },
        (error) => {
          // HTML encode the error message since it originates from XML
          this._snackBar.open(Utils.toHTML(error.message), 'Close');
        },
      );
  }
}
<h1 class="title">BUILD ISO IMAGES</h1>

<form class="form-replicate" [formGroup]="buildisoFormGroup">
  <mat-form-field class="form-field-full-width">
    <mat-label>Distro</mat-label>
    <input
      matInput
      required
      type="text"
      formControlName="distro"
      placeholder="leap-x86_64"
    />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>ISO</mat-label>
    <input
      matInput
      type="text"
      formControlName="iso"
      placeholder="/var/lib/cobbler/isos/autoinstall.iso"
    />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Profiles</mat-label>
    <input matInput type="text" formControlName="profiles" placeholder="" />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Systems</mat-label>
    <input matInput type="text" formControlName="systems" placeholder="" />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Buildiso directory</mat-label>
    <input
      matInput
      type="text"
      formControlName="buildisodir"
      placeholder="/var/cache/cobbler/buildiso"
    />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>Source</mat-label>
    <input
      matInput
      type="text"
      formControlName="source"
      placeholder="/var/lib/cobbler/iso-source/leap-x86_64"
    />
  </mat-form-field>
  <mat-form-field class="form-field-full-width">
    <mat-label>xorrisofs Options</mat-label>
    <input
      matInput
      type="text"
      formControlName="xorrisofsOpts"
      placeholder="-v"
    />
  </mat-form-field>
  <mat-checkbox class="form-field-full-width" formControlName="standalone"
    >Standalone</mat-checkbox
  >
  <mat-checkbox class="form-field-full-width" formControlName="airgapped"
    >Airgapped</mat-checkbox
  >
  <mat-checkbox class="form-field-full-width" formControlName="excludeDNS"
    >Exclude DNS</mat-checkbox
  >
  <button mat-button (click)="runBuildiso()">Run</button>
</form>

./build-iso.component.scss

.form-replicate {
  min-width: 150px;
  max-width: 600px;
  width: 100%;
}

.form-field-full-width {
  width: 100%;
}
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""