puppet class: check remote ports

probablemente utilizando este codigo en ruby como una funcion, seria suficiente?

aunque es mas sencillo utilizar los superpoderes de netcat:

nc -z <ip remota> <puerto remoto>

si nos devuelve 0, es que todo ha ido bien: hay alguien al otro lado escuchando. En cualquier otro caso, error.

la clase de puppet que hace el trabajo queda asi:

# check.pp

class checkport::check (

  $port         =       hiera('port'),
  $address      =       hiera('address'),

) {

#  notify { "/usr/bin/nc -z ${address} ${port}": }

  package { 'nc':
    ensure      =>      'present',
  }

  exec { 'checking remote port':
    command     =>      "/usr/bin/nc -z ${address} ${port}",
    require     =>      Package['nc'],
  }

}

Aunque si queremos comprobar varios puertos, mejor seria agrupar los datos en un hash, e iterar sobre ellos. Al viejo estilo:

# check.pp

class checkport::check (


) {

  $remotes      =       hiera_hash('remotes')

#  notify { "/usr/bin/nc -z ${address} ${port}": }
  notify { "destino: ${remotes} ": }

  package { 'nc':
    ensure      =>      'present',
  }

  define comprobador() {
    $remotes    =       $checkport::check::remotes
    $puerto     =       $remotes[$name]

    notify { "checking ${name} ${puerto}": }

    exec { "checking ${name}":
      command   =>      "/usr/bin/nc -z -w 2 ${name} ${puerto}",
#      command  =>      "/bin/echo '/usr/bin/nc -z ${name} ${puerto} \n' >>/tmp/exec.txt",
      require   =>      Package['nc'],
    }
  }


  $indexes = keys($remotes)

  comprobador { $indexes: }

}

Un hash de ejemplo seria:

---
remotes:
  172.17.0.2:
    80
  172.17.0.1:
    80