molecule-plugins icon indicating copy to clipboard operation
molecule-plugins copied to clipboard

Add a disk

Open markfaine opened this issue 4 years ago • 9 comments

I reviewed the docs but didn't see anyway to configure an additional disk. I need to test an LVM role and I need a second disk device. Is this possible?

markfaine avatar Aug 09 '21 22:08 markfaine

It has to be done through provider specific options. For instance, with vagrant libvirt (I don't have virtualbox example at hand):

...
driver:
  name: vagrant
  provider:
    name: libvirt
...
platforms:
- name: vm
  box: debian/buster64
  provider_raw_config_args:
  - "storage :file, :type => 'qcow2', :device => 'vdb', :size => '1G'"
...

apatard avatar Aug 10 '21 08:08 apatard

That's helpful. But there is still some confusion, sorry. What are the provider_raw_config_args used to represent? libvirt options (when used as a provider), virtualbox command line args, or vagrant configuration?

Any basic example for virtualbox would be helpful.

Currently I'm using libvirt as the provider since I thought it seemed the preferred method, would it make more sense for me to use virtualbox directly as the provider? Is there any benefit in using libvirt over virtualbox for virtualbox VMs.

markfaine avatar Aug 10 '21 15:08 markfaine

The options set in the platform definition are used to write the Vagrantfile defining the VMs to create. The molecule-vagrant plugin tries hard to not have configuration options specific to each vagrant provider (as the provider can be virtualbox, libvirt, vmware, ...). This means that some options are not directly available from molecule and in this case, the instance_raw_config_args and provider_raw_config_args have to be used.

I've not tested it but I guess something like this may work for virtualbox provider. The idea is to use the customize option of the virtualbox provider (See https://www.vagrantup.com/docs/providers/virtualbox/configuration#vboxmanage-customizations):

...
driver:
  name: vagrant
  provider:
    name: virtualbox
...
- name: vm
  box: ...
  provider_raw_config_args:
  - "customize ['createhd', '--filename', 'disk.vdi', '--variant', 'Fixed', '--size', 20 * 1024]"
  - "customize ['storageattach', :id,  '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', 'disk.vdi']"
...

Currently I'm using libvirt as the provider since I thought it seemed the preferred method, would it make more sense for me to use virtualbox directly as the provider? Is there any benefit in using libvirt over virtualbox for virtualbox VMs.

molecule-vagrant doesn't force to use a provider. The only thing to note is that only virtualbox and libvirt providers are tested by the continuous integration. So, if you want to use virtualbox directly without going through libvirt, you can.

apatard avatar Aug 10 '21 17:08 apatard

This almost works, slight modification for anyone who needs it:

 - "customize ['createhd', 'disk', '--filename', 'disk.vdi', '--variant', 'Fixed', '--size',  10240]"

However, apparently there is an unrelated issue with WSL2 and virtualbox that prevents the port forwarding to the port 2222 on the vm to function properly. I have not been able to get past this so I'm going to punt and try to use Hyper-V instead, if you have a basic hyperv example that would be appreciated however, it seems that vagrant can't select the network switch for hyperv and so prompts every time, I'm not sure how to work around that. So Hyper-V is also a bust for now.

Also, if you're using WSL you won't be able to change the path, to the disk since it doesn't seem to get translated to the /mnt/c/... path format, and even if you do, it gets prepended with the $wsl path prefix that breaks the path.

I'm going to spin up a VM and maybe try a VM in a VM, though I hate to go that way, my options are limited.

markfaine avatar Aug 12 '21 14:08 markfaine

here is how I connect two VirtualBox disks:

    provider_raw_config_args:
      - "customize ['createhd',  '--filename', 'machine1_disk0', '--size', '8196']"
      - "customize ['createhd',  '--filename', 'machine1_disk1', '--size', '8196']"
      - "customize ['storageattach', :id, '--storagectl', 'SATA Controller','--port', '1', '--type', 'hdd', '--medium', 'machine1_disk0.vdi']"
      - "customize ['storageattach', :id, '--storagectl', 'SATA Controller','--port', '2', '--type', 'hdd', '--medium', 'machine1_disk1.vdi']"

karcaw avatar Aug 12 '21 16:08 karcaw

@markfaine did you manage to get the two disks working ? Can we close the bug ?

apatard avatar Dec 03 '21 10:12 apatard

This is what worked for me:

provider_raw_config_args:
  - "customize ['createmedium', 'disk', '--filename', 'example', '--size', '2048']"
  - "customize ['storageattach', :id, '--storagectl', 'SCSI', '--port', '2', '--type', 'hdd', '--medium', 'example.vdi']"

mconigliaro avatar Jan 21 '22 22:01 mconigliaro

I've tested the configuration from https://github.com/ansible-community/molecule-plugins/issues/60 on a test system with virtualbox and managed to add disks to the VM. This results in examples in my draft PR : https://github.com/ansible-community/molecule-vagrant/pull/172.

To be a little bit more complete: using createmedium or createhd probably depends on the virtualbox version used.

As concerns this bug, I'll close it when PR ansible-community/molecule-vagrant#172 is merged in one or an other form.

apatard avatar Apr 15 '22 09:04 apatard

On top of the issue @apatard mentioned, the biggest caveat of passing commands to VirtualBox directly is that you would have to write some extra code to clean up. And running molecule prepare again will fail because the file already exists, and createmedium and createhd commands do not have flags to overwrite the file or skip creation gracefully.

I found it best to use Vagrant to configure extra disks. One line to add a 10GB disk that will be managed by Vagrant:

instance_raw_config_args:
  - 'vm.disk :disk, name: "mySmallDisk", size: "10GB"'

Vagrant documentation: https://developer.hashicorp.com/vagrant/docs/disks/configuration

tw0flower avatar Jul 31 '24 18:07 tw0flower