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
diff --git a/src/maasserver/api/doc_oapi.py b/src/maasserver/api/doc_oapi.py
index d9dfe25..2b20e54 100644
--- a/src/maasserver/api/doc_oapi.py
+++ b/src/maasserver/api/doc_oapi.py
@@ -6,6 +6,7 @@ import json
6from django.http import HttpResponse6from django.http import HttpResponse
7import yaml7import yaml
88
9from maasserver.models.config import Config
9from maasserver.utils import build_absolute_uri10from maasserver.utils import build_absolute_uri
1011
1112
@@ -32,12 +33,10 @@ def endpoint(request):
32 with the OpenApi spec 3.0.33 with the OpenApi spec 3.0.
33 """34 """
34 description = get_api_endpoint()35 description = get_api_endpoint()
35 doc = description["externalDocs"]
36 doc["url"] = build_absolute_uri(request, doc["url"])
37 # Return as a YAML document36 # Return as a YAML document
38 return HttpResponse(37 return HttpResponse(
39 yaml.dump(description),38 yaml.dump(description),
40 content_type="application/yaml",39 content_type="application/openapi+yaml",
41 )40 )
4241
4342
@@ -81,4 +80,18 @@ def get_api_endpoint():
81 "url": "/MAAS/docs/api.html",80 "url": "/MAAS/docs/api.html",
82 },81 },
83 }82 }
83 description["servers"] = _get_maas_servers()
84 return description84 return description
85
86
87def _get_maas_servers():
88 """Return a servers defintion of the public-facing MAAS address.
89
90 :return: An object describing the MAAS public-facing server.
91 """
92 maas_url = Config.objects.get_config("maas_url")
93 maas_name = Config.objects.get_config("maas_name")
94 return {
95 "url": f"{maas_url}/api/2.0",
96 "description": f"{maas_name} API",
97 }
diff --git a/src/maasserver/api/tests/test_doc.py b/src/maasserver/api/tests/test_doc.py
index ad02930..70ffa40 100644
--- a/src/maasserver/api/tests/test_doc.py
+++ b/src/maasserver/api/tests/test_doc.py
@@ -49,8 +49,10 @@ from maasserver.api.support import (
49 OperationsHandler,49 OperationsHandler,
50 OperationsResource,50 OperationsResource,
51)51)
52from maasserver.models.config import Config
52from maasserver.testing.config import RegionConfigurationFixture53from maasserver.testing.config import RegionConfigurationFixture
53from maasserver.testing.factory import factory54from maasserver.testing.factory import factory
55from maasserver.testing.testcase import MAASServerTestCase
54from maastesting.matchers import IsCallable56from maastesting.matchers import IsCallable
55from maastesting.testcase import MAASTestCase57from maastesting.testcase import MAASTestCase
56from provisioningserver.drivers.pod.registry import PodDriverRegistry58from provisioningserver.drivers.pod.registry import PodDriverRegistry
@@ -95,7 +97,7 @@ class TestLandingPage(MAASTestCase):
95 self.assertEqual(resources[0]["type"], page["content-type"])97 self.assertEqual(resources[0]["type"], page["content-type"])
9698
9799
98class TestApiEndpoint(MAASTestCase):100class TestApiEndpoint(MAASServerTestCase):
99 def test_required_fields(self):101 def test_required_fields(self):
100 request = factory.make_fake_request()102 request = factory.make_fake_request()
101 page = endpoint(request)103 page = endpoint(request)
@@ -108,6 +110,17 @@ class TestApiEndpoint(MAASTestCase):
108 self.assertIn("title", info)110 self.assertIn("title", info)
109 self.assertIn("version", info)111 self.assertIn("version", info)
110112
113 def test_discovered_servers(self):
114 request = factory.make_fake_request()
115 page = endpoint(request)
116 content = yaml.safe_load(page.content)
117 self.assertIn("servers", content)
118 servers = content["servers"]
119 maas_name = Config.objects.get_config("maas_name")
120 maas_url = Config.objects.get_config("maas_url")
121 self.assertEqual(servers["url"], f"{maas_url}/api/2.0")
122 self.assertEqual(servers["description"], f"{maas_name} API")
123
111124
112class TestFindingResources(MAASTestCase):125class TestFindingResources(MAASTestCase):
113 """Tests for API inspection support: finding resources."""126 """Tests for API inspection support: finding resources."""

Subscribers

People subscribed via source and target branches