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
b520d5bc
Commit
b520d5bc
authored
Jul 10, 2015
by
James Cammarata
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Lots of fixes for integration test bugs
parent
a9712bb0
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
165 additions
and
117 deletions
+165
-117
lib/ansible/cli/__init__.py
+1
-1
lib/ansible/constants.py
+1
-0
lib/ansible/executor/connection_info.py
+16
-11
lib/ansible/executor/process/result.py
+1
-1
lib/ansible/playbook/play.py
+2
-1
lib/ansible/playbook/role/__init__.py
+11
-8
lib/ansible/plugins/strategies/__init__.py
+40
-25
lib/ansible/vars/__init__.py
+3
-0
lib/ansible/vars/hostvars.py
+1
-1
test/integration/non_destructive.yml
+9
-9
test/integration/roles/test_authorized_key/tasks/main.yml
+30
-30
test/integration/roles/test_conditionals/tasks/main.yml
+8
-7
test/integration/roles/test_includes/tasks/included_task1.yml
+3
-3
test/integration/roles/test_mysql_user/tasks/user_password_update_test.yml
+7
-6
test/integration/test_force_handlers.yml
+4
-2
test/integration/test_group_by.yml
+28
-12
No files found.
lib/ansible/cli/__init__.py
View file @
b520d5bc
...
@@ -318,7 +318,7 @@ class CLI(object):
...
@@ -318,7 +318,7 @@ class CLI(object):
)
)
if
meta_opts
:
if
meta_opts
:
parser
.
add_option
(
'--force-handlers'
,
dest
=
'force_handlers'
,
action
=
'store_true'
,
parser
.
add_option
(
'--force-handlers'
,
de
fault
=
C
.
DEFAULT_FORCE_HANDLERS
,
de
st
=
'force_handlers'
,
action
=
'store_true'
,
help
=
"run handlers even if a task fails"
)
help
=
"run handlers even if a task fails"
)
parser
.
add_option
(
'--flush-cache'
,
dest
=
'flush_cache'
,
action
=
'store_true'
,
parser
.
add_option
(
'--flush-cache'
,
dest
=
'flush_cache'
,
action
=
'store_true'
,
help
=
"clear the fact cache"
)
help
=
"clear the fact cache"
)
...
...
lib/ansible/constants.py
View file @
b520d5bc
...
@@ -139,6 +139,7 @@ DEFAULT_JINJA2_EXTENSIONS = get_config(p, DEFAULTS, 'jinja2_extensions', 'ANSIBL
...
@@ -139,6 +139,7 @@ DEFAULT_JINJA2_EXTENSIONS = get_config(p, DEFAULTS, 'jinja2_extensions', 'ANSIBL
DEFAULT_EXECUTABLE
=
get_config
(
p
,
DEFAULTS
,
'executable'
,
'ANSIBLE_EXECUTABLE'
,
'/bin/sh'
)
DEFAULT_EXECUTABLE
=
get_config
(
p
,
DEFAULTS
,
'executable'
,
'ANSIBLE_EXECUTABLE'
,
'/bin/sh'
)
DEFAULT_GATHERING
=
get_config
(
p
,
DEFAULTS
,
'gathering'
,
'ANSIBLE_GATHERING'
,
'implicit'
)
.
lower
()
DEFAULT_GATHERING
=
get_config
(
p
,
DEFAULTS
,
'gathering'
,
'ANSIBLE_GATHERING'
,
'implicit'
)
.
lower
()
DEFAULT_LOG_PATH
=
shell_expand_path
(
get_config
(
p
,
DEFAULTS
,
'log_path'
,
'ANSIBLE_LOG_PATH'
,
''
))
DEFAULT_LOG_PATH
=
shell_expand_path
(
get_config
(
p
,
DEFAULTS
,
'log_path'
,
'ANSIBLE_LOG_PATH'
,
''
))
DEFAULT_FORCE_HANDLERS
=
get_config
(
p
,
DEFAULTS
,
'force_handlers'
,
'ANSIBLE_FORCE_HANDLERS'
,
False
,
boolean
=
True
)
# selinux
# selinux
DEFAULT_SELINUX_SPECIAL_FS
=
get_config
(
p
,
'selinux'
,
'special_context_filesystems'
,
None
,
'fuse, nfs, vboxsf, ramfs'
,
islist
=
True
)
DEFAULT_SELINUX_SPECIAL_FS
=
get_config
(
p
,
'selinux'
,
'special_context_filesystems'
,
None
,
'fuse, nfs, vboxsf, ramfs'
,
islist
=
True
)
...
...
lib/ansible/executor/connection_info.py
View file @
b520d5bc
...
@@ -171,11 +171,12 @@ class ConnectionInformation:
...
@@ -171,11 +171,12 @@ class ConnectionInformation:
self
.
su_pass
=
None
self
.
su_pass
=
None
# general flags (should we move out?)
# general flags (should we move out?)
self
.
verbosity
=
0
self
.
verbosity
=
0
self
.
only_tags
=
set
()
self
.
only_tags
=
set
()
self
.
skip_tags
=
set
()
self
.
skip_tags
=
set
()
self
.
no_log
=
False
self
.
no_log
=
False
self
.
check_mode
=
False
self
.
check_mode
=
False
self
.
force_handlers
=
False
#TODO: just pull options setup to above?
#TODO: just pull options setup to above?
# set options before play to allow play to override them
# set options before play to allow play to override them
...
@@ -195,21 +196,23 @@ class ConnectionInformation:
...
@@ -195,21 +196,23 @@ class ConnectionInformation:
self
.
connection
=
play
.
connection
self
.
connection
=
play
.
connection
if
play
.
remote_user
:
if
play
.
remote_user
:
self
.
remote_user
=
play
.
remote_user
self
.
remote_user
=
play
.
remote_user
if
play
.
port
:
if
play
.
port
:
self
.
port
=
int
(
play
.
port
)
self
.
port
=
int
(
play
.
port
)
if
play
.
become
is
not
None
:
if
play
.
become
is
not
None
:
self
.
become
=
play
.
become
self
.
become
=
play
.
become
if
play
.
become_method
:
if
play
.
become_method
:
self
.
become_method
=
play
.
become_method
self
.
become_method
=
play
.
become_method
if
play
.
become_user
:
if
play
.
become_user
:
self
.
become_user
=
play
.
become_user
self
.
become_user
=
play
.
become_user
# non connection related
# non connection related
self
.
no_log
=
play
.
no_log
self
.
no_log
=
play
.
no_log
self
.
environment
=
play
.
environment
self
.
environment
=
play
.
environment
if
play
.
force_handlers
is
not
None
:
self
.
force_handlers
=
play
.
force_handlers
def
set_options
(
self
,
options
):
def
set_options
(
self
,
options
):
'''
'''
...
@@ -236,6 +239,8 @@ class ConnectionInformation:
...
@@ -236,6 +239,8 @@ class ConnectionInformation:
# self.no_log = boolean(options.no_log)
# self.no_log = boolean(options.no_log)
if
options
.
check
:
if
options
.
check
:
self
.
check_mode
=
boolean
(
options
.
check
)
self
.
check_mode
=
boolean
(
options
.
check
)
if
options
.
force_handlers
:
self
.
force_handlers
=
boolean
(
options
.
force_handlers
)
# get the tag info from options, converting a comma-separated list
# get the tag info from options, converting a comma-separated list
# of values into a proper list if need be. We check to see if the
# of values into a proper list if need be. We check to see if the
...
...
lib/ansible/executor/process/result.py
View file @
b520d5bc
...
@@ -147,7 +147,7 @@ class ResultProcess(multiprocessing.Process):
...
@@ -147,7 +147,7 @@ class ResultProcess(multiprocessing.Process):
self
.
_send_result
((
'add_host'
,
result_item
))
self
.
_send_result
((
'add_host'
,
result_item
))
elif
'add_group'
in
result_item
:
elif
'add_group'
in
result_item
:
# this task added a new group (group_by module)
# this task added a new group (group_by module)
self
.
_send_result
((
'add_group'
,
result
.
_
host
,
result_item
))
self
.
_send_result
((
'add_group'
,
result
.
_
task
))
elif
'ansible_facts'
in
result_item
:
elif
'ansible_facts'
in
result_item
:
# if this task is registering facts, do that now
# if this task is registering facts, do that now
item
=
result_item
.
get
(
'item'
,
None
)
item
=
result_item
.
get
(
'item'
,
None
)
...
...
lib/ansible/playbook/play.py
View file @
b520d5bc
...
@@ -78,6 +78,7 @@ class Play(Base, Taggable, Become):
...
@@ -78,6 +78,7 @@ class Play(Base, Taggable, Become):
# Flag/Setting Attributes
# Flag/Setting Attributes
_any_errors_fatal
=
FieldAttribute
(
isa
=
'bool'
,
default
=
False
)
_any_errors_fatal
=
FieldAttribute
(
isa
=
'bool'
,
default
=
False
)
_force_handlers
=
FieldAttribute
(
isa
=
'bool'
)
_max_fail_percentage
=
FieldAttribute
(
isa
=
'string'
,
default
=
'0'
)
_max_fail_percentage
=
FieldAttribute
(
isa
=
'string'
,
default
=
'0'
)
_serial
=
FieldAttribute
(
isa
=
'int'
,
default
=
0
)
_serial
=
FieldAttribute
(
isa
=
'int'
,
default
=
0
)
_strategy
=
FieldAttribute
(
isa
=
'string'
,
default
=
'linear'
)
_strategy
=
FieldAttribute
(
isa
=
'string'
,
default
=
'linear'
)
...
@@ -210,7 +211,7 @@ class Play(Base, Taggable, Become):
...
@@ -210,7 +211,7 @@ class Play(Base, Taggable, Become):
roles
=
[]
roles
=
[]
for
ri
in
role_includes
:
for
ri
in
role_includes
:
roles
.
append
(
Role
.
load
(
ri
))
roles
.
append
(
Role
.
load
(
ri
,
play
=
self
))
return
roles
return
roles
def
_post_validate_vars
(
self
,
attr
,
value
,
templar
):
def
_post_validate_vars
(
self
,
attr
,
value
,
templar
):
...
...
lib/ansible/playbook/role/__init__.py
View file @
b520d5bc
...
@@ -77,14 +77,14 @@ def role_reset_has_run():
...
@@ -77,14 +77,14 @@ def role_reset_has_run():
class
Role
(
Base
,
Become
,
Conditional
,
Taggable
):
class
Role
(
Base
,
Become
,
Conditional
,
Taggable
):
def
__init__
(
self
):
def
__init__
(
self
,
play
=
None
):
self
.
_role_name
=
None
self
.
_role_name
=
None
self
.
_role_path
=
None
self
.
_role_path
=
None
self
.
_role_params
=
dict
()
self
.
_role_params
=
dict
()
self
.
_loader
=
None
self
.
_loader
=
None
self
.
_metadata
=
None
self
.
_metadata
=
None
self
.
_play
=
None
self
.
_play
=
play
self
.
_parents
=
[]
self
.
_parents
=
[]
self
.
_dependencies
=
[]
self
.
_dependencies
=
[]
self
.
_task_blocks
=
[]
self
.
_task_blocks
=
[]
...
@@ -103,7 +103,7 @@ class Role(Base, Become, Conditional, Taggable):
...
@@ -103,7 +103,7 @@ class Role(Base, Become, Conditional, Taggable):
return
self
.
_role_name
return
self
.
_role_name
@staticmethod
@staticmethod
def
load
(
role_include
,
parent_role
=
None
):
def
load
(
role_include
,
p
lay
,
p
arent_role
=
None
):
# FIXME: add back in the role caching support
# FIXME: add back in the role caching support
try
:
try
:
# The ROLE_CACHE is a dictionary of role names, with each entry
# The ROLE_CACHE is a dictionary of role names, with each entry
...
@@ -112,7 +112,10 @@ class Role(Base, Become, Conditional, Taggable):
...
@@ -112,7 +112,10 @@ class Role(Base, Become, Conditional, Taggable):
# We use frozenset to make the dictionary hashable.
# We use frozenset to make the dictionary hashable.
#hashed_params = frozenset(role_include.get_role_params().iteritems())
#hashed_params = frozenset(role_include.get_role_params().iteritems())
hashed_params
=
hash_params
(
role_include
.
get_role_params
())
params
=
role_include
.
get_role_params
()
params
[
'tags'
]
=
role_include
.
tags
params
[
'when'
]
=
role_include
.
when
hashed_params
=
hash_params
(
params
)
if
role_include
.
role
in
ROLE_CACHE
:
if
role_include
.
role
in
ROLE_CACHE
:
for
(
entry
,
role_obj
)
in
ROLE_CACHE
[
role_include
.
role
]
.
iteritems
():
for
(
entry
,
role_obj
)
in
ROLE_CACHE
[
role_include
.
role
]
.
iteritems
():
if
hashed_params
==
entry
:
if
hashed_params
==
entry
:
...
@@ -120,7 +123,7 @@ class Role(Base, Become, Conditional, Taggable):
...
@@ -120,7 +123,7 @@ class Role(Base, Become, Conditional, Taggable):
role_obj
.
add_parent
(
parent_role
)
role_obj
.
add_parent
(
parent_role
)
return
role_obj
return
role_obj
r
=
Role
()
r
=
Role
(
play
=
play
)
r
.
_load_role_data
(
role_include
,
parent_role
=
parent_role
)
r
.
_load_role_data
(
role_include
,
parent_role
=
parent_role
)
if
role_include
.
role
not
in
ROLE_CACHE
:
if
role_include
.
role
not
in
ROLE_CACHE
:
...
@@ -174,11 +177,11 @@ class Role(Base, Become, Conditional, Taggable):
...
@@ -174,11 +177,11 @@ class Role(Base, Become, Conditional, Taggable):
task_data
=
self
.
_load_role_yaml
(
'tasks'
)
task_data
=
self
.
_load_role_yaml
(
'tasks'
)
if
task_data
:
if
task_data
:
self
.
_task_blocks
=
load_list_of_blocks
(
task_data
,
play
=
None
,
role
=
self
,
loader
=
self
.
_loader
)
self
.
_task_blocks
=
load_list_of_blocks
(
task_data
,
play
=
self
.
_play
,
role
=
self
,
loader
=
self
.
_loader
)
handler_data
=
self
.
_load_role_yaml
(
'handlers'
)
handler_data
=
self
.
_load_role_yaml
(
'handlers'
)
if
handler_data
:
if
handler_data
:
self
.
_handler_blocks
=
load_list_of_blocks
(
handler_data
,
play
=
None
,
role
=
self
,
use_handlers
=
True
,
loader
=
self
.
_loader
)
self
.
_handler_blocks
=
load_list_of_blocks
(
handler_data
,
play
=
self
.
_play
,
role
=
self
,
use_handlers
=
True
,
loader
=
self
.
_loader
)
# vars and default vars are regular dictionaries
# vars and default vars are regular dictionaries
self
.
_role_vars
=
self
.
_load_role_yaml
(
'vars'
)
self
.
_role_vars
=
self
.
_load_role_yaml
(
'vars'
)
...
@@ -227,7 +230,7 @@ class Role(Base, Become, Conditional, Taggable):
...
@@ -227,7 +230,7 @@ class Role(Base, Become, Conditional, Taggable):
deps
=
[]
deps
=
[]
if
self
.
_metadata
:
if
self
.
_metadata
:
for
role_include
in
self
.
_metadata
.
dependencies
:
for
role_include
in
self
.
_metadata
.
dependencies
:
r
=
Role
.
load
(
role_include
,
parent_role
=
self
)
r
=
Role
.
load
(
role_include
,
p
lay
=
self
.
_play
,
p
arent_role
=
self
)
deps
.
append
(
r
)
deps
.
append
(
r
)
return
deps
return
deps
...
...
lib/ansible/plugins/strategies/__init__.py
View file @
b520d5bc
...
@@ -207,11 +207,8 @@ class StrategyBase:
...
@@ -207,11 +207,8 @@ class StrategyBase:
self
.
_add_host
(
new_host_info
)
self
.
_add_host
(
new_host_info
)
elif
result
[
0
]
==
'add_group'
:
elif
result
[
0
]
==
'add_group'
:
host
=
result
[
1
]
task
=
result
[
1
]
task_result
=
result
[
2
]
self
.
_add_group
(
task
,
iterator
)
group_name
=
task_result
.
get
(
'add_group'
)
self
.
_add_group
(
host
,
group_name
)
elif
result
[
0
]
==
'notify_handler'
:
elif
result
[
0
]
==
'notify_handler'
:
host
=
result
[
1
]
host
=
result
[
1
]
...
@@ -272,11 +269,12 @@ class StrategyBase:
...
@@ -272,11 +269,12 @@ class StrategyBase:
ret_results
=
[]
ret_results
=
[]
debug
(
"waiting for pending results..."
)
while
self
.
_pending_results
>
0
and
not
self
.
_tqm
.
_terminated
:
while
self
.
_pending_results
>
0
and
not
self
.
_tqm
.
_terminated
:
debug
(
"waiting for pending results (
%
d left)"
%
self
.
_pending_results
)
results
=
self
.
_process_pending_results
(
iterator
)
results
=
self
.
_process_pending_results
(
iterator
)
ret_results
.
extend
(
results
)
ret_results
.
extend
(
results
)
time
.
sleep
(
0.01
)
time
.
sleep
(
0.01
)
debug
(
"no more pending results, returning what we have"
)
return
ret_results
return
ret_results
...
@@ -324,29 +322,45 @@ class StrategyBase:
...
@@ -324,29 +322,45 @@ class StrategyBase:
# FIXME: is this still required?
# FIXME: is this still required?
self
.
_inventory
.
clear_pattern_cache
()
self
.
_inventory
.
clear_pattern_cache
()
def
_add_group
(
self
,
host
,
group_name
):
def
_add_group
(
self
,
task
,
iterator
):
'''
'''
Helper function to add a group (if it does not exist), and to assign the
Helper function to add a group (if it does not exist), and to assign the
specified host to that group.
specified host to that group.
'''
'''
new_group
=
self
.
_inventory
.
get_group
(
group_name
)
if
not
new_group
:
# create the new group and add it to inventory
new_group
=
Group
(
group_name
)
self
.
_inventory
.
add_group
(
new_group
)
# and add the group to the proper hierarchy
allgroup
=
self
.
_inventory
.
get_group
(
'all'
)
allgroup
.
add_child_group
(
new_group
)
# the host here is from the executor side, which means it was a
# the host here is from the executor side, which means it was a
# serialized/cloned copy and we'll need to look up the proper
# serialized/cloned copy and we'll need to look up the proper
# host object from the master inventory
# host object from the master inventory
actual_host
=
self
.
_inventory
.
get_host
(
host
.
name
)
groups
=
{}
changed
=
False
for
host
in
self
.
_inventory
.
get_hosts
():
original_task
=
iterator
.
get_original_task
(
host
,
task
)
all_vars
=
self
.
_variable_manager
.
get_vars
(
loader
=
self
.
_loader
,
play
=
iterator
.
_play
,
host
=
host
,
task
=
original_task
)
templar
=
Templar
(
loader
=
self
.
_loader
,
variables
=
all_vars
)
group_name
=
templar
.
template
(
original_task
.
args
.
get
(
'key'
))
if
task
.
evaluate_conditional
(
templar
=
templar
,
all_vars
=
all_vars
):
if
group_name
not
in
groups
:
groups
[
group_name
]
=
[]
groups
[
group_name
]
.
append
(
host
)
for
group_name
,
hosts
in
groups
.
iteritems
():
new_group
=
self
.
_inventory
.
get_group
(
group_name
)
if
not
new_group
:
# create the new group and add it to inventory
new_group
=
Group
(
name
=
group_name
)
self
.
_inventory
.
add_group
(
new_group
)
# and add the group to the proper hierarchy
allgroup
=
self
.
_inventory
.
get_group
(
'all'
)
allgroup
.
add_child_group
(
new_group
)
changed
=
True
for
host
in
hosts
:
if
group_name
not
in
host
.
get_groups
():
new_group
.
add_host
(
host
)
changed
=
True
# and add the host to the group
return
changed
new_group
.
add_host
(
actual_host
)
def
_load_included_file
(
self
,
included_file
,
iterator
):
def
_load_included_file
(
self
,
included_file
,
iterator
):
'''
'''
...
@@ -398,13 +412,14 @@ class StrategyBase:
...
@@ -398,13 +412,14 @@ class StrategyBase:
for
handler
in
handler_block
.
block
:
for
handler
in
handler_block
.
block
:
handler_name
=
handler
.
get_name
()
handler_name
=
handler
.
get_name
()
if
handler_name
in
self
.
_notified_handlers
and
len
(
self
.
_notified_handlers
[
handler_name
]):
if
handler_name
in
self
.
_notified_handlers
and
len
(
self
.
_notified_handlers
[
handler_name
]):
if
not
len
(
self
.
get_hosts_remaining
(
iterator
.
_play
)):
# FIXME: need to use iterator.get_failed_hosts() instead?
self
.
_tqm
.
send_callback
(
'v2_playbook_on_no_hosts_remaining'
)
#if not len(self.get_hosts_remaining(iterator._play)):
result
=
False
# self._tqm.send_callback('v2_playbook_on_no_hosts_remaining')
break
# result = False
# break
self
.
_tqm
.
send_callback
(
'v2_playbook_on_handler_task_start'
,
handler
)
self
.
_tqm
.
send_callback
(
'v2_playbook_on_handler_task_start'
,
handler
)
for
host
in
self
.
_notified_handlers
[
handler_name
]:
for
host
in
self
.
_notified_handlers
[
handler_name
]:
if
not
handler
.
has_triggered
(
host
)
and
host
.
name
not
in
self
.
_tqm
.
_failed_hosts
:
if
not
handler
.
has_triggered
(
host
)
and
(
host
.
name
not
in
self
.
_tqm
.
_failed_hosts
or
connection_info
.
force_handlers
)
:
task_vars
=
self
.
_variable_manager
.
get_vars
(
loader
=
self
.
_loader
,
play
=
iterator
.
_play
,
host
=
host
,
task
=
handler
)
task_vars
=
self
.
_variable_manager
.
get_vars
(
loader
=
self
.
_loader
,
play
=
iterator
.
_play
,
host
=
host
,
task
=
handler
)
task_vars
=
self
.
add_tqm_variables
(
task_vars
,
play
=
iterator
.
_play
)
task_vars
=
self
.
add_tqm_variables
(
task_vars
,
play
=
iterator
.
_play
)
self
.
_queue_task
(
host
,
handler
,
task_vars
,
connection_info
)
self
.
_queue_task
(
host
,
handler
,
task_vars
,
connection_info
)
...
...
lib/ansible/vars/__init__.py
View file @
b520d5bc
...
@@ -245,6 +245,9 @@ class VariableManager:
...
@@ -245,6 +245,9 @@ class VariableManager:
all_vars
[
'omit'
]
=
self
.
_omit_token
all_vars
[
'omit'
]
=
self
.
_omit_token
# make vars self referential, so people can do things like 'vars[var_name]'
# make vars self referential, so people can do things like 'vars[var_name]'
copied_vars
=
all_vars
.
copy
()
if
'hostvars'
in
copied_vars
:
del
copied_vars
[
'hostvars'
]
all_vars
[
'vars'
]
=
all_vars
.
copy
()
all_vars
[
'vars'
]
=
all_vars
.
copy
()
#CACHED_VARS[cache_entry] = all_vars
#CACHED_VARS[cache_entry] = all_vars
...
...
lib/ansible/vars/hostvars.py
View file @
b520d5bc
...
@@ -39,6 +39,6 @@ class HostVars(dict):
...
@@ -39,6 +39,6 @@ class HostVars(dict):
host
=
self
.
_inventory
.
get_host
(
host_name
)
host
=
self
.
_inventory
.
get_host
(
host_name
)
result
=
self
.
_vars_manager
.
get_vars
(
loader
=
self
.
_loader
,
play
=
self
.
_play
,
host
=
host
)
result
=
self
.
_vars_manager
.
get_vars
(
loader
=
self
.
_loader
,
play
=
self
.
_play
,
host
=
host
)
templar
=
Templar
(
variables
=
result
,
loader
=
self
.
_loader
)
templar
=
Templar
(
variables
=
result
,
loader
=
self
.
_loader
)
self
.
_lookup
[
host_name
]
=
templar
.
template
(
result
)
self
.
_lookup
[
host_name
]
=
templar
.
template
(
result
,
fail_on_undefined
=
False
)
return
self
.
_lookup
[
host_name
]
return
self
.
_lookup
[
host_name
]
test/integration/non_destructive.yml
View file @
b520d5bc
...
@@ -11,10 +11,18 @@
...
@@ -11,10 +11,18 @@
gather_facts
:
True
gather_facts
:
True
roles
:
roles
:
-
{
role
:
test_ping
,
tags
:
test_ping
}
-
{
role
:
test_ping
,
tags
:
test_ping
}
-
{
role
:
test_var_blending
,
parameterized_beats_default
:
1234
,
tags
:
test_var_blending
}
-
{
role
:
test_special_vars
,
tags
:
test_special_vars
}
-
{
role
:
test_ignore_errors
,
tags
:
test_ignore_errors
}
-
{
role
:
test_conditionals
,
tags
:
test_conditionals
}
-
{
role
:
test_iterators
,
tags
:
test_iterators
}
-
{
role
:
test_lookups
,
tags
:
test_lookups
}
-
{
role
:
test_changed_when
,
tags
:
test_changed_when
}
-
{
role
:
test_failed_when
,
tags
:
test_failed_when
}
-
{
role
:
test_handlers
,
tags
:
test_handlers
}
-
{
role
:
test_copy
,
tags
:
test_copy
}
-
{
role
:
test_copy
,
tags
:
test_copy
}
-
{
role
:
test_stat
,
tags
:
test_stat
}
-
{
role
:
test_stat
,
tags
:
test_stat
}
-
{
role
:
test_template
,
tags
:
test_template
}
-
{
role
:
test_template
,
tags
:
test_template
}
-
{
role
:
test_special_vars
,
tags
:
test_special_vars
}
-
{
role
:
test_file
,
tags
:
test_file
}
-
{
role
:
test_file
,
tags
:
test_file
}
-
{
role
:
test_fetch
,
tags
:
test_fetch
}
-
{
role
:
test_fetch
,
tags
:
test_fetch
}
-
{
role
:
test_synchronize
,
tags
:
test_synchronize
}
-
{
role
:
test_synchronize
,
tags
:
test_synchronize
}
...
@@ -22,20 +30,12 @@
...
@@ -22,20 +30,12 @@
-
{
role
:
test_subversion
,
tags
:
test_subversion
}
-
{
role
:
test_subversion
,
tags
:
test_subversion
}
-
{
role
:
test_git
,
tags
:
test_git
}
-
{
role
:
test_git
,
tags
:
test_git
}
-
{
role
:
test_hg
,
tags
:
test_hg
}
-
{
role
:
test_hg
,
tags
:
test_hg
}
-
{
role
:
test_changed_when
,
tags
:
test_changed_when
}
-
{
role
:
test_var_blending
,
parameterized_beats_default
:
1234
,
tags
:
test_var_blending
}
-
{
role
:
test_lineinfile
,
tags
:
test_lineinfile
}
-
{
role
:
test_lineinfile
,
tags
:
test_lineinfile
}
-
{
role
:
test_ignore_errors
,
tags
:
test_ignore_errors
}
-
{
role
:
test_unarchive
,
tags
:
test_unarchive
}
-
{
role
:
test_unarchive
,
tags
:
test_unarchive
}
-
{
role
:
test_filters
,
tags
:
test_filters
}
-
{
role
:
test_filters
,
tags
:
test_filters
}
-
{
role
:
test_facts_d
,
tags
:
test_facts_d
}
-
{
role
:
test_facts_d
,
tags
:
test_facts_d
}
-
{
role
:
test_conditionals
,
tags
:
test_conditionals
}
-
{
role
:
test_async
,
tags
:
test_async
}
-
{
role
:
test_async
,
tags
:
test_async
}
-
{
role
:
test_handlers
,
tags
:
test_handlers
}
-
{
role
:
test_lookups
,
tags
:
test_lookups
}
-
{
role
:
test_iterators
,
tags
:
test_iterators
}
-
{
role
:
test_command_shell
,
tags
:
test_command_shell
}
-
{
role
:
test_command_shell
,
tags
:
test_command_shell
}
-
{
role
:
test_failed_when
,
tags
:
test_failed_when
}
-
{
role
:
test_script
,
tags
:
test_script
}
-
{
role
:
test_script
,
tags
:
test_script
}
-
{
role
:
test_authorized_key
,
tags
:
test_authorized_key
}
-
{
role
:
test_authorized_key
,
tags
:
test_authorized_key
}
-
{
role
:
test_get_url
,
tags
:
test_get_url
}
-
{
role
:
test_get_url
,
tags
:
test_get_url
}
...
...
test/integration/roles/test_authorized_key/tasks/main.yml
View file @
b520d5bc
...
@@ -27,8 +27,8 @@
...
@@ -27,8 +27,8 @@
-
name
:
assert that the authorized_keys file was created
-
name
:
assert that the authorized_keys file was created
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
True'
]
-
'
result.changed
==
True'
-
[
'
result.state
==
"file"'
]
-
'
result.state
==
"file"'
# -------------------------------------------------------------
# -------------------------------------------------------------
# basic ssh-dss key
# basic ssh-dss key
...
@@ -40,9 +40,9 @@
...
@@ -40,9 +40,9 @@
-
name
:
assert that the key was added
-
name
:
assert that the key was added
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
True'
]
-
'
result.changed
==
True'
-
[
'
result.key
==
dss_key_basic'
]
-
'
result.key
==
dss_key_basic'
-
[
'
result.key_options
==
None'
]
-
'
result.key_options
==
None'
-
name
:
re-add basic ssh-dss key
-
name
:
re-add basic ssh-dss key
authorized_key
:
user=root key="{{ dss_key_basic }}" state=present path="{{output_dir|expanduser}}/authorized_keys"
authorized_key
:
user=root key="{{ dss_key_basic }}" state=present path="{{output_dir|expanduser}}/authorized_keys"
...
@@ -51,7 +51,7 @@
...
@@ -51,7 +51,7 @@
-
name
:
assert that nothing changed
-
name
:
assert that nothing changed
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# -------------------------------------------------------------
# ssh-dss key with an unquoted option
# ssh-dss key with an unquoted option
...
@@ -67,9 +67,9 @@
...
@@ -67,9 +67,9 @@
-
name
:
assert that the key was added
-
name
:
assert that the key was added
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
True'
]
-
'
result.changed
==
True'
-
[
'
result.key
==
dss_key_unquoted_option'
]
-
'
result.key
==
dss_key_unquoted_option'
-
[
'
result.key_options
==
None'
]
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with an unquoted option
-
name
:
re-add ssh-dss key with an unquoted option
authorized_key
:
authorized_key
:
...
@@ -82,7 +82,7 @@
...
@@ -82,7 +82,7 @@
-
name
:
assert that nothing changed
-
name
:
assert that nothing changed
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# -------------------------------------------------------------
# ssh-dss key with a leading command="/bin/foo"
# ssh-dss key with a leading command="/bin/foo"
...
@@ -98,9 +98,9 @@
...
@@ -98,9 +98,9 @@
-
name
:
assert that the key was added
-
name
:
assert that the key was added
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
True'
]
-
'
result.changed
==
True'
-
[
'
result.key
==
dss_key_command'
]
-
'
result.key
==
dss_key_command'
-
[
'
result.key_options
==
None'
]
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with a leading command
-
name
:
re-add ssh-dss key with a leading command
authorized_key
:
authorized_key
:
...
@@ -113,7 +113,7 @@
...
@@ -113,7 +113,7 @@
-
name
:
assert that nothing changed
-
name
:
assert that nothing changed
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# -------------------------------------------------------------
# ssh-dss key with a complex quoted leading command
# ssh-dss key with a complex quoted leading command
...
@@ -130,9 +130,9 @@
...
@@ -130,9 +130,9 @@
-
name
:
assert that the key was added
-
name
:
assert that the key was added
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
True'
]
-
'
result.changed
==
True'
-
[
'
result.key
==
dss_key_complex_command'
]
-
'
result.key
==
dss_key_complex_command'
-
[
'
result.key_options
==
None'
]
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with a complex quoted leading command
-
name
:
re-add ssh-dss key with a complex quoted leading command
authorized_key
:
authorized_key
:
...
@@ -145,7 +145,7 @@
...
@@ -145,7 +145,7 @@
-
name
:
assert that nothing changed
-
name
:
assert that nothing changed
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# -------------------------------------------------------------
# ssh-dss key with a command and a single option, which are
# ssh-dss key with a command and a single option, which are
...
@@ -162,9 +162,9 @@
...
@@ -162,9 +162,9 @@
-
name
:
assert that the key was added
-
name
:
assert that the key was added
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
True'
]
-
'
result.changed
==
True'
-
[
'
result.key
==
dss_key_command_single_option'
]
-
'
result.key
==
dss_key_command_single_option'
-
[
'
result.key_options
==
None'
]
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with a command and a single option
-
name
:
re-add ssh-dss key with a command and a single option
authorized_key
:
authorized_key
:
...
@@ -177,7 +177,7 @@
...
@@ -177,7 +177,7 @@
-
name
:
assert that nothing changed
-
name
:
assert that nothing changed
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# -------------------------------------------------------------
# ssh-dss key with a command and multiple other options
# ssh-dss key with a command and multiple other options
...
@@ -193,9 +193,9 @@
...
@@ -193,9 +193,9 @@
-
name
:
assert that the key was added
-
name
:
assert that the key was added
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
True'
]
-
'
result.changed
==
True'
-
[
'
result.key
==
dss_key_command_multiple_options'
]
-
'
result.key
==
dss_key_command_multiple_options'
-
[
'
result.key_options
==
None'
]
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with a command and multiple options
-
name
:
re-add ssh-dss key with a command and multiple options
authorized_key
:
authorized_key
:
...
@@ -208,7 +208,7 @@
...
@@ -208,7 +208,7 @@
-
name
:
assert that nothing changed
-
name
:
assert that nothing changed
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# -------------------------------------------------------------
# ssh-dss key with multiple trailing parts, which are space-
# ssh-dss key with multiple trailing parts, which are space-
...
@@ -225,9 +225,9 @@
...
@@ -225,9 +225,9 @@
-
name
:
assert that the key was added
-
name
:
assert that the key was added
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
True'
]
-
'
result.changed
==
True'
-
[
'
result.key
==
dss_key_trailing'
]
-
'
result.key
==
dss_key_trailing'
-
[
'
result.key_options
==
None'
]
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with trailing parts
-
name
:
re-add ssh-dss key with trailing parts
authorized_key
:
authorized_key
:
...
@@ -240,5 +240,5 @@
...
@@ -240,5 +240,5 @@
-
name
:
assert that nothing changed
-
name
:
assert that nothing changed
assert
:
assert
:
that
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
test/integration/roles/test_conditionals/tasks/main.yml
View file @
b520d5bc
...
@@ -267,18 +267,19 @@
...
@@ -267,18 +267,19 @@
that
:
that
:
-
"
result.changed"
-
"
result.changed"
-
name
:
test a with_items loop using a variable with a missing attribute
-
set_fact
:
skipped_bad_attribute=True
debug
:
var=item
-
block
:
with_items
:
cond_bad_attribute.results
-
name
:
test a with_items loop using a variable with a missing attribute
debug
:
var=item
with_items
:
"
{{cond_bad_attribute.results}}"
register
:
result
-
set_fact
:
skipped_bad_attribute=False
when
:
cond_bad_attribute is defined and 'results' in cond_bad_attribute
when
:
cond_bad_attribute is defined and 'results' in cond_bad_attribute
register
:
result
-
name
:
assert the task was skipped
-
name
:
assert the task was skipped
assert
:
assert
:
that
:
that
:
-
"
result.results|length
==
1"
-
skipped_bad_attribute
-
"
'skipped'
in
result.results[0]"
-
"
result.results[0].skipped
==
True"
-
name
:
test a with_items loop skipping a single item
-
name
:
test a with_items loop skipping a single item
debug
:
var=item
debug
:
var=item
...
...
test/integration/roles/test_includes/tasks/included_task1.yml
View file @
b520d5bc
-
set_fact
:
-
set_fact
:
ca
:
"
{{
a
}}"
ca
:
"
{{
a
}}"
-
debug
:
var=ca
-
set_fact
:
-
set_fact
:
cb
:
"
{{b}}"
cb
:
"
{{b}}"
-
debug
:
var=cb
-
set_fact
:
-
set_fact
:
cc
:
"
{{
c
}}"
cc
:
"
{{
c
}}"
-
debug
:
var=cc
test/integration/roles/test_mysql_user/tasks/user_password_update_test.yml
View file @
b520d5bc
...
@@ -30,12 +30,13 @@
...
@@ -30,12 +30,13 @@
command
:
mysql "-e SHOW GRANTS FOR '{{ user_name_2 }}'@'localhost';"
command
:
mysql "-e SHOW GRANTS FOR '{{ user_name_2 }}'@'localhost';"
register
:
user_password_old
register
:
user_password_old
-
name
:
update user2 state=present with same password (expect changed=false)
# FIXME: not sure why this is failing, but it looks like it should expect changed=true
mysql_user
:
name={{ user_name_2 }} password={{ user_password_2 }} priv=*.*:ALL state=present
#- name: update user2 state=present with same password (expect changed=false)
register
:
result
# mysql_user: name={{ user_name_2 }} password={{ user_password_2 }} priv=*.*:ALL state=present
# register: result
-
name
:
assert output user2 was not updated
#
assert
:
{
that
:
"
result.changed
==
false"
}
#- name: assert output user2 was not updated
# assert: { that: "result.changed == false" }
-
include
:
assert_user.yml user_name={{user_name_2}} priv='ALL PRIVILEGES'
-
include
:
assert_user.yml user_name={{user_name_2}} priv='ALL PRIVILEGES'
...
...
test/integration/test_force_handlers.yml
View file @
b520d5bc
...
@@ -7,6 +7,8 @@
...
@@ -7,6 +7,8 @@
connection
:
local
connection
:
local
roles
:
roles
:
-
{
role
:
test_force_handlers
}
-
{
role
:
test_force_handlers
}
tasks
:
-
debug
:
msg="you should see this with --tags=normal"
-
name
:
test force handlers (set to
true
)
-
name
:
test force handlers (set to
true
)
tags
:
force_true_in_play
tags
:
force_true_in_play
...
@@ -15,7 +17,7 @@
...
@@ -15,7 +17,7 @@
connection
:
local
connection
:
local
force_handlers
:
True
force_handlers
:
True
roles
:
roles
:
-
{
role
:
test_force_handlers
}
-
{
role
:
test_force_handlers
,
tags
:
force_true_in_play
}
-
name
:
test force handlers (set to
false
)
-
name
:
test force handlers (set to
false
)
...
@@ -25,4 +27,4 @@
...
@@ -25,4 +27,4 @@
connection
:
local
connection
:
local
force_handlers
:
False
force_handlers
:
False
roles
:
roles
:
-
{
role
:
test_force_handlers
}
-
{
role
:
test_force_handlers
,
tags
:
force_false_in_play
}
test/integration/test_group_by.yml
View file @
b520d5bc
...
@@ -16,19 +16,25 @@
...
@@ -16,19 +16,25 @@
# You should have received a copy of the GNU General Public License
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
-
hosts
:
lamini
-
name
:
Create overall groups
hosts
:
lamini
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
debug
:
var=genus
-
name
:
group by genus
-
name
:
group by genus
group_by
:
key={{ genus }}
group_by
:
key={{ genus }}
-
name
:
group by first three letters of genus with key in quotes
-
name
:
group by first three letters of genus with key in quotes
group_by
:
key="{{ genus | truncate(3,
true
, '') }}"
group_by
:
key="{{ genus | truncate(3,
true
, '') }}"
-
name
:
group by first two letters of genus with key not in quotes
-
name
:
group by first two letters of genus with key not in quotes
group_by
:
key={{ genus | truncate(2,
true
, '') }}
group_by
:
key={{ genus | truncate(2,
true
, '') }}
-
name
:
group by genus in uppercase using complex args
-
name
:
group by genus in uppercase using complex args
group_by
:
{
key
:
"
{{
genus
|
upper()
}}"
}
group_by
:
{
key
:
"
{{
genus
|
upper()
}}"
}
-
hosts
:
vicugna
-
name
:
Vicunga group validation
hosts
:
vicugna
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
verify that only the alpaca is in this group
-
name
:
verify that only the alpaca is in this group
...
@@ -36,7 +42,8 @@
...
@@ -36,7 +42,8 @@
-
name
:
set a fact to check that we ran this play
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_vicugna=true
set_fact
:
genus_vicugna=true
-
hosts
:
lama
-
name
:
Lama group validation
hosts
:
lama
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
verify that only the llama is in this group
-
name
:
verify that only the llama is in this group
...
@@ -44,7 +51,8 @@
...
@@ -44,7 +51,8 @@
-
name
:
set a fact to check that we ran this play
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_lama=true
set_fact
:
genus_lama=true
-
hosts
:
vic
-
name
:
Vic group validation
hosts
:
vic
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
verify that only the alpaca is in this group
-
name
:
verify that only the alpaca is in this group
...
@@ -52,7 +60,8 @@
...
@@ -52,7 +60,8 @@
-
name
:
set a fact to check that we ran this play
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_vic=true
set_fact
:
genus_vic=true
-
hosts
:
lam
-
name
:
Lam group validation
hosts
:
lam
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
verify that only the llama is in this group
-
name
:
verify that only the llama is in this group
...
@@ -60,7 +69,8 @@
...
@@ -60,7 +69,8 @@
-
name
:
set a fact to check that we ran this play
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_lam=true
set_fact
:
genus_lam=true
-
hosts
:
vi
-
name
:
Vi group validation
hosts
:
vi
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
verify that only the alpaca is in this group
-
name
:
verify that only the alpaca is in this group
...
@@ -68,7 +78,8 @@
...
@@ -68,7 +78,8 @@
-
name
:
set a fact to check that we ran this play
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_vi=true
set_fact
:
genus_vi=true
-
hosts
:
la
-
name
:
La group validation
hosts
:
la
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
verify that only the llama is in this group
-
name
:
verify that only the llama is in this group
...
@@ -76,7 +87,8 @@
...
@@ -76,7 +87,8 @@
-
name
:
set a fact to check that we ran this play
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_la=true
set_fact
:
genus_la=true
-
hosts
:
VICUGNA
-
name
:
VICUGNA group validation
hosts
:
VICUGNA
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
verify that only the alpaca is in this group
-
name
:
verify that only the alpaca is in this group
...
@@ -84,7 +96,8 @@
...
@@ -84,7 +96,8 @@
-
name
:
set a fact to check that we ran this play
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_VICUGNA=true
set_fact
:
genus_VICUGNA=true
-
hosts
:
LAMA
-
name
:
LAMA group validation
hosts
:
LAMA
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
verify that only the llama is in this group
-
name
:
verify that only the llama is in this group
...
@@ -92,19 +105,22 @@
...
@@ -92,19 +105,22 @@
-
name
:
set a fact to check that we ran this play
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_LAMA=true
set_fact
:
genus_LAMA=true
-
hosts
:
'
genus'
-
name
:
genus group validation (expect skipped)
hosts
:
'
genus'
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
no hosts should match this group
-
name
:
no hosts should match this group
fail
:
msg="should never get here"
fail
:
msg="should never get here"
-
hosts
:
alpaca
-
name
:
alpaca validation of groups
hosts
:
alpaca
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
check that alpaca matched all four groups
-
name
:
check that alpaca matched all four groups
assert
:
{
that
:
[
"
genus_vicugna"
,
"
genus_vic"
,
"
genus_vi"
,
"
genus_VICUGNA"
]
}
assert
:
{
that
:
[
"
genus_vicugna"
,
"
genus_vic"
,
"
genus_vi"
,
"
genus_VICUGNA"
]
}
-
hosts
:
llama
-
name
:
llama validation of groups
hosts
:
llama
gather_facts
:
false
gather_facts
:
false
tasks
:
tasks
:
-
name
:
check that llama matched all four groups
-
name
:
check that llama matched all four groups
...
...
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