
我想從以下位置下載javahttp://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
然後提取它
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"
答案1
儘管您實際上沒有提供有關程式碼如何失敗的任何信息,但還是存在一些明顯的問題。 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