marhan_cli 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Changelog.md +6 -1
- data/Guardfile +2 -2
- data/lib/marhan_cli/{app/true_crypt_app.rb → apps/true_crypt.rb} +1 -1
- data/lib/marhan_cli/apps/virtual_box.rb +35 -0
- data/lib/marhan_cli/command.rb +2 -9
- data/lib/marhan_cli/commands/{network.rb → network_command.rb} +1 -1
- data/lib/marhan_cli/commands/{true_crypt.rb → true_crypt_command.rb} +5 -5
- data/lib/marhan_cli/commands/{vbox.rb → vbox_command.rb} +21 -7
- data/lib/marhan_cli/commands/{web.rb → web_command.rb} +1 -1
- data/lib/marhan_cli/config.rb +29 -0
- data/lib/marhan_cli/network/remote_machine.rb +33 -0
- data/lib/marhan_cli/version.rb +1 -1
- data/spec/integration/marhan_cli/apps/virtual_box_scene.rb +25 -0
- data/spec/unit/fixtures/config.yml +14 -0
- data/spec/{marhan_cli/app/virtual_box_app_spec.rb → unit/lib/marhan_cli/apps/virtual_box_spec.rb} +9 -16
- data/spec/unit/lib/marhan_cli/config_spec.rb +55 -0
- metadata +19 -12
- data/lib/marhan_cli/app/virtual_box_app.rb +0 -28
- /data/spec/{marhan_cli → unit/lib/marhan_cli}/helper/constraint_spec.rb +0 -0
data/Changelog.md
CHANGED
@@ -44,4 +44,9 @@
|
|
44
44
|
## v0.0.11
|
45
45
|
|
46
46
|
* First RSpec tests and guard added for TDD development.
|
47
|
-
* VirtualBox command for start and stop virtual guest systems added. (command => vbox:[start|stop])
|
47
|
+
* VirtualBox command for start and stop virtual guest systems added. (command => vbox:[start|stop])
|
48
|
+
|
49
|
+
## v0.0.12
|
50
|
+
|
51
|
+
* VirtualBox command connects automaticaly to ssh server, if guest configuration has 'ssh' connection data. (command => vbox:start)
|
52
|
+
* 'VBoxManage controlvm ' uses 'acpipowerbutton' instead of 'poweroff', now. (command => vbox:stop)
|
data/Guardfile
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'net/ssh'
|
3
|
+
require 'marhan_cli/helper/constraint'
|
4
|
+
require 'marhan_cli/network/remote_machine'
|
5
|
+
|
6
|
+
module MarhanCli
|
7
|
+
class VirtualBox
|
8
|
+
|
9
|
+
attr_reader :guests
|
10
|
+
|
11
|
+
def initialize(guests)
|
12
|
+
@guests = guests
|
13
|
+
end
|
14
|
+
|
15
|
+
def start_guest(guest_config_name)
|
16
|
+
"VBoxManage startvm '#{vbox_name(guest_config_name)}'"
|
17
|
+
end
|
18
|
+
|
19
|
+
def stop_guest(guest_config_name)
|
20
|
+
"VBoxManage controlvm '#{vbox_name(guest_config_name)}' acpipowerbutton"
|
21
|
+
end
|
22
|
+
|
23
|
+
def guest_ssh_server_up?(guest_config_name)
|
24
|
+
remote_machine = RemoteMachine.new("localhost", "2222")
|
25
|
+
remote_machine.ssh_server_running?("markus")
|
26
|
+
end
|
27
|
+
|
28
|
+
def vbox_name(guest_config_name)
|
29
|
+
Constraint.not_nil_or_empty! guest_config_name, "Guest config name have to be set!"
|
30
|
+
Constraint.not_nil_or_empty! @guests[guest_config_name], "No guest with key '#{guest_config_name}' found in configuration!"
|
31
|
+
Constraint.not_nil_or_empty! @guests[guest_config_name].name, "Guest name is not configured!"
|
32
|
+
@guests[guest_config_name].name
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/marhan_cli/command.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "thor"
|
3
|
-
require
|
3
|
+
require 'marhan_cli/config'
|
4
4
|
|
5
5
|
module MarhanCli
|
6
6
|
class Command < Thor
|
@@ -8,8 +8,6 @@ module MarhanCli
|
|
8
8
|
|
9
9
|
protected
|
10
10
|
|
11
|
-
CONFIG_FILE = ".marhan_cli.yml"
|
12
|
-
|
13
11
|
def execute(proc)
|
14
12
|
begin
|
15
13
|
say ""
|
@@ -29,12 +27,7 @@ module MarhanCli
|
|
29
27
|
end
|
30
28
|
|
31
29
|
def load_config
|
32
|
-
|
33
|
-
unless File.exists?(config_file_path)
|
34
|
-
raise "Stop processing! Command needs the configuration file '#{CONFIG_FILE}' in you're home directory."
|
35
|
-
end
|
36
|
-
config = Ambience.create(config_file_path)
|
37
|
-
config.to_mash
|
30
|
+
MarhanCli::Config.init
|
38
31
|
end
|
39
32
|
|
40
33
|
def get_or_ask(option_name)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'marhan_cli/command'
|
3
|
-
require 'marhan_cli/
|
3
|
+
require 'marhan_cli/apps/true_crypt'
|
4
4
|
|
5
5
|
module MarhanCli
|
6
|
-
class
|
6
|
+
class TrueCryptCommand < MarhanCli::Command
|
7
7
|
|
8
8
|
namespace :crypt
|
9
9
|
|
@@ -40,7 +40,7 @@ module MarhanCli
|
|
40
40
|
def mount_proc
|
41
41
|
Proc.new do
|
42
42
|
config = load_crypt_config
|
43
|
-
true_crypt =
|
43
|
+
true_crypt = TrueCrypt.new(config.mount_folder)
|
44
44
|
device = get_or_ask(:device)
|
45
45
|
run true_crypt.mount_command(config.encrypted_devices[device], device)
|
46
46
|
end
|
@@ -49,7 +49,7 @@ module MarhanCli
|
|
49
49
|
def unmount_proc
|
50
50
|
Proc.new do
|
51
51
|
config = load_crypt_config
|
52
|
-
true_crypt =
|
52
|
+
true_crypt = TrueCrypt.new(config.mount_folder)
|
53
53
|
device = get_or_ask(:device)
|
54
54
|
run true_crypt.unmount_command(device)
|
55
55
|
end
|
@@ -57,7 +57,7 @@ module MarhanCli
|
|
57
57
|
|
58
58
|
def unmount_all_proc
|
59
59
|
Proc.new do
|
60
|
-
true_crypt =
|
60
|
+
true_crypt = TrueCrypt.new
|
61
61
|
run true_crypt.unmount_all_command
|
62
62
|
end
|
63
63
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'marhan_cli/command'
|
3
|
-
require 'marhan_cli/
|
3
|
+
require 'marhan_cli/apps/virtual_box'
|
4
4
|
|
5
5
|
module MarhanCli
|
6
|
-
class
|
6
|
+
class VBoxCommand < MarhanCli::Command
|
7
7
|
|
8
8
|
namespace :vbox
|
9
9
|
|
@@ -31,21 +31,35 @@ module MarhanCli
|
|
31
31
|
|
32
32
|
private
|
33
33
|
|
34
|
+
def start_ssh_client
|
35
|
+
|
36
|
+
end
|
37
|
+
|
34
38
|
def start_guest
|
35
39
|
Proc.new do
|
36
|
-
|
37
|
-
virtual_box =
|
40
|
+
vbox_config = load_vbox_config
|
41
|
+
virtual_box = VirtualBox.new(vbox_config.guests)
|
38
42
|
guest_to_start = get_or_ask(:guest)
|
39
43
|
run virtual_box.start_guest(guest_to_start)
|
44
|
+
|
45
|
+
if vbox_config.guests[guest_to_start].key?(:ssh)
|
46
|
+
say ""
|
47
|
+
say "Waiting for response from SSH server...", :green
|
48
|
+
if virtual_box.guest_ssh_server_up?(guest_to_start)
|
49
|
+
say "SSH server is up. Trying to connect...", :green
|
50
|
+
say ""
|
51
|
+
run "ssh -p 2222 localhost"
|
52
|
+
end
|
53
|
+
end
|
40
54
|
end
|
41
55
|
end
|
42
56
|
|
43
57
|
def stop_guest
|
44
58
|
Proc.new do
|
45
59
|
config = load_vbox_config
|
46
|
-
|
47
|
-
|
48
|
-
run virtual_box.stop_guest(
|
60
|
+
guest_name = get_or_ask(:guest)
|
61
|
+
virtual_box = VirtualBox.new(config.guests)
|
62
|
+
run virtual_box.stop_guest(guest_name)
|
49
63
|
end
|
50
64
|
end
|
51
65
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "ambience"
|
3
|
+
|
4
|
+
module MarhanCli
|
5
|
+
class Config
|
6
|
+
|
7
|
+
def self.init(config_file = nil)
|
8
|
+
@config_file = config_file || default_config_file
|
9
|
+
load_config(@config_file)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.load_config(config_file)
|
13
|
+
unless File.exists?(config_file)
|
14
|
+
raise "Stop processing! Command needs the configuration file '#{config_file}' in you're home directory."
|
15
|
+
end
|
16
|
+
begin
|
17
|
+
Ambience.create(config_file).to_mash
|
18
|
+
rescue Exception => e
|
19
|
+
raise "Configuration file could not pared: #{e}"
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.default_config_file
|
25
|
+
File.join(File.expand_path("~/"), ".marhan_cli.yml")
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -26,7 +26,40 @@ module MarhanCli
|
|
26
26
|
end
|
27
27
|
|
28
28
|
raise RemoteMachineError, "#{stderr}" unless stderr.empty?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def wait_for_ssh_server_status(user)
|
33
|
+
Net::SSH.start(@home, user, :port => @port) do |ssh|
|
34
|
+
status = "";
|
35
|
+
channel = ssh.open_channel do |ch|
|
36
|
+
ch.exec "status ssh" do |ch, success|
|
37
|
+
raise "could not execute command" unless success
|
38
|
+
ch.on_data do |c, data|
|
39
|
+
status << data
|
40
|
+
end
|
41
|
+
ch.on_extended_data do |c, type, data|
|
42
|
+
$STDERR.print data
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
channel.wait
|
47
|
+
return status
|
48
|
+
end
|
49
|
+
end
|
29
50
|
|
51
|
+
def ssh_server_running?(user)
|
52
|
+
status = wait_for_ssh_server_status(user)
|
53
|
+
status.match(%r{ssh start/running.+})
|
54
|
+
end
|
55
|
+
|
56
|
+
def exec_remote_command(user, remote_command)
|
57
|
+
Net::SSH.start(@host, user, :port => @port) do |ssh|
|
58
|
+
stderr = ""
|
59
|
+
ssh.exec!(remote_command) do |channel, stream, data|
|
60
|
+
stderr << data if stream == :stderr
|
61
|
+
end
|
62
|
+
raise RemoteMachineError, "#{stderr}" unless stderr.empty?
|
30
63
|
end
|
31
64
|
end
|
32
65
|
end
|
data/lib/marhan_cli/version.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'marhan_cli/apps/virtual_box'
|
4
|
+
|
5
|
+
describe "VirtualBoxApp" do
|
6
|
+
|
7
|
+
let(:config_param) { Hashie::Mash.new(:linux => 'Ubuntu Linux') }
|
8
|
+
let(:subject) { MarhanCli::VirtualBox.new(config_param) }
|
9
|
+
|
10
|
+
context ".guest_ssh_server_up?" do
|
11
|
+
describe "when system is running" do
|
12
|
+
it "returns true" do
|
13
|
+
subject.guest_ssh_server_up?("linux").should be_true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context ".shutdown_guest_system" do
|
19
|
+
describe "when system is running" do
|
20
|
+
it "system shutdown" do
|
21
|
+
subject.shutdown_guest_system("linux").should be_true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/spec/{marhan_cli/app/virtual_box_app_spec.rb → unit/lib/marhan_cli/apps/virtual_box_spec.rb}
RENAMED
@@ -1,22 +1,23 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
|
-
require 'marhan_cli/
|
3
|
+
require 'marhan_cli/apps/virtual_box'
|
4
|
+
require 'marhan_cli/config'
|
4
5
|
|
5
6
|
describe "VirtualBoxApp" do
|
6
7
|
|
7
|
-
let(:config_param) {
|
8
|
+
let(:config_param) { MarhanCli::Config.init(
|
9
|
+
File.join("spec", "unit", "fixtures", "config.yml")).vbox.guests }
|
10
|
+
|
11
|
+
let(:subject) { MarhanCli::VirtualBox.new(config_param) }
|
8
12
|
|
9
13
|
context ".new" do
|
10
14
|
describe "with empty hash as argument" do
|
11
|
-
let(:subject) { MarhanCli::VirtualBoxApp.new({}) }
|
12
15
|
it "creates a new objects" do
|
13
|
-
subject.should be_a(MarhanCli::
|
16
|
+
subject.should be_a(MarhanCli::VirtualBox)
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
17
20
|
describe "with config hash as argument" do
|
18
|
-
let(:subject) { MarhanCli::VirtualBoxApp.new(config_param) }
|
19
|
-
|
20
21
|
it "has set config hash" do
|
21
22
|
subject.guests.should eq(config_param)
|
22
23
|
end
|
@@ -24,8 +25,6 @@ describe "VirtualBoxApp" do
|
|
24
25
|
end
|
25
26
|
|
26
27
|
context ".start_guest" do
|
27
|
-
let(:subject) { MarhanCli::VirtualBoxApp.new(config_param) }
|
28
|
-
|
29
28
|
describe "with configured guest as argument" do
|
30
29
|
it "returns correct command" do
|
31
30
|
subject.start_guest('linux').should eq("VBoxManage startvm 'Ubuntu Linux'")
|
@@ -35,8 +34,6 @@ describe "VirtualBoxApp" do
|
|
35
34
|
end
|
36
35
|
|
37
36
|
context ".vbox_name" do
|
38
|
-
let(:subject) { MarhanCli::VirtualBoxApp.new(config_param) }
|
39
|
-
|
40
37
|
describe "with configured guest as argument" do
|
41
38
|
it "returns correct command" do
|
42
39
|
subject.vbox_name('linux').should eq('Ubuntu Linux')
|
@@ -49,7 +46,7 @@ describe "VirtualBoxApp" do
|
|
49
46
|
subject.vbox_name('minix')
|
50
47
|
}.to raise_error(
|
51
48
|
error=ArgumentError,
|
52
|
-
message="No guest with key 'minix' found in configuration")
|
49
|
+
message="No guest with key 'minix' found in configuration!")
|
53
50
|
end
|
54
51
|
end
|
55
52
|
|
@@ -65,14 +62,10 @@ describe "VirtualBoxApp" do
|
|
65
62
|
end
|
66
63
|
|
67
64
|
context ".stop_guest" do
|
68
|
-
|
69
|
-
let(:subject) { MarhanCli::VirtualBoxApp.new(config_param) }
|
70
|
-
|
71
65
|
describe "with configured guest as argument" do
|
72
66
|
it "returns correct command" do
|
73
|
-
subject.stop_guest('linux').should eq("VBoxManage controlvm 'Ubuntu Linux'
|
67
|
+
subject.stop_guest('linux').should eq("VBoxManage controlvm 'Ubuntu Linux' acpipowerbutton")
|
74
68
|
end
|
75
69
|
end
|
76
70
|
end
|
77
|
-
|
78
71
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'marhan_cli/config'
|
4
|
+
|
5
|
+
describe "Config" do
|
6
|
+
|
7
|
+
context "self.init" do
|
8
|
+
let(:subject) { MarhanCli::Config.init(
|
9
|
+
File.join("spec", "unit", "fixtures", "config.yml")) }
|
10
|
+
|
11
|
+
describe "returns config" do
|
12
|
+
it "as Hashie::Mash" do
|
13
|
+
subject.should be_a(Hashie::Mash)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "returns TrueCrypt config" do
|
18
|
+
|
19
|
+
let(:crypt) { subject.crypt }
|
20
|
+
|
21
|
+
it "with with mount_folder" do
|
22
|
+
crypt.mount_folder.should eq("/Volumes")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "with with encrypted_devices" do
|
26
|
+
crypt.encrypted_devices.hdd.should eq("/dev/rdisk2s2")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "returns VirtualBox config" do
|
31
|
+
let(:vbox) { subject.vbox }
|
32
|
+
it "with 'Ubuntu' for guests.linux.name" do
|
33
|
+
vbox.guests.linux.name.should eq("Ubuntu Linux")
|
34
|
+
end
|
35
|
+
|
36
|
+
it "with 'Ubuntu' for guests['linux'].name" do
|
37
|
+
vbox.guests['linux'].name.should eq("Ubuntu Linux")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "with 'localhost' for guests.linux.ssh.host" do
|
41
|
+
vbox.guests.linux.ssh.host.should eq("localhost")
|
42
|
+
end
|
43
|
+
|
44
|
+
it "with 'markus' for guests.linux.ssh.user" do
|
45
|
+
vbox.guests.linux.ssh.user.should eq("markus")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "with 'nil' for guests.windows.ssh.nil?" do
|
49
|
+
vbox.guests.windows.key?(:ssh).should be_false
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marhan_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -141,21 +141,25 @@ files:
|
|
141
141
|
- Rakefile
|
142
142
|
- bin/mcli
|
143
143
|
- lib/marhan_cli.rb
|
144
|
-
- lib/marhan_cli/
|
145
|
-
- lib/marhan_cli/
|
144
|
+
- lib/marhan_cli/apps/true_crypt.rb
|
145
|
+
- lib/marhan_cli/apps/virtual_box.rb
|
146
146
|
- lib/marhan_cli/command.rb
|
147
|
-
- lib/marhan_cli/commands/
|
148
|
-
- lib/marhan_cli/commands/
|
149
|
-
- lib/marhan_cli/commands/
|
150
|
-
- lib/marhan_cli/commands/
|
147
|
+
- lib/marhan_cli/commands/network_command.rb
|
148
|
+
- lib/marhan_cli/commands/true_crypt_command.rb
|
149
|
+
- lib/marhan_cli/commands/vbox_command.rb
|
150
|
+
- lib/marhan_cli/commands/web_command.rb
|
151
|
+
- lib/marhan_cli/config.rb
|
151
152
|
- lib/marhan_cli/helper/constraint.rb
|
152
153
|
- lib/marhan_cli/network/errors.rb
|
153
154
|
- lib/marhan_cli/network/remote_machine.rb
|
154
155
|
- lib/marhan_cli/version.rb
|
155
156
|
- marhan_cli.gemspec
|
156
|
-
- spec/marhan_cli/
|
157
|
-
- spec/marhan_cli/helper/constraint_spec.rb
|
157
|
+
- spec/integration/marhan_cli/apps/virtual_box_scene.rb
|
158
158
|
- spec/spec_helper.rb
|
159
|
+
- spec/unit/fixtures/config.yml
|
160
|
+
- spec/unit/lib/marhan_cli/apps/virtual_box_spec.rb
|
161
|
+
- spec/unit/lib/marhan_cli/config_spec.rb
|
162
|
+
- spec/unit/lib/marhan_cli/helper/constraint_spec.rb
|
159
163
|
homepage: https://github.com/marhan/marhan_cli
|
160
164
|
licenses: []
|
161
165
|
post_install_message:
|
@@ -181,6 +185,9 @@ signing_key:
|
|
181
185
|
specification_version: 3
|
182
186
|
summary: Helper routines for my computers
|
183
187
|
test_files:
|
184
|
-
- spec/marhan_cli/
|
185
|
-
- spec/marhan_cli/helper/constraint_spec.rb
|
188
|
+
- spec/integration/marhan_cli/apps/virtual_box_scene.rb
|
186
189
|
- spec/spec_helper.rb
|
190
|
+
- spec/unit/fixtures/config.yml
|
191
|
+
- spec/unit/lib/marhan_cli/apps/virtual_box_spec.rb
|
192
|
+
- spec/unit/lib/marhan_cli/config_spec.rb
|
193
|
+
- spec/unit/lib/marhan_cli/helper/constraint_spec.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'marhan_cli/helper/constraint'
|
3
|
-
|
4
|
-
module MarhanCli
|
5
|
-
class VirtualBoxApp
|
6
|
-
|
7
|
-
attr_reader :guests
|
8
|
-
|
9
|
-
def initialize(guests)
|
10
|
-
@guests = guests
|
11
|
-
end
|
12
|
-
|
13
|
-
def start_guest(guest_config_name)
|
14
|
-
"VBoxManage startvm '#{vbox_name(guest_config_name)}'"
|
15
|
-
end
|
16
|
-
|
17
|
-
def stop_guest(guest_config_name)
|
18
|
-
"VBoxManage controlvm '#{vbox_name(guest_config_name)}' poweroff"
|
19
|
-
end
|
20
|
-
|
21
|
-
def vbox_name(guest_config_name)
|
22
|
-
Constraint.not_nil_or_empty! guest_config_name, "Guest config name have to be set!"
|
23
|
-
vbox_name = @guests[guest_config_name]
|
24
|
-
Constraint.not_nil_or_empty! vbox_name, "No guest with key '#{guest_config_name}' found in configuration"
|
25
|
-
vbox_name
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
File without changes
|