java/code/src/com/redhat/rhn/domain/token/ActivationKey.java | 6
java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java | 4
java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java | 73 ++--------
java/code/src/com/redhat/rhn/manager/token/ActivationKeyManager.java | 32 +++-
java/code/src/com/redhat/rhn/manager/token/test/ActivationKeyManagerTest.java | 35 ++++
java/code/src/com/redhat/rhn/testing/ChannelTestUtils.java | 12 -
java/code/webapp/WEB-INF/nav/activation_key.xml | 3
web/html/nav/activation_key.xml | 3
8 files changed, 95 insertions(+), 73 deletions(-)
New commits:
commit dbec5dac44262f03bb57ceb812a5e6e9b2a0d6dd
Author: Partha Aji <paji(a)redhat.com>
Date: Wed May 27 20:16:31 2009 -0400
496105 - Fix for setting up activaiton key for para-host provisioning
Added code to
1) Subscribe activation key to rhn tools and rhn virtualization channels
2) Include install of rhn-virtualization-host packages
if a virt entitlement is selected for an activation key.
diff --git a/java/code/src/com/redhat/rhn/domain/token/ActivationKey.java b/java/code/src/com/redhat/rhn/domain/token/ActivationKey.java
index 4918326..7dbb1a7 100644
--- a/java/code/src/com/redhat/rhn/domain/token/ActivationKey.java
+++ b/java/code/src/com/redhat/rhn/domain/token/ActivationKey.java
@@ -238,6 +238,12 @@ public class ActivationKey extends BaseDomainHelper {
*/
public void addEntitlement(ServerGroupType entitlementIn) {
this.getToken().addEntitlement(entitlementIn);
+ if (ServerConstants.getServerGroupTypeVirtualizationEntitled().
+ equals(entitlementIn) ||
+ ServerConstants.getServerGroupTypeVirtualizationPlatformEntitled().
+ equals(entitlementIn)) {
+ ActivationKeyManager.getInstance().setupVirtEntitlement(this);
+ }
}
/**
diff --git a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
index 74feef5..f84a434 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
@@ -790,7 +790,7 @@ public class ChannelManager extends BaseManager {
* @param cid Base Channel id.
* @return the list of Channel ids which the given orgid has access to.
*/
- public static List userAccessibleChildChannels(Long orgid, Long cid) {
+ public static List<Channel> userAccessibleChildChannels(Long orgid, Long cid) {
return ChannelFactory.getUserAcessibleChannels(orgid, cid);
}
@@ -1617,7 +1617,7 @@ public class ChannelManager extends BaseManager {
log.debug("subscribeToChildChannelByOSProduct returning: " + foundChannel);
return foundChannel;
- }
+ }
/**
* For the specified server, make a best-guess effort at what its base-channel
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 679d6c8..38890e7 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
@@ -14,6 +14,20 @@
*/
package com.redhat.rhn.manager.kickstart;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.cobbler.SystemRecord;
+
import com.redhat.rhn.common.db.datasource.DataResult;
import com.redhat.rhn.common.db.datasource.ModeFactory;
import com.redhat.rhn.common.db.datasource.SelectMode;
@@ -27,11 +41,11 @@ import com.redhat.rhn.domain.action.kickstart.KickstartAction;
import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.channel.ChannelArch;
import com.redhat.rhn.domain.channel.ChannelFactory;
-import com.redhat.rhn.domain.channel.ChannelFamily;
import com.redhat.rhn.domain.kickstart.KickstartData;
import com.redhat.rhn.domain.kickstart.KickstartFactory;
import com.redhat.rhn.domain.kickstart.KickstartSession;
import com.redhat.rhn.domain.kickstart.KickstartSessionState;
+import com.redhat.rhn.domain.kickstart.KickstartVirtualizationType;
import com.redhat.rhn.domain.rhnpackage.Package;
import com.redhat.rhn.domain.rhnpackage.PackageFactory;
import com.redhat.rhn.domain.rhnpackage.profile.Profile;
@@ -57,20 +71,6 @@ import com.redhat.rhn.manager.system.BaseSystemOperation;
import com.redhat.rhn.manager.system.SystemManager;
import com.redhat.rhn.manager.token.ActivationKeyManager;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-import org.cobbler.SystemRecord;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
/**
* Provides frequently used data for scheduling a kickstart
*
@@ -700,7 +700,7 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
// Create a new activation key for the target system.
- ActivationKey key = createKickstartActivationKey(this.user,
+ createKickstartActivationKey(this.user,
this.ksdata,
getTargetServer(),
this.kickstartSession,
@@ -711,38 +711,6 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
this.createdProfile = processProfileType(this.profileType);
log.debug("** profile created: " + createdProfile);
-
- // If there is already a target system, determine which channel families it had
- // so that we can assign them to the new target system.
- Map needCf = new HashMap();
- if (getTargetServer() != null) {
- Iterator i = getTargetServer().getChannels().iterator();
- // Map of ChannelFamily IDs->Count values
- // that tracks how many channel entitlements we need
- while (i.hasNext()) {
- Channel c = (Channel) i.next();
-
- ChannelFamily cf = c.getChannelFamily();
- if (needCf.containsKey(cf.getId().toString())) {
- Integer id = (Integer)
- needCf.get(cf.getId().toString());
- id = new Integer(id.intValue() - 1);
- }
- else {
- needCf.put(cf.getId().toString(),
- new Integer(-1));
- }
- }
- }
- log.debug("** needCF computed: " + needCf);
-
- if (needCf.containsKey(toolsChannel.getChannelFamily().getId().toString())) {
- Integer tools = (Integer) needCf.get(toolsChannel.
- getChannelFamily().getId().toString());
- tools = new Integer(tools.intValue() + 1);
- }
-
- log.debug("** NeededChannelFamilies: " + needCf);
}
/**
@@ -922,6 +890,11 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
key.setDeployConfigs(deployConfigs);
key.setUsageLimit(usageLimit);
key.addEntitlement(ServerConstants.getServerGroupTypeProvisioningEntitled());
+ if (KickstartVirtualizationType.paraHost().
+ equals(ksdata.getKickstartDefaults().getVirtualizationType())) {
+ //we'll have to setup the key for virt
+ key.addEntitlement(ServerConstants.getServerGroupTypeVirtualizationEntitled());
+ }
ActivationKeyFactory.save(key);
@@ -941,9 +914,6 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
if (toolsChannel != null) {
key.addChannel(toolsChannel);
}
- if (toolsChannel != null) {
- key.addChannel(toolsChannel);
- }
//fix for bugzilla 450954
// We set the reactivation key's base channel to whatever
@@ -961,7 +931,6 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
}
key.setBaseChannel(chan);
}
-
log.debug("** Saving new token");
ActivationKeyFactory.save(key);
log.debug("** Saved new token: " + key.getId());
diff --git a/java/code/src/com/redhat/rhn/manager/token/ActivationKeyManager.java b/java/code/src/com/redhat/rhn/manager/token/ActivationKeyManager.java
index 4bf16e4..eccae41 100644
--- a/java/code/src/com/redhat/rhn/manager/token/ActivationKeyManager.java
+++ b/java/code/src/com/redhat/rhn/manager/token/ActivationKeyManager.java
@@ -451,14 +451,15 @@ public class ActivationKeyManager {
}
/**
- * Subscribe a Server to the first child channel of its base channel that contains
+ * Subscribe an activation key to the first child channel
+ * of its base channel that contains
* the packagename passed in. Returns false if it can't be subscribed.
*
* @param key activationKey to be subbed
* @param packageName to use to lookup the channel with.
- * @return Channel we subscribed to, null if not.
+ * @return true if subscription was successful false otherwise
*/
- private void subscribeToChildChannelWithPackageName(
+ private boolean subscribeToChildChannelWithPackageName(
ActivationKey key, String packageName) {
log.debug("subscribeToChildChannelWithPackageName: " + key.getId() +
@@ -480,7 +481,7 @@ public class ActivationKeyManager {
packageName);
if (cid == null) { // Didnt find it ..
log.debug("didnt find a child channel with the package.");
- return;
+ return false;
}
cids = new LinkedList<Long>();
cids.add(cid);
@@ -490,6 +491,7 @@ public class ActivationKeyManager {
Channel channel = ChannelFactory.lookupById(cid);
key.addChannel(channel);
}
+ return !cids.isEmpty();
}
private void addConfigMgmtPackages(ActivationKey key) {
@@ -497,7 +499,6 @@ public class ActivationKeyManager {
PackageManager.RHNCFG_CLIENT,
PackageManager.RHNCFG_ACTIONS};
for (String name : names) {
- PackageManager.lookupPackageName(name);
key.addPackage(PackageManager.lookupPackageName(name), null);
}
}
@@ -509,10 +510,25 @@ public class ActivationKeyManager {
* @param key the activation key to be updated.
*/
public void setupAutoConfigDeployment(ActivationKey key) {
- subscribeToChildChannelWithPackageName(key,
- ChannelManager.TOOLS_CHANNEL_PACKAGE_NAME);
- if (!key.getChannels().isEmpty()) {
+ if (subscribeToChildChannelWithPackageName(key,
+ ChannelManager.TOOLS_CHANNEL_PACKAGE_NAME)) {
addConfigMgmtPackages(key);
}
}
+
+ /**
+ * Enables the activation key to be virtualization ready
+ * Adds the virt channel, the tools channel
+ * and adds the rn-virtualization-host package
+ * @param key the activation key to be updated.
+ */
+ public void setupVirtEntitlement(ActivationKey key) {
+ if (subscribeToChildChannelWithPackageName(key,
+ ChannelManager.TOOLS_CHANNEL_PACKAGE_NAME)) {
+ key.addPackage(PackageManager.lookupPackageName(ChannelManager.
+ RHN_VIRT_HOST_PACKAGE_NAME), null);
+ }
+ subscribeToChildChannelWithPackageName(key,
+ ChannelManager.VIRT_CHANNEL_PACKAGE_NAME);
+ }
}
diff --git a/java/code/src/com/redhat/rhn/manager/token/test/ActivationKeyManagerTest.java b/java/code/src/com/redhat/rhn/manager/token/test/ActivationKeyManagerTest.java
index 7880605..b8871e1 100644
--- a/java/code/src/com/redhat/rhn/manager/token/test/ActivationKeyManagerTest.java
+++ b/java/code/src/com/redhat/rhn/manager/token/test/ActivationKeyManagerTest.java
@@ -21,15 +21,19 @@ import com.redhat.rhn.domain.config.ConfigChannelListProcessor;
import com.redhat.rhn.domain.role.RoleFactory;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.server.ServerConstants;
+import com.redhat.rhn.domain.server.ServerGroupType;
import com.redhat.rhn.domain.server.test.ServerFactoryTest;
import com.redhat.rhn.domain.token.ActivationKey;
import com.redhat.rhn.domain.token.ActivationKeyFactory;
import com.redhat.rhn.domain.token.Token;
+import com.redhat.rhn.domain.token.TokenPackage;
import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.manager.channel.ChannelManager;
import com.redhat.rhn.manager.token.ActivationKeyManager;
import com.redhat.rhn.testing.BaseTestCaseWithUser;
import com.redhat.rhn.testing.ChannelTestUtils;
import com.redhat.rhn.testing.ConfigTestUtils;
+import com.redhat.rhn.testing.TestUtils;
import com.redhat.rhn.testing.UserTestUtils;
import java.util.HashSet;
@@ -213,7 +217,34 @@ public class ActivationKeyManagerTest extends BaseTestCaseWithUser {
public ActivationKey createActivationKey() throws Exception {
user.addRole(RoleFactory.ACTIVATION_KEY_ADMIN);
- return manager.createNewActivationKey(user, "Test");
+ return manager.createNewActivationKey(user, TestUtils.randomString());
+ }
+
+ public void testVirtEnt() throws Exception {
+ UserTestUtils.addUserRole(user, RoleFactory.ACTIVATION_KEY_ADMIN);
+ UserTestUtils.addProvisioning(user.getOrg());
+ UserTestUtils.addVirtualization(user.getOrg());
+ Channel baseChannel = ChannelTestUtils.createBaseChannel(user);
+ Channel [] channels =
+ ChannelTestUtils.setupBaseChannelForVirtualization(user, baseChannel);
+
+ checkVirtEnt(ServerConstants.getServerGroupTypeVirtualizationEntitled(),
+ channels[ChannelTestUtils.VIRT_INDEX],
+ channels[ChannelTestUtils.TOOLS_INDEX]);
+ checkVirtEnt(ServerConstants.getServerGroupTypeVirtualizationPlatformEntitled(),
+ channels[ChannelTestUtils.VIRT_INDEX],
+ channels[ChannelTestUtils.TOOLS_INDEX]);
+ }
+
+ private void checkVirtEnt(ServerGroupType sgt,
+ Channel virt, Channel tools) throws Exception {
+ ActivationKey key = createActivationKey();
+ key.addEntitlement(sgt);
+ assertTrue(key.getChannels().contains(tools));
+ assertTrue(key.getChannels().contains(virt));
+ assertTrue(!key.getPackages().isEmpty());
+ TokenPackage pkg = key.getPackages().iterator().next();
+ assertEquals(ChannelManager.RHN_VIRT_HOST_PACKAGE_NAME,
+ pkg.getPackageName().getName());
}
-
}
diff --git a/java/code/src/com/redhat/rhn/testing/ChannelTestUtils.java b/java/code/src/com/redhat/rhn/testing/ChannelTestUtils.java
index cc37a5d..290e474 100644
--- a/java/code/src/com/redhat/rhn/testing/ChannelTestUtils.java
+++ b/java/code/src/com/redhat/rhn/testing/ChannelTestUtils.java
@@ -32,7 +32,9 @@ import java.util.Set;
* @version $Rev$
*/
public class ChannelTestUtils {
-
+ public static final int VIRT_INDEX = 1;
+ public static final int TOOLS_INDEX = 0;
+
private ChannelTestUtils() {
}
@@ -108,12 +110,12 @@ public class ChannelTestUtils {
ChannelTestUtils.addDistMapToChannel(rhelVirt, ChannelManager.VT_OS_PRODUCT,
TestUtils.randomString());
- //PackageManagerTest.addPackageToChannel(
- // ChannelManager.VIRT_CHANNEL_PACKAGE_NAME, rhelVirt);
+ PackageManagerTest.addPackageToChannel(
+ ChannelManager.VIRT_CHANNEL_PACKAGE_NAME, rhelVirt);
Channel[] retval = new Channel[2];
- retval[0] = rhnTools;
- retval[1] = rhelVirt;
+ retval[TOOLS_INDEX] = rhnTools;
+ retval[VIRT_INDEX] = rhelVirt;
return retval;
}
diff --git a/java/code/webapp/WEB-INF/nav/activation_key.xml b/java/code/webapp/WEB-INF/nav/activation_key.xml
index 1380a84..a04e2b2 100644
--- a/java/code/webapp/WEB-INF/nav/activation_key.xml
+++ b/java/code/webapp/WEB-INF/nav/activation_key.xml
@@ -5,8 +5,7 @@
<rhn-tab name="Child Channels" url="/network/account/activation_keys/child_channels.pxt" />
<rhn-tab name="Packages"
- url="/rhn/activationkeys/packages/Packages.do"
- acl="token_has_entitlement(provisioning_entitled)" />
+ url="/rhn/activationkeys/packages/Packages.do"/>
<rhn-tab name="Configuration"
url="/rhn/activationkeys/configuration/List.do"
acl="token_has_entitlement(provisioning_entitled)">
diff --git a/web/html/nav/activation_key.xml b/web/html/nav/activation_key.xml
index fb34df5..a0a1202 100644
--- a/web/html/nav/activation_key.xml
+++ b/web/html/nav/activation_key.xml
@@ -6,8 +6,7 @@
<rhn-tab name="Child Channels" url="/network/account/activation_keys/child_channels.pxt" />
<rhn-tab name="Packages"
- url="/rhn/activationkeys/packages/Packages.do"
- acl="token_has_entitlement(provisioning_entitled)" />
+ url="/rhn/activationkeys/packages/Packages.do"/>
<rhn-tab name="Configuration"
url="/rhn/activationkeys/configuration/List.do"
acl="token_has_entitlement(provisioning_entitled)">