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 1. Spin up a virtual machine using the Centos 7 Generic Cloud Image from the ovirt Glance provider 1. Once it is up and running, run the example script from inside the VM 1. Power down the virtual machine 1. Remove all Network Interfaces from the VM (so that the template does not have it) 1. 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 allContributing
- 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