Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
523620f
Prevent addition of duplicate PF rules on scale up and no rules left …
Pearl1594 Mar 11, 2024
3579806
fix missing dependency injection
Pearl1594 Mar 28, 2024
f228c7a
NSX: Fix concurrency issues on port forwarding rules deletion (#37)
nvazquez Apr 10, 2024
a899648
CKS: Externalize control and worker node setup wait time and installa…
Pearl1594 Apr 10, 2024
968235a
NSX: Add shared network support (#41)
Pearl1594 Apr 10, 2024
bcc8ff2
NSX: Fix number of physical networks for Guest traffic checks and lef…
nvazquez Apr 12, 2024
f44b8aa
fix logger
Pearl1594 Apr 12, 2024
e79d771
NSX: Handle CheckHealthCommand to avoid host disconnection and errors…
nvazquez May 6, 2024
4e57cc9
Merge branch 'main' of https://github.com/apache/cloudstack into nsx-…
Pearl1594 Jun 5, 2024
0163da4
fix logger
Pearl1594 Jun 5, 2024
0903ba6
Merge branch 'main' of https://github.com/apache/cloudstack into nsx-…
Pearl1594 Jul 22, 2024
2726987
Update UDP active monitor to ICMP
Pearl1594 May 20, 2024
c393973
Fix NPE on restarting VPC with additional public IPs
Pearl1594 Jun 17, 2024
587f6fe
NSX / VPC: Reuse Source NAT IP from systemVM range on restarts
Pearl1594 Jun 21, 2024
459c23b
CKS: Public IP not found for VPC networks
Pearl1594 Jul 5, 2024
89aa0a5
Externalize retries and inverval for NSX segment deletion (#67)
nvazquez May 28, 2024
9733984
remove unused import
Pearl1594 Jul 22, 2024
9c1df1d
remove duplicate imports
Pearl1594 Jul 23, 2024
7e0007b
Merge branch 'main' of https://github.com/apache/cloudstack into nsx-…
Pearl1594 Aug 14, 2024
d2c386c
remove unused import
Pearl1594 Aug 14, 2024
0a31b13
revert externalizing cks settings
Pearl1594 Aug 14, 2024
70f70b2
fix test
Pearl1594 Aug 14, 2024
665b698
Refactor log messages
nvazquez Aug 26, 2024
738f934
Address comments
nvazquez Aug 26, 2024
66ee5da
Merge branch 'main' into nsx-integration-fixes
nvazquez Sep 5, 2024
09159af
Fix issue caused due to forward merge: 90fe1d
nvazquez Sep 5, 2024
d1a6038
Merge branch 'main' into nsx-integration-fixes
yadvr Sep 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
NSX: Handle CheckHealthCommand to avoid host disconnection and errors…
… on APIs

* NSX: Handle CheckHealthCommand to avoid host disconnection and errors on APIs

* Remove unused string
  • Loading branch information
nvazquez authored and Pearl1594 committed Jun 5, 2024
commit e79d77199a4399aecf466c018349dc621ad17c42
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

import com.cloud.agent.IAgentControl;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.CheckHealthAnswer;
import com.cloud.agent.api.CheckHealthCommand;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.PingCommand;
import com.cloud.agent.api.ReadyAnswer;
Expand Down Expand Up @@ -102,6 +104,8 @@ public PingCommand getCurrentStatus(long id) {
public Answer executeRequest(Command cmd) {
if (cmd instanceof ReadyCommand) {
return executeRequest((ReadyCommand) cmd);
} else if (cmd instanceof CheckHealthCommand) {
return executeRequest((CheckHealthCommand) cmd);
} else if (cmd instanceof DeleteNsxTier1GatewayCommand) {
return executeRequest((DeleteNsxTier1GatewayCommand) cmd);
} else if (cmd instanceof DeleteNsxSegmentCommand) {
Expand Down Expand Up @@ -293,6 +297,10 @@ private Answer executeRequest(ReadyCommand cmd) {
return new ReadyAnswer(cmd);
}

private Answer executeRequest(CheckHealthCommand cmd) {
return new CheckHealthAnswer(cmd, nsxApiClient.isNsxControllerActive());
}

private Answer executeRequest(CreateNsxTier1GatewayCommand cmd) {
String tier1GatewayName = NsxControllerUtils.getTier1GatewayName(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), cmd.getNetworkResourceId(), cmd.isResourceVpc());
boolean sourceNatEnabled = cmd.isSourceNatEnabled();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@

import com.cloud.network.Network;
import com.cloud.utils.exception.CloudRuntimeException;
import com.vmware.nsx.cluster.Status;
import com.vmware.nsx.model.ClusterStatus;
import com.vmware.nsx.model.ControllerClusterStatus;
import com.vmware.nsx.model.TransportZone;
import com.vmware.nsx.model.TransportZoneListResult;
import com.vmware.nsx_policy.infra.DhcpRelayConfigs;
Expand Down Expand Up @@ -113,6 +116,7 @@ public class NsxApiClient {
protected Logger logger = LogManager.getLogger(getClass());

// Constants
private static final String CLUSTER_STATUS_STABLE = "STABLE";
private static final String TIER_1_RESOURCE_TYPE = "Tier1";
private static final String TIER_1_LOCALE_SERVICE_ID = "default";
private static final String SEGMENT_RESOURCE_TYPE = "Segment";
Expand Down Expand Up @@ -200,6 +204,26 @@ public NsxApiClient(String hostname, String port, String username, char[] passwo
nsxService = apiClient::createStub;
}

public boolean isNsxControllerActive() {
try {
Status statusService = (Status) nsxService.apply(Status.class);
ClusterStatus clusterStatus = statusService.get();
if (clusterStatus == null) {
LOGGER.error("Cannot get NSX Cluster Status");
return false;
}
ControllerClusterStatus status = clusterStatus.getControlClusterStatus();
if (status == null) {
LOGGER.error("Cannot get NSX Controller Cluster Status");
return false;
}
return CLUSTER_STATUS_STABLE.equalsIgnoreCase(status.getStatus());
} catch (Error error) {
LOGGER.error(String.format("Error checking NSX Controller Health: %s", error.getMessage()));
return false;
}
}

public void createTier1NatRule(String tier1GatewayName, String natId, String natRuleId,
String action, String translatedIp) {
NatRules natRulesService = (NatRules) nsxService.apply(NatRules.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
package org.apache.cloudstack.service;

import com.cloud.network.Network;
import com.vmware.nsx.cluster.Status;
import com.vmware.nsx.model.ClusterStatus;
import com.vmware.nsx.model.ControllerClusterStatus;
import com.vmware.nsx_policy.infra.domains.Groups;
import com.vmware.nsx_policy.model.Group;
import com.vmware.nsx_policy.model.PathExpression;
Expand Down Expand Up @@ -93,4 +96,16 @@ public void testGetGroupsForTrafficEgress() {
Assert.assertEquals(List.of(String.format("%s/%s", NsxApiClient.GROUPS_PATH_PREFIX, segmentName)), sourceGroups);
Assert.assertEquals(List.of("ANY"), destinationGroups);
}

@Test
public void testIsNsxControllerActive() {
Status statusService = Mockito.mock(Status.class);
Mockito.when(nsxService.apply(Status.class)).thenReturn(statusService);
ClusterStatus clusterStatus = Mockito.mock(ClusterStatus.class);
ControllerClusterStatus status = Mockito.mock(ControllerClusterStatus.class);
Mockito.when(status.getStatus()).thenReturn("stable");
Mockito.when(statusService.get()).thenReturn(clusterStatus);
Mockito.when(clusterStatus.getControlClusterStatus()).thenReturn(status);
Assert.assertTrue(client.isNsxControllerActive());
}
}