Commit Graph

814 Commits (d9dcb2a427f4041f121950668c4ae40b0042c0d6)

Author SHA1 Message Date
James Cammarata d02dee37a1 Disallow setting state on template tasks
Fixes #14056
2016-01-21 15:02:24 -05:00
James Cammarata 627dec716b Template the run_once value in the linear strategy as we use it there
This is pre-post_validation, so we have to template it on the fly
as we use it to determine if we bypass the host loop.

Fixes #11876
2016-01-20 20:54:12 -05:00
Brian Coca c2ac1507ea corrected host/group match in inventory_hostnames
now the lookup works when using ! and & operators
fixes #13997
2016-01-20 18:32:39 -05:00
James Cammarata 9b05a670c7 Merge pull request #14031 from selivan/devel
plugins/strategy: added significant details to parser error message.
2016-01-20 15:49:38 -05:00
James Cammarata 54cde0d082 Standardize removal of BECOME-SUCCESS method and use it for async too
Fixes #13965
Fixes #13971
2016-01-20 15:27:28 -05:00
Selivanov Pavel 3201f5d90e plugins/strategy: added significant details to parser error message.
See discussion at
https://github.com/ansible/ansible/issues/13753
2016-01-20 23:12:26 +03:00
Brian Coca cc4506b451 Merge pull request #14006 from bcoca/always_shell_again
go back to always wrapping commands in shell
2016-01-20 13:17:34 -05:00
James Cammarata ac89b0de7a Fix incorrect handling of any_errors_fatal in the linear strategy
Instead of bombing out of the strategy, we now properly mark hosts failed
so that the play iterator can handle block rescue/always properly.

Fixes #14024
2016-01-20 12:16:27 -05:00
Brian Coca c09c01a1f5 go back to defaulting wrapping commands in shell
this was taken out in an effort to default to the user's shell but creates issues as this is not known ahead of time
and its painful to set executable and shell_type for all servers, it should only be needed for those that restrict the user
to specific shells and when /bin/sh is not available. raw and command may still bypass this by explicitly passing None.
fixes #13882

still conditional
2016-01-19 22:09:17 -05:00
Toshio Kuratomi ca8261ed31 Don't tracback trying to retore settings
Can occur if we exit the timeout before the settings were changed
2016-01-19 14:09:22 -08:00
Toshio Kuratomi 5e18bc5955 Turn results that come from traceback messages into unicode, not str.
Fixes #13964
Fixes #13967
2016-01-18 14:43:55 -08:00
Toshio Kuratomi ded02b4968 Fix proposed by @Yannig to fix become success detection when the output is multiline
See the Bug report for a specific error case with local connection,
sudo, and the raw module

Fixes #13728
2016-01-18 13:48:37 -08:00
James Cammarata b5058736ce Fix set_fact + run_once to assign variables to all hosts in the list
Fixes #13921
2016-01-18 14:50:20 -05:00
Toshio Kuratomi 36aa89ac7e Fix erroneous fetch fail when fail_on_missing is set to False
Fixes #13832
2016-01-15 16:28:17 -08:00
Brian Coca a2a23c14ac Merge pull request #13901 from bcoca/add_hosts_fix
fix issue with add_hosts overwriting existing vars
2016-01-15 14:22:26 -05:00
James Cammarata 1825b4a9c7 Fix any_errors_fatal incorrect implementation in 2.0
Also adds that flag to blocks.

Fixes #13744
2016-01-15 13:15:10 -05:00
Toshio Kuratomi 1b82de2354 Non-newstyle modules can't use pipelining
This is because we pass arguments to non-newstyle modules via an
external file.  If we pipeline, then the interpreter thinks it has to
run the arguments as the script instead of what is piped in via stdin.
2016-01-14 17:21:15 -08:00
Brian Coca c2d314dec5 fix issue with add_hosts overwriting existing vars
fixes github.com/ansible/ansible-modules-core/issues/2799 and is alternative to #13841
2016-01-14 17:55:44 -05:00
Brian Coca 94fa9c2a7a test aliases to enable gramatical consistancy
keeps backwards compat by not removing the previouslly non grammer matching states
and introduces new ones so user can decide which one he wants
(or keep both and still be inconsistent to annoy those that care)
2016-01-14 12:29:02 -05:00
Brian Coca c14eece0c6 md5 now uses smaller salt
fixes #13891
2016-01-14 10:24:34 -05:00
Alexey Shabalin 9be8ecda06 Add support ssh configs from /etc/openssh.
In Altlinux system config dir for openssh is /etc/openssh.
2016-01-14 13:01:49 +03:00
Brian Coca cf9dfde15b Merge pull request #13751 from bcoca/module_internal_options
pass diff and verbosity settings to modules
2016-01-12 11:49:48 -05:00
Brian Coca c91df36ebe added module name to missing interpreter error
fixes #13816
2016-01-12 11:25:11 -05:00
Matt Martz 5f0a348447 Restore ability for a module to specify WANT_JSON 2016-01-08 11:37:28 -06:00
nitzmahone 45355cd566 convert winrm put_file script template to Unicode string literal
Fixes traceback on homedirs with non-ascii chars
2016-01-07 16:23:55 -08:00
Brian Coca b7dcd7a3a0 pass diff and verbosity settings to modules
also simplifies and guarantees that all flags are always passed, even when false
this should make checks simpler as you always expect them to exist
2016-01-07 01:37:19 -05:00
Toshio Kuratomi 46903c80fa More fixes for unicode handling in the connection plugins.
Tested that ssh, docker, local, lxc-libvirt, chroot all work with the
updated unicode integration test.
2016-01-06 15:19:40 -08:00
James Cammarata 90cb7e1937 Don't drop noops from task counting code in linear strategy 2016-01-06 14:02:33 -05:00
Tomasz Kontusz 9ac9c75d76 linear strategy: don't look at tasks from the next block 2016-01-06 14:02:33 -05:00
James Cammarata dc47c25e58 Minor tweak to ensure diff is not empty in callback for file diffs 2016-01-05 22:01:01 -05:00
Brian Coca 095790ac5c Merge pull request #13691 from bcoca/colors
output color is now configurable
2016-01-05 14:33:01 -05:00
Brian Coca f3c45adfb8 simplified diff handling in callback
no need for the copy or other complexity
2016-01-05 14:26:38 -05:00
Brian Coca 9972c27a9b now handles 'non file diffs'
this allows modules to pass back a 'diff' dict and it will still show using the file interface
2016-01-05 14:26:38 -05:00
Toshio Kuratomi c0a8cd950b Fix problems with non-ascii values passed as part of the command to connection plugins
@drybjed discovered this with non-ascii environment variables and
command line arguments to script and raw module.
2016-01-04 20:35:25 -08:00
Toshio Kuratomi 8d57ffd16b Revert "Transform the command we pass to subprocess into a byte string in _low_level-exec_command"
This reverts commit 0c013f592a.

Going to do this in the connection plugin
2016-01-04 19:25:40 -08:00
Toshio Kuratomi 559ba467c0 Revert "Convert to bytes later so that make_become_command can jsut operate on text type."
This reverts commit c4da5840b5.

Going to do this in the connection plugins
2016-01-04 19:25:40 -08:00
Michael Scherer 8599c56670 Do not set 'changed' to True when using group_by
Since group_by is not changing in any way to the remote
system, there is no change. This also make things more consistent
with the set_fact plugin.
2016-01-04 17:46:40 +01:00
James Cammarata 210cf06d9a Tweak how strategies evaluate failed hosts via the iterator and bug fixes
* Added additional methods to the iterator code to assess host failures
  while also taking into account the block rescue/always states
* Fixed bugs in the free strategy, where results were not always being
  processed after being collected
* Added some prettier printing to the state output from iterator

Fixes #13699
2016-01-02 01:00:12 -05:00
James Cammarata e39e8ba308 Fix logic mistake in unarchive action plugin 2015-12-30 13:49:39 -05:00
Brian Coca d3deb24ead output color is now configurable 2015-12-29 17:40:47 -05:00
James Cammarata 2d11cfab92 Squashed commit of the following:
commit 24efa310b58c431b4d888a6315d1285da918f670
Author: James Cammarata <jimi@sngx.net>
Date:   Tue Dec 29 11:23:52 2015 -0500

    Adding an additional test for copy exclusion

    Adds a negative test for the situation when an exclusion doesn't
    exist in the target to be copied.

commit 643ba054877cf042177d65e6e2958178bdd2fe88
Merge: e6ee59f 66a8f7e
Author: James Cammarata <jimi@sngx.net>
Date:   Tue Dec 29 10:59:18 2015 -0500

    Merge branch 'speedup' of https://github.com/chrismeyersfsu/ansible into chrismeyersfsu-speedup

commit 66a8f7e873ca90f7848e47b04d9b62aed23a45df
Author: Chris Meyers <chris.meyers.fsu@gmail.com>
Date:   Mon Dec 28 09:47:00 2015 -0500

    better api and tests added

    * _copy_results = deepcopy for better performance
    * _copy_results_exclude to deepcopy but exclude certain fields. Pop
    fields that do not need to be deep copied. Re-assign popped fields
    after deep copy so we don't modify the original, to be copied, object.
    * _copy_results_exclude unit tests

commit 93490960ff4e75f38a7cc6f6d49f10f949f1a7da
Author: Chris Meyers <chris.meyers.fsu@gmail.com>
Date:   Fri Dec 25 23:17:26 2015 -0600

    remove uneeded deepcopy fields
2015-12-29 11:40:18 -05:00
Brian Coca 957b376f9e better module error handling
* now module errors clearly state msg=MODULE FAILURE
* module's stdout and stderr go into module_stdout and module_stderr keys
which only appear during parsing failure
* invocation module_args are deleted from results provided by action
plugin as errors can keep us from overwriting and then disclosing info that
was meant to be kept hidden due to no_log
* fixed invocation module_args set by basic.py as it was creating different
keys as the invocation in action plugin base.
* results now merge
2015-12-22 23:01:56 -05:00
Toshio Kuratomi c4da5840b5 Convert to bytes later so that make_become_command can jsut operate on text type. 2015-12-22 08:22:02 -08:00
Toshio Kuratomi 0c013f592a Transform the command we pass to subprocess into a byte string in _low_level-exec_command 2015-12-21 13:53:35 -08:00
Brian Coca 75e94e0cba allow for non standard hostnames
* Changed parse_addresses to throw exceptions instead of passing None
* Switched callers to trap and pass through the original values.
* Added very verbose notice
* Look at deprecating this and possibly validate at plugin instead
fixes #13608
2015-12-21 13:42:34 -05:00
Toshio Kuratomi 8ffc1fa838 Comment to explain why we strip _ansible_notify specially 2015-12-19 11:31:46 -08:00
Toshio Kuratomi 2936682f00 Revert "removed invocation info as it is not no_log aware"
This reverts commit 6127a8585e.
2015-12-19 11:09:20 -08:00
Brian Coca 6127a8585e removed invocation info as it is not no_log aware
This was added in 1.9 and 2.0 tried to copy, but since it cannot
obey no_log restrictions I commented it out. I did not remove as
it is still very useful for module invocation debugging.
2015-12-19 11:48:48 -05:00
James Cammarata e546219426 Revert "Enable host_key checking at the strategy level"
This reverts commit 1a6d660d7e285cceec474952a33af4d8dffd0a8d.
2015-12-17 12:43:47 -05:00
James Cammarata 586208234c Revert "Fixing bugs in ssh known_host fetching"
This reverts commit 21c127c581.
2015-12-17 12:43:47 -05:00
James Cammarata 21c127c581 Fixing bugs in ssh known_host fetching
* If remote_addr is not set in the PlayContext, use the host.address
  field instead (which is how the action plugin works)

Fixes #13581
2015-12-17 12:06:17 -05:00
James Cammarata d9c74536be Fix handling of environment inheritence, and template each inherited env
Environments were not being templated individually, so a variable environment
value was causing the exception regarding dicts to be hit. Also, environments
as inherited were coming through with the tasks listed first, followed by the
parents, so they were being merged backwards. Reversing the list of environments
fixed this.
2015-12-17 09:44:40 -05:00
James Cammarata e5c2c03dea Enable host_key checking at the strategy level
Implements a new method in the ssh connection plugin (fetch_and_store_key)
which is used to prefetch the key using ssh-keyscan.
2015-12-16 21:41:07 -05:00
James Cammarata 15135f3c16 Make sure we're using the original host when processing include results
Also fixes a bug where we were passing an incorrect number of parameters to
_do_handler_run() when processing an include file in a handler task/block.

Fixes #13560
2015-12-16 19:13:45 -05:00
James Cammarata 857456ea5f Fixing template integration test for python 2.6 versions
No longer immediately fallback to to_json if simplejson is not installed
2015-12-16 18:22:22 -05:00
Brian Coca 97275110d7 Merge pull request #13533 from bcoca/debug_fixes
debug now validates its params
2015-12-16 10:36:20 -05:00
James Cammarata fcc9258b74 Use the original host rather than the serialized one when processing results
Fixes #13526
Fixes #13564
Fixes #13566
2015-12-16 01:48:22 -05:00
Brian Coca be5488cb60 clean debug output to match prev versions 2015-12-15 09:27:53 -05:00
Toshio Kuratomi 8d16638fec Fix for template module not creating a file that was not present when force=false 2015-12-14 10:55:21 -08:00
James Cammarata f8ff63f8c8 A few tweaks to improve new forking code 2015-12-14 03:06:52 -05:00
Toshio Kuratomi 2bc3683d41 Restore comment about for-else since it is an uncommon idiom 2015-12-13 05:55:31 -08:00
Brian Coca d73562902b debug now validates its params
simplified var handling
made default message the same as in pre 2.0
fixes #13532
2015-12-13 00:13:13 -05:00
Brian Coca f3bedbae29 simplified skippy
thanks agaffney!
2015-12-12 17:50:55 -05:00
Brian Coca 99e46440bd changed shell delimiters for csh
fixes #13459
2015-12-12 16:10:18 -05:00
James Cammarata 120b9a7ac6 Changing the way workers are forked 2015-12-11 23:35:07 -05:00
Brian Coca de71171fc2 removed merge conflict 2015-12-11 15:11:26 -05:00
James Cammarata 7f7e730dea Don't mark hosts failed if they've moved to a rescue portion of a block
Fixes #13521
2015-12-11 14:55:44 -05:00
Abhijit Menon-Sen 37c4e9aee3 Clean up debug logging around _low_level_execute_command
We were logging the command to be executed many times, which made debug
logs very hard to read. Now we do it only once.

Also makes the logged ssh command line cut-and-paste-able (the lack of
which has confused a number of people by now; the problem being that we
pass the command as a single argument to execve(), so it doesn't need an
extra level of quoting as it does when you try to run it by hand).
2015-12-11 07:11:48 +05:30
Toshio Kuratomi 1dda8158ff become_pass needs to be bytes when it is passed to ssh.
Fixes #13240
2015-12-10 07:29:38 -08:00
Toshio Kuratomi 62cbc03af6 Revert "Remove the funcd connection plugin"
This reverts commit c0d79cf7e1.

We may still port the funcd connection plugin, just not in time for
2.0.0
2015-12-09 13:32:11 -08:00
James Cammarata 30b6dd8bcd Merge pull request #13495 from Yannig/devel_debug_null_error
Do not fail when variable is not correct in debug action.
2015-12-09 16:27:05 -05:00
Yannig Perré 18ac12aee6 Do not fail when variable is not correct in debug action.
See https://github.com/ansible/ansible/issues/13484 for more information.
2015-12-09 22:08:30 +01:00
Toshio Kuratomi c0d79cf7e1 Remove the funcd connection plugin 2015-12-09 13:07:00 -08:00
James Cammarata 14e19c239d Make on_file_diff callback item-aware 2015-12-09 14:52:53 -05:00
Brian Coca 0719eb3e2d clarified warning from tree callback 2015-12-09 07:29:12 -08:00
Brian Coca 795fac917e fixed typo in tree callback, added default dir
this would allow it to work with playbooks also
2015-12-08 11:59:04 -08:00
James Cammarata de690445bc Make fact delegating configurable, defaulting to 1.x behavior 2015-12-08 14:36:33 -05:00
Brian Coca 7ffd578a9d Revert "Fix always_run support in the action plugin for template when copying"
This reverts commit 9c4eae5253.
2015-12-08 09:24:20 -08:00
James Cammarata 9c4eae5253 Fix always_run support in the action plugin for template when copying
Fixes #13418
2015-12-08 11:56:39 -05:00
Yannig Perré 2c8eee956f Fix issue when var name is the same as content.
See https://github.com/ansible/ansible/issues/13453 for more details.
2015-12-07 09:25:37 +01:00
Luca Berruti 8ea45e8608 Make no_target_syslog consistent.
no_target_syslog = False --> do log on target
2015-12-05 19:43:02 +01:00
Brian Coca 26520442bd Now and/or shell expressions depend on shell plugin
This should fix issues with fish shell users as && and || are
not valid syntax, fish uses actual 'and' and 'or' programs.
Also updated to allow for fish backticks pushed quotes to subshell,
fish seems to handle spaces w/o them.
Lastly, removed encompassing subshell () for fish compatibility.
fixes #13199
2015-12-03 16:38:34 -08:00
Brian Coca 7d073bdd17 Merge pull request #13345 from amenonsen/extract
Add an 'extract' filter
2015-12-03 11:19:06 -08:00
Toshio Kuratomi e201a255d1 Revert "Make sudo+requiretty and ANSIBLE_PIPELINING work together"
This reverts commit f488de8599.

Reverting for now due to hard to pin down bugs: #13410  #13411
2015-12-03 08:01:05 -08:00
Matt Martz 384b2e0234 Get v2_playbook_on_start working
* Move self._tqm.load_callbacks() earlier to ensure that v2_on_playbook_start can fire
* Pass the playbook instance to v2_on_playbook_start
* Add a _file_name instance attribute to the playbook
2015-12-02 11:29:51 -06:00
Abhijit Menon-Sen 8cf1815867 Add an 'extract' filter
At its most basic, this is nothing more than an array or hash lookup,
but when used in conjunction with map, it is very useful. For example,
while constructing an "ssh-keyscan …" command to update known_hosts on
all hosts in a group, one can get a list of IP addresses with:

    groups['x']|map('extract', hostvars, 'ec2_ip_address')|list

This returns hostvars[a].ec2_ip_address, hostvars[b].ec2_ip_address, and
so on. You can even specify an array of keys for a recursive lookup, and
mix string and integer keys depending on what you're looking up:

    ['localhost']|map('extract', hostvars, ['vars','group_names',0])|first
        == hostvars['localhost']['vars']['group_names'][0]
            == 'ungrouped'

Includes documentation and tests.
2015-12-02 18:16:38 +05:30
Christoph Dittmann 267199fdd5 Update debug messages and comments
The comment was taken literally from lib/plugins/strategy/linear.py and
makes no sense in free.py where we have no noop tasks.

Also update the debug messages.
2015-12-02 11:17:24 +01:00
Christoph Dittmann c6e400fbea Fix issue #13370
all_blocks is referenced after the loop over included_files, so it needs
to be initialized before this loop, not inside.
2015-12-02 11:17:24 +01:00
Brian Coca 3e01516783 fixed signature for init on callbacks
also removed passing display to base class which already handles this
2015-12-01 14:06:54 -08:00
nitzmahone c94509f273 allow shell plugin to affect remote module filename
Fix for 13368, added get_remote_filename to shell plugins, powershell version appends .ps1 if necessary, base shell plugin no-ops
2015-12-01 13:39:02 -08:00
Abhijit Menon-Sen f488de8599 Make sudo+requiretty and ANSIBLE_PIPELINING work together
Pipelining is a *significant* performance benefit, because each task can
be completed with a single SSH connection (vs. one ssh connection at the
start to mkdir, plus one sftp and one ssh per task).

Pipelining is disabled by default in Ansible because it conflicts with
the use of sudo if 'Defaults requiretty' is set in /etc/sudoers (as it
is on Red Hat) and su (which always requires a tty).

We can (and already do) make sudo/su happy by using "ssh -t" to allocate
a tty, but then the python interpreter goes into interactive mode and is
unhappy with module source being written to its stdin, per the following
comment from connections/ssh.py:

        # we can only use tty when we are not pipelining the modules.
        # piping data into /usr/bin/python inside a tty automatically
        # invokes the python interactive-mode but the modules are not
        # compatible with the interactive-mode ("unexpected indent"
        # mainly because of empty lines)

Instead of the (current) drastic solution of turning off pipelining when
we use a tty, we can instead use a tty but suppress the behaviour of the
Python interpreter to switch to interactive mode. The easiest way to do
this is to make its stdin *not* be a tty, e.g. with cat|python.

This works, but there's a problem: ssh will ignore -t if its input isn't
really a tty. So we could open a pseudo-tty and use that as ssh's stdin,
but if we then write Python source into it, it's all echoed back to us
(because we're a tty). So we have to use -tt to force tty allocation; in
that case, however, ssh puts the tty into "raw" mode (~ICANON), so there
is no good way for the process on the other end to detect EOF on stdin.
So if we do:

    echo -e "print('hello world')\n"|ssh -tt someho.st "cat|python"

…it hangs forever, because cat keeps on reading input even after we've
closed our pipe into ssh's stdin. We can get around this by writing a
special __EOF__ marker after writing in_data, and doing this:

    echo -e "print('hello world')\n__EOF__\n"|ssh -tt someho.st "sed -ne '/__EOF__/q' -e p|python"

This works fine, but in fact I use a clever python one-liner by mgedmin
to achieve the same effect without depending on sed (at the expense of a
much longer command line, alas; Python really isn't one-liner-friendly).

We also enable pipelining by default as a consequence.
2015-12-01 23:32:20 +05:30
Toshio Kuratomi 50553bc2ba _connect no longer takes a port argument 2015-12-01 09:12:25 -08:00
Brian Coca b5f2c3def2 fixed typo 2015-11-30 09:20:59 -08:00
Brian Coca eefb4931dd allow for bad stdout return from make temp dir command
fixes #13359
2015-11-30 09:19:16 -08:00
Brian Coca 005b17afec corrected become_methods class variable in winrm
This should now correctly react when using become with winrm
fixes #13331
2015-11-30 08:35:08 -08:00
James Cammarata 80db6bacc4 Make sure run_once tasks properly set variables for all active hosts
Fixes #13267
2015-11-30 11:27:05 -05:00
James Cammarata dfa576b037 Merge pull request #13307 from Yannig/devel_fix_big_include_vars
Fix for https://github.com/ansible/ansible/issues/13221
2015-11-29 23:14:03 -05:00
James Cammarata 6671d78f95 Tweak location of stats callback execution and properly relocate stats output code 2015-11-28 14:03:21 -05:00
James Cammarata 800811a15f Trigger on_stats just once, not once for each play
Fixes #13271
2015-11-28 13:37:43 -05:00
Yannig Perré 5227c6bb52 Do not copy variable_manager each time. Instead, keep host and local variable_manager sync.
Fix https://github.com/ansible/ansible/issues/13221
2015-11-28 14:58:33 +01:00