diff options
Diffstat (limited to 'src/main/java/org/rhq')
-rw-r--r-- | src/main/java/org/rhq/plugins/puppet/PuppetComponent.java | 95 | ||||
-rw-r--r-- | src/main/java/org/rhq/plugins/puppet/PuppetDiscovery.java | 139 |
2 files changed, 109 insertions, 125 deletions
diff --git a/src/main/java/org/rhq/plugins/puppet/PuppetComponent.java b/src/main/java/org/rhq/plugins/puppet/PuppetComponent.java index 5dcd657..b311f98 100644 --- a/src/main/java/org/rhq/plugins/puppet/PuppetComponent.java +++ b/src/main/java/org/rhq/plugins/puppet/PuppetComponent.java @@ -1,112 +1,47 @@ - package org.rhq.plugins.puppet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.rhq.core.domain.configuration.Configuration; -import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.pluginapi.inventory.CreateChildResourceFacet; import org.rhq.core.pluginapi.inventory.CreateResourceReport; import org.rhq.core.pluginapi.inventory.DeleteResourceFacet; import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException; import org.rhq.core.pluginapi.inventory.ResourceComponent; -import org.rhq.core.pluginapi.inventory.ResourceContext; -import org.rhq.core.pluginapi.operation.OperationContext; import org.rhq.core.pluginapi.operation.OperationFacet; import org.rhq.core.pluginapi.operation.OperationResult; +import org.rhq.core.system.ProcessExecutionResults; +import org.rhq.core.system.SystemInfo; +import org.rhq.plugins.script.ScriptServerComponent; - -public class PuppetComponent implements ResourceComponent -, OperationFacet -, CreateChildResourceFacet -, DeleteResourceFacet -{ +public class PuppetComponent extends ScriptServerComponent implements ResourceComponent, OperationFacet, CreateChildResourceFacet, + DeleteResourceFacet { + private final Log log = LogFactory.getLog(this.getClass()); - private static final int CHANGEME = 1; // TODO remove or change this - - - - - /** - * Return availability of this resource - * @see ResourceComponent#getAvailability() - */ - public AvailabilityType getAvailability() { - // TODO supply real implementation - return AvailabilityType.UP; - } - - - /** - * Start the resource connection - * @see org.rhq.core.pluginapi.inventory.ResourceComponent#start(org.rhq.core.pluginapi.inventory.ResourceContext) - */ - public void start(ResourceContext context) throws InvalidPluginConfigurationException, Exception { - - Configuration conf = context.getPluginConfiguration(); - // TODO add code to start the resource / connection to it - - - } - - - /** - * Tear down the rescource connection - * @see org.rhq.core.pluginapi.inventory.ResourceComponent#stop() - */ - public void stop() { - + // these are reused from our generic script plugin + protected static final String PLUGINCONFIG_EXECUTABLE = ScriptServerComponent.PLUGINCONFIG_EXECUTABLE; - } - - - - - - public void startOperationFacet(OperationContext context) { - - } - - - /** - * Invokes the passed operation on the managed resource - * @param name Name of the operation - * @param params The method parameters - * @return An operation result - * @see org.rhq.core.pluginapi.operation.OperationFacet - */ public OperationResult invokeOperation(String name, Configuration params) throws Exception { + // TODO OperationResult res = new OperationResult(); if ("dummyOperation".equals(name)) { - // TODO implement me - } return res; } - - - /** - * Create a child resource - * @see org.rhq.core.pluginapi.inventory.CreateChildResourceFacet - */ - public CreateResourceReport createResource(CreateResourceReport report) - { - // TODO supply code to create a child resource - + public CreateResourceReport createResource(CreateResourceReport report) { return null; // TODO change this } - /** - * Delete a child resource - * @see org.rhq.core.pluginapi.inventory.DeleteResourceFacet - */ - public void deleteResource() throws Exception - { + public void deleteResource() throws Exception { // TODO supply code to delete a child resource } + protected static ProcessExecutionResults executeExecutable(SystemInfo sysInfo, Configuration pluginConfig, + String args, long wait, boolean captureOutput) throws InvalidPluginConfigurationException { + return ScriptServerComponent.executeExecutable(sysInfo, pluginConfig, args, wait, captureOutput); + } } diff --git a/src/main/java/org/rhq/plugins/puppet/PuppetDiscovery.java b/src/main/java/org/rhq/plugins/puppet/PuppetDiscovery.java index 4a10f66..fb0133c 100644 --- a/src/main/java/org/rhq/plugins/puppet/PuppetDiscovery.java +++ b/src/main/java/org/rhq/plugins/puppet/PuppetDiscovery.java @@ -1,46 +1,95 @@ -package org.rhq.plugins.puppet; - -import java.util.HashSet; -import java.util.Set; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails; -import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent; -import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext; - - -/** - * Discovery class - */ -public class PuppetDiscovery implements ResourceDiscoveryComponent { - - - private final Log log = LogFactory.getLog(this.getClass()); - - - /** - * Run the discovery - */ - public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext discoveryContext) throws Exception { - - Set<DiscoveredResourceDetails> discoveredResources = new HashSet<DiscoveredResourceDetails>(); - - /** - * TODO: do your discovery here - * A discovered resource must have a unique key, that must - * stay the same when the resource is discovered the next - * time - */ - DiscoveredResourceDetails detail = null; // new DiscoveredResourceDetails( ); - - - // Add to return values - discoveredResources.add(detail); - log.info("Discovered new ... TODO "); // TODO change - - return discoveredResources; - - } +package org.rhq.plugins.puppet;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
+import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
+import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
+import org.rhq.core.system.ProcessExecution;
+import org.rhq.core.system.ProcessExecutionResults;
+import org.rhq.core.system.SystemInfo;
+import org.rhq.plugins.script.ScriptDiscoveryComponent;
+
+/**
+ * Puppet client discovery class.
+ */
+public class PuppetDiscovery extends ScriptDiscoveryComponent implements ResourceDiscoveryComponent {
+
+ private final Log log = LogFactory.getLog(this.getClass());
+
+ @Override
+ public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext discoveryContext) {
+
+ String executable = checkExecutables(discoveryContext.getSystemInformation());
+
+ // if null, it means puppet is not installed or we could not auto-detect its location
+ if (executable == null) {
+ return new HashSet<DiscoveredResourceDetails>();
+ }
+
+ // create our plugin config with the executable path, and use the manual-add facet to create our details
+ Configuration pluginConfig = discoveryContext.getDefaultPluginConfiguration();
+ pluginConfig.put(new PropertySimple(PuppetComponent.PLUGINCONFIG_EXECUTABLE, executable));
+
+ Set<DiscoveredResourceDetails> discoveredResources = new HashSet<DiscoveredResourceDetails>();
+ DiscoveredResourceDetails details = discoverResource(pluginConfig, discoveryContext);
+ if (details != null) {
+ discoveredResources.add(details);
+ }
+
+ return discoveredResources;
+ }
+
+ @Override
+ public DiscoveredResourceDetails discoverResource(Configuration config, ResourceDiscoveryContext context) {
+ DiscoveredResourceDetails details = super.discoverResource(config, context);
+ if (details != null) {
+ details.setResourceName("Puppet Client");
+ log.info("Discovered new puppet client at ["
+ + config.getSimpleValue(PuppetComponent.PLUGINCONFIG_EXECUTABLE, "?") + "]");
+ }
+ return details;
+ }
+
+ @Override
+ protected String determineDescription(ResourceDiscoveryContext context, Configuration pluginConfig) {
+ return "Puppet client that applies recipes to the system";
+ }
+
+ private String checkExecutables(SystemInfo systemInfo) {
+ // Make sure puppet is actually on the system
+ // First we see if its in a typical place.
+ String[] executables = new String[] { "/usr/bin/puppet", "/bin/puppet" };
+ for (String executable : executables) {
+ File file = new File(executable);
+ if (file.canRead()) {
+ return executable;
+ }
+ }
+
+ // We can't find it, use 'which' to see if it knows
+ String executable = null;
+
+ try {
+ ProcessExecution processExecution = new ProcessExecution("which");
+ processExecution.setArguments(new String[] { "puppet" });
+ processExecution.setCaptureOutput(true);
+
+ ProcessExecutionResults executionResults = systemInfo.executeProcess(processExecution);
+ String capturedOutput = executionResults.getCapturedOutput();
+ executable = (((capturedOutput == null) || "".equals(capturedOutput)) ? null : capturedOutput.trim());
+ } catch (Exception e) {
+ log.debug("'which' failed to determine where the puppet executable is. Cause: " + e);
+ }
+
+ return executable;
+ }
}
\ No newline at end of file |