diff --git a/packaging/os/rhn_register.py b/packaging/os/rhn_register.py index d73f9ff9671..2a5496e52e2 100644 --- a/packaging/os/rhn_register.py +++ b/packaging/os/rhn_register.py @@ -279,10 +279,31 @@ class Rhn(RegistrationBase): def subscribe(self, channels=[]): if len(channels) <= 0: return - current_channels = self.api('channel.software.listSystemChannels', self.systemid) - new_channels = [item['channel_label'] for item in current_channels] - new_channels.extend(channels) - return self.api('channel.software.setSystemChannels', self.systemid, new_channels) + if self._is_hosted(): + current_channels = self.api('channel.software.listSystemChannels', self.systemid) + new_channels = [item['channel_label'] for item in current_channels] + new_channels.extend(channels) + return self.api('channel.software.setSystemChannels', self.systemid, list(new_channels)) + else: + current_channels = self.api('channel.software.listSystemChannels', self.systemid) + current_channels = [item['label'] for item in current_channels] + new_base = None + new_childs = [] + for ch in channels: + if ch in current_channels: + continue + if self.api('channel.software.getDetails', ch)['parent_channel_label'] == '': + new_base = ch + else: + if ch not in new_childs: + new_childs.append(ch) + out_base = 0 + out_childs = 0 + if new_base: + out_base = self.api('system.setBaseChannel', self.systemid, new_base) + if new_childs: + out_childs = self.api('system.setChildChannels', self.systemid, new_childs) + return out_base and out_childs def _subscribe(self, channels=[]): ''' @@ -298,6 +319,16 @@ class Rhn(RegistrationBase): if re.search(wanted_repo, available_channel): rc, stdout, stderr = self.module.run_command(rhn_channel_cmd + " --add --channel=%s" % available_channel, check_rc=True) + def _is_hosted(self): + ''' + Return True if we are running against Hosted (rhn.redhat.com) or + False otherwise (when running against Satellite or Spacewalk) + ''' + if 'rhn.redhat.com' in self.hostname: + return True + else: + return False + def main(): # Read system RHN configuration