summaryrefslogblamecommitdiffstats
path: root/config-db/OpenSLX/DBSchema.pm
blob: 3b1a92231cf8b2163ae3225ce6aaa0600cd84361 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                          













                                        

                                                       


















                                         
  
 

                                                                                
                                                                                  

















                                                                                            
                                

                                                                                          
                                                                     


                                                                                                       
                                                                                         




                                                                                 
                                                                     


                                                                                                                    


                                                                                                 


                                                                                                            
                                                                                                  
                                                                             





                                                                                            
                                                                                                             
                                          
                  




                                                                                           

                                                                                                  

                                                                                        
                                                                                                 

                                                                             





                                                                                            
                  
                             
                                                              



                                                                                               
                                                                                         
                                                                                          
                                                                                      
                                                                                            
                                          





                                                                                        
                             



                                                                                            

                                                                     
                                                                                         
                                                                                        
                                                                                               
                                          





                                                             





                                                                                      














                                                                                        














                                                                                                               
















                                                                                   




                                                                       





                                                                    
                                                                                                 




                                             




                                                                            





                                                                    
                                                                                                 









                                                                               

                                                                    





                                                                              




                                                                              


          
package OpenSLX::DBSchema;

use strict;
use vars qw(@ISA @EXPORT $VERSION);

use Exporter;
$VERSION = 0.01;
@ISA = qw(Exporter);

@EXPORT = qw(
	$DbSchema %DbSchemaHistory
);

use vars qw($DbSchema %DbSchemaHistory);

# configurable attributes for system, client and group:
my @sharedAttributes = (
	'attr_desktop_session:s.128',
	'attr_domain_name:s.64',
	'attr_domain_name_servers:s.128',
	'attr_font_servers:s.128',
	'attr_hw_graphic:s.64',
	'attr_hw_monitor:s.64',
	'attr_hw_mouse:s.64',
	'attr_language:s.64',
	'attr_lpr_servers:s.128',
	'attr_netbios_workgroup:s.64',
	'attr_nis_domain:s.64',
	'attr_nis_servers:s.128',
	'attr_ntp_servers:s.128',
	'attr_start_rwhod:b',
	'attr_start_snmp:b',
	'attr_start_x:s.64',
	'attr_start_xdmcp:s.64',
	'attr_tex_enable:b',
	'attr_vmware:b',
);

################################################################################
### DB-schema definition
### 	This hash-ref describes the current OpenSLX configuration database schema.
### 	Each table is defined by a list of column descriptions.
### 	A column description is simply the name of the column followed by ':'
### 	followed by the data type description. The following data types are
### 	currently supported:
### 		b		=> boolean (providing the values 1 and 0 only)
### 		i		=> integer (32-bit, signed)
### 		s.20	=> string, followed by length argument (in this case: 20)
### 		pk		=> primary key (integer)
### 		fk		=> foreign key (integer)
################################################################################

$DbSchema = {
	'version' => $VERSION,
	'tables' => {
		'meta' => [
			# information about the database as such
			'schema_version:s.5',	# schema-version currently implemented by DB
		],
		'vendor_os' => [
			# a vendor os describes a folder containing an operating system as
			# provided by the vendor (a.k.a. unchanged and thus updatable)
			'id:pk',			# primary key
			'name:s.48',		# structured name of OS installation
								# (e.g. suse-9.3-minimal, suse-9.3-kde,
								# debian-3.1-ppc)
			'comment:s.1024',	# internal comment (optional, for admins)
			'path:s.256',		# path to os filesystem root
		],
		'system' => [
			# a system describes one bootable instance of a vendor os
			'id:pk',				# primary key
			'vendor_os_id:fk',		# foreign key
			'name:s.48',			# name used in filesystem and passed to
									# kernel via cmdline arg (e.g.:
									# suse-9.3-minimal, suse-9.3-minimal-nbd...)
			'label:s.128',			# name visible to user (pxe-label)
			'comment:s.1024',		# internal comment (optional, for admins)
			'export_type:s.10',		# 'nbd', 'nbd-squash', 'nfs', ...
			'export_uri:s.256',		# path to export (NDB-image or NFS-path), if
									# empty it will be auto-generated by
									# config-demuxer
			'kernel:s.128',			# path to kernel file, relative to OS root
			'kernel_params:s.512',	# kernel-param string for pxe
			'ramfs_debug_level:i',	# debug level for initramfs-generator-script
			'ramfs_use_glibc:b',	# use glibc in ramfs
			'ramfs_use_busybox:b',	# use busybox in ramfs
			'ramfs_nicmods:s.128',	# list of network interface card modules
			'ramfs_fsmods:s.128',	# list of filesystem modules
			'ramfs_screen:s.10',	# screen size for splash
			'hidden:b',				# hidden systems won't be offered for booting
			@sharedAttributes,
		],
		'system_variant' => [
			# a system_variant describes an alternative boot setup for a system
			# which will always be offered if the systems itself is offered by
			# a client
			'id:pk',				# primary key
			'name_addition:s.48',	# string added to system name in order to
									# get a unique system name
			'system_id:fk',			# foreign key
			'label_addition:s.64',	# visible name part (added to pxe-label)
			'comment:s.1024',		# internal comment (optional, for admins)
			'kernel:s.128',			# name of kernel file
			'kernel_params:s.512',	# kernel-param string for pxe
			'ramfs_debug_level:i',	# debug level for initramfs-generator-script
			'ramfs_use_glibc:b',	# use glibc in ramfs
			'ramfs_use_busybox:b',	# use busybox in ramfs
			'ramfs_nicmods:s.128',	# list of network interface card modules
			'ramfs_fsmods:s.128',	# list of filesystem modules
			'ramfs_screen:s.10',	# screen size for splash
		],
		'client' => [
			# a client is a PC booting via network
			'id:pk',			# primary key
			'name:s.128',		# official name of PC (e.g. as given by sticker
								# on case)
			'mac:s.20',			# MAC of NIC used for booting
			'comment:s.1024',	# internal comment (optional, for admins)
			'boot_type:s.20',	# type of remote boot procedure (PXE, ...)
			'unbootable:b',		# unbootable clients simply won't boot
			'kernel_params:s.128',	# client-specific kernel-args (e.g. console)
			@sharedAttributes,
		],
		'client_system_ref' => [
			# clients referring to the systems they should offer for booting
			'client_id:fk',		# foreign key
			'system_id:fk',		# foreign key
		],
		'groups' => [
			# a group encapsulates a set of clients as one entity, managing
			# a group-specific attribute set. All the different attribute
			# sets a client inherits via group membership are folded into
			# one resulting attribute set with respect to each group's priority.
			'id:pk',			# primary key
			'name:s.128',		# name of group
			'comment:s.1024',	# internal comment (optional, for admins)
			'priority:i',		# priority, used for order in group-list
								# (from 0-lowest to 10-highest)
			@sharedAttributes,
		],
		'group_client_ref' => [
			# groups referring to their clients
			'group_id:fk',		# foreign key
			'client_id:fk',		# foreign key
		],
		'group_system_ref' => [
			# groups referring to the systems each of their clients should
			# offer for booting
			'group_id:fk',		# foreign key
			'system_id:fk',		# foreign key
		],
	},
};

################################################################################
### DB-schema history
### 	This hash contains a description of all the different changes that have
### 	taken place on the schema. Each version contains a changeset (array)
### 	with the commands that take the schema from the last version to the
### 	current.
### 	The following 'cmd'-types are supported:
### 		add-table => creates a new table
### 			'table' => contains the name of the new table
### 			'cols'	=> contains a list of column descriptions
### 			'vals'	=> optional, contains list of data hashes to be inserted
### 					   into new table
### 		drop-table => drops an existing table
### 			'table	=> contains the name of the table to be dropped
### 		rename-table => renames a table
### 			'old-table' => contains the old name of the table
### 			'new-table' => contains the new name of the table
### 		add-columns => adds columns to a table
### 			'table' => the name of the table the columns should be added to
### 			'new-cols' => contains a list of new column descriptions
### 			'new-default-vals' => optional, a list of data hashes to be used
###							 		  as default values for the new columns
### 			'cols' => contains a list of column descriptions
### 		drop-columns => drops columns from a table
### 			'table' => the name of the table the columns should be dropped from
### 			'col-changes' => a hash with changed column descriptions
### 			'cols'	=> contains a full list of resulting column descriptions
################################################################################

%DbSchemaHistory = (
	'0.01' => [
		# the initial schema version simply adds a couple of tables:
		{
			'cmd' => 'add-table',
			'table' => 'meta',
			'cols' => $DbSchema->{'tables'}->{'meta'},
			'vals' => [
				{	# add initial meta info
					'schema_version' => $DbSchema->{'version'},
				},
			],
		},
		{
			'cmd' => 'add-table',
			'table' => 'vendor_os',
			'cols' => $DbSchema->{'tables'}->{'vendor_os'},
		},
		{
			'cmd' => 'add-table',
			'table' => 'system',
			'cols' => $DbSchema->{'tables'}->{'system'},
			'vals' => [
				{	# add default system
					'id' => 0,
					'name' => '<<<default>>>',
					'comment' => 'internal system that holds default values',
				},
			],
		},
		{
			'cmd' => 'add-table',
			'table' => 'system_variant',
			'cols' => $DbSchema->{'tables'}->{'system_variant'},
		},
		{
			'cmd' => 'add-table',
			'table' => 'client',
			'cols' => $DbSchema->{'tables'}->{'client'},
			'vals' => [
				{	# add default client
					'id' => 0,
					'name' => '<<<default>>>',
					'comment' => 'internal client that holds default values',
				},
			],
		},
		{
			'cmd' => 'add-table',
			'table' => 'client_system_ref',
			'cols' => $DbSchema->{'tables'}->{'client_system_ref'},
		},
		{
			'cmd' => 'add-table',
			'table' => 'groups',
			'cols' => $DbSchema->{'tables'}->{'groups'},
		},
		{
			'cmd' => 'add-table',
			'table' => 'group_client_ref',
			'cols' => $DbSchema->{'tables'}->{'group_client_ref'},
		},
		{
			'cmd' => 'add-table',
			'table' => 'group_system_ref',
			'cols' => $DbSchema->{'tables'}->{'group_system_ref'},
		},
	],
);