Windows

手動應用 puppet 類

  • June 6, 2018

我正在測試一個 puppet init.pp 文件(在 Windows 上),它看起來像:

class myclass {    
package { 'java':
   ensure => installed,
   provider => 'msi',
   source => 'S:\puppet-repo\jdk1.6.0_31.msi',
   install_options => { 'INSTALLDIR' => 'C:\tools\java' },
 }
}

然後我的 site.pp 文件看起來像:

node default {
 include myclass
}

我創建了一個只呼叫 myclass 模組的 tests/init.pp 文件:

class { 'myclass': }

我可以執行 tests/init.pp 文件,它確實正確安裝了 java。我想知道是否有一種方法可以只從命令行執行 myclass 模組而不創建單獨的 tests/init.pp 文件。或者,也許我可以將packagemyclass 中的語句移動到它自己的 .pp 文件中,並將其包含在 init.pp 中,然後如果我願意,我可以執行那個單獨的 .pp 文件。更正確的方法是什麼?

首先,如果你還不知道的話,一個驗證語法的技巧:

puppet parser validate my_file.pp

現在,你如何對一個新類進行現場測試可能會因你的部署而異,但我可以告訴你我是如何做到的,也許這對你來說是有意義的。或者也許 ServerFault 上的每個人都會告訴我我錯了。

在任何給定的環境中,我都有一組使用繼承的節點聲明:

node base_production_environment {
 include ssh
 include ntp
 include whatever_else
}

node /prod-app\d+\.mycompany\.com/ inherits base_production_environment { }

現在,當我編寫一個新類時,我想在推出之前先在特定係統上對其進行測試,所以我添加了一個更具體的(按主機名)節點聲明,以便它將覆蓋不太具體的(通過正則表達式)聲明,像這樣:

node 'prod-app7.mycompany.com' inherits base_production_environment {
 include my_new_class
}

我簡化了很多,以突出使用特定的節點聲明來抽查新類。我們還使用環境將更改部署到不太關鍵的環境,然後再將其部署到生產環境等。


所以我只是重新閱讀了您的問題,我突然想到您可能正在使用推送模組目錄方法,而不是使用 puppetmaster。如果這是真的,您可以包含一個用於測試目的的類,例如:

puppet apply --modulepath=C:\puppet-modules\ -e "include my_class"

不過,我不知道這是否是 Windows 下 puppet 的正確目錄語法。

引用自:https://serverfault.com/questions/362510