sparrow remote tasks - way to package your scripts and configurations.

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


/ 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'

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


/ 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'

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'


Alexey Melezhik

Leave a comment

About melezhik

user-pic Dev & Devops --- Then I beheld all the work of God, that a man cannot find out the work that is done under the sun: because though a man labour to seek it out, yet he shall not find it; yea further; though a wise man think to know it, yet shall he not be able to find it. (Ecclesiastes 8:17)