2018-01-21 16:26:24 +00:00
< rd-header >
2018-06-06 16:12:35 +00:00
< rd-header-title title-text = "Profile details" > < / rd-header-title >
2020-04-10 21:54:53 +00:00
< rd-header-content > < a ui-sref = "storidge.cluster" > Storidge< / a > > < a ui-sref = "storidge.profiles" > Profiles< / a > > {{ profile.Name }} < / rd-header-content >
2018-01-21 16:26:24 +00:00
< / rd-header >
< div class = "row" ng-if = "profile" >
< div class = "col-md-12" >
< rd-widget >
< rd-widget-body >
< form class = "form-horizontal" name = "storidgeUpdateProfileForm" >
<!-- name - input -->
< div class = "form-group" >
< label for = "profile_name" class = "col-sm-2 col-lg-1 control-label text-left" > Name< / label >
< div class = "col-sm-10 col-lg-11" >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "profile.Name" name = "profile_name" disabled / >
2018-01-21 16:26:24 +00:00
< / div >
< / div >
<!-- !name - input -->
< div class = "col-sm-12 form-section-title" >
Profile configuration
< / div >
<!-- directory -->
< div class = "form-group" ng-class = "{ 'has-error': storidgeUpdateProfileForm.profile_directory.$invalid }" >
< label for = "profile_directory" class = "col-sm-2 col-lg-1 control-label text-left" > Directory< / label >
< div class = "col-sm-10 col-lg-11" >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "profile.Directory" name = "profile_directory" placeholder = "e.g. /cio/myProfile" required / >
2018-01-21 16:26:24 +00:00
< / div >
< / div >
< div class = "form-group" ng-show = "storidgeUpdateProfileForm.profile_directory.$invalid" >
2018-07-11 14:22:02 +00:00
< div class = "col-sm-12 small text-warning" >
2018-01-21 16:26:24 +00:00
< div ng-messages = "storidgeUpdateProfileForm.profile_directory.$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > This field is required.< / p >
< / div >
< / div >
< / div >
<!-- !directory -->
<!-- capacity -->
< div class = "form-group" ng-class = "{ 'has-error': storidgeUpdateProfileForm.profile_capacity.$invalid }" >
< label for = "profile_capacity" class = "col-sm-2 col-lg-1 control-label text-left" > Capacity< / label >
< div class = "col-sm-10 col-lg-11" >
2020-04-10 21:54:53 +00:00
< input type = "number" class = "form-control" ng-model = "profile.Capacity" name = "profile_capacity" ng-min = "1" ng-max = "64000" placeholder = "2" required / >
2018-01-21 16:26:24 +00:00
< / div >
< / div >
< div class = "form-group" ng-show = "storidgeUpdateProfileForm.profile_capacity.$invalid" >
2018-07-11 14:22:02 +00:00
< div class = "col-sm-12 small text-warning" >
2018-01-21 16:26:24 +00:00
< div ng-messages = "storidgeUpdateProfileForm.profile_capacity.$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > This field is required.< / p >
< p ng-message = "min" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Minimum value for capacity: 1.< / p >
< p ng-message = "max" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Maximum value for capacity: 64000.< / p >
< / div >
< / div >
< / div >
<!-- !capacity -->
<!-- redundancy -->
< div class = "form-group" >
< label for = "profile_redundancy" class = "col-sm-2 col-lg-1 control-label text-left" > Redundancy< / label >
< div class = "col-sm-10 col-lg-11" >
2020-04-10 21:54:53 +00:00
< select name = "profile_redundancy" ng-model = "profile.Redundancy" ng-options = "+(opt.value) as opt.label for opt in RedundancyOptions" class = "form-control" > < / select >
2018-01-21 16:26:24 +00:00
< / div >
< / div >
<!-- !redudancy -->
<!-- provisioning -->
< div class = "form-group" >
< label for = "profile_provisioning" class = "col-sm-2 col-lg-1 control-label text-left" > Provisioning< / label >
< div class = "col-sm-10 col-lg-11" >
< select name = "profile_provisioning" ng-model = "profile.Provisioning" class = "form-control" >
< option value = "thin" > Thin< / option >
< option value = "thick" > Thick< / option >
< / select >
< / div >
< / div >
<!-- !provisioning -->
<!-- type -->
< div class = "form-group" >
< label for = "profile_type" class = "col-sm-2 col-lg-1 control-label text-left" > Type< / label >
< div class = "col-sm-10 col-lg-11" >
< select name = "profile_type" ng-model = "profile.Type" class = "form-control" >
< option value = "ssd" > SSD< / option >
< option value = "hdd" > HDD< / option >
< / select >
< / div >
< / div >
<!-- !type -->
2019-05-24 21:53:10 +00:00
<!-- Filesystem -->
< div class = "form-group" >
2020-04-10 21:54:53 +00:00
< label for = "profile_filesystem" class = "col-sm-2 col-lg-1 control-label text-left" > Filesystem< / label >
< div class = "col-sm-10 col-lg-11" >
< select name = "profile_filesystem" ng-model = "profile.Filesystem" class = "form-control" >
< option value = "btrfs" > btrfs< / option >
< option value = "ext4" > ext4< / option >
< option value = "xfs" > xfs< / option >
< / select >
2019-05-24 21:53:10 +00:00
< / div >
2020-04-10 21:54:53 +00:00
< / div >
<!-- !Filesystem -->
<!-- snapshotEnabled -->
< div class = "form-group" >
< label for = "profile_snapshotEnabled" class = "col-sm-2 col-lg-1 control-label text-left" >
Enable snapshots
< / label >
< label class = "switch" style = "margin-left: 20px;" > < input name = "profile_snapshotEnabled" type = "checkbox" ng-model = "profile.SnapshotEnabled" / > < i > < / i > < / label >
< / div >
<!-- !snapshotEnabled -->
<!-- snapshotMax -->
< div class = "form-group" ng-if = "profile.SnapshotEnabled" >
< label for = "profile_snapshotMax" class = "col-sm-2 col-lg-1 control-label text-left" style = "margin-top: 20px;" >
Snapshot max
< / label >
< div class = "col-sm-4" >
< slider model = "profile.SnapshotMax" floor = "1" ceil = "100" step = "1" > < / slider >
2019-05-24 21:53:10 +00:00
< / div >
2020-04-10 21:54:53 +00:00
< div class = "col-sm-2" >
< input type = "number" min = "1" class = "form-control" ng-model = "profile.SnapshotMax" id = "profile_snapshotMax" / >
2019-05-24 21:53:10 +00:00
< / div >
2020-04-10 21:54:53 +00:00
< div class = "col-sm-4" >
< p class = "small text-muted" style = "margin-top: 7px;" >
Snapshot max (< b > count< / b > )
< / p >
2019-05-24 21:53:10 +00:00
< / div >
2020-04-10 21:54:53 +00:00
< / div >
<!-- !snapshotMax -->
<!-- snapshotEnabled -->
< div class = "form-group" ng-if = "profile.SnapshotEnabled" >
< label for = "profile_recurringSnapshotEnabled" class = "col-sm-2 col-lg-1 control-label text-left" >
Enable periodic snapshots
< / label >
< label class = "switch" style = "margin-left: 20px;" >
< input name = "profile_recurringSnapshotEnabled" type = "checkbox" ng-model = "state.RecurringSnapshotEnabled" / > < i > < / i >
< / label >
< / div >
<!-- !snapshotEnabled -->
<!-- snapshotInterval -->
< div class = "form-group" ng-if = "profile.SnapshotEnabled && state.RecurringSnapshotEnabled" >
< label for = "profile_snapshotInterval" class = "col-sm-2 col-lg-1 control-label text-left" style = "margin-top: 20px;" >
Snapshot interval
< / label >
< div class = "col-sm-4" >
< slider model = "profile.SnapshotInterval" floor = "1" ceil = "2880" step = "1" > < / slider >
2019-05-24 21:53:10 +00:00
< / div >
2020-04-10 21:54:53 +00:00
< div class = "col-sm-2" >
< input type = "number" min = "1" class = "form-control" ng-model = "profile.SnapshotInterval" id = "profile_snapshotInterval" / >
2019-05-24 21:53:10 +00:00
< / div >
2020-04-10 21:54:53 +00:00
< div class = "col-sm-4" >
< p class = "small text-muted" style = "margin-top: 7px;" >
Snapshot interval (< b > minutes< / b > )
< / p >
2019-05-24 21:53:10 +00:00
< / div >
2020-04-10 21:54:53 +00:00
< / div >
<!-- !snapshotInterval -->
<!-- encryptionEnabled -->
< div class = "form-group" >
< label for = "profile_encryptionEnabled" class = "col-sm-2 col-lg-1 control-label text-left" >
Enable encryption
< / label >
< label class = "switch" style = "margin-left: 20px;" > < input name = "profile_encryptionEnabled" type = "checkbox" ng-model = "profile.EncryptionEnabled" / > < i > < / i > < / label >
< / div >
<!-- !encryptionEnabled -->
<!-- interfaceType -->
< div class = "form-group" >
< label for = "profile_interfaceType" class = "col-sm-2 col-lg-1 control-label text-left" > Interface type< / label >
< div class = "col-sm-10 col-lg-11" >
< select name = "profile_interfaceType" ng-model = "profile.InterfaceType" class = "form-control" >
< option value = "" > < / option >
< option value = "nfs" > nfs< / option >
< / select >
< / div >
< / div >
<!-- !interfaceType -->
<!-- interfaceDriver -->
< div class = "form-group" >
< label for = "profile_interfaceDriver" class = "col-sm-2 col-lg-1 control-label text-left" > Network driver< / label >
< div class = "col-sm-10 col-lg-11" >
< select name = "profile_interfaceDriver" ng-model = "profile.InterfaceDriver" class = "form-control" >
< option value = "" > < / option >
< option value = "macvlan" > macvlan< / option >
< option value = "overlay" > overlay< / option >
< / select >
< / div >
< / div >
<!-- !interfaceDriver -->
<!-- interfaceNetwork -->
< div class = "form-group" >
< label for = "profile_interfaceNetwork" class = "col-sm-2 col-lg-1 control-label text-left" > Network name< / label >
< div class = "col-sm-10 col-lg-11" >
< input type = "text" class = "form-control" ng-model = "profile.InterfaceNetwork" name = "profile_interfaceNetwork" pattern = "[a-zA-Z0-9]+" / >
< / div >
< / div >
<!-- !interfaceNetwork -->
<!-- interfaceConf -->
< div class = "form-group" >
< label for = "profile_interfaceConf" class = "col-sm-2 col-lg-1 control-label text-left" > Interface conf< / label >
< div class = "col-sm-10 col-lg-11" >
< input type = "text" class = "form-control" ng-model = "profile.InterfaceConf" name = "profile_interfaceConf" / >
< / div >
< / div >
<!-- !interfaceConf -->
<!-- labels -->
< div class = "form-group" >
< div class = "col-sm-12" style = "margin-top: 5px;" >
< label class = "control-label text-left" > Labels< / label >
< span class = "label label-default interactive" style = "margin-left: 10px;" ng-click = "addLabel()" > < i class = "fa fa-plus-circle" aria-hidden = "true" > < / i > add label < / span >
< / div >
<!-- labels - input - list -->
< div class = "col-sm-12 form-inline" style = "margin-top: 10px;" >
< div ng-repeat = "label in formValues.Labels" style = "margin-top: 2px;" >
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > name< / span >
< input type = "text" class = "form-control" ng-model = "label.name" placeholder = "e.g. com.example.foo" / >
< / div >
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > value< / span >
< input type = "text" class = "form-control" ng-model = "label.value" placeholder = "e.g. bar" / >
2019-05-24 21:53:10 +00:00
< / div >
2020-04-10 21:54:53 +00:00
< button class = "btn btn-sm btn-danger" type = "button" ng-click = "removeLabel($index)" >
< i class = "fa fa-trash" aria-hidden = "true" > < / i >
< / button >
2019-05-24 21:53:10 +00:00
< / div >
< / div >
2020-04-10 21:54:53 +00:00
<!-- !labels - input - list -->
< / div >
<!-- !labels -->
2018-01-21 16:26:24 +00:00
<!-- iops -->
< div ng-if = "!state.LimitBandwidth || state.NoLimit" >
< div class = "col-sm-12 form-section-title" >
IOPS
< / div >
< div class = "form-group" >
< div class = "col-sm-12" >
< label for = "permissions" class = "control-label text-left" >
Limit IOPS
< / label >
< label class = "switch" style = "margin-left: 20px;" >
2020-04-10 21:54:53 +00:00
< input type = "checkbox" ng-model = "state.LimitIOPS" ng-change = "state.NoLimit = (!state.LimitBandwidth && !state.LimitIOPS)" / > < i > < / i >
2018-01-21 16:26:24 +00:00
< / label >
< / div >
< / div >
< div class = "form-group" ng-if = "state.LimitIOPS" >
< label for = "min_iops" class = "col-sm-1 control-label text-left" > Min< / label >
< div class = "col-sm-5" ng-class = "{ 'has-error': storidgeUpdateProfileForm.min_iops.$invalid }" >
2020-04-10 21:54:53 +00:00
< input type = "number" class = "form-control" ng-model = "profile.MinIOPS" name = "min_iops" ng-min = "30" ng-max = "999999" placeholder = "100" required / >
2018-01-21 16:26:24 +00:00
< / div >
< label for = "max_iops" class = "col-sm-1 control-label text-left" > Max< / label >
< div class = "col-sm-5" ng-class = "{ 'has-error': storidgeUpdateProfileForm.max_iops.$invalid }" >
2020-04-10 21:54:53 +00:00
< input type = "number" class = "form-control" ng-model = "profile.MaxIOPS" name = "max_iops" ng-min = "30" ng-max = "999999" placeholder = "2000" required / >
2018-01-21 16:26:24 +00:00
< / div >
< / div >
< div class = "form-group" ng-show = "storidgeUpdateProfileForm.min_iops.$invalid" >
2018-07-11 14:22:02 +00:00
< div class = "col-sm-12 small text-warning" >
2018-01-21 16:26:24 +00:00
< div ng-messages = "storidgeUpdateProfileForm.min_iops.$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > A value is required for Min IOPS.< / p >
< p ng-message = "min" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Minimum value for Min IOPS: 30.< / p >
< p ng-message = "max" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Maximum value for Min IOPS: 999999.< / p >
< / div >
< / div >
< / div >
< div class = "form-group" ng-show = "storidgeUpdateProfileForm.max_iops.$invalid" >
2018-07-11 14:22:02 +00:00
< div class = "col-sm-12 small text-warning" >
2018-01-21 16:26:24 +00:00
< div ng-messages = "storidgeUpdateProfileForm.max_iops.$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > A value is required for Max IOPS.< / p >
< p ng-message = "min" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Minimum value for Max IOPS: 30.< / p >
< p ng-message = "max" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Maximum value for Max IOPS: 999999.< / p >
< / div >
< / div >
< / div >
< / div >
<!-- !iops -->
<!-- bandwidth -->
< div ng-if = "!state.LimitIOPS || state.NoLimit" >
< div class = "col-sm-12 form-section-title" >
Bandwidth
< / div >
< div class = "form-group" >
< div class = "col-sm-12" >
< label for = "permissions" class = "control-label text-left" >
Limit bandwidth
< / label >
< label class = "switch" style = "margin-left: 20px;" >
2020-04-10 21:54:53 +00:00
< input type = "checkbox" ng-model = "state.LimitBandwidth" ng-change = "state.NoLimit = (!state.LimitBandwidth && !state.LimitIOPS)" / > < i > < / i >
2018-01-21 16:26:24 +00:00
< / label >
< / div >
< / div >
< div class = "form-group" ng-if = "state.LimitBandwidth" >
< label for = "min_bandwidth" class = "col-sm-1 control-label text-left" > Min< / label >
< div class = "col-sm-5" ng-class = "{ 'has-error': storidgeUpdateProfileForm.min_bandwidth.$invalid }" >
2020-04-10 21:54:53 +00:00
< input type = "number" class = "form-control" ng-model = "profile.MinBandwidth" name = "min_bandwidth" ng-min = "1" ng-max = "5000" placeholder = "1" required / >
2018-01-21 16:26:24 +00:00
< / div >
< label for = "max_bandwidth" class = "col-sm-1 control-label text-left" > Max< / label >
< div class = "col-sm-5" ng-class = "{ 'has-error': storidgeUpdateProfileForm.max_bandwidth.$invalid }" >
2020-04-10 21:54:53 +00:00
< input type = "number" class = "form-control" ng-model = "profile.MaxBandwidth" name = "max_bandwidth" ng-min = "1" ng-max = "5000" placeholder = "100" required / >
2018-01-21 16:26:24 +00:00
< / div >
< / div >
< div class = "form-group" ng-show = "storidgeUpdateProfileForm.min_bandwidth.$invalid" >
2018-07-11 14:22:02 +00:00
< div class = "col-sm-12 small text-warning" >
2018-01-21 16:26:24 +00:00
< div ng-messages = "storidgeUpdateProfileForm.min_bandwidth.$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > A value is required for Min bandwidth.< / p >
< p ng-message = "min" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Minimum value for Min bandwidth: 1.< / p >
< p ng-message = "max" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Maximum value for Min bandwidth: 5000.< / p >
< / div >
< / div >
< / div >
< div class = "form-group" ng-show = "storidgeUpdateProfileForm.max_bandwidth.$invalid" >
2018-07-11 14:22:02 +00:00
< div class = "col-sm-12 small text-warning" >
2018-01-21 16:26:24 +00:00
< div ng-messages = "storidgeUpdateProfileForm.max_bandwidth.$error" >
< p ng-message = "required" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > A value is required for Max bandwidth.< / p >
< p ng-message = "min" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Minimum value for Max bandwidth: 1.< / p >
< p ng-message = "max" > < i class = "fa fa-exclamation-triangle" aria-hidden = "true" > < / i > Maximum value for Max bandwidth: 5000.< / p >
< / div >
< / div >
< / div >
< / div >
<!-- !bandwidth -->
<!-- actions -->
< div class = "col-sm-12 form-section-title" >
Actions
< / div >
< div class = "form-group" >
< div class = "col-sm-12" >
2020-04-10 21:54:53 +00:00
< button
type="button"
class="btn btn-primary btn-sm"
ng-click="update()"
ng-disabled="state.updateInProgress || !storidgeUpdateProfileForm.$valid"
button-spinner="state.updateInProgress"
>
2018-01-21 16:26:24 +00:00
< span ng-hide = "state.updateInProgress" > Update the profile< / span >
< span ng-show = "state.updateInProgress" > Updating profile...< / span >
< / button >
< button type = "button" class = "btn btn-danger btn-sm" ng-click = "delete()" ng-disabled = "state.deleteInProgress" button-spinner = "state.deleteInProgress" >
< span ng-hide = "state.deleteInProgress" > Delete the profile< / span >
< span ng-show = "state.deleteInProgress" > Deleting profile...< / span >
< / button >
< / div >
< / div >
<!-- !actions -->
< / form >
< / rd-widget-body >
< / rd-widget >
< / div >
< / div >