Project

General

Profile

Download (2.77 KB) Statistics
| Branch: | Tag: | Revision:
ecdabe95 Marc Dequènes (Duck)
#!/usr/bin/ruby -Ku

#--
# CyborgHood, a distributed system management software.
# Copyright (c) 2009-2010 Marc Dequènes (Duck) <Duck@DuckCorp.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#++

# to allow in-place run for test
$: << File.join(File.dirname(__FILE__), "..", "lib")

require 'cyborghood/cyborg'
d1e614b5 Marc Dequènes (Duck)
require 'cyborghood/cyborg/server'
8fcaacd6 Marc Dequènes (Duck)
require 'cyborghood/services/dns'
ecdabe95 Marc Dequènes (Duck)

module CyborgHood
class Config
protected
class MapMakerValidator < CyborgHoodValidator
def validate_hook_in(value, rule, path, msg_list)
case rule.name
when 'MasterZonePattern'
if value.gsub('#ZONE#', 'test') == value
msg_list << "pattern is constant"
end
end
end
end
end

module MapMakerHome
include I18nTranslation
bindtextdomain("cyborghood_mapmaker", {:path => Config::L10N_DIR, :charset => "UTF-8"})

class MapMaker < Cyborg
050eca43 Marc Dequènes (Duck)
include SimpleServer

def interface
1c89625f Marc Dequènes (Duck)
MapMakerInterface.instance
050eca43 Marc Dequènes (Duck)
end
end

bc473567 Marc Dequènes (Duck)
class MapMakerInterface
include CyborgServerInterface
include CyborgServerDefaultInterface

ca79e27e Marc Dequènes (Duck)
class DNS < Services::DNS::System
bc473567 Marc Dequènes (Duck)
include CyborgServerInterface

8fcaacd6 Marc Dequènes (Duck)
export_parent_methods
d5495a1e Marc Dequènes (Duck)
unexport_method :zones, :'[]'
8fcaacd6 Marc Dequènes (Duck)
def test(data)
"coucou: " + data.inspect
end

class Zones
include CyborgServerInterface
e82a264b Marc Dequènes (Duck)
include CyborgServerStatefulInterface
8fcaacd6 Marc Dequènes (Duck)
def initialize
ca79e27e Marc Dequènes (Duck)
@dns = Services::DNS::System.new
8fcaacd6 Marc Dequènes (Duck)
end

def api_methods
@dns.zones
end

def method_missing(method_name, *args)
e82a264b Marc Dequènes (Duck)
session = args.shift

zone_name = method_name.to_s
if api_methods.include?(zone_name)
resource_key = "dns/zones/#{zone_name}"
session.store.get(resource_key) { Zone.new(zone_name) }
8fcaacd6 Marc Dequènes (Duck)
else
super
end
end

ca79e27e Marc Dequènes (Duck)
class Zone < Services::DNS::Zone
e82a264b Marc Dequènes (Duck)
include CyborgServerEmbeddedInterface
8fcaacd6 Marc Dequènes (Duck)
end
ce98dac2 Marc Dequènes (Duck)
end
050eca43 Marc Dequènes (Duck)
end
ecdabe95 Marc Dequènes (Duck)
end
end
end

bot = CyborgHood::MapMakerHome::MapMaker.new

trap('INT') do
bot.ask_to_stop
end
trap('TERM') do
bot.ask_to_stop
end

bot.run