提交 e9459a21 编写于 作者: N nobodyiam

allow user to delete private namespace

上级 0c4069f9
......@@ -74,26 +74,22 @@ public class NamespaceService {
@Transactional
public void deleteNamespace(String appId, Env env, String clusterName, String namespaceName) {
//1. check private namespace
AppNamespace appNamespace = appNamespaceService.findByAppIdAndName(appId, namespaceName);
if (appNamespace != null && !appNamespace.isPublic()) {
throw new BadRequestException("Private namespace can not be deleted");
}
//2. check parent namespace has not instances
//1. check parent namespace has not instances
if (namespaceHasInstances(appId, env, clusterName, namespaceName)) {
throw new BadRequestException("Can not delete namespace because namespace has active instances");
}
//3. check child namespace has not instances
//2. check child namespace has not instances
NamespaceDTO childNamespace = branchService.findBranchBaseInfo(appId, env, clusterName, namespaceName);
if (childNamespace != null &&
namespaceHasInstances(appId, env, childNamespace.getClusterName(), namespaceName)) {
throw new BadRequestException("Can not delete namespace because namespace's branch has active instances");
}
//4. check public namespace has not associated namespace
if (appNamespace != null && publicAppNamespaceHasAssociatedNamespace(namespaceName, env)) {
//3. check public namespace has not associated namespace
if (appNamespace != null && appNamespace.isPublic() && publicAppNamespaceHasAssociatedNamespace(namespaceName, env)) {
throw new BadRequestException("Can not delete public namespace which has associated namespaces");
}
......
......@@ -288,8 +288,7 @@
apollo-detail="'发现有 <b>' + deleteNamespaceContext.namespace.instancesCount +
'</b> 个实例正在使用Namespace(' + deleteNamespaceContext.namespace.baseInfo.namespaceName +
'),删除Namespace将导致实例获取不到配置。<br>
请到 <ins>“实例列表”</ins> 确认实例信息,如已确认删除Namespace将不会导致实例异常,
请联系Apollo相关负责人删除Namespace'"
请到 <ins>“实例列表”</ins> 确认实例信息,如确认相关实例都已经不再使用该Namespace配置,可以联系Apollo相关负责人删除实例信息(InstanceConfig)或等待实例24小时自动过期后再来删除。'"
apollo-confirm="continueDeleteNamespace">
</apolloconfirmdialog>
......@@ -298,8 +297,7 @@
apollo-detail="'发现有 <b>' + deleteNamespaceContext.namespace.branch.latestReleaseInstances.total
+ '</b> 个实例正在使用Namespace(' + deleteNamespaceContext.namespace.baseInfo.namespaceName +
')灰度版本的配置,删除Namespace将导致实例获取不到配置。<br>
请到 <ins>“灰度版本” => “实例列表”</ins> 确认实例信息,如已确认删除Namespace将不会导致实例异常,
请联系Apollo相关负责人删除Namespace'"
请到 <ins>“灰度版本” => “实例列表”</ins> 确认实例信息,如确认相关实例都已经不再使用该Namespace配置,可以联系Apollo相关负责人删除实例信息(InstanceConfig)或等待实例24小时自动过期后再来删除。'"
apollo-confirm="continueDeleteNamespace">
</apolloconfirmdialog>
......
......@@ -18,25 +18,20 @@ function deleteNamespaceModalDirective($window, $q, toastr, AppUtil, EventManage
var toDeleteNamespace = context.namespace;
scope.toDeleteNamespace = toDeleteNamespace;
//1. check namespace is not private
if (!checkNotPrivateNamespace(toDeleteNamespace)) {
return;
}
//2. check operator has master permission
//1. check operator has master permission
checkPermission(toDeleteNamespace).then(function () {
//3. check namespace's master branch has not instances
//2. check namespace's master branch has not instances
if (!checkMasterInstance(toDeleteNamespace)) {
return;
}
//4. check namespace's gray branch has not instances
//3. check namespace's gray branch has not instances
if (!checkBranchInstance(toDeleteNamespace)) {
return;
}
if (toDeleteNamespace.isLinkedNamespace) {
if (!toDeleteNamespace.isPublic || toDeleteNamespace.isLinkedNamespace) {
showDeleteNamespaceConfirmDialog();
} else {
//5. check public namespace has not associated namespace
......@@ -48,15 +43,6 @@ function deleteNamespaceModalDirective($window, $q, toastr, AppUtil, EventManage
});
function checkNotPrivateNamespace(namespace) {
if (!namespace.isPublic) {
toastr.error("不能删除私有的Namespace", "删除失败");
return false;
}
return true;
}
function checkPermission(namespace) {
var d = $q.defer();
......@@ -153,7 +139,6 @@ function deleteNamespaceModalDirective($window, $q, toastr, AppUtil, EventManage
function showDeleteNamespaceConfirmDialog() {
AppUtil.showModal('#deleteNamespaceModal');
}
function doDeleteNamespace() {
......
......@@ -8,9 +8,12 @@
删除Namespace
</h4>
</div>
<div class="modal-body form-horizontal">
<div class="modal-body form-horizontal" ng-show="toDeleteNamespace.isPublic">
删除Namespace将导致实例获取不到此Namespace的配置,确定要删除吗?
</div>
<div class="modal-body form-horizontal" ng-show="!toDeleteNamespace.isPublic">
删除私有Namespace将导致实例获取不到此Namespace的配置,而且无法在当前集群重新创建该Namespace(除非使用管理员工具把所有环境的AppNamespace删除后重建),确定要删除吗?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">
取消
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册