1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00
Commit graph

279 commits

Author SHA1 Message Date
Toshio Kuratomi
61f2147385 Rename pycompat to pycompat24
This change makes it so we know when it is safe to get rid of the module
(when we stop supporting python2.4) and makes it easier for us to find
code that is using the functions in there to update.

If needed, we'll create a pycompat26 and pycompat27 as well.  These
files are for functions that are needed on that python version to write
portable code.  So python-2.4 compatible modules may need code in
pycompat24, python26+ modules may need code in pycompat26, etc.  If
a function is needed in multiple python versions, we should implement it
in an internal common file and use import to put it in the namespace for
each pycompatXY module.
2016-05-18 06:18:01 -07:00
Toshio Kuratomi
0cb05d8ac9 Some Python-3 module_utils support 2016-05-14 07:51:13 -07:00
Toshio Kuratomi
186337db28 Ship constants to the modules via internal module params rather than a secondary dict. 2016-05-12 20:30:05 -07:00
Matt Martz
1cee3f35b1 Guard against a shell profile printing extraneous data 2016-05-12 11:43:37 -05:00
Toshio Kuratomi
99e3880181 small python3 fix so that ping will run on python3 2016-05-10 21:59:42 -07:00
Toshio Kuratomi
409bfe4d0f Strip leading and trailing whitespace for json arg types 2016-05-09 08:14:50 -07:00
Toshio Kuratomi
3f104dcee9 Add a jsonarg type to arg spec (#15701)
This makes sure that if we get a list or dict that it is turned into
a jsonified string.
2016-05-03 10:21:00 -04:00
jctanner
eb31faa7f5 Remove the ziploader provided pythonpaths from the env inside run_com… (#15674)
Remove the ziploader provided pythonpaths from the env inside run_command.

Fixes #15655
2016-05-02 11:29:35 -04:00
Toshio Kuratomi
487e6562ca Fix ziploader for the cornercase of ansible invoking ansible.
* Make ziploader's ansible and ansible.module_utils libraries into
  namespace packages.
* Move __version__ and __author__ from ansible/__init__ to
  ansible/release.py.  This is because namespace packages only load one
  __init__.py.  If that is not the __init__.py with the author and
  version info then those won't be available.
* In ziplaoder, move the version ito ANSIBLE_CONSTANTS.
* Change PluginLoader to properly construct the path to the plugins even
  when namespace packages are present.
2016-04-29 08:47:49 -07:00
Toshio Kuratomi
44e21f7062 Allow AnsibleModules to be instantiated more than once in a module
Fix SELINUX monkeypatch in test_basic
2016-04-23 14:04:45 -07:00
Yannig Perre
72f17f3ff3 New get_all_subclasses function in basic modules and use it in fact modules. 2016-04-23 07:24:26 -07:00
Toshio Kuratomi
7b5d2d3bec Make sure that args are interpreted as utf8 on python3 2016-04-19 09:37:17 -07:00
nitzmahone
5b336832af add _load_params debug overrides for module args/file passed on cmdline
Updated python module wrapper explode method to drop 'args' file next to module.
Both execute() and excommunicate() debug methods now pass the module args via file to enable debuggers that are picky about stdin.
Updated unit tests to use a context manager for masking/restoring default streams and argv.
2016-04-18 11:06:46 -07:00
Toshio Kuratomi
55bb24fb7d Reenable unicode=>byte conversion for module parameters to fix integration tests 2016-04-12 08:01:07 -07:00
Toshio Kuratomi
75546678d9 Fix unittests 2016-04-12 08:01:07 -07:00
Toshio Kuratomi
b571ecdfec Move module arg passing from the environment to stdin (from the wrapper to the module) 2016-04-12 08:01:07 -07:00
Nathaniel Case
dbc49ad95b First implementation of 'fallback' parameter
Implemented & documented for EOS & NXOS
2016-04-12 08:55:15 -04:00
Toshio Kuratomi
a57a32adcc Revert "Make the 'path' param type also use abspath on the value"
This reverts commit 1ffadbcc80.

Some modules seem to have path listed for things that are "commands"  --
something that may be a path to a command or a bare command that should
be looked up in PATH.  With this change, if they were formerly looked up
inPATH they are now being made into an absolute path in the cwd.
Reverting this until we can think more about whether to do this and
change those modules to not use path for those parameters.
2016-04-06 14:07:48 -07:00
James Cammarata
1ffadbcc80 Make the 'path' param type also use abspath on the value 2016-04-06 15:58:49 -04:00
Toshio Kuratomi
4b0aa1214c Ziploader
* Ziploader proof of concept (jimi-c)

* Cleanups to proof of concept ziploader branch:

* python3 compatible base64 encoding
* zipfile compression (still need to enable toggling this off for
  systems without zlib support in python)
* Allow non-wildcard imports (still need to make this recusrsive so that
  we can have module_utils code that imports other module_utils code.)
* Better tracebacks: module filename is kept and module_utils directory
  is kept so that tracebacks show the real filenames that the errors
  appear in.

* Make sure we import modules that are used into the module_utils files that they are used in.

* Set ansible version in a more pythonic way for ziploader than we were doing in module replacer

* Make it possible to set the module compression as an inventory var

This may be necessary on systems where python has been compiled without
zlib compression.

* Refactoring of module_common code:

* module replacer only replaces values that make sense for that type of
  file (example: don't attempt to replace python imports if we're in
  a powershell module).
* Implement configurable shebang support for ziploader wrapper
* Implement client-side constants (for SELINUX_SPECIAL_FS and SYSLOG)
  via environment variable.
* Remove strip_comments param as we're never going to use it (ruins line
  numbering)

* Don't repeat ourselves about detecting REPLACER

* Add an easy way to debug

* Port test-module to the ziploader-aware modify_module()

* strip comments and blank lines from the wrapper so we send less over the wire.

* Comments cleanup

* Remember to output write the module line itself in powershell modules

* for line in lines strips the newlines so we have to add them back in
2016-04-05 11:06:17 -07:00
Nathaniel Case
e4e913b331 Override params from environment variables, if set.
Fix a typo while I'm in the area.

Handle having None set in module.params more intelligently
2016-03-30 17:28:30 -04:00
Brian Coca
fdb56e4bad avoid bad path entries 2016-03-23 09:30:48 -07:00
Toshio Kuratomi
917da92e2b Get rid of extra trailing space in log messages 2016-03-23 08:01:21 -07:00
Matthew Gamble
197e590d7c Small comment improvement in AnsibleModule class 2016-03-23 19:22:18 +11:00
James Cammarata
0e68c6d6fe Cleaning up use of literal_eval in basic.py AnsibleModule.safe_eval 2016-03-17 02:02:15 -04:00
Brian Coca
62ac5c047e clarified message 2016-03-04 14:44:03 -05:00
Brian Coca
8867d73420 reject extraneous data passed to mode
strictly permissions are allowed, file type info should not be passed in
alternate fixes #14771
2016-03-04 14:42:29 -05:00
James Cammarata
9acb5aa176 Changing location of reduce import to not use six.moves 2016-03-01 17:06:46 -05:00
James Cammarata
b559d0e6ee Adding py3 stub for reduce from six.moves 2016-03-01 16:55:01 -05:00
James Cammarata
e011f52557 Expanding unit tests for module_utils/basic.py 2016-03-01 13:53:13 -05:00
ivovangeel
23349911f1 Fixed bug in find_mount_point function
The find_mount_point function does not resolve the mount point of paths with a soft-link correctly and returns the wrong mount-point.

I have mounted an NFS filesystem on /nfs-mount. This directory contains a directory called "directory". I also created a soft-link to this last directory: /soft-link-to-directory -> /nfs-mount/directory. I created the following task to copy a file into /soft-link-to-directory:

    - name: copy file to nfs-mount
      copy:
        src: "file"
        dest: "/soft-link-to-directory/file"

This throws an exception:

invalid selinux context: [Errno 95] Operation not supported

This is caused by the find_mount_point function to return '/' as the mount point for '/soft-link-to-directory/file'. This should have been /nfs-mount. Because the find_mount_point returns the wrong mount-point, the is_special_selinux_path function does not recognise the file is on an NFS mount and tries to set the default SELinux context (system_u:object_r:default_t:s0), which fails. The context should have been: system_u:object_r:nfs_t:s0

Full Ansible output:

TASK [copy file to nfs-mount] **************************************************
fatal: [hostname]: FAILED! => {"changed": false, "checksum": "f34b60930a5d6d689cf49a4c16bd7f9806be608c", "cur_context": ["system_u", "object_r", "nfs_t", "s0"], "failed": true, "gid": 24170, "group": "foundation", "input_was": ["system_u", "object_r", "default_t", "s0"], "mode": "0644", "msg": "invalid selinux context: [Errno 95] Operation not supported", "new_context": ["system_u", "object_r", "default_t", "s0"], "owner": "root", "path": "/soft-link-to-directory/.ansible_tmpWCT6Z4file", "secontext": "system_u:object_r:nfs_t:s0", "size": 37, "state": "file", "uid": 0}
2016-02-24 15:57:16 +01:00
Brian Coca
bc41f46fec pushed non-atomic to option of last resort
try to copy into place first
2016-02-15 12:08:07 -05:00
Pascal Grange
5d49f4e629 Fix related to #13981
When working around "bad systems that insist on not allowing
updates in an atomic manner", we should not run previous exception
management code that tries to perform atomic move in case of
exception since the dirty non atomic move has already been
performed.
2016-02-15 10:18:44 +01:00
Toshio Kuratomi
6276585882 Module params should default to str in most cases. 2016-02-10 15:22:42 -08:00
Brian Coca
f50b381dba Merge pull request #13678 from Etherdaemon/fix_datetime_objects
fix for datetime exception in ecs_tasks
2016-02-09 17:07:28 -05:00
Toshio Kuratomi
1aaf5a399c Merge pull request #14317 from resmo/feature/fail_on_missing_params
module_utils/basic: add generic method for checking for missing param…
2016-02-08 10:33:48 -08:00
Toshio Kuratomi
d1c2d16706 Allow setting run_command environment overrides for the life of an AnsibleModule 2016-02-07 12:46:04 -08:00
Brian Coca
ad37a91514 really only want to prevent None typep here
false is sometimes needed
2016-02-05 14:33:10 -05:00
Brian Coca
5679b5414c avoid errors from possible None/False args 2016-02-04 19:39:56 -05:00
Rene Moser
11522b22c3 module_utils/basic: add generic method for checking for missing params when argspec can not be used. 2016-02-04 22:54:03 +01:00
Brian Coca
89c57666c3 fixed py3 compatibility 2016-02-04 13:14:56 -05:00
Brian Coca
70ac47ae61 allow atomic_move to not be atomic ...
just 'cause people build bad systems that insist on not allowing
updates in an atomic manner and force us to do them in a very
unsafe way that has race conditions and can lead to many issues.

if using this option you should really be opening a bug report with
the system that only allows for this type of update.

and now i shower though i doubt i'll feel clean
2016-02-04 13:05:24 -05:00
Brian Coca
6a62ad6c4b hide internal params once used 2016-02-01 15:17:23 -05:00
James Cammarata
0c237c4531 Merge pull request #14191 from paulcalabro/devel
Added hyphen (-) as a valid character for permissions
2016-01-29 00:55:53 -05:00
Paul Calabro
901d349f45 Adding a hyphen in the perms pattern section, since doing something like
go=- is a quick way to strip all permissions for non-owners.
2016-01-28 13:05:10 -07:00
Toshio Kuratomi
3cf59d30f7 For synchronize, fix sudo to execute on the remote end of the connection
* In 2.0.0.x become was reversed for synchronize. It was happening on
  the local machine instead of the remote machine. This restores the
  ansible-1.9.x behaviour of doing become on the remote machine.
  However, there's aspects of this that are hacky (no hackier than
  ansible-1.9 but not using 2.0 features).  The big problem is that it
  does not understand any become method except sudo.  I'm willing to use
  a partial fix now because we don't want people to get used to the
  reversed semantics in their playbooks.
* synchronize copying to the wrong host when inventory_hostname is
  localhost
* Fix problem with unicode arguments (first seen as a bug on synchronize)

Fixes #14041
Fixes #13825
2016-01-25 19:33:31 -08:00
Toshio Kuratomi
a68d90a71a rework run_command's env setting to not change os.environ for the rest of the module.
New param to run_command to modify the environment for just this invocation.
Documentation and comment adjustments.
2016-01-20 12:03:32 -08:00
Brian Coca
a56c0bc27b module invocation info depends on verbosity
since we were removing it on display, this saves us even transmiting it back
2016-01-13 18:06:55 -05:00
Brian Coca
5760f0effb dont error out on new internal vars 2016-01-12 13:17:02 -05:00
Brian Coca
477d632118 now file mode diff shows octal values 2016-01-11 19:47:47 -05:00
Brian Coca
6f2f7a79b3 add support for diff in file settings
this allows modules to report on what specifically changed when using
common file functions
2016-01-01 21:53:19 -05:00
Etherdaemon
0b92abaf67 Proposed fix for ansible/ansible-modules-extras#1348 due to datetime.datetime type not being matched 2015-12-27 21:36:02 +10:00
Brian Coca
9a118ce213 Merge pull request #13648 from bcoca/fix_invocation_and_moderrors
better module error handling
2015-12-23 10:42:40 -05:00
Michael Scherer
42b9a206ad Fix last commit, make it python3 compatible (and py24) 2015-12-23 13:24:11 +01: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
Brian Coca
010839aedc fix no_log disclosure when using aliases 2015-12-22 17:15:58 -05:00
Brian Coca
474772c81c Merge pull request #13639 from emonty/bool-conversion
Also convert ints to bool for type=bool
2015-12-22 10:21:18 -05:00
Monty Taylor
c60749c922 Also convert ints to bool for type=bool 2015-12-22 09:14:12 -06:00
Toshio Kuratomi
d32a885e98 Make return invocation information so that our sanitized copy will take precedence over what the executor knows. 2015-12-19 11:24:59 -08:00
Toshio Kuratomi
c8fd599e14 Merge pull request #13373 from no2a/boolean
BOOLEAN should contain boolean literals
2015-12-04 12:17:12 -08:00
Toshio Kuratomi
9b81c35d06 Don't compare or merge str with unicode
Fixes #13387
2015-12-02 20:53:50 -08:00
Arata Notsu
6d6d4f0c8e BOOLEAN should contain boolean literals
It is natural that an argument_spec with choises=BOOLEAN accepts
boolean literal (True, False) though the current implementation
allows only string or int.
2015-12-01 23:51:39 +09:00
Toshio Kuratomi
e2ddc2f6ab Call the function :-)
Fixes #13330
2015-11-30 12:34:20 -08:00
James Cammarata
0e447e3f41 Merge branch 'devel' of https://github.com/mathieumd/ansible into mathieumd-devel 2015-10-21 13:59:51 -04:00
Toshio Kuratomi
6e5055e786 Update the use of no_log values to cover everything that heuristic_log_sanitize does.
Fixes #12792
2015-10-21 08:15:46 -07:00
Toshio Kuratomi
c2d188baff Hide values in json returns which were given in parameters marked no_log. 2015-10-20 12:42:36 -07:00
Mathieu
260a3e5ce7 Fixes #11055 - Set locale via LC_ALL 2015-10-19 21:25:30 +02:00
Brian Coca
c57200925f made syslog import optional as intel's edison custom compiles python w/o it 2015-10-14 09:12:02 -04:00
Toshio Kuratomi
15d7f53846 AnsibleModules.log() fix for python3
Also add unittests for AnsibleModules.log()

Fixes #12586
2015-10-12 13:30:27 -07:00
Brian Coca
1a56a5c442 created debug method, renamed debug attribute to _debug 2015-10-01 10:17:41 -04:00
Marius Gedminas
cc1e1648f5 Tweak comment style 2015-09-30 18:46:50 +03:00
Marius Gedminas
213029a21e Python 3: don't convert unicode to unicode 2015-09-30 18:46:49 +03:00
Marius Gedminas
c7be004c19 Python 3 has no dict.iteritems()
(Reminder: cannot use six here, module_utils get shipped to remote
machines that may not have six installed -- besides six doens't support
Python 2.4.)
2015-09-30 18:46:49 +03:00
Marius Gedminas
9f3e5ceb14 Make sure 'basestring', 'bytes' and 'unicode' are defined
Python 3 doesn't have 'basestring' and 'unicode'.

Python 2.4 doesn't have 'bytes'
2015-09-30 18:40:47 +03:00
Brian Coca
37a918438b task logging revamp
* allow global no_log setting, no need to set at play or task level, but can be overriden by them
 * allow turning off syslog only on task execution from target host (manage_syslog), overlaps with no_log functionality
 * created log function for task modules to use, now we can remove all syslog references, will use systemd journal if present
 * added debug flag to modules, so they can make it call new log function conditionally
 * added debug logging in module's run_command
2015-09-25 23:57:28 -04:00
Toshio Kuratomi
dcdcd9e9c5 Move is_executable to the toplevel of basic.py so we can utilize it from other code 2015-09-25 07:48:57 -07:00
Marius Gedminas
2c4982b58d Python 3: there's no itertools.imap
Because the builtin map() acts like an iterator already.
2015-09-23 10:04:26 +03:00
Marius Gedminas
6708d56a21 Python 3: avoid long integer literals
Even Python 2.4 automatically promotes int to long.
2015-09-23 10:04:25 +03:00
Marius Gedminas
f5d4935197 Python 3: treat python as a function in module_utils/basic.py
NB: we can't use 'from __future__ import print_function', but luckily
print(one_thing) works fine on both Python 2 and Python 3 without that.
2015-09-23 10:04:25 +03:00
Marius Gedminas
e71a986e16 Python 3: avoid octal constants in module_utils/basic.py 2015-09-23 10:04:25 +03:00
Marius Gedminas
d2bec7f81f Python 3: avoid "except ..., e:" in module_utils/basic.py
Make the code compatible with Pythons 2.4 through 3.5 by using
sys.exc_info()[1] instead.

This is necessary but not sufficient for Python 3 compatibility.
2015-09-23 10:04:25 +03:00
Toshio Kuratomi
00b1a2c865 Restore ValueError in md5 method and change finding the available hash algorithms so we only have to do it once 2015-08-06 14:40:28 -07:00
muffl0n
8d6d711a5c move get_available_hash_algorithms() from get_url 2015-08-04 08:57:36 +02:00
Toshio Kuratomi
6a68be4e28 Handle quoting of values in dict parameters 2015-07-27 12:31:05 -07:00
Toshio Kuratomi
ddec06ccfe Detect the old python-json library
Fixes #11654
2015-07-20 12:35:26 -07:00
Brian Coca
4f98fac494 Merge pull request #10914 from bcoca/non_posix_file_copy_fix
hack to prevent tempalte/copy errors on vagrant synced folders
2015-07-18 23:08:08 -04:00
Toshio Kuratomi
dd058a1dc2 Fix required_if (needed to pass list to _count_terms) 2015-07-08 09:45:02 -07:00
Brian Coca
2c9d1257ba put type checking before looking against choices array to always get type comparrison correctly 2015-07-05 19:55:11 -04:00
James Cammarata
cf51d0a790 Fixing up some check-mode stuff 2015-07-01 15:10:25 -04:00
Toshio Kuratomi
be6db1a730 Refactor the argspec type checking and add path as a type 2015-06-29 08:05:58 -07:00
Toshio Kuratomi
160e71e2cf Some flake8 cleanup 2015-06-25 07:13:37 -07:00
Dag Wieers
4ca4d36ae6 Change syslog (priority) level from LOG_NOTICE to LOG_INFO
If you look at the meaning of the different syslog levels, NOTICE means that the event may need someone to look at it. Whereas INFO is pure informational.

Since module invocations are in fact requested (deliberate) actions, they shouldn't need any additional post-processing, and therefore should not be logged as NOTICE.

This may seem like hairsplitting, but correctly categorizing system events helps weeding through the noise downhill.

According to Wikipedia: https://en.wikipedia.org/wiki/Syslog

5 	Notice 		notice 	Events that are unusual but not error conditions .
6 	Informational 	info 		Normal operational messages -no action required. Example an application has started, paused or ended successfully.
2015-06-18 11:00:10 +02:00
James Cammarata
fe41f109a9 Merge branch 'v2_final' into devel_switch_v2 2015-06-01 16:42:59 -05:00
James Cammarata
4bc7703db3 Fixing some small bugs related to integration tests (v2) 2015-06-01 16:42:10 -05:00
James Cammarata
2bad888f28 Merge branch 'v2_final' into devel_switch_v2
Conflicts:
	lib/ansible/inventory/__init__.py
	lib/ansible/modules/core
	lib/ansible/utils/__init__.py
	lib/ansible/utils/module_docs.py
2015-05-28 15:26:03 -05:00
James Cammarata
e59d4f3b51 More module_utils/basic.py unit tests for v2 2015-05-28 01:26:04 -05:00
James Cammarata
339a02c384 Started reworking module_utils/basic unit tests (v2) 2015-05-27 03:21:15 -05:00
Toshio Kuratomi
d793ed360b Fix syntaxerror in the required_if arg spec check 2015-05-26 11:30:06 -07:00
Toshio Kuratomi
0f23d8a503 Fix syntaxerror in the required_if arg spec check 2015-05-26 11:29:35 -07:00
Monty Taylor
31609e1b16 Add required_if to AnsibleModule
There is a common pattern in modules where some parameters are required
only if another parameter is present AND set to a particular value. For
instance, if a cloud server state is "present" it's important to
indicate the image to be used, but if it's "absent", the image that was
used to launch it is not necessary. Provide a check that takes as an
input a list of 3-element tuples containing parameter to depend on, the
value it should be set to, and a list of parameters which are required
if the required parameter is set to the required value.
2015-05-26 11:21:38 -07:00