java/code/src/com/redhat/rhn/domain/server/Server.java | 18 ++
java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartHelper.java | 44
-----
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java | 4
java/code/src/com/redhat/rhn/manager/kickstart/KickstartManager.java | 80
++++++++++
java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java | 47
+----
5 files changed, 112 insertions(+), 81 deletions(-)
New commits:
commit a50c248c7ad9757748f6728dc2d21970e1688175
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Wed Jul 1 18:30:10 2009 -0400
import fixes from conflict
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartManager.java
b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartManager.java
index 079e88e..4291fb5 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartManager.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartManager.java
@@ -24,7 +24,9 @@ import com.redhat.rhn.common.util.download.DownloadUtils;
import com.redhat.rhn.common.validator.ValidatorException;
import com.redhat.rhn.domain.kickstart.KickstartData;
import com.redhat.rhn.domain.kickstart.KickstartFactory;
+import com.redhat.rhn.domain.kickstart.KickstartIpRange;
import
com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.role.RoleFactory;
import com.redhat.rhn.domain.server.NetworkInterface;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.user.User;
commit 6d0af27706d8d6dae8b1ee1f68ecd59333eaba6f
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Wed Jul 1 18:27:10 2009 -0400
adding commands and manager layer for SSM provisioning
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 4df50ef..6fcaf36 100644
--- a/java/code/src/com/redhat/rhn/domain/server/Server.java
+++ b/java/code/src/com/redhat/rhn/domain/server/Server.java
@@ -729,7 +729,7 @@ public class Server extends BaseDomainHelper implements Identifiable
{
/**
* @return Returns the networks
*/
- public Set getNetworks() {
+ public Set<Network> getNetworks() {
return networks;
}
@@ -1685,4 +1685,20 @@ public class Server extends BaseDomainHelper implements
Identifiable {
public void setIgnoreEntitlementsForMigration(Boolean ignoreIn) {
this.ignoreEntitlementsForMigration = ignoreIn;
}
+
+ /**
+ * Get the NetworkInteface with the given name (i.e. eth0)
+ * @param ifName the interface name (i.e. eth0)
+ * @return the NetworkInterface, otherwise null
+ */
+ public NetworkInterface getNetworkInterface(String ifName) {
+ for (NetworkInterface nic : getNetworkInterfaces()) {
+ if (nic.getName().equals(ifName)) {
+ return nic;
+ }
+ }
+ return null;
+ }
+
+
}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartHelper.java
b/java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartHelper.java
index 97052e0..c712db5 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartHelper.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartHelper.java
@@ -15,9 +15,6 @@
package com.redhat.rhn.frontend.action.kickstart;
import com.redhat.rhn.common.conf.Config;
-import com.redhat.rhn.common.db.datasource.DataResult;
-import com.redhat.rhn.common.db.datasource.ModeFactory;
-import com.redhat.rhn.common.db.datasource.SelectMode;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.SessionSwap;
import com.redhat.rhn.domain.channel.Channel;
@@ -26,11 +23,10 @@ import com.redhat.rhn.domain.kickstart.KickstartFactory;
import
com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.domain.user.User;
-import com.redhat.rhn.frontend.dto.kickstart.KickstartIpRangeDto;
import com.redhat.rhn.manager.channel.ChannelManager;
import com.redhat.rhn.manager.kickstart.IpAddress;
-import com.redhat.rhn.manager.kickstart.IpAddressRange;
import com.redhat.rhn.manager.kickstart.KickstartFormatter;
+import com.redhat.rhn.manager.kickstart.KickstartManager;
import com.redhat.rhn.manager.kickstart.KickstartSessionCreateCommand;
import com.redhat.rhn.manager.kickstart.KickstartSessionUpdateCommand;
@@ -172,7 +168,7 @@ public class KickstartHelper {
else if (mode.equals(IP_RANGE)) {
log.debug("Ip_range mode");
IpAddress clientIp = new IpAddress(remoteAddr);
- ksdata = findBestFitProfile(clientIp, org);
+ ksdata = KickstartManager.findProfileForIpAddress(clientIp, org);
}
else if (mode.equals(ORG_DEFAULT)) {
//process org_default
@@ -241,42 +237,6 @@ public class KickstartHelper {
return remoteAddr;
}
- /**
- * Finds the profile which is a best fit.
- * @param clientIpIn IpAddress to search ip ranges for
- * @param orgIn Org coming in from the url
- * @return best KickstartData Profile
- */
- protected KickstartData findBestFitProfile(IpAddress clientIpIn, Org orgIn) {
- DataResult ipRanges = null;
- SelectMode mode = ModeFactory.getMode("General_queries",
- "org_ks_ip_ranges_for_ip");
- Map params = new HashMap();
- params.put("org_id", orgIn.getId().toString());
- params.put("ip", clientIpIn.getLongNumber().toString());
- ipRanges = mode.execute(params);
-
- IpAddressRange bestRange = null;
-
- log.debug("ipranges.size: " + ipRanges.size());
-
- // find innermost range and return profile
- for (Iterator itr = ipRanges.iterator(); itr.hasNext();) {
- KickstartIpRangeDto range = (KickstartIpRangeDto)itr.next();
- IpAddressRange iprange = new IpAddressRange(range.getMin().longValue(),
- range.getMax().longValue(),
- range.getId().longValue());
- //seed range if null
- bestRange = (bestRange == null) ? iprange : bestRange;
- if (iprange.isSubset(bestRange)) {
- log.debug("found a range");
- bestRange = iprange;
- }
- }
-
- return (bestRange == null) ? getOrgDefaultProfile(orgIn) :
- KickstartFactory.lookupKickstartDataByIdAndOrg(orgIn, bestRange.getKsid());
- }
/**
*
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 ed29fd5..0f269f8 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
@@ -1967,7 +1967,7 @@ public class SystemHandler extends BaseHandler {
throw new FaultException(-2, "provisionError",
LocalizationService.getInstance().getMessage(ve.getKey()));
}
- return cmd.getKickstartActionId().intValue();
+ return cmd.getScheduledAction().getId().intValue();
}
/**
@@ -2020,7 +2020,7 @@ public class SystemHandler extends BaseHandler {
throw new FaultException(-2, "provisionError",
LocalizationService.getInstance().getMessage(ve.getKey()));
}
- return cmd.getKickstartActionId().intValue();
+ return cmd.getScheduledAction().getId().intValue();
}
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartManager.java
b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartManager.java
index dc2ecbf..079e88e 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartManager.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartManager.java
@@ -24,15 +24,18 @@ import com.redhat.rhn.common.util.download.DownloadUtils;
import com.redhat.rhn.common.validator.ValidatorException;
import com.redhat.rhn.domain.kickstart.KickstartData;
import com.redhat.rhn.domain.kickstart.KickstartFactory;
-import com.redhat.rhn.domain.kickstart.KickstartIpRange;
-import com.redhat.rhn.domain.role.RoleFactory;
+import
com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.server.NetworkInterface;
+import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.dto.SystemOverview;
+import com.redhat.rhn.frontend.dto.kickstart.KickstartIpRangeDto;
import com.redhat.rhn.manager.BaseManager;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.Iterator;
import java.util.Map;
/**
@@ -130,4 +133,79 @@ public class KickstartManager extends BaseManager {
throw new PermissionException(RoleFactory.CONFIG_ADMIN);
}
}
+
+
+ /**
+ * Find a kickstart profile for a given server by searching by IP addresses
+ * @param server the server to find the ksdata for
+ * @return the kickstartData or 'null' if nothing found
+ */
+ public static KickstartData findProfileForServersNetwork(Server server) {
+ KickstartData ks = null;
+ /*
+ * So first get the IP address for eth0 and see if there's
+ * A kickstart that corresponds to it
+ */
+ NetworkInterface nic = server.getNetworkInterface("eth0");
+ if (nic != null && isPublicIpAddress(nic.getIpaddr())) {
+ IpAddress ip = new IpAddress(nic.getIpaddr());
+ ks = findProfileForIpAddress(ip, server.getOrg());
+ }
+ /*
+ * If there wasn't, then lets just take the first good ip address we can
find
+ */
+ if (ks == null) {
+ for (NetworkInterface tmp : server.getNetworkInterfaces()) {
+ if (isPublicIpAddress(tmp.getIpaddr())) {
+ IpAddress ip = new IpAddress(tmp.getIpaddr());
+ ks = findProfileForIpAddress(ip, server.getOrg());
+ if (ks != null) {
+ break;
+ }
+ }
+ }
+ }
+ return ks;
+ }
+
+ private static boolean isPublicIpAddress(String ip) {
+ return !(ip.equals("127.0.0.1") || ip.equals("0.0.0.0") ||
ip.equals(""));
+ }
+
+ /**
+ * Finds the profile which is a best fit.
+ * @param clientIpIn IpAddress to search ip ranges for
+ * @param orgIn Org coming in from the url
+ * @return best KickstartData Profile
+ */
+ public static KickstartData findProfileForIpAddress(IpAddress clientIpIn, Org orgIn)
{
+ DataResult ipRanges = null;
+ SelectMode mode = ModeFactory.getMode("General_queries",
+ "org_ks_ip_ranges_for_ip");
+ Map params = new HashMap();
+ params.put("org_id", orgIn.getId().toString());
+ params.put("ip", clientIpIn.getLongNumber().toString());
+ ipRanges = mode.execute(params);
+
+ IpAddressRange bestRange = null;
+
+ // find innermost range and return profile
+ for (Iterator itr = ipRanges.iterator(); itr.hasNext();) {
+ KickstartIpRangeDto range = (KickstartIpRangeDto)itr.next();
+ IpAddressRange iprange = new IpAddressRange(range.getMin().longValue(),
+ range.getMax().longValue(),
+ range.getId().longValue());
+ //seed range if null
+ bestRange = (bestRange == null) ? iprange : bestRange;
+ if (iprange.isSubset(bestRange)) {
+ bestRange = iprange;
+ }
+ }
+
+ return (bestRange == null) ? KickstartFactory.lookupOrgDefault(orgIn) :
+ KickstartFactory.lookupKickstartDataByIdAndOrg(orgIn, bestRange.getKsid());
+ }
+
+
+
}
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
index 434b8f2..74e0e42 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
@@ -151,7 +151,7 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
// The server who serves the kickstarts
private String kickstartServerName;
// The id of the action scheduled to perform the kickstart
- private Long kickstartActionId;
+ private Action scheduledAction;
/**
* Constructor for a kickstart where the host and the target are the same system.
@@ -301,36 +301,7 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
this.setKickstartServerName(kickstartServerNameIn);
}
- /**
- * Creates the Kickstart Sechdule command that works with a cobbler only
- * kickstart where the host and the target may or may *not* be
- * the same system. If the target system does not yet exist, selectedTargetServer
- * should be null. To be used when you want to call the store() method.
- *
- * @param selectedHostServer server to host the kickstart
- * @param selectedTargetServer server to be kickstarted
- * @param label cobbler only profile label.
- * @param userIn user performing the kickstart
- * @param scheduleDateIn Date to schedule the KS.
- * @param kickstartServerNameIn the name of the server who is serving the kickstart
- * @return the created cobbler only profile aware kickstartScheduleCommand
- */
- public static KickstartScheduleCommand createCobblerScheduleCommand(
- Long selectedHostServer,
- Long selectedTargetServer,
- String label,
- User userIn,
- Date scheduleDateIn,
- String kickstartServerNameIn) {
-
- KickstartScheduleCommand cmd = new KickstartScheduleCommand(selectedHostServer,
- selectedTargetServer, (KickstartData)null,
- userIn, scheduleDateIn, kickstartServerNameIn);
- cmd.cobblerProfileLabel = label;
- cmd.cobblerOnly = true;
- return cmd;
-
- }
+
/**
* Creates the Kickstart Sechdule command that works with a cobbler only
@@ -350,8 +321,12 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
User userIn,
Date scheduleDateIn,
String kickstartServerNameIn) {
- return createCobblerScheduleCommand(selectedHostServer, selectedHostServer,
label,
- userIn, scheduleDateIn, kickstartServerNameIn);
+ KickstartScheduleCommand cmd = new KickstartScheduleCommand(selectedHostServer,
+ selectedHostServer, (KickstartData)null,
+ userIn, scheduleDateIn, kickstartServerNameIn);
+ cmd.cobblerProfileLabel = label;
+ cmd.cobblerOnly = true;
+ return cmd;
}
@@ -510,8 +485,8 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
/**
* @return Returns the id of the action scheduled to perform the kickstart.
*/
- public Long getKickstartActionId() {
- return this.kickstartActionId;
+ public Action getScheduledAction() {
+ return this.scheduledAction;
}
/**
@@ -643,7 +618,7 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
ActionFactory.save(kickstartAction);
log.debug("** Created ksaction: " + kickstartAction.getId());
- this.kickstartActionId = kickstartAction.getId();
+ this.scheduledAction = kickstartAction;
log.debug("** Done scheduling kickstart session");
return null;