Name

noderange - syntax for compactly expressing a list of node names


Synopsis

Examples:

node1,node2,node8,node20,group1

node14-node56,node70-node203,group1-group10

node1,node2,node8,node20,node14-node56,node70-node203

node[14-56]

all,-node129-node256,-frame01-frame03

/node.*

^/tmp/nodes

node10+5

10-15,-13

group1@group2


Description

noderange is a syntax that can be used in most xCAT commands to conve- niently specify a list of nodes. The result is that the command will be applied to a range of nodes, often in parallel.

noderange is a comma-separated list. Each token (text between commas) in the list can be any of the forms listed below:

Individual node or group:

node01 group1

A range of nodes or groups:

node01-node10 (equivalent to: node01,node02,node03,...node10) group1-group3 (equivalent to: group1,group2,group3)

A regular expression match of nodes or groups:

/node[345].* (will match any nodes that start with node3, node4, or node5) /group[12].* (will match any groups that start with group1 or group2)

An incremented range of nodes:

node10+3 (equivalent to: node10,node11,node12,node13)

The full path of a file containing noderanges of nodes or groups:

^/tmp/nodelist

A node shorthand range of nodes:

10-20 (if prefix is `node', equivalent to: node10,node11,node12,...node20) 10+3 (if prefix is `node', equivalent to: node10,node11,node12,node13)

Or any combination:

node01-node30,node40,^/tmp/nodes,/node[13].*,2-10,node50+5

Any individual noderange may be prefixed with an exclusion operator (default -) with the exception of the file operator (default ^).

The intersection operator @ calculates the intersection of the left and right sides:

group1@group2 (will result in the list of nodes group1 and group2 have in common)

Any combination or multiple combinations of inclusive and exclusive ranges of nodes and groups is legal. There is no precedence implied in the order of the arguments. Exclusive ranges have precedence over inclusive.

Nodes have precedence over groups. If a node range match is made then no group range match will be attempted.

All node names are validated against the nodelist table. Invalid nodes are ignored and return nothing.

All group names are validated against the nodelist and nodetype table. Invalid groups are ignored and return nothing.

Throughout this man page the term xCAT Node Format will be used.

xCAT Node Format is defined by the following regex:

^([A-Za-z-]+)([0-9]+)(([A-Za-z-]+[A-Za-z0-9-]*)*)

In plain english a node or group is in xCAT Node Format if starting from the begining there are one or more alpha characters of any case and any number of - in any combination, followed by one or more num- bers, then optionally followed by one alpha character of any case or the - followed by any combination of case mixed alphanumerics and the -.

noderange supports node/group names in any format. xCAT Node Format is not required, however some node range methods used to determine range will not be used. E.g. If using a noderange of node1a-node9a with a nodelist table only listing node1a through node5a, noderange will enu- merate then validate and return a proper range. If using a node range of aa-az with a nodelist table only listing aa through ay, noderange will fail to return any values.

Example of xCAT Node Format node/group names:

nodenameprefixnumbersuffix
node1node1
node001node001
node-001node-001
node-foo-001-barnode-foo-001-bar
node-foo-1barnode-foo-1bar
foo1bar2foo1bar2
rack01unit34rack01unit34
unit34rack01unit34rack01
pos0134pos0134

Example of non-xCAT Node Format node/group names, but still valid:

aa yellow red 12foo

The supported noderange syntaxes are checked for, and processed, in a specific order. First noderange checks for the multiple range operator (default ,). Each range is also processed by noderange.

Next noderange checks for the file operator (default ^). If the file exists (must be a full path name) each line will be processed as a noderange. Lines starting with # or the file operator (default ^) are ignored. Only one noderange per line is read. All characters are ignored after the first white space.

e.g.

^/tmp/nodes

where

cat /tmp/nodes outputs:

 #my node list (this line ignored)
 ^/tmp/foo #ignored
 node01    #node comment
 node02
 node03
 node10-node20
 /group[456].*
 -node50

Next noderange checks for the exclusion operator (default -) then con- tinues. This operator supports nodes and groups. noderange will not confuse the exclusion or range operators with the - character in names.

Next noderange checks for a numeric only range (e.g. 10-20, 5+3, or just 10), then uses $XCAT_NODE_PREFIX (default is `node') and $XCAT_NODE_SUFFIX (optional) as the defaults to complete the node names. nodeRange tries to be intelligent about detecting padding, so you can specify `node001-node200' and it will add the proper number of zeroes to make all numbers 3 digits. Noderange shorthand supports nodes only. Noderange shorthand can be mixed with all other operators except regex. i.e. exclusion, increment, range, and file may be used.

Next noderange checks for the for the regular expression operator (default /). Regular expressions offer the most flexibility. If you are interested in learning regex read the book Mastering Regular Expressions. This operator supports nodes and groups.

Next noderange checks for the increment range operator (default +). Increment range operator noderanges are in the format:

valid_node_name+number_of_sequential_nodes

e.g.

node10+5

would yield node10 plus the next 5 nodes.

This action is performed using two different methods. If valid_node_name is in xCAT Node Format then the range is enumerated to number_of_sequential_nodes. If not in xCAT Node Format then a sorted nodelist table is used to return the node range. This operator sup- ports nodes only.

Next noderange checks for a single node name or group name.

Next noderange checks for the range operator (default -). Ranges are performed first by validating that both the start and end nodes or groups defining the range exist and if so the range is returned based on the content of the nodelist and nodetype tables. If the start and end nodes or groups defined in the range do not exist, and if both are in xCAT Node Format, and if both the prefix and suffix match, then the range is enumerated and each node/group validated. Only valid nodes/groups will be returned. noderange will not confuse the exclu- sion or range operators with the - character in names.

Last noderange returns nothing if no match can be found.

noderange uses the smallest integer to determine padding. e.g. node1-node10 will generate a list of nodes with numbers 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. node001-node010 will generate a list of nodes with numbers 001, 002, 003, 004, 005, 006, 007, 008, 009, 010.

Multiple instances of a node name are treated as one instance. e.g. node1-node10,node4,node4,node4 will generate a list of nodes numbered 1 through 10, the number 4 will only be listed once.


Examples

all,-node5-node10

Generates a list of all nodes (assuming all is a group) listed in the nodelist table less node5 through node10.

node1-node10,-node3-node5,node4

Generates a list of nodes 1 through 10 less nodes 3,4,5. Note that node4 is listed twice, first in the range and then at the end. Because exclusion has precedence node4 will be excluded.

node1-node10,-node3,-node5

Generates a list of nodes 1 through 10 less nodes 3 and 5.

-node17-node32,all

Generates a list of all (assuming `all' is a group) nodes in the nodelist table less 17 through 32.

node1-node128,user1-user4

Generates a list of nodes 1 through 128, and user nodes 1 through 4.

all,-rack1-rack3,-node100-node200,node150,-storage

Generates a list of all nodes (assuming `all' is a group), less nodes in groups rack1 through rack3 (assuming groups rack1, rack2, and rack3 are defined), less nodes 100 through 200, less nodes in the storage group. Note that node150 is listed but is excluded.

/node[23].*

Generates a list of nodes matching the regex node[23].*. That is all nodes that start with node2 or node3 and end in anything or nothing. E.g. node2, node3, node20, node30, node21234 all match.


SEE ALSO

nodels(1)