Hi!
suppose my puppet recipes are deploying a configuration
for the entire cluster (lets say Hadoop) consisting of quite a
few distributed systems (lets say distributed file-system --
HDFS, scheduler -- YARN, coordinator -- zookeeper). Each
of these distributed systems in turn consists of a few agents
(e.g. in HDFS there's a NameNode, DataNode, etc.).
My biggest concern is how to make it possible to cascade
defaults in such a way that they can be specified at each
of the levels: entire cluster, subsystem, an agent that
is part of the subsystem.
To be more explicit, suppose I have a node description
that looks like this:
-----------------------------------------------------------------
class { "cluster::hdfs::datanode":
namenode_uri => "hdfs://foo.company.com",
auth => "kerberos"
}
class { "cluster::hdfs::secondary_namenode":
namenode_uri => "hdfs://foo.company.com",
auth => "kerberos"
}
class { "cluster::zookeeper::server":
ensemble => "zoo1.company.com",
auth => "kerberos"
}
-----------------------------------------------------------------
What would be the ideal way for me to not repeat myself
and set auth as a cluster-level default, while having
namenode_uri as an HDFS-level default?
Really, what I need should look something like:
----------------------------------------------------------------------
class { "cluster":
auth => kerberos
}
class { "hdfs":
namenode_uri => "hdfs://foo.company.com"
}
class { "cluster::hdfs::datanode": }
class { "cluster::hdfs::secondary_namenode": }
class { "cluster::zookeeper::server":
ensemble => "zoo1.company.com",
}
------------------------------------------------------------------------
Any ideas on how this could be implemented? I've tried
a couple of things, but so far no luck. The natural way
of solving it via inheritance (e.g. cluster::hdfs inherits cluster
and cluster::hdfs::datanode inherits cluster::hdfs, etc.)
seems to be of no help at all. Another thing I was considering
was something along the lines of:
class cluster::hdfs::datanode (
$auth = $cluster::hdfs::params::auth
) inherits cluster::hdfs::params {...}
..............
class cluster::hdfs::params {
if defined(Class['cluster::hdfs']) {
$auth = $cluster::hdfs::auth
} elsif defined(Class['cluster']) {
$auth = $cluster::auth
} else {
$auth = 'simple'
}
}
seems to be pretty ugly and worse yet dependent on the parsing
order.
Am I missing something obvious here?
Thanks,
Roman.
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/puppet-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.