summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--.rspec2
-rw-r--r--.travis.yml13
-rw-r--r--Gemfile21
-rw-r--r--LICENSE674
-rw-r--r--Puppetfile5
-rw-r--r--README83
-rw-r--r--README.md148
-rw-r--r--Rakefile27
-rw-r--r--files/config/host/logrotate.Debian35
-rw-r--r--files/config/host/munin.conf.header.Debian.squeeze75
-rw-r--r--files/config/host/munin.conf.header.Debian.wheezy75
-rw-r--r--files/config/host/munin.conf.header.Gentoo145
-rw-r--r--files/config/host/munin.conf.header.RedHat143
-rw-r--r--files/config/host/munin.conf.header.Ubuntu (renamed from files/config/host/munin.conf.header.Debian.sid)0
-rw-r--r--files/empty/.ignore1
-rw-r--r--files/modules_dir/.ignore0
-rw-r--r--files/openbsd/package/munin_openbsd.tar.gzbin116174 -> 0 bytes
-rw-r--r--lib/facter/acpi_available.rb2
-rw-r--r--manifests/client.pp25
-rw-r--r--manifests/client/base.pp48
-rw-r--r--manifests/client/centos.pp3
-rw-r--r--manifests/client/darwin.pp22
-rw-r--r--manifests/client/debian.pp14
-rw-r--r--manifests/client/gentoo.pp6
-rw-r--r--manifests/client/openbsd.pp46
-rw-r--r--manifests/client/package.pp12
-rw-r--r--manifests/client/params.pp19
-rw-r--r--manifests/host.pp44
-rw-r--r--manifests/host/cgi.pp30
-rw-r--r--manifests/init.pp41
-rw-r--r--manifests/plugin.pp74
-rw-r--r--manifests/plugin/deploy.pp16
-rw-r--r--manifests/plugin/scriptpaths.pp14
-rw-r--r--manifests/plugins/base.pp16
-rw-r--r--manifests/plugins/centos.pp3
-rw-r--r--manifests/plugins/debian.pp1
-rw-r--r--manifests/plugins/djbdns.pp5
-rw-r--r--manifests/plugins/dom0.pp1
-rw-r--r--manifests/plugins/gentoo.pp3
-rw-r--r--manifests/plugins/interfaces.pp32
-rw-r--r--manifests/plugins/kvm.pp1
-rw-r--r--manifests/plugins/linux.pp8
-rw-r--r--manifests/plugins/muninhost.pp3
-rw-r--r--manifests/plugins/openbsd.pp5
-rw-r--r--manifests/plugins/physical.pp6
-rw-r--r--manifests/plugins/selinux.pp1
-rw-r--r--manifests/plugins/setup.pp21
-rw-r--r--manifests/plugins/vserver.pp4
-rw-r--r--manifests/register.pp16
-rw-r--r--manifests/register/snmp.pp19
-rw-r--r--manifests/remoteplugin.pp19
-rw-r--r--manifests/snmp_collector.pp23
-rw-r--r--metadata.json16
-rw-r--r--spec/classes/munin_client_base_spec.rb86
-rw-r--r--spec/classes/munin_client_spec.rb50
-rw-r--r--spec/classes/munin_host_cgi_spec.rb57
-rw-r--r--spec/classes/munin_host_spec.rb47
-rw-r--r--spec/classes/munin_plugins_interfaces_spec.rb44
-rw-r--r--spec/defines/munin_plugin_spec.rb57
-rw-r--r--spec/spec_helper.rb11
-rw-r--r--spec/spec_helper_system.rb27
-rw-r--r--templates/client.erb26
-rw-r--r--templates/logrotate.conf.erb (renamed from files/config/host/logrotate.CentOS)2
l---------templates/munin-node.conf.CentOS1
l---------templates/munin-node.conf.CentOS.1
l---------templates/munin-node.conf.CentOS.51
l---------templates/munin-node.conf.Debian1
-rw-r--r--templates/munin-node.conf.Debian.etch39
l---------templates/munin-node.conf.Debian.feisty1
l---------templates/munin-node.conf.Debian.gutsy1
l---------templates/munin-node.conf.Debian.hardy1
-rw-r--r--templates/munin-node.conf.Debian.lenny39
l---------templates/munin-node.conf.Debian.lucid1
l---------templates/munin-node.conf.Debian.sarge1
l---------templates/munin-node.conf.Debian.sid1
l---------templates/munin-node.conf.Debian.squeeze1
-rw-r--r--templates/munin-node.conf.Debian.wheezy57
l---------templates/munin-node.conf.Gentoo1
l---------templates/munin-node.conf.Gentoo.1
-rw-r--r--templates/munin-node.conf.OpenBSD59
-rw-r--r--templates/munin-node.conf.Ubuntu39
l---------templates/munin-node.conf.Ubuntu.precise1
l---------templates/munin-node.conf.Ubuntu.quantal1
-rw-r--r--templates/munin-node.conf.erb (renamed from templates/munin-node.conf.default)33
-rw-r--r--templates/site.conf9
86 files changed, 1913 insertions, 856 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7df6248
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+spec/fixtures/
+vendor/
+.tmp/*
+.librarian/*
+*.lock
+pkg/
diff --git a/.rspec b/.rspec
new file mode 100644
index 0000000..8c18f1a
--- /dev/null
+++ b/.rspec
@@ -0,0 +1,2 @@
+--format documentation
+--color
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..4b26c23
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,13 @@
+rvm:
+ - 1.8.7
+ - 1.9.3
+ - 2.0.0
+script: 'bundle exec rake spec'
+env:
+ - PUPPET_VERSION=2.7.25
+ - PUPPET_VERSION=3.4.2
+matrix:
+ exclude:
+ # No support for Ruby 2.0 before Puppet 3.2
+ - rvm: 2.0.0
+ env: PUPPET_VERSION=2.7.25
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..a6b52f0
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,21 @@
+source 'https://rubygems.org'
+
+if ENV.key?('PUPPET_VERSION')
+ puppetversion = "~> #{ENV['PUPPET_VERSION']}"
+else
+ puppetversion = ['>= 2.6']
+end
+
+if RUBY_VERSION == '1.8.7'
+ gem 'activesupport', '~> 3.2'
+ gem 'librarian-puppet', '~> 1.0.0'
+else
+ gem 'librarian-puppet', '>=0.9.10'
+end
+gem 'puppet', puppetversion
+gem 'puppet-lint', '>=0.3.2'
+gem 'puppetlabs_spec_helper', '>=0.2.0'
+gem 'rake', '>=0.9.2.2'
+gem 'rspec-system-puppet', :require => false
+gem 'serverspec', :require => false
+gem 'rspec-system-serverspec', :require => false
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 3 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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/Puppetfile b/Puppetfile
new file mode 100644
index 0000000..3e03b30
--- /dev/null
+++ b/Puppetfile
@@ -0,0 +1,5 @@
+forge 'https://forge.puppetlabs.com'
+
+mod 'puppetlabs/stdlib', '>=3.2.0'
+mod 'puppetlabs/concat', '>=1.0.0'
+mod 'duritong/openbsd', '>=0.0.1'
diff --git a/README b/README
deleted file mode 100644
index ef3c2fd..0000000
--- a/README
+++ /dev/null
@@ -1,83 +0,0 @@
-== Munin ==
-
-Munin is a performance monitoring system which creates nice RRD graphs and has
-a very easy plugin interface. The munin homepage is http://munin.projects.linpro.no/
-
-To use this module, follow these directions:
-
-0. This module requires puppet 2.7 or newer.
-
-1. Install the "common", "concat" and "stdlib" modules -- the munin module
- depends on functions that are defined and installed via these modules.
-
-2. You will need storedconfigs enabled in your puppet setup, to do that you need to
- add a line to your puppet.conf in your [puppetmasterd] section which says:
-
- storeconfigs=true
-
- You may wish to immediately setup a mysql/pgsql database for your storedconfigs, as
- the default method uses sqlite, and is not very efficient, to do that you need lines
- such as the following below the storeconfigs=true line (adjust as needed):
-
- dbadapter=mysql
- dbserver=localhost
- dbuser=puppet
- dbpassword=puppetspasswd
-
-3. Install the "munin" module:
-
- a. Your modules directory will need all the files included in this repository placed
- under a directory called "munin"
-
- b. For every host you wish to gather munin statistics, add the class munin::client to that
- node. You will want to set the class parameter 'allow' to be the IP(s) of the munin
- collector, this defines what IP is permitted to connect to the node, for example:
-
- node foo {
- class { 'munin::client': allow => '192.168.0.1'}
- }
-
- for multiple munin nodes, you can pass an array:
-
- class { 'munin::client': allow => [ '192.168.0.1', '10.0.0.1' ] }
-
- c. In the node definition in your site.pp for your main munin host, add the following:
-
- class { 'munin::host': }
-
- If you want cgi graphing you can pass cgi_graphing => true.
- (For CentOS this is enabled in the default header config)
- for more information, see: http://munin.projects.linpro.no/wiki/CgiHowto
-
- d. If there are particular munin plugins you want to enable or configure, you define them
- in the node definition, like follows:
-
- # Enable monitoring of disk stats in bytes
- munin::plugin { 'df_abs': }
-
- # Use a non-standard plugin path to use custom plugins
- munin::plugin { 'spamassassin':
- ensure => present,
- script_path => '/usr/local/share/munin-plugins',
- }
-
- # For wildcard plugins (eg. ip_, snmp_, etc.), use the name variable to
- # configure the plugin name, and the ensure parameter to indicate the base
- # plugin name to which you want a symlink, for example:
- munin::plugin { [ 'ip_192.168.0.1', 'ip_10.0.0.1' ]:
- ensure => 'ip_'
- }
-
- # Use a special config to pass parameters to the plugin
- munin::plugin {
- [ 'apache_accesses', 'apache_processes', 'apache_volume' ]:
- ensure => present,
- config => 'env.url http://127.0.0.1:80/server-status?auto'
- }
-
- e. If you have Linux-Vservers configured, you will likely have multiple munin-node processes
- competing for the default port 4949, for those nodes, set an alternate port for munin-node
- to run on by putting something similar to the following class parameter:
-
- class { 'munin::client': allow => '192.168.0.1', port => '4948' }
-
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..68c3c55
--- /dev/null
+++ b/README.md
@@ -0,0 +1,148 @@
+# Puppet-Munin
+
+[![Build Status](https://travis-ci.org/duritong/puppet-munin.png?branch=master)](https://travis-ci.org/duritong/puppet-munin)
+
+Munin is a performance monitoring system which creates nice RRD graphs and has
+a very easy plugin interface. The munin homepage is http://munin.projects.linpro.no/
+
+## Requirements
+
+ * puppet 2.7 or newer
+ * install the `concat` and `stdlib` modules - the munin module depends on functions that are defined and installed via these modules
+ * you will need storedconfigs enabled in your puppet setup, to do that you need to add a line to your `puppet.conf` in your `[puppetmasterd]` section which says:
+
+ storeconfigs=true
+
+ * You may wish to immediately setup a `mysql`/ `pgsql` database for your storedconfigs, as
+ the default method uses sqlite, and is not very efficient, to do that you need lines
+ such as the following below the `storeconfigs=true` line (adjust as needed):
+
+ dbadapter=mysql
+ dbserver=localhost
+ dbuser=puppet
+ dbpassword=puppetspasswd
+
+## Usage
+
+Your modules directory will need all the files included in this repository placed under a directory called `munin`.
+
+### Upgrade notices
+
+Users of the module who are upgrading from a older version of the module might be interested in these important changes:
+
+ * The `munin::client` and `munin::host` classes should not be included
+ directly anymore. Instead, the main class should be used for both client and
+ server (server should have the `$is_server` parameter set to true).
+
+### Master configuration
+
+To install a master (or server) you need to flip one argument to true in the main class:
+
+ class { 'munin': is_server => true }
+
+If you want cgi graphing you can pass `cgi_graphing => true`. (For CentOS this is enabled in the default header config) for more information, see: http://munin.projects.linpro.no/wiki/CgiHowto
+
+### Client configuration
+
+For every host you wish to gather munin statistics, add the class `munin` to that
+node. You will want to set the class parameter `allow` to be the IP(s) of the munin
+collector, this defines what IP is permitted to connect to the node, for example:
+
+ node foo {
+ class { 'munin': allow => '192.168.0.1'}
+ }
+
+for multiple munin collectors, you can pass an array:
+
+ class { 'munin': allow => [ '192.168.0.1', '10.0.0.1' ] }
+
+### Local plugins
+
+If there are particular munin plugins you want to enable or configure, you define them
+in the node definition, like follows:
+
+ # Enable monitoring of disk stats in bytes
+ munin::plugin { 'df_abs': }
+
+ # Use a non-standard plugin path to use custom plugins
+ munin::plugin { 'spamassassin':
+ ensure => present,
+ script_path_in => '/usr/local/share/munin-plugins',
+ }
+
+ # For wildcard plugins (eg. ip_, snmp_, etc.), use the name variable to
+ # configure the plugin name, and the ensure parameter to indicate the base
+ # plugin name to which you want a symlink, for example:
+ munin::plugin { [ 'ip_192.168.0.1', 'ip_10.0.0.1' ]:
+ ensure => 'ip_'
+ }
+
+ # Use a special config to pass parameters to the plugin
+ munin::plugin {
+ [ 'apache_accesses', 'apache_processes', 'apache_volume' ]:
+ ensure => present,
+ config => 'env.url http://127.0.0.1:80/server-status?auto'
+ }
+
+Note: The plugin must be installed at the client. For listing available plugins run as root `munin-node-configure --suggest`
+
+### External plugins
+
+For deploying plugins which are not available at client, you can fetch them from puppet
+master using `munin::plugin::deploy`.
+
+ munin::plugin::deploy { 'redis':
+ source => 'munin/plugins/redis/redis_',
+ config => '' # pass parameters to plugin
+ }
+
+In this example the file on master would be located in:
+
+ {modulepath}/munin/files/plugins/redis/redis_
+
+Module path is specified in `puppet.conf`, you can find out your `{modulepath}` easily by tying
+in console `puppet config print modulepath`.
+
+
+### Multiple munin collectors
+
+If some part of your infrastructure should be graphed by one munin collector,
+and another part by a second collector, you can use the parameter $export_tag
+to the main class to differentiate which clients and collectors are associated.
+
+For example, here are four nodes: two collectors and two clients. Each
+collector is associated with one client:
+
+ node coll1 {
+ class { 'munin':
+ $is_server => true,
+ $export_tag => 'coll1',
+ }
+ }
+
+ node client1 {
+ class { 'munin':
+ $export_tag => 'coll1',
+ }
+ }
+
+ node coll2 {
+ class { 'munin':
+ $is_server => true,
+ $export_tag => 'coll2',
+ }
+ }
+
+ node client2 {
+ class { 'munin':
+ $export_tag => 'coll2',
+ }
+ }
+
+### Multiple munin-node instances with Linux-VServer
+
+If you have Linux-Vservers configured, you will likely have multiple munin-node processes
+competing for the default port 4949, for those nodes, set an alternate port for munin-node
+to run on by putting something similar to the following class parameter:
+
+ class { 'munin': allow => '192.168.0.1', port => '4948' }
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 0000000..f3c7f29
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,27 @@
+require 'bundler'
+Bundler.require(:rake)
+
+require 'puppetlabs_spec_helper/rake_tasks'
+require 'puppet-lint/tasks/puppet-lint'
+require 'rspec-system/rake_task'
+
+Rake::Task[:lint].clear
+PuppetLint::RakeTask.new :lint do |config|
+ config.ignore_paths = ["spec/**/*.pp", "vendor/**/*.pp"]
+ config.log_format = '%{path}:%{linenumber}:%{KIND}: %{message}'
+ config.disable_checks = [ "class_inherits_from_params_class", "80chars" ]
+end
+
+# use librarian-puppet to manage fixtures instead of .fixtures.yml
+# offers more possibilities like explicit version management, forge downloads,...
+task :librarian_spec_prep do
+ sh "librarian-puppet install --path=spec/fixtures/modules/"
+ pwd = `pwd`.strip
+ unless File.directory?("#{pwd}/spec/fixtures/modules/munin")
+ sh "ln -s #{pwd} #{pwd}/spec/fixtures/modules/munin"
+ end
+end
+task :spec_prep => :librarian_spec_prep
+
+
+task :default => [:spec, :lint]
diff --git a/files/config/host/logrotate.Debian b/files/config/host/logrotate.Debian
deleted file mode 100644
index 732c871..0000000
--- a/files/config/host/logrotate.Debian
+++ /dev/null
@@ -1,35 +0,0 @@
-/var/log/munin/munin-update.log {
- daily
- missingok
- rotate 7
- compress
- notifempty
- create 640 munin adm
-}
-
-/var/log/munin/munin-graph.log {
- daily
- missingok
- rotate 7
- compress
- notifempty
- create 660 munin www-data
-}
-
-/var/log/munin/munin-html.log {
- daily
- missingok
- rotate 7
- compress
- notifempty
- create 640 munin adm
-}
-
-/var/log/munin/munin-limits.log {
- daily
- missingok
- rotate 7
- compress
- notifempty
- create 640 munin adm
-}
diff --git a/files/config/host/munin.conf.header.Debian.squeeze b/files/config/host/munin.conf.header.Debian.squeeze
deleted file mode 100644
index 771d50d..0000000
--- a/files/config/host/munin.conf.header.Debian.squeeze
+++ /dev/null
@@ -1,75 +0,0 @@
-# Example configuration file for Munin, generated by 'make build'
-
-# The next three variables specifies where the location of the RRD
-# databases, the HTML output, and the logs, severally. They all
-# must be writable by the user running munin-cron.
-dbdir /var/lib/munin
-htmldir /var/cache/munin/www
-logdir /var/log/munin
-rundir /var/run/munin
-
-# Where to look for the HTML templates
-tmpldir /etc/munin/templates
-
-# Make graphs show values per minute instead of per second
-#graph_period minute
-
-# Drop somejuser@fnord.comm and anotheruser@blibb.comm an email everytime
-# something changes (OK -> WARNING, CRITICAL -> OK, etc)
-#contact.someuser.command mail -s "Munin notification" somejuser@fnord.comm
-#contact.anotheruser.command mail -s "Munin notification" anotheruser@blibb.comm
-#
-# For those with Nagios, the following might come in handy. In addition,
-# the services must be defined in the Nagios server as well.
-#contact.nagios.command /usr/sbin/send_nsca -H nagios.host.com -c /etc/send_nsca.cfg
-
-#contacts me
-#contact.me.command mail -s "Munin notification ${var:group} :: ${var:host} :: ${var:graph_title}" root
-#contact.me.always_send warning critical
-
-# a simple host tree
-#[localhost]
-# address 127.0.0.1
-# use_node_name yes
-
-#
-# A more complex example of a host tree
-#
-## First our "normal" host.
-# [fii.foo.com]
-# address foo
-#
-## Then our other host...
-# [fay.foo.com]
-# address fay
-#
-## Then we want totals...
-# [foo.com;Totals] #Force it into the "foo.com"-domain...
-# update no # Turn off data-fetching for this "host".
-#
-# # The graph "load1". We want to see the loads of both machines...
-# # "fii=fii.foo.com:load.load" means "label=machine:graph.field"
-# load1.graph_title Loads side by side
-# load1.graph_order fii=fii.foo.com:load.load fay=fay.foo.com:load.load
-#
-# # The graph "load2". Now we want them stacked on top of each other.
-# load2.graph_title Loads on top of each other
-# load2.dummy_field.stack fii=fii.foo.com:load.load fay=fay.foo.com:load.load
-# load2.dummy_field.draw AREA # We want area instead the default LINE2.
-# load2.dummy_field.label dummy # This is needed. Silly, really.
-#
-# # The graph "load3". Now we want them summarised into one field
-# load3.graph_title Loads summarised
-# load3.combined_loads.sum fii.foo.com:load.load fay.foo.com:load.load
-# load3.combined_loads.label Combined loads # Must be set, as this is
-# # not a dummy field!
-#
-## ...and on a side note, I want them listen in another order (default is
-## alphabetically)
-#
-# # Since [foo.com] would be interpreted as a host in the domain "com", we
-# # specify that this is a domain by adding a semicolon.
-# [foo.com;]
-# node_order Totals fii.foo.com fay.foo.com
-#
-
diff --git a/files/config/host/munin.conf.header.Debian.wheezy b/files/config/host/munin.conf.header.Debian.wheezy
deleted file mode 100644
index 771d50d..0000000
--- a/files/config/host/munin.conf.header.Debian.wheezy
+++ /dev/null
@@ -1,75 +0,0 @@
-# Example configuration file for Munin, generated by 'make build'
-
-# The next three variables specifies where the location of the RRD
-# databases, the HTML output, and the logs, severally. They all
-# must be writable by the user running munin-cron.
-dbdir /var/lib/munin
-htmldir /var/cache/munin/www
-logdir /var/log/munin
-rundir /var/run/munin
-
-# Where to look for the HTML templates
-tmpldir /etc/munin/templates
-
-# Make graphs show values per minute instead of per second
-#graph_period minute
-
-# Drop somejuser@fnord.comm and anotheruser@blibb.comm an email everytime
-# something changes (OK -> WARNING, CRITICAL -> OK, etc)
-#contact.someuser.command mail -s "Munin notification" somejuser@fnord.comm
-#contact.anotheruser.command mail -s "Munin notification" anotheruser@blibb.comm
-#
-# For those with Nagios, the following might come in handy. In addition,
-# the services must be defined in the Nagios server as well.
-#contact.nagios.command /usr/sbin/send_nsca -H nagios.host.com -c /etc/send_nsca.cfg
-
-#contacts me
-#contact.me.command mail -s "Munin notification ${var:group} :: ${var:host} :: ${var:graph_title}" root
-#contact.me.always_send warning critical
-
-# a simple host tree
-#[localhost]
-# address 127.0.0.1
-# use_node_name yes
-
-#
-# A more complex example of a host tree
-#
-## First our "normal" host.
-# [fii.foo.com]
-# address foo
-#
-## Then our other host...
-# [fay.foo.com]
-# address fay
-#
-## Then we want totals...
-# [foo.com;Totals] #Force it into the "foo.com"-domain...
-# update no # Turn off data-fetching for this "host".
-#
-# # The graph "load1". We want to see the loads of both machines...
-# # "fii=fii.foo.com:load.load" means "label=machine:graph.field"
-# load1.graph_title Loads side by side
-# load1.graph_order fii=fii.foo.com:load.load fay=fay.foo.com:load.load
-#
-# # The graph "load2". Now we want them stacked on top of each other.
-# load2.graph_title Loads on top of each other
-# load2.dummy_field.stack fii=fii.foo.com:load.load fay=fay.foo.com:load.load
-# load2.dummy_field.draw AREA # We want area instead the default LINE2.
-# load2.dummy_field.label dummy # This is needed. Silly, really.
-#
-# # The graph "load3". Now we want them summarised into one field
-# load3.graph_title Loads summarised
-# load3.combined_loads.sum fii.foo.com:load.load fay.foo.com:load.load
-# load3.combined_loads.label Combined loads # Must be set, as this is
-# # not a dummy field!
-#
-## ...and on a side note, I want them listen in another order (default is
-## alphabetically)
-#
-# # Since [foo.com] would be interpreted as a host in the domain "com", we
-# # specify that this is a domain by adding a semicolon.
-# [foo.com;]
-# node_order Totals fii.foo.com fay.foo.com
-#
-
diff --git a/files/config/host/munin.conf.header.Gentoo b/files/config/host/munin.conf.header.Gentoo
new file mode 100644
index 0000000..d2523df
--- /dev/null
+++ b/files/config/host/munin.conf.header.Gentoo
@@ -0,0 +1,145 @@
+# Example configuration file for Munin, generated by 'make build'
+
+# The next three variables specifies where the location of the RRD
+# databases, the HTML output, logs and the lock/pid files. They all
+# must be writable by the user running munin-cron. They are all
+# defaulted to the values you see here.
+#
+#dbdir /var/lib/munin
+#htmldir /var/www/localhost/htdocs/munin
+#logdir /var/log/munin
+#rundir /run/munin
+
+# Where to look for the HTML templates
+#
+#tmpldir /etc/munin/templates
+
+# Where to look for the static www files
+#
+#staticdir /etc/munin/static
+
+# temporary cgi files are here. note that it has to be writable by
+# the cgi user (usually nobody or httpd).
+#
+# cgitmpdir @@CGITMPDIR@@
+
+# (Exactly one) directory to include all files from.
+includedir /etc/munin/munin-conf.d
+
+# You can choose the time reference for "DERIVE" like graphs, and show
+# "per minute", "per hour" values instead of the default "per second"
+#
+#graph_period second
+
+# Graphics files are generated either via cron or by a CGI process.
+# See http://munin-monitoring.org/wiki/CgiHowto2 for more
+# documentation.
+# Since 2.0, munin-graph has been rewritten to use the cgi code.
+# It is single threaded *by design* now.
+#
+#graph_strategy cron
+
+# munin-cgi-graph is invoked by the web server up to very many times at the
+# same time. This is not optimal since it results in high CPU and memory
+# consumption to the degree that the system can thrash. Again the default is
+# 6. Most likely the optimal number for max_cgi_graph_jobs is the same as
+# max_graph_jobs.
+#
+#munin_cgi_graph_jobs 6
+
+# If the automatic CGI url is wrong for your system override it here:
+#
+#cgiurl_graph /munin-cgi/munin-cgi-graph
+
+# max_size_x and max_size_y are the max size of images in pixel.
+# Default is 4000. Do not make it too large otherwise RRD might use all
+# RAM to generate the images.
+#
+#max_size_x 4000
+#max_size_y 4000
+
+# HTML files are normally generated by munin-html, no matter if the
+# files are used or not. You can change this to on-demand generation
+# by following the instructions in http://munin-monitoring.org/wiki/CgiHowto2
+#
+# Notes:
+# - moving to CGI for HTML means you cannot have graph generated by cron.
+# - cgi html has some bugs, mostly you still have to launch munin-html by hand
+#
+#html_strategy cron
+
+# munin-update runs in parallel.
+#
+# The default max number of processes is 16, and is probably ok for you.
+#
+# If set too high, it might hit some process/ram/filedesc limits.
+# If set too low, munin-update might take more than 5 min.
+#
+# If you want munin-update to not be parallel set it to 0.
+#
+#max_processes 16
+
+# RRD updates are per default, performed directly on the rrd files.
+# To reduce IO and enable the use of the rrdcached, uncomment it and set it to
+# the location of the socket that rrdcached uses.
+#
+#rrdcached_socket /var/run/rrdcached.sock
+
+# Drop somejuser@fnord.comm and anotheruser@blibb.comm an email everytime
+# something changes (OK -> WARNING, CRITICAL -> OK, etc)
+#contact.someuser.command mail -s "Munin notification" somejuser@fnord.comm
+#contact.anotheruser.command mail -s "Munin notification" anotheruser@blibb.comm
+#
+# For those with Nagios, the following might come in handy. In addition,
+# the services must be defined in the Nagios server as well.
+#contact.nagios.command /usr/bin/send_nsca nagios.host.comm -c /etc/nsca.conf
+
+# a simple host tree
+#[localhost]
+# address 127.0.0.1
+# use_node_name yes
+
+#
+# A more complex example of a host tree
+#
+## First our "normal" host.
+# [fii.foo.com]
+# address foo
+#
+## Then our other host...
+# [fay.foo.com]
+# address fay
+#
+## IPv6 host. note that the ip adress has to be in brackets
+# [ip6.foo.com]
+# address [2001::1234:1]
+#
+## Then we want totals...
+# [foo.com;Totals] #Force it into the "foo.com"-domain...
+# update no # Turn off data-fetching for this "host".
+#
+# # The graph "load1". We want to see the loads of both machines...
+# # "fii=fii.foo.com:load.load" means "label=machine:graph.field"
+# load1.graph_title Loads side by side
+# load1.graph_order fii=fii.foo.com:load.load fay=fay.foo.com:load.load
+#
+# # The graph "load2". Now we want them stacked on top of each other.
+# load2.graph_title Loads on top of each other
+# load2.dummy_field.stack fii=fii.foo.com:load.load fay=fay.foo.com:load.load
+# load2.dummy_field.draw AREA # We want area instead the default LINE2.
+# load2.dummy_field.label dummy # This is needed. Silly, really.
+#
+# # The graph "load3". Now we want them summarised into one field
+# load3.graph_title Loads summarised
+# load3.combined_loads.sum fii.foo.com:load.load fay.foo.com:load.load
+# load3.combined_loads.label Combined loads # Must be set, as this is
+# # not a dummy field!
+#
+## ...and on a side note, I want them listen in another order (default is
+## alphabetically)
+#
+# # Since [foo.com] would be interpreted as a host in the domain "com", we
+# # specify that this is a domain by adding a semicolon.
+# [foo.com;]
+# node_order Totals fii.foo.com fay.foo.com
+#
diff --git a/files/config/host/munin.conf.header.RedHat b/files/config/host/munin.conf.header.RedHat
new file mode 100644
index 0000000..f212ce0
--- /dev/null
+++ b/files/config/host/munin.conf.header.RedHat
@@ -0,0 +1,143 @@
+# Example configuration file for Munin, generated by 'make build'
+
+# The next three variables specifies where the location of the RRD
+# databases, the HTML output, logs and the lock/pid files. They all
+# must be writable by the user running munin-cron. They are all
+# defaulted to the values you see here.
+#
+#dbdir /var/lib/munin
+#htmldir /var/www/html/munin
+htmldir /var/www/html/munin
+#logdir /var/log/munin
+#rundir /var/run/munin
+
+# Where to look for the HTML templates
+#
+#tmpldir /etc/munin/templates
+
+# Where to look for the static www files
+#
+#staticdir /etc/munin/static
+
+# temporary cgi files are here. note that it has to be writable by
+# the cgi user (usually nobody or httpd).
+#
+# cgitmpdir /var/lib/munin/cgi-tmp
+
+# (Exactly one) directory to include all files from.
+includedir /etc/munin/conf.d
+
+# You can choose the time reference for "DERIVE" like graphs, and show
+# "per minute", "per hour" values instead of the default "per second"
+#
+#graph_period second
+
+# Graphics files are generated either via cron or by a CGI process.
+# See http://munin-monitoring.org/wiki/CgiHowto2 for more
+# documentation.
+# Since 2.0, munin-graph has been rewritten to use the cgi code.
+# It is single threaded *by design* now.
+#
+#graph_strategy cgi
+
+# munin-cgi-graph is invoked by the web server up to very many times at the
+# same time. This is not optimal since it results in high CPU and memory
+# consumption to the degree that the system can thrash. Again the default is
+# 6. Most likely the optimal number for max_cgi_graph_jobs is the same as
+# max_graph_jobs.
+#
+#munin_cgi_graph_jobs 6
+
+# If the automatic CGI url is wrong for your system override it here:
+#
+#cgiurl_graph /munin-cgi/munin-cgi-graph
+
+# max_size_x and max_size_y are the max size of images in pixel.
+# Default is 4000. Do not make it too large otherwise RRD might use all
+# RAM to generate the images.
+#
+#max_size_x 4000
+#max_size_y 4000
+
+# HTML files are normally generated by munin-html, no matter if the
+# files are used or not. You can change this to on-demand generation
+# by following the instructions in http://munin-monitoring.org/wiki/CgiHowto2
+#
+# Notes:
+# - moving to CGI for HTML means you cannot have graph generated by cron.
+# - cgi html has some bugs, mostly you still have to launch munin-html by hand
+#
+html_strategy cron
+
+# munin-update runs in parallel.
+#
+# The default max number of processes is 16, and is probably ok for you.
+#
+# If set too high, it might hit some process/ram/filedesc limits.
+# If set too low, munin-update might take more than 5 min.
+#
+# If you want munin-update to not be parallel set it to 0.
+#
+#max_processes 16
+
+# RRD updates are per default, performed directly on the rrd files.
+# To reduce IO and enable the use of the rrdcached, uncomment it and set it to
+# the location of the socket that rrdcached uses.
+#
+#rrdcached_socket /var/run/rrdcached.sock
+
+# Drop somejuser@fnord.comm and anotheruser@blibb.comm an email everytime
+# something changes (OK -> WARNING, CRITICAL -> OK, etc)
+#contact.someuser.command mail -s "Munin notification" somejuser@fnord.comm
+#contact.anotheruser.command mail -s "Munin notification" anotheruser@blibb.comm
+#
+# For those with Nagios, the following might come in handy. In addition,
+# the services must be defined in the Nagios server as well.
+#contact.nagios.command /usr/bin/send_nsca nagios.host.comm -c /etc/nsca.conf
+
+# a simple host tree
+#[localhost]
+# address 127.0.0.1
+# use_node_name yes
+
+#
+# A more complex example of a host tree
+#
+## First our "normal" host.
+# [fii.foo.com]
+# address foo
+#
+## Then our other host...
+# [fay.foo.com]
+# address fay
+#
+## Then we want totals...
+# [foo.com;Totals] #Force it into the "foo.com"-domain...
+# update no # Turn off data-fetching for this "host".
+#
+# # The graph "load1". We want to see the loads of both machines...
+# # "fii=fii.foo.com:load.load" means "label=machine:graph.field"
+# load1.graph_title Loads side by side
+# load1.graph_order fii=fii.foo.com:load.load fay=fay.foo.com:load.load
+#
+# # The graph "load2". Now we want them stacked on top of each other.
+# load2.graph_title Loads on top of each other
+# load2.dummy_field.stack fii=fii.foo.com:load.load fay=fay.foo.com:load.load
+# load2.dummy_field.draw AREA # We want area instead the default LINE2.
+# load2.dummy_field.label dummy # This is needed. Silly, really.
+#
+# # The graph "load3". Now we want them summarised into one field
+# load3.graph_title Loads summarised
+# load3.combined_loads.sum fii.foo.com:load.load fay.foo.com:load.load
+# load3.combined_loads.label Combined loads # Must be set, as this is
+# # not a dummy field!
+#
+## ...and on a side note, I want them listen in another order (default is
+## alphabetically)
+#
+# # Since [foo.com] would be interpreted as a host in the domain "com", we
+# # specify that this is a domain by adding a semicolon.
+# [foo.com;]
+# node_order Totals fii.foo.com fay.foo.com
+#
+
diff --git a/files/config/host/munin.conf.header.Debian.sid b/files/config/host/munin.conf.header.Ubuntu
index 771d50d..771d50d 100644
--- a/files/config/host/munin.conf.header.Debian.sid
+++ b/files/config/host/munin.conf.header.Ubuntu
diff --git a/files/empty/.ignore b/files/empty/.ignore
deleted file mode 100644
index 91162ec..0000000
--- a/files/empty/.ignore
+++ /dev/null
@@ -1 +0,0 @@
-# just used for git
diff --git a/files/modules_dir/.ignore b/files/modules_dir/.ignore
deleted file mode 100644
index e69de29..0000000
--- a/files/modules_dir/.ignore
+++ /dev/null
diff --git a/files/openbsd/package/munin_openbsd.tar.gz b/files/openbsd/package/munin_openbsd.tar.gz
deleted file mode 100644
index 17ace1d..0000000
--- a/files/openbsd/package/munin_openbsd.tar.gz
+++ /dev/null
Binary files differ
diff --git a/lib/facter/acpi_available.rb b/lib/facter/acpi_available.rb
index 9a0474f..dae057f 100644
--- a/lib/facter/acpi_available.rb
+++ b/lib/facter/acpi_available.rb
@@ -1,7 +1,7 @@
# return whether acpi is available -- used for deciding whether to install the munin plugin
Facter.add("acpi_available") do
setcode do
- if not File.exist? `which acpi 2>/dev/null`.chomp or `acpi -t -B -A 2>/dev/null`.match(/\d/).nil?
+ if not Facter::Util::Resolution.which('acpi') or `acpi -t -B -A 2>/dev/null`.match(/\d/).nil?
"absent"
else
"present"
diff --git a/manifests/client.pp b/manifests/client.pp
index 2316bc9..afab5f1 100644
--- a/manifests/client.pp
+++ b/manifests/client.pp
@@ -1,30 +1,23 @@
-# client.pp - configure a munin node
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
# See LICENSE for the full license granted to you.
# Adapted and improved by admin(at)immerda.ch
-class munin::client(
- $allow = [ '127.0.0.1' ],
- $host = '*',
- $port = '4949',
- $use_ssh = false,
- $manage_shorewall = false,
- $shorewall_collector_source = 'net',
- $export_tag = 'munin'
-) {
+# configure a munin node
+# WARNING: this class should not be included directly. See the 'munin' class.
+class munin::client {
+
case $::operatingsystem {
openbsd: { include munin::client::openbsd }
- darwin: { include munin::client::darwin }
debian,ubuntu: { include munin::client::debian }
gentoo: { include munin::client::gentoo }
- centos: { include munin::client::package }
+ centos: { include munin::client::base }
default: { include munin::client::base }
}
- if $munin::client::manage_shorewall {
+ if $munin::manage_shorewall {
class{'shorewall::rules::munin':
- munin_port => $port,
- munin_collector => delete($allow,'127.0.0.1'),
- collector_source => $shorewall_collector_source,
+ munin_port => $munin::port,
+ munin_collector => delete($munin::allow,'127.0.0.1'),
+ collector_source => $munin::shorewall_collector_source,
}
}
}
diff --git a/manifests/client/base.pp b/manifests/client/base.pp
index 78398a9..8ee8b95 100644
--- a/manifests/client/base.pp
+++ b/manifests/client/base.pp
@@ -1,28 +1,44 @@
-class munin::client::base {
+# Install a basic munin client
+class munin::client::base inherits munin::client::params {
+ package { 'munin-node':
+ ensure => installed
+ }
service { 'munin-node':
- ensure => running,
- enable => true,
- hasstatus => true,
+ ensure => running,
+ enable => true,
+ hasstatus => true,
hasrestart => true,
+ require => Package[munin-node],
}
file {'/etc/munin':
ensure => directory,
- mode => 0755, owner => root, group => 0;
+ mode => '0755',
+ owner => root,
+ group => 0,
}
file {'/etc/munin/munin-node.conf':
- content => template("munin/munin-node.conf.${::operatingsystem}"),
- notify => Service['munin-node'],
- mode => 0644, owner => root, group => 0,
+ content => template("${module_name}/munin-node.conf.erb"),
+ # this has to be installed before the package, so the postinst can
+ # boot the munin-node without failure!
+ before => Package['munin-node'],
+ notify => Service['munin-node'],
+ mode => '0644',
+ owner => root,
+ group => 0,
+ }
+ $host = $munin::host ? {
+ '*' => $::fqdn,
+ default => $munin::host
}
munin::register { $::fqdn:
- host => $munin::client::host ? {
- '*' => $::fqdn,
- default => $munin::client::host
- },
- port => $munin::client::port,
- use_ssh => $munin::client::use_ssh,
- config => [ 'use_node_name yes', 'load.load.warning 5', 'load.load.critical 10'],
- export_tag => $munin::client::export_tag,
+ host => $host,
+ port => $munin::port,
+ use_ssh => $munin::use_ssh,
+ description => $munin::description,
+ group => $munin::munin_group,
+ config => [ 'use_node_name yes', 'load.load.warning 5',
+ 'load.load.critical 10'],
+ export_tag => $munin::export_tag,
}
include munin::plugins::base
}
diff --git a/manifests/client/centos.pp b/manifests/client/centos.pp
deleted file mode 100644
index 3a7151b..0000000
--- a/manifests/client/centos.pp
+++ /dev/null
@@ -1,3 +0,0 @@
-class munin::client::centos inherits munin::client::package {
- include munin::plugins::centos
-}
diff --git a/manifests/client/darwin.pp b/manifests/client/darwin.pp
deleted file mode 100644
index 264263d..0000000
--- a/manifests/client/darwin.pp
+++ /dev/null
@@ -1,22 +0,0 @@
-class munin::client::darwin {
- file { "/usr/share/snmp/snmpd.conf":
- mode => 744,
- content => template("munin/darwin_snmpd.conf.erb"),
- group => 0,
- owner => root,
- }
- line{"startsnmpdno":
- file => "/etc/hostconfig",
- line => "SNMPSERVER=-NO-",
- ensure => 'absent',
- }
- line { "startsnmpdyes":
- file => "/etc/hostconfig",
- line => "SNMPSERVER=-YES-",
- notify => Exec["/sbin/SystemStarter start SNMP"],
- }
- exec{"/sbin/SystemStarter start SNMP":
- noop => false,
- }
- munin::register::snmp { $::fqdn: }
-}
diff --git a/manifests/client/debian.pp b/manifests/client/debian.pp
index e67ac26..49ee567 100644
--- a/manifests/client/debian.pp
+++ b/manifests/client/debian.pp
@@ -1,15 +1,9 @@
-class munin::client::debian inherits munin::client::package {
+# Install the munin client on debian
+class munin::client::debian inherits munin::client::base {
# the plugin will need that
- package { "iproute": ensure => installed }
+ ensure_packages(['iproute'])
- Service["munin-node"]{
- # sarge's munin-node init script has no status
- hasstatus => $::lsbdistcodename ? { sarge => false, default => true }
- }
- File["/etc/munin/munin-node.conf"]{
- content => template("munin/munin-node.conf.${::operatingsystem}.${::lsbdistcodename}"),
- }
# workaround bug in munin_node_configure
- plugin { "postfix_mailvolume": ensure => absent }
+ plugin { 'postfix_mailvolume': ensure => absent }
include munin::plugins::debian
}
diff --git a/manifests/client/gentoo.pp b/manifests/client/gentoo.pp
index e79f6b0..263fecd 100644
--- a/manifests/client/gentoo.pp
+++ b/manifests/client/gentoo.pp
@@ -1,8 +1,8 @@
-class munin::client::gentoo inherits munin::client::package {
+# install a munin client on gentoo
+class munin::client::gentoo inherits munin::client::base {
Package['munin-node'] {
- name => 'munin',
- category => 'net-analyzer',
+ name => 'net-analyzer/munin',
}
include munin::plugins::gentoo
diff --git a/manifests/client/openbsd.pp b/manifests/client/openbsd.pp
index cd21abf..09fb24f 100644
--- a/manifests/client/openbsd.pp
+++ b/manifests/client/openbsd.pp
@@ -1,60 +1,26 @@
-# currently we install munin on openbsd by targz
-# :(
-
+# generate a few missing things on openbsd
class munin::client::openbsd inherits munin::client::base {
- if $::operatingsystemrelease == '4.3' {
- file{'/usr/src/munin_openbsd.tar.gz':
- source => "puppet:///modules/munin/openbsd/package/munin_openbsd.tar.gz",
- owner => root,
- group => 0,
- mode => '0600';
- }
- exec{'extract_openbsd':
- command => 'cd /;tar xzf /usr/src/munin_openbsd.tar.gz',
- unless => 'test -d /opt/munin',
- require => File['/usr/src/munin_openbsd.tar.gz'],
- before => File['/var/run/munin'],
- }
- package{'p5-Compress-Zlib':
- ensure => installed,
- before => File['/var/run/munin'],
- }
- } else {
- package{'munin-node':
- ensure => installed,
- }
- }
- package{ [ 'p5-Crypt-SSLeay', 'p5-HTML-Parser', 'p5-HTML-Tagset', 'p5-HTTP-GHTTP',
- 'p5-LWP-UserAgent-Determined', 'p5-Net-SSLeay', 'p5-Net-Server',
- 'p5-URI', 'p5-libwww', 'pcre', 'curl' ]:
- ensure => installed,
- before => File['/var/run/munin'],
- }
- file{[ '/var/run/munin', '/var/log/munin' ]:
+ file{[ '/var/run/munin', '/var/log/munin-node' ]:
ensure => directory,
owner => root,
group => 0,
mode => '0755';
}
- $bin_loc = $::operatingsystemrelease ? {
- '4.3' => '/opt/munin/sbin/munin-node',
- default => '/usr/local/sbin/munin-node'
- }
openbsd::rc_local{'munin-node':
- binary => $bin_loc,
+ binary => '/usr/local/sbin/munin-node',
require => File['/var/run/munin'],
}
Service['munin-node']{
restart => '/bin/kill -HUP `/bin/cat /var/run/munin/munin-node.pid`',
stop => '/bin/kill `/bin/cat /var/run/munin/munin-node.pid`',
- start => $bin_loc,
+ start => '/usr/local/sbin/munin-node',
status => 'test -e /var/run/munin/munin-node.pid && (ps ax | egrep -q "^ *$(cat /var/run/munin/munin-node.pid).*munin-node")',
hasstatus => true,
hasrestart => true,
- require => [ File['/var/run/munin'], File['/var/log/munin'] ],
+ require => [ File['/var/run/munin'], File['/var/log/munin-node'] ],
}
cron{'clean_munin_logfile':
- command => 'rm /var/log/munin/munin-node.log; kill -HUP `cat /var/run/munin/munin-node.pid`',
+ command => 'rm /var/log/munin-node/munin-node.log; kill -HUP `cat /var/run/munin/munin-node.pid`',
minute => 0,
hour => 2,
weekday => 0,
diff --git a/manifests/client/package.pp b/manifests/client/package.pp
deleted file mode 100644
index 206ccc8..0000000
--- a/manifests/client/package.pp
+++ /dev/null
@@ -1,12 +0,0 @@
-class munin::client::package inherits munin::client::base {
- package { 'munin-node': ensure => installed }
- Service['munin-node']{
- require => Package[munin-node],
- }
- File['/etc/munin/munin-node.conf']{
- # this has to be installed before the package, so the postinst can
- # boot the munin-node without failure!
- before => Package['munin-node'],
- }
-}
-
diff --git a/manifests/client/params.pp b/manifests/client/params.pp
new file mode 100644
index 0000000..4473912
--- /dev/null
+++ b/manifests/client/params.pp
@@ -0,0 +1,19 @@
+# Set the parameters for the munin client
+class munin::client::params {
+ $user = 'root'
+
+ case $::osfamily {
+ 'OpenBSD': {
+ $group = '0'
+ $log_file = '/var/log/munin-node/munin-node.log'
+ }
+ 'Debian': {
+ $group = 'root'
+ $log_file = '/var/log/munin/munin-node.log'
+ }
+ default: {
+ $group = 'root'
+ $log_file = '/var/log/munin-node/munin-node.log'
+ }
+ }
+}
diff --git a/manifests/host.pp b/manifests/host.pp
index 05dcb5e..dd5720c 100644
--- a/manifests/host.pp
+++ b/manifests/host.pp
@@ -2,43 +2,47 @@
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
# See LICENSE for the full license granted to you.
-class munin::host(
- $cgi_graphing = false,
- $export_tag = 'munin'
-) {
- package {"munin": ensure => installed, }
- include concat::setup
+# WARNING: this class should not be included directly. See the 'munin' class.
+class munin::host {
- Concat::Fragment <<| tag == $export_tag |>>
+ package {'munin': ensure => installed, }
+
+ Concat::Fragment <<| tag == $munin::export_tag |>>
concat::fragment{'munin.conf.header':
target => '/etc/munin/munin.conf',
source => [ "puppet:///modules/site_munin/config/host/${::fqdn}/munin.conf.header",
- "puppet:///modules/site_munin/config/host/munin.conf.header.${::operatingsystem}.${::lsbdistcodename}",
+ "puppet:///modules/site_munin/config/host/munin.conf.header.${::operatingsystem}.${::operatingsystemmajrelease}",
"puppet:///modules/site_munin/config/host/munin.conf.header.${::operatingsystem}",
- "puppet:///modules/site_munin/config/host/munin.conf.header",
- "puppet:///modules/munin/config/host/munin.conf.header.${::operatingsystem}.${::lsbdistcodename}",
+ 'puppet:///modules/site_munin/config/host/munin.conf.header',
+ "puppet:///modules/munin/config/host/munin.conf.header.${::operatingsystem}.${::operatingsystemmajrelease}",
"puppet:///modules/munin/config/host/munin.conf.header.${::operatingsystem}",
- "puppet:///modules/munin/config/host/munin.conf.header" ],
- order => 05,
+ 'puppet:///modules/munin/config/host/munin.conf.header' ],
+ order => 05,
}
- concat{ "/etc/munin/munin.conf":
- owner => root, group => 0, mode => 0644;
+ concat{ '/etc/munin/munin.conf':
+ owner => root,
+ group => 0,
+ mode => '0644',
}
include munin::plugins::muninhost
- if $munin::host::cgi_graphing {
- include munin::host::cgi
+ if $munin::cgi_graphing {
+ class {'munin::host::cgi':
+ owner => $munin::cgi_owner,
+ }
}
# from time to time we cleanup hanging munin-runs
- file{'/etc/cron.d/munin_kill':
- content => "4,34 * * * * root if $(ps ax | grep -v grep | grep -q munin-run); then killall munin-run; fi\n",
- owner => root, group => 0, mode => 0644;
+ cron { 'munin_kill':
+ command => 'if $(ps ax | grep -v grep | grep -q munin-run); then killall munin-run; fi',
+ minute => ['4', '34'],
+ user => 'root',
}
- if $munin::host::manage_shorewall {
+
+ if $munin::manage_shorewall {
include shorewall::rules::out::munin
}
}
diff --git a/manifests/host/cgi.pp b/manifests/host/cgi.pp
index 0c11d32..9951a48 100644
--- a/manifests/host/cgi.pp
+++ b/manifests/host/cgi.pp
@@ -1,15 +1,27 @@
-class munin::host::cgi {
-
+# Set up a munin host using CGI rendering
+class munin::host::cgi(
+ $owner = 'os_default'
+) {
case $::operatingsystem {
debian,ubuntu: {
- $apache_user = 'www-data'
$document_root = '/var/www/munin'
}
default: {
- $apache_user = 'apache'
$document_root = '/var/www/html/munin'
}
}
+ if $owner == 'os_default' {
+ case $::operatingsystem {
+ debian,ubuntu: {
+ $apache_user = 'www-data'
+ }
+ default: {
+ $apache_user = 'apache'
+ }
+ }
+ } else {
+ $apache_user = $owner
+ }
exec{'set_modes_for_cgi':
command => "chgrp ${apache_user} /var/log/munin /var/log/munin/munin-graph.log && chmod g+w /var/log/munin /var/log/munin/munin-graph.log && find ${document_root}/* -maxdepth 1 -type d -exec chgrp -R ${apache_user} {} \; && find ${document_root}/* -maxdepth 1 -type d -exec chmod -R g+w {} \;",
@@ -18,11 +30,9 @@ class munin::host::cgi {
}
file{'/etc/logrotate.d/munin':
- source => [ "puppet:///modules/site_munin/config/host/${::fqdn}/logrotate",
- "puppet:///modules/site_munin/config/host/logrotate.${::operatingsystem}",
- "puppet:///modules/site_munin/config/host/logrotate",
- "puppet:///modules/munin/config/host/logrotate.${::operatingsystem}",
- "puppet:///modules/munin/config/host/logrotate" ],
- owner => root, group => 0, mode => 0644;
+ content => template("${module_name}/logrotate.conf.erb"),
+ owner => root,
+ group => 0,
+ mode => '0644',
}
}
diff --git a/manifests/init.pp b/manifests/init.pp
index b015521..367ba8f 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -4,7 +4,7 @@
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
#
# Copyright 2008, Puzzle ITC GmbH
-# Marcel Härry haerry+puppet(at)puzzle.ch
+# Marcel Haerry haerry+puppet(at)puzzle.ch
# Simon Josi josi+puppet(at)puzzle.ch
#
# This program is free software; you can redistribute
@@ -12,5 +12,40 @@
# General Public License version 3 as published by
# the Free Software Foundation.
#
-# the port is a parameter so vservers can share
-# IP addresses and still be happy
+# Parameters:
+# $is_server - determines whether or not to install munin server. munin-node is
+# required for the server so it is always installed.
+# $export_tag - tag exported resources so that only the server targeted by that
+# tag will collect them. This can let you install multiple munin
+# servers.
+#
+# Client-specific parameters:
+# $allow, $host, $host_name, $port, $use_ssh, $manage_shorewall,
+# $shorewall_collector_source, $description, $munin_group
+#
+# Server-specific parameters:
+# $cgi_graphing, cgi_owner
+
+class munin (
+ $is_server = false,
+ $export_tag = 'munin',
+ $allow = [ '127.0.0.1' ],
+ $host = '*',
+ $host_name = $::fqdn,
+ $port = '4949',
+ $use_ssh = false,
+ $manage_shorewall = false,
+ $shorewall_collector_source = 'net',
+ $description = 'absent',
+ $munin_group = 'absent',
+ $cgi_graphing = false,
+ $cgi_owner = 'os_default',
+ $if_filter = 'eth\d+_\d+|sit0|virbr\d+_nic|vif\d+_\d+|veth\d+|vnet\d+|__tmp\d+',
+) {
+
+ include munin::client
+
+ if $is_server {
+ include munin::host
+ }
+}
diff --git a/manifests/plugin.pp b/manifests/plugin.pp
index ffe5452..50b861b 100644
--- a/manifests/plugin.pp
+++ b/manifests/plugin.pp
@@ -1,55 +1,43 @@
# configure a specific munin plugin
+#
+# We only manage the plugin if it is not set to absent.
+# A plugin (or its config) that should be removed should
+# be purged by the recursively managed plugins- or
+# config-directory. So we can safe a few resources being
+# managed.
define munin::plugin (
$ensure = 'present',
$script_path_in = '',
- $config = ''
+ $config = '',
) {
- include munin::plugin::scriptpaths
- $real_script_path = $script_path_in ? { '' => $munin::plugin::scriptpaths::script_path, default => $script_path_in }
-
- $plugin_src = $ensure ? { 'present' => $name, default => $ensure }
- $plugin = "/etc/munin/plugins/${name}"
- $plugin_conf = "/etc/munin/plugin-conf.d/${name}.conf"
+ if $ensure != 'absent' {
+ include munin::plugin::scriptpaths
+ include munin::plugins::setup
+ $real_script_path = $script_path_in ? {
+ '' => $munin::plugin::scriptpaths::script_path,
+ default => $script_path_in
+ }
+ $plugin_src = $ensure ? {
+ 'present' => $name,
+ default => $ensure
+ }
- include munin::plugins::setup
- case $ensure {
- 'absent': {
- file { $plugin: ensure => absent, }
+ file { "/etc/munin/plugins/${name}":
+ ensure => link,
+ target =>"${real_script_path}/${plugin_src}",
+ notify => Service['munin-node'];
}
- default: {
- $dep = $::kernel ? {
- OpenBSD => File['/var/run/munin'],
- default => Package['munin-node']
- }
- file { $plugin:
- ensure => "${real_script_path}/${plugin_src}",
- require => $dep,
- notify => Service['munin-node'];
+ if (str2bool($::selinux) == true) and (($::operatingsystem != 'CentOS') or ($::operatingsystem == 'CentOS' and $::operatingsystemmajrelease != '5')){
+ File["/etc/munin/plugins/${name}"]{
+ seltype => 'munin_etc_t',
}
- if ($::selinux == 'true') and (($::operatingsystem != 'CentOS') or ($::operatingsystem == 'CentOS' and $::lsbmajdistrelease != '5')){
- File[$plugin]{
- seltype => 'munin_etc_t',
- }
- }
- }
- }
- case $config {
- '': {
- file { $plugin_conf: ensure => absent }
}
- default: {
- case $ensure {
- absent: {
- file { $plugin_conf: ensure => absent }
- }
- default: {
- file { $plugin_conf:
- content => "[${name}]\n${config}\n",
- owner => root,
- group => 0,
- mode => '0640',
- }
- }
+ if !empty($config) {
+ file { "/etc/munin/plugin-conf.d/${name}.conf":
+ content => inline_template("[<%= @name %>]\n<%= Array(@config).join(\"\n\") %>\n"),
+ owner => root,
+ group => 0,
+ mode => '0640',
}
}
}
diff --git a/manifests/plugin/deploy.pp b/manifests/plugin/deploy.pp
index cbf64fb..2ffd92e 100644
--- a/manifests/plugin/deploy.pp
+++ b/manifests/plugin/deploy.pp
@@ -3,7 +3,8 @@ define munin::plugin::deploy(
$ensure = 'present',
$source = '',
$config = '',
- $seltype = 'munin_exec_t'
+ $seltype = 'munin_unconfined_plugin_exec_t',
+ $register = true,
) {
$plugin_src = $ensure ? {
'present' => $name,
@@ -23,7 +24,7 @@ define munin::plugin::deploy(
mode => '0755';
}
- if ($::selinux == 'true') and (($::operatingsystem != 'CentOS') or ($::operatingsystem == 'CentOS' and $::lsbmajdistrelease != '5')){
+ if (str2bool($::selinux) == true) and (($::operatingsystem != 'CentOS') or ($::operatingsystem == 'CentOS' and $::operatingsystemmajrelease > '5')){
File["munin_plugin_${name}"]{
seltype => $seltype,
}
@@ -36,9 +37,12 @@ define munin::plugin::deploy(
File["munin_plugin_${name}"]{
require => $basic_require,
}
- # register the plugin
- munin::plugin{$name:
- ensure => $ensure,
- config => $config
+
+ # register the plugin if required
+ if ($register) {
+ munin::plugin{$name:
+ ensure => $ensure,
+ config => $config
+ }
}
}
diff --git a/manifests/plugin/scriptpaths.pp b/manifests/plugin/scriptpaths.pp
index 2cad97b..62dd77b 100644
--- a/manifests/plugin/scriptpaths.pp
+++ b/manifests/plugin/scriptpaths.pp
@@ -1,12 +1,10 @@
+# Determine the script path for each OS
class munin::plugin::scriptpaths {
case $::operatingsystem {
- gentoo: { $script_path = "/usr/libexec/munin/plugins" }
- debian: { $script_path = "/usr/share/munin/plugins" }
- centos: { $script_path = "/usr/share/munin/plugins" }
- openbsd: { $script_path = $::operatingsystemrelease ? {
- '4.3' => '/opt/munin/lib/plugins/',
- default => '/usr/local/libexec/munin/plugins/'
- } }
- default: { $script_path = "/usr/share/munin/plugins" }
+ gentoo: { $script_path = '/usr/libexec/munin/plugins' }
+ debian: { $script_path = '/usr/share/munin/plugins' }
+ centos: { $script_path = '/usr/share/munin/plugins' }
+ openbsd: { $script_path = '/usr/local/libexec/munin/plugins/' }
+ default: { $script_path = '/usr/share/munin/plugins' }
}
}
diff --git a/manifests/plugins/base.pp b/manifests/plugins/base.pp
index c6b88ed..33cd84d 100644
--- a/manifests/plugins/base.pp
+++ b/manifests/plugins/base.pp
@@ -1,29 +1,33 @@
+# A basic set of plugins
class munin::plugins::base {
# setup basic plugins
munin::plugin {
- [ df, cpu, interrupts, load, memory, netstat, open_files,
- processes, swap, uptime, users, vmstat ]:
+ [ 'df', 'cpu', 'interrupts', 'load', 'memory', 'netstat', 'open_files',
+ 'processes', 'swap', 'uptime', 'users', 'vmstat' ]:
ensure => present,
}
file{'/etc/munin/plugin-conf.d/df':
content => "[df*]\nenv.exclude none unknown iso9660 squashfs udf romfs ramfs debugfs binfmt_misc rpc_pipefs fuse.gvfs-fuse-daemon\n",
- require => Munin::Plugin[df],
- owner => root, group => 0, mode => 0644;
+ require => Munin::Plugin['df'],
+ owner => 'root',
+ group => 0,
+ mode => '0644',
}
include munin::plugins::interfaces
case $::kernel {
openbsd: { include munin::plugins::openbsd }
linux: {
- case $vserver {
+ case $::vserver {
guest: { include munin::plugins::vserver }
default: { include munin::plugins::linux }
}
}
}
-
+
case $::virtual {
physical: { include munin::plugins::physical }
xen0: { include munin::plugins::dom0 }
+ default: { }
}
}
diff --git a/manifests/plugins/centos.pp b/manifests/plugins/centos.pp
deleted file mode 100644
index 60c706c..0000000
--- a/manifests/plugins/centos.pp
+++ /dev/null
@@ -1,3 +0,0 @@
-class munin::plugins::centos inherits munin::plugins::base {
- munin::plugin { users: ensure => present; }
-}
diff --git a/manifests/plugins/debian.pp b/manifests/plugins/debian.pp
index f756150..efa922b 100644
--- a/manifests/plugins/debian.pp
+++ b/manifests/plugins/debian.pp
@@ -1 +1,2 @@
+# Debian specific plugins
class munin::plugins::debian { }
diff --git a/manifests/plugins/djbdns.pp b/manifests/plugins/djbdns.pp
index c0a5163..de3936b 100644
--- a/manifests/plugins/djbdns.pp
+++ b/manifests/plugins/djbdns.pp
@@ -1,3 +1,4 @@
-class munin::plugins::djbdns {
- munin::plugin::deploy { "tinydns": }
+# Set up the djbdns plugin
+class munin::plugins::djbdns {
+ munin::plugin::deploy { 'tinydns': }
}
diff --git a/manifests/plugins/dom0.pp b/manifests/plugins/dom0.pp
index 44995fc..98aee1d 100644
--- a/manifests/plugins/dom0.pp
+++ b/manifests/plugins/dom0.pp
@@ -1,3 +1,4 @@
+# Set up plugins for a Xen dom0 host
class munin::plugins::dom0 {
munin::plugin::deploy {
[ 'xen', 'xen_cpu', 'xen_memory', 'xen_mem',
diff --git a/manifests/plugins/gentoo.pp b/manifests/plugins/gentoo.pp
index 27d4689..36f2370 100644
--- a/manifests/plugins/gentoo.pp
+++ b/manifests/plugins/gentoo.pp
@@ -1,4 +1,5 @@
-class munin::plugins::gentoo {
+# Set up the plugins for a gentoo host
+class munin::plugins::gentoo {
munin::plugin::deploy { 'gentoo_lastupdated':
config => "user portage\nenv.logfile /var/log/emerge.log\nenv.tail /usr/bin/tail\nenv.grep /bin/grep"
}
diff --git a/manifests/plugins/interfaces.pp b/manifests/plugins/interfaces.pp
index da89ed0..2bbc1c6 100644
--- a/manifests/plugins/interfaces.pp
+++ b/manifests/plugins/interfaces.pp
@@ -1,25 +1,21 @@
# handle if_ and if_err_ plugins
-class munin::plugins::interfaces {
+class munin::plugins::interfaces {
# filter out many of the useless interfaces that show up
- $real_ifs = reject(split($::interfaces, ' |,'), 'eth\d+_\d+|sit0|virbr\d+_nic|vif\d+_\d+|veth\d+|__tmp\d+')
- $ifs = regsubst($real_ifs, '(.+)', "if_\\1")
+ $real_ifs = reject(split($::interfaces, ' |,'), $munin::if_filter)
+ $ifs = prefix($real_ifs, 'if_')
- munin::plugin {
- $ifs: ensure => 'if_';
+ $if_err_plugin = $::operatingsystem ? {
+ 'openbsd' => 'if_errcoll_',
+ default => 'if_err_',
}
- case $::operatingsystem {
- openbsd: {
- $if_errs = regsubst($real_ifs, '(.+)', "if_errcoll_\\1")
- munin::plugin{
- $if_errs: ensure => 'if_errcoll_';
- }
- }
- default: {
- $if_errs = regsubst($real_ifs, '(.+)', "if_err_\\1")
- munin::plugin{
- $if_errs: ensure => 'if_err_';
- }
- }
+ $if_errs = prefix($real_ifs, $if_err_plugin)
+
+ munin::plugin { $ifs:
+ ensure => 'if_',
+ }
+
+ munin::plugin { $if_errs:
+ ensure => $if_err_plugin,
}
}
diff --git a/manifests/plugins/kvm.pp b/manifests/plugins/kvm.pp
index 7a1430f..650e5ef 100644
--- a/manifests/plugins/kvm.pp
+++ b/manifests/plugins/kvm.pp
@@ -1,3 +1,4 @@
+# Set up munin plugins for a KVM host
class munin::plugins::kvm {
munin::plugin::deploy {
[ 'kvm_cpu', 'kvm_mem', 'kvm_net' ]:;
diff --git a/manifests/plugins/linux.pp b/manifests/plugins/linux.pp
index a73de63..354d23c 100644
--- a/manifests/plugins/linux.pp
+++ b/manifests/plugins/linux.pp
@@ -1,8 +1,10 @@
-class munin::plugins::linux {
+# Set up plugins for a linux host
+class munin::plugins::linux {
munin::plugin {
- [ df_abs, forks, df_inode, irqstats, entropy, open_inodes ]:
+ [ 'df_abs', 'forks', 'df_inode', 'irqstats', 'entropy', 'open_inodes',
+ 'diskstats', 'proc_pri', 'threads', ]:
ensure => present;
- acpi:
+ 'acpi':
ensure => $::acpi_available;
}
}
diff --git a/manifests/plugins/muninhost.pp b/manifests/plugins/muninhost.pp
index e4fb87d..644adb6 100644
--- a/manifests/plugins/muninhost.pp
+++ b/manifests/plugins/muninhost.pp
@@ -1,3 +1,4 @@
-class munin::plugins::muninhost {
+# Set up the plugins for a munin host
+class munin::plugins::muninhost {
munin::plugin { ['munin_update', 'munin_graph']: }
}
diff --git a/manifests/plugins/openbsd.pp b/manifests/plugins/openbsd.pp
index b549994..c195a1d 100644
--- a/manifests/plugins/openbsd.pp
+++ b/manifests/plugins/openbsd.pp
@@ -1,6 +1,7 @@
-class munin::plugins::openbsd {
+# Set up the plugins for an openbsd host
+class munin::plugins::openbsd {
munin::plugin {
- [ memory_pools, memory_types ]:
+ [ 'memory_pools', 'memory_types' ]:
ensure => present,
}
}
diff --git a/manifests/plugins/physical.pp b/manifests/plugins/physical.pp
index a1c27a7..b04845c 100644
--- a/manifests/plugins/physical.pp
+++ b/manifests/plugins/physical.pp
@@ -1,5 +1,7 @@
-class munin::plugins::physical {
+# Set up the plugins for a physical machine
+class munin::plugins::physical {
case $::kernel {
- linux: { munin::plugin { iostat: } }
+ linux: { munin::plugin { 'iostat': } }
+ default: {}
}
}
diff --git a/manifests/plugins/selinux.pp b/manifests/plugins/selinux.pp
index d094f35..9e03f0a 100644
--- a/manifests/plugins/selinux.pp
+++ b/manifests/plugins/selinux.pp
@@ -1,3 +1,4 @@
+# SELinux specific plugins
class munin::plugins::selinux {
munin::plugin{ [ 'selinux_avcstat' ]: }
}
diff --git a/manifests/plugins/setup.pp b/manifests/plugins/setup.pp
index 197b657..a3f3b22 100644
--- a/manifests/plugins/setup.pp
+++ b/manifests/plugins/setup.pp
@@ -1,14 +1,13 @@
+# Set up the munin plugins for a node
class munin::plugins::setup {
- # This is required for the munin-node service and package requirements below.
- include munin::client
-
file {
[ '/etc/munin/plugins', '/etc/munin/plugin-conf.d' ]:
- ignore => 'snmp_*',
ensure => directory,
+ require => Package['munin-node'],
+ ignore => 'snmp_*',
checksum => mtime,
- recurse => true,
+ recurse => true,
purge => true,
force => true,
notify => Service['munin-node'],
@@ -22,16 +21,4 @@ class munin::plugins::setup {
group => 0,
mode => '0640';
}
- case $::kernel {
- openbsd: {
- File['/etc/munin/plugin-conf.d/munin-node']{
- before => File['/var/run/munin'],
- }
- }
- default: {
- File['/etc/munin/plugin-conf.d/munin-node']{
- before => Package['munin-node'],
- }
- }
- }
}
diff --git a/manifests/plugins/vserver.pp b/manifests/plugins/vserver.pp
index e3eec05..5dc6431 100644
--- a/manifests/plugins/vserver.pp
+++ b/manifests/plugins/vserver.pp
@@ -1,7 +1,7 @@
+# vserver specific plugins
class munin::plugins::vserver {
munin::plugin {
- [ netstat, processes ]:
+ [ 'netstat', 'processes' ]:
ensure => present;
}
}
-
diff --git a/manifests/register.pp b/manifests/register.pp
index 309c322..8c1ec61 100644
--- a/manifests/register.pp
+++ b/manifests/register.pp
@@ -1,10 +1,12 @@
+# Register a munin client
define munin::register (
- $host = $::fqdn,
- $port = '4949',
- $use_ssh = false,
- $description = 'absent',
- $config = [],
- $export_tag = 'munin'
+ $host = $::fqdn,
+ $port = '4949',
+ $use_ssh = false,
+ $description = 'absent',
+ $config = [],
+ $export_tag = 'munin',
+ $group = 'absent',
)
{
$fhost = $name
@@ -12,7 +14,7 @@ define munin::register (
@@concat::fragment{ "munin_client_${fhost}_${port}":
target => '/etc/munin/munin.conf',
- content => template("munin/client.erb"),
+ content => template('munin/client.erb'),
tag => $export_tag,
}
}
diff --git a/manifests/register/snmp.pp b/manifests/register/snmp.pp
index 78c3e91..8d7ea56 100644
--- a/manifests/register/snmp.pp
+++ b/manifests/register/snmp.pp
@@ -1,21 +1,24 @@
+# Register a munin node with snmp enabled
define munin::register::snmp (
- $community = 'public',
+ $community = 'public',
$description = 'absent',
- $port = '4949',
- $host = $::fqdn
+ $port = '4949',
+ $host = $::fqdn,
+ $group = 'absent',
+ $version = '2',
) {
$fhost = $name
$client_type = 'snmp'
$config = [ 'use_node_name no' ]
exec { "munin_register_snmp_${fhost}":
- command => "munin-node-configure --snmp ${fhost} --snmpcommunity ${community} --shell | sh",
- unless => "ls /etc/munin/plugins/snmp_${fhost}_* &> /dev/null",
+ command => "munin-node-configure --snmp ${fhost} --snmpcommunity ${community} --snmpversion ${version} --shell | sh",
+ unless => "ls /etc/munin/plugins/snmp_${fhost}_* &> /dev/null",
}
@@concat::fragment{ "munin_snmp_${fhost}":
- target => '/etc/munin/munin.conf',
- content => template("munin/client.erb"),
- tag => 'munin',
+ target => '/etc/munin/munin.conf',
+ content => template('munin/client.erb'),
+ tag => 'munin',
}
}
diff --git a/manifests/remoteplugin.pp b/manifests/remoteplugin.pp
index 603cb66..dc03c76 100644
--- a/manifests/remoteplugin.pp
+++ b/manifests/remoteplugin.pp
@@ -1,16 +1,23 @@
-define munin::remoteplugin($ensure = "present", $source, $config = '') {
+# Configure a munin remote plugin
+define munin::remoteplugin(
+ $source,
+ $ensure = 'present',
+ $config = ''
+) {
case $ensure {
- "absent": { munin::plugin{ $name: ensure => absent } }
+ 'absent': { munin::plugin{ $name: ensure => absent } }
default: {
file {
"/var/lib/puppet/modules/munin/plugins/${name}":
source => $source,
- mode => 0755, owner => root, group => 0;
+ mode => '0755',
+ owner => root,
+ group => 0,
}
munin::plugin { $name:
- ensure => $ensure,
- config => $config,
- script_path_in => "/var/lib/puppet/modules/munin/plugins",
+ ensure => $ensure,
+ config => $config,
+ script_path_in => '/var/lib/puppet/modules/munin/plugins',
}
}
}
diff --git a/manifests/snmp_collector.pp b/manifests/snmp_collector.pp
index 0f8318a..4ff3bf9 100644
--- a/manifests/snmp_collector.pp
+++ b/manifests/snmp_collector.pp
@@ -1,14 +1,17 @@
+# Set up munin as an SNMP collector
class munin::snmp_collector{
- file {
- "/var/lib/puppet/modules/munin/create_snmp_links":
- source => "puppet:///modules/munin/create_snmp_links.sh",
- mode => 755, owner => root, group => 0;
- }
+ file {
+ '/var/lib/puppet/modules/munin/create_snmp_links':
+ source => 'puppet:///modules/munin/create_snmp_links.sh',
+ mode => '0755',
+ owner => root,
+ group => 0,
+ }
- exec { "create_snmp_links":
- command => "/var/lib/puppet/modules/munin/create_snmp_links /var/lib/puppet/modules/munin/nodes",
- require => File["snmp_links"],
- timeout => "2048",
- schedule => daily
+ exec { 'create_snmp_links':
+ command => '/var/lib/puppet/modules/munin/create_snmp_links /var/lib/puppet/modules/munin/nodes',
+ require => File['snmp_links'],
+ timeout => '2048',
+ schedule => daily,
}
}
diff --git a/metadata.json b/metadata.json
new file mode 100644
index 0000000..f761002
--- /dev/null
+++ b/metadata.json
@@ -0,0 +1,16 @@
+{
+ "name": "duritong-munin",
+ "version": "0.0.4",
+ "author": "duritong",
+ "summary": "Puppet module for Munin monitoring",
+ "license": "Apache License, Version 2.0",
+ "source": "git://github.com/duritong/puppet-munin.git",
+ "project_page": "https://github.com/duritong/puppet-munin",
+ "issues_url": "https://github.com/duritong/puppet-munin/issues",
+ "description": "Munin is a performance monitoring system which creates nice RRD graphs and has a very easy plugin interface",
+ "dependencies": [
+ {"name":"puppetlabs/concat","version_requirement":">= 1.1.0"},
+ {"name":"puppetlabs/stdlib","version_requirement":">= 3.2.0"},
+ {"name":"duritong/openbsd","version_requirement":">= 0.0.1"}
+ ]
+}
diff --git a/spec/classes/munin_client_base_spec.rb b/spec/classes/munin_client_base_spec.rb
new file mode 100644
index 0000000..fdf1403
--- /dev/null
+++ b/spec/classes/munin_client_base_spec.rb
@@ -0,0 +1,86 @@
+require 'spec_helper'
+
+describe 'munin::client::base' do
+ let :default_facts do
+ {
+ :fqdn => 'munin-node.example.org',
+ }
+ end
+
+ let :pre_condition do
+ 'include munin::client'
+ end
+
+ context 'on Debian' do
+ let :facts do
+ { :osfamily => 'Debian' }.merge(default_facts)
+ end
+
+ it 'should compile' do
+ should contain_class('munin::client::base')
+ end
+
+ it 'should set up munin-node' do
+ should contain_service('munin-node').with({
+ :ensure => 'running',
+ :enable => true,
+ :hasstatus => true,
+ :hasrestart => true,
+ })
+
+ should contain_file('/etc/munin').with({
+ :ensure => 'directory',
+ :mode => '0755',
+ :owner => 'root',
+ :group => 0,
+ })
+
+ should contain_file('/etc/munin/munin-node.conf').
+ with_content(/^host_name munin-node.example.org$/).
+ with_content(/^allow \^127\\\.0\\\.0\\\.1\$$/).
+ with_content(/^host \*$/).
+ with_content(/^port 4949$/)
+
+ should contain_munin__register('munin-node.example.org').with({
+ :host => 'munin-node.example.org',
+ :port => '4949',
+ :use_ssh => false,
+ :config => [ 'use_node_name yes', 'load.load.warning 5', 'load.load.critical 10'],
+ :export_tag => 'munin',
+ })
+
+ should contain_class('munin::plugins::base')
+ end
+
+ it 'should contain the Debian specific values' do
+ should contain_file('/etc/munin/munin-node.conf').
+ with_content(/^log_file \/var\/log\/munin\/munin-node.log$/).
+ with_content(/^group root$/)
+ end
+ end
+
+ context 'on CentOS' do
+ let :facts do
+ { :osfamily => 'CentOS' }.merge(default_facts)
+ end
+
+ it 'should contain the CentOS specific values' do
+ should contain_file('/etc/munin/munin-node.conf').
+ with_content(/^log_file \/var\/log\/munin-node\/munin-node.log$/).
+ with_content(/^group root$/)
+ end
+ end
+
+ # Disabled because the required openbsd module is not in the requirements
+ context 'on OpenBSD', :if => false do
+ let :facts do
+ { :osfamily => 'OpenBSD' }.merge(default_facts)
+ end
+
+ it 'should contain the config OpenBSD specific values' do
+ should contain_file('/etc/munin/munin-node.conf').
+ with_content(/^log_file \/var\/log\/munin-node\/munin-node.log$/).
+ with_content(/^group 0$/)
+ end
+ end
+end
diff --git a/spec/classes/munin_client_spec.rb b/spec/classes/munin_client_spec.rb
new file mode 100644
index 0000000..f7fc5e9
--- /dev/null
+++ b/spec/classes/munin_client_spec.rb
@@ -0,0 +1,50 @@
+require 'spec_helper'
+
+describe 'munin::client' do
+ shared_examples 'debian-client' do |os, codename|
+ let(:facts) {{
+ :operatingsystem => os,
+ :osfamily => 'Debian',
+ :lsbdistcodename => codename,
+ }}
+ it { should contain_package('munin-node') }
+ it { should contain_package('iproute') }
+ it { should contain_file('/etc/munin/munin-node.conf') }
+ it { should contain_class('munin::client::debian') }
+ end
+
+ shared_examples 'redhat-client' do |os, codename|
+ let(:facts) {{
+ :operatingsystem => os,
+ :osfamily => 'RedHat',
+ :lsbdistcodename => codename,
+ }}
+ it { should contain_package('munin-node') }
+ it { should contain_file('/etc/munin/munin-node.conf') }
+ end
+
+ context 'on debian-like system' do
+ it_behaves_like 'debian-client', 'Debian', 'squeeze'
+ it_behaves_like 'debian-client', 'Debian', 'wheezy'
+ it_behaves_like 'debian-client', 'Ubuntu', 'precise'
+ end
+
+ context 'on redhat-like system' do
+ it_behaves_like 'redhat-client', 'CentOS', '6'
+ # not supported yet
+ # it_behaves_like 'redhat', 'RedHat', '6'
+ end
+
+ context 'gentoo' do
+ let(:facts) {{
+ :operatingsystem => 'Gentoo',
+ :osfamily => 'Gentoo',
+ :lsbdistcodename => '',
+ :interfaces => 'lo,eth0',
+ }}
+ it { should contain_package('munin-node') }
+ it { should contain_file('/etc/munin/munin-node.conf') }
+ it { should contain_class('munin::client::gentoo') }
+ end
+
+end
diff --git a/spec/classes/munin_host_cgi_spec.rb b/spec/classes/munin_host_cgi_spec.rb
new file mode 100644
index 0000000..52c5c22
--- /dev/null
+++ b/spec/classes/munin_host_cgi_spec.rb
@@ -0,0 +1,57 @@
+require 'spec_helper'
+
+describe 'munin::host::cgi' do
+ #let :pre_condition do
+ # 'include munin::client'
+ #end
+
+ context 'on Debian' do
+ let :facts do
+ { :operatingsystem => 'Debian' }
+ end
+
+ it 'should compile' do
+ should contain_class('munin::host::cgi')
+ end
+
+ it 'should exec set_modes_for_cgi' do
+ should contain_exec('set_modes_for_cgi').with({
+ :command => 'chgrp www-data /var/log/munin /var/log/munin/munin-graph.log && chmod g+w /var/log/munin /var/log/munin/munin-graph.log && find /var/www/munin/* -maxdepth 1 -type d -exec chgrp -R www-data {} \; && find /var/www/munin/* -maxdepth 1 -type d -exec chmod -R g+w {} \;',
+ :refreshonly => true,
+ :subscribe => 'Concat::Fragment[munin.conf.header]',
+ })
+ end
+
+ it 'should contain logrotate.conf' do
+ should contain_file('/etc/logrotate.d/munin').with({
+ :content => /^ create 660 munin www-data$/,
+ :group => 0,
+ :mode => '0644',
+ :owner => 'root',
+ })
+ end
+ end
+
+ context 'on CentOS' do
+ let :facts do
+ { :operatingsystem => 'CentOS' }
+ end
+
+ it 'should exec set_modes_for_cgi' do
+ should contain_exec('set_modes_for_cgi').with({
+ :command => 'chgrp apache /var/log/munin /var/log/munin/munin-graph.log && chmod g+w /var/log/munin /var/log/munin/munin-graph.log && find /var/www/html/munin/* -maxdepth 1 -type d -exec chgrp -R apache {} \; && find /var/www/html/munin/* -maxdepth 1 -type d -exec chmod -R g+w {} \;',
+ :refreshonly => true,
+ :subscribe => 'Concat::Fragment[munin.conf.header]',
+ })
+ end
+
+ it 'should contain logrotate.conf' do
+ should contain_file('/etc/logrotate.d/munin').with({
+ :content => /^ create 660 munin apache$/,
+ :group => 0,
+ :mode => '0644',
+ :owner => 'root',
+ })
+ end
+ end
+end
diff --git a/spec/classes/munin_host_spec.rb b/spec/classes/munin_host_spec.rb
new file mode 100644
index 0000000..df002ce
--- /dev/null
+++ b/spec/classes/munin_host_spec.rb
@@ -0,0 +1,47 @@
+require 'spec_helper'
+
+describe 'munin::host' do
+ shared_examples 'debian-host' do |os, codename|
+ let(:facts) {{
+ :operatingsystem => os,
+ :osfamily => 'Debian',
+ :lsbdistcodename => codename,
+ :concat_basedir => '/var/lib/puppet/concat',
+ }}
+ it { should contain_package('munin') }
+ it { should contain_file('/etc/munin/munin.conf') }
+ it { should contain_class('munin::host') }
+ end
+
+ shared_examples 'redhat-host' do |os, codename|
+ let(:facts) {{
+ :operatingsystem => os,
+ :osfamily => 'RedHat',
+ :lsbdistcodename => codename,
+ :concat_basedir => '/var/lib/puppet/concat',
+ }}
+ it { should contain_package('munin') }
+ it { should contain_file('/etc/munin/munin.conf') }
+ it { should contain_class('munin::host') }
+ end
+
+ context 'on debian-like system' do
+ it_behaves_like 'debian-host', 'Debian', 'squeeze'
+ it_behaves_like 'debian-host', 'Debian', 'wheezy'
+ it_behaves_like 'debian-host', 'Ubuntu', 'precise'
+ end
+
+ context 'on redhat-like system' do
+ it_behaves_like 'redhat-host', 'CentOS', '6'
+ end
+
+ context 'on Gentoo' do
+ let(:facts) {{
+ :osfamily => 'Gentoo',
+ :concat_basedir => '/var/lib/puppet/concat',
+ }}
+ it { should contain_package('munin') }
+ it { should contain_file('/etc/munin/munin.conf') }
+ it { should contain_class('munin::host') }
+ end
+end
diff --git a/spec/classes/munin_plugins_interfaces_spec.rb b/spec/classes/munin_plugins_interfaces_spec.rb
new file mode 100644
index 0000000..7e3c418
--- /dev/null
+++ b/spec/classes/munin_plugins_interfaces_spec.rb
@@ -0,0 +1,44 @@
+require 'spec_helper'
+
+describe 'munin::plugins::interfaces' do
+ context 'on CentOS' do
+ let :facts do
+ {
+ :operatingsystem => 'CentOS',
+ :interfaces => 'lo,eth0,sit0',
+ }
+ end
+
+ it 'should compile' do
+ should contain_class('munin::plugins::interfaces')
+ end
+
+ it 'should create plugins for each interface' do
+ # lo
+ should contain_munin__plugin('if_lo').with_ensure('if_')
+ should contain_munin__plugin('if_err_lo').with_ensure('if_err_')
+
+ # eth0
+ should contain_munin__plugin('if_eth0').with_ensure('if_')
+ should contain_munin__plugin('if_err_eth0').with_ensure('if_err_')
+ end
+
+ it 'should not create plugins for sit0' do
+ should_not contain_munin__plugin('if_sit0')
+ should_not contain_munin__plugin('if_err_sit0')
+ end
+ end
+
+ context 'on OpenBSD' do
+ let :facts do
+ {
+ :operatingsystem => 'OpenBSD',
+ :interfaces => 'eth0',
+ }
+ end
+
+ it 'should use if_errcoll_ instead of if_err_' do
+ should contain_munin__plugin('if_errcoll_eth0').with_ensure('if_errcoll_')
+ end
+ end
+end
diff --git a/spec/defines/munin_plugin_spec.rb b/spec/defines/munin_plugin_spec.rb
new file mode 100644
index 0000000..0e7306a
--- /dev/null
+++ b/spec/defines/munin_plugin_spec.rb
@@ -0,0 +1,57 @@
+require 'spec_helper'
+
+describe 'munin::plugin' do
+ let(:title) { 'users' }
+ let(:facts) do
+ { :operatingsystem => 'CentOS' }
+ end
+ context 'present' do
+ it { should contain_file('/etc/munin/plugins/users').with(
+ :ensure => 'link',
+ :target => '/usr/share/munin/plugins/users'
+ ) }
+ it { should_not contain_file('/etc/munin/plugin-conf.d/users.conf') }
+ end
+
+ context 'present and config' do
+ let(:params) do
+ { :config => 'env.user root' }
+ end
+ it { should contain_file('/etc/munin/plugins/users').with(
+ :ensure => 'link',
+ :target => '/usr/share/munin/plugins/users',
+ :notify => 'Service[munin-node]'
+ ) }
+ it { should contain_file('/etc/munin/plugin-conf.d/users.conf').with(
+ :content => "[users]\nenv.user root\n",
+ :owner => 'root',
+ :group => 0,
+ :mode => '0640'
+ ) }
+ end
+
+ context 'present and config as an array' do
+ let(:params) do
+ { :config => [ 'env.user root', 'env.group root' ] }
+ end
+ it { should contain_file('/etc/munin/plugins/users').with(
+ :ensure => 'link',
+ :target => '/usr/share/munin/plugins/users',
+ :notify => 'Service[munin-node]'
+ ) }
+ it { should contain_file('/etc/munin/plugin-conf.d/users.conf').with(
+ :content => "[users]\nenv.user root\nenv.group root\n",
+ :owner => 'root',
+ :group => 0,
+ :mode => '0640'
+ ) }
+ end
+
+ context 'absent' do
+ let(:params) do
+ { :ensure => 'absent' }
+ end
+ it { should_not contain_file('/etc/munin/plugins/users') }
+ it { should_not contain_file('/etc/munin/plugin-conf.d/users.conf') }
+ end
+end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
new file mode 100644
index 0000000..70ab1fb
--- /dev/null
+++ b/spec/spec_helper.rb
@@ -0,0 +1,11 @@
+require 'puppetlabs_spec_helper/module_spec_helper'
+
+fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures'))
+
+RSpec.configure do |c|
+ c.module_path = File.join(fixture_path, 'modules')
+ c.manifest_dir = File.join(fixture_path, 'manifests')
+end
+
+Puppet::Util::Log.level = :warning
+Puppet::Util::Log.newdestination(:console)
diff --git a/spec/spec_helper_system.rb b/spec/spec_helper_system.rb
new file mode 100644
index 0000000..9adfea9
--- /dev/null
+++ b/spec/spec_helper_system.rb
@@ -0,0 +1,27 @@
+require 'rspec-system/spec_helper'
+require 'rspec-system-puppet/helpers'
+require 'rspec-system-serverspec/helpers'
+include Serverspec::Helper::RSpecSystem
+include Serverspec::Helper::DetectOS
+include RSpecSystemPuppet::Helpers
+
+RSpec.configure do |c|
+ # Project root
+ proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
+
+ # Enable colour
+ c.tty = true
+
+ c.include RSpecSystemPuppet::Helpers
+
+ # This is where we 'setup' the nodes before running our tests
+ c.before :suite do
+ # Install puppet
+ puppet_install
+
+ # Install modules and dependencies
+ puppet_module_install(:source => proj_root, :module_name => 'munin')
+ shell('puppet module install puppetlabs-stdlib')
+ shell('puppet module install puppetlabs-concat')
+ end
+end
diff --git a/templates/client.erb b/templates/client.erb
index ba03da5..bc42452 100644
--- a/templates/client.erb
+++ b/templates/client.erb
@@ -1,24 +1,24 @@
<%
- # Downcase all information
- dom = scope.lookupvar('::domain').downcase
- h = scope.lookupvar('::hostname').downcase
+ # Downcase all information
+ dom = scope.lookupvar('::domain').downcase
+ h = scope.lookupvar('::hostname').downcase
%>
### Munin client from Puppet template
# Domain: <%= dom %>
# Registered on: <%= h %>
-# Type: <%= client_type %>
-<% if description != 'absent' -%>
-# Description: <%= description.gsub!(/\n/, ' ') %>
+# Type: <%= @client_type %>
+<% if @description != 'absent' -%>
+# Description: <%= @description.gsub(/\n/, ' ') %>
<% end -%>
-[<%= fhost.downcase %>]
-<% if use_ssh -%>
- address ssh://<%= host %>/bin/nc localhost <%= port %>
+[<% if @group != 'absent' -%><%= @group %>;<% end -%><%= @fhost.downcase %>]
+<% if @use_ssh -%>
+ address ssh://<%= @host %>/bin/nc localhost <%= @port %>
<% else -%>
- address <%= host %>
- port <%= port %>
+ address <%= @host %>
+ port <%= @port %>
<% end -%>
-<% if config -%><% config.each do |val| -%>
- <%= val -%>
+<% if @config -%><% @config.each do |val| -%>
+ <%= @val -%>
<% end -%><% end -%>
diff --git a/files/config/host/logrotate.CentOS b/templates/logrotate.conf.erb
index 411de3f..0e3e6ca 100644
--- a/files/config/host/logrotate.CentOS
+++ b/templates/logrotate.conf.erb
@@ -13,7 +13,7 @@
rotate 7
compress
notifempty
- create 660 munin apache
+ create 660 munin <%= @apache_user %>
}
/var/log/munin/munin-html.log {
diff --git a/templates/munin-node.conf.CentOS b/templates/munin-node.conf.CentOS
deleted file mode 120000
index 082b30c..0000000
--- a/templates/munin-node.conf.CentOS
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.default \ No newline at end of file
diff --git a/templates/munin-node.conf.CentOS. b/templates/munin-node.conf.CentOS.
deleted file mode 120000
index 082b30c..0000000
--- a/templates/munin-node.conf.CentOS.
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.default \ No newline at end of file
diff --git a/templates/munin-node.conf.CentOS.5 b/templates/munin-node.conf.CentOS.5
deleted file mode 120000
index 082b30c..0000000
--- a/templates/munin-node.conf.CentOS.5
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.default \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian b/templates/munin-node.conf.Debian
deleted file mode 120000
index e0646b9..0000000
--- a/templates/munin-node.conf.Debian
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Debian.etch \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.etch b/templates/munin-node.conf.Debian.etch
deleted file mode 100644
index 9763772..0000000
--- a/templates/munin-node.conf.Debian.etch
+++ /dev/null
@@ -1,39 +0,0 @@
-##########
-########## Managed by puppet
-##########
-
-log_level 4
-log_file /var/log/munin/munin-node.log
-pid_file /var/run/munin/munin-node.pid
-background 1
-setseid 1
-
-# Which host/port to bind to;
-host <%= scope.lookupvar('munin::client::host') %>
-port <%= scope.lookupvar('munin::client::port') %>
-user root
-group root
-setsid yes
-
-# Regexps for files to ignore
-
-ignore_file ~$
-ignore_file \.bak$
-ignore_file %$
-ignore_file \.dpkg-(tmp|new|old|dist)$
-ignore_file \.rpm(save|new)$
-
-# Set this if the client doesn't report the correct hostname when
-# telnetting to localhost, port 4949
-#
-#host_name localhost.localdomain
-host_name <%= scope.lookupvar('::fqdn') %>
-
-# A list of addresses that are allowed to connect. This must be a
-# regular expression, due to brain damage in Net::Server, which
-# doesn't understand CIDR-style network notation. You may repeat
-# the allow line as many times as you'd like
-<% scope.lookupvar('munin::client::allow').each do |allow| -%>
-allow <%= "^#{Regexp.escape(allow)}$" %>
-<% end -%>
-
diff --git a/templates/munin-node.conf.Debian.feisty b/templates/munin-node.conf.Debian.feisty
deleted file mode 120000
index e0646b9..0000000
--- a/templates/munin-node.conf.Debian.feisty
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Debian.etch \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.gutsy b/templates/munin-node.conf.Debian.gutsy
deleted file mode 120000
index e0646b9..0000000
--- a/templates/munin-node.conf.Debian.gutsy
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Debian.etch \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.hardy b/templates/munin-node.conf.Debian.hardy
deleted file mode 120000
index e0646b9..0000000
--- a/templates/munin-node.conf.Debian.hardy
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Debian.etch \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.lenny b/templates/munin-node.conf.Debian.lenny
deleted file mode 100644
index 9763772..0000000
--- a/templates/munin-node.conf.Debian.lenny
+++ /dev/null
@@ -1,39 +0,0 @@
-##########
-########## Managed by puppet
-##########
-
-log_level 4
-log_file /var/log/munin/munin-node.log
-pid_file /var/run/munin/munin-node.pid
-background 1
-setseid 1
-
-# Which host/port to bind to;
-host <%= scope.lookupvar('munin::client::host') %>
-port <%= scope.lookupvar('munin::client::port') %>
-user root
-group root
-setsid yes
-
-# Regexps for files to ignore
-
-ignore_file ~$
-ignore_file \.bak$
-ignore_file %$
-ignore_file \.dpkg-(tmp|new|old|dist)$
-ignore_file \.rpm(save|new)$
-
-# Set this if the client doesn't report the correct hostname when
-# telnetting to localhost, port 4949
-#
-#host_name localhost.localdomain
-host_name <%= scope.lookupvar('::fqdn') %>
-
-# A list of addresses that are allowed to connect. This must be a
-# regular expression, due to brain damage in Net::Server, which
-# doesn't understand CIDR-style network notation. You may repeat
-# the allow line as many times as you'd like
-<% scope.lookupvar('munin::client::allow').each do |allow| -%>
-allow <%= "^#{Regexp.escape(allow)}$" %>
-<% end -%>
-
diff --git a/templates/munin-node.conf.Debian.lucid b/templates/munin-node.conf.Debian.lucid
deleted file mode 120000
index e0646b9..0000000
--- a/templates/munin-node.conf.Debian.lucid
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Debian.etch \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.sarge b/templates/munin-node.conf.Debian.sarge
deleted file mode 120000
index e0646b9..0000000
--- a/templates/munin-node.conf.Debian.sarge
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Debian.etch \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.sid b/templates/munin-node.conf.Debian.sid
deleted file mode 120000
index 6b8d690..0000000
--- a/templates/munin-node.conf.Debian.sid
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Debian.lenny \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.squeeze b/templates/munin-node.conf.Debian.squeeze
deleted file mode 120000
index 6b8d690..0000000
--- a/templates/munin-node.conf.Debian.squeeze
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Debian.lenny \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.wheezy b/templates/munin-node.conf.Debian.wheezy
deleted file mode 100644
index fe6f27f..0000000
--- a/templates/munin-node.conf.Debian.wheezy
+++ /dev/null
@@ -1,57 +0,0 @@
-##########
-########## Managed by puppet
-##########
-
-log_level 4
-log_file /var/log/munin/munin-node.log
-pid_file /var/run/munin/munin-node.pid
-
-background 1
-setsid 1
-
-user root
-group root
-
-# Regexps for files to ignore
-
-ignore_file ~$
-#ignore_file [#~]$ # FIX doesn't work. '#' starts a comment
-ignore_file DEADJOE$
-ignore_file \.bak$
-ignore_file %$
-ignore_file \.dpkg-(tmp|new|old|dist)$
-ignore_file \.rpm(save|new)$
-ignore_file \.pod$
-
-# Set this if the client doesn't report the correct hostname when
-# telnetting to localhost, port 4949
-#
-#host_name localhost.localdomain
-host_name <%= scope.lookupvar('::fqdn') %>
-
-# A list of addresses that are allowed to connect. This must be a
-# regular expression, since Net::Server does not understand CIDR-style
-# network notation unless the perl module Net::CIDR is installed. You
-# may repeat the allow line as many times as you'd like
-
-<% scope.lookupvar('munin::client::allow').each do |allow| -%>
-allow <%= "^#{Regexp.escape(allow)}$" %>
-<% end -%>
-
-# If you have installed the Net::CIDR perl module, you can use one or more
-# cidr_allow and cidr_deny address/mask patterns. A connecting client must
-# match any cidr_allow, and not match any cidr_deny. Note that a netmask
-# *must* be provided, even if it's /32
-#
-# Example:
-#
-# cidr_allow 127.0.0.1/32
-# cidr_allow 192.0.2.0/24
-# cidr_deny 192.0.2.42/32
-
-# Which address to bind to;
-host <%= scope.lookupvar('munin::client::host') %>
-
-# And which port
-port <%= scope.lookupvar('munin::client::port') %>
-
diff --git a/templates/munin-node.conf.Gentoo b/templates/munin-node.conf.Gentoo
deleted file mode 120000
index 082b30c..0000000
--- a/templates/munin-node.conf.Gentoo
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.default \ No newline at end of file
diff --git a/templates/munin-node.conf.Gentoo. b/templates/munin-node.conf.Gentoo.
deleted file mode 120000
index fd16e50..0000000
--- a/templates/munin-node.conf.Gentoo.
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Gentoo \ No newline at end of file
diff --git a/templates/munin-node.conf.OpenBSD b/templates/munin-node.conf.OpenBSD
deleted file mode 100644
index 14b658e..0000000
--- a/templates/munin-node.conf.OpenBSD
+++ /dev/null
@@ -1,59 +0,0 @@
-##########
-########## Managed by puppet
-##########
-#
-# Example config-file for munin-node
-#
-
-log_level 4
-log_file /var/log/munin/munin-node.log
-pid_file /var/run/munin/munin-node.pid
-
-background 1
-setsid 1
-
-user root
-group 0
-
-# Regexps for files to ignore
-ignore_file ~$
-ignore_file DEADJOE$
-ignore_file \.bak$
-ignore_file %$
-ignore_file \.dpkg-(tmp|new|old|dist)$
-ignore_file \.rpm(save|new)$
-ignore_file \.pod$
-
-# Set this if the client doesn't report the correct hostname when
-# telnetting to localhost, port 4949
-#
-#host_name localhost.localdomain
-host_name <%= scope.lookupvar('::fqdn') %>
-
-# A list of addresses that are allowed to connect. This must be a
-# regular expression, since Net::Server does not understand CIDR-style
-# network notation unless the perl module Net::CIDR is installed. You
-# may repeat the allow line as many times as you'd like
-
-<% scope.lookupvar('munin::client::allow').each do |allow| -%>
-allow <%= "^#{Regexp.escape(allow)}$" %>
-<% end -%>
-
-# If you have installed the Net::CIDR perl module, you can use one or more
-# cidr_allow and cidr_deny address/mask patterns. A connecting client must
-# match any cidr_allow, and not match any cidr_deny. Note that a netmask
-# *must* be provided, even if it's /32
-#
-# Example:
-#
-# cidr_allow 127.0.0.1/32
-# cidr_allow 192.0.2.0/24
-# cidr_deny 192.0.2.42/32
-
-# Which address to bind to;
-host <%= scope.lookupvar('munin::client::host') %>
-# host 127.0.0.1
-
-# And which port
-port <%= scope.lookupvar('munin::client::port') %>
-
diff --git a/templates/munin-node.conf.Ubuntu b/templates/munin-node.conf.Ubuntu
deleted file mode 100644
index 9763772..0000000
--- a/templates/munin-node.conf.Ubuntu
+++ /dev/null
@@ -1,39 +0,0 @@
-##########
-########## Managed by puppet
-##########
-
-log_level 4
-log_file /var/log/munin/munin-node.log
-pid_file /var/run/munin/munin-node.pid
-background 1
-setseid 1
-
-# Which host/port to bind to;
-host <%= scope.lookupvar('munin::client::host') %>
-port <%= scope.lookupvar('munin::client::port') %>
-user root
-group root
-setsid yes
-
-# Regexps for files to ignore
-
-ignore_file ~$
-ignore_file \.bak$
-ignore_file %$
-ignore_file \.dpkg-(tmp|new|old|dist)$
-ignore_file \.rpm(save|new)$
-
-# Set this if the client doesn't report the correct hostname when
-# telnetting to localhost, port 4949
-#
-#host_name localhost.localdomain
-host_name <%= scope.lookupvar('::fqdn') %>
-
-# A list of addresses that are allowed to connect. This must be a
-# regular expression, due to brain damage in Net::Server, which
-# doesn't understand CIDR-style network notation. You may repeat
-# the allow line as many times as you'd like
-<% scope.lookupvar('munin::client::allow').each do |allow| -%>
-allow <%= "^#{Regexp.escape(allow)}$" %>
-<% end -%>
-
diff --git a/templates/munin-node.conf.Ubuntu.precise b/templates/munin-node.conf.Ubuntu.precise
deleted file mode 120000
index d8fcb24..0000000
--- a/templates/munin-node.conf.Ubuntu.precise
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Ubuntu \ No newline at end of file
diff --git a/templates/munin-node.conf.Ubuntu.quantal b/templates/munin-node.conf.Ubuntu.quantal
deleted file mode 120000
index d8fcb24..0000000
--- a/templates/munin-node.conf.Ubuntu.quantal
+++ /dev/null
@@ -1 +0,0 @@
-munin-node.conf.Ubuntu \ No newline at end of file
diff --git a/templates/munin-node.conf.default b/templates/munin-node.conf.erb
index 9d7f32f..f51a665 100644
--- a/templates/munin-node.conf.default
+++ b/templates/munin-node.conf.erb
@@ -1,22 +1,29 @@
##########
########## Managed by puppet
##########
-#
-# Example config-file for munin-node
-#
log_level 4
-log_file /var/log/munin-node/munin-node.log
+log_file <%= @log_file %>
pid_file /var/run/munin/munin-node.pid
background 1
setsid 1
-user root
-group 0
+user <%= @user %>
+group <%= @group %>
+
+# This is the timeout for the whole transaction.
+# Units are in sec. Default is 15 min
+#
+# global_timeout 900
+
+# This is the timeout for each plugin.
+# Units are in sec. Default is 1 min
+#
+# timeout 60
# Regexps for files to ignore
-ignore_file [\#~]$
+#ignore_file [\#~]$
ignore_file DEADJOE$
ignore_file \.bak$
ignore_file %$
@@ -27,15 +34,13 @@ ignore_file \.pod$
# Set this if the client doesn't report the correct hostname when
# telnetting to localhost, port 4949
#
-#host_name localhost.localdomain
-host_name <%= fqdn %>
+host_name <%= scope.lookupvar('munin::host_name') %>
# A list of addresses that are allowed to connect. This must be a
# regular expression, since Net::Server does not understand CIDR-style
# network notation unless the perl module Net::CIDR is installed. You
# may repeat the allow line as many times as you'd like
-
-<% scope.lookupvar('munin::client::allow').each do |allow| -%>
+<% scope.lookupvar('munin::allow').each do |allow| -%>
allow <%= "^#{Regexp.escape(allow)}$" %>
<% end -%>
@@ -51,9 +56,7 @@ allow <%= "^#{Regexp.escape(allow)}$" %>
# cidr_deny 192.0.2.42/32
# Which address to bind to;
-host <%= scope.lookupvar('munin::client::host') %>
-# host 127.0.0.1
+host <%= scope.lookupvar('munin::host') %>
# And which port
-port <%= scope.lookupvar('munin::client::port') %>
-
+port <%= scope.lookupvar('munin::port') %>
diff --git a/templates/site.conf b/templates/site.conf
deleted file mode 100644
index 52ddb53..0000000
--- a/templates/site.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-<VirtualHost *>
- ServerName <%= name %>
- DocumentRoot /var/cache/munin/www/
- <Location />
- order allow,deny
- Allow from all
- </Location>
-</VirtualHost>
-