Utiliser une marionnette pour définir le nom d'hôte?


13

Existe-t-il un moyen de définir le nom d'hôte d'un serveur à l'aide d'une marionnette?

Je pourrais écrire un type personnalisé, mais il existe peut-être un moyen plus simple.

Merci

[Modifier] Désolé, j'aurais dû mentionner que je lance marionnette sans maître, la marionnette est d'abord configurée puis elle configure tout le reste.


Il y en a peut-être un, mais je n'en connais pas. Je soupçonne qu'il n'y en a pas parce que le serveur signe le certificat du client qui inclut le nom d'hôte. Normalement, le nom d'hôte est défini lors du déploiement, puis la marionnette est installée et liée au serveur. Je ne sais pas comment vous automatiseriez le réglage après le temps d'installation via une marionnette.
Sirex

Désolé, j'aurais dû mentionner que je lance marionnette sans maître, la marionnette est d'abord configurée, puis elle configure tout le reste.
Andrei Serdeliuc

Réponses:


10

Jetez un oeil à ma définition "renommer" pour les idées. Il suppose Debian et pourrait également fonctionner sur 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",
    }
}

Je fais essentiellement la même chose, sauf que j'ai également une ressource de fichier pour /etc/resolv.conf, en définissant mon domaine. Je cours aussi sans maître.
François Beausoleil

1

Créez un module sethostname. Voici le 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


remarquerez que $fqdn la valeur doit être correcte. Vous pouvez également supprimer la $rsyslogligne.
confiq
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.