code: def start(self):
          
          engine = self.current_engine()
          if not engine.running:
              if self._settings["vmname"] is None:
                  return
              log.info("Start the GNS3 VM")
              engine.vmname = self._settings["vmname"]
              engine.ram = self._settings["ram"]
              engine.vcpus = self._settings["vcpus"]
              engine.headless = self._settings["headless"]
              compute = yield from self._controller.add_compute(compute_id="vm",
                                                                name="GNS3 VM is starting ({})".format(engine.vmname),
                                                                host=None,
                                                                force=True,
                                                                connect=False)
  
              try:
                  yield from engine.start()
              except Exception as e:
                  yield from self._controller.delete_compute("vm")
                  log.error("Can't start the GNS3 VM: {}".format(str(e)))
                  yield from compute.update(name="GNS3 VM ({})".format(engine.vmname))
                  raise e
              yield from compute.connect()  # we can connect now that the VM has started
              yield from compute.update(name="GNS3 VM ({})".format(engine.vmname),
                                        protocol=self.protocol,
                                        host=self.ip_address,
                                        port=self.port,
                                        user=self.user,
                                        password=self.password)
  
              # check if the VM is in the same subnet as the local server, start 10 seconds later to give
              # some time for the compute in the VM to be ready for requests
              asyncio.get_event_loop().call_later(10, lambda: asyncio.async(self._check_network(compute)))
docs: Start the GNS3 VM