sunzi 1.2.0 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ec250a135b740f0a34196be384788cdebf33d5a
4
- data.tar.gz: 27cf354835d55b8463964df7e8095c8880d3750a
3
+ metadata.gz: cb8a4617f357a7694046748161711229c0e17188
4
+ data.tar.gz: 11937bf1031b74d004b8c89b18344d779dd895f5
5
5
  SHA512:
6
- metadata.gz: 22a9585b4f2228b01509924b4c7509ca8b20b5ffd300a5a06338db32cbb12e8d1a6b23d129f9be2513d86435bb2c0c708f82b162ea708eeaefbf2cb412281414
7
- data.tar.gz: d50ddebc4f553446f4c54fcec5099c7dfab232fc1e74888bdcdc1890b06506c401cac336e6c6e860806f277bd8263c31efedec045b443f715e7fdeae70dd4988
6
+ metadata.gz: 79d7b23cc2151b0a93bd6ba0095014f05d06b60905fe3ca65e8833cb7d198ef16d10056f62fc2d626b4910b9cddc22cb2c67a747a28b23526582c3d9072d44de
7
+ data.tar.gz: 557af77389587f53612de8b5d3ec43b416ed5a96a76dbcac9177703525245ce6eb4aa36e9fba0007d294f0788e24838489095612d8c4d2cf2178a4f0e6fccb67
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.3
5
+ - 2.0.0
data/README.md CHANGED
@@ -18,6 +18,7 @@ Its design goals are:
18
18
 
19
19
  ### What's new:
20
20
 
21
+ * v1.3: SSH config support. Thanks to @toooooooby
21
22
  * v1.2: Evaluate everything as ERB templates by default. Added "files" folder.
22
23
  * v1.1: "set -e" by default. apt-get everywhere in place of aptitude. Linode DNS support for DigitalOcean instances.
23
24
  * v1.0: System functions are refactored into sunzi.mute() and sunzi.install().
data/lib/sunzi/cli.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'open3'
2
2
  require 'ostruct'
3
+ require 'net/ssh'
3
4
 
4
5
  module Sunzi
5
6
  class Cli < Thor
@@ -136,7 +137,11 @@ module Sunzi
136
137
 
137
138
  def parse_target(target)
138
139
  target.match(/(.*@)?(.*?)(:.*)?$/)
139
- [ ($1 && $1.delete('@') || 'root'), $2, ($3 && $3.delete(':') || '22') ]
140
+ # Load ssh config if it exists
141
+ config = Net::SSH::Config.for($2)
142
+ [ ($1 && $1.delete('@') || config[:user] || 'root'),
143
+ config[:host_name] || $2,
144
+ ($3 && $3.delete(':') || config[:port] && config[:port].to_s || '22') ]
140
145
  end
141
146
  end
142
147
  end
@@ -36,15 +36,12 @@ function sunzi.installed() {
36
36
  # otherwise the script may exit unexpectedly when the package is already installed.
37
37
  #
38
38
  function sunzi.install() {
39
- for name in $@
40
- do
41
- if sunzi.installed "$name"; then
42
- echo "$name already installed"
43
- return 1
44
- else
45
- echo "No packages found matching $name. Installing..."
46
- sunzi.mute "$sunzi_pkg -y install $name"
47
- return 0
48
- fi
49
- done
39
+ if sunzi.installed "$@"; then
40
+ echo "$@ already installed"
41
+ return 1
42
+ else
43
+ echo "No packages found matching $@. Installing..."
44
+ sunzi.mute "$sunzi_pkg -y install $@"
45
+ return 0
46
+ fi
50
47
  }
data/sunzi.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'sunzi'
5
- spec.version = '1.2.0' # retrieve this value by: Gem.loaded_specs['sunzi'].version.to_s
5
+ spec.version = '1.3.0' # retrieve this value by: Gem.loaded_specs['sunzi'].version.to_s
6
6
  spec.authors = ['Kenn Ejima']
7
7
  spec.email = ['kenn.ejima@gmail.com']
8
8
  spec.homepage = 'http://github.com/kenn/sunzi'
@@ -17,5 +17,6 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  spec.add_runtime_dependency 'thor'
19
19
  spec.add_runtime_dependency 'rainbow'
20
+ spec.add_runtime_dependency 'net-ssh'
20
21
  spec.add_development_dependency 'rake'
21
22
  end
data/test/test_cli.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'sunzi'
2
2
  require 'test/unit'
3
+ require 'minitest/mock'
3
4
 
4
5
  class TestCli < Test::Unit::TestCase
5
6
  def setup
@@ -14,6 +15,24 @@ class TestCli < Test::Unit::TestCase
14
15
  assert_equal ['root', '192.168.0.1', '22'], @cli.parse_target('192.168.0.1')
15
16
  end
16
17
 
18
+ def test_parse_target_with_ssh_config
19
+ ssh_config = lambda do |host|
20
+ if host == 'example.com'
21
+ { :host_name => "buzz.example.com", :user => "foobar", :port => 2222 }
22
+ else
23
+ {}
24
+ end
25
+ end
26
+
27
+ Net::SSH::Config.stub(:for, ssh_config) do
28
+ assert_equal ['foobar', 'buzz.example.com', '2222'], @cli.parse_target('example.com')
29
+ assert_equal ['foobar', 'buzz.example.com', '8080'], @cli.parse_target('example.com:8080')
30
+ assert_equal ['piyo', 'buzz.example.com', '2222'], @cli.parse_target('piyo@example.com')
31
+ assert_equal ['piyo', 'buzz.example.com', '8080'], @cli.parse_target('piyo@example.com:8080')
32
+ assert_equal ['root', '192.168.0.1', '22'], @cli.parse_target('192.168.0.1')
33
+ end
34
+ end
35
+
17
36
  def test_create
18
37
  @cli.create 'sandbox'
19
38
  assert File.exist?('sandbox/sunzi.yml')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunzi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenn Ejima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-13 00:00:00.000000000 Z
11
+ date: 2013-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: net-ssh
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -61,6 +75,7 @@ extensions: []
61
75
  extra_rdoc_files: []
62
76
  files:
63
77
  - .gitignore
78
+ - .travis.yml
64
79
  - Gemfile
65
80
  - README.md
66
81
  - Rakefile
@@ -109,10 +124,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
124
  version: '0'
110
125
  requirements: []
111
126
  rubyforge_project:
112
- rubygems_version: 2.0.3
127
+ rubygems_version: 2.0.2
113
128
  signing_key:
114
129
  specification_version: 4
115
130
  summary: Server provisioning utility for minimalists
116
131
  test_files:
117
132
  - test/test_cli.rb
118
- has_rdoc: