/** * Copyright (c) 2008-2014 EMC Corporation * All Rights Reserved * * This software contains the intellectual property of EMC Corporation * or is licensed to EMC Corporation from third parties. Use of this * software and the intellectual property contained therein is expressly * limited to the terms and conditions of the License Agreement under which * it is provided by or on behalf of EMC. */ package com.emc.storageos.services.util; import com.emc.storageos.model.property.PropertyConstants; import java.io.Serializable; import java.util.*; /** * Configuration class holding the configuration info * while user install/config/redeploy via the seperate installer. */ public class Configuration implements Serializable { private static final long serialVersionUID = 1L; private String scenario; // Scenario for multicast the cluster configuration private Map<String, String> hwConfig; private LinkedHashMap<String, String> networkIpv4Config; private LinkedHashMap<String, String> networkIpv6Config; private String nodeId; private int nodeCount; private List<String> aliveNodes; private Map<String, String> configMap; public Configuration() { this.hwConfig = new HashMap<String, String>(); this.networkIpv4Config = new LinkedHashMap<String, String>(); this.networkIpv6Config = new LinkedHashMap<String, String>(); this.aliveNodes = new ArrayList<String>(); this.configMap = new HashMap<String, String>(); } public void setScenario(String scenario) { this.scenario = scenario; } public String getScenario() { return this.scenario; } public void setAliveNodes(List<String> nodes) { aliveNodes.clear(); aliveNodes.addAll(nodes); } public List<String> getAliveNodes() { return this.aliveNodes; } /** * Set IPv4 network address map. If the input is display name/label, convert it * to property key. * * @param map the input map */ public void setIpv4NetworkConfig(LinkedHashMap<String, String> map) { networkIpv4Config.clear(); networkIpv4Config.putAll(map); } /** * Set IPv6 network address map. If the input is display name/label, convert it * to property key. * * @param map the input map */ public void setIpv6NetworkConfig(LinkedHashMap<String, String> map) { networkIpv6Config.clear(); networkIpv6Config.putAll(map); } /** * Check if installer is running at install mode. * * @return true if it is at install mode, otherwise false. */ public boolean isInstallMode() { return scenario.equals(PropertyConstants.INSTALL_MODE) ? true : false; } /** * Check if installer is running at config mode. * * @return true if it is at config mode, otherwise false. */ public boolean isConfigMode() { return scenario.equals(PropertyConstants.CONFIG_MODE) ? true : false; } /** * Check if installer is running at redeploy mode. * * @return true if it is at redeploy mode, otherwise false. */ public boolean isRedeployMode() { return scenario.equals(PropertyConstants.REDEPLOY_MODE) ? true : false; } /** * Get ovf property map with property keys. * * @return ovf property map */ public Map<String, String> getOVFProps() { Map<String, String> propMap = new HashMap<String, String>(); propMap.putAll(networkIpv4Config); propMap.putAll(networkIpv6Config); propMap.put(PropertyConstants.NODE_COUNT_KEY, String.valueOf(nodeCount)); return propMap; } public Map<String, String> getHwConfig() { return hwConfig; } public LinkedHashMap<String, String> getNetworkIpv4Config() { return networkIpv4Config; } public LinkedHashMap<String, String> getNetworkIpv6Config() { return networkIpv6Config; } /** * Get network vip string for GUI usage * * @return * "IPv4 VIP" if IPv6 is not configured * "IPv6 VIP" if IPv4 is not configured * "IPv4 VIP/IPv6 VIP" if both IPv4 and IPv6 are configured */ public String getNetworkVip() { final String v4vip = getNetworkIpv4Config().get(PropertyConstants.IPV4_VIP_KEY); final String v6vip = getNetworkIpv6Config().get(PropertyConstants.IPV6_VIP_KEY); if (v4vip.equals(PropertyConstants.IPV4_ADDR_DEFAULT)) { return v6vip; } else if (v6vip.equals(PropertyConstants.IPV6_ADDR_DEFAULT)) { return v4vip; } else { return v4vip + "/" + v6vip; } } public String getNodeId() { return nodeId; } public void setNodeId(String nodeId) { this.nodeId = nodeId; } public int getNodeCount() { return nodeCount; } public void setNodeCount(int nodeCount) { this.nodeCount = nodeCount; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(" ["); builder.append(" scenario: ").append(scenario); builder.append(", aliveNodes: ").append(aliveNodes); builder.append(", nodecount: ").append(nodeCount); builder.append(", nodeId: ").append(nodeId); builder.append(", hwConfig: ").append(hwConfig); builder.append(", ipv4: ").append(networkIpv4Config); builder.append(", ipv6: ").append(networkIpv6Config); builder.append(" ]"); return builder.toString(); } /* * Load key/value property map */ public void loadFromPropertyMap(Map<String, String> propMap) { setNodeId(propMap.get(PropertyConstants.NODE_ID_KEY)); setNodeCount(Integer.parseInt(propMap.get(PropertyConstants.NODE_COUNT_KEY))); getNetworkIpv4Config().put(PropertyConstants.IPV4_VIP_KEY, propMap.get(PropertyConstants.IPV4_VIP_KEY)); getNetworkIpv4Config().put(PropertyConstants.IPV4_NETMASK_KEY, propMap.get(PropertyConstants.IPV4_NETMASK_KEY)); getNetworkIpv4Config().put(PropertyConstants.IPV4_GATEWAY_KEY, propMap.get(PropertyConstants.IPV4_GATEWAY_KEY)); for (int i = 1; i <= getNodeCount(); i++) { String network_ipaddr_key = String.format(PropertyConstants.IPV4_ADDR_KEY, i); getNetworkIpv4Config().put(network_ipaddr_key, propMap.get(network_ipaddr_key)); } getNetworkIpv6Config().put(PropertyConstants.IPV6_VIP_KEY, propMap.get(PropertyConstants.IPV6_VIP_KEY)); getNetworkIpv6Config().put(PropertyConstants.IPV6_PREFIX_KEY, propMap.get(PropertyConstants.IPV6_PREFIX_KEY)); getNetworkIpv6Config().put(PropertyConstants.IPV6_GATEWAY_KEY, propMap.get(PropertyConstants.IPV6_GATEWAY_KEY)); for (int i = 1; i <= getNodeCount(); i++) { String network_ipaddr6_key = String.format(PropertyConstants.IPV6_ADDR_KEY, i); getNetworkIpv6Config().put(network_ipaddr6_key, propMap.get(network_ipaddr6_key)); } } /** * Get configuration properties in a map of key/value pairs * * @return configuration properties in a map */ public Map<String, String> getConfigMap() { setMapProperties(); return configMap; } private void setMapProperties() { configMap.put(PropertyConstants.CONFIG_KEY_SCENARIO, scenario); configMap.put(PropertyConstants.NODE_COUNT_KEY, String.valueOf(nodeCount)); configMap.put(PropertyConstants.NODE_ID_KEY, nodeId); configMap.putAll(hwConfig); configMap.putAll(networkIpv4Config); configMap.putAll(networkIpv6Config); for (String node : aliveNodes) { configMap.put(String.format(PropertyConstants.PROPERTY_KEY_ALIVE_NODE, node), node); } } /** * Set the configuration class variables from the property map * * @param configMap the property map */ public void setConfigMap(Map<String, String> configMap) { this.configMap = configMap; setClassProperties(); } // set class properties from map key/value pairs private void setClassProperties() { this.scenario = configMap.get(PropertyConstants.CONFIG_KEY_SCENARIO); this.nodeCount = Integer.valueOf(configMap.get(PropertyConstants.NODE_COUNT_KEY)); this.nodeId = configMap.get(PropertyConstants.NODE_ID_KEY); for (String key : configMap.keySet()) { if (key.contains("alive_node")) { this.aliveNodes.add(configMap.get(key)); } } this.hwConfig.put(PropertyConstants.PROPERTY_KEY_NETIF, configMap.get(PropertyConstants.PROPERTY_KEY_NETIF)); this.hwConfig.put(PropertyConstants.PROPERTY_KEY_DISK, configMap.get(PropertyConstants.PROPERTY_KEY_DISK)); this.hwConfig.put(PropertyConstants.PROPERTY_KEY_DISK_CAPACITY, configMap.get(PropertyConstants.PROPERTY_KEY_DISK_CAPACITY)); this.hwConfig.put(PropertyConstants.PROPERTY_KEY_CPU_CORE, configMap.get(PropertyConstants.PROPERTY_KEY_CPU_CORE)); this.hwConfig.put(PropertyConstants.PROPERTY_KEY_MEMORY_SIZE, configMap.get(PropertyConstants.PROPERTY_KEY_MEMORY_SIZE)); for (int i = 1; i <= nodeCount; i++) { String ipv4Key = String.format(PropertyConstants.IPV4_ADDR_KEY, i); this.networkIpv4Config.put(ipv4Key, configMap.get(ipv4Key)); String ipv6Key = String.format(PropertyConstants.IPV6_ADDR_KEY, i); this.networkIpv6Config.put(ipv6Key, configMap.get(ipv6Key)); } this.networkIpv4Config.put(PropertyConstants.IPV4_VIP_KEY, configMap.get(PropertyConstants.IPV4_VIP_KEY)); this.networkIpv4Config.put(PropertyConstants.IPV4_NETMASK_KEY, configMap.get(PropertyConstants.IPV4_NETMASK_KEY)); this.networkIpv4Config.put(PropertyConstants.IPV4_GATEWAY_KEY, configMap.get(PropertyConstants.IPV4_GATEWAY_KEY)); this.networkIpv6Config.put(PropertyConstants.IPV6_VIP_KEY, configMap.get(PropertyConstants.IPV6_VIP_KEY)); this.networkIpv6Config.put(PropertyConstants.IPV6_PREFIX_KEY, configMap.get(PropertyConstants.IPV6_PREFIX_KEY)); this.networkIpv6Config.put(PropertyConstants.IPV6_GATEWAY_KEY, configMap.get(PropertyConstants.IPV6_GATEWAY_KEY)); } }