the AIX class uses a unsafe shell for setting the user password (containing a pipe in the command). This patch adopts to the new behavior of module_utils/basic.py (since somewhere around 1.7).
besides it changes the qoutes for the echo command from double to single, because password-hashes contain $-signs and one would not have this variables expanded.
We need to handle the string returned by 'default' in the same way we handle
the string returned by 'status' since the resulting flags are compared later.
The return code of "service pf onestatus" is usually zero on FreeBSD (tested with FreeBSD 10.0), even if pf is not running. So the service module always thinks that pf is running, even when it needs to be started.
* Use the newly added 'default' argument to know if the default flags are set
or not.
* Handle that 'status' may either return flags or YES/NO.
* Centralize flag handling logic.
* Set action variable after check if we need to keep going.
Big thanks to @ajacoutot for implementing the rcctl 'default' argument.
* Make the module support enable/disable of special services like pf via rcctl.
Idea and method from @jarmani.
* Make the module handle when the user supplied 'arguments' variable does not
match the current flags in rc.conf.local.
* Update description now that the code tries to use rcctl for everything if it
is available.
Based on input from @jarmani:
* A return value of 2 now means a service does not exist. Instead of
trying to handle the different meanings of rc after running "status",
just look at stderr to know if something failed.
* Skip looking at stdout to make the code cleaner. Any errors should
turn up on stderr.
The default is not very useful to sort between different
keys and user. Adding the hostname in the comment permit to later
sort them if you start to reuse the key and set them in different
servers. See https://github.com/ansible/ansible/pull/7420
for the rational.
standards compliant return codes but return a verbose error message via
stdout. Limit the times when we invoke the heuristic to attempt to work
around this.
Centos 6.x and below use an old RHT style of configuring hostname.
CentOS 7.x and better use systemd. Instead of depending on the
distribution string which seems to have changed over the course of 6.x
we need to explicitly check the version.
Fixes#8997
The "name" parameter seems to be rather important as the identifying feature of a cron job. This is an update to the documentation to further emphasize this.
As far as I can tell, `name` is a required parameter. The guard test at (now) line 458 says you need name if `state == present` and at 464 if `state != present`, although that's not quite as clear. Each of the code paths at 485 - 495 pass the name param through to `add_job`, `update_job` and `remove_job`, and the actual _update_job method earlier seems to require it too. However I don't really know python so I may be wrong, but I can't see the circumstances when `name` is not required.
This avoids a stale situation where name/path contains some impossible path,
but gets configured (faultly) in fstab, and the module only fails after that,
when creating that path.
We wrap get_distribution_version() with a new function,
_get_distribution_version(), that returns `0` when the result is a string or
`None`.
This accounts for the case when get_distribution_version() returns a string,
and we try to compare it to a float. We do this in the hostname module instead
of the module snippets because other modules may want the real string
version.module snippets because other modules may want the real string version.
This fixes a bug introduced by 138b45e3.
The hostname has an additional newline at the end which leads to the
state always being 'changed: true' even if the hostname is unchanged.
Currently facter facts omit facts that a distributed via Puppet. This
commit adds the `--puppet` option.
In cases where puppet is not installed, the command sends a warning to
STDERR *but* completes successfully. So should not cause any issues.
The benefit is, filtering can be done based on facts set by Puppet.
even if the option ```force=yes``` is used in the playbook, it is not reflected in the mkfs command line.
As force option is dependent of the fs type, a "if-then-else" case have been added. Also, some FS types does not have a force option.
If we try to use the user module without being root, it fail on RHEL/Fedora
because usermod --help cannot be run. The root cause is lack of permission
due to EAL4+ certification, as seen in shadow-utils changelo.
So if we cannot run it, assume there is no append. It doesn't matter
much since we will not be able to run usermod at all with or without the
option.
While migrating my playbook to a newer ansible version, I faced
the error message "unknown init system, cannot enable service". It turned
out to be caused by a wrong service name that was not expanded anymore.
So by giving the name of the service that cannot be enabled and a more precise
reason, i think people will be able to diagnose their issue more easily.
When no vg_options are passed to the module, 'vg_options' still exists
in the module.params dict with a value of None, so the default empty string in
the get method is never used. None cannot be "splitted", which backtraced.
It's a separate parameter so updated docs and set it as mutually exclusive param.
Also due to an array construction typo it was not working in any situation (ufw LOGLEVEL was passed to cmd instead of ufw logging LOGLEVEL).
Also fixed doc and parameters parsing typo ("choises" should be "choices")
Services on Debian need to be disabled with 'disable' instead of 'remove'
to avoid them being enabled again when 'update-rc.d $service defaults' is run,
e.g. as part of a postinst script.
There's no need to filter hostnamectl's output with awk because its man
page says:
hostnamectl [OPTIONS...] {COMMAND}
--static, --transient, --pretty
If status is used (or no explicit command is given) and one
of those fields is given, hostnamectl will print out just
this selected hostname.
E.g. hostnamectl --static status => ansible.example.org
* Separate 'state', 'policy' and 'rule' commands
* Support for 'logging' command
* Support for 'direction' and 'interface' attributes
* Reliable change notifications based on 'ufw status verbose' diff
* Update documentation
* Cleanup
* Updated documentation related to IPv6 usage.
BugFixes:
* Solved the default_policy and state mutual exclusive status.
* Fixed changed status for IPv6 addresses.
Added @otnateos patch.
The newest version of OpenSSH supports a new, wonderful key type. authorized_key incorrectly discards pubkeys of this type as busted because it doesn't recognize type signature.
If no group was specified, but a group by the same name as the user
exists, an error was raised in the situation where USERGROUPS_ENAB is
enabled in /etc/login.defs (which is the case for almost every major
linux distro). In this case, the user will be put in group 100 (which
is usually the "users" group on those same distros). This is currently
only done in the base class, as the issue may not exist on other
platforms like AIX or the BSDs.
Fixes#6210
Sometimes, `blkid` will incorrectly return no information about a block
device, even if it exists and has a valid filesystem. This causes the
*filesystem* module to fail if *force=no*. Instructing `blkid` to use
`/dev/null` as a cache file will force it to rescan the block device on
each run, making results more consistent.
Signed-off-by: Dustin C. Hatch <admiralnemo@gmail.com>
This addresses GH-5165 and adds the ability to check if a lvol exists.
The tests for this don't fit nicely into the current integration tests so they are below.
```
---
- name: remove any existing lv=one of vg=main
lvol: lv=one vg=main state=absent
- name: remove any existing lv=two of vg=main
lvol: lv=two vg=main state=absent
- name: check to see if lv=one of vg=main exists
lvol: lv=one vg=main state=present
ignore_errors: true
register: lvol_result0
- name: Assert that we will get a "No size given."
assert:
that:
- "'No size given.' in lvol_result0.msg"
- name: create lv=one of vg=main sized 30g
lvol: lv=one size=30g vg=main state=present
register: lvol_result1
- name: Assert that we made changes."
assert:
that:
- "lvol_result1.changed == True"
- name: check to see if lv=one of vg=main exists
lvol: lv=one vg=main state=present
register: lvol_result2
- name: Assert that we did not make changes."
assert:
that:
- "lvol_result2.changed == False"
- name: remove lv=one of vg=main
lvol: lv=one vg=main state=absent
- name: create lv=two of vg=main sized 30G
lvol: lv=two size=30G vg=main state=present
register: lvol_result3
- name: Assert that we made changes."
assert:
that:
- "lvol_result3.changed == True"
- name: reduce lv=two of vg=main to 15G
lvol: lv=two size=15G vg=main state=present
register: lvol_result4
- name: Assert that we made changes."
assert:
that:
- "lvol_result4.changed == True"
- name: increase lv=two of vg=main to 30G
lvol: lv=two size=30G vg=main state=present
register: lvol_result5
- name: Assert that we made changes."
assert:
that:
- "lvol_result5.changed == True"
- name: create lv=two of vg=main sized 30G when already exists at 30G
lvol: lv=two size=30g vg=main state=present
register: lvol_result6
- name: Assert that we did not make changes."
assert:
that:
- "lvol_result6.changed == False"
- name: remove lv=two of vg=main
lvol: lv=two vg=main state=absent
```