簡體   English   中英

從 Java 運行 ansible-playbook

[英]running ansible-playbook from java

我一直在嘗試使用 Java(runtime().exec() 和 ProcessBuilder)運行 anisble-playbooks,在這兩種情況下,我都看到我希望使用命令行傳遞的額外變量永遠不會被執行,或者看起來如此。

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'時,它運行完美。

我需要幫助來解鎖這里。 如果有更好的方法來做到這一點,我全神貫注。

String[] ansible_run = {"ansible-playbook", "/root/playbooks/script-ilo.yml", "-e", "'@/tmp/vars.yml'"};

不要在該-e值中放置單引號; 單引號僅在您的外殼程序中需要,但ProcessBuilder不會通過您的外殼程序,因此不需要對參數進行轉義。

當我給它一個公然偽造的-e時,我實際上希望 ansible 發出嗚嗚聲,但事實證明,任何此類值都作為_raw_params傳遞給hostvars ,因此在您的情況下,它會設置一個如下值:

"hostvars": {
    "192.168.50.100": {
        "_raw_params": "'@/tmp/vars.yml'",

我遇到了類似的問題並使用以下方法解決了它

ProcessBuilder builder = new ProcessBuilder("ansible-playbook", "/etc/ansible/playbooks_vmware/diskadd1.yaml","-e","vm_name=web04 addSizeInGB=40 scsi=0 unit_number=1");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM