You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by GitBox <gi...@apache.org> on 2018/04/19 09:13:01 UTC

[GitHub] DaanHoogland closed pull request #2578: api: add command to list management servers

DaanHoogland closed pull request #2578: api: add command to list management servers
URL: https://github.com/apache/cloudstack/pull/2578
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

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 ead6ce1eede..7b53c72b724 100644
--- a/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java
+++ b/api/src/main/java/org/apache/cloudstack/api/ApiCommandJobType.java
@@ -54,5 +54,6 @@
     IAMGroup,
     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 4fb248cd105..80d6d4be065 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.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.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 @@
     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 00000000000..a53be0efb6f
--- /dev/null
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/management/ListMgmtsCmd.java
@@ -0,0 +1,78 @@
+// 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.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 = "listManagementServers", 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());
+
+    private static final String s_name = "listmanagementserversresponse";
+
+    /////////////////////////////////////////////////////
+    //////////////// 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 s_name;
+    }
+
+    @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 00000000000..efb7d878dda
--- /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 89%
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 7fc57b75692..d78bc3ac788 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, Starting, 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/api/src/main/java/org/apache/cloudstack/management/ManagementServerHostPeer.java b/api/src/main/java/org/apache/cloudstack/management/ManagementServerHostPeer.java
new file mode 100644
index 00000000000..d41d1b74723
--- /dev/null
+++ b/api/src/main/java/org/apache/cloudstack/management/ManagementServerHostPeer.java
@@ -0,0 +1,30 @@
+// 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.management;
+
+import org.apache.cloudstack.api.InternalIdentity;
+
+import java.util.Date;
+
+public interface ManagementServerHostPeer extends InternalIdentity {
+
+    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 de9fbb55a26..ac29dff23a6 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.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.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 @@
     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 38822cba16b..fb84fe7420c 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.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 77c69f34bf8..b8995f6aa4a 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 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/Upgrade41110to41200.java b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41110to41200.java
index c4fdd94d363..92fb1ba2aa6 100644
--- a/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41110to41200.java
+++ b/engine/schema/src/main/java/com/cloud/upgrade/dao/Upgrade41110to41200.java
@@ -19,11 +19,16 @@
 
 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 Upgrade41110to41200 implements DbUpgrade {
 
+    final static Logger LOG = Logger.getLogger(Upgrade41110to41200.class);
+
     @Override
     public String[] getUpgradableVersionRange() {
         return new String[] {"4.11.1.0", "4.12.0.0"};
@@ -52,7 +57,15 @@ public boolean supportsRollingUpgrade() {
 
     @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 set dynamic.apichecker.enabled to true, please run migrate-dynamicroles.py script to manually migrate to dynamic roles.", e);
+        }
     }
 
     @Override
diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql b/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql
index d5e6d61ea71..f3147ac15ce 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41110to41200.sql
@@ -32,4 +32,7 @@ ALTER TABLE `vlan` CHANGE `description` `ip4_range` varchar(255);
 -- We are only adding the permission to the default rules. Any custom rule must be configured by the root admin.
 INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`, `sort_order`) values (UUID(), 2, 'moveNetworkAclItem', 'ALLOW', 100) ON DUPLICATE KEY UPDATE rule=rule;
 INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`, `sort_order`) values (UUID(), 3, 'moveNetworkAclItem', 'ALLOW', 302) ON DUPLICATE KEY UPDATE rule=rule;
-INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`, `sort_order`) values (UUID(), 4, 'moveNetworkAclItem', 'ALLOW', 260) ON DUPLICATE KEY UPDATE rule=rule;
\ No newline at end of file
+INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`, `sort_order`) values (UUID(), 4, 'moveNetworkAclItem', 'ALLOW', 260) ON DUPLICATE KEY UPDATE rule=rule;
+
+-- Add uuid column for management server
+ALTER TABLE `mshost` ADD COLUMN IF NOT EXISTS `uuid` varchar(40);
diff --git a/framework/cluster/pom.xml b/framework/cluster/pom.xml
index 2d0eb20c62e..f73196aa41d 100644
--- a/framework/cluster/pom.xml
+++ b/framework/cluster/pom.xml
@@ -38,8 +38,6 @@
       <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 0b14be8be0d..4f5e0344e73 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 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 86d6fb3ab9f..c4a800c7950 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 d4717cada55..8786bfdd228 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.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 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 ManagementServerHostVO doInTransaction(final TransactionStatus status) {
                     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 ManagementServerHostVO doInTransaction(final TransactionStatus status) {
                     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 2fe1f24bbe5..61af3ef9982 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 5b7e988330c..a381bb412e2 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.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 void setId(long id) {
         this.id = id;
     }
 
+    @Override
     public long getOwnerMshost() {
         return ownerMshost;
     }
@@ -85,6 +88,7 @@ public void setOwnerMshost(long ownerMshost) {
         this.ownerMshost = ownerMshost;
     }
 
+    @Override
     public long getPeerMshost() {
         return peerMshost;
     }
@@ -93,6 +97,7 @@ public void setPeerMshost(long peerMshost) {
         this.peerMshost = peerMshost;
     }
 
+    @Override
     public long getPeerRunid() {
         return peerRunid;
     }
@@ -101,6 +106,7 @@ public void setPeerRunid(long peerRunid) {
         this.peerRunid = peerRunid;
     }
 
+    @Override
     public ManagementServerHost.State getPeerState() {
         return peerState;
     }
@@ -109,6 +115,7 @@ public void setPeerState(ManagementServerHost.State peerState) {
         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 f93c2ac2467..40187528843 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.Temporal;
 import javax.persistence.TemporalType;
 
+import org.apache.cloudstack.management.ManagementServerHost;
 import com.cloud.utils.db.GenericDao;
 
 @Entity
@@ -40,6 +42,9 @@
     @Column(name = "id")
     private long id;
 
+    @Column(name = "uuid")
+    private String uuid;
+
     @Column(name = "msid", updatable = true, nullable = false)
     private long msid;
 
@@ -66,6 +71,9 @@
     @Column(name = "last_update", updatable = true, nullable = true)
     private Date lastUpdateTime;
 
+    @Column(name = GenericDao.CREATED_COLUMN)
+    private Date created;
+
     @Column(name = GenericDao.REMOVED_COLUMN)
     private Date removed;
 
@@ -81,6 +89,7 @@ public ManagementServerHostVO(long msid, long runid, String serviceIP, int servi
         this.serviceIP = serviceIP;
         this.servicePort = servicePort;
         lastUpdateTime = updateTime;
+        this.uuid = UUID.randomUUID().toString();
     }
 
     @Override
@@ -92,6 +101,15 @@ public void setId(long id) {
         this.id = id;
     }
 
+    @Override
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
     public long getRunid() {
         return runid;
     }
@@ -109,6 +127,7 @@ public void setMsid(long msid) {
         this.msid = msid;
     }
 
+    @Override
     public String getName() {
         return name;
     }
@@ -160,6 +179,14 @@ public void setLastUpdateTime(Date lastUpdateTime) {
         this.lastUpdateTime = lastUpdateTime;
     }
 
+    public Date getCreated() {
+        return created;
+    }
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
     public Date getRemoved() {
         return removed;
     }
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 d6b25c1c7f4..610826932af 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 @@
 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 3ab4d97ee05..74f8481a31d 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 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 6d21049bd56..f799116e091 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 a43fcfc8d30..a7a56c738c1 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 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 3ce96a677fb..b18ea081f6a 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.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 3cf0c0000d9..81a1fbf1fd9 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
@@ -26,7 +26,7 @@
 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/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java
index bd9b543c58f..5ea9ff2e324 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.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;
@@ -3963,4 +3965,12 @@ public SSHKeyPairResponse createSSHKeyPairResponse(SSHKeyPair sshkeyPair, boolea
         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 9c728ef0f78..3694528ff3b 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 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.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.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;
@@ -375,6 +379,9 @@
     @Inject
     DataStoreManager dataStoreManager;
 
+    @Inject
+    ManagementServerHostDao managementServerHostDao;
+
     /*
      * (non-Javadoc)
      *
@@ -3760,6 +3767,22 @@ protected ResourceDetailResponse createResourceDetailsResponse(ResourceDetail re
         return resourceDetailResponse;
     }
 
+    @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());
+                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 fe6b7171968..4e66ec2309e 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 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 8c8ff91d89a..27cf74f4375 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 @@
 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 3082f1dfa72..5f3010b84cb 100644
--- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
@@ -104,6 +104,7 @@
 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;
@@ -3037,6 +3038,7 @@ public long getMemoryOrCpuCapacityByHost(final Long hostId, final short capacity
         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 2530db2e5fa..75e2b60e1c2 100644
--- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java
@@ -116,7 +116,7 @@
 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 86ac0376de4..ab269b1052c 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.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 a025efefcbc..4df4d5144ad 100644
--- a/tools/apidoc/gen_toc.py
+++ b/tools/apidoc/gen_toc.py
@@ -190,7 +190,8 @@
     'CA': 'Certificate',
     'listElastistorInterface': 'Misc',
     'cloudian': 'Cloudian',
-    'Sioc' : 'Sioc'
+    'Sioc' : 'Sioc',
+    'Management': 'Management',
     }
 
 
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 1bd08a32b25..b19f3c7ef10 100644
--- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java
@@ -113,6 +113,18 @@ public static String getHostName() {
         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();


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services