mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 05:51:15 +02:00
API V2
This commit is contained in:
200 files changed
+867
-625
No files matched your search
@@ -14,30 +14,11 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
from gns3server.handlers.upload_handler import UploadHandler
|
||||
from gns3server.handlers.index_handler import IndexHandler
|
||||
|
||||
from gns3server.handlers.api.version_handler import VersionHandler
|
||||
from gns3server.handlers.api.controller import *
|
||||
from gns3server.handlers.api.hypervisor import *
|
||||
|
||||
# TODO: Do not load if controller is off
|
||||
from gns3server.handlers.api.controller.server_handler import ServerHandler
|
||||
|
||||
from gns3server.handlers.api.hypervisor.network_handler import NetworkHandler
|
||||
from gns3server.handlers.api.hypervisor.project_handler import ProjectHandler
|
||||
from gns3server.handlers.api.hypervisor.dynamips_device_handler import DynamipsDeviceHandler
|
||||
from gns3server.handlers.api.hypervisor.dynamips_vm_handler import DynamipsVMHandler
|
||||
from gns3server.handlers.api.hypervisor.qemu_handler import QEMUHandler
|
||||
from gns3server.handlers.api.hypervisor.virtualbox_handler import VirtualBoxHandler
|
||||
from gns3server.handlers.api.hypervisor.docker_handler import DockerHandler
|
||||
from gns3server.handlers.api.hypervisor.vpcs_handler import VPCSHandler
|
||||
from gns3server.handlers.api.hypervisor.vmware_handler import VMwareHandler
|
||||
from gns3server.handlers.api.hypervisor.config_handler import ConfigHandler
|
||||
from gns3server.handlers.api.hypervisor.file_handler import FileHandler
|
||||
|
||||
if sys.platform.startswith("linux") or hasattr(sys, "_called_from_test") or os.environ.get("PYTEST_BUILD_DOCUMENTATION") == "1":
|
||||
# IOU runs only on Linux but testsuite work on UNIX platform
|
||||
if not sys.platform.startswith("win"):
|
||||
from gns3server.handlers.api.hypervisor.iou_handler import IOUHandler
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright (C) 2016 GNS3 Technologies Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from .server_handler import ServerHandler
|
||||
from .version_handler import VersionHandler
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ class ServerHandler:
|
||||
|
||||
@classmethod
|
||||
@Route.post(
|
||||
r"/server/shutdown",
|
||||
r"/servers/shutdown",
|
||||
description="Shutdown the local server",
|
||||
status_codes={
|
||||
201: "Server is shutting down",
|
||||
|
||||
+4
-4
@@ -15,10 +15,10 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from ...web.route import Route
|
||||
from ...config import Config
|
||||
from ...schemas.version import VERSION_SCHEMA
|
||||
from ...version import __version__
|
||||
from ....web.route import Route
|
||||
from ....config import Config
|
||||
from ....schemas.version import VERSION_SCHEMA
|
||||
from ....version import __version__
|
||||
from aiohttp.web import HTTPConflict
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright (C) 2016 GNS3 Technologies Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
from .network_handler import NetworkHandler
|
||||
from .project_handler import ProjectHandler
|
||||
from .dynamips_device_handler import DynamipsDeviceHandler
|
||||
from .dynamips_vm_handler import DynamipsVMHandler
|
||||
from .qemu_handler import QEMUHandler
|
||||
from .virtualbox_handler import VirtualBoxHandler
|
||||
from .vpcs_handler import VPCSHandler
|
||||
from .vmware_handler import VMwareHandler
|
||||
from .config_handler import ConfigHandler
|
||||
from .file_handler import FileHandler
|
||||
from .version_handler import VersionHandler
|
||||
|
||||
|
||||
if sys.platform.startswith("linux") or hasattr(sys, "_called_from_test") or os.environ.get("PYTEST_BUILD_DOCUMENTATION") == "1":
|
||||
# IOU runs only on Linux but testsuite work on UNIX platform
|
||||
if not sys.platform.startswith("win"):
|
||||
from .iou_handler import IOUHandler
|
||||
from .docker_handler import DockerHandler
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2015 GNS3 Technologies Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from ....web.route import Route
|
||||
from ....config import Config
|
||||
from ....schemas.version import VERSION_SCHEMA
|
||||
from ....version import __version__
|
||||
from aiohttp.web import HTTPConflict
|
||||
|
||||
|
||||
class VersionHandler:
|
||||
|
||||
@classmethod
|
||||
@Route.get(
|
||||
r"/version",
|
||||
description="Retrieve the server version number",
|
||||
output=VERSION_SCHEMA)
|
||||
def version(request, response):
|
||||
|
||||
config = Config.instance()
|
||||
local_server = config.get_section_config("Server").getboolean("local", False)
|
||||
response.json({"version": __version__, "local": local_server})
|
||||
|
||||
@classmethod
|
||||
@Route.post(
|
||||
r"/version",
|
||||
description="Check if version is the same as the server",
|
||||
output=VERSION_SCHEMA,
|
||||
input=VERSION_SCHEMA,
|
||||
status_codes={
|
||||
200: "Same version",
|
||||
409: "Invalid version"
|
||||
})
|
||||
def check_version(request, response):
|
||||
if request.json["version"] != __version__:
|
||||
raise HTTPConflict(text="Client version {} differs with server version {}".format(request.json["version"], __version__))
|
||||
response.json({"version": __version__})
|
||||
@@ -39,16 +39,22 @@ class Documentation(object):
|
||||
self.write_documentation("hypervisor")
|
||||
# Controller documentation
|
||||
self.write_documentation("controller")
|
||||
# Write doc common to both
|
||||
self.write_documentation("common")
|
||||
|
||||
def write_documentation(self, doc_type):
|
||||
"""
|
||||
Build all the doc page for handlers
|
||||
|
||||
:param doc_type: Type of doc to generate (controller, hypervisor or common)
|
||||
:param doc_type: Type of doc to generate (controller, hypervisor)
|
||||
"""
|
||||
for handler_name in sorted(self._documentation):
|
||||
if "controller." in handler_name:
|
||||
server_type = "controller"
|
||||
elif "hypervisor." in handler_name:
|
||||
server_type = "hypervisor"
|
||||
|
||||
if doc_type != server_type:
|
||||
continue
|
||||
|
||||
print("Build {}".format(handler_name))
|
||||
|
||||
for path in sorted(self._documentation[handler_name]):
|
||||
@@ -57,16 +63,6 @@ class Documentation(object):
|
||||
if api_version is None:
|
||||
continue
|
||||
|
||||
if "controller." in handler_name:
|
||||
server_type = "controller"
|
||||
elif "hypervisor." in handler_name:
|
||||
server_type = "hypervisor"
|
||||
else:
|
||||
server_type = "common"
|
||||
|
||||
if doc_type != server_type:
|
||||
continue
|
||||
|
||||
filename = self._file_path(path)
|
||||
handler_doc = self._documentation[handler_name][path]
|
||||
handler = handler_name.replace(server_type + ".", "")
|
||||
@@ -126,7 +122,7 @@ class Documentation(object):
|
||||
def _file_path(self, path):
|
||||
path = path.replace("hypervisor", "")
|
||||
path = path.replace("controller", "")
|
||||
return re.sub("^v1", "", re.sub("[^a-z0-9]", "", path))
|
||||
return re.sub("^v2", "", re.sub("[^a-z0-9]", "", path))
|
||||
|
||||
def _write_definitions(self, f, schema):
|
||||
if "definitions" in schema:
|
||||
|
||||
@@ -120,7 +120,7 @@ class Route(object):
|
||||
# This block is executed only the first time
|
||||
output_schema = kw.get("output", {})
|
||||
input_schema = kw.get("input", {})
|
||||
api_version = kw.get("api_version", 1)
|
||||
api_version = kw.get("api_version", 2)
|
||||
raw = kw.get("raw", False)
|
||||
|
||||
def register(func):
|
||||
@@ -129,8 +129,6 @@ class Route(object):
|
||||
route = "/v{version}/controller{path}".format(path=path, version=api_version)
|
||||
elif "hypervisor" in func.__module__:
|
||||
route = "/v{version}/hypervisor{path}".format(path=path, version=api_version)
|
||||
elif "handlers.api" in func.__module__:
|
||||
route = "/v{version}{path}".format(path=path, version=api_version)
|
||||
else:
|
||||
route = path
|
||||
|
||||
|
||||
Reference in new issue
Block a user