[英]Puppet exec a command before the package is installed
我正在嘗試在Pacakage開始安裝msi安裝程序之前運行Power Shell腳本。 該腳本清除了某些將阻止安裝程序的非托管資源。 我試過的是
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資源不會認為它需要運行,因此so運行完成,但腳本永遠不會觸發。
根據您在此處粘貼的代碼,您似乎在類中指定了$version
? 我想您要升級時是在類中還是在hiera中顯式更新它? 如果是這樣,您可以讓c:\\Test\\cleanup.ps1.file
文件編寫一個內聯模板,然后將版本號放入該文件中。 當您在class / hiera / puppet中的任何地方更新版本時,您將執行此操作,文件將更新,並且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']],
}
這是假設您只是試圖將cleanup.ps1.file
用作exec的觸發器。 如果該文件中有其他用途所需的東西,則保留該聲明,將其保留,然后將另一個文件聲明作為觸發文件,且僅包含內聯模板中的版本,然后將exec訂閱到該文件而不是cleanup.ps1.file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.