Basically, xCAT has 20 types of objects. They are:
auditlog boottarget eventlog firmware group kit kitcomponent kitrepo monitoring network node notification osdistro osdistroupdate osimage policy rack route site zone
This section will introduce you to several important types of objects and give you an overview of how to view and manipulate them.
You can get the detail description of each object by
man <object type> e.g.
The node is the most important object in xCAT. Any physical server, virtual machine or SP (Service Processor for Hardware Control) can be defined as a node object.
For example, I have a physical server which has the following attributes:
groups: all,x86_64 The groups that this node belongs to. arch: x86_64 The architecture of the server is x86_64. bmc: 10.4.14.254 The IP of BMC which will be used for hardware control. bmcusername: ADMIN The username of bmc. bmcpassword: admin The password of bmc. mac: 6C:AE:8B:1B:E8:52 The mac address of the ethernet adapter that will be used to deploy OS for the node. mgt: ipmi The management method which will be used to manage the node. This node will use ipmi protocol. netboot: xnba The network bootloader that will be used to deploy OS for the node. provmethod: rhels7.1-x86_64-install-compute The osimage that will be deployed to the node.
I want to name the node to be cn1 (Compute Node #1) in xCAT. Then I define this node in xCAT with following command:
$mkdef -t node cn1 groups=all,x86_64 arch=x86_64 bmc=10.4.14.254 bmcusername=ADMIN bmcpassword=admin mac=6C:AE:8B:1B:E8:52 mgt=ipmi netboot=xnba provmethod=rhels7.1-x86_64-install-compute
After the define, I can use
lsdefcommand to display the defined node:
$lsdef cn1 Object name: cn1 arch=x86_64 bmc=10.4.14.254 bmcpassword=admin bmcusername=ADMIN groups=all,x86_64 mac=6C:AE:8B:1B:E8:52 mgt=ipmi netboot=xnba postbootscripts=otherpkgs postscripts=syslog,remoteshell,syncfiles provmethod=rhels7.1-x86_64-install-compute
Then I can try to remotely power on the node cn1:
$rpower cn1 on
group is an object which includes multiple node object. When you set group attribute for a node object to a group name like x86_64, the group x86_64 is automatically generated and the node is assigned to the group.
The benefits of using group object:
Handle multiple nodes through group
I defined another server cn2 which is similar with cn1, then my group x86_64 has two nodes: cn1 and cn2.
$ lsdef -t group x86_64 Object name: x86_64 cons=ipmi members=cn1,cn2
Then I can power on all the nodes in the group x86_64.
$ rpower x86_64 on
Inherit attributes from group
If the group object of node object has certain attribute that node object does not have, the node will inherit this attribute from its group.
I set the cons attribute for the group object x86_64.
$ chdef -t group x86_64 cons=ipmi 1 object definitions have been created or modified. $ lsdef -t group x86_64 Object name: x86_64 cons=ipmi members=cn1,cn2
The I can see the cn1 inherits the attribute cons from the group x86_64:
$ lsdef cn1 Object name: cn1 arch=x86_64 bmc=10.4.14.254 bmcpassword=admin bmcusername=ADMIN cons=ipmi groups=all,x86_64 mac=6C:AE:8B:1B:E8:52 mgt=ipmi netboot=xnba postbootscripts=otherpkgs postscripts=syslog,remoteshell,syncfiles provmethod=rhels7.1-x86_64-install-compute
It is useful to define common attributes in group object so that newly added node will inherit them automatically. Since the attributes are defined in the group object, you don’t need to touch the individual nodes attributes.
Use Regular Expression to generate value for node attributes
This is powerful feature in xCAT that you can generate individual attribute value from node name instead of assigning them one by one. Refer to Use Regular Expression in xCAT Database Table.
An osimage object represents an Operating System which can be deployed in xCAT. xCAT always generates several default osimage objects for certain Operating System when executing
copycdscommand to generate the package repository for the OS.
You can display all the defined osimage object:
$ lsdef -t osimage
Display the detail attributes of one osimage named rhels7.1-x86_64-install-compute:
$ lsdef -t osimage rhels7.1-x86_64-install-compute Object name: rhels7.1-x86_64-install-compute imagetype=linux osarch=x86_64 osdistroname=rhels7.1-x86_64 osname=Linux osvers=rhels7.1 otherpkgdir=/install/post/otherpkgs/rhels7.1/x86_64 pkgdir=/install/rhels7.1/x86_64 pkglist=/opt/xcat/share/xcat/install/rh/compute.rhels7.pkglist profile=compute provmethod=install synclists=/root/syncfiles.list template=/opt/xcat/share/xcat/install/rh/compute.rhels7.tmpl
This osimage represents a Linux rhels7.1 Operating System. The package repository is in /install/rhels7.1/x86_64 and the packages which will be installed is listed in the file /opt/xcat/share/xcat/install/rh/compute.rhels7.pkglist …
I can bind the osimage to node when I want to deploy osimage rhels7.1-x86_64-install-compute on my node cn1:
$ nodeset cn1 osimage=rhels7.1-x86_64-install-compute
Then in the next network boot, the node cn1 will start to deploy rhles7.1.
You already saw that I used the commands
chdefto manipulate the objects. xCAT has 4 objects management commands to manage all the xCAT objects.
mkdef: create object definitions
chdef: modify object definitions
lsdef: list object definitions
rmdef: remove object definitions
To get the detail usage of the commands, refer to the man page. e.g.
Get Into the Detail of the xCAT Objects: