diff --git a/perl-xCAT/xCAT/Schema.pm.PCM b/perl-xCAT/xCAT/Schema.pm.PCM index 104db5cfa..2c9183d80 100644 --- a/perl-xCAT/xCAT/Schema.pm.PCM +++ b/perl-xCAT/xCAT/Schema.pm.PCM @@ -200,7 +200,6 @@ vm => { 'storagemodel' => 'Model of storage devices to provide to guest', 'cfgstore' => 'Optional location for persistant storage separate of emulated hard drives for virtualization solutions that require persistant store to place configuration data', 'memory' => 'Megabytes of memory the VM currently should be set to.', - 'master' => 'The name of a master image, if any, this virtual machine is linked to. This is generally set by clonevm and indicates the deletion of a master that would invalidate the storage of this virtual machine', 'cpus' => 'Number of CPUs the node should see.', 'nics' => 'Network configuration parameters. Of the general form [physnet:]interface,.. Generally, interface describes the vlan entity (default for native, tagged for tagged, vl[number] for a specific vlan. physnet is a virtual switch name or port description that is used for some virtualization technologies to construct virtual switches. hypervisor.netmap can map names to hypervisor specific layouts, or the descriptions described there may be used directly here where possible.', 'nicmodel' => 'Model of NICs that will be provided to VMs (i.e. e1000, rtl8139, virtio, etc)', @@ -485,7 +484,7 @@ networks => { }, }, nodegroup => { - cols => [qw(groupname grouptype members membergroups isinternal wherevals comments disable)], + cols => [qw(groupname grouptype members membergroups wherevals comments disable)], keys => [qw(groupname)], table_desc => 'Contains group definitions, whose membership is dynamic depending on characteristics of the node.', descriptions => { @@ -493,7 +492,6 @@ nodegroup => { grouptype => 'The only current valid value is dynamic. We will be looking at having the object def commands working with static group definitions in the nodelist table.', members => 'The value of the attribute is not used, but the attribute is necessary as a place holder for the object def commands. (The membership for static groups is stored in the nodelist table.)', membergroups => 'This attribute stores a comma-separated list of nodegroups that this nodegroup refers to. This attribute is only used by PCM.', - isinternal => 'A flag to indicate whether the nodegroup is user-created, or created for internal PCM use. This attribute is only used by PCM. If attribute exists it is for PCM only use. ', wherevals => 'A list of "attr*val" pairs that can be used to determine the members of a dynamic group, the delimiter is "::" and the operator * can be ==, =~, != or !~.', comments => 'Any user-written notes.', disable => "Set to 'yes' or '1' to comment out this row.", @@ -527,7 +525,7 @@ nodelist => { table_desc => "The list of all the nodes in the cluster, including each node's current status and what groups it is in.", descriptions => { node => 'The hostname of a node in the cluster.', - groups => "A comma-delimited list of groups this node is a member of. Group names are arbitrary, except all nodes should be part of the 'all' group.", + groups => "A comma-delimited list of groups this node is a member of. Group names are arbitrary, except all nodes should be part of the 'all' group. Internal group names are designated by using __. For example, __Unmanaged, could be the internal name for a group of nodes that is not managed by xCAT. Admins should avoid using the __ characters when defining their groups.", status => 'The current status of this node. This attribute will be set by xCAT software. Valid values: defined, booting, netbooting, booted, discovering, configuring, installing, alive, standingby, powering-off, unreachable. If blank, defined is assumed. The possible status change sequenses are: For installaton: defined->[discovering]->[configuring]->[standingby]->installing->booting->booted->[alive], For diskless deployment: defined->[discovering]->[configuring]->[standingby]->netbooting->booted->[alive], For booting: [alive/unreachable]->booting->[alive], For powering off: [alive]->powering-off->[unreachable], For monitoring: alive->unreachable. Discovering and configuring are for x Series dicovery process. Alive and unreachable are set only when there is a monitoring plug-in start monitor the node status for xCAT. Please note that the status values will not reflect the real node status if you change the state of the node from outside of xCAT (i.e. power off the node using HMC GUI).', statustime => "The data and time when the status was updated.", appstatus => "A comma-delimited list of application status. For example: 'sshd=up,ftp=down,ll=down'", @@ -637,21 +635,23 @@ notification => { }, }, osimage => { - cols => [qw(imagename groups profile imagetype provmethod rootfstype osdistroname osupdatenames osname osvers osdistro osarch synclists postscripts postbootscripts serverrole comments disable)], + cols => [qw(imagename groups profile imagetype desc provmethod rootfstype osdistroname osupdatename cfmdir osname osvers osdistro osarch synclists postscripts postbootscripts serverrole isdeletable kitcomponents kitdeployparams kitcomppkglist kitrepodirlist comments disable)], keys => [qw(imagename)], tablespace =>'XCATTBS32K', table_desc => 'Basic information about an operating system image that can be used to deploy cluster nodes.', types => { - osupdatenames => 'VARCHAR(1024)', + osupdatename => 'VARCHAR(1024)', }, descriptions => { imagename => 'The name of this xCAT OS image definition.', groups => 'A comma-delimited list of image groups of which this image is a member. Image groups can be used in the litefile and litetree table instead of a single image name. Group names are arbitrary.', imagetype => 'The type of operating system image this definition represents (linux,AIX).', + desc => 'OS Image Description .', provmethod => 'The provisioning method for node deployment. The valid values are install, netboot,statelite,boottarget,dualboot. If boottarget is set, you must set linuximage.boottarget to the name of the boottarget definition. It is not used by AIX.', rootfstype => 'The filesystem type for the rootfs is used when the provmethod is statelite. The valid values are nfs or ramdisk. The default value is nfs', osdistroname => 'The name of the OS distro definition. This attribute can be used to specify which OS distro to use, instead of using the osname,osvers,and osarch attributes.', - osupdatenames => 'A comma-separated list of OS distro updates to apply to this osimage.', + osupdatename => 'A comma-separated list of OS distro updates to apply to this osimage.', + cfmdir => 'CFM directory.', profile => 'The node usage category. For example compute, service.', osname => 'Operating system name- AIX or Linux.', osvers => 'The Linux operating system deployed on this node. Valid values: rhels*,rhelc*, rhas*,centos*,SL*, fedora*, sles* (where * is the version #).', @@ -660,13 +660,18 @@ osimage => { synclists => 'The fully qualified name of a file containing a list of files to synchronize on the nodes.', postscripts => 'Comma separated list of scripts that should be run on this image after diskfull installation or diskless boot. For installation of RedHat, CentOS, Fedora, the scripts will be run before the reboot. For installation of SLES, the scripts will be run after the reboot but before the init.d process. For diskless deployment, the scripts will be run at the init.d time, and xCAT will automatically add the list of scripts from the postbootscripts attribute to run after postscripts list. For installation of AIX, the scripts will run after the reboot and acts the same as the postbootscripts attribute. For AIX, use the postbootscripts attribute. Support will be added in the future for the postscripts attribute to run the scripts before the reboot in AIX. ', postbootscripts => 'Comma separated list of scripts that should be run on this after diskfull installation or diskless boot. On AIX these scripts are run during the processing of /etc/inittab. On Linux they are run at the init.d time. xCAT automatically adds the scripts in the xcatdefaults.postbootscripts attri bute to run first in the list.', - serverrole => 'The role of the server created by this osimage. Default roles: mgtnode, servicenode, compute. User can also define custom roles.', + serverrole => 'The role of the server created by this osimage. Default roles: mgtnode, servicenode, compute.', + isdeletable => 'A flag to indicate whether this image profile can be deleted. This attribute is only used by PCM.', + kitcomponents => 'List of Kit Component IDs assigned to this OS Image definition.', + kitdeployparams => 'The file containing Kit Deployment Parameters to set during deployment of Kit Components.', + kitcomppkglist => 'The file containing Kit Component Meta-Packages to deploy on the node. This attribute is automatically set based on which Kit Components were set in the kitcomponents attribute.', + kitrepodirlist => 'The file containing Kit Package Repository directories to use during deployment of Kit Components. This attribute is automatically set based on which Kit Components were set in the kitcomponents attribute.', comments => 'Any user-written notes.', disable => "Set to 'yes' or '1' to comment out this row.", }, }, linuximage => { - cols => [qw(imagename template boottarget addkcmdline componentlist pkglist pkgdir otherpkglist otherpkgdir exlist postinstall rootimgdir kerneldir nodebootif otherifce netdrivers kernelver krpmver permission dump crashkernelsize partitionfile driverupdatesrc comments disable)], + cols => [qw(imagename template boottarget addkcmdline pkglist pkgdir otherpkglist otherpkgdir exlist postinstall rootimgdir kerneldir nodebootif otherifce netdrivers kernelver krpmver permission dump crashkernelsize partitionfile driverupdatesrc comments disable)], keys => [qw(imagename)], tablespace =>'XCATTBS32K', table_desc => 'Information about a Linux operating system image that can be used to deploy cluster nodes.', @@ -675,7 +680,6 @@ linuximage => { template => 'The fully qualified name of the template file that is used to create the kick start file for diskful installation.', boottarget => 'The name of the boottarget definition. When this attribute is set, xCAT will use the kernel, initrd and kernel params defined in the boottarget definition instead of the default.', addkcmdline=> 'User specified arguments to be passed to the kernel. The user arguments are appended to xCAT.s default kernel arguments. This attribute is ignored if linuximage.boottarget is set.', - componentlist => 'TODO: this will depend on kit design', pkglist => 'The fully qualified name of the file that stores the distro packages list that will be included in the image.', pkgdir => 'The name of the directory where the distro packages are stored.', otherpkglist => 'The fully qualified name of the file that stores non-distro package lists that will be included in the image.', @@ -1165,14 +1169,13 @@ prescripts => { }, routes => { - cols => [qw(routename net mask gateway ifname comments disable)], + cols => [qw(routename net mask gateway comments disable)], keys => [qw(routename)], table_desc => 'Describes the additional routes needed to be setup in the os routing table. These routes usually are used to connect the management node to the compute node using the servie node as gateway.', descriptions => { routename => 'Name used to identify this route.', net => 'The network address.', mask => 'The network mask.', - ifname => '(optional) The interface name of the management node facing the gateway.', gateway => 'The gateway that routes the ip traffic from the mn to the nodes. It is usually a service node.', comments => 'Any user-written notes.', disable => "Set to 'yes' or '1' to comment out this row.", @@ -1208,14 +1211,13 @@ firmware => { }, nics => { - cols => [qw(node nicips hostnameformat nichostnamesuffixes nictypes niccustomscripts nicnetworks comments disable)], + cols => [qw(node nicips nichostnamesuffixes nictypes niccustomscripts nicnetworks comments disable)], keys => [qw(node)], tablespace =>'XCATTBS16K', table_desc => 'Stores NIC details.', descriptions => { node => 'The node or group name.', nicips => 'Comma-separated list of IP addresses per NIC. :,:,..., e.g eth0:10.0.0.100,eth1:11.0.0.100 The primary IP address must also be stored in the hosts.ip attribute.', - hostnameformat => 'Used to auto-generate hostnames for new hosts discovered through node discovery or hosts imported from a host file.', nichostnamesuffixes => 'Comma-separated list of hostname suffixes per NIC. :,:,... e.g. eth0:-eth0,ib0:-ib0.', nictypes => 'Comma-separated list of NIC types per NIC. Used for information purposes. :,:, e.g. eth0:Ethernet,ib0:Infiniband', niccustomscripts => 'Comma-separated list of custom scripts per NIC. :,:, e.g. eth0:configeth eth0, ib0:configib ib0 @@ -1268,36 +1270,53 @@ osdistroupdate => { disable => "Set to 'yes' or '1' to comment out this row.", }, }, -kits => { - cols => [qw(kitname basename version ostype isinternal comments disable)], +kit => { + cols => [qw(kitname basename desc version ostype isinternal kitdeployparams kitdir comments disable)], keys => [qw(kitname)], table_desc => 'This table stores all kits added to the xCAT cluster.', descriptions => { - kitname => 'The unique name of this kit (e.g. kit-lsf-9.0-x86_64)', - basename => 'The kit basename (e.g. kit-lsf)', - version => 'The kit version (e.g. 9.0)', + kitname => 'The unique generated kit name, when kit is added to the cluster.', + basename => 'The kit base name', + version => 'The kit version', ostype => 'The kit OS type. Linux or AIX.', - isinternal => 'A flag to indicate whether the kit is a user kit, or kit used internally by PCM.', + isinternal => 'A flag to indicated if the Kit is internally used.', + kitdeployparams => 'The file containing the default deployment parameters for this Kit. These parameters are added to the OS Image definition.s list of deployment parameters when one or more Kit Components from this Kit are added to the OS Image.', + kitdir => 'The path to Kit Installation directory on the Mgt Node.', comments => 'Any user-written notes.', disable => "Set to 'yes' or '1' to comment out this row.", }, }, -components => { - cols => [qw(compname basename version serverroles kit ostype supportedoses driverpacks requires conflicts comments disable)], - keys => [qw(compname)], - tablespace =>'XCATTBS32K', +kitrepo => { + cols => [qw(kitreponame kitname osbasename osmajorversion osminorversion osarch compat_osnames kitrepodir comments disable)], + keys => [qw(kitreponame)], + table_desc => 'This table stores all kits added to the xCAT cluster.', + descriptions => { + kitreponame => 'The unique generated kit repo package name, when kit is added to the cluster.', + kitname => 'The Kit name which this Kit Package Repository belongs to.', + osbasename => 'The OS distro name which this repository is based on.', + osmajorversion => 'The OS distro major version which this repository is based on.', + osminorversion => 'The OS distro minor version which this repository is based on. If this attribute is not set, it means that this repo applies to all minor versions.', + osarch => 'The OS distro arch which this repository is based on.', + compat_osbasenames => 'List of compatible OS base names.', + kitrepodir => 'The path to Kit Repository directory on the Mgt Node.', + comments => 'Any user-written notes.', + disable => "Set to 'yes' or '1' to comment out this row.", + }, +}, +kitcomponent => { + cols => [qw(kitcompname kitname kitreponame basename version release serverroles driverpacks comments disable)], + keys => [qw(kitcompname)], + tablespace =>'XCATTBS16K', table_desc => 'This table stores all kit components added to the xCAT cluster.', descriptions => { - compname => 'The unique name of this kit component (e.g., component-lsf-master-9.0)', - basename => 'The component basename (e.g. component-lsf-master)', - version => 'The component version (e.g.x, 9.0)', - serverroles => 'A comma-separated list of server roles defining which servers this component can install on. Default roles: mgtnode, compute, servicenode. User can also define their own custom roles.', - kit => 'The name of the kit this component belongs to.', - ostype => 'The component OS type. Linux or AIX.', - supportedoses => 'A comma-separated list of OSes this component supports. The OS can be specified in this format: - or -- or --- ', - driverpacks => 'Any user written nodes', - requires => 'A comma-separated list of components that are required by this component. , - or --. ', - conflicts => 'A comma-separated list of components that conflict with this component. , - or --. ', + kitcompname => 'The unique Kit Component name. It is auto-generated when the parent Kit is added to the cluster.', + kitname => 'The Kit name which this Kit Component belongs to.', + kitreponame => 'The Kit Package Repository name which this Kit Component belongs to.', + basename => 'Kit Component basename.', + version => 'Kit Component version.', + release => 'Kit Component release.', + serverroles => 'The types of servers that this Kit Component can install on. Valid types are: mgtnode, servicenode, compute', + driverpacks => 'List of driver package names. These must be full names like: pkg1-1.0-1.x86_64.rpm.', comments => 'Any user-written notes.', disable => "Set to 'yes' or '1' to comment out this row.", }, @@ -1373,8 +1392,9 @@ foreach my $tabname (keys(%xCAT::ExtTab::ext_tabspec)) { eventlog => { attrs => [], attrhash => {}, objkey => 'recid' }, auditlog => { attrs => [], attrhash => {}, objkey => 'recid' }, boottarget => { attrs => [], attrhash => {}, objkey => 'bprofile' }, - kits => { attrs => [], attrhash => {}, objkey => 'kitname' }, - components => { attrs => [], attrhash => {}, objkey => 'compname' }, + kit => { attrs => [], attrhash => {}, objkey => 'kitname' }, + kitrepo => { attrs => [], attrhash => {}, objkey => 'kitreponame' }, + kitcomponent => { attrs => [], attrhash => {}, objkey => 'kitcompname' }, rack => { attrs => [], attrhash => {}, objkey => 'rackname' }, osdistro=> { attrs => [], attrhash => {}, objkey => 'osdistroname' }, ); @@ -1968,10 +1988,6 @@ my @nodeattrs = ( tabentry => 'nics.nicips', access_tabentry => 'nics.node=attr:node', }, - {attr_name => 'hostnameformat', - tabentry => 'nics.hostnameformat', - access_tabentry => 'nics.node=attr:node', - }, {attr_name => 'nichostnamesuffixes', tabentry => 'nics.nichostnamesuffixes', access_tabentry => 'nics.node=attr:node', @@ -2003,6 +2019,10 @@ my @nodeattrs = ( tabentry => 'vm.migrationdest', access_tabentry => 'vm.node=attr:node', }, + {attr_name => 'vmtemplate', + tabentry => 'vm.template', + access_tabentry => 'vm.node=attr:node', + }, {attr_name => 'vmstorage', tabentry => 'vm.storage', access_tabentry => 'vm.node=attr:node', @@ -2209,8 +2229,12 @@ push(@{$defspec{node}->{'attrs'}}, @nodeattrs); tabentry => 'osimage.osdistroname', access_tabentry => 'osimage.imagename=attr:imagename', }, - {attr_name => 'osupdatenames', - tabentry => 'osimage.osupdatenames', + {attr_name => 'osupdatename', + tabentry => 'osimage.osupdatename', + access_tabentry => 'osimage.imagename=attr:imagename', + }, + {attr_name => 'cfmdir', + tabentry => 'osimage.cfmdir', access_tabentry => 'osimage.imagename=attr:imagename', }, {attr_name => 'rootfstype', @@ -2276,11 +2300,6 @@ push(@{$defspec{node}->{'attrs'}}, @nodeattrs); tabentry => 'linuximage.addkcmdline', access_tabentry => 'linuximage.imagename=attr:imagename', }, - {attr_name => 'componentlist', - only_if => 'imagetype=linux', - tabentry => 'linuximage.componentlist', - access_tabentry => 'linuximage.imagename=attr:imagename', - }, {attr_name => 'pkglist', only_if => 'imagetype=linux', tabentry => 'linuximage.pkglist', @@ -2611,10 +2630,6 @@ push(@{$defspec{node}->{'attrs'}}, @nodeattrs); {attr_name => 'gateway', tabentry => 'routes.gateway', access_tabentry => 'routes.routename=attr:routename', - }, - {attr_name => 'ifname', - tabentry => 'routes.ifname', - access_tabentry => 'routes.routename=attr:routename', }, {attr_name => 'usercomment', tabentry => 'routes.comments', @@ -2670,10 +2685,6 @@ push(@{$defspec{node}->{'attrs'}}, @nodeattrs); tabentry => 'nodegroup.membergroups', access_tabentry => 'nodegroup.groupname=attr:groupname', }, - {attr_name => 'isinternal', - tabentry => 'nodegroup.isinternal', - access_tabentry => 'nodegroup.groupname=attr:groupname', - }, {attr_name => 'wherevals', tabentry => 'nodegroup.wherevals', access_tabentry => 'nodegroup.groupname=attr:groupname', @@ -2960,78 +2971,119 @@ push(@{$defspec{group}->{'attrs'}}, @nodeattrs); ); ############################# -# kits object # +# kit object # ############################# -# kits table # +# kit table # ############################# -@{$defspec{kits}->{'attrs'}} = ( +@{$defspec{kit}->{'attrs'}} = ( {attr_name => 'kitname', - tabentry => 'kits.kitname', - access_tabentry => 'kits.kitname=attr:kitname', + tabentry => 'kit.kitname', + access_tabentry => 'kit.kitname=attr:kitname', }, - {attr_name => 'basename', - tabentry => 'kits.basename', - access_tabentry => 'kits.kitname=attr:kitname', + {attr_name => 'name', + tabentry => 'kit.name', + access_tabentry => 'kit.kitname=attr:kitname', + }, + {attr_name => 'desc', + tabentry => 'kit.desc', + access_tabentry => 'kit.kitname=attr:kitname', }, {attr_name => 'version', - tabentry => 'kits.version', - access_tabentry => 'kits.kitname=attr:kitname', + tabentry => 'kit.version', + access_tabentry => 'kit.kitname=attr:kitname', }, {attr_name => 'ostype', - tabentry => 'kits.ostype', - access_tabentry => 'kits.kitname=attr:kitname', + tabentry => 'kit.ostype', + access_tabentry => 'kit.kitname=attr:kitname', }, {attr_name => 'isinternal', - tabentry => 'kits.isinternal', - access_tabentry => 'kits.kitname=attr:kitname', + tabentry => 'kit.isinternal', + access_tabentry => 'kit.kitname=attr:kitname', + }, + {attr_name => 'kitdeployparams', + tabentry => 'kit.kitdeployparams', + access_tabentry => 'kit.kitname=attr:kitname', }, ); ############################# -# components object # +# kitrepo object # ############################# -# components table # +# kitrepo table # ############################# -@{$defspec{components}->{'attrs'}} = ( - {attr_name => 'compname', - tabentry => 'components.compname', - access_tabentry => 'components.compname=attr:compname', +@{$defspec{kitrepo}->{'attrs'}} = ( + {attr_name => 'kitreponame', + tabentry => 'kitrepo.kitreponame', + access_tabentry => 'kitrepo.kitreponame=attr:kitreponame', + }, + {attr_name => 'kitname', + tabentry => 'kitrepo.kitname', + access_tabentry => 'kitrepo.kitreponame=attr:kitreponame', + }, + {attr_name => 'osname', + tabentry => 'kitrepo.osname', + access_tabentry => 'kitrepo.kitreponame=attr:kitreponame', + }, + {attr_name => 'osmajorversion', + tabentry => 'kitrepo.osmajorversion', + access_tabentry => 'kitrepo.kitreponame=attr:kitreponame', + }, + {attr_name => 'osminorversion', + tabentry => 'kitrepo.osminorversion', + access_tabentry => 'kitrepo.kitreponame=attr:kitreponame', + }, + {attr_name => 'osarch', + tabentry => 'kitrepo.osarch', + access_tabentry => 'kitrepo.kitreponame=attr:kitreponame', + }, + {attr_name => 'compat_osbasenames', + tabentry => 'kitrepo.compat_osbasenames', + access_tabentry => 'kitrepo.kitreponame=attr:kitreponame', + }, + {attr_name => 'kitrepodir', + tabentry => 'kitrepo.kitrepodir', + access_tabentry => 'kitrepo.kitreponame=attr:kitreponame', + }, + +); +############################# +############################# +# kitcomponent object # +############################# +# kitcomponent table # +############################# +@{$defspec{kitcomponent}->{'attrs'}} = ( + {attr_name => 'kitcompname', + tabentry => 'kitcomponent.kitcompname', + access_tabentry => 'kitcomponent.kitcompname=attr:kitcompname', + }, + {attr_name => 'kitname', + tabentry => 'kitcomponent.kitname', + access_tabentry => 'kitcomponent.kitcompname=attr:kitcompname', + }, + {attr_name => 'kitreponame', + tabentry => 'kitcomponent.kitrepoid', + access_tabentry => 'kitcomponent.kitcompname=attr:kitcompname', }, {attr_name => 'basename', - tabentry => 'components.basename', - access_tabentry => 'components.compname=attr:compname', + tabentry => 'kitcomponent.basename', + access_tabentry => 'kitcomponent.kitcompname=attr:kitcompname', }, {attr_name => 'version', - tabentry => 'components.version', - access_tabentry => 'components.compname=attr:compname', + tabentry => 'kitcomponent.version', + access_tabentry => 'kitcomponent.kitcompname=attr:kitcompname', + }, + {attr_name => 'release', + tabentry => 'kitcomponent.release', + access_tabentry => 'kitcomponent.kitcompname=attr:kitcompname', }, {attr_name => 'serverroles', - tabentry => 'components.serverroles', - access_tabentry => 'components.compname=attr:compname', - }, - {attr_name => 'kit', - tabentry => 'components.kit', - access_tabentry => 'components.compname=attr:compname', - }, - {attr_name => 'ostype', - tabentry => 'components.ostype', - access_tabentry => 'components.compname=attr:compname', - }, - {attr_name => 'supportedoses', - tabentry => 'components.supportedoses', - access_tabentry => 'components.compname=attr:compname', + tabentry => 'kitcomponent.serverroles', + access_tabentry => 'kitcomponent.kitcompname=attr:kitcompname', }, {attr_name => 'driverpacks', - tabentry => 'components.driverpacks', - access_tabentry => 'components.compname=attr:compname', - }, - {attr_name => 'requires', - tabentry => 'components.requires', - access_tabentry => 'components.compname=attr:compname', - }, - {attr_name => 'conflicts', - tabentry => 'components.conflicts', - access_tabentry => 'components.compname=attr:compname', + tabentry => 'kitcomponent.driverpacks', + access_tabentry => 'kitcomponent.kitcompname=attr:kitcompname', }, );