backend/server/rhnServer/server_hardware.py
| 349 +++-
java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
| 60
java/code/src/com/redhat/rhn/domain/server/NetworkInterface.hbm.xml
| 5
java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
| 165 +-
java/code/src/com/redhat/rhn/domain/server/Server.java
| 6
java/code/src/com/redhat/rhn/domain/server/ServerNetAddress4.hbm.xml
| 24
java/code/src/com/redhat/rhn/domain/server/ServerNetAddress4.java
| 116 +
java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.hbm.xml
| 31
java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.java
| 116 +
java/code/src/com/redhat/rhn/domain/server/test/NetworkInterfaceTest.java
| 3
java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java
| 3
java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsAction.java
| 4
java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsCompareAction.java
| 3
java/code/src/com/redhat/rhn/frontend/action/systems/sdc/SystemHardwareAction.java
| 18
java/code/src/com/redhat/rhn/frontend/dto/SystemCompareDto.java
| 26
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
| 10
java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
| 7
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/NetworkInterfaceSerializer.java
| 24
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
| 13
java/code/src/com/redhat/rhn/manager/kickstart/test/KickstartManagerTest.java
| 6
java/code/src/com/redhat/rhn/manager/system/SystemManager.java
| 23
java/code/webapp/WEB-INF/nav/duplicate_systems_tabs.xml
| 3
java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystems.jsp
| 4
java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystemscompare.jsp
| 12
java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp
| 70
java/code/webapp/WEB-INF/struts-config.xml
| 23
rel-eng/packages/spacewalk-schema
| 2
reporting/reports/data/errata-systems
| 6
reporting/reports/data/inventory
| 8
schema/spacewalk/common/tables/rhnCpu.sql
| 2
schema/spacewalk/common/tables/rhnRam.sql
| 2
schema/spacewalk/common/tables/rhnServerDMI.sql
| 2
schema/spacewalk/common/tables/rhnServerNetAddress4.sql
| 39
schema/spacewalk/common/tables/rhnServerNetAddress6.sql
| 39
schema/spacewalk/common/tables/rhnServerNetInterface.sql
| 9
schema/spacewalk/common/tables/tables.deps
| 2
schema/spacewalk/oracle/packages/rhn_server.pkb
| 12
schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
| 8
schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
| 3
schema/spacewalk/postgres/packages/rhn_server.pkb
| 10
schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
| 10
schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
| 6
schema/spacewalk/spacewalk-schema.spec
| 14
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle
| 9
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql
| 11
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle
| 39
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql
| 18
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql
| 6
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql
| 3
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle
| 39
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql
| 17
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle
| 750 +++++++++
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
| 803 ++++++++++
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle
| 33
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql
| 36
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle
| 12
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql
| 17
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/125-alter-index-rhnRam.sql.oracle
| 6
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/125-alter-index-rhnRam.sql.postgresql
| 6
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/126-alter-index-rhnCpu.sql.oracle
| 6
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/126-alter-index-rhnCpu.sql.postgresql
| 6
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/127-alter-index-rhnServerDmi.sql.oracle
| 6
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/127-alter-index-rhnServerDmi.sql.postgresql
| 6
web/modules/rhn/RHN/DB/Server.pm
| 9
web/modules/rhn/RHN/DB/Server/NetInterface.pm
| 86 -
web/modules/sniglets/Sniglets/Servers.pm
| 62
66 files changed, 2942 insertions(+), 342 deletions(-)
New commits:
commit 11238096f1236de9991e40d5a5c685a62ce5de88
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Tue Nov 29 14:17:16 2011 +0100
Automatic commit of package [spacewalk-schema] release [1.6.31-1].
diff --git a/rel-eng/packages/spacewalk-schema b/rel-eng/packages/spacewalk-schema
index 369f8ad..e0c7156 100644
--- a/rel-eng/packages/spacewalk-schema
+++ b/rel-eng/packages/spacewalk-schema
@@ -1 +1 @@
-1.6.30-1 schema/spacewalk/
+1.6.31-1 schema/spacewalk/
diff --git a/schema/spacewalk/spacewalk-schema.spec
b/schema/spacewalk/spacewalk-schema.spec
index 24d86f2..9d3f0bf 100644
--- a/schema/spacewalk/spacewalk-schema.spec
+++ b/schema/spacewalk/spacewalk-schema.spec
@@ -2,7 +2,7 @@ Name: spacewalk-schema
Group: Applications/Internet
Summary: Oracle SQL schema for Spacewalk server
-Version: 1.6.30
+Version: 1.6.31
Release: 1%{?dist}
Source0: %{name}-%{version}.tar.gz
@@ -66,6 +66,18 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man1/spacewalk-sql*
%changelog
+* Tue Nov 29 2011 Miroslav Suchý 1.6.31-1
+- IPv6: in tables rhnRam, rhnCpu and rhnServerDMI allow only one record per
+ server
+- IPv6: insert id from sequence using trigger
+- IPv6: get_hw_info_as_clob schema upgrade script (mzazrivec(a)redhat.com)
+- IPv6: upgrade script for rhn_server.pkb (mzazrivec(a)redhat.com)
+- IPv6: schema upgrade
+- IPv6: get_hw_info_as_clob: adapt to IPv6 changes (mzazrivec(a)redhat.com)
+- IPv6: update rhn_server.get_ip_address() to reflect IPv6 changes
+ (mzazrivec(a)redhat.com)
+- IPv6: schema change
+
* Fri Nov 25 2011 Jan Pazdziora 1.6.30-1
- Fix the in out parameter handling.
commit fb8b7fecd2d3ff0e4ff70d879a759f7af6be0253
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Nov 24 14:48:59 2011 +0100
IPv6: reporting - make inventory report IPv6 aware
diff --git a/reporting/reports/data/inventory b/reporting/reports/data/inventory
index 836b4b4..7d7687b 100755
--- a/reporting/reports/data/inventory
+++ b/reporting/reports/data/inventory
@@ -13,7 +13,8 @@ columns:
server_id:i System identifier
profile_name Profile name, as stored on server
hostname Hostname, as reported by the system
- ip_address IP address, as reported by the system
+ ip_address IPv4 address, as reported by the system
+ ipv6_address IPv6 address, as reported by the system
registered_by User under which the system is registered
registration_time Registration time
last_checkin_time Last checkin time
@@ -40,7 +41,7 @@ multival_columns:
sql:
- select server_id, profile_name, hostname, ip_address, registered_by,
+ select server_id, profile_name, hostname, ip_address, ipv6_address, registered_by,
registration_time, last_checkin_time, kernel_version,
packages_out_of_date, errata_out_of_date,
software_channel, configuration_channel,
@@ -48,6 +49,7 @@ sql:
from (
select rhnserver.id as server_id, rhnserver.name as profile_name,
rhnservernetwork.hostname, trim(rhnservernetwork.ipaddr) as ip_address,
+ trim(rhnservernetwork.ip6addr) as ipv6_address,
( select login from web_contact where rhnserver.creator_id = web_contact.id ) as
registered_by,
to_char(rhnserver.created, 'YYYY-MM-DD HH24:MI:SS') as registration_time,
( select to_char(checkin, 'YYYY-MM-DD HH24:MI:SS') from rhnserverinfo where
rhnserver.id = server_id ) as last_checkin_time,
@@ -75,7 +77,7 @@ sql:
get_hw_info_as_clob(rhnserver.id, '; ') as hardware
from rhnserver left outer join
(
- select server_id, hostname, ipaddr
+ select server_id, hostname, ipaddr, ip6addr
from rhnservernetwork
where id in (
select min(id)
commit 6293a68dcf2cdd622db2ea2a940ff7a3ae56373e
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Nov 24 14:36:25 2011 +0100
IPv6: reporting - make errata-systems report IPv6 aware
diff --git a/reporting/reports/data/errata-systems
b/reporting/reports/data/errata-systems
index 41e34ae..8750703 100755
--- a/reporting/reports/data/errata-systems
+++ b/reporting/reports/data/errata-systems
@@ -14,6 +14,7 @@ columns:
profile_name Profile name, as stored on server
hostname Hostname, as reported by the system
ip_address IP address, as reported by the system
+ ipv6_address IPv6 address, as reported by the system
sql:
@@ -21,11 +22,12 @@ sql:
select rhnErrata.advisory_name as advisory,
rhnServerNeededErrataCache.server_id,
rhnServer.name as profile_name,
- rhnservernetwork.hostname, trim(rhnservernetwork.ipaddr) as ip_address
+ rhnservernetwork.hostname, trim(rhnservernetwork.ipaddr) as ip_address,
+ trim(rhnservernetwork.ip6addr) as ipv6_address
from rhnErrata, rhnServer,
rhnServerNeededErrataCache left outer join
(
- select server_id, hostname, ipaddr
+ select server_id, hostname, ipaddr, ip6addr
from rhnservernetwork
where id in (
select min(id)
commit dffb260807ab1a1fb24758d4fa46102bc06ca9f0
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Nov 23 16:22:12 2011 +0100
IPv6: filter out params, which are not used in query
addressing:
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/spacewalk/server/apacheRequest.py",
line 123, in call_function
response = apply(func, params)
File "/usr/share/rhn/server/handlers/xmlrpc/registration.py", line 999, in
refresh_hw_profile
server.save_hardware()
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_wrapper.py",
line 90, in save_hardware
ret = self.save_hardware_byid(self.server["id"])
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 917, in save_hardware_byid
hw.save(sysid)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 473, in save
info['ipv6'].save(self.get_server_id(server_id, name))
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 635, in save
self._delete(deletes)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 657, in _delete
return _dml(h, params)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 742, in _dml
rowcount = apply(statement.executemany, (), params)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnSQL/sql_base.py", line
172, in executemany
return apply(self._execute_wrapper, (self._executemany, ) + p, kw)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnSQL/driver_cx_Oracle.py",
line 108, in _execute_wrapper
retval = apply(function, p, kw)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnSQL/driver_cx_Oracle.py",
line 208, in _executemany
self._real_cursor.executemany(None, arr)
SQLError: (1036, 'ORA-01036: illegal variable name/number\n', 'delete from
rhnServerNetAddress6 where interface_id =
+:interface_id and address = :address and scope = :scope')
diff --git a/backend/server/rhnServer/server_hardware.py
b/backend/server/rhnServer/server_hardware.py
index d09d83d..e9f67de 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -439,7 +439,7 @@ class NetIfaceInformation(Device):
deletes.append({'server_id' : server_id, 'name' : name})
continue
- uploaded_iface = ifaces[name]
+ uploaded_iface = ifaces[name].copy()
del ifaces[name]
if _hash_eq(uploaded_iface, iface):
# Same value
@@ -611,6 +611,8 @@ class NetIfaceAddress(Device):
address = iface['address']
if not self.ifaces.has_key(iface['address']):
# To be deleted
+ # filter out params, which are not used in query
+ iface = dict((column, iface[column]) for column in self.unique)
deletes.append(iface)
continue
uploaded_iface = ifaces[address]
commit 72f746d24695122f8f02118a41f112baa0b0dd97
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Nov 23 15:51:19 2011 +0100
IPv6: do not pass to oracle more params than is necessary
oracle binds all parameter it get and if it could match the type to
some SQL type it will raise an error.
Exception Handler Information
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/spacewalk/server/apacheRequest.py",
line 123, in call_function
response = apply(func, params)
File "/usr/share/rhn/server/handlers/xmlrpc/registration.py", line 999, in
refresh_hw_profile
server.save_hardware()
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_wrapper.py",
line 90, in save_hardware
ret = self.save_hardware_byid(self.server["id"])
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 913, in save_hardware_byid
hw.save(sysid)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 463, in save
self._update(updates)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 528, in _update
return _dml(h, params)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 738, in _dml
rowcount = apply(statement.executemany, (), params)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnSQL/sql_base.py", line
172, in executemany
return apply(self._execute_wrapper, (self._executemany, ) + p, kw)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnSQL/driver_cx_Oracle.py",
line 108, in _execute_wrapper
retval = apply(function, p, kw)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnSQL/driver_cx_Oracle.py",
line 208, in _executemany
self._real_cursor.executemany(None, arr)
SQLError: (None, 'Variable_TypeByValue(): unhandled data type instance',
'update rhnServerNetInterface set hw_addr =
+:hw_addr, module = :module where server_id = :server_id and name = :name')
diff --git a/backend/server/rhnServer/server_hardware.py
b/backend/server/rhnServer/server_hardware.py
index e44b6e4..d09d83d 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -445,6 +445,10 @@ class NetIfaceInformation(Device):
# Same value
continue
uploaded_iface.update({'name' : name, 'server_id' :
server_id})
+ if 'ipv4' in uploaded_iface:
+ del(uploaded_iface['ipv4'])
+ if 'ipv6' in uploaded_iface:
+ del(uploaded_iface['ipv6'])
updates.append(uploaded_iface)
# Everything else in self.ifaces has to be inserted
commit 6a198fa56d7bf22ac49b525f26d4a2d146574293
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Tue Nov 22 10:53:29 2011 +0100
IPv6: in tables rhnRam, rhnCpu and rhnServerDMI allow only one record per server
Java part of Spacewalk assume only one record per server there.
If there are more records per server tomcat will fail with traceback of
apocalyptic size.
diff --git a/schema/spacewalk/common/tables/rhnCpu.sql
b/schema/spacewalk/common/tables/rhnCpu.sql
index 849068e..dcdb923 100644
--- a/schema/spacewalk/common/tables/rhnCpu.sql
+++ b/schema/spacewalk/common/tables/rhnCpu.sql
@@ -48,7 +48,7 @@ CREATE TABLE rhnCpu
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_cpu_server_id_idx
+CREATE UNIQUE INDEX rhn_cpu_server_id_uq
ON rhnCpu (server_id)
TABLESPACE [[4m_tbs]]
NOLOGGING;
diff --git a/schema/spacewalk/common/tables/rhnRam.sql
b/schema/spacewalk/common/tables/rhnRam.sql
index 84dfb71..67a02c1 100644
--- a/schema/spacewalk/common/tables/rhnRam.sql
+++ b/schema/spacewalk/common/tables/rhnRam.sql
@@ -32,7 +32,7 @@ CREATE TABLE rhnRam
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_ram_sid_idx
+CREATE UNIQUE INDEX rhn_ram_sid_uq
ON rhnRam (server_id)
TABLESPACE [[4m_tbs]]
NOLOGGING;
diff --git a/schema/spacewalk/common/tables/rhnServerDMI.sql
b/schema/spacewalk/common/tables/rhnServerDMI.sql
index 2e5e786..23caafb 100644
--- a/schema/spacewalk/common/tables/rhnServerDMI.sql
+++ b/schema/spacewalk/common/tables/rhnServerDMI.sql
@@ -38,7 +38,7 @@ CREATE TABLE rhnServerDMI
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_server_dmi_sid_idx
+CREATE UNIQUE INDEX rhn_server_dmi_sid_uq
ON rhnServerDMI (server_id)
TABLESPACE [[2m_tbs]]
NOLOGGING;
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/125-alter-index-rhnRam.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/125-alter-index-rhnRam.sql.oracle
new file mode 100644
index 0000000..8c6e6ee
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/125-alter-index-rhnRam.sql.oracle
@@ -0,0 +1,6 @@
+DROP INDEX rhn_ram_sid_idx;
+
+CREATE UNIQUE INDEX rhn_ram_sid_uq
+ ON rhnRam (server_id)
+ TABLESPACE [[4m_tbs]]
+ NOLOGGING;
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/125-alter-index-rhnRam.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/125-alter-index-rhnRam.sql.postgresql
new file mode 100644
index 0000000..2c01a8f
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/125-alter-index-rhnRam.sql.postgresql
@@ -0,0 +1,6 @@
+-- oracle equivalent source sha1 586724a3a2befe543cd5352b7e1d3d88f82d82f3
+
+DROP INDEX rhn_ram_sid_idx;
+
+CREATE UNIQUE INDEX rhn_ram_sid_uq
+ ON rhnRam (server_id);
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/126-alter-index-rhnCpu.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/126-alter-index-rhnCpu.sql.oracle
new file mode 100644
index 0000000..054cc64
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/126-alter-index-rhnCpu.sql.oracle
@@ -0,0 +1,6 @@
+DROP INDEX rhn_cpu_server_id_idx;
+
+CREATE UNIQUE INDEX rhn_cpu_server_id_uq
+ ON rhnCpu (server_id)
+ TABLESPACE [[4m_tbs]]
+ NOLOGGING;
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/126-alter-index-rhnCpu.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/126-alter-index-rhnCpu.sql.postgresql
new file mode 100644
index 0000000..a7e35c1
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/126-alter-index-rhnCpu.sql.postgresql
@@ -0,0 +1,6 @@
+-- oracle equivalent source sha1 061451bfe6e3c20f6a56e6844336f10007f7eebd
+
+DROP INDEX rhn_cpu_server_id_idx;
+
+CREATE UNIQUE INDEX rhn_cpu_server_id_uq
+ ON rhnCpu (server_id);
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/127-alter-index-rhnServerDmi.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/127-alter-index-rhnServerDmi.sql.oracle
new file mode 100644
index 0000000..e5ff9f8
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/127-alter-index-rhnServerDmi.sql.oracle
@@ -0,0 +1,6 @@
+DROP INDEX rhn_server_dmi_sid_idx;
+
+CREATE UNIQUE INDEX rhn_server_dmi_sid_uq
+ ON rhnServerDMI (server_id)
+ TABLESPACE [[2m_tbs]]
+ NOLOGGING;
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/127-alter-index-rhnServerDmi.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/127-alter-index-rhnServerDmi.sql.postgresql
new file mode 100644
index 0000000..096f010
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/127-alter-index-rhnServerDmi.sql.postgresql
@@ -0,0 +1,6 @@
+-- oracle equivalent source sha1 37531557b1d0368256273ea973cbdbc6eac3dd19
+
+DROP INDEX rhn_server_dmi_sid_idx;
+
+CREATE UNIQUE INDEX rhn_server_dmi_sid_uq
+ ON rhnServerDMI (server_id);
commit a09775e81f8ad72e794a2d6e0b40bd4f6b6a432e
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Fri Nov 18 11:50:56 2011 +0100
IPv6: if there is no data, do not try to access it
addressing:
Exception Handler Information
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/spacewalk/server/apacheRequest.py",
line 123, in call_function
response = apply(func, params)
File "/usr/share/rhn/server/handlers/xmlrpc/registration.py", line 995, in
refresh_hw_profile
server.delete_hardware()
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_wrapper.py",
line 87, in delete_hardware
return Hardware.delete_hardware(self, self.server.get("id"))
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 865, in delete_hardware
self.reload_hardware_byid(sysid)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 912, in reload_hardware_byid
self.__load_from_db(HardwareDevice, sysid)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 902, in __load_from_db
dev.reload(sysid)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 224, in reload
if self.data.has_key(k):
AttributeError: 'NoneType' object has no attribute 'has_key'
diff --git a/backend/server/rhnServer/server_hardware.py
b/backend/server/rhnServer/server_hardware.py
index 7878619..e44b6e4 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -220,9 +220,10 @@ class GenericDevice:
t = rhnSQL.Table(self.table, "id")
self.data = t[devid]
# clean up fields we don't want
- for k in ["created", "modified"]:
- if self.data.has_key(k):
- del self.data[k]
+ if self.data:
+ for k in ["created", "modified"]:
+ if self.data.has_key(k):
+ del self.data[k]
self.id = devid
self.status = 0
return 0
commit e3adbaf5dc115e68f49bca1831a1c1d32749ec45
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Tue Nov 15 14:22:10 2011 +0100
IPv6: do not call constructor in reload
a) it is already called in __load_from_db()
b) we change all attributes later in reload()
c) child of Device class has different parameters of constructor - they accept
dictionary of params instead of name of table
addressing:
Exception Handler Information
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/spacewalk/server/apacheRequest.py",
line 123, in call_function
response = apply(func, params)
File "/usr/share/rhn/server/handlers/xmlrpc/registration.py", line 995, in
refresh_hw_profile
server.delete_hardware()
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_wrapper.py",
line 87, in delete_hardware
return Hardware.delete_hardware(self, self.server.get("id"))
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 876, in delete_hardware
self.reload_hardware_byid(sysid)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 923, in reload_hardware_byid
self.__load_from_db(HardwareDevice, sysid)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 913, in __load_from_db
dev.reload(sysid)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 220, in reload
self.__init__(self.__table)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 315, in __init__
Device.__init__(self, "rhnDevice", fields, dict, mapping)
File
"/usr/lib/python2.4/site-packages/spacewalk/server/rhnServer/server_hardware.py",
line 271, in __init__
dict, mapping)
TypeError: ('Argument passed is not a dictionary', 'rhnDevice',
{'desc': 'description'})
diff --git a/backend/server/rhnServer/server_hardware.py
b/backend/server/rhnServer/server_hardware.py
index 5eb613e..7878619 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -217,7 +217,6 @@ class GenericDevice:
""" reload from rhnDevice table based on devid """
if not devid:
return -1
- self.__init__(self.table)
t = rhnSQL.Table(self.table, "id")
self.data = t[devid]
# clean up fields we don't want
commit 172890b06f2070f8c25a534b287892571e2d20d2
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Tue Nov 15 11:40:34 2011 +0100
IPv6: change backend to store IPv6 interfaces into DB
diff --git a/backend/server/rhnServer/server_hardware.py
b/backend/server/rhnServer/server_hardware.py
index a69ff3a..5eb613e 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -385,17 +385,15 @@ class NetworkInformation(Device):
class NetIfaceInformation(Device):
key_mapping = {
- 'ipaddr' : 'ip_addr',
'hwaddr' : 'hw_addr',
'module' : 'module',
- 'netmask' : 'netmask',
- 'broadcast' : 'broadcast',
}
def __init__(self, dict=None):
+ log_debug(4, dict)
self.ifaces = {}
self.db_ifaces = []
# parameters which are not allowed to be empty and set to NULL
- self._autonull =
('ip_addr','netmask','broadcast','hw_addr','module')
+ self._autonull = ('hw_addr','module')
if not dict:
return
for name, info in dict.items():
@@ -416,11 +414,11 @@ class NetIfaceInformation(Device):
raise rhnFault(53, "Unable to find required field %s"
% key)
val = info[k]
- if mapping in ['ip_addr', 'netmask',
'broadcast']:
- # bugzilla: 129840 kudzu (rhpl) will sometimes pad octets
- # with leading zeros, causing confusion; clean those up
- val = cleanse_ip_addr(val)
vdict[mapping] = val
+ if 'ipaddr' in info and info['ipaddr']:
+ vdict['ipv4'] = NetIfaceAddress4([{'ipaddr':
info['ipaddr'], 'broadcast': info['broadcast'], 'netmask':
info['netmask']}])
+ if 'ipv6' in info and info['ipv6']:
+ vdict['ipv6'] = NetIfaceAddress6(info["ipv6"])
self.ifaces[name] = vdict
def save(self, server_id):
@@ -450,21 +448,47 @@ class NetIfaceInformation(Device):
updates.append(uploaded_iface)
# Everything else in self.ifaces has to be inserted
- for name, iface in ifaces.items():
+ for name, info in ifaces.items():
+ iface = {}
iface['name'] = name
iface['server_id'] = server_id
+ iface['hw_addr'] = info['hw_addr']
+ iface['module'] = info['module']
inserts.append(iface)
log_debug(4, "Deletes", deletes)
log_debug(4, "Updates", updates)
log_debug(4, "Inserts", inserts)
- self._delete(deletes)
self._update(updates)
self._insert(inserts)
-
+ ifaces = self.ifaces.copy()
+ for name, info in ifaces.items():
+ if not 'ipv6' in info:
+ info['ipv6'] = NetIfaceAddress6()
+ info['ipv6'].save(self.get_server_id(server_id, name))
+ if not 'ipv4' in info:
+ info['ipv4'] = NetIfaceAddress4()
+ info['ipv4'].save(self.get_server_id(server_id, name))
+ # delete address (if any) of deleted interaces
+ for d in deletes:
+ interface = NetIfaceAddress6()
+ interface.save(self.get_server_id(server_id, d['name']))
+ interface = NetIfaceAddress4()
+ interface.save(self.get_server_id(server_id, d['name']))
+ self._delete(deletes)
return 0
+ def get_server_id(self, server_id, name):
+ """ retrieve id for given server_id and name """
+ h = rhnSQL.prepare("select id from rhnServerNetInterface where
server_id=:server_id and name=:name")
+ h.execute(server_id=server_id, name=name)
+ row = h.fetchone_dict()
+ if row:
+ return row['id']
+ else:
+ return None
+
def _insert(self, params):
q = """insert into rhnServerNetInterface
(%s) values (%s)"""
@@ -474,7 +498,7 @@ class NetIfaceInformation(Device):
columns.sort()
bind_params = string.join(map(lambda x: ':' + x, columns), ",
")
h = rhnSQL.prepare(q % (string.join(columns, ", "), bind_params))
- return self._dml(h, params)
+ return _dml(h, params)
def _delete(self, params):
q = """delete from rhnServerNetInterface
@@ -483,7 +507,7 @@ class NetIfaceInformation(Device):
columns = ['server_id', 'name']
wheres = map(lambda x: '%s = :%s' % (x, x), columns)
h = rhnSQL.prepare(q % string.join(wheres, " and "))
- return self._dml(h, params)
+ return _dml(h, params)
def _update(self, params):
q = """update rhnServerNetInterface
@@ -501,17 +525,8 @@ class NetIfaceInformation(Device):
updates = string.join(updates, ", ")
h = rhnSQL.prepare(q % (updates, wheres))
- return self._dml(h, params)
+ return _dml(h, params)
- def _dml(self, statement, params):
- log_debug(5, params)
- if not params:
- return 0
- params = _transpose(params)
- rowcount = apply(statement.executemany, (), params)
- log_debug(5, "Affected rows", rowcount)
- return rowcount
-
def reload(self, server_id):
h = rhnSQL.prepare("""
select *
@@ -524,7 +539,150 @@ class NetIfaceInformation(Device):
row = h.fetchone_dict()
if not row:
break
- hval = { 'name' : row['name'], 'server_id' :
server_id }
+ hval = { 'primary_id' : row['id'], 'name' :
row['name'], 'server_id' : server_id }
+ for key in self.key_mapping.values():
+ hval[key] = row[key]
+ hval['ipv4'] = NetIfaceAddress4()
+ hval['ipv4'].reload(hval['primary_id'])
+ hval['ipv6'] = NetIfaceAddress6()
+ hval['ipv6'].reload(hval['primary_id'])
+ self.db_ifaces.append(hval)
+
+ self.status = 0
+ return 0
+
+class NetIfaceAddress(Device):
+ key_mapping = {
+ 'netmask' : 'netmask',
+ 'address' : 'address',
+ }
+ unique = ['address'] # to be overriden by child
+ table = 'rhnServerNetAddress' # to be overriden by child
+ def __init__(self, list_ifaces=None):
+ log_debug(4, list_ifaces)
+ self.ifaces = {}
+ self.db_ifaces = []
+ # parameters which are not allowed to be empty and set to NULL
+ self._autonull = ('address','netmask')
+ self.sequence = "rhn_srv_net_iface_id_seq"
+ if not list_ifaces:
+ return
+ for info in list_ifaces:
+ if not isinstance(info, type({})):
+ raise rhnFault(53, "Unexpected format for interface %s" %
+ info)
+ vdict = {}
+ for key, mapping in self.key_mapping.items():
+ # Look at the mapping first; if not found, look for the key
+ if info.has_key(mapping):
+ k = mapping
+ else:
+ k = key
+ if not info.has_key(k):
+ raise rhnFault(53, "Unable to find required field %s"
+ % (key))
+ val = info[k]
+ if mapping in ['ip_addr', 'netmask', 'broadcast',
'address']:
+ # bugzilla: 129840 kudzu (rhpl) will sometimes pad octets
+ # with leading zeros, causing confusion; clean those up
+ val = self.cleanse_ip_addr(val)
+ vdict[mapping] = val
+ self.ifaces[vdict['address']] = vdict
+
+ def cleanse_ip_addr(self, val):
+ """ to be overriden by child """
+ return val
+
+ def save(self, interface_id):
+ log_debug(4, self.ifaces)
+ self.reload(interface_id)
+ log_debug(4, "Net addresses in DB", self.db_ifaces)
+
+ # Compute updates, deletes and inserts
+ inserts = []
+ updates = []
+ deletes = []
+ ifaces = self.ifaces.copy()
+ for iface in self.db_ifaces:
+ address = iface['address']
+ if not self.ifaces.has_key(iface['address']):
+ # To be deleted
+ deletes.append(iface)
+ continue
+ uploaded_iface = ifaces[address]
+ del ifaces[address]
+ # FIXME this is inefficient for IPv4 as it row is present it will be always
update
+ if _hash_eq(uploaded_iface, iface):
+ # Same value
+ continue
+ uploaded_iface.update({'interface_id' : interface_id})
+ updates.append(uploaded_iface)
+
+ # Everything else in self.ifaces has to be inserted
+ for name, iface in ifaces.items():
+ iface['address'] = iface['address']
+ iface['interface_id'] = interface_id
+ inserts.append(iface)
+
+ log_debug(4, "Deletes", deletes)
+ log_debug(4, "Updates", updates)
+ log_debug(4, "Inserts", inserts)
+
+ self._delete(deletes)
+ self._update(updates)
+ self._insert(inserts)
+
+ def _insert(self, params):
+ q = """insert into %s
+ (%s) values (%s)"""
+ self._null_columns(params, self._autonull)
+
+ columns = self.key_mapping.values() + ['interface_id']
+ columns.sort()
+ bind_params = string.join(map(lambda x: ':' + x, columns), ",
")
+ h = rhnSQL.prepare(q % (self.table, string.join(columns, ", "),
bind_params))
+ return _dml(h, params)
+
+ def _delete(self, params):
+ q = """delete from %s
+ where %s"""
+
+ columns = self.unique
+ wheres = map(lambda x: '%s = :%s' % (x, x), columns)
+ h = rhnSQL.prepare(q % (self.table, string.join(wheres, " and ")))
+ return _dml(h, params)
+
+ def _update(self, params):
+ q = """update %s
+ set %s
+ where %s"""
+ self._null_columns(params, self._autonull)
+
+ wheres = self.unique
+ wheres = map(lambda x: '%s = :%s' % (x, x), wheres)
+ wheres = string.join(wheres, " and ")
+
+ updates = self.key_mapping.values()
+ updates.sort()
+ updates = map(lambda x: '%s = :%s' % (x, x), updates)
+ updates = string.join(updates, ", ")
+
+ h = rhnSQL.prepare(q % (self.table, updates, wheres))
+ return _dml(h, params)
+
+ def reload(self, interface_id):
+ h = rhnSQL.prepare("""
+ select *
+ from %s
+ where interface_id = :interface_id
+ """ % self.table)
+ h.execute(interface_id=interface_id)
+ self.db_ifaces = []
+ while 1:
+ row = h.fetchone_dict()
+ if not row:
+ break
+ hval = { 'interface_id' : row['interface_id']}
for key in self.key_mapping.values():
hval[key] = row[key]
self.db_ifaces.append(hval)
@@ -532,6 +690,36 @@ class NetIfaceInformation(Device):
self.status = 0
return 0
+class NetIfaceAddress6(NetIfaceAddress):
+ """ IPv6 Network interface """
+ key_mapping = {
+ 'netmask' : 'netmask',
+ 'addr' : 'address',
+ 'scope' : 'scope',
+ }
+ table = 'rhnServerNetAddress6'
+ unique = ['interface_id', 'address', 'scope']
+ def __init__(self, addr_dict=None):
+ NetIfaceAddress.__init__(self, addr_dict)
+ self._autonull = ('address', 'netmask', 'scope')
+
+class NetIfaceAddress4(NetIfaceAddress):
+ """ IPv4 Network interface """
+ key_mapping = {
+ 'netmask' : 'netmask',
+ 'ipaddr' : 'address',
+ 'broadcast' : 'broadcast',
+ }
+ table = 'rhnServerNetAddress4'
+ unique = ['interface_id']
+ def __init__(self, addr_dict=None):
+ NetIfaceAddress.__init__(self, addr_dict)
+ self._autonull = ('address', 'netmask', 'broadcast')
+
+ def cleanse_ip_addr(self, val):
+ return cleanse_ip_addr(val)
+
+
def _hash_eq(h1, h2):
""" Compares two hashes and return 1 if the first is a subset of the
second """
log_debug(5, h1, h2)
@@ -542,6 +730,15 @@ def _hash_eq(h1, h2):
return 0
return 1
+def _dml(statement, params):
+ log_debug(5, params)
+ if not params:
+ return 0
+ params = _transpose(params)
+ rowcount = apply(statement.executemany, (), params)
+ log_debug(5, "Affected rows", rowcount)
+ return rowcount
+
def _transpose(hasharr):
""" Transpose the array of hashes into a hash of arrays
"""
if not hasharr:
@@ -553,7 +750,10 @@ def _transpose(hasharr):
for hval in hasharr:
for k in keys:
- result[k].append(hval[k])
+ if hval.has_key(k):
+ result[k].append(hval[k])
+ else:
+ result[k].append(None)
return result
commit d217adc03c244c1b50f9316cff2a2c847a1711ed
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Tue Oct 25 16:33:51 2011 +0200
IPv6: __load_from_db: load devices using its method save()
this will put _auto_null and other stuff in game
diff --git a/backend/server/rhnServer/server_hardware.py
b/backend/server/rhnServer/server_hardware.py
index 82a18ce..a69ff3a 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -173,10 +173,10 @@ def cleanse_ip_addr(ip_addr):
class GenericDevice:
""" A generic device class """
- def __init__(self, table):
+ table = "override-GenericDevice"
+ def __init__(self):
self.id = 0
self.status = 1 # just added
- self.__table = table
self.data = {}
# default to the hardware seq...
self.sequence = "rhn_hw_dev_id_seq"
@@ -193,10 +193,10 @@ class GenericDevice:
return 1
def save(self, sysid):
""" save data in the rhnDevice table """
- log_debug(4, self.__table, self.status, self.data)
+ log_debug(4, self.table, self.status, self.data)
if not self.must_save():
return 0
- t = rhnSQL.Table(self.__table, "id")
+ t = rhnSQL.Table(self.table, "id")
# check if we have to delete
if self.status == 2 and self.id:
# delete the entry
@@ -217,8 +217,8 @@ class GenericDevice:
""" reload from rhnDevice table based on devid """
if not devid:
return -1
- self.__init__(self.__table)
- t = rhnSQL.Table(self.__table, "id")
+ self.__init__(self.table)
+ t = rhnSQL.Table(self.table, "id")
self.data = t[devid]
# clean up fields we don't want
for k in ["created", "modified"]:
@@ -251,13 +251,13 @@ class Device(GenericDevice):
table. The mapping allows transformation from whatever comes in to
valid fields in the table Looks complicated but it isn't -- gafton
"""
- def __init__(self, table, fields, dict = None, mapping = None):
- GenericDevice.__init__(self, table)
+ def __init__(self, fields, dict = None, mapping = None):
+ GenericDevice.__init__(self)
x = {}
for k in fields:
x[k] = None
self.data = UserDictCase(x)
- if dict is None:
+ if not dict:
return
# make sure we get a UserDictCase to work with
if type(dict) == type({}):
@@ -305,6 +305,7 @@ class Device(GenericDevice):
class HardwareDevice(Device):
""" A more specific device based on the Device class
"""
+ table = "rhnDevice"
def __init__(self, dict = None):
fields = ['class', 'bus', 'device', 'driver',
'detached',
'description', 'pcitype', 'prop1',
'prop2',
@@ -312,13 +313,14 @@ class HardwareDevice(Device):
# get a processed mapping
mapping = kudzu_mapping(dict)
# ... and do little to no work
- Device.__init__(self, "rhnDevice", fields, dict, mapping)
+ Device.__init__(self, fields, dict, mapping)
# use the hardware id sequencer
self.sequence = "rhn_hw_dev_id_seq"
class CPUDevice(Device):
""" A class for handling CPU - mirrors the rhnCPU structure
"""
- def __init__(self, dict = {}):
+ table = "rhnCPU"
+ def __init__(self, dict = None):
fields = ['cpu_arch_id', 'architecture', 'bogomips',
'cache',
'family', 'mhz', 'stepping', 'flags',
'model',
'version', 'vendor', 'nrcpu',
'acpiVersion',
@@ -340,7 +342,10 @@ class CPUDevice(Device):
'class' : None,
}
# now instantiate this class
- Device.__init__(self, "rhnCPU", fields, dict, mapping)
+ Device.__init__(self, fields, dict, mapping)
+ self.sequence = "rhn_cpu_id_seq"
+ if not dict:
+ return
if self.data.get("cpu_arch_id") is not None:
return # all fine, we have the arch
# if we don't have an architecture, guess it
@@ -355,8 +360,6 @@ class CPUDevice(Device):
raise AttributeError, "Invalid architecture for CPU: `%s'" %
arch
self.data["cpu_arch_id"] = row["id"]
del self.data["architecture"]
- # use our own sequence
- self.sequence = "rhn_cpu_id_seq"
if self.data.has_key("nrcpu"): # make sure this is a number
try:
self.data["nrcpu"] = int(self.data["nrcpu"])
@@ -367,10 +370,11 @@ class CPUDevice(Device):
class NetworkInformation(Device):
""" This is a wrapper class for the Network Information
(rhnServerNetwork) """
+ table = "rhnServerNetwork"
def __init__(self, dict = None):
fields = ["hostname", "ipaddr", "ip6addr"]
mapping = { 'class' : None }
- Device.__init__(self, "rhnServerNetwork", fields, dict, mapping)
+ Device.__init__(self, fields, dict, mapping)
self._autonull = ('ipaddr', 'ip6addr')
# use our own sequence
self.sequence = "rhn_server_net_id_seq"
@@ -555,12 +559,15 @@ def _transpose(hasharr):
class MemoryInformation(Device):
""" Memory information """
+ table = "rhnRAM"
def __init__(self, dict = None):
fields = ["ram", "swap"]
mapping = { "class" : None }
- Device.__init__(self, "rhnRAM", fields, dict, mapping)
+ Device.__init__(self, fields, dict, mapping)
# use our own sequence
self.sequence = "rhn_ram_id_seq"
+ if not dict:
+ return
# Sometimes we get sent a NNNNL number and we need to strip the L
for k in fields:
if not self.data.has_key(k):
@@ -573,13 +580,16 @@ class MemoryInformation(Device):
class DMIInformation(Device):
""" DMI information """
+ table = "rhnServerDMI"
def __init__(self, dict = None):
fields = ["vendor", "system", "product",
"asset", "board",
"bios_vendor", "bios_version",
"bios_release"]
mapping = { "class" : None }
- Device.__init__(self, "rhnServerDMI", fields, dict, mapping)
+ Device.__init__(self, fields, dict, mapping)
# use our own sequence
self.sequence = "rhn_server_dmi_id_seq"
+ if not dict:
+ return
# deal with hardware with insanely long dmi strings...
for key, value in self.data.items():
@@ -589,6 +599,7 @@ class DMIInformation(Device):
class InstallInformation(Device):
""" Install information """
+ table = "rhnServerInstallInfo"
def __init__(self, dict = None):
fields = ['install_method', 'iso_status', 'mediasum']
mapping = {
@@ -597,7 +608,7 @@ class InstallInformation(Device):
'isostatus' : 'iso_status',
'mediasum' : 'mediasum',
}
- Device.__init__(self, "rhnServerInstallInfo", fields, dict, mapping)
+ Device.__init__(self, fields, dict, mapping)
self.sequence = 'rhn_server_install_info_id_seq'
class Hardware:
@@ -703,29 +714,20 @@ class Hardware:
self.__changed = 0
return 0
- def __load_from_db(self, db, DevClass, sysid):
+ def __load_from_db(self, DevClass, sysid):
""" Load a certain hardware class from the database
"""
if not self.__hardware.has_key(DevClass):
self.__hardware[DevClass] = []
-
- h = rhnSQL.prepare("select * from %s where server_id = :sysid" % db)
+
+ h = rhnSQL.prepare("select id from %s where server_id = :sysid" %
DevClass.table)
h.execute(sysid = sysid)
rows = h.fetchall_dict() or []
-
+
for device in rows:
dev_id = device['id']
-
- # get rid of the keys we do not support
- for k in ["server_id", "created", "modified",
"id"]:
- if device.has_key(k):
- del device[k]
- dev = DevClass(device)
-
- # we know better
- dev.id = dev_id
- dev.status = 0
+ dev = DevClass()
+ dev.reload(dev_id)
self.__hardware[DevClass].append(dev)
- return 0
def reload_hardware_byid(self, sysid):
""" load all hardware devices for a server """
@@ -734,19 +736,16 @@ class Hardware:
return -1
self.__hardware = {} # discard what was already loaded
# load from all hardware databases
- self.__load_from_db("rhnDevice", HardwareDevice, sysid)
- self.__load_from_db("rhnCPU", CPUDevice, sysid)
- self.__load_from_db("rhnServerDMI", DMIInformation, sysid)
- self.__load_from_db("rhnServerNetwork", NetworkInformation, sysid)
- self.__load_from_db("rhnRAM", MemoryInformation, sysid)
- self.__load_from_db("rhnServerInstallInfo", InstallInformation, sysid)
+ self.__load_from_db(HardwareDevice, sysid)
+ self.__load_from_db(CPUDevice, sysid)
+ self.__load_from_db(DMIInformation, sysid)
+ self.__load_from_db(NetworkInformation, sysid)
+ self.__load_from_db(MemoryInformation, sysid)
+ self.__load_from_db(InstallInformation, sysid)
net_iface_info = NetIfaceInformation()
net_iface_info.reload(sysid)
-
- self.__hardware[NetIfaceInformation] = []
- self.__hardware[NetIfaceInformation].append(net_iface_info)
-
+
# now set the flag
self.__changed = 0
self.__loaded = 1
commit d6302d9b7de848b566f2fd21bdc585a6964120dc
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Tue Nov 22 14:52:26 2011 +0100
IPv6: disabled interface - take IPv6 addresses into account
diff --git a/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
b/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
index b8f929a..18641d6 100644
--- a/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
+++ b/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
@@ -201,12 +201,44 @@ public class NetworkInterface extends BaseDomainHelper implements
}
/**
+ * findServerNetAddress6ByScope
+ * @param scope Address scope to search for.
+ * @return Returns IPv6 address of the given scope for the given interface.
+ */
+ private String findServerNetAddress6ByScope(String scope) {
+ Session session = HibernateFactory.getSession();
+ ServerNetAddress6 ad6 = (ServerNetAddress6)
+ session.getNamedQuery("ServerNetAddress6.lookup_by_scope_and_id")
+ .setParameter("interface_id", this.interfaceId)
+ .setParameter("scope", scope)
+ .uniqueResult();
+
+ if (ad6 == null) {
+ return null;
+ }
+ else {
+ return ad6.getAddress();
+ }
+ }
+
+ /**
+ * @return If available, returns a global IPv6 address.
+ */
+ public String getIp6Addr() {
+ return findServerNetAddress6ByScope("universe");
+ }
+
+ /**
* returns true if the NetworkInterface is disabled
* @return if it's empty or not
*/
public boolean isDisabled() {
- return this.getIpaddr() == null || this.getIpaddr().equals("0") ||
- this.getIpaddr().equals("");
+ return (this.getIpaddr() == null ||
+ this.getIpaddr().equals("0") ||
+ this.getIpaddr().equals("")) &&
+ (this.getIp6Addr() == null ||
+ this.getIp6Addr().equals("") ||
+ this.getIp6Addr().equals("0"));
}
commit d81843b419bc8c5ef1b8394a27a4d098165adb3d
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Nov 18 14:26:38 2011 +0100
IPv6: unit test fixes
diff --git a/java/code/src/com/redhat/rhn/domain/server/test/NetworkInterfaceTest.java
b/java/code/src/com/redhat/rhn/domain/server/test/NetworkInterfaceTest.java
index 9938f2c..d6a7cd1 100644
--- a/java/code/src/com/redhat/rhn/domain/server/test/NetworkInterfaceTest.java
+++ b/java/code/src/com/redhat/rhn/domain/server/test/NetworkInterfaceTest.java
@@ -87,11 +87,8 @@ public class NetworkInterfaceTest extends RhnBaseTestCase {
throws Exception {
NetworkInterface netint = new NetworkInterface();
- netint.setBroadcast("foo.bar.doo.doo");
netint.setHwaddr(macAddress);
- netint.setIpaddr(ipAddress);
netint.setModule("test");
- netint.setNetmask("255.255.255.0");
netint.setName(networkName);
server.addNetworkInterface(netint);
diff --git a/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java
b/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java
index ed04bed..cf16730 100644
--- a/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java
+++ b/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java
@@ -599,11 +599,8 @@ public class ServerFactoryTest extends RhnBaseTestCase {
createServerInfo(newS, dateCreated, new Long(0));
NetworkInterface netint = new NetworkInterface();
- netint.setBroadcast("foo.bar.doo.doo");
netint.setHwaddr("AA:AA:BB:BB:CC:CC");
- netint.setIpaddr("127.0.0.1");
netint.setModule("test");
- netint.setNetmask("255.255.255.0");
netint.setName(TestUtils.randomString());
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/test/KickstartManagerTest.java
b/java/code/src/com/redhat/rhn/manager/kickstart/test/KickstartManagerTest.java
index d1d09b4..51d9961 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/test/KickstartManagerTest.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/test/KickstartManagerTest.java
@@ -42,8 +42,6 @@ public class KickstartManagerTest extends BaseTestCaseWithUser {
Server serv = ServerFactoryTest.createTestServer(user);
NetworkInterface nic = new NetworkInterface();
nic.setName("eth0");
- nic.setIpaddr("192.168.0.5");
- nic.setHwaddr("aa:aa:aa");
nic.setServer(serv);
serv.getNetworkInterfaces().add(nic);
@@ -71,14 +69,12 @@ public class KickstartManagerTest extends BaseTestCaseWithUser {
Server serv = ServerFactoryTest.createTestServer(user);
NetworkInterface nic = new NetworkInterface();
nic.setName("eth0");
- nic.setIpaddr("192.168.1.5"); //not in range
nic.setHwaddr("aa:aa:aa");
nic.setServer(serv);
serv.getNetworkInterfaces().add(nic);
nic = new NetworkInterface();
nic.setName("eth1");
- nic.setIpaddr("192.168.0.5"); //in range
nic.setHwaddr("aa:aa:aa");
nic.setServer(serv);
serv.getNetworkInterfaces().add(nic);
@@ -113,7 +109,6 @@ public class KickstartManagerTest extends BaseTestCaseWithUser {
NetworkInterface nic = new NetworkInterface();
nic.setName("eth0");
nic.setHwaddr("aa:aa:aa");
- nic.setIpaddr("192.168.1.5"); //not in range
nic.setServer(serv);
serv.getNetworkInterfaces().add(nic);
@@ -142,7 +137,6 @@ public class KickstartManagerTest extends BaseTestCaseWithUser {
Server serv = ServerFactoryTest.createTestServer(user);
NetworkInterface nic = new NetworkInterface();
nic.setName("eth0");
- nic.setIpaddr("192.168.1.5"); //not in range
nic.setHwaddr("aa:aa:aa");
nic.setServer(serv);
serv.getNetworkInterfaces().add(nic);
commit b5a19c945080602eed67081fb5f339d95d3d95c3
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Nov 11 13:11:29 2011 +0100
IPv6: also browse through NIC's IPv6 addresses
diff --git a/java/code/src/com/redhat/rhn/domain/server/Server.java
b/java/code/src/com/redhat/rhn/domain/server/Server.java
index 7f98d03..3a3eefa 100644
--- a/java/code/src/com/redhat/rhn/domain/server/Server.java
+++ b/java/code/src/com/redhat/rhn/domain/server/Server.java
@@ -880,6 +880,12 @@ public class Server extends BaseDomainHelper implements Identifiable
{
log.debug("Found NetworkInterface !localhost");
return n;
}
+ for (ServerNetAddress6 ad6 : n.getIPv6Addresses()) {
+ if (ad6 != null && !ad6.getAddress().equals("::1"))
{
+ log.debug("Found NetworkInterface !localhost");
+ return n;
+ }
+ }
}
// If we didnt match any of the above criteria
// just give up and return the 1st one.
commit e4748496c41bea4dde7fafeb1a9df0de968e702c
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Nov 10 17:51:48 2011 +0100
IPv6: duplicate system comparison based on IPv6 (webui)
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
index bed8f0e..411aab2 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
@@ -1678,6 +1678,22 @@ SELECT 1
</query>
</mode>
+<mode name="duplicate_system_ids_ipv6_key"
class="com.redhat.rhn.frontend.dto.SystemOverview">
+ <query params="uid, key">
+ select distinct s.id as id,
+ s.name as name,
+ si.checkin as last_checkin,
+ 1 as selectable
+ from rhnserver s inner join
+ rhnuserserverperms usp on s.id = usp.server_id inner join
+ rhnservernetinterface ni on ni.server_id = s.id inner join
+ rhnserverinfo si on si.server_id = s.id inner join
+ rhnservernetaddress6 sa6 on sa6.interface_id = ni.id
+ where usp.user_id = :uid and
+ sa6.address = :key
+ </query>
+</mode>
+
<mode name="duplicate_system_ids_mac"
class="com.redhat.rhn.frontend.dto.NetworkDto">
<query params="uid, inactive_date">
SELECT distinct S.id as id, S.name as name, NI.hw_addr as key, si.checkin as
last_checkin,
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsCompareAction.java
b/java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsCompareAction.java
index 3f971cd..bdb945e 100644
---
a/java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsCompareAction.java
+++
b/java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsCompareAction.java
@@ -132,6 +132,9 @@ public class DuplicateSystemsCompareAction extends RhnAction
implements Listable
else if (DuplicateSystemsAction.MAC_ADDRESS.equals(keyType)) {
return SystemManager.listDuplicatesByMac(contextIn.getLoggedInUser(), key);
}
+ else if (DuplicateSystemsAction.IPV6.equals(keyType)) {
+ return SystemManager.listDuplicatesByIPv6(contextIn.getLoggedInUser(), key);
+ }
return SystemManager.listDuplicatesByIP(contextIn.getLoggedInUser(), key);
}
}
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/SystemCompareDto.java
b/java/code/src/com/redhat/rhn/frontend/dto/SystemCompareDto.java
index b0ce4b4..a875d1b 100644
--- a/java/code/src/com/redhat/rhn/frontend/dto/SystemCompareDto.java
+++ b/java/code/src/com/redhat/rhn/frontend/dto/SystemCompareDto.java
@@ -23,6 +23,7 @@ import com.redhat.rhn.domain.server.MonitoredServer;
import com.redhat.rhn.domain.server.NetworkInterface;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.server.ServerGroup;
+import com.redhat.rhn.domain.server.ServerNetAddress6;
import com.redhat.rhn.domain.token.ActivationKey;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.manager.entitlement.EntitlementManager;
@@ -179,6 +180,18 @@ public class SystemCompareDto {
}
/**
+ * Returns a list of ( ipv6 addresses available per system)
+ * @return a list of ip addresses per system
+ */
+ public List<List<Item>> getIpv6Addresses() {
+ List<List> addresses = new LinkedList<List>();
+ for (Server system : servers) {
+ addresses.add(getIpv6Addresses(system));
+ }
+ return compareList(addresses);
+ }
+
+ /**
* Returns a list of (system groups available per system)
* @return a list of system groups per system
*/
@@ -405,6 +418,19 @@ public class SystemCompareDto {
return macs;
}
+ private List<String> getIpv6Addresses(Server system) {
+ List<String> addrs = new LinkedList<String>();
+ for (NetworkInterface n : system.getNetworkInterfaces()) {
+ for (ServerNetAddress6 ad6 : n.getIPv6Addresses()) {
+ String addr = ad6.getAddress();
+ if (addr != null && !addr.equals("::1")) {
+ addrs.add(addr);
+ }
+ }
+ }
+ return addrs;
+ }
+
/**
* An item object to represent
* value/ id/ and similarity
diff --git a/java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystemscompare.jsp
b/java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystemscompare.jsp
index 808d091..a8ed2eb 100644
--- a/java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystemscompare.jsp
+++ b/java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystemscompare.jsp
@@ -109,8 +109,8 @@
</tr>
<tr>
<th colspan="${requestScope.systems.size + 1}"><bean:message
key="System Identity Properties"/>
- <a id='sysIdHide' href="javascript:pageToggleRows('sysId',
['lastCheckinRow',
'macAddressRow','ipAddressRow','systemGroupsRow'])"><bean:message
key="Click Here To Hide"/> </a>
- <a style="display:none" id='sysIdShow'
href="javascript:pageToggleRows('sysId', ['lastCheckinRow',
'macAddressRow','ipAddressRow','systemGroupsRow'])"><bean:message
key="Click Here To Show"/> </a>
+ <a id='sysIdHide' href="javascript:pageToggleRows('sysId',
['lastCheckinRow',
'macAddressRow','ipAddressRow','ipv6AddressRow','systemGroupsRow'])"><bean:message
key="Click Here To Hide"/> </a>
+ <a style="display:none" id='sysIdShow'
href="javascript:pageToggleRows('sysId', ['lastCheckinRow',
'macAddressRow','ipAddressRow','ipv6AddressRow','systemGroupsRow'])"><bean:message
key="Click Here To Show"/> </a>
</th>
</tr>
<tr class="list-row-odd" id="lastCheckinRow">
@@ -131,7 +131,13 @@
<c:set var ="href" value=""/>
<%@ include
file="/WEB-INF/pages/common/fragments/systems/duplicates/render-item-list-list.jspf"
%>
</tr>
- <tr class="list-row-even" id = "systemGroupsRow">
+ <tr class="list-row-even" id = "ipv6AddressRow">
+ <c:set var ="key" value="row.ipv6"/>
+ <c:set var ="items_list"
value="${requestScope.systems.ipv6Addresses}"/>
+ <c:set var ="href" value=""/>
+ <%@ include
file="/WEB-INF/pages/common/fragments/systems/duplicates/render-item-list-list.jspf"
%>
+ </tr>
+ <tr class="list-row-odd" id = "systemGroupsRow">
<c:set var ="key" value="System Groups"/>
<c:set var ="items_list"
value="${requestScope.systems.systemGroups}"/>
<c:set var ="href"
value="/network/systems/groups/details.pxt?sgid="/>
commit dd70f7fb35fee4d1b24b813d9e673eb55161bc27
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Nov 10 16:13:22 2011 +0100
IPv6: find system duplicates based on IPv6
New webui page: systems/DuplicateIPv6List to list duplicate systems
with identical IPv6 addresses.
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
index f703757..bed8f0e 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
@@ -1648,6 +1648,35 @@ SELECT 1
</query>
</mode>
+<mode name="duplicate_system_ids_ipv6"
class="com.redhat.rhn.frontend.dto.NetworkDto">
+ <query params="uid, inactive_date">
+ select distinct s.id as id,
+ s.name as name,
+ sa6.address as key,
+ si.checkin as last_checkin,
+ (select count(*)
+ from rhnserverinfo si2
+ where s.id = si2.server_id and
+ si2.checkin < :inactive_date) as inactive
+ from rhnserver s inner join
+ rhnuserserverperms usp on s.id = usp.server_id inner join
+ rhnservernetinterface ni on ni.server_id = s.id inner join
+ rhnserverinfo si on si.server_id = s.id inner join
+ rhnservernetaddress6 sa6 on sa6.interface_id = ni.id inner join
+ (select sa6_2.address,
+ sa6_2.scope,
+ count(distinct ni2.server_id) as syscount
+ from rhnservernetinterface ni2 inner join
+ rhnuserserverperms usp2 on ni2.server_id = usp2.server_id inner
join
+ rhnservernetaddress6 sa6_2 on sa6_2.interface_id = ni2.id
+ where usp2.user_id = :uid and
+ sa6_2.address not in(%s) and
+ ni2.name not like 'vnet%' and ni2.name not like
'virbr%'
+ group by sa6_2.address, sa6_2.scope
+ having count(distinct ni2.server_id) > 1) summ on summ.address =
sa6.address and summ.scope = sa6.scope
+ where usp.user_id = :uid
+ </query>
+</mode>
<mode name="duplicate_system_ids_mac"
class="com.redhat.rhn.frontend.dto.NetworkDto">
<query params="uid, inactive_date">
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsAction.java
b/java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsAction.java
index cc614c1..332fa6b 100644
---
a/java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsAction.java
+++
b/java/code/src/com/redhat/rhn/frontend/action/systems/duplicate/DuplicateSystemsAction.java
@@ -45,6 +45,7 @@ public class DuplicateSystemsAction extends RhnAction implements
Listable {
private static final String INACTIVE_COUNT = "inactive_count";
public static final String MAC_ADDRESS = "macaddress";
public static final String HOSTNAME = "hostname";
+ public static final String IPV6 = "ipv6";
/**
*
* {@inheritDoc}
@@ -117,6 +118,9 @@ public class DuplicateSystemsAction extends RhnAction implements
Listable {
else if (contextIn.getRequest().getAttribute(MAC_ADDRESS) != null) {
return SystemManager.listDuplicatesByMac(contextIn.getLoggedInUser(),
count);
}
+ else if (contextIn.getRequest().getAttribute(IPV6) != null) {
+ return SystemManager.listDuplicatesByIPv6(contextIn.getLoggedInUser(),
count);
+ }
return SystemManager.listDuplicatesByIP(contextIn.getLoggedInUser(), count);
}
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index ed74b06..cd768de 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -62,6 +62,9 @@
<trans-unit id="row.ip">
<source>IP Address</source>
</trans-unit>
+ <trans-unit id="row.ipv6">
+ <source>IPv6 Address</source>
+ </trans-unit>
<trans-unit id="row.hostname">
<source>Hostname</source>
</trans-unit>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
index 22dcd87..c8c0930 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
@@ -125,6 +125,13 @@
http://www.oasis-open.org/committees/xliff/documents/xliff-core-1.1.xsd&q...
</context-group>
</trans-unit>
+ <trans-unit id="duplicate.systems.nav.ip6s">
+ <source>Duplicate IPv6 Address</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">Duplicate Systems Navigation
Menu</context>
+ </context-group>
+ </trans-unit>
+
<trans-unit id="duplicate.systems.nav.mac_address">
<source>Duplicate MAC Address</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/manager/system/SystemManager.java
b/java/code/src/com/redhat/rhn/manager/system/SystemManager.java
index 0935be0..f4d0e44 100644
--- a/java/code/src/com/redhat/rhn/manager/system/SystemManager.java
+++ b/java/code/src/com/redhat/rhn/manager/system/SystemManager.java
@@ -2747,6 +2747,29 @@ public class SystemManager extends BaseManager {
}
/**
+ * List duplicate systems by ipv6 address
+ * @param user the user doing the search
+ * @param inactiveHours the number of hours a system hasn't checked in
+ * to consider it inactive
+ * @return List of DuplicateSystemGrouping objects
+ */
+ public static List listDuplicatesByIPv6(User user, long inactiveHours) {
+ List ignoreIps = new ArrayList();
+ ignoreIps.add("::1");
+ return listDuplicates(user, "duplicate_system_ids_ipv6", ignoreIps,
inactiveHours);
+ }
+
+ /**
+ * List duplicate systems by ipv6 address
+ * @param user the user doing the search
+ * @param ip ip address of the system
+ * @return List of DuplicateSystemGrouping objects
+ */
+ public static List<SystemOverview> listDuplicatesByIPv6(User user, String ip)
{
+ return listDuplicates(user, "duplicate_system_ids_ipv6_key", ip);
+ }
+
+ /**
* List duplicate systems by mac address
* @param user the user doing the search
* @param inactiveHours the number of hours a system hasn't checked in
diff --git a/java/code/webapp/WEB-INF/nav/duplicate_systems_tabs.xml
b/java/code/webapp/WEB-INF/nav/duplicate_systems_tabs.xml
index 417b05e..95ab8f3 100644
--- a/java/code/webapp/WEB-INF/nav/duplicate_systems_tabs.xml
+++ b/java/code/webapp/WEB-INF/nav/duplicate_systems_tabs.xml
@@ -4,6 +4,9 @@
<rhn-tab name="duplicate.systems.nav.ips">
<rhn-tab-url>/rhn/systems/DuplicateIPList.do</rhn-tab-url>
</rhn-tab>
+ <rhn-tab name="duplicate.systems.nav.ip6s">
+ <rhn-tab-url>/rhn/systems/DuplicateIPv6List.do</rhn-tab-url>
+ </rhn-tab>
<rhn-tab name="duplicate.systems.nav.hostname">
<rhn-tab-url>/rhn/systems/DuplicateHostName.do</rhn-tab-url>
</rhn-tab>
diff --git a/java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystems.jsp
b/java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystems.jsp
index 317b02b..2e228d5 100644
--- a/java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystems.jsp
+++ b/java/code/webapp/WEB-INF/pages/systems/duplicate/duplicatesystems.jsp
@@ -24,6 +24,10 @@
<c:set var="filtermessage" value="row.ip"/>
<c:set var="key_type" value="ip"/>
</c:when>
+ <c:when test="${not empty requestScope.ipv6}">
+ <c:set var="filtermessage" value="row.ipv6"/>
+ <c:set var="key_type" value="ipv6"/>
+ </c:when>
<c:otherwise>
<c:set var="filtermessage" value="row.macaddress"/>
<c:set var="key_type" value="macaddress"/>
diff --git a/java/code/webapp/WEB-INF/struts-config.xml
b/java/code/webapp/WEB-INF/struts-config.xml
index ddb46f9..5a17a64 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -2632,9 +2632,23 @@
<set-property property="postRequiredIfSubmitted"
value="true" />
<forward name="default"
path="/WEB-INF/pages/systems/duplicate/duplicatesystems.jsp"/>
- <forward name="confirm"
- path="/systems/ssm/DeleteConfirm.do"
- redirect="true"/>
+ <forward name="confirm"
+ path="/systems/ssm/DeleteConfirm.do"
+ redirect="true"/>
+ </action>
+
+ <action path="/systems/DuplicateIPv6List"
+ scope="request"
+ input="/WEB-INF/pages/systems/duplicate/duplicatesystems.jsp"
+
type="com.redhat.rhn.frontend.action.systems.duplicate.DuplicateSystemsAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="ipv6">
+ <set-property property="postRequiredIfSubmitted"
value="true" />
+ <forward name="default"
+
path="/WEB-INF/pages/systems/duplicate/duplicatesystems.jsp"/>
+ <forward name="confirm"
+ path="/systems/ssm/DeleteConfirm.do"
+ redirect="true"/>
</action>
<action path="/systems/DuplicateHostName"
@@ -2681,6 +2695,9 @@
<forward name="ip"
path="/systems/DuplicateIPList"
redirect="true"/>
+ <forward name="ipv6"
+ path="/systems/DuplicateIPv6List"
+ redirect="true"/>
<forward name="macaddress"
path="/systems/DuplicateMacAddress"
redirect="true"/>
commit 48b3263b4068727714896bdd8584d13db929a028
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Nov 10 13:47:22 2011 +0100
IPv6: fix duplicates based on IP comparison
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
index 2c93cb1..f703757 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
@@ -1616,18 +1616,20 @@ SELECT 1
<mode name="duplicate_system_ids_ip"
class="com.redhat.rhn.frontend.dto.NetworkDto">
<query params="uid, inactive_date">
- SELECT distinct S.id as id, S.name as name, NI.ip_addr as key, si.checkin as
last_checkin,
+ SELECT distinct S.id as id, S.name as name, sa4.address as key, si.checkin as
last_checkin,
(select count(*) from rhnServerInfo Si2 where S.id = Si2.server_id and Si2.checkin
< :inactive_date) as inactive
from rhnServer S inner join
rhnUserServerPerms USP on S.id = USP.server_id inner join
rhnServerNetInterface NI on NI.server_id = S.id inner join
rhnServerInfo si on si.server_id = S.id inner join
- ( Select NI2.ip_addr, count(distinct NI2.server_id) as syscount
+ rhnServerNetAddress4 sa4 on sa4.interface_id = NI.id inner join
+ ( Select sa4_2.address, count(distinct NI2.server_id) as syscount
from rhnServerNetInterface NI2 inner join
- rhnUserServerPerms USP2 on NI2.server_id = USP2.server_id
+ rhnUserServerPerms USP2 on NI2.server_id = USP2.server_id inner join
+ rhnServerNetAddress4 sa4_2 on sa4_2.interface_id = ni2.id
where USP2.user_id = :uid and
- NI2.ip_addr not in(%s) and NI2.name not like 'vnet%' and NI2.name not like
'virbr%'
- group by NI2.ip_addr having count(distinct NI2.server_id) > 1) SUMM on
SUMM.ip_addr = NI.ip_addr
+ sa4_2.address not in(%s) and NI2.name not like 'vnet%' and NI2.name not like
'virbr%'
+ group by sa4_2.address having count(distinct NI2.server_id) > 1) SUMM on
SUMM.address = sa4.address
where USP.user_id = :uid
</query>
</mode>
@@ -1639,9 +1641,10 @@ SELECT 1
inner join rhnUserServerPerms USP on S.id = USP.server_id
inner join rhnServerNetInterface NI on NI.server_id = S.id
inner join rhnServerInfo si on si.server_id = S.id
+ inner join rhnServerNetAddress4 sa4 on sa4.interface_id = NI.id
where
USP.user_id = :uid
- and NI.ip_addr = :key
+ and sa4.address = :key
</query>
</mode>
commit 2d362eda544d2d673f605e9d063bb03034b36a7c
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Nov 10 10:19:09 2011 +0100
IPv6: system.getNetworkDevices() modifications (API)
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/NetworkInterfaceSerializer.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/NetworkInterfaceSerializer.java
index e5ac890..fb420d9 100644
---
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/NetworkInterfaceSerializer.java
+++
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/NetworkInterfaceSerializer.java
@@ -15,12 +15,15 @@
package com.redhat.rhn.frontend.xmlrpc.serializer;
import com.redhat.rhn.domain.server.NetworkInterface;
+import com.redhat.rhn.domain.server.ServerNetAddress6;
import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
import org.apache.commons.lang.StringUtils;
import java.io.IOException;
import java.io.Writer;
+import java.util.ArrayList;
+import java.util.HashMap;
import redstone.xmlrpc.XmlRpcCustomSerializer;
import redstone.xmlrpc.XmlRpcException;
@@ -40,6 +43,14 @@ import redstone.xmlrpc.XmlRpcSerializer;
* #prop_desc("string", "hardware_address", "Hardware
Address of device.")
* #prop_desc("string", "module", "Network driver used
for this device.")
* #prop_desc("string", "broadcast", " Broadcast
address for device.")
+ * #prop_desc("array", "ipv6", "List of IPv6
addresses")
+ * #array()
+ * #struct("ipv6 address")
+ * #prop_desc("string", "address", "IPv6 address
of this network device")
+ * #prop_desc("string", "netmask", "IPv6 netmask
of this network device")
+ * #prop_desc("string", "scope", "IPv6 address
scope")
+ * #struct_end()
+ * #array_end()
* #struct_end()
*
*/
@@ -57,8 +68,19 @@ public class NetworkInterfaceSerializer implements
XmlRpcCustomSerializer {
throws XmlRpcException, IOException {
NetworkInterface device = (NetworkInterface)value;
SerializerHelper devMap = new SerializerHelper(builtInSerializer);
+ ArrayList ipv6List = new ArrayList();
+
+ for (ServerNetAddress6 addr : device.getIPv6Addresses()) {
+// SerializerHelper m = new SerializerHelper(builtInSerializer);
+ HashMap m = new HashMap();
+ m.put("address", StringUtils.defaultString(addr.getAddress()));
+ m.put("netmask", StringUtils.defaultString(addr.getNetmask()));
+ m.put("scope", StringUtils.defaultString(addr.getScope()));
+ ipv6List.add(m);
+ }
devMap.add("interface", StringUtils.defaultString(device.getName()));
+ devMap.add("ipv6", ipv6List);
devMap.add("ip", StringUtils.defaultString(device.getIpaddr()));
devMap.add("netmask", StringUtils.defaultString(device.getNetmask()));
devMap.add("broadcast",
StringUtils.defaultString(device.getBroadcast()));
commit 4e5f3a68b42fc83494d25690d3e0f50ff6d508be
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Nov 9 20:50:30 2011 +0100
api doc: typo fix
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/NetworkInterfaceSerializer.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/NetworkInterfaceSerializer.java
index ee0300b..e5ac890 100644
---
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/NetworkInterfaceSerializer.java
+++
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/NetworkInterfaceSerializer.java
@@ -39,7 +39,7 @@ import redstone.xmlrpc.XmlRpcSerializer;
* #prop_desc("string", "netmask", "Network mask
assigned to device")
* #prop_desc("string", "hardware_address", "Hardware
Address of device.")
* #prop_desc("string", "module", "Network driver used
for this device.")
- * #prop_desc("string", "broadcase", " Broadcast
address for device.")
+ * #prop_desc("string", "broadcast", " Broadcast
address for device.")
* #struct_end()
*
*/
commit b389cea28c11ae586370f98e26a87e0a9b14574f
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Nov 9 20:43:56 2011 +0100
IPv6: system.getNetwork() modifications (API)
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
index e00609c..e80f1b5 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
@@ -1371,19 +1371,20 @@ public class SystemHandler extends BaseHandler {
/**
- * Get the IP and hostname for a given server
+ * Get the addresses and hostname for a given server
* @param sessionKey The sessionKey containing the logged in user
* @param sid The id of the server in question
- * @return Returns a map containing the servers IP and hostname attributes
+ * @return Returns a map containing the servers addresses and hostname attributes
* @throws FaultException A FaultException is thrown if the server corresponding to
* sid cannot be found.
*
- * @xmlrpc.doc Get the IP address and hostname for a given server.
+ * @xmlrpc.doc Get the addresses and hostname for a given server.
* @xmlrpc.param #param("string", "sessionKey")
* @xmlrpc.param #param("int", "serverId")
* @xmlrpc.returntype
* #struct("network info")
- * #prop_desc("string", "ip", "IP address of
server")
+ * #prop_desc("string", "ip", "IPv4 address of
server")
+ * #prop_desc("string", "ip6", "IPv6 address of
server")
* #prop_desc("string", "hostname", "Hostname
of server")
* #struct_end()
*/
@@ -1392,13 +1393,15 @@ public class SystemHandler extends BaseHandler {
User loggedInUser = getLoggedInUser(sessionKey);
Server server = lookupServer(loggedInUser, sid);
- // Get the ip and hostname for the server
+ // Get the ip, ip6 and hostname for the server
String ip = server.getIpAddress();
+ String ip6 = server.getIp6Address();
String hostname = server.getHostname();
// Stick in a map and return
Map network = new HashMap();
network.put("ip", StringUtils.defaultString(ip));
+ network.put("ip6", StringUtils.defaultString(ip6));
network.put("hostname", StringUtils.defaultString(hostname));
return network;
commit 5725e40012d5cb59fb979e413c7d76f5690986f3
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Nov 9 20:20:32 2011 +0100
IPv6: SystemHardware.do (webui) modifications
diff --git a/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
b/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
index f80b018..b8f929a 100644
--- a/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
+++ b/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
@@ -25,6 +25,7 @@ import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.Session;
import java.io.Serializable;
+import java.util.ArrayList;
/**
* NetworkInterface
@@ -39,6 +40,7 @@ public class NetworkInterface extends BaseDomainHelper implements
private String hwaddr;
private String module;
private ServerNetAddress4 sa4 = null;
+ private ArrayList<ServerNetAddress6> sa6 = null;
/**
* @return Returns the interfaceid.
@@ -243,4 +245,19 @@ public class NetworkInterface extends BaseDomainHelper implements
getIpaddr().equals("0.0.0.0"));
}
+ /**
+ * Retrieve list of IPv6 addresses
+ * @return List of ServerNetAddress6 objects
+ */
+ public ArrayList<ServerNetAddress6> getIPv6Addresses() {
+ if (sa6 == null) {
+ Session session = HibernateFactory.getSession();
+ sa6 = (ArrayList<ServerNetAddress6>)
+ session.getNamedQuery("ServerNetAddress6.lookup_by_id")
+ .setParameter("interface_id", this.interfaceId).list();
+ }
+
+ return sa6;
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.hbm.xml
b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.hbm.xml
index 6994782..2ea121f 100644
--- a/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.hbm.xml
@@ -19,7 +19,8 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<query name="ServerNetAddress6.lookup_by_id">
<![CDATA[from com.redhat.rhn.domain.server.ServerNetAddress6 as sa
- where sa.interfaceId = :interface_id]]>
+ where sa.interfaceId = :interface_id
+ order by scope]]>
</query>
<query name="ServerNetAddress6.lookup_by_scope_and_id">
diff --git
a/java/code/src/com/redhat/rhn/frontend/action/systems/sdc/SystemHardwareAction.java
b/java/code/src/com/redhat/rhn/frontend/action/systems/sdc/SystemHardwareAction.java
index 9b893ee..3c38684 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/systems/sdc/SystemHardwareAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/systems/sdc/SystemHardwareAction.java
@@ -21,6 +21,7 @@ import com.redhat.rhn.domain.server.Device;
import com.redhat.rhn.domain.server.NetworkInterface;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.server.ServerFactory;
+import com.redhat.rhn.domain.server.ServerNetAddress6;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
@@ -131,6 +132,7 @@ public class SystemHardwareAction extends RhnAction {
request.setAttribute("network_hostname", server.getDecodedHostname());
request.setAttribute("network_ip_addr", server.getIpAddress());
+ request.setAttribute("network_ip6_addr", server.getIp6Address());
request.setAttribute("network_cnames", server.getDecodedCnames());
List<String> nicList = new ArrayList();
@@ -153,6 +155,22 @@ public class SystemHardwareAction extends RhnAction {
}
request.setAttribute("network_interfaces", nicList2);
+ List nicList3 = new ArrayList();
+ for (String nicName : nicList) {
+ NetworkInterface n = server.getNetworkInterface(nicName);
+ for (ServerNetAddress6 na6 : n.getIPv6Addresses()) {
+ Map nic = new HashMap();
+ nic.put("name", n.getName());
+ nic.put("hwaddr", n.getHwaddr());
+ nic.put("module", n.getModule());
+ nic.put("ip6", na6.getAddress());
+ nic.put("netmask", na6.getNetmask());
+ nic.put("scope", na6.getScope());
+ nicList3.add(nic);
+ }
+ }
+ request.setAttribute("ipv6_network_interfaces", nicList3);
+
List<String> hdd = new ArrayList();
List miscDevices = new ArrayList();
List videoDevices = new ArrayList();
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index d1c7227..ed74b06 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -19692,6 +19692,13 @@ performing a kickstart or creating a new kickstart
distribution.</strong>
</context-group>
</trans-unit>
+ <trans-unit id="sdc.details.hardware.network_ip6_addr">
+ <source>IPv6 Address:</source>
+ <context-group name="ctx">
+ <context
context-type="sourcefile">/systems/details/SystemHardware.do</context>
+ </context-group>
+ </trans-unit>
+
<trans-unit id="sdc.details.notes.message">
<source>The following notes are associated with this
system.</source>
<context-group name="ctx">
diff --git a/java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp
b/java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp
index 248cc4c..65fcfe9 100644
--- a/java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp
+++ b/java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp
@@ -174,6 +174,16 @@
${network_ip_addr}
</td>
</tr>
+
+ <tr>
+ <th>
+ <bean:message key="sdc.details.hardware.network_ip6_addr"/>
+ </th>
+ <td>
+ ${network_ip6_addr}
+ </td>
+ </tr>
+
</table>
<br/>
<table class="list compare-list" width="90%"
cellspacing="0">
@@ -234,6 +244,66 @@
</tr>
</c:forEach>
</table>
+ <br/>
+ <table class="list compare-list" width="90%"
cellspacing="0">
+ <thead>
+ <tr>
+ <th>Interface</th>
+ <th>IPv6 Address</th>
+ <th>Netmask</th>
+ <th>Scope</th>
+ <th>Hardware Address</th>
+ <th>Driver Module</th>
+ </tr>
+ </thead>
+ <c:forEach items="${ipv6_network_interfaces}" var="current"
varStatus="loop">
+ <c:choose>
+ <c:when test ="${loop.count % 2 == 0}">
+ <c:set var ="style_class" value="list-row-even"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var ="style_class" value="list-row-odd"/>
+ </c:otherwise>
+ </c:choose>
+ <tr class="${style_class}">
+ <td>${current.name}</td>
+ <c:choose>
+ <c:when test="${empty current.ip6}">
+ <td><span
class="no-details">(unknown)</span></td>
+ </c:when>
+ <c:otherwise>
+ <td>${current.ip6}</td>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${empty current.netmask}">
+ <td><span
class="no-details">(unknown)</span></td>
+ </c:when>
+ <c:otherwise>
+ <td>${current.netmask}</td>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${empty current.scope}">
+ <td><span
class="no-details">(unknown)</span></td>
+ </c:when>
+ <c:otherwise>
+ <td>${current.scope}</td>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${empty current.hwaddr}">
+ <td><span
class="no-details">(unknown)</span></td>
+ </c:when>
+ <c:otherwise>
+ <td>${current.hwaddr}</td>
+ </c:otherwise>
+ </c:choose>
+ <td>${current.module}</td>
+ </tr>
+ </c:forEach>
+
+ </table>
<c:if test="${not empty storageDevices}">
<h2><bean:message
key="sdc.details.hardware.storage"/></h2>
commit ffcec95e66c13a111a3b262853a91b781e30f12d
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Nov 9 18:18:33 2011 +0100
IPv6: update NetworkInterface.*
diff --git a/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.hbm.xml
b/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.hbm.xml
index efa05bc..574a8b2 100644
--- a/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.hbm.xml
@@ -11,10 +11,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
column="server_id" />
<key-property name="name" type="string"
column="name" length="32"/>
</composite-id>
- <property name="ipaddr" column="ip_addr"
type="string" length="64" />
- <property name="netmask" column="netmask"
type="string" length="64" />
- <property name="broadcast" column="broadcast"
type="string"
- length="64" />
+ <property name="interfaceId" column="id"
type="long" />
<property name="hwaddr" column="hw_addr"
type="string" length="18" />
<property name="module" column="module"
type="string" length="128" />
<property name="created" column="created"
type="timestamp"
diff --git a/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
b/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
index 7becd6d..f80b018 100644
--- a/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
+++ b/java/code/src/com/redhat/rhn/domain/server/NetworkInterface.java
@@ -14,6 +14,7 @@
*/
package com.redhat.rhn.domain.server;
+import com.redhat.rhn.common.hibernate.HibernateFactory;
import com.redhat.rhn.domain.BaseDomainHelper;
import com.redhat.rhn.manager.kickstart.IpAddress;
@@ -21,6 +22,8 @@ import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.hibernate.Session;
+
import java.io.Serializable;
/**
@@ -30,27 +33,25 @@ import java.io.Serializable;
public class NetworkInterface extends BaseDomainHelper implements
Serializable {
+ private Long interfaceId;
private Server server;
private String name;
- private String ipaddr;
- private String netmask;
- private String broadcast;
private String hwaddr;
private String module;
-
+ private ServerNetAddress4 sa4 = null;
/**
- * @return Returns the broadcast.
+ * @return Returns the interfaceid.
*/
- public String getBroadcast() {
- return broadcast;
+ public Long getInterfaceId() {
+ return interfaceId;
}
/**
- * @param b The broadcast to set.
+ * @param id The interfaceId to set.
*/
- public void setBroadcast(String b) {
- this.broadcast = b;
+ public void setInterfaceId(Long id) {
+ this.interfaceId = id;
}
/**
@@ -68,20 +69,6 @@ public class NetworkInterface extends BaseDomainHelper implements
}
/**
- * @return Returns the ipddr.
- */
- public String getIpaddr() {
- return ipaddr;
- }
-
- /**
- * @param i The ipddr to set.
- */
- public void setIpaddr(String i) {
- this.ipaddr = i;
- }
-
- /**
* @return Returns the module.
*/
public String getModule() {
@@ -110,20 +97,6 @@ public class NetworkInterface extends BaseDomainHelper implements
}
/**
- * @return Returns the netmask.
- */
- public String getNetmask() {
- return netmask;
- }
-
- /**
- * @param n The netmask to set.
- */
- public void setNetmask(String n) {
- this.netmask = n;
- }
-
- /**
* @return Returns the server.
*/
public Server getServer() {
@@ -147,9 +120,6 @@ public class NetworkInterface extends BaseDomainHelper implements
NetworkInterface castOther = (NetworkInterface) other;
return new EqualsBuilder().append(this.getServer(), castOther.getServer())
.append(this.getName(), castOther.getName())
- .append(this.getIpaddr(), castOther.getIpaddr())
- .append(this.getNetmask(), castOther.getNetmask())
- .append(this.getBroadcast(), castOther.getBroadcast())
.append(this.getHwaddr(), castOther.getHwaddr())
.append(this.getModule(), castOther.getModule())
.isEquals();
@@ -161,9 +131,6 @@ public class NetworkInterface extends BaseDomainHelper implements
public int hashCode() {
return new HashCodeBuilder().append(this.getServer())
.append(this.getName())
- .append(this.getIpaddr())
- .append(this.getNetmask())
- .append(this.getBroadcast())
.append(this.getHwaddr())
.append(this.getModule())
.toHashCode();
@@ -173,7 +140,62 @@ public class NetworkInterface extends BaseDomainHelper implements
* {@inheritDoc}
*/
public String toString() {
- return "NetworkInterface - name: " + this.getName() + " ip: "
+ this.getIpaddr();
+ return "NetworkInterface - name: " + this.getName();
+ }
+
+
+ /**
+ * findServerNetAddress4
+ * @param id Id of the network interface to search on.
+ */
+ private void findServerNetAddress4(Long id) {
+ if (sa4 != null) {
+ return;
+ }
+
+ Session session = HibernateFactory.getSession();
+ sa4 = (ServerNetAddress4)
session.getNamedQuery("ServerNetAddress4.lookup")
+ .setParameter("interface_id",
this.interfaceId)
+ .uniqueResult();
+ }
+
+ /**
+ * @return Returns the IP address (IPv4 compatibility).
+ */
+ public String getIpaddr() {
+ findServerNetAddress4(this.getInterfaceId());
+
+ if (sa4 == null) {
+ return null;
+ }
+
+ return sa4.getAddress();
+ }
+
+ /**
+ * @return Returns the netmask (IPv4 compatibility).
+ */
+ public String getNetmask() {
+ findServerNetAddress4(this.getInterfaceId());
+
+ if (sa4 == null) {
+ return null;
+ }
+
+ return sa4.getNetmask();
+ }
+
+ /**
+ * @return Returns the broadcast (IPv4 compatibility).
+ */
+ public String getBroadcast() {
+ findServerNetAddress4(this.getInterfaceId());
+
+ if (sa4 == null) {
+ return null;
+ }
+
+ return sa4.getBroadcast();
}
/**
commit d9c70e848491905a6cc3568b8730de7fd05339f5
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Nov 9 18:11:15 2011 +0100
IPv6: updated hibernate mappings for network tables
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress4.hbm.xml
b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress4.hbm.xml
new file mode 100644
index 0000000..a2e4b41
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress4.hbm.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.server.ServerNetAddress4"
+ table="rhnServerNetAddress4">
+ <composite-id>
+ <key-property name="interfaceId" column="interface_id"
type="long" />
+ <key-property name="address" column="address"
type="string" length="64"/>
+ </composite-id>
+ <property name="netmask" column="netmask"
type="string" length="64"/>
+ <property name="broadcast" column="broadcast"
type="string" length="64"/>
+ <property name="created" column="modified"
type="timestamp"
+ insert="false" update="false"/>
+ <property name="modified" column="modified"
type="timestamp"
+ insert="false" update="false"/>
+ </class>
+
+ <query name="ServerNetAddress4.lookup">
+ <![CDATA[from com.redhat.rhn.domain.server.ServerNetAddress4 as sa
+ where sa.interfaceId = :interface_id]]>
+ </query>
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress4.java
b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress4.java
new file mode 100644
index 0000000..a58bd27
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress4.java
@@ -0,0 +1,116 @@
+/**
+ * Copyright (c) 2009--2011 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+
+package com.redhat.rhn.domain.server;
+
+import com.redhat.rhn.domain.BaseDomainHelper;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+import java.io.Serializable;
+
+/**
+ * ServerNetAddress4
+ */
+
+public class ServerNetAddress4 extends BaseDomainHelper implements Serializable {
+
+ private Long interfaceId;
+ private String address;
+ private String netmask;
+ private String broadcast;
+
+ /**
+ * @return Returns the interfaceId.
+ */
+ public Long getInterfaceId() {
+ return interfaceId;
+ }
+
+ /**
+ * @param id Set the interfaceId.
+ */
+ public void setInterfaceId(Long id) {
+ this.interfaceId = id;
+ }
+
+ /**
+ * @return Returns the address.
+ */
+ public String getAddress() {
+ return address;
+ }
+
+ /**
+ * @param i The address to set.
+ */
+ public void setAddress(String i) {
+ this.address = i;
+ }
+
+ /**
+ * @return Returns the broadcast.
+ */
+ public String getBroadcast() {
+ return broadcast;
+ }
+
+ /**
+ * @param b The broadcast to set.
+ */
+ public void setBroadcast(String b) {
+ this.broadcast = b;
+ }
+
+ /**
+ * @return Returns the netmask.
+ */
+ public String getNetmask() {
+ return netmask;
+ }
+
+ /**
+ * @param n The netmask to set.
+ */
+ public void setNetmask(String n) {
+ this.netmask = n;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean equals(final Object other) {
+ if (!(other instanceof ServerNetAddress4)) {
+ return false;
+ }
+
+ ServerNetAddress4 castOther = (ServerNetAddress4) other;
+ return new EqualsBuilder().append(this.getAddress(), castOther.getAddress())
+ .append(this.getBroadcast(), castOther.getBroadcast())
+ .append(this.getNetmask(), castOther.getNetmask())
+ .isEquals();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ return new HashCodeBuilder().append(this.getAddress())
+ .append(this.getBroadcast())
+ .append(this.getNetmask())
+ .toHashCode();
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.hbm.xml
b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.hbm.xml
new file mode 100644
index 0000000..6994782
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.hbm.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.server.ServerNetAddress6"
+ table="rhnServerNetAddress6">
+ <composite-id>
+ <key-property name="interfaceId" column="interface_id"
type="long"/>
+ <key-property name="address" column="address"
type="string" length="45"/>
+ <key-property name="scope" column="scope"
type="string" length="64"/>
+ </composite-id>
+ <property name="netmask" column="netmask"
type="string" length="49"/>
+ <property name="created" column="modified"
type="timestamp"
+ insert="false" update="false"/>
+ <property name="modified" column="modified"
type="timestamp"
+ insert="false" update="false"/>
+ </class>
+
+ <query name="ServerNetAddress6.lookup_by_id">
+ <![CDATA[from com.redhat.rhn.domain.server.ServerNetAddress6 as sa
+ where sa.interfaceId = :interface_id]]>
+ </query>
+
+ <query name="ServerNetAddress6.lookup_by_scope_and_id">
+ <![CDATA[from com.redhat.rhn.domain.server.ServerNetAddress6 as sa
+ where sa.interfaceId = :interface_id and
+ sa.scope = :scope]]>
+ </query>
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.java
b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.java
new file mode 100644
index 0000000..8f80930
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerNetAddress6.java
@@ -0,0 +1,116 @@
+/**
+ * Copyright (c) 2009--2011 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+
+package com.redhat.rhn.domain.server;
+
+import com.redhat.rhn.domain.BaseDomainHelper;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+import java.io.Serializable;
+
+/**
+ * ServerNetAddress6
+ */
+
+public class ServerNetAddress6 extends BaseDomainHelper implements Serializable {
+
+ private Long interfaceId;
+ private String address;
+ private String netmask;
+ private String scope;
+
+ /**
+ * @return Returns the interfaceId.
+ */
+ public Long getInterfaceId() {
+ return interfaceId;
+ }
+
+ /**
+ * @param id Set the interfaceId.
+ */
+ public void setInterfaceId(Long id) {
+ this.interfaceId = id;
+ }
+
+ /**
+ * @return Returns the address.
+ */
+ public String getAddress() {
+ return address;
+ }
+
+ /**
+ * @param i The address to set.
+ */
+ public void setAddress(String i) {
+ this.address = i;
+ }
+
+ /**
+ * @return Returns the scope.
+ */
+ public String getScope() {
+ return scope;
+ }
+
+ /**
+ * @param s The scope to set.
+ */
+ public void setScope(String s) {
+ this.scope = s;
+ }
+
+ /**
+ * @return Returns the netmask.
+ */
+ public String getNetmask() {
+ return netmask;
+ }
+
+ /**
+ * @param n The netmask to set.
+ */
+ public void setNetmask(String n) {
+ this.netmask = n;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean equals(final Object other) {
+ if (!(other instanceof ServerNetAddress6)) {
+ return false;
+ }
+
+ ServerNetAddress6 castOther = (ServerNetAddress6) other;
+ return new EqualsBuilder().append(this.getAddress(), castOther.getAddress())
+ .append(this.getScope(), castOther.getScope())
+ .append(this.getNetmask(), castOther.getNetmask())
+ .isEquals();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ return new HashCodeBuilder().append(this.getAddress())
+ .append(this.getScope())
+ .append(this.getNetmask())
+ .toHashCode();
+ }
+}
commit 20e7b1d4d392e3fc8a1289e50f7cf121f1cb75d7
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Oct 24 15:50:36 2011 +0200
IPv6: insert id from sequence using trigger
rhnServerNetInterface.sql
diff --git a/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
b/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
index da0bb65..f31f4c4 100644
--- a/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
+++ b/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
@@ -19,6 +19,9 @@ rhn_srv_net_iface_mod_trig
before insert or update on rhnServerNetInterface
for each row
begin
+ if :new.id is null then
+ select rhn_srv_net_iface_id_seq.nextval into :new.id from dual;
+ end if;
:new.modified := sysdate;
end;
/
diff --git a/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
b/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
index 349810c..2bf65a1 100644
--- a/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
+++ b/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
@@ -1,8 +1,10 @@
--- oracle equivalent source sha1 d37db54a176f593bd9727921ed20d00d6cd95f4b
--- retrieved from
./1241102873/cdc6d42049bf86fbc9f1d3a5c54275eeacbd641d/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
+-- oracle equivalent source sha1 0464a691edf6642483856cc6cce5049fc2b25ca9
create or replace function rhn_srv_net_iface_mod_trig_fun() returns trigger as
$$
begin
+ if new.id is null then
+ new.id := nextval('rhn_srv_net_iface_id_seq');
+ end if;
new.modified := current_timestamp;
return new;
end;
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle
new file mode 100644
index 0000000..1387bff
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle
@@ -0,0 +1,12 @@
+create or replace trigger
+rhn_srv_net_iface_mod_trig
+before insert or update on rhnServerNetInterface
+for each row
+begin
+ if :new.id is null then
+ select rhn_srv_net_iface_id_seq.nextval into :new.id from dual;
+ end if;
+ :new.modified := sysdate;
+end;
+/
+show errors
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql
new file mode 100644
index 0000000..473e0d5
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql
@@ -0,0 +1,17 @@
+-- oracle equivalent source sha1 1ea0fa0493bd58e3cff2b3a8f6294710e77f4d0b
+create or replace function rhn_srv_net_iface_mod_trig_fun() returns trigger as
+$$
+begin
+ if new.id is null then
+ new.id := nextval('rhn_srv_net_iface_id_seq');
+ end if;
+ new.modified := current_timestamp;
+ return new;
+end;
+$$ language plpgsql;
+
+create trigger
+rhn_srv_net_iface_mod_trig
+before insert or update on rhnServerNetInterface
+for each row
+execute procedure rhn_srv_net_iface_mod_trig_fun();
commit 95b513f53a5313b8a040fd8a63a53eb7622c4cd1
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Oct 24 11:07:54 2011 +0200
IPv6: code cleanup - package RHN::DB::Server::NetInterface is not used anymore
diff --git a/web/modules/rhn/RHN/DB/Server.pm b/web/modules/rhn/RHN/DB/Server.pm
index 1eef958..22269cb 100644
--- a/web/modules/rhn/RHN/DB/Server.pm
+++ b/web/modules/rhn/RHN/DB/Server.pm
@@ -25,7 +25,6 @@ use RHN::DB::Server::CdDevice;
use RHN::DB::Server::HwDevice;
use RHN::DB::Server::StorageDevice;
use RHN::DB::Server::NetInfo;
-use RHN::DB::Server::NetInterface;
use RHN::DB::TableClass;
use RHN::DataSource::Errata;
diff --git a/web/modules/rhn/RHN/DB/Server/NetInterface.pm
b/web/modules/rhn/RHN/DB/Server/NetInterface.pm
deleted file mode 100644
index 238b75c..0000000
--- a/web/modules/rhn/RHN/DB/Server/NetInterface.pm
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# Copyright (c) 2008--2010 Red Hat, Inc.
-#
-# This software is licensed to you under the GNU General Public License,
-# version 2 (GPLv2). There is NO WARRANTY for this software, express or
-# implied, including the implied warranties of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
-# along with this software; if not, see
-#
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
-#
-# Red Hat trademarks are not licensed under GPLv2. No permission is
-# granted to use or replicate Red Hat trademarks that are incorporated
-# in this software or its documentation.
-#
-
-use strict;
-
-package RHN::DB::Server::NetInterface;
-
-use RHN::DB;
-use Carp;
-use RHN::DB::TableClass;
-
-# Corresponds to an entry in the rhnServerNetInterface table...
-
-my @net_interface_fields = qw/SERVER_ID NAME IP_ADDR NETMASK BROADCAST HW_ADDR MODULE/;
-
-my $n = new RHN::DB::TableClass("rhnServerNetInterface", "N",
"", @net_interface_fields);
-
-# create a blank net info object
-sub _blank_net_interface {
- my $class = shift;
-
- my $self = bless {}, $class;
-
- return $self;
-}
-
-# returns an array of net info objects given a server id
-sub lookup_net_interface_by_server {
- my $class = shift;
- my $server_id = shift;
-
- my $dbh = RHN::DB->connect;
-
- my $query;
- my $sth;
-
- $query = $n->select_query("N.SERVER_ID = ?");
- $sth = $dbh->prepare($query);
- $sth->execute($server_id);
-
- my @ret;
- my $count = 0;
-
- while (my @columns = $sth->fetchrow) {
- if ($columns[0]) {
- $ret[$count] = $class->_blank_net_interface;
- $ret[$count]->{"__".$_."__"} = shift @columns foreach
$n->method_names;
- }
- $count++;
- }
-
- $sth->finish;
- return @ret;
-}
-
-# build some read-only accessors
-foreach my $field ($n->method_names) {
- my $sub = q {
- sub RHN::DB::Server::NetInterface::[[field]] {
- my $self = shift;
- return $self->{__[[field]]__};
- }
- };
-
- $sub =~ s/\[\[field\]\]/$field/g;
- eval $sub;
-
- if ($@) {
- die $@;
- }
-}
-
-
-return 1;
commit def20366ea9d7e43581629d0503ce1903eb03e60
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Oct 24 11:06:33 2011 +0200
IPv6: code cleanup - function get_net_interfaces is not used anymore
diff --git a/web/modules/rhn/RHN/DB/Server.pm b/web/modules/rhn/RHN/DB/Server.pm
index 36e5283..1eef958 100644
--- a/web/modules/rhn/RHN/DB/Server.pm
+++ b/web/modules/rhn/RHN/DB/Server.pm
@@ -1383,14 +1383,6 @@ sub get_net_infos {
return @net_infos;
}
-# returns an array of all the net info objects related to a server
-sub get_net_interfaces {
- my $self = shift;
-
- my @net_interfaces =
RHN::DB::Server::NetInterface->lookup_net_interface_by_server($self->id);
- return @net_interfaces;
-}
-
#
# build some accessors
commit b2949f674898271f2939bd2b27212accf95951c4
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Oct 24 11:05:47 2011 +0200
IPv6: code cleanup - function server_network_interfaces is not used anymore
diff --git a/web/modules/sniglets/Sniglets/Servers.pm
b/web/modules/sniglets/Sniglets/Servers.pm
index 270b9fa..155a69b 100644
--- a/web/modules/sniglets/Sniglets/Servers.pm
+++ b/web/modules/sniglets/Sniglets/Servers.pm
@@ -690,64 +690,6 @@ sub server_network_details {
return $ret;
}
-
-sub server_network_interfaces {
- my $pxt = shift;
- my %params = @_;
- my $ret = '';
- my $current;
-
- my $server = $pxt->pnotes('server');
-
- throw "No server." unless $server;
-
- my @net_interfaces = $server->get_net_interfaces;
-
- my %subst;
-
- if (not @net_interfaces) {
- return '';
- }
-
- PXT::Debug->log(7, "got net_interfaces...");
-
- my $block = $params{__block__};
- $block =~ m/<rhn-interface-data>(.*?)<\/rhn-interface-data>/gism;
- my $device_data_block = $1;
-
-
- my $unknown = '<span
class="no-details">(unknown)</span>';
- my $html = '';
- my $counter = 1;
- foreach my $interface (@net_interfaces) {
-
- my %subst;
- if ($counter % 2) {
- $subst{row_class} = 'list-row-odd';
- }
- else {
- $subst{row_class} = 'list-row-even';
- }
-
-
- $subst{interface_name} = $interface->name; # NOT NULL
- $subst{interface_ip_addr} = defined $interface->ip_addr ?
PXT::Utils->escapeHTML($interface->ip_addr) : $unknown;
- $subst{interface_netmask} = defined $interface->netmask ?
PXT::Utils->escapeHTML($interface->netmask) : $unknown;
- $subst{interface_broadcast} = defined $interface->broadcast ?
PXT::Utils->escapeHTML($interface->broadcast) : $unknown;
- $subst{interface_hw_addr} = defined $interface->hw_addr ?
PXT::Utils->escapeHTML($interface->hw_addr) : $unknown;
- $subst{interface_module} = defined $interface->module ?
PXT::Utils->escapeHTML($interface->module) : $unknown;
-
- $html .= PXT::Utils->perform_substitutions($device_data_block, \%subst);
- $counter++;
- }
-
- PXT::Debug->log(7, "html: $html");
-
- $block =~ s{<rhn-interface-data>.*?<\/rhn-interface-data>}{$html}ism;
-
- return $block;
-}
-
# must happen *after* server_hardware_profile... so use tags
# correctly!
sub server_device {
commit 3c24e7b76b1a4b4af1e82b64711b5406db28c4e1
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Oct 24 11:04:27 2011 +0200
IPv6: code cleanup - tag rhn-server-network-interfaces is not used anywhere
diff --git a/web/modules/sniglets/Sniglets/Servers.pm
b/web/modules/sniglets/Sniglets/Servers.pm
index 1407073..270b9fa 100644
--- a/web/modules/sniglets/Sniglets/Servers.pm
+++ b/web/modules/sniglets/Sniglets/Servers.pm
@@ -61,10 +61,6 @@ sub register_tags {
# has to run after server_details
$pxt->register_tag('rhn-server-network-details' =>
\&server_network_details, 2);
- # slightly different than the rhn-server-network-details, this gives access to
- # more detailed info about the network interfaces, as opposed to just hostname/ipaddy
- $pxt->register_tag('rhn-server-network-interfaces' =>
\&server_network_interfaces, 2);
-
$pxt->register_tag('rhn-server-history-event-details' =>
\&server_history_event_details);
commit 49f01d8b93d26f50d8d69e3df30f5a5aaec83564
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Oct 21 10:03:49 2011 +0200
IPv6: get_hw_info_as_clob schema upgrade script
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle
new file mode 100644
index 0000000..819c4ca
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle
@@ -0,0 +1,33 @@
+
+create or replace function get_hw_info_as_clob(
+ sid in rhnserver.id%TYPE,
+ separator in varchar
+)
+return clob
+is
+ ret clob;
+ tmp varchar2(4000);
+begin
+ dbms_lob.createtemporary(ret, true);
+ for rec in (
+ select m
+ from (
+ select 1 n, sum(nrcpu) || ' CPUs' m
+ from rhncpu where rhncpu.server_id = sid
+ union all
+ select 2, ni.name||' '||na4.address||'/'||na4.netmask||'
'||ni.hw_addr val
+ from rhnservernetinterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = sid
+ and ni.id = na4.interface_id
+ )
+ order by n, m
+ ) loop
+ if dbms_lob.getlength(ret) > 0 then
+ dbms_lob.writeappend(ret, length(separator), separator);
+ end if;
+ dbms_lob.writeappend(ret, length(rec.m), rec.m);
+ end loop;
+ return ret;
+end;
+/
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql
new file mode 100644
index 0000000..be61cb5
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql
@@ -0,0 +1,36 @@
+-- oracle equivalent source sha1 a1d56fbb4429cefecff7ef670556ddd88072e610
+
+create or replace function get_hw_info_as_clob(
+ sid in rhnserver.id%TYPE,
+ separator in varchar
+)
+returns text
+as
+$$
+declare
+ ret text;
+ rec record;
+begin
+ for rec in (
+ select m
+ from (
+ select 1 n, sum(nrcpu) || ' CPUs' m
+ from rhncpu where rhncpu.server_id = sid
+ union all
+ select 2, ni.name||'
'||coalesce(na4.address,'')||'/'||coalesce(na4.netmask,'')||'
'||ni.hw_addr val
+ from rhnservernetinterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = sid
+ and ni.id = na4.interface_id
+ ) X
+ order by n, m
+ ) loop
+ if ret is null then
+ ret := rec.m;
+ else
+ ret := ret || separator || rec.m;
+ end if;
+ end loop;
+ return ret;
+end;
+$$ language plpgsql;
commit a6656e2f90cdcea572fff1e5edac19a4d827d9c9
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Oct 21 10:03:03 2011 +0200
IPv6: upgrade script for rhn_server.pkb
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle
new file mode 100644
index 0000000..87600df
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle
@@ -0,0 +1,750 @@
+--
+-- Copyright (c) 2008--2010 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+--
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+--
+--
+--
+
+create or replace
+package body rhn_server
+is
+ function system_service_level(
+ server_id_in in number,
+ service_level_in in varchar2
+ ) return number is
+
+ cursor ents is
+ select label from rhnServerEntitlementView
+ where server_id = server_id_in;
+
+ retval number := 0;
+
+ begin
+ for ent in ents loop
+ retval := rhn_entitlements.entitlement_grants_service (ent.label,
service_level_in);
+ if retval = 1 then
+ return retval;
+ end if;
+ end loop;
+
+ return retval;
+
+ end system_service_level;
+
+
+ function can_change_base_channel(server_id_in IN NUMBER)
+ return number
+ is
+ throwaway number;
+ begin
+ -- the idea: if we get past this query, the server is
+ -- neither sat nor proxy, so base channel is changeable
+
+ select 1 into throwaway
+ from rhnServer S
+ where S.id = server_id_in
+ and not exists (select 1 from rhnSatelliteInfo SI where SI.server_id = S.id)
+ and not exists (select 1 from rhnProxyInfo PI where PI.server_id = S.id);
+
+ return 1;
+ exception
+ when no_data_found
+ then
+ return 0;
+ end can_change_base_channel;
+
+ procedure set_custom_value(
+ server_id_in in number,
+ user_id_in in number,
+ key_label_in in varchar2,
+ value_in in varchar2
+ ) is
+ key_id_val number;
+ begin
+ select CDK.id into key_id_val
+ from rhnCustomDataKey CDK,
+ rhnServer S
+ where S.id = server_id_in
+ and S.org_id = CDK.org_id
+ and CDK.label = key_label_in;
+
+ begin
+ insert into rhnServerCustomDataValue (server_id, key_id, value, created_by,
last_modified_by)
+ values (server_id_in, key_id_val, value_in, user_id_in, user_id_in);
+ exception
+ when DUP_VAL_ON_INDEX
+ then
+ update rhnServerCustomDataValue
+ set value = value_in,
+ last_modified_by = user_id_in
+ where server_id = server_id_in
+ and key_id = key_id_val;
+ end;
+
+ end set_custom_value;
+
+ function bulk_set_custom_value(
+ key_label_in in varchar2,
+ value_in in varchar2,
+ set_label_in in varchar2,
+ set_uid_in in number
+ )
+ return integer
+ is
+ i integer := 0;
+ begin
+ i := 0;
+ for server in rhn_set.set_iterator(set_label_in, set_uid_in)
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ rhn_server.set_custom_value(server.element, set_uid_in, key_label_in, value_in);
+ i := i + 1;
+ end if;
+ end loop server;
+ return i;
+ end bulk_set_custom_value;
+
+ procedure bulk_snapshot_tag(
+ org_id_in in number,
+ tagname_in in varchar2,
+ set_label_in in varchar2,
+ set_uid_in in number
+ ) is
+ snapshot_id number;
+ begin
+ for server in rhn_set.set_iterator(set_label_in, set_uid_in)
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ begin
+ select max(id) into snapshot_id
+ from rhnSnapshot
+ where server_id = server.element;
+ exception
+ when NO_DATA_FOUND then
+ rhn_server.snapshot_server(server.element, 'tagging system: ' ||
tagname_in);
+
+ select max(id) into snapshot_id
+ from rhnSnapshot
+ where server_id = server.element;
+ end;
+
+ -- now have a snapshot_id to work with...
+ begin
+ rhn_server.tag_snapshot(snapshot_id, org_id_in, tagname_in);
+ exception
+ when DUP_VAL_ON_INDEX
+ then
+ -- do nothing, be forgiving...
+ null;
+ end;
+ end if;
+ end loop server;
+ end bulk_snapshot_tag;
+
+ procedure tag_delete(
+ server_id_in in number,
+ tag_id_in in number
+ ) is
+ cursor snapshots is
+ select snapshot_id
+ from rhnSnapshotTag
+ where tag_id = tag_id_in;
+ tag_id_tmp number;
+ begin
+ select id into tag_id_tmp
+ from rhnTag
+ where id = tag_id_in
+ for update;
+
+ delete
+ from rhnSnapshotTag
+ where server_id = server_id_in
+ and tag_id = tag_id_in;
+ for snapshot in snapshots loop
+ return;
+ end loop;
+ delete
+ from rhnTag
+ where id = tag_id_in;
+ end tag_delete;
+
+ procedure tag_snapshot(
+ snapshot_id_in in number,
+ org_id_in in number,
+ tagname_in in varchar2
+ ) is
+ begin
+ insert into rhnSnapshotTag (snapshot_id, server_id, tag_id)
+ select snapshot_id_in, server_id, lookup_tag(org_id_in, tagname_in)
+ from rhnSnapshot
+ where id = snapshot_id_in;
+ end tag_snapshot;
+
+ procedure bulk_snapshot(
+ reason_in in varchar2,
+ set_label_in in varchar2,
+ set_uid_in in number
+ ) is
+ begin
+ for server in rhn_set.set_iterator(set_label_in, set_uid_in)
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ rhn_server.snapshot_server(server.element, reason_in);
+ end if;
+ end loop server;
+ end bulk_snapshot;
+
+ procedure snapshot_server(
+ server_id_in in number,
+ reason_in in varchar2
+ ) is
+ snapshot_id number;
+ cursor revisions is
+ select distinct
+ cr.id
+ from rhnConfigRevision cr,
+ rhnConfigFileName cfn,
+ rhnConfigFile cf,
+ rhnConfigChannel cc,
+ rhnServerConfigChannel scc
+ where 1=1
+ and scc.server_id = server_id_in
+ and scc.config_channel_id = cc.id
+ and cc.id = cf.config_channel_id
+ and cf.id = cr.config_file_id
+ and cr.id = cf.latest_config_revision_id
+ and cf.config_file_name_id = cfn.id
+ and cf.id = lookup_first_matching_cf(scc.server_id, cfn.path);
+ locked integer;
+ begin
+ select rhn_snapshot_id_seq.nextval into snapshot_id from dual;
+
+ insert into rhnSnapshot (id, org_id, server_id, reason) (
+ select snapshot_id,
+ s.org_id,
+ server_id_in,
+ reason_in
+ from rhnServer s
+ where s.id = server_id_in
+ );
+ insert into rhnSnapshotChannel (snapshot_id, channel_id) (
+ select snapshot_id, sc.channel_id
+ from rhnServerChannel sc
+ where sc.server_id = server_id_in
+ );
+ insert into rhnSnapshotServerGroup (snapshot_id, server_group_id) (
+ select snapshot_id, sgm.server_group_id
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = server_id_in
+ );
+ locked := 0;
+ while true loop
+ begin
+ insert into rhnPackageNEVRA (id, name_id, evr_id, package_arch_id)
+ select rhn_pkgnevra_id_seq.nextval, sp.name_id, sp.evr_id,
sp.package_arch_id
+ from rhnServerPackage sp
+ where sp.server_id = server_id_in
+ and not exists
+ (select 1
+ from rhnPackageNEVRA nevra
+ where nevra.name_id = sp.name_id
+ and nevra.evr_id = sp.evr_id
+ and (nevra.package_arch_id = sp.package_arch_id
+ or (nevra.package_arch_id is null
+ and sp.package_arch_id is null)));
+ exit;
+ exception when dup_val_on_index then
+ if locked = 1 then
+ raise;
+ else
+ lock table rhnPackageNEVRA in exclusive mode;
+ locked := 1;
+ end if;
+ end;
+ end loop;
+ insert into rhnSnapshotPackage (snapshot_id, nevra_id) (
+ select distinct snapshot_id, nevra.id
+ from rhnServerPackage sp, rhnPackageNEVRA nevra
+ where sp.server_id = server_id_in
+ and nevra.name_id = sp.name_id
+ and nevra.evr_id = sp.evr_id
+ and (nevra.package_arch_id = sp.package_arch_id
+ or (nevra.package_arch_id is null
+ and sp.package_arch_id is null))
+ );
+
+ insert into rhnSnapshotConfigChannel ( snapshot_id, config_channel_id ) (
+ select snapshot_id, scc.config_channel_id
+ from rhnServerConfigChannel scc
+ where server_id = server_id_in
+ );
+
+ for revision in revisions loop
+ insert into rhnSnapshotConfigRevision (
+ snapshot_id, config_revision_id
+ ) values (
+ snapshot_id, revision.id
+ );
+ end loop;
+ end snapshot_server;
+
+ procedure remove_action(
+ server_id_in in number,
+ action_id_in in number
+ ) is
+ -- this really wants "nulls last", but 8.1.7.3.0 sucks ass.
+ -- instead, we make a local table that holds our
+ -- list of ids with null prereqs. There's surely a better way
+ -- (an array instead of a table maybe? who knows...)
+ -- but I've got code to do this handy that I can look at ;)
+ cursor chained_actions is
+ select id, prerequisite
+ from rhnAction
+ start with id = action_id_in
+ connect by prior id = prerequisite
+ order by prerequisite desc;
+ cursor sessions is
+ select s.id
+ from rhnKickstartSession s
+ where server_id_in in (s.old_server_id, s.new_server_id)
+ and s.action_id = action_id_in
+ and not exists (
+ select 1
+ from rhnKickstartSessionState ss
+ where ss.id = s.state_id
+ and ss.label in ('failed','complete')
+ );
+ type chain_end_type is table of number index by binary_integer;
+ chain_ends chain_end_type;
+ i number;
+ prereq number := 1;
+ begin
+ select prerequisite
+ into prereq
+ from rhnAction
+ where id = action_id_in;
+
+ if prereq is not null then
+ rhn_exception.raise_exception('action_is_child');
+ end if;
+
+ i := 0;
+ for action in chained_actions loop
+ if action.prerequisite is null then
+ chain_ends(i) := action.id;
+ i := i + 1;
+ else
+ delete from rhnServerAction
+ where server_id = server_id_in
+ and action_id = action.id;
+ end if;
+ end loop;
+ i := chain_ends.first;
+ while i is not null loop
+ delete from rhnServerAction
+ where server_id = server_id_in
+ and action_id = chain_ends(i);
+ i := chain_ends.next(i);
+ end loop;
+ for s in sessions loop
+ update rhnKickstartSession
+ set state_id = (
+ select id
+ from rhnKickstartSessionState
+ where label = 'failed'
+ ),
+ action_id = null
+ where id = s.id;
+ set_ks_session_history_message(s.id, 'failed', 'Kickstart cancelled due to
action removal');
+ end loop;
+ end remove_action;
+
+ function check_user_access(server_id_in in number, user_id_in in number)
+ return number
+ is
+ has_access number;
+ begin
+ -- first check; if this returns no rows, then the server/user are in different orgs, and
we bail
+ select 1 into has_access
+ from rhnServer S,
+ web_contact wc
+ where wc.org_id = s.org_id
+ and s.id = server_id_in
+ and wc.id = user_id_in;
+
+ -- okay, so they're in the same org. if we have an org admin, they get a free pass
+ if rhn_user.check_role(user_id_in, 'org_admin') = 1
+ then
+ return 1;
+ end if;
+
+ select 1 into has_access
+ from rhnServerGroupMembers SGM,
+ rhnUserServerGroupPerms USG
+ where SGM.server_group_id = USG.server_group_id
+ and SGM.server_id = server_id_in
+ and USG.user_id = user_id_in
+ and rownum = 1;
+
+ return 1;
+ exception
+ when no_data_found
+ then
+ return 0;
+ end check_user_access;
+
+ -- *******************************************************************
+ -- FUNCTION: can_server_consume_virt_slot
+ -- Returns 1 if the server id is eligible to consume a virtual slot,
+ -- else returns 0.
+ -- Called by: insert_into_servergroup, delete_from_servergroup
+ -- *******************************************************************
+ function can_server_consume_virt_slot(server_id_in in number,
+ group_type_in in
+ rhnServerGroupType.label%TYPE)
+ return number
+ is
+
+ cursor server_virt_slots is
+ select vi.VIRTUAL_SYSTEM_ID
+ from
+ rhnVirtualInstance vi
+ where
+ -- server id is a virtual instance
+ vi.VIRTUAL_SYSTEM_ID = server_id_in
+ -- server id's host is virt entitled
+ and exists ( select 1
+ from rhnServerEntitlementView sev
+ where vi.HOST_SYSTEM_ID = sev.server_id
+ and sev.label in ('virtualization_host',
+ 'virtualization_host_platform') )
+ -- server id's host also has the ent we want
+ and exists ( select 1
+ from rhnServerEntitlementView sev2
+ where vi.HOST_SYSTEM_ID = sev2.server_id
+ and sev2.label = group_type_in );
+
+ begin
+ for server_virt_slot in server_virt_slots loop
+ return 1;
+ end loop;
+ return 0;
+ end can_server_consume_virt_slot;
+
+
+ procedure insert_into_servergroup (
+ server_id_in in number,
+ server_group_id_in in number
+ ) is
+ used_slots number;
+ max_slots number;
+ org_id number;
+ mgmt_available number;
+ mgmt_upgrade number;
+ mgmt_sgid number;
+ prov_available number;
+ prov_upgrade number;
+ prov_sgid number;
+ group_label rhnServerGroupType.label%TYPE;
+ group_type number;
+ begin
+ -- frist, group_type = null, because it's easy...
+
+ -- this will rowlock the servergroup we're trying to change;
+ -- we probably need to lock the other one, but I think the chances
+ -- of it being a real issue are very small for now...
+ select sg.group_type, sg.org_id, sg.current_members, sg.max_members
+ into group_type, org_id, used_slots, max_slots
+ from rhnServerGroup sg
+ where sg.id = server_group_id_in
+ for update of sg.current_members;
+
+ if group_type is null then
+ if used_slots >= max_slots then
+ rhn_exception.raise_exception('servergroup_max_members');
+ end if;
+
+ insert into rhnServerGroupMembers(
+ server_id, server_group_id
+ ) values (
+ server_id_in, server_group_id_in
+ );
+ update rhnServerGroup
+ set current_members = current_members + 1
+ where id = server_group_id_in;
+
+ rhn_cache.update_perms_for_server_group(server_group_id_in);
+ return;
+ end if;
+
+ -- now for group_type != null
+ --
+ select label
+ into group_label
+ from rhnServerGroupType sgt
+ where sgt.id = group_type;
+
+ -- the naive easy path that gets hit most often and has to be quickest.
+ if group_label in ('sw_mgr_entitled',
+ 'enterprise_entitled',
+ 'monitoring_entitled',
+ 'provisioning_entitled',
+ 'virtualization_host',
+ 'virtualization_host_platform') then
+ if used_slots >= max_slots and
+ (can_server_consume_virt_slot(server_id_in, group_label) != 1)
+ then
+ rhn_exception.raise_exception('servergroup_max_members');
+ end if;
+
+ insert into rhnServerGroupMembers(
+ server_id, server_group_id
+ ) values (
+ server_id_in, server_group_id_in
+ );
+
+ -- Only update current members if the system in consuming a
+ -- physical slot.
+ if can_server_consume_virt_slot(server_id_in, group_label) = 0 then
+ update rhnServerGroup
+ set current_members = current_members + 1
+ where id = server_group_id_in;
+ end if;
+
+ return;
+ end if;
+ end;
+
+ function insert_into_servergroup_maybe (
+ server_id_in in number,
+ server_group_id_in in number
+ ) return number is
+ retval number := 0;
+ cursor servergroups is
+ select s.id server_id,
+ sg.id server_group_id
+ from rhnServerGroup sg,
+ rhnServer s
+ where s.id = server_id_in
+ and sg.id = server_group_id_in
+ and s.org_id = sg.org_id
+ and not exists (
+ select 1
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = s.id
+ and sgm.server_group_id = sg.id
+ );
+ begin
+ for sgm in servergroups loop
+ rhn_server.insert_into_servergroup(sgm.server_id, sgm.server_group_id);
+ retval := retval + 1;
+ end loop;
+ return retval;
+ end insert_into_servergroup_maybe;
+
+ procedure insert_set_into_servergroup (
+ server_group_id_in in number,
+ user_id_in in number,
+ set_label_in in varchar2
+ ) is
+ cursor servers is
+ select st.element id
+ from rhnSet st
+ where st.user_id = user_id_in
+ and st.label = set_label_in
+ and exists (
+ select 1
+ from rhnUserManagedServerGroups umsg
+ where umsg.server_group_id = server_group_id_in
+ and umsg.user_id = user_id_in
+ )
+ and not exists (
+ select 1
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = st.element
+ and sgm.server_group_id = server_group_id_in
+ );
+ begin
+ for s in servers loop
+ rhn_server.insert_into_servergroup(s.id, server_group_id_in);
+ end loop;
+ end insert_set_into_servergroup;
+
+ procedure delete_from_servergroup (
+ server_id_in in number,
+ server_group_id_in in number
+ ) is
+ cursor server_virt_groups is
+ select 1
+ from rhnServerEntitlementVirtual sev
+ where sev.server_id = server_id_in
+ and sev.server_group_id = server_group_id_in;
+
+ oid number;
+ mgmt_sgid number;
+ label rhnServerGroupType.label%TYPE;
+ group_type number;
+ begin
+ begin
+ select sg.group_type, sg.org_id
+ into group_type, oid
+ from rhnServerGroupMembers sgm,
+ rhnServerGroup sg
+ where sg.id = server_group_id_in
+ and sg.id = sgm.server_group_id
+ and sgm.server_id = server_id_in
+ for update of sg.current_members;
+ exception
+ when no_data_found then
+ rhn_exception.raise_exception('server_not_in_group');
+ end;
+
+ -- do group_type is null first
+ if group_type is null then
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+ update rhnServerGroup
+ set current_members = current_members - 1
+ where id = server_group_id_in;
+ rhn_cache.update_perms_for_server_group(server_group_id_in);
+ return;
+ end if;
+
+ select sgt.label
+ into label
+ from rhnServerGroupType sgt
+ where sgt.id = group_type;
+
+ if label in ('sw_mgr_entitled',
+ 'enterprise_entitled',
+ 'provisioning_entitled',
+ 'monitoring_entitled',
+ 'virtualization_host',
+ 'virtualization_host_platform') then
+
+ -- Only update current members if the system is consuming
+ -- a physical slot.
+ for server_virt_group in server_virt_groups loop
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+ return;
+ end loop;
+
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+
+ update rhnServerGroup
+ set current_members = current_members - 1
+ where id = server_group_id_in;
+
+ end if;
+ end;
+
+ procedure delete_set_from_servergroup (
+ server_group_id_in in number,
+ user_id_in in number,
+ set_label_in in varchar2
+ ) is
+ cursor servergroups is
+ select sgm.server_id, sgm.server_group_id
+ from rhnSet st,
+ rhnServerGroupMembers sgm
+ where sgm.server_group_id = server_group_id_in
+ and st.user_id = user_id_in
+ and st.label = set_label_in
+ and sgm.server_id = st.element
+ and exists (
+ select 1
+ from rhnUserManagedServerGroups usgp
+ where usgp.server_group_id = server_group_id_in
+ and usgp.user_id = user_id_in
+ );
+ begin
+ for sgm in servergroups loop
+ rhn_server.delete_from_servergroup(sgm.server_id, server_group_id_in);
+ end loop;
+ end delete_set_from_servergroup;
+
+ procedure clear_servergroup (
+ server_group_id_in in number
+ ) is
+ cursor servers is
+ select sgm.server_id id
+ from rhnServerGroupMembers sgm
+ where sgm.server_group_id = server_group_id_in;
+ begin
+ for s in servers loop
+ rhn_server.delete_from_servergroup(s.id, server_group_id_in);
+ end loop;
+ end clear_servergroup;
+
+ procedure delete_from_org_servergroups (
+ server_id_in in number
+ ) is
+ cursor servergroups is
+ select sgm.server_group_id id
+ from rhnServerGroup sg,
+ rhnServerGroupMembers sgm
+ where sgm.server_id = server_id_in
+ and sgm.server_group_id = sg.id
+ and sg.group_type is null;
+ begin
+ for sg in servergroups loop
+ rhn_server.delete_from_servergroup(server_id_in, sg.id);
+ end loop;
+ end delete_from_org_servergroups;
+
+ function get_ip_address (
+ server_id_in in number
+ ) return varchar2 is
+ cursor interfaces is
+ select ni.name as name, na4.address as address
+ from rhnServerNetInterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = server_id_in
+ and ni.id = na4.interface_id
+ and na4.address != '127.0.0.1';
+ cursor addresses is
+ select ipaddr ip_addr
+ from rhnServerNetwork
+ where server_id = server_id_in
+ and ipaddr != '127.0.0.1';
+ begin
+ for addr in addresses loop
+ return addr.ip_addr;
+ end loop;
+ for iface in interfaces loop
+ return iface.address;
+ end loop;
+ return NULL;
+ end get_ip_address;
+
+ procedure update_needed_cache(server_id_in in number)
+ is
+ begin
+ delete from rhnServerNeededCache
+ where server_id = server_id_in;
+ insert into rhnServerNeededCache
+ (server_id, errata_id, package_id)
+ (select distinct server_id, errata_id, package_id
+ from rhnServerNeededView
+ where server_id = server_id_in);
+ end update_needed_cache;
+
+end rhn_server;
+/
+SHOW ERRORS
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
new file mode 100644
index 0000000..f15b5c9
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
@@ -0,0 +1,803 @@
+-- oracle equivalent source sha1 fa9bb2ceca325001a9ea1d2776b8472cbbfb16ee
+--
+-- Copyright (c) 2008--2010 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+--
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+--
+--
+--
+
+create schema rhn_server;
+
+--update pg_setting
+update pg_settings set setting = 'rhn_server,' || setting where name =
'search_path';
+
+ create or replace function system_service_level(
+ server_id_in in numeric,
+ service_level_in in varchar
+ ) returns numeric as $$
+ declare
+ ents cursor is
+ select label from rhnServerEntitlementView
+ where server_id = server_id_in;
+
+ retval numeric := 0;
+
+ begin
+ for ent in ents loop
+ retval := rhn_entitlements.entitlement_grants_service (ent.label,
service_level_in);
+ if retval = 1 then
+ return retval;
+ end if;
+ end loop;
+
+ return retval;
+
+ end$$ language plpgsql;
+
+
+ create or replace function can_change_base_channel(server_id_in IN NUMERIC)
+ returns numeric
+ as $$
+ declare
+ throwaway numeric;
+ begin
+ -- the idea: if we get past this query, the server is
+ -- neither sat nor proxy, so base channel is changeable
+
+ select 1 into throwaway
+ from rhnServer S
+ where S.id = server_id_in
+ and not exists (select 1 from rhnSatelliteInfo SI where SI.server_id = S.id)
+ and not exists (select 1 from rhnProxyInfo PI where PI.server_id = S.id);
+
+ if not found then
+ return 0;
+ end if;
+
+ return 1;
+ end$$ language plpgsql;
+
+ create or replace function set_custom_value(
+ server_id_in in numeric,
+ user_id_in in numeric,
+ key_label_in in varchar,
+ value_in in varchar
+ ) returns void
+ as $$
+ declare
+ key_id_val numeric;
+ begin
+ select CDK.id into strict key_id_val
+ from rhnCustomDataKey CDK,
+ rhnServer S
+ where S.id = server_id_in
+ and S.org_id = CDK.org_id
+ and CDK.label = key_label_in;
+
+ begin
+ insert into rhnServerCustomDataValue (server_id, key_id, value, created_by,
last_modified_by)
+ values (server_id_in, key_id_val, value_in, user_id_in, user_id_in);
+ exception
+ when UNIQUE_VIOLATION
+ then
+ update rhnServerCustomDataValue
+ set value = value_in,
+ last_modified_by = user_id_in
+ where server_id = server_id_in
+ and key_id = key_id_val;
+ end;
+
+ end$$ language plpgsql;
+
+ create or replace function bulk_set_custom_value(
+ key_label_in in varchar,
+ value_in in varchar,
+ set_label_in in varchar,
+ set_uid_in in numeric
+ )
+ returns integer
+ as $$
+ declare
+ i integer;
+ server record;
+ begin
+ i := 0;
+ for server in
+ SELECT user_id, label, element, element_two
+ FROM rhnSet
+ WHERE label = set_label_in
+ AND user_id = set_uid_in
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ perform rhn_server.set_custom_value(server.element, set_uid_in, key_label_in,
value_in);
+ i := i + 1;
+ end if;
+ end loop;
+ return i;
+ end$$ language plpgsql;
+
+ create or replace function bulk_snapshot_tag(
+ org_id_in in numeric,
+ tagname_in in varchar,
+ set_label_in in varchar,
+ set_uid_in in numeric
+ ) returns void
+ as $$
+ declare
+ server record;
+ snapshot_id numeric;
+ begin
+ for server in
+ SELECT user_id, label, element, element_two
+ FROM rhnSet
+ WHERE label = set_label_in
+ AND user_id = set_uid_in
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ select max(id) into snapshot_id
+ from rhnSnapshot
+ where server_id = server.element;
+
+ if snapshot_id is null then
+ perform rhn_server.snapshot_server(server.element, 'tagging system: ' ||
tagname_in);
+
+ select max(id) into snapshot_id
+ from rhnSnapshot
+ where server_id = server.element;
+ end if;
+
+ -- now have a snapshot_id to work with...
+ begin
+ perform rhn_server.tag_snapshot(snapshot_id, org_id_in, tagname_in);
+ exception
+ when UNIQUE_VIOLATION
+ then
+ -- do nothing, be forgiving...
+ null;
+ end;
+ end if;
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function tag_delete(
+ server_id_in in numeric,
+ tag_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ snapshots cursor is
+ select snapshot_id
+ from rhnSnapshotTag
+ where tag_id = tag_id_in;
+ tag_id_tmp numeric;
+ begin
+ select id into tag_id_tmp
+ from rhnTag
+ where id = tag_id_in
+ for update;
+
+ delete
+ from rhnSnapshotTag
+ where server_id = server_id_in
+ and tag_id = tag_id_in;
+ for snapshot in snapshots loop
+ return;
+ end loop;
+ delete
+ from rhnTag
+ where id = tag_id_in;
+ end$$ language plpgsql;
+
+ create or replace function tag_snapshot(
+ snapshot_id_in in numeric,
+ org_id_in in numeric,
+ tagname_in in varchar
+ ) returns void
+ as $$
+ begin
+ insert into rhnSnapshotTag (snapshot_id, server_id, tag_id)
+ select snapshot_id_in, server_id, lookup_tag(org_id_in, tagname_in)
+ from rhnSnapshot
+ where id = snapshot_id_in;
+ end$$ language plpgsql;
+
+ create or replace function bulk_snapshot(
+ reason_in in varchar,
+ set_label_in in varchar,
+ set_uid_in in numeric
+ ) returns void
+ as $$
+ declare
+ server record;
+ begin
+ for server in
+ SELECT user_id, label, element, element_two
+ FROM rhnSet
+ WHERE label = set_label_in
+ AND user_id = set_uid_in
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ perform rhn_server.snapshot_server(server.element, reason_in);
+ end if;
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function snapshot_server(
+ server_id_in in numeric,
+ reason_in in varchar
+ ) returns void
+ as $$
+ declare
+ snapshot_id_v numeric;
+ revisions cursor is
+ select distinct
+ cr.id
+ from rhnConfigRevision cr,
+ rhnConfigFileName cfn,
+ rhnConfigFile cf,
+ rhnConfigChannel cc,
+ rhnServerConfigChannel scc
+ where 1=1
+ and scc.server_id = server_id_in
+ and scc.config_channel_id = cc.id
+ and cc.id = cf.config_channel_id
+ and cf.id = cr.config_file_id
+ and cr.id = cf.latest_config_revision_id
+ and cf.config_file_name_id = cfn.id
+ and cf.id = lookup_first_matching_cf(scc.server_id, cfn.path);
+ locked integer;
+ begin
+ select nextval('rhn_snapshot_id_seq') into snapshot_id_v;
+
+ insert into rhnSnapshot (id, org_id, server_id, reason) (
+ select snapshot_id_v,
+ s.org_id,
+ server_id_in,
+ reason_in
+ from rhnServer s
+ where s.id = server_id_in
+ );
+ insert into rhnSnapshotChannel (snapshot_id, channel_id) (
+ select snapshot_id_v, sc.channel_id
+ from rhnServerChannel sc
+ where sc.server_id = server_id_in
+ );
+ insert into rhnSnapshotServerGroup (snapshot_id, server_group_id) (
+ select snapshot_id_v, sgm.server_group_id
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = server_id_in
+ );
+ locked := 0;
+ <<iloop>>
+ while true loop
+ begin
+ insert into rhnPackageNEVRA (id, name_id, evr_id, package_arch_id)
+ select nextval('rhn_pkgnevra_id_seq'), sp.name_id, sp.evr_id,
sp.package_arch_id
+ from rhnServerPackage sp
+ where sp.server_id = server_id_in
+ and not exists
+ (select 1
+ from rhnPackageNEVRA nevra
+ where nevra.name_id = sp.name_id
+ and nevra.evr_id = sp.evr_id
+ and (nevra.package_arch_id = sp.package_arch_id
+ or (nevra.package_arch_id is null
+ and sp.package_arch_id is null)));
+ exit iloop;
+ exception when unique_violation then
+ if locked = 1 then
+ raise;
+ else
+ lock table rhnPackageNEVRA in exclusive mode;
+ locked := 1;
+ end if;
+ end;
+ end loop;
+ insert into rhnSnapshotPackage (snapshot_id, nevra_id) (
+ select distinct snapshot_id_v, nevra.id
+ from rhnServerPackage sp, rhnPackageNEVRA nevra
+ where sp.server_id = server_id_in
+ and nevra.name_id = sp.name_id
+ and nevra.evr_id = sp.evr_id
+ and (nevra.package_arch_id = sp.package_arch_id
+ or (nevra.package_arch_id is null
+ and sp.package_arch_id is null))
+ );
+
+ insert into rhnSnapshotConfigChannel ( snapshot_id, config_channel_id ) (
+ select snapshot_id_v, scc.config_channel_id
+ from rhnServerConfigChannel scc
+ where server_id = server_id_in
+ );
+
+ for revision in revisions loop
+ insert into rhnSnapshotConfigRevision (
+ snapshot_id, config_revision_id
+ ) values (
+ snapshot_id_v, revision.id
+ );
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function remove_action(
+ server_id_in in numeric,
+ action_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ -- this really wants "nulls last", but 8.1.7.3.0 sucks ass.
+ -- instead, we make a local table that holds our
+ -- list of ids with null prereqs. There's surely a better way
+ -- (an array instead of a table maybe? who knows...)
+ -- but I've got code to do this handy that I can look at ;)
+ chained_actions cursor is
+ with recursive r(id, prerequisite) as (
+ select id, prerequisite
+ from rhnAction
+ where id = action_id_in
+ union all
+ select r1.id, r1.prerequisite
+ from rhnAction r1, r
+ where r.id = r1.prerequisite
+ )
+ select * from r
+ order by prerequisite desc;
+ sessions cursor is
+ select s.id
+ from rhnKickstartSession s
+ where server_id_in in (s.old_server_id, s.new_server_id)
+ and s.action_id = action_id_in
+ and not exists (
+ select 1
+ from rhnKickstartSessionState ss
+ where ss.id = s.state_id
+ and ss.label in ('failed','complete')
+ );
+ chain_ends numeric[];
+ i numeric;
+ prereq numeric := 1;
+ begin
+ select prerequisite
+ into prereq
+ from rhnAction
+ where id = action_id_in;
+
+ if prereq is not null then
+ perform rhn_exception.raise_exception('action_is_child');
+ end if;
+
+ chain_ends := '{}';
+ i := 1;
+ for action in chained_actions loop
+ if action.prerequisite is null then
+ chain_ends[i] := action.id;
+ i := i + 1;
+ else
+ delete from rhnServerAction
+ where server_id = server_id_in
+ and action_id = action.id;
+ end if;
+ end loop;
+
+ delete from rhnServerAction
+ where server_id = server_id_in
+ and action_id = any(chain_ends);
+
+ for s in sessions loop
+ update rhnKickstartSession
+ set state_id = (
+ select id
+ from rhnKickstartSessionState
+ where label = 'failed'
+ ),
+ action_id = null
+ where id = s.id;
+ perform set_ks_session_history_message(s.id, 'failed', 'Kickstart cancelled
due to action removal');
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function check_user_access(server_id_in in numeric, user_id_in in
numeric)
+ returns numeric
+ as $$
+ declare
+ has_access numeric;
+ begin
+ -- first check; if this returns no rows, then the server/user are in different orgs, and
we bail
+ select 1 into has_access
+ from rhnServer S,
+ web_contact wc
+ where wc.org_id = s.org_id
+ and s.id = server_id_in
+ and wc.id = user_id_in;
+
+ if not found then
+ return 0;
+ end if;
+
+ -- okay, so they're in the same org. if we have an org admin, they get a free pass
+ if rhn_user.check_role(user_id_in, 'org_admin') = 1
+ then
+ return 1;
+ end if;
+
+ select 1 into has_access
+ from rhnServerGroupMembers SGM,
+ rhnUserServerGroupPerms USG
+ where SGM.server_group_id = USG.server_group_id
+ and SGM.server_id = server_id_in
+ and USG.user_id = user_id_in;
+
+ if not found then
+ return 0;
+ end if;
+
+ return 1;
+ end$$ language plpgsql;
+
+ -- *******************************************************************
+ -- FUNCTION: can_server_consume_virt_slot
+ -- Returns 1 if the server id is eligible to consume a virtual slot,
+ -- else returns 0.
+ -- Called by: insert_into_servergroup, delete_from_servergroup
+ -- *******************************************************************
+ create or replace function can_server_consume_virt_slot(server_id_in in numeric,
+ group_type_in in varchar)
+ returns numeric
+ as $$
+ declare
+ server_virt_slots cursor is
+ select vi.VIRTUAL_SYSTEM_ID
+ from
+ rhnVirtualInstance vi
+ where
+ -- server id is a virtual instance
+ vi.VIRTUAL_SYSTEM_ID = server_id_in
+ -- server id's host is virt entitled
+ and exists ( select 1
+ from rhnServerEntitlementView sev
+ where vi.HOST_SYSTEM_ID = sev.server_id
+ and sev.label in ('virtualization_host',
+ 'virtualization_host_platform') )
+ -- server id's host also has the ent we want
+ and exists ( select 1
+ from rhnServerEntitlementView sev2
+ where vi.HOST_SYSTEM_ID = sev2.server_id
+ and sev2.label = group_type_in );
+
+ begin
+ for server_virt_slot in server_virt_slots loop
+ return 1;
+ end loop;
+ return 0;
+ end$$ language plpgsql;
+
+
+ create or replace function insert_into_servergroup (
+ server_id_in in numeric,
+ server_group_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ used_slots numeric;
+ max_slots numeric;
+ org_id numeric;
+ mgmt_available numeric;
+ mgmt_upgrade numeric;
+ mgmt_sgid numeric;
+ prov_available numeric;
+ prov_upgrade numeric;
+ prov_sgid numeric;
+ group_label varchar;
+ group_type numeric;
+ begin
+ -- first, group_type = null, because it's easy...
+
+ -- this will rowlock the servergroup we're trying to change;
+ -- we probably need to lock the other one, but I think the chances
+ -- of it being a real issue are very small for now...
+ select sg.group_type, sg.org_id, sg.current_members, sg.max_members
+ into group_type, org_id, used_slots, max_slots
+ from rhnServerGroup sg
+ where sg.id = server_group_id_in
+ for update of sg;
+
+ if group_type is null then
+ if used_slots >= max_slots then
+ perform rhn_exception.raise_exception('servergroup_max_members');
+ end if;
+
+ insert into rhnServerGroupMembers(
+ server_id, server_group_id
+ ) values (
+ server_id_in, server_group_id_in
+ );
+ update rhnServerGroup
+ set current_members = current_members + 1
+ where id = server_group_id_in;
+
+ perform rhn_cache.update_perms_for_server_group(server_group_id_in);
+ return;
+ end if;
+
+ -- now for group_type != null
+ --
+ select label
+ into group_label
+ from rhnServerGroupType sgt
+ where sgt.id = group_type;
+
+ -- the naive easy path that gets hit most often and has to be quickest.
+ if group_label in ('sw_mgr_entitled',
+ 'enterprise_entitled',
+ 'monitoring_entitled',
+ 'provisioning_entitled',
+ 'virtualization_host',
+ 'virtualization_host_platform') then
+ if used_slots >= max_slots and
+ (rhn_server.can_server_consume_virt_slot(server_id_in, group_label) != 1)
+ then
+ perform rhn_exception.raise_exception('servergroup_max_members');
+ end if;
+
+ insert into rhnServerGroupMembers(
+ server_id, server_group_id
+ ) values (
+ server_id_in, server_group_id_in
+ );
+
+ -- Only update current members if the system in consuming a
+ -- physical slot.
+ if rhn_server.can_server_consume_virt_slot(server_id_in, group_label) = 0
then
+ update rhnServerGroup
+ set current_members = current_members + 1
+ where id = server_group_id_in;
+ end if;
+
+ return;
+ end if;
+ end$$ language plpgsql;
+
+ create or replace function insert_into_servergroup_maybe (
+ server_id_in in numeric,
+ server_group_id_in in numeric
+ ) returns numeric as $$
+ declare
+ retval numeric := 0;
+ servergroups cursor is
+ select s.id server_id,
+ sg.id server_group_id
+ from rhnServerGroup sg,
+ rhnServer s
+ where s.id = server_id_in
+ and sg.id = server_group_id_in
+ and s.org_id = sg.org_id
+ and not exists (
+ select 1
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = s.id
+ and sgm.server_group_id = sg.id
+ );
+ begin
+ for sgm in servergroups loop
+ perform rhn_server.insert_into_servergroup(sgm.server_id, sgm.server_group_id);
+ retval := retval + 1;
+ end loop;
+ return retval;
+ end$$ language plpgsql;
+
+ create or replace function insert_set_into_servergroup (
+ server_group_id_in in numeric,
+ user_id_in in numeric,
+ set_label_in in varchar
+ ) returns void
+ as $$
+ declare
+ servers cursor is
+ select st.element id
+ from rhnSet st
+ where st.user_id = user_id_in
+ and st.label = set_label_in
+ and exists (
+ select 1
+ from rhnUserManagedServerGroups umsg
+ where umsg.server_group_id = server_group_id_in
+ and umsg.user_id = user_id_in
+ )
+ and not exists (
+ select 1
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = st.element
+ and sgm.server_group_id = server_group_id_in
+ );
+ begin
+ for s in servers loop
+ perform rhn_server.insert_into_servergroup(s.id, server_group_id_in);
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function delete_from_servergroup (
+ server_id_in in numeric,
+ server_group_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ server_virt_groups cursor is
+ select 1
+ from rhnServerEntitlementVirtual sev
+ where sev.server_id = server_id_in
+ and sev.server_group_id = server_group_id_in;
+
+ oid numeric;
+ mgmt_sgid numeric;
+ label varchar;
+ group_type numeric;
+ begin
+ select sg.group_type, sg.org_id
+ into group_type, oid
+ from rhnServerGroupMembers sgm,
+ rhnServerGroup sg
+ where sg.id = server_group_id_in
+ and sg.id = sgm.server_group_id
+ and sgm.server_id = server_id_in
+ for update of sg;
+
+ if not found then
+ perform rhn_exception.raise_exception('server_not_in_group');
+ end if;
+
+ -- do group_type is null first
+ if group_type is null then
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+ update rhnServerGroup
+ set current_members = current_members - 1
+ where id = server_group_id_in;
+ perform rhn_cache.update_perms_for_server_group(server_group_id_in);
+ return;
+ end if;
+
+ select sgt.label
+ into label
+ from rhnServerGroupType sgt
+ where sgt.id = group_type;
+
+ if label in ('sw_mgr_entitled',
+ 'enterprise_entitled',
+ 'provisioning_entitled',
+ 'monitoring_entitled',
+ 'virtualization_host',
+ 'virtualization_host_platform') then
+
+ -- Only update current members if the system is consuming
+ -- a physical slot.
+ for server_virt_group in server_virt_groups loop
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+ return;
+ end loop;
+
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+
+ update rhnServerGroup
+ set current_members = current_members - 1
+ where id = server_group_id_in;
+
+ end if;
+ end$$ language plpgsql;
+
+ create or replace function delete_set_from_servergroup (
+ server_group_id_in in numeric,
+ user_id_in in numeric,
+ set_label_in in varchar
+ ) returns void
+ as $$
+ declare
+ servergroups cursor is
+ select sgm.server_id, sgm.server_group_id
+ from rhnSet st,
+ rhnServerGroupMembers sgm
+ where sgm.server_group_id = server_group_id_in
+ and st.user_id = user_id_in
+ and st.label = set_label_in
+ and sgm.server_id = st.element
+ and exists (
+ select 1
+ from rhnUserManagedServerGroups usgp
+ where usgp.server_group_id = server_group_id_in
+ and usgp.user_id = user_id_in
+ );
+ begin
+ for sgm in servergroups loop
+ perform rhn_server.delete_from_servergroup(sgm.server_id, server_group_id_in);
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function clear_servergroup (
+ server_group_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ servers cursor is
+ select sgm.server_id id
+ from rhnServerGroupMembers sgm
+ where sgm.server_group_id = server_group_id_in;
+ begin
+ for s in servers loop
+ perform rhn_server.delete_from_servergroup(s.id, server_group_id_in);
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function delete_from_org_servergroups (
+ server_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ servergroups cursor is
+ select sgm.server_group_id id
+ from rhnServerGroup sg,
+ rhnServerGroupMembers sgm
+ where sgm.server_id = server_id_in
+ and sgm.server_group_id = sg.id
+ and sg.group_type is null;
+ begin
+ for sg in servergroups loop
+ perform rhn_server.delete_from_servergroup(server_id_in, sg.id);
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function get_ip_address (
+ server_id_in in numeric
+ ) returns varchar as $$
+ declare
+ interfaces cursor is
+ select ni.name as name, na4.address as address
+ from rhnServerNetInterface ni,
+ rhnServerNetAddress4 na4
+ where server_id = server_id_in
+ and ni.id = na4.interface_id
+ and na4.address != '127.0.0.1';
+ addresses cursor is
+ select ipaddr ip_addr
+ from rhnServerNetwork
+ where server_id = server_id_in
+ and ipaddr != '127.0.0.1';
+ begin
+ for addr in addresses loop
+ return addr.ip_addr;
+ end loop;
+ for iface in interfaces loop
+ return iface.address;
+ end loop;
+ return NULL;
+ end$$ language plpgsql;
+
+ create or replace function update_needed_cache(
+ server_id_in in numeric
+ ) returns void as $$
+ begin
+ delete from rhnServerNeededCache
+ where server_id = server_id_in;
+ insert into rhnServerNeededCache
+ (server_id, errata_id, package_id)
+ (select distinct server_id, errata_id, package_id
+ from rhnServerNeededView
+ where server_id = server_id_in);
+ end$$ language plpgsql;
+
+-- restore the original setting
+update pg_settings set setting = overlay( setting placing '' from 1 for
(length('rhn_server')+1) ) where name = 'search_path';
commit b553575b5e7ab7852b2e9bef9d2b09b1ce8eba96
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Oct 20 19:19:02 2011 +0200
IPv6: schema upgrade
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
index 5257980..7922fdf 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
@@ -31,9 +31,9 @@ CREATE TABLE rhnServerNetAddress4
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_net_addr4_iid_addr_idx
+CREATE INDEX rhn_srv_net_addr4_iid_addr_idx
ON rhnServerNetAddress4 (interface_id, address)
- TABLESPACE [[8m_tbs]];
+ TABLESPACE [[64k_tbs]];
ALTER TABLE rhnServerNetAddress4
- ADD CONSTRAINT rhn_net_add4_iid_addr_uq UNIQUE (interface_id, address);
+ ADD CONSTRAINT rhn_srv_net_addr4_iid_addr_uq UNIQUE (interface_id, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
index 48d93f7..fa2ea0c 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -31,9 +31,9 @@ CREATE TABLE rhnServerNetAddress6
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_net_addr6_iid_sc_addr_idx
+CREATE INDEX rhn_srv_net_ad6_iid_sc_ad_idx
ON rhnServerNetAddress6 (interface_id, scope, address)
- TABLESPACE [[8m_tbs]];
+ TABLESPACE [[64_tbs]];
ALTER TABLE rhnServerNetAddress6
- ADD CONSTRAINT rhn_net_addr6_iid_sc_addr_uq UNIQUE (interface_id, scope, address);
+ ADD CONSTRAINT rhn_srv_net_ad6_iid_sc_ad_uq UNIQUE (interface_id, scope, address);
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle
new file mode 100644
index 0000000..1f0ab2a
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle
@@ -0,0 +1,9 @@
+alter table rhnServerNetInterface add id number;
+
+create sequence rhn_srv_net_iface_id_seq;
+
+update rhnServerNetInterface set id = rhn_srv_net_iface_id_seq.nextval;
+
+alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_nn check (id is
not null);
+
+alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_pk primary key ( id
);
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql
new file mode 100644
index 0000000..c2b448d
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql
@@ -0,0 +1,11 @@
+-- oracle equivalent source sha1 f5872e029cf1b053c88bd876afc8f253461772ac
+
+alter table rhnServerNetInterface add id numeric;
+
+create sequence rhn_srv_net_iface_id_seq;
+
+update rhnServerNetInterface set id = nextval('rhn_srv_net_iface_id_seq');
+
+alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_nn check (id is
not null);
+
+alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_pk primary key ( id
);
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle
new file mode 100644
index 0000000..7922fdf
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle
@@ -0,0 +1,39 @@
+--
+-- Copyright (c) 2011 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+--
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+
+
+CREATE TABLE rhnServerNetAddress4
+(
+ interface_id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress4_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR2(64),
+ netmask VARCHAR2(64),
+ broadcast VARCHAR2(64),
+ created DATE
+ DEFAULT (sysdate) NOT NULL,
+ modified DATE
+ DEFAULT (sysdate) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE INDEX rhn_srv_net_addr4_iid_addr_idx
+ ON rhnServerNetAddress4 (interface_id, address)
+ TABLESPACE [[64k_tbs]];
+
+ALTER TABLE rhnServerNetAddress4
+ ADD CONSTRAINT rhn_srv_net_addr4_iid_addr_uq UNIQUE (interface_id, address);
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql
new file mode 100644
index 0000000..7b8a6b7
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql
@@ -0,0 +1,18 @@
+-- oracle equivalent source sha1 af31dbcccd3799c2cd577137f6f7fd608288b2c4
+
+CREATE TABLE rhnServerNetAddress4
+(
+ interface_id NUMERIC NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress4_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR(64),
+ netmask VARCHAR(64),
+ broadcast VARCHAR(64),
+ created timestamptz default current_timestamp NOT NULL,
+ modified timestamptz default current_timestamp NOT NULL
+);
+
+CREATE UNIQUE INDEX rhn_srv_net_addr4_iid_addr_uq
+ ON rhnServerNetAddress4 (interface_id, address)
+ ;
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql
new file mode 100644
index 0000000..bda4fb8
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql
@@ -0,0 +1,6 @@
+INSERT INTO rhnServerNetAddress4
+ (interface_id, address, netmask, broadcast, created)
+ SELECT id, ip_addr, netmask, broadcast, created
+ FROM rhnServerNetInterface;
+
+COMMIT;
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql
new file mode 100644
index 0000000..64e42e1
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql
@@ -0,0 +1,3 @@
+ALTER TABLE rhnServerNetInterface DROP COLUMN ip_addr;
+ALTER TABLE rhnServerNetInterface DROP COLUMN netmask;
+ALTER TABLE rhnServerNetInterface DROP COLUMN broadcast;
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle
new file mode 100644
index 0000000..42c78b2
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle
@@ -0,0 +1,39 @@
+--
+-- Copyright (c) 2011 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+--
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+
+
+CREATE TABLE rhnServerNetAddress6
+(
+ interface_id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress6_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR2(45),
+ netmask VARCHAR2(49),
+ scope VARCHAR2(64),
+ created DATE
+ DEFAULT (sysdate) NOT NULL,
+ modified DATE
+ DEFAULT (sysdate) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE INDEX rhn_srv_net_ad6_iid_sc_ad_idx
+ ON rhnServerNetAddress6 (interface_id, scope, address)
+ TABLESPACE [[64k_tbs]];
+
+ALTER TABLE rhnServerNetAddress6
+ ADD CONSTRAINT rhn_srv_net_ad6_iid_sc_ad_uq UNIQUE (interface_id, scope, address);
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql
new file mode 100644
index 0000000..844c601
--- /dev/null
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql
@@ -0,0 +1,17 @@
+-- oracle equivalent source sha1 7c11068302cdb144f446828d4db0f244dbf12293
+
+CREATE TABLE rhnServerNetAddress6
+(
+ interface_id NUMERIC NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress6_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR(45),
+ netmask VARCHAR(49),
+ scope VARCHAR(64),
+ created timestamptz default current_timestamp NOT NULL,
+ modified timestamptz default current_timestamp NOT NULL
+);
+
+CREATE UNIQUE INDEX rhn_srv_net_ad6_iid_sc_ad_uq
+ ON rhnServerNetAddress6 (interface_id, scope, address);
commit 0b18f299f683602622b2c7dc8bfd904c9d1b6717
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 20 18:38:45 2011 +0200
IPv6: get_hw_info_as_clob: adapt to IPv6 changes
diff --git a/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
b/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
index ce1b580..d6fea07 100644
--- a/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
+++ b/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
@@ -15,9 +15,11 @@ begin
select 1 n, sum(nrcpu) || ' CPUs' m
from rhncpu where rhncpu.server_id = sid
union all
- select 2, name||' '||ip_addr||'/'||netmask||' '||hw_addr val
- from rhnservernetinterface
- where rhnservernetinterface.server_id = sid
+ select 2, ni.name||' '||na4.address||'/'||na4.netmask||'
'||ni.hw_addr val
+ from rhnservernetinterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = sid
+ and ni.id = na4.interface_id
)
order by n, m
) loop
diff --git a/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
b/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
index 9d899f3..23549d3 100644
--- a/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
+++ b/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
@@ -1,4 +1,4 @@
--- oracle equivalent source sha1 4a627f5b31efb66c684dd14f0514e25a5ace94f2
+-- oracle equivalent source sha1 6a538f3b05d412810baec118fbb7860348c60cd4
create or replace function get_hw_info_as_clob(
sid in rhnserver.id%TYPE,
@@ -17,9 +17,11 @@ begin
select 1 n, sum(nrcpu) || ' CPUs' m
from rhncpu where rhncpu.server_id = sid
union all
- select 2, name||'
'||coalesce(ip_addr,'')||'/'||coalesce(netmask,'')||'
'||hw_addr val
- from rhnservernetinterface
- where rhnservernetinterface.server_id = sid
+ select 2, ni.name||'
'||coalesce(na4.address,'')||'/'||coalesce(na4.netmask,'')||'
'||ni.hw_addr val
+ from rhnservernetinterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = sid
+ and ni.id = na4.interface_id
) X
order by n, m
) loop
commit 66d60c79fc07f699deb9d3b8ae4d39649081f337
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 20 17:48:58 2011 +0200
IPv6: update rhn_server.get_ip_address() to reflect IPv6 changes
diff --git a/schema/spacewalk/oracle/packages/rhn_server.pkb
b/schema/spacewalk/oracle/packages/rhn_server.pkb
index 72392fd..8e3c640 100644
--- a/schema/spacewalk/oracle/packages/rhn_server.pkb
+++ b/schema/spacewalk/oracle/packages/rhn_server.pkb
@@ -712,10 +712,12 @@ is
server_id_in in number
) return varchar2 is
cursor interfaces is
- select name, ip_addr
- from rhnServerNetInterface
- where server_id = server_id_in
- and ip_addr != '127.0.0.1';
+ select ni.name as name, na4.address as address
+ from rhnServerNetInterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = server_id_in
+ and ni.id = na4.interface_id
+ and na4.address != '127.0.0.1';
cursor addresses is
select ipaddr ip_addr
from rhnServerNetwork
@@ -726,7 +728,7 @@ is
return addr.ip_addr;
end loop;
for iface in interfaces loop
- return iface.ip_addr;
+ return iface.address;
end loop;
return NULL;
end get_ip_address;
diff --git a/schema/spacewalk/postgres/packages/rhn_server.pkb
b/schema/spacewalk/postgres/packages/rhn_server.pkb
index 3533094..a1f7aca 100644
--- a/schema/spacewalk/postgres/packages/rhn_server.pkb
+++ b/schema/spacewalk/postgres/packages/rhn_server.pkb
@@ -764,10 +764,12 @@ update pg_settings set setting = 'rhn_server,' || setting
where name = 'search_p
) returns varchar as $$
declare
interfaces cursor is
- select name, ip_addr
- from rhnServerNetInterface
+ select ni.name as name, na4.address as address
+ from rhnServerNetInterface ni,
+ rhnServerNetAddress4 na4
where server_id = server_id_in
- and ip_addr != '127.0.0.1';
+ and ni.id = na4.interface_id
+ and na4.address != '127.0.0.1';
addresses cursor is
select ipaddr ip_addr
from rhnServerNetwork
@@ -778,7 +780,7 @@ update pg_settings set setting = 'rhn_server,' || setting
where name = 'search_p
return addr.ip_addr;
end loop;
for iface in interfaces loop
- return iface.ip_addr;
+ return iface.address;
end loop;
return NULL;
end$$ language plpgsql;
commit 524a6ebf70336c999c3184c6fc6413af58468302
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Oct 20 12:55:30 2011 +0200
IPv6: schema change
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
new file mode 100644
index 0000000..5257980
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
@@ -0,0 +1,39 @@
+--
+-- Copyright (c) 2011 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+--
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+
+
+CREATE TABLE rhnServerNetAddress4
+(
+ interface_id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress4_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR2(64),
+ netmask VARCHAR2(64),
+ broadcast VARCHAR2(64),
+ created DATE
+ DEFAULT (sysdate) NOT NULL,
+ modified DATE
+ DEFAULT (sysdate) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE INDEX rhn_net_addr4_iid_addr_idx
+ ON rhnServerNetAddress4 (interface_id, address)
+ TABLESPACE [[8m_tbs]];
+
+ALTER TABLE rhnServerNetAddress4
+ ADD CONSTRAINT rhn_net_add4_iid_addr_uq UNIQUE (interface_id, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
new file mode 100644
index 0000000..48d93f7
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -0,0 +1,39 @@
+--
+-- Copyright (c) 2011 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+--
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+
+
+CREATE TABLE rhnServerNetAddress6
+(
+ interface_id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress6_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR2(45),
+ netmask VARCHAR2(49),
+ scope VARCHAR2(64),
+ created DATE
+ DEFAULT (sysdate) NOT NULL,
+ modified DATE
+ DEFAULT (sysdate) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE INDEX rhn_net_addr6_iid_sc_addr_idx
+ ON rhnServerNetAddress6 (interface_id, scope, address)
+ TABLESPACE [[8m_tbs]];
+
+ALTER TABLE rhnServerNetAddress6
+ ADD CONSTRAINT rhn_net_addr6_iid_sc_addr_uq UNIQUE (interface_id, scope, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetInterface.sql
b/schema/spacewalk/common/tables/rhnServerNetInterface.sql
index f115885..6d73c23 100644
--- a/schema/spacewalk/common/tables/rhnServerNetInterface.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetInterface.sql
@@ -1,5 +1,5 @@
--
--- Copyright (c) 2008 Red Hat, Inc.
+-- Copyright (c) 2008 -- 2011 Red Hat, Inc.
--
-- This software is licensed to you under the GNU General Public License,
-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
@@ -16,13 +16,13 @@
CREATE TABLE rhnServerNetInterface
(
+ id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iface_id_pk PRIMARY KEY
+ USING INDEX TABLESPACE [[4m_tbs]],
server_id NUMBER NOT NULL
CONSTRAINT rhn_srv_net_iface_sid_fk
REFERENCES rhnServer (id),
name VARCHAR2(32) NOT NULL,
- ip_addr VARCHAR2(64),
- netmask VARCHAR2(64),
- broadcast VARCHAR2(64),
hw_addr VARCHAR2(18),
module VARCHAR2(128),
created DATE
@@ -40,3 +40,4 @@ CREATE INDEX rhn_srv_net_iface_sid_name_idx
ALTER TABLE rhnServerNetInterface
ADD CONSTRAINT rhn_srv_net_iface_sid_name_uq UNIQUE (server_id, name);
+CREATE SEQUENCE rhn_srv_net_iface_id_seq;
diff --git a/schema/spacewalk/common/tables/tables.deps
b/schema/spacewalk/common/tables/tables.deps
index 53fc6c7..692e4b4 100644
--- a/schema/spacewalk/common/tables/tables.deps
+++ b/schema/spacewalk/common/tables/tables.deps
@@ -105,6 +105,8 @@ rhnKickstartSessionHistory :: rhnKickstartSession
rhnKickstartSessionState
rhnKSTreeFile :: rhnKickstartableTree rhnChannelErrata rhnErrata \
rhnChecksum
rhnKickstartTimezone :: rhnKSInstallType
+rhnServerNetAddress4 :: rhnServerNetInterface
+rhnServerNetAddress6 :: rhnServerNetInterface
rhnOrgChannelSettings :: web_customer rhnChannel rhnOrgChannelSettingsType
rhnOrgEntitlements :: rhnOrgEntitlementType
rhnOrgErrataCacheQueue :: web_customer