추가 vars Java 링크를 얻고 Ansible에서 다운로드하여 추출하는 방법

추가 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

하지만 할 수 없어

아래의 플레이북 코드가 있습니다.

- 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

관련 정보