import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
import org.opendaylight.neutron.spi.INeutronSecurityGroupCRUD;
+import org.opendaylight.neutron.spi.INeutronSecurityRuleCRUD;
+import org.opendaylight.neutron.spi.NeutronCRUDInterfaces;
import org.opendaylight.neutron.spi.NeutronSecurityGroup;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
if (neutronSecurityGroupExists(input.getSecurityGroupUUID())) {
return false;
}
+ INeutronSecurityRuleCRUD sgrCrud = NeutronCRUDInterfaces.getINeutronSecurityRuleCRUD(this);
+ for(NeutronSecurityRule sgr : input.getSecurityRules()) {
+ sgrCrud.addNeutronSecurityRule(sgr);
+ }
securityGroupDB.putIfAbsent(input.getSecurityGroupUUID(), input);
addMd(input);
return true;
import java.util.concurrent.ConcurrentMap;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.neutron.spi.INeutronSecurityGroupCRUD;
import org.opendaylight.neutron.spi.INeutronSecurityRuleCRUD;
+import org.opendaylight.neutron.spi.NeutronCRUDInterfaces;
+import org.opendaylight.neutron.spi.NeutronSecurityGroup;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
return true;
}
+ private void updateSecGroupRuleInSecurityGroup(NeutronSecurityRule input) {
+ INeutronSecurityGroupCRUD sgCrud = NeutronCRUDInterfaces.getINeutronSecurityGroupCRUD(this);
+ NeutronSecurityGroup sg = sgCrud.getNeutronSecurityGroup(input.getSecurityRuleGroupID());
+ if(sg != null && sg.getSecurityRules() != null) {
+ for(NeutronSecurityRule sgr :sg.getSecurityRules()) {
+ if(sgr.getSecurityRuleUUID() != null && sgr.getSecurityRuleUUID().equals(input.getSecurityRuleUUID())) {
+ int index = sg.getSecurityRules().indexOf(sgr);
+ sg.getSecurityRules().set(index, input);
+ }
+ }
+ }
+ if (sg != null) {
+ sg.getSecurityRules().add(input);
+ }
+ }
+
+ private void removeSecGroupRuleFromSecurityGroup(NeutronSecurityRule input) {
+ INeutronSecurityGroupCRUD sgCrud = NeutronCRUDInterfaces.getINeutronSecurityGroupCRUD(this);
+ NeutronSecurityGroup sg = sgCrud.getNeutronSecurityGroup(input.getSecurityRuleGroupID());
+ if(sg != null && sg.getSecurityRules() != null) {
+ List<NeutronSecurityRule> toRemove = new ArrayList<NeutronSecurityRule>();
+ for(NeutronSecurityRule sgr :sg.getSecurityRules()) {
+ if(sgr.getSecurityRuleUUID() != null && sgr.getSecurityRuleUUID().equals(input.getSecurityRuleUUID())) {
+ toRemove.add(sgr);
+ }
+ }
+ sg.getSecurityRules().removeAll(toRemove);
+ }
+ }
+
@Override
public boolean neutronSecurityRuleExists(String uuid) {
return securityRuleDB.containsKey(uuid);
return false;
}
securityRuleDB.putIfAbsent(input.getSecurityRuleUUID(), input);
+ updateSecGroupRuleInSecurityGroup(input);
addMd(input);
return true;
}
if (!neutronSecurityRuleExists(uuid)) {
return false;
}
+ removeSecGroupRuleFromSecurityGroup(securityRuleDB.get(uuid));
securityRuleDB.remove(uuid);
removeMd(toMd(uuid));
return true;
}
NeutronSecurityRule target = securityRuleDB.get(uuid);
boolean rc = overwrite(target, delta);
+ updateSecGroupRuleInSecurityGroup(securityRuleDB.get(uuid));
if (rc) {
updateMd(securityRuleDB.get(uuid));
}