diff --git a/devel/migrate-vmodl.rb b/devel/migrate-vmodl.rb new file mode 100644 index 00000000..3df56c01 --- /dev/null +++ b/devel/migrate-vmodl.rb @@ -0,0 +1,20 @@ +#!/usr/bin/env ruby +# Migrate vmodl.db from marchal db to yaml format +require 'yaml' + +input_vmodl_filename = ARGV[0] or abort 'input vmodl filename required' +output_vmodl_filename = ARGV[1] or abort 'output vmodl filename required' + +input_vmodl = case File.extname(input_vmodl_filename) + when '.yml', '.yaml' + File.open(input_vmodl_filename, 'r') { |io| YAML.load_file io } + when '.db' + File.open(input_vmodl_filename, 'r') { |io| Marshal.load io } + end + +case File.extname(output_vmodl_filename) +when '.yml', '.yaml' + File.open(output_vmodl_filename, 'w') { |io| YAML.dump(input_vmodl, io) } +when '.db' + File.open(output_vmodl_filename, 'w') { |io| Marshal.dump(input_vmodl, io) } +end diff --git a/lib/rbvmomi/connection.rb b/lib/rbvmomi/connection.rb index a9b4e915..cad224b4 100644 --- a/lib/rbvmomi/connection.rb +++ b/lib/rbvmomi/connection.rb @@ -261,6 +261,10 @@ def self.method_missing sym, *a end end + def self.vmodl_filename + ENV['VMODL'] || Dir[File.join(File.dirname(__FILE__), "../../vmodl.*")].first + end + def self.load_vmodl fn @loader = RbVmomi::TypeLoader.new fn, extension_dirs, self nil diff --git a/lib/rbvmomi/pbm.rb b/lib/rbvmomi/pbm.rb index b8a796b3..5205e466 100644 --- a/lib/rbvmomi/pbm.rb +++ b/lib/rbvmomi/pbm.rb @@ -60,7 +60,7 @@ def pretty_print pp end add_extension_dir File.join(File.dirname(__FILE__), "pbm") - load_vmodl(ENV['VMODL'] || File.join(File.dirname(__FILE__), "../../vmodl.db")) + load_vmodl(vmodl_filename) end end diff --git a/lib/rbvmomi/sms.rb b/lib/rbvmomi/sms.rb index 98d12ec6..8a579e6f 100644 --- a/lib/rbvmomi/sms.rb +++ b/lib/rbvmomi/sms.rb @@ -54,7 +54,7 @@ def pretty_print pp end add_extension_dir File.join(File.dirname(__FILE__), "sms") - load_vmodl(ENV['VMODL'] || File.join(File.dirname(__FILE__), "../../vmodl.db")) + load_vmodl(vmodl_filename) end end diff --git a/lib/rbvmomi/type_loader.rb b/lib/rbvmomi/type_loader.rb index ba93ed46..9f98500b 100644 --- a/lib/rbvmomi/type_loader.rb +++ b/lib/rbvmomi/type_loader.rb @@ -1,6 +1,7 @@ # Copyright (c) 2010 VMware, Inc. All Rights Reserved. require 'set' require 'monitor' +require 'yaml' module RbVmomi @@ -13,7 +14,12 @@ def initialize fn, extension_dirs, namespace @id2wsdl = {} @loaded = {} add_types Hash[BasicTypes::BUILTIN.map { |k| [k,nil] }] - vmodl_database = File.open(fn, 'r') { |io| Marshal.load io } + vmodl_database = case File.extname(fn) + when '.yml', '.yaml' + File.open(fn, 'r') { |io| YAML.load io } + else + File.open(fn, 'r') { |io| Marshal.load io } + end vmodl_database.reject! { |k,v| k =~ /^_/ } add_types vmodl_database preload diff --git a/lib/rbvmomi/vim.rb b/lib/rbvmomi/vim.rb index 66626de8..d505f748 100644 --- a/lib/rbvmomi/vim.rb +++ b/lib/rbvmomi/vim.rb @@ -143,7 +143,7 @@ def get_log_keys host=nil add_extension_dir File.join(File.dirname(__FILE__), "vim") (ENV['RBVMOMI_VIM_EXTENSION_PATH']||'').split(':').each { |dir| add_extension_dir dir } - load_vmodl(ENV['VMODL'] || File.join(File.dirname(__FILE__), "../../vmodl.db")) + load_vmodl(vmodl_filename) end end