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 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: []