Selvasundaram has uploaded a new change for review.

Change subject: engine: Configure passwordless ssh setup between the node and 
remote server
......................................................................

engine: Configure passwordless ssh setup between the node and remote server

  - Gluster geo-replication start feature requires the passwordless
    ssh setup between the gluster node and the remote server

Change-Id: I1843baa3a8d840692e2ce4c4b76a16fad2c26db4
Signed-off-by: Selvasundaram <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/ConfigPasswordlessSshCommand.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/ConfigPasswordlessSshCommandTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/ConfigPasswordlessSshParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/ConfigPasswordlessSshVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java
21 files changed, 438 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/53/8453/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/ConfigPasswordlessSshCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/ConfigPasswordlessSshCommand.java
new file mode 100644
index 0000000..60f8a3d
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/ConfigPasswordlessSshCommand.java
@@ -0,0 +1,130 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.core.bll.CommandBase;
+import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
+import org.ovirt.engine.core.bll.utils.ClusterUtils;
+import org.ovirt.engine.core.bll.utils.PermissionSubject;
+import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.VdcObjectType;
+import 
org.ovirt.engine.core.common.action.gluster.ConfigPasswordlessSshParameters;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VDSStatus;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import 
org.ovirt.engine.core.common.vdscommands.gluster.PasswordlessSshVDSParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.VdcBllMessages;
+import org.ovirt.engine.core.dao.VdsDAO;
+
+/**
+ * BLL command to Configure passwordless ssh
+ */
+@NonTransactiveCommandAttribute
+public class ConfigPasswordlessSshCommand extends 
CommandBase<ConfigPasswordlessSshParameters> {
+
+    private static final long serialVersionUID = -4950819906714292666L;
+
+    private AuditLogType errorType = 
AuditLogType.PASSWORDLESS_SSH_CONFIG_FAILED;
+
+    public ConfigPasswordlessSshCommand(ConfigPasswordlessSshParameters 
params) {
+        super(params);
+    }
+
+    @Override
+    protected void setActionMessageParameters() {
+        addCanDoActionMessage(VdcBllMessages.VAR__ACTION__SETUP);
+        addCanDoActionMessage(VdcBllMessages.VAT__TYPE__PASSWORDLESS_SSH);
+    }
+
+    @Override
+    protected boolean canDoAction() {
+        if (!super.canDoAction()) {
+            return false;
+        }
+        VDS server = getServer(getParameters().getServerId());
+        if (server == null) {
+            addCanDoActionMessage(VdcBllMessages.VDS_INVALID_SERVER_ID);
+            return false;
+        }
+        if (server.getstatus() != VDSStatus.Up) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_SERVER_IS_NOT_UP);
+            return false;
+        }
+
+        if (StringUtils.isEmpty(getParameters().getRemoteServer())) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_REMOTE_SERVER_REQUIRED);
+            return false;
+        }
+
+        if (StringUtils.isEmpty(getParameters().getRemoteServerFingerprint())) 
{
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_INVALID_FINGERPRINT);
+            return false;
+        }
+
+        if (StringUtils.isEmpty(getParameters().getUserName())) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_USERNAME_REQUIRED);
+            return false;
+        }
+        if (StringUtils.isEmpty(getParameters().getPassword())) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_PASSWORD_REQUIRED);
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    protected void executeCommand() {
+        VDSReturnValue returnValue =
+                runVdsCommand(
+                        VDSCommandType.ConfigPasswordlessSsh,
+                        new 
PasswordlessSshVDSParameters(getParameters().getServerId(),
+                                getParameters().getRemoteServer(),
+                                getParameters().getRemoteServerFingerprint(),
+                                getParameters().getUserName(),
+                                getParameters().getPassword()));
+        setSucceeded(returnValue.getSucceeded());
+        if (!getSucceeded()) {
+            handleVdsError(AuditLogType.PASSWORDLESS_SSH_CONFIG_FAILED, 
returnValue.getVdsError().getMessage());
+            return;
+        }
+    }
+
+    protected void handleVdsError(AuditLogType errType, String error) {
+        errorType = errType;
+        getReturnValue().getExecuteFailedMessages().add(error);
+        getReturnValue().getFault().setMessage(error);
+    }
+
+    @Override
+    public AuditLogType getAuditLogTypeValue() {
+        if (getSucceeded()) {
+            return AuditLogType.PASSWORDLESS_SSH_CONFIG;
+        } else {
+            return errorType == null ? 
AuditLogType.PASSWORDLESS_SSH_CONFIG_FAILED : errorType;
+        }
+    }
+
+    @Override
+    public List<PermissionSubject> getPermissionCheckSubjects() {
+        return Collections.singletonList(
+                new PermissionSubject(
+                        getParameters().getServerId(),
+                        VdcObjectType.PasswordlessSshConfig,
+                        getActionType().getActionGroup()));
+    }
+
+    public VDS getServer(Guid serverId) {
+        return getVdsDao().get(serverId);
+    }
+
+    private VdsDAO getVdsDao() {
+        return ClusterUtils.getInstance().getVdsDao();
+    }
+
+}
+
+
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/ConfigPasswordlessSshCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/ConfigPasswordlessSshCommandTest.java
new file mode 100644
index 0000000..4b26271
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/ConfigPasswordlessSshCommandTest.java
@@ -0,0 +1,132 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.runners.MockitoJUnitRunner;
+import 
org.ovirt.engine.core.common.action.gluster.ConfigPasswordlessSshParameters;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VDSStatus;
+import org.ovirt.engine.core.compat.Guid;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ConfigPasswordlessSshCommandTest {
+
+    private Guid CLUSTER_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
+    private Guid upServerId = new Guid("8bc6f108-c0ef-43ab-ba20-ec41107220f5");
+    private Guid downServerId = new 
Guid("b2cb2f73-fab3-4a42-93f0-d5e4c069a43e");
+    private String remoteServer = "mytestserver";
+    private String remoteServerFingerprint = 
"20:f0:de:0c:db:44:b6:6d:09:a4:fb:80:19:98:ce:2e";
+    private String userName = "root";
+    private String password = "r2h4e6v";
+
+    /**
+     * The command under test.
+     */
+    private ConfigPasswordlessSshCommand cmd;
+
+    private void prepareMocks(ConfigPasswordlessSshCommand command) {
+        doReturn(getVds(upServerId)).when(command).getServer(upServerId);
+        doReturn(getVds(downServerId)).when(command).getServer(downServerId);
+        doReturn(getVds(null)).when(command).getServer(null);
+    }
+
+    private VDS getVds(Guid serverId) {
+        if (serverId == null) {
+            return null;
+        }
+        VDS vds = new VDS();
+        vds.setId(Guid.NewGuid());
+        vds.setvds_name("gfs1");
+        vds.setvds_group_id(CLUSTER_ID);
+        if (serverId.equals(upServerId)) {
+            vds.setstatus(VDSStatus.Up);
+        } else {
+            vds.setstatus(VDSStatus.Down);
+        }
+        return vds;
+    }
+
+    @Test
+    public void canDoActionSucceeds() {
+        cmd = spy(new ConfigPasswordlessSshCommand(new 
ConfigPasswordlessSshParameters(upServerId,
+                remoteServer,
+                remoteServerFingerprint,
+                userName,
+                password)));
+        prepareMocks(cmd);
+        assertTrue(cmd.canDoAction());
+    }
+
+    @Test
+    public void canDoActionFailsOnDownServer() {
+        cmd = spy(new ConfigPasswordlessSshCommand(new 
ConfigPasswordlessSshParameters(downServerId,
+                remoteServer,
+                remoteServerFingerprint,
+                userName,
+                password)));
+        prepareMocks(cmd);
+        assertFalse(cmd.canDoAction());
+    }
+
+    @Test
+    public void canDoActionFailsOnNoRemoteServer() {
+        cmd = spy(new ConfigPasswordlessSshCommand(new 
ConfigPasswordlessSshParameters(upServerId,
+                "",
+                remoteServerFingerprint,
+                userName,
+                password)));
+        prepareMocks(cmd);
+        assertFalse(cmd.canDoAction());
+    }
+
+    @Test
+    public void canDoActionFailsOnNoFingerprint() {
+        cmd = spy(new ConfigPasswordlessSshCommand(new 
ConfigPasswordlessSshParameters(upServerId,
+                remoteServer,
+                "",
+                userName,
+                password)));
+        prepareMocks(cmd);
+        assertFalse(cmd.canDoAction());
+    }
+
+    @Test
+    public void canDoActionFailsOnNoUsername() {
+        cmd = spy(new ConfigPasswordlessSshCommand(new 
ConfigPasswordlessSshParameters(upServerId,
+                remoteServer,
+                remoteServerFingerprint,
+                "",
+                password)));
+        prepareMocks(cmd);
+        assertFalse(cmd.canDoAction());
+    }
+
+    @Test
+    public void canDoActionFailsOnNoPassword() {
+        cmd = spy(new ConfigPasswordlessSshCommand(new 
ConfigPasswordlessSshParameters(upServerId,
+                remoteServer,
+                remoteServerFingerprint,
+                userName,
+                "")));
+        prepareMocks(cmd);
+        assertFalse(cmd.canDoAction());
+    }
+
+    @Test
+    public void canDoActionFailsOnNullUpServer() {
+        cmd = spy(new ConfigPasswordlessSshCommand(new 
ConfigPasswordlessSshParameters(null,
+                remoteServer,
+                remoteServerFingerprint,
+                userName,
+                "")));
+        prepareMocks(cmd);
+        assertFalse(cmd.canDoAction());
+    }
+
+}
+
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
index 7aae420..caaaae6 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
@@ -206,6 +206,8 @@
     GLUSTER_HOST_REMOVE_FAILED(4021),
     GLUSTER_HOST_ADD_FAILED(4404),
     GLUSTER_SERVERS_LIST_FAILED(4405),
+    PASSWORDLESS_SSH_CONFIG(4406),
+    PASSWORDLESS_SSH_CONFIG_FAILED(4407),
 
     USER_VDS_RESTART(41),
     USER_FAILED_VDS_RESTART(107),
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java
index 8cdf3e5..9e3ac96 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcEventNotificationUtils.java
@@ -58,6 +58,8 @@
         AddEventNotificationEntry(EventNotificationEntity.GlusterVolume, 
AuditLogType.GLUSTER_VOLUME_REPLACE_BRICK_START_FAILED);
         AddEventNotificationEntry(EventNotificationEntity.Host, 
AuditLogType.GLUSTER_HOST_ADD_FAILED);
         AddEventNotificationEntry(EventNotificationEntity.Host, 
AuditLogType.GLUSTER_HOST_REMOVE_FAILED);
+        AddEventNotificationEntry(EventNotificationEntity.Host, 
AuditLogType.PASSWORDLESS_SSH_CONFIG);
+        AddEventNotificationEntry(EventNotificationEntity.Host, 
AuditLogType.PASSWORDLESS_SSH_CONFIG_FAILED);
 
         // DWH
         AddEventNotificationEntry(EventNotificationEntity.DWH, 
AuditLogType.DWH_STOPPED);
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
index b61d1d9..6cfa613 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcObjectType.java
@@ -28,7 +28,8 @@
     GlusterVolume(18, "Gluster Volume"),
     Disk(19, "Disk"),
     VmInterface(20, "VmInterface"),
-    Snapshot(21, "Snapshot");
+    Snapshot(21, "Snapshot"),
+    PasswordlessSshConfig(22, "Passwordless SSH Configuration");
 
     private int value;
     private String vdcObjectTranslationVal;
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/ConfigPasswordlessSshParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/ConfigPasswordlessSshParameters.java
new file mode 100644
index 0000000..ca68c98
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/ConfigPasswordlessSshParameters.java
@@ -0,0 +1,78 @@
+package org.ovirt.engine.core.common.action.gluster;
+
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.compat.Guid;
+
+/**
+ * Parameter class with Gluster Server Id, Remote server hostname/ip, Remote 
server fingerprint, user name and password
+ * as parameters. <br>
+ * This will be used by Setup Passwordless SSH command. <br>
+ */
+public class ConfigPasswordlessSshParameters extends VdcActionParametersBase {
+
+    private static final long serialVersionUID = 8114635099405441727L;
+
+    private Guid serverId;
+
+    private String remoteServer;
+
+    private String remoteServerFingerprint;
+
+    private String userName;
+
+    private String password;
+
+    public ConfigPasswordlessSshParameters(Guid serverId,
+            String remoteServer,
+            String remoteServerFingerprint,
+            String userName,
+            String password) {
+        setServerId(serverId);
+        setRemoteServer(remoteServer);
+        setRemoteServerFingerprint(remoteServerFingerprint);
+        setUserName(userName);
+        setPassword(password);
+    }
+
+    public Guid getServerId() {
+        return serverId;
+    }
+
+    public void setServerId(Guid serverId) {
+        this.serverId = serverId;
+    }
+
+    public String getRemoteServer() {
+        return remoteServer;
+    }
+
+    public void setRemoteServer(String remoteServer) {
+        this.remoteServer = remoteServer;
+    }
+
+    public String getRemoteServerFingerprint() {
+        return remoteServerFingerprint;
+    }
+
+    public void setRemoteServerFingerprint(String remoteServerFingerprint) {
+        this.remoteServerFingerprint = remoteServerFingerprint;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+}
+
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java
index cdf988b..fd00de2 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/ActionGroup.java
@@ -84,6 +84,12 @@
     CREATE_GLUSTER_VOLUME(1000, RoleType.ADMIN, VdcObjectType.GlusterVolume, 
true, ApplicationMode.GlusterOnly),
     MANIPULATE_GLUSTER_VOLUME(1001, RoleType.ADMIN, 
VdcObjectType.GlusterVolume, true, ApplicationMode.GlusterOnly),
     DELETE_GLUSTER_VOLUME(1002, RoleType.ADMIN, VdcObjectType.GlusterVolume, 
true, ApplicationMode.GlusterOnly),
+    PASSWORDLESS_SSH_CONFIG(
+            1003,
+            RoleType.ADMIN,
+            VdcObjectType.PasswordlessSshConfig,
+            true,
+            ApplicationMode.GlusterOnly),
 
     // Disks action groups
     CREATE_DISK(1100, RoleType.USER, VdcObjectType.Disk, false, 
ApplicationMode.VirtOnly),
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
index 8c865a2..64ec596 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
@@ -343,6 +343,9 @@
     SshConnectionFailed(4501),
     SshFingerprintMatchFailed(4502),
     SshAuthFailed(4503),
+    SshPasswordAuthFailed(4504),
+    SshRsaPubKeyGenerationFailed(4505),
+    SshSetupFailed(4506),
 
 
     UnicodeArgumentException(4900),
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
index 0982832..49e1cbb 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
@@ -139,6 +139,7 @@
     GlusterHostAdd("org.ovirt.engine.core.vdsbroker.gluster"),
     GlusterServersList("org.ovirt.engine.core.vdsbroker.gluster"),
     GetPasswordlessSshSetupStatus("org.ovirt.engine.core.vdsbroker.gluster"),
+    ConfigPasswordlessSsh("org.ovirt.engine.core.vdsbroker.gluster"),
     ;
 
     String packageName;
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
index ea944ad..6ba87e9 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java
@@ -20,6 +20,7 @@
     VAR__TYPE__VM_DISK,
     VAR__TYPE__BOOKMARK,
     VAR__TYPE__VM_TICKET,
+    VAT__TYPE__PASSWORDLESS_SSH,
 
     // Gluster types
     VAR__TYPE__GLUSTER_VOLUME,
@@ -655,6 +656,12 @@
     VDS_CANNOT_REMOVE_HOST_HAVING_GLUSTER_VOLUME,
     ACTION_TYPE_FAILED_NO_GLUSTER_HOST_TO_PEER_PROBE,
     MIGRATE_PAUSED_VM_IS_UNSUPPORTED,
+    ACTION_TYPE_FAILED_REMOTE_SERVER_REQUIRED,
+    ACTION_TYPE_FAILED_INVALID_FINGERPRINT,
+    ACTION_TYPE_FAILED_USERNAME_REQUIRED,
+    ACTION_TYPE_FAILED_PASSWORD_REQUIRED,
+    ACTION_TYPE_FAILED_SERVER_IS_NOT_UP,
+    ACTION_TYPE_FAILED_INVALID_REMOTE_HOSTNAME,
 
     VM_INTERFACE_NOT_EXIST,
     ACTION_TYPE_FAILED_CANNOT_REMOVE_ACTIVE_DEVICE,
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
index f6863bb..273c646 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java
@@ -82,6 +82,8 @@
         mSeverities.put(AuditLogType.GLUSTER_VOLUME_REPLACE_BRICK_START, 
AuditLogSeverity.NORMAL);
         
mSeverities.put(AuditLogType.GLUSTER_VOLUME_REPLACE_BRICK_START_FAILED, 
AuditLogSeverity.ERROR);
         mSeverities.put(AuditLogType.GLUSTER_SERVERS_LIST_FAILED, 
AuditLogSeverity.ERROR);
+        mSeverities.put(AuditLogType.PASSWORDLESS_SSH_CONFIG, 
AuditLogSeverity.NORMAL);
+        mSeverities.put(AuditLogType.PASSWORDLESS_SSH_CONFIG_FAILED, 
AuditLogSeverity.ERROR);
     }
 
     private static void initDefaultSeverities() {
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index 1f6c0c3..3071197 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -791,3 +791,8 @@
 ACTION_TYPE_FAILED_NETWORK_INTERFACE_MAC_INVALID=Cannot ${action} ${type}. The 
Network Interface ${IfaceName} has an invalid MAC address ${MacAddress}. MAC 
address must be in format "HH:HH:HH:HH:HH:HH" where H is a hexadecimal 
character (either a digit or A-F, case is insignificant).
 MIGRATE_PAUSED_VM_IS_UNSUPPORTED=Migrating a VM in paused status is 
unsupported.
 VDS_GROUP_ENABLING_BOTH_VIRT_AND_GLUSTER_SERVICES_NOT_ALLOWED=Cannot ${action} 
${type}. Enabling both Virt and Gluster services is not allowed.
+ACTION_TYPE_FAILED_SERVER_IS_NOT_UP=Cannot ${action} ${type}. Server is not in 
Up state.
+ACTION_TYPE_FAILED_REMOTE_SERVER_REQUIRED=Cannot ${action} ${type}. Remote 
server IP/hostname is required.
+ACTION_TYPE_FAILED_INVALID_FINGERPRINT=Cannot ${action} ${type}. Invalid 
fingerprint key.
+ACTION_TYPE_FAILED_USERNAME_REQUIRED=Cannot ${action} ${type}. Username is 
required.
+ACTION_TYPE_FAILED_PASSWORD_REQUIRED=Cannot ${action} ${type}. Password is 
required.
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
index d31023a..ecd4f5d 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
@@ -354,3 +354,6 @@
 SshConnectionFailed=SSH Connection failed.
 SshFingerprintMatchFailed=Host Fingerprint key mismatch.
 SshAuthFailed=SSH RSA key Authentication Failed.
+SshPasswordAuthFailed=SSH Password Authentication failed. 
+SshRsaPubKeyGenerationFailed=SSH RSA key generation failed.
+SshSetupFailed=Passwordless SSH setup failed
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
index 9031ed9..94f4422 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
@@ -80,6 +80,7 @@
     CREATE_GLUSTER_VOLUME,
     MANIPULATE_GLUSTER_VOLUME,
     DELETE_GLUSTER_VOLUME,
+    PASSWORDLESS_SSH_CONFIG,
 
     // Disks action groups
     CREATE_DISK,
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
index d75c4c9..ce5710d 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
@@ -152,6 +152,8 @@
             return PermitType.PORT_MIRRORING;
         case LOGIN:
             return PermitType.LOGIN;
+        case PASSWORDLESS_SSH_CONFIG:
+            return PermitType.PASSWORDLESS_SSH_CONFIG;
         default:
             return null;
         }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/ConfigPasswordlessSshVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/ConfigPasswordlessSshVDSCommand.java
new file mode 100644
index 0000000..602f547
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/ConfigPasswordlessSshVDSCommand.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.core.vdsbroker.gluster;
+
+import 
org.ovirt.engine.core.common.vdscommands.gluster.PasswordlessSshVDSParameters;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.VdsBrokerCommand;
+
+public class ConfigPasswordlessSshVDSCommand<P extends 
PasswordlessSshVDSParameters> extends VdsBrokerCommand<P> {
+
+    public ConfigPasswordlessSshVDSCommand(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void ExecuteVdsBrokerCommand() {
+        status =
+                
getBroker().setupSshConnection(getParameters().getRemoteServer(),
+                        getParameters().getFingerprint(),
+                        getParameters().getUserName(),
+                        getParameters().getPassword());
+
+        ProceedProxyReturnValue();
+    }
+}
+
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
index c2b130c..ead6138 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BrokerCommandBase.java
@@ -173,6 +173,9 @@
         case SshConnectionFailed:
         case SshFingerprintMatchFailed:
         case SshAuthFailed:
+        case SshPasswordAuthFailed:
+        case SshRsaPubKeyGenerationFailed:
+        case SshSetupFailed:
             if (this instanceof IrsBrokerCommand) {
                 outEx = new 
IrsOperationFailedNoFailoverException(getReturnStatus().mMessage);
             } else {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
index 46b8318..91f49af 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
@@ -238,4 +238,9 @@
 
     StatusOnlyReturnForXmlRpc validateSshConnection(String 
remoteServerHostOrIp, String fingerprint, String username);
 
+    StatusOnlyReturnForXmlRpc setupSshConnection(String remoteServerHostOrIp,
+            String fingerprint,
+            String username,
+            String password);
+
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
index 9460b7f..cd131dc 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
@@ -233,4 +233,9 @@
 
     public Map<String, Object> validateSshConnection(String 
serverHostnameOrIp, String fingerprint, String userName);
 
+    public Map<String, Object> setupSshConnection(String 
remoteServerHostnameOrIp,
+            String fingerprint,
+            String username,
+            String password);
+
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
index e3d3885..15ee47d 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
@@ -1162,4 +1162,20 @@
             throw new XmlRpcRunTimeException(ute);
         }
     }
+
+    @Override
+    public StatusOnlyReturnForXmlRpc setupSshConnection(String 
remoteServerHostnameOrIp,
+            String fingerprint,
+            String username,
+            String password) {
+        try {
+            Map<String, Object> xmlRpcReturnValue =
+                    vdsServer.setupSshConnection(remoteServerHostnameOrIp, 
fingerprint, username, password);
+            StatusOnlyReturnForXmlRpc wrapper = new 
StatusOnlyReturnForXmlRpc(xmlRpcReturnValue);
+            return wrapper;
+        } catch (UndeclaredThrowableException ute) {
+            throw new XmlRpcRunTimeException(ute);
+        }
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java
index 5ac1f75..e1709b0 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java
@@ -701,4 +701,14 @@
 
     @DefaultStringValue("SSH RSA key Authentication Failed.")
     String SshAuthFailed();
+
+    @DefaultStringValue("SSH Password Authentication failed.")
+    String SshPasswordAuthFailed();
+
+    @DefaultStringValue("SSH RSA key generation failed.")
+    String SshRsaPubKeyGenerationFailed();
+
+    @DefaultStringValue("Passwordless SSH setup failed")
+    String SshSetupFailed();
+
 }


--
To view, visit http://gerrit.ovirt.org/8453
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1843baa3a8d840692e2ce4c4b76a16fad2c26db4
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Selvasundaram <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to