由于初次使用ansible,遇到一些问题在此记录一下,在网上资料也不多,有时候遇到一些奇葩问题真的毫无头绪。
一
通过Runtime.getRuntime().exec(cmd); 可以执行ansible ad-hoc命令
比如:ansible all -m ping
但是复杂一些的命令就会执行不了,不能说执行不力,就是执行之后没反应,也不报错,达不到预期的效果
比如:ansible all -m copy -a ‘src=/xxx/xxx/a.log dest=/xxx/xxx/xxx/a.log’
但是这条命令直接在命令行里是可以执行的,就比较郁闷了。
后来查了很多资料发现有把命令拆成命令数组的方式,查了exec方法也接受数组,于是尝试了一下
String[] arr = {“ansible”,“all”,"-m",“copy”,"-a","‘src=/xxx/xxx/a.log dest=/xxx/xxx/xxx/a.log’"}
执行后报了错,有报错就有办法入手排查,最可怕的是什么信息都没有。
报错如下
“msg”: “src (or content) is required”
应该是这条命令的’src=/xxx/xxx/a.log dest=/xxx/xxx/xxx/a.log’没有被正确的解析。再次网上查资料,后来受到这篇文章的启发,
将单引号去掉后可以执行了,开心