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
!requirettyin 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 upvagrant destroyvagrant ssh [-c '#command']vagrant ssh-configvagrant haltvagrant reloadvagrant statusvagrant suspendvagrant resumevagrant snapshot listvagrant 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'
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 GB' # 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 MB' #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-initconfig.vm.network=> Sets the network information of the VM. a. Note::ip=> is ignored, but:ovirt__ipis used and merged with:ip
- Provider specific
config.vm.network=> Sets the network information of the VM. a. Note: Only:private_networkis currently supported. a. If:ovirt__ipis provided, then the network type is assumed 'STATIC' andgatewayis 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 isfalsedebug=> 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 to256memory_guaranteed=> The guaranteed size of the memory for the VM (in MB). Note: cannot be larger thanmemory_size. Defaults tomemory_sizecpu_cores=> The number of CPU cores. Defaults to1cpu_sockets=> The number of CPU cores. Defaults to1cpu_threads=> The number of CPU threads. Defaults to1cloud_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 aRuntimeErrorplacement_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 eitherqcow2orrawa.storage_domain: the storage domain where the disk should be created
Testing
Currently pull-requests are tested via test-kitchen using kitchen-vagrant.
See Jenkinsfile for more information.
If you'd like to run them yourself, however, they make not work in all setups. For example they assume 192.168.2.0/24, host pinning will probably not have a host that's in all set ups, and the template names might not match.
To run Unit tests: bundle install; bundle exec rspec
To run acceptance tests:
export OVIRT_URL='https://yoururl/ovirt-engine/api''
export OVIRT_USERNAME='yourname@internal'
export OVIRT_PASSWORD='yourpassword!'
gem build *.gemspec
vagrant plugin install *.gem
bundle exec kitchen test all
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