diff --git a/Vagrantfile b/Vagrantfile index 9e9a5d24b..090d448da 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -39,6 +39,7 @@ end # Verify version requirements. require_ansible_version ">= #{vconfig['drupalvm_ansible_version_min']}" Vagrant.require_version ">= #{vconfig['drupalvm_vagrant_version_min']}" +require_virtualbox_version ">= #{vconfig['drupalvm_virtualbox_version_min']}" Vagrant.configure('2') do |config| # Set the name of the VM. See: http://stackoverflow.com/a/17864388/100134 diff --git a/default.config.yml b/default.config.yml index 5b7a638bd..3094a7c0d 100644 --- a/default.config.yml +++ b/default.config.yml @@ -36,6 +36,7 @@ vagrant_cpus: 1 # Minimum required versions. drupalvm_vagrant_version_min: '1.8.6' drupalvm_ansible_version_min: '2.2' +drupalvm_virtualbox_version_min: '5.1.10' # Force use of ansible_local provisioner, even if Ansible is installed on host. force_ansible_local: false diff --git a/lib/drupalvm/vagrant.rb b/lib/drupalvm/vagrant.rb index beaa3c432..42a8d05a2 100644 --- a/lib/drupalvm/vagrant.rb +++ b/lib/drupalvm/vagrant.rb @@ -55,6 +55,13 @@ def ansible_version /^[^\s]+ (.+)$/.match(`#{ansible_bin} --version`) { |match| return match[1] } end +def virtualbox_version + virtualbox = VagrantPlugins::ProviderVirtualBox::Driver::Meta.new + virtualbox.version +rescue Vagrant::Errors::VirtualBoxNotDetected + nil +end + # Require that if installed, the ansible version meets the requirements. def require_ansible_version(requirement) return unless ansible_bin @@ -63,6 +70,14 @@ def require_ansible_version(requirement) raise_message "You must install an Ansible version #{requirement} to use this version of Drupal VM." end +# Require that if installed, the VirtualBox version meets the requirements. +def require_virtualbox_version(requirement) + return unless virtualbox_version + req = Gem::Requirement.new(requirement) + return if req.satisfied_by?(Gem::Version.new(virtualbox_version)) + raise_message "You must install a VirtualBox version #{requirement} to use this version of Drupal VM." +end + def raise_message(msg) raise Vagrant::Errors::VagrantError.new, msg end