###############################################################################
#                                                                             #
#            F A I - Fully automatic installation LDAP schema file            #
#                                                                             #
#-----------------------------------------------------------------------------#
# Last modified: Cajus Pollmeier / 20050902                                   #
#-----------------------------------------------------------------------------#
#             Copyright 2005, Cajus Pollmeier <cajus@debian.org>              #
#                             Thomas Lange <lange@debian.org>                 #
#-----------------------------------------------------------------------------#
# This program is free software; you can redistribute it and/or modify        #
# it under the terms of the GNU General Public License as published by        #
# the Free Software Foundation; either version 2 of the License, or           #
# (at your option) any later version.                                         #
#                                                                             #
# This program is distributed in the hope that it will be useful,             #
# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
# GNU General Public License for more details.                                #
#                                                                             #
# You should have received a copy of the GNU General Public License           #
# along with this program; if not, write to the Free Software                 #
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   #
###############################################################################


# This schema file has dependencies to the nis.schema. Please make sure that
# the inclusion order in your slapd.conf is correct.


# Here's a short list of object class / attribute relationship. For a more
# detailed description take a look at the definitions below.
#
# Objectclasses        | Attributes
# -----------------------------------------------------------------------------
# FAIclass             | cn,description,FAIclassType
# FAIprofile           | FAIclass
# FAIhook              | (inherit from FAIclass)
# FAIhookEntry         | FAIscript, FAItask
# FAIscript            | (inherit from FAIclass)
# FAIscriptEntry       | FAIscript, FAIpriority
# FAIvariable          | (inherit from FAIclass)
# FAIvariableEntry     | FAIvariableContent
# FAItemplate          | (inherit from FAIclass)
# FAItemplateEntry     | FAItemplateFile, FAItemplatePath, FAIowner, FAImode
# FAIpartitionTable    | (inherit from FAIclass)
# FAIpartitionDisk     | (inherit from FAIclass)
# FAIpartitionEntry    | FAIpartitionType, FAIpartitionNr, FAImountOptions,
#                      | FAIfsOptions, FAIfsType, FAImountPoint,FAIpartitionSize,
#                      | FAIpartitionFlag
# FAIpackageList       | FAIinstallMethod, FAIpackage
# FAIdebconfInfo       | FAIvariable, FAIvariableContent, FAIvariableType
# FAIobject            | FAIclass, FAIstatus, macAddress
# FAIrepository        | FAIdebianMirror, FAIdebianRelease, FAIdebianSection
# FAIrepositoryServer  | FAIrepository
#
# Rem.: Except of FAIdebconfInfo and FAIobject, all object classes are inherited
#       from FAIclass, so ALL cn's MUST be unique in your tree.


##
## Attribute definitions (allocated from the GONICUS oid space)
##

# Name       : FAIclass
# Description: Notes which FAI class name(s) are used in an FAI object
#              or in profile definitions. No unicode here, maximum
#              length is set to 64 characters.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.1 NAME 'FAIclass'
		DESC 'Storage for FAI class names'
		EQUALITY caseExactMatch
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{64})

# Name       : FAIpriority
# Description: Notes which priority scripts or profiles entries get. It is used
#              by FAI to generate a propper class list during the bootstrap
#              process. This is an unsigned integer value. 
attributetype ( 1.3.6.1.4.1.10098.1.1.5.2 NAME 'FAIpriority'
		DESC 'Storage for FAI priorities'
		EQUALITY integerMatch
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE)

# Name       : FAIpartitionType
# Description: As the name says, we store the type of a (hard-disk) partition
#              here. Type can be one of "primary" or "secondary". We did not
#              make this bool because there may be changes to the FAI partitioner
#              which we can't handle then. The maximum length is set to 16
#              characters.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.3 NAME 'FAIpartitionType'
		DESC 'Storage for FAI partition types'
		EQUALITY caseExactMatch
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{16} SINGLE-VALUE)

# Name       : FAIpartitionNr
# Description: We use this value to store the device entries like "disk1" or
#              "sda8" with this attribute. Currently the storage is without the
#              leading "/dev/".
attributetype ( 1.3.6.1.4.1.10098.1.1.5.4 NAME 'FAIpartitionNr'
		DESC 'Storage for FAI partition devices'
		EQUALITY caseExactIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAImountOptions
# Description: We use this value to store special mount options for partitions.
#              For example some people tend to have /usr mounted as read-only.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.5 NAME 'FAImountOptions'
		DESC 'Storage for FAI partition mount options'
		EQUALITY caseExactIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAImountPoint
# Description: Simply the mountpoint like found in the fstab. Examples are
#              '/usr', '/' and '/home'.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.6 NAME 'FAImountPoint'
		DESC 'Storage for FAI partition mount points'
		EQUALITY caseExactIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIfsOptions
# Description: In some cases you might want to influence the filesystem
#              generation commands by adding flags for larger inode tables, etc.
#              FAIfsOptions keeps the flags that are used by the mkfs workers.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.7 NAME 'FAIfsOptions'
		DESC 'Storage for FAI partition generation options'
		EQUALITY caseExactIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIfsType
# Description: Keeps the type of the filessytem a partition gets formatted with.
#              Examples are 'ext3', 'xfs', etc. Please refer to the FAI manual
#              for valid types.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.8 NAME 'FAIfsType'
		DESC 'Storage for FAI partition types'
		EQUALITY caseExactMatch
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{16} SINGLE-VALUE)

# Name       : FAIscript
# Description: Store multiline text, mostly used for scripts and hooks. 
attributetype ( 1.3.6.1.4.1.10098.1.1.5.9 NAME 'FAIscript'
		DESC 'General storage field for multiline text aka scripts'
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 SINGLE-VALUE)

# Name       : FAItask
# Description: Assign a hook to a special task. You can use it i.e. to alter
#              partition tables, etc. The FAI manual hold a list of valid
#              tasks for you.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.10 NAME 'FAItask'
		DESC 'Note for which FAI tasks a hook is made for'
		EQUALITY caseIgnoreIA5Match
		SUBSTR caseIgnoreIA5SubstringsMatch
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIvariable
# Description: Keeps the name of a debconf template variable. The value is
#              stored inside of FAIvariableContent, the type inside
#              FAIvariableType.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.11 NAME 'FAIvariable'
		DESC 'Store debconf template variable names'
		EQUALITY caseIgnoreIA5Match
		SUBSTR caseIgnoreIA5SubstringsMatch
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIvariableContent
# Description: Keeps the content of a debconf template variable. See
#              FAIvariable for more informations.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.12 NAME 'FAIvariableContent'
		DESC 'Store debconf template variable contents'
		EQUALITY caseIgnoreIA5Match
		SUBSTR caseIgnoreIA5SubstringsMatch
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIvariableType
# Description: Keeps the type of a debconf template variable. See
#              FAIvariable for more informations.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.13 NAME 'FAIvariableType'
		DESC 'Store debconf template variable type'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIinstallMethod
# Description: Keeps a per package setting on how packages should be
#              installed. This is the normal line you'd specify in
#              our ordinary package lists.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.14 NAME 'FAIinstallMethod'
		DESC 'Store debian package installation flag'
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIpackage
# Description: Keeps an entry of a package list. Each FAIpackage object
#              may be a parent for FAIdebconfInfo objects.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.15 NAME 'FAIpackage'
		DESC 'Store debian package name'
		EQUALITY caseIgnoreIA5Match
		SUBSTR caseIgnoreIA5SubstringsMatch
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

# Name       : FAItemplateFile
# Description: Keeps complete template files that are copied to the
#              freshly installed system later on. The tasks path is
#              stored in FAItemplatePath. Use ;binary for this attribute.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.16 NAME 'FAItemplateFile'
		DESC 'Store complete template files'
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 SINGLE-VALUE)

# Name       : FAItemplatePath
# Description: Keeps the path used for template files. See FAItemplateFile
#              for more informations.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.17 NAME 'FAItemplatePath'
		DESC 'Store template file storage path'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIowner
# Description: Keeps the owner used for template files. Put in the unix
#              way like user.group.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.18 NAME 'FAIowner'
		DESC 'Store template file storage path'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAImode
# Description: Keeps the file mode used for template files. Put in the unix
#              way like 775.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.19 NAME 'FAImode'
		DESC 'Store template file storage path'
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 SINGLE-VALUE)
		
# Name       : FAIstatus
# Desrciption: Normally the fai daemon should set the status flag to the
#             current status. Possible states are:
#             * update-needed
#             * update-running
#             * update-failed
#             * update-ok
#             * install-running
#             * install-failed
#             * install-ok
#             Additional informations can be taken from the log files if
#             some machine is set to -failed.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.20 NAME 'FAIstatus'
		DESC 'Store FAI progress status'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIpackagelistDependency
# Description: This field stores dependency informations for package lists.
#              It is used to install i.e. ati specific packages when the
#              hardware detection detects ATI gfx cards.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.21 NAME 'FAIpackagelistDependency'
		DESC 'Store package lists where we depend from'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIpartitionSize
# Description: Store a size or a size range for partitions. I.e. 50,
#              50-200.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.22 NAME 'FAIpartitionSize'
		DESC 'Store size range for partition size'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIpartitionFlags
# Description: Optionally this flag contains the "preserve" keyword, in
#              order to influence partitioning.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.23 NAME 'FAIpartitionFlags'
		DESC 'Optional flags like "preserve"'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIdebianMirror
# Description: Used for bootstrap sources.list settings. It contains
#              the mirror server url.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.24 NAME 'FAIdebianMirror'
		DESC 'TODO'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIdebianRelease
# Description: Used for bootstrap sources.list settings. It contains
#              the release.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.25 NAME 'FAIdebianRelease'
		DESC 'TODO'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE)

# Name       : FAIdebianSection
# Description: Used for bootstrap sources.list settings. It contains
#              the section. Multiple Sections get appended.
attributetype ( 1.3.6.1.4.1.10098.1.1.5.26 NAME 'FAIdebianSection'
		DESC 'TODO'
		EQUALITY caseIgnoreIA5Match
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

# Name       : FAIrepository
# Description: Used to store repository settings 
attributetype ( 1.3.6.1.4.1.10098.1.1.5.27 NAME 'FAIrepository'
		DESC 'TODO'
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)
		
# Name       : FAIstate
# Description: Used to store repository state (branched/freezed)
attributetype ( 1.3.6.1.4.1.10098.1.1.5.28 NAME 'FAIstate'
		DESC 'TODO'
                EQUALITY caseIgnoreIA5Match
                SUBSTR caseIgnoreIA5SubstringsMatch
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

# Name       : FAIrelease
# Description: Used to store the release
attributetype ( 1.3.6.1.4.1.10098.1.1.5.29 NAME 'FAIrelease'
		DESC 'TODO'
		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)

##
## Object class definitions (allocated from the GONICUS oid space)
##

# Name       : FAIclass
# Description: FAIclass is the basic container wich includes a
#              common name and a description.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.1 NAME 'FAIclass'
	SUP top STRUCTURAL
	DESC 'Generic class parent for FAI objects'
	MUST ( cn ) MAY  ( FAIstate $ description ) )

# Name       : FAIprofile
# Description: FAIprofile which bundles a set of FAIclass entries
#              like FAIpartition and FAIpackageList. It is used
#              to simplify administration tasks for so called junior
#              administrators.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.2 NAME 'FAIprofile'
	SUP top AUXILIARY
	DESC 'FAI profile container for multiple class objects' 
	MUST ( cn $ FAIclass ) MAY  ( FAIstate $ description ) )

# Name       : FAIpartitionTable
# Description: Each installation profile should contain a partition
#              table in order to perform well. FAIpartitionTable is
#              a container for partition entries.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.3 NAME 'FAIpartitionTable'
	SUP top AUXILIARY
	DESC 'Stores FAI partition tables'
	MUST ( cn ) MAY  ( FAIstate $ description ) )

# Name       : FAIpartitionDisk
# Description: Each installation profile should contain a partition
#              table in order to perform well. FAIpartitionTable is
#              a container for partition entries.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.4 NAME 'FAIpartitionDisk'
	SUP top AUXILIARY
	DESC 'Stores FAI partition tables' 
	MUST ( cn ) MAY  ( FAIstate $ description ) )

# Name       : FAIpartitionEntry
# Description: This object defines a single partition entry for the
#              FAI partitioner.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.5 NAME 'FAIpartitionEntry'
	SUP top AUXILIARY
	DESC 'One partition table entry'
	MUST ( FAIpartitionType $ FAIpartitionNr $ FAIfsType $
	       FAImountPoint $ FAIpartitionSize $ cn )
	MAY  ( FAImountOptions $ FAIfsOptions $ FAIpartitionFlags $
	       description $ FAIstate ) )

# Name       : FAIhook
# Description: Container for hooks
objectclass (1.3.6.1.4.1.10098.1.2.1.40.6 NAME 'FAIhook'
	SUP top AUXILIARY
	DESC 'Stores FAI partition tables'
	MUST ( cn ) MAY  ( FAIstate $ description ) )

# Name       : FAIhookEntry
# Description: Hooks are stored with their FAI task inside the
#              FAIhook object.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.7 NAME 'FAIhookEntry'
	SUP top AUXILIARY
	DESC 'FAI hook storage'
	MUST ( cn $ FAIscript $ FAItask ) MAY ( FAIstate $ description ) )

# Name       : FAIscriptEntry
# Description: Container for scripts
objectclass (1.3.6.1.4.1.10098.1.2.1.40.8 NAME 'FAIscriptEntry'
	SUP top AUXILIARY
	DESC 'FAI script storage'
	MUST ( cn $ FAIscript $ FAIpriority ) MAY ( FAIstate $ description ) )

# Name       : FAIscript
# Description: Hooks and scripts are somewhat similar.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.9 NAME 'FAIscript'
	SUP top AUXILIARY
	DESC 'FAI script storage'
	MUST ( cn ) MAY  ( FAIstate $ description ) )

# Name       : FAIvariable
# Description: Store a set of variables in this container.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.10 NAME 'FAIvariable'
	SUP top AUXILIARY
	DESC 'Stores FAI variables sub entries'
	MUST ( cn ) MAY  ( FAIstate $ description ) )

# Name       : FAIvariableEntry
# Description: Stores a single variable.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.11 NAME 'FAIvariableEntry'
	SUP top AUXILIARY
	DESC 'Stores single variable entries'
	MUST ( cn $ FAIvariableContent ) MAY ( FAIstate $ description ) )

# Name       : FAIpackagelist
# Description: Stores a complete package list and is container
#              for several FAIdebconfInfo scripts
objectclass (1.3.6.1.4.1.10098.1.2.1.40.12 NAME 'FAIpackageList'
	SUP top AUXILIARY
	DESC 'Stores complete package lists'
	MUST ( cn $ FAIpackage ) MAY ( FAIpackagelistDependency $ FAIinstallMethod $ description $ FAIstate ) )

# Name       : FAItemplate
# Description: Container for template objects.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.13 NAME 'FAItemplate'
	SUP top AUXILIARY
	DESC 'Container for template objects' 
	MUST ( cn ) MAY  ( FAIstate $ description ) )

# Name       : FAItemplateEntry
# Description: Stores FAI templates and the corresponding path.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.14 NAME 'FAItemplateEntry'
	SUP top AUXILIARY
	DESC 'Stores real file templates'
	MUST ( cn $ FAItemplateFile $ FAItemplatePath $ FAIowner $ FAImode ) 
	MAY ( FAIstate $ description ) )
	
# Name       : FAIdebconfInfo
# Description: Stores debconf information like shown in
#              debconf-getselections.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.15 NAME 'FAIdebconfInfo'
	SUP top STRUCTURAL
	DESC 'Stores debconf informations for single packages'
	MUST ( FAIpackage $ FAIvariable $ FAIvariableType ) MAY ( FAIvariableContent $ FAIstate ) )

# Name       : FAIobject
# Description: Marks objects to have a set of FAI classes.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.16 NAME 'FAIobject'
	SUP top AUXILIARY
	DESC 'Marks an object as an FAI object.'
	MAY ( FAIstate $ FAIstatus $ FAIclass $ FAIdebianMirror $ macAddress) )

# Name       : FAIrepository
# Description: Marks objects to have a set of FAI classes.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.17 NAME 'FAIrepository'
	SUP top AUXILIARY
	DESC 'Provides per object repository informations.'
	MUST ( FAIdebianRelease $ FAIdebianSection ) MAY ( FAIdebianMirror ) )

# Name       : FAIrepositoryServer
# Description: FAIrepositoryServer stores information about repository settings.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.18 NAME 'FAIrepositoryServer'
	SUP top AUXILIARY
	DESC 'Provides repository informations.'
	MAY ( FAIrepository ) )

# Name       : FAIbranch
# Description: FAIbranch stores information about the state of a set of FAI classes.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.19 NAME 'FAIbranch'
	SUP top AUXILIARY
	DESC 'Provides information for versioning.'
	MAY ( FAIstate ) )

# Name       : FAIreleaseTag
# Description: FAIreleaseTag stores information about the fai release of an object.
objectclass (1.3.6.1.4.1.10098.1.2.1.40.20 NAME 'FAIreleaseTag'
	SUP top AUXILIARY
	DESC 'Provides information for versioning.'
	MAY ( FAIrelease ) )

### END of FAI schema file
