jisota 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/Guardfile +7 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +254 -0
  8. data/Rakefile +1 -0
  9. data/jisota.gemspec +30 -0
  10. data/lib/jisota/collection.rb +52 -0
  11. data/lib/jisota/command_script.rb +17 -0
  12. data/lib/jisota/composite_script.rb +23 -0
  13. data/lib/jisota/configuration.rb +60 -0
  14. data/lib/jisota/errors.rb +3 -0
  15. data/lib/jisota/file_script.rb +21 -0
  16. data/lib/jisota/logger.rb +74 -0
  17. data/lib/jisota/package.rb +35 -0
  18. data/lib/jisota/package_script.rb +54 -0
  19. data/lib/jisota/packages/apt.rb +17 -0
  20. data/lib/jisota/packages/ruby.rb +29 -0
  21. data/lib/jisota/param.rb +34 -0
  22. data/lib/jisota/param_parser.rb +70 -0
  23. data/lib/jisota/provisioner.rb +24 -0
  24. data/lib/jisota/role.rb +13 -0
  25. data/lib/jisota/script_block.rb +66 -0
  26. data/lib/jisota/server.rb +12 -0
  27. data/lib/jisota/ssh_engine.rb +11 -0
  28. data/lib/jisota/ssh_session.rb +48 -0
  29. data/lib/jisota/upload_file.rb +3 -0
  30. data/lib/jisota/version.rb +3 -0
  31. data/lib/jisota.rb +63 -0
  32. data/spec/acceptance/simple_script_spec.rb +56 -0
  33. data/spec/lib/jisota/collection_spec.rb +44 -0
  34. data/spec/lib/jisota/command_script_spec.rb +22 -0
  35. data/spec/lib/jisota/composite_script_spec.rb +37 -0
  36. data/spec/lib/jisota/configuration_spec.rb +82 -0
  37. data/spec/lib/jisota/file_script_spec.rb +22 -0
  38. data/spec/lib/jisota/logger_spec.rb +34 -0
  39. data/spec/lib/jisota/package_script_spec.rb +43 -0
  40. data/spec/lib/jisota/package_spec.rb +74 -0
  41. data/spec/lib/jisota/packages/apt_spec.rb +15 -0
  42. data/spec/lib/jisota/packages/ruby_spec.rb +14 -0
  43. data/spec/lib/jisota/role_spec.rb +31 -0
  44. data/spec/lib/jisota/script_block_spec.rb +51 -0
  45. data/spec/lib/jisota/server_spec.rb +37 -0
  46. data/spec/lib/jisota_spec.rb +34 -0
  47. data/spec/spec_helper.rb +21 -0
  48. data/spec/test_files/foo +1 -0
  49. metadata +221 -0
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe Configuration do
5
+ describe "#packages" do
6
+ it "can manage packages" do
7
+ package = instance_double(Package, name: :foo, key: :foo)
8
+ config = Configuration.new
9
+ config.add_package(package)
10
+ expect(config.get_package(package.name)).to eq(package)
11
+ end
12
+ end
13
+
14
+ describe "#roles" do
15
+ it "can manage roles" do
16
+ role = instance_double(Role, name: :foo, key: :foo)
17
+ config = Configuration.new
18
+ config.add_role(role)
19
+ expect(config.get_role(role.name)).to eq(role)
20
+ end
21
+ end
22
+
23
+ describe "#servers" do
24
+ it "can manage server" do
25
+ server = instance_double(Server)
26
+ config = Configuration.new
27
+ config.add_server(server)
28
+
29
+ count = 0
30
+ config.each_server do |a_server|
31
+ count += 1
32
+ expect(a_server).to eq(server)
33
+ end
34
+ expect(count).to eq(1)
35
+ end
36
+ end
37
+
38
+ describe "initialize with DSL" do
39
+ describe "#package" do
40
+ it "reads the package" do
41
+ config = Configuration.new do
42
+ package :foo do
43
+ description "bar"
44
+ end
45
+ end
46
+ package = config.packages.first
47
+
48
+ expect(config.packages.size).to eq(1)
49
+ expect(package.name).to eq(:foo)
50
+ expect(package.description).to eq("bar")
51
+ end
52
+ end
53
+
54
+ describe "#role" do
55
+ it "creates a role" do
56
+ config = Configuration.new do
57
+ role :app do
58
+ cmd "touch foo"
59
+ end
60
+ end
61
+ role = config.roles.first
62
+ expect(role.name).to eq(:app)
63
+ expect(role.script_block).to be_a(ScriptBlock)
64
+ end
65
+ end
66
+
67
+ describe "#server" do
68
+ it "creates a server" do
69
+ config = Configuration.new do
70
+ server "example.org", user: "foo", roles: [:app, :db]
71
+ end
72
+ server = config.servers.first
73
+
74
+ expect(config.servers.size).to eq(1)
75
+ expect(server.host).to eq("example.org")
76
+ expect(server.user).to eq("foo")
77
+ expect(server.roles).to eq([:app, :db])
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe FileScript do
5
+ describe "#file" do
6
+ it "initializes with one" do
7
+ expect(FileScript.new(:foo).file).to eq(:foo)
8
+ end
9
+ end
10
+
11
+ describe "#execute" do
12
+ it "asks ssh_session to upload file" do
13
+ script = FileScript.new(:foo)
14
+ ssh_session = instance_double(SSHSession, upload: true)
15
+ result = script.execute(ssh_session)
16
+
17
+ expect(ssh_session).to have_received(:upload).with(:foo, nil)
18
+ expect(result).to be true
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe Logger do
5
+ let(:logger) { Logger.new(stdout: stdout, stderr: stderr, verbose: verbose) }
6
+ let(:stdout) { instance_double(IO, write: nil) }
7
+ let(:stderr) { instance_double(IO, write: nil) }
8
+ let(:verbose) { true }
9
+
10
+ describe "initialization" do
11
+ it "initializes with options" do
12
+ logger = Logger.new(stdout: :out, stderr: :err, verbose: false)
13
+ expect(logger.stdout).to eq(:out)
14
+ expect(logger.stderr).to eq(:err)
15
+ expect(logger.verbose).to be false
16
+ end
17
+ end
18
+
19
+ describe '#info' do
20
+ it "writes to stdout" do
21
+ logger.info("foo")
22
+ expect(stdout).to have_received(:write).with("foo")
23
+ end
24
+ end
25
+
26
+ describe "#error" do
27
+ it "writes to stderr" do
28
+ logger.error("foo")
29
+ expect(stderr).to have_received(:write).with("foo")
30
+ end
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe PackageScript do
5
+ describe "#execute" do
6
+ let(:ssh_session) { instance_double(SSHSession, command: true) }
7
+
8
+ it "executes each script from the block" do
9
+ package = Package.new do
10
+ run { cmd "foo" }
11
+ end
12
+ package_script = PackageScript.new(package)
13
+ result = package_script.execute(ssh_session)
14
+
15
+ expect(result).to be true
16
+ expect(ssh_session).to have_received(:command).with("foo", nil)
17
+ end
18
+
19
+ it "parses args" do
20
+ package = Package.new do
21
+ param :bar
22
+ run { cmd "foo #{bar}" }
23
+ end
24
+ package_script = PackageScript.new(package, ["baz"])
25
+ package_script.execute(ssh_session)
26
+
27
+ expect(ssh_session).to have_received(:command).with("foo baz", nil)
28
+ end
29
+
30
+ it "uses verify block" do
31
+ package = Package.new do
32
+ run { cmd "foo" }
33
+ verify { cmd "bar" }
34
+ end
35
+ package_script = PackageScript.new(package)
36
+ package_script.execute(ssh_session)
37
+
38
+ expect(ssh_session).to have_received(:command).with("bar", nil)
39
+ expect(ssh_session).to_not have_received(:command).with("foo", nil)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe Package do
5
+ describe '#name' do
6
+ it "has a name" do
7
+ package = Package.new
8
+ package.name = :foo
9
+ expect(package.name).to eq(:foo)
10
+ end
11
+ end
12
+
13
+ describe "#params" do
14
+ it "has params" do
15
+ package = Package.new
16
+ expect(package.params).to eq([])
17
+ end
18
+
19
+ it "can add param" do
20
+ package = Package.new
21
+ package.params << :foo
22
+ expect(package.params).to eq([:foo])
23
+ end
24
+ end
25
+
26
+ describe "#description" do
27
+ it "has one" do
28
+ package = Package.new
29
+ package.description = :foo
30
+ expect(package.description).to eq(:foo)
31
+ end
32
+ end
33
+
34
+ describe "#run_block" do
35
+ it "has one" do
36
+ package = Package.new
37
+ package.run_block = :foo
38
+ expect(package.run_block).to eq(:foo)
39
+ end
40
+ end
41
+
42
+ describe "#verify_block" do
43
+ it "has one" do
44
+ package = Package.new
45
+ package.verify_block = :foo
46
+ expect(package.verify_block).to eq(:foo)
47
+ end
48
+ end
49
+
50
+ describe Package::DSL do
51
+ it "initializes using DSL" do
52
+ package = Package.new(:my_awesome_package) do
53
+ description "Does cool stuff"
54
+ param :foo
55
+ param :bar, default: 42
56
+ run do
57
+ cmd "touch #{foo}"
58
+ end
59
+ verify do
60
+ cmd "[ -f foo ]"
61
+ end
62
+ end
63
+
64
+ expect(package.name).to eq(:my_awesome_package)
65
+ expect(package.description).to eq("Does cool stuff")
66
+ expect(package.params.size).to eq(2)
67
+ expect(package.params.last.name).to eq(:bar)
68
+ expect(package.params.last.options).to eq({ default: 42 })
69
+ expect(package.run_block).to be_a(ScriptBlock)
70
+ expect(package.verify_block).to be_a(ScriptBlock)
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,15 @@
1
+
2
+ require 'spec_helper'
3
+
4
+ module Jisota
5
+ describe "Ruby package" do
6
+ it "is valid" do
7
+ script_block = ScriptBlock.new do
8
+ apt :curl
9
+ end
10
+ script = script_block.evaluate({}, Jisota.global_packages)
11
+ ssh_session = instance_double(SSHSession, command: true, upload: true)
12
+ expect { script.execute(ssh_session) }.to_not raise_exception
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe "Ruby package" do
5
+ it "is valid" do
6
+ script_block = ScriptBlock.new do
7
+ ruby version: "2.1.1"
8
+ end
9
+ script = script_block.evaluate({}, Jisota.global_packages)
10
+ ssh_session = instance_double(SSHSession, command: true, upload: true)
11
+ expect { script.execute(ssh_session) }.to_not raise_exception
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe Role do
5
+ describe "#name" do
6
+ it "has one" do
7
+ role = Role.new
8
+ role.name = :foo
9
+ expect(role.name).to eq(:foo)
10
+ end
11
+ end
12
+
13
+ describe "#script_block" do
14
+ it "has some" do
15
+ role = Role.new
16
+ role.script_block = :foo
17
+ expect(role.script_block).to eq(:foo)
18
+ end
19
+ end
20
+
21
+ describe "DSL" do
22
+ it "initializes with DSL" do
23
+ role = Role.new(:app) do
24
+ cmd "touch foo"
25
+ end
26
+ expect(role.name).to eq(:app)
27
+ expect(role.script_block).to be_a(ScriptBlock)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe ScriptBlock do
5
+ describe "#block" do
6
+ it "is initialized with a block" do
7
+ script_block = ScriptBlock.new { foo }
8
+ expect(script_block.block).to be_a(Proc)
9
+ end
10
+ end
11
+
12
+ describe "#evaluate" do
13
+ it "creates a script from the block" do
14
+ script_block = ScriptBlock.new do
15
+ cmd "foo"
16
+ upload from: "x", to: "y"
17
+ end
18
+
19
+ script = script_block.evaluate
20
+
21
+ expect(script).to be_a(CompositeScript)
22
+ expect(script.scripts.size).to eq(2)
23
+ expect(script.scripts[0]).to be_a(CommandScript)
24
+ expect(script.scripts[0].command).to eq("foo")
25
+ expect(script.scripts[1]).to be_a(FileScript)
26
+ expect(script.scripts[1].file).to eq(UploadFile.new("x", "y"))
27
+ end
28
+
29
+ it "parses args" do
30
+ script_block = ScriptBlock.new { cmd "touch #{foo}" }
31
+ args = { foo: "bar" }
32
+ script = script_block.evaluate(args)
33
+
34
+ expect(script.scripts.first.command).to eq("touch bar")
35
+ end
36
+
37
+ it "calls packages" do
38
+ script_block = ScriptBlock.new { touch "file" }
39
+ packages = Collection.new
40
+ packages << Package.new(:touch)
41
+
42
+ script = script_block.evaluate({}, packages)
43
+ script = script.scripts.first
44
+
45
+ expect(script).to be_a(PackageScript)
46
+ expect(script.package).to be(packages.first)
47
+ expect(script.args).to eq(["file"])
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe Server do
5
+ describe '#host' do
6
+ it "has one" do
7
+ server = Server.new
8
+ server.host = :foo
9
+ expect(server.host).to eq(:foo)
10
+ end
11
+ end
12
+
13
+ describe "#roles" do
14
+ it "has roles" do
15
+ server = Server.new
16
+ expect(server.roles).to eq([])
17
+ end
18
+ end
19
+
20
+ describe "#user" do
21
+ it "has one" do
22
+ server = Server.new
23
+ server.user = :foo
24
+ expect(server.user).to eq(:foo)
25
+ end
26
+ end
27
+
28
+ describe "#initialization" do
29
+ it "initializes with values" do
30
+ server = Server.new("mydomain.com", user: "john_doe", roles: :app)
31
+ expect(server.host).to eq("mydomain.com")
32
+ expect(server.user).to eq("john_doe")
33
+ expect(server.roles).to eq([:app])
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ module Jisota
4
+ describe Jisota do
5
+ describe ".run" do
6
+ it "delegates to provisioner" do
7
+ provisioner = instance_double(Provisioner, run: nil)
8
+ Jisota.run(:foo, provisioner: provisioner)
9
+
10
+ expect(provisioner).to have_received(:run) do |config, logger|
11
+ expect(config).to eq(:foo)
12
+ end
13
+ end
14
+ end
15
+
16
+ describe ".global_packages" do
17
+ it "contains a package collection" do
18
+ expect(Jisota.global_packages).to be_a(Collection)
19
+ end
20
+ end
21
+
22
+ describe '.global_config' do
23
+ it "can add packages to global_packages" do
24
+ add_package = proc do
25
+ Jisota.global_config do
26
+ package :foo
27
+ end
28
+ end
29
+
30
+ expect { add_package.call }.to change { Jisota.global_packages.size }.by(1)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'jisota'
5
+ require 'byebug'
6
+
7
+ RSpec.configure do |config|
8
+ config.filter_run :focus
9
+ config.run_all_when_everything_filtered = true
10
+
11
+ config.order = :random
12
+
13
+ config.expect_with :rspec do |expectations|
14
+ expectations.syntax = :expect
15
+ end
16
+
17
+ config.mock_with :rspec do |mocks|
18
+ mocks.syntax = :expect
19
+ mocks.verify_partial_doubles = true
20
+ end
21
+ end
@@ -0,0 +1 @@
1
+ foo
metadata ADDED
@@ -0,0 +1,221 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jisota
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Lasse Skindstad Ebert
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: net-ssh
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.8.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.8.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: net-scp
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.0.beta2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.0.0.beta2
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 4.2.8
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 4.2.8
125
+ description: Easily provision servers using ruby, existing packages, your own packages
126
+ and a nice DSL
127
+ email:
128
+ - lasseebert@gmail.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ".gitignore"
134
+ - ".rspec"
135
+ - Gemfile
136
+ - Guardfile
137
+ - LICENSE.txt
138
+ - README.md
139
+ - Rakefile
140
+ - jisota.gemspec
141
+ - lib/jisota.rb
142
+ - lib/jisota/collection.rb
143
+ - lib/jisota/command_script.rb
144
+ - lib/jisota/composite_script.rb
145
+ - lib/jisota/configuration.rb
146
+ - lib/jisota/errors.rb
147
+ - lib/jisota/file_script.rb
148
+ - lib/jisota/logger.rb
149
+ - lib/jisota/package.rb
150
+ - lib/jisota/package_script.rb
151
+ - lib/jisota/packages/apt.rb
152
+ - lib/jisota/packages/ruby.rb
153
+ - lib/jisota/param.rb
154
+ - lib/jisota/param_parser.rb
155
+ - lib/jisota/provisioner.rb
156
+ - lib/jisota/role.rb
157
+ - lib/jisota/script_block.rb
158
+ - lib/jisota/server.rb
159
+ - lib/jisota/ssh_engine.rb
160
+ - lib/jisota/ssh_session.rb
161
+ - lib/jisota/upload_file.rb
162
+ - lib/jisota/version.rb
163
+ - spec/acceptance/simple_script_spec.rb
164
+ - spec/lib/jisota/collection_spec.rb
165
+ - spec/lib/jisota/command_script_spec.rb
166
+ - spec/lib/jisota/composite_script_spec.rb
167
+ - spec/lib/jisota/configuration_spec.rb
168
+ - spec/lib/jisota/file_script_spec.rb
169
+ - spec/lib/jisota/logger_spec.rb
170
+ - spec/lib/jisota/package_script_spec.rb
171
+ - spec/lib/jisota/package_spec.rb
172
+ - spec/lib/jisota/packages/apt_spec.rb
173
+ - spec/lib/jisota/packages/ruby_spec.rb
174
+ - spec/lib/jisota/role_spec.rb
175
+ - spec/lib/jisota/script_block_spec.rb
176
+ - spec/lib/jisota/server_spec.rb
177
+ - spec/lib/jisota_spec.rb
178
+ - spec/spec_helper.rb
179
+ - spec/test_files/foo
180
+ homepage: https://github.com/lasseebert/jisota
181
+ licenses:
182
+ - MIT
183
+ metadata: {}
184
+ post_install_message:
185
+ rdoc_options: []
186
+ require_paths:
187
+ - lib
188
+ required_ruby_version: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ requirements: []
199
+ rubyforge_project:
200
+ rubygems_version: 2.2.0
201
+ signing_key:
202
+ specification_version: 4
203
+ summary: Easily provision servers
204
+ test_files:
205
+ - spec/acceptance/simple_script_spec.rb
206
+ - spec/lib/jisota/collection_spec.rb
207
+ - spec/lib/jisota/command_script_spec.rb
208
+ - spec/lib/jisota/composite_script_spec.rb
209
+ - spec/lib/jisota/configuration_spec.rb
210
+ - spec/lib/jisota/file_script_spec.rb
211
+ - spec/lib/jisota/logger_spec.rb
212
+ - spec/lib/jisota/package_script_spec.rb
213
+ - spec/lib/jisota/package_spec.rb
214
+ - spec/lib/jisota/packages/apt_spec.rb
215
+ - spec/lib/jisota/packages/ruby_spec.rb
216
+ - spec/lib/jisota/role_spec.rb
217
+ - spec/lib/jisota/script_block_spec.rb
218
+ - spec/lib/jisota/server_spec.rb
219
+ - spec/lib/jisota_spec.rb
220
+ - spec/spec_helper.rb
221
+ - spec/test_files/foo