/** * Copyright (c) 2009--2015 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.frontend.xmlrpc.kickstart; import com.redhat.rhn.common.db.datasource.DataResult; import com.redhat.rhn.common.localization.LocalizationService; import com.redhat.rhn.common.security.PermissionException; import com.redhat.rhn.common.validator.ValidatorError; import com.redhat.rhn.domain.channel.Channel; import com.redhat.rhn.domain.channel.ChannelFactory; 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.kickstart.KickstartRawData; import com.redhat.rhn.domain.kickstart.KickstartableTree; import com.redhat.rhn.domain.kickstart.builder.KickstartBuilder; import com.redhat.rhn.domain.kickstart.builder.KickstartParser; import com.redhat.rhn.domain.org.Org; import com.redhat.rhn.domain.role.RoleFactory; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.frontend.action.kickstart.KickstartIpRangeFilter; import com.redhat.rhn.frontend.action.kickstart.KickstartTreeUpdateType; import com.redhat.rhn.frontend.dto.kickstart.KickstartDto; import com.redhat.rhn.frontend.xmlrpc.BaseHandler; import com.redhat.rhn.frontend.xmlrpc.PermissionCheckFailureException; import com.redhat.rhn.frontend.xmlrpc.RhnXmlRpcServer; import com.redhat.rhn.frontend.xmlrpc.kickstart.tree.KickstartTreeHandler; import com.redhat.rhn.manager.kickstart.KickstartCloneCommand; import com.redhat.rhn.manager.kickstart.KickstartDeleteCommand; import com.redhat.rhn.manager.kickstart.KickstartEditCommand; import com.redhat.rhn.manager.kickstart.KickstartLister; import java.util.List; /** * KickstartHandler * @xmlrpc.namespace kickstart * @xmlrpc.doc Provides methods to create kickstart files * @version $Rev$ */ public class KickstartHandler extends BaseHandler { /** * List the available kickstartable trees for the given channel. * @param loggedInUser The current user * @param channelLabel Label of channel to search. * @return Array of KickstartableTreeObjects * @deprecated being replaced by kickstart.tree.list(string sessionKey, * string channelLabel) * * @xmlrpc.doc List the available kickstartable trees for the given channel. * @xmlrpc.param #param("string", "sessionKey") * @xmlrpc.param #param_desc("string", "channelLabel", "Label of channel to * search.") * @xmlrpc.returntype #array() $KickstartTreeSerializer #array_end() */ @Deprecated public List listKickstartableTrees(User loggedInUser, String channelLabel) { return new KickstartTreeHandler(). list(loggedInUser, channelLabel); } /** * List kickstartable channels for the logged in user. * @param loggedInUser The current user * @return Array of Channel objects. * * @xmlrpc.doc List kickstartable channels for the logged in user. * @xmlrpc.param #session_key() * @xmlrpc.returntype #array() $ChannelSerializer #array_end() */ public List<Channel> listKickstartableChannels(User loggedInUser) { ensureConfigAdmin(loggedInUser); return ChannelFactory .getKickstartableChannels(loggedInUser.getOrg()); } /** * List kickstartable tree channels for the logged in user. * @param loggedInUser The current user * @return Array of Channel objects. * * @xmlrpc.doc List kickstartable tree channels for the logged in user. * @xmlrpc.param #session_key() * @xmlrpc.returntype #array() $ChannelSerializer #array_end() */ public List<Channel> listKickstartableTreeChannels(User loggedInUser) { ensureConfigAdmin(loggedInUser); return ChannelFactory.getKickstartableTreeChannels(loggedInUser.getOrg()); } /** * Import a kickstart profile. This method will maintain the * url/nfs/harddrive/cdrom command in the kickstart file rather than replace * it with the kickstartable tree's default URL. * * @param loggedInUser The current user * @param profileLabel Label for the new kickstart profile. * @param virtualizationType Virtualization type, or none. * @param kickstartableTreeLabel Label of a kickstartable tree. * @param kickstartFileContents Contents of a kickstart file. * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Import a kickstart profile. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel", "Label for the new * kickstart profile.") * @xmlrpc.param #param_desc("string", "virtualizationType", "none, para_host, * qemu, xenfv or xenpv.") * @xmlrpc.param #param_desc("string", "kickstartableTreeLabel", "Label of a * kickstartable tree to associate the new profile with.") * @xmlrpc.param #param_desc("string", "kickstartFileContents", "Contents of * the kickstart file to import.") * @xmlrpc.returntype #return_int_success() */ public int importFile(User loggedInUser, String profileLabel, String virtualizationType, String kickstartableTreeLabel, String kickstartFileContents) { return importFile(loggedInUser, profileLabel, virtualizationType, kickstartableTreeLabel, RhnXmlRpcServer.getServerName(), kickstartFileContents); } /** * Import a kickstart profile, overriding the * url/nfs/harddrive/cdrom command in the file and replacing it with the * default URL for the kickstartable tree and kickstart host specified. * * @param loggedInUser The current user * @param profileLabel Label for the new kickstart profile. * @param virtualizationType Virtualization type, or none. * @param kickstartableTreeLabel Label of a kickstartable tree. * @param kickstartHost Kickstart hostname (of a satellite or proxy) used to * construct the default download URL for the new kickstart profile. Using * this option signifies that this default URL will be used instead of any * url/nfs/cdrom/harddrive commands in the kickstart file itself. * @param kickstartFileContents Contents of a kickstart file. * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Import a kickstart profile. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel", "Label for the new * kickstart profile.") * @xmlrpc.param #param_desc("string", "virtualizationType", "none, para_host, * qemu, xenfv or xenpv.") * @xmlrpc.param #param_desc("string", "kickstartableTreeLabel", "Label of a * kickstartable tree to associate the new profile with.") * @xmlrpc.param #param_desc("string", "kickstartHost", "Kickstart hostname * (of a satellite or proxy) used to construct the default download URL for * the new kickstart profile. Using this option signifies that this default * URL will be used instead of any url/nfs/cdrom/harddrive commands in the * kickstart file itself.") * @xmlrpc.param #param_desc("string", "kickstartFileContents", "Contents of * the kickstart file to import.") * @xmlrpc.returntype #return_int_success() */ public int importFile(User loggedInUser, String profileLabel, String virtualizationType, String kickstartableTreeLabel, String kickstartHost, String kickstartFileContents) { return importFile(loggedInUser, profileLabel, virtualizationType, kickstartableTreeLabel, kickstartHost, kickstartFileContents, getDefaultUpdateType()); } /** * Import a kickstart profile, overriding the * url/nfs/harddrive/cdrom command in the file and replacing it with the * default URL for the kickstartable tree and kickstart host specified. * * @param loggedInUser The current user * @param profileLabel Label for the new kickstart profile. * @param virtualizationType Virtualization type, or none. * @param kickstartableTreeLabel Label of a kickstartable tree. * @param kickstartHost Kickstart hostname (of a satellite or proxy) used to * construct the default download URL for the new kickstart profile. Using * this option signifies that this default URL will be used instead of any * url/nfs/cdrom/harddrive commands in the kickstart file itself. * @param kickstartFileContents Contents of a kickstart file. * @param updateType Set the automatic ks tree update strategy * for the profile. Valid choices are "red_hat", "none", "all". * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Import a kickstart profile. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel", "Label for the new * kickstart profile.") * @xmlrpc.param #param_desc("string", "virtualizationType", "none, para_host, * qemu, xenfv or xenpv.") * @xmlrpc.param #param_desc("string", "kickstartableTreeLabel", "Label of a * kickstartable tree to associate the new profile with.") * @xmlrpc.param #param_desc("string", "kickstartHost", "Kickstart hostname * (of a satellite or proxy) used to construct the default download URL for * the new kickstart profile. Using this option signifies that this default * URL will be used instead of any url/nfs/cdrom/harddrive commands in the * kickstart file itself.") * @xmlrpc.param #param_desc("string", "kickstartFileContents", "Contents of * the kickstart file to import.") * @xmlrpc.param #param_desc("string", "updateType", "Should the profile update * itself to use the newest tree available? Possible values are: none (default), * red_hat (only use Kickstart Trees synced from Red Hat), or all (includes * custom Kickstart Trees).") * @xmlrpc.returntype #return_int_success() */ public int importFile(User loggedInUser, String profileLabel, String virtualizationType, String kickstartableTreeLabel, String kickstartHost, String kickstartFileContents, String updateType) { KickstartParser parser = new KickstartParser(kickstartFileContents); KickstartBuilder builder = new KickstartBuilder(loggedInUser); KickstartableTree tree = KickstartFactory.lookupKickstartTreeByLabel( kickstartableTreeLabel, loggedInUser.getOrg()); if (tree == null) { throw new NoSuchKickstartTreeException(kickstartableTreeLabel); } KickstartTreeUpdateType updateTree = getUpdateType(updateType, tree); try { builder.createFromParser(parser, profileLabel, virtualizationType, tree, updateTree); } catch (PermissionException e) { throw new PermissionCheckFailureException(e); } catch (com.redhat.rhn.domain.kickstart.builder.InvalidKickstartLabelException e) { throw new InvalidKickstartLabelException(profileLabel); } return 1; } /** * Create a new kickstart profile using the default download URL for the * kickstartable tree and kickstart host specified. * * @param loggedInUser The current user * @param profileLabel Label for the new kickstart profile. * @param virtualizationType Virtualization type, or none. * @param kickstartableTreeLabel Label of a kickstartable tree. * @param kickstartHost Kickstart hostname (of a satellite or proxy) used to * construct the default download URL for the new kickstart profile. * @param rootPassword Root password. * @param updateType Set the automatic ks tree update strategy * for the profile. Valid choices are "red_hat", "none", "all". * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Import a kickstart profile. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel" "Label for the new * kickstart profile.") * @xmlrpc.param #param_desc("string", "virtualizationType", "none, para_host, * qemu, xenfv or xenpv.") * @xmlrpc.param #param_desc("string", "kickstartableTreeLabel", "Label of a * kickstartable tree to associate the new profile with.") * @xmlrpc.param #param_desc("string", "kickstartHost", "Kickstart hostname * (of a satellite or proxy) used to construct the default download URL for * the new kickstart profile.") * @xmlrpc.param #param_desc("string", "rootPassword", "Root password.") * @xmlrpc.param #param_desc("string", "updateType", "Should the profile update * itself to use the newest tree available? Possible values are: none (default), * red_hat (only use Kickstart Trees synced from Red Hat), or all (includes * custom Kickstart Trees).") * @xmlrpc.returntype #return_int_success() */ public int createProfile(User loggedInUser, String profileLabel, String virtualizationType, String kickstartableTreeLabel, String kickstartHost, String rootPassword, String updateType) { KickstartBuilder builder = new KickstartBuilder(loggedInUser); KickstartableTree tree = KickstartFactory.lookupKickstartTreeByLabel( kickstartableTreeLabel, loggedInUser.getOrg()); if (tree == null) { throw new NoSuchKickstartTreeException(kickstartableTreeLabel); } builder.validateTreeVirt(tree, virtualizationType); KickstartTreeUpdateType updateTree = getUpdateType(updateType, tree); String downloadUrl = tree.getDefaultDownloadLocation(); try { builder.create(profileLabel, tree, virtualizationType, downloadUrl, rootPassword, updateTree); } catch (PermissionException e) { throw new PermissionCheckFailureException(e); } catch (com.redhat.rhn.domain.kickstart.builder.InvalidKickstartLabelException e) { throw new InvalidKickstartLabelException(profileLabel); } return 1; } /** * Create a new kickstart profile using the default download URL for the * kickstartable tree and kickstart host specified. * * @param loggedInUser The current user * @param profileLabel Label for the new kickstart profile. * @param virtualizationType Virtualization type, or none. * @param kickstartableTreeLabel Label of a kickstartable tree. * @param kickstartHost Kickstart hostname (of a satellite or proxy) used to * construct the default download URL for the new kickstart profile. * @param rootPassword Root password. * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Import a kickstart profile. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel" "Label for the new * kickstart profile.") * @xmlrpc.param #param_desc("string", "virtualizationType", "none, para_host, * qemu, xenfv or xenpv.") * @xmlrpc.param #param_desc("string", "kickstartableTreeLabel", "Label of a * kickstartable tree to associate the new profile with.") * @xmlrpc.param #param_desc("string", "kickstartHost", "Kickstart hostname * (of a satellite or proxy) used to construct the default download URL for * the new kickstart profile.") * @xmlrpc.param #param_desc("string", "rootPassword", "Root password.") * @xmlrpc.returntype #return_int_success() */ public int createProfile(User loggedInUser, String profileLabel, String virtualizationType, String kickstartableTreeLabel, String kickstartHost, String rootPassword) { return createProfile(loggedInUser, profileLabel, virtualizationType, kickstartableTreeLabel, kickstartHost, rootPassword, getDefaultUpdateType()); } /** * Create a new kickstart profile with a custom download URL. * * @param loggedInUser The current user * @param profileLabel Label for the new kickstart profile. * @param virtualizationType Virtualization type, or none. * @param kickstartableTreeLabel Label of a kickstartable tree. * @param downloadUrl Download URL, or 'default' to use the kickstart tree's * default URL. * @param rootPassword Root password. * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Import a kickstart profile. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel", "Label for the new * kickstart profile.") * @xmlrpc.param #param_desc("string", "virtualizationType", "none, para_host, * qemu, xenfv or xenpv.") * @xmlrpc.param #param_desc("string", "kickstartableTreeLabel", "Label of a * kickstartable tree to associate the new profile with.") * @xmlrpc.param #param_desc("boolean", "downloadUrl", "Download URL, or * 'default' to use the kickstart tree's default URL.") * @xmlrpc.param #param_desc("string", "rootPassword", "Root password.") * @xmlrpc.returntype #return_int_success() */ public int createProfileWithCustomUrl(User loggedInUser, String profileLabel, String virtualizationType, String kickstartableTreeLabel, String downloadUrl, String rootPassword) { return createProfileWithCustomUrl(loggedInUser, profileLabel, virtualizationType, kickstartableTreeLabel, downloadUrl, rootPassword, getDefaultUpdateType()); } /** * Create a new kickstart profile with a custom download URL. * * @param loggedInUser The current user * @param profileLabel Label for the new kickstart profile. * @param virtualizationType Virtualization type, or none. * @param kickstartableTreeLabel Label of a kickstartable tree. * @param downloadUrl Download URL, or 'default' to use the kickstart tree's * default URL. * @param rootPassword Root password. * @param updateType Set the automatic ks tree update strategy * for the profile. Valid choices are "red_hat", "none", "all". * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Import a kickstart profile. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel", "Label for the new * kickstart profile.") * @xmlrpc.param #param_desc("string", "virtualizationType", "none, para_host, * qemu, xenfv or xenpv.") * @xmlrpc.param #param_desc("string", "kickstartableTreeLabel", "Label of a * kickstartable tree to associate the new profile with.") * @xmlrpc.param #param_desc("boolean", "downloadUrl", "Download URL, or * 'default' to use the kickstart tree's default URL.") * @xmlrpc.param #param_desc("string", "rootPassword", "Root password.") * @xmlrpc.param #param_desc("string", "updateType", "Should the profile update * itself to use the newest tree available? Possible values are: none (default), * red_hat (only use Kickstart Trees synced from Red Hat), or all (includes * custom Kickstart Trees).") * @xmlrpc.returntype #return_int_success() */ public int createProfileWithCustomUrl(User loggedInUser, String profileLabel, String virtualizationType, String kickstartableTreeLabel, String downloadUrl, String rootPassword, String updateType) { KickstartBuilder builder = new KickstartBuilder(loggedInUser); KickstartableTree tree = KickstartFactory.lookupKickstartTreeByLabel( kickstartableTreeLabel, loggedInUser.getOrg()); if (tree == null) { throw new NoSuchKickstartTreeException(kickstartableTreeLabel); } KickstartTreeUpdateType updateTree = getUpdateType(updateType, tree); try { builder.create(profileLabel, tree, virtualizationType, downloadUrl, rootPassword, updateTree); } catch (PermissionException e) { throw new PermissionCheckFailureException(e); } catch (com.redhat.rhn.domain.kickstart.builder.InvalidKickstartLabelException e) { throw new InvalidKickstartLabelException(profileLabel); } return 1; } private void checkKickstartPerms(User user) { if (!user.hasRole(RoleFactory.CONFIG_ADMIN)) { throw new PermissionException(LocalizationService.getInstance() .getMessage("permission.configadmin.needed")); } } private KickstartData lookupKsData(String label, Org org) { return XmlRpcKickstartHelper.getInstance().lookupKsData(label, org); } /** * List kickstarts for a user * @param loggedInUser The current user * @return list of KickstartDto objects * * @xmlrpc.doc Provides a list of kickstart profiles visible to the user's * org * @xmlrpc.param #session_key() * @xmlrpc.returntype #array() $KickstartDtoSerializer #array_end() */ public List listKickstarts(User loggedInUser) { checkKickstartPerms(loggedInUser); DataResult<KickstartDto> result = KickstartLister.getInstance() .kickstartsInOrg(loggedInUser.getOrg(), null); return result; } /** * Lists all ip ranges for an org * @param loggedInUser The current user * @return List of KickstartIpRange objects * * @xmlrpc.doc List all Ip Ranges and their associated kickstarts available * in the user's org. * @xmlrpc.param #session_key() * @xmlrpc.returntype #array() $KickstartIpRangeSerializer #array_end() * */ public List listAllIpRanges(User loggedInUser) { if (!loggedInUser.hasRole(RoleFactory.CONFIG_ADMIN)) { throw new PermissionCheckFailureException(); } return KickstartFactory.lookupRangeByOrg(loggedInUser.getOrg()); } /** * find a kickstart profile by an ip * @param loggedInUser The current user * @param ipAddress the ipaddress to search on * @return label of the associated kickstart * * @xmlrpc.doc Find an associated kickstart for a given ip address. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "ipAddress", "The ip address to * search for (i.e. 192.168.0.1)") * @xmlrpc.returntype string - label of the kickstart. Empty string ("") if * not found. */ public String findKickstartForIp(User loggedInUser, String ipAddress) { List<KickstartIpRange> ranges = KickstartFactory.lookupRangeByOrg(loggedInUser .getOrg()); KickstartIpRangeFilter filter = new KickstartIpRangeFilter(); for (KickstartIpRange range : ranges) { if (filter.filterOnRange(ipAddress, range.getMinString(), range .getMaxString())) { return range.getKsdata().getLabel(); } } return ""; } /** * delete a kickstart profile * @param loggedInUser The current user * @param ksLabel the kickstart to remove an ip range from * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Delete a kickstart profile * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "ksLabel", "The label of * the kickstart profile you want to remove") * @xmlrpc.returntype #return_int_success() */ public int deleteProfile(User loggedInUser, String ksLabel) { if (!loggedInUser.hasRole(RoleFactory.CONFIG_ADMIN)) { throw new PermissionException(RoleFactory.CONFIG_ADMIN); } KickstartData ksdata = lookupKsData(ksLabel, loggedInUser.getOrg()); KickstartDeleteCommand com = new KickstartDeleteCommand(ksdata.getId(), loggedInUser); ValidatorError error = com.store(); return 1; } /** * En/Disable kickstart profile * * @param loggedInUser The current user * @param profileLabel Label for tree we want to en/disable * @param disabled True to disable the profile * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Enable/Disable a Kickstart Profile * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel" "Label for the * kickstart tree you want to en/disable") * @xmlrpc.param #param_desc("string", "disabled" "true to disable the profile") * @xmlrpc.returntype #return_int_success() */ public int disableProfile(User loggedInUser, String profileLabel, Boolean disabled) { if (!loggedInUser.hasRole(RoleFactory.CONFIG_ADMIN)) { throw new PermissionException(RoleFactory.CONFIG_ADMIN); } KickstartData ksData = lookupKsData(profileLabel, loggedInUser.getOrg()); KickstartEditCommand cmd = new KickstartEditCommand( ksData.getId(), loggedInUser); cmd.setActive(!disabled); cmd.store(); return 1; } /** * Returns whether a kickstart profile is disabled * * @param loggedInUser The current user * @param profileLabel kickstart profile label * @return true if profile is disabled * * @xmlrpc.doc Returns whether a kickstart profile is disabled * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel" "kickstart profile label") * @xmlrpc.returntype true if profile is disabled */ public boolean isProfileDisabled(User loggedInUser, String profileLabel) { KickstartData ksData = lookupKsData(profileLabel, loggedInUser.getOrg()); return !ksData.isActive(); } /** * Rename a kickstart profile. * * @param loggedInUser The current user * @param originalLabel Label for profile we want to edit * @param newLabel to assign to profile * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Rename a Kickstart Profile in Satellite * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "originalLabel" "Label for the * kickstart profile you want to rename") * @xmlrpc.param #param_desc("string", "newLabel" "new label to change to") * @xmlrpc.returntype #return_int_success() */ public int renameProfile(User loggedInUser, String originalLabel, String newLabel) { KickstartData ksData = lookupKsData(originalLabel, loggedInUser.getOrg()); KickstartData existing = KickstartFactory.lookupKickstartDataByLabelAndOrgId( newLabel, loggedInUser.getOrg().getId()); if (existing != null) { throw new InvalidKickstartLabelException(newLabel); } KickstartEditCommand cmd = new KickstartEditCommand( ksData.getId(), loggedInUser); cmd.setLabel(newLabel); cmd.store(); return 1; } /** * Clones a kickstart profile. * * @param loggedInUser The current user * @param ksLabelToClone label of the kickstart profile to clone * @param newKsLabel label of the cloned profile * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Clone a Kickstart Profile * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "ksLabelToClone" "Label of the * kickstart profile to clone") * @xmlrpc.param #param_desc("string", "newKsLabel" "label of the cloned profile") * @xmlrpc.returntype #return_int_success() */ public int cloneProfile(User loggedInUser, String ksLabelToClone, String newKsLabel) { KickstartData toClone = KickstartFactory.lookupKickstartDataByLabelAndOrgId( ksLabelToClone, loggedInUser.getOrg().getId()); if (toClone == null) { throw new InvalidKickstartLabelException(ksLabelToClone); } KickstartCloneCommand cmd = new KickstartCloneCommand(toClone.getId(), loggedInUser, newKsLabel); KickstartBuilder builder = new KickstartBuilder(loggedInUser); builder.validateNewLabel(newKsLabel); cmd.store(); return 1; } /** * Import a kickstart profile, overriding the * url/nfs/harddrive/cdrom command in the file and replacing it with the * default URL for the kickstartable tree and kickstart host specified. * * @param loggedInUser The current user * @param profileLabel Label for the new kickstart profile. * @param virtualizationType Virtualization type, or none. * @param kickstartableTreeLabel Label of a kickstartable tree. * @param kickstartFileContents Contents of a kickstart file. * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Import a raw kickstart file into satellite. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel", "Label for the new * kickstart profile.") * @xmlrpc.param #param_desc("string", "virtualizationType", "none, para_host, * qemu, xenfv or xenpv.") * @xmlrpc.param #param_desc("string", "kickstartableTreeLabel", "Label of a * kickstartable tree to associate the new profile with.") * @xmlrpc.param #param_desc("string", "kickstartFileContents", "Contents of * the kickstart file to import.") * @xmlrpc.returntype #return_int_success() */ public int importRawFile(User loggedInUser, String profileLabel, String virtualizationType, String kickstartableTreeLabel, String kickstartFileContents) { return importRawFile(loggedInUser, profileLabel, virtualizationType, kickstartableTreeLabel, kickstartFileContents, getDefaultUpdateType()); } /** * Import a kickstart profile, overriding the * url/nfs/harddrive/cdrom command in the file and replacing it with the * default URL for the kickstartable tree and kickstart host specified. * * @param loggedInUser The current user * @param profileLabel Label for the new kickstart profile. * @param virtualizationType Virtualization type, or none. * @param kickstartableTreeLabel Label of a kickstartable tree. * @param kickstartFileContents Contents of a kickstart file. * @param updateType Set the automatic ks tree update strategy * for the profile. Valid choices are "red_hat", "none", "all". * @return 1 if successful, exception otherwise. * * @xmlrpc.doc Import a raw kickstart file into satellite. * @xmlrpc.param #session_key() * @xmlrpc.param #param_desc("string", "profileLabel", "Label for the new * kickstart profile.") * @xmlrpc.param #param_desc("string", "virtualizationType", "none, para_host, * qemu, xenfv or xenpv.") * @xmlrpc.param #param_desc("string", "kickstartableTreeLabel", "Label of a * kickstartable tree to associate the new profile with.") * @xmlrpc.param #param_desc("string", "kickstartFileContents", "Contents of * the kickstart file to import.") * @xmlrpc.param #param_desc("string", "updateType", "Should the profile update * itself to use the newest tree available? Possible values are: none (default), * red_hat (only use Kickstart Trees synced from Red Hat), or all (includes * custom Kickstart Trees).") * @xmlrpc.returntype #return_int_success() */ public int importRawFile(User loggedInUser, String profileLabel, String virtualizationType, String kickstartableTreeLabel, String kickstartFileContents, String updateType) { KickstartBuilder builder = new KickstartBuilder(loggedInUser); KickstartableTree tree = KickstartFactory.lookupKickstartTreeByLabel( kickstartableTreeLabel, loggedInUser.getOrg()); if (tree == null) { throw new NoSuchKickstartTreeException(kickstartableTreeLabel); } KickstartTreeUpdateType updateTree = getUpdateType(updateType, tree); try { KickstartRawData data = builder.createRawData(profileLabel, tree, kickstartFileContents, virtualizationType, updateTree); } catch (PermissionException e) { throw new PermissionCheckFailureException(e); } catch (com.redhat.rhn.domain.kickstart.builder.InvalidKickstartLabelException e) { throw new InvalidKickstartLabelException(profileLabel); } return 1; } /** * Conver string updatetype to a real KickstartTreeUpdateType * @param typeIn the string to try * @return the KickstartTreeUpdateType */ private KickstartTreeUpdateType getUpdateType(String typeIn, KickstartableTree tree) { if (typeIn.equals(KickstartTreeUpdateType.ALL.getType())) { if (tree.getChannel() == null) { throw new InvalidUpdateTypeAndNoBaseTreeException(tree.getLabel()); } return KickstartTreeUpdateType.ALL; } else if (typeIn.equals(KickstartTreeUpdateType.RED_HAT.getType())) { if (tree.getOrgId() != null) { throw new InvalidUpdateTypeAndKickstartTreeException(tree.getLabel()); } if (tree.getChannel() == null) { throw new InvalidUpdateTypeAndNoBaseTreeException(tree.getLabel()); } return KickstartTreeUpdateType.RED_HAT; } else if (typeIn.equals(KickstartTreeUpdateType.NONE.getType())) { return KickstartTreeUpdateType.NONE; } else { throw new InvalidUpdateTypeException(typeIn); } } /** * Return the default KickstartTreeUpdateType * @return string for the default KickstartTreeUpdateType */ private String getDefaultUpdateType() { return KickstartTreeUpdateType.NONE.getType(); } }