modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java | 66 +++++++++- 1 file changed, 65 insertions(+), 1 deletion(-)
New commits: commit fc813fe40f25db9ce1924d259923df095f51ff18 Author: John Mazzitelli mazz@redhat.com Date: Fri Feb 26 14:27:11 2010 -0500
file template bundle can download bundle files and verify them
diff --git a/modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java b/modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java index a7100ec..d8ac092 100644 --- a/modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java +++ b/modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java @@ -18,15 +18,25 @@ */ package org.rhq.plugins.filetemplate;
+import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.List; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
+import org.rhq.core.domain.bundle.BundleDeployDefinition; +import org.rhq.core.domain.bundle.BundleVersion; +import org.rhq.core.domain.content.PackageVersion; import org.rhq.core.domain.measurement.AvailabilityType; +import org.rhq.core.pc.bundle.BundleManager; import org.rhq.core.pluginapi.bundle.BundleDeployRequest; import org.rhq.core.pluginapi.bundle.BundleDeployResult; import org.rhq.core.pluginapi.bundle.BundleFacet; import org.rhq.core.pluginapi.inventory.ResourceComponent; import org.rhq.core.pluginapi.inventory.ResourceContext; +import org.rhq.core.util.MessageDigestGenerator;
/** * @author John Mazzitelli @@ -51,8 +61,62 @@ public class FileTemplateBundlePluginServerComponent implements ResourceComponen
@Override public BundleDeployResult deployBundle(BundleDeployRequest request) { - // TODO BundleDeployResult result = new BundleDeployResult(); + try { + BundleDeployDefinition bundleDeployDef = request.getBundleDeployDefinition(); + BundleVersion bundleVersion = bundleDeployDef.getBundleVersion(); + + // download all the bundle files to our tmp directory + File tmpDir = new File(this.resourceContext.getTemporaryDirectory(), "" + bundleVersion.getId()); + BundleManager bundleManager = request.getBundleManager(); + List<PackageVersion> packageVersions = bundleManager.getAllBundleVersionPackageVersions(bundleVersion); + for (PackageVersion packageVersion : packageVersions) { + File packageFile = new File(tmpDir, packageVersion.getFileName()); + packageFile.getParentFile().mkdirs(); + FileOutputStream fos = new FileOutputStream(packageFile); + try { + long size = bundleManager.getFileContent(packageVersion, fos); + if (packageVersion.getFileSize() != null && size != packageVersion.getFileSize().longValue()) { + log.warn("Downloaded bundle file [" + packageVersion + "] but its size was [" + size + + "] when it was expected to be [" + packageVersion.getFileSize() + "]."); + } + } finally { + fos.close(); + } + + // verify the content + if (packageVersion.getMD5() != null) { + String realMD5 = MessageDigestGenerator.getDigestString(packageFile); + if (!packageVersion.getMD5().equals(realMD5)) { + throw new Exception("Package version [" + packageVersion + "] failed MD5 check. expected=[" + + packageVersion.getMD5() + "], actual=[" + realMD5 + "]"); + } + } else if (packageVersion.getSHA256() != null) { + FileInputStream is = new FileInputStream(packageFile); + try { + MessageDigestGenerator gen = new MessageDigestGenerator("SHA256"); + gen.add(is); + String realSHA256 = gen.getDigestString(); + if (!packageVersion.getSHA256().equals(realSHA256)) { + throw new Exception("Package version [" + packageVersion + + "] failed SHA256 check. expected=[" + packageVersion.getSHA256() + "], actual=[" + + realSHA256 + "]"); + } + } finally { + is.close(); + } + + } else { + log.debug("Package version [" + packageVersion + "] has no MD5/SHA256 hash - not verifying it"); + } + } + + // TODO all bundle files are downloaded - now process the bundle + + } catch (Throwable t) { + log.error("Failed to deploy bundle [" + request + "]", t); + result.setErrorMessage(t); + } return result; } }
rhq-commits@lists.fedorahosted.org