diff --git a/ChangeLog b/ChangeLog index 5e763eb7..4b9c4d63 100644 --- a/ChangeLog +++ b/ChangeLog @@ -49,6 +49,9 @@ Changes in HQApi 3.0 Changes in HQApi 2.4 + *) [HHQ-3709] Allow group syncing via command line arguments to include + child resources. + *) [HHQ-3664] Increase application update/create by not using Groovy's Collection.minus() and pre-fetch the application inventory prior to the session being marked read-write. diff --git a/src/org/hyperic/hq/hqapi1/tools/GroupCommand.java b/src/org/hyperic/hq/hqapi1/tools/GroupCommand.java index 95ec1b45..68ce7ba4 100644 --- a/src/org/hyperic/hq/hqapi1/tools/GroupCommand.java +++ b/src/org/hyperic/hq/hqapi1/tools/GroupCommand.java @@ -67,6 +67,7 @@ public class GroupCommand extends Command { private static String OPT_REGEX = "regex"; private static String OPT_DELETEMISSING = "deleteMissing"; private static String OPT_DESC = "description"; + private static String OPT_CHILDREN = "children"; private void printUsage() { System.err.println("One of " + Arrays.toString(COMMANDS) + " required"); @@ -136,6 +137,8 @@ private void sync(String[] args) throws Exception { p.accepts(OPT_COMPAT, "If specified, attempt to make the group compatible"); p.accepts(OPT_DESC, "If specified, set the description for the group"). withRequiredArg().ofType(String.class); + p.accepts(OPT_CHILDREN, "If specified, include child resources of the " + + "specified prototype and regex"); OptionSet options = getOptions(p, args); @@ -159,6 +162,19 @@ private void sync(String[] args) throws Exception { System.out.println("Successfully synced " + groups.size() + " groups."); } + // Helper function to unroll a resource and it's children into a single list. + private List getFlattenResources(List resources) { + List result = new ArrayList(); + + for (Resource r : resources) { + result.add(r); + if (r.getResource().size() > 0) { + result.addAll(getFlattenResources(r.getResource())); + } + } + return result; + } + private void syncViaCommandLineArgs(OptionSet s) throws Exception { // Required args @@ -169,6 +185,7 @@ private void syncViaCommandLineArgs(OptionSet s) throws Exception String regex = (String)s.valueOf(OPT_REGEX); boolean deleteMissing = s.has(OPT_DELETEMISSING); boolean compatible = s.has(OPT_COMPAT); + boolean children = s.has(OPT_CHILDREN); HQApi api = getApi(s); @@ -179,7 +196,7 @@ private void syncViaCommandLineArgs(OptionSet s) throws Exception // Query resources ResourcesResponse resourceResponse = api.getResourceApi(). - getResources(protoResponse.getResourcePrototype(), false, false); + getResources(protoResponse.getResourcePrototype(), false, children); checkSuccess(resourceResponse); List resources = resourceResponse.getResource(); @@ -222,8 +239,9 @@ private void syncViaCommandLineArgs(OptionSet s) throws Exception if (s.hasArgument(OPT_DESC)) { group.setDescription((String)s.valueOf(OPT_DESC)); } - - group.getResource().addAll(resources); + + List flattenedResources = getFlattenResources(resources); + group.getResource().addAll(flattenedResources); List groups = new ArrayList(); groups.add(group); GroupsResponse syncResponse = api.getGroupApi().syncGroups(groups);