qb 0.3.25 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/ansible.cfg +10 -1
- data/exe/.qb_interop_receive +3 -10
- data/exe/qb +8 -2
- data/lib/python/qb/__init__.py +6 -0
- data/{roles/qb/ruby/rspec/setup/tasks/persistence.yml → lib/python/qb/ansible/__init__.py} +0 -0
- data/lib/python/qb/ansible/modules/__init__.py +0 -0
- data/lib/python/qb/ansible/modules/docker/__init__.py +0 -0
- data/lib/python/qb/ansible/modules/docker/client.py +177 -0
- data/lib/python/qb/ansible/modules/docker/image_manager.py +754 -0
- data/lib/python/qb/ipc/__init__.py +0 -0
- data/lib/python/qb/ipc/stdio/__init__.py +99 -0
- data/lib/python/qb/ipc/stdio/logging.py +151 -0
- data/lib/qb.rb +3 -3
- data/lib/qb/ansible/cmds/playbook.rb +5 -14
- data/lib/qb/ansible/env.rb +36 -6
- data/lib/qb/ansible/module.rb +396 -152
- data/lib/qb/ansible/module/response.rb +195 -0
- data/lib/qb/ansible/modules.rb +42 -0
- data/lib/qb/ansible/modules/docker/image.rb +273 -0
- data/lib/qb/cli.rb +5 -18
- data/lib/qb/cli/run.rb +2 -2
- data/lib/qb/data.rb +22 -0
- data/lib/qb/data/immutable.rb +39 -0
- data/lib/qb/docker.rb +2 -0
- data/lib/qb/docker/cli.rb +430 -0
- data/lib/qb/docker/image.rb +207 -0
- data/lib/qb/docker/image/name.rb +309 -0
- data/lib/qb/docker/image/tag.rb +113 -0
- data/lib/qb/docker/repo.rb +0 -0
- data/lib/qb/errors.rb +17 -3
- data/lib/qb/execution.rb +83 -0
- data/lib/qb/ipc.rb +48 -0
- data/lib/qb/ipc/stdio.rb +32 -0
- data/lib/qb/ipc/stdio/client.rb +267 -0
- data/lib/qb/ipc/stdio/server.rb +229 -0
- data/lib/qb/ipc/stdio/server/in_service.rb +18 -0
- data/lib/qb/ipc/stdio/server/log_service.rb +168 -0
- data/lib/qb/ipc/stdio/server/out_service.rb +20 -0
- data/lib/qb/ipc/stdio/server/service.rb +229 -0
- data/lib/qb/options.rb +360 -502
- data/lib/qb/options/option.rb +293 -115
- data/lib/qb/options/option/option_parser_concern.rb +228 -0
- data/lib/qb/options/types.rb +73 -0
- data/lib/qb/package.rb +0 -1
- data/lib/qb/package/version.rb +179 -58
- data/lib/qb/package/version/from.rb +192 -51
- data/lib/qb/package/version/leveled.rb +1 -1
- data/lib/qb/path.rb +3 -2
- data/lib/qb/repo/git.rb +9 -85
- data/lib/qb/role/default_dir.rb +2 -2
- data/lib/qb/role/errors.rb +2 -8
- data/lib/qb/util.rb +1 -2
- data/lib/qb/util/bundler.rb +73 -43
- data/lib/qb/util/decorators.rb +99 -0
- data/lib/qb/util/interop.rb +7 -8
- data/lib/qb/util/resource.rb +12 -13
- data/lib/qb/version.rb +10 -0
- data/library/path_facts +5 -10
- data/library/qb.module.rb +105 -0
- data/library/stream +6 -26
- data/load/ansible/module/autorun.rb +25 -0
- data/load/ansible/module/script.rb +123 -0
- data/load/rebundle.rb +39 -0
- data/plugins/filter/dict_filters.py +56 -0
- data/plugins/{filter_plugins/path_plugins.py → filter/path_filters.py} +0 -0
- data/plugins/{filter_plugins/ruby_interop_plugins.py → filter/ruby_interop_filters.py} +1 -17
- data/plugins/{filter_plugins/string_plugins.py → filter/string_filters.py} +1 -20
- data/plugins/{filter_plugins/version_plugins.py → filter/version_filters.py} +3 -18
- data/plugins/{lookup_plugins/every.py → lookup/every_lookups.py} +0 -0
- data/plugins/{lookup_plugins/resolve.py → lookup/resolve_lookups.py} +0 -0
- data/plugins/{lookup_plugins/version.py → lookup/version_lookups.py} +0 -16
- data/plugins/test/dict_tests.py +36 -0
- data/plugins/test/string_tests.py +36 -0
- data/qb.gemspec +7 -3
- data/roles/nrser.rb/library/set_fact_with_ruby.rb +3 -9
- data/roles/nrser.state_mate/library/state +3 -17
- data/roles/qb/call/meta/qb.yml +1 -1
- data/roles/qb/dev/ref/repo/git/meta/qb.yml +1 -1
- data/roles/qb/{ruby/rspec/setup → docker/mac/kubernetes}/defaults/main.yml +1 -1
- data/roles/qb/{ruby/rspec/setup → docker/mac/kubernetes}/meta/main.yml +3 -2
- data/roles/qb/{ruby/rspec/setup → docker/mac/kubernetes}/meta/qb.yml +12 -7
- data/roles/qb/docker/mac/kubernetes/tasks/main.yml +45 -0
- data/roles/qb/git/check/clean/meta/qb.yml +1 -1
- data/roles/qb/git/ignore/meta/qb +10 -3
- data/roles/qb/git/submodule/update/library/git_submodule_update +17 -27
- data/roles/qb/github/pages/setup/meta/qb.yml +1 -1
- data/roles/qb/labs/atom/apm/meta/qb.yml +1 -1
- data/roles/qb/osx/git/change_case/meta/qb.yml +1 -1
- data/roles/qb/osx/notif/meta/qb.yml +1 -1
- data/roles/qb/pkg/bump/library/bump +4 -16
- data/roles/qb/role/qb/defaults/main.yml +2 -0
- data/roles/qb/role/qb/meta/qb.yml +10 -5
- data/roles/qb/role/qb/templates/qb.yml.j2 +7 -2
- data/roles/qb/role/templates/library/module.rb.j2 +12 -23
- data/roles/qb/role/templates/meta/main.yml.j2 +14 -1
- data/roles/qb/ruby/bundler/meta/qb.yml +1 -1
- data/roles/qb/ruby/dependency/meta/qb.yml +1 -1
- data/roles/qb/ruby/gem/bin_stubs/meta/qb.yml +1 -1
- data/roles/qb/ruby/gem/bin_stubs/templates/console +8 -2
- data/roles/qb/ruby/gem/build/meta/qb.yml +1 -1
- data/roles/qb/ruby/gem/new/meta/qb.yml +1 -1
- data/roles/qb/ruby/nrser/rspex/generate/meta/qb.yml +5 -5
- data/roles/qb/ruby/nrser/rspex/issue/meta/qb.yml +1 -1
- data/roles/qb/ruby/yard/clean/meta/qb.yml +1 -1
- data/roles/qb/ruby/yard/config/library/yard.get_output_dir +5 -15
- data/roles/qb/ruby/yard/config/meta/qb.yml +1 -1
- data/roles/qb/ruby/yard/setup/meta/qb.yml +1 -1
- metadata +71 -22
- data/lib/qb/ansible_module.rb +0 -5
- data/lib/qb/util/stdio.rb +0 -187
- data/roles/qb/ruby/rspec/setup/tasks/main.yml +0 -4
@@ -1,22 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# WANT_JSON
|
3
3
|
|
4
|
-
#
|
5
|
-
|
6
|
-
ENV.each {|k, v|
|
7
|
-
if k.start_with? 'QB_DEV_ENV_'
|
8
|
-
ENV[k.sub('QB_DEV_ENV_', '')] = v
|
9
|
-
end
|
10
|
-
}
|
11
|
-
require 'bundler/setup'
|
12
|
-
end
|
4
|
+
# Load QB's Ansible module autorun harness
|
5
|
+
load ENV['QB_AM_AUTORUN_PATH']
|
13
6
|
|
14
|
-
require 'qb'
|
15
|
-
require 'nrser'
|
16
7
|
|
17
8
|
class YardGetOutputDir < QB::Ansible::Module
|
18
9
|
|
19
|
-
arg :bundle_root,
|
10
|
+
arg :bundle_root, type: t.abs_path
|
20
11
|
|
21
12
|
def facts_for rel_dir
|
22
13
|
{
|
@@ -41,7 +32,7 @@ class YardGetOutputDir < QB::Ansible::Module
|
|
41
32
|
# the module will exit successfully.
|
42
33
|
#
|
43
34
|
def main
|
44
|
-
path = File.join
|
35
|
+
path = File.join bundle_root, '.yardopts'
|
45
36
|
|
46
37
|
if File.exists? path
|
47
38
|
contents = File.read path
|
@@ -54,6 +45,5 @@ class YardGetOutputDir < QB::Ansible::Module
|
|
54
45
|
|
55
46
|
default_facts
|
56
47
|
end # #main
|
48
|
+
|
57
49
|
end # YardGetOutputDir
|
58
|
-
|
59
|
-
YardGetOutputDir.new.run
|
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.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nrser
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -120,42 +120,42 @@ dependencies:
|
|
120
120
|
requirements:
|
121
121
|
- - "~>"
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: 0.
|
123
|
+
version: 0.3.3
|
124
124
|
type: :runtime
|
125
125
|
prerelease: false
|
126
126
|
version_requirements: !ruby/object:Gem::Requirement
|
127
127
|
requirements:
|
128
128
|
- - "~>"
|
129
129
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.
|
130
|
+
version: 0.3.3
|
131
131
|
- !ruby/object:Gem::Dependency
|
132
132
|
name: cmds
|
133
133
|
requirement: !ruby/object:Gem::Requirement
|
134
134
|
requirements:
|
135
135
|
- - "~>"
|
136
136
|
- !ruby/object:Gem::Version
|
137
|
-
version: 0.2.
|
137
|
+
version: 0.2.11
|
138
138
|
type: :runtime
|
139
139
|
prerelease: false
|
140
140
|
version_requirements: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
142
|
- - "~>"
|
143
143
|
- !ruby/object:Gem::Version
|
144
|
-
version: 0.2.
|
144
|
+
version: 0.2.11
|
145
145
|
- !ruby/object:Gem::Dependency
|
146
146
|
name: state_mate
|
147
147
|
requirement: !ruby/object:Gem::Requirement
|
148
148
|
requirements:
|
149
149
|
- - "~>"
|
150
150
|
- !ruby/object:Gem::Version
|
151
|
-
version: 0.1.
|
151
|
+
version: 0.1.4
|
152
152
|
type: :runtime
|
153
153
|
prerelease: false
|
154
154
|
version_requirements: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
156
|
- - "~>"
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version: 0.1.
|
158
|
+
version: 0.1.4
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
name: parseconfig
|
161
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -232,6 +232,20 @@ dependencies:
|
|
232
232
|
- - "~>"
|
233
233
|
- !ruby/object:Gem::Version
|
234
234
|
version: '1.3'
|
235
|
+
- !ruby/object:Gem::Dependency
|
236
|
+
name: method_decorators
|
237
|
+
requirement: !ruby/object:Gem::Requirement
|
238
|
+
requirements:
|
239
|
+
- - "~>"
|
240
|
+
- !ruby/object:Gem::Version
|
241
|
+
version: 0.9.6
|
242
|
+
type: :runtime
|
243
|
+
prerelease: false
|
244
|
+
version_requirements: !ruby/object:Gem::Requirement
|
245
|
+
requirements:
|
246
|
+
- - "~>"
|
247
|
+
- !ruby/object:Gem::Version
|
248
|
+
version: 0.9.6
|
235
249
|
description:
|
236
250
|
email:
|
237
251
|
- neil@ztkae.com
|
@@ -255,7 +269,15 @@ files:
|
|
255
269
|
- exe/.qb_interop_receive
|
256
270
|
- exe/qb
|
257
271
|
- lib/python/qb/__init__.py
|
272
|
+
- lib/python/qb/ansible/__init__.py
|
273
|
+
- lib/python/qb/ansible/modules/__init__.py
|
274
|
+
- lib/python/qb/ansible/modules/docker/__init__.py
|
275
|
+
- lib/python/qb/ansible/modules/docker/client.py
|
276
|
+
- lib/python/qb/ansible/modules/docker/image_manager.py
|
258
277
|
- lib/python/qb/interop.py
|
278
|
+
- lib/python/qb/ipc/__init__.py
|
279
|
+
- lib/python/qb/ipc/stdio/__init__.py
|
280
|
+
- lib/python/qb/ipc/stdio/logging.py
|
259
281
|
- lib/python/qb/strings.py
|
260
282
|
- lib/qb.rb
|
261
283
|
- lib/qb/ansible.rb
|
@@ -264,24 +286,45 @@ files:
|
|
264
286
|
- lib/qb/ansible/env.rb
|
265
287
|
- lib/qb/ansible/env/devel.rb
|
266
288
|
- lib/qb/ansible/module.rb
|
267
|
-
- lib/qb/
|
289
|
+
- lib/qb/ansible/module/response.rb
|
290
|
+
- lib/qb/ansible/modules.rb
|
291
|
+
- lib/qb/ansible/modules/docker/image.rb
|
268
292
|
- lib/qb/cli.rb
|
269
293
|
- lib/qb/cli/help.rb
|
270
294
|
- lib/qb/cli/list.rb
|
271
295
|
- lib/qb/cli/play.rb
|
272
296
|
- lib/qb/cli/run.rb
|
273
297
|
- lib/qb/cli/setup.rb
|
298
|
+
- lib/qb/data.rb
|
299
|
+
- lib/qb/data/immutable.rb
|
300
|
+
- lib/qb/docker.rb
|
301
|
+
- lib/qb/docker/cli.rb
|
302
|
+
- lib/qb/docker/image.rb
|
303
|
+
- lib/qb/docker/image/name.rb
|
304
|
+
- lib/qb/docker/image/tag.rb
|
305
|
+
- lib/qb/docker/repo.rb
|
274
306
|
- lib/qb/errors.rb
|
307
|
+
- lib/qb/execution.rb
|
275
308
|
- lib/qb/github.rb
|
276
309
|
- lib/qb/github/api.rb
|
277
310
|
- lib/qb/github/issue.rb
|
278
311
|
- lib/qb/github/repo_id.rb
|
279
312
|
- lib/qb/github/resource.rb
|
280
313
|
- lib/qb/github/types.rb
|
314
|
+
- lib/qb/ipc.rb
|
315
|
+
- lib/qb/ipc/stdio.rb
|
316
|
+
- lib/qb/ipc/stdio/client.rb
|
317
|
+
- lib/qb/ipc/stdio/server.rb
|
318
|
+
- lib/qb/ipc/stdio/server/in_service.rb
|
319
|
+
- lib/qb/ipc/stdio/server/log_service.rb
|
320
|
+
- lib/qb/ipc/stdio/server/out_service.rb
|
321
|
+
- lib/qb/ipc/stdio/server/service.rb
|
281
322
|
- lib/qb/labs/README.md
|
282
323
|
- lib/qb/labs/atom/apm.rb
|
283
324
|
- lib/qb/options.rb
|
284
325
|
- lib/qb/options/option.rb
|
326
|
+
- lib/qb/options/option/option_parser_concern.rb
|
327
|
+
- lib/qb/options/types.rb
|
285
328
|
- lib/qb/package.rb
|
286
329
|
- lib/qb/package/gem.rb
|
287
330
|
- lib/qb/package/version.rb
|
@@ -301,15 +344,19 @@ files:
|
|
301
344
|
- lib/qb/role/search_path.rb
|
302
345
|
- lib/qb/util.rb
|
303
346
|
- lib/qb/util/bundler.rb
|
347
|
+
- lib/qb/util/decorators.rb
|
304
348
|
- lib/qb/util/docker_mixin.rb
|
305
349
|
- lib/qb/util/interop.rb
|
306
350
|
- lib/qb/util/resource.rb
|
307
|
-
- lib/qb/util/stdio.rb
|
308
351
|
- lib/qb/version.rb
|
309
352
|
- library/git_mkdir.py
|
310
353
|
- library/path_facts
|
354
|
+
- library/qb.module.rb
|
311
355
|
- library/qb_facts.py
|
312
356
|
- library/stream
|
357
|
+
- load/ansible/module/autorun.rb
|
358
|
+
- load/ansible/module/script.rb
|
359
|
+
- load/rebundle.rb
|
313
360
|
- node_modules/.bin/semver
|
314
361
|
- node_modules/semver/LICENSE
|
315
362
|
- node_modules/semver/README.md
|
@@ -318,13 +365,16 @@ files:
|
|
318
365
|
- node_modules/semver/range.bnf
|
319
366
|
- node_modules/semver/semver.js
|
320
367
|
- package.json
|
321
|
-
- plugins/
|
322
|
-
- plugins/
|
323
|
-
- plugins/
|
324
|
-
- plugins/
|
325
|
-
- plugins/
|
326
|
-
- plugins/
|
327
|
-
- plugins/
|
368
|
+
- plugins/filter/dict_filters.py
|
369
|
+
- plugins/filter/path_filters.py
|
370
|
+
- plugins/filter/ruby_interop_filters.py
|
371
|
+
- plugins/filter/string_filters.py
|
372
|
+
- plugins/filter/version_filters.py
|
373
|
+
- plugins/lookup/every_lookups.py
|
374
|
+
- plugins/lookup/resolve_lookups.py
|
375
|
+
- plugins/lookup/version_lookups.py
|
376
|
+
- plugins/test/dict_tests.py
|
377
|
+
- plugins/test/string_tests.py
|
328
378
|
- qb.gemspec
|
329
379
|
- requirements.txt
|
330
380
|
- roles/nrser.blockinfile/CONTRIBUTING.md
|
@@ -366,6 +416,10 @@ files:
|
|
366
416
|
- roles/qb/dev/ref/repo/git/meta/main.yml
|
367
417
|
- roles/qb/dev/ref/repo/git/meta/qb.yml
|
368
418
|
- roles/qb/dev/ref/repo/git/tasks/main.yml
|
419
|
+
- roles/qb/docker/mac/kubernetes/defaults/main.yml
|
420
|
+
- roles/qb/docker/mac/kubernetes/meta/main.yml
|
421
|
+
- roles/qb/docker/mac/kubernetes/meta/qb.yml
|
422
|
+
- roles/qb/docker/mac/kubernetes/tasks/main.yml
|
369
423
|
- roles/qb/dump/vars/.qb-options.yml
|
370
424
|
- roles/qb/dump/vars/README.md
|
371
425
|
- roles/qb/dump/vars/meta/main.yml
|
@@ -747,11 +801,6 @@ files:
|
|
747
801
|
- roles/qb/ruby/nrser/rspex/issue/meta/main.yml
|
748
802
|
- roles/qb/ruby/nrser/rspex/issue/meta/qb.yml
|
749
803
|
- roles/qb/ruby/nrser/rspex/issue/tasks/main.yml
|
750
|
-
- roles/qb/ruby/rspec/setup/defaults/main.yml
|
751
|
-
- roles/qb/ruby/rspec/setup/meta/main.yml
|
752
|
-
- roles/qb/ruby/rspec/setup/meta/qb.yml
|
753
|
-
- roles/qb/ruby/rspec/setup/tasks/main.yml
|
754
|
-
- roles/qb/ruby/rspec/setup/tasks/persistence.yml
|
755
804
|
- roles/qb/ruby/yard/clean/defaults/main.yml
|
756
805
|
- roles/qb/ruby/yard/clean/meta/main.yml
|
757
806
|
- roles/qb/ruby/yard/clean/meta/qb.yml
|
data/lib/qb/ansible_module.rb
DELETED
data/lib/qb/util/stdio.rb
DELETED
@@ -1,187 +0,0 @@
|
|
1
|
-
# Requirements
|
2
|
-
# =====================================================================
|
3
|
-
|
4
|
-
# stdlib
|
5
|
-
require 'thread'
|
6
|
-
require 'socket'
|
7
|
-
require 'securerandom'
|
8
|
-
require 'fileutils'
|
9
|
-
require 'nrser'
|
10
|
-
|
11
|
-
# Refinements
|
12
|
-
# =====================================================================
|
13
|
-
|
14
|
-
require 'nrser/refinements'
|
15
|
-
using NRSER
|
16
|
-
|
17
|
-
|
18
|
-
# Declarations
|
19
|
-
# =====================================================================
|
20
|
-
|
21
|
-
module QB; end
|
22
|
-
module QB::Util; end
|
23
|
-
|
24
|
-
|
25
|
-
# Definitions
|
26
|
-
# =====================================================================
|
27
|
-
|
28
|
-
# Utilities for QB's standard-IO (`stdio`) handling feature.
|
29
|
-
#
|
30
|
-
# Normally, Ansible modules can't really do much with `stdio` - they return
|
31
|
-
# results by writing JSON to `stdout`, can't do anything useful with `stdin`,
|
32
|
-
# and I think things written to `stderr` don't go anywhere useful.
|
33
|
-
#
|
34
|
-
# This makes dealing with logging, error reporting and wrapping executables
|
35
|
-
# that report useful progress info to `stdout` or `stderr` pretty shitty.
|
36
|
-
#
|
37
|
-
# So, what we do is create streaming sockets for `stdout`, `stderr` and
|
38
|
-
# `stdin` in the QB process and write their paths to environment variables,
|
39
|
-
# which will be available to modules.
|
40
|
-
#
|
41
|
-
# {QB::Ansible::Module} automatically detects these variables and sets up
|
42
|
-
# `$stdout`, `$stderr` and `$stdin` to point to the sockets, which proxy
|
43
|
-
# back to the QB process' `stdio`.
|
44
|
-
#
|
45
|
-
# Of course other modules written in any language can also connect to these
|
46
|
-
# file sockets in the same manner.
|
47
|
-
#
|
48
|
-
# @note
|
49
|
-
# This feature only works for `localhost`. I have no idea what it will do
|
50
|
-
# in other cases. It doesn't seem like it should break anything, but remotely
|
51
|
-
# executing modules definitely won't be able to connect to the sockets on
|
52
|
-
# the host.
|
53
|
-
#
|
54
|
-
# @todo
|
55
|
-
# `stdin` support is pretty experimental / broken at this point. That would
|
56
|
-
# be nice to fix in the future so that programs that make use of user
|
57
|
-
# interaction work seamlessly through QB. This will probably require
|
58
|
-
# using pseudo-TTY streams or whatever.
|
59
|
-
#
|
60
|
-
module QB::Util::STDIO
|
61
|
-
|
62
|
-
# Constants
|
63
|
-
# =====================================================================
|
64
|
-
|
65
|
-
SOCKET_DIR = Pathname.new('/').join 'tmp', 'qb-stdio'
|
66
|
-
|
67
|
-
# STDIO as a service exposed on a UNIX socket so that modules can stream
|
68
|
-
# their output to it, which is in turn printed to the console `qb` is running
|
69
|
-
# in.
|
70
|
-
class Service
|
71
|
-
include SemanticLogger::Loggable
|
72
|
-
|
73
|
-
def initialize name
|
74
|
-
@name = name
|
75
|
-
@thread = nil
|
76
|
-
@server = nil
|
77
|
-
@socket = nil
|
78
|
-
@env_key = "QB_STDIO_#{ name.upcase }"
|
79
|
-
|
80
|
-
unless SOCKET_DIR.exist?
|
81
|
-
FileUtils.mkdir SOCKET_DIR
|
82
|
-
end
|
83
|
-
|
84
|
-
@path = SOCKET_DIR.join "#{ name }.#{ SecureRandom.uuid }.sock"
|
85
|
-
|
86
|
-
self.logger = SemanticLogger[
|
87
|
-
[
|
88
|
-
"#{ self.class.name } {",
|
89
|
-
" name: #{ name }",
|
90
|
-
" path: #{ @path.to_s }",
|
91
|
-
"}"
|
92
|
-
].join( "\n" )
|
93
|
-
]
|
94
|
-
|
95
|
-
logger.trace "Initialized"
|
96
|
-
end
|
97
|
-
|
98
|
-
def debug *args
|
99
|
-
# logger.debug "#{ @debug_header }", args
|
100
|
-
logger.debug *args
|
101
|
-
end
|
102
|
-
|
103
|
-
def open!
|
104
|
-
logger.trace "opening..."
|
105
|
-
|
106
|
-
# make sure env var is not already set (basically just prevents you from
|
107
|
-
# accidentally opening two instances with the same name)
|
108
|
-
if ENV.key? @env_key
|
109
|
-
raise <<-END.squish
|
110
|
-
env already contains key #{ @env_key } with value #{ ENV[@env_key] }
|
111
|
-
END
|
112
|
-
end
|
113
|
-
|
114
|
-
@thread = Thread.new do
|
115
|
-
Thread.current.name = @name
|
116
|
-
logger.trace "thread started."
|
117
|
-
|
118
|
-
@server = UNIXServer.new @path.to_s
|
119
|
-
|
120
|
-
while true do
|
121
|
-
@socket = @server.accept
|
122
|
-
|
123
|
-
work_in_thread
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# set the env key so children can find the socket path
|
128
|
-
ENV[@env_key] = @path.to_s
|
129
|
-
logger.trace "set env var", @env_key => ENV[@env_key]
|
130
|
-
|
131
|
-
logger.trace "service open."
|
132
|
-
end # open
|
133
|
-
|
134
|
-
def close!
|
135
|
-
# clean up.
|
136
|
-
#
|
137
|
-
# TODO not sure how correct this is...
|
138
|
-
#
|
139
|
-
logger.trace "closing..."
|
140
|
-
|
141
|
-
@socket.close unless @socket.nil?
|
142
|
-
@socket = nil
|
143
|
-
@server.close unless @server.nil?
|
144
|
-
@server = nil
|
145
|
-
FileUtils.rm(@path) if @path.exist?
|
146
|
-
@thread.kill unless @thread.nil?
|
147
|
-
|
148
|
-
logger.trace "closed."
|
149
|
-
end
|
150
|
-
end # Service
|
151
|
-
|
152
|
-
# QB STDIO Service to proxy output from modules back to the main user
|
153
|
-
# process.
|
154
|
-
class OutService < Service
|
155
|
-
def initialize name, dest
|
156
|
-
super name
|
157
|
-
@dest = dest
|
158
|
-
end
|
159
|
-
|
160
|
-
def work_in_thread
|
161
|
-
while (line = @socket.gets) do
|
162
|
-
logger.trace "received line",
|
163
|
-
line: line,
|
164
|
-
dest: @dest
|
165
|
-
|
166
|
-
@dest.puts line
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end # OutService
|
170
|
-
|
171
|
-
# QB STDIO Service to proxy interactive user input from the main process
|
172
|
-
# to modules.
|
173
|
-
class InService < Service
|
174
|
-
def initialize name, src
|
175
|
-
super name
|
176
|
-
@src = src
|
177
|
-
end
|
178
|
-
|
179
|
-
def work_in_thread
|
180
|
-
while (line = @src.gets) do
|
181
|
-
@socket.puts line
|
182
|
-
end
|
183
|
-
|
184
|
-
close!
|
185
|
-
end
|
186
|
-
end # InService
|
187
|
-
end # QB::Util::STDIO
|