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 <[email protected]>
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();