/* ** Copyright [2012-2013] [Megam Systems] ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ package org.megam.chef.cloudformatters; /** * <p>ProfitBricksCloudFormatter class.</p> * * @author ram * @version $Id: $Id */ import static org.megam.chef.parser.ComputeInfo.CPUS; import static org.megam.chef.parser.ComputeInfo.FLAVOR; import static org.megam.chef.parser.ComputeInfo.HDD; import static org.megam.chef.parser.ComputeInfo.IDENTITYFILE; import static org.megam.chef.parser.ComputeInfo.IMAGE; import static org.megam.chef.parser.ComputeInfo.RAM; import static org.megam.chef.parser.ComputeInfo.SSHPUBLOCATION; import static org.megam.chef.parser.ComputeInfo.SSHUSER; import static org.megam.chef.parser.ComputeInfo.TENANTID; import static org.megam.chef.parser.ComputeInfo.GROUPS; import static org.megam.chef.parser.ComputeInfo.SSHKEY; import java.util.ArrayList; import java.util.Formatter; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; public class ProfitBricksCloudFormatter implements OutputCloudFormatter { private final Map<String, String> pbArgsStub = new HashMap<String, String>(); private Map<String, String> inputArgs; private List<String> unsatifiedReason = new ArrayList<String>(); private String cc = ""; private String email = ""; private String bucket = ""; private String req_type = ""; /* * There is no flavor in profit bricks. We decided to send it in this format * as FLAVOR as cpus=1,ram=1024,hdd-size=20 */ /** * <p>Constructor for ProfitBricksCloudFormatter.</p> * * @param tempArgs a {@link java.util.Map} object. * @param req_type a {@link java.lang.String} object. */ public ProfitBricksCloudFormatter(Map<String, String> tempArgs, String req_type) { this.inputArgs = tempArgs; this.req_type = req_type; breakFlavor(); this.pbArgsStub.put(IMAGE, "--image-name"); this.pbArgsStub.put(TENANTID, "--data-center"); this.pbArgsStub.put(SSHUSER, "-x"); this.pbArgsStub.put(CPUS, "--cpus"); this.pbArgsStub.put(RAM, "--ram"); this.pbArgsStub.put(HDD, "--hdd-size"); if (!req_type.equals("delete")) { this.pbArgsStub.put(IDENTITYFILE, "--identity-file"); } this.pbArgsStub.put(SSHPUBLOCATION, "--public-key-file"); this.pbArgsStub.put(GROUPS, "-S"); this.pbArgsStub.put(SSHKEY, "--image-password"); } // we expect to see cpus=1,ram=1024,hdd-size=20 private void breakFlavor() { if (inputArgs.containsKey(FLAVOR)) { String[] splitFlr = inputArgs.get(FLAVOR).split(","); if (splitFlr.length >= 3) { for (int i = 0; i < splitFlr.length; i++) { StringTokenizer eachFlavor = new StringTokenizer( splitFlr[i], "="); inputArgs.put(eachFlavor.nextToken(), eachFlavor.nextToken()); } } } } private String getImage() { return inputArgs.get(IMAGE); } private String getCPUs() { return inputArgs.get(CPUS); } private String getRAM() { return inputArgs.get(RAM); } private String getHDD() { return inputArgs.get(HDD); } private String getDatacenter() { return inputArgs.get(TENANTID); } private String getIdentityFile() { // return inputArgs.get(IDENTITYFILE); if (req_type.equals("delete")) { return ""; } else { return parserwithoutBucket(inputArgs.get(SSHPUBLOCATION)) + ".key"; } } private String getPublicIdentityFile() { // return inputArgs.get(SSHPUBLOCATION); return parserwithoutBucket(inputArgs.get(SSHPUBLOCATION)) + ".pub"; } private boolean notNull(String str) { if (inputArgs.containsKey(str)) { return true; } else { unsatifiedReason.add(str + " is Missing"); } return false; } /** * <p>parserwithoutBucket.</p> * * @param str a {@link java.lang.String} object. * @return a {@link java.lang.String} object. */ public String parserwithoutBucket(String str) { if (str.length() > 0) { int lst = str.lastIndexOf("/"); cc = str.substring(lst); str = str.replace(str.substring(lst), ""); email = str.substring(str.lastIndexOf("/")); str = str.replace(str.substring(str.lastIndexOf("/")), ""); bucket = str.substring(str.lastIndexOf("/") + 1); return bucket + email + cc; } else { return str; } } /** {@inheritDoc} */ @Override public Map<String, String> format() { Map<String, String> pbArgsValPairs = new HashMap<String, String>(); for (Map.Entry<String, String> entry : inputArgs.entrySet()) { if (pbArgsStub.containsKey(entry.getKey())) { if (entry.getKey().equals(IDENTITYFILE)) { pbArgsValPairs.put(pbArgsStub.get(entry.getKey()), getIdentityFile()); } else if (entry.getKey().equals(SSHPUBLOCATION)) { pbArgsValPairs.put(pbArgsStub.get(entry.getKey()), getPublicIdentityFile()); } else { pbArgsValPairs.put(pbArgsStub.get(entry.getKey()), entry.getValue()); } } } return pbArgsValPairs; } /** * <p>ok.</p> * * @return a boolean. */ public boolean ok() { boolean isOk = true; isOk = isOk && validate(IMAGE, getImage()); isOk = isOk && validate(CPUS, getCPUs()); isOk = isOk && validate(RAM, getRAM()); isOk = isOk && validate(HDD, getHDD()); isOk = isOk && validate(TENANTID, getDatacenter()); isOk = isOk && validate(IDENTITYFILE, getIdentityFile()); isOk = isOk && validate(SSHPUBLOCATION, getPublicIdentityFile()); return isOk; } /** * <p>validate.</p> * * @param key a {@link java.lang.String} object. * @param value a {@link java.lang.String} object. * @return a boolean. */ public boolean validate(String key, String value) { for (Map.Entry<String, String> entry : inputArgs.entrySet()) { if (entry.getKey().equals(key)) { if (entry.getValue().equals(value)) { return true; } else { unsatifiedReason.add(key + " is not valid "); } } } return false; } /** * <p>inputAvailable.</p> * * @return a boolean. */ public boolean inputAvailable() { boolean isAvailable = true; isAvailable = isAvailable && notNull(IMAGE); isAvailable = isAvailable && notNull(CPUS); isAvailable = isAvailable && notNull(RAM); isAvailable = isAvailable && notNull(HDD); isAvailable = isAvailable && notNull(TENANTID); isAvailable = isAvailable && notNull(IDENTITYFILE); isAvailable = isAvailable && notNull(SSHPUBLOCATION); return isAvailable; } /** * <p>name.</p> * * @return a {@link java.lang.String} object. */ public String name() { return "pb:"; } /** * <p>getReason.</p> * * @return a {@link java.util.List} object. */ public List<String> getReason() { return unsatifiedReason; } /** * <p>toString.</p> * * @return a {@link java.lang.String} object. */ public String toString() { StringBuilder strbd = new StringBuilder(); final Formatter formatter = new Formatter(strbd); for (Map.Entry<String, String> entry : inputArgs.entrySet()) { formatter.format("%10s = %s%n", entry.getKey(), entry.getValue()); } formatter.close(); return strbd.toString(); } }