From aad8923a881734cef1ba4261c5c3a28b567a150a Mon Sep 17 00:00:00 2001 From: Rasmus Bergholdt Date: Thu, 8 Sep 2016 20:50:36 +0200 Subject: [PATCH 1/4] Method for fetching vmodl.db filename --- lib/rbvmomi/connection.rb | 4 ++++ lib/rbvmomi/pbm.rb | 2 +- lib/rbvmomi/sms.rb | 2 +- lib/rbvmomi/vim.rb | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/rbvmomi/connection.rb b/lib/rbvmomi/connection.rb index a9b4e915..74a66436 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'] || File.join(File.dirname(__FILE__), "../../vmodl.db") + 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/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 From bbb31032f7251cdf5238b57bfcf8b9e6e8489628 Mon Sep 17 00:00:00 2001 From: Rasmus Bergholdt Date: Thu, 8 Sep 2016 21:01:21 +0200 Subject: [PATCH 2/4] Load vmodl in Marshal or yaml format --- lib/rbvmomi/connection.rb | 2 +- lib/rbvmomi/type_loader.rb | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/rbvmomi/connection.rb b/lib/rbvmomi/connection.rb index 74a66436..cad224b4 100644 --- a/lib/rbvmomi/connection.rb +++ b/lib/rbvmomi/connection.rb @@ -262,7 +262,7 @@ def self.method_missing sym, *a end def self.vmodl_filename - ENV['VMODL'] || File.join(File.dirname(__FILE__), "../../vmodl.db") + ENV['VMODL'] || Dir[File.join(File.dirname(__FILE__), "../../vmodl.*")].first end def self.load_vmodl fn diff --git a/lib/rbvmomi/type_loader.rb b/lib/rbvmomi/type_loader.rb index ba93ed46..2ecce5d2 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 From 151bda20e16276c75ecbf094e2a8290a549a4f4b Mon Sep 17 00:00:00 2001 From: Rasmus Bergholdt Date: Thu, 8 Sep 2016 21:03:25 +0200 Subject: [PATCH 3/4] Migrate a vmodl.db from and between marshal and yaml --- devel/migrate-vmodl.rb | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 devel/migrate-vmodl.rb diff --git a/devel/migrate-vmodl.rb b/devel/migrate-vmodl.rb new file mode 100644 index 00000000..a4d19e97 --- /dev/null +++ b/devel/migrate-vmodl.rb @@ -0,0 +1,32 @@ +#!/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 + +db = {} +tn = {} +input_vmodl.each do |k,v| + unless k == '_typenames' + db[k] = v + else + tn['_typenames'] = v + end +end + +db['_typenames'] = tn + +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 From 281a23710af3793c33d6875debf600ec29582195 Mon Sep 17 00:00:00 2001 From: Rasmus Bergholdt Date: Fri, 9 Sep 2016 20:58:23 +0200 Subject: [PATCH 4/4] fixed rubocop offenses --- devel/migrate-vmodl.rb | 36 ++++++++++++------------------------ lib/rbvmomi/type_loader.rb | 10 +++++----- 2 files changed, 17 insertions(+), 29 deletions(-) diff --git a/devel/migrate-vmodl.rb b/devel/migrate-vmodl.rb index a4d19e97..3df56c01 100644 --- a/devel/migrate-vmodl.rb +++ b/devel/migrate-vmodl.rb @@ -1,32 +1,20 @@ #!/usr/bin/env ruby -# Migrate vmodl.db from marchal db to yaml format +# 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_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 - -db = {} -tn = {} -input_vmodl.each do |k,v| - unless k == '_typenames' - db[k] = v - else - tn['_typenames'] = v - end -end - -db['_typenames'] = tn + 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) } +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/type_loader.rb b/lib/rbvmomi/type_loader.rb index 2ecce5d2..9f98500b 100644 --- a/lib/rbvmomi/type_loader.rb +++ b/lib/rbvmomi/type_loader.rb @@ -15,11 +15,11 @@ def initialize fn, extension_dirs, namespace @loaded = {} add_types Hash[BasicTypes::BUILTIN.map { |k| [k,nil] }] 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 + 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