Есть ли способ установить имя хоста сервера с помощью марионетки?
Я мог бы написать собственный тип, но, может быть, есть более простой способ.
Спасибо
[Edit] Извините, я должен был упомянуть, что запускаю puppet без мастера, сначала puppet настраивается, а затем настраивает все остальное.
Взгляните на мое определение идеи "переименования". Он предполагает Debian и может работать и с 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",
}
}
Создайте модуль sethostname. Вот 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],
}
}