def get_curtin_image(node): """Return boot image that supports 'xinstall' for the given node.""" osystem = node.get_osystem() series = node.get_distro_series() arch, subarch = node.split_arch() rack_controller = node.get_boot_rack_controller() try: images = get_boot_images_for(rack_controller, osystem, arch, subarch, series) except (NoConnectionsAvailable, TimeoutError): logger.error( "Unable to get RPC connection for rack controller '%s' (%s)", rack_controller.hostname, rack_controller.system_id) raise ClusterUnavailable( "Unable to get RPC connection for rack controller '%s' (%s)" % (rack_controller.hostname, rack_controller.system_id)) for image in images: if image['purpose'] == 'xinstall': return image raise MissingBootImage( "Error generating the URL of curtin's image file. " "No image could be found for the given selection: " "os=%s, arch=%s, subarch=%s, series=%s, purpose=xinstall." % ( osystem, arch, subarch, series, ))
def get_curtin_image(node): """Return boot image that supports 'xinstall' for the given node.""" osystem = node.get_osystem() series = node.get_distro_series() arch, subarch = node.split_arch() rack_controller = node.get_boot_rack_controller() try: images = get_boot_images_for(rack_controller, osystem, arch, subarch, series) except (NoConnectionsAvailable, TimeoutError): logger.error( "Unable to get RPC connection for rack controller '%s' (%s)", rack_controller.hostname, rack_controller.system_id, ) raise ClusterUnavailable( "Unable to get RPC connection for rack controller '%s' (%s)" % (rack_controller.hostname, rack_controller.system_id)) # A matching subarch may be a newer subarch which contains support for # an older one. e.g Xenial hwe-16.04 will match for ga-16.04. First # try to find the subarch we are deploying, if that isn't found allow # a newer version. for image in images: if (image["purpose"] == "xinstall" and image["subarchitecture"] == subarch): return image for image in images: if image["purpose"] == "xinstall": return image raise MissingBootImage( "Error generating the URL of curtin's image file. " "No image could be found for the given selection: " "os=%s, arch=%s, subarch=%s, series=%s, purpose=xinstall." % (osystem, arch, subarch, series))