Merge ~lloydwaltersj/maas:servers-openapi-defenition into maas:master

Proposed by Jack Lloyd-Walters
Status: Merged
Approved by: Jack Lloyd-Walters
Approved revision: ee28bf95ee9ed6a2a530cf80d32fd529d3a1c1ef
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~lloydwaltersj/maas:servers-openapi-defenition
Merge into: maas:master
Diff against target: 87 lines (+30/-4)
2 files modified
src/maasserver/api/doc_oapi.py (+16/-3)
src/maasserver/api/tests/test_doc.py (+14/-1)
Reviewer Review Type Date Requested Status
Alexsander de Souza Approve
MAAS Lander Approve
Review via email: mp+427364@code.launchpad.net

Commit message

add servers element to OpenApi definition

To post a comment you must log in.
ee28bf9... by Jack Lloyd-Walters

fix docstring

Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b servers-openapi-defenition lp:~lloydwaltersj/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: bdf630fa69d6d8cadd134e047f1bc2e530e0b338

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b servers-openapi-defenition lp:~lloydwaltersj/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: ee28bf95ee9ed6a2a530cf80d32fd529d3a1c1ef

review: Approve
Revision history for this message
Alexsander de Souza (alexsander-souza) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/api/doc_oapi.py b/src/maasserver/api/doc_oapi.py
2index d9dfe25..2b20e54 100644
3--- a/src/maasserver/api/doc_oapi.py
4+++ b/src/maasserver/api/doc_oapi.py
5@@ -6,6 +6,7 @@ import json
6 from django.http import HttpResponse
7 import yaml
8
9+from maasserver.models.config import Config
10 from maasserver.utils import build_absolute_uri
11
12
13@@ -32,12 +33,10 @@ def endpoint(request):
14 with the OpenApi spec 3.0.
15 """
16 description = get_api_endpoint()
17- doc = description["externalDocs"]
18- doc["url"] = build_absolute_uri(request, doc["url"])
19 # Return as a YAML document
20 return HttpResponse(
21 yaml.dump(description),
22- content_type="application/yaml",
23+ content_type="application/openapi+yaml",
24 )
25
26
27@@ -81,4 +80,18 @@ def get_api_endpoint():
28 "url": "/MAAS/docs/api.html",
29 },
30 }
31+ description["servers"] = _get_maas_servers()
32 return description
33+
34+
35+def _get_maas_servers():
36+ """Return a servers defintion of the public-facing MAAS address.
37+
38+ :return: An object describing the MAAS public-facing server.
39+ """
40+ maas_url = Config.objects.get_config("maas_url")
41+ maas_name = Config.objects.get_config("maas_name")
42+ return {
43+ "url": f"{maas_url}/api/2.0",
44+ "description": f"{maas_name} API",
45+ }
46diff --git a/src/maasserver/api/tests/test_doc.py b/src/maasserver/api/tests/test_doc.py
47index ad02930..70ffa40 100644
48--- a/src/maasserver/api/tests/test_doc.py
49+++ b/src/maasserver/api/tests/test_doc.py
50@@ -49,8 +49,10 @@ from maasserver.api.support import (
51 OperationsHandler,
52 OperationsResource,
53 )
54+from maasserver.models.config import Config
55 from maasserver.testing.config import RegionConfigurationFixture
56 from maasserver.testing.factory import factory
57+from maasserver.testing.testcase import MAASServerTestCase
58 from maastesting.matchers import IsCallable
59 from maastesting.testcase import MAASTestCase
60 from provisioningserver.drivers.pod.registry import PodDriverRegistry
61@@ -95,7 +97,7 @@ class TestLandingPage(MAASTestCase):
62 self.assertEqual(resources[0]["type"], page["content-type"])
63
64
65-class TestApiEndpoint(MAASTestCase):
66+class TestApiEndpoint(MAASServerTestCase):
67 def test_required_fields(self):
68 request = factory.make_fake_request()
69 page = endpoint(request)
70@@ -108,6 +110,17 @@ class TestApiEndpoint(MAASTestCase):
71 self.assertIn("title", info)
72 self.assertIn("version", info)
73
74+ def test_discovered_servers(self):
75+ request = factory.make_fake_request()
76+ page = endpoint(request)
77+ content = yaml.safe_load(page.content)
78+ self.assertIn("servers", content)
79+ servers = content["servers"]
80+ maas_name = Config.objects.get_config("maas_name")
81+ maas_url = Config.objects.get_config("maas_url")
82+ self.assertEqual(servers["url"], f"{maas_url}/api/2.0")
83+ self.assertEqual(servers["description"], f"{maas_name} API")
84+
85
86 class TestFindingResources(MAASTestCase):
87 """Tests for API inspection support: finding resources."""

Subscribers

People subscribed via source and target branches