Użyj marionetki, aby ustawić nazwę hosta?

13

Czy jest jakiś sposób na ustawienie nazwy hosta serwera za pomocą marionetki?

Mógłbym napisać niestandardowy typ, ale może jest prostszy sposób.

Dzięki

[Edytuj] Przepraszam, powinienem wspomnieć, że prowadzę marionetkę masterless, najpierw lalek jest konfigurowany, a potem konfiguruje wszystko inne.

Andrei Serdeliuc
źródło
Może być jeden, ale nie znam żadnego. Podejrzewam, że tak nie jest, ponieważ serwer podpisuje certyfikat klienta zawierający nazwę hosta. Zwykle nazwa hosta jest ustawiana podczas wdrażania, następnie instalowana jest marionetka i łączona z serwerem. Nie wiem, jak zautomatyzowałbyś ustawienie tego po czasie instalacji przez marionetkę.
Sirex
Przepraszam, powinienem wspomnieć, że uruchamiam marionetkę masterless, najpierw lalek jest konfigurowany, a potem wszystko inne.
Andrei Serdeliuc

Odpowiedzi:

10

Zobacz moją definicję „zmiany nazwy” pomysłów. Zakłada Debiana i może również działać na 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",
    }
}
Daniel C. Sobral
źródło
Zasadniczo robię to samo, tyle że mam również zasób pliku dla /etc/resolv.conf, ustawiając moją domenę. Prowadzę też masterless.
François Beausoleil
1

Utwórz moduł sethostname. Oto 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
źródło
zauważ, że $fqdnmusi to być poprawna wartość. Możesz także usunąć $rsysloglinię.
confiq