Puppet exec在安装包之前执行一个命令

Puppet exec在安装包之前执行一个命令,puppet,Puppet,我正试图在package开始安装msi安装程序之前运行powershell脚本。该脚本将清除某些会阻止安装程序的未管理资源。 我试过的是 file { 'c:\Test\cleanup.ps1.file' : path => 'c:\Test\cleanup.ps1', ensure => present, source => 'puppet:///modules/test/cl

我正试图在package开始安装msi安装程序之前运行powershell脚本。该脚本将清除某些会阻止安装程序的未管理资源。 我试过的是

file { 'c:\Test\cleanup.ps1.file' :
    path               => 'c:\Test\cleanup.ps1',
    ensure             => present,
    source             => 'puppet:///modules/test/cleanup.ps1',
    source_permissions => ignore,
  }
  exec { 'c:\Test\cleanup.ps1.file':
    refreshonly => true,
    provider    => powershell,
  }
  package { 'ServiceInstaller':
    ensure  => $version,
    require => [Package['Service1Installer'],Exec['c:\Test\cleanup.ps1']],
  }
但是require属性不会触发该命令。有人能帮我做到这一点吗。
有一个notify命令,它将发送EXEC通知,但这是在安装之后发生的。我需要的是在安装之前。提前感谢。

让它正常工作的诀窍是,只有在需要触发脚本才能运行并且exec资源必须订阅脚本时,才必须编写
c:\Test\cleanup.ps1.file
。否则,如果该文件没有更改,并且exec没有订阅,exec资源认为它不需要运行,因此puppet运行完成,但脚本永远不会启动

根据粘贴在此处的代码,您似乎在类中指定了
$version
?我猜当你想升级时,你是在类中还是在hiera中明确地更新这个?如果是这样,您可以让
c:\Test\cleanup.ps1.file
文件编写一个内联模板,并将版本号放在该文件中。当您在类/hiera/中的任何位置更新版本时,文件将更新,exec将启动

这看起来像:

file { 'c:\Test\cleanup.ps1.file' :
    path               => 'c:\Test\cleanup.ps1',
    ensure             => present,
    content            => inline_template("<%= @version %>"),
    source_permissions => ignore,
}

exec { 'c:\Test\cleanup.ps1.file':
    refreshonly => true,
    provider    => powershell,
    subscribe   => File['c:\Test\cleanup.ps1.file'],
}

package { 'ServiceInstaller':
    ensure  => $version,
    require => [Package['Service1Installer'],Exec['c:\Test\cleanup.ps1']],
}
文件{'c:\Test\cleanup.ps1.file':
路径=>'c:\Test\cleanup.ps1',
确保=>存在,
内容=>inline_模板(“”),
source_permissions=>ignore,
}
exec{'c:\Test\cleanup.ps1.file':
refreshonly=>true,
provider=>powershell,
订阅=>文件['c:\Test\cleanup.ps1.File'],
}
包{'ServiceInstaller':
确保=>$version,
require=>[Package['Service1Installer'],Exec['c:\Test\cleanup.ps1'],
}

这是假设您只是尝试使用
cleanup.ps1.file
作为exec的触发器。如果该文件中有用于其他目的的内容,则保留该声明,并将另一个文件声明作为触发器文件,仅使用内联模板中的版本,并将exec订阅到该文件,而不是
cleanup.ps1.file

Remove
refreshonly
。当我删除refreshonly时,所有木偶运行都会发生exec。不仅仅是在安装软件包之前。