1<loader loading="loading"></loader>
2<div class="row column">
3	<h1>Firmware</h1>
4	<div class="column small-12 page-header">
5		<h2 class="inline h4">Manage BMC and server firmware</h2>
6	</div>
7</div>
8<div class="row column">
9	<p>Use the following tables to manage firmware image files. The image file that is listed at the top, the image with the highest boot priority, is used the next time that the device is booted. To change the boot priority for the image, click the arrow icons.</p>
10	<p><a ng-click="gotoAnchor()">Scroll down to upload an image file</a> to transfer a new firmware image to the BMC. After uploading a new image, Activate it to make it available for use.</p>
11</div>
12<firmware-list title="BMC images" version="bmcActiveVersion" firmwares="firmwares" filter-by="filters.bmc"></firmware-list>
13<firmware-list title="Server images" version="hostActiveVersion" firmwares="firmwares" filter-by="filters.host"></firmware-list>
14<div class="row column" id="upload">
15	<div class="column small-12 page-header">
16		<h2 class="inline h3 bold">Specify image file location</h2>
17	</div>
18	<form id="firmware__upload-form" role="form" class="firmware__upload-form">
19		<p>Specify an image file located on your workstation or a TFTP server. An image file may contain firmware images for the server, BMC, or other hardware devices. Each image that you upload will be unpacked from the image file and added to the appropriate list above.</p>
20		<div class=" column firmware__upload-station">
21			<h3 class="h4 bold">Upload image file from workstation</h3>
22			<p>Select the image file saved on the workstation storage medium to upload to the server BMC.</p>
23			<label for="file-upload" class="inline firmware__upload-chooser">
24				<input id="file-upload" type="file" file="file" class="hide" onchange="angular.element(this).scope().fileNameChanged()"/>
25				<span class="button btn-secondary inline">Choose a file</span>
26				<span class="inline firmware__upload-file-name"><span ng-if="!file">No file chosen</span><span ng-if="file.name !== undefined">{{file.name}}</span></span>
27			</label>
28			<input type="button" value="Upload firmware" class="inline button btn-primary float-right" ng-click="upload()"/>
29			<div class="inline uploading" ng-show="uploading">Upload in progress...</div>
30		</div>
31		<div class=" column firmware__upload-tftp">
32			<h3 class="h4 bold">Download image file from TFTP server</h3>
33			<p>Specify both the TFTP server IP address and the image file name stored on it to download to the server BMC.</p>
34			<fieldset>
35				<div class="row">
36					<div class="column small-12 large-4">
37						<label for="tftp-ip">TFTP Server IP address</label>
38						<input name="tftp-ip" id="tftp-ip" type="text"  ng-model="download_host"/>
39					</div>
40					<div class="column small-12 large-4">
41						<label for="tftp-file-name">File name</label>
42						<input name="tftp-file-name" id="tftp-file-name" type="text"  ng-model="download_filename"/>
43					</div>
44					<div class="column small-12 large-4">
45						<input type="button" value="Download firmware" class="inline button btn-primary float-right" ng-click="download()"/>
46					</div>
47				</div>
48				<div class="inline uploading" ng-show="downloading">Downloading in progress...</div>
49			</fieldset>
50		</div>
51	</form>
52</div>
53
54<!-- Firmware modals -->
55<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': display_error}">
56	<div class="modal__upload-fail" role="document">
57		<div class="screen-reader-offscreen modal-description">{{error.modal_title}}</div><!-- accessibility only; used for screen readers -->
58		<div class="page-header ">
59			<span class="icon icon__warning inline"><span class="accessible-text" role="alert">{{error.type}}</span></span>
60			<h1 class="modal-title h4 inline">{{error.title}}</h1>
61		</div>
62		<div class="modal__content">
63			<p>{{error.desc}}</p>
64		</div>
65		<div class="modal__button-wrapper">
66			<button class="inline btn-primary" ng-click="display_error = false;">Close</button>
67		</div>
68	</div>
69</section>
70
71<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': confirm_priority}">
72	<div class="modal__tftp-unreachable" role="document">
73		<div class="screen-reader-offscreen modal-description">Update image priority</div><!-- accessibility only; used for screen readers -->
74		<div class="page-header ">
75			<span class="icon icon__warning inline"><span class="accessible-text" role="alert">Warning</span></span>
76			<h1 class="modal-title h4 inline">Change image priority</h1>
77		</div>
78		<div class="modal__content">
79			<p>Change firmware {{priority_image_version}} priority?</p>
80		</div>
81		<div class="modal__button-wrapper">
82			<button class="inline btn-secondary" ng-click="confirm_priority=false;">Cancel</button>
83			<button class="inline btn-primary" ng-click="confirmChangePriority()">Continue</button>
84		</div>
85	</div>
86</section>
87
88<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': confirm_delete}">
89	<div class="modal__tftp-unreachable" role="document">
90		<div class="screen-reader-offscreen modal-description">Delete firmware image</div><!-- accessibility only; used for screen readers -->
91		<div class="page-header ">
92			<span class="icon icon__warning inline"><span class="accessible-text" role="alert">Warning</span></span>
93			<h1 class="modal-title h4 inline">Delete image</h1>
94		</div>
95		<div class="modal__content">
96			<p>Delete firmware {{delete_image_version}}?</p>
97		</div>
98		<div class="modal__button-wrapper">
99			<button class="inline btn-secondary" ng-click="confirm_delete=false;">Cancel</button>
100			<button class="inline btn-primary" ng-click="confirmDeleteImage()">Continue</button>
101		</div>
102	</div>
103</section>
104
105<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': reboot_confirm}">
106	<div class="modal__reboot" role="document">
107		<div class="screen-reader-offscreen modal-description">Server reboot required modal</div><!-- accessibility only; used for screen readers -->
108		<div class="page-header ">
109			<h1 class="modal-title h4"><span class="icon icon__info"><svg xmlns="http://www.w3.org/2000/svg"
110					viewBox="0 0 32 32"><path
111					d="M18 14h-6v2h1v6h-2v2h8v-2h-2z"/><circle cx="16" cy="10" r="2"/><path
112					d="M16 2C8.269 2 2 8.269 2 16s6.269 14 14 14 14-6.269 14-14S23.731 2 16 2zm0 26C9.383 28 4 22.617 4 16S9.383 4 16 4s12 5.383 12 12-5.383 12-12 12z"/></svg></span>
113				Server reboot required
114			</h1>
115		</div>
116		<div class="modal__content">
117			<p>You specified a new primary firmware image. This change will not take effect until the server is powered
118				down and restarted.</p>
119		</div>
120		<a href="#/server-control/power-operations" class="bold modal__link">Go to power operations page</a>
121		<div class="modal__button-wrapper">
122			<button class="inline btn-secondary" ng-click="reboot_confirm=false;">Cancel</button>
123			<button class="inline btn-primary" ng-click="confirmWarmReboot()">Warm reboot</button>
124		</div>
125	</div>
126</section>
127<section class="modal" aria-hidden="true" aria-labelledby="modalTitle" aria-describedby="modalDescription" role="dialog" ng-class="{'active': preserve_settings_confirm}">
128	<div class="modal__preserve-settings" role="document">
129		<div class="screen-reader-offscreen modal-description">Preserve setting modal</div><!-- accessibility only; used for screen readers -->
130		<div class="page-header ">
131			<h1 class="modal-title h4"><span class="icon icon__info"><svg xmlns="http://www.w3.org/2000/svg"
132					viewBox="0 0 32 32"><path
133					d="M18 14h-6v2h1v6h-2v2h8v-2h-2z"/><circle cx="16" cy="10" r="2"/><path
134					d="M16 2C8.269 2 2 8.269 2 16s6.269 14 14 14 14-6.269 14-14S23.731 2 16 2zm0 26C9.383 28 4 22.617 4 16S9.383 4 16 4s12 5.383 12 12-5.383 12-12 12z"/></svg></span>
135				Preserve settings
136			</h1>
137		</div>
138		<div class="modal__content">
139			<p>Booting to a different firmware image will reset the user settings for the BMC. Choose either the option to reset both the user and network settings or the option to preserve the network settings for the newly active firmware image.</p>
140			<form>
141				<fieldset>
142					<div class="row column">
143						<label class="control-radio bold" for="preserve-settings">Preserve network settings
144							<input type="radio" name="preserve-settings" id="preserve-settings" ng-checked="true" ng-model="dhcp" ng-value="true" ng-init="dhcp=true"/>
145							<span class="control__indicator control__indicator-on"></span>
146						</label>
147					</div>
148					<div class="row column">
149						<label class="control-radio bold" for="reset-settings">Reset both user and network settings
150							<input type="radio" name="reset-settings" id="reset-settings" ng-model="dhcp" ng-value="false"/>
151							<span class="control__indicator control__indicator-on"></span>
152						</label>
153					</div>
154				</fieldset>
155			</form>
156		</div>
157		<div class="modal__button-wrapper">
158			<button class="inline btn-secondary" ng-click="preserve_settings_confirm=false;">Cancel</button>
159			<button class="inline btn-primary" ng-click="preserveSettingsConfirmed()">Continue</button>
160		</div>
161	</div>
162</section>
163<div class="modal-overlay" tabindex="-1" ng-class="{'active': (display_error || reboot_confirm || preserve_settings_confirm)}"></div>
164