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