def roles(self, uid): from fuelclient.objects.node import Node from fuelclient.objects.environment import Environment node = Node(uid) env = Environment(node.data['cluster']) facts = env.get_default_facts('deployment', [uid]) return [f['role'] for f in facts]
def attributes(self, params): """Download current or default disk, network, configuration for some node: fuel node --node-id 2 --disk --default fuel node --node-id 2 --network --download \\ --dir path/to/directory Upload disk, network, configuration for some node: fuel node --node-id 2 --network --upload fuel node --node-id 2 --disk --upload --dir path/to/directory """ nodes = Node.get_by_ids(params.node) attribute_type = "interfaces" if params.network else "disks" attributes = [] files = [] if params.default: for node in nodes: default_attribute = node.get_default_attribute(attribute_type) file_path = node.write_attribute( attribute_type, default_attribute, params.dir, serializer=self.serializer ) files.append(file_path) attributes.append(default_attribute) message = "Default node attributes for {0} were written" \ " to:\n{1}".format(attribute_type, "\n".join(files)) elif params.upload: for node in nodes: attribute = node.read_attribute( attribute_type, params.dir, serializer=self.serializer ) node.upload_node_attribute( attribute_type, attribute ) attributes.append(attribute) message = "Node attributes for {0} were uploaded" \ " from {1}".format(attribute_type, params.dir) else: for node in nodes: downloaded_attribute = node.get_attribute(attribute_type) file_path = node.write_attribute( attribute_type, downloaded_attribute, params.dir, serializer=self.serializer ) attributes.append(downloaded_attribute) files.append(file_path) message = "Node attributes for {0} were written" \ " to:\n{1}".format(attribute_type, "\n".join(files)) print(message)
def _get_one_node(params): """Ensures that only one node was passed in the command and returns it. :raises ArgumentException: When more than 1 node provided. """ if len(params.node) > 1: raise error.ArgumentException( "You should select only one node to change.") return Node(params.node[0])
def delete_from_db(self, params): """To delete nodes from fuel db: fuel node --node-id 1 --delete-from-db """ nodes = Node.get_by_ids(params.node) for node in nodes: node.delete() self.serializer.print_to_output( {}, "Nodes with id {0} has been deleted from fuel db.\n" "You should still delete node from cobbler".format(params.node))
def set(self, params): """Assign some nodes to environment with with specific roles: fuel --env 1 node set --node 1 --role controller fuel --env 1 node set --node 2,3,4 --role compute,cinder """ env = Environment(params.env) nodes = Node.get_by_ids(params.node) roles = map(str.lower, params.role) env.assign(nodes, roles) self.serializer.print_to_output({}, "Nodes {0} with roles {1} " "were added to environment {2}".format( params.node, roles, params.env))
def set(self, params): """Assign some nodes to environment with with specific roles: fuel --env 1 node set --node 1 --role controller fuel --env 1 node set --node 2,3,4 --role compute,cinder """ env = Environment(params.env) nodes = Node.get_by_ids(params.node) roles = map(str.lower, params.role) env.assign(nodes, roles) self.serializer.print_to_output( {}, "Nodes {0} with roles {1} " "were added to environment {2}" .format(params.node, roles, params.env) )
def set_hostname(self, params): """To set node hostname: fuel node --node-id 1 --hostname ctrl-01 """ nodes = Node.get_by_ids(params.node) if len(nodes) > 1: raise error.ArgumentException( "You should select only one node to change hostname." ) nodes[0].set({"hostname": params.hostname}) self.serializer.print_to_output( {}, "Hostname for node with id {0} has been changed to {1}." .format(params.node[0], params.hostname) )
def get_node_by_devops_node(self, devops_node, interface='admin'): interfaces = devops_node.interface_by_network_name(interface) for interface in interfaces: for node in FuelNode.get_all(): if node._data['mac'] == interface.mac_address: return NodeProxy(node, self)