|
34 | 34 | else:
|
35 | 35 | import ConfigParser as configparser
|
36 | 36 |
|
| 37 | + from shutil import copyfile |
| 38 | + |
37 | 39 | from sonic_platform_base.component_base import ComponentBase, \
|
38 | 40 | FW_AUTO_INSTALLED, \
|
39 | 41 | FW_AUTO_UPDATED, \
|
@@ -133,6 +135,18 @@ class ONIEUpdater(object):
|
133 | 135 |
|
134 | 136 | ONIE_IMAGE_INFO_COMMAND = '/bin/bash {} -q -i'
|
135 | 137 |
|
| 138 | + BIOS_UPDATE_FILE_EXT = '.rom' |
| 139 | + |
| 140 | + def __add_prefix(self, image_path): |
| 141 | + if self.BIOS_UPDATE_FILE_EXT not in image_path: |
| 142 | + rename_path = "/tmp/00-{}".format(os.path.basename(image_path)) |
| 143 | + else: |
| 144 | + rename_path = "/tmp/99-{}".format(os.path.basename(image_path)) |
| 145 | + |
| 146 | + copyfile(image_path, rename_path) |
| 147 | + |
| 148 | + return rename_path |
| 149 | + |
136 | 150 | def __mount_onie_fs(self):
|
137 | 151 | fs_mountpoint = '/mnt/onie-fs'
|
138 | 152 | onie_path = '/lib/onie'
|
@@ -170,15 +184,19 @@ def __umount_onie_fs(self):
|
170 | 184 | os.rmdir(fs_mountpoint)
|
171 | 185 |
|
172 | 186 | def __stage_update(self, image_path):
|
173 |
| - cmd = self.ONIE_FW_UPDATE_CMD_ADD.format(image_path) |
| 187 | + rename_path = self.__add_prefix(image_path) |
| 188 | + |
| 189 | + cmd = self.ONIE_FW_UPDATE_CMD_ADD.format(rename_path) |
174 | 190 |
|
175 | 191 | try:
|
176 | 192 | subprocess.check_call(cmd.split(), universal_newlines=True)
|
177 | 193 | except subprocess.CalledProcessError as e:
|
178 | 194 | raise RuntimeError("Failed to stage firmware update: {}".format(str(e)))
|
179 | 195 |
|
180 | 196 | def __unstage_update(self, image_path):
|
181 |
| - cmd = self.ONIE_FW_UPDATE_CMD_REMOVE.format(os.path.basename(image_path)) |
| 197 | + rename_path = self.__add_prefix(image_path) |
| 198 | + |
| 199 | + cmd = self.ONIE_FW_UPDATE_CMD_REMOVE.format(os.path.basename(rename_path)) |
182 | 200 |
|
183 | 201 | try:
|
184 | 202 | subprocess.check_call(cmd.split(), universal_newlines=True)
|
@@ -206,7 +224,8 @@ def __is_update_staged(self, image_path):
|
206 | 224 | except subprocess.CalledProcessError as e:
|
207 | 225 | raise RuntimeError("Failed to get pending firmware updates: {}".format(str(e)))
|
208 | 226 |
|
209 |
| - basename = os.path.basename(image_path) |
| 227 | + rename_path = self.__add_prefix(image_path) |
| 228 | + basename = os.path.basename(rename_path) |
210 | 229 |
|
211 | 230 | for line in output.splitlines():
|
212 | 231 | if line.startswith(basename):
|
|
0 commit comments