def take_action(self, parsed_args): self.log.debug("take_action(%s)" % parsed_args) if parsed_args.json or parsed_args.file_in.name.endswith('.json'): nodes_config = json.load(parsed_args.file_in) elif parsed_args.csv or parsed_args.file_in.name.endswith('.csv'): nodes_config = _csv_to_nodes_dict(parsed_args.file_in) elif parsed_args.file_in.name.endswith('.yaml'): nodes_config = yaml.safe_load(parsed_args.file_in) else: raise exceptions.InvalidConfiguration( _("Invalid file extension for %s, must be json, yaml or csv") % parsed_args.file_in.name) if 'nodes' in nodes_config: nodes_config = nodes_config['nodes'] client = self.app.client_manager.baremetal if parsed_args.initial_state == "enroll": api_version = client.http_client.os_ironic_api_version if [int(part) for part in api_version.split('.')] < [1, 11]: raise exceptions.InvalidConfiguration( _("OS_BAREMETAL_API_VERSION must be >=1.11 for use of " "'enroll' provision state; currently %s") % api_version) for node in nodes_config: caps = utils.capabilities_to_dict(node.get('capabilities', {})) caps.setdefault('boot_option', parsed_args.instance_boot_option) node['capabilities'] = utils.dict_to_capabilities(caps) new_nodes = nodes.register_all_nodes( parsed_args.service_host, nodes_config, client=client, keystone_client=self.app.client_manager.identity, glance_client=self.app.client_manager.image, kernel_name=(parsed_args.deploy_kernel if not parsed_args.no_deploy_image else None), ramdisk_name=(parsed_args.deploy_ramdisk if not parsed_args.no_deploy_image else None)) if parsed_args.initial_state == "available": manageable_node_uuids = list( utils.set_nodes_state( client, new_nodes, "manage", "manageable", skipped_states={'manageable', 'available'})) manageable_nodes = [ n for n in new_nodes if n.uuid in manageable_node_uuids ] list( utils.set_nodes_state(client, manageable_nodes, "provide", "available", skipped_states={'available'}))
def take_action(self, parsed_args): self.log.debug("take_action(%s)" % parsed_args) if parsed_args.json or parsed_args.file_in.name.endswith('.json'): nodes_config = json.load(parsed_args.file_in) elif parsed_args.csv or parsed_args.file_in.name.endswith('.csv'): nodes_config = _csv_to_nodes_dict(parsed_args.file_in) elif parsed_args.file_in.name.endswith('.yaml'): nodes_config = yaml.safe_load(parsed_args.file_in) else: raise exceptions.InvalidConfiguration( _("Invalid file extension for %s, must be json, yaml or csv") % parsed_args.file_in.name) if 'nodes' in nodes_config: nodes_config = nodes_config['nodes'] client = self.app.client_manager.baremetal if parsed_args.initial_state == "enroll": api_version = client.http_client.os_ironic_api_version if [int(part) for part in api_version.split('.')] < [1, 11]: raise exceptions.InvalidConfiguration( _("OS_BAREMETAL_API_VERSION must be >=1.11 for use of " "'enroll' provision state; currently %s") % api_version) for node in nodes_config: caps = utils.capabilities_to_dict(node.get('capabilities', {})) caps.setdefault('boot_option', parsed_args.instance_boot_option) node['capabilities'] = utils.dict_to_capabilities(caps) new_nodes = nodes.register_all_nodes( parsed_args.service_host, nodes_config, client=client, keystone_client=self.app.client_manager.identity, glance_client=self.app.client_manager.image, kernel_name=(parsed_args.deploy_kernel if not parsed_args.no_deploy_image else None), ramdisk_name=(parsed_args.deploy_ramdisk if not parsed_args.no_deploy_image else None)) if parsed_args.initial_state == "available": manageable_node_uuids = list(utils.set_nodes_state( client, new_nodes, "manage", "manageable", skipped_states={'manageable', 'available'} )) manageable_nodes = [ n for n in new_nodes if n.uuid in manageable_node_uuids ] list(utils.set_nodes_state( client, manageable_nodes, "provide", "available", skipped_states={'available'} ))
def _get_fake_node(self, profile=None, possible_profiles=[], provision_state='available'): caps = {'%s_profile' % p: '1' for p in possible_profiles} if profile is not None: caps['profile'] = profile caps = utils.dict_to_capabilities(caps) return mock.Mock(uuid=str(uuid4()), properties={'capabilities': caps}, provision_state=provision_state, spec=['uuid', 'properties', 'provision_state'])