Again, a separate libxml2 ctxt object isn't needed. Also
add a helper function for extracting some ec2 credential
information from the XML.
Signed-off-by: Chris Lalancette <clalance(a)redhat.com>
---
imgfac/builders/FedoraBuilder.py | 25 ++++++++++++++-----------
1 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/imgfac/builders/FedoraBuilder.py b/imgfac/builders/FedoraBuilder.py
index fd5b401..77daa28 100644
--- a/imgfac/builders/FedoraBuilder.py
+++ b/imgfac/builders/FedoraBuilder.py
@@ -1037,34 +1037,37 @@ class FedoraBuilder(BaseBuilder):
doc.freeDoc()
+ def _ec2_get_xml_node(self, doc, credtype):
+ nodes = doc.xpathEval("//provider_credentials/ec2_credentials/%s" %
(credtype))
+ if len(nodes) < 1:
+ raise ImageFactoryException("No EC2 %s available" % (credtype))
+
+ return nodes[0].content
+
def ec2_decode_credentials(self, credentials):
doc = libxml2.parseDoc(credentials)
- ctxt = doc.xpathNewContext()
- self.ec2_user_id =
ctxt.xpathEval("//provider_credentials/ec2_credentials/account_number")[0].content
- self.ec2_access_key =
ctxt.xpathEval("//provider_credentials/ec2_credentials/access_key")[0].content
- self.ec2_secret_key =
ctxt.xpathEval("//provider_credentials/ec2_credentials/secret_access_key")[0].content
+ self.ec2_user_id = self._ec2_get_xml_node(doc, "account_number")
+ self.ec2_access_key = self._ec2_get_xml_node(doc, "access_key")
+ self.ec2_secret_key = self._ec2_get_xml_node(doc, "secret_access_key")
# Support both "key" and "x509_private" as element names
- ec2_key_node = None
- ec2_key_node =
ctxt.xpathEval("//provider_credentials/ec2_credentials/key")
+ ec2_key_node =
doc.xpathEval("//provider_credentials/ec2_credentials/key")
if not ec2_key_node:
- ec2_key_node =
ctxt.xpathEval("//provider_credentials/ec2_credentials/x509_private")
+ ec2_key_node =
doc.xpathEval("//provider_credentials/ec2_credentials/x509_private")
if not ec2_key_node:
raise ImageFactoryException("No x509 private key found in ec2
credentials")
ec2_key=ec2_key_node[0].content
# Support both "certificate" and "x509_public" as element
names
- ec2_cert_node = None
- ec2_cert_node =
ctxt.xpathEval("//provider_credentials/ec2_credentials/certificate")
+ ec2_cert_node =
doc.xpathEval("//provider_credentials/ec2_credentials/certificate")
if not ec2_cert_node:
- ec2_cert_node =
ctxt.xpathEval("//provider_credentials/ec2_credentials/x509_public")
+ ec2_cert_node =
doc.xpathEval("//provider_credentials/ec2_credentials/x509_public")
if not ec2_cert_node:
raise ImageFactoryException("No x509 public certificate found in ec2
credentials")
ec2_cert = ec2_cert_node[0].content
doc.freeDoc()
- ctxt.xpathFreeContext()
# Shove certs into named temporary files
self.ec2_cert_file_object = NamedTemporaryFile()
--
1.7.4.4