Commit eee9882b by Chif Gergő

Move instance.py, implement some methods. Test features in main.py.

parent 4a38ccee
......@@ -121,3 +121,9 @@ dmypy.json
# Pyre type checker
.pyre/
# Cloud configure
clouds.yaml
# pyc files
*.pyc
from interface.vm.instance import InstanceInterface
class OSVirtualMachineManager(InstanceInterface):
def __init__(self, cloud):
super().__init__()
self.openstack = cloud
def create_vm_from_template(self, name, resource, template):
flavor = self.openstack.compute.find_flavor('cirros256')
# TODO plan flavors
if flavor is None:
flavor = self.openstack.compute.create_flavor(name=name, ram=resource['ram'], vcpus=resource['cpu'], disk=20)
image = self.openstack.compute.find_image(template)
if not image:
raise ValueError("The template not found")
new_server = self.openstack.compute.create_server(name=name,
flavorRef=flavor.id,
imageRef=image.id)
new_server = self.openstack.compute.wait_for_server(new_server)
return new_server
def get_vm(self, name_or_id=None):
if not name_or_id:
raise ValueError("Name or id doesn't given")
server_instance = self.openstack.get_server(name_or_id)
if not server_instance:
raise ValueError("Could not get the vm")
return server_instance
def start_vm(self, name_or_id=None):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.start_server(instance)
def stop_vm(self, name_or_id=None):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.stop_server(instance)
from interface.vm.instance import InstanceInterface
from interface.vm.vm import Instance
class OSVirtualMachineManager(InstanceInterface):
def __init__(self, cloud):
super().__init__()
self.openstack = cloud
def create_base_vm(self, resource, networks):
raise NotImplementedError
def create_vm_from_template(self, template, resource, networks):
self.create_multiple_vm_from_template(template, resource, 1)
def create_multiple_vm_from_template(self, template, resource, networks,
number, block_dev_map=None,
metadata=None):
flav = self.openstack.compute.find_flavor(resource['name'])
# TODO plan flavors
if flav is None:
flav = self.openstack.compute.create_flavor(name=resource['name'],
ram=resource['ram'],
vcpus=resource['cpu'],
disk=resource['disk'])
image = self.openstack.compute.find_image(template)
if not image:
raise ValueError("The template not found")
compute = self.openstack.compute
new_server = compute.create_server(name=template,
flavorRef=flav.id,
imageRef=image.id,
networks=networks,
min_count=number,
block_device_mapping=block_dev_map,
metadata=metadata
)
new_server = self.openstack.compute.wait_for_server(new_server)
return new_server
def get_vm(self, name_or_id=None):
if not name_or_id:
raise ValueError("Name or id doesn't given")
server_instance = self.openstack.get_server(name_or_id)
if not server_instance:
raise ValueError("Could not get the vm")
return server_instance
def start_vm(self, name_or_id=None):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.start_server(instance)
def stop_vm(self, name_or_id=None):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.stop_server(instance)
def suspend_vm(self, name_or_id=None):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.suspend_server(instance)
def wake_up_vm(self, name_or_id=None):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.resume_server(instance)
def reboot_vm(self, name_or_id):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.reboot_server(instance, reboot_type='SOFT')
def reset_vm(self, name_or_id):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.reboot_server(instance, reboot_type='HARD')
def destroy_vm(self, name_or_id):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.delete_server(instance)
def get_status(self, name_or_id):
if name_or_id:
instance = self.get_vm(name_or_id)
return instance.status
def list_all_vm(self):
return self.openstack.compute.servers()
def get_vnc_console(self, name_or_id):
raise NotImplementedError
def change_password(self, name_or_id):
raise NotImplementedError
def resize_vm(self, name_or_id, resource):
if name_or_id:
instance = self.get_vm(name_or_id)
flavor = self.openstack.compute.find_flavor(resource['name'])
self.openstack.compute.resize_server(instance, flavor)
def create_template(self, name_or_id, template_name, metadata=None):
if name_or_id:
instance = self.get_vm(name_or_id)
self.openstack.compute.create_server_image(instance, template_name, metadata)
def attach_volume(self, name_or_id, amount):
raise NotImplementedError
def convert_server_to_instance(self, server):
return Instance(id=server.id,
resource=server.flavor.id,
name=server.name,
image=server.image,
disks=server.volumes,
interfaces=server.interfaces,
status=server.status,
addresses=server.addresses)
import json
class Instance:
''' The releveant data of the virtual machine instances
This data would be sent by the interface to the portal,
when it requests a virtual machine instance and vica versa
'''
ssh_keys = None
console_access_url = None
def __init__(self, id, name, resource, resource_name, image_id,
disks=None, interfaces=None):
self.id = id
self.name = name
self.resource = resource
self.resource_name = resource_name
self.image = image_id
self.disks = [disks]
self.interfaces = None
def JSON(self):
return json.dump(self)
# This file is for testing the openstack api access
from implementation.instance import OSVirtualMachineManager
from implementation.vm.instance import OSVirtualMachineManager
import openstack
openstack.enable_logging(debug=True)
# openstack.enable_logging(debug=True)
conn = openstack.connect(cloud='openstack')
interface = OSVirtualMachineManager(conn)
resource = {"ram": 1024, "cpu": 2}
resource = {"name": "m1.tiny", "ram": 1024, "cpu": 2}
print('#'*40)
print(resource)
# interface.create_vm_from_template('new_server', resource, "cirros-0.4.0-x86_64-disk")
interface.stop_vm('a6bc504f-a422-4492-b429-e5dad2df12f4')
# interface.stop_vm('a6bc504f-a422-4492-b429-e5dad2df12f4')
server = interface.get_vm("New test")
print(interface.get_status("Uborka Test"))
#interface.create_template("New test", "test_template")
interface.create_vm_from_template("test_template", resource)
# interface.resize_vm(server, resource)
# interface.reboot_vm(server.id)
# interface.reset_vm(server.id)
# interface.suspend_vm(server.id)
# interface.wake_up_vm(server.id)
# interface.destroy_vm(server.id)
# conn.compute.change_server_password(server, "root")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment