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):
)
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"
)
parser
.
add_option
(
'--flush-cache'
,
dest
=
'flush_cache'
,
action
=
'store_true'
,
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
DEFAULT_EXECUTABLE
=
get_config
(
p
,
DEFAULTS
,
'executable'
,
'ANSIBLE_EXECUTABLE'
,
'/bin/sh'
)
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_FORCE_HANDLERS
=
get_config
(
p
,
DEFAULTS
,
'force_handlers'
,
'ANSIBLE_FORCE_HANDLERS'
,
False
,
boolean
=
True
)
# selinux
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:
self
.
su_pass
=
None
# general flags (should we move out?)
self
.
verbosity
=
0
self
.
only_tags
=
set
()
self
.
skip_tags
=
set
()
self
.
no_log
=
False
self
.
check_mode
=
False
self
.
verbosity
=
0
self
.
only_tags
=
set
()
self
.
skip_tags
=
set
()
self
.
no_log
=
False
self
.
check_mode
=
False
self
.
force_handlers
=
False
#TODO: just pull options setup to above?
# set options before play to allow play to override them
...
...
@@ -195,21 +196,23 @@ class ConnectionInformation:
self
.
connection
=
play
.
connection
if
play
.
remote_user
:
self
.
remote_user
=
play
.
remote_user
self
.
remote_user
=
play
.
remote_user
if
play
.
port
:
self
.
port
=
int
(
play
.
port
)
self
.
port
=
int
(
play
.
port
)
if
play
.
become
is
not
None
:
self
.
become
=
play
.
become
self
.
become
=
play
.
become
if
play
.
become_method
:
self
.
become_method
=
play
.
become_method
if
play
.
become_user
:
self
.
become_user
=
play
.
become_user
self
.
become_user
=
play
.
become_user
# non connection related
self
.
no_log
=
play
.
no_log
self
.
environment
=
play
.
environment
self
.
no_log
=
play
.
no_log
self
.
environment
=
play
.
environment
if
play
.
force_handlers
is
not
None
:
self
.
force_handlers
=
play
.
force_handlers
def
set_options
(
self
,
options
):
'''
...
...
@@ -236,6 +239,8 @@ class ConnectionInformation:
# self.no_log = boolean(options.no_log)
if
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
# 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):
self
.
_send_result
((
'add_host'
,
result_item
))
elif
'add_group'
in
result_item
:
# 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
:
# if this task is registering facts, do that now
item
=
result_item
.
get
(
'item'
,
None
)
...
...
lib/ansible/playbook/play.py
View file @
b520d5bc
...
...
@@ -78,6 +78,7 @@ class Play(Base, Taggable, Become):
# Flag/Setting Attributes
_any_errors_fatal
=
FieldAttribute
(
isa
=
'bool'
,
default
=
False
)
_force_handlers
=
FieldAttribute
(
isa
=
'bool'
)
_max_fail_percentage
=
FieldAttribute
(
isa
=
'string'
,
default
=
'0'
)
_serial
=
FieldAttribute
(
isa
=
'int'
,
default
=
0
)
_strategy
=
FieldAttribute
(
isa
=
'string'
,
default
=
'linear'
)
...
...
@@ -210,7 +211,7 @@ class Play(Base, Taggable, Become):
roles
=
[]
for
ri
in
role_includes
:
roles
.
append
(
Role
.
load
(
ri
))
roles
.
append
(
Role
.
load
(
ri
,
play
=
self
))
return
roles
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():
class
Role
(
Base
,
Become
,
Conditional
,
Taggable
):
def
__init__
(
self
):
def
__init__
(
self
,
play
=
None
):
self
.
_role_name
=
None
self
.
_role_path
=
None
self
.
_role_params
=
dict
()
self
.
_loader
=
None
self
.
_metadata
=
None
self
.
_play
=
None
self
.
_play
=
play
self
.
_parents
=
[]
self
.
_dependencies
=
[]
self
.
_task_blocks
=
[]
...
...
@@ -103,7 +103,7 @@ class Role(Base, Become, Conditional, Taggable):
return
self
.
_role_name
@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
try
:
# The ROLE_CACHE is a dictionary of role names, with each entry
...
...
@@ -112,7 +112,10 @@ class Role(Base, Become, Conditional, Taggable):
# We use frozenset to make the dictionary hashable.
#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
:
for
(
entry
,
role_obj
)
in
ROLE_CACHE
[
role_include
.
role
]
.
iteritems
():
if
hashed_params
==
entry
:
...
...
@@ -120,7 +123,7 @@ class Role(Base, Become, Conditional, Taggable):
role_obj
.
add_parent
(
parent_role
)
return
role_obj
r
=
Role
()
r
=
Role
(
play
=
play
)
r
.
_load_role_data
(
role_include
,
parent_role
=
parent_role
)
if
role_include
.
role
not
in
ROLE_CACHE
:
...
...
@@ -174,11 +177,11 @@ class Role(Base, Become, Conditional, Taggable):
task_data
=
self
.
_load_role_yaml
(
'tasks'
)
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'
)
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
self
.
_role_vars
=
self
.
_load_role_yaml
(
'vars'
)
...
...
@@ -227,7 +230,7 @@ class Role(Base, Become, Conditional, Taggable):
deps
=
[]
if
self
.
_metadata
:
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
)
return
deps
...
...
lib/ansible/plugins/strategies/__init__.py
View file @
b520d5bc
...
...
@@ -207,11 +207,8 @@ class StrategyBase:
self
.
_add_host
(
new_host_info
)
elif
result
[
0
]
==
'add_group'
:
host
=
result
[
1
]
task_result
=
result
[
2
]
group_name
=
task_result
.
get
(
'add_group'
)
self
.
_add_group
(
host
,
group_name
)
task
=
result
[
1
]
self
.
_add_group
(
task
,
iterator
)
elif
result
[
0
]
==
'notify_handler'
:
host
=
result
[
1
]
...
...
@@ -272,11 +269,12 @@ class StrategyBase:
ret_results
=
[]
debug
(
"waiting for pending results..."
)
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
)
ret_results
.
extend
(
results
)
time
.
sleep
(
0.01
)
debug
(
"no more pending results, returning what we have"
)
return
ret_results
...
...
@@ -324,29 +322,45 @@ class StrategyBase:
# FIXME: is this still required?
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
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
# serialized/cloned copy and we'll need to look up the proper
# 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
new_group
.
add_host
(
actual_host
)
return
changed
def
_load_included_file
(
self
,
included_file
,
iterator
):
'''
...
...
@@ -398,13 +412,14 @@ class StrategyBase:
for
handler
in
handler_block
.
block
:
handler_name
=
handler
.
get_name
()
if
handler_name
in
self
.
_notified_handlers
and
len
(
self
.
_notified_handlers
[
handler_name
]):
if
not
len
(
self
.
get_hosts_remaining
(
iterator
.
_play
)):
self
.
_tqm
.
send_callback
(
'v2_playbook_on_no_hosts_remaining'
)
result
=
False
break
# FIXME: need to use iterator.get_failed_hosts() instead?
#if not len(self.get_hosts_remaining(iterator._play)):
# self._tqm.send_callback('v2_playbook_on_no_hosts_remaining')
# result = False
# break
self
.
_tqm
.
send_callback
(
'v2_playbook_on_handler_task_start'
,
handler
)
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
.
add_tqm_variables
(
task_vars
,
play
=
iterator
.
_play
)
self
.
_queue_task
(
host
,
handler
,
task_vars
,
connection_info
)
...
...
lib/ansible/vars/__init__.py
View file @
b520d5bc
...
...
@@ -245,6 +245,9 @@ class VariableManager:
all_vars
[
'omit'
]
=
self
.
_omit_token
# 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
()
#CACHED_VARS[cache_entry] = all_vars
...
...
lib/ansible/vars/hostvars.py
View file @
b520d5bc
...
...
@@ -39,6 +39,6 @@ class HostVars(dict):
host
=
self
.
_inventory
.
get_host
(
host_name
)
result
=
self
.
_vars_manager
.
get_vars
(
loader
=
self
.
_loader
,
play
=
self
.
_play
,
host
=
host
)
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
]
test/integration/non_destructive.yml
View file @
b520d5bc
...
...
@@ -11,10 +11,18 @@
gather_facts
:
True
roles
:
-
{
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_stat
,
tags
:
test_stat
}
-
{
role
:
test_template
,
tags
:
test_template
}
-
{
role
:
test_special_vars
,
tags
:
test_special_vars
}
-
{
role
:
test_file
,
tags
:
test_file
}
-
{
role
:
test_fetch
,
tags
:
test_fetch
}
-
{
role
:
test_synchronize
,
tags
:
test_synchronize
}
...
...
@@ -22,20 +30,12 @@
-
{
role
:
test_subversion
,
tags
:
test_subversion
}
-
{
role
:
test_git
,
tags
:
test_git
}
-
{
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_ignore_errors
,
tags
:
test_ignore_errors
}
-
{
role
:
test_unarchive
,
tags
:
test_unarchive
}
-
{
role
:
test_filters
,
tags
:
test_filters
}
-
{
role
:
test_facts_d
,
tags
:
test_facts_d
}
-
{
role
:
test_conditionals
,
tags
:
test_conditionals
}
-
{
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_failed_when
,
tags
:
test_failed_when
}
-
{
role
:
test_script
,
tags
:
test_script
}
-
{
role
:
test_authorized_key
,
tags
:
test_authorized_key
}
-
{
role
:
test_get_url
,
tags
:
test_get_url
}
...
...
test/integration/roles/test_authorized_key/tasks/main.yml
View file @
b520d5bc
...
...
@@ -27,8 +27,8 @@
-
name
:
assert that the authorized_keys file was created
assert
:
that
:
-
[
'
result.changed
==
True'
]
-
[
'
result.state
==
"file"'
]
-
'
result.changed
==
True'
-
'
result.state
==
"file"'
# -------------------------------------------------------------
# basic ssh-dss key
...
...
@@ -40,9 +40,9 @@
-
name
:
assert that the key was added
assert
:
that
:
-
[
'
result.changed
==
True'
]
-
[
'
result.key
==
dss_key_basic'
]
-
[
'
result.key_options
==
None'
]
-
'
result.changed
==
True'
-
'
result.key
==
dss_key_basic'
-
'
result.key_options
==
None'
-
name
:
re-add basic ssh-dss key
authorized_key
:
user=root key="{{ dss_key_basic }}" state=present path="{{output_dir|expanduser}}/authorized_keys"
...
...
@@ -51,7 +51,7 @@
-
name
:
assert that nothing changed
assert
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# ssh-dss key with an unquoted option
...
...
@@ -67,9 +67,9 @@
-
name
:
assert that the key was added
assert
:
that
:
-
[
'
result.changed
==
True'
]
-
[
'
result.key
==
dss_key_unquoted_option'
]
-
[
'
result.key_options
==
None'
]
-
'
result.changed
==
True'
-
'
result.key
==
dss_key_unquoted_option'
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with an unquoted option
authorized_key
:
...
...
@@ -82,7 +82,7 @@
-
name
:
assert that nothing changed
assert
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# ssh-dss key with a leading command="/bin/foo"
...
...
@@ -98,9 +98,9 @@
-
name
:
assert that the key was added
assert
:
that
:
-
[
'
result.changed
==
True'
]
-
[
'
result.key
==
dss_key_command'
]
-
[
'
result.key_options
==
None'
]
-
'
result.changed
==
True'
-
'
result.key
==
dss_key_command'
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with a leading command
authorized_key
:
...
...
@@ -113,7 +113,7 @@
-
name
:
assert that nothing changed
assert
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# ssh-dss key with a complex quoted leading command
...
...
@@ -130,9 +130,9 @@
-
name
:
assert that the key was added
assert
:
that
:
-
[
'
result.changed
==
True'
]
-
[
'
result.key
==
dss_key_complex_command'
]
-
[
'
result.key_options
==
None'
]
-
'
result.changed
==
True'
-
'
result.key
==
dss_key_complex_command'
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with a complex quoted leading command
authorized_key
:
...
...
@@ -145,7 +145,7 @@
-
name
:
assert that nothing changed
assert
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# ssh-dss key with a command and a single option, which are
...
...
@@ -162,9 +162,9 @@
-
name
:
assert that the key was added
assert
:
that
:
-
[
'
result.changed
==
True'
]
-
[
'
result.key
==
dss_key_command_single_option'
]
-
[
'
result.key_options
==
None'
]
-
'
result.changed
==
True'
-
'
result.key
==
dss_key_command_single_option'
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with a command and a single option
authorized_key
:
...
...
@@ -177,7 +177,7 @@
-
name
:
assert that nothing changed
assert
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# ssh-dss key with a command and multiple other options
...
...
@@ -193,9 +193,9 @@
-
name
:
assert that the key was added
assert
:
that
:
-
[
'
result.changed
==
True'
]
-
[
'
result.key
==
dss_key_command_multiple_options'
]
-
[
'
result.key_options
==
None'
]
-
'
result.changed
==
True'
-
'
result.key
==
dss_key_command_multiple_options'
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with a command and multiple options
authorized_key
:
...
...
@@ -208,7 +208,7 @@
-
name
:
assert that nothing changed
assert
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
# -------------------------------------------------------------
# ssh-dss key with multiple trailing parts, which are space-
...
...
@@ -225,9 +225,9 @@
-
name
:
assert that the key was added
assert
:
that
:
-
[
'
result.changed
==
True'
]
-
[
'
result.key
==
dss_key_trailing'
]
-
[
'
result.key_options
==
None'
]
-
'
result.changed
==
True'
-
'
result.key
==
dss_key_trailing'
-
'
result.key_options
==
None'
-
name
:
re-add ssh-dss key with trailing parts
authorized_key
:
...
...
@@ -240,5 +240,5 @@
-
name
:
assert that nothing changed
assert
:
that
:
-
[
'
result.changed
==
False'
]
-
'
result.changed
==
False'
test/integration/roles/test_conditionals/tasks/main.yml
View file @
b520d5bc
...
...
@@ -267,18 +267,19 @@
that
:
-
"
result.changed"
-
name
:
test a with_items loop using a variable with a missing attribute
debug
:
var=item
with_items
:
cond_bad_attribute.results
-
set_fact
:
skipped_bad_attribute=True
-
block
:
-
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
register
:
result
-
name
:
assert the task was skipped
assert
:
that
:
-
"
result.results|length
==
1"
-
"
'skipped'
in
result.results[0]"
-
"
result.results[0].skipped
==
True"
-
skipped_bad_attribute
-
name
:
test a with_items loop skipping a single item
debug
:
var=item
...
...
test/integration/roles/test_includes/tasks/included_task1.yml
View file @
b520d5bc
-
set_fact
:
ca
:
"
{{
a
}}"
-
debug
:
var=ca
-
set_fact
:
cb
:
"
{{b}}"
-
debug
:
var=cb
-
set_fact
:
cc
:
"
{{
c
}}"
-
debug
:
var=cc
test/integration/roles/test_mysql_user/tasks/user_password_update_test.yml
View file @
b520d5bc
...
...
@@ -30,12 +30,13 @@
command
:
mysql "-e SHOW GRANTS FOR '{{ user_name_2 }}'@'localhost';"
register
:
user_password_old
-
name
:
update user2 state=present with same password (expect changed=false)
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"
}
# FIXME: not sure why this is failing, but it looks like it should expect changed=true
#- name: update user2 state=present with same password (expect changed=false)
# 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" }
-
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 @@
connection
:
local
roles
:
-
{
role
:
test_force_handlers
}
tasks
:
-
debug
:
msg="you should see this with --tags=normal"
-
name
:
test force handlers (set to
true
)
tags
:
force_true_in_play
...
...
@@ -15,7 +17,7 @@
connection
:
local
force_handlers
:
True
roles
:
-
{
role
:
test_force_handlers
}
-
{
role
:
test_force_handlers
,
tags
:
force_true_in_play
}
-
name
:
test force handlers (set to
false
)
...
...
@@ -25,4 +27,4 @@
connection
:
local
force_handlers
:
False
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 @@
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
-
hosts
:
lamini
-
name
:
Create overall groups
hosts
:
lamini
gather_facts
:
false
tasks
:
-
debug
:
var=genus
-
name
:
group by genus
group_by
:
key={{ genus }}
-
name
:
group by first three letters of genus with key in quotes
group_by
:
key="{{ genus | truncate(3,
true
, '') }}"
-
name
:
group by first two letters of genus with key not in quotes
group_by
:
key={{ genus | truncate(2,
true
, '') }}
-
name
:
group by genus in uppercase using complex args
group_by
:
{
key
:
"
{{
genus
|
upper()
}}"
}
-
hosts
:
vicugna
-
name
:
Vicunga group validation
hosts
:
vicugna
gather_facts
:
false
tasks
:
-
name
:
verify that only the alpaca is in this group
...
...
@@ -36,7 +42,8 @@
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_vicugna=true
-
hosts
:
lama
-
name
:
Lama group validation
hosts
:
lama
gather_facts
:
false
tasks
:
-
name
:
verify that only the llama is in this group
...
...
@@ -44,7 +51,8 @@
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_lama=true
-
hosts
:
vic
-
name
:
Vic group validation
hosts
:
vic
gather_facts
:
false
tasks
:
-
name
:
verify that only the alpaca is in this group
...
...
@@ -52,7 +60,8 @@
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_vic=true
-
hosts
:
lam
-
name
:
Lam group validation
hosts
:
lam
gather_facts
:
false
tasks
:
-
name
:
verify that only the llama is in this group
...
...
@@ -60,7 +69,8 @@
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_lam=true
-
hosts
:
vi
-
name
:
Vi group validation
hosts
:
vi
gather_facts
:
false
tasks
:
-
name
:
verify that only the alpaca is in this group
...
...
@@ -68,7 +78,8 @@
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_vi=true
-
hosts
:
la
-
name
:
La group validation
hosts
:
la
gather_facts
:
false
tasks
:
-
name
:
verify that only the llama is in this group
...
...
@@ -76,7 +87,8 @@
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_la=true
-
hosts
:
VICUGNA
-
name
:
VICUGNA group validation
hosts
:
VICUGNA
gather_facts
:
false
tasks
:
-
name
:
verify that only the alpaca is in this group
...
...
@@ -84,7 +96,8 @@
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_VICUGNA=true
-
hosts
:
LAMA
-
name
:
LAMA group validation
hosts
:
LAMA
gather_facts
:
false
tasks
:
-
name
:
verify that only the llama is in this group
...
...
@@ -92,19 +105,22 @@
-
name
:
set a fact to check that we ran this play
set_fact
:
genus_LAMA=true
-
hosts
:
'
genus'
-
name
:
genus group validation (expect skipped)
hosts
:
'
genus'
gather_facts
:
false
tasks
:
-
name
:
no hosts should match this group
fail
:
msg="should never get here"
-
hosts
:
alpaca
-
name
:
alpaca validation of groups
hosts
:
alpaca
gather_facts
:
false
tasks
:
-
name
:
check that alpaca matched all four groups
assert
:
{
that
:
[
"
genus_vicugna"
,
"
genus_vic"
,
"
genus_vi"
,
"
genus_VICUGNA"
]
}
-
hosts
:
llama
-
name
:
llama validation of groups
hosts
:
llama
gather_facts
:
false
tasks
:
-
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