/*-
* ============LICENSE_START=======================================================
- * ONAP : APPC
+ * ONAP : CCSDK
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018 Samsung Electronics. All rights reserved.
* ================================================================================
- * Copyright (C) 2017 Amdocs
+ *
* =============================================================================
* Licensed 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.
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *
+ *
* ============LICENSE_END=========================================================
*/
package org.onap.ccsdk.sli.adaptors.saltstack.impl;
-import org.onap.appc.encryption.EncryptionTool;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
import org.apache.sshd.ClientChannel;
import org.apache.sshd.ClientSession;
import org.apache.sshd.SshClient;
import org.apache.sshd.client.future.OpenFuture;
import org.apache.sshd.common.KeyPairProvider;
import org.apache.sshd.common.keyprovider.FileKeyPairProvider;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
+import org.onap.appc.encryption.EncryptionTool;
import org.onap.ccsdk.sli.adaptors.saltstack.model.SaltstackResult;
import org.onap.ccsdk.sli.adaptors.saltstack.model.SaltstackResultCodes;
-import org.onap.ccsdk.sli.core.sli.SvcLogicException;
import java.io.OutputStream;
import java.security.KeyPair;
*/
class SshConnection {
+ public static final int DEFAULT_CONNECTION_RETRY_DELAY = 60;
+ public static final int DEFAULT_CONNECTION_RETRY_COUNT = 5;
private static final EELFLogger logger = EELFManager.getInstance().getApplicationLogger();
-
private static final long AUTH_TIMEOUT = 60000;
- private static final long EXEC_TIMEOUT = 120000;
-
+ private static final long EXEC_TIMEOUT = 120;
private String host;
private int port;
private String username;
private SshClient sshClient;
private ClientSession clientSession;
- public static final int DEFAULT_CONNECTION_RETRY_DELAY = 60;
- public static final int DEFAULT_CONNECTION_RETRY_COUNT = 5;
-
public SshConnection(String host, int port, String username, String password, String keyFile) {
this.host = host;
this.port = port;
sshClient.start();
try {
clientSession =
- sshClient.connect(EncryptionTool.getInstance().decrypt(username), host, port).await().getSession();
+ sshClient.connect(EncryptionTool.getInstance().decrypt(username), host, port).await().getSession();
if (password != null) {
clientSession.addPasswordIdentity(EncryptionTool.getInstance().decrypt(password));
}
if (keyFile != null) {
- KeyPairProvider keyPairProvider = new FileKeyPairProvider(new String[] {
- keyFile
+ KeyPairProvider keyPairProvider = new FileKeyPairProvider(new String[]{
+ keyFile
});
KeyPair keyPair = keyPairProvider.loadKeys().iterator().next();
clientSession.addPublicKeyIdentity(keyPair);
authFuture.await(AUTH_TIMEOUT);
if (!authFuture.isSuccess()) {
String errMessage = "Error establishing ssh connection to [" + username + "@" + host + ":" + port
- + "]. Authentication failed.";
+ + "]. Authentication failed.";
result.setStatusCode(SaltstackResultCodes.USER_UNAUTHORIZED.getValue());
result.setStatusMessage(errMessage);
}
} catch (RuntimeException e) {
String errMessage = "Error establishing ssh connection to [" + username + "@" + host + ":" + port + "]." +
- "Runtime Exception : "+ e.getMessage();
+ "Runtime Exception : " + e.getMessage();
result.setStatusCode(SaltstackResultCodes.UNKNOWN_EXCEPTION.getValue());
result.setStatusMessage(errMessage);
} catch (Exception e) {
String errMessage = "Error establishing ssh connection to [" + username + "@" + host + ":" + port + "]." +
- "Host Unknown : " + e.getMessage();
+ "Host Unknown : " + e.getMessage();
result.setStatusCode(SaltstackResultCodes.HOST_UNKNOWN.getValue());
result.setStatusMessage(errMessage);
}
public SaltstackResult connectWithRetry(int retryCount, int retryDelay) {
int retriesLeft;
SaltstackResult result = new SaltstackResult();
- if(retryCount == 0)
- retryCount = DEFAULT_CONNECTION_RETRY_COUNT;
- if(retryDelay == 0)
- retryDelay = DEFAULT_CONNECTION_RETRY_DELAY;
+ if (retryCount == 0) {
+ retryCount = DEFAULT_CONNECTION_RETRY_COUNT;
+ }
+ if (retryDelay == 0) {
+ retryDelay = DEFAULT_CONNECTION_RETRY_DELAY;
+ }
retriesLeft = retryCount + 1;
do {
try {
waitForConnection(retryDelay);
retriesLeft--;
logger.debug("Retrying SSH connection. Attempt [" + Integer.toString(retryCount - retriesLeft + 1)
- + "] out of [" + retryCount + "]");
+ + "] out of [" + retryCount + "]");
} else {
throw e;
}
- }
+ }
} while (retriesLeft > 0);
return result;
}
}
public void setExecTimeout(long timeout) {
- this.timeout = timeout;
+ //convert seconds to milliseconds
+ this.timeout = timeout * 1000;
}
- public SaltstackResult execCommand(String cmd, OutputStream out, OutputStream err) {
- return execCommand(cmd, out, err, false);
+ public SaltstackResult execCommand(String cmd, OutputStream out, OutputStream err, SaltstackResult result) {
+ return execCommand(cmd, out, err, false, result);
}
- public SaltstackResult execCommandWithPty(String cmd, OutputStream out) {
- return execCommand(cmd, out, out, true);
+ public SaltstackResult execCommandWithPty(String cmd, OutputStream out, SaltstackResult result) {
+ return execCommand(cmd, out, out, true, result);
}
- private SaltstackResult execCommand(String cmd, OutputStream out, OutputStream err, boolean usePty) {
- SaltstackResult result = new SaltstackResult();
+ private SaltstackResult execCommand(String cmd, OutputStream out, OutputStream err,
+ boolean usePty, SaltstackResult result) {
+
try {
if (logger.isDebugEnabled()) {
logger.debug("SSH: executing command");
return result;
} catch (RuntimeException e) {
String errMessage = "Error establishing ssh connection to [" + username + "@" + host + ":" + port + "]." +
- "Runtime Exception : "+ e.getMessage();
+ "Runtime Exception : " + e.getMessage();
result.setStatusCode(SaltstackResultCodes.UNKNOWN_EXCEPTION.getValue());
result.setStatusMessage(errMessage);
} catch (Exception e1) {
String errMessage = "Error executing command [" + cmd + "] over SSH [" + username + "@" + host + ":" +
- port + "]"+ e1.getMessage();
+ port + "]" + e1.getMessage();
result.setStatusCode(SaltstackResultCodes.UNKNOWN_EXCEPTION.getValue());
result.setStatusMessage(errMessage);
}