diff options
| author | root <root@hackathon1-repo.usersys.redhat.com> | 2008-06-19 15:36:54 -0400 |
|---|---|---|
| committer | root <root@hackathon1-repo.usersys.redhat.com> | 2008-06-19 15:36:54 -0400 |
| commit | cf796141ac01c866e81663f20699ccd56ce2d50b (patch) | |
| tree | 9061bb3c95d638bfed4d880db21e49f9f36cf1ec /cloudmasterd/lib | |
| parent | 4f244d65c5c2e4ffb4b38e00baa5f83de89c20d8 (diff) | |
| download | tools-cf796141ac01c866e81663f20699ccd56ce2d50b.tar.gz tools-cf796141ac01c866e81663f20699ccd56ce2d50b.tar.xz tools-cf796141ac01c866e81663f20699ccd56ce2d50b.zip | |
Moved the cloud daemon to cloudmasterd to give it a better name
Diffstat (limited to 'cloudmasterd/lib')
| -rw-r--r-- | cloudmasterd/lib/cloudmasterd.rb | 170 | ||||
| -rw-r--r-- | cloudmasterd/lib/cloudmasterd/version.rb | 9 |
2 files changed, 179 insertions, 0 deletions
diff --git a/cloudmasterd/lib/cloudmasterd.rb b/cloudmasterd/lib/cloudmasterd.rb new file mode 100644 index 0000000..14f9fcd --- /dev/null +++ b/cloudmasterd/lib/cloudmasterd.rb @@ -0,0 +1,170 @@ +$: << File.dirname(File.expand_path(__FILE__)) + +gem 'reststop', '~> 0.2' + +require 'yaml' +require 'fileutils' +require 'rubygems' +require 'picnic' +require 'reststop' +require 'everest' +require 'restr' +require 'xmlrpc/client' + +Camping.goes :Cloudmasterd +Cloudmasterd.picnic! + +module Cloudmasterd::Model + +end + +module Cloudmasterd::Helpers + class Cobblerd + def initialize(repo) + @repo = repo + @xmlrpc = XMLRPC::Client.new2("http://#{@repo}:25152") + @token = @xmlrpc.call2("login", "cobbler", "password")[1] + end + + def _call(method, *args) + return @xmlrpc.call2(method, *args)[1] + end + + def distros + _call("get_distros", @token) + end + + def profiles + _call("get_profiles", @token) + end + + def systems + _call("get_systems", @token) + end + + def repos + _call("get_repos", @token) + end + + def distro(name) + _call("get_distro", name, @token) + end + + def distro_for_koan(name) + _call("get_distro_for_koan", name, @token) + end + + def profile(name) + _call("get_profile", name, @token) + end + + def profile_for_koan(name) + _call("get_profile_for_koan", name, @token) + end + + def system(name) + _call("get_system", name, @token) + end + + def system_for_koan(name) + _call("get_system_for_koan", name, @token) + end + + def repo(name) + _call("get_repo", name, @token) + end + + def repo_for_koan(name) + _call("get_repo_for_koan", name, @token) + end + + end +end + +module Cloudmasterd::Controllers + class Koan < REST 'koan' + # Retrieve the cobbler profile for the given profile name + def _get_cobbler_profile(system_name, repo) + cobblerd = Cloudmasterd::Helpers::Cobblerd.new(repo) + cobbler_system = cobblerd.system(system_name) + return cobblerd.profile(cobbler_system["profile"]) + end + + # Find the best host on which to create a VM that requires + # the given "disk_size" and "ram" + def _get_best_host(disk_size, ram) + return `func-find-resources -m #{ram} -d #{disk_size}`.split(':')[0] + end + + # run the appropriate koan command to create the given "fqdn" + # on the given "host" and "vol_group" + def _koan(host, fqdn, repo) + # Run the koan process + func_cmd = "func \"#{host}\" call virt install #{repo} #{fqdn} True #{fqdn} /images" + puts `#{func_cmd}` + + # Make the new host autostart + func_cmd = "func \"#{host}\" call command run \"ln -s /etc/xen/#{fqdn.split('.')[0]} /etc/xen/auto/\"" + puts `#{func_cmd}` + end + + # POST /koan + def create + machine_fqdn = input.machine_fqdn + repo = input.repo + + cobbler_profile = _get_cobbler_profile(machine_fqdn, repo) + @host = _get_best_host(cobbler_profile["virt_file_size"], cobbler_profile["virt_ram"]) + _koan(@host, machine_fqdn, repo) + render :_koan + end + end +end + +module Cloudmasterd::Views + def initialize(*args) + super(*args) + @x = Builder::XmlMarkup.new(:indent => 1) + end + + module HTML + def layout + html do + head do + title 'Everest Cloud Master Controller' + #link :rel => 'stylesheet', :type => 'text/css', + #:href => self/'/styles.css', :media => 'screen' + end + body do + div.content do + self << yield + end + end + end + end + + def _koan + @host + end + end + default_format :HTML + + module YAML + CONTENT_TYPE = 'text/plain' + + def layout + yield + end + end + + module XML + def layout + yield + end + end +end + +# Required by picnic +def Cloudmasterd.create; end + +Cloudmasterd.start_picnic diff --git a/cloudmasterd/lib/cloudmasterd/version.rb b/cloudmasterd/lib/cloudmasterd/version.rb new file mode 100644 index 0000000..ec2eb9c --- /dev/null +++ b/cloudmasterd/lib/cloudmasterd/version.rb @@ -0,0 +1,9 @@ +module Cloudmasterd #:nodoc: + module VERSION #:nodoc: + MAJOR = 0 + MINOR = 1 + TINY = 1 + + STRING = [MAJOR, MINOR, TINY].join('.') + end +end |
