Idea behind a sparrow is quite simple. You have a script, you package it as sparrow plugin and you can re-use it somewhere else.

Give me list of available plugins:

$ sparrow plg search type name public app-cpm public bash public bitbucket-repo public check-tomcat-deploy public chemaxon-check public cpan-package public df-check public directory public docker-engine public file public foo-generic public foo-test public git-async-push public git-base public git-svn-export public gitprep public group public http-status public logdog public minion-check public module-release public mongodb public nano-setup public net-ping public nginx-check public nginx-example public outth-mysql-cookbook public package-generic public perl-app public perlbrew public proc-validate public ruby-test public sendmail public service public sph-check public ssh-sudo-check public ssh-sudo-try public sshd-check public stale-proc-check public svn-to-git-submodules public swat-nginx public swat-pintod public swat-test public templater public user private package-generic-dev

This plugin makes a trivial nano.rc file configuration:

$ sparrow plg install nano-setup

Project is just a container for plugins to group them logically:

$ sparrow project create utils

Task is a plugin with parameters, in other words task bind plugin with parameters to project:

$ sparrow task add utils nano-rc nano-setup $ sparrow task ini utils nano-rc tabsize 2

Now let's run our task:

$ sparrow task run utils nano-rc <nano-rc> / started rc file generated from template rc file updated ok scenario succeeded ok [b] output match 'rc file generated from template' ok [b] output match 'rc file updated' STATUS SUCCEED

You can even override task parameters via command line:

$ sparrow task run utils nano-rc --param tabsize=4

So sparrow plugins are packed scripts, but I want to package my configuration ...

A task initialization process could be the same if we want to reuse not only scripts but configuration. Every time I ssh on new server I want to apply the same nano.rc as it good for me. Here are remote sparrow tasks:

$ sparrow remote task upload utils/nano-rc 'my nano.rc setup' task updated task ini data updated OK

I have just uploaded a nano-rc task and it's configuration to my SparrowHub account. Now having this I could ssh to another server and re-apply my task:

$ ssh some-server $ sparrow remote task run utils/nano-rc task meta data saved to /home/vagrant/sparrow/cache/meta/utils/nano-rc.json ... public@nano-setup is uptodate (0.1.0) project utils already exists - nothing to do here ... task utils/nano-rc already exists, update task parameters task - set plugin to public@nano-setup task utils/nano-rc successfully created loaded test suite ini from /home/vagrant/sparrow/cache/meta/utils/nano-rc.ini OK <nano-rc> / started rc file generated from template rc file updated ok scenario succeeded ok [b] output match 'rc file generated from template' ok [b] output match 'rc file updated' STATUS SUCCEED

Pretty handy, huh?

Once remote task gets run for the first time , later you can run it as local sparrow task :

$ sparrow task run utils nano-rc

Ok, if I find my task quite common I even can share it with others:

$ sparrow remote task share utils/nano-rc task nano-rc shared OK now everyone could see it!

Everyone now can run my task:

$ sparrow remote task run melezhik@utils/nano-rc

The list of available remote tasks could be fetched like this:

$ sparrow remote task public-list 2016-10-24 12:59:06 melezhik@packages/toplist | install my favorite packages 2016-10-24 12:58:22 melezhik@utils/nano-rc | my nano.rc setup

The list of private remote tasks related to your account is taken as:

$ sparrow remote task list

You may take other actions on your remote tasks:

$ sparrow remote task hide app/secure # to hide task from others ( make it private ) $ sparrow remote task remove app/secure # to remove task

Further steps

Follow sparrow docs on remote tasks API. Or create useful task and share with others!

At the end of my post is a simple but illuminative example of remote task to install my favorite packages:

$ sparrow project create packages $ sparrow task add packages toplist package-generic $ sparrow task ini packages toplist list nano mc ncdu telnet tree $ sparrow remote task upload packages/toplist 'installs my favorite packages'

Regards

Alexey Melezhik