Back to Vagrant

Architecture for Vagrant boxes

website/content/vagrant-cloud/boxes/architecture.mdx

2.4.94.8 KB
Original Source

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

[!IMPORTANT]
Documentation Update: Product documentation previously located in /website has moved to the hashicorp/web-unified-docs repository, where all product documentation is now centralized. Please make contributions directly to web-unified-docs, since changes to /website in this repository will not appear on developer.hashicorp.com. ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

Architecture for Vagrant boxes

Providers for Vagrant boxes, in Vagrant version 2.4.0 and newer, can include multiple architecture options. This allows you to have multiple instances of one specific provider. The specific provider shares a common name for artifacts of different architectures.

For example, the hashicorp/precise32 and hashicorp/precise64 boxes each include a provider for virtualbox.

hashicorp/precise32
  v1.0.0
    provider: virtualbox
    
hashicorp/precise64
  v1.0.0
    provider: virtualbox

The addition of architecture now allows these to be combined into a single box. Instead of having a hashicorp/precise32 box for a 32-bit guest, and a hashicorp/precise64 box for a 64-bit guest, a single hashicorp/precise box can provide both.

hashicorp/precise
  v1.0.0
    provider: virtualbox, architecture: amd64
    provider: virtualbox, architecture: i386

The Vagrant CLI will automatically match the provider architecture using the detected local host architecture. If the Vagrant CLI cannot find a matching architecture, it will attempt a special case match.

Default architecture

Vagrant Cloud allows you to optionally specify one architecture as the "default architecture" for a provider. This enables the box owner to control which architecture for the provider the Vagrant CLI uses when architecture filtering is not available. By default, the first provider in the configuration for a box version is the default architecture.

Note, this functionality enables backwards compatiblity with previous versions of the Vagrant CLI that do not support architecture filtering when matching an appropriate provider.

For example, the 2.0.0 version of the hashicorp/precise box is created and a new virtualbox provider is created with amd64 architecture.

hashicorp/precise
  v2.0.0
    provider: virtualbox, architecture: amd64, default_architecture: true

Adding another virtualbox provider with i386 architecture.

hashicorp/precise
  v2.0.0
    provider: virtualbox, architecture: amd64, default_architecture: true
    provider: virtualbox, architecture: i386, default_architecture: false

When the Vagrant CLI, prior to version 2.4.0, requests the hashicorp/precise box with the virtualbox provider, it will receive the information from the virtualbox provider with the amd64 architecture because it is flagged as being the default architecture. If, instead, the provider with i386 architecture should be returned, the virtualbox provider for the i386 architecture can be updated to be the default architecture.

hashicorp/precise
  v2.0.0
    provider: virtualbox, architecture: amd64, default_architecture: false
    provider: virtualbox, architecture: i386, default_architecture: true

Now the provider with the i386 architecture will be returned.

Special cases

There are two cases where Vagrant CLI versions with architecture support will use the default architecture flag.

User requested

If the user sets the config.vm.box_architecture option in their Vagrantfile to nil, the Vagrant CLI will use the provider which has been flagged as the default architecture.

Unknown architecture

The architecture value unknown combined with the default architecture flag provides a special matching case for the Vagrant CLI. If the config.vm.box_architecture option in the local Vagrantfile is configured with the default :auto value, and no architecture matching the host platform can be found for the desired provider, the Vagrant CLI will check for a matching provider that is flagged as the default architecture and has an architecture value of unknown. If that match is found, the Vagrant CLI will use that provider.

This special case matching was included so the Vagrant CLI would be able to use boxes published to Vagrant Cloud prior to the introduction of architecture metadata. All previously existing providers have a default architecture value of unknown and are flagged as the default architecture since they are the only provider to exist for a given name.