falkorlib 0.7.9 → 0.7.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -6
- data/falkorlib.gemspec +2 -2
- data/lib/falkorlib/bootstrap.rb +2 -1
- data/lib/falkorlib/bootstrap/base.rb +13 -1
- data/lib/falkorlib/bootstrap/vagrant.rb +59 -0
- data/lib/falkorlib/cli.rb +9 -1
- data/lib/falkorlib/config.rb +4 -4
- data/lib/falkorlib/tasks/git.rb +20 -0
- data/lib/falkorlib/version.rb +1 -1
- data/templates/puppet/modules/manifests/common.pp.erb +5 -5
- data/templates/vagrant/Vagrantfile.erb +185 -0
- data/templates/vagrant/vagrant/bootstrap.sh +288 -0
- data/templates/vagrant/vagrant/config.yaml +16 -0
- data/templates/vagrant/vagrant/config.yaml.sample +149 -0
- metadata +11 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 76ac30acb34753aee392761a3d3d3bb779a0e40e
         | 
| 4 | 
            +
              data.tar.gz: 0fbb0c3f20f1ac99e8e070a3e4eafadf2606f044
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7dc680e984085557b1ef548c755f3362a4095c50408548d67d9e0d55b578347b31611cb95baecd3d79936d2174908abb1cff9c436d2d582b7e66ff518c02bfa1
         | 
| 7 | 
            +
              data.tar.gz: 4ec409045636b70f04d067b13bea17cfddfda02f7c5fc89f1aa520f135b17a85717ff766a79306730aa6a8a71417b1047b0277ce3df6d5c1f44a4e58ce1a914f
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                falkorlib (0.7. | 
| 4 | 
            +
                falkorlib (0.7.11)
         | 
| 5 5 | 
             
                  activesupport (~> 4.0)
         | 
| 6 6 | 
             
                  artii (>= 2.1)
         | 
| 7 7 | 
             
                  awesome_print (~> 1.2)
         | 
| @@ -22,7 +22,6 @@ PATH | |
| 22 22 | 
             
            GEM
         | 
| 23 23 | 
             
              remote: http://rubygems.org/
         | 
| 24 24 | 
             
              specs:
         | 
| 25 | 
            -
                CFPropertyList (2.2.8)
         | 
| 26 25 | 
             
                activesupport (4.2.7.1)
         | 
| 27 26 | 
             
                  i18n (~> 0.7)
         | 
| 28 27 | 
             
                  json (~> 1.7, >= 1.7.7)
         | 
| @@ -45,8 +44,7 @@ GEM | |
| 45 44 | 
             
                docile (1.1.5)
         | 
| 46 45 | 
             
                ethon (0.9.1)
         | 
| 47 46 | 
             
                  ffi (>= 1.3.0)
         | 
| 48 | 
            -
                facter (2.4.6 | 
| 49 | 
            -
                  CFPropertyList (~> 2.2.6)
         | 
| 47 | 
            +
                facter (2.4.6)
         | 
| 50 48 | 
             
                faraday (0.10.0)
         | 
| 51 49 | 
             
                  multipart-post (>= 1.2, < 3)
         | 
| 52 50 | 
             
                faraday_middleware (0.10.1)
         | 
| @@ -142,10 +140,11 @@ GEM | |
| 142 140 | 
             
                  thread_safe (~> 0.1)
         | 
| 143 141 | 
             
                unicode-display_width (1.1.1)
         | 
| 144 142 | 
             
                websocket (1.2.3)
         | 
| 145 | 
            -
                yard (0. | 
| 143 | 
            +
                yard (0.9.12)
         | 
| 146 144 |  | 
| 147 145 | 
             
            PLATFORMS
         | 
| 148 146 | 
             
              ruby
         | 
| 147 | 
            +
              x86_64-darwin-16
         | 
| 149 148 |  | 
| 150 149 | 
             
            DEPENDENCIES
         | 
| 151 150 | 
             
              bundler
         | 
| @@ -159,7 +158,7 @@ DEPENDENCIES | |
| 159 158 | 
             
              simplecov
         | 
| 160 159 | 
             
              travis (~> 1.6)
         | 
| 161 160 | 
             
              travis-lint (~> 1.8)
         | 
| 162 | 
            -
              yard (~> 0. | 
| 161 | 
            +
              yard (~> 0.9.11)
         | 
| 163 162 |  | 
| 164 163 | 
             
            BUNDLED WITH
         | 
| 165 164 | 
             
               1.14.3
         | 
    
        data/falkorlib.gemspec
    CHANGED
    
    | @@ -100,8 +100,8 @@ Gem::Specification.new do |s| | |
| 100 100 | 
             
              s.add_development_dependency("bundler", "~> 1.0")
         | 
| 101 101 | 
             
              s.add_development_dependency 'rspec', '~> 3.0' #, '>= 2.7.0'
         | 
| 102 102 | 
             
              s.add_development_dependency("pry",    "~> 0.9")
         | 
| 103 | 
            -
              s.add_development_dependency("yard",   "~> 0. | 
| 104 | 
            -
              s.add_development_dependency('rubocop', '~> 0. | 
| 103 | 
            +
              s.add_development_dependency("yard",   "~> 0.9.11")
         | 
| 104 | 
            +
              s.add_development_dependency('rubocop', '~> 0.49.0')
         | 
| 105 105 | 
             
              s.add_development_dependency("rubygems-tasks", "~> 0.2")
         | 
| 106 106 | 
             
              s.add_development_dependency("travis",        "~> 1.6")
         | 
| 107 107 | 
             
              s.add_development_dependency("travis-lint",   "~> 1.8")
         | 
    
        data/lib/falkorlib/bootstrap.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 2 2 | 
             
            ################################################################################
         | 
| 3 | 
            -
            # Time-stamp: < | 
| 3 | 
            +
            # Time-stamp: <Fri 2018-04-27 13:46 svarrette>
         | 
| 4 4 | 
             
            ################################################################################
         | 
| 5 5 | 
             
            # Management of Bootstrapping operations
         | 
| 6 6 |  | 
| @@ -16,5 +16,6 @@ require "falkorlib/bootstrap/ruby" | |
| 16 16 | 
             
            require "falkorlib/bootstrap/git"
         | 
| 17 17 | 
             
            require "falkorlib/bootstrap/latex"
         | 
| 18 18 | 
             
            require "falkorlib/bootstrap/mkdocs"
         | 
| 19 | 
            +
            require "falkorlib/bootstrap/vagrant"
         | 
| 19 20 |  | 
| 20 21 | 
             
            #require "falkorlib/bootstrap/repo"
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 2 2 | 
             
            ################################################################################
         | 
| 3 | 
            -
            # Time-stamp: < | 
| 3 | 
            +
            # Time-stamp: <Fri 2018-04-27 13:51 svarrette>
         | 
| 4 4 | 
             
            ################################################################################
         | 
| 5 5 | 
             
            # Interface for the main Bootstrapping operations
         | 
| 6 6 | 
             
            #
         | 
| @@ -114,6 +114,18 @@ module FalkorLib #:nodoc: | |
| 114 114 | 
             
                        :gforge => { :url => 'gforge.uni.lu', :name => 'GForge @ Uni.lu' },
         | 
| 115 115 | 
             
                        :github => { :url => 'github.com',    :name => 'Github', :login => (`whoami`.chomp.capitalize).to_s },
         | 
| 116 116 | 
             
                        :gitlab => { :url => 'gitlab.uni.lu', :name => 'Gitlab @ Uni.lu', :login => (`whoami`.chomp.capitalize).to_s }
         | 
| 117 | 
            +
                      },
         | 
| 118 | 
            +
                      :vagrant => {
         | 
| 119 | 
            +
                        :os     => :centos7,
         | 
| 120 | 
            +
                        :ram    => 1024,
         | 
| 121 | 
            +
                        :vcpus  => 4,
         | 
| 122 | 
            +
                        :domain => 'vagrant.dev',
         | 
| 123 | 
            +
                        :range  => '10.10.1.0/24',
         | 
| 124 | 
            +
                        :boxes => {
         | 
| 125 | 
            +
                          :centos7  => 'centos/7',
         | 
| 126 | 
            +
                          :debian8  => 'debian/contrib-jessie64',
         | 
| 127 | 
            +
                          :ubuntu14 => 'ubuntu/trusty64'
         | 
| 128 | 
            +
                        },
         | 
| 117 129 | 
             
                      }
         | 
| 118 130 | 
             
                    }
         | 
| 119 131 |  | 
| @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            ################################################################################
         | 
| 3 | 
            +
            # Time-stamp: <Fri 2018-04-27 13:57 svarrette>
         | 
| 4 | 
            +
            ################################################################################
         | 
| 5 | 
            +
            # Interface for Bootstrapping MkDocs
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            require "falkorlib"
         | 
| 9 | 
            +
            require "falkorlib/common"
         | 
| 10 | 
            +
            require "falkorlib/bootstrap"
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            require 'erb' # required for module generation
         | 
| 13 | 
            +
            require 'artii'
         | 
| 14 | 
            +
            require 'facter'
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            include FalkorLib::Common
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            module FalkorLib
         | 
| 19 | 
            +
              module Bootstrap #:nodoc:
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                module_function
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                ###### vagrant ######
         | 
| 24 | 
            +
                # Initialize Vagrant in the current directory
         | 
| 25 | 
            +
                # Supported options:
         | 
| 26 | 
            +
                #  * :force       [boolean] force overwritting
         | 
| 27 | 
            +
                ##
         | 
| 28 | 
            +
                def vagrant(dir = Dir.pwd, options = {})
         | 
| 29 | 
            +
                  info "Initialize Vagrant (see https://www.vagrantup.com/)"
         | 
| 30 | 
            +
                  path = normalized_path(dir)
         | 
| 31 | 
            +
                  use_git = FalkorLib::Git.init?(path)
         | 
| 32 | 
            +
                  rootdir = (use_git) ? FalkorLib::Git.rootdir(path) : path
         | 
| 33 | 
            +
                  templatedir = File.join( FalkorLib.templates, 'vagrant')
         | 
| 34 | 
            +
                  config = FalkorLib::Config::Bootstrap::DEFAULTS[:vagrant].clone
         | 
| 35 | 
            +
                  if options[:os]
         | 
| 36 | 
            +
                    config[:os] = options[:os]
         | 
| 37 | 
            +
                  else
         | 
| 38 | 
            +
                    config[:os] = select_from(config[:boxes].keys,
         | 
| 39 | 
            +
                                "Select OS to configure within your vagrant boxes by default",
         | 
| 40 | 
            +
                                (config[:boxes].keys.find_index(config[:os]) + 1))
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                  [ :ram, :vcpus, :domain, :range ].each do |k|
         | 
| 43 | 
            +
                    config[k.to_sym] = ask("\tDefault #{k.capitalize}:", config[k.to_sym])
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                  puts config.to_yaml
         | 
| 46 | 
            +
                  FalkorLib::GitFlow.start('feature', 'vagrant', rootdir) if (use_git && FalkorLib::GitFlow.init?(rootdir))
         | 
| 47 | 
            +
                  init_from_template(templatedir, rootdir, config,
         | 
| 48 | 
            +
                                     :no_interaction => true,
         | 
| 49 | 
            +
                                     :no_commit => true)
         | 
| 50 | 
            +
                  # Dir.chdir( File.join(rootdir, 'docs')) do
         | 
| 51 | 
            +
                  #   run %(ln -s README.md index.md )
         | 
| 52 | 
            +
                  #   run %(ln -s README.md contributing/index.md )
         | 
| 53 | 
            +
                  #   run %(ln -s README.md setup/index.md )
         | 
| 54 | 
            +
                  # end
         | 
| 55 | 
            +
                  #exit_status.to_i
         | 
| 56 | 
            +
                end # vagrant
         | 
| 57 | 
            +
             | 
| 58 | 
            +
              end # module Bootstrap
         | 
| 59 | 
            +
            end # module FalkorLib
         | 
    
        data/lib/falkorlib/cli.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 2 2 | 
             
            ################################################################################
         | 
| 3 | 
            -
            # Time-stamp: < | 
| 3 | 
            +
            # Time-stamp: <Fri 2018-04-27 13:39 svarrette>
         | 
| 4 4 | 
             
            ################################################################################
         | 
| 5 5 | 
             
            # Interface for the CLI
         | 
| 6 6 | 
             
            #
         | 
| @@ -143,6 +143,14 @@ By default, <PATH> is '.' meaning that the repository will be initialized in the | |
| 143 143 | 
             
                  desc "new <type> [<path>]", "Initialize the directory PATH with one of FalkorLib's template(s)"
         | 
| 144 144 | 
             
                  subcommand "new", FalkorLib::CLI::New
         | 
| 145 145 |  | 
| 146 | 
            +
                  ###### vagrant ######
         | 
| 147 | 
            +
                  method_option :force, :aliases => '-f', :default => false, :type => :boolean,
         | 
| 148 | 
            +
                                :desc => "Force generation (might overwrite files)"
         | 
| 149 | 
            +
                  #......................................
         | 
| 150 | 
            +
                  desc "vagrant [options]", "Initialize vagrant for the current project"
         | 
| 151 | 
            +
                  def vagrant(path = '.')
         | 
| 152 | 
            +
                    FalkorLib::Bootstrap.vagrant(path, options)
         | 
| 153 | 
            +
                  end # vagrant
         | 
| 146 154 |  | 
| 147 155 | 
             
                  ###### version ######
         | 
| 148 156 | 
             
                  desc "--version, -V", "Print the version number"
         | 
    
        data/lib/falkorlib/config.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 2 2 | 
             
            ################################################################################
         | 
| 3 | 
            -
            # Time-stamp: <Fri  | 
| 3 | 
            +
            # Time-stamp: <Fri 2018-04-27 13:52 svarrette>
         | 
| 4 4 | 
             
            ################################################################################
         | 
| 5 5 | 
             
            # FalkorLib Configuration
         | 
| 6 6 | 
             
            #
         | 
| @@ -55,8 +55,8 @@ module FalkorLib #:nodoc: | |
| 55 55 | 
             
                  },
         | 
| 56 56 | 
             
                  #:custom_cfg   => '.falkorlib.yaml',
         | 
| 57 57 | 
             
                  :rvm => {
         | 
| 58 | 
            -
                    :rubies      => [ '2. | 
| 59 | 
            -
                    :version     => '2. | 
| 58 | 
            +
                    :rubies      => [ '2.4.1', '2.3.4', '2.2.7', '2.1.10', '2.0.0', '1.9.3' ],
         | 
| 59 | 
            +
                    :version     => '2.3.4',
         | 
| 60 60 | 
             
                    :versionfile => '.ruby-version',
         | 
| 61 61 | 
             
                    :gemsetfile  => '.ruby-gemset'
         | 
| 62 62 | 
             
                  },
         | 
| @@ -65,7 +65,7 @@ module FalkorLib #:nodoc: | |
| 65 65 | 
             
                    :puppet   => {}
         | 
| 66 66 | 
             
                  },
         | 
| 67 67 | 
             
                  :tokens  => { :code_climate => '' },
         | 
| 68 | 
            -
                  :project => {}
         | 
| 68 | 
            +
                  :project => {},
         | 
| 69 69 | 
             
                }
         | 
| 70 70 |  | 
| 71 71 | 
             
                module_function
         | 
    
        data/lib/falkorlib/tasks/git.rb
    CHANGED
    
    | @@ -48,5 +48,25 @@ else | |
| 48 48 | 
             
                    FalkorLib::GitFlow.init
         | 
| 49 49 | 
             
                  end
         | 
| 50 50 | 
             
                end # namespace git:flow
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                if   FalkorLib::GitFlow.init?
         | 
| 53 | 
            +
                  ###########  git:up   ###########
         | 
| 54 | 
            +
                  desc "Update your local branches"
         | 
| 55 | 
            +
                  task :up do |t|
         | 
| 56 | 
            +
                    info "#{t.comment}"
         | 
| 57 | 
            +
                    FalkorLib::Git.fetch
         | 
| 58 | 
            +
                    branches = FalkorLib::Git.list_branch
         | 
| 59 | 
            +
                    #puts branches.to_yaml
         | 
| 60 | 
            +
                    unless FalkorLib::Git.dirty?
         | 
| 61 | 
            +
                      FalkorLib.config.gitflow[:branches].each do |t, br|
         | 
| 62 | 
            +
                        info "updating Git Flow #{t} branch '#{br}' with the 'origin' remote"
         | 
| 63 | 
            +
                        run %{ git checkout #{br} && git merge origin/#{br} }
         | 
| 64 | 
            +
                      end
         | 
| 65 | 
            +
                      run %{ git checkout #{branches[0]} }  # Go back to the initial branch
         | 
| 66 | 
            +
                    else
         | 
| 67 | 
            +
                      warning "Unable to update -- your local repository copy is dirty"
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
                  end # task git:up
         | 
| 70 | 
            +
                end
         | 
| 51 71 | 
             
              end # namespace git
         | 
| 52 72 | 
             
            end
         | 
    
        data/lib/falkorlib/version.rb
    CHANGED
    
    
| @@ -29,10 +29,10 @@ class <%= config[:shortname] %>::common { | |
| 29 29 | 
             
              # Prepare the user and group
         | 
| 30 30 | 
             
              group { '<%= config[:shortname] %>':
         | 
| 31 31 | 
             
                ensure => $<%= config[:shortname] %>::ensure,
         | 
| 32 | 
            -
                name   =>  | 
| 33 | 
            -
                gid    =>  | 
| 32 | 
            +
                name   => $<%= config[:shortname] %>::params::group,
         | 
| 33 | 
            +
                gid    => $<%= config[:shortname] %>::params::gid,
         | 
| 34 34 | 
             
              }
         | 
| 35 | 
            -
              user { ' | 
| 35 | 
            +
              user { '<%= config[:shortname] %>':
         | 
| 36 36 | 
             
                ensure     => $<%= config[:shortname] %>::ensure,
         | 
| 37 37 | 
             
                name       => $<%= config[:shortname] %>::params::username,
         | 
| 38 38 | 
             
                uid        => $<%= config[:shortname] %>::params::gid,
         | 
| @@ -45,8 +45,8 @@ class <%= config[:shortname] %>::common { | |
| 45 45 | 
             
              }
         | 
| 46 46 |  | 
| 47 47 | 
             
              package { '<%= config[:shortname] %>':
         | 
| 48 | 
            -
                name    =>  | 
| 49 | 
            -
                ensure  =>  | 
| 48 | 
            +
                name    => $<%= config[:shortname] %>::params::packagename,
         | 
| 49 | 
            +
                ensure  => $<%= config[:shortname] %>::ensure}",
         | 
| 50 50 | 
             
              }
         | 
| 51 51 | 
             
              package { $<%= config[:shortname] %>::params::extra_packages:
         | 
| 52 52 | 
             
                ensure => 'present'
         | 
| @@ -0,0 +1,185 @@ | |
| 1 | 
            +
            # -*- mode: ruby -*-
         | 
| 2 | 
            +
            # vi: set ft=ruby :
         | 
| 3 | 
            +
            # Time-stamp: <Fri 2018-04-27 15:16 svarrette>
         | 
| 4 | 
            +
            ###########################################################################################
         | 
| 5 | 
            +
            #             __     __                          _    __ _ _
         | 
| 6 | 
            +
            #             \ \   / /_ _  __ _ _ __ __ _ _ __ | |_ / _(_) | ___
         | 
| 7 | 
            +
            #              \ \ / / _` |/ _` | '__/ _` | '_ \| __| |_| | |/ _ \
         | 
| 8 | 
            +
            #               \ V / (_| | (_| | | | (_| | | | | |_|  _| | |  __/
         | 
| 9 | 
            +
            #                \_/ \__,_|\__, |_|  \__,_|_| |_|\__|_| |_|_|\___|
         | 
| 10 | 
            +
            #                          |___/
         | 
| 11 | 
            +
            ###########################################################################################
         | 
| 12 | 
            +
            require 'yaml'
         | 
| 13 | 
            +
            require 'ipaddr'
         | 
| 14 | 
            +
            require 'deep_merge'
         | 
| 15 | 
            +
            require 'pp'
         | 
| 16 | 
            +
            require 'erb'
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            ###### Expected Vagrant plugins detection ######
         | 
| 19 | 
            +
            # For more information on the below plugins:
         | 
| 20 | 
            +
            # - https://github.com/oscar-stack/vagrant-hosts
         | 
| 21 | 
            +
            # - https://github.com/dotless-de/vagrant-vbguest
         | 
| 22 | 
            +
            # - https://github.com/emyl/vagrant-triggers
         | 
| 23 | 
            +
            # - https://github.com/fgrehm/vagrant-cachier
         | 
| 24 | 
            +
            # Terminal-table is a nice ruby gem for automatically print tables with nice layout
         | 
| 25 | 
            +
            ###
         | 
| 26 | 
            +
            [ 'vagrant-hosts',
         | 
| 27 | 
            +
              'vagrant-vbguest',
         | 
| 28 | 
            +
              'vagrant-triggers',
         | 
| 29 | 
            +
              'vagrant-cachier',
         | 
| 30 | 
            +
              'terminal-table' ].each do |plugin|
         | 
| 31 | 
            +
              abort "Install the  '#{plugin}' plugin with 'vagrant plugin install #{plugin}'" unless Vagrant.has_plugin?("#{plugin}")
         | 
| 32 | 
            +
            end
         | 
| 33 | 
            +
            require 'terminal-table'
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            ### Global variables ###
         | 
| 36 | 
            +
            # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
         | 
| 37 | 
            +
            VAGRANTFILE_API_VERSION = "2"
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            # Eventually a local YAML configuration for the deployment
         | 
| 40 | 
            +
            TOP_SRCDIR  = File.expand_path File.dirname(__FILE__)
         | 
| 41 | 
            +
            TOP_CONFDIR = File.join(TOP_SRCDIR, 'vagrant')
         | 
| 42 | 
            +
            config_file = File.join(TOP_CONFDIR, 'config.yaml')
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            #SHARED_DIR  = File.join('vagrant', 'shared')
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            ### Default settings ###
         | 
| 47 | 
            +
            DEFAULT_SETTINGS = {
         | 
| 48 | 
            +
              # Default images settings
         | 
| 49 | 
            +
              :defaults => {
         | 
| 50 | 
            +
                :os     => :<%= config[:os] %>,
         | 
| 51 | 
            +
                :ram    => <%= config[:ram] %>,
         | 
| 52 | 
            +
                :vcpus  => <%= config[:vcpus] %>,
         | 
| 53 | 
            +
                :vbguest_auto_update => true,
         | 
| 54 | 
            +
                # :nodes  => 1,
         | 
| 55 | 
            +
              },
         | 
| 56 | 
            +
              # Default domain settings
         | 
| 57 | 
            +
              :network => {
         | 
| 58 | 
            +
                :domain => '<%= config[:domain] %>',
         | 
| 59 | 
            +
                :range  => '<%= config[:range]  %>',
         | 
| 60 | 
            +
                :client_ip_start_offset => 100,
         | 
| 61 | 
            +
              },
         | 
| 62 | 
            +
              # Default Boxes
         | 
| 63 | 
            +
              :boxes => {
         | 
| 64 | 
            +
                :centos7  => '<%= config[:boxes][:centos7] %>',
         | 
| 65 | 
            +
                :debian8  => '<%= config[:boxes][:debian8] %>',
         | 
| 66 | 
            +
                :ubuntu14 => '<%= config[:boxes][:ubuntu14] %>'
         | 
| 67 | 
            +
              },
         | 
| 68 | 
            +
              # virtual images to deploy
         | 
| 69 | 
            +
              # <name>:
         | 
| 70 | 
            +
              #   :hostname: <hostname>
         | 
| 71 | 
            +
              #   :desc: <VM-description>
         | 
| 72 | 
            +
              #   :os: <os>       # from the configured boxes
         | 
| 73 | 
            +
              #   :ram: <ram>
         | 
| 74 | 
            +
              #   :vcpus: <vcpus>
         | 
| 75 | 
            +
              #   :role: <role>   # supported: [ 'controller', 'frontend' ]
         | 
| 76 | 
            +
              :vms => {
         | 
| 77 | 
            +
                # IF in single mode, below is the definition of the box to deploy
         | 
| 78 | 
            +
                'default' => {
         | 
| 79 | 
            +
                  :hostname => 'vm',
         | 
| 80 | 
            +
                  :desc     => 'Testing Vagrant box',
         | 
| 81 | 
            +
                },
         | 
| 82 | 
            +
              },
         | 
| 83 | 
            +
            }
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            # List of default provisioning scripts
         | 
| 86 | 
            +
            DEFAULT_PROVISIONING_SCRIPTS = [
         | 
| 87 | 
            +
              "vagrant/bootstrap.sh"
         | 
| 88 | 
            +
            ]
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            # Load the settings (eventually overwritten using values from the yaml file 'config/vagrant.yaml')
         | 
| 91 | 
            +
            settings = DEFAULT_SETTINGS.clone
         | 
| 92 | 
            +
            if File.exist?(config_file)
         | 
| 93 | 
            +
              config = YAML::load_file config_file
         | 
| 94 | 
            +
              #puts config.to_yaml
         | 
| 95 | 
            +
              settings.deep_merge!( config ) if config
         | 
| 96 | 
            +
            end
         | 
| 97 | 
            +
            #puts settings.to_yaml
         | 
| 98 | 
            +
            # abort 'end'
         | 
| 99 | 
            +
            #pp settings
         | 
| 100 | 
            +
            abort "Undefined settings" if settings.nil?
         | 
| 101 | 
            +
             | 
| 102 | 
            +
            ############################################################
         | 
| 103 | 
            +
            # Complete configuration of the boxes to deploy
         | 
| 104 | 
            +
            defaults = settings[:defaults]
         | 
| 105 | 
            +
            network  = settings[:network]
         | 
| 106 | 
            +
             | 
| 107 | 
            +
             | 
| 108 | 
            +
            ############################################################
         | 
| 109 | 
            +
            Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
         | 
| 110 | 
            +
             | 
| 111 | 
            +
              ### Common configs shared by all VMs ###
         | 
| 112 | 
            +
              # Cache plugin -- Supports local cache, so you don't wast bandwitdh
         | 
| 113 | 
            +
              # vagrant plugin install vagrant-cachier   # see https://github.com/fgrehm/vagrant-cachier
         | 
| 114 | 
            +
              config.cache.auto_detect = true if Vagrant.has_plugin?("vagrant-cachier")
         | 
| 115 | 
            +
             | 
| 116 | 
            +
              # check if VirtualBox Guest Additions are up to date
         | 
| 117 | 
            +
              if Vagrant.has_plugin?("vagrant-vbguest")
         | 
| 118 | 
            +
                # set auto_update to false, if you do NOT want to check the correct
         | 
| 119 | 
            +
                # additions version when booting these boxes
         | 
| 120 | 
            +
                config.vbguest.auto_update = defaults[:vbguest_auto_update]
         | 
| 121 | 
            +
              end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
              # Shell provisioner, to bootstrap each box with the minimal settings/packages
         | 
| 124 | 
            +
              DEFAULT_PROVISIONING_SCRIPTS.each do |script|
         | 
| 125 | 
            +
                config.vm.provision "shell", path: "#{script}", keep_color: true
         | 
| 126 | 
            +
              end
         | 
| 127 | 
            +
              config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
         | 
| 128 | 
            +
              ## Uncomment the below part if you want and additional shared directory
         | 
| 129 | 
            +
              # config.vm.synced_folder "vagrant/shared", "/shared", mount_options: ['dmode=777','fmode=777'],
         | 
| 130 | 
            +
              #                         type: "virtualbox" # Shared directory for users
         | 
| 131 | 
            +
             | 
| 132 | 
            +
              # network settings
         | 
| 133 | 
            +
              ipaddr   = IPAddr.new network[:range]
         | 
| 134 | 
            +
              ip_range = ipaddr.to_range.to_a
         | 
| 135 | 
            +
              ip_index = {
         | 
| 136 | 
            +
                :frontend     => 2,
         | 
| 137 | 
            +
                :controller   => 11,
         | 
| 138 | 
            +
                :node         => 101,
         | 
| 139 | 
            +
                :easybuild    => 1,
         | 
| 140 | 
            +
              }
         | 
| 141 | 
            +
             | 
| 142 | 
            +
              # cosmetics for the post-up message
         | 
| 143 | 
            +
              __table = {
         | 
| 144 | 
            +
                :title    => "Virtual environment deployed on Vagrant",
         | 
| 145 | 
            +
                :headings => [ 'Name', 'Hostname', 'OS', 'vCPU/RAM', 'Description', 'IP' ],
         | 
| 146 | 
            +
                :rows => [],
         | 
| 147 | 
            +
              }
         | 
| 148 | 
            +
             | 
| 149 | 
            +
             | 
| 150 | 
            +
              #__________________________________
         | 
| 151 | 
            +
              settings[:vms].each do |name, node|
         | 
| 152 | 
            +
                hostname = name
         | 
| 153 | 
            +
                domain   = network[:domain]
         | 
| 154 | 
            +
                fqdn  =    "#{hostname}.#{domain}"
         | 
| 155 | 
            +
                os    =    defaults[:os].to_sym
         | 
| 156 | 
            +
                ram   =    defaults[:ram]
         | 
| 157 | 
            +
                vcpus =    defaults[:vcpus]
         | 
| 158 | 
            +
                desc  =     'n/a'
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                abort "Non-existing box OS '#{os}' for the VM '#{name}'" if  settings[:boxes][os.to_sym].nil?
         | 
| 161 | 
            +
                abort "Empty IP address range" if ip_range.empty?
         | 
| 162 | 
            +
                abort "Unknown role '#{role}' for the VM '#{name}'" unless ip_index[role.to_sym]
         | 
| 163 | 
            +
                ip = ip_range[ ip_index[role.to_sym].to_i ].to_s
         | 
| 164 | 
            +
                ip_index[role.to_sym] += 1   # increment index for the next VM of this type
         | 
| 165 | 
            +
             | 
| 166 | 
            +
                config.vm.define "#{name}" do |c|
         | 
| 167 | 
            +
                  c.vm.box      = settings[:boxes][os.to_sym]
         | 
| 168 | 
            +
                  c.vm.hostname = "#{fqdn}"
         | 
| 169 | 
            +
                  c.vm.network :private_network, :ip => ip
         | 
| 170 | 
            +
                  c.vm.provision :hosts, :sync_hosts => true
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                  c.vm.provider "virtualbox" do |v|
         | 
| 173 | 
            +
                    v.customize [ 'modifyvm', :id, '--name', hostname, '--memory', ram.to_s ]
         | 
| 174 | 
            +
                    v.customize [ 'modifyvm', :id, '--cpus', vcpus.to_s ] if vcpus.to_i > 1
         | 
| 175 | 
            +
                    #v.customize [ 'setextradata', :id, 'VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root', '1']
         | 
| 176 | 
            +
                  end
         | 
| 177 | 
            +
                end
         | 
| 178 | 
            +
                __table[:rows] << [ name, fqdn, os.to_sym, "#{vcpus}/#{ram}", desc, ip]
         | 
| 179 | 
            +
              end  # settings
         | 
| 180 | 
            +
             | 
| 181 | 
            +
              config.trigger.after :up do
         | 
| 182 | 
            +
                puts Terminal::Table.new __table
         | 
| 183 | 
            +
              end
         | 
| 184 | 
            +
             | 
| 185 | 
            +
            end
         | 
| @@ -0,0 +1,288 @@ | |
| 1 | 
            +
            #!/usr/bin/env bash
         | 
| 2 | 
            +
            # Time-stamp: <Fri 2018-04-27 11:57 svarrette>
         | 
| 3 | 
            +
            ###########################################################################################
         | 
| 4 | 
            +
            # __     __                          _     ____              _       _
         | 
| 5 | 
            +
            # \ \   / /_ _  __ _ _ __ __ _ _ __ | |_  | __ )  ___   ___ | |_ ___| |_ _ __ __ _ _ __
         | 
| 6 | 
            +
            #  \ \ / / _` |/ _` | '__/ _` | '_ \| __| |  _ \ / _ \ / _ \| __/ __| __| '__/ _` | '_ \
         | 
| 7 | 
            +
            #   \ V / (_| | (_| | | | (_| | | | | |_  | |_) | (_) | (_) | |_\__ \ |_| | | (_| | |_) |
         | 
| 8 | 
            +
            #    \_/ \__,_|\__, |_|  \__,_|_| |_|\__| |____/ \___/ \___/ \__|___/\__|_|  \__,_| .__/
         | 
| 9 | 
            +
            #              |___/                                                              |_|
         | 
| 10 | 
            +
            #              Copyright (c) 2017 Sebastien Varrette <sebastien.varrette@uni.lu>
         | 
| 11 | 
            +
            ###########################################################################################
         | 
| 12 | 
            +
            # (prefered) way to see a Vagrant box configured.
         | 
| 13 | 
            +
            #
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            SETCOLOR_NORMAL=$(tput sgr0)
         | 
| 16 | 
            +
            SETCOLOR_TITLE=$(tput setaf 6)
         | 
| 17 | 
            +
            SETCOLOR_SUBTITLE=$(tput setaf 14)
         | 
| 18 | 
            +
            SETCOLOR_RED=$(tput setaf 1)
         | 
| 19 | 
            +
            SETCOLOR_BOLD=$(tput setaf 15)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            ### Local variables
         | 
| 22 | 
            +
            STARTDIR="$(pwd)"
         | 
| 23 | 
            +
            SCRIPTFILENAME=$(basename $0)
         | 
| 24 | 
            +
            SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
         | 
| 25 | 
            +
             | 
| 26 | 
            +
             | 
| 27 | 
            +
            MOTD="/etc/motd"
         | 
| 28 | 
            +
            DOTFILES_DIR='/etc/dotfiles.d'
         | 
| 29 | 
            +
            DOTFILES_URL='https://github.com/ULHPC/dotfiles.git'
         | 
| 30 | 
            +
            EXTRA_PACKAGES=
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            # List of default packages to install
         | 
| 33 | 
            +
            COMMON_DEFAULT_PACKAGES="wget figlet git screen bash-completion rsync nmap vim python-pip htop direnv"
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            # Easybuild
         | 
| 36 | 
            +
            #export EASYBUILD_MODULES_TOOL=Lmod
         | 
| 37 | 
            +
            export EASYBUILD_MODULE_NAMING_SCHEME=CategorizedModuleNamingScheme
         | 
| 38 | 
            +
            EB_INSTALL_SCRIPT='/tmp/bootstrap_eb.py'
         | 
| 39 | 
            +
            EB_INSTALL_SCRIPT_URL='https://raw.githubusercontent.com/easybuilders/easybuild-framework/develop/easybuild/scripts/bootstrap_eb.py'
         | 
| 40 | 
            +
             | 
| 41 | 
            +
             | 
| 42 | 
            +
            ######
         | 
| 43 | 
            +
            # Print information in the following form: '[$2] $1' ($2=INFO if not submitted)
         | 
| 44 | 
            +
            # usage: info text [title]
         | 
| 45 | 
            +
            ##
         | 
| 46 | 
            +
            info () {
         | 
| 47 | 
            +
                echo
         | 
| 48 | 
            +
                echo "${SETCOLOR_BOLD}###${SETCOLOR_NORMAL} ${SETCOLOR_TITLE}${1}${SETCOLOR_NORMAL} ${SETCOLOR_BOLD}###${SETCOLOR_NORMAL}"
         | 
| 49 | 
            +
            }
         | 
| 50 | 
            +
            error() {
         | 
| 51 | 
            +
                echo
         | 
| 52 | 
            +
                echo "${SETCOLOR_RED}*** ERROR *** $*${SETCOLOR_NORMAL}"
         | 
| 53 | 
            +
                exit 1
         | 
| 54 | 
            +
            }
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            print_usage() {
         | 
| 57 | 
            +
                cat <<EOF
         | 
| 58 | 
            +
                $0 [--name "vagrant box name"] \
         | 
| 59 | 
            +
                   [--title "Title"] \
         | 
| 60 | 
            +
                   [--subtitle "Subtitle"] \
         | 
| 61 | 
            +
                   [--desc "description"] \
         | 
| 62 | 
            +
                   [--support "support@mail.com"]
         | 
| 63 | 
            +
                   [-x "pkg1 pkg2 ..."]
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            Bootstrap a Vagrant box
         | 
| 66 | 
            +
            This will generate the appropriate ${MOTD} file
         | 
| 67 | 
            +
            EOF
         | 
| 68 | 
            +
            }
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            #######################  Per OS Bootstrapping function ##########################
         | 
| 71 | 
            +
            setup_redhat() {
         | 
| 72 | 
            +
                info "Running yum update"
         | 
| 73 | 
            +
                yum update -y  >/dev/null
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                info "Installing default packages"
         | 
| 76 | 
            +
                yum install -y epel-release
         | 
| 77 | 
            +
                yum install -y ${COMMON_DEFAULT_PACKAGES} bind-utils ${EXTRA_PACKAGES}  >/dev/null
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                info "Uninstalling (eventually) existing Puppet installation"
         | 
| 80 | 
            +
                yum erase -y puppet puppetlabs-release >/dev/null
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                info "Adding repo for Puppet 4"
         | 
| 83 | 
            +
                rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-$1.noarch.rpm
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                sleep 1
         | 
| 86 | 
            +
                info "Installing Puppet and its dependencies"
         | 
| 87 | 
            +
                yum install -y puppet-agent >/dev/null
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                info "installing Environment modules and  LMod"
         | 
| 90 | 
            +
                yum install -y environment-modules Lmod
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                yum groupinstall -y "Development Tools"
         | 
| 93 | 
            +
                yum install -y openssl-devel libssl-dev libopenssl-devel ncurses-devel libibverbs-dev libibverbs-devel, rdma-core-devel bzip2-devel readline-devel libsqlite3x-devel
         | 
| 94 | 
            +
            }
         | 
| 95 | 
            +
             | 
| 96 | 
            +
            setup_apt() {
         | 
| 97 | 
            +
                case $1 in
         | 
| 98 | 
            +
                    3*) codename=cumulus ;;
         | 
| 99 | 
            +
                    6)  codename=squeeze ;;
         | 
| 100 | 
            +
                    7)  codename=wheezy ;;
         | 
| 101 | 
            +
                    8)  codename=jessie  ;;
         | 
| 102 | 
            +
                    9)  codename=stretch  ;;
         | 
| 103 | 
            +
                    12.04) codename=precise ;;
         | 
| 104 | 
            +
                    14.04) codename=trusty  ;;
         | 
| 105 | 
            +
                    16.04) codename=xenial ;;
         | 
| 106 | 
            +
                    *) echo "Release not supported" ;;
         | 
| 107 | 
            +
                esac
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                info "Running apt-get update"
         | 
| 110 | 
            +
                apt-get update >/dev/null 2>&1
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                info "Installing default packages"
         | 
| 113 | 
            +
                apt-get install -y ${COMMON_DEFAULT_PACKAGES} git-core ${EXTRA_PACKAGES}  >/dev/null
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                info "Installing Puppet and its dependencies"
         | 
| 116 | 
            +
                apt-get install puppet-agent -y >/dev/null
         | 
| 117 | 
            +
                apt-get install apt-transport-https -y >/dev/null
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                info "installing Environment modules and  LMod"
         | 
| 120 | 
            +
                apt-get install -y environment-modules lmod
         | 
| 121 | 
            +
                apt-get install -y build-essentials
         | 
| 122 | 
            +
            }
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            setup_linux() {
         | 
| 125 | 
            +
                ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
         | 
| 126 | 
            +
                if [ -f /etc/redhat-release ]; then
         | 
| 127 | 
            +
                    OS=$(cat /etc/redhat-release | cut -d ' ' -f 1)
         | 
| 128 | 
            +
                    majver=$(cat /etc/redhat-release | sed 's/[A-Za-z]*//g' | sed 's/ //g' | cut -d '.' -f 1)
         | 
| 129 | 
            +
                elif [ -f /etc/SuSE-release ]; then
         | 
| 130 | 
            +
                    OS=sles
         | 
| 131 | 
            +
                    majver=$(cat /etc/SuSE-release | grep VERSION | cut -d '=' -f 2 | tr -d '[:space:]')
         | 
| 132 | 
            +
                elif [ -f /etc/os-release ]; then
         | 
| 133 | 
            +
                    . /etc/os-release
         | 
| 134 | 
            +
                    OS=$ID
         | 
| 135 | 
            +
                    majver=$VERSION_ID
         | 
| 136 | 
            +
                elif [ -f /etc/debian_version ]; then
         | 
| 137 | 
            +
                    OS=Debian
         | 
| 138 | 
            +
                    majver=$(cat /etc/debian_version | cut -d '.' -f 1)
         | 
| 139 | 
            +
                elif [ -f /etc/lsb-release ]; then
         | 
| 140 | 
            +
                    . /etc/lsb-release
         | 
| 141 | 
            +
                    OS=$DISTRIB_ID
         | 
| 142 | 
            +
                    majver=$DISTRIB_RELEASE
         | 
| 143 | 
            +
                elif [ -f /etc/os-release ]; then
         | 
| 144 | 
            +
                    . /etc/os-release
         | 
| 145 | 
            +
                    OS=$ID
         | 
| 146 | 
            +
                    majver=$VERSION_ID
         | 
| 147 | 
            +
                else
         | 
| 148 | 
            +
                    OS=$(uname -s)
         | 
| 149 | 
            +
                    majver=$(uname -r)
         | 
| 150 | 
            +
                fi
         | 
| 151 | 
            +
                distro=$(echo $OS | tr '[:upper:]' '[:lower:]')
         | 
| 152 | 
            +
                info "Detected Linux distro: ${distro} version ${majver} on arch ${ARCH}"
         | 
| 153 | 
            +
                case "$distro" in
         | 
| 154 | 
            +
                    debian|ubuntu) setup_apt $majver ;;
         | 
| 155 | 
            +
                    redhat|fedora|centos|scientific|amazon) setup_redhat $majver ;;
         | 
| 156 | 
            +
                    *) echo "Not supported distro: $distro"; exit 1;;
         | 
| 157 | 
            +
                esac
         | 
| 158 | 
            +
             | 
| 159 | 
            +
            }
         | 
| 160 | 
            +
             | 
| 161 | 
            +
            setup_dotfiles () {
         | 
| 162 | 
            +
                if [ ! -d "${DOTFILES_DIR}" ]; then
         | 
| 163 | 
            +
                    info "cloning ULHPC/dotfiles repository in '/etc/dotfiles.d"
         | 
| 164 | 
            +
                    git clone ${DOTFILES_URL} ${DOTFILES_DIR}
         | 
| 165 | 
            +
                fi
         | 
| 166 | 
            +
                # Correct __git_ps1
         | 
| 167 | 
            +
                local src_git_prompt="/usr/share/git-core/contrib/completion/git-prompt.sh"
         | 
| 168 | 
            +
                local dst_git_prompt="/etc/profile.d/git-prompt.sh"
         | 
| 169 | 
            +
                if [ -f "${src_git_prompt}" ]; then
         | 
| 170 | 
            +
                    info "installing git-prompt to define __git_ps1"
         | 
| 171 | 
            +
                    [ ! -e "${dst_git_prompt}" ] && ln -s ${src_git_prompt} ${dst_git_prompt}
         | 
| 172 | 
            +
                fi
         | 
| 173 | 
            +
                local dotfile_install_cmd="${DOTFILES_DIR}/install.sh --offline --force -d ${DOTFILES_DIR} --bash --screen --git"
         | 
| 174 | 
            +
                if [ -d "${DOTFILES_DIR}" ]; then
         | 
| 175 | 
            +
                    info "installing dotfiles for 'root' user"
         | 
| 176 | 
            +
                    ${dotfile_install_cmd}
         | 
| 177 | 
            +
                    info "installing dotfiles for 'vagrant' user"
         | 
| 178 | 
            +
                    sudo -u vagrant ${dotfile_install_cmd}
         | 
| 179 | 
            +
                fi
         | 
| 180 | 
            +
            }
         | 
| 181 | 
            +
             | 
| 182 | 
            +
            setup_motd() {
         | 
| 183 | 
            +
                local motd=/etc/motd
         | 
| 184 | 
            +
                local has_figlet=$(which figlet 2>/dev/null)
         | 
| 185 | 
            +
                info "setup ${motd}"
         | 
| 186 | 
            +
                cat <<EOF > ${motd}
         | 
| 187 | 
            +
            ================================================================================
         | 
| 188 | 
            +
             Welcome to the Vagrant box $(hostname)
         | 
| 189 | 
            +
            ================================================================================
         | 
| 190 | 
            +
            EOF
         | 
| 191 | 
            +
                if [ -n "${has_figlet}" ]; then
         | 
| 192 | 
            +
                    cat <<EOF >> ${motd}
         | 
| 193 | 
            +
            $(${has_figlet} -w 80 -c "Virtual $(hostname -s)")
         | 
| 194 | 
            +
            EOF
         | 
| 195 | 
            +
                fi
         | 
| 196 | 
            +
                cat <<EOF >> ${motd}
         | 
| 197 | 
            +
            ================================================================================
         | 
| 198 | 
            +
                Hostname.... $(hostname -f)
         | 
| 199 | 
            +
                OS.......... $(facter os.name) $(facter os.release.full)
         | 
| 200 | 
            +
                Docs........ Vagrant: http://docs.vagrantup.com/v2/
         | 
| 201 | 
            +
            ================================================================================
         | 
| 202 | 
            +
            EOF
         | 
| 203 | 
            +
            }
         | 
| 204 | 
            +
             | 
| 205 | 
            +
            setup_easybuild() {
         | 
| 206 | 
            +
                cat <<EOF > /etc/profile.d/easybuild.sh
         | 
| 207 | 
            +
            export EASYBUILD_PREFIX=\$HOME/.local/easybuild
         | 
| 208 | 
            +
            export GLOBAL_EASYBUILD_PREFIX=/opt/apps/
         | 
| 209 | 
            +
            export EASYBUILD_MODULES_TOOL=Lmod
         | 
| 210 | 
            +
            export EASYBUILD_MODULE_NAMING_SCHEME=CategorizedModuleNamingScheme
         | 
| 211 | 
            +
            # Use the below variable to run:
         | 
| 212 | 
            +
            #    module use $LOCAL_MODULES
         | 
| 213 | 
            +
            #    module load tools/EasyBuild
         | 
| 214 | 
            +
            export LOCAL_MODULES=\$EASYBUILD_PREFIX/modules/all
         | 
| 215 | 
            +
            export GLOBAL_MODULES=\$GLOBAL_EASYBUILD_PREFIX/modules/all
         | 
| 216 | 
            +
             | 
| 217 | 
            +
            alias ma="module avail"
         | 
| 218 | 
            +
            alias ml="module list"
         | 
| 219 | 
            +
            function mu(){
         | 
| 220 | 
            +
                module use \$GLOBAL_MODULES
         | 
| 221 | 
            +
                module use \$LOCAL_MODULES
         | 
| 222 | 
            +
                module load tools/EasyBuild
         | 
| 223 | 
            +
            }
         | 
| 224 | 
            +
             | 
| 225 | 
            +
            # Prepend directories holding eb file for this turorial to the robot path
         | 
| 226 | 
            +
            # See http://easybuild.readthedocs.io/en/latest/Using_the_EasyBuild_command_line.html?highlight=EASYBUILD_ROBOT#prepending-and-or-appending-to-the-default-robot-search-path
         | 
| 227 | 
            +
            # export EASYBUILD_ROBOT_PATHS=\$(find /vagrant/resources/ -name *.eb | xargs dirname | sort | uniq | xargs echo | tr ' ' ':'):
         | 
| 228 | 
            +
             | 
| 229 | 
            +
            alias global_eb='eb --installpath=\$GLOBAL_EASYBUILD_PREFIX'
         | 
| 230 | 
            +
             | 
| 231 | 
            +
            EOF
         | 
| 232 | 
            +
                pip install --upgrade pip
         | 
| 233 | 
            +
                pip install functools32
         | 
| 234 | 
            +
                if [ ! -f "${EB_INSTALL_SCRIPT}" ]; then
         | 
| 235 | 
            +
                    curl -o ${EB_INSTALL_SCRIPT} ${EB_INSTALL_SCRIPT_URL}
         | 
| 236 | 
            +
                fi
         | 
| 237 | 
            +
             | 
| 238 | 
            +
                info 'Installing Easybuild'
         | 
| 239 | 
            +
                sudo -u vagrant EASYBUILD_MODULE_NAMING_SCHEME=CategorizedModuleNamingScheme python ${EB_INSTALL_SCRIPT} ~vagrant/.local/easybuild
         | 
| 240 | 
            +
            }
         | 
| 241 | 
            +
             | 
| 242 | 
            +
            setup_pyenv() {
         | 
| 243 | 
            +
                cat <<EOF > /etc/profile.d/pyenv.sh
         | 
| 244 | 
            +
            if [ -d "\$HOME/.pyenv" ]; then
         | 
| 245 | 
            +
                export PATH="\$HOME/.pyenv/bin:\$PATH"
         | 
| 246 | 
            +
                eval "\$(pyenv init -)"
         | 
| 247 | 
            +
                eval "\$(pyenv virtualenv-init -)"
         | 
| 248 | 
            +
            fi
         | 
| 249 | 
            +
            EOF
         | 
| 250 | 
            +
                if [ ! -h "/home/vagrant/.config/direnv" ]; then
         | 
| 251 | 
            +
                    sudo -u vagrant mkdir -p /home/vagrant/.config
         | 
| 252 | 
            +
                    sudo -u vagrant ln -sf /vagrant/config/direnv /home/vagrant/.config/direnv
         | 
| 253 | 
            +
                fi
         | 
| 254 | 
            +
            }
         | 
| 255 | 
            +
             | 
| 256 | 
            +
             | 
| 257 | 
            +
            ######################################################################################
         | 
| 258 | 
            +
            [ $UID -gt 0 ] && error "You must be root to execute this script (current uid: $UID)"
         | 
| 259 | 
            +
             | 
| 260 | 
            +
             | 
| 261 | 
            +
            # Parse the command-line options
         | 
| 262 | 
            +
            while [ $# -ge 1 ]; do
         | 
| 263 | 
            +
                case $1 in
         | 
| 264 | 
            +
                    -h | --help)    print_usage;       exit 0;;
         | 
| 265 | 
            +
                    -V | --version) print_version;     exit 0;;
         | 
| 266 | 
            +
                    -n | --name)      shift; NAME=$1;;
         | 
| 267 | 
            +
                    -t | --title)     shift; TITLE=$1;;
         | 
| 268 | 
            +
                    -st| --subtitle)  shift; SUBTITLE=$1;;
         | 
| 269 | 
            +
                    -d | --desc)      shift; DESC=$1;;
         | 
| 270 | 
            +
                    -s | --support)   shift; SUPPORT_MAIL=$1;;
         | 
| 271 | 
            +
                    -x | --extras)    shift; EXTRA_PACKAGES=$1;;
         | 
| 272 | 
            +
                esac
         | 
| 273 | 
            +
                shift
         | 
| 274 | 
            +
            done
         | 
| 275 | 
            +
             | 
| 276 | 
            +
            # Let's go
         | 
| 277 | 
            +
            case "$OSTYPE" in
         | 
| 278 | 
            +
                linux*)   setup_linux ;;
         | 
| 279 | 
            +
                *)        echo "unknown: $OSTYPE"; exit 1;;
         | 
| 280 | 
            +
            esac
         | 
| 281 | 
            +
             | 
| 282 | 
            +
            [ -f /usr/bin/puppet ] || ln -s /opt/puppetlabs/puppet/bin/puppet /usr/bin/puppet
         | 
| 283 | 
            +
            [ -f /usr/bin/facter ] || ln -s /opt/puppetlabs/puppet/bin/facter /usr/bin/facter
         | 
| 284 | 
            +
             | 
| 285 | 
            +
            setup_dotfiles
         | 
| 286 | 
            +
            setup_motd
         | 
| 287 | 
            +
            setup_easybuild
         | 
| 288 | 
            +
            setup_pyenv
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            # -*- mode: yaml; -*-
         | 
| 2 | 
            +
            # Time-stamp: <Fri 2018-04-27 15:14 svarrette>
         | 
| 3 | 
            +
            ################################################################################
         | 
| 4 | 
            +
            # Complementary configuration for Vagrant
         | 
| 5 | 
            +
            # You can overwrite here the default settings defined in ../Vagrantfile and
         | 
| 6 | 
            +
            # rework the vagrantconfiguration
         | 
| 7 | 
            +
            # See the sample file or the DEFAULT_SETTING variable in ../Vagrantfile for an
         | 
| 8 | 
            +
            # overview of the available configs
         | 
| 9 | 
            +
            #
         | 
| 10 | 
            +
            # /!\ a deep merge approach is used to bring the below modifications to the
         | 
| 11 | 
            +
            # initial DEFAULT_SETTING hash. In particular, **nested hashes** are merged
         | 
| 12 | 
            +
            # too, not replaced (might impact the :partitions: settings).
         | 
| 13 | 
            +
            ###
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            # :defaults:
         | 
| 16 | 
            +
            #   :ram:   4096
         | 
| @@ -0,0 +1,149 @@ | |
| 1 | 
            +
            # -*- mode: yaml; -*-
         | 
| 2 | 
            +
            # Time-stamp: <Mon 2018-01-22 08:20 svarrette>
         | 
| 3 | 
            +
            ################################################################################
         | 
| 4 | 
            +
            # Complementary configuration for Vagrant
         | 
| 5 | 
            +
            # You can overwrite here the default settings defined in ../Vagrantfile and
         | 
| 6 | 
            +
            # rework the single / cluster configuratuion
         | 
| 7 | 
            +
            ###
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            #___________________________________________
         | 
| 10 | 
            +
            # Complete / re-define the default boxes below
         | 
| 11 | 
            +
            # Format:
         | 
| 12 | 
            +
            #   :<os><version>: <username>/<box> # see https://vagrantcloud.com
         | 
| 13 | 
            +
            # :boxes:
         | 
| 14 | 
            +
            #   :centos7: centos/7
         | 
| 15 | 
            +
            #   :debian8: debian/contrib-jessie64
         | 
| 16 | 
            +
            #   :ubuntu14: ubuntu/trusty64
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            #_________________
         | 
| 19 | 
            +
            # Default settings
         | 
| 20 | 
            +
            # :defaults:
         | 
| 21 | 
            +
            #   :os: :centos7         # Default OS from the above box definition
         | 
| 22 | 
            +
            #   :ram: 512             # Default RAM
         | 
| 23 | 
            +
            #   :vcpus: 1             # Default number of virtual CPUs
         | 
| 24 | 
            +
            #   :vbguest_auto_update: 1  # check/update box guest additions
         | 
| 25 | 
            +
            #   :nodes: 1             # Default number of compute nodes
         | 
| 26 | 
            +
            #                           also recomputed from partition config in cluster mode
         | 
| 27 | 
            +
            #   :mode: single         # Type of deployment. Eligible values:
         | 
| 28 | 
            +
            #                           'single' image or
         | 
| 29 | 
            +
            #                           'distributed' or
         | 
| 30 | 
            +
            #                           'cluster' (not yet implemented)
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            #____________________
         | 
| 33 | 
            +
            # Network settings
         | 
| 34 | 
            +
            # :network:
         | 
| 35 | 
            +
            #   :domain: 'vagrant.dev'       # network domain to use
         | 
| 36 | 
            +
            #   :range: '10.10.1.0/24'       # IP range to use
         | 
| 37 | 
            +
            #   :client_ip_start_offset: 100 # Note: compute nodes will have xx.xx.xx.254
         | 
| 38 | 
            +
            #   # client/compute nodes VMs will start on xx.xx.xx.<client_ip_start_offset+1>
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            #___________________________________________________________
         | 
| 41 | 
            +
            # VMs / Vagrant boxes to define apart from the compute nodes
         | 
| 42 | 
            +
            # Format:
         | 
| 43 | 
            +
            # <name>:
         | 
| 44 | 
            +
            #   :hostname: <hostname>
         | 
| 45 | 
            +
            #   :desc: <VM-description>
         | 
| 46 | 
            +
            #   :os: <os>       # from the configured boxes
         | 
| 47 | 
            +
            #   :ram: <ram>
         | 
| 48 | 
            +
            #   :vcpus: <vcpus>
         | 
| 49 | 
            +
            #   :role: <role>   # supported: [ 'controller', 'frontend' ]
         | 
| 50 | 
            +
            #
         | 
| 51 | 
            +
            # :vms:
         | 
| 52 | 
            +
            #   'slurm-backup':
         | 
| 53 | 
            +
            #     :hostname: slurm2
         | 
| 54 | 
            +
            #     :ram: 2048
         | 
| 55 | 
            +
            #     :vcpus: 2
         | 
| 56 | 
            +
            #     :desc: 'Slurm Controller #2 (backup)'
         | 
| 57 | 
            +
            #     :role: controller
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            #_______________________________________________________________________
         | 
| 60 | 
            +
            # Default setting for the simulated compute nodes of the virtual cluster
         | 
| 61 | 
            +
            # :nodes:
         | 
| 62 | 
            +
            #   :cpus: 4
         | 
| 63 | 
            +
            #   :sockets: 2
         | 
| 64 | 
            +
            #   :ram: 512
         | 
| 65 | 
            +
            #   :realmemory: 400       # has to be reported to Slurm
         | 
| 66 | 
            +
            #   :cores_per_socket: 2
         | 
| 67 | 
            +
            #   :thread_per_core: 1
         | 
| 68 | 
            +
            #   :state: UNKNOWN
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            #_______________________________________________________________________
         | 
| 71 | 
            +
            # The real part: Details of the Slurm Configuration
         | 
| 72 | 
            +
            # used later to feed slurm.conf from the ERB template
         | 
| 73 | 
            +
            # :slurm:
         | 
| 74 | 
            +
            #   :template: slurm.conf.erb
         | 
| 75 | 
            +
            #   :clustername: thor
         | 
| 76 | 
            +
            #   :allowgroups: clusterusers
         | 
| 77 | 
            +
            #   # Default Partition / QoS. Format:
         | 
| 78 | 
            +
            #   # '<name>':
         | 
| 79 | 
            +
            #   #     :nodes: n           # Number of nodes
         | 
| 80 | 
            +
            #   #     :default: true|false  # Default partition?
         | 
| 81 | 
            +
            #   #     :hidden: true|false  # Hidden partition?
         | 
| 82 | 
            +
            #   #     :allowgroups: 'ALL|group[,group]*'
         | 
| 83 | 
            +
            #   #     :allowaccounts: 'ALL|acct[,acct]*'
         | 
| 84 | 
            +
            #   #     :allowqos:'ALL|qos[,qos]*'
         | 
| 85 | 
            +
            #   #     :state: 'UP|DOWN|DRAIN|INACTIVE'
         | 
| 86 | 
            +
            #   #     :oversubscribe: 'EXCLUSIVE|FORCE|YES|NO' (replace :shared)
         | 
| 87 | 
            +
            #   #     #=== Time Format: minutes, minutes:seconds, hours:minutes:seconds, days-hours,
         | 
| 88 | 
            +
            #   #             days-hours:minutes, days-hours:minutes:seconds or "UNLIMITED"
         | 
| 89 | 
            +
            #   #     :default_time: 'UNLIMITED|DD-HH:MM:SS',
         | 
| 90 | 
            +
            #   #     :max_time:     'UNLIMITED|DD-HH:MM:SS'
         | 
| 91 | 
            +
            #   #     #=== associated QoS config, named 'qos-<partition>' ===
         | 
| 92 | 
            +
            #   #     :priority: n           # QoS priority (default: 0)
         | 
| 93 | 
            +
            #   #     :preempt: 'qos-<name>
         | 
| 94 | 
            +
            #   #
         | 
| 95 | 
            +
            #   :partitions:
         | 
| 96 | 
            +
            #     interactive:
         | 
| 97 | 
            +
            #       :nodes: 1
         | 
| 98 | 
            +
            #       :priority: 0
         | 
| 99 | 
            +
            #       :default_time: 0-10:00:00
         | 
| 100 | 
            +
            #       :max_time: 5-00:00:00
         | 
| 101 | 
            +
            #     batch:
         | 
| 102 | 
            +
            #       :nodes: 2
         | 
| 103 | 
            +
            #       :priority: 100
         | 
| 104 | 
            +
            #       :default: true
         | 
| 105 | 
            +
            #       :preempt: qos-interactive
         | 
| 106 | 
            +
            #       :default_time: 0-2:00:00
         | 
| 107 | 
            +
            #       :max_time: 5-00:00:00
         | 
| 108 | 
            +
            #   ### General options you may wish to customize
         | 
| 109 | 
            +
            #   :mpidefault: none
         | 
| 110 | 
            +
            #   :mpiparams: ''
         | 
| 111 | 
            +
            #   :topology: ''
         | 
| 112 | 
            +
            #   :mempercpu: 0
         | 
| 113 | 
            +
            #   :maxmempercpu: 0
         | 
| 114 | 
            +
            #   :slurmctlddebug: 3
         | 
| 115 | 
            +
            #   :slurmddebug: 3
         | 
| 116 | 
            +
            #   :slurmctldport: 6817
         | 
| 117 | 
            +
            #   :slurmdport: 6818
         | 
| 118 | 
            +
            #   :srunportrange: 50000-53000
         | 
| 119 | 
            +
            #   :jobsubmitplugins: ''   #'lua'
         | 
| 120 | 
            +
            #   # job completion logging mechanism type. You can use 'jobcomp/mysql'
         | 
| 121 | 
            +
            #   :jobcomptype: jobcomp/none
         | 
| 122 | 
            +
            #   :jobcomploc: ''
         | 
| 123 | 
            +
            #   # Health checker -- Ex: NHC / see https://github.com/mej/nhc
         | 
| 124 | 
            +
            #   :healthcheckprogram: ''
         | 
| 125 | 
            +
            #   :healthcheckinterval: 30
         | 
| 126 | 
            +
            #   # What level of association-based enforcement to impose on job submissions
         | 
| 127 | 
            +
            #   :acct_storageenforce: qos,limits,associations
         | 
| 128 | 
            +
            #   # type of scheduler to be use
         | 
| 129 | 
            +
            #   :schedulertype: sched/backfill
         | 
| 130 | 
            +
            #   # Plugin used to identify which jobs can be preempted in order to start a pending job
         | 
| 131 | 
            +
            #   :preempttype: preempt/qos
         | 
| 132 | 
            +
            #   :preemptmode: requeue
         | 
| 133 | 
            +
            #   # Plugin to be used in establishing a job's scheduling priority
         | 
| 134 | 
            +
            #   :prioritytype: priority/multifactor
         | 
| 135 | 
            +
            #   :prioritydecayHL: 5-0
         | 
| 136 | 
            +
            #   :priorityweightage: 0
         | 
| 137 | 
            +
            #   :priorityweightfairshare: 0
         | 
| 138 | 
            +
            #   :priorityweightjobsize: 0
         | 
| 139 | 
            +
            #   :priorityweightpartition: 0
         | 
| 140 | 
            +
            #   :priorityweightqos: 0
         | 
| 141 | 
            +
            #   # type of resource selection algorithm to be used
         | 
| 142 | 
            +
            #   :selecttype: select/cons_res
         | 
| 143 | 
            +
            #   :selecttype_params: CR_Core_Memory,CR_CORE_DEFAULT_DIST_BLOCK
         | 
| 144 | 
            +
            #   # type of task launch plugin, typically used to provide resource management within a node
         | 
| 145 | 
            +
            #   :taskplugin: task/cgroup
         | 
| 146 | 
            +
            #   :taskplugin_params: cpusets
         | 
| 147 | 
            +
            #   # hooks
         | 
| 148 | 
            +
            #   :taskprolog: '' # program to be execute prior to initiation of each task
         | 
| 149 | 
            +
            #   :taskepilog: '' # program to be execute after termination of each task
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: falkorlib
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.7. | 
| 4 | 
            +
              version: 0.7.11
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Sebastien Varrette
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2018-04-27 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake
         | 
| @@ -288,28 +288,28 @@ dependencies: | |
| 288 288 | 
             
                requirements:
         | 
| 289 289 | 
             
                - - "~>"
         | 
| 290 290 | 
             
                  - !ruby/object:Gem::Version
         | 
| 291 | 
            -
                    version:  | 
| 291 | 
            +
                    version: 0.9.11
         | 
| 292 292 | 
             
              type: :development
         | 
| 293 293 | 
             
              prerelease: false
         | 
| 294 294 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 295 295 | 
             
                requirements:
         | 
| 296 296 | 
             
                - - "~>"
         | 
| 297 297 | 
             
                  - !ruby/object:Gem::Version
         | 
| 298 | 
            -
                    version:  | 
| 298 | 
            +
                    version: 0.9.11
         | 
| 299 299 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 300 300 | 
             
              name: rubocop
         | 
| 301 301 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 302 302 | 
             
                requirements:
         | 
| 303 303 | 
             
                - - "~>"
         | 
| 304 304 | 
             
                  - !ruby/object:Gem::Version
         | 
| 305 | 
            -
                    version: 0. | 
| 305 | 
            +
                    version: 0.49.0
         | 
| 306 306 | 
             
              type: :development
         | 
| 307 307 | 
             
              prerelease: false
         | 
| 308 308 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 309 309 | 
             
                requirements:
         | 
| 310 310 | 
             
                - - "~>"
         | 
| 311 311 | 
             
                  - !ruby/object:Gem::Version
         | 
| 312 | 
            -
                    version: 0. | 
| 312 | 
            +
                    version: 0.49.0
         | 
| 313 313 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 314 314 | 
             
              name: rubygems-tasks
         | 
| 315 315 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -418,6 +418,7 @@ files: | |
| 418 418 | 
             
            - lib/falkorlib/bootstrap/link.rb
         | 
| 419 419 | 
             
            - lib/falkorlib/bootstrap/mkdocs.rb
         | 
| 420 420 | 
             
            - lib/falkorlib/bootstrap/ruby.rb
         | 
| 421 | 
            +
            - lib/falkorlib/bootstrap/vagrant.rb
         | 
| 421 422 | 
             
            - lib/falkorlib/cli.rb
         | 
| 422 423 | 
             
            - lib/falkorlib/cli/config.rb
         | 
| 423 424 | 
             
            - lib/falkorlib/cli/link.rb
         | 
| @@ -550,6 +551,10 @@ files: | |
| 550 551 | 
             
            - templates/puppet/modules/tests/vagrant/bootstrap.sh
         | 
| 551 552 | 
             
            - templates/puppet/modules/tests/vagrant/config.yaml
         | 
| 552 553 | 
             
            - templates/puppet/modules/tests/vagrant/puppet_modules_setup.rb
         | 
| 554 | 
            +
            - templates/vagrant/Vagrantfile.erb
         | 
| 555 | 
            +
            - templates/vagrant/vagrant/bootstrap.sh
         | 
| 556 | 
            +
            - templates/vagrant/vagrant/config.yaml
         | 
| 557 | 
            +
            - templates/vagrant/vagrant/config.yaml.sample
         | 
| 553 558 | 
             
            homepage: https://github.com/Falkor/falkorlib
         | 
| 554 559 | 
             
            licenses:
         | 
| 555 560 | 
             
            - MIT
         |