Bash
如何獲取額外的 vars java 連結並在 ansible 中下載並解壓
然後提取它
tar -xzvf jdk-8u131-linux-x64.tar.gz
但做不到
我有以下 ansible 劇本程式碼
- name: Download Java to Latest Version shell: | mkdir /opt/java cd /opt/java wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" {{javaurl}} tar -xzvf ${javaurl##*/} - debug: msg: "The Java sdk is {{javaurl##*/}}"
我確實從 ansible 命令傳遞了 url,如下所示
ansible-playbook -i inventory.yml -k playbook.yml --extra-vars "java_url=http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz"
即使您實際上沒有提供有關程式碼如何失敗的任何資訊,也存在一些明顯的問題。Ansible 不是 shell,您無法使用 shell 語法訪問 Ansible 變數。您的程式碼 (
javaurl
) 和範例 CLI 呼叫 (java_url
) 中也有不同的變數名稱。我隨意選擇使用下面的 java_url。有多種方法可以開始修復現有任務。
# Consistently use Jinja - name: Download Java to Latest Version shell: | mkdir /opt/java cd /opt/java wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" {{ java_url }} tar -xzvf {{ (java_url | urlsplit).path | basename }} # Consistently use shell variables - name: Download Java to Latest Version shell: | mkdir /opt/java cd /opt/java wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" $java_url tar -xzvf ${java_url##*/} environment: java_url: "{{ java_url }}"
但是,您應該使用 Ansible 的內置功能重寫它來完成這項工作,而不是修復您的 shell 腳本。
- name: Create /opt/java file: dest: /opt/java state: directory - name: Download the Java JDK get_url: url: "{{ java_url }}" dest: /opt/java headers: Cookie: oraclelicense=accept-securebackup-cookie register: result - name: Extract the Java JDK unarchive: src: "{{ result.dest }}" remote_src: true dest: /opt/java