/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.imageservercontroller;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.coordinator.client.service.CoordinatorClient;
import com.emc.storageos.db.client.model.EncryptionProvider;
import com.emc.storageos.model.property.PropertyInfo;
public class ImageServerConf {
private String imageServerIp;
private String imageServerUser;
private String imageServerPassword;
private String tftpbootDir;
private String imageDir;
private String imageServerSecondIp;
private String imageServerHttpPort;
private Integer sshPort = 22;
private Integer sshTimeoutMs = 10000;
private Integer imageImportTimeoutMs = 1800000;
private Integer osInstallTimeoutMs = 3600000;
private Integer jobPollingIntervalMs = 60000;
private boolean valid = false;
private CoordinatorClient coordinator;
private EncryptionProvider encryptionProvider;
private static final Logger log = LoggerFactory.getLogger(ImageServerConf.class);
public ImageServerConf() {
}
public void init() {
PropertyInfo p = coordinator.getPropertyInfo();
setImageServerIp(p.getProperty("image_server_address"));
setImageServerUser(p.getProperty("image_server_username"));
setTftpbootDir(p.getProperty("image_server_tftpboot_directory"));
setImageServerSecondIp(p.getProperty("image_server_os_network_ip"));
setImageServerHttpPort(p.getProperty("image_server_http_port"));
setImageDir(p.getProperty("image_server_image_directory"));
String encryptedPassword = p.getProperty("image_server_encpassword");
try {
setImageServerPassword(encryptionProvider.decrypt(Base64.decodeBase64(encryptedPassword)));
} catch (Exception e) {
log.warn("Can't decrypt image server password, it has to be re-saved");
return;
}
// make sure all required fields are set
if (!StringUtils.isBlank(imageServerIp) && !StringUtils.isBlank(imageServerUser)
&& !StringUtils.isBlank(tftpbootDir) && !StringUtils.isBlank(imageServerSecondIp)
&& !StringUtils.isBlank(imageServerHttpPort) && !StringUtils.isBlank(imageServerPassword)) {
log.info("ImageServerConf appears valid");
valid = true;
}
try {
setSshPort(Integer.valueOf(p.getProperty("image_server_ssh_port")));
setImageImportTimeoutMs(1000 * Integer.valueOf(p.getProperty("image_server_image_import_timeout")));
setJobPollingIntervalMs(1000 * Integer.valueOf(p.getProperty("image_server_job_polling_interval")));
setOsInstallTimeoutMs(1000 * Integer.valueOf(p.getProperty("image_server_os_install_timeout")));
setSshTimeoutMs(1000 * Integer.valueOf(p.getProperty("image_server_ssh_timeout")));
} catch (NumberFormatException e) {
// ignoring this, the default values will be used
log.warn("NumberFormatException when parsing image server values: " + e.getMessage());
}
}
public void setCoordinator(CoordinatorClient coordinator) {
this.coordinator = coordinator;
}
public void setEncryptionProvider(EncryptionProvider encryptionProvider) {
this.encryptionProvider = encryptionProvider;
}
@Override
public String toString() {
return String.format("ip: %s, user: %s, sshPort: %s, tftpboot: %s, imageDir: %s, second ip: %s, port: %s, "
+ "sshTimeoutMs: %s, imageImportTimeoutMs: %s, osInstallTimeoutMs: %s, jobPollingIntervalMs: %s",
imageServerIp, imageServerUser, sshPort, tftpbootDir, imageDir, imageServerSecondIp,
imageServerHttpPort, sshTimeoutMs, imageImportTimeoutMs, osInstallTimeoutMs, jobPollingIntervalMs);
}
public String getImageServerIp() {
return imageServerIp;
}
public void setImageServerIp(String imageServerIp) {
this.imageServerIp = imageServerIp;
}
public String getImageServerUser() {
return imageServerUser;
}
public void setImageServerUser(String imageServerUser) {
this.imageServerUser = imageServerUser;
}
public String getImageServerPassword() {
return imageServerPassword;
}
public void setImageServerPassword(String imageServerPassword) {
this.imageServerPassword = imageServerPassword;
}
public String getTftpbootDir() {
return tftpbootDir;
}
public void setTftpbootDir(String tftpbootDir) {
String s = tftpbootDir.trim();
if (!s.endsWith("/")) {
this.tftpbootDir = s + "/";
} else {
this.tftpbootDir = s;
}
}
public String getImageDir() {
return imageDir;
}
public void setImageDir(String imageDir) {
String s = imageDir.trim();
if (s.length() > 0 && !s.endsWith("/")) {
this.imageDir = s + "/";
} else {
this.imageDir = s;
}
}
public String getImageServerSecondIp() {
return imageServerSecondIp;
}
public void setImageServerSecondIp(String imageServerSecondIp) {
this.imageServerSecondIp = imageServerSecondIp;
}
public String getImageServerHttpPort() {
return imageServerHttpPort;
}
public void setImageServerHttpPort(String imageServerHttpPort) {
this.imageServerHttpPort = imageServerHttpPort;
}
public Integer getSshTimeoutMs() {
return sshTimeoutMs;
}
public void setSshTimeoutMs(Integer sshTimeoutMs) {
this.sshTimeoutMs = sshTimeoutMs;
}
public Integer getImageImportTimeoutMs() {
return imageImportTimeoutMs;
}
public void setImageImportTimeoutMs(Integer imageImportTimeoutMs) {
this.imageImportTimeoutMs = imageImportTimeoutMs;
}
public Integer getOsInstallTimeoutMs() {
return osInstallTimeoutMs;
}
public void setOsInstallTimeoutMs(Integer osInstallTimeoutMs) {
this.osInstallTimeoutMs = osInstallTimeoutMs;
}
public Integer getJobPollingIntervalMs() {
return jobPollingIntervalMs;
}
public void setJobPollingIntervalMs(Integer jobPollingIntervalMs) {
this.jobPollingIntervalMs = jobPollingIntervalMs;
}
public Integer getSshPort() {
return sshPort;
}
public void setSshPort(Integer sshPort) {
this.sshPort = sshPort;
}
public boolean isValid() {
return valid;
}
}