This article presents an alternative approach to the document Tech Tip: Using the SOAP Control API with Ruby.
One of our partners (David Peterson) started a project to create a Control API bunding for Ruby. It's a work in progress (methods will be added as needed), but is a great starting point if you need to build a Control API client using Ruby.
You'll find the project here: https://github.com/peterson/zeus-api, and published through RubyGems.
To get started:
$ sudo gem install zeus-api
The included simple.rb is a good place to start. It illustrates how to:
require 'rubygems'
require 'zeus-api'
endpoint = "https://stingray:9090/soap"
username = "api"
password = "api"
vs = VirtualServerService.new(endpoint, username, password)
p = PoolService.new(endpoint, username, password)
r = CatalogRuleService.new(endpoint, username, password)
# basic config
vs_name = "test"
pool_name = "test-pool"
pool_nodes = ["10.0.0.101:80", "10.0.0.102:80"]
rule_name = "test-rule"
# delete if existing
if vs.list.include?(vs_name)
vs.delete("test")
puts "Found existing virtual server '#{vs_name}', deleting ..."
end
if p.list.include?(pool_name)
p.delete(pool_name)
puts "Found existing pool '#{pool_name}', deleting ..."
end
if r.list.include?(rule_name)
r.delete(rule_name)
puts "Found existing rule '#{rule_name}', deleting ..."
end
# create pool
pool_nodes = ["10.0.0.101:80", "10.0.0.102:80"]
p.create(pool_name, pool_nodes)
puts "Pool '#{pool_name}' was successfully created."
# create a new virtual server
vs_info = {
rotocol => "http",
ort => "8000",
:default_pool => pool_name
}
vs.create(vs_name, vs_info)
puts "Virtual server '#{vs_name}' was successfully created."
vs.enable(vs_name)
puts "Virtual server '#{vs_name}' was enabled."
# create a new rule and add to virtual server
rule_text = "
if( string.contains( http.getheader( 'Host' ), 'test.com' ) ){
pool.use( 'test-pool' );
}"
rule_note = "Simple Host header dispatch rule using trafficscript"
if (r.valid?(rule_text))
r.create(rule_name, rule_text)
r.note(rule_name, rule_note)
else
puts "Error! Rule '#{rule_name}' failed validation!"
puts "Errors: #{r.errors}"
puts "Warnings: #{r.warnings}"
end
vs.add_request_rule(vs_name, rule_name)
puts "Rule '#{rule_name}' added to virtual server '#{vs_name}'."