ansible探针分发操作具体流程
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
public class SSHLinux {
public String exeCommand(String host, int port, String user, String password, String command) throws JSchException, IOException {
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
InputStream in = channelExec.getInputStream();
channelExec.setCommand(command);
channelExec.setErrStream(System.err);
channelExec.connect();
String out = IOUtils.toString(in, "UTF-8");
channelExec.disconnect();
session.disconnect();
return out;
}
}
public class HostConfig {
private HostConfig(){}
public static final String HOST="192.168.72.131";
public static final Integer PORT=22;
public static final String USER="root";
public static final String PASSWORD="root
2. ansible实现类
2.1 查看本地是否安装ansible
String cmd1 = "rpm -qa | grep ansible";
ans = sshLinux.exeCommand(host, port, user, password, cmd1);
2.2 如果没有安装则按流程安装,整个流程持续时间较长,大约需要5-8分钟
if (ans =="" || ans ==null){
try {
// 安装 epel-release yum源、安装ansible、// 在hosts文件中写入ip组名
String cmd2 = "yum -y install epel-release && yum -y install ansible";
// && echo -e '[webgroup]'> /etc/ansible/hosts
sshLinux.exeCommand(host, port, user, password, cmd2);
map.put("安装 epel-release yum源","成功");
map.put("安装 ansible","成功");
map.put("ip组名为","webgroup");
log.info("=========== 安 ------------ 1 ==========:" + JSONUtils.toJSONString(map));
} catch (Exception e) {
e.printStackTrace();
}
2.3 判断本地是否有 /usr/local/playbooks 目录,没有则创建
String cmd3 = "[ ! -d /usr/local/playbooks ] && mkdir -p /usr/local/playbooks";
sshLinux.exeCommand(host, port, user, password, cmd3);
2.4 判断本地 /usr/local/playbooks目录下有没有 main.yml 文件
String cmd4 ="if [ -f \"/usr/local/playbooks/main.yml\" ];then\n" +
" echo \"true\"\n" +
" else\n" +
" echo \"false\"\n" +
"fi";
String s = sshLinux.exeCommand(host, port, user, password, cmd4);
2.5 如果本地没有main.yml,则将准备好的文件复制到 /usr/local/playbooks目录下
// jar_package: 是此java文件的jar包全称
if(s.contains("false")){
// 将读取的main.txt文件内容写入 main.yml
String cmd5 ="unzip -j $(find / -name "+jar_package+") BOOT-INF/classes/ansible/main.yml -d /usr/local/playbooks/";
String execRet = sshLinux.exeCommand(host, port, user, password, cmd5);
}else {
map.put("main.yml文件","已存在");
}
---
