Назад | Перейти на главную страницу

Тип Puppet exec, похоже, игнорирует атрибут if

У меня есть команда exec для изменения имени хоста. Я хочу выполнить это только в том случае, если имя хоста не то, что должно быть:

exec { 'update hostname':
  command => 'sudo hostname VM01',
  unless  => '[[ "$(hostname)" == "VM01" ]]';
}

Сейчас [[ "$(hostname)" == "VM01" ]] Кажется, что команда работает так, как ожидалось, если я выполняю ее вручную, но Puppet игнорирует ее.

Я также пробовал:

test "$(hostname)" == "VM01"
test $(hostname) == "VM01"
[ <(hostname) == "VM01" ]
[ hostname == "VM01" ]

Может кто-нибудь указать на мою ошибку, я просто не понимаю.

Было бы хорошо, если бы вы также разместили полученное сообщение об ошибке.
Этот код работает для меня:

exec { 'update hostname':
    command => 'hostname VM01',
    path => '/usr/bin:/usr/sbin/:/bin:/sbin',
    unless => '[ "$(hostname)" == "VM01" ]',
}

Вам необходимо указать путь, если вы не используете полностью определенные пути в выполняемых командах.

Также обратите внимание, поскольку вы не указали, какой дистрибутив вы используете: вы, вероятно, захотите изменить имя хоста в других местах, чтобы он загружался уже с правильным именем хоста.
Но я предполагаю, что это всего лишь очень короткий фрагмент вашего полного манифеста.