ghost 0.3.0 → 1.0.0.pre
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/LICENSE +1 -1
- data/bin/ghost +2 -130
- data/lib/ghost.rb +3 -16
- data/lib/ghost/cli.rb +60 -0
- data/lib/ghost/cli/task.rb +71 -0
- data/lib/ghost/cli/task/add.rb +25 -0
- data/lib/ghost/cli/task/delete.rb +30 -0
- data/lib/ghost/cli/task/empty.rb +18 -0
- data/lib/ghost/cli/task/export.rb +19 -0
- data/lib/ghost/cli/task/help.rb +41 -0
- data/lib/ghost/cli/task/import.rb +25 -0
- data/lib/ghost/cli/task/list.rb +40 -0
- data/lib/ghost/host.rb +34 -0
- data/lib/ghost/store.rb +12 -0
- data/lib/ghost/store/dscl_store.rb +71 -0
- data/lib/ghost/store/hosts_file_store.rb +123 -0
- data/lib/ghost/tokenized_file.rb +65 -0
- data/lib/ghost/version.rb +3 -0
- data/spec/ghost/cli/task/add_spec.rb +80 -0
- data/spec/ghost/cli/task/delete_spec.rb +20 -0
- data/spec/ghost/cli/task/empty_spec.rb +19 -0
- data/spec/ghost/cli/task/export_spec.rb +16 -0
- data/spec/ghost/cli/task/help_spec.rb +36 -0
- data/spec/ghost/cli/task/import_spec.rb +56 -0
- data/spec/ghost/cli/task/list_spec.rb +50 -0
- data/spec/ghost/cli_spec.rb +22 -0
- data/spec/ghost/host_spec.rb +36 -0
- data/spec/ghost/store/dscl_store_spec.rb +153 -0
- data/spec/ghost/store/hosts_file_store_spec.rb +316 -0
- data/spec/ghost/store_spec.rb +2 -0
- data/spec/ghost/tokenized_file_spec.rb +131 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/support/cli.rb +29 -0
- data/spec/support/resolv.rb +15 -0
- metadata +91 -27
- data/Rakefile +0 -28
- data/TODO +0 -0
- data/bin/ghost-ssh +0 -132
- data/lib/ghost/linux-host.rb +0 -158
- data/lib/ghost/mac-host.rb +0 -116
- data/lib/ghost/ssh_config.rb +0 -110
- data/spec/etc_hosts_spec.rb +0 -190
- data/spec/ghost_spec.rb +0 -151
- data/spec/spec.opts +0 -1
- data/spec/ssh_config_spec.rb +0 -80
- data/spec/ssh_config_template +0 -11
data/spec/ghost_spec.rb
DELETED
@@ -1,151 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
require 'ghost'
|
3
|
-
|
4
|
-
# Warning: these tests will delete all hostnames in the system. Please back them up first
|
5
|
-
|
6
|
-
Ghost::Host.empty!
|
7
|
-
|
8
|
-
describe Ghost::Host, ".list" do
|
9
|
-
after(:each) { Ghost::Host.empty! }
|
10
|
-
|
11
|
-
it "should return an array" do
|
12
|
-
Ghost::Host.list.should be_instance_of(Array)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should contain instances of Ghost::Host" do
|
16
|
-
Ghost::Host.add('ghost-test-hostname.local')
|
17
|
-
Ghost::Host.list.first.should be_instance_of(Ghost::Host)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe Ghost::Host do
|
22
|
-
after(:each) { Ghost::Host.empty! }
|
23
|
-
|
24
|
-
it "should have an IP" do
|
25
|
-
hostname = 'ghost-test-hostname.local'
|
26
|
-
|
27
|
-
Ghost::Host.add(hostname)
|
28
|
-
host = Ghost::Host.list.first
|
29
|
-
host.ip.should eql('127.0.0.1')
|
30
|
-
|
31
|
-
Ghost::Host.empty!
|
32
|
-
|
33
|
-
ip = '169.254.23.121'
|
34
|
-
host = Ghost::Host.add(hostname, ip)
|
35
|
-
host.ip.should eql(ip)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should have a hostname" do
|
39
|
-
hostname = 'ghost-test-hostname.local'
|
40
|
-
|
41
|
-
Ghost::Host.add(hostname)
|
42
|
-
host = Ghost::Host.list.first
|
43
|
-
host.hostname.should eql(hostname)
|
44
|
-
|
45
|
-
Ghost::Host.empty!
|
46
|
-
|
47
|
-
ip = '169.254.23.121'
|
48
|
-
Ghost::Host.add(hostname, ip)
|
49
|
-
host.hostname.should eql(hostname)
|
50
|
-
end
|
51
|
-
|
52
|
-
it ".to_s should return hostname" do
|
53
|
-
hostname = 'ghost-test-hostname.local'
|
54
|
-
|
55
|
-
Ghost::Host.add(hostname)
|
56
|
-
host = Ghost::Host.list.first
|
57
|
-
host.to_s.should eql(hostname)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe Ghost::Host, "finder methods" do
|
62
|
-
after(:all) { Ghost::Host.empty! }
|
63
|
-
before(:all) do
|
64
|
-
Ghost::Host.add('abc.local')
|
65
|
-
Ghost::Host.add('def.local')
|
66
|
-
Ghost::Host.add('efg.local', '10.2.2.4')
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should return valid Ghost::Host when searching for host name" do
|
70
|
-
Ghost::Host.find_by_host('abc.local').should be_instance_of(Ghost::Host)
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
describe Ghost::Host, ".add" do
|
76
|
-
after(:each) { Ghost::Host.empty! }
|
77
|
-
|
78
|
-
it "should return Ghost::Host object when passed hostname" do
|
79
|
-
Ghost::Host.add('ghost-test-hostname.local').should be_instance_of(Ghost::Host)
|
80
|
-
end
|
81
|
-
|
82
|
-
it "should return Ghost::Host object when passed hostname" do
|
83
|
-
Ghost::Host.add('ghost-test-hostname.local', '10.0.0.2').should be_instance_of(Ghost::Host)
|
84
|
-
end
|
85
|
-
|
86
|
-
it "should raise error if hostname already exists and not add a duplicate" do
|
87
|
-
Ghost::Host.empty!
|
88
|
-
Ghost::Host.add('ghost-test-hostname.local')
|
89
|
-
lambda { Ghost::Host.add('ghost-test-hostname.local') }.should raise_error
|
90
|
-
Ghost::Host.list.should have(1).thing
|
91
|
-
end
|
92
|
-
|
93
|
-
it "should overwrite existing hostname if forced" do
|
94
|
-
hostname = 'ghost-test-hostname.local'
|
95
|
-
|
96
|
-
Ghost::Host.empty!
|
97
|
-
Ghost::Host.add(hostname)
|
98
|
-
|
99
|
-
Ghost::Host.list.first.hostname.should eql(hostname)
|
100
|
-
Ghost::Host.list.first.ip.should eql('127.0.0.1')
|
101
|
-
|
102
|
-
Ghost::Host.add(hostname, '10.0.0.1', true)
|
103
|
-
Ghost::Host.list.first.hostname.should eql(hostname)
|
104
|
-
Ghost::Host.list.first.ip.should eql('10.0.0.1')
|
105
|
-
|
106
|
-
Ghost::Host.list.should have(1).thing
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should add a hostname using second hostname's ip" do
|
110
|
-
hostname = 'ghost-test-hostname.local'
|
111
|
-
alias_hostname = 'ghost-test-alias-hostname.local'
|
112
|
-
|
113
|
-
Ghost::Host.empty!
|
114
|
-
|
115
|
-
Ghost::Host.add(hostname)
|
116
|
-
Ghost::Host.add(alias_hostname, hostname)
|
117
|
-
|
118
|
-
Ghost::Host.list.last.ip.should eql(Ghost::Host.list.first.ip)
|
119
|
-
end
|
120
|
-
|
121
|
-
it "should raise SocketError if it can't find hostname's ip" do
|
122
|
-
Ghost::Host.empty!
|
123
|
-
lambda { Ghost::Host.add('ghost-test-alias-hostname.google', 'google') }.should raise_error(SocketError)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
describe Ghost::Host, ".empty!" do
|
128
|
-
it "should empty the hostnames" do
|
129
|
-
Ghost::Host.add('ghost-test-hostname.local') # add a hostname to be sure
|
130
|
-
Ghost::Host.empty!
|
131
|
-
Ghost::Host.list.should have(0).things
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
describe Ghost::Host, ".delete_matching" do
|
136
|
-
it "should delete matching hostnames" do
|
137
|
-
keep = 'ghost-test-hostname-keep.local'
|
138
|
-
Ghost::Host.add(keep)
|
139
|
-
Ghost::Host.add('ghost-test-hostname-match1.local')
|
140
|
-
Ghost::Host.add('ghost-test-hostname-match2.local')
|
141
|
-
Ghost::Host.delete_matching('match')
|
142
|
-
Ghost::Host.list.should have(1).thing
|
143
|
-
Ghost::Host.list.first.hostname.should eql(keep)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
|
148
|
-
describe Ghost::Host, ".backup and", Ghost::Host, ".restore" do
|
149
|
-
it "should return a yaml file of all hosts and IPs when backing up"
|
150
|
-
it "should empty the hosts and restore only the ones in given yaml"
|
151
|
-
end
|
data/spec/spec.opts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--colour
|
data/spec/ssh_config_spec.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'ghost/ssh_config'
|
2
|
-
|
3
|
-
$ssh_config_template = File.expand_path(File.join(File.dirname(__FILE__), "ssh_config_template"))
|
4
|
-
$ssh_config_file = File.expand_path(File.join(File.dirname(__FILE__), "ssh_config"))
|
5
|
-
|
6
|
-
describe Ghost::SshConfig do
|
7
|
-
before(:all) do
|
8
|
-
class Ghost::SshConfig
|
9
|
-
@@ssh_config = $ssh_config_file
|
10
|
-
end
|
11
|
-
end
|
12
|
-
before { `cp #{$ssh_config_template.inspect} #{$ssh_config_file.inspect}` }
|
13
|
-
after { `rm -f #{$ssh_config_file.inspect}` }
|
14
|
-
|
15
|
-
subject do
|
16
|
-
Ghost::SshConfig
|
17
|
-
end
|
18
|
-
|
19
|
-
it "has an Host" do
|
20
|
-
subject.empty!
|
21
|
-
|
22
|
-
host = "miami-b01"
|
23
|
-
hostname = "192.168.227.128"
|
24
|
-
user = "root"
|
25
|
-
port = "389"
|
26
|
-
|
27
|
-
subject.add(
|
28
|
-
:host => host,
|
29
|
-
:hostname => hostname,
|
30
|
-
:user => user,
|
31
|
-
:port => port)
|
32
|
-
|
33
|
-
config = subject.list.first
|
34
|
-
config.host.should eql(host)
|
35
|
-
config.hostname.should eql(hostname)
|
36
|
-
config.user.should eql(user)
|
37
|
-
config.port.should eql(port)
|
38
|
-
end
|
39
|
-
|
40
|
-
describe '#list' do
|
41
|
-
it "returns an array" do
|
42
|
-
subject.list.should be_instance_of(Array)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "contains instances of Ghost::SshConfig" do
|
46
|
-
subject.empty!
|
47
|
-
subject.add(
|
48
|
-
:host => "miami-b01",
|
49
|
-
:hostname => "192.168.227.128",
|
50
|
-
:user => "root",
|
51
|
-
:port => "39")
|
52
|
-
|
53
|
-
config = subject.list
|
54
|
-
|
55
|
-
(config = subject.list.first).should be_instance_of(Ghost::SshConfig)
|
56
|
-
|
57
|
-
config.host.should eql("miami-b01")
|
58
|
-
config.hostname.should eql("192.168.227.128")
|
59
|
-
config.user.should eql("root")
|
60
|
-
config.port.should eql("39")
|
61
|
-
end
|
62
|
-
|
63
|
-
it "parses the .ssh/config format" do
|
64
|
-
configs = Ghost::SshConfig.list
|
65
|
-
configs.should have(3).items
|
66
|
-
|
67
|
-
configs[0].host.should eql("example1")
|
68
|
-
configs[0].hostname.should eql("192.168.227.128")
|
69
|
-
configs[0].user.should eql("root")
|
70
|
-
|
71
|
-
configs[1].host.should eql("example2")
|
72
|
-
configs[1].hostname.should eql("example2.webbynode.com")
|
73
|
-
configs[1].user.should eql("root")
|
74
|
-
configs[1].port.should eql("2022")
|
75
|
-
|
76
|
-
configs[2].host.should eql("example3")
|
77
|
-
configs[2].hostname.should eql("10.0.0.1")
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|