beaker-vagrant 0.6.7 → 0.7.0
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/.github/workflows/release.yml +24 -0
 - data/beaker-vagrant.gemspec +2 -6
 - data/lib/beaker-vagrant/version.rb +1 -1
 - data/lib/beaker/hypervisor/vagrant.rb +33 -66
 - data/lib/beaker/hypervisor/vagrant_custom.rb +1 -0
 - data/lib/beaker/hypervisor/vagrant_libvirt.rb +16 -26
 - data/spec/beaker/hypervisor/vagrant_custom_spec.rb +3 -2
 - data/spec/beaker/hypervisor/vagrant_desktop_spec.rb +33 -47
 - data/spec/beaker/hypervisor/vagrant_fusion_spec.rb +14 -14
 - data/spec/beaker/hypervisor/vagrant_libvirt_spec.rb +23 -26
 - data/spec/beaker/hypervisor/vagrant_parallels_spec.rb +20 -23
 - data/spec/beaker/hypervisor/vagrant_spec.rb +41 -118
 - data/spec/beaker/hypervisor/vagrant_virtualbox_spec.rb +47 -69
 - data/spec/beaker/hypervisor/vagrant_workstation_spec.rb +33 -47
 - metadata +14 -21
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 4ee5ce13c977a0b3bd07ff792f1f722d986e1e50a332bb4762d1d15c8c8dfe48
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 9e17a0f6f245ba61142e42883f0d2b5ac456e40b92b26d6b8c22d08dffc0c7b2
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 6b2c6c0ed39876e4f630d9dac376f782a00277011c8b5321567ed09635e55f04b7656df59f0658b1565a3fd474bf632017ea9a9ca99bdd5ba083ebc2791aea7e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 4f429aeccdbb05b4a9eeccf817e44327a463315a16c7a517914469a4a09f9b046d3ea8fc4342208ae2071f1a907324c20c23e1006feff3fe9e96979f6739a6a4
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            name: Release
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            on:
         
     | 
| 
      
 4 
     | 
    
         
            +
              create:
         
     | 
| 
      
 5 
     | 
    
         
            +
                ref_type: tag
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            jobs:
         
     | 
| 
      
 8 
     | 
    
         
            +
              release:
         
     | 
| 
      
 9 
     | 
    
         
            +
                runs-on: ubuntu-latest
         
     | 
| 
      
 10 
     | 
    
         
            +
                if: github.repository == 'voxpupuli/beaker-vagrant'
         
     | 
| 
      
 11 
     | 
    
         
            +
                env:
         
     | 
| 
      
 12 
     | 
    
         
            +
                  BUNDLE_WITHOUT: release
         
     | 
| 
      
 13 
     | 
    
         
            +
                steps:
         
     | 
| 
      
 14 
     | 
    
         
            +
                  - uses: actions/checkout@v2
         
     | 
| 
      
 15 
     | 
    
         
            +
                  - name: Install Ruby 2.7
         
     | 
| 
      
 16 
     | 
    
         
            +
                    uses: ruby/setup-ruby@v1
         
     | 
| 
      
 17 
     | 
    
         
            +
                    with:
         
     | 
| 
      
 18 
     | 
    
         
            +
                      ruby-version: '2.7'
         
     | 
| 
      
 19 
     | 
    
         
            +
                  - name: Build gem
         
     | 
| 
      
 20 
     | 
    
         
            +
                    run: gem build *.gemspec
         
     | 
| 
      
 21 
     | 
    
         
            +
                  - name: Publish gem
         
     | 
| 
      
 22 
     | 
    
         
            +
                    run: gem push *.gem
         
     | 
| 
      
 23 
     | 
    
         
            +
                    env:
         
     | 
| 
      
 24 
     | 
    
         
            +
                      GEM_HOST_API_KEY: '${{ secrets.RUBYGEMS_AUTH_TOKEN }}'
         
     | 
    
        data/beaker-vagrant.gemspec
    CHANGED
    
    | 
         @@ -24,18 +24,14 @@ Gem::Specification.new do |s| 
     | 
|
| 
       24 
24 
     | 
    
         
             
              if RUBY_VERSION < "2.3"
         
     | 
| 
       25 
25 
     | 
    
         
             
                s.add_development_dependency 'fakefs', '~> 0.6', '< 0.14'
         
     | 
| 
       26 
26 
     | 
    
         
             
              else
         
     | 
| 
       27 
     | 
    
         
            -
                s.add_development_dependency 'fakefs', ' 
     | 
| 
      
 27 
     | 
    
         
            +
                s.add_development_dependency 'fakefs', '>= 0.6', '< 2.0'
         
     | 
| 
       28 
28 
     | 
    
         
             
              end
         
     | 
| 
       29 
     | 
    
         
            -
              s.add_development_dependency 'rake', '~>  
     | 
| 
      
 29 
     | 
    
         
            +
              s.add_development_dependency 'rake', '~> 13.0'
         
     | 
| 
       30 
30 
     | 
    
         
             
              s.add_development_dependency 'simplecov'
         
     | 
| 
       31 
31 
     | 
    
         
             
              s.add_development_dependency 'pry', '~> 0.10'
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
              # Documentation dependencies
         
     | 
| 
       34 
34 
     | 
    
         
             
              s.add_development_dependency 'yard'
         
     | 
| 
       35 
35 
     | 
    
         
             
              s.add_development_dependency 'thin'
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
              # Run time dependencies
         
     | 
| 
       38 
     | 
    
         
            -
              s.add_runtime_dependency 'stringify-hash', '~> 0.0.0'
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
36 
     | 
    
         
             
            end
         
     | 
| 
       41 
37 
     | 
    
         | 
| 
         @@ -5,12 +5,6 @@ module Beaker 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
                require 'beaker/hypervisor/vagrant/mount_folder'
         
     | 
| 
       7 
7 
     | 
    
         
             
                require 'beaker/hypervisor/vagrant_virtualbox'
         
     | 
| 
       8 
     | 
    
         
            -
                # Return a random mac address
         
     | 
| 
       9 
     | 
    
         
            -
                #
         
     | 
| 
       10 
     | 
    
         
            -
                # @return [String] a random mac address
         
     | 
| 
       11 
     | 
    
         
            -
                def randmac
         
     | 
| 
       12 
     | 
    
         
            -
                  "080027" + (1..3).map{"%0.2X"%rand(256)}.join
         
     | 
| 
       13 
     | 
    
         
            -
                end
         
     | 
| 
       14 
8 
     | 
    
         | 
| 
       15 
9 
     | 
    
         
             
                def rand_chunk
         
     | 
| 
       16 
10 
     | 
    
         
             
                  (2 + rand(252)).to_s #don't want a 0, 1, or a 255
         
     | 
| 
         @@ -27,19 +21,17 @@ module Beaker 
     | 
|
| 
       27 
21 
     | 
    
         | 
| 
       28 
22 
     | 
    
         
             
                def private_network_generator(host)
         
     | 
| 
       29 
23 
     | 
    
         
             
                  private_network_string = "    v.vm.network :private_network, ip: \"#{host['ip'].to_s}\", :netmask => \"#{host['netmask'] ||= "255.255.0.0"}\""
         
     | 
| 
       30 
     | 
    
         
            -
                   
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                    @mac = randmac
         
     | 
| 
       33 
     | 
    
         
            -
                    private_network_string << "\n"
         
     | 
| 
       34 
     | 
    
         
            -
                  when nil
         
     | 
| 
       35 
     | 
    
         
            -
                    @mac = randmac
         
     | 
| 
       36 
     | 
    
         
            -
                    private_network_string << ", :mac => \"#{@mac}\"\n"
         
     | 
| 
      
 24 
     | 
    
         
            +
                  if host['network_mac']
         
     | 
| 
      
 25 
     | 
    
         
            +
                    private_network_string << ", :mac => \"#{host['network_mac']}\"\n"
         
     | 
| 
       37 
26 
     | 
    
         
             
                  else
         
     | 
| 
       38 
     | 
    
         
            -
                     
     | 
| 
       39 
     | 
    
         
            -
                    private_network_string << ", :mac => \"#{@mac}\"\n"
         
     | 
| 
      
 27 
     | 
    
         
            +
                    private_network_string << "\n"
         
     | 
| 
       40 
28 
     | 
    
         
             
                  end
         
     | 
| 
       41 
29 
     | 
    
         
             
                end
         
     | 
| 
       42 
30 
     | 
    
         | 
| 
      
 31 
     | 
    
         
            +
                def connection_preference(host)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  [:hostname]
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       43 
35 
     | 
    
         
             
                def shell_provisioner_generator(provisioner_config)
         
     | 
| 
       44 
36 
     | 
    
         
             
                  unless provisioner_config['path'].nil? || provisioner_config['path'].empty?
         
     | 
| 
       45 
37 
     | 
    
         
             
                    unless provisioner_config['args'].nil?
         
     | 
| 
         @@ -62,7 +54,7 @@ module Beaker 
     | 
|
| 
       62 
54 
     | 
    
         | 
| 
       63 
55 
     | 
    
         
             
                  hosts.each do |host|
         
     | 
| 
       64 
56 
     | 
    
         
             
                    host.name.tr!('_','-') # Rewrite Hostname with hyphens instead of underscores to get legal hostname
         
     | 
| 
       65 
     | 
    
         
            -
                     
     | 
| 
      
 57 
     | 
    
         
            +
                    set_host_default_ip(host)
         
     | 
| 
       66 
58 
     | 
    
         
             
                    v_file << "  c.vm.define '#{host.name}' do |v|\n"
         
     | 
| 
       67 
59 
     | 
    
         
             
                    v_file << "    v.vm.hostname = '#{host.name}'\n"
         
     | 
| 
       68 
60 
     | 
    
         
             
                    v_file << "    v.vm.box = '#{host['box']}'\n"
         
     | 
| 
         @@ -72,7 +64,7 @@ module Beaker 
     | 
|
| 
       72 
64 
     | 
    
         
             
                    v_file << "    v.vm.box_check_update = '#{host['box_check_update'] ||= 'true'}'\n"
         
     | 
| 
       73 
65 
     | 
    
         
             
                    v_file << "    v.vm.synced_folder '.', '/vagrant', disabled: true\n" if host['synced_folder'] == 'disabled'
         
     | 
| 
       74 
66 
     | 
    
         
             
                    v_file << shell_provisioner_generator(host['shell_provisioner']) if host['shell_provisioner']
         
     | 
| 
       75 
     | 
    
         
            -
                    v_file << private_network_generator(host)
         
     | 
| 
      
 67 
     | 
    
         
            +
                    v_file << private_network_generator(host) if host['ip']
         
     | 
| 
       76 
68 
     | 
    
         | 
| 
       77 
69 
     | 
    
         
             
                    unless host['mount_folders'].nil?
         
     | 
| 
       78 
70 
     | 
    
         
             
                      host['mount_folders'].each do |name, folder|
         
     | 
| 
         @@ -132,7 +124,6 @@ module Beaker 
     | 
|
| 
       132 
124 
     | 
    
         
             
                      else
         
     | 
| 
       133 
125 
     | 
    
         
             
                        v_file << "    v.vm.synced_folder '.', '/vagrant', :nfs => true\n"
         
     | 
| 
       134 
126 
     | 
    
         
             
                      end
         
     | 
| 
       135 
     | 
    
         
            -
                      v_file << "    v.vm.base_mac = '#{@mac}'\n"
         
     | 
| 
       136 
127 
     | 
    
         
             
                    end
         
     | 
| 
       137 
128 
     | 
    
         | 
| 
       138 
129 
     | 
    
         
             
                    v_file << self.class.provider_vfile_section(host, options)
         
     | 
| 
         @@ -189,72 +180,45 @@ module Beaker 
     | 
|
| 
       189 
180 
     | 
    
         
             
                end
         
     | 
| 
       190 
181 
     | 
    
         | 
| 
       191 
182 
     | 
    
         
             
                def set_ssh_config host, user
         
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
                    ssh_config = Dir.chdir(@vagrant_path) do
         
     | 
| 
       194 
     | 
    
         
            -
                      stdin, stdout, stderr, wait_thr = Open3.popen3(@vagrant_env, 'vagrant', 'ssh-config', host.name)
         
     | 
| 
       195 
     | 
    
         
            -
                      if not wait_thr.value.success?
         
     | 
| 
       196 
     | 
    
         
            -
                        raise "Failed to 'vagrant ssh-config' for #{host.name}"
         
     | 
| 
       197 
     | 
    
         
            -
                      end
         
     | 
| 
       198 
     | 
    
         
            -
                      stdout.read
         
     | 
| 
       199 
     | 
    
         
            -
                    end
         
     | 
| 
       200 
     | 
    
         
            -
                    #replace hostname with ip
         
     | 
| 
       201 
     | 
    
         
            -
                    ssh_config = ssh_config.gsub(/Host #{host.name}/, "Host #{host['ip']}") unless not host['ip']
         
     | 
| 
       202 
     | 
    
         
            -
             
     | 
| 
       203 
     | 
    
         
            -
                    #set the user
         
     | 
| 
       204 
     | 
    
         
            -
                    ssh_config = ssh_config.gsub(/User vagrant/, "User #{user}")
         
     | 
| 
      
 183 
     | 
    
         
            +
                  return unless Dir.exist?(@vagrant_path)
         
     | 
| 
       205 
184 
     | 
    
         | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
       207 
     | 
    
         
            -
             
     | 
| 
      
 185 
     | 
    
         
            +
                  ssh_config = Dir.chdir(@vagrant_path) do
         
     | 
| 
      
 186 
     | 
    
         
            +
                    stdout, _, status = Open3.capture3(@vagrant_env, 'vagrant', 'ssh-config', host.name)
         
     | 
| 
      
 187 
     | 
    
         
            +
                    unless status.success?
         
     | 
| 
      
 188 
     | 
    
         
            +
                      raise "Failed to 'vagrant ssh-config' for #{host.name}"
         
     | 
| 
       208 
189 
     | 
    
         
             
                    end
         
     | 
| 
       209 
190 
     | 
    
         | 
| 
       210 
     | 
    
         
            -
                    f 
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
             
     | 
| 
       213 
     | 
    
         
            -
                    host[:vagrant_ssh_config] = f.path
         
     | 
| 
       214 
     | 
    
         
            -
                    host['ssh'] = host['ssh'].merge(Net::SSH.configuration_for(host['ip'], f.path))
         
     | 
| 
       215 
     | 
    
         
            -
                    host['user'] = user
         
     | 
| 
       216 
     | 
    
         
            -
                    @temp_files << f
         
     | 
| 
       217 
     | 
    
         
            -
                end
         
     | 
| 
      
 191 
     | 
    
         
            +
                    Tempfile.create do |f|
         
     | 
| 
      
 192 
     | 
    
         
            +
                      f.write(stdout)
         
     | 
| 
      
 193 
     | 
    
         
            +
                      f.flush
         
     | 
| 
       218 
194 
     | 
    
         | 
| 
       219 
     | 
    
         
            -
             
     | 
| 
       220 
     | 
    
         
            -
                  ip = ''
         
     | 
| 
       221 
     | 
    
         
            -
                  if File.file?(@vagrant_file) #we should have a vagrant file available to us for reading
         
     | 
| 
       222 
     | 
    
         
            -
                    f = File.read(@vagrant_file)
         
     | 
| 
       223 
     | 
    
         
            -
                    m = /'#{hostname}'.*?ip:\s*('|")\s*([^'"]+)('|")/m.match(f)
         
     | 
| 
       224 
     | 
    
         
            -
                    if m
         
     | 
| 
       225 
     | 
    
         
            -
                      ip = m[2]
         
     | 
| 
       226 
     | 
    
         
            -
                      @logger.debug("Determined existing vagrant box #{hostname} ip to be: #{ip} ")
         
     | 
| 
       227 
     | 
    
         
            -
                    else
         
     | 
| 
       228 
     | 
    
         
            -
                      ip = nil
         
     | 
| 
       229 
     | 
    
         
            -
                      @logger.debug("Unable to determine ip for vagrant box #{hostname}")
         
     | 
| 
      
 195 
     | 
    
         
            +
                      Net::SSH::Config.for(host.name, [f.path])
         
     | 
| 
       230 
196 
     | 
    
         
             
                    end
         
     | 
| 
       231 
     | 
    
         
            -
                  else
         
     | 
| 
       232 
     | 
    
         
            -
                    raise("No vagrant file found (should be located at #{@vagrant_file})")
         
     | 
| 
       233 
197 
     | 
    
         
             
                  end
         
     | 
| 
       234 
     | 
    
         
            -
             
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
      
 199 
     | 
    
         
            +
                  ssh_config[:user] = user
         
     | 
| 
      
 200 
     | 
    
         
            +
                  ssh_config[:keys_only] = false if @options[:forward_ssh_agent] == true
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
                  host['ssh'] = host['ssh'].merge(ssh_config)
         
     | 
| 
      
 203 
     | 
    
         
            +
                  host['user'] = user
         
     | 
| 
       235 
204 
     | 
    
         
             
                end
         
     | 
| 
       236 
205 
     | 
    
         | 
| 
       237 
206 
     | 
    
         
             
                def initialize(vagrant_hosts, options)
         
     | 
| 
       238 
207 
     | 
    
         
             
                  require 'tempfile'
         
     | 
| 
       239 
208 
     | 
    
         
             
                  @options = options
         
     | 
| 
       240 
209 
     | 
    
         
             
                  @logger = options[:logger]
         
     | 
| 
       241 
     | 
    
         
            -
                  @temp_files = []
         
     | 
| 
       242 
210 
     | 
    
         
             
                  @hosts = vagrant_hosts
         
     | 
| 
       243 
     | 
    
         
            -
                  @vagrant_path = File.expand_path(File.join( 
     | 
| 
      
 211 
     | 
    
         
            +
                  @vagrant_path = File.expand_path(File.join('.vagrant', 'beaker_vagrant_files', 'beaker_' + File.basename(options[:hosts_file])))
         
     | 
| 
       244 
212 
     | 
    
         
             
                  @vagrant_file = File.expand_path(File.join(@vagrant_path, "Vagrantfile"))
         
     | 
| 
       245 
213 
     | 
    
         
             
                  @vagrant_env = { "RUBYLIB" => "", "RUBYOPT" => "" }
         
     | 
| 
       246 
214 
     | 
    
         
             
                end
         
     | 
| 
       247 
215 
     | 
    
         | 
| 
       248 
216 
     | 
    
         
             
                def configure(opts = {})
         
     | 
| 
       249 
     | 
    
         
            -
                   
     | 
| 
       250 
     | 
    
         
            -
                     
     | 
| 
      
 217 
     | 
    
         
            +
                  unless @options[:provision]
         
     | 
| 
      
 218 
     | 
    
         
            +
                    unless File.file?(@vagrant_file)
         
     | 
| 
       251 
219 
     | 
    
         
             
                      raise "Beaker is configured with provision = false but no vagrant file was found at #{@vagrant_file}. You need to enable provision"
         
     | 
| 
       252 
220 
     | 
    
         
             
                    end
         
     | 
| 
       253 
221 
     | 
    
         | 
| 
       254 
     | 
    
         
            -
                    @hosts.each do |host|
         
     | 
| 
       255 
     | 
    
         
            -
                      host[:ip] = get_ip_from_vagrant_file(host.name)
         
     | 
| 
       256 
     | 
    
         
            -
                    end
         
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
222 
     | 
    
         
             
                    set_all_ssh_config
         
     | 
| 
       259 
223 
     | 
    
         
             
                  end
         
     | 
| 
       260 
224 
     | 
    
         
             
                  super
         
     | 
| 
         @@ -292,9 +256,6 @@ module Beaker 
     | 
|
| 
       292 
256 
     | 
    
         | 
| 
       293 
257 
     | 
    
         
             
                def cleanup
         
     | 
| 
       294 
258 
     | 
    
         
             
                  @logger.debug "removing temporary ssh-config files per-vagrant box"
         
     | 
| 
       295 
     | 
    
         
            -
                  @temp_files.each do |f|
         
     | 
| 
       296 
     | 
    
         
            -
                    f.close()
         
     | 
| 
       297 
     | 
    
         
            -
                  end
         
     | 
| 
       298 
259 
     | 
    
         
             
                  @logger.notify "Destroying vagrant boxes"
         
     | 
| 
       299 
260 
     | 
    
         
             
                  vagrant_cmd("destroy --force")
         
     | 
| 
       300 
261 
     | 
    
         
             
                  FileUtils.rm_rf(@vagrant_path)
         
     | 
| 
         @@ -350,5 +311,11 @@ module Beaker 
     | 
|
| 
       350 
311 
     | 
    
         
             
                    end
         
     | 
| 
       351 
312 
     | 
    
         
             
                  end
         
     | 
| 
       352 
313 
     | 
    
         
             
                end
         
     | 
| 
      
 314 
     | 
    
         
            +
             
     | 
| 
      
 315 
     | 
    
         
            +
                private
         
     | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
      
 317 
     | 
    
         
            +
                def set_host_default_ip(host)
         
     | 
| 
      
 318 
     | 
    
         
            +
                  host['ip'] ||= randip(host.host_hash[:hypervisor]) # use the existing ip, otherwise default to a random ip
         
     | 
| 
      
 319 
     | 
    
         
            +
                end
         
     | 
| 
       353 
320 
     | 
    
         
             
              end
         
     | 
| 
       354 
321 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,27 +1,17 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'beaker/hypervisor/vagrant'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            class Beaker::VagrantLibvirt < Beaker::Vagrant
         
     | 
| 
       4 
     | 
    
         
            -
               
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              class << self
         
     | 
| 
       8 
     | 
    
         
            -
                attr_reader :memory
         
     | 
| 
       9 
     | 
    
         
            -
              end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              # Return a random mac address with colons
         
     | 
| 
       12 
     | 
    
         
            -
              #
         
     | 
| 
       13 
     | 
    
         
            -
              # @return [String] a random mac address
         
     | 
| 
       14 
     | 
    
         
            -
              def randmac
         
     | 
| 
       15 
     | 
    
         
            -
                "08:00:27:" + (1..3).map{"%0.2X"%rand(256)}.join(':')
         
     | 
| 
       16 
     | 
    
         
            -
              end
         
     | 
| 
      
 4 
     | 
    
         
            +
              def initialize(*)
         
     | 
| 
      
 5 
     | 
    
         
            +
                super
         
     | 
| 
       17 
6 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
              def provision(provider = 'libvirt')
         
     | 
| 
       19 
7 
     | 
    
         
             
                # This needs to be unique for every system with the same hostname but does
         
     | 
| 
       20 
8 
     | 
    
         
             
                # not affect VirtualBox
         
     | 
| 
       21 
9 
     | 
    
         
             
                vagrant_path_digest = Digest::SHA256.hexdigest(@vagrant_path)
         
     | 
| 
       22 
     | 
    
         
            -
                @vagrant_path  
     | 
| 
      
 10 
     | 
    
         
            +
                @vagrant_path += '_' + vagrant_path_digest[0..2] + vagrant_path_digest[-3..-1]
         
     | 
| 
       23 
11 
     | 
    
         
             
                @vagrant_file = File.expand_path(File.join(@vagrant_path, "Vagrantfile"))
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
       24 
13 
     | 
    
         | 
| 
      
 14 
     | 
    
         
            +
              def provision(provider = 'libvirt')
         
     | 
| 
       25 
15 
     | 
    
         
             
                super
         
     | 
| 
       26 
16 
     | 
    
         
             
              end
         
     | 
| 
       27 
17 
     | 
    
         | 
| 
         @@ -30,19 +20,19 @@ class Beaker::VagrantLibvirt < Beaker::Vagrant 
     | 
|
| 
       30 
20 
     | 
    
         
             
                  "      node.cpus = #{cpus(host, options)}\n" +
         
     | 
| 
       31 
21 
     | 
    
         
             
                  "      node.memory = #{memsize(host, options)}\n" +
         
     | 
| 
       32 
22 
     | 
    
         
             
                  "      node.qemu_use_session = false\n" +
         
     | 
| 
       33 
     | 
    
         
            -
                   
     | 
| 
      
 23 
     | 
    
         
            +
                  build_options(options).join("\n") + "\n" +
         
     | 
| 
       34 
24 
     | 
    
         
             
                  "    end\n"
         
     | 
| 
       35 
25 
     | 
    
         
             
              end
         
     | 
| 
       36 
26 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
              def self. 
     | 
| 
       38 
     | 
    
         
            -
                 
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                   
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                 
     | 
| 
      
 27 
     | 
    
         
            +
              def self.build_options(options)
         
     | 
| 
      
 28 
     | 
    
         
            +
                return [] unless options['libvirt']
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                options['libvirt'].map { |k, v| "      node.#{k} = '#{v}'" }
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              private
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              def set_host_default_ip(host)
         
     | 
| 
      
 36 
     | 
    
         
            +
                # In vagrant-libvirt hosts get a management IP, no need for a default
         
     | 
| 
       47 
37 
     | 
    
         
             
              end
         
     | 
| 
       48 
38 
     | 
    
         
             
            end
         
     | 
| 
         @@ -19,9 +19,10 @@ describe Beaker::VagrantCustom do 
     | 
|
| 
       19 
19 
     | 
    
         
             
                  expect( vagrant ).to receive( :set_ssh_config ).with( host, host_prev_name ).once
         
     | 
| 
       20 
20 
     | 
    
         
             
                end
         
     | 
| 
       21 
21 
     | 
    
         
             
                expect( vagrant ).to receive( :hack_etc_hosts ).with( @hosts, options ).once
         
     | 
| 
       22 
     | 
    
         
            -
                FakeFS.activate!
         
     | 
| 
       23 
22 
     | 
    
         
             
                expect( vagrant ).to receive( :vagrant_cmd ).with( "up" ).once
         
     | 
| 
       24 
     | 
    
         
            -
                 
     | 
| 
      
 23 
     | 
    
         
            +
                FakeFS do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  vagrant.provision
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
       25 
26 
     | 
    
         
             
              end
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
       27 
28 
     | 
    
         
             
              context 'takes vagrant configuration from existing file' do
         
     | 
| 
         @@ -2,71 +2,57 @@ require 'spec_helper' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe Beaker::VagrantDesktop do
         
     | 
| 
       4 
4 
     | 
    
         
             
              let( :options ) { make_opts.merge({ :hosts_file => 'sample.cfg', 'logger' => double().as_null_object }) }
         
     | 
| 
       5 
     | 
    
         
            -
              let( :vagrant ) {  
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              before :each do
         
     | 
| 
       8 
     | 
    
         
            -
                @hosts = make_hosts()
         
     | 
| 
       9 
     | 
    
         
            -
              end
         
     | 
| 
      
 5 
     | 
    
         
            +
              let( :vagrant ) { described_class.new( hosts, options ) }
         
     | 
| 
      
 6 
     | 
    
         
            +
              let( :hosts ) { make_hosts }
         
     | 
| 
       10 
7 
     | 
    
         | 
| 
       11 
8 
     | 
    
         
             
              it "uses the vmware_desktop provider for provisioning" do
         
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
      
 9 
     | 
    
         
            +
                hosts.each do |host|
         
     | 
| 
       13 
10 
     | 
    
         
             
                  host_prev_name = host['user']
         
     | 
| 
       14 
11 
     | 
    
         
             
                  expect( vagrant ).to receive( :set_ssh_config ).with( host, 'vagrant' ).once
         
     | 
| 
       15 
12 
     | 
    
         
             
                  expect( vagrant ).to receive( :copy_ssh_to_root ).with( host, options ).once
         
     | 
| 
       16 
13 
     | 
    
         
             
                  expect( vagrant ).to receive( :set_ssh_config ).with( host, host_prev_name ).once
         
     | 
| 
       17 
14 
     | 
    
         
             
                end
         
     | 
| 
       18 
     | 
    
         
            -
                expect( vagrant ).to receive( :hack_etc_hosts ).with(  
     | 
| 
      
 15 
     | 
    
         
            +
                expect( vagrant ).to receive( :hack_etc_hosts ).with( hosts, options ).once
         
     | 
| 
       19 
16 
     | 
    
         
             
                expect( vagrant ).to receive( :vagrant_cmd ).with( "up --provider vmware_desktop" ).once
         
     | 
| 
       20 
     | 
    
         
            -
                 
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              it "can make a Vagranfile for a set of hosts" do
         
     | 
| 
       24 
     | 
    
         
            -
                path = vagrant.instance_variable_get( :@vagrant_path )
         
     | 
| 
       25 
     | 
    
         
            -
                allow( vagrant ).to receive( :randmac ).and_return( "0123456789" )
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                vagrant.make_vfile( @hosts )
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile")))
         
     | 
| 
       30 
     | 
    
         
            -
                expect( vagrantfile ).to include( %Q{    v.vm.provider :vmware_desktop do |v|\n      v.vmx['memsize'] = '1024'\n    end})
         
     | 
| 
      
 17 
     | 
    
         
            +
                FakeFS do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  vagrant.provision
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
       31 
20 
     | 
    
         
             
              end
         
     | 
| 
       32 
21 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
               
     | 
| 
       34 
     | 
    
         
            -
                 
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                 
     | 
| 
       40 
     | 
    
         
            -
                expect( vagrantfile ).to include( %Q{ v.vmx['whitelist_verified'] = 'true'})
         
     | 
| 
       41 
     | 
    
         
            -
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
              context 'can make a Vagrantfile' do
         
     | 
| 
      
 23 
     | 
    
         
            +
                subject do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  FakeFS do
         
     | 
| 
      
 25 
     | 
    
         
            +
                    vagrant.make_vfile(hosts)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    File.read(vagrant.instance_variable_get(:@vagrant_file))
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
       42 
29 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                 
     | 
| 
       45 
     | 
    
         
            -
                 
     | 
| 
      
 30 
     | 
    
         
            +
                it "for a set of hosts" do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  is_expected.to include( %Q{    v.vm.provider :vmware_desktop do |v|\n      v.vmx['memsize'] = '1024'\n    end})
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
       46 
33 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                 
     | 
| 
      
 34 
     | 
    
         
            +
                context 'with whitelist_verified' do
         
     | 
| 
      
 35 
     | 
    
         
            +
                  let(:hosts) { make_hosts({:whitelist_verified => true}, 1) }
         
     | 
| 
       48 
36 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                 
     | 
| 
       51 
     | 
    
         
            -
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
                  it { is_expected.to include( %Q{ v.vmx['whitelist_verified'] = 'true'}) }
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
       52 
39 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                hosts = make_hosts({:unmount_default_hgfs => true},1)
         
     | 
| 
      
 40 
     | 
    
         
            +
                context 'with functional_hgfs' do
         
     | 
| 
      
 41 
     | 
    
         
            +
                  let(:hosts) { make_hosts({:functional_hgfs => true}, 1) }
         
     | 
| 
       56 
42 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
                  it { is_expected.to include( %Q{ v.vmx['functional_hgfs'] = 'true'}) }
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
       58 
45 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                 
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
                context 'with unmount_default_hgfs' do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  let(:hosts) { make_hosts({:unmount_default_hgfs => true}, 1) }
         
     | 
| 
       62 
48 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                 
     | 
| 
       65 
     | 
    
         
            -
                hosts = make_hosts({:gui => true},1)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  it { is_expected.to include( %Q{ v.vmx['unmount_default_hgfs'] = 'true'}) }
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
       66 
51 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                 
     | 
| 
      
 52 
     | 
    
         
            +
                context "with gui" do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  let(:hosts) { make_hosts({:gui => true},1) }
         
     | 
| 
       68 
54 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
                 
     | 
| 
      
 55 
     | 
    
         
            +
                  it { is_expected.to include( %Q{ v.vmx['gui'] = true}) }
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
       71 
57 
     | 
    
         
             
              end
         
     | 
| 
       72 
58 
     | 
    
         
             
            end
         
     | 
| 
         @@ -2,31 +2,31 @@ require 'spec_helper' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe Beaker::VagrantFusion do
         
     | 
| 
       4 
4 
     | 
    
         
             
              let( :options ) { make_opts.merge({ :hosts_file => 'sample.cfg', 'logger' => double().as_null_object }) }
         
     | 
| 
       5 
     | 
    
         
            -
              let( :vagrant ) {  
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              before :each do
         
     | 
| 
       8 
     | 
    
         
            -
                @hosts = make_hosts()
         
     | 
| 
       9 
     | 
    
         
            -
              end
         
     | 
| 
      
 5 
     | 
    
         
            +
              let( :vagrant ) { described_class.new( hosts, options ) }
         
     | 
| 
      
 6 
     | 
    
         
            +
              let( :hosts ) { make_hosts() }
         
     | 
| 
       10 
7 
     | 
    
         | 
| 
       11 
8 
     | 
    
         
             
              it "uses the vmware_fusion provider for provisioning" do
         
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
      
 9 
     | 
    
         
            +
                hosts.each do |host|
         
     | 
| 
       13 
10 
     | 
    
         
             
                  host_prev_name = host['user']
         
     | 
| 
       14 
11 
     | 
    
         
             
                  expect( vagrant ).to receive( :set_ssh_config ).with( host, 'vagrant' ).once
         
     | 
| 
       15 
12 
     | 
    
         
             
                  expect( vagrant ).to receive( :copy_ssh_to_root ).with( host, options ).once
         
     | 
| 
       16 
13 
     | 
    
         
             
                  expect( vagrant ).to receive( :set_ssh_config ).with( host, host_prev_name ).once
         
     | 
| 
       17 
14 
     | 
    
         
             
                end
         
     | 
| 
       18 
     | 
    
         
            -
                expect( vagrant ).to receive( :hack_etc_hosts ).with(  
     | 
| 
      
 15 
     | 
    
         
            +
                expect( vagrant ).to receive( :hack_etc_hosts ).with( hosts, options ).once
         
     | 
| 
       19 
16 
     | 
    
         
             
                expect( vagrant ).to receive( :vagrant_cmd ).with( "up --provider vmware_fusion" ).once
         
     | 
| 
       20 
17 
     | 
    
         
             
                vagrant.provision
         
     | 
| 
       21 
18 
     | 
    
         
             
              end
         
     | 
| 
       22 
19 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
               
     | 
| 
       24 
     | 
    
         
            -
                 
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
              context 'Correct vagrant configuration' do
         
     | 
| 
      
 21 
     | 
    
         
            +
                subject do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  FakeFS do
         
     | 
| 
      
 23 
     | 
    
         
            +
                    vagrant.make_vfile( hosts, options )
         
     | 
| 
      
 24 
     | 
    
         
            +
                    File.read(vagrant.instance_variable_get(:@vagrant_file))
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
       28 
27 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
                 
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 28 
     | 
    
         
            +
                it 'has a provider section' do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  is_expected.to include( %Q{    v.vm.provider :vmware_fusion do |v|\n      v.vmx['memsize'] = '1024'\n    end})
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
       31 
31 
     | 
    
         
             
              end
         
     | 
| 
       32 
32 
     | 
    
         
             
            end
         
     |