rhn_register fixes for username and password when unregistering
- Require username and password for unregistering and avoid "cannot marshal None unless allow_none is enabled" error when using an activation key and no channels specified. - Update test fixtures and add changelog Co-authored-by: WhyIsThisOpen <WhyIsThisOpen@users.noreply.github.com>
This commit is contained in:
parent
d8a690952e
commit
7bdca72713
3 changed files with 21 additions and 3 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- rhn_register - require username/password when unregistering and provide useful error message (https://github.com/ansible/ansible/issues/22300)
|
|
@ -295,11 +295,13 @@ class Rhn(redhat.RegistrationBase):
|
||||||
def subscribe(self, channels):
|
def subscribe(self, channels):
|
||||||
if not channels:
|
if not channels:
|
||||||
return
|
return
|
||||||
|
|
||||||
if self._is_hosted():
|
if self._is_hosted():
|
||||||
current_channels = self.api('channel.software.listSystemChannels', self.systemid)
|
current_channels = self.api('channel.software.listSystemChannels', self.systemid)
|
||||||
new_channels = [item['channel_label'] for item in current_channels]
|
new_channels = [item['channel_label'] for item in current_channels]
|
||||||
new_channels.extend(channels)
|
new_channels.extend(channels)
|
||||||
return self.api('channel.software.setSystemChannels', self.systemid, list(new_channels))
|
return self.api('channel.software.setSystemChannels', self.systemid, list(new_channels))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
current_channels = self.api('channel.software.listSystemChannels', self.systemid)
|
current_channels = self.api('channel.software.listSystemChannels', self.systemid)
|
||||||
current_channels = [item['label'] for item in current_channels]
|
current_channels = [item['label'] for item in current_channels]
|
||||||
|
@ -315,10 +317,13 @@ class Rhn(redhat.RegistrationBase):
|
||||||
new_childs.append(ch)
|
new_childs.append(ch)
|
||||||
out_base = 0
|
out_base = 0
|
||||||
out_childs = 0
|
out_childs = 0
|
||||||
|
|
||||||
if new_base:
|
if new_base:
|
||||||
out_base = self.api('system.setBaseChannel', self.systemid, new_base)
|
out_base = self.api('system.setBaseChannel', self.systemid, new_base)
|
||||||
|
|
||||||
if new_childs:
|
if new_childs:
|
||||||
out_childs = self.api('system.setChildChannels', self.systemid, new_childs)
|
out_childs = self.api('system.setChildChannels', self.systemid, new_childs)
|
||||||
|
|
||||||
return out_base and out_childs
|
return out_base and out_childs
|
||||||
|
|
||||||
def _is_hosted(self):
|
def _is_hosted(self):
|
||||||
|
@ -344,7 +349,13 @@ def main():
|
||||||
enable_eus=dict(default=False, type='bool'),
|
enable_eus=dict(default=False, type='bool'),
|
||||||
nopackages=dict(default=False, type='bool'),
|
nopackages=dict(default=False, type='bool'),
|
||||||
channels=dict(default=[], type='list'),
|
channels=dict(default=[], type='list'),
|
||||||
)
|
),
|
||||||
|
# username/password is required for state=absent, or if channels is not empty
|
||||||
|
# (basically anything that uses self.api requires username/password) but it doesnt
|
||||||
|
# look like we can express that with required_if/required_together/mutually_exclusive
|
||||||
|
|
||||||
|
# only username+password can be used for unregister
|
||||||
|
required_if=[['state', 'absent', ['username', 'password']]]
|
||||||
)
|
)
|
||||||
|
|
||||||
if not HAS_UP2DATE_CLIENT:
|
if not HAS_UP2DATE_CLIENT:
|
||||||
|
@ -404,6 +415,9 @@ def main():
|
||||||
if not rhn.is_registered:
|
if not rhn.is_registered:
|
||||||
module.exit_json(changed=False, msg="System already unregistered.")
|
module.exit_json(changed=False, msg="System already unregistered.")
|
||||||
|
|
||||||
|
if not (rhn.username and rhn.password):
|
||||||
|
module.fail_json(msg="Missing arguments, the system is currently registered and unregistration requires a username and password")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
rhn.unregister()
|
rhn.unregister()
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
|
|
@ -110,7 +110,7 @@ def test_without_required_parameters(capfd, patch_rhn):
|
||||||
TESTED_MODULE = rhn_register.__name__
|
TESTED_MODULE = rhn_register.__name__
|
||||||
TEST_CASES = [
|
TEST_CASES = [
|
||||||
[
|
[
|
||||||
# Registering an unregistered host and subscribing to one channel
|
# Registering an unregistered host with channels
|
||||||
{
|
{
|
||||||
'channels': 'rhel-x86_64-server-6',
|
'channels': 'rhel-x86_64-server-6',
|
||||||
'username': 'user',
|
'username': 'user',
|
||||||
|
@ -137,9 +137,11 @@ TEST_CASES = [
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
# Registering an unregistered host with only an activationkey and without subscribing any channels
|
# Registering an unregistered host without channels
|
||||||
{
|
{
|
||||||
'activationkey': 'key',
|
'activationkey': 'key',
|
||||||
|
'username': 'user',
|
||||||
|
'password': 'pass',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'calls': [
|
'calls': [
|
||||||
|
|
Loading…
Reference in a new issue