import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.neutron.spi.INeutronSecurityGroupCRUD;
public class NeutronSecurityGroupInterface extends AbstractNeutronInterface<SecurityGroup,NeutronSecurityGroup> implements INeutronSecurityGroupCRUD {
private static final Logger LOGGER = LoggerFactory.getLogger(NeutronSecurityGroupInterface.class);
- private ConcurrentMap<String, NeutronSecurityGroup> securityGroupDB = new ConcurrentHashMap<String, NeutronSecurityGroup>();
NeutronSecurityGroupInterface(ProviderContext providerContext) {
@Override
public boolean neutronSecurityGroupExists(String uuid) {
- return securityGroupDB.containsKey(uuid);
+ SecurityGroup group = readMd(createInstanceIdentifier(toMd(uuid)));
+ if (group == null) {
+ return false;
+ }
+ return true;
}
@Override
public NeutronSecurityGroup getNeutronSecurityGroup(String uuid) {
- if (!neutronSecurityGroupExists(uuid)) {
- LOGGER.debug("No Security Groups Have Been Defined");
+ SecurityGroup group = readMd(createInstanceIdentifier(toMd(uuid)));
+ if (group == null) {
return null;
}
- return securityGroupDB.get(uuid);
+ return fromMd(group);
}
@Override
public List<NeutronSecurityGroup> getAllNeutronSecurityGroups() {
Set<NeutronSecurityGroup> allSecurityGroups = new HashSet<NeutronSecurityGroup>();
- for (Entry<String, NeutronSecurityGroup> entry : securityGroupDB.entrySet()) {
- NeutronSecurityGroup securityGroup = entry.getValue();
- allSecurityGroups.add(securityGroup);
+ SecurityGroups groups = readMd(createInstanceIdentifier());
+ if (groups != null) {
+ for (SecurityGroup group: groups.getSecurityGroup()) {
+ allSecurityGroups.add(fromMd(group));
+ }
}
LOGGER.debug("Exiting getSecurityGroups, Found {} OpenStackSecurityGroup", allSecurityGroups.size());
List<NeutronSecurityGroup> ans = new ArrayList<NeutronSecurityGroup>();
ans.addAll(allSecurityGroups);
return ans;
}
-
+
@Override
public boolean addNeutronSecurityGroup(NeutronSecurityGroup input) {
if (neutronSecurityGroupExists(input.getID())) {
return false;
}
- NeutronCRUDInterfaces interfaces = new NeutronCRUDInterfaces()
- .fetchINeutronSecurityRuleCRUD(this);
- INeutronSecurityRuleCRUD sgrCrud = interfaces.getSecurityRuleInterface();
- for(NeutronSecurityRule sgr : input.getSecurityRules()) {
- sgrCrud.addNeutronSecurityRule(sgr);
- }
- securityGroupDB.putIfAbsent(input.getID(), input);
- addMd(input);
+ addMd(input);
return true;
}
if (!neutronSecurityGroupExists(uuid)) {
return false;
}
- securityGroupDB.remove(uuid);
removeMd(toMd(uuid));
return true;
}
if (!neutronSecurityGroupExists(uuid)) {
return false;
}
- NeutronSecurityGroup target = securityGroupDB.get(uuid);
- boolean rc = overwrite(target, delta);
- if (rc) {
- updateMd(securityGroupDB.get(uuid));
- }
- return rc;
+ updateMd(delta);
+ return true;
}
@Override
return !neutronSecurityGroupExists(securityGroupUUID);
}
+ protected NeutronSecurityGroup fromMd(SecurityGroup group) {
+ NeutronSecurityGroup answer = new NeutronSecurityGroup();
+ if (group.getName() != null) {
+ answer.setSecurityGroupName(group.getName());
+ }
+ if (group.getDescription() != null) {
+ answer.setSecurityGroupDescription(group.getDescription());
+ }
+ if (group.getTenantId() != null) {
+ answer.setSecurityGroupTenantID(group.getTenantId().getValue().replace("-",""));
+ }
+ if (group.getSecurityRules() != null) {
+ NeutronCRUDInterfaces interfaces = new NeutronCRUDInterfaces()
+ .fetchINeutronSecurityRuleCRUD(this);
+ INeutronSecurityRuleCRUD srCrud = interfaces.getSecurityRuleInterface();
+
+ List<NeutronSecurityRule> rules = new ArrayList<NeutronSecurityRule>();
+ for (Uuid uuid: group.getSecurityRules()) {
+ rules.add(srCrud.getNeutronSecurityRule(uuid.getValue()));
+ }
+ answer.setSecurityRules(rules);
+ }
+ if (group.getUuid() != null) {
+ answer.setID(group.getUuid().getValue());
+ }
+ return answer;
+ }
+
@Override
protected SecurityGroup toMd(NeutronSecurityGroup securityGroup) {
SecurityGroupBuilder securityGroupBuilder = new SecurityGroupBuilder();
securityGroupBuilder.setTenantId(toUuid(securityGroup.getSecurityGroupTenantID()));
}
if (securityGroup.getSecurityRules() != null) {
- List<Uuid> neutronSecurityRule = new ArrayList<>();
+ List<Uuid> neutronSecurityRule = new ArrayList<Uuid>();
for (NeutronSecurityRule securityRule : securityGroup.getSecurityRules()) {
if (securityRule.getID() != null) {
neutronSecurityRule.add(toUuid(securityRule.getID()));
@Override
protected InstanceIdentifier<SecurityGroup> createInstanceIdentifier(SecurityGroup securityGroup) {
- return InstanceIdentifier.create(Neutron.class).child(SecurityGroups.class).child(SecurityGroup.class,
- securityGroup.getKey());
+ return InstanceIdentifier.create(Neutron.class)
+ .child(SecurityGroups.class).child(SecurityGroup.class,
+ securityGroup.getKey());
+ }
+
+ protected InstanceIdentifier<SecurityGroups> createInstanceIdentifier() {
+ return InstanceIdentifier.create(Neutron.class)
+ .child(SecurityGroups.class);
}
@Override
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.neutron.spi.INeutronSecurityGroupCRUD;
public class NeutronSecurityRuleInterface extends AbstractNeutronInterface<SecurityRule, NeutronSecurityRule> implements INeutronSecurityRuleCRUD {
private static final Logger LOGGER = LoggerFactory.getLogger(NeutronSecurityRuleInterface.class);
- private ConcurrentMap<String, NeutronSecurityRule> securityRuleDB = new ConcurrentHashMap<String, NeutronSecurityRule>();
private static final ImmutableBiMap<Class<? extends DirectionBase>,String> DIRECTION_MAP
= new ImmutableBiMap.Builder<Class<? extends DirectionBase>,String>()
@Override
public boolean neutronSecurityRuleExists(String uuid) {
- return securityRuleDB.containsKey(uuid);
+ SecurityRule rule = readMd(createInstanceIdentifier(toMd(uuid)));
+ if (rule == null) {
+ return false;
+ }
+ return true;
}
@Override
public NeutronSecurityRule getNeutronSecurityRule(String uuid) {
- if (!neutronSecurityRuleExists(uuid)) {
- LOGGER.debug("No Security Rules Have Been Defined");
+ SecurityRule rule = readMd(createInstanceIdentifier(toMd(uuid)));
+ if (rule == null) {
return null;
}
- return securityRuleDB.get(uuid);
+ return fromMd(rule);
}
@Override
public List<NeutronSecurityRule> getAllNeutronSecurityRules() {
Set<NeutronSecurityRule> allSecurityRules = new HashSet<NeutronSecurityRule>();
- for (Entry<String, NeutronSecurityRule> entry : securityRuleDB.entrySet()) {
- NeutronSecurityRule securityRule = entry.getValue();
- allSecurityRules.add(securityRule);
+ SecurityRules rules = readMd(createInstanceIdentifier());
+ if (rules != null) {
+ for (SecurityRule rule: rules.getSecurityRule()) {
+ allSecurityRules.add(fromMd(rule));
+ }
}
LOGGER.debug("Exiting getSecurityRule, Found {} OpenStackSecurityRule", allSecurityRules.size());
List<NeutronSecurityRule> ans = new ArrayList<NeutronSecurityRule>();
if (neutronSecurityRuleExists(input.getID())) {
return false;
}
- securityRuleDB.putIfAbsent(input.getID(), input);
updateSecGroupRuleInSecurityGroup(input);
addMd(input);
return true;
if (!neutronSecurityRuleExists(uuid)) {
return false;
}
- removeSecGroupRuleFromSecurityGroup(securityRuleDB.get(uuid));
- securityRuleDB.remove(uuid);
+ removeSecGroupRuleFromSecurityGroup(getNeutronSecurityRule(uuid));
removeMd(toMd(uuid));
return true;
}
if (!neutronSecurityRuleExists(uuid)) {
return false;
}
- NeutronSecurityRule target = securityRuleDB.get(uuid);
- boolean rc = overwrite(target, delta);
- updateSecGroupRuleInSecurityGroup(securityRuleDB.get(uuid));
- if (rc) {
- updateMd(securityRuleDB.get(uuid));
- }
- return rc;
+ updateSecGroupRuleInSecurityGroup(delta);
+ updateMd(delta);
+ return true;
}
@Override
return !neutronSecurityRuleExists(securityRuleUUID);
}
+ protected NeutronSecurityRule fromMd(SecurityRule rule) {
+ NeutronSecurityRule answer = new NeutronSecurityRule();
+ if (rule.getTenantId() != null) {
+ answer.setSecurityRuleTenantID(rule.getTenantId().getValue().replace("-",""));
+ }
+ if (rule.getDirection() != null) {
+ answer.setSecurityRuleDirection(DIRECTION_MAP.get(rule.getDirection()));
+ }
+ if (rule.getSecurityGroupId() != null) {
+ answer.setSecurityRuleGroupID(rule.getSecurityGroupId().getValue());
+ }
+ if (rule.getRemoteGroupId() != null) {
+ answer.setSecurityRemoteGroupID(rule.getRemoteGroupId().getValue());
+ }
+ if (rule.getRemoteIpPrefix() != null) {
+ answer.setSecurityRuleRemoteIpPrefix(rule.getRemoteIpPrefix());
+ }
+ if (rule.getProtocol() != null) {
+ answer.setSecurityRuleProtocol(PROTOCOL_MAP.get(rule.getProtocol()));
+ }
+ if (rule.getEthertype() != null) {
+ answer.setSecurityRuleEthertype(ETHERTYPE_MAP.get(rule.getEthertype()));
+ }
+ if (rule.getPortRangeMin() != null) {
+ answer.setSecurityRulePortMin(Integer.valueOf(rule.getPortRangeMin()));
+ }
+ if (rule.getPortRangeMax() != null) {
+ answer.setSecurityRulePortMax(Integer.valueOf(rule.getPortRangeMax()));
+ }
+ if (rule.getId() != null) {
+ answer.setID(rule.getId().getValue());
+ }
+ return answer;
+ }
+
@Override
protected SecurityRule toMd(NeutronSecurityRule securityRule) {
SecurityRuleBuilder securityRuleBuilder = new SecurityRuleBuilder();
securityRuleBuilder.setRemoteGroupId(toUuid(securityRule.getSecurityRemoteGroupID()));
}
if (securityRule.getSecurityRuleRemoteIpPrefix() != null) {
- IpAddress ipAddress = new IpAddress(securityRule.getSecurityRuleRemoteIpPrefix().toCharArray());
- securityRuleBuilder.setRemoteIpPrefix(ipAddress);
+ securityRuleBuilder.setRemoteIpPrefix(securityRule.getSecurityRuleRemoteIpPrefix());
}
if (securityRule.getSecurityRuleProtocol() != null) {
ImmutableBiMap<String, Class<? extends ProtocolBase>> mapper =
@Override
protected InstanceIdentifier<SecurityRule> createInstanceIdentifier(SecurityRule securityRule) {
- return InstanceIdentifier.create(Neutron.class).child(SecurityRules.class).child(SecurityRule.class,
- securityRule.getKey());
+ return InstanceIdentifier.create(Neutron.class)
+ .child(SecurityRules.class).child(SecurityRule.class,
+ securityRule.getKey());
+ }
+
+ protected InstanceIdentifier<SecurityRules> createInstanceIdentifier() {
+ return InstanceIdentifier.create(Neutron.class)
+ .child(SecurityRules.class);
}
@Override