
다음에서 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
하지만 할 수 없어
아래의 플레이북 코드가 있습니다.
- 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은 쉘이 아니므로 쉘 구문을 사용하여 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