Vagrant oVirt v4 Provider
This is a Vagrant 1.1+ plugin that adds an oVirt v4 and allowing Vagrant to control and provision machines in oVirt.
Installation
$ vagrant plugin install vagrant-ovirt4
$ vagrant up --provider=ovirt4
Usage
Prerequisites
Configuration
- ovirt-guest-agent
- cloud-init
- User 'vagrant'
- password 'vagrant'
- Public key from here
- add to group with sudo no password
- set
!requiretty
in sudoers - firewall off and ssh enabled
Example creation steps
- Create a base template
- Centos Example
- Spin up a virtual machine using the Centos 7 Generic Cloud Image from the ovirt Glance provider
- Once it is up and running, run the example script from inside the VM
- Power down the virtual machine
- Remove all Network Interfaces from the VM (so that the template does not have it)
- Right click the virtual machine and click 'Make Template'
Supported Commands (tested)
vagrant up
vagrant destroy
vagrant ssh [-c '#command']
vagrant ssh-config
vagrant halt
vagrant reload
vagrant status
vagrant suspend
vagrant resume
vagrant snapshot list
vagrant snapshot delete [id]
vagrant snapshot save [description]
Configuration example
Vagrant.configure("2") do |config|
config.vm.box = 'ovirt4'
config.vm.hostname = "foo"
config.vm.box_url = 'https://github.com/myoung34/vagrant-ovirt4/blob/master/example_box/dummy.box?raw=true'
config.vm.network :private_network,
:ovirt__network_name => 'ovirtmgmt' #DHCP
# Static configuration
#:ovirt__ip => '192.168.2.198', :ovirt__network_name => 'ovirtmgmt', :ovirt__gateway => '192.168.2.125', :ovirt__netmask => '255.255.0.0', :ovirt__dns_servers => '192.168.2.1', :ovirt__dns_search => 'test.local'
# Static configuration with biosdevname. Guest OS assigns interface names (ens3, em1 or something else). ovirt__interface_name has to match that name.
#:ovirt__ip => '192.168.2.198', :ovirt__network_name => 'ovirtmgmt', :ovirt__gateway => '192.168.2.125', :ovirt__netmask => '255.255.0.0', :ovirt__dns_servers => '192.168.2.1', :ovirt__dns_search => 'test.local', :ovirt__interface_name => 'ens3'
# configure additional interface
# config.vm.network :private_network,
# :ovirt__ip => '192.168.2.199', :ovirt__network_name => 'ovirtmgmt', :ovirt__netmask => '255.255.0.0', :ovirt__interface_name => 'ens4'
config.vm.provider :ovirt4 do |ovirt|
ovirt.url = 'https://server/ovirt-engine/api'
ovirt.username = "admin@internal"
ovirt.password = "password"
ovirt.insecure = true
ovirt.debug = true
ovirt.filtered_api = true #see http://www.ovirt.org/develop/release-management/features/infra/user-portal-permissions/
ovirt.cluster = 'Default'
ovirt.template = 'Vagrant-Centos7-test'
ovirt.console = 'vnc'
ovirt.disk_size = '15 GiB' # only growing is supported. works the same way as below memory settings
ovirt.memory_size = '1 GiB' #see https://github.com/dominikh/filesize for usage
ovirt.memory_guaranteed = '256 MiB' #see https://github.com/dominikh/filesize for usage
ovirt.cpu_cores = 2
ovirt.cpu_sockets = 2
ovirt.cpu_threads = 2
ovirt.bios_serial = aaabbbb-ccc-dddd
ovirt.optimized_for = 'server'
ovirt.cloud_init =<<EOF
write_files:
- content: |
Hello, world!
path: /tmp/greeting.txt
permissions: '0644'
EOF
# additional disks
ovirt.storage :file, size: "8 GiB", type: 'qcow2', storage_domain: "mystoragedomain"
end
end
Configuration options
- Vagrant specific
config.vm.hostname
=> Sets the hostname of the VM a. Is the 'name' in the Virtual Machine tab of the UI a. Is the 'hostname' of the VM configured bycloud-init
config.vm.network
=> Sets the network information of the VM. a. Note::ip
=> is ignored, but:ovirt__ip
is used and merged with:ip
- Provider specific
config.vm.network
=> Sets the network information of the VM. a. Note: Only:private_network
is currently supported. a. If:ovirt__ip
is provided, then the network type is assumed 'STATIC' andgateway
is also used.url
=> The URL for the API. Required. String. No default value.username
=> The username for the API. Required. String. No default value.password
=> The password for the API. Required. String. No default value.insecure
=> Allow connecting to SSL sites without certificates. Optional. Bool. Default isfalse
debug
=> Turn on additional log statements. Optional. Bool. Default isfalse
.template
=> The name of the template to use for creation. Required. String. No Default value.cluster
=> The name of the ovirt cluster to create within. Required. String. No Default value.console
=> The type of remote viewing protocol to use. Required. String. No Default value.memory_size
=> The physical size of the memory for the VM (in MB). Defaults to256
memory_guaranteed
=> The guaranteed size of the memory for the VM (in MB). Note: cannot be larger thanmemory_size
. Defaults tomemory_size
cpu_cores
=> The number of CPU cores. Defaults to1
cpu_sockets
=> The number of CPU cores. Defaults to1
cpu_threads
=> The number of CPU threads. Defaults to1
cloud_init
=> The cloud-init data to pass. Must be properly formatted as yaml. Docs hereaffinity
=> The affinity to use. See this for possible uses. Optional. Invalid will cause aRuntimeError
placement_host
=> The host to start the VM on. Optional.bios_serial
=> The BIOS serial number to assign. Optional.optimized_for
=> The "optimized for" setting. Can be one of 'Desktop' or 'Server' (case insensitive). Optional.storage
=> adds a new storage disk to the VM a.size
: the size of the disk a.type
: the type of disk. It can be eitherqcow2
orraw
a.storage_domain
: the storage domain where the disk should be created
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Some pointers:
- To install the requirements when developing:
bundle install
- To run the test suite:
bundle exec rspec spec/