It is currently not possible via API to create a kickstart
profile that sets either '--ignoremissing' or '--nobase' in
the %packages section. Given that this is possible via WebUI,
fix this gap for the environments that want to create their
kickstarts via API only.

v2:
- Implement a full new API via kickstart.profile.software.setSoftwareList()
  instead of tweaking kickstart.profile.setAdvancedOptions()
---
 .../profile/software/SoftwareHandler.java          | 35 ++++++++++++++++++++++
 .../profile/software/test/SoftwareHandlerTest.java | 25 ++++++++++++++++
 2 files changed, 60 insertions(+)

diff --git 
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/SoftwareHandler.java
 
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/SoftwareHandler.java
index 7e41321..a7a0a00 100644
--- 
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/SoftwareHandler.java
+++ 
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/SoftwareHandler.java
@@ -102,6 +102,41 @@ public class SoftwareHandler extends BaseHandler {
     }
 
     /**
+     * Set the list of software packages for a kickstart profile.
+     * @param sessionKey An active session key
+     * @param ksLabel A kickstart profile label
+     * @param packageList  A list of package names.
+     * @param ignoremissing The boolean value setting --ignoremissing in 
%packages line when true
+     * @param nobase The boolean value setting --nobase in the %packages line 
when true
+     * @return 1 on success.
+     * @throws FaultException
+     * @xmlrpc.doc Set the list of software packages for a kickstart profile.
+     * @xmlrpc.param #session_key()
+     * @xmlrpc.param #param_desc("string", "ksLabel", "The label of a kickstart
+     * profile.")
+     * @xmlrpc.param #param_desc("string[]", "packageList", "A list of package
+     * names to be set on the profile.")
+     * @xmlrpc.param #param_desc("boolean", "value", "Set --ignoremissing to 
true")
+     * @xmlrpc.param #param_desc("boolean", "value", "Set --nobase to true")
+     * @xmlrpc.returntype #return_int_success()
+     */
+    public int setSoftwareList(
+            String sessionKey,
+            String ksLabel,
+            List<String> packageList,
+            Boolean ignoremissing,
+            Boolean nobase) {
+
+        User user = getLoggedInUser(sessionKey);
+        checkKickstartPerms(user);
+        KickstartData ksdata = lookupKsData(ksLabel, user.getOrg());
+        ksdata.setNoBase(nobase);
+        ksdata.setIgnoreMissing(ignoremissing);
+        KickstartFactory.saveKickstartData(ksdata);
+       return setSoftwareList(sessionKey, ksLabel, packageList);
+    }
+
+    /**
      * Append the list of software packages to a kickstart profile.
      * @param sessionKey An active session key
      * @param ksLabel A kickstart profile label
diff --git 
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/test/SoftwareHandlerTest.java
 
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/test/SoftwareHandlerTest.java
index 1efd4f8..e32d772 100644
--- 
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/test/SoftwareHandlerTest.java
+++ 
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/kickstart/profile/software/test/SoftwareHandlerTest.java
@@ -66,6 +66,31 @@ public class SoftwareHandlerTest extends BaseHandlerTestCase 
{
         assertEquals(pkgFound, true);
     }
 
+    // Test API with nobase and ignoremissing
+    public void testSetSoftwareListWithParams() throws Exception {
+
+        KickstartData ksProfile = 
KickstartDataTest.createKickstartWithProfile(admin);
+
+        List<String> packages = new ArrayList<String>();
+        packages.add("gcc");
+
+        int result = handler.setSoftwareList(adminKey, ksProfile.getLabel(), 
packages, true, true);
+
+        boolean pkgFound = false;
+        for (Iterator<KickstartPackage> itr = 
ksProfile.getKsPackages().iterator();
+             itr.hasNext();) {
+              KickstartPackage pkg = itr.next();
+              if (pkg.getPackageName().getName().equals("gcc")) {
+                  pkgFound = true;
+              }
+        }
+        assertEquals(1, result);
+        assertEquals(ksProfile.getKsPackages().size(), 1);
+        assertEquals(pkgFound, true);
+        assertEquals(ksProfile.getNoBase(), true);
+        assertEquals(ksProfile.getIgnoreMissing(), true);
+    }
+
     public void testAppendToSoftwareList() throws Exception {
 
         KickstartData ksProfile  = 
KickstartDataTest.createKickstartWithProfile(admin);
-- 
1.8.4.2

_______________________________________________
Spacewalk-devel mailing list
Spacewalk-devel@redhat.com
https://www.redhat.com/mailman/listinfo/spacewalk-devel

Reply via email to