Techioz Blog

gem r10k をインストールしようとすると R10K モジュールが間違った Ruby バージョンを取得する

概要

puppetforge puppet-r10k r10k のモジュールを使用して r10k をデプロイしようとしていますが、puppet Agent -t を実行すると、モジュールがマシンにインストールされている間違ったバージョンを取得するようです。エラー:

Error: Execution of '/opt/puppetlabs/puppet/bin/gem install --no-document --no-document r10k' returned 1: ERROR:  Error installing r10k:
    The last version of faraday-net_http (>= 2.0, < 3.2) to support your Ruby & RubyGems was 3.0.2. Try installing it with `gem install faraday-net_http -v 3.0.2` and then running the current command again
    faraday-net_http requires Ruby version >= 3.0.0. The current ruby version is 2.7.8.225.
Error: /Stage[main]/R10k::Install/Package[r10k]/ensure: change from 'absent' to 'present' failed: Execution of '/opt/puppetlabs/puppet/bin/gem install --no-document --no-document r10k' returned 1: ERROR:  Error installing r10k:
    The last version of faraday-net_http (>= 2.0, < 3.2) to support your Ruby & RubyGems was 3.0.2. Try installing it with `gem install faraday-net_http -v 3.0.2` and then running the current command again
    faraday-net_http requires Ruby version >= 3.0.0. The current ruby version is 2.7.8.225.

マシン上の現在のバージョン:

root@mpuppetserver:~# ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu]

(彼の言うように) faraday-net_http -v 3.0.2 をインストールしようとしましたが、これでは問題は解決されません。 とにかく、さまざまなソースとリモートリポジトリ(Hiera)を追加しようとしました:

r10k::sources:
  preprod:
    remote: "%{lookup('git_preprod')}"
    basedir: "${::settings::codedir}/environments"
    prefix: false

エラーをスキップして、データをファイル /etc/puppetlabs/r10k/r10k.yaml に追加できるようです。

root@puppetserver:~# cat /etc/puppetlabs/r10k/r10k.yaml
---
pool_size: 6
deploy:
  generate_types: true
  exclude_spec: true
cachedir: "/opt/puppetlabs/puppet/cache/r10k"
sources:
  preprod:
    remote: git@blabla/bla.git
    basedir: "${::settings::codedir}/environments"
    prefix: false

エラーが残り、r10k gem がインストールされません。

ありがとう。

解決策

gem は、Ruby のシステム インストールや JRuby Puppet Server インストールではなく、Puppet Server の C/MRI インタープリター Ruby インストールと一緒にインストールする必要があります。

/opt/puppetlabs/puppet/bin/gem install --no-document faraday-net_http -v 3.0.2

これによりエラーが解決され、続行できるようになります。