Как получить ссылку extra vars java, загрузить ее в ansible и извлечь

Как получить ссылку extra vars java, загрузить ее в ansible и извлечь

Я хочу скачать Java сhttp://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 playbook

- 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##*/}}"

Я передал URL из команды ansible, как показано ниже

 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 — это не оболочка, и вы не можете получить доступ к переменным 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 для выполнения этой работы.

- 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

Связанный контент