def prepare_cleaning(self, task): """Boot into the agent to prepare for cleaning. :param task: a TaskManager object containing the node :raises NodeCleaningFailure: if the previous cleaning ports cannot be removed or if new cleaning ports cannot be created :returns: states.CLEANWAIT to signify an asynchronous prepare """ provider = dhcp_factory.DHCPFactory() # If we have left over ports from a previous cleaning, remove them if getattr(provider.provider, 'delete_cleaning_ports', None): # Allow to raise if it fails, is caught and handled in conductor provider.provider.delete_cleaning_ports(task) # Create cleaning ports if necessary ports = None if getattr(provider.provider, 'create_cleaning_ports', None): # Allow to raise if it fails, is caught and handled in conductor ports = provider.provider.create_cleaning_ports(task) # Append required config parameters to node's driver_internal_info # to pass to IPA. deploy_utils.agent_add_clean_params(task) _prepare_pxe_boot(task) _do_pxe_boot(task, ports) # Tell the conductor we are waiting for the agent to boot. return states.CLEANWAIT
def prepare_cleaning(self, task): """Boot into the agent to prepare for cleaning. :param task: a TaskManager object containing the node :raises NodeCleaningFailure: if the previous cleaning ports cannot be removed or if new cleaning ports cannot be created :returns: states.CLEANWAIT to signify an asynchronous prepare """ provider = dhcp_factory.DHCPFactory() # If we have left over ports from a previous cleaning, remove them if getattr(provider.provider, 'delete_cleaning_ports', None): # Allow to raise if it fails, is caught and handled in conductor provider.provider.delete_cleaning_ports(task) # Create cleaning ports if necessary ports = None if getattr(provider.provider, 'create_cleaning_ports', None): # Allow to raise if it fails, is caught and handled in conductor ports = provider.provider.create_cleaning_ports(task) # Append required config parameters to node's driver_internal_info # to pass to IPA. deploy_utils.agent_add_clean_params(task) _prepare_pxe_boot(task) _do_pxe_boot(task, ports) # Tell the conductor we are waiting for the agent to boot. return states.CLEANWAIT
def prepare_cleaning(self, task): deploy_utils.agent_add_clean_params(task) ramdisk_opts = deploy_utils.build_agent_options(task.node) ramdisk_opts.update( iscsi_deploy.build_deploy_ramdisk_options(task.node)) task.driver.boot.prepare_ramdisk(task, ramdisk_opts) manager_utils.node_power_action(task, states.REBOOT) return states.CLEANWAIT
def prepare_cleaning(self, task): """Boot into the agent to prepare for cleaning. :param task: a TaskManager object containing the node :raises NodeCleaningFailure: if the previous cleaning ports cannot be removed or if new cleaning ports cannot be created :returns: states.CLEANWAIT to signify an asynchronous prepare """ provider = dhcp_factory.DHCPFactory() # If we have left over ports from a previous cleaning, remove them if getattr(provider.provider, 'delete_cleaning_ports', None): # Allow to raise if it fails, is caught and handled in conductor provider.provider.delete_cleaning_ports(task) # Create cleaning ports if necessary if getattr(provider.provider, 'create_cleaning_ports', None): # Allow to raise if it fails, is caught and handled in conductor ports = provider.provider.create_cleaning_ports(task) # Add vif_port_id for each of the ports because some boot # interfaces expects these to prepare for booting ramdisk. for port in task.ports: extra_dict = port.extra try: extra_dict['vif_port_id'] = ports[port.uuid] except KeyError: # This is an internal error in Ironic. All DHCP providers # implementing create_cleaning_ports are supposed to # return a VIF port ID for all Ironic ports. But # that doesn't seem to be true here. error = (_("When creating cleaning ports, DHCP provider " "didn't return VIF port ID for %s") % port.uuid) raise exception.NodeCleaningFailure( node=task.node.uuid, reason=error) else: port.extra = extra_dict port.save() # Append required config parameters to node's driver_internal_info # to pass to IPA. deploy_utils.agent_add_clean_params(task) if CONF.agent.manage_agent_boot: ramdisk_opts = build_agent_options(task.node) task.driver.boot.prepare_ramdisk(task, ramdisk_opts) manager_utils.node_power_action(task, states.REBOOT) # Tell the conductor we are waiting for the agent to boot. return states.CLEANWAIT
def prepare_cleaning(self, task): """Boot into the agent to prepare for cleaning.""" # Create cleaning ports if necessary provider = dhcp_factory.DHCPFactory().provider # If we have left over ports from a previous cleaning, remove them if getattr(provider, 'delete_cleaning_ports', None): provider.delete_cleaning_ports(task) if getattr(provider, 'create_cleaning_ports', None): provider.create_cleaning_ports(task) # Append required config parameters to node's driver_internal_info # to pass to IPA. deploy_utils.agent_add_clean_params(task) _prepare_agent_vmedia_boot(task) # Tell the conductor we are waiting for the agent to boot. return states.CLEANWAIT
def prepare_cleaning(self, task): """Boot into the agent to prepare for cleaning.""" # Create cleaning ports if necessary provider = dhcp_factory.DHCPFactory().provider # If we have left over ports from a previous cleaning, remove them if getattr(provider, 'delete_cleaning_ports', None): provider.delete_cleaning_ports(task) if getattr(provider, 'create_cleaning_ports', None): provider.create_cleaning_ports(task) # Append required config parameters to node's driver_internal_info # to pass to IPA. deploy_utils.agent_add_clean_params(task) _prepare_agent_vmedia_boot(task) # Tell the conductor we are waiting for the agent to boot. return states.CLEANING