Puppet

為什麼 puppet 模組生成一個 Gemfile,它的目的是什麼?

  • February 24, 2017

我最近跑了puppet module generate,結果發現了很多對於一個簡單的模組來說看起來沒有必要的廢話。我的意思是,許多最小的模組相當於模板化一兩個配置文件並讓開源 Puppet 模組完成繁重的工作。

Puppet 的文件解釋了puppet module generate這裡的大部分內容:

https://docs.puppet.com/puppet/4.9/modules_fundamentals.html

但是,我沒有看到任何關於 Gemfile 的內容。

Gemfile生成的有什麼用puppet module generate

$ puppet module generate nathan-myapp_consul
$ cd myapp_consul/
$ ls
Gemfile     README.md   Rakefile    examples    manifests   metadata.json   spec

以下是該文件的內容:

source ENV['GEM_SOURCE'] || 'https://rubygems.org'

puppetversion = ENV.key?('PUPPET_VERSION') ? ENV['PUPPET_VERSION'] : ['>= 3.3']
gem 'metadata-json-lint'
gem 'puppet', puppetversion
gem 'puppetlabs_spec_helper', '>= 1.0.0'
gem 'puppet-lint', '>= 1.0.0'
gem 'facter', '>= 1.7.0'
gem 'rspec-puppet'

# rspec must be v2 for ruby 1.8.7
if RUBY_VERSION >= '1.8.7' && RUBY_VERSION < '1.9'
 gem 'rspec', '~> 2.0'
 gem 'rake', '~> 10.0'
else
 # rubocop requires ruby >= 1.9
 gem 'rubocop'
end

Gemfile製作人puppet module generate,你有什麼意義?

GemfileRuby 的Bundler應用程序使用A來安裝項目使用的 RubyGems(Ruby 庫)——在本例中,是可用於開發模組的 gem。在 Puppet 中安裝或使用模組時不使用它。

如果您安裝了 Ruby,則可以通過執行以下命令安裝這些 gem:

gem install bundler
bundle install  # or add `--path vendor` to install within the directory

快速了解這些 gem 的用途,以及您可能會發現它們有用的原因:

  • metadata-json-lint驗證metadata.json文件是否正確,否則 Puppet 可能無法載入模組並且您無法將其上傳到Forge
  • puppetlabs_spec_helper是執行測試等的助手。
  • puppet-lint根據 Puppet樣式指南驗證您的 Puppet 清單(更多資訊
  • rspec-puppetrspec讓您為 Puppet 類、已定義類型等編寫測試,以檢查它們是否可以正確編譯並使用正確的參數創建正確的資源(更多資訊
  • rake用於從 執行預配置的任務Rakefilerake test即將執行上述所有任務並驗證清單、ERB 文件等。
  • rubocop根據 Ruby 樣式指南驗證您的 Ruby 程式碼,相當於 puppet-lint

正如您所建議的,這些對於最小模組來說不是必需的,但它們很有用。您不需要編寫測試甚至 lint 程式碼,但使用這些工具可以幫助您創建更可靠的模組並幫助您進行更改,而不會有在 Puppet 中無法執行的風險。

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