为什么puppet模块会生成一个Gemfile,它的用途是什么?

为什么puppet模块会生成一个Gemfile,它的用途是什么?

我最近运行了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-puppetrspec让您为 Puppet 类、定义类型等编写测试,以检查它们是否编译无误并使用正确的参数创建正确的资源(更多信息
  • rake用于运行预配置的任务Rakefilerake test即将运行上述所有任务并验证清单、ERB 文件等。
  • rubocop根据 Ruby 代码风格指南验证你的 Ruby 代码,相当于 puppet-lint

正如你所说,这些对于最小模块,但它们很有用。您不需要编写测试,甚至不需要对代码进行 lint,但使用这些工具可以帮助您创建更可靠的模块,并帮助您进行更改,而不会冒在 Puppet 中无法工作的风险。

相关内容