get_url fails to download

Hi,
I’m trying to download and install Segger JLink tools in an Ubuntu VM. The relevant portion of my ansible playbook is -

  • hosts: fw_dev

vars:

  • username: “vagrant”
  • download_dir: “/home/{{username}}/Downloads”
  • jlink_ver: “V632h_x86_64”
  • jlink_chk: “md5:cef479d627f9889a7f5c2cb77ee14877”

.
.

  • block:

  • name: Download SEGGER J-Link
    get_url:
    url: “https://www.segger.com/downloads/jlink/JLink_Linux_x86_64.deb
    dest: “{{download_dir}}/JLink_Linux_{{jlink_ver}}.deb”
    checksum: “{{jlink_chk}}”

  • name: Install SEGGER J-Link
    become: true
    apt:
    deb: “{{download_dir}}/JLink_Linux_{{jlink_ver}}.deb”
    state: present
    rescue:

  • debug:
    msg: “SEGGER J-Link Task Failed”

The output I get is -

TASK [Download SEGGER J-Link] **************************************************
fatal: [fw_dev]: FAILED! => {“changed”: false, “msg”: “The checksum for /home/vagrant/Downloads/JLink_Linux_V632h_x86_64.deb did not match cef479d627f9889a7f5c2cb77ee14877; it was d13f645acf61170d3ad5792e8e556750.”}

I’ve also tried without the checksum, but then I get a lailure on the install due to the package format being incorrect.
If I use a web browser to go to the url, it takes me to another page asking to accept the license terms before it downloads the package. How do I handle this using Ansible?
Thanks…
Brian

ons 2018-07-18 klockan 16:35 -0700 skrev Brian Peavey:

...
  I've also tried without the checksum, but then I get a lailure on
the install due to the package format being incorrect.
  If I use a web browser to go to the url, it takes me to another
page asking to accept the license terms before it downloads the
package. How do I handle this using Ansible?
  Thanks...

What is most likely happening is that Ansible isn't downloading the deb
file, but rather the HTML of the page you are seeing in the browser.

I would suggest that you download the deb file using the browser, where
you are in a position to accept the license terms, etc. Then you put
the deb file somewhere appropriate, and have Ansible install it from
that location instead.

Somewhere appropriate might for example be an internal web server or a
sufficiently restricted S3 bucket.

// Andreas

Hi,
  I'm trying to download and install Segger JLink tools in an Ubuntu VM.
The relevant portion of my ansible playbook is -

- hosts: fw_dev
  vars:
  - username: "vagrant"
  - download_dir: "/home/{{username}}/Downloads"
  - jlink_ver: "V632h_x86_64"
  - jlink_chk: "md5:cef479d627f9889a7f5c2cb77ee14877"

You should not have the dash infront of the variables, it's not valid.

  - block:
    - name: Download SEGGER J-Link
      get_url:
        url: "https://www.segger.com/downloads/jlink/JLink_Linux_x86_64.deb"
        dest: "{{download_dir}}/JLink_Linux_{{jlink_ver}}.deb"
        checksum: "{{jlink_chk}}"
    - name: Install SEGGER J-Link
      become: true
      apt:
        deb: "{{download_dir}}/JLink_Linux_{{jlink_ver}}.deb"
        state: present
    rescue:
      - debug:
          msg: "SEGGER J-Link Task Failed"

  I've also tried without the checksum, but then I get a lailure on the
install due to the package format being incorrect.
  If I use a web browser to go to the url, it takes me to another page
asking to accept the license terms before it downloads the package. How do
I handle this using Ansible?

Since you need to answer the HTML form you can't use get_url since it doesn't support sending that data, but the uri module does.
You can try this.

   - uri:
      url: https://www.segger.com/downloads/jlink/JLink_Linux_x86_64.deb
      method: POST
      body-format: form-urlencoded
      body: accept_license_agreement=accepted
      dest: /tmp/JLink_Linux_x86_64.deb

Thank you for the suggestion. I tried this -

  • block:
  • name: Download SEGGER J-Link

get_url:

uri:
url: “https://www.segger.com/downloads/jlink/JLink_Linux_x86_64.deb
method: POST
body_format: form-urlencoded
body: accept_license_agreement=accepted
dest: “{{download_dir}}/JLink_Linux_{{jlink_ver}}.deb”

checksum: “{{jlink_chk}}”

  • name: Install SEGGER J-Link
    become: true
    apt:
    deb: “{{download_dir}}/JLink_Linux_{{jlink_ver}}.deb”
    state: present
    rescue:
  • debug:
    msg: “SEGGER J-Link Task Failed”

but now I get this output -

TASK [Download SEGGER J-Link] **************************************************
fatal: [simplexity-dev]: FAILED! => {“changed”: false, “msg”: “value of body_format must be one of: raw, json, got: form-urlencoded”}

TASK [debug] *******************************************************************
ok: [simplexity-dev] => {
“msg”: “SEGGER J-Link Task Failed”
}

Not sure why it doesn’t like the body_format. I’m running ansible v2.5.5.
Thanks…
Brian

Thank you for the suggestion. I tried this -

  - block:
    - name: Download SEGGER J-Link
# get_url:
      uri:
        url: "https://www.segger.com/downloads/jlink/JLink_Linux_x86_64.deb"
        method: POST
        body_format: form-urlencoded
        body: accept_license_agreement=accepted
        dest: "{{download_dir}}/JLink_Linux_{{jlink_ver}}.deb"
# checksum: "{{jlink_chk}}"

<snip />

TASK [Download SEGGER J-Link]
**************************************************
fatal: [simplexity-dev]: FAILED! => {"changed": false, "msg": "value of
body_format must be one of: raw, json, got: form-urlencoded"}

TASK [debug]
*******************************************************************
ok: [simplexity-dev] => {
    "msg": "SEGGER J-Link Task Failed"
}

  Not sure why it doesn't like the body_format. I'm running ansible v2.5.5.
  Thanks...

New syntax feature in 2.6, for 2.5 I think this should work

   - name: Download SEGGER J-Link
     uri:
       url: "https://www.segger.com/downloads/jlink/JLink_Linux_x86_64.deb&quot;
       method: POST
       body: accept_license_agreement=accepted
       headers:
         Content-Type: application/x-www-form-urlencoded
       dest: "{{download_dir}}/JLink_Linux_{{jlink_ver}}.deb"

Thanks for the help - that worked great!

Brian