Verwenden Sie Marionette, um Hostnamen einzustellen?

13

Gibt es eine Möglichkeit, den Hostnamen eines Servers mithilfe einer Marionette festzulegen?

Ich könnte einen benutzerdefinierten Typ schreiben, aber vielleicht gibt es einen einfacheren Weg.

Vielen Dank

[Bearbeiten] Tut mir leid, ich hätte erwähnen sollen, dass ich puppet masterless laufen lasse. Puppet wird zuerst eingerichtet und richtet dann alles andere ein.

Andrei Serdeliuc
quelle
Es mag einen geben, aber ich kenne keinen. Ich vermute, dass dies nicht der Fall ist, da der Server das Client-Zertifikat signiert, das den Hostnamen enthält. Normalerweise wird der Hostname während der Bereitstellung festgelegt, dann die Marionette installiert und mit dem Server verbunden. Ich weiß nicht, wie Sie die Einstellung nach der Installation per Marionette automatisieren würden.
Sirex am
Entschuldigung, ich hätte erwähnen sollen, dass ich puppet masterless laufen lasse. Puppet wird zuerst eingerichtet und dann wird alles andere eingerichtet.
Andrei Serdeliuc

Antworten:

10

Schauen Sie sich meine "Umbenennungs" -Definition für Ideen an. Es setzt Debian voraus und könnte auch auf Ubuntu funktionieren.

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",
    }
}
Daniel C. Sobral
quelle
Ich mache im Wesentlichen dasselbe, außer dass ich auch eine Dateiressource für /etc/resolv.conf habe, die meine Domain einstellt. Ich laufe auch meisterlos.
François Beausoleil
1

Erstellen Sie ein sethostname-Modul. Hier ist der 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

VertigoRay
quelle
Beachten Sie, dass $fqdnder Wert korrekt sein muss. Sie können auch eine $rsyslogLinie entfernen .
Confiq