"""
Functionality related to updating dynamic update packages and
engine upgrades
"""
from smc.base.model import SubElement
from smc.administration.tasks import Task
[docs]class PackageMixin(object):
"""
Manages downloads and activations of update packages and software
upgrades
"""
[docs] def download(self, timeout=5, wait_for_finish=False):
"""
Download Package or Engine Update
:param int timeout: timeout between queries
:raises TaskRunFailed: failure during task status
:rtype: TaskOperationPoller
"""
return Task.execute(self, 'download', timeout=timeout,
wait_for_finish=wait_for_finish)
[docs] def activate(self, resource=None, timeout=3, wait_for_finish=False):
"""
Activate this package on the SMC
:param list resource: node href's to activate on. Resource is only
required for software upgrades
:param int timeout: timeout between queries
:raises TaskRunFailed: failure during activation (downloading, etc)
:rtype: TaskOperationPoller
"""
return Task.execute(self, 'activate', json={'resource': resource},
timeout=timeout, wait_for_finish=wait_for_finish)
@property
def release_notes(self):
"""
HTTP location of the release notes
"""
return self.data.get('release_notes')
[docs]class EngineUpgrade(PackageMixin, SubElement):
"""
Engine Upgrade package management
For example, to check engine upgrades and find a specific
one, then download for installation::
system = System()
upgrades = system.engine_upgrade()
package = upgrades.get_contains('6.2')
poller = package.download(wait_for_finish=True)
while not poller.done():
print(poller.result(3))
print("Finished download: %s" % poller.result())
package.activate()
"""
@property
def release_date(self):
"""
Release date for this engine upgrade
"""
return self.data.get('release_date')
@property
def version(self):
"""
Engine upgrade version
"""
return self.data.get('version')
@property
def platform(self):
"""
Platform for this engine upgrade
"""
return self.data.get('platform')
[docs]class UpdatePackage(PackageMixin, SubElement):
"""
Container for managing update packages on SMC
Download and activate a package::
system = System()
packages = system.update_package()
dynup = packages.get_contains('1007')
poller = dynup.download(wait_for_finish=True)
while not poller.done():
print(poller.result(3))
print("Finished download: %s" % poller.result())
package.activate()
"""
@property
def activation_date(self):
"""
Date this update was activated, if any
:rtype: str
"""
return self.data.get('activation_date')
@property
def package_id(self):
"""
ID of the package. These will increment as new versions
are released.
:rtype: str
"""
return self.data.get('package_id')
@property
def release_date(self):
"""
Date of release
:rtype: str
"""
return self.data.get('release_date')
@property
def state(self):
"""
State of this package as string. Valid states are available, imported, active.
If the package is available, you can execute a download. If the package is
imported, you can activate.
:rtype: str
"""
return self.data.get('state')