def _add_rule_above(self, context, ref_rule_id, edge_id, firewall_rule):
        rule_map = vcns_db.get_vcns_edge_firewallrule_binding(
            context.session, ref_rule_id, edge_id)
        ref_vcns_rule_id = rule_map.rule_vseid
        fwr_req = self._convert_firewall_rule(context, firewall_rule)
        try:
            header = self.vcns.add_firewall_rule_above(edge_id,
                                                       ref_vcns_rule_id,
                                                       fwr_req)[0]
        except vcns_exc.VcnsApiException:
            with excutils.save_and_reraise_exception():
                LOG.exception(
                    _("Failed to add firewall rule above: "
                      "%(rule_id)s with edge_id: %(edge_id)s"), {
                          'rule_id': ref_vcns_rule_id,
                          'edge_id': edge_id
                      })

        objuri = header['location']
        fwr_vseid = objuri[objuri.rfind("/") + 1:]
        map_info = {
            'rule_id': firewall_rule['id'],
            'rule_vseid': fwr_vseid,
            'edge_id': edge_id
        }
        vcns_db.add_vcns_edge_firewallrule_binding(context.session, map_info)
    def _add_rule_below(self, context, ref_rule_id, edge_id, firewall_rule):
        rule_map = vcns_db.get_vcns_edge_firewallrule_binding(context.session, ref_rule_id, edge_id)
        ref_vcns_rule_id = rule_map.rule_vseid
        fwr_vse_next = self._get_firewall_rule_next(context, edge_id, ref_vcns_rule_id)
        fwr_req = self._convert_firewall_rule(context, firewall_rule)
        if fwr_vse_next:
            ref_vcns_rule_id = fwr_vse_next["ruleId"]
            try:
                header = self.vcns.add_firewall_rule_above(edge_id, int(ref_vcns_rule_id), fwr_req)[0]
            except vcns_exc.VcnsApiException:
                with excutils.save_and_reraise_exception():
                    LOG.exception(
                        _("Failed to add firewall rule above: " "%(rule_id)s with edge_id: %(edge_id)s"),
                        {"rule_id": ref_vcns_rule_id, "edge_id": edge_id},
                    )
        else:
            # append the rule at the bottom
            try:
                header = self.vcns.add_firewall_rule(edge_id, fwr_req)[0]
            except vcns_exc.VcnsApiException:
                with excutils.save_and_reraise_exception():
                    LOG.exception(_("Failed to append a firewall rule" "with edge_id: %s"), edge_id)

        objuri = header["location"]
        fwr_vseid = objuri[objuri.rfind("/") + 1 :]
        map_info = {"rule_id": firewall_rule["id"], "rule_vseid": fwr_vseid, "edge_id": edge_id}
        vcns_db.add_vcns_edge_firewallrule_binding(context.session, map_info)
 def _create_rule_id_mapping(self, context, edge_id, firewall, vcns_fw):
     for rule in vcns_fw["firewallRules"]["firewallRules"]:
         index = rule["ruleTag"] - 1
         # TODO(linb):a simple filter of the retrived rules which may be
         # created by other operations unintentionally
         if index < len(firewall["firewall_rule_list"]):
             rule_vseid = rule["ruleId"]
             rule_id = firewall["firewall_rule_list"][index]["id"]
             map_info = {"rule_id": rule_id, "rule_vseid": rule_vseid, "edge_id": edge_id}
             vcns_db.add_vcns_edge_firewallrule_binding(context.session, map_info)
 def _create_rule_id_mapping(self, context, edge_id, firewall, vcns_fw):
     for rule in vcns_fw['firewallRules']['firewallRules']:
         index = rule['ruleTag'] - 1
         #TODO(linb):a simple filter of the retrived rules which may be
         #created by other operations unintentionally
         if index < len(firewall['firewall_rule_list']):
             rule_vseid = rule['ruleId']
             rule_id = firewall['firewall_rule_list'][index]['id']
             map_info = {
                 'rule_id': rule_id,
                 'rule_vseid': rule_vseid,
                 'edge_id': edge_id
             }
             vcns_db.add_vcns_edge_firewallrule_binding(
                 context.session, map_info)
 def _create_rule_id_mapping(
     self, context, edge_id, firewall, vcns_fw):
     for rule in vcns_fw['firewallRules']['firewallRules']:
         index = rule['ruleTag'] - 1
         #TODO(linb):a simple filter of the retrived rules which may be
         #created by other operations unintentionally
         if index < len(firewall['firewall_rule_list']):
             rule_vseid = rule['ruleId']
             rule_id = firewall['firewall_rule_list'][index]['id']
             map_info = {
                 'rule_id': rule_id,
                 'rule_vseid': rule_vseid,
                 'edge_id': edge_id
             }
             vcns_db.add_vcns_edge_firewallrule_binding(
                 context.session, map_info)
    def _add_rule_above(self, context, ref_rule_id, edge_id, firewall_rule):
        rule_map = vcns_db.get_vcns_edge_firewallrule_binding(context.session, ref_rule_id, edge_id)
        ref_vcns_rule_id = rule_map.rule_vseid
        fwr_req = self._convert_firewall_rule(context, firewall_rule)
        try:
            header = self.vcns.add_firewall_rule_above(edge_id, ref_vcns_rule_id, fwr_req)[0]
        except vcns_exc.VcnsApiException:
            with excutils.save_and_reraise_exception():
                LOG.exception(
                    _("Failed to add firewall rule above: " "%(rule_id)s with edge_id: %(edge_id)s"),
                    {"rule_id": ref_vcns_rule_id, "edge_id": edge_id},
                )

        objuri = header["location"]
        fwr_vseid = objuri[objuri.rfind("/") + 1 :]
        map_info = {"rule_id": firewall_rule["id"], "rule_vseid": fwr_vseid, "edge_id": edge_id}
        vcns_db.add_vcns_edge_firewallrule_binding(context.session, map_info)
    def _add_rule_below(self, context, ref_rule_id, edge_id, firewall_rule):
        rule_map = vcns_db.get_vcns_edge_firewallrule_binding(
            context.session, ref_rule_id, edge_id)
        ref_vcns_rule_id = rule_map.rule_vseid
        fwr_vse_next = self._get_firewall_rule_next(context, edge_id,
                                                    ref_vcns_rule_id)
        fwr_req = self._convert_firewall_rule(context, firewall_rule)
        if fwr_vse_next:
            ref_vcns_rule_id = fwr_vse_next['ruleId']
            try:
                header = self.vcns.add_firewall_rule_above(
                    edge_id, int(ref_vcns_rule_id), fwr_req)[0]
            except vcns_exc.VcnsApiException:
                with excutils.save_and_reraise_exception():
                    LOG.exception(
                        _("Failed to add firewall rule above: "
                          "%(rule_id)s with edge_id: %(edge_id)s"), {
                              'rule_id': ref_vcns_rule_id,
                              'edge_id': edge_id
                          })
        else:
            # append the rule at the bottom
            try:
                header = self.vcns.add_firewall_rule(edge_id, fwr_req)[0]
            except vcns_exc.VcnsApiException:
                with excutils.save_and_reraise_exception():
                    LOG.exception(
                        _("Failed to append a firewall rule"
                          "with edge_id: %s"), edge_id)

        objuri = header['location']
        fwr_vseid = objuri[objuri.rfind("/") + 1:]
        map_info = {
            'rule_id': firewall_rule['id'],
            'rule_vseid': fwr_vseid,
            'edge_id': edge_id
        }
        vcns_db.add_vcns_edge_firewallrule_binding(context.session, map_info)