runbook 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +7 -10
- data/CHANGELOG.md +17 -0
- data/README.md +6 -5
- data/dockerfiles/Dockerfile-runbook +1 -1
- data/lib/runbook.rb +2 -0
- data/lib/runbook/cli.rb +0 -11
- data/lib/runbook/entity.rb +1 -1
- data/lib/runbook/extensions/statements.rb +1 -1
- data/lib/runbook/generators/project/project.rb +28 -9
- data/lib/runbook/run.rb +1 -1
- data/lib/runbook/runner.rb +2 -0
- data/lib/runbook/version.rb +1 -1
- data/runbook.gemspec +4 -3
- metadata +23 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11c80dcba3596671291c8d9dbd40a33ae5691963b27dffdd7459cb4f4ebd94be
|
4
|
+
data.tar.gz: a8a578797429344e1fa29c84cb395db5c9c725f4b35b00440e26708328fdca26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bda3ee51331bcac0c38f338e4ddcf001847328f07093ff1163b8a8b4394e523b116c05b88de449d7072dc90fbe51da3049f00778933a8e8d0b8d3eac39c935c0
|
7
|
+
data.tar.gz: 11420133d97afa081df1105bbf3dc1364b5722aa50e57f49777f761c2df88b152b50b4db80c2da81a8d10328bc85b46de51721a010113d26b965411243a51e68
|
data/.travis.yml
CHANGED
@@ -3,26 +3,23 @@ language: ruby
|
|
3
3
|
services:
|
4
4
|
- docker
|
5
5
|
rvm:
|
6
|
-
- 2.2.10
|
7
6
|
- 2.3.8
|
8
|
-
- 2.4.
|
9
|
-
- 2.5.
|
10
|
-
- 2.6.
|
7
|
+
- 2.4.10
|
8
|
+
- 2.5.8
|
9
|
+
- 2.6.6
|
10
|
+
- 2.7.2
|
11
|
+
- 3.0.0
|
11
12
|
gemfile:
|
12
13
|
- gemfiles/activesupport_5.gemfile
|
13
14
|
- gemfiles/activesupport_6.gemfile
|
14
15
|
matrix:
|
15
16
|
exclude:
|
16
|
-
- rvm: 2.2.3
|
17
|
-
gemfile: gemfiles/activesupport_6.gemfile
|
18
|
-
- rvm: 2.2.10
|
19
|
-
gemfile: gemfiles/activesupport_6.gemfile
|
20
17
|
- rvm: 2.3.8
|
21
18
|
gemfile: gemfiles/activesupport_6.gemfile
|
22
|
-
- rvm: 2.4.
|
19
|
+
- rvm: 2.4.10
|
23
20
|
gemfile: gemfiles/activesupport_6.gemfile
|
24
21
|
|
25
|
-
before_install: gem install bundler -v
|
22
|
+
before_install: gem install bundler -v 2.2.16
|
26
23
|
|
27
24
|
script:
|
28
25
|
- bundle exec rake spec_all
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,23 @@ This log maintains a list of all substantive changes to Runbook. The log include
|
|
4
4
|
|
5
5
|
## master
|
6
6
|
|
7
|
+
## `v1.1.0` (2021-05-21)
|
8
|
+
|
9
|
+
### Breaking Changes:
|
10
|
+
|
11
|
+
* Removes `runbook install` (should have happened in v1.0.0)
|
12
|
+
* Drops support for Ruby 2.2 and bundler < 2.2
|
13
|
+
|
14
|
+
### Features:
|
15
|
+
|
16
|
+
* Add support for Ruby 3.0.0 (thanks @pblesi!)
|
17
|
+
* Add metadata argument that saves TMUX panes: keep_panes (thanks @ClashTheBunny)
|
18
|
+
|
19
|
+
### Documentation:
|
20
|
+
|
21
|
+
* Update assert parameters description
|
22
|
+
* Update example for module class method (thanks @voodoologic!)
|
23
|
+
|
7
24
|
## `v1.0.0` (2020-07-24)
|
8
25
|
|
9
26
|
### Breaking Changes:
|
data/README.md
CHANGED
@@ -321,16 +321,16 @@ In the above example, the `note` statement must be wrapped in a `ruby_command` s
|
|
321
321
|
|
322
322
|
##### Assert
|
323
323
|
|
324
|
-
Runs the provided `cmd` repeatedly until it returns true. A timeout and maximum number of attempts can be set.
|
324
|
+
Runs the provided `cmd` repeatedly until it returns true. A timeout and maximum number of attempts can be set. When either the attempt or timeout limit is hit, a command can be specified that will be run. If no command is specified, the process will fail. Commands can optionally be specified as `raw`. This tells SSHKit to not perform auto-wrapping of the commands, but execute the exact string on the remote server. See SSHKit's documentation for more details.
|
325
325
|
|
326
326
|
```ruby
|
327
327
|
assert(
|
328
328
|
'service nginx status | grep "is running"',
|
329
329
|
cmd_ssh_config: {servers: ["host1.prod"], parallelization: {strategy: :parallel}},
|
330
330
|
cmd_raw: false,
|
331
|
-
interval: 3,
|
332
|
-
timeout: 300,
|
333
|
-
attempts: 3,
|
331
|
+
interval: 3, # How often, in seconds, to wait between tries
|
332
|
+
timeout: 300, # Total time, in seconds, to keep trying command, after which it will fail
|
333
|
+
attempts: 3, # Total number of attempts after which the process will fail
|
334
334
|
abort_statement: Runbook::Statements::Command.new(
|
335
335
|
"echo 'help' | mail -s 'need help' page-me@page-me.com",
|
336
336
|
ssh_config: {servers: [:local], parallelization: {strategy: :parallel}},
|
@@ -443,6 +443,7 @@ Metadata at execution time is structured as follows:
|
|
443
443
|
noop: false, # A boolean indicating if you are running in noop mode. ruby_command blocks are never evaluated in noop mode
|
444
444
|
auto: false, # A boolean indicating if you are running in auto mode
|
445
445
|
paranoid: true, # A boolean indicating if you are running in paranoid mode (prompting before each step)
|
446
|
+
keep_panes: false, # A boolean indicating whether panes should be kept open after completion
|
446
447
|
start_at: 0, # A string representing the step where nodes should start being processed
|
447
448
|
toolbox: Runbook::Toolbox.new, # A collection of methods to invoke side-effects such as printing and collecting input
|
448
449
|
layout_panes: {}, # A map of pane names to pane ids. `layout_panes` is used by the `tmux_command` to identify which tmux pane to send the command to
|
@@ -1208,7 +1209,7 @@ When defining and referencing your own functions in a runbook, functions should
|
|
1208
1209
|
|
1209
1210
|
```ruby
|
1210
1211
|
module Adder
|
1211
|
-
def add(x, y)
|
1212
|
+
def self.add(x, y)
|
1212
1213
|
x + y
|
1213
1214
|
end
|
1214
1215
|
end
|
data/lib/runbook.rb
CHANGED
data/lib/runbook/cli.rb
CHANGED
@@ -82,17 +82,6 @@ module Runbook
|
|
82
82
|
invoke(Runbook::Initializer)
|
83
83
|
end
|
84
84
|
|
85
|
-
desc "install", "Install Runbook in an existing project", hide: true
|
86
|
-
Runbook::Initializer.class_options.values.each do |co|
|
87
|
-
method_option co.name, desc: co.description, required: co.required,
|
88
|
-
default: co.default, aliases: co.aliases, type: co.type,
|
89
|
-
banner: co.banner, hide: co.hide
|
90
|
-
end
|
91
|
-
def install
|
92
|
-
Runbook.deprecator.deprecation_warning(:install, :init)
|
93
|
-
invoke(Runbook::Initializer)
|
94
|
-
end
|
95
|
-
|
96
85
|
desc "--version", "Print runbook's version"
|
97
86
|
def __print_version
|
98
87
|
puts "Runbook v#{Runbook::VERSION}"
|
data/lib/runbook/entity.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Runbook::Extensions
|
2
2
|
module Statements
|
3
3
|
module DSL
|
4
|
-
def method_missing(name, *args, &block)
|
4
|
+
ruby2_keywords def method_missing(name, *args, &block)
|
5
5
|
if (klass = Statements::DSL._statement_class(name))
|
6
6
|
klass.new(*args, &block).tap do |statement|
|
7
7
|
parent.add(statement)
|
@@ -22,15 +22,20 @@ module Runbook::Generators
|
|
22
22
|
desc: "Target directory for shared runbook code"
|
23
23
|
class_option :test, type: :string, enum: ["rspec", "minitest"],
|
24
24
|
default: "rspec", desc: %Q{Test-suite, "rspec" or "minitest"}
|
25
|
+
class_option :ci, type: :string, enum: ["github", "travis", "gitlab", "circle"],
|
26
|
+
default: "github", desc: %Q{CI Service, "github", "travis", "gitlab", or "circle"}
|
25
27
|
|
26
28
|
def init_gem
|
27
29
|
bundle_exists = "which bundle 2>&1 1>/dev/null"
|
28
30
|
raise "Please ensure bundle is installed" unless system(bundle_exists)
|
31
|
+
bundler_version = Gem::Version.new(Bundler::VERSION)
|
29
32
|
|
30
33
|
inside(parent_options[:root]) do
|
31
34
|
test = "--test #{options[:test]}"
|
35
|
+
ci = "--ci #{options[:ci]}"
|
36
|
+
changelog = "--no-changelog" if bundler_version >= Gem::Version.new("2.2.8")
|
32
37
|
continue = (
|
33
|
-
run("bundle gem #{_name} #{test} --no-coc --no-mit") ||
|
38
|
+
run("bundle gem #{_name} #{test} #{ci} --rubocop #{changelog} --no-coc --no-mit") ||
|
34
39
|
options[:pretend]
|
35
40
|
)
|
36
41
|
exit 1 unless continue
|
@@ -53,6 +58,9 @@ module Runbook::Generators
|
|
53
58
|
remove_file(readme)
|
54
59
|
|
55
60
|
gemfile = File.join(*dirs, "Gemfile")
|
61
|
+
if File.exist?(gemfile)
|
62
|
+
@gemfile_file_contents = File.readlines(gemfile)
|
63
|
+
end
|
56
64
|
remove_file(gemfile)
|
57
65
|
|
58
66
|
base_file = File.join(*dirs, "lib", "#{_name}.rb")
|
@@ -102,14 +110,25 @@ module Runbook::Generators
|
|
102
110
|
template("templates/Gemfile.tt", target)
|
103
111
|
|
104
112
|
# Add development dependencies from gemspec
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
+
if @gemspec_file_contents
|
114
|
+
gems = @gemspec_file_contents.select do |line|
|
115
|
+
line =~ / spec.add_development_dependency/
|
116
|
+
end.map do |line|
|
117
|
+
line.gsub(/ spec.add_development_dependency/, "gem")
|
118
|
+
end.join
|
119
|
+
|
120
|
+
append_to_file(target, "\n#{gems}", verbose: false)
|
121
|
+
end
|
122
|
+
|
123
|
+
# Add gemfile gems
|
124
|
+
if @gemfile_file_contents
|
125
|
+
gems = @gemfile_file_contents.select do |line|
|
126
|
+
line =~ /^gem /
|
127
|
+
end.join
|
128
|
+
|
129
|
+
append_to_file(target, "\n#{gems}", verbose: false)
|
130
|
+
end
|
131
|
+
|
113
132
|
end
|
114
133
|
|
115
134
|
def create_base_file
|
data/lib/runbook/run.rb
CHANGED
@@ -258,7 +258,7 @@ module Runbook
|
|
258
258
|
:after,
|
259
259
|
Runbook::Entities::Book,
|
260
260
|
) do |object, metadata|
|
261
|
-
next if metadata[:noop] || metadata[:layout_panes].none?
|
261
|
+
next if metadata[:noop] || metadata[:layout_panes].none? || metadata[:keep_panes]
|
262
262
|
if metadata[:auto]
|
263
263
|
metadata[:toolbox].output("Killing all opened tmux panes...")
|
264
264
|
kill_all_panes(metadata[:layout_panes])
|
data/lib/runbook/runner.rb
CHANGED
@@ -11,6 +11,7 @@ module Runbook
|
|
11
11
|
noop: false,
|
12
12
|
auto: false,
|
13
13
|
paranoid: true,
|
14
|
+
keep_panes: false,
|
14
15
|
start_at: "0"
|
15
16
|
)
|
16
17
|
run = "Runbook::Runs::#{run.to_s.camelize}".constantize
|
@@ -21,6 +22,7 @@ module Runbook
|
|
21
22
|
paranoid: Util::Glue.new(paranoid),
|
22
23
|
start_at: Util::Glue.new(start_at || "0"),
|
23
24
|
toolbox: Util::Glue.new(toolbox),
|
25
|
+
keep_panes: keep_panes,
|
24
26
|
book_title: book.title,
|
25
27
|
}).
|
26
28
|
merge(Runbook::Entities::Book.initial_run_metadata).
|
data/lib/runbook/version.rb
CHANGED
data/runbook.gemspec
CHANGED
@@ -32,7 +32,8 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.require_paths = ["lib"]
|
33
33
|
|
34
34
|
spec.add_runtime_dependency "activesupport", ">= 5.0.1.x", "< 7.0"
|
35
|
-
spec.add_runtime_dependency "method_source", "~> 0
|
35
|
+
spec.add_runtime_dependency "method_source", "~> 1.0"
|
36
|
+
spec.add_runtime_dependency "ruby2_keywords", "~> 0.0.4"
|
36
37
|
spec.add_runtime_dependency "sshkit", "1.21.0"
|
37
38
|
spec.add_runtime_dependency "sshkit-sudo", "~> 0.1"
|
38
39
|
spec.add_runtime_dependency "airbrussh", "~> 1.4"
|
@@ -42,10 +43,10 @@ Gem::Specification.new do |spec|
|
|
42
43
|
|
43
44
|
spec.add_development_dependency "appraisal", "~> 2.2"
|
44
45
|
spec.add_development_dependency "aruba", "~> 0.14"
|
45
|
-
spec.add_development_dependency "bundler", "~>
|
46
|
+
spec.add_development_dependency "bundler", "~> 2.2"
|
46
47
|
spec.add_development_dependency "bcrypt_pbkdf", ">= 1.0", "< 2.0"
|
47
48
|
spec.add_development_dependency "ed25519", ">= 1.2", "< 2.0"
|
48
|
-
spec.add_development_dependency "pry", "~> 0.
|
49
|
+
spec.add_development_dependency "pry", "~> 0.13"
|
49
50
|
spec.add_development_dependency "pry-byebug", "~> 3.6"
|
50
51
|
spec.add_development_dependency "rake", "~> 12.3"
|
51
52
|
spec.add_development_dependency "rspec", "~> 3.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runbook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pblesi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -36,14 +36,28 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '0
|
39
|
+
version: '1.0'
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '0
|
46
|
+
version: '1.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: ruby2_keywords
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.0.4
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.0.4
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: sshkit
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,14 +176,14 @@ dependencies:
|
|
162
176
|
requirements:
|
163
177
|
- - "~>"
|
164
178
|
- !ruby/object:Gem::Version
|
165
|
-
version: '
|
179
|
+
version: '2.2'
|
166
180
|
type: :development
|
167
181
|
prerelease: false
|
168
182
|
version_requirements: !ruby/object:Gem::Requirement
|
169
183
|
requirements:
|
170
184
|
- - "~>"
|
171
185
|
- !ruby/object:Gem::Version
|
172
|
-
version: '
|
186
|
+
version: '2.2'
|
173
187
|
- !ruby/object:Gem::Dependency
|
174
188
|
name: bcrypt_pbkdf
|
175
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,14 +230,14 @@ dependencies:
|
|
216
230
|
requirements:
|
217
231
|
- - "~>"
|
218
232
|
- !ruby/object:Gem::Version
|
219
|
-
version: '0.
|
233
|
+
version: '0.13'
|
220
234
|
type: :development
|
221
235
|
prerelease: false
|
222
236
|
version_requirements: !ruby/object:Gem::Requirement
|
223
237
|
requirements:
|
224
238
|
- - "~>"
|
225
239
|
- !ruby/object:Gem::Version
|
226
|
-
version: '0.
|
240
|
+
version: '0.13'
|
227
241
|
- !ruby/object:Gem::Dependency
|
228
242
|
name: pry-byebug
|
229
243
|
requirement: !ruby/object:Gem::Requirement
|
@@ -398,7 +412,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
398
412
|
- !ruby/object:Gem::Version
|
399
413
|
version: '0'
|
400
414
|
requirements: []
|
401
|
-
rubygems_version: 3.0.
|
415
|
+
rubygems_version: 3.0.8
|
402
416
|
signing_key:
|
403
417
|
specification_version: 4
|
404
418
|
summary: Write beautiful, executable runbooks for conducting system operations.
|