superuser: add storage replication config
This commit is contained in:
parent
c33ae0e896
commit
5000b1621c
15 changed files with 357 additions and 106 deletions
|
@ -194,54 +194,94 @@
|
|||
<strong>A remote storage system is required for high-avaliability systems.</strong>
|
||||
</p>
|
||||
|
||||
<table class="config-table">
|
||||
<tr>
|
||||
<td class="non-input">Storage Engine:</td>
|
||||
<td>
|
||||
<select ng-model="config.DISTRIBUTED_STORAGE_CONFIG.local[0]">
|
||||
<option value="LocalStorage">Locally mounted directory</option>
|
||||
<option value="S3Storage">Amazon S3</option>
|
||||
<option value="GoogleCloudStorage">Google Cloud Storage</option>
|
||||
<option value="RadosGWStorage">Ceph Object Gateway (RADOS)</option>
|
||||
<option value="SwiftStorage">OpenStack Storage (Swift)</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<div class="co-checkbox feature-storage-replication">
|
||||
<input id="ftsr" type="checkbox" ng-model="config.FEATURE_STORAGE_REPLICATION">
|
||||
<label for="ftsr">Enable Storage Replication</label>
|
||||
<!-- TODO(josephschorr): add link to documentation -->
|
||||
<div class="help-text">If enabled, replicates storage to other regions.</div>
|
||||
</div>
|
||||
|
||||
<!-- Fields -->
|
||||
<tr ng-repeat="field in STORAGE_CONFIG_FIELDS[config.DISTRIBUTED_STORAGE_CONFIG.local[0]]">
|
||||
<td>{{ field.title }}:</td>
|
||||
<td>
|
||||
<span class="config-map-field"
|
||||
binding="config.DISTRIBUTED_STORAGE_CONFIG.local[1][field.name]"
|
||||
ng-if="field.kind == 'map'"
|
||||
keys="field.keys"></span>
|
||||
<span class="config-string-field"
|
||||
binding="config.DISTRIBUTED_STORAGE_CONFIG.local[1][field.name]"
|
||||
placeholder="{{ field.placeholder }}"
|
||||
ng-if="field.kind == 'text'"
|
||||
is-optional="field.optional"></span>
|
||||
<div class="co-checkbox" ng-if="field.kind == 'bool'">
|
||||
<input id="dsc-{{ field.name }}" type="checkbox"
|
||||
ng-model="config.DISTRIBUTED_STORAGE_CONFIG.local[1][field.name]">
|
||||
<label for="dsc-{{ field.name }}">{{ field.placeholder }}</label>
|
||||
</div>
|
||||
<div ng-if="field.kind == 'option'">
|
||||
<select ng-model="config.DISTRIBUTED_STORAGE_CONFIG.local[1][field.name]">
|
||||
<option ng-repeat="value in field.values" value="{{ value }}"
|
||||
ng-selected="config.DISTRIBUTED_STORAGE_CONFIG.local[1][field.name] == value">{{ value }}</option>
|
||||
<div class="storage-config" ng-class="$last ? 'last' : ''" ng-repeat="sc in storageConfig">
|
||||
<table class="config-table">
|
||||
<tr>
|
||||
<td class="non-input">Location ID:</td>
|
||||
<td>
|
||||
<input class="form-control" ng-if="allowChangeLocationStorageConfig(sc.location)" ng-class="storageConfigError[$index].location ? 'ng-invalid' : ''" ng-model="sc.location" ng-pattern="/^[a-zA-Z0-9_-]+$/" required>
|
||||
<div ng-if="!allowChangeLocationStorageConfig(sc.location)">
|
||||
{{ sc.location }}
|
||||
</div>
|
||||
<div class="co-alert co-alert-danger" ng-show="storageConfigError[$index].location">
|
||||
{{ storageConfigError[$index].location }}
|
||||
</div>
|
||||
<div class="input-util" ng-if="allowRemoveStorageConfig(sc.location)"><a href="javascript:void(0)" class="remove-link" ng-click="removeStorageConfig(sc)">Remove</a></div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr ng-if="config.FEATURE_STORAGE_REPLICATION">
|
||||
<td class="non-input">Set Default:</td>
|
||||
<td>
|
||||
<div class="co-checkbox">
|
||||
<input id="default-location-{{ $index }}" ng-model="sc.defaultLocation" type="checkbox">
|
||||
<label for="default-location-{{ $index }}">Replicate to storage engine by default</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="non-input">Storage Engine:</td>
|
||||
<td>
|
||||
<select class="form-control" ng-class="storageConfigError[$index].engine ? 'ng-invalid' : ''" ng-model="sc.data[0]">
|
||||
<option value="LocalStorage">Locally mounted directory</option>
|
||||
<option value="S3Storage">Amazon S3</option>
|
||||
<option value="GoogleCloudStorage">Google Cloud Storage</option>
|
||||
<option value="RadosGWStorage">Ceph Object Gateway (RADOS)</option>
|
||||
<option value="SwiftStorage">OpenStack Storage (Swift)</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="help-text" ng-if="field.help_text">
|
||||
{{ field.help_text }}
|
||||
</div>
|
||||
<div class="help-text" ng-if="field.help_url">
|
||||
See <a href="{{ field.help_url }}" target="_blank">Documentation</a> for more information
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="co-alert co-alert-danger" ng-if="storageConfigError[$index].engine">
|
||||
{{ storageConfigError[$index].engine }}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Fields -->
|
||||
<tr ng-repeat="field in STORAGE_CONFIG_FIELDS[sc.data[0]]">
|
||||
<td>{{ field.title }}:</td>
|
||||
<td>
|
||||
<span class="config-map-field"
|
||||
binding="sc.data[1][field.name]"
|
||||
ng-if="field.kind == 'map'"
|
||||
keys="field.keys"></span>
|
||||
<span class="config-string-field"
|
||||
binding="sc.data[1][field.name]"
|
||||
placeholder="{{ field.placeholder }}"
|
||||
ng-if="field.kind == 'text'"
|
||||
is-optional="field.optional"></span>
|
||||
<div class="co-checkbox" ng-if="field.kind == 'bool'">
|
||||
<input id="dsc-{{ field.name }}" type="checkbox"
|
||||
ng-model="sc.data[1][field.name]">
|
||||
<label for="dsc-{{ field.name }}">{{ field.placeholder }}</label>
|
||||
</div>
|
||||
<div ng-if="field.kind == 'option'">
|
||||
<select ng-model="sc.data[1][field.name]">
|
||||
<option ng-repeat="value in field.values" value="{{ value }}"
|
||||
ng-selected="sc.data[1][field.name] == value">{{ value }}</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="help-text" ng-if="field.help_text">
|
||||
{{ field.help_text }}
|
||||
</div>
|
||||
<div class="help-text" ng-if="field.help_url">
|
||||
See <a href="{{ field.help_url }}" target="_blank">Documentation</a> for more information
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="add-storage-link" ng-if="canAddStorageConfig()">
|
||||
<a href="javascript:void(0)" ng-click="addStorageConfig()">Add Additional Storage Engine</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Reference in a new issue