From dadf046dd86a18329140bb0c206c4a0b989825f1 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 29 Jun 2012 20:06:31 +0000 Subject: admin: add support for create_device command The ability to create devices from the Ruby API might be useful to somebody, especially when writing test cases. --- lib/mogilefs/admin.rb | 20 ++++++++++++++++++++ lib/mogilefs/backend.rb | 1 + test/fresh.rb | 8 +++++--- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/mogilefs/admin.rb b/lib/mogilefs/admin.rb index 0927e47..19f6858 100644 --- a/lib/mogilefs/admin.rb +++ b/lib/mogilefs/admin.rb @@ -254,6 +254,26 @@ class MogileFS::Admin < MogileFS::Client ! @backend.delete_host(:host => host).nil? end + ## + # Creates device with Integer +devid+ on +host+ + # +host+ may be an integer for hostid or String for hostname + def create_device(host, devid, opts = {}) + raise MogileFS::ReadOnlyError if readonly? + opts = opts.dup + + case host + when Integer + opts[:hostid] = host + when String + opts[:hostname] = host + else + raise ArgumentError, "host=#{host.inspect} is not a String or Integer" + end + + opts[:devid] = devid + ! @backend.create_device(opts).nil? + end + ## # Changes the device status of +device+ on +host+ to +state+ which can be # 'alive', 'down', or 'dead'. diff --git a/lib/mogilefs/backend.rb b/lib/mogilefs/backend.rb index f611cbd..f578257 100644 --- a/lib/mogilefs/backend.rb +++ b/lib/mogilefs/backend.rb @@ -114,6 +114,7 @@ class MogileFS::Backend add_idempotent_command :list_fids add_idempotent_command :stats add_idempotent_command :get_domains + add_command :create_device add_command :create_domain add_command :delete_domain add_command :create_class diff --git a/test/fresh.rb b/test/fresh.rb index 2fddaaf..7ccf3cf 100644 --- a/test/fresh.rb +++ b/test/fresh.rb @@ -124,11 +124,13 @@ EOF assert File.directory?("#@docroot/dev2") yield_for_monitor_update { @admin.get_hosts.empty? or break } - # TODO: allow adding devices via our MogileFS::Admin class - mogadm!("device", "add", "me", "dev1") + me = @admin.get_hosts.find { |x| x["hostname"] == "me" } + assert_instance_of Hash, me, me.inspect + assert_kind_of Integer, me["hostid"], me + assert_equal true, @admin.create_device(me["hostid"], 1) yield_for_monitor_update { @admin.get_devices.empty? or break } wait_for_usage_file "dev1" - mogadm!("device", "add", "me", "dev2") + assert_equal true, @admin.create_device("me", 2) wait_for_usage_file "dev2" out = err = nil tries = 0 -- cgit v1.2.3-24-ge0c7