Puppet: Modificado el tipo definido por el usuario line.pp para añadir definiciones de variables | Algo de Linux

sábado, 9 de julio de 2016

Puppet: Modificado el tipo definido por el usuario line.pp para añadir definiciones de variables

line.pp es un tipo definido por el usuario que nos permite:
  • Si ensure => present: Garantizar que una línea se encuentre presente en un fichero. Ésta es la opción por defecto.
  • Si ensure => absent: Garantizar que una línea no se encuentre presente en un fichero.
  • Si ensure => comment: Garantizar que una línea se encuentre comentada en un fichero.
  • Si ensure => uncomment: Garantizar que una línea se encuentre descomentada en un fichero.
Para completar este tipo, he añadido una nueva opción ensure => variable que nos va a permitir añadir definiciones de variables en archivos, de tal manera que:
  • Se añada la definición de variable, si no existe.
  • Se modifique el valor de una variable, si ya existe.
  • No se haga nada si la variable y su valor ya están definidos.
Ésto es muy útil para evitar añadir varias veces la definición de una variable, de forma accidental.
define line($file, $line, $ensure = 'present') {
  case $ensure {
     default : { err ( "unknown ensure value ${ensure}" ) }

     present: {
        exec { "/bin/echo '${line}' >> '${file}'":
           unless => "/bin/grep -q '${line}' '${file}'"
        }
     }

     absent: {
        exec { "/usr/bin/perl -ni -e 'print unless /^\\Q${line}\\E\$/' '${file}'":
           onlyif => "/bin/grep -q '${line}' '${file}'"
        }
     }

     uncomment: {
         exec { "/bin/sed -i -e'/${line}/s/^#\+//' '${file}'":
            onlyif => "/bin/grep '${line}' '${file}' | /bin/grep '^#' | /usr/bin/wc -l"
         }
      }

     comment: {
         exec { "/bin/sed -i -e'/${line}/s/^\(.\+\)$/#\1/' '${file}'":
            onlyif => "/usr/bin/test `/bin/grep '${line}' '${file}' | /bin/grep -v '^#' | /usr/bin/wc -l` -ne 0"
         }
     }

     variable: {
        $defvar = split($line, '=')
        $var = $defvar[0]
        $value = $defvar[1]

        exec { "/bin/sed -i 's/'${var}'=.*/'${var}'='${value}'/' '${file}'":
           onlyif => "/bin/grep -q '${var}' '${file}'",
           unless => "/bin/grep -q '${line}' '${file}'"
        }

        exec { "/bin/echo '${line}' >> '${file}'":
           unless => "/bin/grep -q '${var}' '${file}'"
        }
     }
}
}
Sería importante que todos utilizáramos este tipo definido por el usuario cuando queramos definir variables en archivos de configuración, como por ejemplo /etc/escuela2.0.


Publicado por primera vez en http://enavas.blogspot.com.es

No hay comentarios: