Windows
手動應用 puppet 類
我正在測試一個 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 文件。或者,也許我可以將
package
myclass 中的語句移動到它自己的 .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 的正確目錄語法。