我一直试图使用Java (运行时().exec()和ProcessBuilder)运行anisble,在这两种情况下,我都看到我希望使用命令行传递的额外变量永远不会被执行。
ProcessBuilder builder = new ProcessBuilder("ansible-playbook", "/root/playbooks/script-ilo.yml", "-e", "'@/tmp/vars.yml'");和
String[] ansible_run = {"ansible-playbook", "/root/playbooks/script-ilo.yml", "-e", "'@/tmp/vars.yml'"};
Process p = Runtime.getRuntime().exec(ansible_run,null);我将代码打包为jar,并在测试系统中执行,在这两种情况下,ansible运行剧本并抛出一个错误。
# 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, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n tasks:\n - name: Set XML with new secrets\n ^ here\n"}
to retry, use: --limit @/root/playbooks/script-ilo.retry
PLAY RECAP *********************************************************************
192.168.50.100 : ok=1 changed=0 unreachable=0 failed=1当我在shell中运行命令ansible-playbook /root/playbooks/script-ilo.yml -e '@/tmp/vars.yml'时,它运行得非常完美。
我需要帮助解除这里的封锁。如果有更好的方法来做这件事,我会全神贯注的。
发布于 2018-12-03 06:09:02
String[] ansible_run = {"ansible-playbook", "/root/playbooks/script-ilo.yml", "-e", "'@/tmp/vars.yml'"};
不要将单引号放在-e值中;单引号仅用于shell,但ProcessBuilder不需要遍历shell,因此不需要转义参数。
实际上,当我给它喂食一个公然伪造的-e时,我还以为ansible会发牢骚,但是事实证明,任何这样的值都会以_raw_params的形式传递给hostvars,所以在您的例子中,它会设置如下的值:
"hostvars": {
"192.168.50.100": {
"_raw_params": "'@/tmp/vars.yml'",发布于 2020-12-14 10:30:52
我也面临过类似的问题,并使用以下方法解决了这个问题
ProcessBuilder builder = new ProcessBuilder("ansible-playbook", "/etc/ansible/playbooks_vmware/diskadd1.yaml","-e","vm_name=web04 addSizeInGB=40 scsi=0 unit_number=1");https://stackoverflow.com/questions/53588058
复制相似问题