diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java index 3cee148f759b..b12412561d07 100755 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java @@ -63,6 +63,10 @@ public Long getId() { return id; } + public void setId(Long id) { + this.id = id; + } + public Long getZoneId() { return zoneId; } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java index bb7f7a441b68..84de80e7d5bb 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -179,14 +179,26 @@ public String getDisplayText() { return displayText; } + public void setDisplayText(String displayText) { + this.displayText = displayText; + } + public String getFormat() { return format; } + public void setFormat(String format) { + this.format = format; + } + public String getHypervisor() { return hypervisor; } + public void setHypervisor(String hypervisor) { + this.hypervisor = hypervisor; + } + public Boolean isFeatured() { return featured; } @@ -195,14 +207,26 @@ public Boolean isPublic() { return publicTemplate; } + public void setPublic(Boolean publicTemplate) { + this.publicTemplate = publicTemplate; + } + public String getTemplateName() { return templateName; } + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + public Long getOsTypeId() { return osTypeId; } + public void setOsTypeId(Long osTypeId) { + this.osTypeId = osTypeId; + } + public Boolean isPasswordEnabled() { return passwordEnabled; } @@ -223,6 +247,10 @@ public String getUrl() { return url; } + public void setUrl(String url) { + this.url = url; + } + public List getZoneIds() { // This function will return null when the zoneId //is -1 which means all zones. @@ -245,10 +273,18 @@ public Long getDomainId() { return domainId; } + public void setDomainId(Long domainId) { + this.domainId = domainId; + } + public String getAccountName() { return accountName; } + public void setAccountName(String accountName) { + this.accountName = accountName; + } + public String getChecksum() { return checksum; } @@ -257,6 +293,14 @@ public String getTemplateTag() { return templateTag; } + public Long getZoneId() { + return zoneId; + } + + public void setZoneId(Long zoneId) { + this.zoneId = zoneId; + } + public Map getDetails() { if (details == null || details.isEmpty()) { return null; diff --git a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopControllerVersionVO.java b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopControllerVersionVO.java index 1ef7e062d5ae..8d6f573a14a3 100644 --- a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopControllerVersionVO.java +++ b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopControllerVersionVO.java @@ -68,7 +68,7 @@ public DesktopControllerVersionVO() { this.uuid = UUID.randomUUID().toString(); } - public DesktopControllerVersionVO(String name, String version, String description, long templateId, Long zoneId) { + public DesktopControllerVersionVO(String name, String version, String description, Long zoneId) { this.uuid = UUID.randomUUID().toString(); this.name = name; this.description = description; diff --git a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopTemplateMapVO.java b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopTemplateMapVO.java index 6608eaf1593f..d57b2ab5df43 100644 --- a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopTemplateMapVO.java +++ b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopTemplateMapVO.java @@ -28,6 +28,17 @@ @Table(name = "desktop_template_map") public class DesktopTemplateMapVO implements DesktopTemplateMap { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + long id; + + @Column(name = "version_id") + long versionId; + + @Column(name = "template_id") + long templateId; + @Override public long getId() { return id; @@ -36,11 +47,9 @@ public long getId() { @Override public long getVersionId() { return versionId; - } public void setVersionId(long versionId) { - this.versionId = versionId; } @@ -50,23 +59,10 @@ public long getTemplateId() { } public void setTemplateId(long templateId) { - this.templateId = templateId; } - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - long id; - - @Column(name = "version_id") - long versionId; - - @Column(name = "template_id") - long templateId; - public DesktopTemplateMapVO() { - } public DesktopTemplateMapVO(long versionId, long templateId) { diff --git a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionEventTypes.java b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionEventTypes.java index 6ba8b623d043..749ccd91c46c 100644 --- a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionEventTypes.java +++ b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionEventTypes.java @@ -18,4 +18,7 @@ package com.cloud.desktop.version; public class DesktopVersionEventTypes { + public static final String EVENT_DESKTOP_CONTROLLER_VERSION_ADD = "DESKTOP.CONTROL.VERSION.ADD"; + public static final String EVENT_DESKTOP_CONTROLLER_VERSION_DELETE = "DESKTOP.CONTROL.VERSION.DELETE"; + public static final String EVENT_DESKTOP_CONTROLLER_VERSION_UPDATE = "DESKTOP.CONTROL.VERSION.UPDATE"; } diff --git a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionManagerImpl.java b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionManagerImpl.java index de5300c4101a..6c07c7ee0c10 100644 --- a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionManagerImpl.java +++ b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionManagerImpl.java @@ -17,13 +17,17 @@ package com.cloud.desktop.version; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; - import javax.inject.Inject; +import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ResponseObject.ResponseView; +import org.apache.cloudstack.api.command.admin.desktop.AddDesktopControllerVersionCmd; +import org.apache.cloudstack.api.command.admin.desktop.DeleteDesktopControllerVersionCmd; +import org.apache.cloudstack.api.command.admin.desktop.UpdateDesktopControllerVersionCmd; import org.apache.cloudstack.api.command.user.desktop.version.ListDesktopControllerVersionsCmd; import org.apache.cloudstack.api.command.user.desktop.version.ListDesktopMasterVersionsCmd; import org.apache.cloudstack.api.response.DesktopControllerVersionResponse; @@ -32,24 +36,38 @@ import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.context.CallContext; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiConstants.DomainDetails; +import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; +import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd; import com.cloud.api.ApiDBUtils; -import org.apache.cloudstack.api.ApiConstants.DomainDetails; import com.cloud.api.query.dao.TemplateJoinDao; import com.cloud.api.query.vo.TemplateJoinVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.desktop.cluster.DesktopClusterService; +import com.cloud.desktop.cluster.DesktopClusterVO; +import com.cloud.desktop.cluster.dao.DesktopClusterDao; import com.cloud.desktop.version.dao.DesktopControllerVersionDao; import com.cloud.desktop.version.dao.DesktopMasterVersionDao; import com.cloud.desktop.version.dao.DesktopTemplateMapDao; import com.cloud.utils.component.ManagerBase; import com.cloud.user.Account; import com.cloud.user.AccountService; +import com.cloud.user.AccountManager; +import com.cloud.storage.VMTemplateVO; import com.cloud.utils.db.Filter; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.component.ComponentContext; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.event.ActionEvent; +import com.cloud.storage.dao.VMTemplateDao; +import com.google.common.base.Strings; +import com.cloud.template.TemplateApiService; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.InvalidParameterValueException; public class DesktopVersionManagerImpl extends ManagerBase implements DesktopVersionService { public static final Logger LOGGER = Logger.getLogger(DesktopVersionManagerImpl.class.getName()); @@ -61,11 +79,19 @@ public class DesktopVersionManagerImpl extends ManagerBase implements DesktopVer @Inject private TemplateJoinDao templateJoinDao; @Inject - public DesktopTemplateMapDao desktopTemplateMapDao; + private DesktopTemplateMapDao desktopTemplateMapDao; @Inject private DataCenterDao dataCenterDao; @Inject protected AccountService accountService; + @Inject + private TemplateApiService templateService; + @Inject + private VMTemplateDao templateDao; + @Inject + private AccountManager accountManager; + @Inject + private DesktopClusterDao desktopClusterDao; private DesktopControllerVersionResponse createDesktopControllerVersionResponse(final DesktopControllerVersion desktopControllerVersion) { DesktopControllerVersionResponse response = new DesktopControllerVersionResponse(); @@ -113,6 +139,131 @@ private ListResponse createDesktopControllerVe return response; } + @Override + @ActionEvent(eventType = DesktopVersionEventTypes.EVENT_DESKTOP_CONTROLLER_VERSION_ADD, eventDescription = "Adding Desktop controller version") + public DesktopControllerVersionResponse addDesktopControllerVersion(final AddDesktopControllerVersionCmd cmd) { + if (!DesktopClusterService.DesktopServiceEnabled.value()) { + throw new CloudRuntimeException("Desktop Service plugin is disabled"); + } + final String format = cmd.getFormat(); + final String hypervisor = cmd.getHypervisor(); + final String versionName = cmd.getControllerVersionName(); + final String description = cmd.getDescription(); + final String controllerVersion = cmd.getControllerVersion(); + final Long zoneId = cmd.getZoneId(); + final String dcUrl = cmd.getDcUrl(); + final String worksUrl = cmd.getWorksUrl(); + final Long dcOsTypeId = cmd.getDcOsType(); + final Long worksOsTypeId = cmd.getWorksOsType(); + String templateName = ""; + + if (compareVersions(controllerVersion, MIN_DESKTOP_CONTOLLER_VERSION) < 0) { + throw new InvalidParameterValueException(String.format("New desktop controller version cannot be added as %s is minimum version supported by Desktop Service", MIN_DESKTOP_CONTOLLER_VERSION)); + } + if (zoneId != null && dataCenterDao.findById(zoneId) == null) { + throw new InvalidParameterValueException("Invalid zone specified"); + } + if (Strings.isNullOrEmpty(dcUrl)) { + throw new InvalidParameterValueException(String.format("Invalid DC URL for template specified, %s", dcUrl)); + } + if (Strings.isNullOrEmpty(worksUrl)) { + throw new InvalidParameterValueException(String.format("Invalid Works URL for template specified, %s", worksUrl)); + } + + if (Strings.isNullOrEmpty(versionName)) { + throw new InvalidParameterValueException(String.format("Invalid VersionName for template specified, %s", versionName)); + } + + VMTemplateVO template = null; + DesktopControllerVersionVO desktopControllerVersionVO = null; + VirtualMachineTemplate vmTemplate = null; + try { + + //desktop_controller_version 테이블에 버전 추가 + desktopControllerVersionVO = new DesktopControllerVersionVO(versionName, controllerVersion, description, zoneId); + desktopControllerVersionVO = desktopControllerVersionDao.persist(desktopControllerVersionVO); + + //vm_template 테이블에 dc 템플릿 추가 + templateName = String.format("%s(Desktop Controller DC-Template)", versionName); + vmTemplate = registerDesktopTemplateVersion(zoneId, templateName, dcUrl, hypervisor, dcOsTypeId, format); + template = templateDao.findById(vmTemplate.getId()); + + //desktop_template_map 테이블에 DC template 매핑 데이터 추가 + desktopTemplateMapDao.persist(new DesktopTemplateMapVO(desktopControllerVersionVO.getId(), template.getId())); + + //vm_template 테이블에 works 템플릿 추가 + templateName = String.format("%s(Desktop Controller Works-Template)", versionName); + vmTemplate = registerDesktopTemplateVersion(zoneId, templateName, worksUrl, hypervisor ,worksOsTypeId ,format); + template = templateDao.findById(vmTemplate.getId()); + + //desktop_template_map 테이블에 works template 매핑 데이터 추가 + desktopTemplateMapDao.persist(new DesktopTemplateMapVO(desktopControllerVersionVO.getId(), template.getId())); + + } catch (URISyntaxException | IllegalAccessException | NoSuchFieldException | IllegalArgumentException | ResourceAllocationException ex) { + LOGGER.error(String.format("Unable to register template for desktop controller version, %s, with url: %s", templateName, dcUrl), ex); + throw new CloudRuntimeException(String.format("Unable to register template for desktop controller version, %s, with url: %s", templateName, dcUrl)); + } + + return createDesktopControllerVersionResponse(desktopControllerVersionVO); + } + + + private VirtualMachineTemplate registerDesktopTemplateVersion(final Long zoneId, final String templateName, final String url, final String hypervisor, final Long osTypeId, final String format)throws IllegalAccessException, NoSuchFieldException, + IllegalArgumentException, ResourceAllocationException, URISyntaxException { + RegisterTemplateCmd registerTemplateCmd = new RegisterTemplateCmd(); + registerTemplateCmd = ComponentContext.inject(registerTemplateCmd); + registerTemplateCmd.setTemplateName(templateName); + registerTemplateCmd.setHypervisor(hypervisor); + registerTemplateCmd.setFormat(format); + registerTemplateCmd.setPublic(true); + registerTemplateCmd.setOsTypeId(osTypeId); + if (zoneId != null) { + registerTemplateCmd.setZoneId(zoneId); + } + registerTemplateCmd.setDisplayText(templateName); + registerTemplateCmd.setUrl(url); + registerTemplateCmd.setAccountName(accountManager.getSystemAccount().getAccountName()); + registerTemplateCmd.setDomainId(accountManager.getSystemAccount().getDomainId()); + return templateService.registerTemplate(registerTemplateCmd); + } + + public static int compareVersions(String v1, String v2) throws IllegalArgumentException { + if (Strings.isNullOrEmpty(v1) || Strings.isNullOrEmpty(v2)) { + throw new IllegalArgumentException(String.format("Invalid version comparision with versions %s, %s", v1, v2)); + } + if(!isSemanticVersion(v1)) { + throw new IllegalArgumentException(String.format("Invalid version format, %s. Semantic version should be specified in MAJOR.MINOR.PATCH format", v1)); + } + if(!isSemanticVersion(v2)) { + throw new IllegalArgumentException(String.format("Invalid version format, %s. Semantic version should be specified in MAJOR.MINOR.PATCH format", v2)); + } + String[] thisParts = v1.split("\\."); + String[] thatParts = v2.split("\\."); + int length = Math.max(thisParts.length, thatParts.length); + for(int i = 0; i < length; i++) { + int thisPart = i < thisParts.length ? + Integer.parseInt(thisParts[i]) : 0; + int thatPart = i < thatParts.length ? + Integer.parseInt(thatParts[i]) : 0; + if(thisPart < thatPart) + return -1; + if(thisPart > thatPart) + return 1; + } + return 0; + } + + private static boolean isSemanticVersion(final String version) { + if(!version.matches("[0-9]+(\\.[0-9]+)*")) { + return false; + } + String[] parts = version.split("\\."); + if (parts.length < 3) { + return false; + } + return true; + } + @Override public ListResponse listDesktopControllerVersions(final ListDesktopControllerVersionsCmd cmd) { if (!DesktopClusterService.DesktopServiceEnabled.value()) { @@ -208,6 +359,83 @@ public ListResponse listDesktopMasterVersions(fina return createDesktopMasterVersionListResponse(versions); } + @Override + @ActionEvent(eventType = DesktopVersionEventTypes.EVENT_DESKTOP_CONTROLLER_VERSION_DELETE, eventDescription = "Deleting Desktop Controller Version", async = true) + public boolean deleteDesktopContollerVersion(final DeleteDesktopControllerVersionCmd cmd) { + if (!DesktopClusterService.DesktopServiceEnabled.value()) { + throw new CloudRuntimeException("Desktop Service plugin is disabled"); + } + final Long versionId = cmd.getId(); + DesktopControllerVersion version = desktopControllerVersionDao.findById(versionId); + if (version == null) { + throw new InvalidParameterValueException("Invalid desktop controller version id specified"); + } + List clusters = desktopClusterDao.listAllByDesktopVersion(versionId); + if (clusters.size() > 0) { + throw new CloudRuntimeException(String.format("Unable to delete desktop controller version ID: %s. Existing clusters currently using the version.", version.getUuid())); + } + + List templateList = desktopTemplateMapDao.listByVersionId(versionId); + + VMTemplateVO template = null; + + if (templateList != null && !templateList.isEmpty()) { + for (DesktopTemplateMapVO templateMapVO : templateList) { + template = templateDao.findByIdIncludingRemoved(templateMapVO.getTemplateId()); + if (template == null) { + LOGGER.warn(String.format("Unable to find template associated with supported desktop controller version ID: %s", version.getUuid())); + } + if (template != null && template.getRemoved() == null) { // Delete Templates + try { + deleteDesktopControllerVersionTemplate(template.getId()); + } catch (IllegalAccessException | NoSuchFieldException | IllegalArgumentException ex) { + LOGGER.error(String.format("Unable to delete ID: %s associated with supported desktop controller version ID: %s", template.getUuid(), version.getUuid()), ex); + throw new CloudRuntimeException(String.format("Unable to delete ID: %s associated with supported desktop controller version ID: %s", template.getUuid(), version.getUuid())); + } + } + } + }else{ + LOGGER.info("There are no registered templates for that desktop controller version."); + //throw new CloudRuntimeException(String.format("There are no registered templates for that desktop controller version.", version.getUuid())); + } + return desktopControllerVersionDao.remove(version.getId()); + } + + private void deleteDesktopControllerVersionTemplate(long templateId) throws IllegalAccessException, NoSuchFieldException, IllegalArgumentException { + DeleteTemplateCmd deleteTemplateCmd = new DeleteTemplateCmd(); + deleteTemplateCmd = ComponentContext.inject(deleteTemplateCmd); + deleteTemplateCmd.setId(templateId); + templateService.deleteTemplate(deleteTemplateCmd); + } + + @Override + @ActionEvent(eventType = DesktopVersionEventTypes.EVENT_DESKTOP_CONTROLLER_VERSION_UPDATE, eventDescription = "Updating desktop controller version") + public DesktopControllerVersionResponse updateDesktopControllerVersion(final UpdateDesktopControllerVersionCmd cmd) { + if (!DesktopClusterService.DesktopServiceEnabled.value()) { + throw new CloudRuntimeException("Desktop Service plugin is disabled"); + } + final Long versionId = cmd.getId(); + DesktopControllerVersion.State state = null; + DesktopControllerVersionVO version = desktopControllerVersionDao.findById(versionId); + if (version == null) { + throw new InvalidParameterValueException("Invalid desktop controller version id specified"); + } + try { + state = DesktopControllerVersion.State.valueOf(cmd.getState()); + } catch (IllegalArgumentException iae) { + throw new InvalidParameterValueException(String.format("Invalid value for %s parameter", ApiConstants.STATE)); + } + if (!state.equals(version.getState())) { + version = desktopControllerVersionDao.createForUpdate(version.getId()); + version.setState(state); + if (!desktopControllerVersionDao.update(version.getId(), version)) { + throw new CloudRuntimeException(String.format("Failed to update desktop controller version ID: %s", version.getUuid())); + } + version = desktopControllerVersionDao.findById(versionId); + } + return createDesktopControllerVersionResponse(version); + } + @Override public List> getCommands() { List> cmdList = new ArrayList>(); @@ -216,6 +444,9 @@ public List> getCommands() { } cmdList.add(ListDesktopControllerVersionsCmd.class); cmdList.add(ListDesktopMasterVersionsCmd.class); + cmdList.add(AddDesktopControllerVersionCmd.class); + cmdList.add(DeleteDesktopControllerVersionCmd.class); + cmdList.add(UpdateDesktopControllerVersionCmd.class); return cmdList; } -} +} \ No newline at end of file diff --git a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionService.java b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionService.java index e50b19d52d40..694e86141776 100644 --- a/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionService.java +++ b/plugins/integrations/desktop-service/src/main/java/com/cloud/desktop/version/DesktopVersionService.java @@ -17,6 +17,9 @@ package com.cloud.desktop.version; +import org.apache.cloudstack.api.command.admin.desktop.AddDesktopControllerVersionCmd; +import org.apache.cloudstack.api.command.admin.desktop.DeleteDesktopControllerVersionCmd; +import org.apache.cloudstack.api.command.admin.desktop.UpdateDesktopControllerVersionCmd; import org.apache.cloudstack.api.command.user.desktop.version.ListDesktopControllerVersionsCmd; import org.apache.cloudstack.api.command.user.desktop.version.ListDesktopMasterVersionsCmd; import org.apache.cloudstack.api.response.DesktopControllerVersionResponse; @@ -24,9 +27,13 @@ import org.apache.cloudstack.api.response.ListResponse; import com.cloud.utils.component.PluggableService; +import com.cloud.utils.exception.CloudRuntimeException; public interface DesktopVersionService extends PluggableService { + static final String MIN_DESKTOP_CONTOLLER_VERSION = "1.0.0"; ListResponse listDesktopControllerVersions(ListDesktopControllerVersionsCmd cmd); ListResponse listDesktopMasterVersions(ListDesktopMasterVersionsCmd cmd); -} - + DesktopControllerVersionResponse addDesktopControllerVersion(AddDesktopControllerVersionCmd cmd); + boolean deleteDesktopContollerVersion(DeleteDesktopControllerVersionCmd cmd) throws CloudRuntimeException; + DesktopControllerVersionResponse updateDesktopControllerVersion(UpdateDesktopControllerVersionCmd cmd) throws CloudRuntimeException; +} \ No newline at end of file diff --git a/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/command/admin/desktop/AddDesktopControllerVersionCmd.java b/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/command/admin/desktop/AddDesktopControllerVersionCmd.java new file mode 100644 index 000000000000..7fb8f1069fb6 --- /dev/null +++ b/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/command/admin/desktop/AddDesktopControllerVersionCmd.java @@ -0,0 +1,173 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.api.command.admin.desktop; + +import javax.inject.Inject; + +import org.apache.cloudstack.acl.RoleType; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.command.admin.AdminCmd; +import org.apache.cloudstack.api.response.DesktopControllerVersionResponse; +import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.cloudstack.api.response.GuestOSResponse; +import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.desktop.version.DesktopControllerVersion; +import com.cloud.desktop.version.DesktopVersionService; +import com.cloud.utils.exception.CloudRuntimeException; + + +@APICommand(name = AddDesktopControllerVersionCmd.APINAME, + description = "Add a Desktop Controller Version", + responseObject = DesktopControllerVersionResponse.class, + responseView = ResponseObject.ResponseView.Full, + entityType = {DesktopControllerVersion.class}, + authorized = {RoleType.Admin}) +public class AddDesktopControllerVersionCmd extends BaseCmd implements AdminCmd { + public static final Logger LOGGER = Logger.getLogger(AddDesktopControllerVersionCmd.class.getName()); + public static final String APINAME = "addDesktopControllerVersion"; + + @Inject + private DesktopVersionService desktopVersionService; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + @Parameter(name = ApiConstants.FORMAT, type = CommandType.STRING, required = true, + description = "the format for the template. Possible values include QCOW2") + private String format; + + @Parameter(name = ApiConstants.HYPERVISOR, type = CommandType.STRING, required = true, + description = "the target hypervisor for the template") + protected String hypervisor; + + @Parameter(name = ApiConstants.DESKTOP_CONTROLLER_VERSION_NAME, type = CommandType.STRING, + description = "the name of the desktop controller version") + private String controllerVersionName; + + @Parameter(name = ApiConstants.DESCRIPTION, type = CommandType.STRING, + description = "the name of the desktop controller version") + private String description; + + @Parameter(name = ApiConstants.DESKTOP_CONTROLLER_VERSION, type = CommandType.STRING, required = true, + description = "the desktop controller version.") + private String controllerVersion; + + @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, + description = "the ID of the zone in which desktop controller version will be available") + private Long zoneId; + + @Parameter(name = ApiConstants.DESKTOP_CONTROLLER_VERSION_DC_URL, type = CommandType.STRING, + description = "the URL of the dcvm template for desktop controller version") + private String dcUrl; + + @Parameter(name = ApiConstants.DESKTOP_CONTROLLER_VERSION_WORKS_URL, type = CommandType.STRING, + description = "the URL of the worksvm template for desktop controller version") + private String worksUrl; + + @Parameter(name = ApiConstants.DESKTOP_CONTROLLER_VERSION_DC_OSTYPE, + type = CommandType.UUID, + entityType = GuestOSResponse.class, + description = "the ID of the OS Type that best represents the OS of this template. Not applicable with VMware, as we honour what is defined in the template") + private Long dcOsType; + + @Parameter(name = ApiConstants.DESKTOP_CONTROLLER_VERSION_WORKS_OSTYPE, + type = CommandType.UUID, + entityType = GuestOSResponse.class, + description = "the ID of the OS Type that best represents the OS of this template. Not applicable with VMware, as we honour what is defined in the template") + private Long worksOsType; + + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + public String getFormat() { + return format; + } + + public String getHypervisor() { + return hypervisor; + } + + public String getControllerVersionName() { + return controllerVersionName; + } + + public String getDescription() { + return description; + } + + public String getControllerVersion() { + return controllerVersion; + } + + public Long getZoneId() { + return zoneId; + } + + public String getDcUrl() { + return dcUrl; + } + + public String getWorksUrl() { + return worksUrl; + } + + public Long getDcOsType() { + return dcOsType; + } + + public Long getWorksOsType() { + return worksOsType; + } + + @Override + public String getCommandName() { + return APINAME.toLowerCase() + "response"; + } + + @Override + public long getEntityOwnerId() { + return CallContext.current().getCallingAccountId(); + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + @Override + public void execute() throws ServerApiException, ConcurrentOperationException { + try { + DesktopControllerVersionResponse response = desktopVersionService.addDesktopControllerVersion(this); + if (response == null) { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to Add Desktop Controller Version."); + } + response.setResponseName(getCommandName()); + setResponseObject(response); + } catch (CloudRuntimeException ex) { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); + } + } +} diff --git a/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/command/admin/desktop/DeleteDesktopControllerVersionCmd.java b/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/command/admin/desktop/DeleteDesktopControllerVersionCmd.java new file mode 100644 index 000000000000..b6392313c91a --- /dev/null +++ b/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/command/admin/desktop/DeleteDesktopControllerVersionCmd.java @@ -0,0 +1,111 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.api.command.admin.desktop; + +import javax.inject.Inject; + +import org.apache.cloudstack.acl.RoleType; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.command.admin.AdminCmd; +import org.apache.cloudstack.api.response.DesktopControllerVersionResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.desktop.version.DesktopControllerVersion; +import com.cloud.desktop.version.DesktopVersionEventTypes; +import com.cloud.desktop.version.DesktopVersionService; +import com.cloud.utils.exception.CloudRuntimeException; + +@APICommand(name = DeleteDesktopControllerVersionCmd.APINAME, + description = "Delete a Desktop Controller Version", + responseObject = SuccessResponse.class, + entityType = {DesktopControllerVersion.class}, + authorized = {RoleType.Admin}) +public class DeleteDesktopControllerVersionCmd extends BaseAsyncCmd implements AdminCmd { + public static final Logger LOGGER = Logger.getLogger(DeleteDesktopControllerVersionCmd.class.getName()); + public static final String APINAME = "deleteDesktopControllerVersion"; + + @Inject + private DesktopVersionService desktopVersionService; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, + entityType = DesktopControllerVersionResponse.class, + description = "the ID of the Desktop Controller Version", + required = true) + private Long id; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + public Long getId() { + return id; + } + + @Override + public String getCommandName() { + return APINAME.toLowerCase() + "response"; + } + + @Override + public long getEntityOwnerId() { + return CallContext.current().getCallingAccountId(); + } + + @Override + public String getEventType() { + return DesktopVersionEventTypes.EVENT_DESKTOP_CONTROLLER_VERSION_DELETE; + } + + @Override + public String getEventDescription() { + String description = "Deleting Desktop Contoller Version"; + DesktopControllerVersion version = _entityMgr.findById(DesktopControllerVersion.class, getId()); + if (version != null) { + description += String.format(" ID: %s", version.getUuid()); + } else { + description += String.format(" ID: %d", getId()); + } + return description; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + @Override + public void execute() throws ServerApiException, ConcurrentOperationException { + try { + if (!desktopVersionService.deleteDesktopContollerVersion(this)) { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, String.format("Failed to delete desktop controller version ID: %d", getId())); + } + SuccessResponse response = new SuccessResponse(getCommandName()); + setResponseObject(response); + } catch (CloudRuntimeException ex) { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); + } + } +} diff --git a/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/command/admin/desktop/UpdateDesktopControllerVersionCmd.java b/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/command/admin/desktop/UpdateDesktopControllerVersionCmd.java new file mode 100644 index 000000000000..bc54baba8ae3 --- /dev/null +++ b/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/command/admin/desktop/UpdateDesktopControllerVersionCmd.java @@ -0,0 +1,103 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.api.command.admin.desktop; + +import javax.inject.Inject; + +import org.apache.cloudstack.acl.RoleType; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ResponseObject; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.command.admin.AdminCmd; +import org.apache.cloudstack.api.response.DesktopControllerVersionResponse; +import org.apache.log4j.Logger; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.desktop.version.DesktopControllerVersion; +import com.cloud.desktop.version.DesktopVersionService; + +@APICommand(name = UpdateDesktopControllerVersionCmd.APINAME, + description = "Update a desktop controller version", + responseObject = DesktopControllerVersionResponse.class, + responseView = ResponseObject.ResponseView.Full, + entityType = {DesktopControllerVersion.class}, + authorized = {RoleType.Admin}) +public class UpdateDesktopControllerVersionCmd extends BaseCmd implements AdminCmd { + public static final Logger LOGGER = Logger.getLogger(UpdateDesktopControllerVersionCmd.class.getName()); + public static final String APINAME = "updateDesktopControllerVersion"; + + @Inject + private DesktopVersionService desktopVersionService; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + @Parameter(name = ApiConstants.ID, type = BaseCmd.CommandType.UUID, + entityType = DesktopControllerVersionResponse.class, + description = "the ID of the desktop controller version", + required = true) + private Long id; + + @Parameter(name = ApiConstants.STATE, type = CommandType.STRING, + description = "the enabled or disabled state of the desktop controller version", + required = true) + private String state; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + public Long getId() { + return id; + } + + public String getState() { + return state; + } + + @Override + public String getCommandName() { + return APINAME.toLowerCase() + "response"; + } + + @Override + public long getEntityOwnerId() { + return 0; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + @Override + public void execute() throws ServerApiException, ConcurrentOperationException { + try { + DesktopControllerVersionResponse response = desktopVersionService.updateDesktopControllerVersion(this); + if (response == null) { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update desktop conroller version"); + } + response.setResponseName(getCommandName()); + setResponseObject(response); + } catch (CloudRuntimeException ex) { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); + } + } +} \ No newline at end of file diff --git a/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/response/DesktopClusterResponse.java b/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/response/DesktopClusterResponse.java index aba2fe99eaa1..4a49b625de6a 100644 --- a/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/response/DesktopClusterResponse.java +++ b/plugins/integrations/desktop-service/src/main/java/org/apache/cloudstack/api/response/DesktopClusterResponse.java @@ -69,11 +69,11 @@ public class DesktopClusterResponse extends BaseResponse implements ControlledEn @Param(description = "the name of the network of the Desktop Cluster") private String associatedNetworkName; - @SerializedName(ApiConstants.CONTROLLER_VERSION) + @SerializedName(ApiConstants.DESKTOP_CONTROLLER_VERSION) @Param(description = "the Controller version for the Desktop Cluster") private String controllerVersion; - @SerializedName(ApiConstants.CONTROLLER_VERSION_NAME) + @SerializedName(ApiConstants.DESKTOP_CONTROLLER_VERSION_NAME) @Param(description = "the name of the Controller version for the Desktop Cluster") private String controllerVersionName; diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 34a6b3ece435..b22f5fb3bcf5 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -3370,8 +3370,8 @@ "label.desktop.cluster.delete": "Delete Desktop Cluster", "label.desktop.controller.template.version": "Controller Template Version", "label.desktop.controller.template.version.create": "Create Controller Template Version", -"label.desktop.controller.version.manage": "Whether to use a Controller Template", -"label.desktop.controller.version.delete": "Delete Controller Template", +"label.desktop.controller.version.manage": "Whether to use a Controller Template Version", +"label.desktop.controller.version.delete": "Delete Controller Template Version", "label.desktop.master.template.version": "Master Template Version", "label.desktop.master.template.version.create": "Create Master Template Version", "label.desktop.master.version.manage": "Whether to use a Master Template", @@ -3427,6 +3427,8 @@ "message.desktop.controller.version.delete": "Are you sure you want to delete this Controller Template Version?", "message.desktop.master.veresion.delete": "Are you sure you want to delete this Master Template Version?", "message.desktop.cluster.add.ip.range": "Enter the IP ranges you want to add to this Desktop Cluster.", +"message.success.register.contoller.template.version": "A new controller template version has been registered.", +"message.success.update.desktop.controller.version": "Updated status value for desktop controller version.", "message.success.add.desktop.ip": "Successfully added desktop cluster ip range", "message.add.desktop.ip.failed": "Adding desktop cluster ip range failed", "message.add.desktop.ip.processing": "Adding desktop cluster ip range..." diff --git a/ui/public/locales/ko_KR.json b/ui/public/locales/ko_KR.json index 206648a44346..2f2a3515038e 100644 --- a/ui/public/locales/ko_KR.json +++ b/ui/public/locales/ko_KR.json @@ -3170,7 +3170,7 @@ "message.success.resize.volume": "볼륨 크기를 조정했습니다.", "message.success.scale.kubernetes": "쿠버네테스 클러스터가 확장되었습니다.", "message.success.update.ipaddress": "IP 주소를 업데이트했습니다.", - "message.success.update.kubeversion": "쿠버네테스 지원 버전을 업데이트했습니다.", + "message.success.update.kubeversion": "쿠버네테스 지원 버전을 업데이트했습니다.", "message.success.update.user": "사용자를 업데이트했습니다.", "message.success.upgrade.kubernetes": "쿠버네테스 클러스터를 업그레이드했습니다.", "message.success.upload": "업로드 성공", @@ -3331,8 +3331,8 @@ "label.desktop.cluster.delete": "데스크톱 클러스터 삭제", "label.desktop.controller.template.version": "컨트롤러 템플릿 버전", "label.desktop.controller.template.version.create": "컨트롤러 템플릿 버전 생성", - "label.desktop.controller.version.manage": "컨트롤러 템플릿 사용여부", - "label.desktop.controller.version.delete": "컨트롤러 템플릿 삭제", + "label.desktop.controller.version.manage": "컨트롤러 템플릿 버전 사용여부", + "label.desktop.controller.version.delete": "컨트롤러 템플릿 버전 삭제", "label.desktop.master.template.version": "마스터 템플릿 버전", "label.desktop.master.template.version.create": "마스터 템플릿 버전 생성", "label.desktop.master.version.manage": "마스터 템플릿 버전 사용여부", @@ -3385,9 +3385,11 @@ "message.desktop.cluster.enable": "해당 클러스터를 활성화 하시겠습니까?", "message.desktop.cluster.disable": "해당 클러스터를 비활성화 하시겠습니까?", "message.desktop.cluster.delete": "해당 클러스터를 삭제하시겠습니까?", - "message.desktop.controller.version.delete": "이 컨트롤러 템플릿을 삭제하시겠습니까?", + "message.desktop.controller.version.delete": "이 컨트롤러 템플릿 버전을 삭제하시겠습니까?", "message.desktop.master.veresion.delete": "이 마스터 템플릿을 삭제하시겠습니까?", "message.desktop.cluster.add.ip.range": "이 데스크톱 클러스터에 추가 할 IP 범위를 입력하십시오.", + "message.success.register.contoller.template.version": "신규 컨트롤러 템플릿 버전이 등록되었습니다.", + "message.success.update.desktop.controller.version": "데스크톱 컨트롤러 버전의 상태값을 업데이트했습니다.", "message.success.add.desktop.ip": "데스크톱 클러스터의 IP 범위가 추가되었습니다.", "message.add.desktop.ip.failed": "데스크톱 클러스터의 IP 범위 추가에 실패하였습니다.", "message.add.desktop.ip.processing": "데스크톱 클러스터의 IP 범위 추가중..." diff --git a/ui/src/components/view/DetailsTab.vue b/ui/src/components/view/DetailsTab.vue index 282d03b43b26..0671ac095290 100644 --- a/ui/src/components/view/DetailsTab.vue +++ b/ui/src/components/view/DetailsTab.vue @@ -33,7 +33,7 @@ {{ volume.type }} - {{ volume.path }} ({{ parseFloat(volume.size / (1024.0 * 1024.0 * 1024.0)).toFixed(1) }} GB) -
+
{{ templates.name }}
diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index abd71aea3db3..62b75f290fc9 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -415,7 +415,7 @@ export default { return new RegExp(['/vm', '/desktop', '/kubernetes', '/ssh', '/vmgroup', '/affinitygroup', '/volume', '/snapshot', '/vmsnapshot', '/backup', '/guestnetwork', '/vpc', '/vpncustomergateway', - '/template', '/desktoptemplate', '/mastertemplate', '/iso', + '/template', '/controllertemplate', '/mastertemplate', '/iso', '/project', '/account', '/zone', '/pod', '/cluster', '/host', '/storagepool', '/imagestore', '/systemvm', '/router', '/ilbvm', '/computeoffering', '/systemoffering', '/diskoffering', '/backupoffering', '/networkoffering', '/vpcoffering'].join('|')) diff --git a/ui/src/config/section/desktop.js b/ui/src/config/section/desktop.js index 8b8741acb01d..85f6788980ed 100644 --- a/ui/src/config/section/desktop.js +++ b/ui/src/config/section/desktop.js @@ -81,7 +81,7 @@ export default { ] }, { - name: 'desktoptemplate', + name: 'controllertemplate', title: 'title.desktop.controller', icon: 'shop', docHelp: '', @@ -91,7 +91,7 @@ export default { searchFilters: ['name', 'zoneid', 'tags'], actions: [ { - api: 'registerTemplate', + api: 'addDesktopControllerVersion', icon: 'plus', label: 'label.desktop.controller.template.version.create', docHelp: '', @@ -100,7 +100,7 @@ export default { component: () => import('@/views/desktop/AddDesktopControllerVersion.vue') }, { - api: 'updateTemplatePermissions', + api: 'updateDesktopControllerVersion', icon: 'edit', label: 'label.desktop.controller.version.manage', dataView: true, @@ -108,7 +108,7 @@ export default { component: () => import('@/views/desktop/UpdateDesktopControllerVersion.vue') }, { - api: 'updateTemplate', + api: 'deleteDesktopControllerVersion', icon: 'delete', label: 'label.desktop.controller.version.delete', message: 'message.desktop.controller.version.delete', diff --git a/ui/src/views/desktop/AddDesktopControllerVersion.vue b/ui/src/views/desktop/AddDesktopControllerVersion.vue index ef38a1225404..b3b4d295bfa2 100644 --- a/ui/src/views/desktop/AddDesktopControllerVersion.vue +++ b/ui/src/views/desktop/AddDesktopControllerVersion.vue @@ -31,7 +31,7 @@ -
+ +
@@ -192,7 +192,7 @@ :filterOption="(input, option) => { return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 }" - v-decorator="['ostypeid', { + v-decorator="['dcostype', { initialValue: defaultOsId, rules: [ { @@ -216,7 +216,7 @@ @@ -233,7 +233,7 @@ :filterOption="(input, option) => { return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 }" - v-decorator="['ostypeid', { + v-decorator="['worksostype', { initialValue: defaultOsId, rules: [ { @@ -617,6 +617,10 @@ export default { id: 'VHD', description: 'VHD' }) + format.push({ + id: 'QCOW2', + description: 'QCOW2' + }) break case 'VMware': this.hyperVMWShow = true @@ -752,10 +756,10 @@ export default { } if (this.currentForm === 'Create') { this.loading = true - api('registerTemplate', params).then(json => { + api('addDesktopControllerVersion', params).then(json => { this.$notification.success({ message: this.$t('label.register.template'), - description: `${this.$t('message.success.register.template')} ${params.name}` + description: `${this.$t('message.success.register.contoller.template.version')}` }) this.$emit('refresh-data') this.closeAction() diff --git a/ui/src/views/desktop/UpdateDesktopControllerVersion.vue b/ui/src/views/desktop/UpdateDesktopControllerVersion.vue index bc03a19c1984..a8f2114c94ee 100644 --- a/ui/src/views/desktop/UpdateDesktopControllerVersion.vue +++ b/ui/src/views/desktop/UpdateDesktopControllerVersion.vue @@ -55,7 +55,7 @@ import { api } from '@/api' export default { - name: 'UpdateKubernetesSupportedVersion', + name: 'UpdateDesktopControllerVersion', props: { resource: { type: Object, @@ -127,8 +127,8 @@ export default { if (this.isValidValueForKey(values, 'state') && this.arrayHasItems(this.states)) { params.state = this.states[values.state].id } - api('updateKubernetesSupportedVersion', params).then(json => { - this.$message.success(`${this.$t('message.success.update.kubeversion')}: ${this.resource.name}`) + api('updateDesktopControllerVersion', params).then(json => { + this.$message.success(`${this.$t('message.success.update.desktop.controller.version')}: ${this.resource.name}`) this.$emit('refresh-data') this.closeAction() }).catch(error => {