diff options
| author | Dixsie Wolmers <dixsiew@gmail.com> | 2019-06-21 13:48:06 -0500 |
|---|---|---|
| committer | Gunnar Mills <gmills@us.ibm.com> | 2019-08-21 21:14:16 +0000 |
| commit | e368108fc4fb3777ff02089f81b551d9735b393f (patch) | |
| tree | ac27cc621cca640442b09d5489157eb8304e6a05 /app/server-control/controllers/power-operations-controller.html | |
| parent | fb79e54c55af0b516d35c94c702213b7549acafe (diff) | |
| download | phosphor-webui-e368108fc4fb3777ff02089f81b551d9735b393f.tar.gz phosphor-webui-e368108fc4fb3777ff02089f81b551d9735b393f.zip | |
Add boot option override and TPM enable toggle
- Adds ability to set a bootsource override to allowable target value
- Adds ability to enable or disable TPM required policy
- Replaces power operations confirm directive with bootstrap modal
Tested: Confirmed override settings saved to redfish but unable to verify
if settings are automatically set to disabled by petitboot after a
one time boot. Passes DAP.
Resolves openbmc/phosphor-webui#82
Resolves openbmc/phosphor-webui#90
Signed-off-by: Dixsie Wolmers <dixsiew@gmail.com>
Change-Id: If0ffd6f9328939d70c7958ee11fb90bd20a1e685
Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
Diffstat (limited to 'app/server-control/controllers/power-operations-controller.html')
| -rw-r--r-- | app/server-control/controllers/power-operations-controller.html | 216 |
1 files changed, 165 insertions, 51 deletions
diff --git a/app/server-control/controllers/power-operations-controller.html b/app/server-control/controllers/power-operations-controller.html index ddf8bda..2ef5323 100644 --- a/app/server-control/controllers/power-operations-controller.html +++ b/app/server-control/controllers/power-operations-controller.html @@ -1,58 +1,172 @@ <loader loading="dataService.loading || loading"></loader> -<div id="power-operations"> - <div class="row column"> - <h1>Server power operations</h1> - <div class="power__current-status page-header"> - <h2 class="inline">Current status</h2> - <div class="power__status-log inline float-right">Last power operation at <span class="courier-bold">{{powerTime | localeDate}}</span></div> - </div> +<div id="power-operations" class="power-operations"> + <div class="row column"> + <h1>Server power operations</h1> + <div class="power__current-status page-header"> + <h2 class="inline">Current status</h2> + <div class="power__status-log inline float-right"> + Last power operation at + <span class="courier-bold">{{ powerTime | localeDate }}</span> + </div> </div> - <div class="row column"> - <div id="power-indicator-bar" class="power__indicator-bar" ng-class="{'power__state-on': dataService.server_state == 'Running', 'power__state-off': dataService.server_state == 'Off', 'power__state-indet': dataService.server_state == 'Standby', 'power__state-error': dataService.server_state == 'Quiesced'}"> - <p class="inline">{{dataService.hostname}} - {{dataService.server_id}}</p> - <h3 class="power__state inline no-margin h3"><span>{{dataService.server_state | quiescedToError}}</span></h3> - </div> + </div> + <!-- Power Indicator Bar --> + <div class="row column"> + <div id="power-indicator-bar" class="power__indicator-bar" + ng-class="{'power__state-on': dataService.server_state == 'Running', 'power__state-off': dataService.server_state == 'Off', 'power__state-indet': dataService.server_state == 'Standby', 'power__state-error': dataService.server_state == 'Quiesced'}"> + <p class="inline"> + {{ dataService.hostname }} - {{ dataService.server_id }} + </p> + <h3 class="power__state inline no-margin h3"> + <span>{{ dataService.server_state | quiescedToError }}</span> + </h3> </div> - <div class="row column"> - <div class="row column"> - <h3 class="subhead">Select a power operation</h3> - </div> - <div ng-if="operationPending"> - <span class="inactive-message">There are no power operations to display while a power operation is in progress. When complete, any new power operations will be displayed here.</span> - </div> - <div ng-if="!operationPending"> - <!-- Power on displays only when server is shutdown --> - <div class="row column power-option" ng-hide="dataService.server_state == 'Running' || dataService.server_state == 'Quiesced' || dataService.server_state == 'Unreachable'" ng-class="{disabled: dataService.server_unreachable || confirm || dataService.loading, transitionAll: confirm}"> - <button id="power__power-on" class="btn btn-secondary" ng-click="powerOn()" role="button" ng-disabled="dataService.server_unreachable"> - <icon file="icon-power.svg"></icon>Power on - </button> - <p class="inline">Attempts to power on the server</p> - </div> - <!-- Power reboot/shutdown options : when server is off all of these are hidden. When one option is selected, the others are disabled. --> - <div class="column power-option" ng-hide="dataService.server_state == 'Off' || dataService.server_state == 'Unreachable'" ng-class="{disabled: dataService.server_unreachable || (confirm && !confirmWarmReboot) || dataService.loading, transitionAll: confirm && confirmWarmReboot}"> - <button id="power__warm-boot" class="btn btn-secondary" ng-click="warmRebootConfirm()" role="button" ng-disabled="dataService.server_unreachable"> - <icon file="icon-restart.svg"></icon>Warm reboot</button> - <p class="inline">Attempts to perform an orderly shutdown before restarting the server</p> - <confirm title="warm reboot" confirm="confirmWarmReboot" ng-show="confirmWarmReboot" callback="warmReboot"></confirm> - </div> - <div class="column power-option" ng-hide="dataService.server_state == 'Off' || dataService.server_state == 'Unreachable'" ng-class="{disabled: dataService.server_unreachable || (confirm && !confirmColdReboot) || dataService.loading, transitionAll: confirm && confirmColdReboot}"> - <button id="power__cold-boot" class="btn btn-secondary" ng-click="coldRebootConfirm()" role="button" ng-disabled="dataService.server_unreachable"> - <icon file="icon-restart.svg"></icon>Cold reboot</button> - <p class="inline">Shuts down the server immediately, then restarts it</p> - <confirm title="cold reboot" confirm="confirmColdReboot" ng-show="confirmColdReboot" cancel="coldbootCancel" callback="coldReboot"></confirm> + </div> + <div class="row column"> + <!-- Boot Settings Column --> + <div class="large-4 columns boot-options-wrapper"> + <form id="host-boot-settings" name="hostBootSettings" class="host-boot-settings" novalidate> + <h2 class="subhead boot-options">Host OS boot settings</h2> + <div class="boot-settings-form"> + <div class="boot-options"> + <label for="boot-selected"> + Boot setting override</label> + <select id="boot-selected" name="bootSelected" id="boot-selected" ng-disabled="dataService.server_unreachable || bootOverrideError" + ng-model="boot.BootSourceOverrideTarget"> + <option class="courier-bold" value="{{bootSource}}" ng-repeat="bootSource in bootSources"> + {{ bootSource }} + </option> + </select> + <div class="boot-options one-time-boot-setting"> + <div class="align-self-center"> + <label class="control-check" id="one-time-label"> <span class="inline boot-checkbox">Enable one time boot</span> + <input type="checkbox" name="oneTime" + ng-disabled="dataService.server_unreachable || bootOverrideError || boot.BootSourceOverrideTarget =='None' " ng-model="boot.oneTimeBootEnabled" + ng-change="oneTimeBootEnabled" /> + <span class="control__indicator"> </span> + </label> </div> - <div class="column power-option" ng-hide="dataService.server_state == 'Off' || dataService.server_state == 'Unreachable'" ng-class="{disabled: dataService.server_unreachable || (confirm && !confirmOrderlyShutdown) || dataService.loading, transitionAll: confirm && confirmOrderlyShutdown}"> - <button id="power__soft-shutdown" class="btn btn-secondary" ng-click="orderlyShutdownConfirm()" role="button" ng-disabled="dataService.server_unreachable"> - <icon file="icon-power.svg"></icon>Orderly shutdown</button> - <p class="inline">Attempts to stop all software on the server before removing power</p> - <confirm title="orderly shutdown" confirm="confirmOrderlyShutdown" ng-show="confirmOrderlyShutdown" cancel="orderlyShutdownCancel" callback="orderlyShutdown"></confirm> + </div> + </div> + <!-- TPM Required --> + <div class="boot-options one-time-boot-setting"> + <div class="boot-options"> + <h3 class="content-label"> + TPM required policy</h3> + <p> Enable to ensure the system only boots when the TPM is functional. </p> + <!-- Toggle component --> + <div class="toggle-container"> + <div class="toggle"> + <input + id="toggle__switch-round" + class="toggle-switch toggle-switch__round-flat" + name="toggle" + type="checkbox" + tabindex="0" + ng-model="TPMToggle.TPMEnable" + ng-disabled="dataService.server_unreachable" + /> + <label for="toggle__switch-round" tabindex="0" + >TPM required policy is {{ TPMToggle.TPMEnable ? "On" : "Off" }}</label + > + </div> + <span> + {{ TPMToggle.TPMEnable ? "On" : "Off" }} + </span> + </div> </div> - <div class="column power-option" ng-hide="dataService.server_state == 'Off' || dataService.server_state == 'Unreachable'" ng-class="{disabled: dataService.server_unreachable || (confirm && !confirmImmediateShutdown) || dataService.loading, transitionAll: confirm && confirmImmediateShutdown}"> - <button id="power__hard-shutdown" class="btn btn-secondary" ng-click="immediateShutdownConfirm()" role="button" ng-disabled="dataService.server_unreachable"> - <icon file="icon-power.svg"></icon>Immediate shutdown</button> - <p class="inline">Removes power from the server without waiting for software to stop</p> - <confirm title="immediate shutdown" confirm="confirmImmediateShutdown" ng-show="confirmImmediateShutdown" cancel="immediatelyShutdownCancel" callback="immediateShutdown"></confirm> + </div> + <!-- form actions --> + <div class="boot-form-actions"> + <button type="submit" class="btn btn-primary" ng-click="saveBootSettings();saveTPMPolicy();hostBootSettings.$setPristine()" ng-disabled="dataService.server_unreachable || hostBootSettings.$pristine;"> + Save + </button> + <button type="reset" class="btn btn-secondary" ng-disabled="dataService.server_unreachable || hostBootSettings.$pristine" ng-click="resetForm();hostBootSettings.$setPristine()"> + Cancel + </button> + </div> + </form> + </div> + </div> + <!-- Power Operations Column --> + <div class="large-8 columns operations-wrapper"> + <h2 class="subhead boot-operations">Operations</h2> + <!-- Pending one time boot alert --> + <div class="alert-warning" + ng-if="boot.oneTimeBootEnabled" ng-hide="dataService.server_state == 'Unreachable'"> + <div class="pending-icon"> + <icon file="icon-pending.svg"></icon> + </div> + <p class="alert-pending"> + Pending one time boot. Next boot will be performed with the + specified one time boot settings. Subsequent boots will be performed + with the default settings. + </p> + </div> + <!-- Pending reboot warning --> + <p ng-show="operationPending"> + There are no power operations to display while power operation is in + progress. When complete, any new power operations will be displayed + here. + </p> + <div ng-show="!operationPending"> + <!-- Power on displays only when server is off --> + <div class="row column" ng-show="dataService.server_state == 'Off'" + ng-class="{disabled: dataService.server_unreachable}"> + <button id="power__power-on" class="btn btn-primary inline" ng-click="powerOn()" role="button" + ng-disabled="dataService.server_unreachable"> + Power on + </button> + </div> + <!-- Reboot/shutdown column --> + <div + ng-show="dataService.server_state !== 'Off'"> + <div class="reboot__operations"> + <form id="reboot-form" name="rebootForm" class="reboot-form"> + <fieldset> + <legend class="boot-operations">Reboot server</legend> + <label class="control-radio">Orderly - OS shuts down, then server reboots + <input type="radio" name="radioReboot" + ng-model="defaultRebootSetting" value="warm-reboot" /> + <span class="control__indicator control__indicator-on"></span> + </label> + <label class="control-radio">Immediate - Server reboots without OS shutting down; may cause data corruption + <input type="radio" name="radioReboot" + ng-model="defaultRebootSetting" value="cold-reboot" /> + <span class="control__indicator control__indicator-on"></span> + </label> + </fieldset> + <div> + <button class="btn-primary" ng-click="rebootConfirmModal()" type="submit" ng-disabled="dataService.server_unreachable"> + Reboot + </button> + </div> + </form> + </div> + <!-- Shutdown Field Row --> + <div class="shutdown__operations"> + <form id="shutdown-form" name="shutdownForm" class="shutdown-form"> + <fieldset> + <legend class="boot-operations">Shutdown server</legend> + <label class="control-radio">Orderly - OS shuts down, then server shuts down + <input type="radio" name="radioShutdown" ng-model="defaultShutdownSetting" + value='warm-shutdown' /> + <span class="control__indicator control__indicator-on"></span> + </label> + <label class="control-radio">Immediate - Server shuts down without OS shutting down; may cause data corruption + <input type="radio" name="radioShutdown" ng-model="defaultShutdownSetting" + value='cold-shutdown' /> + <span class="control__indicator control__indicator-on"></span> + </label> + </fieldset> + <div> + <button class="btn-primary" ng-click="shutdownConfirmModal()" type="submit" ng-disabled="dataService.server_unreachable"> + Shut down + </button> </div> - </div> + </form> + </div> </div> -</div> + </div> + </div> +</div>
\ No newline at end of file |

