You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ge...@apache.org on 2017/06/06 12:25:35 UTC

[15/17] brooklyn-server git commit: better detail in REST API response when posting ZIP

better detail in REST API response when posting ZIP

preserves backwards compatibility, adding a detail=true flag which gives richer info.
see extended comment in code.

also fixes bug where the added/changed items weren't actually listed,
and where it tried to return the full BasicManagedBundle when it just wants an ID.


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/33d9fd63
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/33d9fd63
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/33d9fd63

Branch: refs/heads/master
Commit: 33d9fd63aae2f7da3b2467bba3e47df8269d5acd
Parents: e1b0be1
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Jun 5 13:58:56 2017 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Jun 5 14:00:14 2017 +0100

----------------------------------------------------------------------
 .../apache/brooklyn/core/mgmt/ha/OsgiManager.java   |  7 +++----
 .../org/apache/brooklyn/rest/api/CatalogApi.java    | 16 ++++++++++++++--
 .../brooklyn/rest/resources/CatalogResource.java    | 12 ++++++------
 3 files changed, 23 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/33d9fd63/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
index 69021fe..2f61d16 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/OsgiManager.java
@@ -372,12 +372,11 @@ public class OsgiManager {
     // possibly remove that other capability, so that bundles with BOMs _have_ to be installed via this method.
     // (load order gets confusing with auto-scanning...)
     public List<? extends CatalogItem<?,?>> loadCatalogBom(Bundle bundle) {
-        List<? extends CatalogItem<?, ?>> catalogItems = MutableList.of();
-        loadCatalogBom(mgmt, bundle, catalogItems);
-        return catalogItems;
+        return MutableList.copyOf(loadCatalogBom(mgmt, bundle));
     }
     
-    private static Iterable<? extends CatalogItem<?, ?>> loadCatalogBom(ManagementContext mgmt, Bundle bundle, Iterable<? extends CatalogItem<?, ?>> catalogItems) {
+    private static Iterable<? extends CatalogItem<?, ?>> loadCatalogBom(ManagementContext mgmt, Bundle bundle) {
+        Iterable<? extends CatalogItem<?, ?>> catalogItems = MutableList.of();
         if (!BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.FEATURE_LOAD_BUNDLE_CATALOG_BOM)) {
             // if the above feature is not enabled, let's do it manually (as a contract of this method)
             try {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/33d9fd63/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/CatalogApi.java
----------------------------------------------------------------------
diff --git a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/CatalogApi.java b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/CatalogApi.java
index 972c2a6..fe2346f 100644
--- a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/CatalogApi.java
+++ b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/CatalogApi.java
@@ -88,13 +88,22 @@ public interface CatalogApi {
             @Valid String yaml);
 
     @Beta
+    /* TODO the polymorphic return type dependent on 'detail' is ugly, 
+     * but we're stuck in this API because backwards compatibility expects the types map
+     * whereas typical usage wants more feedback. we should introduce a 
+     * /registry and/or /types and/or /bundles endpoint that always provides details
+     * (and an approach to handling types more aligned with BrooklynTypeRegistry and OSGi bundling).
+     * Not too concerned here as this method is beta and the above switch will probably naturally happen soon. 
+     * The main client who cares about this is the Go CLI. */
     @POST
     @Consumes({"application/x-zip", "application/x-jar"})
     @ApiOperation(
             value = "Add a catalog items (e.g. new type of entity, policy or location) by uploading a ZIP/JAR archive.",
             notes = "Accepts either an OSGi bundle JAR, or ZIP which will be turned into bundle JAR. Bother format must "
                     + "contain a catalog.bom at the root of the archive, which must contain the bundle and version key."
-                    + "Return value is map of ID to CatalogItemSummary.",
+                    + "Return value is map of ID to CatalogItemSummary unless detail=true is passed as a parameter in which "
+                    + "case the return value is a BundleInstallationRestResult map containing the types map in types along "
+                    + "with a message, bundle, and code.",
             response = String.class,
             hidden = true)
     @ApiResponses(value = {
@@ -106,7 +115,10 @@ public interface CatalogApi {
                     name = "archive",
                     value = "Bundle to install, in ZIP or JAR format, requiring catalog.bom containing bundle name and version",
                     required = true)
-            byte[] archive);
+            byte[] archive,
+            @ApiParam(name="detail", value="Provide a wrapping details map", required=false)
+            @QueryParam("detail") @DefaultValue("false")
+            boolean detail);
 
     @Beta
     @POST

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/33d9fd63/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java
index 57c4ead..612e2a0 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/CatalogResource.java
@@ -45,7 +45,6 @@ import org.apache.brooklyn.api.policy.Policy;
 import org.apache.brooklyn.api.policy.PolicySpec;
 import org.apache.brooklyn.api.sensor.Enricher;
 import org.apache.brooklyn.api.sensor.EnricherSpec;
-import org.apache.brooklyn.api.typereg.ManagedBundle;
 import org.apache.brooklyn.api.typereg.RegisteredType;
 import org.apache.brooklyn.core.catalog.CatalogPredicates;
 import org.apache.brooklyn.core.catalog.internal.CatalogItemComparator;
@@ -130,7 +129,7 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
             return createFromYaml(new String(item));
         }
         
-        return createFromArchive(item);
+        return createFromArchive(item, false);
     }
     
     @Override
@@ -159,7 +158,7 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
         // as Osgi result, but without bundle, and with maps of catalog items installed
         
         String message;
-        ManagedBundle metadata;
+        String bundle;
         OsgiBundleInstallationResult.ResultCode code;
         
         Map<String,Object> types;
@@ -172,7 +171,7 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
         public static BundleInstallationRestResult of(OsgiBundleInstallationResult in, ManagementContext mgmt, BrooklynRestResourceUtils brooklynU, UriInfo ui) {
             BundleInstallationRestResult result = new BundleInstallationRestResult();
             result.message = in.getMessage();
-            result.metadata = in.getMetadata();
+            result.bundle = in.getMetadata().getVersionedName().toString();
             result.code = in.getCode();
             if (in.getCatalogItemsInstalled()!=null) {
                 result.types = MutableMap.of();
@@ -191,7 +190,7 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
     
     @Override
     @Beta
-    public Response createFromArchive(byte[] zipInput) {
+    public Response createFromArchive(byte[] zipInput, boolean detail) {
         if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.ROOT, null)) {
             throw WebResourceUtils.forbidden("User '%s' is not authorized to add catalog item",
                 Entitlements.getEntitlementContext().user());
@@ -205,7 +204,8 @@ public class CatalogResource extends AbstractBrooklynRestResource implements Cat
                 .data(BundleInstallationRestResult.of(result.getWithoutError(), mgmt(), brooklyn(), ui)).build().asJsonResponse();
         }
 
-        return Response.status(Status.CREATED).entity( BundleInstallationRestResult.of(result.get(), mgmt(), brooklyn(), ui) ).build();
+        BundleInstallationRestResult resultR = BundleInstallationRestResult.of(result.get(), mgmt(), brooklyn(), ui);
+        return Response.status(Status.CREATED).entity( detail ? resultR : resultR.types ).build();
     }
 
     private Response buildCreateResponse(Iterable<? extends CatalogItem<?, ?>> catalogItems) {