Commit Graph

757 Commits (d49b11e9962df4bde4b8f3d61029305af4115748)

Author SHA1 Message Date
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
Abhijit Menon-Sen f20e2630b0 Explicitly accept become_success in awaiting_prompt state
If we request escalation with a password, we start in expecting_prompt
state. If the escalation then succeeds without the password, i.e., the
become_success response arrives, we must explicitly move into the next
state (awaiting_escalation, which immediately goes into ready_to_send),
so that we no longer try to apply the timeout.

Otherwise, we would leak the success notification and eventually
timeout. But if the module response did arrive before the timeout
expired, the "process has already exited" test would do the right
thing by accident (which is why it didn't fail more often).

Fixes #13289
2015-11-26 06:06:01 +05:30
Brian Coca 71fe49ee3a Merge pull request #13247 from bcoca/fetch_fixes
fixes to fetch action module
2015-11-24 10:55:23 -08:00
Brian Coca 7244b5ae49 added missing : 2015-11-25 10:52:42 -08:00
Brian Coca 0ec60ac09b added missing events to base class 2015-11-25 10:49:03 -08:00
James Cammarata 70de8bc96f Fix ssh state issues by simply assuming it's never connected 2015-11-24 12:00:37 -05:00
James Cammarata 65747285a4 Properly check for prompting state when re-using ssh connection
Fixes #13278
2015-11-24 09:09:54 -05:00
James Cammarata 96fcfe45d0 Merge pull request #13264 from Yannig/devel_debug_var_list_or_dict
Allow debug var parameter to accept a list or dict.
2015-11-23 16:47:45 -05:00
Yannig Perré 5fa49a9ad8 Use to_unicode instead of str() 2015-11-23 22:04:55 +01:00
James Cammarata 679488fdb5 Merge pull request #13239 from sysreq0/devel
We should give pipes.quote() a string every time
2015-11-23 14:27:26 -05:00
Chris Church 272778f732 Modify task executor to reuse connection inside a loop. Fix WinRM connection to set _connected properly and display when remote shell is opened/closed. Add integration test using raw + with_items. 2015-11-23 11:53:05 -05:00
Yannig Perré 0480b44f50 Allow debug var parameter to accept a list or dict. Fix https://github.com/ansible/ansible/issues/13252 2015-11-23 16:58:24 +01:00
Brian Coca fb96748d7c fixes to fetch action module
* now only runs remote checksum when needed (fixes #12290)
 * unified return points to simplify program flow
2015-11-22 09:52:34 -08:00
Toshio Kuratomi 8fd15ae2a3 Merge pull request #13217 from ansible/more-strict-plugin-lookup
Fix non-module plugins picking up files that did not end in .py.
2015-11-20 13:50:45 -08:00
Sebastien Couture 087dbc1ed5 We should give pipes.quote() a string every time 2015-11-20 12:58:50 -05:00
Toshio Kuratomi 591c81e95f Docker cp sets file ownership to root:root so we can't use it.
Fixes #13219
2015-11-20 07:45:00 -08:00
Toshio Kuratomi d75e707af5 Simplify code a little 2015-11-19 09:55:06 -08:00
Toshio Kuratomi 72558f7ecd Merge pull request #13074 from joernheissler/patch-13073
Use ansible_host in synchronize module
2015-11-19 09:51:43 -08:00
Toshio Kuratomi c86120cea6 Fix non-module plugins picking up files that did not end in .py.
This was caused by accessing the cache using the passed in mod_type
rather than the suffix that we calculate with knowledge of whether this
is a module or non-module plugin.
2015-11-19 09:39:37 -08:00
James Cammarata c97c101bd3 Merge pull request #13209 from nitzmahone/winrm_put_file
fast winrm put_file without size restrictions
2015-11-19 09:58:06 -05:00
nitzmahone db83c0e7cd winrm error handling tweaks 2015-11-18 23:09:16 -08:00
Brian Coca f8ed99e5e4 Revert "success should not include skipped"
This reverts commit 300ee227a2.
2015-11-19 11:12:18 -08:00
nitzmahone 549163170f fast winrm put_file without size restrictions 2015-11-18 10:33:45 -08:00
James Cammarata 9b9fb51d9d Template the final_environment value in _compute_environment_string()
Fixes #13123
2015-11-17 15:39:03 -05:00
Brian Coca d35f615af8 added more debug info for command results 2015-11-18 11:18:03 -08:00
Brian Coca aa55db69fe Merge pull request #12687 from nitzmahone/pywinrm_arg_passthru
Force SSL transport for pywinrm updates, get host+group vars
2015-11-17 11:14:19 -08:00
James Cammarata 9f31c073fe Fixing a few bugs in the HostVars performance areas
* Also refresh inventory in the HostVars manager process when things
  are changed via add_host/group_by
* Raise j2undefined rather than return it
2015-11-17 09:15:10 -05:00
James Cammarata 984729016e Fix tag filtering on included files and add more debugging
Previously, we were filtering the task list on tags for each host
that was including the file, based on the idea that the variables
had to include the host information. However, the top level task
filtering is play-context only, which should also apply to the
included tasks. Tags cannot and should not be based on hostvars.
2015-11-16 17:15:52 -05:00
James Cammarata 5cbeab5a3c Performance improvements for HostVars and some bugfixes 2015-11-16 17:15:52 -05:00
Toshio Kuratomi fc7e2912f2 zone connection plugin bugfixes and pipelining and sudo become methods enabled!
Thanks to peinheber for helping test and debug this!
2015-11-16 11:14:13 -08:00
Brian Coca 89646d4253 no need to be executable 2015-11-16 14:40:35 -08:00
Brian Coca 2083a2dffa Merge pull request #13174 from sebi-hgdata/sebi/consul_kv_issue
Consul kv lookup super invocation fix
2015-11-15 14:37:51 -08:00
Brian Coca 83f7942dcf removed print entries, corrected display calls to match latest devel 2015-11-16 11:35:10 -08:00
Brian Coca 78be81b96d Merge pull request #12510 from jcftang/devel
Initial add of logentries callback plugin
2015-11-15 11:28:02 -08:00
Brian Coca f1db99caa7 updated with latest changes to default 2015-11-15 10:09:24 -08:00
Sebi Calbaza 1f052d5ce6 fixed super invocation 2015-11-15 13:48:40 +02:00
Jimmy Tang 19ba54c9fd Don't be fatal on import errors so plays don't fail if plugin doesn't have required dependencies 2015-11-14 20:02:03 +00:00
Jimmy Tang 125370ab48 Run when whitelisted 2015-11-14 19:46:00 +00:00
Jimmy Tang 5f2f5e2b59 Add boilerplate and fix initialisation to match what 2.0 expects 2015-11-14 08:54:41 +00:00
Jimmy Tang c02ceb8f12 Remove threading and queues. Added license information and cleaned up callback. 2015-11-14 08:40:16 +00:00
Jimmy Tang 85277c8aae Initial add of logentries callback plugin
This callback plugin will generate json objects to be sent to the
logentries service for auditing/debugging purposes.

To use:

Add this to your ansible.cfg file in the defaults block

    [defaults]
    callback_plugins = ./callback_plugins
    callback_stdout = logentries
    callback_whitelist = logentries

Copy the callback plugin into the callback_plugings directory

Either set the environment variables

    export LOGENTRIES_API=data.logentries.com
    export LOGENTRIES_PORT=10000
    export LOGENTRIES_ANSIBLE_TOKEN=dd21fc88-f00a-43ff-b977-e3a4233c53af

Or create a logentries.ini config file that sites next to the plugin with the following contents

    [logentries]
    api = data.logentries.com
    port = 10000
    tls_port = 20000
    use_tls = no
    token = dd21fc88-f00a-43ff-b977-e3a4233c53af
2015-11-14 08:40:16 +00:00
Brian Coca 300ee227a2 success should not include skipped
fixes #13161
2015-11-14 14:39:42 -08:00
Brian Coca 634e10e5b8 Merge pull request #13156 from amenonsen/broken-timeout
If ssh died, it's an error, not a timeout
2015-11-13 10:45:21 -08:00
Abhijit Menon-Sen 26ea9c4351 If ssh died, it's an error, not a timeout 2015-11-13 20:10:08 +05:30
David M. Lee 5bd096208c Increase the escalation prompt timeout
It was set to match the SSH connect timeout. Unfortunately, they would
race when ssh fails to connect, and the connect timeout usually failed.
This led to some misleading error messages.

Fixes #12916
2015-11-13 08:02:37 -06:00
Toshio Kuratomi 958fb29b78 Merge pull request #12881 from Scypho/devel
fix for issue #11885 - allowing json in lookup template calls
2015-11-12 15:39:35 -08:00
James Cammarata 13750f68ee Reduce spinning while waiting on queues 2015-11-12 14:41:09 -05:00
Daniel Menet 0918416b83 substitute tilde and env vars before storing C.CACHE_PLUGIN_CONNECTION as instance attribute 2015-11-12 16:52:02 +01:00
Toshio Kuratomi 62979efa14 Finish up plugin porting to global display
Also remove display = display which does nothing
2015-11-11 10:44:23 -08:00
Toshio Kuratomi 2bd695ed42 Port cache plugins to global display 2015-11-11 10:44:22 -08:00
Toshio Kuratomi b05d0b8c9c Port lookup plugins to global display. 2015-11-11 10:44:22 -08:00
Toshio Kuratomi 4c7128da17 Port action plugins to global display 2015-11-11 10:44:22 -08:00
Toshio Kuratomi aa4f213cb5 Move connection plugins to using global display 2015-11-11 10:44:22 -08:00
Brian Coca 99f45f2e19 pass task args without filtering, copy module needs to explcitly support
remote_src or it will remove the src file
2015-11-12 09:40:43 -08:00
James Cammarata 0fc187893d Catch import warnings in a common location for both get() and all()
Potential solution for #12979
2015-11-10 11:25:07 -05:00
James Cammarata 9f0c2cfda5 Merge pull request #13114 from mgedmin/fix-plugin-loader
Check sys.modules before loading modules
2015-11-10 11:04:35 -05:00
Marius Gedminas 54eae4a793 Check sys.modules before loading modules
Code for a plugin is usually loaded by a PluginLoader(), and henceforth
available from self._module_cache, which prevents duplicate loading.
However there are situations (e.g. where one action plugin imports code
from another one) where the plugin module might be already imported (and
resident in sys.modules), but not present in the PluginLoader's
_module_cache, which causes imp.load_source() to effectively reload the
module, overwriting global class declarations and causing subtle latent
bugs.

Fixes #13110.
Fixes #12979.
2015-11-10 17:57:43 +02:00
James Cammarata a99f2fd52f Save delegated vars in result for use in callback methods
Fixes #13014
2015-11-10 10:14:30 -05:00