Prechádzať zdrojové kódy

AMBARI-8728. upgrade_pack field not available in API call to stacks endpoint (ncole)

Nate Cole 10 rokov pred
rodič
commit
bdf2695708

+ 20 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/StackVersionResponse.java

@@ -20,7 +20,9 @@ package org.apache.ambari.server.controller;
 
 import java.io.File;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
+import java.util.Set;
 
 
 public class StackVersionResponse {
@@ -45,12 +47,14 @@ public class StackVersionResponse {
    * This may be null or empty if no relevant files are available.
    */
   private Collection<File> serviceKerberosDescriptorFiles;
+  private Set<String> upgradePacks = Collections.emptySet();
 
   public StackVersionResponse(String stackVersion, String minUpgradeVersion,
                               boolean active, String parentVersion,
                               Map<String, Map<String, Map<String, String>>> configTypes,
                               File stackKerberosDescriptorFile,
-                              Collection<File> serviceKerberosDescriptorFiles) {
+                              Collection<File> serviceKerberosDescriptorFiles,
+                              Set<String> upgradePacks) {
     setStackVersion(stackVersion);
     setMinUpgradeVersion(minUpgradeVersion);
     setActive(active);
@@ -58,6 +62,7 @@ public class StackVersionResponse {
     setConfigTypes(configTypes);
     setKerberosDescriptorFile(stackKerberosDescriptorFile);
     setServiceKerberosDescriptorFiles(serviceKerberosDescriptorFiles);
+    setUpgradePacks(upgradePacks);
   }
 
   public String getStackName() {
@@ -146,4 +151,18 @@ public class StackVersionResponse {
   public void setServiceKerberosDescriptorFiles(Collection<File> serviceKerberosDescriptorFiles) {
     this.serviceKerberosDescriptorFiles = serviceKerberosDescriptorFiles;
   }
+  
+  /**
+   * @param upgradePacks the names of the upgrade packs for the stack version 
+   */
+  public void setUpgradePacks(Set<String> upgradePacks) {
+    this.upgradePacks = upgradePacks;
+  }
+  
+  /**
+   * @return the upgrade pack names for the stack version
+   */
+  public Set<String> getUpgradePacks() {
+    return upgradePacks;
+  }
 }

+ 4 - 0
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java

@@ -53,6 +53,7 @@ public class StackVersionResourceProvider extends ReadOnlyResourceProvider {
   public static final String STACK_CONFIG_TYPES            = PropertyHelper.getPropertyId("Versions", "config_types");
   public static final String STACK_PARENT_PROPERTY_ID      = PropertyHelper.getPropertyId("Versions", "parent_stack_version");
   public static final String KERBEROS_DESCRIPTOR_PROPERTY_ID = PropertyHelper.getPropertyId("Versions", "kerberos_descriptor");
+  public static final String UPGRADE_PACKS_PROPERTY_ID = PropertyHelper.getPropertyId("Versions", "upgrade_packs");
 
   private static Set<String> pkPropertyIds = new HashSet<String>(
       Arrays.asList(new String[] { STACK_NAME_PROPERTY_ID, STACK_VERSION_PROPERTY_ID }));
@@ -109,6 +110,9 @@ public class StackVersionResourceProvider extends ReadOnlyResourceProvider {
 
       setResourceProperty(resource, STACK_CONFIG_TYPES,
           response.getConfigTypes(), requestedIds);
+      
+      setResourceProperty(resource, UPGRADE_PACKS_PROPERTY_ID,
+          response.getUpgradePacks(), requestedIds);
 
       // TODO (rlevas): Convert this to an official resource
       KerberosDescriptor kerberosDescriptor;

+ 2 - 1
ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java

@@ -212,7 +212,8 @@ public class StackInfo implements Comparable<StackInfo>{
     return new StackVersionResponse(getVersion(), getMinUpgradeVersion(),
         isActive(), getParentStackVersion(), getConfigTypeAttributes(),
         (stackDescriptorFileFilePath == null) ? null : new File(stackDescriptorFileFilePath),
-        serviceDescriptorFiles);
+        serviceDescriptorFiles,
+        null == upgradePacks ? Collections.<String>emptySet() : upgradePacks.keySet());
   }
 
   public String getMinUpgradeVersion() {

+ 1 - 0
ambari-server/src/main/resources/properties.json

@@ -204,6 +204,7 @@
         "Versions/parent_stack_version",
         "Versions/config_types",
         "Versions/kerberos_descriptor",
+        "Versions/upgrade_packs",
         "_"
     ],
     "StackService":[

+ 10 - 1
ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java

@@ -6950,7 +6950,6 @@ public class AmbariManagementControllerTest {
     Assert.assertEquals(1, responsesWithParams.size());
     for (StackVersionResponse responseWithParams: responsesWithParams) {
       Assert.assertEquals(responseWithParams.getStackVersion(), STACK_VERSION);
-
     }
 
     StackVersionRequest invalidRequest = new StackVersionRequest(STACK_NAME, NON_EXT_VALUE);
@@ -6959,6 +6958,16 @@ public class AmbariManagementControllerTest {
     } catch (StackAccessException e) {
       // do nothing
     }
+    
+    // test that a stack response has upgrade packs
+    requestWithParams = new StackVersionRequest(STACK_NAME, "2.1.1");
+    responsesWithParams = controller.getStackVersions(Collections.singleton(requestWithParams));
+    
+    Assert.assertEquals(1, responsesWithParams.size());
+    StackVersionResponse resp = responsesWithParams.iterator().next();
+    assertNotNull(resp.getUpgradePacks());
+    assertEquals(1, resp.getUpgradePacks().size());
+    assertTrue(resp.getUpgradePacks().contains("upgrade_test"));
   }
 
   @Test