qb 0.1.67 → 0.1.68
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 +4 -4
- data/exe/qb +11 -5
- data/lib/qb/ansible_module.rb +24 -2
- data/lib/qb/role.rb +9 -2
- data/lib/qb/util.rb +8 -0
- data/lib/qb/util/stdio.rb +35 -6
- data/lib/qb/version.rb +1 -1
- data/library/path_facts +26 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5cea6b175ce538d419a13ff2f8e93f9b60c312b
|
4
|
+
data.tar.gz: 4c9c82929111f60a0a53e21d28143baa9f979288
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39bc6172c05b614b998ffc28fa3894267c617e587137080c57609aa4a89f6258681b0f08962b246a2c5d43474c078cd18588a368e44eef0ebd355b0e37f01a5d
|
7
|
+
data.tar.gz: cec0fb8aa6771e21661bb50b4f146ef27b4544ebfbd0b844dc29dd59eee0eb260b11f224c25b185671640427f476d60209b43e8740d7ea521d819b5063e8c729
|
data/exe/qb
CHANGED
@@ -410,16 +410,22 @@ def main args
|
|
410
410
|
end
|
411
411
|
|
412
412
|
with_clean_env do
|
413
|
-
# boot up stdio services so that ansible modules can stream to our
|
413
|
+
# boot up stdio out services so that ansible modules can stream to our
|
414
414
|
# stdout and stderr to print stuff (including debug lines) in real-time
|
415
|
-
|
416
|
-
|
417
|
-
|
415
|
+
stdio_out_services = {'out' => $stdout, 'err' => $stderr}.
|
416
|
+
map {|name, dest|
|
417
|
+
QB::Util::STDIO::OutService.new(name, dest).tap { |s| s.open! }
|
418
|
+
}
|
419
|
+
|
420
|
+
# and an in service so that modules can prompt for user input
|
421
|
+
user_in_service = QB::Util::STDIO::InService.new('in', $stdin).
|
422
|
+
tap { |s| s.open! }
|
418
423
|
|
419
424
|
status = cmd.stream
|
420
425
|
|
421
426
|
# close the stdio services
|
422
|
-
|
427
|
+
stdio_out_services.each {|s| s.close! }
|
428
|
+
user_in_service.close!
|
423
429
|
|
424
430
|
if status != 0
|
425
431
|
puts "ERROR ansible-playbook failed."
|
data/lib/qb/ansible_module.rb
CHANGED
@@ -12,6 +12,18 @@ module QB
|
|
12
12
|
@@arg_types[name.to_sym] = type
|
13
13
|
end
|
14
14
|
|
15
|
+
def debug *args
|
16
|
+
if @qb_stdio_err
|
17
|
+
header = "<QB::AnsibleModule #{ self.class.name }>"
|
18
|
+
|
19
|
+
if args[0].is_a? String
|
20
|
+
header += " " + args.shift
|
21
|
+
end
|
22
|
+
|
23
|
+
QB.debug header, *args
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
15
27
|
def initialize
|
16
28
|
@changed = false
|
17
29
|
@input_file = ARGV[0]
|
@@ -19,17 +31,27 @@ module QB
|
|
19
31
|
@args = JSON.load @input
|
20
32
|
@facts = {}
|
21
33
|
|
34
|
+
@qb_stdio_out = nil
|
35
|
+
@qb_stdio_err = nil
|
36
|
+
@qb_stdio_in = nil
|
37
|
+
|
22
38
|
# if QB_STDIO_ env vars are set send stdout and stderr
|
23
39
|
# to those sockets to print in the parent process
|
24
40
|
|
25
41
|
if ENV['QB_STDIO_OUT']
|
26
|
-
$stdout = UNIXSocket.new ENV['QB_STDIO_OUT']
|
42
|
+
@qb_stdio_out = $stdout = UNIXSocket.new ENV['QB_STDIO_OUT']
|
27
43
|
end
|
28
44
|
|
29
45
|
if ENV['QB_STDIO_ERR']
|
30
|
-
$stderr = UNIXSocket.new ENV['QB_STDIO_ERR']
|
46
|
+
@qb_stdio_err = $stderr = UNIXSocket.new ENV['QB_STDIO_ERR']
|
31
47
|
end
|
32
48
|
|
49
|
+
if ENV['QB_STDIO_IN']
|
50
|
+
@qb_stdio_in = UNIXSocket.new ENV['QB_STDIO_IN']
|
51
|
+
end
|
52
|
+
|
53
|
+
debug "HERE!"
|
54
|
+
|
33
55
|
@@arg_types.each {|key, type|
|
34
56
|
var_name = "@#{ key.to_s }"
|
35
57
|
|
data/lib/qb/role.rb
CHANGED
@@ -194,14 +194,21 @@ module QB
|
|
194
194
|
return namespaceless_prefix_matches
|
195
195
|
end
|
196
196
|
|
197
|
-
# see if we
|
197
|
+
# see if we prefix match any display paths
|
198
|
+
path_prefix_matches = available.select {|role|
|
199
|
+
role.display_path.start_with? input
|
200
|
+
}
|
201
|
+
return path_prefix_matches unless path_prefix_matches.empty?
|
202
|
+
|
203
|
+
# see if we word match any display` paths
|
198
204
|
name_word_matches = available.select {|role|
|
199
205
|
QB::Util.words_start_with? role.display_path.to_s, input
|
200
206
|
}
|
201
207
|
return name_word_matches unless name_word_matches.empty?
|
202
208
|
|
209
|
+
# nada
|
203
210
|
[]
|
204
|
-
end
|
211
|
+
end # .matches
|
205
212
|
|
206
213
|
# find exactly one matching role for the input string or raise.
|
207
214
|
def self.require input
|
data/lib/qb/util.rb
CHANGED
@@ -14,8 +14,16 @@ module QB
|
|
14
14
|
# QB.debug "does #{ input } match #{ full_string }?"
|
15
15
|
|
16
16
|
input_words = words input
|
17
|
+
|
18
|
+
# short-circuit if there are no input words ('./' for example)
|
19
|
+
return false if input_words.empty?
|
20
|
+
|
17
21
|
full_string_words = words full_string
|
18
22
|
|
23
|
+
QB.debug "HERE",
|
24
|
+
input_words: input_words,
|
25
|
+
full_string_words: full_string_words
|
26
|
+
|
19
27
|
full_string_words.each_with_index {|word, start_index|
|
20
28
|
# compute the end index in full_string_words
|
21
29
|
end_index = start_index + input_words.length - 1
|
data/lib/qb/util/stdio.rb
CHANGED
@@ -16,9 +16,8 @@ module QB::Util::STDIO
|
|
16
16
|
# their output to it, which is in turn printed to the console `qb` is running
|
17
17
|
# in.
|
18
18
|
class Service
|
19
|
-
def initialize name
|
19
|
+
def initialize name
|
20
20
|
@name = name
|
21
|
-
@dest = dest
|
22
21
|
@thread = nil
|
23
22
|
@server = nil
|
24
23
|
@socket = nil
|
@@ -54,9 +53,7 @@ module QB::Util::STDIO
|
|
54
53
|
@server = UNIXServer.new @path.to_s
|
55
54
|
@socket = @server.accept
|
56
55
|
|
57
|
-
|
58
|
-
@dest.puts line
|
59
|
-
end
|
56
|
+
work_in_thread
|
60
57
|
end
|
61
58
|
|
62
59
|
# set the env key so children can find the socket path
|
@@ -73,14 +70,46 @@ module QB::Util::STDIO
|
|
73
70
|
#
|
74
71
|
debug "closing..."
|
75
72
|
|
76
|
-
@thread.kill unless @thread.nil?
|
77
73
|
@socket.close unless @socket.nil?
|
78
74
|
@socket = nil
|
79
75
|
@server.close unless @server.nil?
|
80
76
|
@server = nil
|
81
77
|
FileUtils.rm(@path) if @path.exist?
|
78
|
+
@thread.kill unless @thread.nil?
|
82
79
|
|
83
80
|
debug "closed."
|
84
81
|
end
|
85
82
|
end # Service
|
83
|
+
|
84
|
+
# QB STDIO Service to proxy output from modules back to the main user
|
85
|
+
# process.
|
86
|
+
class OutService < Service
|
87
|
+
def initialize name, dest
|
88
|
+
super name
|
89
|
+
@dest = dest
|
90
|
+
end
|
91
|
+
|
92
|
+
def work_in_thread
|
93
|
+
while (line = @socket.gets) do
|
94
|
+
@dest.puts line
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end # OutService
|
98
|
+
|
99
|
+
# QB STDIO Service to proxy interactive user input from the main process
|
100
|
+
# to modules.
|
101
|
+
class InService < Service
|
102
|
+
def initialize name, src
|
103
|
+
super name
|
104
|
+
@src = src
|
105
|
+
end
|
106
|
+
|
107
|
+
def work_in_thread
|
108
|
+
while (line = @src.gets) do
|
109
|
+
@socket.puts line
|
110
|
+
end
|
111
|
+
|
112
|
+
close!
|
113
|
+
end
|
114
|
+
end # InService
|
86
115
|
end # QB::Util::STDIO
|
data/lib/qb/version.rb
CHANGED
data/library/path_facts
CHANGED
@@ -87,6 +87,27 @@ class PathFacts < QB::AnsibleModule
|
|
87
87
|
end
|
88
88
|
}
|
89
89
|
|
90
|
+
git.is_clean = Cmds.chomp!('git status --porcelain 2>/dev/null').empty?
|
91
|
+
|
92
|
+
rev_parse = Cmds.capture 'git rev-parse HEAD'
|
93
|
+
|
94
|
+
if rev_parse.ok?
|
95
|
+
git.head = rev_parse.out.chomp
|
96
|
+
git.head_short = git.head[0...7]
|
97
|
+
else
|
98
|
+
git.head = git.head_short = nil
|
99
|
+
end
|
100
|
+
|
101
|
+
branch = Cmds.capture 'git branch --no-color 2> /dev/null'
|
102
|
+
|
103
|
+
git.branch = if branch.ok?
|
104
|
+
if line = branch.out.lines.find {|line| line.start_with? '*'}
|
105
|
+
if m = line.match(/\*\s+(\S+)/)
|
106
|
+
m[0]
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
90
111
|
git.origin = begin
|
91
112
|
Cmds.chomp! "git remote get-url origin"
|
92
113
|
rescue
|
@@ -184,9 +205,11 @@ class PathFacts < QB::AnsibleModule
|
|
184
205
|
# To stay consistent with Gem
|
185
206
|
npm.name = npm.package_json['name']
|
186
207
|
|
187
|
-
npm.version
|
188
|
-
npm.
|
189
|
-
|
208
|
+
if npm.package_json['version']
|
209
|
+
npm.version = QB::Package::Version.from_npm_version(
|
210
|
+
npm.package_json['version']
|
211
|
+
)
|
212
|
+
end
|
190
213
|
end
|
191
214
|
|
192
215
|
# Run the module.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.68
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nrser
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|