bow 0.5.0 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +80 -61
- data/bow.gemspec +7 -7
- data/lib/bow/command.rb +0 -2
- data/lib/bow/commands/apply.rb +4 -4
- data/lib/bow/commands/exec.rb +0 -3
- data/lib/bow/commands/prepare.rb +4 -3
- data/lib/bow/config.rb +1 -1
- data/lib/bow/inventory_example.rb +6 -2
- data/lib/bow/locker.rb +4 -4
- data/lib/bow/memorable.rb +0 -4
- data/lib/bow/options.rb +1 -1
- data/lib/bow/rake.rb +6 -3
- data/lib/bow/response_formatter.rb +6 -0
- data/lib/bow/ssh/rsync.rb +4 -4
- data/lib/bow/ssh/scp.rb +8 -3
- data/lib/bow/ssh_helper.rb +12 -4
- data/lib/bow/version.rb +1 -1
- data/src/{preprovision.sh → provision.sh} +8 -3
- metadata +21 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a81e49b3e892737818ee914200b4ebbf04283c4d
|
4
|
+
data.tar.gz: b4f833f16d08c74f0c336af66ed8f3184c2182e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03dfe12d59d54390c2d6267d82a0deb9d18c7cb589400a9365f0425c33fb59b0404320016e0dbd8570835771899525a7532a724b158e51f489da7ab3591b3ada
|
7
|
+
data.tar.gz: d4a5c7e31dbbae4bf6d504e869f26ba0ccd688b610bff0564d09245c7cd898d41ce073d30a1d84e35994edb01c5cbdadc4d8b4ea2d1e10bb1a97577ac68175c4
|
data/README.md
CHANGED
@@ -4,57 +4,54 @@
|
|
4
4
|
|
5
5
|
[![Build Status](https://travis-ci.org/zinovyev/bow.svg?branch=master)](https://travis-ci.org/zinovyev/bow)
|
6
6
|
|
7
|
-
|
7
|
+
[![Gem Version](https://badge.fury.io/rb/bow.svg)](https://badge.fury.io/rb/bow)
|
8
8
|
|
9
|
-
Bow is a system that allows you to write Rake tasks and execute them remotely
|
10
|
-
to provision and configure you servers.
|
11
9
|
|
12
|
-
##
|
10
|
+
## About
|
13
11
|
|
14
|
-
|
12
|
+
Bow doesn't bring its own DSL to live, rather it uses regular Rake tasks
|
13
|
+
instead.
|
15
14
|
|
16
|
-
|
17
|
-
And I actually like a couple of them too.
|
15
|
+
It can be handy for you if:
|
18
16
|
|
19
|
-
|
20
|
-
really want to create a complex infrastructure (I don't want to create any
|
21
|
-
infrastructure to be honest) for it and I like to do it in Ruby (well, maybe
|
22
|
-
in Bash and Ruby).
|
17
|
+
* you need to configure a pure system of 2-5 VPSs;
|
23
18
|
|
24
|
-
|
25
|
-
in Ruby. And it's called Rake.
|
19
|
+
* you don't want to build a complex infrastructure;
|
26
20
|
|
27
|
-
|
28
|
-
uses Rake instead.
|
21
|
+
* you are already familiar with Rake and don't want to to learn Python;
|
29
22
|
|
30
|
-
## Usage
|
31
23
|
|
32
|
-
|
24
|
+
## Installation
|
33
25
|
|
34
|
-
|
26
|
+
Download and install bow with the following.
|
35
27
|
|
36
28
|
```bash
|
37
29
|
|
38
|
-
gem install bow
|
30
|
+
gem install bow
|
39
31
|
|
40
|
-
```
|
32
|
+
```
|
41
33
|
|
42
|
-
3. Create an empty folder and init a basic structure there:
|
43
34
|
|
44
|
-
|
35
|
+
## Usage
|
45
36
|
|
46
|
-
|
37
|
+
First of all. If you're not familiar with Rake and Rake tasks, take a look at
|
38
|
+
this pages: [Rake docs](https://ruby.github.io/rake/) and [Rake home](https://github.com/ruby/rake). It can be a good place to start from.
|
47
39
|
|
48
|
-
cd ~/bow-test
|
49
40
|
|
50
|
-
|
41
|
+
### Project structure
|
51
42
|
|
52
|
-
|
43
|
+
The basic bow project consists of two files: `Rakefile` and `targets.json`.
|
44
|
+
|
45
|
+
Run `bow init` which will generate an example project structure to give you a
|
46
|
+
basic understanding of how to write your own configuration.
|
47
|
+
|
48
|
+
Sometimes it can be convinient to put tasks to separate files into the
|
49
|
+
[rakelib](https://ruby.github.io/rake/doc/rakefile_rdoc.html#label-Multiple+Rake+Files)
|
50
|
+
folder. So Rake will automatically autoload them.
|
53
51
|
|
54
|
-
4. The command `bow init` called above created a bare structure wich consits
|
55
|
-
of a `Rakefile` and a list of targets (managed servers) in `targets.json` file.
|
56
52
|
|
57
|
-
|
53
|
+
**targets.json** contains a list of hosts grouped in categories:
|
54
|
+
|
58
55
|
|
59
56
|
```json
|
60
57
|
|
@@ -71,11 +68,13 @@ The example targets file contains 4 IPs combined in two managed groups:
|
|
71
68
|
|
72
69
|
```
|
73
70
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
71
|
+
|
72
|
+
**Rakefile** is actually an ordinary Rakefile) which contains several tasks
|
73
|
+
for provisioning packed in namespaces which are called by the name of the server
|
74
|
+
groups from the `targets.json` file.
|
75
|
+
|
76
|
+
The main task of the group MUST always be called **provision** and can be bound
|
77
|
+
to any number of additional tasks.
|
79
78
|
|
80
79
|
|
81
80
|
```ruby
|
@@ -100,7 +99,8 @@ namespace :example_group2 do
|
|
100
99
|
task provision: :print_hello do
|
101
100
|
end
|
102
101
|
|
103
|
-
|
102
|
+
# Change enabled value to "false" to run the reverting task (:print_goodbye)
|
103
|
+
flow enabled: true, revert_task: :print_goodbye
|
104
104
|
task :print_hello do
|
105
105
|
sh 'echo "Hello from example group #2 server!"'
|
106
106
|
end
|
@@ -112,45 +112,64 @@ end
|
|
112
112
|
|
113
113
|
```
|
114
114
|
|
115
|
-
5. Now run `bow apply` and your provisioning tasks will be executed on servers
|
116
|
-
listed in `targets.json` file;
|
117
115
|
|
118
|
-
|
116
|
+
###Commands
|
119
117
|
|
120
|
-
## Task flow
|
121
118
|
|
122
|
-
|
123
|
-
client server too. So you will be able to use a little Rake DSL enhancement
|
124
|
-
wich bring a better controll of the flow of your tasks.
|
119
|
+
To **check the availability** of all configured hosts run:
|
125
120
|
|
126
|
-
The only thing you will be needed to do afterwards to enable the feature is to
|
127
|
-
require it by putting `require bow/rake` to the top of your `Rakefile`.
|
128
121
|
|
129
|
-
|
122
|
+
```bash
|
130
123
|
|
131
|
-
|
124
|
+
bow ping
|
132
125
|
|
133
|
-
|
134
|
-
task :simple_task do
|
135
|
-
# some code here ...
|
136
|
-
end
|
126
|
+
```
|
137
127
|
|
138
|
-
|
139
|
-
|
140
|
-
|
128
|
+
To **prepare soft on client** needed for bow to run
|
129
|
+
(Ruby and 2 gems: rake and bow) execute
|
130
|
+
|
131
|
+
```bash
|
132
|
+
|
133
|
+
bow prepare
|
141
134
|
|
142
135
|
```
|
143
136
|
|
144
|
-
|
137
|
+
To **apply configured provision** run:
|
138
|
+
|
139
|
+
```bash
|
140
|
+
|
141
|
+
bow apply
|
142
|
+
|
143
|
+
```
|
144
|
+
|
145
|
+
To explore more options and commands run:
|
146
|
+
|
147
|
+
```bash
|
148
|
+
|
149
|
+
bow -h
|
150
|
+
|
151
|
+
```
|
152
|
+
|
153
|
+
|
154
|
+
### Flow
|
155
|
+
|
156
|
+
Command **flow** from the upper example is a little extension added by the bow
|
157
|
+
gem which allows you to controll the flow of the task. It consists of 3 options:
|
158
|
+
|
159
|
+
* `run: :once` or `run: :always` sets the condition on how many times to run
|
160
|
+
the task;
|
145
161
|
|
146
|
-
* `
|
147
|
-
be
|
162
|
+
* `enabled: true` or `enabled: false` wich takes a boolean value allows you to
|
163
|
+
disable the task so it can be ommited or reverted (if a reverting task
|
164
|
+
is given);
|
148
165
|
|
149
|
-
* `
|
150
|
-
|
166
|
+
* `revert: task_name` wich defines a task that can revert changes done
|
167
|
+
by the original task when the original task is disabled (by `enabled: false`
|
168
|
+
option). Actually it's something similar to the down migration when dealing
|
169
|
+
with ActiveRecord;
|
151
170
|
|
152
|
-
* `revert` wich defines a task that can revert changes done by the original
|
153
|
-
task when the original task is disabled (by `enabled: false` option). Actually
|
154
|
-
it's something similar to the down migration when dealing with databases;
|
155
171
|
|
172
|
+
### Run the example
|
156
173
|
|
174
|
+
To run the example locally this [Vagrantfile](doc/Vagrantfile) can be used to create a
|
175
|
+
testing environment.
|
data/bow.gemspec
CHANGED
@@ -6,8 +6,9 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = 'bow'
|
7
7
|
s.version = Bow::VERSION
|
8
8
|
s.date = Time.now.strftime('%Y-%m-%d')
|
9
|
-
s.summary =
|
10
|
-
|
9
|
+
s.summary = "Automate your infrastructure provisioning \\
|
10
|
+
and configuration with Rake."
|
11
|
+
s.description = s.summary
|
11
12
|
s.authors = ['Zinovyev Ivan']
|
12
13
|
s.email = 'zinovyev.id@gmail.com'
|
13
14
|
s.files = `git ls-files -z`.split("\x0").reject do |f|
|
@@ -16,9 +17,8 @@ Gem::Specification.new do |s|
|
|
16
17
|
s.executables << 'bow'
|
17
18
|
s.homepage = 'https://github.com/zinovyev/bow'
|
18
19
|
s.license = 'MIT'
|
19
|
-
s.add_runtime_dependency 'rake'
|
20
|
-
s.add_development_dependency 'pry'
|
21
|
-
s.add_development_dependency 'rspec'
|
22
|
-
s.add_development_dependency '
|
23
|
-
s.add_development_dependency 'rubocop'
|
20
|
+
s.add_runtime_dependency 'rake', '~> 12.1'
|
21
|
+
s.add_development_dependency 'pry', '~> 0.10.3'
|
22
|
+
s.add_development_dependency 'rspec', '~> 3.6'
|
23
|
+
s.add_development_dependency 'rubocop', '~> 0.50.0'
|
24
24
|
end
|
data/lib/bow/command.rb
CHANGED
data/lib/bow/commands/apply.rb
CHANGED
@@ -10,11 +10,11 @@ module Bow
|
|
10
10
|
def run
|
11
11
|
ThreadPool.new do |t|
|
12
12
|
t.from_enumerable targets do |host|
|
13
|
-
|
14
|
-
ResponseFormatter.
|
13
|
+
results = app.ssh_helper(host).prepare_provision
|
14
|
+
ResponseFormatter.multi_print(host, results)
|
15
15
|
|
16
|
-
cmd = "
|
17
|
-
result = app.ssh_helper(host).execute(cmd)
|
16
|
+
cmd = "rake #{host.group}:provision"
|
17
|
+
result = app.ssh_helper(host).execute(cmd, true)
|
18
18
|
ResponseFormatter.pretty_print(host, result)
|
19
19
|
end
|
20
20
|
end
|
data/lib/bow/commands/exec.rb
CHANGED
data/lib/bow/commands/prepare.rb
CHANGED
@@ -10,10 +10,11 @@ module Bow
|
|
10
10
|
def run
|
11
11
|
ThreadPool.new do |t|
|
12
12
|
t.from_enumerable targets do |host|
|
13
|
-
|
14
|
-
ResponseFormatter.
|
13
|
+
results = app.ssh_helper(host).prepare_provision
|
14
|
+
ResponseFormatter.multi_print(host, results)
|
15
15
|
|
16
|
-
provision_cmd = "
|
16
|
+
provision_cmd = "BOW_VERSION=\"#{Bow::VERSION}\" \
|
17
|
+
bash #{@app.config.guest_from_host[:pre_script]}"
|
17
18
|
result = app.ssh_helper(host).execute(provision_cmd)
|
18
19
|
ResponseFormatter.pretty_print(host, result)
|
19
20
|
end
|
data/lib/bow/config.rb
CHANGED
@@ -25,6 +25,7 @@ module Bow
|
|
25
25
|
task provision: :print_hello do
|
26
26
|
end
|
27
27
|
|
28
|
+
# The task :print_hello from the :example_group1 will run only once
|
28
29
|
flow run: :once
|
29
30
|
task :print_hello do
|
30
31
|
sh 'echo "Hello from example group #1 server!"'
|
@@ -35,13 +36,16 @@ module Bow
|
|
35
36
|
task provision: :print_hello do
|
36
37
|
end
|
37
38
|
|
38
|
-
|
39
|
+
# The task :pring_hello from the example_group2 will run everytime
|
40
|
+
# until it is disabled.
|
41
|
+
# Change enabled value to "false" to run the reverting task (:print_goodbye)
|
42
|
+
flow enabled: true, revert: :print_goodbye
|
39
43
|
task :print_hello do
|
40
44
|
sh 'echo "Hello from example group #2 server!"'
|
41
45
|
end
|
42
46
|
|
43
47
|
task :print_goodbye do
|
44
|
-
sh 'echo "Goodbye! The task at example group #2 is
|
48
|
+
sh 'echo "Goodbye! The task at example group #2 is reverted!"'
|
45
49
|
end
|
46
50
|
end
|
47
51
|
RAKEFILE
|
data/lib/bow/locker.rb
CHANGED
@@ -30,6 +30,7 @@ module Bow
|
|
30
30
|
@runtime_cache = {}
|
31
31
|
end
|
32
32
|
|
33
|
+
# rubocop:disable Style/SafeNavigation
|
33
34
|
def applied?(task)
|
34
35
|
record = parse(find(task))
|
35
36
|
!!(record && record[1])
|
@@ -39,6 +40,7 @@ module Bow
|
|
39
40
|
record = parse(find(task))
|
40
41
|
!!(record && record[2])
|
41
42
|
end
|
43
|
+
# rubocop:enable Style/SafeNavigation
|
42
44
|
|
43
45
|
def apply(task)
|
44
46
|
return if applied?(task)
|
@@ -101,10 +103,8 @@ module Bow
|
|
101
103
|
file.each_char.with_index do |c, idx|
|
102
104
|
if c == LINE_SEP
|
103
105
|
current_line =~ /^([^\s]+)#{SEPARATOR}/
|
104
|
-
to_cache(
|
105
|
-
if task == $1
|
106
|
-
return { record: current_line, first_c: first_c, last_c: last_c }
|
107
|
-
end
|
106
|
+
to_cache($1, record: current_line, first_c: first_c, last_c: last_c)
|
107
|
+
from_cache(task) if task == $1
|
108
108
|
current_line = ''
|
109
109
|
first_c = idx + 1
|
110
110
|
last_c = first_c
|
data/lib/bow/memorable.rb
CHANGED
data/lib/bow/options.rb
CHANGED
data/lib/bow/rake.rb
CHANGED
@@ -55,10 +55,13 @@ module Rake
|
|
55
55
|
alias orig__invoke_with_call_chain invoke_with_call_chain
|
56
56
|
|
57
57
|
def invoke_with_call_chain(task_args, invocation_chain) # :nodoc:
|
58
|
-
|
58
|
+
if disabled?
|
59
|
+
return unless applied?
|
60
|
+
return apply_revert_task
|
61
|
+
end
|
59
62
|
return if run_once? && applied?
|
60
63
|
result = orig__invoke_with_call_chain(task_args, invocation_chain)
|
61
|
-
apply
|
64
|
+
apply
|
62
65
|
flush_history
|
63
66
|
result
|
64
67
|
end
|
@@ -101,7 +104,7 @@ module Rake
|
|
101
104
|
|
102
105
|
def find_revert_task
|
103
106
|
return unless flow[:revert]
|
104
|
-
application.lookup(flow[:revert])
|
107
|
+
application.lookup(flow[:revert], @scope)
|
105
108
|
end
|
106
109
|
|
107
110
|
# Add flow to the task.
|
@@ -12,6 +12,12 @@ module Bow
|
|
12
12
|
puts "#{wrap(*args)}\n"
|
13
13
|
end
|
14
14
|
|
15
|
+
def multi_print(host, results)
|
16
|
+
results.each do |r|
|
17
|
+
puts "#{wrap(host, r)}\n"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
15
21
|
def wrap(host, result)
|
16
22
|
host_group = colorize("[#{host.group}]", HEADER)
|
17
23
|
host_addr = colorize(host.host, HEADER)
|
data/lib/bow/ssh/rsync.rb
CHANGED
@@ -8,14 +8,14 @@ module Bow
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def call(source, target)
|
11
|
-
@ssh_helper.run(cmd_rsync(source,
|
11
|
+
@ssh_helper.run(cmd_rsync(source, target))
|
12
12
|
end
|
13
13
|
|
14
|
-
def cmd_rsync(source,
|
14
|
+
def cmd_rsync(source, target)
|
15
15
|
format(
|
16
|
-
'rsync --
|
16
|
+
'rsync --timeout=10 --force -r %s %s:%s',
|
17
17
|
source,
|
18
|
-
conn,
|
18
|
+
@ssh_helper.conn,
|
19
19
|
target
|
20
20
|
)
|
21
21
|
end
|
data/lib/bow/ssh/scp.rb
CHANGED
@@ -9,12 +9,17 @@ module Bow
|
|
9
9
|
|
10
10
|
def call(source, target)
|
11
11
|
@ssh_helper.execute(cmd_rm(target)) if cleanup_needed?
|
12
|
-
@ssh_helper.run(cmd_scp(source,
|
12
|
+
@ssh_helper.run(cmd_scp(source, target))
|
13
13
|
@ssh_helper.run(cmd)
|
14
14
|
end
|
15
15
|
|
16
|
-
def cmd_scp(source,
|
17
|
-
format(
|
16
|
+
def cmd_scp(source, target)
|
17
|
+
format(
|
18
|
+
'scp -o ConnectTimeout -r %s %s:%s',
|
19
|
+
source,
|
20
|
+
@ssh_helper.conn,
|
21
|
+
target
|
22
|
+
)
|
18
23
|
end
|
19
24
|
|
20
25
|
def cmd_rm(target)
|
data/lib/bow/ssh_helper.rb
CHANGED
@@ -19,7 +19,14 @@ module Bow
|
|
19
19
|
@conn = conn
|
20
20
|
end
|
21
21
|
|
22
|
-
def execute(cmd, timeout = 10)
|
22
|
+
def execute(cmd, timeout = 10, chdir = false)
|
23
|
+
cmd = if chdir
|
24
|
+
format("'cd %s && %s'",
|
25
|
+
@app.config.guest_from_host[:rake_dir],
|
26
|
+
cmd)
|
27
|
+
else
|
28
|
+
format("'%s'", cmd)
|
29
|
+
end
|
23
30
|
cmd = "ssh -o ConnectTimeout=#{timeout} #{conn} #{cmd}"
|
24
31
|
run(cmd)
|
25
32
|
end
|
@@ -35,11 +42,12 @@ module Bow
|
|
35
42
|
results << ensure_base_dir
|
36
43
|
results << copy_preprovision_script
|
37
44
|
results << copy_rake_tasks
|
38
|
-
|
45
|
+
results
|
46
|
+
# merge_results(*results)
|
39
47
|
end
|
40
48
|
|
41
49
|
def ensure_base_dir
|
42
|
-
execute("mkdir -p #{@app.config.guest_from_host[:
|
50
|
+
execute("mkdir -p #{@app.config.guest_from_host[:rake_dir]}", 10, false)
|
43
51
|
end
|
44
52
|
|
45
53
|
def copy_preprovision_script
|
@@ -50,7 +58,7 @@ module Bow
|
|
50
58
|
end
|
51
59
|
|
52
60
|
def copy_rake_tasks
|
53
|
-
copy(@app.inventory.location, @app.config.guest_from_host[:rake_dir])
|
61
|
+
copy("#{@app.inventory.location}/*", @app.config.guest_from_host[:rake_dir])
|
54
62
|
end
|
55
63
|
|
56
64
|
def copy_tool
|
data/lib/bow/version.rb
CHANGED
@@ -34,9 +34,14 @@ fi
|
|
34
34
|
# Install bow
|
35
35
|
which bow &>/dev/null
|
36
36
|
if [[ 0 != $? ]]; then
|
37
|
-
echo ">> Installing Bow..."
|
38
37
|
gem install bow
|
39
|
-
if [[ $? == 0 ]]; then echo "Bow installed!"; fi
|
40
38
|
else
|
41
|
-
|
39
|
+
gem_ver=`gem list --local | grep "^rails " | awk -F'[()]' '{ print $2 }'`
|
40
|
+
if [[ $gem_ver < $BOW_VERSION ]]; then
|
41
|
+
echo ">> Installing Bow..."
|
42
|
+
gem update bow
|
43
|
+
if [[ $? == 0 ]]; then echo "Bow installed!"; fi
|
44
|
+
else
|
45
|
+
echo ">> Bow already installed!"
|
46
|
+
fi
|
42
47
|
fi
|
metadata
CHANGED
@@ -1,86 +1,72 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zinovyev Ivan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '12.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '12.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pry
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.10.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.10.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.6'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: mocha
|
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'
|
54
|
+
version: '3.6'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: rubocop
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
|
-
- - "
|
59
|
+
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
61
|
+
version: 0.50.0
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
|
-
- - "
|
66
|
+
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
83
|
-
description:
|
68
|
+
version: 0.50.0
|
69
|
+
description: Automate your infrastructure provisioning \ and configuration with Rake.
|
84
70
|
email: zinovyev.id@gmail.com
|
85
71
|
executables:
|
86
72
|
- bow
|
@@ -116,7 +102,7 @@ files:
|
|
116
102
|
- lib/bow/targets.rb
|
117
103
|
- lib/bow/thread_pool.rb
|
118
104
|
- lib/bow/version.rb
|
119
|
-
- src/
|
105
|
+
- src/provision.sh
|
120
106
|
homepage: https://github.com/zinovyev/bow
|
121
107
|
licenses:
|
122
108
|
- MIT
|
@@ -140,5 +126,5 @@ rubyforge_project:
|
|
140
126
|
rubygems_version: 2.6.11
|
141
127
|
signing_key:
|
142
128
|
specification_version: 4
|
143
|
-
summary:
|
129
|
+
summary: Automate your infrastructure provisioning \ and configuration with Rake.
|
144
130
|
test_files: []
|