def post(self, request, *args, **kwargs): """Add machine.""" if not request.user.is_superuser: return ErrorMessage( "Only superusers are allowed to perform this action!").as_json data = json.loads(request.body.decode('utf-8'))['form'] form = MachineAPIForm(data) if form.is_valid(): cleaned_data = form.cleaned_data mac_address = cleaned_data['mac_address'] del cleaned_data['mac_address'] hypervisor = None if cleaned_data['hypervisor_fqdn']: hypervisor = Machine.objects.get( fqdn=cleaned_data['hypervisor_fqdn']) del cleaned_data['hypervisor_fqdn'] new_machine = Machine(**cleaned_data) new_machine.hypervisor = hypervisor new_machine.mac_address = mac_address try: new_machine.save() except Exception as e: logger.exception(e) return ErrorMessage("Something went wrong!").as_json return Message('Ok.').as_json return ErrorMessage("\n{}".format( format_cli_form_errors(form))).as_json
def setUp(self, m_is_dns_resolvable): m_is_dns_resolvable.return_value = True ServerConfig.objects.create(key='domain.validendings', value='bar.de') m1 = Machine() m1.pk = 1 m1.fqdn = 'machine1.foo.bar.de' m1.mac_address = '01:AB:22:33:44:55' m1.architecture_id = Architecture.Type.X86_64 m1.save() m2 = Machine() m1.pk = 2 m2.fqdn = 'machine2.foo.bar.de' m2.mac_address = '02:AB:22:33:44:55' m2.architecture_id = Architecture.Type.X86_64 m2.save()
def create(self, *args, **kwargs): """ Create a virtual machine. Method returns a new `Machine` object and calls the subclass to actually create the virtual machine physically. """ from orthos2.data.models import (Architecture, Machine, RemotePower, SerialConsole, SerialConsoleType, System) from django.contrib.auth.models import User vm = Machine() vm.unsaved_networkinterfaces = [] vm.architecture = Architecture.objects.get(name=kwargs['architecture']) vm.system = System.objects.get(pk=kwargs['system']) self._create(vm, *args, **kwargs) vm.mac_address = vm.unsaved_networkinterfaces[0].mac_address vm.check_connectivity = Machine.Connectivity.ALL vm.collect_system_information = True vm.save() for networkinterface in vm.unsaved_networkinterfaces[1:]: networkinterface.machine = vm networkinterface.save() vm.remotepower = RemotePower(fence_name="virsh") vm.remotepower.save() if self.host.has_serialconsole(): stype = SerialConsoleType.objects.get(name='libvirt/qemu') if not stype: raise Exception("Bug: SerialConsoleType not found") vm.serialconsole = SerialConsole(stype=stype, baud_rate=115200) vm.serialconsole.save() if vm.vnc['enabled']: vm.annotations.create(text='VNC enabled: {}:{}'.format( self.host.fqdn, vm.vnc['port']), reporter=User.objects.get(username='******')) return vm