# Changes in Release 0.3 ## Selecting a virtualization provider Release 0.3 added support for multiple virtualization providers. The provider is specified in the **provider** top-level element in the topology file, or as **defaults.provider** element. The default provider (specified in system-level `topology-defaults.yml`) is *libvirt*. You'll find the up-to-date status of virtualization provider support in [Supported Platforms](../platforms.md) ## Explicit device images In release 0.2, the default device images (Vagrant boxes) were hard-coded in device part of Vagrantfile templates. ```{warning} The rest of this section no longer applies. Release 1.1.3 changed the image settings, see [defaults](../defaults.md) page for details ``` Those defaults are gone, the default device image is specified in **defaults.devices._device_.image._provider_**. You can override the defaults by specifying topology defaults. To change the default Vagrant box for CSR 1000v in *libvirt* environment use: ``` defaults: devices: csr1000v: image: libvirt: cisco/csr1000v-16.7 ``` You can also specify device-specific image with the *image* or *box* parameter in node data. ## Provider Defaults **providers** element was added to the **defaults** data structure. It's a dictionary listing all valid providers. The absolute minimum you have to specify for a provider is the name of the configuration file (in the **config** element), for example: ``` providers: libvirt: config: Vagrantfile virtualbox: config: Vagrantfile ``` ## Ports Defaults Topology defaults also contain a **ports** dictionary mapping protocols (SSH, HTTP, NETCONF) to TCP port numbers. Call me lazy: it was simpler to add a dictionary than to deal with `/etc/protocols`. ``` ports: ssh: 22 http: 80 https: 443 netconf: 830 ``` Protocol names must match names of forwarded ports in **providers._provider_.forwarded** dictionary. **WARNING:** These data structures are not checked. If you're messing with them you better know what you're doing.