inception-server 0.2.2 → 0.3.0
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 +4 -0
- data/README.md +18 -1
- data/inception-server.gemspec +2 -2
- data/lib/inception/cli.rb +31 -0
- data/lib/inception/cli_helpers/settings.rb +8 -1
- data/lib/inception/version.rb +1 -1
- data/spec/unit/cli_ssh_spec.rb +80 -7
- metadata +8 -8
data/ChangeLog.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Change Log for Inception Server
|
2
2
|
|
3
|
+
## v0.3.0
|
4
|
+
|
5
|
+
* `inception share-ssh` makes it really easy to share access to an inception server. It displays text that can be copied & pasted to any person explaining how to setup local SSH config and a private key.
|
6
|
+
|
3
7
|
## v0.2.0
|
4
8
|
|
5
9
|
* Settings stored in `~/.inception_server` instead of `~/.bosh_inception`
|
data/README.md
CHANGED
@@ -4,12 +4,22 @@ Create an inception server for Bosh-related development.
|
|
4
4
|
|
5
5
|
Includes a CLI for creating and preparing an inception server for deploying/developing a Bosh universe. The created or targeted VM is upgraded into an inception server via a Chef cookbook.
|
6
6
|
|
7
|
+
The CLI will explain how to share access to an inception server with others. Also with the power of tmux, make it easy for 2+ people to view the same terminal and to leave long running jobs whilst you are disconnected.
|
8
|
+
|
7
9
|
[](https://travis-ci.org/drnic/inception-server)
|
8
10
|
[](https://codeclimate.com/github/drnic/inception-server)
|
9
11
|
|
10
12
|
## Installation
|
11
13
|
|
12
|
-
|
14
|
+
```
|
15
|
+
git clone https://github.com/cloudfoundry-community/inception-server.git
|
16
|
+
cd inception-server
|
17
|
+
bundle
|
18
|
+
```
|
19
|
+
|
20
|
+
*Wherever you see `inception` below, use `bundle exec bin/inception` until the rubygem is fixed.*
|
21
|
+
|
22
|
+
The tool WILL be distributed as a RubyGem, but its currently not working in this form sadly.
|
13
23
|
|
14
24
|
```
|
15
25
|
$ gem install inception-server
|
@@ -83,6 +93,13 @@ $ inception deploy
|
|
83
93
|
... lots of chef output ...
|
84
94
|
```
|
85
95
|
|
96
|
+
### SSH access
|
97
|
+
|
98
|
+
You have some options for accessing the inception server via SSH:
|
99
|
+
|
100
|
+
* `inception ssh` - opens a simple terminal to the inception server
|
101
|
+
* `inception tmux` - creates or attaches to a tmux session on the inception server
|
102
|
+
* `inception share-ssh` - displays how anyone can setup their own ssh config to connect to the inception server without requiring this project to be installed (nor requiring Ruby installed)
|
86
103
|
|
87
104
|
### Chef cookbook usage - remote VM
|
88
105
|
|
data/inception-server.gemspec
CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_dependency "cyoi" # choose your own infrastructure
|
30
30
|
|
31
31
|
# for running cookbooks on inception server
|
32
|
-
spec.add_dependency "knife-solo", "~> 0.3.0
|
32
|
+
spec.add_dependency "knife-solo", "~> 0.3.0"
|
33
33
|
|
34
34
|
spec.add_development_dependency "bundler", "~> 1.3"
|
35
35
|
spec.add_development_dependency "rake"
|
@@ -38,6 +38,6 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.add_development_dependency "rspec"
|
39
39
|
|
40
40
|
# gems for the cookbook tests
|
41
|
-
spec.add_development_dependency "test-kitchen", "~> 1.0.0.
|
41
|
+
spec.add_development_dependency "test-kitchen", "~> 1.0.0.beta.2"
|
42
42
|
spec.add_development_dependency "berkshelf"
|
43
43
|
end
|
data/lib/inception/cli.rb
CHANGED
@@ -61,6 +61,37 @@ module Inception
|
|
61
61
|
run_ssh_command_or_open_tunnel(["-t", "tmux attach || tmux new-session"])
|
62
62
|
end
|
63
63
|
|
64
|
+
desc "share-ssh", "Display the SSH config & private key that can be given to others to share access to the inception server"
|
65
|
+
def share_ssh(name=settings.inception.name)
|
66
|
+
user = settings.inception.provisioned.username
|
67
|
+
host = settings.inception.provisioned.host
|
68
|
+
private_key_path = "~/.ssh/#{name}"
|
69
|
+
private_key = settings.inception.key_pair.private_key
|
70
|
+
say <<-EOS
|
71
|
+
To access the inception server, add the following to your ~/.ssh/config
|
72
|
+
|
73
|
+
Host #{name}
|
74
|
+
User #{user}
|
75
|
+
Hostname #{host}
|
76
|
+
IdentityFile #{private_key_path}
|
77
|
+
|
78
|
+
Create a file #{private_key_path} with all the lines below:
|
79
|
+
|
80
|
+
#{private_key}
|
81
|
+
|
82
|
+
Change the private key to be read-only to you:
|
83
|
+
|
84
|
+
$ chmod 700 ~/.ssh
|
85
|
+
$ chmod 600 #{private_key_path}
|
86
|
+
|
87
|
+
You can now access the inception server running either:
|
88
|
+
|
89
|
+
$ ssh #{name}
|
90
|
+
$ ssh #{name} -t "tmux attach || tmux new-session"
|
91
|
+
|
92
|
+
EOS
|
93
|
+
end
|
94
|
+
|
64
95
|
no_tasks do
|
65
96
|
def configure_provider
|
66
97
|
save_settings!
|
@@ -3,6 +3,8 @@ require "readwritesettings"
|
|
3
3
|
module Inception::CliHelpers
|
4
4
|
module Settings
|
5
5
|
include FileUtils
|
6
|
+
|
7
|
+
CONFIG_DIRECTORY = ".inception_server"
|
6
8
|
|
7
9
|
# The base directory for holding the manifest settings file
|
8
10
|
# and private keys
|
@@ -10,7 +12,7 @@ module Inception::CliHelpers
|
|
10
12
|
# Defaults to ~/.inception_server; and can be overridden with either:
|
11
13
|
# * $SETTINGS - to a folder (supported method)
|
12
14
|
def settings_dir
|
13
|
-
@settings_dir ||= File.expand_path(ENV["SETTINGS"] || "
|
15
|
+
@settings_dir ||= local_settings || File.expand_path(ENV["SETTINGS"] || "~/#{CONFIG_DIRECTORY}")
|
14
16
|
end
|
15
17
|
|
16
18
|
def settings_ssh_dir
|
@@ -49,5 +51,10 @@ module Inception::CliHelpers
|
|
49
51
|
settings
|
50
52
|
end
|
51
53
|
|
54
|
+
def local_settings
|
55
|
+
path = File.join(Dir.pwd, CONFIG_DIRECTORY)
|
56
|
+
Dir.exists?(path) ? path : nil
|
57
|
+
end
|
58
|
+
|
52
59
|
end
|
53
60
|
end
|
data/lib/inception/version.rb
CHANGED
data/spec/unit/cli_ssh_spec.rb
CHANGED
@@ -16,9 +16,16 @@ describe Inception do
|
|
16
16
|
setting "provider.credentials.aws_secret_access_key", "aws_secret_access_key"
|
17
17
|
setting "provider.region", "us-west-2"
|
18
18
|
setting "inception.key_pair.name", "inception"
|
19
|
-
setting "inception.key_pair.private_key",
|
20
|
-
|
21
|
-
|
19
|
+
setting "inception.key_pair.private_key", <<-EOS
|
20
|
+
-----BEGIN RSA PRIVATE KEY-----
|
21
|
+
xV67ZHvuRdoNDbFXscpF5uK4sEwbsvSJw73qtYAgUWfhXQKBgQDCQaO9Hf6UKd4PyPeLlSGE7akS
|
22
|
+
p57tEdMoXIE1BzUbQJL5UWfTsL6PDU7PJbIDWsR4CqESLcU3D/JVl7F5bQ6cgLifP3SuDh4oMLtK
|
23
|
+
ToA13XEsLnlLnyyi+i1dDv97Yz5jjULy8wsbiVpneabckol4427947OZwIvsHDF+KXHy3w==
|
24
|
+
-----END RSA PRIVATE KEY-----
|
25
|
+
EOS
|
26
|
+
setting "inception.name", "inception"
|
27
|
+
setting "inception.provisioned.host", "ec2-1-2-3-4.compute-1.amazonaws.com"
|
28
|
+
setting "inception.provisioned.username", "ubuntu"
|
22
29
|
end
|
23
30
|
|
24
31
|
describe "ssh" do
|
@@ -28,13 +35,13 @@ describe Inception do
|
|
28
35
|
it "launches ssh session" do
|
29
36
|
@cmd.should_receive(:exit)
|
30
37
|
@cmd.should_receive(:system).
|
31
|
-
with("ssh -i #{private_key_path}
|
38
|
+
with("ssh -i #{private_key_path} ubuntu@ec2-1-2-3-4.compute-1.amazonaws.com")
|
32
39
|
@cmd.ssh
|
33
40
|
end
|
34
41
|
it "runs ssh command" do
|
35
42
|
@cmd.should_receive(:exit)
|
36
43
|
@cmd.should_receive(:system).
|
37
|
-
with("ssh -i #{private_key_path}
|
44
|
+
with("ssh -i #{private_key_path} ubuntu@ec2-1-2-3-4.compute-1.amazonaws.com 'some command'")
|
38
45
|
@cmd.ssh("some command")
|
39
46
|
end
|
40
47
|
end
|
@@ -43,7 +50,7 @@ describe Inception do
|
|
43
50
|
it "launches ssh session" do
|
44
51
|
@cmd.should_receive(:exit)
|
45
52
|
@cmd.should_receive(:system).
|
46
|
-
with("ssh -i #{private_key_path}
|
53
|
+
with("ssh -i #{private_key_path} ubuntu@ec2-1-2-3-4.compute-1.amazonaws.com -t 'tmux attach || tmux new-session'")
|
47
54
|
@cmd.tmux
|
48
55
|
end
|
49
56
|
end
|
@@ -61,7 +68,7 @@ describe Inception do
|
|
61
68
|
@cmd.stub!(:ensure_mosh_installed).and_return(true)
|
62
69
|
@cmd.should_receive(:exit)
|
63
70
|
@cmd.should_receive(:system).
|
64
|
-
with("mosh --ssh 'ssh -i #{@private_key_path}'
|
71
|
+
with("mosh --ssh 'ssh -i #{@private_key_path}' ubuntu@ec2-1-2-3-4.compute-1.amazonaws.com")
|
65
72
|
@cmd.mosh
|
66
73
|
end
|
67
74
|
xit "should ensure that the mosh ports are opened" do
|
@@ -76,5 +83,71 @@ describe Inception do
|
|
76
83
|
@cmd.ensure_security_group_allows_mosh
|
77
84
|
end
|
78
85
|
end
|
86
|
+
|
87
|
+
describe "share-ssh" do
|
88
|
+
it "should display an example .ssh/config & private key" do
|
89
|
+
@cmd.should_receive(:say).with(<<-EOS)
|
90
|
+
To access the inception server, add the following to your ~/.ssh/config
|
91
|
+
|
92
|
+
Host inception
|
93
|
+
User ubuntu
|
94
|
+
Hostname ec2-1-2-3-4.compute-1.amazonaws.com
|
95
|
+
IdentityFile ~/.ssh/inception
|
96
|
+
|
97
|
+
Create a file ~/.ssh/inception with all the lines below:
|
98
|
+
|
99
|
+
-----BEGIN RSA PRIVATE KEY-----
|
100
|
+
xV67ZHvuRdoNDbFXscpF5uK4sEwbsvSJw73qtYAgUWfhXQKBgQDCQaO9Hf6UKd4PyPeLlSGE7akS
|
101
|
+
p57tEdMoXIE1BzUbQJL5UWfTsL6PDU7PJbIDWsR4CqESLcU3D/JVl7F5bQ6cgLifP3SuDh4oMLtK
|
102
|
+
ToA13XEsLnlLnyyi+i1dDv97Yz5jjULy8wsbiVpneabckol4427947OZwIvsHDF+KXHy3w==
|
103
|
+
-----END RSA PRIVATE KEY-----
|
104
|
+
|
105
|
+
|
106
|
+
Change the private key to be read-only to you:
|
107
|
+
|
108
|
+
$ chmod 700 ~/.ssh
|
109
|
+
$ chmod 600 ~/.ssh/inception
|
110
|
+
|
111
|
+
You can now access the inception server running either:
|
112
|
+
|
113
|
+
$ ssh inception
|
114
|
+
$ ssh inception -t "tmux attach || tmux new-session"
|
115
|
+
|
116
|
+
EOS
|
117
|
+
@cmd.share_ssh
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should display an example .ssh/config & private key with custom name" do
|
121
|
+
@cmd.should_receive(:say).with(<<-EOS)
|
122
|
+
To access the inception server, add the following to your ~/.ssh/config
|
123
|
+
|
124
|
+
Host company-xyz
|
125
|
+
User ubuntu
|
126
|
+
Hostname ec2-1-2-3-4.compute-1.amazonaws.com
|
127
|
+
IdentityFile ~/.ssh/company-xyz
|
128
|
+
|
129
|
+
Create a file ~/.ssh/company-xyz with all the lines below:
|
130
|
+
|
131
|
+
-----BEGIN RSA PRIVATE KEY-----
|
132
|
+
xV67ZHvuRdoNDbFXscpF5uK4sEwbsvSJw73qtYAgUWfhXQKBgQDCQaO9Hf6UKd4PyPeLlSGE7akS
|
133
|
+
p57tEdMoXIE1BzUbQJL5UWfTsL6PDU7PJbIDWsR4CqESLcU3D/JVl7F5bQ6cgLifP3SuDh4oMLtK
|
134
|
+
ToA13XEsLnlLnyyi+i1dDv97Yz5jjULy8wsbiVpneabckol4427947OZwIvsHDF+KXHy3w==
|
135
|
+
-----END RSA PRIVATE KEY-----
|
136
|
+
|
137
|
+
|
138
|
+
Change the private key to be read-only to you:
|
139
|
+
|
140
|
+
$ chmod 700 ~/.ssh
|
141
|
+
$ chmod 600 ~/.ssh/company-xyz
|
142
|
+
|
143
|
+
You can now access the inception server running either:
|
144
|
+
|
145
|
+
$ ssh company-xyz
|
146
|
+
$ ssh company-xyz -t "tmux attach || tmux new-session"
|
147
|
+
|
148
|
+
EOS
|
149
|
+
@cmd.share_ssh("company-xyz")
|
150
|
+
end
|
151
|
+
end
|
79
152
|
end
|
80
153
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inception-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
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: 2013-
|
12
|
+
date: 2013-08-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -130,7 +130,7 @@ dependencies:
|
|
130
130
|
requirements:
|
131
131
|
- - ~>
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version: 0.3.0
|
133
|
+
version: 0.3.0
|
134
134
|
type: :runtime
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -138,7 +138,7 @@ dependencies:
|
|
138
138
|
requirements:
|
139
139
|
- - ~>
|
140
140
|
- !ruby/object:Gem::Version
|
141
|
-
version: 0.3.0
|
141
|
+
version: 0.3.0
|
142
142
|
- !ruby/object:Gem::Dependency
|
143
143
|
name: bundler
|
144
144
|
requirement: !ruby/object:Gem::Requirement
|
@@ -194,7 +194,7 @@ dependencies:
|
|
194
194
|
requirements:
|
195
195
|
- - ~>
|
196
196
|
- !ruby/object:Gem::Version
|
197
|
-
version: 1.0.0.
|
197
|
+
version: 1.0.0.beta.2
|
198
198
|
type: :development
|
199
199
|
prerelease: false
|
200
200
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -202,7 +202,7 @@ dependencies:
|
|
202
202
|
requirements:
|
203
203
|
- - ~>
|
204
204
|
- !ruby/object:Gem::Version
|
205
|
-
version: 1.0.0.
|
205
|
+
version: 1.0.0.beta.2
|
206
206
|
- !ruby/object:Gem::Dependency
|
207
207
|
name: berkshelf
|
208
208
|
requirement: !ruby/object:Gem::Requirement
|
@@ -317,7 +317,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
317
317
|
version: '0'
|
318
318
|
segments:
|
319
319
|
- 0
|
320
|
-
hash: -
|
320
|
+
hash: -3963462369556113049
|
321
321
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
322
322
|
none: false
|
323
323
|
requirements:
|
@@ -326,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
326
326
|
version: '0'
|
327
327
|
segments:
|
328
328
|
- 0
|
329
|
-
hash: -
|
329
|
+
hash: -3963462369556113049
|
330
330
|
requirements: []
|
331
331
|
rubyforge_project:
|
332
332
|
rubygems_version: 1.8.25
|