@Override public void disconnectFromGateway(@Nonnull String vpnId, @Nonnull String gatewayId) throws CloudException, InternalException { APITrace.begin(provider, "disconnectVPNFromGateway"); try { VPNGateway gateway = getGateway(gatewayId); VPN vpn = getVPN(vpnId); if (gateway == null) { throw new CloudException("No such VPN gateway: " + gatewayId); } if (vpn == null) { throw new CloudException("No such VPN: " + vpnId); } String connectionId = null; for (VPNConnection c : listConnections(vpnId, null)) { if (gatewayId.equals(c.getProviderGatewayId())) { connectionId = c.getProviderVpnConnectionId(); break; } } if (connectionId == null) { logger.warn( "Attempt to disconnect a VPN from a gateway when there was no connection in the cloud"); return; } ProviderContext ctx = provider.getContext(); if (ctx == null) { throw new CloudException("No context was configured"); } Map<String, String> parameters = provider.getStandardParameters(provider.getContext(), ELBMethod.DELETE_VPN_CONNECTION); EC2Method method; parameters.put("VpnConnectionId", connectionId); method = new EC2Method(provider, provider.getEc2Url(), parameters); try { method.invoke(); } catch (EC2Exception e) { logger.error(e.getSummary()); e.printStackTrace(); throw new CloudException(e); } } finally { APITrace.end(); } }
private @Nullable VPNConnection toConnection( @SuppressWarnings("UnusedParameters") @Nonnull ProviderContext ctx, @Nullable Node node) throws CloudException, InternalException { if (node == null) { return null; } NodeList attributes = node.getChildNodes(); VPNConnection connection = new VPNConnection(); connection.setCurrentState(VPNConnectionState.PENDING); for (int i = 0; i < attributes.getLength(); i++) { Node attr = attributes.item(i); String nodeName = attr.getNodeName(); if (nodeName.equalsIgnoreCase("vpnConnectionId") && attr.hasChildNodes()) { connection.setProviderVpnConnectionId(attr.getFirstChild().getNodeValue().trim()); } else if (nodeName.equalsIgnoreCase("customerGatewayId") && attr.hasChildNodes()) { connection.setProviderGatewayId(attr.getFirstChild().getNodeValue().trim()); } else if (nodeName.equalsIgnoreCase("vpnGatewayId") && attr.hasChildNodes()) { connection.setProviderVpnId(attr.getFirstChild().getNodeValue().trim()); } else if (nodeName.equalsIgnoreCase("customerGatewayConfiguration") && attr.hasChildNodes()) { connection.setConfigurationXml(attr.getFirstChild().getNodeValue().trim()); } else if (nodeName.equalsIgnoreCase("state") && attr.hasChildNodes()) { String state = attr.getFirstChild().getNodeValue().trim(); if (state.equalsIgnoreCase("available")) { connection.setCurrentState(VPNConnectionState.AVAILABLE); } else if (state.equalsIgnoreCase("deleting")) { connection.setCurrentState(VPNConnectionState.DELETING); } else if (state.equalsIgnoreCase("deleted")) { connection.setCurrentState(VPNConnectionState.DELETED); } else if (state.equalsIgnoreCase("pending")) { connection.setCurrentState(VPNConnectionState.PENDING); } else { logger.warn("DEBUG: Unknown VPN connection state: " + state); } } else if (nodeName.equalsIgnoreCase("type") && attr.hasChildNodes()) { String t = attr.getFirstChild().getNodeValue().trim(); if (t.equalsIgnoreCase("ipsec.1")) { connection.setProtocol(VPNProtocol.IPSEC1); } else if (t.equalsIgnoreCase("openvpn")) { connection.setProtocol(VPNProtocol.OPEN_VPN); } else { logger.warn("DEBUG: Unknown VPN connection type: " + t); connection.setProtocol(VPNProtocol.IPSEC1); } } } if (connection.getProviderVpnConnectionId() == null) { return null; } return connection; }