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

Reply via email to