You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2017/04/11 11:14:40 UTC
[18/22] ambari git commit: AMBARI-20674 Able to hide the Delete menu
item from UI for a given service (dili)
AMBARI-20674 Able to hide the Delete menu item from UI for a given service (dili)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/784ceeaa
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/784ceeaa
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/784ceeaa
Branch: refs/heads/branch-3.0-perf
Commit: 784ceeaaffeca873be49ee80e38c7de3cdaea2dd
Parents: 532ab59
Author: Di Li <di...@apache.org>
Authored: Thu Apr 6 16:58:57 2017 -0400
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Tue Apr 11 14:14:12 2017 +0300
----------------------------------------------------------------------
.../server/controller/StackServiceResponse.java | 8 ++++
.../internal/StackServiceResourceProvider.java | 6 +++
.../ambari/server/stack/ServiceModule.java | 4 ++
.../apache/ambari/server/state/ServiceInfo.java | 26 +++++++++++
.../src/main/resources/properties.json | 1 +
.../ambari/server/state/ServiceInfoTest.java | 47 ++++++++++++++++++++
ambari-web/app/app.js | 4 ++
ambari-web/app/mappers/stack_service_mapper.js | 1 +
ambari-web/app/models/host_component.js | 3 +-
ambari-web/app/models/stack_service.js | 1 +
.../test/mappers/stack_service_mapper_test.js | 7 ++-
ambari-web/test/views/main/service/item_test.js | 3 ++
12 files changed, 109 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceResponse.java
index cbff300..8e4200d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceResponse.java
@@ -75,6 +75,8 @@ public class StackServiceResponse {
*/
private boolean credentialStoreRequired;
+ private boolean isSupportDeleteViaUI;
+
/**
* Constructor.
*
@@ -112,6 +114,8 @@ public class StackServiceResponse {
credentialStoreSupported = service.isCredentialStoreSupported();
credentialStoreEnabled = service.isCredentialStoreEnabled();
+
+ isSupportDeleteViaUI = service.isSupportDeleteViaUI();
}
public ServiceInfo.Selection getSelection() {
@@ -305,4 +309,8 @@ public class StackServiceResponse {
public void setCredentialStoreRequired(boolean credentialStoreRequired) {
this.credentialStoreRequired = credentialStoreRequired;
}
+
+ public boolean isSupportDeleteViaUI(){
+ return isSupportDeleteViaUI;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceResourceProvider.java
index a30d783..2964560 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceResourceProvider.java
@@ -98,6 +98,9 @@ public class StackServiceResourceProvider extends ReadOnlyResourceProvider {
private static final String CREDENTIAL_STORE_ENABLED = PropertyHelper.getPropertyId(
"StackServices", "credential_store_enabled");
+ private static final String SUPPORT_DELETE_VIA_UI = PropertyHelper.getPropertyId(
+ "StackServices", "support_delete_via_ui");
+
private static Set<String> pkPropertyIds = new HashSet<>(
Arrays.asList(new String[]{STACK_NAME_PROPERTY_ID,
STACK_VERSION_PROPERTY_ID, SERVICE_NAME_PROPERTY_ID}));
@@ -206,6 +209,9 @@ public class StackServiceResourceProvider extends ReadOnlyResourceProvider {
setResourceProperty(resource, CREDENTIAL_STORE_ENABLED,
response.isCredentialStoreEnabled(), requestedIds);
+ setResourceProperty(resource, SUPPORT_DELETE_VIA_UI,
+ response.isSupportDeleteViaUI(), requestedIds);
+
return resource;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
index fd65268..d65e758 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
@@ -278,6 +278,10 @@ public class ServiceModule extends BaseModule<ServiceModule, ServiceInfo> implem
serviceInfo.setSelection(parent.getSelection());
}
+ if(null == serviceInfo.getSupportDeleteViaUIField()){
+ serviceInfo.setSupportDeleteViaUI(parent.isSupportDeleteViaUI());
+ }
+
mergeCustomCommands(parent.getCustomCommands(), serviceInfo.getCustomCommands());
mergeConfigDependencies(parent);
mergeComponents(parentModule, allStacks, commonServices, extensions);
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
index 0d0b78b..512ca18 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
@@ -82,6 +82,11 @@ public class ServiceInfo implements Validable{
@XmlElement(name="deleted")
private boolean isDeleted = false;
+ @XmlElement(name="supportDeleteViaUI")
+ private Boolean supportDeleteViaUIField;
+
+ private boolean supportDeleteViaUIInternal = true;
+
@JsonIgnore
@XmlTransient
private volatile Map<String, Set<String>> configLayout = null;
@@ -291,6 +296,27 @@ public class ServiceInfo implements Validable{
isDeleted = deleted;
}
+ public Boolean getSupportDeleteViaUIField(){
+ return supportDeleteViaUIField;
+ }
+
+ public void setSupportDeleteViaUIField(Boolean supportDeleteViaUIField) {
+ this.supportDeleteViaUIField = supportDeleteViaUIField;
+ }
+
+ public boolean isSupportDeleteViaUI() {
+ if (null != supportDeleteViaUIField) {
+ return supportDeleteViaUIField.booleanValue();
+ }
+ // If set to null and has a parent, then the value would have already been resolved and set.
+ // Otherwise, return the default value (true).
+ return this.supportDeleteViaUIInternal;
+ }
+
+ public void setSupportDeleteViaUI(boolean supportDeleteViaUI){
+ this.supportDeleteViaUIInternal = supportDeleteViaUI;
+ }
+
public String getName() {
return name;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-server/src/main/resources/properties.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json
index 04d32ea..c2545fe 100644
--- a/ambari-server/src/main/resources/properties.json
+++ b/ambari-server/src/main/resources/properties.json
@@ -224,6 +224,7 @@
"StackServices/credential_store_enabled",
"StackServices/credential_store_required",
"StackServices/properties",
+ "StackServices/support_delete_via_ui",
"_"
],
"StackConfiguration":[
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceInfoTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceInfoTest.java
index 1b9296e..c10c243 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceInfoTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceInfoTest.java
@@ -651,6 +651,53 @@ public class ServiceInfoTest {
assertTrue("true".equals(serviceProperties.get(ServiceInfo.DEFAULT_SERVICE_MONITORED_PROPERTY.getKey())));
}
+ @Test
+ public void testSupportDeleteViaUI() throws Exception {
+ //Explicitly set to true
+ String serviceInfoXml =
+ "<metainfo>" +
+ " <schemaVersion>2.0</schemaVersion>" +
+ " <services>" +
+ " <service>" +
+ " <name>HDFS</name>" +
+ " <displayName>HDFS</displayName>" +
+ " <supportDeleteViaUI>true</supportDeleteViaUI>" +
+ " </service>" +
+ " </services>" +
+ "</metainfo>";
+ Map<String, ServiceInfo> serviceInfoMap = getServiceInfo(serviceInfoXml);
+ assertTrue(serviceInfoMap.get("HDFS").isSupportDeleteViaUI());
+
+ //Explicitly set to false
+ serviceInfoXml =
+ "<metainfo>" +
+ " <schemaVersion>2.0</schemaVersion>" +
+ " <services>" +
+ " <service>" +
+ " <name>HDFS</name>" +
+ " <displayName>HDFS</displayName>" +
+ " <supportDeleteViaUI>false</supportDeleteViaUI>" +
+ " </service>" +
+ " </services>" +
+ "</metainfo>";
+ serviceInfoMap = getServiceInfo(serviceInfoXml);
+ assertFalse(serviceInfoMap.get("HDFS").isSupportDeleteViaUI());
+
+ //Default to true
+ serviceInfoXml =
+ "<metainfo>" +
+ " <schemaVersion>2.0</schemaVersion>" +
+ " <services>" +
+ " <service>" +
+ " <name>HDFS</name>" +
+ " <displayName>HDFS</displayName>" +
+ " </service>" +
+ " </services>" +
+ "</metainfo>";
+ serviceInfoMap = getServiceInfo(serviceInfoXml);
+ assertTrue(serviceInfoMap.get("HDFS").isSupportDeleteViaUI());
+ }
+
public static Map<String, ServiceInfo> getServiceInfo(String xml) throws JAXBException {
InputStream configStream = new ByteArrayInputStream(xml.getBytes());
JAXBContext jaxbContext = JAXBContext.newInstance(ServiceMetainfoXml.class);
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-web/app/app.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js
index 9c7d874..e32084c 100644
--- a/ambari-web/app/app.js
+++ b/ambari-web/app/app.js
@@ -304,6 +304,10 @@ module.exports = Em.Application.create({
supportsServiceCheck: function() {
return App.StackService.find().filterProperty('serviceCheckSupported').mapProperty('serviceName');
+ }.property('App.router.clusterController.isLoaded'),
+
+ supportsDeleteViaUI: function() {
+ return App.StackService.find().filterProperty('supportDeleteViaUi').mapProperty('serviceName');
}.property('App.router.clusterController.isLoaded')
}),
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-web/app/mappers/stack_service_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/stack_service_mapper.js b/ambari-web/app/mappers/stack_service_mapper.js
index 4bda89d..8931066 100644
--- a/ambari-web/app/mappers/stack_service_mapper.js
+++ b/ambari-web/app/mappers/stack_service_mapper.js
@@ -40,6 +40,7 @@ App.stackServiceMapper = App.QuickDataMapper.create({
is_service_with_widgets: 'is_service_with_widgets',
required_services: 'required_services',
service_check_supported: 'service_check_supported',
+ support_delete_via_ui: 'support_delete_via_ui',
service_components_key: 'service_components',
service_components_type: 'array',
service_components: {
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-web/app/models/host_component.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/host_component.js b/ambari-web/app/models/host_component.js
index 3950f97..cdcf991 100644
--- a/ambari-web/app/models/host_component.js
+++ b/ambari-web/app/models/host_component.js
@@ -412,7 +412,8 @@ App.HostComponentActionMap = {
action: 'deleteService',
context: ctx.get('serviceName'),
label: Em.I18n.t('services.service.actions.deleteService'),
- cssClass: 'glyphicon glyphicon-remove'
+ cssClass: 'glyphicon glyphicon-remove',
+ isHidden: !App.get('services.supportsDeleteViaUI').contains(ctx.get('serviceName')) //hide the menu item when the service has a custom behavior setting in its metainfo.xml to disallow Delete Services via UI
},
IMMEDIATE_STOP_HAWQ_SERVICE: {
action: 'executeHawqCustomCommand',
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-web/app/models/stack_service.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_service.js b/ambari-web/app/models/stack_service.js
index 4f21288..241f6ab 100644
--- a/ambari-web/app/models/stack_service.js
+++ b/ambari-web/app/models/stack_service.js
@@ -34,6 +34,7 @@ App.StackService = DS.Model.extend({
configTypes: DS.attr('object'),
serviceVersion: DS.attr('string'),
serviceCheckSupported: DS.attr('boolean'),
+ supportDeleteViaUi: DS.attr('boolean'),
stackName: DS.attr('string'),
stackVersion: DS.attr('string'),
selection: DS.attr('string'),
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-web/test/mappers/stack_service_mapper_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mappers/stack_service_mapper_test.js b/ambari-web/test/mappers/stack_service_mapper_test.js
index 9da8b24..88b4b43 100644
--- a/ambari-web/test/mappers/stack_service_mapper_test.js
+++ b/ambari-web/test/mappers/stack_service_mapper_test.js
@@ -36,6 +36,7 @@ describe('App.stackServiceMapper', function () {
"ZOOKEEPER"
],
"service_check_supported" : true,
+ "support_delete_via_ui" : false,
"service_name" : "KAFKA",
"service_version" : "0.8.1.2.2",
"stack_name" : "HDP",
@@ -102,7 +103,8 @@ describe('App.stackServiceMapper', function () {
},
{
"StackServices" : {
- "service_name" : "ZOOKEEPER"
+ "service_name" : "ZOOKEEPER",
+ "support_delete_via_ui" : true
},
"components" : [ ],
"artifacts" : [ ]
@@ -202,6 +204,7 @@ describe('App.stackServiceMapper', function () {
isInstallable: true,
isServiceWithWidgets: false,
serviceCheckSupported: true,
+ supportDeleteViaUi : false,
requiredServices: ["ZOOKEEPER"]
},
componentResult = {
@@ -253,6 +256,8 @@ describe('App.stackServiceMapper', function () {
expect(components.findProperty('componentName', 'DATANODE').get('bulkCommandsMasterComponentName')).to.eql("NAMENODE");
expect(components.findProperty('componentName', 'DATANODE').get('decommissionAllowed')).to.be.true;
expect(components.findProperty('componentName', 'DATANODE').get('reassignAllowed')).to.be.true;
+
+ expect(services.findProperty('serviceName', 'ZOOKEEPER').get('supportDeleteViaUi')).to.be.true;
});
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/784ceeaa/ambari-web/test/views/main/service/item_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/service/item_test.js b/ambari-web/test/views/main/service/item_test.js
index 4b2e6f9..e4a1940 100644
--- a/ambari-web/test/views/main/service/item_test.js
+++ b/ambari-web/test/views/main/service/item_test.js
@@ -144,6 +144,7 @@ describe('App.MainServiceItemView', function () {
{
serviceName: "HDFS",
displayName: "HDFS",
+ supportDeleteViaUi: true,
isSingleNode: true,
serviceTypes: ["HA_MODE"],
slaveComponents: [
@@ -449,6 +450,8 @@ describe('App.MainServiceItemView', function () {
return ["NAMENODE", "SECONDARY_NAMENODE", "APP_TIMELINE_SERVER", "RESOURCEMANAGER", "WEBHCAT_SERVER", "OOZIE_SERVER"];
case 'services.supportsServiceCheck':
return ["HDFS", "MAPREDUCE2", "YARN", "HIVE", "HBASE", "PIG", "SQOOP", "OOZIE", "ZOOKEEPER", "FALCON", "STORM", "FLUME", "SLIDER", "KNOX", "KAFKA"];
+ case 'services.supportsDeleteViaUI':
+ return ["HDFS", "MAPREDUCE2", "YARN", "HIVE", "HBASE", "PIG", "SQOOP", "OOZIE", "ZOOKEEPER", "FALCON", "STORM", "FLUME", "SLIDER", "KNOX", "KAFKA"];
case 'components.addableToHost':
return ["DATANODE", "HDFS_CLIENT", "MAPREDUCE2_CLIENT", "NODEMANAGER", "YARN_CLIENT", "TEZ_CLIENT", "GANGLIA_MONITOR", "HCAT", "HIVE_CLIENT", "HIVE_METASTORE", "HIVE_SERVER", "WEBHCAT_SERVER", "HBASE_CLIENT", "HBASE_MASTER", "HBASE_REGIONSERVER", "PIG", "SQOOP", "OOZIE_CLIENT", "OOZIE_SERVER", "ZOOKEEPER_CLIENT", "ZOOKEEPER_SERVER", "FALCON_CLIENT", "SUPERVISOR", "FLUME_HANDLER", "METRICS_MONITOR", "KAFKA_BROKER", "KERBEROS_CLIENT", "KNOX_GATEWAY", "SLIDER", "SPARK_CLIENT"];
case 'allHostNames.length':