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