bow 0.5.0 → 0.5.2

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: 6f786de3bf3a07e01c6e1163fb70958356e0c219
4
- data.tar.gz: 1c04ee09cd9e2262f217ac3a21530a6b39ff6546
3
+ metadata.gz: a81e49b3e892737818ee914200b4ebbf04283c4d
4
+ data.tar.gz: b4f833f16d08c74f0c336af66ed8f3184c2182e8
5
5
  SHA512:
6
- metadata.gz: fae7064eb48e541ac88fd12512c99e13b49dc23a964c41f9391cd3b59046342a4ad3713b2951aa4befc33995713d3d360ee32d0ca39ac49b7615f6199be37890
7
- data.tar.gz: 40251d5f6b674fee4d5429b67d3ade045867a80f0bb68b62d62ceab2e6b725163ca82517a51ca0d8d2c73902a31d53a6d635a64e9f64c84b0178b8107ef47a18
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
- ## About
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
- ## Why?
10
+ ## About
13
11
 
14
- Well...
12
+ Bow doesn't bring its own DSL to live, rather it uses regular Rake tasks
13
+ instead.
15
14
 
16
- I do know about dozens of [configuration management](https://en.wikipedia.org/wiki/Comparison_of_open-source_configuration_management_software) software. And I've also used to use some of them.
17
- And I actually like a couple of them too.
15
+ It can be handy for you if:
18
16
 
19
- But when it comes to a simple goal like configuring 2 or 3 VPS nodes I don't
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
- And there's already exists a great tool that can execute tasks and is written
25
- in Ruby. And it's called Rake.
19
+ * you don't want to build a complex infrastructure;
26
20
 
27
- So. Bow is simple, agentless and it doesn't bring it's own DSL to life, cause it
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
- 1. If you're not familiar with Rake [Rake docs](https://ruby.github.io/rake/) and [Rake home](https://github.com/ruby/rake) can be a good place to start from;
24
+ ## Installation
33
25
 
34
- 2. Install the `bow` gem with:
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
- ```bash
35
+ ## Usage
45
36
 
46
- mkdir ~/bow-test
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
- bow init
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
- The example targets file contains 4 IPs combined in two managed groups:
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
- A `Rakefile` contains two tasks for provisioning packed in namespaces wich are
75
- called by the name of the server groups from the `targets.json` file. The main
76
- task of the group MUST always be called **provision** and can be bound to any
77
- number of additional tasks. Sometimes (always) it is convinient to put
78
- additional tasks them to separate files into the [rakelib](https://ruby.github.io/rake/doc/rakefile_rdoc.html#label-Multiple+Rake+Files) folder.
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
- flow enabled: false, revert_task: :print_goodbye
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
- 6. To find more about available commands (`ping`, `exec` etc.) type `bow -h`;
116
+ ###Commands
119
117
 
120
- ## Task flow
121
118
 
122
- While that is not necessary, it can be convinient to install a `bow` gem on the
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
- Now you'll be able to put this `flow` line before the task definition:
122
+ ```bash
130
123
 
131
- ```ruby
124
+ bow ping
132
125
 
133
- flow run: :once, enabled: :true, revert: :revert_simple_task
134
- task :simple_task do
135
- # some code here ...
136
- end
126
+ ```
137
127
 
138
- task :revert_simple_task do
139
- # remove evertything that simple task have done >/
140
- end
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
- The 3 options are:
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
- * `run` wich can be either `:once` or `:always`. If set to `once` the task will
147
- be run only once on remote server;
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
- * `enabled` wich takes a boolean value. If set to false, the task will be
150
- disabled and won't run at all;
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.
@@ -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 = 'Simple provisioning via rake tasks'
10
- s.description = 'Simple provisioning via rake tasks'
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 'mocha'
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
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'pry'
4
-
5
3
  module Bow
6
4
  class Command
7
5
  class << self
@@ -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
- result = app.ssh_helper(host).prepare_provision(PROVISION_PATH)
14
- ResponseFormatter.pretty_print(host, result)
13
+ results = app.ssh_helper(host).prepare_provision
14
+ ResponseFormatter.multi_print(host, results)
15
15
 
16
- cmd = "'cd #{PROVISION_PATH} && rake #{host.group}:provision'"
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
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'pry'
4
- require 'pp'
5
-
6
3
  module Bow
7
4
  module Commands
8
5
  class Exec < Command
@@ -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
- result = app.ssh_helper(host).prepare_provision(PROVISION_PATH)
14
- ResponseFormatter.pretty_print(host, result)
13
+ results = app.ssh_helper(host).prepare_provision
14
+ ResponseFormatter.multi_print(host, results)
15
15
 
16
- provision_cmd = "bash #{PROVISION_PATH}/preprovision.sh"
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
@@ -12,7 +12,7 @@ module Bow
12
12
  end
13
13
 
14
14
  def guest_from_host
15
- @guest_from_host ||= Config.new(:guest, '~')
15
+ @guest_from_host ||= Config.new(:guest, GUEST_FROM_HOST_BASE_DIR)
16
16
  end
17
17
  end
18
18
 
@@ -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
- flow enabled: false, revert_task: :print_goodbye
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 disabled!"'
48
+ sh 'echo "Goodbye! The task at example group #2 is reverted!"'
45
49
  end
46
50
  end
47
51
  RAKEFILE
@@ -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(task, record: $1, first_c: first_c, last_c: last_c)
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
@@ -6,10 +6,6 @@ module Bow
6
6
  @task_history ||= Locker.load
7
7
  end
8
8
 
9
- # def update_history(step = {})
10
- # task_history.add(name, step) unless step.empty?
11
- # end
12
-
13
9
  def flush_history
14
10
  task_history.flush
15
11
  end
@@ -24,7 +24,7 @@ module Bow
24
24
  [
25
25
  '-c',
26
26
  '--copy-tool',
27
- 'Utilit used for files transfer (scp or rsync)',
27
+ 'A tool used for provision files transfer (can be scp or rsync)',
28
28
  :option_copy_tool
29
29
  ],
30
30
  [
@@ -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
- return apply_revert_task if disabled?
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 if run_once?
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)
@@ -8,14 +8,14 @@ module Bow
8
8
  end
9
9
 
10
10
  def call(source, target)
11
- @ssh_helper.run(cmd_rsync(source, conn, target))
11
+ @ssh_helper.run(cmd_rsync(source, target))
12
12
  end
13
13
 
14
- def cmd_rsync(source, conn, target)
14
+ def cmd_rsync(source, target)
15
15
  format(
16
- 'rsync --contimeout=10 --force -r %s %s:%s',
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
@@ -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, conn, target))
12
+ @ssh_helper.run(cmd_scp(source, target))
13
13
  @ssh_helper.run(cmd)
14
14
  end
15
15
 
16
- def cmd_scp(source, conn, target)
17
- format('scp -o ConnectTimeout -r %s %s:%s', source, conn, target)
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)
@@ -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
- merge_results(*results)
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[:base_dir]}")
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bow
4
- VERSION = '0.5.0'
4
+ VERSION = '0.5.2'
5
5
  end
@@ -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
- echo ">> Bow already installed!"
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.0
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-24 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
83
- description: Simple provisioning via rake tasks
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/preprovision.sh
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: Simple provisioning via rake tasks
129
+ summary: Automate your infrastructure provisioning \ and configuration with Rake.
144
130
  test_files: []