diff --git a/core/src/main/java/org/zstack/core/ansible/SshFileChecker.java b/core/src/main/java/org/zstack/core/ansible/SshFileChecker.java new file mode 100644 index 00000000000..37b3dd3d5f6 --- /dev/null +++ b/core/src/main/java/org/zstack/core/ansible/SshFileChecker.java @@ -0,0 +1,99 @@ +package org.zstack.core.ansible; + +import org.apache.logging.log4j.util.Strings; +import org.zstack.utils.Utils; +import org.zstack.utils.logging.CLogger; +import org.zstack.utils.ssh.Ssh; +import org.zstack.utils.ssh.SshResult; + +import java.io.File; + +public class SshFileChecker implements AnsibleChecker { + private static final CLogger logger = Utils.getLogger(SshFileChecker.class); + + private String filePath; + private String username; + private String password; + private String privateKey; + private String targetIp; + private int sshPort = 22; + + @Override + public boolean needDeploy() { + if (Strings.isEmpty(filePath)) { + return false; + } + + Ssh ssh = new Ssh(); + ssh.setUsername(username).setPrivateKey(privateKey).setPassword(password).setPort(sshPort).setHostname(targetIp); + + try { + String dirPath = new File(filePath).getParent(); + + ssh.command(String.format("if [ -d %s ] && [ -f %s ]; then exit 0; else exit 1; fi", dirPath, filePath)); + SshResult ret = ssh.run(); + if (ret.getReturnCode() != 0) { + return true; + } + + ssh.reset(); + } finally { + ssh.close(); + } + + return false; + } + + @Override + public void deleteDestFile() { + // do nothing. + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getPrivateKey() { + return privateKey; + } + + public void setPrivateKey(String privateKey) { + this.privateKey = privateKey; + } + + public int getSshPort() { + return sshPort; + } + + public void setSshPort(int sshPort) { + this.sshPort = sshPort; + } + + public String getTargetIp() { + return targetIp; + } + + public void setTargetIp(String targetIp) { + this.targetIp = targetIp; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } +}