Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ansible
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
ansible
Commits
f8520750
Commit
f8520750
authored
Jul 23, 2012
by
Michael DeHaan
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #659 from bradobro/test_module_optparse
#658
parents
6448deb0
e8583833
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
91 additions
and
56 deletions
+91
-56
hacking/test-module
+91
-56
No files found.
hacking/test-module
View file @
f8520750
...
...
@@ -30,6 +30,7 @@ import sys
import
os
import
subprocess
import
traceback
import
optparse
import
ansible.utils
as
utils
import
ansible.module_common
as
module_common
...
...
@@ -38,67 +39,101 @@ try:
except
ImportError
:
import
simplejson
as
json
modfile
=
None
if
len
(
sys
.
argv
)
==
1
:
print
>>
sys
.
stderr
,
"usage: test-module ./library/command [key=value ...]"
sys
.
exit
(
1
)
modfile
=
sys
.
argv
[
1
]
if
len
(
sys
.
argv
)
>
1
:
args
=
" "
.
join
(
sys
.
argv
[
2
:])
else
:
args
=
""
argspath
=
os
.
path
.
expanduser
(
"~/.ansible_test_module_arguments"
)
argsfile
=
open
(
argspath
,
'w'
)
argsfile
.
write
(
args
)
argsfile
.
close
()
module_fh
=
open
(
modfile
)
module_data
=
module_fh
.
read
()
included_boilerplate
=
module_data
.
find
(
module_common
.
REPLACER
)
!=
-
1
module_fh
.
close
()
if
included_boilerplate
:
module_data
=
module_data
.
replace
(
module_common
.
REPLACER
,
module_common
.
MODULE_COMMON
)
modfile2_path
=
os
.
path
.
expanduser
(
"~/.ansible_module_generated"
)
print
"* including generated source, if any, saving to:
%
s"
%
modfile2_path
print
"* this will offset any line numbers in tracebacks!"
modfile2
=
open
(
modfile2_path
,
'w'
)
modfile2
.
write
(
module_data
)
modfile2
.
close
()
modfile
=
modfile2_path
else
:
print
"* module boilerplate substitution not requested in module, tracebacks will be unaltered"
os
.
system
(
"chmod +x
%
s"
%
modfile
)
cmd
=
subprocess
.
Popen
(
"
%
s
%
s"
%
(
modfile
,
argspath
),
shell
=
True
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
(
out
,
err
)
=
cmd
.
communicate
()
try
:
print
"***********************************"
print
"RAW OUTPUT"
print
out
print
err
results
=
utils
.
parse_json
(
out
)
def
parse
():
"""parse command line
:return : (options, args)"""
parser
=
optparse
.
OptionParser
()
parser
.
usage
=
"
%
prog [options] (-h for help)"
parser
.
add_option
(
'-m'
,
'--module-path'
,
dest
=
'module_path'
,
help
=
"path of module to execute"
)
parser
.
add_option
(
'-a'
,
'--args'
,
dest
=
'module_args'
,
default
=
""
,
help
=
"module arguments"
)
parser
.
add_option
(
'-D'
,
'--debugger'
,
dest
=
'debugger'
,
help
=
"path to python debugger (e.g. /usr/bin/pdb)"
)
options
,
args
=
parser
.
parse_args
()
if
not
options
.
module_path
:
parser
.
print_help
()
sys
.
exit
(
1
)
else
:
return
options
,
args
def
write_argsfile
(
argstring
):
"""Write args to a file for the module's use.
except
:
:return: full path to args file"""
argspath
=
os
.
path
.
expanduser
(
"~/.ansible_test_module_arguments"
)
argsfile
=
open
(
argspath
,
'w'
)
argsfile
.
write
(
argstring
)
argsfile
.
close
()
return
argspath
def
boilerplate_module
(
modfile
):
module_fh
=
open
(
modfile
)
module_data
=
module_fh
.
read
()
included_boilerplate
=
module_data
.
find
(
module_common
.
REPLACER
)
!=
-
1
module_fh
.
close
()
if
included_boilerplate
:
module_data
=
module_data
.
replace
(
module_common
.
REPLACER
,
module_common
.
MODULE_COMMON
)
modfile2_path
=
os
.
path
.
expanduser
(
"~/.ansible_module_generated"
)
print
"* including generated source, if any, saving to:
%
s"
%
modfile2_path
print
"* this will offset any line numbers in tracebacks/debuggers!"
modfile2
=
open
(
modfile2_path
,
'w'
)
modfile2
.
write
(
module_data
)
modfile2
.
close
()
modfile
=
modfile2_path
return
modfile2_path
else
:
print
"* module boilerplate substitution not requested in module, line numbers will be unaltered"
return
modfile
def
runtest
(
modfile
,
argspath
):
"""Test run a module, piping it's output for reporting."""
os
.
system
(
"chmod +x
%
s"
%
modfile
)
cmd
=
subprocess
.
Popen
(
"
%
s
%
s"
%
(
modfile
,
argspath
),
shell
=
True
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
(
out
,
err
)
=
cmd
.
communicate
()
try
:
print
"***********************************"
print
"RAW OUTPUT"
print
out
print
err
results
=
utils
.
parse_json
(
out
)
except
:
print
"***********************************"
print
"INVALID OUTPUT FORMAT"
print
out
traceback
.
print_exc
()
sys
.
exit
(
1
)
print
"***********************************"
print
"INVALID OUTPUT FORMAT"
print
out
traceback
.
print_exc
()
sys
.
exit
(
1
)
print
"PARSED OUTPUT"
print
utils
.
jsonify
(
results
,
format
=
True
)
print
"***********************************"
print
"PARSED OUTPUT"
def
rundebug
(
debugger
,
modfile
,
argspath
):
"""Run interactively with console debugger."""
subprocess
.
call
(
"
%
s
%
s
%
s"
%
(
debugger
,
modfile
,
argspath
),
shell
=
True
)
print
utils
.
jsonify
(
results
,
format
=
True
)
def
main
():
options
,
args
=
parse
()
sys
.
exit
(
0
)
argspath
=
write_argsfile
(
options
.
module_args
)
modfile
=
boilerplate_module
(
options
.
module_path
)
if
options
.
debugger
:
rundebug
(
options
.
debugger
,
modfile
,
argspath
)
else
:
runtest
(
modfile
,
argspath
)
if
__name__
==
"__main__"
:
main
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment