marathon-api
This gem provides an object oriented interface to the Marathon Remote API. At the time if this writing, marathon-api is meant to interface with Marathon version 0.10.1.
Installation
Add this line to your application's Gemfile:
gem 'marathon-api', :require => 'marathon'
And then run:
$ bundle install
Alternatively, if you wish to just use the gem in a script, you can run:
$ gem install marathon-api
Finally, just add require 'marathon'
to the top of the file using this gem.
Usage
marathon-api is designed to be very lightweight. Only little state is cached to ensure that each method call's information is up to date. As such, just about every external method represents an API call.
If you're running Marathon locally on port 8080, there is no setup to do in Ruby. If you're not or change the path or port, you'll have to point the gem to your socket or local/remote port. For example:
Marathon.url = 'http://example.com:8080'
It's possible to use ENV
variables to configure the endpoint as well:
$ MARATHON_URL=http://remote.marathon.example.com:8080 irb
irb(main):001:0> require 'marathon'
=> true
irb(main):002:0> Marathon.url
=> "http://remote.marathon.example.com:8080"
Authentification
You have two options to set authentification if your Marathon API requires it:
Marathon.options = {:username => 'your-user-name', :password => 'your-secret-password'}
or
$ export MARATHON_USER=your-user-name
$ export MARATHON_PASSWORD=your-secret-password
$ irb
irb(main):001:0> require 'marathon'
=> true
irb(main):002:0> Marathon.options
=> {:username => "your-user-name", :password => "your-secret-password"}
Global calls
require 'marathon'
# => true
Marathon.info
# => {"name"=>"marathon", "http_config"=>{"assets_path"=>null, "http_port"=>8080, "https_port"=>8443}, "frameworkId"=>"20150228-110436-16842879-5050-2169-0001", "leader"=>null, "event_subscriber"=>null, "marathon_config"=>{"local_port_max"=>20000, "local_port_min"=>10000, "hostname"=>"mesos", "master"=>"zk://localhost:2181/mesos", "reconciliation_interval"=>300000, "mesos_role"=>null, "task_launch_timeout"=>300000, "reconciliation_initial_delay"=>15000, "ha"=>true, "failover_timeout"=>604800, "checkpoint"=>true, "executor"=>"//cmd", "marathon_store_timeout"=>2000, "mesos_user"=>"root"}, "version"=>"0.8.0", "zookeeper_config"=>{"zk_path"=>"/marathon", "zk"=>null, "zk_timeout"=>10, "zk_hosts"=>"localhost:2181", "zk_future_timeout"=>{"duration"=>10}}, "elected"=>false}
Marathon.ping
# => 'pong'
Applications
You can list, change, delete apps like this:
require 'marathon'
# fetch a list of applications
apps = Marathon::App.list
# scale the first app to 2 instances
apps.first.scale!(2)
# delete the last app
apps.last.delete!
The other Marathon endpoints are available in the same way.
Contributing
Please fork and send pull request. Make sure to have test cases for your changes.
Credits
This gem is inspired by mesosphere's abondend marathon_client and swipelies docker-api.
License
This program is licensed under the MIT license. See LICENSE for details.