neillturner / kitchen-verifier-serverspec

A Test Kitchen Serverspec Verifer without having to transit the Busser layer
Other
39 stars 19 forks source link

bundler2.0.0 requires ruby 2.3 #36

Closed MatrixCrawler closed 5 years ago

MatrixCrawler commented 5 years ago

On Amazon Linux 1 we have the problem, that the new bundler 2.0.0 requires ruby 2.3 but with the default installation is ruby 2.0.0. This leads to an error in the verifier installation


       ================================================================================
        Package                 Arch      Version                   Repository    Size
       ================================================================================
       Installing:
        ruby                    noarch    1:2.0-0.3.amzn1           amzn-main    2.5 k
       Installing for dependencies:
        libyaml                 x86_64    0.1.6-6.7.amzn1           amzn-main     59 k
        ruby20                  x86_64    2.0.0.648-1.31.amzn1      amzn-main     69 k
        ruby20-irb              noarch    2.0.0.648-1.31.amzn1      amzn-main     90 k
        ruby20-libs             x86_64    2.0.0.648-1.31.amzn1      amzn-main    3.7 M
        rubygem20-bigdecimal    x86_64    1.2.0-1.31.amzn1          amzn-main     79 k
        rubygem20-json          x86_64    1.8.3-1.51.amzn1          amzn-main     69 k
        rubygem20-psych         x86_64    2.0.0-1.31.amzn1          amzn-main     78 k
        rubygem20-rdoc          noarch    4.2.2-1.43.amzn1          amzn-main    581 k
        rubygems20              noarch    2.0.14.1-1.31.amzn1       amzn-main    225 k

       Transaction Summary
       ================================================================================
       Install  1 Package (+9 Dependent packages)

       Total download size: 4.9 M
       Installed size: 13 M
       Downloading packages:
(1/10): libyaml-0.1.6-6.7.amzn1.x86_64.rpm                 |  59 kB   00:00
(2/10): ruby-2.0-0.3.amzn1.noarch.rpm                      | 2.5 kB   00:00
(3/10): ruby20-2.0.0.648-1.31.amzn1.x86_64.rpm             |  69 kB   00:00
(4/10): ruby20-irb-2.0.0.648-1.31.amzn1.noarch.rpm         |  90 kB   00:00
(5/10): rubygem20-bigdecimal-1.2.0-1.31.amzn1.x86_64.rpm   |  79 kB   00:00
(6/10): rubygem20-json-1.8.3-1.51.amzn1.x86_64.rpm         |  69 kB   00:00
(7/10): rubygem20-psych-2.0.0-1.31.amzn1.x86_64.rpm        |  78 kB   00:00
(8/10): rubygem20-rdoc-4.2.2-1.43.amzn1.noarch.rpm         | 581 kB   00:00
(9/10): ruby20-libs-2.0.0.648-1.31.amzn1.x86_64.rpm        | 3.7 MB   00:00
(10/10): rubygems20-2.0.14.1-1.31.amzn1.noarch.rpm         | 225 kB   00:00
       --------------------------------------------------------------------------------
       Total                                              8.5 MB/s | 4.9 MB  00:00
       Running transaction check
       Running transaction test
       Transaction test succeeded
       Running transaction
  Installing : ruby20-libs-2.0.0.648-1.31.amzn1.x86_64                     1/10
  Installing : libyaml-0.1.6-6.7.amzn1.x86_64                              2/10
  Installing : rubygem20-json-1.8.3-1.51.amzn1.x86_64                      3/10
  Installing : rubygem20-psych-2.0.0-1.31.amzn1.x86_64                     4/10
  Installing : ruby20-2.0.0.648-1.31.amzn1.x86_64                          5/10
  Installing : ruby20-irb-2.0.0.648-1.31.amzn1.noarch                      6/10
  Installing : rubygem20-bigdecimal-1.2.0-1.31.amzn1.x86_64                7/10
  Installing : rubygems20-2.0.14.1-1.31.amzn1.noarch                       8/10
  Installing : rubygem20-rdoc-4.2.2-1.43.amzn1.noarch                      9/10
  Installing : 1:ruby-2.0-0.3.amzn1.noarch                                10/10
  Verifying  : ruby20-irb-2.0.0.648-1.31.amzn1.noarch                      1/10
  Verifying  : rubygem20-rdoc-4.2.2-1.43.amzn1.noarch                      2/10
  Verifying  : rubygem20-json-1.8.3-1.51.amzn1.x86_64                      3/10
  Verifying  : rubygems20-2.0.14.1-1.31.amzn1.noarch                       4/10
  Verifying  : ruby20-libs-2.0.0.648-1.31.amzn1.x86_64                     5/10
  Verifying  : 1:ruby-2.0-0.3.amzn1.noarch                                 6/10
  Verifying  : rubygem20-psych-2.0.0-1.31.amzn1.x86_64                     7/10
  Verifying  : ruby20-2.0.0.648-1.31.amzn1.x86_64                          8/10
  Verifying  : libyaml-0.1.6-6.7.amzn1.x86_64                              9/10
  Verifying  : rubygem20-bigdecimal-1.2.0-1.31.amzn1.x86_64               10/10

       Installed:
         ruby.noarch 1:2.0-0.3.amzn1

       Dependency Installed:
         libyaml.x86_64 0:0.1.6-6.7.amzn1
         ruby20.x86_64 0:2.0.0.648-1.31.amzn1
         ruby20-irb.noarch 0:2.0.0.648-1.31.amzn1
         ruby20-libs.x86_64 0:2.0.0.648-1.31.amzn1
         rubygem20-bigdecimal.x86_64 0:1.2.0-1.31.amzn1
         rubygem20-json.x86_64 0:1.8.3-1.51.amzn1
         rubygem20-psych.x86_64 0:2.0.0-1.31.amzn1
         rubygem20-rdoc.noarch 0:4.2.2-1.43.amzn1
         rubygems20.noarch 0:2.0.14.1-1.31.amzn1

       Complete!
Fetching: bundler-2.0.0.gem (100%)
       ERROR:  Error installing bundler:
        bundler requires Ruby version >= 2.3.0.
       which: no bundle in (/usr/local/bin:/bin:/usr/bin)
       ---> BUNDLE_CMD variable is:
       install: unrecognized option '--gemfile=/tmp/kitchen/Gemfile'
       Try 'install --help' for more information.
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: 1 actions failed.
>>>>>>     Failed to complete #verify action: [SSH exited (1) for command: [
            if [ ! $(which ruby) ]; then
              echo '-----> Installing ruby, will try to determine platform os'
              if [ -f /etc/centos-release ] || [ -f /etc/redhat-release ] || [ -f /etc/oracle-release ]; then
                sudo -E -H yum -y install ruby
              else
                if [ -f /etc/system-release ] && grep -q 'Amazon Linux' /etc/system-release; then
                  sudo -E -H yum -y install ruby
                else
                  sudo -E -H apt-get -y update
                  sudo -E -H apt-get -y install ruby
                fi
              fi
            fi
                        if [ "$(sudo -E -H gem list bundler -i)" = "true" ]; then
              echo "Bundler already installed"
            else
              if [ "$(sudo -E -H gem list bundler -i)" = "false" ]; then
                sudo -E -H gem install  --no-ri --no-rdoc bundler
              else
                echo "ERROR: Ruby not installed correctly"
                exit 1
              fi
            fi

            if [ -d /tmp/kitchen ]; then
                            if [ "$(sudo -E -H gem list serverspec -i)" = "false" ]; then
                        sudo -E -H rm -f /tmp/kitchen/Gemfile
          sudo -E -H echo "source 'https://rubygems.org'" >> /tmp/kitchen/Gemfile
          sudo -E -H echo "gem 'net-ssh','~> 2.9'"  >> /tmp/kitchen/Gemfile
          sudo -E -H echo "gem 'serverspec'" >> /tmp/kitchen/Gemfile

              BUNDLE_CMD=$(which bundle)
              echo "---> BUNDLE_CMD variable is: ${BUNDLE_CMD}"
              sudo -E -H  $BUNDLE_CMD install --gemfile=/tmp/kitchen/Gemfile
            fi

            else
              echo "ERROR: Default path '/tmp/kitchen' does not exist"
              exit 1
            fi
]] on default-amazonlinux
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration
MatrixCrawler commented 5 years ago

a workaround for us is to add the following to our .kitchen.yml

verifier:
  additional_install_command: >
    sudo yum install -y ruby24 &&
    sudo update-alternatives --set ruby /usr/bin/ruby2.4 &&
    sudo gem update --system --no-document &&
    sudo gem install -N bundler
maunzCache commented 5 years ago

Bundler version is not locked in lib/kitchen/verifier/serverspec.rb file.

rk295 commented 5 years ago

Same error on Centos 7 btw.

aderixon commented 5 years ago

This works on CentOS:

verifier:
  name: serverspec
  sudo_command: 'sudo -i -E -H'
  additional_install_command: >
    sudo yum install -y centos-release-scl &&
    sudo yum install -y rh-ruby23 &&
    sudo bash -c "echo 'source scl_source enable rh-ruby23' > /etc/profile.d/ruby23.sh" &&
    sudo yum install -y rh-ruby23-rubygem-bundler &&
    source scl_source enable rh-ruby23`

(The same issue also affects kitchen-ansible with Busser.)

I think the possible solutions are:

  1. Pin the bundler version to something < 2.0.0 ("gem install" with no version is asking for trouble if Rubygems doesn't check compatibility).
  2. Install SCL rh-ruby23 or later plus the bundler subpackage (ideally, allow the package names & path to be configurable).
  3. Use serverspec locally against the remote container (didn't like this as it appears to involve driver-specific config in kitchen.yml).