/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.api.service.impl.resource.utils;
import java.net.URI;
import java.util.List;
import javax.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.AuthnProvider;
import com.emc.storageos.db.client.model.Host;
import com.emc.storageos.db.client.model.Host.HostType;
import com.emc.storageos.model.host.HostParam;
import com.emc.storageos.util.KerberosUtil;
import com.iwave.ext.windows.WindowsSystemWinRM;
import com.iwave.ext.windows.winrm.WinRMTarget;
public class WindowsHostConnectionValidator extends HostConnectionValidator {
protected final static Logger log = LoggerFactory.getLogger(WindowsHostConnectionValidator.class);
private DbClient dbClient;
@PostConstruct
private void init() {
addValidator(this);
}
@Override
public HostType getType() {
return HostType.Windows;
}
@Override
public boolean validateConnection(HostParam hostParam, Host existingHost) {
HostType hostType = HostType.valueOf(hostParam.getType());
if (getType().equals(hostType) == false) {
throw new IllegalStateException(String.format("Invalid HostType [%s]", hostParam.getType()));
}
String password = hostParam.getPassword();
if (password == null && existingHost != null) {
password = existingHost.getPassword();
}
List<URI> authProviderIds = dbClient.queryByType(AuthnProvider.class, true);
List<AuthnProvider> authProviders = dbClient.queryObject(AuthnProvider.class, authProviderIds);
KerberosUtil.initializeKerberos(authProviders);
WinRMTarget target = new WinRMTarget(hostParam.getHostName(), hostParam.getPortNumber(), hostParam.getUseSsl(),
hostParam.getUserName(),
password);
WindowsSystemWinRM cli = new WindowsSystemWinRM(target);
try {
cli.listDiskDrives();
return true;
} catch (Exception e) {
log.error(String.format("Error Validating Host %s", hostParam.getName()), e);
}
return false;
}
public void setDbClient(DbClient dbClient) {
this.dbClient = dbClient;
}
}