| Index: modules/adblockplus/manifests/host.pp | 
| diff --git a/modules/adblockplus/manifests/host.pp b/modules/adblockplus/manifests/host.pp | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..a2441b3095615256653f29acd20e51d49066abc0 | 
| --- /dev/null | 
| +++ b/modules/adblockplus/manifests/host.pp | 
| @@ -0,0 +1,110 @@ | 
| +# == Type: adblockplus::host | 
| +# | 
| +# Manage host information for any node within the Adblock Plus infrastructure. | 
| +# | 
| +# === Parameters: | 
| +# | 
| +# [*ensure*] | 
| +#   Whether to ensure any host-related resources being 'present' or 'absent'. | 
| +#   Note that implicit realization of embedded resources only takes place if | 
| +#   $ensure is 'absent'. | 
| +# | 
| +# [*fqdn*] | 
| +#   The fully qualified domain name associated with the host. See the examples | 
| +#   section below on how this piece of information is supposed to be re-used. | 
| +# | 
| +# [*groups*] | 
| +#   A list of logical groups the host is associated with, i.e. for direct or | 
| +#   indirect translation into nagios_hostgroup names or similar. This parameter | 
| +#   is considered meta-information and not processed by type adblockplus::host. | 
| +# | 
| +# [*ips*] | 
| +#   A list of one or more IPv4 and IPv6 addresses associated with the host, | 
| +#   the first one of which is considered the primary IP address, and each of | 
| +#   which is included as $alias in the (virtual) Sshkey[$title] resource. | 
| +# | 
| +# [*public_key*] | 
| +#   The host's public (SSH) key, i.e "ssh-rsa AA.... host1.example.com", for | 
| +#   use with the (virual) Sshkey[$title] resource. Note that this implies the | 
| +#   default public key of the host being used, namely the first one offered | 
| +#   during the SSL handshake. | 
| +# | 
| +# [*role*] | 
| +#   The name of the host's primary role, if any. This parameter is considered | 
| +#   meta-information and not processed by type adblockplus::host. | 
| +# | 
| +# === Examples: | 
| +# | 
| +#   # Hosts being 'present' do not imply realization of embedded resources | 
| +#   adblockplus::host {'node1': | 
| +#     ensure => 'present', | 
| +#     ips => ['10.8.0.1'], | 
| +#   } | 
| +# | 
| +#   # Explicit realization of /etc/hosts and /etc/ssh/ssh_known_hosts records | 
| +#   realize(Host['node1']) | 
| +#   realize(Sshkey['node1']) | 
| +# | 
| +#   # Global realization, i.e. when creating a node all others can access | 
| +#   realize(Host<|tag == 'adblockplus::host'|>) | 
| +#   realize(Sshkey<|tag == 'adblockplus::host'|>) | 
| +# | 
| +#   # Addressing (meta-) parameters for re-using their values | 
| +#   $fqdn = getparam(Adblockplus::Host['node1'], 'fqdn') | 
| +#   $primary_ip = getparam(Host['node1'], 'ip') | 
| +#   $key_type = getparam(Sshkey['node1'], 'type') | 
| +# | 
| +define adblockplus::host ( | 
| +  $ensure = 'present', | 
| +  $fqdn = "$name.$adblockplus::authority", | 
| +  $groups = [], | 
| +  $ips, | 
| +  $public_key = undef, | 
| +  $role = undef, | 
| +) { | 
| + | 
| +  include adblockplus | 
| +  include stdlib | 
| + | 
| +  case $public_key { | 
| + | 
| +    undef: { | 
| +      $sshkey_ensure = 'absent' | 
| +      $sshkey_key = undef | 
| +      $sshkey_type = undef | 
| +    } | 
| + | 
| +    default: { | 
| +      $sshkey_ensure = $ensure | 
| +      $sshkey = split($public_key, '\s+') | 
| +      $sshkey_type = $sshkey[0] | 
| +      $sshkey_key = $sshkey[1] | 
| +    } | 
| +  } | 
| + | 
| +  @host {$title: | 
| +    ensure => $ensure, | 
| +    ip => pick($ips), | 
| +    name => $fqdn, | 
| +    tag => ['adblockplus::host'], | 
| +  } | 
| + | 
| +  @sshkey {$title: | 
| +    ensure => $sshkey_ensure, | 
| +    host_aliases => $ips, | 
| +    key => $sshkey_key, | 
| +    name => $fqdn, | 
| +    require => File['/etc/ssh/ssh_known_hosts'], | 
| +    tag => ['adblockplus::host'], | 
| +    type => $sshkey_type, | 
| +  } | 
| + | 
| +  if $ensure == 'absent' { | 
| +    realize(Host[$title]) | 
| +    realize(Sshkey[$title]) | 
| +  } | 
| + | 
| +  if $::role != undef and manifest_exists("adblockplus::host::$::role") { | 
| +    ensure_resource("adblockplus::host::$::role", $title, {name => $name}) | 
| +  } | 
| +} | 
|  |