2 * Copyright IBM Corporation, 2013. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.samples.loadbalancer;
10 import java.util.HashMap;
11 import java.util.HashSet;
14 import org.opendaylight.controller.samples.loadbalancer.entities.Pool;
15 import org.opendaylight.controller.samples.loadbalancer.entities.PoolMember;
16 import org.opendaylight.controller.samples.loadbalancer.entities.VIP;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
21 * This class represents a configuration manager for the Load Balancer service.
22 * This class is responsible for managing(store/update/delete) the load balancer
23 * configuration that it receives through REST APIs or from any other applications
24 * present in the controller.
27 public class ConfigManager implements IConfigManager{
32 private static final Logger cmLogger = LoggerFactory.getLogger(ConfigManager.class);
35 * All the available VIPs
37 private HashMap<String,VIP> vips = new HashMap<String,VIP>();
40 * All the available Pools
42 private HashMap<String,Pool> pools = new HashMap<String,Pool>();
44 public ConfigManager(){
48 public boolean vipExists(String name) {
49 return this.vips.containsKey(name);
53 public boolean vipExists(VIP vip){
54 if(vip.getName()==null){
55 if(!vips.containsValue(vip)){
59 if(!vips.containsKey(vip.getName())){
60 if(!vips.containsValue(vip)){
69 public boolean vipExists(String name,String ip,String protocol,short protocolPort,String poolName){
71 VIP vip = new VIP(name,ip,protocol,protocolPort,poolName);
73 //Check VIP with the same name
75 if(!vips.containsKey(name)){
76 //Check VIP with the same ip, protocol and protocolPort
77 if(!vips.containsValue(vip)){
79 //if you reach here, means this VIP don't exist
89 public Set<VIP> getAllVIPs(){
90 return new HashSet<VIP>(this.vips.values());
93 public VIP getVIPWithPoolName(VIP vip){
94 cmLogger.info("Search a VIP with name:{}",vip);
95 for(VIP vipTemp: this.vips.values()){
96 if(vipTemp.equals(vip)){
98 cmLogger.info("Found VIP with pool detail : {}",vipTemp);
103 cmLogger.info("VIP with pool detail not found ");
108 public VIP createVIP(String name,String ip,String protocol,short protocolPort,String poolName){
110 cmLogger.info("Create VIP with the following details :[ name : "+name
112 +" protocol : "+protocol
113 +" protocol_port : "+protocolPort
114 +" pool name : "+poolName);
116 VIP vip = new VIP(name,ip,protocol,protocolPort,poolName);
118 if(poolName !=null && !poolName.isEmpty()){
119 if(pools.containsKey(poolName)){
120 pools.get(poolName).addVIP(vip);
124 vip.setStatus(LBConst.STATUS_ACTIVE);
125 this.vips.put(name, vip);
127 cmLogger.info("New VIP created : "+vip.toString());
132 public String getVIPAttachedPool(String name) {
133 return this.vips.get(name).getPoolName();
137 public VIP updateVIP(String name, String poolName){
139 cmLogger.info("Updating VIP : "+name+" pool name to "+poolName);
141 if(vips.containsKey(name)){
142 VIP vip = vips.get(name);
143 if(vip.getPoolName() == null){
144 vip.setPoolName(poolName);
145 cmLogger.error("VIP is now attached to the pool : {}",vip.toString());
148 cmLogger.error("VIP is already attached to one pool : {}",vip.toString());
150 cmLogger.error("VIP with name: "+name+" does not exist");
155 public VIP deleteVIP(String name){
157 cmLogger.info("Deleting VIP : "+name);
159 VIP vip = vips.get(name);
161 String poolName = vip.getPoolName();
163 if(poolName != null){
164 if(pools.containsKey(poolName)){
165 Pool pool = pools.get(poolName);
166 pool.removeVIP(vip.getName());
170 cmLogger.info("VIP removed : "+vip.toString());
172 vips.remove(vip.getName());
178 public boolean memberExists(String name, String poolName) {
179 if(this.pools.containsKey(poolName)){
180 if(this.pools.get(poolName).getMember(name) != null )
187 public boolean memberExists(String name, String memberIP,String poolName){
188 if(!this.pools.containsKey(poolName))
191 return this.pools.get(poolName).poolMemberExists(new PoolMember(name, memberIP, poolName));
195 public PoolMember addPoolMember(String name, String memberIP, String poolName){
197 PoolMember pm = new PoolMember(name,memberIP,poolName);
199 cmLogger.info("Adding pool member : "+pm.toString());
201 pools.get(poolName).addMember(pm);
207 public PoolMember removePoolMember(String name, String poolName){
209 cmLogger.info("Removing pool member : {} from pool {}",name, poolName);
211 Pool pool = pools.get(poolName);
213 PoolMember pm = pool.getMember(name);
215 pool.removeMember(name);
217 cmLogger.info("Pool member {} removed from {} ",name,poolName);
223 public Set<Pool> getAllPools(){
224 return new HashSet<Pool>(this.pools.values());
228 public boolean poolExists(String name) {
229 return this.pools.containsKey(name);
233 public boolean poolExists(String name, String lbMethod){
235 return pools.containsValue(new Pool(name,lbMethod));
239 public Pool createPool(String name, String lbMethod){
241 Pool newPool = new Pool(name,lbMethod);
243 cmLogger.info("New pool created : " + newPool.toString());
245 pools.put(name, newPool);
251 public Pool deletePool(String poolName){
253 Pool pool = pools.get(poolName);
255 for(VIP vip:pool.getAllVip()){
257 vip.setPoolName(null);
261 cmLogger.info("Pool removed : "+pool.toString());
263 pools.remove(poolName);
269 public Pool getPool( String poolName){
270 if(pools.containsKey(poolName)){
271 return pools.get(poolName);
277 public Set<PoolMember> getAllPoolMembers(String poolName) {
279 if(pools.containsKey(poolName)){
280 return new HashSet<PoolMember>(pools.get(poolName).getAllMembers());
286 * @see java.lang.Object#toString()
289 public String toString() {
290 return "ConfigManager [vips=" + vips + ", pools=" + pools + "]";