Add cacheonly option to yum and dnf modules (#73820)
* Add integration test * Add changelog Co-authored-by: Matt Clay <matt@mystile.com>
This commit is contained in:
parent
0c101f3f76
commit
fdee5ca16d
8 changed files with 63 additions and 0 deletions
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
minor_changes:
|
||||
- yum - Add ``cacheonly`` option (https://github.com/ansible/ansible/issues/69397).
|
||||
- dnf - Add ``cacheonly`` option (https://github.com/ansible/ansible/issues/69397).
|
|
@ -26,6 +26,7 @@ yumdnf_argument_spec = dict(
|
|||
allow_downgrade=dict(type='bool', default=False),
|
||||
autoremove=dict(type='bool', default=False),
|
||||
bugfix=dict(required=False, type='bool', default=False),
|
||||
cacheonly=dict(type='bool', default=False),
|
||||
conf_file=dict(type='str'),
|
||||
disable_excludes=dict(type='str', default=None),
|
||||
disable_gpg_check=dict(type='bool', default=False),
|
||||
|
@ -71,6 +72,7 @@ class YumDnf(with_metaclass(ABCMeta, object)):
|
|||
self.allow_downgrade = self.module.params['allow_downgrade']
|
||||
self.autoremove = self.module.params['autoremove']
|
||||
self.bugfix = self.module.params['bugfix']
|
||||
self.cacheonly = self.module.params['cacheonly']
|
||||
self.conf_file = self.module.params['conf_file']
|
||||
self.disable_excludes = self.module.params['disable_excludes']
|
||||
self.disable_gpg_check = self.module.params['disable_gpg_check']
|
||||
|
|
|
@ -228,6 +228,12 @@ options:
|
|||
type: bool
|
||||
default: "no"
|
||||
version_added: "2.11"
|
||||
cacheonly:
|
||||
description:
|
||||
- Tells dnf to run entirely from system cache; does not download or update metadata.
|
||||
type: bool
|
||||
default: "no"
|
||||
version_added: "2.12"
|
||||
notes:
|
||||
- When used with a `loop:` each package will be processed individually, it is much more efficient to pass the list directly to the `name` option.
|
||||
- Group removal doesn't work if the group was installed with Ansible because
|
||||
|
@ -609,6 +615,9 @@ class DnfModule(YumDnf):
|
|||
if self.download_dir:
|
||||
conf.destdir = self.download_dir
|
||||
|
||||
if self.cacheonly:
|
||||
conf.cacheonly = True
|
||||
|
||||
# Default in dnf upstream is true
|
||||
conf.clean_requirements_on_remove = self.autoremove
|
||||
|
||||
|
|
|
@ -236,6 +236,12 @@ options:
|
|||
version_added: "1.5"
|
||||
default: "yes"
|
||||
type: bool
|
||||
cacheonly:
|
||||
description:
|
||||
- Tells yum to run entirely from system cache; does not download or update metadata.
|
||||
default: "no"
|
||||
type: bool
|
||||
version_added: "2.12"
|
||||
notes:
|
||||
- When used with a `loop:` each package will be processed individually,
|
||||
it is much more efficient to pass the list directly to the `name` option.
|
||||
|
@ -1558,6 +1564,9 @@ class YumModule(YumDnf):
|
|||
if self.disable_excludes:
|
||||
self.yum_basecmd.extend(['--disableexcludes=%s' % self.disable_excludes])
|
||||
|
||||
if self.cacheonly:
|
||||
self.yum_basecmd.extend(['--cacheonly'])
|
||||
|
||||
if self.download_only:
|
||||
self.yum_basecmd.extend(['--downloadonly'])
|
||||
|
||||
|
|
15
test/integration/targets/dnf/tasks/cacheonly.yml
Normal file
15
test/integration/targets/dnf/tasks/cacheonly.yml
Normal file
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Test cacheonly (clean before testing)
|
||||
command: dnf clean all
|
||||
|
||||
- name: Try installing from cache where it has been cleaned
|
||||
dnf:
|
||||
name: sos
|
||||
state: latest
|
||||
cacheonly: true
|
||||
register: dnf_result
|
||||
|
||||
- name: Verify dnf has not changed
|
||||
assert:
|
||||
that:
|
||||
- "not dnf_result is changed"
|
|
@ -66,3 +66,7 @@
|
|||
- include_tasks: nobest.yml
|
||||
when: (ansible_distribution == 'Fedora' and ansible_distribution_major_version is version('24', '>=')) or
|
||||
(ansible_distribution in ['RedHat', 'CentOS'] and ansible_distribution_major_version is version('8', '>='))
|
||||
|
||||
- include_tasks: cacheonly.yml
|
||||
when: (ansible_distribution == 'Fedora' and ansible_distribution_major_version is version('23', '>=')) or
|
||||
(ansible_distribution in ['RedHat', 'CentOS'] and ansible_distribution_major_version is version('8', '>='))
|
||||
|
|
16
test/integration/targets/yum/tasks/cacheonly.yml
Normal file
16
test/integration/targets/yum/tasks/cacheonly.yml
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
- name: Test cacheonly (clean before testing)
|
||||
command: yum clean all
|
||||
|
||||
- name: Try installing from cache where it has been cleaned
|
||||
yum:
|
||||
name: sos
|
||||
state: latest
|
||||
cacheonly: true
|
||||
register: yum_result
|
||||
ignore_errors: true
|
||||
|
||||
- name: Verify yum failure
|
||||
assert:
|
||||
that:
|
||||
- "yum_result is failed"
|
|
@ -76,3 +76,7 @@
|
|||
- ansible_architecture == 'x86_64'
|
||||
# Our output parsing expects us to be on yum, not dnf
|
||||
- ansible_distribution_major_version is version('7', '<=')
|
||||
|
||||
- import_tasks: cacheonly.yml
|
||||
when:
|
||||
- ansible_distribution in ['RedHat', 'CentOS', 'ScientificLinux', 'Fedora']
|
||||
|
|
Loading…
Reference in a new issue