1 <cd-modal [modalRef]="activeModal">
2 <ng-container i18n="form title"
3 class="modal-title">{{ action | titlecase }} {{ resource | upperFirst }}</ng-container>
5 <ng-container class="modal-content">
9 <div class="modal-body">
10 <div class="form-group row">
11 <label class="cd-col-form-label"
14 <div class="cd-col-form-input">
20 formControlName="name"
22 <span class="invalid-feedback"
23 *ngIf="form.showError('name', frm, 'required')"
24 i18n>This field is required!</span>
25 <span class="invalid-feedback"
26 *ngIf="form.showError('name', frm, 'pattern')"
27 i18n>The name can only consist of alphanumeric characters, dashes and underscores.</span>
28 <span class="invalid-feedback"
29 *ngIf="form.showError('name', frm, 'uniqueName')"
30 i18n>The chosen erasure code profile name is already in use.</span>
34 <div class="form-group row">
36 class="cd-col-form-label">
37 <span class="required"
39 <cd-helper [html]="tooltips.plugins[plugin].description">
42 <div class="cd-col-form-input">
43 <select class="form-select"
46 formControlName="plugin">
47 <option *ngIf="!plugins"
49 i18n>Loading...</option>
50 <option *ngFor="let plugin of plugins"
55 <span class="invalid-feedback"
56 *ngIf="form.showError('name', frm, 'required')"
57 i18n>This field is required!</span>
61 <div class="form-group row">
63 class="cd-col-form-label">
64 <span class="required"
65 i18n>Data chunks (k)</span>
66 <cd-helper [html]="tooltips.k">
69 <div class="cd-col-form-input">
74 ng-model="$ctrl.erasureCodeProfile.k"
75 placeholder="Data chunks..."
78 <span class="invalid-feedback"
79 *ngIf="form.showError('k', frm, 'required')"
80 i18n>This field is required!</span>
81 <span class="invalid-feedback"
82 *ngIf="form.showError('k', frm, 'min')"
83 i18n>Must be equal to or greater than 2.</span>
84 <span class="invalid-feedback"
85 *ngIf="form.showError('k', frm, 'max')"
86 i18n>Chunks (k+m) have exceeded the available OSDs of {{deviceCount}}.</span>
87 <span class="invalid-feedback"
88 *ngIf="form.showError('k', frm, 'unequal')"
89 i18n>For an equal distribution k has to be a multiple of (k+m)/l.</span>
90 <span class="invalid-feedback"
91 *ngIf="form.showError('k', frm, 'kLowerM')"
92 i18n>K has to be equal to or greater than m in order to recover data correctly through c.</span>
93 <span *ngIf="plugin === 'lrc'"
94 class="form-text text-muted"
95 i18n>Distribution factor: {{lrcMultiK}}</span>
99 <div class="form-group row">
101 class="cd-col-form-label">
102 <span class="required"
103 i18n>Coding chunks (m)</span>
104 <cd-helper [html]="tooltips.m">
107 <div class="cd-col-form-input">
112 placeholder="Coding chunks..."
115 <span class="invalid-feedback"
116 *ngIf="form.showError('m', frm, 'required')"
117 i18n>This field is required!</span>
118 <span class="invalid-feedback"
119 *ngIf="form.showError('m', frm, 'min')"
120 i18n>Must be equal to or greater than 1.</span>
121 <span class="invalid-feedback"
122 *ngIf="form.showError('m', frm, 'max')"
123 i18n>Chunks (k+m) have exceeded the available OSDs of {{deviceCount}}.</span>
127 <div class="form-group row"
128 *ngIf="plugin === 'shec'">
130 class="cd-col-form-label">
131 <span class="required"
132 i18n>Durability estimator (c)</span>
133 <cd-helper [html]="tooltips.plugins.shec.c">
136 <div class="cd-col-form-input">
141 placeholder="Coding chunks..."
144 <span class="invalid-feedback"
145 *ngIf="form.showError('c', frm, 'min')"
146 i18n>Must be equal to or greater than 1.</span>
147 <span class="invalid-feedback"
148 *ngIf="form.showError('c', frm, 'cGreaterM')"
149 i18n>C has to be equal to or lower than m as m defines the amount of chunks that can be used.</span>
153 <div class="form-group row"
154 *ngIf="plugin === 'clay'">
156 class="cd-col-form-label">
157 <span class="required"
158 i18n>Helper chunks (d)</span>
159 <cd-helper [html]="tooltips.plugins.clay.d">
162 <div class="cd-col-form-input">
163 <div class="input-group">
168 placeholder="Helper chunks..."
170 <button class="btn btn-light"
172 ngbTooltip="Set d manually or use the plugin's default calculation that maximizes d."
175 (click)="toggleDCalc()">
176 <i [ngClass]="dCalc ? icons.unlock : icons.lock"
177 aria-hidden="true"></i>
180 <span class="form-text text-muted"
182 i18n>D is automatically updated on k and m changes</span>
185 <span class="form-text text-muted"
186 *ngIf="getDMin() < getDMax()"
187 i18n>D can be set from {{getDMin()}} to {{getDMax()}}</span>
188 <span class="form-text text-muted"
189 *ngIf="getDMin() === getDMax()"
190 i18n>D can only be set to {{getDMax()}}</span>
192 <span class="invalid-feedback"
193 *ngIf="form.showError('d', frm, 'dMin')"
194 i18n>D has to be greater than k ({{getDMin()}}).</span>
195 <span class="invalid-feedback"
196 *ngIf="form.showError('d', frm, 'dMax')"
197 i18n>D has to be lower than k + m ({{getDMax()}}).</span>
201 <div class="form-group row"
202 *ngIf="plugin === PLUGIN.LRC">
203 <label class="cd-col-form-label"
205 <span class="required"
206 i18n>Locality (l)</span>
207 <cd-helper [html]="tooltips.plugins.lrc.l">
210 <div class="cd-col-form-input">
215 placeholder="Coding chunks..."
218 <span class="invalid-feedback"
219 *ngIf="form.showError('l', frm, 'required')"
220 i18n>This field is required!</span>
221 <span class="invalid-feedback"
222 *ngIf="form.showError('l', frm, 'min')"
223 i18n>Must be equal to or greater than 1.</span>
224 <span class="invalid-feedback"
225 *ngIf="form.showError('l', frm, 'unequal')"
226 i18n>Can't split up chunks (k+m) correctly with the current locality.</span>
227 <span class="form-text text-muted"
228 i18n>Locality groups: {{lrcGroups}}</span>
232 <div class="form-group row">
233 <label for="crushFailureDomain"
234 class="cd-col-form-label">
235 <ng-container i18n>Crush failure domain</ng-container>
236 <cd-helper [html]="tooltips.crushFailureDomain">
239 <div class="cd-col-form-input">
240 <select class="form-select"
241 id="crushFailureDomain"
242 name="crushFailureDomain"
243 formControlName="crushFailureDomain">
244 <option *ngIf="!failureDomains"
246 i18n>Loading...</option>
247 <option *ngFor="let domain of failureDomainKeys"
249 {{ domain }} ( {{failureDomains[domain].length}} )
255 <div class="form-group row">
256 <label for="crushNumFailureDomains"
257 class="cd-col-form-label">
258 <ng-container i18n>Crush num failure domain</ng-container>
259 <cd-helper [html]="tooltips.crushNumFailureDomains">
262 <div class="cd-col-form-input">
264 id="crushNumFailureDomains"
265 name="crushNumFailureDomains"
267 formControlName="crushNumFailureDomains"
269 <span class="invalid-feedback"
270 *ngIf="form.showError('crushNumFailureDomains', frm, 'required')"
271 i18n>This field is required when crush osds per failure domain is set!</span>
275 <div class="form-group row">
276 <label for="crushOsdsPerFailureDomain"
277 class="cd-col-form-label">
278 <ng-container i18n>Crush osds per failure domain</ng-container>
279 <cd-helper [html]="tooltips.crushOsdsPerFailureDomain">
282 <div class="cd-col-form-input">
284 id="crushOsdsPerFailureDomain"
285 name="crushOsdsPerFailureDomain"
287 formControlName="crushOsdsPerFailureDomain"
289 <span class="invalid-feedback"
290 *ngIf="form.showError('crushOsdsPerFailureDomain', frm, 'required')"
291 i18n>This field is required when crush num failure domain is set!</span>
295 <div class="form-group row"
296 *ngIf="plugin === PLUGIN.LRC">
297 <label for="crushLocality"
298 class="cd-col-form-label">
299 <ng-container i18n>Crush Locality</ng-container>
300 <cd-helper [html]="tooltips.plugins.lrc.crushLocality">
303 <div class="cd-col-form-input">
304 <select class="form-select"
307 formControlName="crushLocality">
308 <option *ngIf="!failureDomains"
310 i18n>Loading...</option>
311 <option *ngIf="failureDomainKeys.length > 0"
314 <option *ngFor="let domain of failureDomainKeys"
316 {{ domain }} ( {{failureDomains[domain].length}} )
322 <div class="form-group row"
323 *ngIf="PLUGIN.CLAY === plugin">
324 <label for="scalar_mds"
325 class="cd-col-form-label">
326 <ng-container i18n>Scalar mds</ng-container>
327 <cd-helper [html]="tooltips.plugins.clay.scalar_mds">
330 <div class="cd-col-form-input">
331 <select class="form-select"
334 formControlName="scalar_mds">
335 <option *ngFor="let plugin of [PLUGIN.JERASURE, PLUGIN.ISA, PLUGIN.SHEC]"
343 <div class="form-group row"
344 *ngIf="[PLUGIN.JERASURE, PLUGIN.ISA, PLUGIN.CLAY].includes(plugin)">
345 <label for="technique"
346 class="cd-col-form-label">
347 <ng-container i18n>Technique</ng-container>
348 <cd-helper [html]="tooltips.plugins[plugin].technique">
351 <div class="cd-col-form-input">
352 <select class="form-select"
355 formControlName="technique">
356 <option *ngFor="let technique of techniques"
357 [ngValue]="technique">
364 <div class="form-group row"
365 *ngIf="plugin === PLUGIN.JERASURE">
366 <label for="packetSize"
367 class="cd-col-form-label">
368 <ng-container i18n>Packetsize</ng-container>
369 <cd-helper [html]="tooltips.plugins.jerasure.packetSize">
372 <div class="cd-col-form-input">
377 placeholder="Packetsize..."
378 formControlName="packetSize"
380 <span class="invalid-feedback"
381 *ngIf="form.showError('packetSize', frm, 'min')"
382 i18n>Must be equal to or greater than 1.</span>
386 <div class="form-group row">
387 <label for="crushRoot"
388 class="cd-col-form-label">
389 <ng-container i18n>Crush root</ng-container>
390 <cd-helper [html]="tooltips.crushRoot">
393 <div class="cd-col-form-input">
394 <select class="form-select"
397 formControlName="crushRoot">
398 <option *ngIf="!buckets"
400 i18n>Loading...</option>
401 <option *ngFor="let bucket of buckets"
409 <div class="form-group row">
410 <label for="crushDeviceClass"
411 class="cd-col-form-label">
412 <ng-container i18n>Crush device class</ng-container>
414 <div class="cd-col-form-input">
415 <select class="form-select"
416 id="crushDeviceClass"
417 name="crushDeviceClass"
418 formControlName="crushDeviceClass">
420 i18n>All devices</option>
421 <option *ngFor="let deviceClass of devices"
422 [ngValue]="deviceClass">
427 <span i18n>{{tooltips.crushDeviceClass}}</span>
429 <span class="form-text text-muted"
430 i18n>Available OSDs: {{deviceCount}}</span>
434 <div class="form-group row">
435 <label for="directory"
436 class="cd-col-form-label">
437 <ng-container i18n>Directory</ng-container>
438 <cd-helper [html]="tooltips.directory">
441 <div class="cd-col-form-input">
446 placeholder="Path..."
447 formControlName="directory">
452 <div class="modal-footer">
453 <cd-form-button-panel (submitActionEvent)="onSubmit()"
455 [submitText]="(action | titlecase) + ' ' + (resource | upperFirst)"></cd-form-button-panel>