secrets.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. # Copyright 2016 Cloudbase Solutions Srl
  2. # All Rights Reserved.
  3. import copy
  4. import json
  5. from barbicanclient import client as barbican_client
  6. import keystoneauth1
  7. from oslo_log import log as logging
  8. from coriolis import keystone
  9. from coriolis import utils
  10. LOG = logging.getLogger(__name__)
  11. def _get_barbican_secret_payload(ctxt, secret_ref):
  12. session = keystone.create_keystone_session(ctxt)
  13. barbican = barbican_client.Client(session=session)
  14. sec = utils.retry_on_error()(barbican.secrets.get)(secret_ref)
  15. # NOTE: accessing `payload` leads to another API call being made:
  16. payload = utils.retry_on_error()(getattr)(sec, "payload")
  17. return payload
  18. def get_secret(ctxt, secret_ref):
  19. payload = None
  20. try:
  21. payload = _get_barbican_secret_payload(ctxt, secret_ref)
  22. except keystoneauth1.exceptions.http.Unauthorized:
  23. LOG.debug(
  24. "Error occured while fetching secret with trust ID, retrying "
  25. "without. Error was: %s", utils.get_exception_details())
  26. ctxt = copy.deepcopy(ctxt)
  27. ctxt.trust_id = None
  28. payload = _get_barbican_secret_payload(ctxt, secret_ref)
  29. except Exception:
  30. raise
  31. return json.loads(payload)