У меня есть сценарий оболочки для установки пакетов модулей nodejs, которые должны выполняться после установки всех пакетов. Я определил этап "последний" после этапа [main] вот мой код
stage { 'last': }
Stage[main] -> Stage[last]
class npm {
stage => last,
file { '/tmp/nodejs.sh':
source => 'puppet:///modules/npm/nodejs.sh',
ensure => present,
}
exec { 'install web development nodejs packages':
command => '/tmp/nodejs.sh',
user => "root",
require => Package['nodejs', 'npm']
}
}
Однако он возвращает ошибку
==> по умолчанию: Ошибка: не удалось выполнить синтаксический анализ для производственной среды: Синтаксическая ошибка в '=>'; ожидается '}' в /tmp/vagrant-puppet-/manifests/init.pp:90 на узле local.d ev
строка 90 указывает на "stage => last,"
Вы путаете две концепции, которые, к сожалению, имеют очень похожий синтаксис.
class <name> {
# includes of other classes ...
# resource declarations ...
}
# usually
include <name>
# ...but if you need stages
class {
'<name>':
stage => 'last'
}
Последнее известно как объявление класса ресурсоподобного (и в нем есть предостережения).
Также обратите внимание, что этапы в некоторой степени осуждаются в сообществе.
Если вы не используете ресурсы виртуального пакета, вы можете избежать использования стадий.
Package<| |> -> Exec['install web development nodejs packages']
Это устанавливает before
отношение от всех package
ресурсы для вашего exec
.