Testing file upload with uri?

1,058 views
Skip to first unread message

Guy Matz

unread,
May 29, 2014, 10:07:22 AM5/29/14
to ansible...@googlegroups.com
Hi!  Anyone know if it's possible to test the upload of a binary file using the uri module?  It doesn't look like httplib2 has this functionality . . .

Thanks,
Guy

Michael DeHaan

unread,
May 31, 2014, 12:28:28 PM5/31/14
to ansible...@googlegroups.com
All the arguments are passed on the command line for that module versus loaded form local files, so probably not.   Patches to accept a data file to read would be accepted.




--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/d2cf9f61-f941-411b-9bd4-db0e269efee7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Guy Matz

unread,
Jun 6, 2014, 9:52:18 AM6/6/14
to ansible...@googlegroups.com
Hi!  How do you feel about something like this for the uri module?
   # module.params section

   # if body is a file URL, e.g. 'file:///bin/false', read it in and replace the text of body with the binary contents of the file
   if urlparse.urlparse(body).scheme == 'file':
        try:
            body = open(urlparse.urlparse(body).path, 'rb').read()
        except Exception as e:
            module.fail_json(msg="failed to open %s for body: %s" % (urlparse.urlparse(body).path, str(e) ) )

Should file location be relative to roles dir?

Thanks a lot!!!!

Guy

Michael DeHaan

unread,
Jun 8, 2014, 11:31:34 AM6/8/14
to ansible...@googlegroups.com
I actually don't understand my response to the 1st question of this thread, that may have been a mis-post.

"   # if body is a file URL, e.g. 'file:///bin/false', read it in and replace the text of body with the binary contents of the file"

Sorry, also not following.




Adrián López Tejedor

unread,
Jun 9, 2014, 7:19:56 AM6/9/14
to ansible...@googlegroups.com
I want to make the same (upload a release to github API with uri module).

I have seen an example posting the contents of a file:
       method=POST user=your_username password=your_pass 
       body="{{ lookup('file','issue.json') }}" force_basic_auth=yes

The problem seems that lookup want to read a utf8 file:
/usr/share/pyshared/ansible/runner/lookup_plugins/file.py
            ret.append(codecs.open(path, encoding="utf8").read().rstrip())

I was trying also something like:
  - name: read file
    shell: cat issue.rpm
    register: file

  - uri: url=http://localhost
         method=POST
         HEADER_Content-Type="application/octet-stream"
         body="{{ file.stdout }}"

But it doesn't work:
msg: this module requires key=value arguments ...

Guy Matz

unread,
Jun 9, 2014, 12:13:36 PM6/9/14
to ansible...@googlegroups.com
That 'file:///' part is there so that the uri module can be notified that the body data is actually in a file and should be read in from disk . . .  I don't really like that because it seems a little too magical.

I prefer either amending the current file lookup plugin to read binary data if the file is such (currently it is only able to read text files) or adding a bin_file lookup that is not concerned about utf8, etc.

That make any more sense?  :-(

Thanks a lot,
Guy


Michael DeHaan

unread,
Jun 9, 2014, 4:40:39 PM6/9/14
to ansible...@googlegroups.com
Ok, yes.

The proposal seems like it should be to make the uri module take an optional "file" parameter, so the lookup plugin doesn't have to use the content parameter.

This will prevent the need to transfer the file in the arguments, which could get ungainly for large files.

--Michael


Guy Matz

unread,
Jun 10, 2014, 10:42:09 AM6/10/14
to ansible...@googlegroups.com
OR - and I think I prefer this - should I create a new lookup_plugin called rawfile (binfile previously mentioned in this post) that doesn't do any encoding and simply slurps the file in?

Should this post be in "Ansible Development"?

Thanks again,
Guy

Michael DeHaan

unread,
Jun 11, 2014, 2:57:47 PM6/11/14
to ansible...@googlegroups.com
It's a devel topic mostly, but the answer is no, because lookup plugins are just going to evaluate to string parameters here, and this is an inefficient way to pass large files to remote hosts.





Martin Etmajer

unread,
Jan 16, 2015, 4:39:55 PM1/16/15
to ansible...@googlegroups.com
I am running into the same issues and I wonder if anyone has come up with a solution to this? +1 from me.
Reply all
Reply to author
Forward
0 new messages