Ce contenu n'est pas disponible dans la langue sélectionnée.
Running JBoss ON Command-Line Scripts
using the JBoss ON CLI and remote API
Abstract
1. Document Information Copier lienLien copié sur presse-papiers!
1.1. Document History Copier lienLien copié sur presse-papiers!
| Revision History | ||||||
|---|---|---|---|---|---|---|
| Revision 3.0.1-5 | 2013-10-31 | |||||
| ||||||
| Revision 3.0.1-0 | March 18, 2012 | |||||
| ||||||
| Revision 3.0-1 | January 26, 2012 | |||||
| ||||||
| Revision 3.0-0 | December 5, 2011 | |||||
| ||||||
2. Using the JBoss ON CLI to Script Tasks Copier lienLien copié sur presse-papiers!
2.1. About the JBoss ON CLI Copier lienLien copié sur presse-papiers!
- Web services, like the JBoss ON UI, using SOAP and leveraging the JBoss Remoting framework for communication
- Java clients using (obviously) Java and calling the remote JBoss ON APIs
Note
rhq-cli.sh|bat. This script emulates a shell, accepting basic commands and allowing administrators to navigate the server with shell tools like autocomplete.
Important
2.2. More Java Resources Copier lienLien copié sur presse-papiers!
3. Installing the JBoss ON Command-Line Tool Copier lienLien copié sur presse-papiers!
rhq-client-3.0.zip.
Note
- Open the JBoss ON GUI.
http://server.example.com:7080
http://server.example.com:7080Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Click the Administration link in the main menu.
- Select the Downloads menu item.
- Scroll to the Command Line Client Download section, and click Download Client Installer.
- Save the
.zipfile into the directory where the CLI should be installed. - Unzip the packages.
unzip rhq-client-version.zip
unzip rhq-client-version.zipCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4. Running the JBoss ON CLI Copier lienLien copié sur presse-papiers!
rhq-cli.sh|bat, is run directly from its cli-install-dirbin directory and used to log into the server. There are two files associated with launching the JBoss ON CLI:
- A script
- A file of environment variables
| Operating System | CLI Script | Environment Variables File |
|---|---|---|
| Red Hat Enterprise Linux | rhq-cli.sh | rhq-cli-env.sh |
| Microsoft Windows | rhq-cli.bat | rhq-cli-env.bat |
rhq-cli-env.sh|bat file use defaults that are reasonable for most deployments, so this file usually does not need to be edited. It is possible to reset variables to point a server that doesn't follow the default installation, such as a virtual machine or a JVM that isn't the default. If any variables need to be edited, always set them in this file. The comments at the top of the rhq-cli-env.|bat file contain a detailed list of available environment variables.
Important
rhq-cli.sh|bat file. Only set environment variables through the terminal or in the rhq-cli-env.sh|bat file, not the script itself.
Note
RHQ_CLI_JAVA_HOME or the RHQ_CLI_JAVA_EXE_FILE_PATH variable.
rhq-cli.sh|bat script has the following general syntax:
rhq-cli.sh|bat options commands
rhq-cli.sh|bat options commands
cliRoot/rhq-remoting-cli-3.0.0.GA1/bin/rhq-cli.sh RHQ - RHQ Enterprise Remote CLI unconnected$
cliRoot/rhq-remoting-cli-3.0.0.GA1/bin/rhq-cli.sh
RHQ - RHQ Enterprise Remote CLI
unconnected$
rhq-cli -u rhqadmin -p rhqadmin
rhq-cli -u rhqadmin -p rhqadmin
Important
quit, are available only in interactive mode. They cannot be used in a script when the CLI is used in non-interactive mode, such as when running a script from file. In these instances, you must use the Java method.
4.1. JBoss ON CLI Options Copier lienLien copié sur presse-papiers!
rhq-cli.bat and rhq-cli.sh scripts accept the options listed in Table 2, “Command-Line Options”.
| Short Option | Long Option | Description |
|---|---|---|
| -h | --help | Displays the help text of the command line options of the CLI. |
| -u | --user | The username used to log into the JBoss ON server. |
| -p | --password | The password used to log into the JBoss ON server. |
| -P | Displays a password prompt where input is not echoed backed to the screen. | |
| -s | --host | The JBoss ON server against which the CLI executes commands. Defaults to localhost. |
| -t | --port | The port on which the JBoss ON server is accepting HTTP requests. The default is 7080. |
| -c | --command | A command to be executed. The command must be encased in double quotes. The CLI will exit after the command has finished executing. |
| -f | --file | The full path and filename of a script to execute. |
| -v | --version | Displays CLI and JBoss ON server version information once connected to the the CLI. |
| --transport | Determines whether or not SSL will be used for the communication layer protocol between the CLI and the JBoss ON server. If not specified the value is determined from the {port} option. If you use a port that ends in 443, SSL will be used. You only need to explicitly specify the transport when your JBoss ON server is listening over SSL on a port that does not end with 443. | |
| --args-style | Indicates the style or format of arguments passed to the script. See the Executing Scripts below for additional information. |
4.2. JBoss ON CLI Commands Copier lienLien copié sur presse-papiers!
Important
4.2.1. login Copier lienLien copié sur presse-papiers!
login username password [host] [port]
login username password [host] [port]
4.2.2. logout Copier lienLien copié sur presse-papiers!
logout
logout
4.2.3. quit Copier lienLien copié sur presse-papiers!
quit
quit
java.lang.System.exit.
4.2.4. exec Copier lienLien copié sur presse-papiers!
exec statement | [-s indexed|named] -f /path/to/file [args]
exec statement | [-s indexed|named] -f /path/to/file [args]
| Option | Description |
|---|---|
|
-f, --file
|
The full path filename of the script to execute. The full path must be given, or the CLI cannot locate the script.
|
|
-s, --style
|
Indicates the style or format of arguments passed to the script. It must have a value of either
indexed or named.
|
Example 1. Executing a Single Statement
localhost:7080> exec var x = 1
localhost:7080> exec var x = 1
Example 2. Executing a Multi-Line Statement
Example 3. Executing a Named Script without Arguments
localhost:7080(rhqadmin)> exec -f myscript.js
localhost:7080(rhqadmin)> exec -f myscript.js
Example 4. Executing a Named Script with Arguments
localhost:7080(rhqadmin)> exec -f myscript.js 1 2 3
localhost:7080(rhqadmin)> exec -f myscript.js 1 2 3
Example 5. Executing a Named Script with Named Arguments
localhost:7080(rhqadmin)> exec --style=named -f myscript.js x=1 y=2 y=3
localhost:7080(rhqadmin)> exec --style=named -f myscript.js x=1 y=2 y=3
4.2.5. record Copier lienLien copié sur presse-papiers!
record [-b | -e] [-a] -f
record [-b | -e] [-a] -f
| Option | Description |
|---|---|
|
-b, --start
|
Specify this option to start recording.
|
|
-e, --end
|
Specify this option to stop recording.
|
|
-a, --append
|
Appends output to the end of a file. If not specified, output will be written starting at the beginning of the file.
|
|
-f, --file
|
The file where output will be written.
|
4.3. Available Implicit Variables in the JBoss ON API Copier lienLien copié sur presse-papiers!
org.rhq.core.domain class is automatically imported, which makes it easier to use the CLI for managing resources, alerts, and other aspects of JBoss ON.
org.rhq.core.domain.criteria.ResourceCriteria is commonly used to query resources. The entire class path can be given when calling that class:
var criteria = new org.rhq.core.domain.criteria.ResourceCriteria(); var resource = new org.rhq.core.domain.resource.Resource();
var criteria = new org.rhq.core.domain.criteria.ResourceCriteria();
var resource = new org.rhq.core.domain.resource.Resource();
var criteria = new ResourceCriteria(); var resource = new Resource();
var criteria = new ResourceCriteria();
var resource = new Resource();
| Variable | Type | Description | Access Requires Login |
|---|---|---|---|
| rhq | org.rhq.enterprise.client.Controller | Provides built-in commands to the interactive CLI: login, logout, quit, exec, and version. Two of these methods, login and logout, can be called in server script files, such as rhq.login('rhqadmin', 'rhqadmin'). | YES |
| subject | org.rhq.core.domain.auth.Subject | Represents the current, logged in user. For security purposes, all remote service invocations require the subject to be passed; however, the CLI will implicitly pass the subject for you. | YES |
| Assert | org.rhq.bindings.util.ScriptAssert | Provides assertion utilities for CLI scripts. | NO |
| pretty |
org.rhq.enterprise.client.TabularWriter
| Provides for tabular-formatted printed and handles converting objects, particularly domain objects in the packages under org.rhq.core.domain, into a format suitable for display in the console. | NO |
| unlimitedPC | org.rhq.core.domain.util.PageControl | NO | |
| pageControl | org.rhq.core.domain.util.PageControl | Used to specify paging and sorting on data retrieval operations | NO |
| exporter |
org.rhq.enterprise.client.Exporter
| Used to export output to a file. Supported formats are plain text in tabular format and CSV. | NO |
| ProxyFactory |
org.rhq.enterprise.client.utility.ResourceClientProxy.Factory
| NO | |
| scriptUtil |
org.rhq.enterprise.client.utility.ScriptUtil
| Provides methods that can be useful when writing scripts. | NO |
| AlertManager | org.rhq.enterprise.server.alert.AlertManagerRemote | Provides an interface into the alerts subsystem. | YES |
| AlertDefinitionManager | org.rhq.enterprise.server.alert.AlertDefinitionManagerRemote | Provides an interface into the alerts definition subsystem. | YES |
| AvailabilityManager | org.rhq.enterprise.server.measurement.AvailabilityManagerRemote | Provides an interface into the measurement subsystem that can be used to determine resources' availability. | YES |
| CallTimeDataManager | org.rhq.enterprise.server.measurement.CallTimeDataManagerRemote | Provides an interface into the measurement subsystem for retrieving call-time metric data. | YES |
| RepoManager | org.rhq.enterprise.server.content.RepoManagerRemote | Provides an interface into the content subsystem for working with repositories. | YES |
| ConfigurationManager | org.rhq.enterprise.server.configuration.ConfigurationManagerRemote | Provides an interface into the configuration subsystem. | YES |
| DataAccessManager | org.rhq.enterprise.server.report.DataAccessRemote | Provides an interface for executing user-defined queries. | YES |
| EventManager | org.rhq.enterprise.server.event.EventManagerRemote | Provides an interface into the events subsystem. | YES |
| MeasurementBaselineManager | org.rhq.enterprise.server.measurement.MeasurementBaselineManagerRemote | Provides an interface into the measurement subsystem for working with measurement baselines. | YES |
| MeasurementDataManager | org.rhq.enterprise.server.measurement.MeasurementDataManagerRemote | Provides an interface into the measurement subsystem for working with measurement data. | YES |
| MeasurementDefinitionManager | org.rhq.enterprise.server.measurement.MeasurementDefinitionManagerRemote | Provides an interface into the measurement subsystem for working with measurement definitions. | YES |
| MeasurementScheduleManager | org.rhq.enterprise.server.measurement.MeasurementScheduleManagerRemote | Provides an interface into the measurement subsystem for working with measurement schedules. | YES |
| OperationManager | org.rhq.enterprise.server.operation.OperationManagerRemote | Provides an interface into the operation subsystem. | YES |
| ResourceManager | org.rhq.enterprise.server.resource.ResourceManagerRemote | Provides an interface into the resource subsystem. | YES |
| ResourceGroupManager | org.rhq.enterprise.server.resource.group.ResourceGroupManagerRemote | Provides an interface into the resource group subsystem. | YES |
| ResourceTypeManager | org.rhq.enterprise.server.resource.ResourceTypeManagerRemote | Provides an interface into the resource subsystem for working with resource types. | YES |
| RoleManager | org.rhq.enterprise.server.authz.RoleManagerRemote | Provides an interface into the security subsystem for working with security rules and roles. | YES |
| SubjectManager | org.rhq.enterprise.server.auth.SubjectManagerRemote | Provides an interface into the security subsystem for working with users. | YES |
| SupportManager | org.rhq.enterprise.server.support.SupportManagerRemote | Provides an interface into the reporting subsystem for getting reports of managed resources. | YES |
4.4. Passing Script Arguments in the JBoss ON CLI Copier lienLien copié sur presse-papiers!
main method, and it takes a String array as an argument. That array holds any arguments passed to the program. Similarly, arguments can be passed to CLI scripts. Arguments passed to a script can be accessed in the implicit args array:
Example 6. Handling Script Arguments
Important
args variable is only available when executing a script in non-interactive mode or with exec -f.
rhqadmin@localhost:7080$ exec -f echo_args.js --args-style=named x=1, y=2
rhqadmin@localhost:7080$ exec -f echo_args.js --args-style=named x=1, y=2
Example 7. echo_args.js
Example 8. echo_args.js
- You have to explicitly specify that you are using named arguments via the
--args-styleoption - The values of the named arguments are still accessible via the implicit
args array - The named arguments,
xandy, are bound into the script context as variables
4.5. Configuring Criteria-Based Searching Copier lienLien copié sur presse-papiers!
4.5.1. Setting Basic Search Criteria Copier lienLien copié sur presse-papiers!
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria() rhqadmin@localhost:7080$ var resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria()
rhqadmin@localhost:7080$ var resources = ResourceManager.findResourcesByCriteria(criteria)
ResourceCriteria class because the org.rhq.core.domain.criteria package is automatically imported.
findResourcesByCriteria follows the naming format of all criteria-based query operations, findXXXByCriteria. This basic criteria search is translated into the following JPA-QL query:
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InvetoryStatus.COMMITTED
SELECT r
FROM Resource r
WHERE ( r.inventoryStatus = InvetoryStatus.COMMITTED
4.5.2. Using Sorting Copier lienLien copié sur presse-papiers!
rhqadmin@localhost:7080$ criteria.addSortPluginName(PageOrdering.ASC) rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ criteria.addSortPluginName(PageOrdering.ASC)
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED ) ORDER BY r.resourceType.plugin ASC
SELECT r
FROM Resource r
WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED )
ORDER BY r.resourceType.plugin ASC
criteria.addSortPluginName(). Sorting criteria have methods in the form addSortXXX(PageOrdering order).
4.5.3. Using Filtering Copier lienLien copié sur presse-papiers!
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server')
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server')
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
addFilterXXX(). The resulting JPA-QL query will appear as follows:
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
SELECT r
FROM Resource r
WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED
AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server')
rhqadmin@localhost:7080$ criteria.addFilterAgentName('localhost.localdomain')
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server')
rhqadmin@localhost:7080$ criteria.addFilterAgentName('localhost.localdomain')
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED AND LOWER( r.agent.name ) like 'localhost.localdomain' ESCAPE '\\' )
SELECT r
FROM Resource r
WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED
AND LOWER( r.agent.name ) like 'localhost.localdomain' ESCAPE '\\' )
4.5.4. Fetching Associations Copier lienLien copié sur presse-papiers!
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server')
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ resource = resources.get(0)
rhqadmin@localhost:7080$ if (resource.childResources == null) print('no child resources')
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server')
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ resource = resources.get(0)
rhqadmin@localhost:7080$ if (resource.childResources == null) print('no child resources')
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server')
rhqadmin@localhost:7080$ criteria.fetchChildResources(true)
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ resource = resources.get(0)
rhqadmin@localhost:7080$ if (resource.childResources == null) print('no child resources'); else pretty.print(resource.childResources)
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server')
rhqadmin@localhost:7080$ criteria.fetchChildResources(true)
rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
rhqadmin@localhost:7080$ resource = resources.get(0)
rhqadmin@localhost:7080$ if (resource.childResources == null) print('no child resources'); else pretty.print(resource.childResources)
criteria.fetchChildResources(true), all criteria methods that specify that a particular lazy association should be fetched are of the form, fetchXXX().
SELECT r FROM Resource r LEFT JOIN FETCH r.childResources WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
SELECT r
FROM Resource r
LEFT JOIN FETCH r.childResources
WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED
AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
4.6. Displaying Output Copier lienLien copié sur presse-papiers!
4.6.1. TabularWriter Copier lienLien copié sur presse-papiers!
TabularWriter provides for tabular-formatted output. In addition to formatting, it handles converting objects, particularly domain objects in the packages under org.rhq.core.domain, into a format suitable for display in the interactive console. Let's look at an example to illustrate the utility of TabularWriter:
TabularWriter instance that is bound in the script context under the name pretty is implicitly invoked to display the results of ResourceManager.findResourcesByCriteria. The returned resources are displayed in very readable, tabular format. Now let's look at the output if we do not use TabularWriter.
Resource class are displayed. TabularWriter determines the properties to display through the Summary annotation. If a field of an entity has the @Summary annotation, TabularWriter will include it in the output.
4.6.2. Exporter Copier lienLien copié sur presse-papiers!
exporter. It uses TabularWriter; however, in addition to writing plain text in a tabular format, it also supports CSV-formatting. First, we will look at an example of exporting to a file as plain text:
rhqadmin@localhost:7080$ exporter.setTarget('raw', 'output.txt')
rhqadmin@localhost:7080$ exporter.write(resources)
rhqadmin@localhost:7080$ exporter.setTarget('raw', 'output.txt')
rhqadmin@localhost:7080$ exporter.write(resources)
exporter handles the IO operations.
rhqadmin@localhost:7080$ exporter.setTarget('csv', 'output.csv')
rhqadmin@localhost:7080$ exporter.write(resources)
rhqadmin@localhost:7080$ exporter.setTarget('csv', 'output.csv')
rhqadmin@localhost:7080$ exporter.write(resources)
4.7. Simple CLI Examples Copier lienLien copié sur presse-papiers!
Example 9. Logging in to a Specified Server
rhq-cli -u rhqadmin -p rhqadmin -s 192.168.1.100 -t 70443
rhq-cli -u rhqadmin -p rhqadmin -s 192.168.1.100 -t 70443
Example 10. Prompting for a Password
rhq-cli -u rhqadmin -P
rhq-cli -u rhqadmin -P
Example 11. Passing Variables to the Server
rhq-cli -u rhqadmin -p rhqadmin -c "pretty.print(ResourceTypeManager.findResourceTypesByCriteria(new ResourceTypeCriteria()))" > resource_types.txt
rhq-cli -u rhqadmin -p rhqadmin -c "pretty.print(ResourceTypeManager.findResourceTypesByCriteria(new ResourceTypeCriteria()))" > resource_types.txt
resource_types.txt.
ResourceTypeManager.findResourceTypesByCriteria(new ResourceTypeCriteria()) class invokes the findResourceTypesByCriteria operation on ResourceTypeManager. A new ResourceTypeCriteria object is passed as the argument.
pretty.print(...). An implicit object made available to commands and scripts by the CLI, pretty is useful for outputting objects in a readable, tabular format, designed with enhanced capabilities for domain objects. This single command provides a nicely formatted, text-based report of the resource types in the inventory.
Example 12. Running a Script in the JBoss ON CLI
cliRoot/rhq-remoting-cli-3.0.0.GA1/bin/rhq-cli.sh -f my_script.js
cliRoot/rhq-remoting-cli-3.0.0.GA1/bin/rhq-cli.sh -f my_script.js
my_script.js. The CLI will terminate immediately after the script has finished executing.
4.8. Using Resource Proxies Copier lienLien copié sur presse-papiers!
ProxyFactory to interact with the remote and domain API.
Note
ProxyFactory is available to the JBoss ON CLI in interactive mode or when using a script file. It is also available to server scripts, such as scripts used for alerting.
ProxyFactory gets information about a resource, which is identified in the getResource() method with the resource's ID number.
ProxyFactory can return a complete summary of information about the specified resource, such as its current monitoring data and traits, resource name, available metrics, available operations, content information, and child inventory, all dependent on the resource type. For example:
ProxyFactory creates a resource proxy object.
Example 13. Creating a Platform Proxy Resource
var rhelServerOne = ProxyFactory.getResource(10001)
var rhelServerOne = ProxyFactory.getResource(10001)
- Viewing basic information about the resource, such as its children
- Getting measurement information
- Running operations
- Changing resource and plug-in configuration
- Updating and retrieving content
Note
Example 14. Viewing a Resource's Children
ProxyFactory has a method for all proxy objects, children, which lists all of the children for the proxy resource.
Example 15. Viewing Resource Metrics
ProxyFactory provides a set of shortcut metrics for each individual measurement for a resource type. This corresponds to the findLiveData() method in the remote API, but it is much easier to get monitoring information quickly and it is simpler to identify what metrics are available.
measurements method:
Example 16. Running Operations on a Proxy
ProxyFactory has a shortcut method for every operation available for a resource.
operations method:
Example 17. Changing Configuration Properties
editResourceConfiguration() and editPluginConfiguration(), respectively — to edit those properties.
get*Configuration). For example, for the plug-in configuration:
edit*Configuration() method brings up a configuration wizard that goes through all of the properties individually and prompts to keep or change each value. The properties are even grouped according to the same organization that the JBoss ON web UI uses. For example:
| Keys | Action |
|---|---|
| return | Selects the default or existing value for a property. |
| ctrl-d | The same as selecting the unset checkbox in the configuration UI. |
| ctrl-k | Exits the configuration wizard. |
| ctrl-e | Displays the help description for the current property. |
Example 18. Managing Content on Resources
var contentResource = ProxyFactory.getResource(14932)
contentResource.retrieveBackingContent("/resources/backup/original.war")
var contentResource = ProxyFactory.getResource(14932)
contentResource.retrieveBackingContent("/resources/backup/original.war")
updateBackingContent method and specify the filename with the path on the application server to put the content and the version number of the content. For example:
contentResource.updateBackingContent("/resources/current/new.war", "2.0")
contentResource.updateBackingContent("/resources/current/new.war", "2.0")
5. Simple Example: Scripts to Manage Inventory Copier lienLien copié sur presse-papiers!
5.1. Automatically Import New Resources: autoimport.js Copier lienLien copié sur presse-papiers!
NEW. That's an in-between state, because JBoss ON is aware that the resource exists, but the resource has not been committed so JBoss ON can't manage it.
- It identifies new resources using the
findUncommittedResources()method. - It gets those new resources' IDs.
- It then imports those resources by invoking the discovery system's import operation.
importResources. The other two functions — findUncommittedResources and getIds — have to be defined in the script.
ResourceCriteria search by adding a search parameter based on the inventory status.
5.2. Simple Inventory Count: inventoryCount.js Copier lienLien copié sur presse-papiers!
*Criteria classes; for resources, this is ResourceCriteria. A search can be very specific, passing criteria so that it returns only one resource or a small subset of resource. It is also possible to return everything in inventory.
ResourceCriteria()), so that every resource matches the search. It then takes the size of the results to produce a simple inventory count.
5.3. Uninventory a Resource After an Alert: uninventory.js Copier lienLien copié sur presse-papiers!
uninventoryResource method:
List<Integer> uninventoryResources(Subject subject, int[] resourceIds);
List<Integer> uninventoryResources(Subject subject, int[] resourceIds);
5.4. JNDI Lookups for a JBoss AS 5 Server After an Alert: jndi.js Copier lienLien copié sur presse-papiers!
Important
-f parameter or through a server-side alert script. This cannot be run using the interactive CLI.
assertNotNull method to get the JMX object. The script then prints the JMX information.
6. Example: Scripting Resource Deployments Copier lienLien copié sur presse-papiers!
- Find all JBoss EAP instances for a specified JBoss ON group.
- Shut down each EAP instance.
- Update binaries for existing deployed applications or create new deployments.
- Restart the EAP instance.
- End the loop.
Note
6.1. Scripting JBoss AS 4 Deployments Copier lienLien copié sur presse-papiers!
This script will use two custom functions to deploy the packages to create new resources.
The script should have two command-line parameters. The first should be the path of the new application that is installed in the group. The second is the name of the group itself. These parameters are parsed in the script (as described in more detail in Section 4.4, “Passing Script Arguments in the JBoss ON CLI”).
if( args.length < 2 ) usage(); var fileName = args[0]; var groupName = args[1];
if( args.length < 2 ) usage();
var fileName = args[0];
var groupName = args[1];
rgc.fetchExplicitResources(true);
rgc.fetchExplicitResources(true);
resourceArray now contains all resources which are part of the group. Next, check if there are JBoss AS 4 Server instances which need to be restarted before the application is deployed.
server contains the JBossAS instance. This requires re-reading the server because it needs to be fully populated. Internally, the CLI is using simple JPA persistence, and it is necessary to not always fetch all dependent objects.
packageName is the name of the application without version information and path as shown in the JBoss ON GUI as deployed applications.
println(" download old app to /tmp");
child.retrieveBackingContent("/tmp/" + packageName + "_" + server.name + "_old");
println(" download old app to /tmp");
child.retrieveBackingContent("/tmp/" + packageName + "_" + server.name + "_old");
/tmp/ directory.
At this point, existing application can be updated. The next step is to create the resource through the CLI and then deploy it to the JBoss server.
- The type of the application (e.g., WAR or EAR)
- The type of the container the app needs to be deployed on (such as Tomcat or JBoss AS 4)
Note
rhq-plugin.xml descriptor. The attributes, configuration parameters, operations, and metrics for each default resource type are listed in the Resource Monitoring and Operations Reference.
var appType = ResourceTypeManager.getResourceTypeByNameAndPlugin( appTypeName, "JBossAS" );
if( appType == null ) {
println(" Could not find application type. Exit.");
usage();
}
var appType = ResourceTypeManager.getResourceTypeByNameAndPlugin( appTypeName, "JBossAS" );
if( appType == null ) {
println(" Could not find application type. Exit.");
usage();
}
rhq-plugin.xml descriptor. To be able to create a new resource, these parameters need to be filled in.
var deployConfigDef = ConfigurationManager.getPackageTypeConfigurationDefinition(realPackageType.getId());
var deployConfigDef = ConfigurationManager.getPackageTypeConfigurationDefinition(realPackageType.getId());
rhq-plugin.xml descriptor. For example:
6.2. Scripting JBoss AS 5 Deployments Copier lienLien copié sur presse-papiers!
This script will use two custom functions to deploy the packages to create new resources.
The script should have two command-line parameters. The first should be the path of the new application that is installed in the group. The second is the name of the group itself. These parameters are parsed in the script (as described in more detail in Section 4.4, “Passing Script Arguments in the JBoss ON CLI”).
if( args.length < 2 ) usage(); var fileName = args[0]; var groupName = args[1];
if( args.length < 2 ) usage();
var fileName = args[0];
var groupName = args[1];
rgc.fetchExplicitResources(true);
rgc.fetchExplicitResources(true);
resourceArray now contains all resources which are part of the group. Next, check if there are JBoss AS 5 Server instances which need to be restarted before the application is deployed.
server contains the JBoss AS 5 instance. This requires re-reading the server because it needs to be fully populated. Internally, the CLI is using simple JPA persistence, and it is necessary to not always fetch all dependent objects.
packageName is the name of the application without version information and path as shown in the JBoss ON GUI as deployed applications.
println(" download old app to /tmp");
child.retrieveBackingContent("/tmp/" + packageName + "_" + server.name + "_old");
println(" download old app to /tmp");
child.retrieveBackingContent("/tmp/" + packageName + "_" + server.name + "_old");
/tmp/ directory.
At this point, existing application can be updated. The next step is to create the resource through the CLI and then deploy it to the JBoss server.
- The type of the application (e.g., WAR or EAR)
- The type of the container the app needs to be deployed on (such as Tomcat or JBoss AS 5)
Note
rhq-plugin.xml descriptor. The attributes, configuration parameters, operations, and metrics for each default resource type are listed in the Resource Monitoring and Operations Reference.
var appType = ResourceTypeManager.getResourceTypeByNameAndPlugin( appTypeName, "JBossAS5" );
if( appType == null ) {
println(" Could not find application type. Exit.");
usage();
}
var appType = ResourceTypeManager.getResourceTypeByNameAndPlugin( appTypeName, "JBossAS5" );
if( appType == null ) {
println(" Could not find application type. Exit.");
usage();
}
rhq-plugin.xml descriptor. To be able to create a new resource, these parameters need to be filled in.
// create deployConfig
var deployConfig = new Configuration();
deployConfig.put( new PropertySimple("deployExploded", "false"));
deployConfig.put( new PropertySimple("deployFarmed", "false"));
// create deployConfig
var deployConfig = new Configuration();
deployConfig.put( new PropertySimple("deployExploded", "false"));
deployConfig.put( new PropertySimple("deployFarmed", "false"));
var deployConfigDef = ConfigurationManager.getPackageTypeConfigurationDefinition(realPackageType.getId());
var deployConfigDef = ConfigurationManager.getPackageTypeConfigurationDefinition(realPackageType.getId());
rhq-plugin.xml descriptor. For example:
7. Example: Managing Grouped Servers Copier lienLien copié sur presse-papiers!
7.1. The Plan for the Scripts Copier lienLien copié sur presse-papiers!
-f parameter. The idea here is to create a series of small management scripts that perform specific tasks on a group of JBoss EAP servers. This example has seven scripts for:
- Creating a group
- Adding EAP instances to the group
- Checking EAP status
- Starting the EAP instance
- Scheduling an operation
- Deploying new content to the group
- Checking metrics
7.2. Creating the Wrapper Script and .conf File Copier lienLien copié sur presse-papiers!
- The wrapper script is run as a regular user, which means that any JavaScript files must be acessible to a regular user.
- The scripts are located in a
scripts/directory that is in the same directory as the wrapper script. - A separate configuration file defines connection information for the JBoss ON server.
- Each JavaScript file is invoked by a separate CLI command invocation, defined in the wrapper.
- Any options or information required by the JBoss ON CLI command is defined in the JavaScript file and can, potentially, be passed with the wrapper script as an option.
doCommand() section which defines the JBoss ON CLI command to run and the JavaScript file to use. For example, for the deploy command to deploy content to the EAP instances:
groupcontrol.conf, which defines the connection information to connect to the JBoss ON server (which is required by the JBoss ON CLI).
7.3. Defining Arguments and Other Parameters for the CLI Scripts Copier lienLien copié sur presse-papiers!
args methods. At a minimum, each script should accept the name of the group on which to perform the task.
usage function, so that each command can print what options are expected. For example:
Note
$2 $3.
doDeploy() {
$JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/deploy.js $2 $3
}
doDeploy() {
$JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/deploy.js $2 $3
}
7.4. Creating a Group: group.js Copier lienLien copié sur presse-papiers!
7.5. Adding Resources to a Group: addMember.js Copier lienLien copié sur presse-papiers!
- groupName for the group to add the resources to
- resourceName for the name of the resource to add; this is one of the search criteria
- resourceTypeName for the type of resource to add; this is one of the search criteria
7.6. Getting Inventory and Status Information: status.js Copier lienLien copié sur presse-papiers!
7.7. Starting, Stopping, and Restarting the Server: restart.js Copier lienLien copié sur presse-papiers!
shutdown()for AS4 servers andshutDown()for AS5 serversstart()
7.8. Deploying Applications to the Group Members: deploy.js Copier lienLien copié sur presse-papiers!
7.9. Scheduling an Operation: ops.js Copier lienLien copié sur presse-papiers!
7.10. Gathering Metric Data of Managed Servers: metrics.js Copier lienLien copié sur presse-papiers!
findLiveData method, which returns the current active value for the resource.
./wrapper.sh metrics myGroup "Active Thread Count" Remote server version is: 3.0.1.GA (b2cb23b:859b914) Login successful Metric value for 10003 is [MeasurementDataNumeric[value=[64.0], MeasurementData [MeasurementDataPK: timestamp=[Wed Feb 15 22:14:38 EST 2012], scheduleId=[1]]]]
[jsmith@server cli]$ ./wrapper.sh metrics myGroup "Active Thread Count"
Remote server version is: 3.0.1.GA (b2cb23b:859b914)
Login successful
Metric value for 10003 is [MeasurementDataNumeric[value=[64.0], MeasurementData [MeasurementDataPK: timestamp=[Wed Feb 15 22:14:38 EST 2012], scheduleId=[1]]]]
8. Example: Writing a Custom Java Client Copier lienLien copié sur presse-papiers!
Important
{
Client joprClient = new Client(...)
jopClient.getResourceManager().findResources(...)
...
}
{
Client joprClient = new Client(...)
jopClient.getResourceManager().findResources(...)
...
}
8.1. Getting the API Copier lienLien copié sur presse-papiers!
8.2. Example Custom Java Client Copier lienLien copié sur presse-papiers!
Note
8.2.1. Sample Java Class Using the JBoss ON API Copier lienLien copié sur presse-papiers!
8.2.2. Sample LDAP Script Copier lienLien copié sur presse-papiers!
.bat script invokes the custom Java class.
9. Reference: Methods Specific to the JBoss ON CLI Copier lienLien copié sur presse-papiers!
9.1. Methods Available to the CLI and Server Scripts Copier lienLien copié sur presse-papiers!
9.1.1. Assert Copier lienLien copié sur presse-papiers!
| Method | Signature |
|---|---|
| Assert.assertEquals |
|
| Assert.assertEqualsNoOrder |
assertEqualsNoOrder(Object[], Object[], String) assertEqualsNoOrder(Object[], Object[])
|
| Assert.assertExists |
assertExists(String)
|
| Assert.assertFalse |
assertFalse(boolean) assertFalse(boolean, String)
|
| Assert.assertNotNull |
assertNotNull(Object) assertNotNull(Object, String)
|
| Assert.assertNotSame |
assertNotSame(Object, Object, String) assertNotSame(Object, Object)
|
| Assert.assertNull |
assertNull(Object) assertNull(Object, String)
|
| Assert.assertNumberEqualsJS |
assertNumberEqualsJS(double, double, String)
|
| Assert.assertSame |
assertSame(Object, Object, String) assertSame(Object, Object)
|
| Assert.assertTrue |
assertTrue(boolean, String) assertTrue(boolean)
|
| Assert.fail |
fail() fail(String, Throwable) fail(String)
|
9.1.2. Subject Copier lienLien copié sur presse-papiers!
| Method | Signature |
|---|---|
| subject.addLdapRole |
addLdapRole(Role)
|
| subject.addRole |
addRole(Role) addRole(Role, boolean)
|
| subject.department | Prints the department value (if any) for the current user. |
| subject.emailAddress | Prints the email address for the current user. |
| subject.factive | Prints whether the user account is active. |
| subject.firstName | Prints whether the first name of the user. |
| subject.fsystem | |
| subject.id | Prints the ID number for the user account within JBoss ON. |
| subject.lastName | Prints the surname for the user. |
| subject.ldapRoles | Lists any roles associated with LDAP groups to which the current user is a member. |
| subject.name | Prints the JBoss ON user ID of the current user. |
| subject.ownedGroups | |
| subject.phoneNumber | Prints thephone number, if any exists, for the current user. |
| subject.removeLdapRole |
removeLdapRole(Role)
|
| subject.removeRole |
removeRole(Role)
|
| subject.roles | Prints the role name, permissions, associated LDAP users and groups, associated resource groups, and other information about every role to which the current user belongs. |
| subject.sessionId | Prints the current session ID number. |
| subject.smsAddress | Returns the pager number, if it exists, for the user. |
| subject.toString |
String toString()
|
| subject.userConfiguration | Returns all of the dashboard information, based on the configured portlets, dashboards, and settings that are specific to the logged-in user. |
9.1.3. pretty Copier lienLien copié sur presse-papiers!
| Method | Signature |
|---|---|
| pretty.exportMode | Prints the current export setting for the server. |
| pretty.print |
|
| pretty.width | Prints the current width settings for the console display. |
9.1.4. unlimitedPC and pageControl Copier lienLien copié sur presse-papiers!
| Method | Signature |
|---|---|
| unlimitedPC.addDefaultOrderingField |
addDefaultOrderingField(String, PageOrdering) addDefaultOrderingField(String)
|
| unlimitedPC.clone |
clone()
|
| unlimitedPC.firstRecord | Returns the first record in the results page. |
| unlimitedPC.getExplicitPageControl |
PageControl getExplicitPageControl(int, int)
|
| unlimitedPC.getSingleRowInstance |
PageControl getSingleRowInstance()
|
| unlimitedPC.getUnlimitedInstance |
PageControl getUnlimitedInstance()
|
| unlimitedPC.initDefaultOrderingField |
initDefaultOrderingField(String) initDefaultOrderingField(String, PageOrdering)
|
| unlimitedPC.orderingFields | |
| unlimitedPC.orderingFieldsAsArray | |
| unlimitedPC.pageNumber | Returns the current page number for paged results. |
| unlimitedPC.pageSize | Returns the current configured page size (number of returned entries per page). |
| unlimitedPC.primarySortColumn | |
| unlimitedPC.primarySortOrder | |
| unlimitedPC.removeOrderingField |
removeOrderingField(String)
|
| unlimitedPC.reset |
reset()
|
| unlimitedPC.setPrimarySort |
setPrimarySort(String, PageOrdering)
|
| unlimitedPC.setPrimarySortOrder |
setPrimarySortOrder(PageOrdering)
|
| unlimitedPC.sortBy |
sortBy(String)
|
| unlimitedPC.startRow | Returns the current starting row number. |
| unlimitedPC.toString |
String toString()
|
| unlimitedPC.truncateOrderingFields |
truncateOrderingFields(int)
|
9.1.5. exporter Copier lienLien copié sur presse-papiers!
| Method | Signature |
|---|---|
| exporter.close |
close()
|
| exporter.file | |
| exporter.format | Shows the current configured output format. |
| exporter.pageWidth | Shows the configured line length ofor content in the output file. |
| exporter.setFormat |
setFormat(String)
|
| exporter.setFile |
setFile(String)
|
| exporter.setPageWidth |
setPageWidth(int)
|
| exporter.setTarget |
setTarget(String, String)
|
| exporter.write |
write(Object)
|
9.1.6. ProxyFactory Copier lienLien copié sur presse-papiers!
| Method | Signature |
|---|---|
| ProxyFactory.getResource |
ResourceClientProxy getResource(int)
|
| ProxyFactory.outputWriter | |
| ProxyFactory.remoteClient | Returns information about the managers and configuration used by the remote client. In the interactive CLI, this prints information about the manager beans used by the interactive CLI. |
| ProxyFactory.resource |
9.1.7. scriptUtil Copier lienLien copié sur presse-papiers!
| Method | Signature |
|---|---|
| scriptUtil.findResources |
PageList<Resource> findResources(String)
|
| scriptUtil.getFileBytes |
byte[] getFileBytes(String)
|
| scriptUtil.isDefined |
boolean isDefined(String)
|
| scriptUtil.saveBytesToFile |
saveBytesToFile(byte[], String)
|
| scriptUtil.sleep |
sleep(long)
|
| scriptUtil.waitForScheduledOperationToComplete |
ResourceOperationHistory waitForScheduledOperationToComplete(ResourceOperationSchedule, long, int) ResourceOperationHistory waitForScheduledOperationToComplete(ResourceOperationSchedule)
|
9.2. Methods Available to Proxy Resources Copier lienLien copié sur presse-papiers!
Note
| Information Methods | |
|---|---|
| measurements | Displays a pretty-print list of the available metrics, current values, and description of all measurements for the platform resource. |
| operations | Lists the available operations for the resource type. |
| Shortcut Metric Methods | |||
|---|---|---|---|
| OSName | OSVersion | architecture | createdDate |
| description | distributionName | distributionVersion | freeMemory |
| freeSwapSpace | hostname | idle | totalMemory |
| systemLoad | totalSwapSpace | usedSwapSpace | usedMemory |
| userLoad | modifiedDate | waitLoad | version |
| Shortcut Resource Entry Methods | ||
|---|---|---|
| id (inventory ID number) | resourceType | name (inventory name) |
| Shortcut Operation Methods | ||
|---|---|---|
| manualAutodiscovery | cleanYumMetadataCache | viewProcessList |
| Shortcut Configuration Methods | |
|---|---|
| editPluginConfiguration() | pluginConfiguration |
| pluginConfigurationDefinition | |
| Shortcut Content Methods |
|---|
| contentTypes |
| Shortcut Inventory Methods |
|---|
| children |
| Method | Signature |
|---|---|
| platform.getChild |
ResourceClientProxy getChild(String)
|
| platform.getMeasurement |
Measurement getMeasurement(String)
|
| platform.updatePluginConfiguration |
PluginConfigurationUpdate updatePluginConfiguration(Configuration)
|
| platform.toString |
String toString()
|
| Information Methods | |
|---|---|
| measurements | Displays a pretty-print list of the available metrics, current values, and description of all measurements for the JBoss resource. |
| operations | Lists the available operations for the resource type. |
| Shortcut Metric Methods | |||
|---|---|---|---|
| JVMFreeMemory | JVMMaxMemory | JVMTotalMemory | activeThreadCount |
| activeThreadGroupCount | buildDate | createdDate | description |
| modifiedDate | startDate | totalTransactions | totalTransactionsperMinute |
| transactionsCommitted | transactionsCommittedperMinute | transactionsRolledback | transactionsRolledbackperMinute |
| partitionName | versionName | version | |
| Shortcut Resource Entry Methods | ||
|---|---|---|
| id (inventory ID number) | resourceType | name (inventory name) |
| Shortcut Operation Methods | ||
|---|---|---|
| restart | shutdown | start |
| Shortcut Configuration Methods | |
|---|---|
| editPluginConfiguration() | pluginConfiguration |
| pluginConfigurationDefinition | |
| Shortcut Content Methods |
|---|
| contentTypes |
| Shortcut Inventory Methods |
|---|
| children |
| Method | Signature |
|---|---|
| jbossas.getChild |
ResourceClientProxy getChild(String)
|
| jbossas.getMeasurement |
Measurement getMeasurement(String)
|
| jbossas.updatePluginConfiguration |
PluginConfigurationUpdate updatePluginConfiguration(Configuration)
|
| jbossas.toString |
String toString()
|
| Information Methods | |
|---|---|
| measurements | Displays a pretty-print list of the available metrics, current values, and description of all measurements for the content resource. |
| operations | Lists the available operations for the resource type. |
| Shortcut Metric Methods | ||
|---|---|---|
| createdDate | modifiedDate | description |
| path | version | exploded |
| Shortcut Resource Entry Methods | ||
|---|---|---|
| id (inventory ID number) | resourceType | name (inventory name) |
| Shortcut Operation Methods |
|---|
| revert |
| Shortcut Configuration Methods | |
|---|---|
| editPluginConfiguration() | pluginConfiguration |
| pluginConfigurationDefinition | |
| Shortcut Content Methods | |
|---|---|
| contentTypes | backingContent |
| Shortcut Inventory Methods |
|---|
| children |
| Method | Signature |
|---|---|
| content.getChild |
ResourceClientProxy getChild(String)
|
| content.getMeasurement |
Measurement getMeasurement(String)
|
| content.updatePluginConfiguration |
PluginConfigurationUpdate updatePluginConfiguration(Configuration)
|
| content.toString |
String toString()
|
| content.retrieveBackingContent |
retrieveBackingContent(String fileName)
|
| content.updateBackingContent |
updateBackingContent(String filename, String displayVersion)
|