if (!CommonTools.isLocal(localizedGatewayIP))
{
/* Get the ssh key. TODO: handle case without sshkey (eg. if user/password provided) */
// return manager can not be null
Instance manager = Utilities.getManagerByIP(CommonTools.getLocalHostname(), CommonTools.getLocalAddress(), topology.getInstancesByType(E3Constant.E3MANAGER), logger);
SSHKey key = manager.getSSHKey();
if (key != null) {
if(logger.isDebugEnabled()) {
logger.debug("using key: " + key.getName());
}
}
/* Connect via ssh. */
SSHCommand sshCommand = (SSHCommand) cmd;
sshCommand.connect(key, localizedGatewayIP, 22, instance.getUser(), instance.getPassword());
if (!sshCommand.isConnected())
{
String errorSshMsg = "Error: ssh connection to " + localizedGatewayIP+ " failed (sshkey=";
errorSshMsg += (key == null) ? "not defined " : key.getName();
errorSshMsg += "user=" + instance.getUser() + ")";
throw new InstallerDeployException(errorSshMsg);
}
if(logger.isDebugEnabled()) {
logger.debug("command type: " + cmd.getImplementationType());
}
/* check if the destination directory already exists. */
ShellCommandResult dirExistResult = cmd.execShellCommand("ls "+ config.getRemotePath() + "/bin/install.sh");
if (dirExistResult.getExitStatus() != 0)
{
/* Create the destination directory */
ShellCommandResult dirCreateResult = cmd.execShellCommand("mkdir -p -m 755 "+ config.getRemotePath());
if (dirCreateResult.getExitStatus() != 0)
{
throw new InstallerDeployException("Unable to create remote destination directory "+ config.getRemotePath() + ".");
}
/* Remote copy the package. */
if(logger.isDebugEnabled()) {
logger.debug("package url: " + config.getPackageUrl());
}
URL urlPackage = new URL(config.getPackageUrl());
String strFilename;
if (urlPackage.getProtocol().equals("file"))
{
strFilename = new File(urlPackage.getFile()).getName();
cmd.copy(urlPackage.getFile(), config.getRemotePath() + "/" + strFilename);
} else {
/* TODO: handle HTTP package URL ? */
if(logger.isDebugEnabled()) {
logger.debug("URL type " + urlPackage.getProtocol() + " is not supported yet.");
}
continue;
}
/* Unzip TODO: instaler filename and install location in config */
ShellCommandResult cmdRes = cmd.execShellCommand("tar xfz " + strFilename, config.getRemotePath());
if (cmdRes.getExitStatus() != 0)
{
/* unzip has failed, display output. TODO: handle failure */
throw new InstallerDeployException("Unzip archive" + strFilename + " failed (returned code: "+ cmdRes + ")");
}
} else{
// version already installed in the gateway
if(logger.isErrorEnabled()) {
logger.error("WARNING: " + config.getRemotePath() + " already exist on gateway " + localizedGatewayIP);
}
report.append("WARNING: " + config.getRemotePath() + " already exist on gateway " + localizedGatewayIP + ". " +
"Be carefull this existing binary was used. Remove it first to use the new binary content !!! \n");
}
String fullyQualifiedInstallerCmd = replaceManagerIPPattern(config.getInstallerCmd(), managerIP);
if(logger.isDebugEnabled()) {
logger.debug("Executing shell command '" + fullyQualifiedInstallerCmd + "'");
}
/* Launch Install. */
ShellCommandResult cmdResInstallation = cmd.execShellCommand(fullyQualifiedInstallerCmd, config.getRemotePath());
if (cmdResInstallation.getExitStatus() != 0)
{
/* remote installation has failed, display output. */
throw new InstallerDeployException("Installation has failed while executing command [" + fullyQualifiedInstallerCmd + "]\ndetails:"+ cmdResInstallation);
}
/* Launch sanity check. */
ShellCommandResult cmdResSanityCheck = cmd.execShellCommand(config.getSanityCheckCmd(), config.getRemotePath());
if (cmdResSanityCheck.getExitStatus() != 0)
{
/* remote installation has failed, display output. TODO: handle failure */
throw new InstallerDeployException("Sanity check has failed while executing command ["+ config.getSanityCheckCmd() + "] in the folder [" + config.getRemotePath() + "]\nDetails:"+ cmdResSanityCheck);
}
}
else { // Local
//if ("E3Gateway".equals(instance.getType())) {
String generateNatureCmd = config.getGenerateNatureCmd();
if (generateNatureCmd != null && !generateNatureCmd.isEmpty())
{
String fullyQualifiedGenerateNatureCmd = replaceManagerIPPattern(generateNatureCmd, managerIP);
if(logger.isDebugEnabled()) {
logger.debug("Executing shell command '" + fullyQualifiedGenerateNatureCmd + "'");
}
/* Get the ssh key. TODO: handle case without sshkey (eg. if user/password provided) */
SSHKey key = instance.getSSHKey();
if (key != null) {
if(logger.isDebugEnabled()) {
logger.debug("using key: " + key.getName());
}
}
/* Connect via ssh. */
SSHCommand sshCommand = (SSHCommand) cmd;
sshCommand.connect(key, localizedGatewayIP, 22, instance.getUser(), instance.getPassword());
if (!sshCommand.isConnected())
{
String errorSshMsg = "Error: ssh connection to" + localizedGatewayIP+ " failed (sshkey=";
errorSshMsg += (key == null) ? "not defined " : key.getName();
errorSshMsg += "user=" + instance.getUser() + ")";
throw new InstallerDeployException(errorSshMsg);
}
// And we need to update the configuration.properties file directly