Main Tables Views Materialized Views Indexes Constraints Triggers Procedures Functions Packages Sequences Java Sources Sanity Check Index DDL scrips
Package source Package body source

RHN_SERVER

DDL script

Package source

Legend: comment string keyword reserved word operator
     1: package rhn_server
     2: is
     3:     function system_service_level(
     4:     	server_id_in in number,
     5: 	service_level_in in varchar2
     6:     ) return number;
     7:     function can_change_base_channel(
     8:     	server_id_in in number
     9:     ) return number;
    10:     procedure set_custom_value(
    11:     	server_id_in in number,
    12: 	user_id_in in number,
    13: 	key_label_in varchar2,
    14:      	value_in in varchar2
    15:     );
    16:     function bulk_set_custom_value(
    17:     	key_label_in in varchar2,
    18: 	value_in in varchar2,
    19: 	set_label_in in varchar2,
    20: 	set_uid_in in number
    21:     ) return integer;
    22:     procedure snapshot_server(
    23:     	server_id_in in number,
    24: 	reason_in in varchar2
    25:     );
    26:     procedure bulk_snapshot(
    27:     	reason_in in varchar2,
    28:     	set_label_in in varchar2,
    29: 	set_uid_in in number
    30:     );
    31:     procedure tag_delete(
    32:     	server_id_in in number,
    33: 	tag_id_in in number
    34:     );
    35:     procedure tag_snapshot(
    36:     	snapshot_id_in in number,
    37: 	org_id_in in number,
    38:     	tagname_in in varchar2
    39:     );
    40:     procedure bulk_snapshot_tag(
    41:     	org_id_in in number,
    42:     	tagname_in varchar2,
    43: 	set_label_in in varchar2,
    44: 	set_uid_in in number
    45:     );
    46:     procedure remove_action(
    47: 	server_id_in in number,
    48: 	action_id_in in number
    49:     );
    50:     function check_user_access(server_id_in in number, user_id_in in number) return number;
    51:     function can_server_consume_virt_slot(server_id_in in number,
    52:                                               group_type_in in
    53:                                               rhnServerGroupType.label%TYPE)
    54:     return number;
    55:     procedure insert_into_servergroup (
    56: 	server_id_in in number,
    57: 	server_group_id_in in number
    58:     );
    59:     function insert_into_servergroup_maybe (
    60: 	server_id_in in number,
    61: 	server_group_id_in in number
    62:     ) return number;
    63: 	procedure insert_set_into_servergroup (
    64: 	server_group_id_in in number,
    65: 	user_id_in in number,
    66: 	set_label_in in varchar2
    67: 	);
    68:     procedure delete_from_servergroup (
    69: 	server_id_in in number,
    70: 	server_group_id_in in number
    71:     );
    72: 	procedure delete_set_from_servergroup (
    73: 	server_group_id_in in number,
    74: 	user_id_in in number,
    75: 	set_label_in in varchar2
    76: 	);
    77: 	procedure clear_servergroup (
    78: 	server_group_id_in in number
    79: 	);
    80: 	procedure delete_from_org_servergroups (
    81: 	server_id_in in number
    82: 	);
    83: 	function get_ip_address (
    84: 		server_id_in in number
    85: 	) return varchar2;
    86: end rhn_server;

Package body source

Legend: comment string keyword reserved word operator
     1: package body rhn_server
     2: is
     3:     function system_service_level(
     4:     	server_id_in in number,
     5: 	service_level_in in varchar2
     6:     ) return number is
     7:     cursor ents is
     8:       select label from rhnServerEntitlementView
     9:       where server_id = server_id_in;
    10:     retval number := 0;
    11:     begin
    12:          for ent in ents loop
    13:             retval := rhn_entitlements.entitlement_grants_service (ent.label, service_level_in);
    14:             if retval = 1 then
    15:                return retval;
    16:             end if;
    17:          end loop;
    18:          return retval;
    19:     end system_service_level;
    20:     function can_change_base_channel(server_id_in IN NUMBER)
    21:     return number
    22:     is
    23:     	throwaway number;
    24:     begin
    25: 	select 1 into throwaway
    26: 	  from rhnServer S
    27: 	 where S.id = server_id_in
    28: 	   and not exists (select 1 from rhnSatelliteInfo SI where SI.server_id = S.id)
    29: 	   and not exists (select 1 from rhnProxyInfo PI where PI.server_id = S.id);
    30: 	return 1;
    31:     exception
    32:     	when no_data_found
    33: 	    then
    34: 	    return 0;
    35:     end can_change_base_channel;
    36:     procedure set_custom_value(
    37:     	server_id_in in number,
    38: 	user_id_in in number,
    39: 	key_label_in in varchar2,
    40: 	value_in in varchar2
    41:     ) is
    42:     	key_id_val number;
    43:     begin
    44:     	select CDK.id into key_id_val
    45: 	  from rhnCustomDataKey CDK,
    46: 	       rhnServer S
    47: 	 where S.id = server_id_in
    48: 	   and S.org_id = CDK.org_id
    49: 	   and CDK.label = key_label_in;
    50: 	begin
    51: 	    insert into rhnServerCustomDataValue (server_id, key_id, value, created_by, last_modified_by)
    52: 	    values (server_id_in, key_id_val, value_in, user_id_in, user_id_in);
    53: 	exception
    54: 	    when DUP_VAL_ON_INDEX
    55: 	    	then
    56: 		update rhnServerCustomDataValue
    57: 		   set value = value_in,
    58: 		       last_modified_by = user_id_in
    59: 		 where server_id = server_id_in
    60: 		   and key_id = key_id_val;
    61: 	end;
    62:     end set_custom_value;
    63:     function bulk_set_custom_value(
    64:     	key_label_in in varchar2,
    65: 	value_in in varchar2,
    66: 	set_label_in in varchar2,
    67: 	set_uid_in in number
    68:     )
    69:     return integer
    70:     is
    71:     i integer := 0;
    72:     begin
    73:         i := 0;
    74:     	for server in rhn_set.set_iterator(set_label_in, set_uid_in)
    75: 	loop
    76: 	    if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
    77: 	    	rhn_server.set_custom_value(server.element, set_uid_in, key_label_in, value_in);
    78:             i := i + 1;
    79: 	    end if;
    80: 	end loop server;
    81:     return i;
    82:     end bulk_set_custom_value;
    83:     procedure bulk_snapshot_tag(
    84:     	org_id_in in number,
    85:         tagname_in in varchar2,
    86: 	set_label_in in varchar2,
    87: 	set_uid_in in number
    88:     ) is
    89:     	snapshot_id number;
    90:     begin
    91:     	for server in rhn_set.set_iterator(set_label_in, set_uid_in)
    92: 	loop
    93: 	    if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
    94: 	    	begin
    95: 	    	    select max(id) into snapshot_id
    96: 	    	    from rhnSnapshot
    97: 	    	    where server_id = server.element;
    98: 	    	exception
    99: 	    	    when NO_DATA_FOUND then
   100: 		    	rhn_server.snapshot_server(server.element, 'tagging system:  ' || tagname_in);
   101: 			select max(id) into snapshot_id
   102: 			from rhnSnapshot
   103: 			where server_id = server.element;
   104: 		end;
   105: 		begin
   106: 		    rhn_server.tag_snapshot(snapshot_id, org_id_in, tagname_in);
   107: 		exception
   108: 		    when DUP_VAL_ON_INDEX
   109: 		    	then
   110: 			null;
   111: 		end;
   112: 	    end if;
   113: 	end loop server;
   114:     end bulk_snapshot_tag;
   115:     procedure tag_delete(
   116:     	server_id_in in number,
   117: 	tag_id_in in number
   118:     ) is
   119:     	cursor snapshots is
   120: 		select	snapshot_id
   121: 		from	rhnSnapshotTag
   122: 		where	tag_id = tag_id_in;
   123: 	tag_id_tmp number;
   124:     begin
   125:     	select	id into tag_id_tmp
   126: 	from	rhnTag
   127: 	where	id = tag_id_in
   128: 	for update;
   129: 	delete
   130: 		from	rhnSnapshotTag
   131: 		where	server_id = server_id_in
   132: 			and tag_id = tag_id_in;
   133: 	for snapshot in snapshots loop
   134: 		return;
   135: 	end loop;
   136: 	delete
   137: 		from rhnTag
   138: 		where id = tag_id_in;
   139:     end tag_delete;
   140:     procedure tag_snapshot(
   141:         snapshot_id_in in number,
   142: 	org_id_in in number,
   143: 	tagname_in in varchar2
   144:     ) is
   145:     begin
   146:     	insert into rhnSnapshotTag (snapshot_id, server_id, tag_id)
   147: 	select snapshot_id_in, server_id, lookup_tag(org_id_in, tagname_in)
   148: 	from rhnSnapshot
   149: 	where id = snapshot_id_in;
   150:     end tag_snapshot;
   151:     procedure bulk_snapshot(
   152:     	reason_in in varchar2,
   153: 	set_label_in in varchar2,
   154: 	set_uid_in in number
   155:     ) is
   156:     begin
   157:     	for server in rhn_set.set_iterator(set_label_in, set_uid_in)
   158: 	loop
   159:     	    if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
   160: 	    	rhn_server.snapshot_server(server.element, reason_in);
   161: 	    end if;
   162: 	end loop server;
   163:     end bulk_snapshot;
   164:     procedure snapshot_server(
   165:     	server_id_in in number,
   166: 	reason_in in varchar2
   167:     ) is
   168:     	snapshot_id number;
   169: 	cursor revisions is
   170: 		select distinct
   171: 			cr.id
   172: 		from	rhnConfigRevision	cr,
   173: 			rhnConfigFileName	cfn,
   174: 			rhnConfigFile		cf,
   175: 			rhnConfigChannel	cc,
   176: 			rhnServerConfigChannel	scc
   177: 		where	1=1
   178: 			and scc.server_id = server_id_in
   179: 			and scc.config_channel_id = cc.id
   180: 			and cc.id = cf.config_channel_id
   181: 			and cf.id = cr.config_file_id
   182: 			and cr.id = cf.latest_config_revision_id
   183: 			and cf.config_file_name_id = cfn.id
   184: 			and cf.id = lookup_first_matching_cf(scc.server_id, cfn.path);
   185: 	locked integer;
   186:     begin
   187:     	select rhn_snapshot_id_seq.nextval into snapshot_id from dual;
   188: 	insert into rhnSnapshot (id, org_id, server_id, reason) (
   189: 		select	snapshot_id,
   190: 			s.org_id,
   191: 			server_id_in,
   192: 			reason_in
   193: 		from	rhnServer s
   194: 		where	s.id = server_id_in
   195: 	);
   196: 	insert into rhnSnapshotChannel (snapshot_id, channel_id) (
   197: 		select	snapshot_id, sc.channel_id
   198: 		from	rhnServerChannel sc
   199: 		where	sc.server_id = server_id_in
   200: 	);
   201: 	insert into rhnSnapshotServerGroup (snapshot_id, server_group_id) (
   202: 		select	snapshot_id, sgm.server_group_id
   203: 		from	rhnServerGroupMembers sgm
   204: 		where	sgm.server_id = server_id_in
   205: 	);
   206:         locked := 0;
   207:         while true loop
   208:             begin
   209:                 insert into rhnPackageNEVRA (id, name_id, evr_id, package_arch_id)
   210:                 select rhn_pkgnevra_id_seq.nextval, sp.name_id, sp.evr_id, sp.package_arch_id
   211:                 from rhnServerPackage sp
   212:                 where sp.server_id = server_id_in
   213:                         and not exists
   214:                         (select 1
   215:                                 from rhnPackageNEVRA nevra
   216:                                 where nevra.name_id = sp.name_id
   217:                                         and nevra.evr_id = sp.evr_id
   218:                                         and (nevra.package_arch_id = sp.package_arch_id
   219:                                             or (nevra.package_arch_id is null
   220:                                                 and sp.package_arch_id is null)));
   221:                 exit;
   222:             exception when dup_val_on_index then
   223:                 if locked = 1 then
   224:                     raise;
   225:                 else
   226:                     lock table rhnPackageNEVRA in exclusive mode;
   227:                     locked := 1;
   228:                 end if;
   229:             end;
   230:         end loop;
   231: 	insert into rhnSnapshotPackage (snapshot_id, nevra_id) (
   232:                 select distinct snapshot_id, nevra.id
   233:                 from    rhnServerPackage sp, rhnPackageNEVRA nevra
   234:                 where   sp.server_id = server_id_in
   235:                         and nevra.name_id = sp.name_id
   236:                         and nevra.evr_id = sp.evr_id
   237:                         and (nevra.package_arch_id = sp.package_arch_id
   238:                             or (nevra.package_arch_id is null
   239:                                 and sp.package_arch_id is null))
   240: 	);
   241: 	insert into rhnSnapshotConfigChannel ( snapshot_id, config_channel_id ) (
   242: 		select	snapshot_id, scc.config_channel_id
   243: 		from	rhnServerConfigChannel scc
   244: 		where	server_id = server_id_in
   245: 	);
   246: 	for revision in revisions loop
   247: 		insert into rhnSnapshotConfigRevision (
   248: 				snapshot_id, config_revision_id
   249: 			) values (
   250: 				snapshot_id, revision.id
   251: 			);
   252: 	end loop;
   253:     end snapshot_server;
   254:     procedure remove_action(
   255:     	server_id_in in number,
   256: 	action_id_in in number
   257:     ) is
   258:     	cursor chained_actions is
   259: 		select	id, prerequisite
   260: 		from	rhnAction
   261: 		start with id = action_id_in
   262: 		connect by prior id = prerequisite
   263: 		order by prerequisite desc;
   264: 	cursor sessions is
   265: 		select	s.id
   266: 		from	rhnKickstartSession s
   267: 		where	server_id_in in (s.old_server_id, s.new_server_id)
   268: 			and s.action_id = action_id_in
   269: 			and not exists (
   270: 				select	1
   271: 				from	rhnKickstartSessionState ss
   272: 				where	ss.id = s.state_id
   273: 					and ss.label in ('failed','complete')
   274: 			);
   275: 	type chain_end_type is table of number index by binary_integer;
   276: 	chain_ends chain_end_type;
   277: 	i number;
   278: 	prereq number := 1;
   279:     begin
   280: 	select	prerequisite
   281: 	into	prereq
   282: 	from	rhnAction
   283: 	where	id = action_id_in;
   284: 	if prereq is not null then
   285: 		rhn_exception.raise_exception('action_is_child');
   286: 	end if;
   287: 	i := 0;
   288: 	for action in chained_actions loop
   289: 		if action.prerequisite is null then
   290: 			chain_ends(i) := action.id;
   291: 			i := i + 1;
   292: 		else
   293: 			delete from rhnServerAction
   294: 				where server_id = server_id_in
   295: 				and action_id = action.id;
   296: 		end if;
   297: 	end loop;
   298: 	i := chain_ends.first;
   299: 	while i is not null loop
   300: 		delete from rhnServerAction
   301: 			where server_id = server_id_in
   302: 			and action_id = chain_ends(i);
   303: 		i := chain_ends.next(i);
   304: 	end loop;
   305: 	for s in sessions loop
   306: 		update rhnKickstartSession
   307: 			set 	state_id = (
   308: 					select	id
   309: 					from	rhnKickstartSessionState
   310: 					where	label = 'failed'
   311: 				),
   312: 				action_id = null
   313: 			where	id = s.id;
   314: 		set_ks_session_history_message(s.id, 'failed', 'Kickstart cancelled due to action removal');
   315: 	end loop;
   316:     end remove_action;
   317:     function check_user_access(server_id_in in number, user_id_in in number)
   318:     return number
   319:     is
   320:     	has_access number;
   321:     begin
   322:         select 1 into has_access
   323: 	  from rhnServer S,
   324: 	       web_contact wc
   325: 	 where wc.org_id = s.org_id
   326: 	   and s.id = server_id_in
   327: 	   and wc.id = user_id_in;
   328:     	if rhn_user.check_role(user_id_in, 'org_admin') = 1
   329: 	then
   330: 	    return 1;
   331: 	end if;
   332:     	select 1 into has_access
   333: 	  from rhnServerGroupMembers SGM,
   334: 	       rhnUserServerGroupPerms USG
   335: 	 where SGM.server_group_id = USG.server_group_id
   336: 	   and SGM.server_id = server_id_in
   337: 	   and USG.user_id = user_id_in
   338: 	   and rownum = 1;
   339: 	return 1;
   340:     exception
   341:     	when no_data_found
   342: 	    then
   343: 	    return 0;
   344:     end check_user_access;
   345:     function can_server_consume_virt_slot(server_id_in in number,
   346:                                            group_type_in in
   347:                                            rhnServerGroupType.label%TYPE)
   348:     return number
   349:     is
   350:         cursor server_virt_slots is
   351:             select vi.VIRTUAL_SYSTEM_ID
   352:             from
   353:                 rhnVirtualInstance vi
   354:             where
   355:                 vi.VIRTUAL_SYSTEM_ID = server_id_in
   356:                 and exists ( select 1
   357:                      from rhnServerEntitlementView sev
   358:                  where vi.HOST_SYSTEM_ID = sev.server_id
   359:                  and sev.label in ('virtualization_host',
   360:                                    'virtualization_host_platform') )
   361:                 and exists ( select 1
   362:                      from rhnServerEntitlementView sev2
   363:                  where vi.HOST_SYSTEM_ID = sev2.server_id
   364:                  and sev2.label = group_type_in );
   365:     begin
   366:         for server_virt_slot in server_virt_slots loop
   367:             return 1;
   368:         end loop;
   369:         return 0;
   370:     end can_server_consume_virt_slot;
   371:     procedure insert_into_servergroup (
   372: 		server_id_in in number,
   373: 		server_group_id_in in number
   374:     ) is
   375: 		cursor sg_users is
   376: 			select	user_id id
   377: 			from	rhnUserServerGroupPerms
   378: 			where	server_group_id = server_group_id_in;
   379: 		used_slots number;
   380: 		max_slots number;
   381: 		org_id number;
   382: 		mgmt_available number;
   383: 		mgmt_upgrade number;
   384: 		mgmt_sgid number;
   385: 		prov_available number;
   386: 		prov_upgrade number;
   387: 		prov_sgid number;
   388: 		group_label rhnServerGroupType.label%TYPE;
   389: 		group_type number;
   390: 	begin
   391: 		select	sg.group_type, sg.org_id, sg.current_members, sg.max_members
   392: 		into	group_type, org_id, used_slots, max_slots
   393: 		from	rhnServerGroup sg
   394: 		where	sg.id = server_group_id_in
   395: 		for update of sg.current_members;
   396: 		if group_type is null then
   397: 			if used_slots >= max_slots then
   398: 				rhn_exception.raise_exception('servergroup_max_members');
   399: 			end if;
   400: 			insert into rhnServerGroupMembers(
   401: 					server_id, server_group_id
   402: 				) values (
   403: 					server_id_in, server_group_id_in
   404: 				);
   405: 			update rhnServerGroup
   406: 				set current_members = current_members + 1
   407: 				where id = server_group_id_in;
   408: 			for u in sg_users loop
   409: 				rhn_cache.update_perms_for_user(u.id);
   410: 			end loop;
   411: 			return;
   412: 		end if;
   413: 		select	label
   414: 		into	group_label
   415: 		from	rhnServerGroupType	sgt
   416: 		where	sgt.id = group_type;
   417: 		if group_label in ('sw_mgr_entitled',
   418:                            'enterprise_entitled',
   419:                            'monitoring_entitled',
   420:                            'provisioning_entitled',
   421:                            'virtualization_host',
   422:                            'virtualization_host_platform') then
   423: 			if used_slots >= max_slots and
   424:                (can_server_consume_virt_slot(server_id_in, group_label) != 1)
   425:                then
   426: 				rhn_exception.raise_exception('servergroup_max_members');
   427: 			end if;
   428: 			insert into rhnServerGroupMembers(
   429: 					server_id, server_group_id
   430: 				) values (
   431: 					server_id_in, server_group_id_in
   432: 				);
   433:             if can_server_consume_virt_slot(server_id_in, group_label) = 0 then
   434:                 update rhnServerGroup
   435:                 set current_members = current_members + 1
   436:                 where id = server_group_id_in;
   437:             end if;
   438: 			return;
   439: 		end if;
   440: 	end;
   441: 	function insert_into_servergroup_maybe (
   442: 		server_id_in in number,
   443: 		server_group_id_in in number
   444: 	) return number is
   445: 		retval number := 0;
   446: 		cursor servergroups is
   447: 			select	s.id	server_id,
   448: 					sg.id	server_group_id
   449: 			from	rhnServerGroup	sg,
   450: 					rhnServer		s
   451: 			where	s.id = server_id_in
   452: 				and sg.id = server_group_id_in
   453: 				and s.org_id = sg.org_id
   454: 				and not exists (
   455: 					select	1
   456: 					from	rhnServerGroupMembers sgm
   457: 					where	sgm.server_id = s.id
   458: 						and sgm.server_group_id = sg.id
   459: 				);
   460: 	begin
   461: 		for sgm in servergroups loop
   462: 			rhn_server.insert_into_servergroup(sgm.server_id, sgm.server_group_id);
   463: 			retval := retval + 1;
   464: 		end loop;
   465: 		return retval;
   466: 	end insert_into_servergroup_maybe;
   467: 	procedure insert_set_into_servergroup (
   468: 		server_group_id_in in number,
   469: 		user_id_in in number,
   470: 		set_label_in in varchar2
   471: 	) is
   472: 		cursor servers is
   473: 			select	st.element	id
   474: 			from	rhnSet		st
   475: 			where	st.user_id = user_id_in
   476: 				and st.label = set_label_in
   477: 				and exists (
   478: 					select	1
   479: 					from	rhnUserManagedServerGroups umsg
   480: 					where	umsg.server_group_id = server_group_id_in
   481: 						and umsg.user_id = user_id_in
   482: 					)
   483: 				and not exists (
   484: 					select	1
   485: 					from	rhnServerGroupMembers sgm
   486: 					where	sgm.server_id = st.element
   487: 						and sgm.server_group_id = server_group_id_in
   488: 				);
   489: 	begin
   490: 		for s in servers loop
   491: 			rhn_server.insert_into_servergroup(s.id, server_group_id_in);
   492: 		end loop;
   493: 	end insert_set_into_servergroup;
   494:     procedure delete_from_servergroup (
   495:     	server_id_in in number,
   496: 		server_group_id_in in number
   497:     ) is
   498: 		cursor sg_users is
   499: 			select	user_id id
   500: 			from	rhnUserServerGroupPerms
   501: 			where	server_group_id = server_group_id_in;
   502:         cursor server_virt_groups is
   503:             select 1
   504:             from rhnServerEntitlementVirtual sev
   505:             where sev.server_id = server_id_in
   506:             and sev.server_group_id = server_group_id_in;
   507: 		oid number;
   508: 		mgmt_sgid number;
   509: 		label rhnServerGroupType.label%TYPE;
   510: 		group_type number;
   511: 	begin
   512: 		begin
   513: 			select	sg.group_type, sg.org_id
   514: 			into	group_type,	oid
   515: 			from	rhnServerGroupMembers	sgm,
   516: 					rhnServerGroup			sg
   517: 			where	sg.id = server_group_id_in
   518: 				and sg.id = sgm.server_group_id
   519: 				and sgm.server_id = server_id_in
   520: 			for update of sg.current_members;
   521: 		exception
   522: 			when no_data_found then
   523: 				rhn_exception.raise_exception('server_not_in_group');
   524: 		end;
   525: 		if group_type is null then
   526: 			delete from rhnServerGroupMembers
   527: 				where server_group_id = server_group_id_in
   528: 				and	server_id = server_id_in;
   529: 			update rhnServerGroup
   530: 				set current_members = current_members - 1
   531: 				where id = server_group_id_in;
   532: 			for u in sg_users loop
   533: 				rhn_cache.update_perms_for_user(u.id);
   534: 			end loop;
   535: 			return;
   536: 		end if;
   537: 		select	sgt.label
   538: 		into	label
   539: 		from	rhnServerGroupType sgt
   540: 		where	sgt.id = group_type;
   541: 		if label in ('sw_mgr_entitled',
   542:                      'enterprise_entitled',
   543:                      'provisioning_entitled',
   544:                      'monitoring_entitled',
   545:                      'virtualization_host',
   546:                      'virtualization_host_platform') then
   547:             for server_virt_group in server_virt_groups loop
   548:                 delete from rhnServerGroupMembers
   549:                 where server_group_id = server_group_id_in
   550:                 and	server_id = server_id_in;
   551:                 return;
   552:             end loop;
   553:             delete from rhnServerGroupMembers
   554:             where server_group_id = server_group_id_in
   555:             and	server_id = server_id_in;
   556:             update rhnServerGroup
   557:             set current_members = current_members - 1
   558:             where id = server_group_id_in;
   559: 		end if;
   560: 	end;
   561: 	procedure delete_set_from_servergroup (
   562: 		server_group_id_in in number,
   563: 		user_id_in in number,
   564: 		set_label_in in varchar2
   565: 	) is
   566: 		cursor servergroups is
   567: 			select	sgm.server_id, sgm.server_group_id
   568: 			from	rhnSet st,
   569: 					rhnServerGroupMembers sgm
   570: 			where	sgm.server_group_id = server_group_id_in
   571: 				and st.user_id = user_id_in
   572: 				and st.label = set_label_in
   573: 				and sgm.server_id = st.element
   574: 				and exists (
   575: 					select	1
   576: 					from	rhnUserManagedServerGroups usgp
   577: 					where	usgp.server_group_id = server_group_id_in
   578: 						and usgp.user_id = user_id_in
   579: 				);
   580: 	begin
   581: 		for sgm in servergroups loop
   582: 			rhn_server.delete_from_servergroup(sgm.server_id, server_group_id_in);
   583: 		end loop;
   584: 	end delete_set_from_servergroup;
   585: 	procedure clear_servergroup (
   586: 		server_group_id_in in number
   587: 	) is
   588: 		cursor servers is
   589: 			select	sgm.server_id	id
   590: 			from	rhnServerGroupMembers sgm
   591: 			where	sgm.server_group_id = server_group_id_in;
   592: 	begin
   593: 		for s in servers loop
   594: 			rhn_server.delete_from_servergroup(s.id, server_group_id_in);
   595: 		end loop;
   596: 	end clear_servergroup;
   597: 	procedure delete_from_org_servergroups (
   598: 		server_id_in in number
   599: 	) is
   600: 		cursor servergroups is
   601: 			select	sgm.server_group_id id
   602: 			from	rhnServerGroup sg,
   603: 					rhnServerGroupMembers sgm
   604: 			where	sgm.server_id = server_id_in
   605: 				and sgm.server_group_id = sg.id
   606: 				and sg.group_type is null;
   607: 	begin
   608: 		for sg in servergroups loop
   609: 			rhn_server.delete_from_servergroup(server_id_in, sg.id);
   610: 		end loop;
   611: 	end delete_from_org_servergroups;
   612: 	function get_ip_address (
   613: 		server_id_in in number
   614: 	) return varchar2 is
   615: 		cursor interfaces is
   616: 			select	name, ip_addr
   617: 			from	rhnServerNetInterface
   618: 			where	server_id = server_id_in
   619: 				and ip_addr != '127.0.0.1';
   620: 		cursor addresses is
   621: 			select	ipaddr ip_addr
   622: 			from	rhnServerNetwork
   623: 			where	server_id = server_id_in
   624: 				and ipaddr != '127.0.0.1';
   625: 	begin
   626: 		for addr in addresses loop
   627: 			return addr.ip_addr;
   628: 		end loop;
   629: 		for iface in interfaces loop
   630: 			return iface.ip_addr;
   631: 		end loop;
   632: 		return NULL;
   633: 	end get_ip_address;
   634: end rhn_server;