簡體   English   中英

在安裝軟件包之前,Puppet執行命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM