This is an automated email from the ASF dual-hosted git repository. gabriel pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push: new 58466c8 api: add command to list management servers (#3150) 58466c8 is described below commit 58466c89540aeb643abf47dacb2fe249eca48479 Author: dahn <daan.hoogl...@gmail.com> AuthorDate: Fri Feb 1 19:23:39 2019 +0100 api: add command to list management servers (#3150) * api: add command to list management servers * api: add number of mangement servers in listInfrastructure command * ui: add block for mangement servers on infra page * api name resolution method cleanup --- .../apache/cloudstack/api/ApiCommandJobType.java | 3 +- .../apache/cloudstack/api/ResponseGenerator.java | 4 ++ .../api/command/admin/management/ListMgmtsCmd.java | 79 ++++++++++++++++++++++ .../api/response/ManagementServerResponse.java | 59 ++++++++++++++++ .../management}/ManagementServerHost.java | 12 ++-- .../management/ManagementServerHostPeer.java | 17 +++-- .../org/apache/cloudstack/query/QueryService.java | 4 ++ .../agent/manager/ClusteredAgentManagerImpl.java | 2 +- .../vm/ClusteredVirtualMachineManagerImpl.java | 2 +- .../com/cloud/upgrade/dao/Upgrade41120to41200.java | 13 ++++ .../resources/META-INF/db/schema-41120to41200.sql | 5 +- framework/cluster/pom.xml | 3 +- .../com/cloud/cluster/ClusterFenceManagerImpl.java | 1 + .../java/com/cloud/cluster/ClusterManager.java | 1 + .../java/com/cloud/cluster/ClusterManagerImpl.java | 7 +- .../com/cloud/cluster/ClusterManagerListener.java | 2 + .../cloud/cluster/ManagementServerHostPeerVO.java | 9 ++- .../com/cloud/cluster/ManagementServerHostVO.java | 16 +++++ .../cloud/cluster/dao/ManagementServerHostDao.java | 4 +- .../cluster/dao/ManagementServerHostDaoImpl.java | 4 +- .../cluster/dao/ManagementServerHostPeerDao.java | 2 +- .../dao/ManagementServerHostPeerDaoImpl.java | 2 +- .../framework/jobs/impl/AsyncJobManagerImpl.java | 2 +- .../vmware/manager/VmwareManagerImpl.java | 2 +- .../cloudstack/metrics/MetricsServiceImpl.java | 4 ++ .../response/InfrastructureResponse.java | 8 +++ .../main/java/com/cloud/api/ApiResponseHelper.java | 10 +++ .../java/com/cloud/api/query/QueryManagerImpl.java | 24 +++++++ .../com/cloud/ha/HighAvailabilityManagerImpl.java | 2 +- .../java/com/cloud/server/LockMasterListener.java | 2 +- .../com/cloud/server/ManagementServerImpl.java | 2 + .../java/com/cloud/storage/StorageManagerImpl.java | 2 +- .../org/apache/cloudstack/ha/HAManagerImpl.java | 2 +- tools/apidoc/gen_toc.py | 3 +- ui/css/cloudstack3.css | 3 +- ui/index.html | 9 +++ ui/l10n/en.js | 2 + ui/l10n/fr_FR.js | 2 + ui/scripts/system.js | 38 +++++++++++ .../main/java/com/cloud/utils/net/NetUtils.java | 12 ++++ 40 files changed, 346 insertions(+), 34 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java b/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java index b95831b..d35598b 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java @@ -52,5 +52,6 @@ public enum ApiCommandJobType { DedicatedGuestVlanRange, GuestOs, GuestOsMapping, - Network + Network, + Management } diff --git a/api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java index 4fb248c..80d6d4b 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.cloudstack.management.ManagementServerHost; import org.apache.cloudstack.affinity.AffinityGroup; import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.ApiConstants.HostDetails; @@ -64,6 +65,7 @@ import org.apache.cloudstack.api.response.LBHealthCheckResponse; import org.apache.cloudstack.api.response.LBStickinessResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.ManagementServerResponse; import org.apache.cloudstack.api.response.NetworkACLItemResponse; import org.apache.cloudstack.api.response.NetworkACLResponse; import org.apache.cloudstack.api.response.NetworkOfferingResponse; @@ -462,4 +464,6 @@ public interface ResponseGenerator { ListResponse<UpgradeRouterTemplateResponse> createUpgradeRouterTemplateResponse(List<Long> jobIds); SSHKeyPairResponse createSSHKeyPairResponse(SSHKeyPair sshkeyPair, boolean privatekey); + + ManagementServerResponse createManagementResponse(ManagementServerHost mgmt); } diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java new file mode 100644 index 0000000..1be4919 --- /dev/null +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java @@ -0,0 +1,79 @@ +// 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.management; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiCommandJobType; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ManagementServerResponse; +import org.apache.log4j.Logger; + +@APICommand(name = ListMgmtsCmd.APINAME, description = "Lists management servers.", responseObject = ManagementServerResponse.class, + requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) +public class ListMgmtsCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(ListMgmtsCmd.class.getName()); + + public static final String APINAME = "listManagementServers"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = HostResponse.class, description = "the id of the management server") + private Long id; + + @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "the name of the management server") + private String hostName; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getId() { + return id; + } + + public String getHostName() { + return hostName; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX; + } + + @Override + public ApiCommandJobType getInstanceType() { + return ApiCommandJobType.Host; + } + + @Override + public void execute() { + ListResponse<ManagementServerResponse> response = _queryService.listManagementServers(this); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } +} diff --git a/api/src/main/java/org/apache/cloudstack/api/response/ManagementServerResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ManagementServerResponse.java new file mode 100644 index 0000000..efb7d87 --- /dev/null +++ b/api/src/main/java/org/apache/cloudstack/api/response/ManagementServerResponse.java @@ -0,0 +1,59 @@ +// 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.response; + +import org.apache.cloudstack.management.ManagementServerHost; +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; + +@EntityReference(value = ManagementServerHost.class) +public class ManagementServerResponse extends BaseResponse { + @SerializedName(ApiConstants.ID) + @Param(description = "the ID of the management server") + private String id; + + @SerializedName(ApiConstants.NAME) + @Param(description = "the name of the management server") + private String name; + + @SerializedName(ApiConstants.STATE) + @Param(description = "the state of the management server") + private ManagementServerHost.State state; + + @SerializedName(ApiConstants.VERSION) + @Param(description = "the version of the management server") + private String version; + + public void setId(String id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public void setState(ManagementServerHost.State state) { + this.state = state; + } + + public void setVersion(String version) { + this.version = version; + } +} diff --git a/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHost.java b/api/src/main/java/org/apache/cloudstack/management/ManagementServerHost.java similarity index 88% rename from framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHost.java rename to api/src/main/java/org/apache/cloudstack/management/ManagementServerHost.java index 7fc57b7..11e1cae 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHost.java +++ b/api/src/main/java/org/apache/cloudstack/management/ManagementServerHost.java @@ -14,19 +14,23 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.cluster; +package org.apache.cloudstack.management; public interface ManagementServerHost { + enum State { + Up, Down + } + long getId(); - public static enum State { - Up, Starting, Down - }; + String getUuid(); long getMsid(); State getState(); + String getName(); + String getVersion(); String getServiceIP(); diff --git a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerListener.java b/api/src/main/java/org/apache/cloudstack/management/ManagementServerHostPeer.java similarity index 70% copy from framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerListener.java copy to api/src/main/java/org/apache/cloudstack/management/ManagementServerHostPeer.java index 2fe1f24..d41d1b7 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerListener.java +++ b/api/src/main/java/org/apache/cloudstack/management/ManagementServerHostPeer.java @@ -14,14 +14,17 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.cluster; +package org.apache.cloudstack.management; -import java.util.List; +import org.apache.cloudstack.api.InternalIdentity; -public interface ClusterManagerListener { - void onManagementNodeJoined(List<? extends ManagementServerHost> nodeList, long selfNodeId); +import java.util.Date; - void onManagementNodeLeft(List<? extends ManagementServerHost> nodeList, long selfNodeId); +public interface ManagementServerHostPeer extends InternalIdentity { - void onManagementNodeIsolated(); -} + long getOwnerMshost(); + long getPeerMshost(); + long getPeerRunid(); + ManagementServerHost.State getPeerState(); + Date getLastUpdateTime(); +} \ No newline at end of file diff --git a/api/src/main/java/org/apache/cloudstack/query/QueryService.java b/api/src/main/java/org/apache/cloudstack/query/QueryService.java index de9fbb5..ac29dff 100644 --- a/api/src/main/java/org/apache/cloudstack/query/QueryService.java +++ b/api/src/main/java/org/apache/cloudstack/query/QueryService.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.host.ListHostTagsCmd; import org.apache.cloudstack.api.command.admin.internallb.ListInternalLBVMsCmd; +import org.apache.cloudstack.api.command.admin.management.ListMgmtsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.storage.ListImageStoresCmd; import org.apache.cloudstack.api.command.admin.storage.ListSecondaryStagingStoresCmd; @@ -58,6 +59,7 @@ import org.apache.cloudstack.api.response.HostTagResponse; import org.apache.cloudstack.api.response.ImageStoreResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ManagementServerResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.response.ProjectResponse; @@ -141,4 +143,6 @@ public interface QueryService { ListResponse<StorageTagResponse> searchForStorageTags(ListStorageTagsCmd cmd); ListResponse<HostTagResponse> searchForHostTags(ListHostTagsCmd cmd); + + ListResponse<ManagementServerResponse> listManagementServers(ListMgmtsCmd cmd); } diff --git a/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java index d0cced3..7a16971 100644 --- a/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java @@ -69,7 +69,7 @@ import com.cloud.cluster.ClusterManager; import com.cloud.cluster.ClusterManagerListener; import com.cloud.cluster.ClusterServicePdu; import com.cloud.cluster.ClusteredAgentRebalanceService; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.cluster.ManagementServerHostVO; import com.cloud.cluster.agentlb.AgentLoadBalancerPlanner; import com.cloud.cluster.agentlb.HostTransferMapVO; diff --git a/engine/orchestration/src/main/java/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java index 77c69f3..b8995f6 100644 --- a/engine/orchestration/src/main/java/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/ClusteredVirtualMachineManagerImpl.java @@ -24,7 +24,7 @@ import javax.naming.ConfigurationException; import com.cloud.cluster.ClusterManager; import com.cloud.cluster.ClusterManagerListener; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; public class ClusteredVirtualMachineManagerImpl extends VirtualMachineManagerImpl implements ClusterManagerListener { diff --git a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41120to41200.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41120to41200.java index 88cffb7..f68f04a 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41120to41200.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41120to41200.java @@ -19,11 +19,16 @@ package com.cloud.upgrade.dao; import java.io.InputStream; import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; import com.cloud.utils.exception.CloudRuntimeException; +import org.apache.log4j.Logger; public class Upgrade41120to41200 implements DbUpgrade { + final static Logger LOG = Logger.getLogger(Upgrade41120to41200.class); + @Override public String[] getUpgradableVersionRange() { return new String[] {"4.11.2.0", "4.12.0.0"}; @@ -52,7 +57,15 @@ public class Upgrade41120to41200 implements DbUpgrade { @Override public void performDataMigration(Connection conn) { + updateManagementServerHostUuid(conn); + } + private void updateManagementServerHostUuid(Connection conn) { + try (final PreparedStatement updateStatement = conn.prepareStatement("UPDATE cloud.mshost SET uuid=UUID()")) { + updateStatement.executeUpdate(); + } catch (SQLException e) { + LOG.error("Failed to add an UUID to each management server.", e); + } } @Override diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41120to41200.sql b/engine/schema/src/main/resources/META-INF/db/schema-41120to41200.sql index fb588e8..cf11d8f 100644 --- a/engine/schema/src/main/resources/META-INF/db/schema-41120to41200.sql +++ b/engine/schema/src/main/resources/META-INF/db/schema-41120to41200.sql @@ -48,4 +48,7 @@ INSERT IGNORE INTO `cloud`.`guest_os` (id, uuid, category_id, display_name, crea INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid, hypervisor_type, hypervisor_version, guest_os_name, guest_os_id, created, is_user_defined) VALUES (UUID(), 'KVM', 'default', 'Windows Server 2019', 276, now(), 0); -- changed fingerprint type to TEXT, it avoids db exception when creating the certificate issue #3123 -ALTER TABLE `cloud`.`sslcerts` MODIFY `fingerprint` TEXT; \ No newline at end of file +ALTER TABLE `cloud`.`sslcerts` MODIFY `fingerprint` TEXT; + +-- PR#2578 New column for listManagementServers API call +ALTER TABLE `mshost` ADD COLUMN `uuid` varchar(40) AFTER `name`; diff --git a/framework/cluster/pom.xml b/framework/cluster/pom.xml index c9b61d6..853d9f0 100644 --- a/framework/cluster/pom.xml +++ b/framework/cluster/pom.xml @@ -47,8 +47,7 @@ <groupId>org.apache.cloudstack</groupId> <artifactId>cloud-api</artifactId> <version>${project.version}</version> - <type>test-jar</type> - <scope>test</scope> </dependency> </dependencies> + </project> diff --git a/framework/cluster/src/main/java/com/cloud/cluster/ClusterFenceManagerImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterFenceManagerImpl.java index 0b14be8..4f5e034 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/ClusterFenceManagerImpl.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/ClusterFenceManagerImpl.java @@ -22,6 +22,7 @@ import java.util.Map; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.management.ManagementServerHost; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; diff --git a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManager.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManager.java index 86d6fb3..c4a800c 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManager.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManager.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.cluster; +import org.apache.cloudstack.management.ManagementServerHost; import org.apache.cloudstack.framework.config.ConfigKey; import com.cloud.utils.component.Manager; diff --git a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java index d4717ca..8786bfd 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerImpl.java @@ -31,6 +31,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.UUID; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -39,6 +40,7 @@ import java.util.concurrent.TimeUnit; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.management.ManagementServerHost; import org.apache.cloudstack.framework.config.ConfigDepot; import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.framework.config.Configurable; @@ -951,7 +953,7 @@ public class ClusterManagerImpl extends ManagerBase implements ClusterManager, C mshost = new ManagementServerHostVO(); mshost.setMsid(_msId); mshost.setRunid(_runId); - mshost.setName(NetUtils.getHostName()); + mshost.setName(NetUtils.getCanonicalHostName()); mshost.setVersion(version); mshost.setServiceIP(_clusterNodeIP); mshost.setServicePort(_currentServiceAdapter.getServicePort()); @@ -959,12 +961,13 @@ public class ClusterManagerImpl extends ManagerBase implements ClusterManager, C mshost.setRemoved(null); mshost.setAlertCount(0); mshost.setState(ManagementServerHost.State.Up); + mshost.setUuid(UUID.randomUUID().toString()); _mshostDao.persist(mshost); if (s_logger.isInfoEnabled()) { s_logger.info("New instance of management server msid " + _msId + ", runId " + _runId + " is being started"); } } else { - _mshostDao.update(mshost.getId(), _runId, NetUtils.getHostName(), version, _clusterNodeIP, _currentServiceAdapter.getServicePort(), + _mshostDao.update(mshost.getId(), _runId, NetUtils.getCanonicalHostName(), version, _clusterNodeIP, _currentServiceAdapter.getServicePort(), DateUtil.currentGMTTime()); if (s_logger.isInfoEnabled()) { s_logger.info("Management server " + _msId + ", runId " + _runId + " is being started"); diff --git a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerListener.java b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerListener.java index 2fe1f24..61af3ef 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerListener.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/ClusterManagerListener.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.cluster; +import org.apache.cloudstack.management.ManagementServerHost; + import java.util.List; public interface ClusterManagerListener { diff --git a/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostPeerVO.java b/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostPeerVO.java index 5b7e988..a381bb4 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostPeerVO.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostPeerVO.java @@ -29,11 +29,13 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.apache.cloudstack.management.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHostPeer; import com.cloud.utils.DateUtil; @Entity @Table(name = "mshost_peer") -public class ManagementServerHostPeerVO { +public class ManagementServerHostPeerVO implements ManagementServerHostPeer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -77,6 +79,7 @@ public class ManagementServerHostPeerVO { this.id = id; } + @Override public long getOwnerMshost() { return ownerMshost; } @@ -85,6 +88,7 @@ public class ManagementServerHostPeerVO { this.ownerMshost = ownerMshost; } + @Override public long getPeerMshost() { return peerMshost; } @@ -93,6 +97,7 @@ public class ManagementServerHostPeerVO { this.peerMshost = peerMshost; } + @Override public long getPeerRunid() { return peerRunid; } @@ -101,6 +106,7 @@ public class ManagementServerHostPeerVO { this.peerRunid = peerRunid; } + @Override public ManagementServerHost.State getPeerState() { return peerState; } @@ -109,6 +115,7 @@ public class ManagementServerHostPeerVO { this.peerState = peerState; } + @Override public Date getLastUpdateTime() { return lastUpdateTime; } diff --git a/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostVO.java b/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostVO.java index f93c2ac..121b939 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostVO.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/ManagementServerHostVO.java @@ -17,6 +17,7 @@ package com.cloud.cluster; import java.util.Date; +import java.util.UUID; import javax.persistence.Column; import javax.persistence.Entity; @@ -29,6 +30,7 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.utils.db.GenericDao; @Entity @@ -40,6 +42,9 @@ public class ManagementServerHostVO implements ManagementServerHost { @Column(name = "id") private long id; + @Column(name = "uuid") + private String uuid; + @Column(name = "msid", updatable = true, nullable = false) private long msid; @@ -81,6 +86,7 @@ public class ManagementServerHostVO implements ManagementServerHost { this.serviceIP = serviceIP; this.servicePort = servicePort; lastUpdateTime = updateTime; + this.uuid = UUID.randomUUID().toString(); } @Override @@ -92,6 +98,15 @@ public class ManagementServerHostVO implements ManagementServerHost { this.id = id; } + @Override + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + public long getRunid() { return runid; } @@ -109,6 +124,7 @@ public class ManagementServerHostVO implements ManagementServerHost { this.msid = msid; } + @Override public String getName() { return name; } diff --git a/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDao.java b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDao.java index d6b25c1..6108269 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDao.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDao.java @@ -19,8 +19,8 @@ package com.cloud.cluster.dao; import java.util.Date; import java.util.List; -import com.cloud.cluster.ManagementServerHost; -import com.cloud.cluster.ManagementServerHost.State; +import org.apache.cloudstack.management.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost.State; import com.cloud.cluster.ManagementServerHostVO; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDao; diff --git a/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java index 3ab4d97..74f8481 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostDaoImpl.java @@ -28,8 +28,8 @@ import java.util.TimeZone; import org.apache.log4j.Logger; import com.cloud.cluster.ClusterInvalidSessionException; -import com.cloud.cluster.ManagementServerHost; -import com.cloud.cluster.ManagementServerHost.State; +import org.apache.cloudstack.management.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost.State; import com.cloud.cluster.ManagementServerHostVO; import com.cloud.utils.DateUtil; import com.cloud.utils.db.DB; diff --git a/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDao.java b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDao.java index 6d21049..f799116 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDao.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDao.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.cluster.dao; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.cluster.ManagementServerHostPeerVO; import com.cloud.utils.db.GenericDao; diff --git a/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDaoImpl.java b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDaoImpl.java index a43fcfc..a7a56c7 100644 --- a/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDaoImpl.java +++ b/framework/cluster/src/main/java/com/cloud/cluster/dao/ManagementServerHostPeerDaoImpl.java @@ -21,7 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.cluster.ManagementServerHostPeerVO; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; diff --git a/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java index 1be3eed..378e2f5 100644 --- a/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java +++ b/framework/jobs/src/main/java/org/apache/cloudstack/framework/jobs/impl/AsyncJobManagerImpl.java @@ -62,7 +62,7 @@ import org.apache.cloudstack.utils.identity.ManagementServerNode; import org.slf4j.MDC; import com.cloud.cluster.ClusterManagerListener; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.storage.DataStoreRole; import com.cloud.storage.Snapshot; import com.cloud.storage.dao.SnapshotDao; diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 643d3ce..23758d5 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -62,7 +62,7 @@ import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.api.query.dao.TemplateJoinDao; import com.cloud.cluster.ClusterManager; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.cluster.dao.ManagementServerHostPeerDao; import com.cloud.configuration.Config; import com.cloud.dc.ClusterDetailsDao; diff --git a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java index 8b76a17..37f1f55 100644 --- a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java +++ b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java @@ -25,6 +25,7 @@ import com.cloud.capacity.Capacity; import com.cloud.capacity.CapacityManager; import com.cloud.capacity.dao.CapacityDao; import com.cloud.capacity.dao.CapacityDaoImpl; +import com.cloud.cluster.dao.ManagementServerHostDao; import com.cloud.dc.DataCenter; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; @@ -95,6 +96,8 @@ public class MetricsServiceImpl extends ComponentLifecycleBase implements Metric private DomainRouterDao domainRouterDao; @Inject private CapacityDao capacityDao; + @Inject + private ManagementServerHostDao managementServerHostDao; protected MetricsServiceImpl() { super(); @@ -138,6 +141,7 @@ public class MetricsServiceImpl extends ComponentLifecycleBase implements Metric } } response.setCpuSockets(cpuSockets); + response.setManagementServers(managementServerHostDao.listAll().size()); return response; } diff --git a/plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java b/plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java index a4db345..03b54ab 100644 --- a/plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java +++ b/plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java @@ -59,6 +59,10 @@ public class InfrastructureResponse extends BaseResponse { @Param(description = "Number of cpu sockets") private Integer cpuSockets; + @SerializedName("managementservers") + @Param(description = "Number of management servers") + private Integer managementServers; + public InfrastructureResponse() { setObjectName("infrastructure"); } @@ -98,4 +102,8 @@ public class InfrastructureResponse extends BaseResponse { public void setCpuSockets(final Integer cpuSockets) { this.cpuSockets = cpuSockets; } + + public void setManagementServers(Integer managementServers) { + this.managementServers = managementServers; + } } diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index 153eafd..0b310c0 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.api; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.tags.dao.ResourceTagDao; import com.cloud.agent.api.VgpuTypesInfo; @@ -235,6 +236,7 @@ import org.apache.cloudstack.api.response.LBStickinessPolicyResponse; import org.apache.cloudstack.api.response.LBStickinessResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.ManagementServerResponse; import org.apache.cloudstack.api.response.NetworkACLItemResponse; import org.apache.cloudstack.api.response.NetworkACLResponse; import org.apache.cloudstack.api.response.NetworkOfferingResponse; @@ -3975,4 +3977,12 @@ public class ApiResponseHelper implements ResponseGenerator { response.setDomainName(domain.getName()); return response; } + public ManagementServerResponse createManagementResponse(ManagementServerHost mgmt) { + ManagementServerResponse response = new ManagementServerResponse(); + response.setId(mgmt.getUuid()); + response.setName(mgmt.getName()); + response.setVersion(mgmt.getVersion()); + response.setState(mgmt.getState()); + return response; + } } diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index f75f711..91e0466 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -25,6 +25,8 @@ import java.util.Set; import javax.inject.Inject; +import com.cloud.cluster.ManagementServerHostVO; +import com.cloud.cluster.dao.ManagementServerHostDao; import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.affinity.AffinityGroupDomainMapVO; import org.apache.cloudstack.affinity.AffinityGroupResponse; @@ -41,6 +43,7 @@ import org.apache.cloudstack.api.command.admin.host.ListHostTagsCmd; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.internallb.ListInternalLBVMsCmd; import org.apache.cloudstack.api.command.admin.iso.ListIsosCmdByAdmin; +import org.apache.cloudstack.api.command.admin.management.ListMgmtsCmd; import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd; import org.apache.cloudstack.api.command.admin.storage.ListImageStoresCmd; import org.apache.cloudstack.api.command.admin.storage.ListSecondaryStagingStoresCmd; @@ -80,6 +83,7 @@ import org.apache.cloudstack.api.response.HostTagResponse; import org.apache.cloudstack.api.response.ImageStoreResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ManagementServerResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.response.ProjectResponse; @@ -376,6 +380,9 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q @Inject private EntityManager _entityMgr; + @Inject + ManagementServerHostDao managementServerHostDao; + /* * (non-Javadoc) * @@ -3684,6 +3691,23 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q } @Override + public ListResponse<ManagementServerResponse> listManagementServers(ListMgmtsCmd cmd) { + ListResponse<ManagementServerResponse> response = new ListResponse<>(); + List<ManagementServerResponse> result = new ArrayList<>(); + for (ManagementServerHostVO mgmt : managementServerHostDao.listAll()) { + ManagementServerResponse mgmtResponse = new ManagementServerResponse(); + mgmtResponse.setId(mgmt.getUuid()); + mgmtResponse.setName(mgmt.getName()); + mgmtResponse.setState(mgmt.getState()); + mgmtResponse.setVersion(mgmt.getVersion()); + mgmtResponse.setObjectName("managementserver"); + result.add(mgmtResponse); + } + response.setResponses(result); + return response; + } + + @Override public String getConfigComponentName() { return QueryService.class.getSimpleName(); } diff --git a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java index d4356f6..49211f5 100644 --- a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -38,7 +38,7 @@ import org.apache.cloudstack.managed.context.ManagedContextRunnable; import com.cloud.agent.AgentManager; import com.cloud.alert.AlertManager; import com.cloud.cluster.ClusterManagerListener; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.configuration.Config; import com.cloud.dc.ClusterDetailsDao; import com.cloud.dc.DataCenterVO; diff --git a/server/src/main/java/com/cloud/server/LockMasterListener.java b/server/src/main/java/com/cloud/server/LockMasterListener.java index 8c8ff91..27cf74f 100644 --- a/server/src/main/java/com/cloud/server/LockMasterListener.java +++ b/server/src/main/java/com/cloud/server/LockMasterListener.java @@ -19,7 +19,7 @@ package com.cloud.server; import java.util.List; import com.cloud.cluster.ClusterManagerListener; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.utils.db.Merovingian2; /** diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index d54e84f..0b846b9 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -105,6 +105,7 @@ import org.apache.cloudstack.api.command.admin.iso.ListIsoPermissionsCmdByAdmin; import org.apache.cloudstack.api.command.admin.iso.ListIsosCmdByAdmin; import org.apache.cloudstack.api.command.admin.iso.RegisterIsoCmdByAdmin; import org.apache.cloudstack.api.command.admin.loadbalancer.ListLoadBalancerRuleInstancesCmdByAdmin; +import org.apache.cloudstack.api.command.admin.management.ListMgmtsCmd; import org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd; import org.apache.cloudstack.api.command.admin.network.AddNetworkServiceProviderCmd; import org.apache.cloudstack.api.command.admin.network.CreateManagementNetworkIpRangeCmd; @@ -3068,6 +3069,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe cmdList.add(CreateManagementNetworkIpRangeCmd.class); cmdList.add(DeleteManagementNetworkIpRangeCmd.class); cmdList.add(UploadTemplateDirectDownloadCertificate.class); + cmdList.add(ListMgmtsCmd.class); // Out-of-band management APIs for admins cmdList.add(EnableOutOfBandManagementForHostCmd.class); diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java index 1f704eb..a299540 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -115,7 +115,7 @@ import com.cloud.capacity.CapacityState; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; import com.cloud.cluster.ClusterManagerListener; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ConfigurationManagerImpl; diff --git a/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java b/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java index 86ac037..ab269b1 100644 --- a/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/ha/HAManagerImpl.java @@ -60,7 +60,7 @@ import org.apache.cloudstack.utils.identity.ManagementServerNode; import org.apache.log4j.Logger; import com.cloud.cluster.ClusterManagerListener; -import com.cloud.cluster.ManagementServerHost; +import org.apache.cloudstack.management.ManagementServerHost; import com.cloud.dc.ClusterDetailsDao; import com.cloud.dc.ClusterDetailsVO; import com.cloud.dc.DataCenter; diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py index 3bf52a3..1b2a979 100644 --- a/tools/apidoc/gen_toc.py +++ b/tools/apidoc/gen_toc.py @@ -190,7 +190,8 @@ known_categories = { 'listElastistorInterface': 'Misc', 'cloudian': 'Cloudian', 'Sioc' : 'Sioc', - 'Diagnostics': 'Diagnostics' + 'Diagnostics': 'Diagnostics', + 'Management': 'Management', } diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css index ad1f624..5294f56 100644 --- a/ui/css/cloudstack3.css +++ b/ui/css/cloudstack3.css @@ -9739,7 +9739,8 @@ div#details-tab-aclRules td.cidrlist span { top: 68px; } -.system-dashboard.zone .status_box li.system-vms .icon { +.system-dashboard.zone .status_box li.system-vms .icon, +.system-dashboard.zone .status_box li.management-servers .icon { background-position: -408px -399px; } diff --git a/ui/index.html b/ui/index.html index bfc026f..6e33598 100644 --- a/ui/index.html +++ b/ui/index.html @@ -1218,6 +1218,15 @@ view-all-title="label.sockets" view-all-target="sockets"><translate key="label.view.all"/></span> </li> + <li class="block management-servers"> + <span class="header"><translate key="label.management.servers"/></span> + <span class="icon"> </span> + <span class="overview total" data-item="managementServerCount"></span> + <span class="button view-all clusters" + tr="label.management.servers" trf="view-all-title" + view-all-title="label.management.servers" + view-all-target="managementServers"><translate key="label.view.all"/></span> + </li> </ul> </div> </div> diff --git a/ui/l10n/en.js b/ui/l10n/en.js index 46b9244..eb7b822 100644 --- a/ui/l10n/en.js +++ b/ui/l10n/en.js @@ -1017,6 +1017,7 @@ var dictionary = { "label.management.ips":"Management IP Addresses", "label.management.server":"Management Server", "label.mac.address": "MAC Address", +"label.management.servers":"Management Servers", "label.mac.address.changes":"MAC Address Changes", "label.max.cpus":"Max. CPU cores", "label.max.guest.limit":"Max guest limit", @@ -1225,6 +1226,7 @@ var dictionary = { "label.number.of.clusters":"Number of Clusters", "label.number.of.cpu.sockets":"The Number of CPU Sockets", "label.number.of.hosts":"Number of Hosts", +"label.number.of.management.servers":"Number of Management Servers", "label.number.of.pods":"Number of Pods", "label.number.of.system.vms":"Number of System VMs", "label.number.of.virtual.routers":"Number of Virtual Routers", diff --git a/ui/l10n/fr_FR.js b/ui/l10n/fr_FR.js index 8ecf80d..88b6cad 100644 --- a/ui/l10n/fr_FR.js +++ b/ui/l10n/fr_FR.js @@ -984,6 +984,7 @@ var dictionary = { "label.management": "Administration", "label.management.ips": "Adresses IP de gestion", "label.management.server": "Serveur de gestion", + "label.management.servers": "Serveurs de gestion", "label.max.cpus": "Nombre coeurs CPU max.", "label.max.guest.limit": "Nombre maximum d'invités", "label.max.instances": "Instance Max.", @@ -1184,6 +1185,7 @@ var dictionary = { "label.number.of.clusters": "Nombre de clusters", "label.number.of.cpu.sockets": "Le nombre de sockets CPU", "label.number.of.hosts": "Nombre d'Hôtes", + "label.number.of.management.servers":"Nombre de serveurs de gestion", "label.number.of.pods": "Nombre de Pods", "label.number.of.system.vms": "Nombre de VM Système", "label.number.of.virtual.routers": "Nombre de routeurs virtuels", diff --git a/ui/scripts/system.js b/ui/scripts/system.js index c1c693f..e721581 100755 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -279,6 +279,7 @@ data.systemVmCount = response.systemvms; data.virtualRouterCount = response.routers; data.socketCount = response.cpusockets; + data.managementServerCount = response.managementservers; args.response.success({ data: data }); @@ -9956,6 +9957,40 @@ }; return listView; + }, + + managementServers: function () { + var listView = { + id: 'managementservers', + fields: { + name: { + label: 'label.name' + }, + id: { + label: 'label.uuid' + }, + state: { + label: 'label.state', + indicator: { + 'Up': 'on', + 'Down': 'off' + } + }, + version: { + label: 'label.version' + } + }, + dataProvider: function (args) { + $.ajax({ + url: createURL('listManagementServers'), + async: false, + success: function (json) { + args.response.success({ data: json.listmanagementserversresponse.managementserver }); + } + }); + } + }; + return listView; } } } @@ -17854,6 +17889,9 @@ }, cpusockets: { label: 'label.number.of.cpu.sockets' + }, + managementServers: { + label: 'label.number.of.management.servers' } }, { diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java b/utils/src/main/java/com/cloud/utils/net/NetUtils.java index 72f6583b..dce6c25 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -117,6 +117,18 @@ public class NetUtils { return "localhost"; } + public static String getCanonicalHostName() { + try { + InetAddress localAddr = InetAddress.getLocalHost(); + if (localAddr != null) { + return localAddr.getCanonicalHostName(); + } + } catch (UnknownHostException e) { + s_logger.warn("UnknownHostException when trying to get canonical host name. ", e); + } + return "localhost"; + } + public static InetAddress getLocalInetAddress() { try { return InetAddress.getLocalHost();