117 строки
3.0 KiB
Plaintext
117 строки
3.0 KiB
Plaintext
# $Id$
|
|
|
|
# this will eventually parse different config files
|
|
|
|
# this creates the 'passwd' type, but it does not create any instances
|
|
filetype { "passwd":
|
|
linesplit => "\n",
|
|
escapednewlines => false
|
|
}
|
|
|
|
|
|
# this creates the 'PasswdUser' type, but again, no instances
|
|
filerecord { "user":
|
|
filetype => passwd,
|
|
fields => [name, password, uid, gid, gcos, home, shell],
|
|
namevar => name,
|
|
splitchar => ":"
|
|
|
|
}
|
|
|
|
filetype { ini:
|
|
linesplit => "\n\n"
|
|
}
|
|
|
|
# ini files are different because we don't really care about validating fields
|
|
# or at least, we can't do it for most files...
|
|
filerecord { "initrecord":
|
|
filetype => ini,
|
|
fields => [name, password, uid, gid, gcos, home, shell],
|
|
namevar => name,
|
|
splitchar => ":"
|
|
|
|
}
|
|
|
|
# this won't work for multiple record types, will it?
|
|
# or at least, it requires that we specify multiple times
|
|
# ah, and it doesn't specify which of the available record types
|
|
# it works for...
|
|
passwd { user:
|
|
complete => true, # manage the whole file
|
|
path => "/etc/passwd"
|
|
}
|
|
|
|
user { yaytest:
|
|
password => x,
|
|
uid => 10000,
|
|
gid => 10000,
|
|
home => "/home/yaytest",
|
|
gcos => "The Yaytest",
|
|
shell => "/bin/sh"
|
|
}
|
|
# there seems to be an intrinsic problem here -- i've got subtypes that only
|
|
# make sense when an instance of the super type already exists, and i need
|
|
# to associate the instances of the subtype with the instances of the supertype
|
|
# even if i created the parsers manually, I'd have the same problem
|
|
|
|
# this is the crux of it -- i want to be able to say 'user' here without having
|
|
# to specify the file, which leaves two options:
|
|
# 1) associate the record type with a filetype instance (BAD)
|
|
# 2) once the filetype and record type are created, have another command
|
|
# that specifically creates a filetype instance and gives names for instances
|
|
# of its record types
|
|
|
|
define syslog {
|
|
|
|
# create a new type, with all defaults
|
|
filetype { "syslog":
|
|
escapednewlines => true
|
|
}
|
|
|
|
filerecord { "log":
|
|
filetype => syslog,
|
|
regex => "^([^#\s]+)\s+(\S+)$",
|
|
joinchar => "\t",
|
|
fields => [logs, dest]
|
|
}
|
|
|
|
# these two should just be supported within the filetypes
|
|
filerecord { "comment":
|
|
filetype => syslog,
|
|
regex => "^(#.*)$",
|
|
joinchar => "s",
|
|
fields => [comment]
|
|
}
|
|
|
|
filerecord { "blank":
|
|
filetype => syslog,
|
|
regex => "^(\s*)$",
|
|
joinchar => "s",
|
|
fields => blank
|
|
}
|
|
}
|
|
|
|
define cron {
|
|
filetype { "usercrontab":
|
|
}
|
|
|
|
# this won't actually work, of course
|
|
filerecord { "cronjob":
|
|
filetype => crontab,
|
|
regex => "^([^#\s]+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(.+)$",
|
|
joinchar => " ",
|
|
fields => [minute, hour, day, month, weekday, command],
|
|
defaults => ["*", "*", "*", "*", "*", nil],
|
|
optional => [minute, hour, day, month, weekday]
|
|
}
|
|
|
|
crontab { "luke":
|
|
}
|
|
}
|
|
|
|
# XXX this doesn't work in the slightest
|
|
define crontab(name,path) {
|
|
usercrontab { "${path}/${name}":
|
|
}
|
|
}
|