Puppet exec在安装包之前执行一个命令
我正试图在package开始安装msi安装程序之前运行powershell脚本。该脚本将清除某些会阻止安装程序的未管理资源。 我试过的是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
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
Removerefreshonly
。当我删除refreshonly时,所有木偶运行都会发生exec。不仅仅是在安装软件包之前。