paratele 0.0.3 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README +8 -5
- data/Rakefile +2 -3
- data/bin/paratele +77 -84
- data/paratele.gemspec +5 -5
- data/test/tele.rb +42 -45
- metadata +7 -19
- data/bin/tele +0 -140
- data/tele.gemspec +0 -15
- data/templates/.tele/layout.json +0 -9
- data/templates/.tele/ssh_config +0 -0
data/README
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
TELE(1)
|
2
2
|
|
3
3
|
NAME
|
4
|
-
|
4
|
+
paratele -- Provisioning at a distance.
|
5
5
|
|
6
6
|
SYNOPSIS
|
7
|
-
|
7
|
+
paratele [-h] [-d path] (init|run)
|
8
8
|
|
9
9
|
DESCRIPTION
|
10
10
|
Tele is a small provisioning framework that allows you to run bash
|
@@ -99,8 +99,11 @@ USAGE
|
|
99
99
|
Host server2
|
100
100
|
Hostname 10.0.0.2
|
101
101
|
|
102
|
-
# Run
|
103
|
-
$
|
102
|
+
# Run the install script for all recipes
|
103
|
+
$ paratele run install
|
104
|
+
|
105
|
+
# Run the deploy script for certain servers
|
106
|
+
$ paratele run deploy web1,db1
|
104
107
|
|
105
108
|
INSTALLATION
|
106
|
-
$ gem install
|
109
|
+
$ gem install paratele
|
data/Rakefile
CHANGED
data/bin/paratele
CHANGED
@@ -1,42 +1,62 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
help = File.expand_path(File.join("..", "README"), File.dirname(__FILE__))
|
4
|
-
|
5
|
-
if ARGV.empty?
|
6
|
-
exec "less #{help}"
|
7
|
-
end
|
8
|
-
|
9
|
-
require "clap"
|
10
3
|
require "json"
|
11
4
|
require "open3"
|
5
|
+
require "clap"
|
6
|
+
require "erb"
|
12
7
|
|
13
|
-
|
14
|
-
|
8
|
+
$verbosity = 1
|
9
|
+
$home = Dir.pwd
|
10
|
+
|
11
|
+
class Template
|
12
|
+
attr_accessor :attributes
|
13
|
+
|
14
|
+
def initialize source
|
15
|
+
@source = source
|
16
|
+
end
|
17
|
+
|
18
|
+
def render
|
19
|
+
ERB.new(@source).result(binding)
|
20
|
+
end
|
15
21
|
end
|
16
22
|
|
17
|
-
def
|
18
|
-
|
19
|
-
[out, status.exitstatus]
|
23
|
+
def path *parts
|
24
|
+
File.join($home, *parts)
|
20
25
|
end
|
21
26
|
|
22
27
|
def layout
|
23
|
-
|
28
|
+
@layout ||= JSON.parse(File.read(path("layout.json")))
|
24
29
|
end
|
25
30
|
|
26
|
-
def
|
27
|
-
|
31
|
+
def run server, recipe, command, attributes={}
|
32
|
+
template_path = path("recipes", recipe, "#{command}.erb")
|
33
|
+
if File.exists?(template_path)
|
34
|
+
source = File.read(template_path)
|
35
|
+
template = Template.new(source)
|
36
|
+
template.attributes = attributes
|
37
|
+
ssh(server, template.render)
|
38
|
+
end
|
28
39
|
end
|
29
40
|
|
30
|
-
def
|
31
|
-
path("
|
41
|
+
def ssh server, script
|
42
|
+
out, status = Open3.capture2e("ssh -T -F #{path("ssh_config")} #{server}", :stdin_data => script)
|
43
|
+
[out, status.exitstatus]
|
32
44
|
end
|
33
45
|
|
34
|
-
|
35
|
-
|
46
|
+
commands = Clap.run ARGV,
|
47
|
+
"-q" => lambda {
|
48
|
+
$verbosity = 0
|
49
|
+
},
|
50
|
+
"-v" => lambda {
|
51
|
+
$verbosity = 2
|
52
|
+
},
|
53
|
+
"-d" => lambda {|path|
|
54
|
+
$home = File.join(Dir.pwd, path)
|
55
|
+
}
|
36
56
|
|
37
|
-
|
38
|
-
|
39
|
-
|
57
|
+
unless File.exists?(path("layout.json"))
|
58
|
+
$stderr.puts "Couldn't find `layout.json`"
|
59
|
+
exit 1
|
40
60
|
end
|
41
61
|
|
42
62
|
out = Module.new do
|
@@ -65,76 +85,49 @@ out = Module.new do
|
|
65
85
|
end
|
66
86
|
end
|
67
87
|
|
68
|
-
|
69
|
-
|
70
|
-
|
88
|
+
case ARGV.shift
|
89
|
+
when "run" then
|
90
|
+
command = ARGV.shift
|
91
|
+
environment, servers = ARGV.shift.split(":")
|
71
92
|
|
72
|
-
|
93
|
+
environment = layout[environment]
|
94
|
+
servers = if servers
|
95
|
+
servers.split(",")
|
96
|
+
else
|
97
|
+
environment["servers"].keys
|
98
|
+
end
|
73
99
|
|
74
|
-
|
75
|
-
"-h" => lambda {
|
76
|
-
exec "less #{help}"
|
77
|
-
},
|
78
|
-
"-q" => lambda {
|
79
|
-
verbosity = 0
|
80
|
-
},
|
81
|
-
"-v" => lambda {
|
82
|
-
verbosity = 2
|
83
|
-
},
|
84
|
-
"-d" => lambda {|path|
|
85
|
-
ENV["TELE_HOME"] = File.join(Dir.pwd, path)
|
86
|
-
}
|
100
|
+
exit_status = 0
|
87
101
|
|
88
|
-
|
89
|
-
|
90
|
-
source = File.expand_path("../templates/.tele", File.dirname(__FILE__))
|
91
|
-
target = File.expand_path(Dir.pwd)
|
102
|
+
servers.each do |server|
|
103
|
+
recipes = environment["servers"][server]
|
92
104
|
|
93
|
-
|
94
|
-
out.done
|
95
|
-
}
|
105
|
+
out.server(server)
|
96
106
|
|
97
|
-
|
98
|
-
|
99
|
-
exit 1
|
100
|
-
end
|
107
|
+
recipes.each do |recipe|
|
108
|
+
print " #{recipe}: "
|
101
109
|
|
102
|
-
|
103
|
-
|
104
|
-
if commands.size == 3
|
105
|
-
selected = commands.last.split(",")
|
106
|
-
servers.select! {|server| selected.include?(server)}
|
107
|
-
end
|
110
|
+
if File.exists?(path("recipes", recipe))
|
111
|
+
stdout, status = run(server, recipe, command, environment["attributes"])
|
108
112
|
|
109
|
-
|
110
|
-
|
111
|
-
servers.each do |server, recipes|
|
112
|
-
out.server(server)
|
113
|
-
|
114
|
-
recipes.each do |recipe|
|
115
|
-
print " #{recipe}: "
|
116
|
-
|
117
|
-
if File.exists?(path("recipes", recipe))
|
118
|
-
stdout, status = run(server, recipe, command)
|
119
|
-
|
120
|
-
case status
|
121
|
-
when nil
|
122
|
-
out.unknown
|
123
|
-
when 0
|
124
|
-
out.ok
|
125
|
-
$stderr.print stdout if verbosity >= 2
|
126
|
-
else
|
127
|
-
out.error
|
128
|
-
$stderr.print stdout if verbosity >= 1
|
129
|
-
exit_status = 1
|
130
|
-
break
|
131
|
-
end
|
132
|
-
else
|
113
|
+
case status
|
114
|
+
when nil
|
133
115
|
out.unknown
|
134
|
-
|
116
|
+
when 0
|
117
|
+
out.ok
|
118
|
+
$stderr.print stdout if $verbosity >= 2
|
119
|
+
else
|
120
|
+
out.error
|
121
|
+
$stderr.print stdout if $verbosity >= 1
|
122
|
+
exit_status = 1
|
123
|
+
break
|
135
124
|
end
|
125
|
+
else
|
126
|
+
out.unknown
|
127
|
+
exit 1
|
136
128
|
end
|
137
129
|
end
|
130
|
+
end
|
138
131
|
|
139
|
-
|
140
|
-
|
132
|
+
exit exit_status
|
133
|
+
end
|
data/paratele.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "paratele"
|
3
|
-
s.version = "0.
|
3
|
+
s.version = "0.2"
|
4
4
|
s.summary = "Provisioning at a distance"
|
5
5
|
s.description = "Tele is a small provisioning framework that allows you to run bash scripts on remote servers over SSH."
|
6
|
-
s.authors = ["Damian Janowski", "Michel Martens"]
|
7
|
-
s.email = ["djanowski@dimaion.com", "michel@soveran.com"]
|
8
|
-
s.homepage = "http://github.com/
|
6
|
+
s.authors = ["Damian Janowski", "Michel Martens", "Harry Vangberg"]
|
7
|
+
s.email = ["djanowski@dimaion.com", "michel@soveran.com", "harry@vangberg.name"]
|
8
|
+
s.homepage = "http://github.com/vangberg/paratele"
|
9
9
|
|
10
10
|
s.executables.push("paratele")
|
11
11
|
|
12
12
|
s.add_dependency("clap")
|
13
13
|
|
14
|
-
s.files = ["LICENSE", "README", "Rakefile", "bin/paratele", "
|
14
|
+
s.files = ["LICENSE", "README", "Rakefile", "bin/paratele", "paratele.gemspec", "test/tele.missing-recipes", "test/tele.rb", "test/tele.simple"]
|
15
15
|
end
|
data/test/tele.rb
CHANGED
@@ -7,28 +7,25 @@ def root(*args)
|
|
7
7
|
File.join(ROOT, *args)
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
sh("ruby #{root "bin/
|
10
|
+
def paratele(*args)
|
11
|
+
sh("ruby #{root "bin/paratele"} #{Shellwords.join args}")
|
12
12
|
end
|
13
13
|
|
14
14
|
def sh(cmd)
|
15
15
|
Open3.capture3(cmd)
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
test "`tele run` without a config" do
|
24
|
-
out, err, status = tele("run", "install")
|
18
|
+
test "`paratele run` without a config" do
|
19
|
+
Dir.chdir("test") {
|
20
|
+
out, err, status = paratele("run", "install", "production")
|
25
21
|
|
26
|
-
|
27
|
-
|
22
|
+
assert err =~ /Couldn't find/
|
23
|
+
assert_equal 1, status.exitstatus
|
24
|
+
}
|
28
25
|
end
|
29
26
|
|
30
|
-
test "`
|
31
|
-
out, err, status =
|
27
|
+
test "`paratele run` with missing recipes" do
|
28
|
+
out, err, status = paratele("run", "deploy", "production", "-d", "test/tele.missing-recipes")
|
32
29
|
|
33
30
|
assert_equal 1, status.exitstatus
|
34
31
|
assert out =~ /db-1/
|
@@ -36,8 +33,8 @@ test "`tele run` with missing recipes" do
|
|
36
33
|
assert out !~ /cassandra: .*\?/
|
37
34
|
end
|
38
35
|
|
39
|
-
test "`
|
40
|
-
out, err, status =
|
36
|
+
test "`paratele run` successful - production" do
|
37
|
+
out, err, status = paratele("run", "install", "production", "-d", "test/tele.simple")
|
41
38
|
|
42
39
|
assert_equal 0, status.exitstatus
|
43
40
|
assert out =~ /db-1/
|
@@ -45,10 +42,26 @@ test "`tele run` successful" do
|
|
45
42
|
assert out =~ /redis: .*OK/
|
46
43
|
assert out =~ /cdb: .*OK/
|
47
44
|
assert out =~ /cassandra: .*OK/
|
45
|
+
|
46
|
+
assert out !~ /sta-1/
|
48
47
|
end
|
49
48
|
|
50
|
-
test "`
|
51
|
-
out, err, status =
|
49
|
+
test "`paratele run` successful - staging" do
|
50
|
+
out, err, status = paratele("run", "install", "staging", "-d", "test/tele.simple")
|
51
|
+
|
52
|
+
assert_equal 0, status.exitstatus
|
53
|
+
assert out =~ /sta1/
|
54
|
+
assert out =~ /redis: .*OK/
|
55
|
+
assert out =~ /erb: .*OK/
|
56
|
+
|
57
|
+
assert out !~ /db-1/
|
58
|
+
assert out !~ /db-2/
|
59
|
+
assert out !~ /cdb:/
|
60
|
+
assert out !~ /cassandra:/
|
61
|
+
end
|
62
|
+
|
63
|
+
test "`paratele run` with recipes missing a command" do
|
64
|
+
out, err, status = paratele("run", "status", "production", "-d", "test/tele.simple")
|
52
65
|
|
53
66
|
assert_equal 0, status.exitstatus
|
54
67
|
assert out =~ /cassandra: .*\?/
|
@@ -56,8 +69,8 @@ test "`tele run` with recipes missing a command" do
|
|
56
69
|
assert out =~ /redis: .*OK/
|
57
70
|
end
|
58
71
|
|
59
|
-
test "`
|
60
|
-
out, err, status =
|
72
|
+
test "`paratele run` with errors" do
|
73
|
+
out, err, status = paratele("run", "update", "production", "-d", "test/tele.simple")
|
61
74
|
|
62
75
|
assert_equal 1, status.exitstatus
|
63
76
|
|
@@ -70,10 +83,11 @@ test "`tele run` with errors" do
|
|
70
83
|
assert out =~ /redis: .*OK/
|
71
84
|
end
|
72
85
|
|
73
|
-
test "`
|
74
|
-
out, err, status =
|
86
|
+
test "`paratele run` with specific server" do
|
87
|
+
out, err, status = paratele("run", "install", "production:db-2", "-d", "test/tele.simple")
|
75
88
|
|
76
89
|
assert_equal 0, status.exitstatus
|
90
|
+
assert out !~ /sta-1/
|
77
91
|
assert out !~ /db-1/
|
78
92
|
assert out !~ /cassandra/
|
79
93
|
assert out !~ /cdb/
|
@@ -81,16 +95,17 @@ test "`tele run` with specific server" do
|
|
81
95
|
assert out =~ /redis/
|
82
96
|
end
|
83
97
|
|
84
|
-
test "`
|
85
|
-
out, err, status =
|
98
|
+
test "`paratele run` with multiple server" do
|
99
|
+
out, err, status = paratele("run", "install", "production:db-2,db-1", "-d", "test/tele.simple")
|
86
100
|
|
87
101
|
assert_equal 0, status.exitstatus
|
102
|
+
assert out !~ /sta-1/
|
88
103
|
assert out =~ /db-1/
|
89
104
|
assert out =~ /db-2/
|
90
105
|
end
|
91
106
|
|
92
|
-
test "`
|
93
|
-
out, err, status =
|
107
|
+
test "`paratele run -v`" do
|
108
|
+
out, err, status = paratele("run", "update", "production", "-v", "-d", "test/tele.simple")
|
94
109
|
|
95
110
|
assert err =~ /Redis succesfully updated/
|
96
111
|
assert err =~ /Updating Cassandra failed/
|
@@ -98,29 +113,11 @@ test "`tele run -v`" do
|
|
98
113
|
assert out !~ /Updating Cassandra failed/
|
99
114
|
end
|
100
115
|
|
101
|
-
test "`
|
102
|
-
out, err, status =
|
116
|
+
test "`paratele run -q`" do
|
117
|
+
out, err, status = paratele("run", "update", "production", "-q", "-d", "test/tele.simple")
|
103
118
|
|
104
119
|
assert err !~ /Redis succesfully updated/
|
105
120
|
assert err !~ /Updating Cassandra failed/
|
106
121
|
assert out !~ /Redis succesfully updated/
|
107
122
|
assert out !~ /Updating Cassandra failed/
|
108
123
|
end
|
109
|
-
|
110
|
-
__END__
|
111
|
-
|
112
|
-
test "`tele init`" do
|
113
|
-
`rm -rf test/tmp`
|
114
|
-
`mkdir test/tmp`
|
115
|
-
|
116
|
-
assert !File.exists?("test/tmp/.tele")
|
117
|
-
|
118
|
-
Dir.chdir("test/tmp") do
|
119
|
-
out, err = tele("init")
|
120
|
-
|
121
|
-
assert File.exists?(".tele")
|
122
|
-
|
123
|
-
out, err, status = tele("status")
|
124
|
-
assert status.exitstatus == 0
|
125
|
-
end
|
126
|
-
end
|
metadata
CHANGED
@@ -1,21 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paratele
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
version: 0.0.3
|
4
|
+
prerelease:
|
5
|
+
version: "0.2"
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Damian Janowski
|
13
9
|
- Michel Martens
|
10
|
+
- Harry Vangberg
|
14
11
|
autorequire:
|
15
12
|
bindir: bin
|
16
13
|
cert_chain: []
|
17
14
|
|
18
|
-
date: 2011-
|
15
|
+
date: 2011-04-07 00:00:00 +02:00
|
19
16
|
default_executable:
|
20
17
|
dependencies:
|
21
18
|
- !ruby/object:Gem::Dependency
|
@@ -26,8 +23,6 @@ dependencies:
|
|
26
23
|
requirements:
|
27
24
|
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
segments:
|
30
|
-
- 0
|
31
26
|
version: "0"
|
32
27
|
type: :runtime
|
33
28
|
version_requirements: *id001
|
@@ -35,6 +30,7 @@ description: Tele is a small provisioning framework that allows you to run bash
|
|
35
30
|
email:
|
36
31
|
- djanowski@dimaion.com
|
37
32
|
- michel@soveran.com
|
33
|
+
- harry@vangberg.name
|
38
34
|
executables:
|
39
35
|
- paratele
|
40
36
|
extensions: []
|
@@ -46,14 +42,10 @@ files:
|
|
46
42
|
- README
|
47
43
|
- Rakefile
|
48
44
|
- bin/paratele
|
49
|
-
- bin/tele
|
50
|
-
- templates/.tele/layout.json
|
51
|
-
- templates/.tele/ssh_config
|
52
45
|
- paratele.gemspec
|
53
|
-
- tele.gemspec
|
54
46
|
- test/tele.rb
|
55
47
|
has_rdoc: true
|
56
|
-
homepage: http://github.com/
|
48
|
+
homepage: http://github.com/vangberg/paratele
|
57
49
|
licenses: []
|
58
50
|
|
59
51
|
post_install_message:
|
@@ -66,21 +58,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
66
58
|
requirements:
|
67
59
|
- - ">="
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
segments:
|
70
|
-
- 0
|
71
61
|
version: "0"
|
72
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
63
|
none: false
|
74
64
|
requirements:
|
75
65
|
- - ">="
|
76
66
|
- !ruby/object:Gem::Version
|
77
|
-
segments:
|
78
|
-
- 0
|
79
67
|
version: "0"
|
80
68
|
requirements: []
|
81
69
|
|
82
70
|
rubyforge_project:
|
83
|
-
rubygems_version: 1.
|
71
|
+
rubygems_version: 1.6.2
|
84
72
|
signing_key:
|
85
73
|
specification_version: 3
|
86
74
|
summary: Provisioning at a distance
|
data/bin/tele
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
#! /usr/bin/env ruby
|
2
|
-
|
3
|
-
help = File.expand_path(File.join("..", "README"), File.dirname(__FILE__))
|
4
|
-
|
5
|
-
if ARGV.empty?
|
6
|
-
exec "less #{help}"
|
7
|
-
end
|
8
|
-
|
9
|
-
require "clap"
|
10
|
-
require "json"
|
11
|
-
require "open3"
|
12
|
-
|
13
|
-
def path(*parts)
|
14
|
-
File.expand_path(File.join(*parts), ENV["TELE_HOME"])
|
15
|
-
end
|
16
|
-
|
17
|
-
def ssh(server, script)
|
18
|
-
out, status = Open3.capture2e("ssh -T -F #{path("ssh_config")} #{server} < #{script}")
|
19
|
-
[out, status.exitstatus]
|
20
|
-
end
|
21
|
-
|
22
|
-
def layout
|
23
|
-
$layout ||= JSON.parse(File.read(path("layout.json")))
|
24
|
-
end
|
25
|
-
|
26
|
-
def servers
|
27
|
-
layout["servers"]
|
28
|
-
end
|
29
|
-
|
30
|
-
def recipe_script(recipe, command)
|
31
|
-
path("recipes", recipe, "#{command}.sh")
|
32
|
-
end
|
33
|
-
|
34
|
-
def run(server, recipe, command)
|
35
|
-
script = recipe_script(recipe, command)
|
36
|
-
|
37
|
-
if File.exist?(script)
|
38
|
-
ssh(server, script)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
out = Module.new do
|
43
|
-
def self.server(name)
|
44
|
-
puts name
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.error
|
48
|
-
puts "\033[01;31mERROR\033[00m"
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.ok
|
52
|
-
puts "\033[01;32mOK\033[00m"
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.missing
|
56
|
-
puts "\033[01;33mMISSING\033[00m"
|
57
|
-
end
|
58
|
-
|
59
|
-
def self.done
|
60
|
-
puts "\033[01;32mDONE\033[00m"
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.unknown
|
64
|
-
puts "?"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
###
|
69
|
-
|
70
|
-
ENV["TELE_HOME"] ||= File.join(Dir.pwd, ".tele")
|
71
|
-
|
72
|
-
verbosity = 1
|
73
|
-
|
74
|
-
commands = Clap.run ARGV,
|
75
|
-
"-h" => lambda {
|
76
|
-
exec "less #{help}"
|
77
|
-
},
|
78
|
-
"-q" => lambda {
|
79
|
-
verbosity = 0
|
80
|
-
},
|
81
|
-
"-v" => lambda {
|
82
|
-
verbosity = 2
|
83
|
-
},
|
84
|
-
"-d" => lambda {|path|
|
85
|
-
ENV["TELE_HOME"] = File.join(Dir.pwd, path)
|
86
|
-
}
|
87
|
-
|
88
|
-
Clap.run commands,
|
89
|
-
"init" => lambda {
|
90
|
-
source = File.expand_path("../templates/.tele", File.dirname(__FILE__))
|
91
|
-
target = File.expand_path(Dir.pwd)
|
92
|
-
|
93
|
-
%x{cp -r #{source} #{target}}
|
94
|
-
out.done
|
95
|
-
}
|
96
|
-
|
97
|
-
unless File.directory?(path)
|
98
|
-
$stderr.puts "Couldn't find a .tele directory"
|
99
|
-
exit 1
|
100
|
-
end
|
101
|
-
|
102
|
-
Clap.run commands,
|
103
|
-
"run" => lambda {|command|
|
104
|
-
if commands.size == 3
|
105
|
-
selected = commands.last.split(",")
|
106
|
-
servers.select! {|server| selected.include?(server)}
|
107
|
-
end
|
108
|
-
|
109
|
-
exit_status = 0
|
110
|
-
|
111
|
-
servers.each do |server, recipes|
|
112
|
-
out.server(server)
|
113
|
-
|
114
|
-
recipes.each do |recipe|
|
115
|
-
print " #{recipe}: "
|
116
|
-
|
117
|
-
if File.exists?(path("recipes", recipe))
|
118
|
-
stdout, status = run(server, recipe, command)
|
119
|
-
|
120
|
-
case status
|
121
|
-
when nil
|
122
|
-
out.unknown
|
123
|
-
when 0
|
124
|
-
out.ok
|
125
|
-
$stderr.print stdout if verbosity >= 2
|
126
|
-
else
|
127
|
-
out.error
|
128
|
-
$stderr.print stdout if verbosity >= 1
|
129
|
-
exit_status = 1
|
130
|
-
break
|
131
|
-
end
|
132
|
-
else
|
133
|
-
out.unknown
|
134
|
-
exit 1
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
exit exit_status
|
140
|
-
}
|
data/tele.gemspec
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
Gem::Specification.new do |s|
|
2
|
-
s.name = "tele"
|
3
|
-
s.version = "0.0.1"
|
4
|
-
s.summary = "Provisioning at a distance"
|
5
|
-
s.description = "Tele is a small provisioning framework that allows you to run bash scripts on remote servers over SSH."
|
6
|
-
s.authors = ["Damian Janowski", "Michel Martens"]
|
7
|
-
s.email = ["djanowski@dimaion.com", "michel@soveran.com"]
|
8
|
-
s.homepage = "http://github.com/djanowski/tele"
|
9
|
-
|
10
|
-
s.executables.push("tele")
|
11
|
-
|
12
|
-
s.add_dependency("clap")
|
13
|
-
|
14
|
-
s.files = ["LICENSE", "README", "Rakefile", "bin/tele", "templates/.tele/layout.json", "templates/.tele/ssh_config", "tele.gemspec", "test/tele.rb"]
|
15
|
-
end
|
data/templates/.tele/layout.json
DELETED
data/templates/.tele/ssh_config
DELETED
File without changes
|