diff --git a/manifests/init.pp b/manifests/init.pp index fdfb587..489d322 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,47 +1,22 @@ class ruby($version = "2.0.0-p0") { + include ruby::prereqs + rubyinstall { "$version": } + } define rubyinstall($version = $title) { - package { - "build-essential": - ensure => present; - "libssl-dev": - ensure => present; - "libreadline6": - ensure => present; - "libreadline6-dev": - ensure => present; - "zlib1g": - ensure => present; - "zlib1g-dev": - ensure => present; - "curl": - ensure => present; - "git": - ensure => present; - "rake": - ensure => present - } + $packages = $ruby::prereqs::packages # The rm at the start is legacy, as previous versions of this plugin # used to download the package as a zip file rather than cloning :( - exec { "ruby-build-checkout": + + exec { 'ruby-build-checkout': command => "rm -Rf /opt/ruby-build && git clone https://github.com/sstephenson/ruby-build /opt/ruby-build", creates => "/opt/ruby-build/.git", - require => [ - Package["curl"], - Package["git"], - Package["rake"], - Package["build-essential"], - Package["libssl-dev"], - Package["libreadline6"], - Package["libreadline6-dev"], - Package["zlib1g"], - Package["zlib1g-dev"] - ], path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - timeout => 0 + timeout => 0, + require => Package[$packages], } exec { "ruby-build-update": @@ -60,30 +35,46 @@ timeout => 0 } - exec { "alternatives-ruby-$version": - command => "update-alternatives --quiet --install /usr/bin/ruby ruby /opt/ruby-$version/bin/ruby 10 --slave /usr/bin/irb irb /opt/ruby-$version/bin/irb && update-alternatives --quiet --set ruby /opt/ruby-$version/bin/ruby", - unless => "test /usr/bin/ruby -ef /opt/ruby-$version/bin/ruby && test /usr/bin/irb -ef /opt/ruby-$version/bin/irb", - path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - require => Exec["ruby-install-$version"] - } - exec { "alternatives-gem-$version": - command => "update-alternatives --quiet --install /usr/bin/gem gem /opt/ruby-$version/bin/gem 10 && update-alternatives --quiet --set gem /opt/ruby-$version/bin/gem", - unless => "test /usr/bin/gem -ef /opt/ruby-$version/bin/gem", - path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - require => Exec["alternatives-ruby-$version"] - } + case $operatingsystem { + 'RedHat', 'Centos', 'Ubuntu': { + #set ruby path + file { "/etc/profile.d/ruby.sh": + mode => 0755, + owner => 'root', + group => 'root', + content => "pathmunge /opt/ruby-$version/bin", + require => Exec["ruby-install-$version"], + } + } - exec { "gem-install-bundler-$version": - command => "gem install bundler", - unless => "gem list | grep bundler", - timeout => "-1", - path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - require => Exec["alternatives-gem-$version"] + + 'Ubuntu': { + exec { "alternatives-ruby-$version": + command => "update-alternatives --quiet --install /usr/bin/ruby ruby /opt/ruby-$version/bin/ruby 10 --slave /usr/bin/irb irb /opt/ruby-$version/bin/irb && update-alternatives --quiet --set ruby /opt/ruby-$version/bin/ruby", + unless => "test /usr/bin/ruby -ef /opt/ruby-$version/bin/ruby && test /usr/bin/irb -ef /opt/ruby-$version/bin/irb", + path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], + require => Exec["ruby-install-$version"] + } + exec { "alternatives-gem-$version": + command => "update-alternatives --quiet --install /usr/bin/gem gem /opt/ruby-$version/bin/gem 10 && update-alternatives --quiet --set gem /opt/ruby-$version/bin/gem", + unless => "test /usr/bin/gem -ef /opt/ruby-$version/bin/gem", + path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], + require => Exec["alternatives-ruby-$version"] + } + + exec { "gem-install-bundler-$version": + command => "gem install bundler", + unless => "gem list | grep bundler", + timeout => "-1", + path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], + require => Exec["alternatives-gem-$version"] + } + exec { "alternatives-bundle-$version": + command => "update-alternatives --quiet --install /usr/bin/bundle bundle /opt/ruby-$version/bin/bundle 10 && update-alternatives --quiet --set bundle /opt/ruby-$version/bin/bundle", + unless => "test /usr/bin/bundle -ef /opt/ruby-$version/bin/bundle", + path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], + require => Exec["gem-install-bundler-$version"] + } + } } - exec { "alternatives-bundle-$version": - command => "update-alternatives --quiet --install /usr/bin/bundle bundle /opt/ruby-$version/bin/bundle 10 && update-alternatives --quiet --set bundle /opt/ruby-$version/bin/bundle", - unless => "test /usr/bin/bundle -ef /opt/ruby-$version/bin/bundle", - path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - require => Exec["gem-install-bundler-$version"] } -} diff --git a/manifests/prereqs.pp b/manifests/prereqs.pp new file mode 100644 index 0000000..ea5fd68 --- /dev/null +++ b/manifests/prereqs.pp @@ -0,0 +1,23 @@ +class ruby::prereqs { + case $operatingsystem { + ubuntu: { + $packages = [ "build-essential", "libssl-dev", "libreadline5", + "libreadline6-dev", "zlib1g", "zlib1g-dev", "curl", "git", + "rake",] + } + + centos: { + $packages = [ "gcc", "make", "automake", "autoconf", "libcurl-devel", + "openssl-devel", "zlib-devel","curl", "git",] + } + + default: { + fail("unsupported operating system, patches welcome") + } + + } + + package { $packages: + ensure => installed, + } +} diff --git a/plugins/facter/rbenv_ruby.rb b/plugins/facter/rbenv_ruby.rb new file mode 100644 index 0000000..d0f7b73 --- /dev/null +++ b/plugins/facter/rbenv_ruby.rb @@ -0,0 +1,11 @@ +Facter.add(:rbenv_ruby) do + setcode do + `/usr/bin/which ruby`.chomp + end +end + +Facter.add(:rbenv_ruby_home) do + setcode do + File.dirname(`/usr/bin/which ruby`).chomp!('bin') + end +end