我一直在尝试使用 Java(runtime().exec() 和 ProcessBuilder)运行 anisble-playbooks,在这两种情况下,我发现我希望使用命令行传递的额外变量永远不会被执行,或者看起来是这样。
ProcessBuilder builder = new ProcessBuilder("ansible-playbook", "/root/playbooks/script-ilo.yml", "-e", "'@/tmp/vars.yml'");
Run Code Online (Sandbox Code Playgroud)
和
String[] ansible_run = {"ansible-playbook", "/root/playbooks/script-ilo.yml", "-e", "'@/tmp/vars.yml'"};
Process p = Runtime.getRuntime().exec(ansible_run,null);
Run Code Online (Sandbox Code Playgroud)
我将代码打包为 jar 并在测试系统中执行,在这两种情况下,ansible 都会运行 playbook 并抛出错误。
# java -jar /home/admin/test-script.jar
PLAY [esxi] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.50.100]
TASK [Set XML with new secrets] ************************************************
fatal: [192.168.50.100]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'change_user' is undefined\n\nThe error appears to have been in '/root/playbooks/script-ilo.yml': line 3, …Run Code Online (Sandbox Code Playgroud)