The apt module check if a packag eis valid by loking in the cache, checking only for
full name, while it should also check that the name is not just provided.
Fix https://github.com/ansible/ansible/issues/5177
Give the module more knowledge of the package name structure.
This makes the handling of version-less flavors (like vim--no_x11)
behave properly.
While here sprinkle debug logging that is helpful when testing the
module.
For some reason, on my test mandriva, urpmi --force return 0
even when it cannot install a rpm. So we have to explicitely check
if the package was properly installed with a loop
Also solves the particular problem of installing packages that have multiple versions in the repo, but specifying the exact version would be troublesome:
$ pkg install -n dovecot
The following 2 packages will be installed:
Installing dovecot: 1.2.17
Reinstalling dovecot-2.2.6 (options changed)
$ pkg install -n dovecot-2.2.6
The following 1 packages will be installed:
Reinstalling dovecot-2.2.6 (options changed)
$ pkg install -n -g dovecot-2*
The following 1 packages will be installed:
Reinstalling dovecot-2.2.6 (options changed)
'easy_install' executable were still left behind and need to be removed
for the customizable 'executable' task argument to correctly work:
'_get_easy_install' should take care of all the functionality related to
determining the correct 'easy_install' executable to use.
This will allow specifying dpkg options as a string passed over to apt
command. dpkg_options expects a comma-separated string of options to be
passed as dpkg options which will be further expanded. For example
dpkg_options='force-confdef,force-confold' will end up as
-o \"Dpkg::Options::=--force-confold\" when passed to apt
Example usage would be:
-m apt -u ubuntu -s \
-a "upgrade=dist update_cache=yes dpkg_options='force-confold'"
or
apt: upgrade=dist update_cache=yes dpkg_options='force-confold'
This module supports `virtualenv_site_packages` as an option to control whether or not to include system packages when installing pip packages into a virtual environment.
The default is no, and when you say yes it explicitly it includes a flag to include site packages, otherwise it doesn't provide a flag.
Some versions of virtualenv by default include site packages and other versions by default do not.
This patch just makes both branches explicit, so `virtualenv_site_packages=no` really means no.
on Mint as it work on Debian, fix#4587.
PPAs are not supported however, since that's a Ubuntu specific feature
and mint is detected as a generic distribution and use a different
codename than the Ubuntu release it is based on, which mean that apt_repository
cannot add detect and add the proper url without a better heuristic.
Before this fix
TASK: [apt_repository repo='ppa:vbernat/haproxy-1.5'] *************************
failed: [134.226.115.202] => {"cmd": ["apt-key", "adv", "--recv-keys", "--keyserver", "keyserver.ubuntu.com", "CFFB779AADC995E4F350A060505D97A41C61B9CD"], "failed": true, "rc": 2}
stderr: gpg: requesting key 1C61B9CD from hkp server keyserver.ubuntu.com
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
After the fix
TASK: [apt_repository repo='ppa:vbernat/haproxy-1.5'] *************************
changed: [134.226.115.202]
If one pins a package and does a 'apt-get dist-upgrade' then the
output looks like:
# apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
cassandra
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
The check for any changes made should only be on the 'upgraded' and
'newly installed' values and not include the 'to remove' and 'not
upgraded' values.
The default behavior is to update_cache if changed.
If you add more then one repo, you may not want to update cache for every repo separately.
So you can now disable update_cache with this new option e.g. update_cache=no
Updating cache can also be handled using the apt module.
Packages which are half-installed are not adequately represented by
the .is_installed field of the apt.package.Package object. By using the
lower-level apt_pkg.Package object (which provides the .current_state
field), we can check for a partially-installed state more accurately.
Fixes#3421
Without this, the first call to the easy_install module with a new virtualenv
will only create the virtualenv without installing the intended package, since
the `_is_package_installed` check will succeed as running /usr/bin/easy_install
as non-root user will return permission denied error with empty stdout.
Yum commandline permit to use a wildcard to enable and disable
repositories in the --enablerepo switch, permitting to enable
a complete set of repository at once ( like all rpmfusion, all
update-testing, etc ).
However, this doesn't work in yum due to more stringent checks
that verify that a exact match is given for the name of the
repository , see commit 5c26805.
This commit enhance the check by permitting to test more than
1 repository at a time, thus permitting to use wildcards.
1. Debian Squeeze is supported out of box now.
2. Repository type "deb" or "deb-src" should be explicitly specified.
3. If a source had beed added it must be possible to remove it.
4. PPA can be only used against Ubuntu hosts.
I'm seeing ansible hang when trying to remove a package, and the hung
process is `whiptail` like in #2763. It looks like we only use
`APT_ENVVARS` and `DPKG_OPTIONS` for the `apt` commands in install()
and upgrade(). This change uses them in remove() as well, which fixes
the hang.
The apt-key command takes an optional --keyring parameter representing
the path to a specific GPG keyring to operate on. If it's not given,
the command operates on all keyring files, i.e., /etc/apt/trusted.gpg
and /etc/apt/trusted.gpg.d/*.gpg.
This change adds a 'keyring' parameter to the apt_key module and
propagates it down to the apt-key command line. The main use case this
supports is organizing keys for third-party repos into individual
keyrings in /etc/apt/trusted.gpg.d, rather than putting them all in
the default keyring.
This fixes an asterisk glob problem in get_package_state() where a file
in /root/ could cause shell expansion if it matched the package name.
The actual problem is solved by running with shell=False.
This diff syncs package_latest() with the changes to package_present().
I have not managed to figure out how to handle the cornercases where
stderr is set but the command has not failed, so leave a FIXME blob for
other adventurers.
* Add '-m' to pkg_add incovation to get access to the "packagename-1.0: ok"
message.
* Watch for that message if we are about to fail because of stderr in
package_present().
This fixes a problem when trying to install a package with a specific version
number from a local directory and the local directory is checked after a remote
repository:
Error from http://ftp.eu.openbsd.org/pub/OpenBSD/[...]/packagename-1.0.tgz
ftp: Error retrieving file: 404 Not Found
packagename-1.0: ok
Previously, a configuration file name of None was being passed into
up2dateInitConfig(). This resulted in a correct configuration import,
but failed to properly save the configuration back to disk in the event
a different serverURL was supplied. This change removes support for
customizing the up2date filename entirely, and relies on up2date to
choose the default config filename.
Older python-apt modules don't export Package.installed_files and there
seems to be no other way to figure out if a package is
removed-but-not-purged, so we just always assume it's purged.
Signed-off-by: martin f. krafft <madduck@madduck.net>
A package may be removed but not purged with APT. The only way to
identify this state is by looking at the list of installed files of
a package. Even if the package has no files installed, this list will be
non-empty until the package is removed:
# python -c "import apt; c=apt.Cache(); c.update(); c.open(); p=c['ruby1.8']; print p, p.installed, p.installed_files"
<Package: name:'ruby1.8' id:1425> None [u'']
# dpkg --purge ruby1.8
(Reading database ... 27904 files and directories currently installed.)
Removing ruby1.8 ...
Purging configuration files for ruby1.8 ...
# python -c "import apt; c=apt.Cache(); c.update(); c.open(); p=c['ruby1.8']; print p, p.installed, p.installed_files"
<Package: name:'ruby1.8' id:1425> None []
See http://bugs.debian.org/712749 too.
If a package is not marked installed but it still 'has_files', then it
should be processed if the request is to purge it.
Signed-off-by: martin f. krafft <madduck@madduck.net>
A small error in the reuse of a variable caused packages to never get
purged. This commit fixes that.
Signed-off-by: martin f. krafft <madduck@madduck.net>
hardcoded lists in ansible code, just add WITH_ITEMS_USES_LIST in a
comment anywhere, and of course, support recieving params as list.
Signed-off-by: Brian Coca <briancoca+dev@gmail.com>
Migrated all examples: in DOCUMENTATION=''' string to standalone EXAMPLES=''' string
Added deprecation warning to moduledev.rst and remove deprecated example from it
Fixed up a few typos and uppercased some acronyms.
add consistency to how EXAMPLES are formatted
The biggest change has been to package_latest since it was previously
just comparing version numbers before and after an upgrade had run.
We now parse the output from a dry run instead.
Thanks to Johan Belin for triggering the discussion :).
rhnreg_ks command allows users to manage registration to a Red Hat
Network (RHN) (e.g. rhn.redhat.com) server. The moduel will also
interact with the specified RHN system via XMLRPC as needed.
Before proceeding with registration, the rhnreg_ks module will enable
the system to receive updates from RHN. This involves enabling the
appropriate RHN yum plugin, as well as disabling an active
subscription-manager yum plugin.
Once enabled, the module will support the following operations:
* configure
* register
* subscribe to custom child channels (see `rhn-channel` command)
* unregister
The subscription_manager module acts as a wrapper to the command
'subscription-manager'. The subscription-manager utility allows users
to manage RHN registration, subscription and yum repositories from the
Red Hat Entitlement platform.
Currently, this module supports the following sub-commands:
* config
* [un]register
* subscribe
This code:
```
if name.endswith('.tar.gz') or name.endswith('.tar.bz2') or
name.endswith('.zip'):
is_tar = True
```
was not checking whether name is defined since it is an
optional param.
**Summary**:
There was a bug in the previous commit; pip module would add --use-mirrors options to a source package when state is absent. The bug is resolved in this commit by checking ``not is_package`` in the if branch.
Furthermore, in order to support non-vcs source name like tarballs, we must not add -e option to the arg list. Given this circumstance, this commit have is_tar and is_vcs and the latter is checked to add -e option. Since mirrors do not make sense with vcs or tarball source, this commit will not add --use-mirrors (default to True) as always.
I have something like:
apt: pkg={{ item }} state=present
with_items:
- python-pysqlite2=2.6.3-*
- python-paramiko=1.7.7.1-*
But due to the use of *'s in the version specifications, the apt ansible
module always reports changed: true. This patch fixes that.