Bash

如何獲取額外的 vars java 連結並在 ansible 中下載並解壓

  • September 24, 2021

我想從http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz下載 java

然後提取它

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

引用自:https://serverfault.com/questions/1078404