summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/rhq
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/rhq')
-rw-r--r--src/main/java/org/rhq/plugins/puppet/PuppetComponent.java95
-rw-r--r--src/main/java/org/rhq/plugins/puppet/PuppetDiscovery.java139
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