Мне нужен марионетка, чтобы выполнить скрипт, который находится внутри установленного приложения.Кроме того, мне нужно запускаться, только если он обнаруживает более старую версию и не находится на определенном сервере, а затем устанавливает новую версию
Конкретная задача, которую вы, похоже, пытаетесь выполнить с помощью Exec
дублирует стандартное поведение ресурса Package
.Вы действительно, действительно должны управлять программным обеспечением через пакеты, даже если вам придется самостоятельно создавать пакеты и поддерживать локальное хранилище пакетов.Время, затрачиваемое на упаковку, легко компенсируется экономией времени, затрачиваемой на управление программным обеспечением, даже с учетом Puppet.
Кроме того, что касается контроля над машинами, с которыми нужно работать, вам следует относиться к этому как к вопросу.классификации.Если этот класс не должен применяться к машине server.com
, то он не должен быть объявлен в каталоге этой машины.Если он должен применяться к этой машине иначе, чем к другим, то он должен быть соответствующим образом параметризован, и эти параметры должны использоваться (во время классификации, может быть, с помощью Hiera), чтобы выбрать подходящее поведение для каждой целевой машины.
Тем не менее, что касается фактически представленного кода, сообщение об ошибке
Не удалось оценить: не удалось найти команду 'server.com'
, что этот элемент отражаетвашего onlyif
массива ...
"${::fqdn} != 'server.com'",
... не является командой.onlyif
требуется команда или их массив, который может быть выполнен в целевой системе, поэтому, возможно, вместо этого:
"test ${::fqdn} != server.com",
Кроме того, это выглядит неправильно:
command => './usr/local/tripwire/te/agent/bin/uninstall.sh',
Удалите начальный .
, если вы на самом деле не собираетесь разрешать этот путь для рабочего каталога.И если вы do намереваетесь разрешить его как относительный путь, тогда я призываю вас вместо этого расширить его до абсолютного.
Более того, это, вероятно, не соответствует вашим намерениям:
path => '/usr/bin/sh',
Атрибут path
определяет двоичный путь поиска, например, переменную среды PATH
.Возможно, вы действительно захотите указать один, например, '/bin:/usr/bin:/sbin:/usr/sbin'
, но если вы хотели, чтобы команда выполнялась через оболочку, то вы искали
provider => 'shell',