diff options
| author | varac <varacanero@zeromail.org> | 2013-01-27 14:42:04 +0100 | 
|---|---|---|
| committer | varac <varacanero@zeromail.org> | 2013-01-27 14:42:48 +0100 | 
| commit | 51369107eefffca0c50784b2ad2b51bf56c53512 (patch) | |
| tree | 45f66a51a2fe656c7f2ca751fff4b0632700b33d | |
| parent | 078bc9674c247cc2c3ad715eec57903138e481e1 (diff) | |
site_nagios: add hosts + services
4 files changed, 182 insertions, 3 deletions
| diff --git a/puppet/lib/puppet/parser/functions/create_resources_hash_from.rb b/puppet/lib/puppet/parser/functions/create_resources_hash_from.rb new file mode 100644 index 00000000..47d0df9c --- /dev/null +++ b/puppet/lib/puppet/parser/functions/create_resources_hash_from.rb @@ -0,0 +1,116 @@ +# +# create_resources_hash_from.rb +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +#    http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +module Puppet::Parser::Functions +  newfunction(:create_resources_hash_from, :type => :rvalue, :doc => <<-EOS +Given: +    A formatted string (to use as the resource name) +    An array to loop through (because puppet cannot loop) +    A hash defining the parameters for a resource +    And optionally an hash of parameter names to add to the resource and an +      associated formatted string that should be configured with the current +      element of the loop array + +This function will return a hash of hashes that can be used with the +create_resources function. + +*Examples:* +    $allowed_hosts = ['10.0.0.0/8', '192.168.0.0/24'] +    $resource_name = "100 allow %s to apache on ports 80" +    $my_resource_hash = { +      'proto'  => 'tcp', +      'action' => 'accept', +      'dport'  => 80 +    } +    $dynamic_parameters = { +      'source' => '%s' +    } + +    $created_resource_hash = create_resources_hash_from($resource_name, $allowed_hosts, $my_resource_hash, $dynamic_parameters) + +$created_resource_hash would equal: +    { +      '100 allow 10.0.0.0/8 to apache on ports 80' => { +        'proto' => 'tcp', +        'action' => 'accept', +        'dport' => 80, +        'source' => '10.0.0.0/8' +      }, +      '100 allow 192.168.0.0/24 to apache on ports 80' => { +        'proto' => 'tcp', +        'action' => 'accept', +        'dport' => 80, +        'source' => '192.168.0.0/24' +      } +    } + +$created_resource_hash could then be used with create_resources + +    create_resources(firewall, $created_resource_hash) + +To create a bunch of resources in a way that would only otherwise be possible +with a loop of some description. +    EOS +  ) do |arguments| + +    raise Puppet::ParseError, "create_resources_hash_from(): Wrong number of arguments " + +      "given (#{arguments.size} for 3 or 4)" if arguments.size < 3 or arguments.size > 4 + +    formatted_string = arguments[0] + +    unless formatted_string.is_a?(String) +      raise(Puppet::ParseError, 'create_resources_hash_from(): first argument must be a string') +    end + +    loop_array = arguments[1] + +    unless loop_array.is_a?(Array) +      raise(Puppet::ParseError, 'create_resources_hash_from(): second argument must be an array') +    end + +    resource_hash = arguments[2] +    unless resource_hash.is_a?(Hash) +      raise(Puppet::ParseError, 'create_resources_hash_from(): third argument must be a hash') +    end + +    if arguments.size == 4 +      dynamic_parameters = arguments[3] +      unless dynamic_parameters.is_a?(Hash) +        raise(Puppet::ParseError, 'create_resources_hash_from(): fourth argument must be a hash') +      end +    end + +    result = {} + +    loop_array.each do |i| +      my_resource_hash = resource_hash.clone +      if dynamic_parameters +        dynamic_parameters.each do |param, value| +          if my_resource_hash.member?(param) +            raise(Puppet::ParseError, "create_resources_hash_from(): dynamic_parameter '#{param}' already exists in resource hash") +          end +          my_resource_hash[param] = sprintf(value,[i]) +        end +      end +      result[sprintf(formatted_string,[i])] = my_resource_hash +    end + +    result +  end +end + +# vim: set ts=2 sw=2 et : +# encoding: utf-8 diff --git a/puppet/modules/site_nagios/manifests/add_host.pp b/puppet/modules/site_nagios/manifests/add_host.pp new file mode 100644 index 00000000..5148048d --- /dev/null +++ b/puppet/modules/site_nagios/manifests/add_host.pp @@ -0,0 +1,30 @@ +define site_nagios::add_host ($ip, $services='' ) { + +  $nagios_hostname = $name + +  #notice ("$nagios_hostname $ip $services") + +  nagios_host { $nagios_hostname: +    address => $ip, +    use     => 'generic-host', +  } + +  # turn serice array into hash +  # https://github.com/ashak/puppet-resource-looping +  $nagios_service_hashpart = { +    'host' => $nagios_hostname, +    'ip'   => $ip, +  } +  $dynamic_parameters = { +    'service' => '%s' +  } + +  #$nagios_services = ['one', 'two'] +  $nagios_servicename = "${nagios_hostname}_%s" + +  $nagios_service_hash = create_resources_hash_from($nagios_servicename, $services, $nagios_service_hashpart, $dynamic_parameters) +  #notice ($created_resource_hash) + + +  create_resources ( site_nagios::add_service, $nagios_service_hash ) +} diff --git a/puppet/modules/site_nagios/manifests/add_service.pp b/puppet/modules/site_nagios/manifests/add_service.pp new file mode 100644 index 00000000..5a5b344f --- /dev/null +++ b/puppet/modules/site_nagios/manifests/add_service.pp @@ -0,0 +1,22 @@ +define site_nagios::add_service ($host, $ip, $service) { + +  notice ('$name $host $ip $service') + +  case $service { +    'openvpn': { +      $check_command       = 'check_openvpn!...' +      $service_description = 'Openvpn' +    } +    'webapp': { +      $check_command       = 'check_http!...' +      $service_description = 'Website' +    } +    default:  { fail ('unknown service') } +  } + +  nagios_service { $name: +    use                 => 'generic-service', +    check_command       => $check_command, +    service_description => $service_description, +    host_name           => $host } +} diff --git a/puppet/modules/site_nagios/manifests/server.pp b/puppet/modules/site_nagios/manifests/server.pp index e11ffd48..df3e00cd 100644 --- a/puppet/modules/site_nagios/manifests/server.pp +++ b/puppet/modules/site_nagios/manifests/server.pp @@ -1,7 +1,18 @@  class site_nagios::server { -  class {'nagios': -    allow_external_cmd => true + +  $nagios_hiera=hiera('nagios') +  $nagiosadmin_pw = $nagios_hiera['nagiosadmin_pw'] +  $hosts = $nagios_hiera['hosts'] + +  include nagios::defaults +  include nagios::base +  #Class ['nagios'] -> Class ['nagios::defaults'] +  class {'nagios::apache': +    allow_external_cmd => true, +    stored_config      => false, +    #before             => Class ['nagios::defaults']    } -  #include nagios::defaults + +  create_resources ( site_nagios::add_host, $hosts)  } | 
