mirror of
https://github.com/ansible/awx.git
synced 2026-04-06 18:49:21 -02:30
Register pages for the Instance peers and install bundle endpoints
This includes exposing a new interface for Page objects, Page.bytes, to return the full bytestring contents of the response.
This commit is contained in:
@@ -48,9 +48,9 @@ class InstanceInstallBundle(GenericAPIView):
|
|||||||
instance_obj = self.get_object()
|
instance_obj = self.get_object()
|
||||||
|
|
||||||
# if the instance is not a hop or execution node than return 400
|
# if the instance is not a hop or execution node than return 400
|
||||||
if instance_obj.node_type not in ('execution', 'hop'):
|
if instance_obj.node_type not in ('execution',):
|
||||||
return Response(
|
return Response(
|
||||||
data=dict(msg=_('Install bundle can only be generated for execution or hop nodes.')),
|
data=dict(msg=_('Install bundle can only be generated for execution nodes.')),
|
||||||
status=status.HTTP_400_BAD_REQUEST,
|
status=status.HTTP_400_BAD_REQUEST,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -16,4 +16,15 @@ class Instances(page.PageList, Instance):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
page.register_page([resources.instances, resources.related_instances], Instances)
|
page.register_page([resources.instances, resources.related_instances, resources.instance_peers], Instances)
|
||||||
|
|
||||||
|
|
||||||
|
class InstanceInstallBundle(page.Page):
|
||||||
|
def extract_data(self, response):
|
||||||
|
# The actual content of this response will be in the full set
|
||||||
|
# of bytes from response.content, which will be exposed via
|
||||||
|
# the Page.bytes interface.
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
page.register_page(resources.instance_install_bundle, InstanceInstallBundle)
|
||||||
|
|||||||
@@ -154,6 +154,26 @@ class Page(object):
|
|||||||
resp.status_code = 200
|
resp.status_code = 200
|
||||||
return cls(r=resp, connection=connection)
|
return cls(r=resp, connection=connection)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def bytes(self):
|
||||||
|
if self.r is None:
|
||||||
|
return b''
|
||||||
|
return self.r.content
|
||||||
|
|
||||||
|
def extract_data(self, response):
|
||||||
|
"""Takes a `requests.Response` and returns a data dict."""
|
||||||
|
try:
|
||||||
|
data = response.json()
|
||||||
|
except ValueError as e: # If there was no json to parse
|
||||||
|
data = {}
|
||||||
|
if response.text or response.status_code not in (200, 202, 204):
|
||||||
|
text = response.text
|
||||||
|
if len(text) > 1024:
|
||||||
|
text = text[:1024] + '... <<< Truncated >>> ...'
|
||||||
|
log.debug("Unable to parse JSON response ({0.status_code}): {1} - '{2}'".format(response, e, text))
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
def page_identity(self, response, request_json=None):
|
def page_identity(self, response, request_json=None):
|
||||||
"""Takes a `requests.Response` and
|
"""Takes a `requests.Response` and
|
||||||
returns a new __item_class__ instance if the request method is not a get, or returns
|
returns a new __item_class__ instance if the request method is not a get, or returns
|
||||||
@@ -171,16 +191,7 @@ class Page(object):
|
|||||||
else:
|
else:
|
||||||
ds = None
|
ds = None
|
||||||
|
|
||||||
try:
|
data = self.extract_data(response)
|
||||||
data = response.json()
|
|
||||||
except ValueError as e: # If there was no json to parse
|
|
||||||
data = dict()
|
|
||||||
if response.text or response.status_code not in (200, 202, 204):
|
|
||||||
text = response.text
|
|
||||||
if len(text) > 1024:
|
|
||||||
text = text[:1024] + '... <<< Truncated >>> ...'
|
|
||||||
log.debug("Unable to parse JSON response ({0.status_code}): {1} - '{2}'".format(response, e, text))
|
|
||||||
|
|
||||||
exc_str = "%s (%s) received" % (http.responses[response.status_code], response.status_code)
|
exc_str = "%s (%s) received" % (http.responses[response.status_code], response.status_code)
|
||||||
|
|
||||||
exception = exception_from_status_code(response.status_code)
|
exception = exception_from_status_code(response.status_code)
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ class Resources(object):
|
|||||||
_instance_group = r'instance_groups/\d+/'
|
_instance_group = r'instance_groups/\d+/'
|
||||||
_instance_group_related_jobs = r'instance_groups/\d+/jobs/'
|
_instance_group_related_jobs = r'instance_groups/\d+/jobs/'
|
||||||
_instance_groups = 'instance_groups/'
|
_instance_groups = 'instance_groups/'
|
||||||
|
_instance_install_bundle = r'instances/\d+/install_bundle/'
|
||||||
|
_instance_peers = r'instances/\d+/peers/'
|
||||||
_instance_related_jobs = r'instances/\d+/jobs/'
|
_instance_related_jobs = r'instances/\d+/jobs/'
|
||||||
_instances = 'instances/'
|
_instances = 'instances/'
|
||||||
_inventories = 'inventories/'
|
_inventories = 'inventories/'
|
||||||
|
|||||||
Reference in New Issue
Block a user