mirror of
https://github.com/Telecominfraproject/OpenNetworkLinux.git
synced 2025-12-25 17:27:01 +00:00
Enable ONIE and Firmware Upgrade Package Support
This commit is contained in:
3
packages/base/all/vendor-config-onl/src/boot.d/61.upgrade-firmware
Executable file
3
packages/base/all/vendor-config-onl/src/boot.d/61.upgrade-firmware
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/python
|
||||
from onl.upgrade.firmware import FirmwareUpgrade
|
||||
FirmwareUpgrade().main()
|
||||
@@ -22,6 +22,11 @@ upgrade:
|
||||
package:
|
||||
dir: /lib/platform-config/current/onl/upgrade/onie
|
||||
|
||||
firmware:
|
||||
auto: advisory
|
||||
package:
|
||||
dir: /lib/platform-config/current/onl/upgrade/firmware
|
||||
|
||||
loader:
|
||||
auto: advisory
|
||||
versions: /etc/onl/loader/versions.json
|
||||
@@ -36,6 +41,7 @@ upgrade:
|
||||
swi:
|
||||
auto: disabled
|
||||
|
||||
|
||||
pki:
|
||||
key:
|
||||
name: key.pem
|
||||
|
||||
52
packages/base/all/vendor-config-onl/src/python/onl/upgrade/firmware.py
Executable file
52
packages/base/all/vendor-config-onl/src/python/onl/upgrade/firmware.py
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/python -u
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
from onl.upgrade import ubase
|
||||
from onl.sysconfig import sysconfig
|
||||
|
||||
class FirmwareUpgrade(ubase.BaseOnieUpgrade):
|
||||
|
||||
name="firmware"
|
||||
Name="Firmware"
|
||||
title="Firmware Upgrade Check"
|
||||
atype="A firmware"
|
||||
|
||||
current_version_key="Current Firmware Version"
|
||||
next_version_key="Next Firmware Version"
|
||||
|
||||
def init_versions(self):
|
||||
|
||||
# Get the current platform firmware version
|
||||
self.current_version = self.platform.firmware_version()
|
||||
self.next_version = None
|
||||
self.updater = None
|
||||
self.load_manifest(os.path.join(sysconfig.upgrade.firmware.package.dir, "manifest.json"))
|
||||
|
||||
def do_upgrade(self, forced=False):
|
||||
self.install_onie_updater(sysconfig.upgrade.firmware.package.dir,
|
||||
self.manifest['updater'])
|
||||
self.initiate_onie_update()
|
||||
|
||||
|
||||
def upgrade_notes(self):
|
||||
notes = """
|
||||
* Two reboots will be required to complete this upgrade.
|
||||
|
||||
* Do not turn the power off on this device until the upgrade is complete.
|
||||
Disrupting power during the firmware upgrade may result in an unrecoverable system."""
|
||||
|
||||
duration = self.manifest.get("duration", None)
|
||||
if duration:
|
||||
notes = notes + """
|
||||
|
||||
* THIS UPGRADE WILL REQUIRE APPROXIMATELY %s MINUTES.
|
||||
The system will reboot when completed.""" % duration
|
||||
|
||||
return notes
|
||||
|
||||
|
||||
def do_no_upgrade(self):
|
||||
self.clean_onie_updater()
|
||||
|
||||
@@ -5,7 +5,6 @@ import sys
|
||||
|
||||
from onl.upgrade import ubase
|
||||
from onl.sysconfig import sysconfig
|
||||
from onl.mounts import OnlMountManager, OnlMountContextReadOnly, OnlMountContextReadWrite
|
||||
|
||||
class OnieUpgrade(ubase.BaseOnieUpgrade):
|
||||
|
||||
@@ -23,37 +22,19 @@ class OnieUpgrade(ubase.BaseOnieUpgrade):
|
||||
self.current_version = self.platform.onie_version()
|
||||
self.next_version = None
|
||||
self.updater = None
|
||||
self.load_manifest(os.path.join(sysconfig.upgrade.onie.package.dir, "manifest.json"))
|
||||
|
||||
self.manifest = self.load_json(os.path.join(sysconfig.upgrade.onie.package.dir, "manifest.json"))
|
||||
def do_upgrade(self, forced=False):
|
||||
self.install_onie_updater(sysconfig.upgrade.onie.package.dir,
|
||||
self.manifest['updater'])
|
||||
self.initiate_onie_update()
|
||||
|
||||
if self.manifest is None:
|
||||
self.finish("No ONIE updater available for the current platform.")
|
||||
|
||||
if 'onie-version' not in self.manifest:
|
||||
self.finish("No ONIE version in the upgrade manifest.")
|
||||
else:
|
||||
self.next_version = self.manifest['onie-version']
|
||||
|
||||
if 'onie-updater' not in self.manifest:
|
||||
self.finish("No ONIE updater in the upgrade manifest.")
|
||||
|
||||
|
||||
def summarize(self):
|
||||
self.logger.info("Current ONIE Version: %s" % self.current_version)
|
||||
self.logger.info(" Next ONIE Version: %s" % self.manifest.get('onie-version'))
|
||||
self.logger.info(" Updater: %s" % self.manifest.get('onie-updater'))
|
||||
self.logger.info("")
|
||||
def do_no_upgrade(self):
|
||||
self.clean_onie_updater()
|
||||
|
||||
def upgrade_notes(self):
|
||||
return """
|
||||
* The system will reboot into ONIE to complete the update, and then reboot to return to Switch Light
|
||||
"""
|
||||
|
||||
def do_upgrade(self, forced=False):
|
||||
self.install_onie_updater(sysconfig.upgrade.onie.package.dir,
|
||||
self.manifest['onie-updater'])
|
||||
self.initiate_onie_update()
|
||||
|
||||
def do_no_upgrade(self):
|
||||
self.clean_onie_updater()
|
||||
|
||||
|
||||
@@ -411,11 +411,21 @@ class BaseOnieUpgrade(BaseUpgrade):
|
||||
self.logger.info("Removing previous onie-updater.")
|
||||
os.remove(updater)
|
||||
|
||||
def load_manifest(self, path):
|
||||
self.manifest = self.load_json(path)
|
||||
|
||||
# def upgrade_status():
|
||||
# data = {}
|
||||
# if os.path.exists(BaseUpgrade.UPGRADE_STATUS_JSON):
|
||||
# with open(BaseUpgrade.UPGRADE_STATUS_JSON) as f:
|
||||
# data = json.load(f)
|
||||
# return data
|
||||
if self.manifest is None:
|
||||
self.finish("No %s updater available for the current platform." % self.Name)
|
||||
|
||||
if 'version' not in self.manifest:
|
||||
self.finish("No %s version in the upgrade manifest." % self.Name)
|
||||
else:
|
||||
self.next_version = self.manifest['version']
|
||||
|
||||
if 'updater' not in self.manifest:
|
||||
self.finish("No %s updater in the upgrade manifest." % self.Name)
|
||||
|
||||
def summarize(self):
|
||||
self.logger.info("Current %s Version: %s" % (self.Name, self.current_version))
|
||||
self.logger.info(" Next %s Version: %s" % (self.Name, self.manifest.get('version')))
|
||||
self.logger.info("")
|
||||
|
||||
Reference in New Issue
Block a user