taketo 0.0.9 → 0.0.10

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/README.md CHANGED
@@ -138,9 +138,15 @@ Also it's possible to specify default server configuration for any scope (whole
138
138
 
139
139
  Default configs are merged appropriately.
140
140
 
141
+
142
+ An SSH config file can be generated from taketo config. To do so, run ```taketo --generate-ssh-config```.
143
+
141
144
  The Changelog:
142
145
  --------------
143
146
 
147
+ ### v0.0.10 (17.11.2012) ###
148
+ * Add ability to generate ssh config
149
+
144
150
  ### v0.0.9 (17.11.2012) ###
145
151
  * Add default_command server config option
146
152
 
@@ -203,8 +209,6 @@ The Changelog:
203
209
  TO-DO:
204
210
  ------
205
211
 
206
- * Override default commands per server
207
212
  * Define servers outside projects and environments
208
- * Export SSH config (i.e. for scp)
209
213
  * Destination completion
210
214
  * Command completion
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.10
data/bin/taketo CHANGED
@@ -46,9 +46,15 @@ def parse_options
46
46
  end
47
47
 
48
48
  opts.on("-v", "--view", "Show config contents and exit") do |v|
49
+ require 'taketo/config_printer_visitor'
49
50
  options[:view] = v
50
51
  end
51
52
 
53
+ opts.on("--generate-ssh-config", "Generate SSH config from taketo config") do |g|
54
+ require 'taketo/ssh_config_generator_visitor'
55
+ options[:generate_ssh_config] = g
56
+ end
57
+
52
58
  opts.separator "Special options:"
53
59
 
54
60
  opts.on("--dry-run", "Print out what would be run") do |v|
@@ -100,6 +106,11 @@ begin
100
106
  config_printer = ConfigPrinterVisitor.new
101
107
  traverser.visit_depth_first(config_printer)
102
108
  puts config_printer.result
109
+ elsif options.delete(:generate_ssh_config)
110
+ traverser = ConfigTraverser.new(config)
111
+ ssh_config_generator = SSHConfigGeneratorVisitor.new
112
+ traverser.visit_depth_first(ssh_config_generator)
113
+ puts ssh_config_generator.result
103
114
  else
104
115
  server = resolver.resolve
105
116
  server_command = remote_command(server, options)
@@ -0,0 +1,44 @@
1
+ Feature:
2
+ In order to eliminate duplication between taketo config and ssh config
3
+ As a user
4
+ I want to be able to convert taketo config to ssh config
5
+
6
+ Background:
7
+ When I have the following config
8
+ """
9
+ project :foo do
10
+ environment :bar do
11
+ server do
12
+ host "bar.foo.com"
13
+ port 5678
14
+ user "pivo"
15
+ identity_file "~/.ssh/id_rsa"
16
+ end
17
+ end
18
+ end
19
+
20
+ project :baz do
21
+ environment :qux do
22
+ server :bart do
23
+ global_alias :bazqux
24
+ host "2.3.4.5"
25
+ end
26
+ end
27
+ end
28
+ """
29
+
30
+ Scenario: Generate ssh config
31
+ When I run taketo --generate-ssh-config
32
+ Then the output should contain exactly:
33
+ """
34
+ Host bar.foo.com
35
+ Hostname bar.foo.com
36
+ Port 5678
37
+ User pivo
38
+ IdentityFile ~/.ssh/id_rsa
39
+
40
+ Host bazqux
41
+ Hostname 2.3.4.5
42
+
43
+ """
44
+
@@ -0,0 +1,36 @@
1
+ require 'taketo/config_visitor'
2
+
3
+ module Taketo
4
+ class SSHConfigGeneratorVisitor < ConfigVisitor
5
+ def initialize
6
+ @result = ""
7
+ end
8
+
9
+ visit Server do |server|
10
+ put "Host #{server.global_alias || server.host}"
11
+ put "Hostname #{server.host}"
12
+ put_optional "Port", server.port
13
+ put_optional "User", server.username
14
+ put_optional "IdentityFile", server.identity_file
15
+ put
16
+ end
17
+
18
+ visit Object do |_|
19
+ # catch all
20
+ end
21
+
22
+ def result
23
+ @result.chomp
24
+ end
25
+
26
+ private
27
+
28
+ def put(str = "")
29
+ @result += str + "\n"
30
+ end
31
+
32
+ def put_optional(str, value)
33
+ put "#{str} #{value}" if value
34
+ end
35
+ end
36
+ end
data/lib/taketo.rb CHANGED
@@ -8,5 +8,4 @@ require 'taketo/dsl'
8
8
  require 'taketo/commands'
9
9
  require 'taketo/config_traverser'
10
10
  require 'taketo/config_validator'
11
- require 'taketo/config_printer_visitor'
12
11
 
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require 'taketo/ssh_config_generator_visitor'
3
+
4
+ include Taketo
5
+
6
+ describe "SSHConfigGeneratorVisitor" do
7
+ subject(:generator) { SSHConfigGeneratorVisitor.new }
8
+
9
+ describe "#visit_server" do
10
+ let(:server) { stub(:Server, :name => :sponge, :host => "bar.foo.com", :port => nil, :username => nil, :identity_file => nil, :global_alias => nil) }
11
+
12
+ it "renders available server info" do
13
+ server.stub(:port => 8000, :username => "bob", :identity_file => "path_to_identity_file")
14
+ generator.visit_server(server)
15
+ expect(generator.result).to include(<<-SSH.chomp)
16
+ Host bar.foo.com
17
+ Hostname bar.foo.com
18
+ Port 8000
19
+ User bob
20
+ IdentityFile path_to_identity_file
21
+ SSH
22
+ end
23
+
24
+ it "skips undefined options" do
25
+ generator.visit_server(server)
26
+ expect(generator.result).to include(<<-SSH.chomp)
27
+ Host bar.foo.com
28
+ Hostname bar.foo.com
29
+ SSH
30
+ end
31
+
32
+ it "prefers global alias as Hostname" do
33
+ server.stub(:global_alias => "bazqux")
34
+ generator.visit_server(server)
35
+ expect(generator.result).to include(<<-SSH.chomp)
36
+ Host bazqux
37
+ Hostname bar.foo.com
38
+ SSH
39
+ end
40
+ end
41
+
42
+ it "ignores non-server nodes" do
43
+ expect { generator.visit(1) }.not_to raise_error(/visit/)
44
+ end
45
+
46
+ end
47
+
48
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taketo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -102,6 +102,7 @@ files:
102
102
  - lib/taketo/constructs_factory.rb
103
103
  - lib/taketo/destination_resolver.rb
104
104
  - lib/taketo/dsl.rb
105
+ - lib/taketo/ssh_config_generator_visitor.rb
105
106
  - lib/taketo/support/key_error.rb
106
107
  - lib/taketo/support/named_nodes_collection.rb
107
108
  - lib/taketo/support.rb
@@ -122,6 +123,7 @@ files:
122
123
  - spec/lib/taketo/constructs_factory_spec.rb
123
124
  - spec/lib/taketo/destination_resolver_spec.rb
124
125
  - spec/lib/taketo/dsl_spec.rb
126
+ - spec/lib/taketo/ssh_config_generator_visitor_spec.rb
125
127
  - spec/lib/taketo/support/named_nodes_collection_spec.rb
126
128
  - spec/spec_helper.rb
127
129
  - spec/support/helpers/construct_spec_helper.rb
@@ -135,6 +137,7 @@ files:
135
137
  - features/connect_to_server.feature
136
138
  - features/default_server_config.feature
137
139
  - features/error_handling.feature
140
+ - features/generate_ssh_config.feature
138
141
  - features/help.feature
139
142
  - features/step_definitions/main_steps.rb
140
143
  - features/support/env.rb