def guest_registered(self, host_sid, guest_sid): host_system_slots = server_lib.check_entitlement(host_sid) host_system_slots = list(host_system_slots.keys()) try: host_system_slots.remove("virtualization_host") except ValueError: pass guest_system_slots = server_lib.check_entitlement(guest_sid) guest_system_slots = list(guest_system_slots.keys()) for entitlement in host_system_slots: if entitlement not in guest_system_slots: try: rhnSQL.transaction(entitlement) procedure.rhn_entitlements.entitle_server(guest_sid, entitlement) except rhnSQL.SQLError: e = sys.exc_info()[1] rhnSQL.rollback(entitlement) log_error("Error adding entitlement %s to host ID-%s: %s" % (entitlement, guest_sid, str(e))) # rhnSQL.rollback() return
def guest_registered(self, host_sid, guest_sid): host_system_slots = server_lib.check_entitlement(host_sid) host_system_slots = host_system_slots.keys() try: host_system_slots.remove("virtualization_host") except ValueError: pass try: host_system_slots.remove("virtualization_host_platform") except ValueError: pass guest_system_slots = server_lib.check_entitlement(guest_sid) guest_system_slots = guest_system_slots.keys() for entitlement in host_system_slots: if entitlement not in guest_system_slots: try: procedure.rhn_entitlements.entitle_server(guest_sid, entitlement) except rhnSQL.SQLError, e: log_error("Error adding entitlement %s: %s" % (entitlement, str(e))) # rhnSQL.rollback() return
def new_system_user_pass(self, profile_name, os_release_name, version, arch, username, password, other): """ Registers a new system to an org specified by a username, password, and optionally an org id. New for RHEL 5. All args are strings except other. other is a dict with: * org_id - optional. Must be a string that contains the number. If it's not given, the default org is used. * reg_num - optional. It should be an EN. It will not be activated. It's used for automatic subscription to child channels and for deciding which service level to entitle the machine to (managment, provisioning, etc). If not given, the machine will only be registered to a base channel and entitled to the highest level possible. If a profile is created it will return a dict with: * system_id - the same xml as was previously returned * channels - a list of the channels (as strings) the system was subscribed to * failed_channels - a list of channels (as strings) that the system should have been subscribed to but couldn't be because they don't have the necessary entitlements available. Can contain all the channels including the base channel. * system_slots - a list of the system slots used (as strings). * failed_system_slots - a list of system slots (as strings) that they should have used but couldn't because there weren't available entitlements * universal_activation_key - a list of universal default activation keys (as strings) that were used while registering. Allowable slots are 'enterprise_entitled' (management), 'sw_mgr_entitled' (updates), 'monitoring_entitled' (monitoring add on to management), and provisioning_entitled (provisioning add on to management). The call will try to use the highest system slot available. An entry will be added to failed_system_slots for each one that is tried and fails and system_slots will contain the one that succeeded if any. Eg: Calling this on hosted with no reg num and only update entitlements will result in system_slots containing 'sw_mgr_entitled' and failed_system_slots containing 'enterprise_entitled'. If an error occurs which prevents the creation of a profile, a fault will be raised: TODO """ add_to_seclist(password) log_debug(4,'in new_system_user_pass') # release_name wasn't required in the old call, so I'm just going to # add it to other other['release_name'] = os_release_name # Authorize the username and password. Save the returned user object. user = self.validate_system_user(username, password) # This creates the rhnServer record and commits it to the db. # It also assigns the system a base channel. server_data = self.create_system(user, profile_name, version, arch, other) # Save the returned Server object newserv = server_data['server'] # Get the server db id. server_id = newserv.getid() # Get the server certificate file system_certificate = newserv.system_id() log_debug(4, 'Server id created as %s' % server_id) failures = [] unknowns = [] # Build our return values. attempted_channels = [] successful_channels = [] failed_channels = [] actual_channels = rhnChannel.channels_for_server(server_id) for channel in actual_channels: successful_channels.append(channel['label']) # If we don't have any successful channels, we know the base channel # failed. if len(successful_channels) == 0: log_debug(4, 'System %s not subscribed to any channels' % server_id) # Look up the base channel, and store it as a failure. try: base = rhnChannel.get_channel_for_release_arch( version, arch, newserv['org_id']) failed_channels.append(base['label']) # We want to swallow exceptions here as we are just generating data # for the review screen in rhn_register. except: pass # Store any of our child channel failures failed_channels = failed_channels + failures attempted_system_slots = ['enterprise_entitled', 'sw_mgr_entitled'] successful_system_slots = server_lib.check_entitlement(server_id) successful_system_slots = successful_system_slots.keys() failed_system_slots = [] # Check which entitlement level we got, starting with the highest. i = 0 for slot in attempted_system_slots: if slot in successful_system_slots: break i = i + 1 # Any entitlements we didn't have, we'll store as a failure. failed_system_slots = attempted_system_slots[0:i] universal_activation_key = [] if rhnFlags.test("universal_registration_token"): token = rhnFlags.get("universal_registration_token") universal_activation_key = token.get_tokens() return { 'system_id' : system_certificate, 'channels' : successful_channels, 'failed_channels' : failed_channels, 'failed_options' : unknowns, 'system_slots' : successful_system_slots, 'failed_system_slots' : failed_system_slots, 'universal_activation_key' : universal_activation_key }
def new_system_user_pass(self, profile_name, os_release_name, version, arch, username, password, other): """ Registers a new system to an org specified by a username, password, and optionally an org id. New for RHEL 5. All args are strings except other. other is a dict with: * org_id - optional. Must be a string that contains the number. If it's not given, the default org is used. * reg_num - optional. It should be an EN. It will not be activated. It's used for automatic subscription to child channels and for deciding which service level to entitle the machine to (managment, provisioning, etc). If not given, the machine will only be registered to a base channel and entitled to the highest level possible. If a profile is created it will return a dict with: * system_id - the same xml as was previously returned * channels - a list of the channels (as strings) the system was subscribed to * failed_channels - a list of channels (as strings) that the system should have been subscribed to but couldn't be because they don't have the necessary entitlements available. Can contain all the channels including the base channel. * system_slots - a list of the system slots used (as strings). * failed_system_slots - a list of system slots (as strings) that they should have used but couldn't because there weren't available entitlements * universal_activation_key - a list of universal default activation keys (as strings) that were used while registering. Allowable slots are 'enterprise_entitled' (management), 'sw_mgr_entitled' (updates), 'monitoring_entitled' (monitoring add on to management), and provisioning_entitled (provisioning add on to management). The call will try to use the highest system slot available. An entry will be added to failed_system_slots for each one that is tried and fails and system_slots will contain the one that succeeded if any. Eg: Calling this on hosted with no reg num and only update entitlements will result in system_slots containing 'sw_mgr_entitled' and failed_system_slots containing 'enterprise_entitled'. If an error occurs which prevents the creation of a profile, a fault will be raised: TODO """ add_to_seclist(password) log_debug(4,'in new_system_user_pass') # release_name wasn't required in the old call, so I'm just going to # add it to other other['release_name'] = os_release_name # Authorize the username and password. Save the returned user object. user = self.validate_system_user(username, password) # This creates the rhnServer record and commits it to the db. # It also assigns the system a base channel. server_data = self.create_system(user, profile_name, version, arch, other) # Save the returned Server object newserv = server_data['server'] # Get the server db id. server_id = newserv.getid() # Get the server certificate file system_certificate = newserv.system_id() log_debug(4, 'Server id created as %s' % server_id) failures = [] unknowns = [] # Build our return values. attempted_channels = [] successful_channels = [] failed_channels = [] actual_channels = rhnChannel.channels_for_server(server_id) for channel in actual_channels: successful_channels.append(channel['label']) # If we don't have any successful channels, we know the base channel # failed. if len(successful_channels) == 0: log_debug(4, 'System %s not subscribed to any channels' % server_id) # Look up the base channel, and store it as a failure. try: base = rhnChannel.get_channel_for_release_arch( version, arch, newserv['org_id']) failed_channels.append(base['label']) # We want to swallow exceptions here as we are just generating data # for the review screen in rhn_register. except: pass # Store any of our child channel failures failed_channels = failed_channels + failures attempted_system_slots = ['enterprise_entitled', 'sw_mgr_entitled'] successful_system_slots = server_lib.check_entitlement(server_id) successful_system_slots = successful_system_slots.keys() failed_system_slots = [] # Check which entitlement level we got, starting with the highest. i = 0 for slot in attempted_system_slots: if slot in successful_system_slots: break i = i + 1 # Any entitlements we didn't have, we'll store as a failure. failed_system_slots = attempted_system_slots[0:i] universal_activation_key = [] if rhnFlags.test("universal_registration_token"): token = rhnFlags.get("universal_registration_token") universal_activation_key = token.get_tokens() return { 'system_id' : system_certificate, 'channels' : successful_channels, 'failed_channels' : failed_channels, 'failed_options' : unknowns, 'system_slots' : successful_system_slots, 'failed_system_slots' : failed_system_slots, 'universal_activation_key' : universal_activation_key }