trove/integration/scripts/create_vm

85 lines
2.6 KiB
Python
Executable File

#!/usr/bin/env python
"""
Sets up a VM with hardcoded paths to multiple source trees.
Creates a script for use with VMWare or a Vagrantfile.
Uses a configuration file (in JSON format) that stores the paths to checked-out
copies of OpenStack projects on the host machine. If the path is None then
it lets devstack download them.
"""
import json
class Config(object):
"""
Very simple configuration file thats just some JSON.
"""
vm_paths = {
'devstack':"/devstack",
'glance': '/opt/stack/glance',
'horizon': '/opt/stack/horizon',
'keystone': "/opt/stack/keystone",
'nova': "/opt/stack/nova",
'python_openstackclient': "/opt/stack/python-openstackclient",
'python_novaclient': "/opt/stack/python-novaclient",
'trove':"/opt/stack/trove",
'python_troveclient':"/opt/stack/python-troveclient",
'tempest':"/opt/stack/tempest"
}
def __init__(self, **kwargs):
for name in Config.vm_paths.keys():
if name not in kwargs:
raise RuntimeError('Missing configuration value "%s".' % name)
value = kwargs[name]
if value is not None and type(value) is not str \
and type(value) is not unicode:
raise RuntimeError('Path "%s" must be a string or None but is '
'of type %s.' % (name, type(value)))
setattr(self, name, kwargs[name])
self.vagrant_path = kwargs.get("vagrant_path", "Vagrantfile")
@staticmethod
def load(file_path):
file_contents = open(file_path, "r").read()
dict = json.loads(file_contents);
return Config(**dict)
def write_vagrant_file(self):
with open(self.vagrant_path, 'w') as file:
file.write("""
Vagrant::Config.run do |global_config|
# Host config
global_config.vm.define :host do |config|
config.vm.network "33.33.44.11"
config.vm.box = "precise"
config.vm.host_name = "host"
config.ssh.timeout = 3600
config.vm.customize do |vm|
vm.memory_size = 2048
end
config.vm.share_folder "integration", "/integration", "../"
""")
for key in Config.vm_paths.keys():
local_path = getattr(self, key)
vm_path = Config.vm_paths[key]
if local_path is not None:
file.write('\tconfig.vm.share_folder "%s", "%s", "%s" \n'
% (key, vm_path, local_path))
file.write("""
end
end
""")
if __name__=="__main__":
conf = Config.load("conf.json")
conf.write_vagrant_file()