![为什么puppet模块会生成一个Gemfile,它的用途是什么?](https://linux22.com/image/699506/%E4%B8%BA%E4%BB%80%E4%B9%88puppet%E6%A8%A1%E5%9D%97%E4%BC%9A%E7%94%9F%E6%88%90%E4%B8%80%E4%B8%AAGemfile%EF%BC%8C%E5%AE%83%E7%9A%84%E7%94%A8%E9%80%94%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我最近运行了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
,你有什么意义呢?
答案1
RubyGemfile
的打包机应用程序安装项目使用的 RubyGems(Ruby 库)——在本例中,gems 可用于发展模块。在 Puppet 中安装或使用模块时不会使用它。
如果你已经安装了 Ruby,则可以通过运行以下命令安装这些 gem:
gem install bundler
bundle install # or add `--path vendor` to install within the directory
简要介绍一下这些 gem 的用途,以及它们为什么有用:
metadata-json-lint
验证metadata.json
文件是否正确,否则 Puppet 可能无法加载模块,你无法将其上传到锻造puppetlabs_spec_helper
是运行测试等的助手。puppet-lint
根据 Puppet 验证你的 Puppet 清单时尚指南(更多信息)rspec-puppet
,rspec
让您为 Puppet 类、定义类型等编写测试,以检查它们是否编译无误并使用正确的参数创建正确的资源(更多信息)rake
用于运行预配置的任务Rakefile
,rake test
即将运行上述所有任务并验证清单、ERB 文件等。rubocop
根据 Ruby 代码风格指南验证你的 Ruby 代码,相当于 puppet-lint
正如你所说,这些对于最小模块,但它们很有用。您不需要编写测试,甚至不需要对代码进行 lint,但使用这些工具可以帮助您创建更可靠的模块,并帮助您进行更改,而不会冒在 Puppet 中无法工作的风险。