qb 0.3.9 → 0.3.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/python/qb/__init__.py +0 -0
- data/lib/python/qb/interop.py +90 -0
- data/lib/qb/version.rb +1 -1
- data/plugins/filter_plugins/ruby_interop_plugins.py +15 -73
- data/plugins/filter_plugins/version_plugins.py +9 -0
- data/plugins/lookup_plugins/version.py +63 -0
- data/qb.gemspec +1 -1
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e3857fd48613a9211357d03cfd036acb2ecc589
|
4
|
+
data.tar.gz: a2ad6ea73512c132ce1ba5975e62503ee42d0dbd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49b2fc25bac49cdbd6f85fd95f1fe0927e1031a3fc44b426d8a1932ef0a249f8457002b8e38dfef88131d9c7fa2808642cd31502c7c49b561ca8302c57361489
|
7
|
+
data.tar.gz: f94a7b6b066b97171e9fe09167ad6e53b7e3998738954adcfccc1a9f26033c6c1e45620925acd21dc4abf088d00ac558ebfec7e7f2e67e48eb22f1b822eb366b
|
File without changes
|
@@ -0,0 +1,90 @@
|
|
1
|
+
from __future__ import (absolute_import, division, print_function)
|
2
|
+
__metaclass__ = type
|
3
|
+
|
4
|
+
from ansible.errors import AnsibleError
|
5
|
+
|
6
|
+
import subprocess
|
7
|
+
import yaml
|
8
|
+
import os
|
9
|
+
from ansible.parsing.yaml.dumper import AnsibleDumper
|
10
|
+
|
11
|
+
|
12
|
+
QB_ROOT = os.path.realpath(
|
13
|
+
os.path.join(
|
14
|
+
os.path.dirname(os.path.realpath(__file__)), # //lib/python/qb
|
15
|
+
'..', # //lib/python
|
16
|
+
'..', # //lib
|
17
|
+
'..', # //
|
18
|
+
)
|
19
|
+
)
|
20
|
+
|
21
|
+
INTEROP_RECEIVE_EXE = os.path.join( QB_ROOT, 'exe', '.qb_interop_receive' )
|
22
|
+
|
23
|
+
|
24
|
+
def send_payload( payload ):
|
25
|
+
'''
|
26
|
+
Send a payload to QB Ruby code via a subprocess.
|
27
|
+
'''
|
28
|
+
|
29
|
+
input = yaml.dump( payload, Dumper=AnsibleDumper )
|
30
|
+
|
31
|
+
process = subprocess.Popen(
|
32
|
+
[ INTEROP_RECEIVE_EXE ],
|
33
|
+
stdin=subprocess.PIPE,
|
34
|
+
stdout=subprocess.PIPE,
|
35
|
+
stderr=subprocess.PIPE,
|
36
|
+
env=os.environ,
|
37
|
+
)
|
38
|
+
|
39
|
+
out, err = process.communicate( input )
|
40
|
+
|
41
|
+
if process.returncode != 0:
|
42
|
+
raise AnsibleError('''
|
43
|
+
qb_send failed!
|
44
|
+
|
45
|
+
ERROR:
|
46
|
+
%s
|
47
|
+
''' % (err))
|
48
|
+
|
49
|
+
try:
|
50
|
+
result = yaml.safe_load(out)
|
51
|
+
except Exception as error:
|
52
|
+
raise AnsibleError('''
|
53
|
+
qb_send failed to parse response:
|
54
|
+
|
55
|
+
%s
|
56
|
+
''' % out)
|
57
|
+
|
58
|
+
return result
|
59
|
+
|
60
|
+
|
61
|
+
def send( data, method, *args, **kwds ):
|
62
|
+
'''
|
63
|
+
Load data as an object in ruby and send it a message (call a method).
|
64
|
+
'''
|
65
|
+
|
66
|
+
return send_payload({
|
67
|
+
'data': data,
|
68
|
+
'method': method,
|
69
|
+
'args': args,
|
70
|
+
'kwds': kwds,
|
71
|
+
})
|
72
|
+
|
73
|
+
|
74
|
+
def send_const( name, method, *args, **kwds ):
|
75
|
+
'''
|
76
|
+
Send a message (call a method) to a Ruby constant by name.
|
77
|
+
'''
|
78
|
+
|
79
|
+
return send_payload({
|
80
|
+
'const': name,
|
81
|
+
'method': method,
|
82
|
+
'args': args,
|
83
|
+
'kwds': kwds,
|
84
|
+
})
|
85
|
+
|
86
|
+
|
87
|
+
# Testing with doctest
|
88
|
+
if __name__ == '__main__':
|
89
|
+
import doctest
|
90
|
+
doctest.testmod()
|
data/lib/qb/version.rb
CHANGED
@@ -1,86 +1,28 @@
|
|
1
1
|
from __future__ import (absolute_import, division, print_function)
|
2
2
|
__metaclass__ = type
|
3
3
|
|
4
|
+
import os
|
5
|
+
import sys
|
6
|
+
|
4
7
|
from ansible.errors import AnsibleError
|
5
8
|
|
6
|
-
import subprocess
|
7
|
-
import yaml
|
8
|
-
import os
|
9
|
-
from ansible.parsing.yaml.dumper import AnsibleDumper
|
10
9
|
|
10
|
+
HERE = os.path.dirname(os.path.realpath(__file__))
|
11
11
|
|
12
|
-
|
12
|
+
PROJECT_ROOT = os.path.realpath(
|
13
13
|
os.path.join(
|
14
|
-
|
15
|
-
'..', #
|
16
|
-
'..', #
|
14
|
+
HERE, # //plugins/filter_plugins
|
15
|
+
'..', # //plugins
|
16
|
+
'..', # //
|
17
17
|
)
|
18
18
|
)
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def send_to_interop( payload ):
|
24
|
-
'''
|
25
|
-
Send a payload to QB Ruby code via a subprocess.
|
26
|
-
'''
|
27
|
-
|
28
|
-
input = yaml.dump( payload, Dumper=AnsibleDumper )
|
29
|
-
|
30
|
-
process = subprocess.Popen(
|
31
|
-
[ INTEROP_RECEIVE_EXE ],
|
32
|
-
stdin=subprocess.PIPE,
|
33
|
-
stdout=subprocess.PIPE,
|
34
|
-
stderr=subprocess.PIPE,
|
35
|
-
env=os.environ,
|
36
|
-
)
|
37
|
-
|
38
|
-
out, err = process.communicate( input )
|
39
|
-
|
40
|
-
if process.returncode != 0:
|
41
|
-
raise AnsibleError('''
|
42
|
-
qb_send failed!
|
43
|
-
|
44
|
-
ERROR:
|
45
|
-
%s
|
46
|
-
''' % (err))
|
47
|
-
|
48
|
-
try:
|
49
|
-
result = yaml.safe_load(out)
|
50
|
-
except Exception as error:
|
51
|
-
raise AnsibleError('''
|
52
|
-
qb_send failed to parse response:
|
53
|
-
|
54
|
-
%s
|
55
|
-
''' % out)
|
56
|
-
|
57
|
-
return result
|
58
|
-
|
20
|
+
LIB_PYTHON_DIR = os.path.join( PROJECT_ROOT, 'lib', 'python' )
|
59
21
|
|
60
|
-
|
61
|
-
|
62
|
-
Load data as an object in ruby and send it a message (call a method).
|
63
|
-
'''
|
64
|
-
|
65
|
-
return send_to_interop({
|
66
|
-
'data': data,
|
67
|
-
'method': method,
|
68
|
-
'args': args,
|
69
|
-
'kwds': kwds,
|
70
|
-
})
|
22
|
+
if not (LIB_PYTHON_DIR in sys.path):
|
23
|
+
sys.path.insert(0, LIB_PYTHON_DIR)
|
71
24
|
|
72
|
-
|
73
|
-
def qb_send_const( name, method, *args, **kwds ):
|
74
|
-
'''
|
75
|
-
Send a message (call a method) to a Ruby constant by name.
|
76
|
-
'''
|
77
|
-
|
78
|
-
return send_to_interop({
|
79
|
-
'const': name,
|
80
|
-
'method': method,
|
81
|
-
'args': args,
|
82
|
-
'kwds': kwds,
|
83
|
-
})
|
25
|
+
import qb.interop
|
84
26
|
|
85
27
|
|
86
28
|
class FilterModule( object ):
|
@@ -90,14 +32,14 @@ class FilterModule( object ):
|
|
90
32
|
|
91
33
|
def filters( self ):
|
92
34
|
return {
|
93
|
-
'qb_send':
|
94
|
-
'qb_send_const':
|
35
|
+
'qb_send': qb.interop.send,
|
36
|
+
'qb_send_const': qb.interop.send_const,
|
95
37
|
}
|
96
38
|
# filters()
|
97
39
|
# FilterModule
|
98
40
|
|
99
41
|
|
100
|
-
#
|
42
|
+
# Testing with doctest
|
101
43
|
if __name__ == '__main__':
|
102
44
|
import doctest
|
103
45
|
doctest.testmod()
|
@@ -126,6 +126,14 @@ def qb_version_parse(version_string):
|
|
126
126
|
return version
|
127
127
|
|
128
128
|
|
129
|
+
def qb_read_version(file_path):
|
130
|
+
'''Read a QB::Package::Version from a file.
|
131
|
+
'''
|
132
|
+
|
133
|
+
with open(file_path, 'r') as file:
|
134
|
+
return qb_version_parse(file.read())
|
135
|
+
|
136
|
+
|
129
137
|
class FilterModule(object):
|
130
138
|
''' version manipulation filters '''
|
131
139
|
|
@@ -134,6 +142,7 @@ class FilterModule(object):
|
|
134
142
|
'semver_inc': semver_inc,
|
135
143
|
'semver_parse': semver_parse,
|
136
144
|
'qb_version_parse': qb_version_parse,
|
145
|
+
'qb_read_version': qb_read_version,
|
137
146
|
}
|
138
147
|
# filters()
|
139
148
|
# FilterModule
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Be more Python 3
|
2
|
+
from __future__ import (absolute_import, division, print_function)
|
3
|
+
__metaclass__ = type
|
4
|
+
|
5
|
+
import sys
|
6
|
+
import os
|
7
|
+
|
8
|
+
from ansible.errors import AnsibleError, AnsibleParserError
|
9
|
+
from ansible.plugins.lookup import LookupBase
|
10
|
+
|
11
|
+
try:
|
12
|
+
from __main__ import display
|
13
|
+
except ImportError:
|
14
|
+
from ansible.utils.display import Display
|
15
|
+
display = Display()
|
16
|
+
|
17
|
+
|
18
|
+
HERE = os.path.dirname(os.path.realpath(__file__))
|
19
|
+
|
20
|
+
PROJECT_ROOT = os.path.realpath(
|
21
|
+
os.path.join(
|
22
|
+
HERE, # //plugins/filter_plugins
|
23
|
+
'..', # //plugins
|
24
|
+
'..', # //
|
25
|
+
)
|
26
|
+
)
|
27
|
+
|
28
|
+
LIB_PYTHON_DIR = os.path.join( PROJECT_ROOT, 'lib', 'python' )
|
29
|
+
|
30
|
+
if not (LIB_PYTHON_DIR in sys.path):
|
31
|
+
sys.path.insert(0, LIB_PYTHON_DIR)
|
32
|
+
|
33
|
+
import qb.interop
|
34
|
+
|
35
|
+
|
36
|
+
class LookupModule(LookupBase):
|
37
|
+
|
38
|
+
def run(self, terms, variables=None, **kwargs):
|
39
|
+
path = os.path.join(*terms)
|
40
|
+
|
41
|
+
if not os.path.isabs(path):
|
42
|
+
path = os.path.join(variables['qb_dir'], path)
|
43
|
+
|
44
|
+
if not os.path.isfile(path):
|
45
|
+
path_with_version = os.path.join(path, 'VERSION')
|
46
|
+
|
47
|
+
if not os.path.isfile(path_with_version):
|
48
|
+
raise AnsibleError(
|
49
|
+
"Neither path %s or %s exists" % (path, path_with_version)
|
50
|
+
)
|
51
|
+
|
52
|
+
path = path_with_version
|
53
|
+
|
54
|
+
with open(path, 'r') as file:
|
55
|
+
raw = file.read().strip()
|
56
|
+
|
57
|
+
version = qb.interop.send_const(
|
58
|
+
'QB::Package::Version',
|
59
|
+
'from_string',
|
60
|
+
raw,
|
61
|
+
)
|
62
|
+
|
63
|
+
return version
|
data/qb.gemspec
CHANGED
@@ -97,7 +97,7 @@ Gem::Specification.new do |spec|
|
|
97
97
|
spec.add_development_dependency "yard"
|
98
98
|
spec.add_development_dependency "pry"
|
99
99
|
|
100
|
-
spec.add_dependency "cmds", '~> 0.0', ">= 0.2.
|
100
|
+
spec.add_dependency "cmds", '~> 0.0', ">= 0.2.3"
|
101
101
|
spec.add_dependency "nrser", '~> 0.0', ">= 0.0.28"
|
102
102
|
spec.add_dependency "nrser-extras", '~> 0.0', ">= 0.0.3"
|
103
103
|
spec.add_dependency "state_mate", '~> 0.0', ">= 0.0.9"
|
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.3.
|
4
|
+
version: 0.3.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nrser
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -89,7 +89,7 @@ dependencies:
|
|
89
89
|
version: '0.0'
|
90
90
|
- - ">="
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version: 0.2.
|
92
|
+
version: 0.2.3
|
93
93
|
type: :runtime
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -99,7 +99,7 @@ dependencies:
|
|
99
99
|
version: '0.0'
|
100
100
|
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: 0.2.
|
102
|
+
version: 0.2.3
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: nrser
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -250,6 +250,8 @@ files:
|
|
250
250
|
- ansible.cfg
|
251
251
|
- exe/.qb_interop_receive
|
252
252
|
- exe/qb
|
253
|
+
- lib/python/qb/__init__.py
|
254
|
+
- lib/python/qb/interop.py
|
253
255
|
- lib/qb.rb
|
254
256
|
- lib/qb/ansible.rb
|
255
257
|
- lib/qb/ansible/cmds/playbook.rb
|
@@ -306,6 +308,7 @@ files:
|
|
306
308
|
- plugins/filter_plugins/version_plugins.py
|
307
309
|
- plugins/lookup_plugins/every.py
|
308
310
|
- plugins/lookup_plugins/resolve.py
|
311
|
+
- plugins/lookup_plugins/version.py
|
309
312
|
- qb.gemspec
|
310
313
|
- roles/nrser.blockinfile/CONTRIBUTING.md
|
311
314
|
- roles/nrser.blockinfile/README.md
|