package org.kisst.gft.action; import org.kisst.gft.GftContainer; import org.kisst.gft.filetransfer.FileServer; import org.kisst.gft.ssh.SshFileServer; import org.kisst.gft.ssh.SshHost; import org.kisst.gft.task.BasicTask; import org.kisst.gft.task.Task; import org.kisst.props4j.Props; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SshAction implements Action { private final static Logger logger=LoggerFactory.getLogger(SshAction.class); private final GftContainer gft; private final String commandTemplate; private final SshHost host; private final boolean safeToRetry; public SshAction(GftContainer gft, Props props) { this.gft=gft; commandTemplate =props.getString("command"); String hostname=props.getString("host"); FileServer server = gft.getFileServer(hostname); if (server instanceof SshFileServer) this.host= ((SshFileServer)server).getSshHost(); else throw new RuntimeException("Host "+hostname+" is not an SshFileServer"); safeToRetry = props.getBoolean("safeToRetry", false); } @Override public boolean safeToRetry() { return safeToRetry; } @Override public void execute(Task task) { BasicTask basictask= (BasicTask) task; String command=gft.processTemplate(commandTemplate, basictask.getActionContext(this)); logger.info("ssh call to {} with command {}", host, command); String result=host.call(command); logger.info("ssh result {}",result); } }