mirror of
https://github.com/ansible/awx.git
synced 2026-03-21 02:47:35 -02:30
Add more logging
This commit is contained in:
@@ -60,6 +60,7 @@ class ApiV2(base.Base):
|
|||||||
def _export(self, _page, post_fields):
|
def _export(self, _page, post_fields):
|
||||||
# Drop any (credential_type) assets that are being managed by the Tower instance.
|
# Drop any (credential_type) assets that are being managed by the Tower instance.
|
||||||
if _page.json.get('managed_by_tower'):
|
if _page.json.get('managed_by_tower'):
|
||||||
|
log.debug("%s is managed by Tower, skipping.", _page.endpoint)
|
||||||
return None
|
return None
|
||||||
if post_fields is None: # Deprecated endpoint or insufficient permissions
|
if post_fields is None: # Deprecated endpoint or insufficient permissions
|
||||||
log.error("Object export failed: %s", _page.endpoint)
|
log.error("Object export failed: %s", _page.endpoint)
|
||||||
@@ -78,14 +79,16 @@ class ApiV2(base.Base):
|
|||||||
rel_endpoint = self._cache.get_page(_page.related[key])
|
rel_endpoint = self._cache.get_page(_page.related[key])
|
||||||
if rel_endpoint is None: # This foreign key is unreadable
|
if rel_endpoint is None: # This foreign key is unreadable
|
||||||
if post_fields[key].get('required'):
|
if post_fields[key].get('required'):
|
||||||
log.error("Foreign key export failed: %s", _page.related[key])
|
log.error("Foreign key %r export failed for object %s.", key, _page.endpoint)
|
||||||
return None
|
return None
|
||||||
log.error("Foreign key export failed, setting to null: %s", _page.related[key])
|
log.warning("Foreign key %r export failed for object %s, setting to null", key, _page.endpoint)
|
||||||
continue
|
continue
|
||||||
natural_key = rel_endpoint.get_natural_key(self._cache)
|
rel_natural_key = rel_endpoint.get_natural_key(self._cache)
|
||||||
if natural_key is None:
|
if rel_natural_key is None:
|
||||||
|
log.error("Unable to construct a natural key for foreign key %r of object %s.",
|
||||||
|
key, _page.endpoint)
|
||||||
return None # This foreign key has unresolvable dependencies
|
return None # This foreign key has unresolvable dependencies
|
||||||
fields[key] = natural_key
|
fields[key] = rel_natural_key
|
||||||
|
|
||||||
related = {}
|
related = {}
|
||||||
for key, rel_endpoint in _page.related.items():
|
for key, rel_endpoint in _page.related.items():
|
||||||
@@ -99,7 +102,8 @@ class ApiV2(base.Base):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
rel_post_fields = utils.get_post_fields(rel_endpoint, self._cache)
|
rel_post_fields = utils.get_post_fields(rel_endpoint, self._cache)
|
||||||
if rel_post_fields is None: # This is a read-only endpoint.
|
if rel_post_fields is None:
|
||||||
|
log.debug("%s is a read-only endpoint.", rel_endpoint)
|
||||||
continue
|
continue
|
||||||
is_attach = 'id' in rel_post_fields # This is not a create-only endpoint.
|
is_attach = 'id' in rel_post_fields # This is not a create-only endpoint.
|
||||||
|
|
||||||
@@ -128,6 +132,7 @@ class ApiV2(base.Base):
|
|||||||
|
|
||||||
natural_key = _page.get_natural_key(self._cache)
|
natural_key = _page.get_natural_key(self._cache)
|
||||||
if natural_key is None:
|
if natural_key is None:
|
||||||
|
log.error("Unable to construct a natural key for object %s.", _page.endpoint)
|
||||||
return None
|
return None
|
||||||
fields['natural_key'] = natural_key
|
fields['natural_key'] = natural_key
|
||||||
|
|
||||||
|
|||||||
@@ -319,27 +319,23 @@ class Page(object):
|
|||||||
return page_cls(self.connection, endpoint=endpoint).get(**kw)
|
return page_cls(self.connection, endpoint=endpoint).get(**kw)
|
||||||
|
|
||||||
def get_natural_key(self, cache=None):
|
def get_natural_key(self, cache=None):
|
||||||
warn = "This object does not have a natural key: %s"
|
|
||||||
|
|
||||||
if cache is None:
|
if cache is None:
|
||||||
cache = PageCache()
|
cache = PageCache()
|
||||||
|
|
||||||
if not getattr(self, 'NATURAL_KEY', None):
|
if not getattr(self, 'NATURAL_KEY', None):
|
||||||
log.warning(warn, getattr(self, 'endpoint', ''))
|
log.warning("This object does not have a natural key: %s", getattr(self, 'endpoint', ''))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
natural_key = {}
|
natural_key = {}
|
||||||
for key in self.NATURAL_KEY:
|
for key in self.NATURAL_KEY:
|
||||||
if key in self.related:
|
if key in self.related:
|
||||||
related_endpoint = cache.get_page(self.related[key])
|
related_endpoint = cache.get_page(self.related[key])
|
||||||
if related_endpoint is None:
|
if related_endpoint is not None:
|
||||||
return None
|
natural_key[key] = related_endpoint.get_natural_key(cache=cache)
|
||||||
natural_key[key] = related_endpoint.get_natural_key(cache=cache)
|
else:
|
||||||
|
natural_key[key] = None
|
||||||
elif key in self:
|
elif key in self:
|
||||||
natural_key[key] = self[key]
|
natural_key[key] = self[key]
|
||||||
if not natural_key:
|
|
||||||
log.warning(warn, getattr(self, 'endpoint', ''))
|
|
||||||
return None
|
|
||||||
|
|
||||||
natural_key['type'] = self['type']
|
natural_key['type'] = self['type']
|
||||||
return natural_key
|
return natural_key
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
from awxkit.api.resources import resources
|
from awxkit.api.resources import resources
|
||||||
|
|
||||||
from . import base
|
from . import base
|
||||||
from . import page
|
from . import page
|
||||||
|
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Role(base.Base):
|
class Role(base.Base):
|
||||||
|
|
||||||
NATURAL_KEY = ('name',)
|
NATURAL_KEY = ('name',)
|
||||||
@@ -20,6 +25,8 @@ class Role(base.Base):
|
|||||||
if related_objs:
|
if related_objs:
|
||||||
related_endpoint = cache.get_page(related_objs[0])
|
related_endpoint = cache.get_page(related_objs[0])
|
||||||
if related_endpoint is None:
|
if related_endpoint is None:
|
||||||
|
log.error("Unable to obtain content_object %s for role %s",
|
||||||
|
related_objs[0], self.endpoint)
|
||||||
return None
|
return None
|
||||||
natural_key['content_object'] = related_endpoint.get_natural_key(cache=cache)
|
natural_key['content_object'] = related_endpoint.get_natural_key(cache=cache)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
|
import logging
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
descRE = re.compile(r'^[*] `(\w+)`: [^(]*\((\w+), ([^)]+)\)')
|
descRE = re.compile(r'^[*] `(\w+)`: [^(]*\((\w+), ([^)]+)\)')
|
||||||
|
|
||||||
|
|
||||||
@@ -42,4 +45,6 @@ def get_post_fields(page, cache):
|
|||||||
if 'POST' in options_page.json['actions']:
|
if 'POST' in options_page.json['actions']:
|
||||||
return options_page.json['actions']['POST']
|
return options_page.json['actions']['POST']
|
||||||
else:
|
else:
|
||||||
|
log.warning(
|
||||||
|
"Insufficient privileges on %s, inferring POST fields from description.", options_page.endpoint)
|
||||||
return parse_description(options_page.json['description'])
|
return parse_description(options_page.json['description'])
|
||||||
|
|||||||
Reference in New Issue
Block a user