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
7a14cb61
Commit
7a14cb61
authored
Jan 17, 2014
by
jeromew
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add creates= and removes= to the script: action
parent
7e23ed34
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
1 deletions
+68
-1
lib/ansible/runner/action_plugins/script.py
+50
-1
library/commands/script
+18
-0
No files found.
lib/ansible/runner/action_plugins/script.py
View file @
7a14cb61
...
...
@@ -16,6 +16,7 @@
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
import
os
import
re
import
shlex
import
ansible.constants
as
C
...
...
@@ -38,12 +39,60 @@ class ActionModule(object):
# in check mode, always skip this module
return
ReturnData
(
conn
=
conn
,
comm_ok
=
True
,
result
=
dict
(
skipped
=
True
,
msg
=
'check mode not supported for this module'
))
# extract ansible reserved parameters
# From library/command keep in sync
creates
=
None
removes
=
None
r
=
re
.
compile
(
r'(^|\s)(creates|removes)=(?P<quote>[\'"])?(.*?)(?(quote)(?<!\\)(?P=quote))((?<!\\)(?=\s)|$)'
)
for
m
in
r
.
finditer
(
module_args
):
v
=
m
.
group
(
4
)
.
replace
(
"
\\
"
,
""
)
if
m
.
group
(
2
)
==
"creates"
:
creates
=
v
elif
m
.
group
(
2
)
==
"removes"
:
removes
=
v
module_args
=
r
.
sub
(
""
,
module_args
)
if
creates
:
# do not run the command if the line contains creates=filename
# and the filename already exists. This allows idempotence
# of command executions.
module_args_tmp
=
"path=
%
s"
%
creates
module_return
=
self
.
runner
.
_execute_module
(
conn
,
tmp
,
'stat'
,
module_args_tmp
,
inject
=
inject
,
complex_args
=
complex_args
,
persist_files
=
True
)
stat
=
module_return
.
result
.
get
(
'stat'
,
None
)
if
stat
and
stat
.
get
(
'exists'
,
False
):
return
ReturnData
(
conn
=
conn
,
comm_ok
=
True
,
result
=
dict
(
skipped
=
True
,
msg
=
(
"skipped, since
%
s exists"
%
creates
)
)
)
if
removes
:
# do not run the command if the line contains removes=filename
# and the filename does not exist. This allows idempotence
# of command executions.
module_args_tmp
=
"path=
%
s"
%
removes
module_return
=
self
.
runner
.
_execute_module
(
conn
,
tmp
,
'stat'
,
module_args_tmp
,
inject
=
inject
,
complex_args
=
complex_args
,
persist_files
=
True
)
stat
=
module_return
.
result
.
get
(
'stat'
,
None
)
if
stat
and
not
stat
.
get
(
'exists'
,
False
):
return
ReturnData
(
conn
=
conn
,
comm_ok
=
True
,
result
=
dict
(
skipped
=
True
,
msg
=
(
"skipped, since
%
s does not exist"
%
removes
)
)
)
# Decode the result of shlex.split() to UTF8 to get around a bug in that's been fixed in Python 2.7 but not Python 2.6.
# See: http://bugs.python.org/issue6988
tokens
=
shlex
.
split
(
module_args
.
encode
(
'utf8'
))
tokens
=
[
s
.
decode
(
'utf8'
)
for
s
in
tokens
]
# extract source script
source
=
tokens
[
0
]
# FIXME: error handling
args
=
" "
.
join
(
tokens
[
1
:])
source
=
template
.
template
(
self
.
runner
.
basedir
,
source
,
inject
)
...
...
library/commands/script
View file @
7a14cb61
...
...
@@ -18,6 +18,18 @@ options:
required: true
default: null
aliases: []
creates:
description:
- a filename, when it already exists, this step will B(not) be run.
required: no
default: null
version_added: "1.5"
removes:
description:
- a filename, when it does not exist, this step will B(not) be run.
required: no
default: null
version_added: "1.5"
notes:
- It is usually preferable to write Ansible modules than pushing scripts. Convert your script to an Ansible module for bonus points!
author: Michael DeHaan
...
...
@@ -26,4 +38,10 @@ author: Michael DeHaan
EXAMPLES = '''
# Example from Ansible Playbooks
- script: /some/local/script.sh --some-arguments 1234
# Run a script that creates a file, but only if the file is not yet created
- script: /some/local/create_file.sh --some-arguments 1234 creates=/the/created/file.txt
# Run a script that removes a file, but only if the file is not yet removed
- script: /some/local/remove_file.sh --some-arguments 1234 removes=/the/removed/file.txt
'''
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