Skip to main content

Script execution engine for cloud environments.

Project description

CloudRunner.IO Agent tool and API

Copyright (c) 2013-2015 CloudRunner.IO

About

CloudRunner.IO is a simple yet powerful framework for remote server management. It’s key features include:

  • Execute scripts in your choice(bash, python, ruby, puppet and chef-solo recipes)

  • Pass environment variables between servers and between different script languages (works for a limited number of languages, but can be extended with a plugin)

  • Secure communication using SSL certificates

  • Fast and reliable, using ZeroMQ as a transport backend(although a different backend can be used as a plugin)

  • CloudRunner.IO also offers a commercial server, that performs a lot of useful tasks, including:

    • User management: assign roles for different users on different remote servers(how to impersonate an user on a server)

    • Library management: store, re-use scripts into different kind of stores - GitHub, ButBucket, SVN, Dropbox, Google Drive, Microsoft OneDrive, etc.

    • Workflow management - run multi-step scripts on different servers, with the ability to restart a script from arbitrary step, while keeping the environment context as it was in the first run.

    • Web dashboard for performing different operational tasks and for monitoring latest activities using filters.

    • Execution of scheduled tasks (using Cron)

    • Multi-tenancy - supports isolated group of users who can access servers in a shared environment (including public clouds).

    • HA and Multi-server routing - install master servers in different locations(subnets, public clouds, etc.) and access all your servers from a single access point. No need to attach to different master server to access a remote server into directly inaccessible network. All you need is to allow the master servers to see each other.

    • Highly customizable platform - write your own plugins(in Python) for different kind of workflow management.

    For more details see www.cloudrunner.io or ask for details at info@cloudrunner.io

Developing CloudRunner

CloudRunner Agent is an open-source project under the Apache 2 license. See the code at www.github.com/cloudrunner. Everyone is welcome to contribute.

Documentation

1. CloudRunner.IO agent

Install and configure the Agent for use with CloudRunner.IO Master server:

pip install cloudrunner
cloudrunner-node configure --org=MY-API-KEY -i NODE_NAME

Note: if NODE_NAME is skipped - the machine hostname will be used instead.

Note: you might need to install some packages before installing with pip. Cloudrunner depends on ZeroMQ, M2Crypto and httplib2. Install them using:

pip install pyzmq
pip install m2crypto
pip install httplib2

Note: Use python2 and pip2(python2-pip) for Arch Linux, CloudRunner only supports Python 2 at the moment, but this will change in future!

You can install them usign pip, but make sure you have already installed:

* C++ compiler: gcc-c++ (CentOS, Fedora) or gcc (Arch Linux) or g++ (Debian, Ubuntu)
* Python Dev libraries: python-devel (CentOS, Fedora) or python2 (Arch Linux) or python-dev (Debian)
* OpenSSL Dev libraries: libssl-dev (Debian) openssl-devel (Centos) or openssl (Arch Linux)
* Swig package (swig) on some Linuxes

2. CloudRunner.IO Python API

To use the Python CloudRunner.IO REST API client - install cloudrunner using pip:

pip install cloudrunner

Instantiate the client object:

from cloudrunner.api.client import *

client = Client('myusername', 'my_api_token')

Now you are ready to load/modify data on the server. Lets start with just listing the repositories in the Library:

repos = client.library.repositories.list() print repos

Returns an array of repositories:

[<cloudrunner.api.library.Repository at 0x7fb4f5e75fd0>,
 <cloudrunner.api.library.Repository at 0x7fb4f6dd7410>,
 <cloudrunner.api.library.Repository at 0x7fb4f5e777d0>,
 <cloudrunner.api.library.Repository at 0x7fb4f5e77890>]

You can use the returned objects and get their properties:

print repos[0].name

>> "RepoName"

Lets see the contents of the root folder in first repo:

print client.library.browser.list(repos[0].name, '/')

[<cloudrunner.api.library.Folder at 0x7f046c81cd90>,
 <cloudrunner.api.library.Script at 0x7f046c81ce10>,
 <cloudrunner.api.library.Script at 0x7f046c81cb90>,
 <cloudrunner.api.library.Script at 0x7f046c81cc10>,
 <cloudrunner.api.library.Script at 0x7f046c81cc50>,
 <cloudrunner.api.library.Script at 0x7f046c81cc90>,
 <cloudrunner.api.library.Script at 0x7f046c81cbd0>]

Now lets make a search for a specific log:

logs = client.logs.search.list(filter='my favourite pattern')
print logs

Fortunatelly, we get some results:

[<cloudrunner.api.logs.Log at 0x7f046c81cfd0>,
<cloudrunner.api.logs.Log at 0x7f046c81ca10>,
<cloudrunner.api.logs.Log at 0x7f046c81cb10>,
<cloudrunner.api.logs.Log at 0x7f046c81cb50>,
<cloudrunner.api.logs.Log at 0x7f046c81f090>,
<cloudrunner.api.logs.Log at 0x7f046c81f450>]

To retrieve the information for a log, we will load it using:

log = client.logs.get.item(logs[0])
print log

>> <cloudrunner.api.logs.Log object at 0x7f046c7b5310>

To get the runs under a specific workflow in a Log:

print log.workflow[0].runs[0]

<< [<cloudrunner.api.base.ApiObject at 0x7f046c7b5d90>]

print log.workflow[0].runs[0].uuid

<< u'ff57f0b8ac1a426783d5763626be07cb'

We want to see the output from the first run in the first workflow:

logs = client.logs.output.item(l.workflows[0].runs[0].uuid)
print logs

>> [<cloudrunner.api.logs.Log at 0x7f046d08f390>]

print logs[0].screen

>> <cloudrunner.api.base.ApiObject object at 0x7f046c7b5f90>

print logs[0].screen._values

>> {u'NODE_NAME': {u'lines': [[1423063412.399, [u'OUTPUT FROM MY SCRIPT EXECUTION'], u'O']]}}

In fact, we can load the node data directly from the screen object:

print logs[0].screen.NODE_NAME.lines

>> [[1423063412.399, [u'OUTPUT FROM MY SCRIPT EXECUTION'], u'O']]

We can also get the currently registered nodes in our account:

nodes = client.nodes.nodes.list()
print nodes

>> [<cloudrunner.api.nodes.Node at 0x7f8664b10250>,
 <cloudrunner.api.nodes.Node at 0x7f86645151d0>,
 <cloudrunner.api.nodes.Node at 0x7f8664515050>]

node = nodes[0]
print node.name

>> NODE_NAME

print node.meta._values

>> {
     u'ARCH': u'x86_64',
     u'AVAIL_MEM': 767,
     u'CPUS': None,
     u'CPU_CORES': 1,
     u'CRN_VER': u'1.1.0',
     u'DIST': u'CentOS',
     u'HOST': u'NODE_NAME',
     u'ID': u'NODE_NAME',
     u'MASTER_IP': u'192.168.1.1',
     u'OS': u'Linux',
     u'PRIVATE_IP': [u'10.1.1.1', u'127.0.0.1'],
     u'PUBLIC_IP': [u'54.1.1.1'],
     u'RELEASE': u'2.6.32-431.29.2.el6.x86_64',
     u'SERVER_NAME': u'NODE_NAME',
     u'TOTAL_MEM': 992
  }

print node.joined_at

>> u'2015-01-28 10:39:44'

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cloudrunner-1.1.4.tar.gz (56.5 kB view hashes)

Uploaded Source

Built Distribution

cloudrunner-1.1.4-py2-none-any.whl (91.5 kB view hashes)

Uploaded Python 2

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page