ディレクトリから複数のPuppetモジュールを素早くインストール

ディレクトリから複数のPuppetモジュールを素早くインストール

1 つのコマンドでディレクトリから複数の Puppet モジュールをインストールする方法はありますか?
Forge からダウンロードした tar.gz 形式の複数の Puppet モジュールを含むディレクトリがあり、すべてのモジュールをインストールする必要があります。ただし、puppet module install引数は 1 つのモジュールに対してのみ使用できます。最初は、puppet module installディレクトリ内の各モジュールに対して 1 回呼び出す bash ループを使用しました。しかし、Puppet の起動時間が遅いため、各モジュールのインストールにシステムで 1.6 ~ 2 秒かかることがすぐにわかりました (Ruby がすべての gem をロードするのに時間がかかるためと思われます)。インストールするモジュールを追加するにつれて、それらすべてをインストールするのにかかる時間が問題になりました。

引数なしで Puppet を実行すると、puppet help1.6 ~ 2 秒しかかかりません。puppet module installモジュールがすでにインストールされている場合も、実行に同じくらいの時間がかかります。これは、モジュールのインストールにかかる時間の大部分が Puppet の起動時間であり、モジュールのインストールにかかる時間ではないことを示しています。Puppet 呼び出しを strace すると、数千の stat および lstat 呼び出しがあり、ENOENT no such file or directory という結果になります。私の調査によると、これは Ruby が gem をロードしているもので、その一部は共有ライブラリを使用していると考えられます。

モジュールをインストールしているホストは分離されたネットワーク上にあり、フォージにアクセスできないため、フォージから直接インストールすることはできません。

私は簡単にboltの使用について調べましたが、ローカルディレクトリからモジュールをインストールする方法がドキュメントに見つかりませんでした。

答え1

今のところ、回避策として、puppet module install の簡単な ruby​​ ラッパー スクリプトを作成しました。スクリプトはSystemExit「内部」テスト メソッドをキャッチして呼び出し、この追加スクリプトを維持する必要があるため、これは理想的なソリューションではありません。複数のモジュールをインストールする動作を提供する puppet 提供のコマンドを呼び出したいと思っていましたが、今のところはこのラッパー スクリプトで間に合うはずです。

#!/opt/puppetlabs/puppet/bin/ruby

begin
  require 'puppet/util/command_line'
  ARGV.each { |arg|
    begin
      Puppet::Util::Commandline.new('puppet', ['module', 'install', arg]).execute
    rescue SystemExit => e
      if e.success?
        $stderr.puts e.message
      else
        raise
      end
    end
    Puppet.settings.send(:clear_everything_for_tests) # needed after each puppet Commandline call to clear the global variables in order to call Commandline execute again
  }
rescue LoadError => e
  $stderr.puts e.message
  exit(1)
end

関連情報