Hello, I'm facing the exact same problem today. I've developed a module in go (actually mainly because I know this language, and also because I've a bunch of library I'm using to connect to a specific backend). Anyway, the module is running ok with the test-module utility (as described in the ansible documentation), but I'm totally unable to make it run within a playbook
The error is "module (mymodule) is missing interpreter line". I'm aware that this thread is more than 2 years old, but I cannot find any recent information on google and the documentation keeps on mentioning that it is possible to develop a module in *any* language. Do you have any workaround to propose to use a binary module? Were you able to achieve your goal? Regards, Olivier Le mercredi 21 août 2013 13:59:58 UTC+2, Michael DeHaan a écrit : > > Yes, we're aware! > > It should be possible to detect the module is binary and not look for the > shebang in it, and otherwise treat it like a non-Python module in another > language. > > One thing that we /may/ wish to do is automatically send binary modules > JSON, rather than the key=value legacy stuff it currently does by default > (see "WANTS_JSON" in the code for the hack we did for the Ruby modules). > > (I should aspect Go should have a decent JSON library available, right?) > > Then the module would just need to look at argv[1] and read in that file > as JSON and should be fine. > > I would suspect there's not a HUGE advantage to doing this, as while the > module is now binary, the arguments file must be transferred seperately -- > I'd almost bet the Python method is still faster and you can still load C > libraries from there. > > > > > On Wed, Aug 21, 2013 at 2:39 AM, shirou <[email protected] <javascript:>> > wrote: > >> Hi Michael and Kelsey, >> >> I am writing modules by python because I am familiar than golang >> (currently!) >> >> However, I think this is not only golang specific issue. >> On the ansible website[1], "any language is possible. " it includes C++. >> Some people may want to write modules by C++ with existing libraries. >> >> >> [1] http://www.ansibleworks.com/docs/moduledev.html >> >> Regards, >> WAKAYAMA Shirou >> >> >> 2013/8/21 Michael DeHaan <[email protected] <javascript:>>: >> > This isn't something I've spent time on, but it seems like it would be a >> > pretty basic patch that I would consider. >> > >> > Still interested in it for Go purposes? Curious about the use case >> knowing >> > who you work for :) >> > >> > --Michael >> > >> > >> > >> > >> > On Mon, Aug 19, 2013 at 11:00 PM, Kelsey Hightower >> > <[email protected] <javascript:>> wrote: >> >> >> >> >> >> >> >> On Tuesday, April 23, 2013 7:44:26 AM UTC-7, Shirou w wrote: >> >>> >> >>> Here is the sample time module source. >> >>> >> >>> https://gist.github.com/shirou/5444078 >> >>> >> >>> This is almost same as >> >>> http://ansible.cc/docs/moduledev.html#reading-input. >> >>> >> >>> This is a sample output using test-module. >> >>> (note: time format is different from other language.) >> >>> >> >>> % ./test-module -m ./main -a "f=2006" # with argument >> >>> *********************************** >> >>> RAW OUTPUT >> >>> {"time":"2013"} >> >>> >> >>> %./test-module -m ./main # without argument >> >>> *********************************** >> >>> RAW OUTPUT >> >>> {"time":"2013-04-22 23:37:13"} >> >>> >> >>> Since go-lang has JSON library in core library, it is easy to produce >> >>> JSON output. >> >>> >> >>> -- >> >>> WAKAYAMA Shirou >> >>> >> >>> >> >>> 2013/4/23 Michael DeHaan <[email protected]>: >> >>> > Tell you what, do you have a sample source for a go module that >> >>> > produces >> >>> > JSON output? >> >>> > >> >>> > Just a "Hello World" is ok -- I just don't know enough go to write >> one. >> >>> > >> >>> > I could then see what it would take to transfer it unaltered. >> >> >> >> >> >> Did this ever get resolved? Michael, did you ever get this to work? >> >> >> >>> >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > On Tue, Apr 23, 2013 at 9:22 AM, shirou <[email protected]> wrote: >> >>> >> >> >>> >> Go-lang compiler makes a static-linked binary that includes all of >> the >> >>> >> required libraries. This means a module becomes more independent >> from >> >>> >> target hosts environment. No other files (such as libc.so) are >> >>> >> required to execute that module. >> >>> >> That's why I want to use go-lang for writing modules. speed is >> second >> >>> >> ;) >> >>> >> >> >>> >> Anyway, thank you for accepting my concern. >> >>> >> >> >>> >> I like the design principles of ansible-project and I keep on using >> >>> >> ansible. >> >>> >> >> >>> >> Thank you >> >>> >> -- >> >>> >> WAKAYAMA Shirou >> >>> >> >> >>> >> >> >>> >> 2013/4/23 Michael DeHaan <[email protected]>: >> >>> >> > I don't think there's going to be that many needs where the >> system >> >>> >> > will >> >>> >> > require a native binary module for speed reasons, though I would >> >>> >> > support >> >>> >> > patches that detected the file was binary and attempted >> >>> >> > to /not/ process it or transfer it differently, I guess, if they >> >>> >> > were >> >>> >> > small >> >>> >> > and simple enough. >> >>> >> > >> >>> >> > It's just not something many people are going to use. >> >>> >> > >> >>> >> > As for why we modify modules, there are definitely some things >> we do >> >>> >> > with >> >>> >> > modules to replace shebang lines on different systems (suppose >> one >> >>> >> > uses >> >>> >> > one >> >>> >> > python, another another, and one isn't in the user's path >> because we >> >>> >> > don't >> >>> >> > trust the user) -- this is the ansible_python_interpreter >> mechanism. >> >>> >> > What >> >>> >> > we do with our own python modules to embed arguments and optimize >> >>> >> > the >> >>> >> > way >> >>> >> > data is transferred in another story, this would be about the >> >>> >> > 'non-newstyle-module' code path. >> >>> >> > >> >>> >> > --Michael >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > On Mon, Apr 22, 2013 at 11:19 AM, Shirou w <[email protected]> >> >>> >> > wrote: >> >>> >> >> >> >>> >> >> Hi, all >> >>> >> >> >> >>> >> >> I made a simple time module by using golang (http://golang.org/ >> ). >> >>> >> >> >> >>> >> >> It can run with "test-module" but when I run with ansible >> command, >> >>> >> >> did >> >>> >> >> not >> >>> >> >> work. >> >>> >> >> >> >>> >> >> % ansible -vvv all -m time -M . --ask-pass >> >>> >> >> SSH password: >> >>> >> >> <127.0.0.1> ESTABLISH CONNECTION FOR USER: sample on PORT 22 TO >> >>> >> >> 127.0.0.1 >> >>> >> >> <127.0.0.1> EXEC /bin/sh -c 'mkdir -p >> >>> >> >> $HOME/.ansible/tmp/ansible-1366642710.56-42277018789729 && chmod >> >>> >> >> a+rx >> >>> >> >> $HOME/.ansible/tmp/ansible-1366642710.56-42277018789729 && echo >> >>> >> >> $HOME/.ansible/tmp/ansible-1366642710.56-42277018789729' >> >>> >> >> <127.0.0.1> REMOTE_MODULE time.go >> >>> >> >> 127.0.0.1 | FAILED => failure encoding into utf-8 >> >>> >> >> >> >>> >> >> This is caused by _copy_module in the runner/__init__.py. >> >>> >> >> I am new to ansible but I think the _copy_module assumes only >> >>> >> >> string >> >>> >> >> module. >> >>> >> >> Is this true or wrong? if true, ansible will not support binary >> >>> >> >> module? >> >>> >> >> >> >>> >> >> BTW, golang makes static linked binary which can just copy to >> the >> >>> >> >> remote >> >>> >> >> and run. >> >>> >> >> It may become good solution to writing module which requires >> speed. >> >>> >> >> (ah, the file size is big just a little...) >> >>> >> >> >> >>> >> >> Thank you. >> >>> >> >> >> >>> >> >> -- >> >>> >> >> 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 [email protected]. >> >>> >> >> For more options, visit >> https://groups.google.com/groups/opt_out. >> >>> >> >> >> >>> >> >> >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > -- >> >>> >> > Michael DeHaan <[email protected]> >> >>> >> > CTO, AnsibleWorks, Inc. >> >>> >> > http://www.ansibleworks.com/ >> >>> >> > >> >>> >> > -- >> >>> >> > 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 [email protected]. >> >>> >> > For more options, visit https://groups.google.com/groups/opt_out >> . >> >>> >> > >> >>> >> > >> >>> >> >> >>> >> -- >> >>> >> 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 [email protected]. >> >>> >> For more options, visit https://groups.google.com/groups/opt_out. >> >>> >> >> >>> >> >> >>> > >> >>> > -- >> >>> > 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 [email protected]. >> >>> > For more options, visit https://groups.google.com/groups/opt_out. >> >>> > >> >>> > >> >> >> >> -- >> >> 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 [email protected] <javascript:>. >> >> >> >> For more options, visit https://groups.google.com/groups/opt_out. >> > >> > >> > >> > >> > -- >> > Michael DeHaan <[email protected] <javascript:>> >> > >> > CTO, AnsibleWorks, Inc. >> > http://www.ansibleworks.com/ >> > >> > > > > -- > Michael DeHaan <[email protected] <javascript:>> > CTO, AnsibleWorks, Inc. > http://www.ansibleworks.com/ > > -- 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 [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/852f7814-35e5-4672-8a03-b8ed84d6bf05%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
