Alexander Wels has uploaded a new change for review. Change subject: core,restapi,webadmin: encrypt fence agent options ......................................................................
core,restapi,webadmin: encrypt fence agent options - Added option to encrypt the fence agent options in the database. - Added field to FenceAgent and associated table/views. - Updated REST api to include new field with the ability to set/update it. - Added associated UI checkbox. Change-Id: I60ff2c8663d68a5fcb8771831d36e15932b24ceb Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=996926 Signed-off-by: Alexander Wels <[email protected]> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/FenceAgent.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/FenceAgentDaoDbFacadeImpl.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java M backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd M backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/FenceAgentMapper.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml M packaging/dbscripts/create_views.sql M packaging/dbscripts/fence_agents_sp.sql A packaging/dbscripts/upgrade/03_06_0940_add_encrypt_options_fence_agents.sql A packaging/dbscripts/upgrade/03_06_0950_change_options_to_text.sql 15 files changed, 162 insertions(+), 69 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/38392/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/FenceAgent.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/FenceAgent.java index d8905f2..4abb8fb 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/FenceAgent.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/FenceAgent.java @@ -49,6 +49,9 @@ @Size(max = BusinessEntitiesDefinitions.GENERAL_MAX_SIZE) private String options; + @EditableField + private boolean encryptOptions; + public Guid getId() { return id; } @@ -131,6 +134,14 @@ options = optionsMapToString(value); } + public boolean getEncryptOptions() { + return encryptOptions; + } + + public void setEncryptOptions(boolean value) { + encryptOptions = value; + } + /** * Converts a PM Options map to string * diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/FenceAgentDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/FenceAgentDaoDbFacadeImpl.java index 15b0c3e..51a2dc3 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/FenceAgentDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/FenceAgentDaoDbFacadeImpl.java @@ -84,8 +84,13 @@ } else { parameterSource.addValue("port", null); } + parameterSource.addValue("encrypt_options", agent.getEncryptOptions()); if (agent.getOptions() != null) { - parameterSource.addValue("options", agent.getOptions()); + if (agent.getEncryptOptions()) { + parameterSource.addValue("options", DbFacadeUtils.encryptPassword(agent.getOptions())); + } else { + parameterSource.addValue("options", agent.getOptions()); + } } else { parameterSource.addValue("options", ""); } @@ -107,7 +112,14 @@ entity.setPassword(DbFacadeUtils.decryptPassword(rs.getString("agent_password"))); int port = rs.getInt("port"); entity.setPort(port == 0 ? null : port); - entity.setOptions(rs.getString("options")); + final Boolean encryptOptions = rs.getBoolean("encrypt_options"); + entity.setEncryptOptions(encryptOptions == null ? false : encryptOptions); + final String options = rs.getString("options"); + if (entity.getEncryptOptions() && !options.isEmpty()) { + entity.setOptions(DbFacadeUtils.decryptPassword(options)); + } else { + entity.setOptions(options); + } entity.setIp(rs.getString("ip")); return entity; } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java index 12e573a..2976948 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java @@ -387,7 +387,12 @@ agent.setPassword(DbFacadeUtils.decryptPassword(rs.getString("agent_password"))); int port = rs.getInt("agent_port"); agent.setPort(port == 0 ? null : port); - agent.setOptions(rs.getString("agent_options")); + agent.setEncryptOptions(rs.getBoolean("agent_encrypt_options")); + if (agent.getEncryptOptions()) { + agent.setOptions(DbFacadeUtils.decryptPassword(rs.getString("agent_options"))); + } else { + agent.setOptions(rs.getString("agent_options")); + } agent.setIp(rs.getString("agent_ip")); entity.getFenceAgents().add(agent); } diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd index f7febd8..9971e42 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd @@ -1745,6 +1745,7 @@ <xs:element name="username" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="password" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element ref="options" minOccurs="0" maxOccurs="1"/> + <xs:element name="encrypt_options" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="concurrent" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="order" type="xs:int" minOccurs="0" maxOccurs="1"/> <xs:element name="port" type="xs:int" minOccurs="0" maxOccurs="1"/> diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml index 420db0a..a0aa913 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml @@ -2857,7 +2857,8 @@ host.power_management.username: 'xs:string', host.power_management.password: 'xs:string', host.power_management.automatic_pm_enabled: 'xs:boolean', host.power_management.options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, host.power_management.pm_proxy--COLLECTION: {propietary : 'xs:string'}, host.power_management.agents.agent--COLLECTION:{type: 'xs:string', - address: 'xs:string', username: 'xs:string', password: 'xs:string', options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}}, + address: 'xs:string', username: 'xs:string', password: 'xs:string', options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, + encrypt_options: 'xs:boolean'}, host.power_management.kdump_detection: 'xs:boolean', host.external_host_provider.id: 'xs:string'} description: update the specified host in the system. This is deprecated and is provided only for backwards compatibility - mandatoryArguments: {} @@ -2871,7 +2872,7 @@ host.power_management.password: 'xs:string', host.power_management.options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, host.power_management.pm_proxy--COLLECTION: {propietary : 'xs:string'}, host.power_management.agents.agent--COLLECTION:{type: 'xs:string', address: 'xs:string', username: 'xs:string', password: 'xs:string', - options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}}, + options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, encrypt_options: 'xs:boolean'}, host.power_management.kdump_detection: 'xs:boolean'} description: update the specified host in the system urlparams: @@ -2893,7 +2894,7 @@ host.power_management.enabled: 'xs:boolean', host.power_management.address: 'xs:string', host.power_management.username: 'xs:string', host.power_management.automatic_pm_enabled: 'xs:boolean', host.power_management.password: 'xs:string', host.power_management.options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, host.power_management.pm_proxy--COLLECTION: {propietary : 'xs:string'}, host.power_management.agents.agent--COLLECTION:{type: 'xs:string', - address: 'xs:string', username: 'xs:string', password: 'xs:string', options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}}, host.reboot_after_installation: 'xs:boolean', host.override_iptables: 'xs:boolean', + address: 'xs:string', username: 'xs:string', password: 'xs:string', options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, encrypt_options: 'xs:boolean'}, host.reboot_after_installation: 'xs:boolean', host.override_iptables: 'xs:boolean', host.power_management.kdump_detection: 'xs:boolean', host.protocol: 'xs:int'} description: add a new host to the system providing the host root password. This has been deprecated and provided for backwards compatibility - mandatoryArguments: {host.name: 'xs:string', host.address: 'xs:string', host.cluster.id|name: 'xs:string'} @@ -2905,7 +2906,7 @@ host.power_management.enabled: 'xs:boolean', host.power_management.address: 'xs:string', host.power_management.username: 'xs:string', host.power_management.password: 'xs:string', host.power_management.options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, host.power_management.pm_proxy--COLLECTION: {propietary : 'xs:string'}, host.power_management.agents.agent--COLLECTION:{type: 'xs:string', address: 'xs:string', - username: 'xs:string', password: 'xs:string', options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}}, host.reboot_after_installation: 'xs:boolean', host.override_iptables: 'xs:boolean', + username: 'xs:string', password: 'xs:string', options.option--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, encrypt_options: 'xs:boolean'}, host.reboot_after_installation: 'xs:boolean', host.override_iptables: 'xs:boolean', host.power_management.kdump_detection: 'xs:boolean', host.protocol: 'xs:int'} description: add a new host to the system providing the ssh password or fingerprint urlparams: {} @@ -3398,7 +3399,7 @@ parameterType: Agent signatures: - mandatoryArguments: {agent.address: 'xs:string', agent.order: 'xs:int', agent.type: 'xs:string', agent.username: 'xs:string', agent.password: 'xs:string'} - optionalArguments: {agent.port: 'xs:int', agent.options--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}} + optionalArguments: {agent.port: 'xs:int', agent.options--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, encrypt_options: 'xs:boolean'} urlparams: {} headers: Content-Type: {value: application/xml|json, required: true} @@ -3419,7 +3420,7 @@ parameterType: Agent signatures: - mandatoryArguments: {} - optionalArguments: {agent.address: 'xs:string', agent.order: 'xs:int', agent.type: 'xs:string', agent.username: 'xs:string', agent.password: 'xs:string', agent.port: 'xs:int', agent.options--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}} + optionalArguments: {agent.address: 'xs:string', agent.order: 'xs:int', agent.type: 'xs:string', agent.username: 'xs:string', agent.password: 'xs:string', agent.port: 'xs:int', agent.options--COLLECTION: {option.name: 'xs:string', option.value: 'xs:string'}, encrypt_options: 'xs:boolean'} urlparams: {} headers: Content-Type: {value: application/xml|json, required: true} diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/FenceAgentMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/FenceAgentMapper.java index d09d7ad..b5bb371 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/FenceAgentMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/FenceAgentMapper.java @@ -41,6 +41,9 @@ if (model.isSetOptions()) { entity.setOptions(HostMapper.map(model.getOptions(), null)); } + if (model.isSetEncryptOptions()) { + entity.setEncryptOptions(model.isEncryptOptions()); + } return entity; } @@ -67,6 +70,7 @@ model.setAddress(entity.getIp()); model.setOptions(entity.getOptions() == null || entity.getOptions().isEmpty() ? null : HostMapper.map(entity.getOptionsMap(), null)); + model.setEncryptOptions(entity.getEncryptOptions()); model.setOrder(entity.getOrder()); model.setPassword(entity.getPassword()); model.setUsername(entity.getUser()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java index ca71f95..ea38193 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java @@ -358,7 +358,7 @@ private final HostVmListModel hostVmListModel; - public HostVmListModel getHostVmListModel(){ + public HostVmListModel getHostVmListModel() { return this.hostVmListModel; } @@ -711,8 +711,9 @@ if (clusterModel.getSelectedItem() != null) { VDSGroup cluster = clusterModel.getSelectedItem(); Boolean jsonSupported = - (Boolean) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.JsonProtocolSupported, - cluster.getCompatibilityVersion().toString()); + (Boolean) AsyncDataProvider.getInstance() + .getConfigValuePreConverted(ConfigurationValues.JsonProtocolSupported, + cluster.getCompatibilityVersion().toString()); if (jsonSupported) { hostModel.getProtocol().setEntity(true); } else { @@ -757,11 +758,13 @@ } } innerHostModel.getDataCenter().setIsChangable(false); - innerHostModel.getDataCenter().setChangeProhibitionReason(constants.cannotChangeDCInTreeContext()); + innerHostModel.getDataCenter() + .setChangeProhibitionReason(constants.cannotChangeDCInTreeContext()); innerHostModel.getCluster().setItems(Arrays.asList(cluster)); innerHostModel.getCluster().setSelectedItem(cluster); innerHostModel.getCluster().setIsChangable(false); - innerHostModel.getCluster().setChangeProhibitionReason(constants.cannotChangeClusterInTreeContext()); + innerHostModel.getCluster() + .setChangeProhibitionReason(constants.cannotChangeClusterInTreeContext()); break; case DataCenter: StoragePool selectDataCenter = @@ -770,7 +773,8 @@ .setItems(new ArrayList<StoragePool>(Arrays.asList(new StoragePool[] { selectDataCenter }))); innerHostModel.getDataCenter().setSelectedItem(selectDataCenter); innerHostModel.getDataCenter().setIsChangable(false); - innerHostModel.getDataCenter().setChangeProhibitionReason(constants.cannotChangeDCInTreeContext()); + innerHostModel.getDataCenter() + .setChangeProhibitionReason(constants.cannotChangeDCInTreeContext()); break; default: innerHostModel.getDataCenter().setItems(dataCenters); @@ -783,7 +787,6 @@ innerHostModel.getDataCenter().setItems(dataCenters); innerHostModel.getDataCenter().setSelectedItem(Linq.firstOrDefault(dataCenters)); } - UICommand onSaveFalseCommand = UICommand.createDefaultOkUiCommand("OnSaveFalse", hostListModel); //$NON-NLS-1$ innerHostModel.getCommands().add(onSaveFalseCommand); @@ -828,13 +831,14 @@ if (host.getPmProxyPreferences() != null) { hostModel.setPmProxyPreferences(host.getPmProxyPreferences()); } else { - AsyncDataProvider.getInstance().getDefaultPmProxyPreferences(new AsyncQuery(null, new INewAsyncCallback() { - @Override - public void onSuccess(Object model, Object returnValue) { + AsyncDataProvider.getInstance().getDefaultPmProxyPreferences(new AsyncQuery(null, + new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { - hostModel.setPmProxyPreferences((String) returnValue); - } - })); + hostModel.setPmProxyPreferences((String) returnValue); + } + })); } UICommand onSaveFalseCommand = UICommand.createDefaultOkUiCommand("OnSaveFalse", hostListModel); //$NON-NLS-1$ @@ -843,7 +847,8 @@ UICommand cancelCommand = UICommand.createCancelUiCommand("Cancel", hostListModel); //$NON-NLS-1$ hostModel.getCommands().add(cancelCommand); - if (getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.Host) { + if (getSystemTreeSelectedItem() != null + && getSystemTreeSelectedItem().getType() == SystemTreeItemType.Host) { hostModel.getName().setIsChangable(false); hostModel.getName().setChangeProhibitionReason(constants.cannotEditNameInTreeContext()); } @@ -851,7 +856,6 @@ } }; AsyncDataProvider.getInstance().getDataCenterList(_asyncQuery); - } @@ -880,8 +884,8 @@ confirmModel.setHashName("power_management_configuration"); //$NON-NLS-1$ confirmModel.setMessage(ConstantsManager.getInstance().getConstants().youHavntConfigPmMsg()); - - UICommand approveCommand = UICommand.createDefaultOkUiCommand(approveInitiated ? "OnSaveInternalFromApprove" : "OnSaveInternalNotFromApprove", this); //$NON-NLS-1$ //$NON-NLS-2$ + UICommand approveCommand = + UICommand.createDefaultOkUiCommand(approveInitiated ? "OnSaveInternalFromApprove" : "OnSaveInternalNotFromApprove", this); //$NON-NLS-1$ //$NON-NLS-2$ confirmModel.getCommands().add(approveCommand); UICommand cancelCommand = new UICommand("CancelConfirmFocusPM", this); //$NON-NLS-1$ @@ -891,7 +895,7 @@ } else { - if(approveInitiated) + if (approveInitiated) { onSaveInternalFromApprove(); } @@ -942,7 +946,8 @@ host.setComment(model.getComment().getEntity()); host.setHostName(model.getHost().getEntity()); host.setPort(Integer.parseInt(model.getPort().getEntity().toString())); - host.setProtocol(VdsProtocol.fromValue(model.getProtocol().getEntity() ? VdsProtocol.STOMP.toString() : VdsProtocol.XML.toString())); + host.setProtocol(VdsProtocol.fromValue(model.getProtocol().getEntity() ? VdsProtocol.STOMP.toString() + : VdsProtocol.XML.toString())); host.setSshPort(Integer.parseInt(model.getAuthSshPort().getEntity().toString())); boolean sshUsernameSet = model.getUserName().getEntity() != null; host.setSshUsername(sshUsernameSet ? model.getUserName().getEntity() : null); @@ -957,12 +962,10 @@ host.setVdsSpmPriority(model.getSpmPriorityValue()); host.setPmProxyPreferences(model.getPmProxyPreferences()); - // Save other PM parameters. host.setPmEnabled(model.getIsPm().getEntity()); host.setDisablePowerManagementPolicy(model.getDisableAutomaticPowerManagement().getEntity()); host.setPmKdumpDetection(model.getPmKdumpDetection().getEntity()); - cancelConfirm(); model.startProgress(null); @@ -991,8 +994,10 @@ if (Boolean.TRUE.equals(model.getIsDiscoveredHosts().getEntity())) { Provider<?> provider = model.getProviders().getSelectedItem(); ExternalHostGroup hostGroup = (ExternalHostGroup) model.getExternalHostGroups().getSelectedItem(); - ExternalComputeResource computeResource = (ExternalComputeResource) model.getExternalComputeResource().getSelectedItem(); - ExternalDiscoveredHost discoveredHost = (ExternalDiscoveredHost)model.getExternalDiscoveredHosts().getSelectedItem(); + ExternalComputeResource computeResource = + (ExternalComputeResource) model.getExternalComputeResource().getSelectedItem(); + ExternalDiscoveredHost discoveredHost = + (ExternalDiscoveredHost) model.getExternalDiscoveredHosts().getSelectedItem(); parameters.initVdsActionParametersForProvision( provider.getId(), hostGroup, @@ -1069,6 +1074,7 @@ primaryAgent.setPassword(model.getPmPassword().getEntity()); primaryAgent.setType(model.getPmType().getSelectedItem()); primaryAgent.setOptionsMap((model.getPmOptionsMap())); + primaryAgent.setEncryptOptions(model.getPmEncryptOptions().getEntity()); if (model.getPmPort() != null && model.getPmPort().getEntity() != null) { primaryAgent.setPort(Integer.valueOf(model.getPmPort().getEntity())); } @@ -1081,6 +1087,7 @@ secondaryAgent.setPassword(model.getPmSecondaryPassword().getEntity()); secondaryAgent.setType(model.getPmSecondaryType().getSelectedItem()); secondaryAgent.setOptionsMap(model.getPmSecondaryOptionsMap()); + secondaryAgent.setEncryptOptions(model.getPmSecondaryEncryptOptions().getEntity()); secondaryAgent.setPort(Integer.valueOf(model.getPmSecondaryPort().getEntity())); secondaryAgent.setOrder(model.getPmSecondaryConcurrent().getEntity() ? primaryAgent.getOrder() : primaryAgent.getOrder() + 1); @@ -1092,6 +1099,7 @@ } return agents; } + public void postOnSaveInternalChangeCluster(UpdateVdsActionParameters parameters, boolean approveInitiated) { Frontend.getInstance().runAction(VdcActionType.UpdateVds, parameters, @@ -1105,7 +1113,7 @@ localModel.postOnSaveInternal(result.getReturnValue(), localApproveInitiated); } - }, new Object[]{this, approveInitiated}); + }, new Object[] { this, approveInitiated }); } public void postOnSaveInternal(VdcReturnValueBase returnValue, boolean approveInitiated) @@ -1435,10 +1443,9 @@ } } } - ); + ); } }), host.getVdsGroupId()); - } @@ -1463,36 +1470,36 @@ AsyncDataProvider.getInstance().getoVirtISOsList(new AsyncQuery(model, new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { + @Override + public void onSuccess(Object target, Object returnValue) { - InstallModel model = (InstallModel) target; + InstallModel model = (InstallModel) target; - ArrayList<RpmVersion> isos = (ArrayList<RpmVersion>) returnValue; - Collections.sort(isos, new Comparator<RpmVersion>() { - @Override - public int compare(RpmVersion rpmV1, RpmVersion rpmV2) { + ArrayList<RpmVersion> isos = (ArrayList<RpmVersion>) returnValue; + Collections.sort(isos, new Comparator<RpmVersion>() { + @Override + public int compare(RpmVersion rpmV1, RpmVersion rpmV2) { return RpmVersionUtils.compareRpmParts(rpmV2.getRpmName(), rpmV1.getRpmName()); } - }); - model.getOVirtISO().setItems(isos); - model.getOVirtISO().setSelectedItem(Linq.firstOrDefault(isos)); - model.getOVirtISO().setIsAvailable(true); - model.getOVirtISO().setIsChangable(!isos.isEmpty()); - model.getHostVersion().setIsAvailable(true); + }); + model.getOVirtISO().setItems(isos); + model.getOVirtISO().setSelectedItem(Linq.firstOrDefault(isos)); + model.getOVirtISO().setIsAvailable(true); + model.getOVirtISO().setIsChangable(!isos.isEmpty()); + model.getHostVersion().setIsAvailable(true); - if (isos.isEmpty()) { - model.setMessage(ConstantsManager.getInstance().getConstants() - .thereAreNoISOversionsVompatibleWithHostCurrentVerMsg()); - } + if (isos.isEmpty()) { + model.setMessage(ConstantsManager.getInstance().getConstants() + .thereAreNoISOversionsVompatibleWithHostCurrentVerMsg()); + } - if (host.getHostOs() == null) { - model.setMessage(ConstantsManager.getInstance().getConstants() - .hostMustBeInstalledBeforeUpgrade()); - } + if (host.getHostOs() == null) { + model.setMessage(ConstantsManager.getInstance().getConstants() + .hostMustBeInstalledBeforeUpgrade()); + } - addUpgradeCommands(model, host, isos.isEmpty()); - getWindow().stopProgress(); + addUpgradeCommands(model, host, isos.isEmpty()); + getWindow().stopProgress(); } }), host.getId()); @@ -1561,10 +1568,9 @@ } } } - ); + ); } }), host.getVdsGroupId()); - } @@ -1726,7 +1732,9 @@ } private void configureLocalStorage2(ConfigureLocalStorageModel model) { - String prefix = (String) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.RhevhLocalFSPath); + String prefix = + (String) AsyncDataProvider.getInstance() + .getConfigValuePreConverted(ConfigurationValues.RhevhLocalFSPath); if (!StringHelper.isNullOrEmpty(prefix)) { EntityModel pathModel = model.getStorage().getPath(); pathModel.setEntity(prefix); @@ -1759,7 +1767,8 @@ model.setDefaultNames(host); - UICommand onConfigureLocalStorageCommand = UICommand.createDefaultOkUiCommand("OnConfigureLocalStorage", this); //$NON-NLS-1$ + UICommand onConfigureLocalStorageCommand = + UICommand.createDefaultOkUiCommand("OnConfigureLocalStorage", this); //$NON-NLS-1$ model.getCommands().add(onConfigureLocalStorageCommand); UICommand cancelCommand = UICommand.createCancelUiCommand("Cancel", this); //$NON-NLS-1$ @@ -1910,7 +1919,7 @@ ArrayList<RpmVersion> isos = (ArrayList<RpmVersion>) returnValue; if (isos.size() > 0) { - String [] hostOsInfo = vds.getHostOs().split("-"); //$NON-NLS-1$ + String[] hostOsInfo = vds.getHostOs().split("-"); //$NON-NLS-1$ for (int counter = 0; counter < hostOsInfo.length; counter++) { hostOsInfo[counter] = hostOsInfo[counter].trim(); } @@ -1918,8 +1927,8 @@ generalModel.shouldAlertUpgrade( isos, hostOsInfo - ) - ); + ) + ); boolean executionAllowed = vds.getStatus() != VDSStatus.Up && vds.getStatus() != VDSStatus.Installing && vds.getStatus() != VDSStatus.PreparingForMaintenance diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java index 005b4bf..feaa55f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java @@ -444,6 +444,16 @@ privatePmSecure = value; } + private EntityModel<Boolean> privatePmEncryptOptions; + + public EntityModel<Boolean> getPmEncryptOptions() { + return privatePmEncryptOptions; + } + + public void setPmEncryptOptions(EntityModel<Boolean> value) { + privatePmEncryptOptions = value; + } + private EntityModel<String> privatePmPort; public EntityModel<String> getPmPort() @@ -538,6 +548,16 @@ private void setPmSecondaryOptions(EntityModel<String> value) { pmSecondaryOptions = value; + } + + private EntityModel<Boolean> pmSecondaryEncryptOptions; + + public EntityModel<Boolean> getPmSecondaryEncryptOptions() { + return pmSecondaryEncryptOptions; + } + + public void setPmSecondaryEncryptOptions(EntityModel<Boolean> value) { + pmSecondaryEncryptOptions = value; } private EntityModel<Boolean> pmSecondarySecure; @@ -998,6 +1018,8 @@ setPmSecure(new EntityModel<Boolean>()); getPmSecure().setIsAvailable(false); getPmSecure().setEntity(false); + setPmEncryptOptions(new EntityModel<Boolean>()); + getPmEncryptOptions().setEntity(false); // Initialize secondary PM fields. setPmSecondaryIp(new EntityModel<String>()); @@ -1013,6 +1035,8 @@ setPmSecondarySecure(new EntityModel<Boolean>()); getPmSecondarySecure().setIsAvailable(false); getPmSecondarySecure().setEntity(false); + setPmSecondaryEncryptOptions(new EntityModel<Boolean>()); + getPmSecondaryEncryptOptions().setEntity(false); // Initialize other PM fields. setPmSecondaryConcurrent(new EntityModel<Boolean>()); @@ -1795,6 +1819,7 @@ if (primaryAgent.getPort() != null) { getPmPort().setEntity(primaryAgent.getPort().toString()); } + getPmEncryptOptions().setEntity(primaryAgent.getEncryptOptions()); setPmOptionsMap(VdsStatic.pmOptionsStringToMap(primaryAgent.getOptions())); if (vds.getFenceAgents().size() > 1) { @@ -1809,6 +1834,7 @@ } setPmSecondaryOptionsMap(secondaryAgent.getOptionsMap()); getPmSecondaryConcurrent().setEntity(secondaryAgent.getOrder() == primaryAgent.getOrder()); + getPmSecondaryEncryptOptions().setEntity(secondaryAgent.getEncryptOptions()); } } getDisableAutomaticPowerManagement().setEntity(vds.isDisablePowerManagementPolicy()); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java index b59d8ff..fbf164d 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java @@ -644,6 +644,9 @@ @DefaultStringValue("Secure") String hostPopupPmSecureLabel(); + @DefaultStringValue("Encrypt options") + String hostPopupPmEncryptOptionsLabel(); + @DefaultStringValue("Disable policy control of power management") String hostPopupPmDisableAutoPM(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java index c831e98..02249b8 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java @@ -258,6 +258,11 @@ StringEntityModelTextBoxEditor pmOptionsEditor; @UiField + @Path(value = "pmEncryptOptions.entity") + @WithElementId("pmEncryptOptions") + EntityModelCheckBoxEditor pmEncryptOptionsEditor; + + @UiField @Ignore Label pmOptionsExplanationLabel; @@ -308,6 +313,11 @@ @Path(value = "pmSecondaryOptions.entity") @WithElementId("pmSecondaryOptions") StringEntityModelTextBoxEditor pmSecondaryOptionsEditor; + + @UiField + @Path(value = "pmSecondaryEncryptOptions.entity") + @WithElementId("pmSecondaryEncryptOptions") + EntityModelCheckBoxEditor pmSecondaryEncryptOptionsEditor; @UiField @Ignore @@ -647,6 +657,7 @@ pmOptionsEditor.setLabel(constants.hostPopupPmOptionsLabel()); pmOptionsExplanationLabel.setText(constants.hostPopupPmOptionsExplanationLabel()); pmSecureEditor.setLabel(constants.hostPopupPmSecureLabel()); + pmEncryptOptionsEditor.setLabel(constants.hostPopupPmEncryptOptionsLabel()); // Secondary pmSecondaryAddressEditor.setLabel(constants.hostPopupPmAddressLabel()); @@ -658,6 +669,7 @@ pmSecondaryOptionsEditor.setLabel(constants.hostPopupPmOptionsLabel()); pmSecondaryOptionsExplanationLabel.setText(constants.hostPopupPmOptionsExplanationLabel()); pmSecondarySecureEditor.setLabel(constants.hostPopupPmSecureLabel()); + pmSecondaryEncryptOptionsEditor.setLabel(constants.hostPopupPmEncryptOptionsLabel()); consoleAddress.setLabel(constants.consoleAddress()); consoleAddressLabel.setText(constants.enableConsoleAddressOverride()); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml index c03536d..5bf16bc 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml @@ -343,6 +343,7 @@ <ge:StringEntityModelTextBoxEditor ui:field="pmSlotEditor"/> <ge:StringEntityModelTextBoxEditor ui:field="pmOptionsEditor"/> <g:Label ui:field="pmOptionsExplanationLabel" addStyleNames="{style.explanationLabel}"/> + <ge:EntityModelCheckBoxEditor ui:field="pmEncryptOptionsEditor"/> <ge:EntityModelCheckBoxEditor ui:field="pmSecureEditor"/> </g:FlowPanel> <g:FlowPanel ui:field="pmSecondaryPanel"> @@ -354,6 +355,7 @@ <ge:StringEntityModelTextBoxEditor ui:field="pmSecondarySlotEditor"/> <ge:StringEntityModelTextBoxEditor ui:field="pmSecondaryOptionsEditor"/> <g:Label ui:field="pmSecondaryOptionsExplanationLabel" addStyleNames="{style.explanationLabel}"/> + <ge:EntityModelCheckBoxEditor ui:field="pmSecondaryEncryptOptionsEditor"/> <ge:EntityModelCheckBoxEditor ui:field="pmSecondarySecureEditor"/> </g:FlowPanel> <g:HTMLPanel addStyleNames="{style.testPanel}"> diff --git a/packaging/dbscripts/create_views.sql b/packaging/dbscripts/create_views.sql index 0a8ea46..e96a8b7 100644 --- a/packaging/dbscripts/create_views.sql +++ b/packaging/dbscripts/create_views.sql @@ -1408,7 +1408,8 @@ fence_agents.agent_user AS agent_user, fence_agents.agent_password AS agent_password, fence_agents.port AS agent_port, - fence_agents.options AS agent_options + fence_agents.options AS agent_options, + fence_agents.encrypt_options AS agent_encrypt_options FROM vds_groups INNER JOIN vds_static ON vds_groups.vds_group_id = vds_static.vds_group_id diff --git a/packaging/dbscripts/fence_agents_sp.sql b/packaging/dbscripts/fence_agents_sp.sql index 361a843..907c672 100644 --- a/packaging/dbscripts/fence_agents_sp.sql +++ b/packaging/dbscripts/fence_agents_sp.sql @@ -39,7 +39,8 @@ v_type VARCHAR(255) , v_agent_user VARCHAR(255) , v_agent_password text , - v_options VARCHAR(255) , + v_options text , + v_encrypt_options BOOLEAN, v_port INTEGER) RETURNS VOID AS $procedure$ @@ -47,7 +48,7 @@ UPDATE fence_agents SET vds_id = v_vds_id, agent_order = v_agent_order, ip = v_ip, type = v_type, agent_user = v_agent_user, agent_password = v_agent_password, - port = v_port, options = v_options + port = v_port, options = v_options, encrypt_options = v_encrypt_options WHERE id = v_guid; END; $procedure$ LANGUAGE plpgsql; @@ -60,7 +61,8 @@ v_type VARCHAR(255) , v_agent_user VARCHAR(255) , v_agent_password text , - v_options VARCHAR(255) , + v_options text , + v_encrypt_options BOOLEAN, v_port INTEGER) RETURNS VOID AS $procedure$ @@ -74,6 +76,7 @@ agent_user, agent_password, options, + encrypt_options, port) VALUES ( v_id, @@ -84,6 +87,7 @@ v_agent_user, v_agent_password, v_options, + v_encrypt_options, v_port); END; $procedure$ LANGUAGE plpgsql; diff --git a/packaging/dbscripts/upgrade/03_06_0940_add_encrypt_options_fence_agents.sql b/packaging/dbscripts/upgrade/03_06_0940_add_encrypt_options_fence_agents.sql new file mode 100644 index 0000000..4ac7d05 --- /dev/null +++ b/packaging/dbscripts/upgrade/03_06_0940_add_encrypt_options_fence_agents.sql @@ -0,0 +1 @@ +select fn_db_add_column('fence_agents', 'encrypt_options', 'BOOLEAN NOT NULL DEFAULT FALSE'); diff --git a/packaging/dbscripts/upgrade/03_06_0950_change_options_to_text.sql b/packaging/dbscripts/upgrade/03_06_0950_change_options_to_text.sql new file mode 100644 index 0000000..45013f4 --- /dev/null +++ b/packaging/dbscripts/upgrade/03_06_0950_change_options_to_text.sql @@ -0,0 +1 @@ +SELECT fn_db_change_column_type('fence_agents', 'options', 'varchar', 'text'); -- To view, visit https://gerrit.ovirt.org/38392 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I60ff2c8663d68a5fcb8771831d36e15932b24ceb Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
