web-dev-qa-db-ja.com

puppetモジュールが生成するGemfileを生成するのはなぜですか、またその目的は何ですか?

私は最近puppet module generateを実行しましたが、単純なモジュールには不要に見える大量のがらくたになってしまいました。つまり、最小限のモジュールの多くは、構成ファイルを1つか2つテンプレート化し、オープンソースのPuppetモジュールに手間のかかる作業を任せることになります。

Puppetのドキュメントでは、puppet module generateのほとんどをここで説明しています。

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

しかし、Gemfileについては何も表示されませんでした。

puppet module generateによって生成されたGemfileはどのような用途に使用されますか?

$ 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

Gemfilepuppet module generateによって作成されましたが、あなたのポイントは何ですか?

4
Nathan Basanese

GemfileはRubyの Bundler アプリによって使用され、プロジェクトで使用されるRubyGems(Rubyライブラリ)をインストールします-この場合、使用できるgem開発モジュール。 Puppet内でモジュールをインストールまたは使用する場合は使用されません。

Rubyがインストールされている場合は、次を実行してこれらのgemをインストールできます。

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

これらの宝石の目的と、それらが役立つと思われる理由を簡単に説明します。

  • metadata-json-lintは、metadata.jsonファイルが正しいことを確認します。そうでない場合、Puppetがモジュールをロードできず、 Forge にアップロードできませんでした。
  • puppetlabs_spec_helperは、テストなどを実行するためのヘルパーです。
  • puppet-lintは、PuppetマニフェストをPuppetに対して検証します スタイルガイド詳細
  • rspec-puppetrspecを使用すると、Puppetクラス、定義済みタイプなどのテストを記述して、エラーなしでコンパイルされ、正しいパラメーターを使用して適切なリソースを作成できることを確認できます( 詳細
  • rakeは、Rakefileから事前設定されたタスクを実行するために使用されます。つまり、rake testは上記のすべてを実行し、マニフェスト、ERBファイルなども検証します。
  • rubocopは、RubyコードをRubyスタイルガイド(puppet-lintと同等)に対して検証します

ご提案のとおり、これらはminimalモジュールには必要ありませんが、便利です。テストを記述したり、コードをリントしたりする必要はありませんが、ツールを使用すると、より信頼性の高いモジュールを作成し、Puppet内で機能しないリスクなしに変更を加えることができます。

1
Dominic Cleal