Felix Hartung
2013-Sep-13 14:22 UTC
[Puppet Users] ParsedFile with Header & Trailer - Stored Resources Configuration
Hello dear Community,
I am now working for a while on a distributed DNS Module. The concept is
that there are two Root-DNS servers in an enterprise environemnt and as
much decentral Servers as you want.
Puppet should automatically generate TSIG Secrets, push the secrets and
their own hostname / ipadresses into several stored resources and the
root-DNS Servers should dynamically get all those informations and generate
the BIND 9 named.conf.* configuration files for me.
This way i can automatically let the decentral servers be slaves of some
zones and also let them host der decentral primary-zones for automatic DHCP
--> DNS updates. Those zones are then pushed again back to the root-dns
servers (they are slaves for those zones).
Everything of that works with puppet EXCEPT one thing... creating a list of
stored resources in a file with a header and a trailer.
The following code demonstrates what I want to do:
*Puppet Module for ACL:*
module Puppet
newtype(:decentralacl) do
ensurable
newparam(:name) do
desc „Name of the server which should get
into the decentral ACL“
isnamevar
end
newproperty(:ipaddress) do
desc „IP-Address of the server“
end
end
end
*Puppet Provider for ACL*
require ‘puppet/provider/parsedfile‘
aclfile = “/var/named/named.conf.acls.decentrals“
Puppet::Type.type(:decentralacl).provide(
:parsed,
:parent => Puppet::Provider::ParsedFile,
:default_target => aclfile,
:filetype => :flat
) do
text_line :comment, :match => /^\s*#/
text_line :blank, match => /^\s*/
text_line :acl, :match => /^\s*(acl alle_liegenscahften
\{|\};)$/
record_line :parsed,
:fields => %w{name},
:match => /^key (.+); # (.+)$/,
:to_line => proc { | hash |
if hash[:value] == :absent
hash[:name]
else
“key #{hash:[name]};“
end
}
def self.header
“acl decentral_srvs {“
end
def self.to_file
text = super
text + “\n\};“
end
end
the basic functionality without def self.header and def self.to_file does
actually work. But I can not include that into the bind9 configuration, I
need to get the surrounding acl decentral_srvs {...};
I then use this ACL to allow the transfer of the zone in the
named.conf.zones:
zone "enterprise.org" IN {
type master;
file “enterprise.org.db“;
allow-transfer { decentral_srvs; };
notify yes;
}
Configured as above - i get some error messages and the order of the "key
<hostname>" statements and the brackets is wrong when I add some
hosts. The
"key <hostname>" statements are then out of the surrounding
brackets at the
bottom of the file.
Did anyone ever add static content to a ParsedFile? or to I have to use a
workarount - generate the file only with key <hostname> statements and
then
use some other class / exec to copy this file locally to another file and
add the surrounding parameters?
Faithfully,
Felix
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to puppet-users+unsubscribe@googlegroups.com.
To post to this group, send email to puppet-users@googlegroups.com.
Visit this group at http://groups.google.com/group/puppet-users.
For more options, visit https://groups.google.com/groups/opt_out.