¿Usar marioneta para configurar el nombre de host?


13

¿Hay alguna forma de configurar el nombre de host de un servidor usando Puppet?

Podría escribir un tipo personalizado, pero tal vez haya una forma más simple.

Gracias

[Editar] Lo siento, debería haber mencionado que ejecuto Puppet Masterless, Puppet se configura primero y luego configura todo lo demás.


Puede haber uno, pero no sé uno. Sospecho que no, porque el servidor firma el certificado del cliente que incluye el nombre de host. Normalmente, el nombre de host se establece durante la implementación, luego Puppet se instala y se vincula al servidor. No sé cómo automatizaría la configuración después del tiempo de instalación a través de la marioneta.
Sirex

Lo siento, debería haber mencionado que ejecuto Puppet Masterless, Puppet se configura primero y luego configura todo lo demás.
Andrei Serdeliuc

Respuestas:


10

Eche un vistazo a mi definición de "cambio de nombre" para las ideas. Asume Debian, y podría funcionar también en Ubuntu.

define rename() {
    # We only need puppet so we can restart it. In practice, there's
    # little point in renaming a machine through puppet without a
    # running puppet service
    include puppet::conf

    # We only need apt because puppet management of its package
    include apt

    host { "$hostname": ensure => absent }

    host { "$fqdn": ensure => absent }

    $alias = regsubst($name, '^([^.]*).*$', '\1')

    host { "$name":
        ensure => present,
        ip     => $ipaddress,
        alias  => $alias ? {
            "$hostname" => undef,
            default     => $alias
        },
        before => Exec['hostname.sh'],
    }

    file { '/etc/mailname':
        ensure  => present,
        owner   => 'root',
        group   => 'root',
        mode    => 644,
        content => "${name}\n",
    }

    file { '/etc/hostname':
        ensure  => present,
        owner   => 'root',
        group   => 'root',
        mode    => 644,
        content => "${name}\n",
        notify  => Exec['hostname.sh'],
    }

    exec { 'hostname.sh':
        command     => '/etc/init.d/hostname.sh start',
        refreshonly => true,
        notify      => Service['puppet'],
    }
} 

define rename::domain() {
    rename { "${hostname}.${name}": }

    common::line { 'remove_old_domain':
        ensure => absent,
        file   => '/etc/resolv.conf',
        line   => "domain $domain",
    }

    common::line { 'add_new_domain':
        ensure => present,
        file   => '/etc/resolv.conf',
        line   => "domain $name",
    }
}

Básicamente hago lo mismo, excepto que también tengo un recurso de archivo para /etc/resolv.conf, configurando mi dominio. Corro sin maestro también.
François Beausoleil

1

Crea un módulo sethostname. Aquí está el init.pp:

class sethostname {
  file { "/etc/hostname":
    ensure  => present,
    owner   => root,
    group   => root,
    mode    => '0644',
    content => "$::fqdn\n",
    notify  => Exec["set-hostname"],
  }
  exec { "set-hostname":
    command => '/bin/hostname -F /etc/hostname',
    unless  => "/usr/bin/test `hostname` = `/bin/cat /etc/hostname`",
    notify  => Service[$rsyslog::params::service_name],
  }
}

https://gist.github.com/VertigoRay/6024253


Tenga en cuenta que $fqdndebe ser el valor correcto. También puedes eliminar la $rsysloglínea.
confiq
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.