def addBridge(self, bridge_name): switch = self.ovs_state.switch if bridge_name in [br.name for br in list(self.ovs_state.bridges.values()) if br.name == bridge_name]: raise OVSExceptions.OVSBridgeExists(bridge_name) transaction = Transaction(self.cur_id) # Generate Wait operations for instance in list(self.ovs_state.ports.values()) + list(self.ovs_state.bridges.values()): transaction.addOperation(WaitOperation(instance)) # Build sub-components of a bridge intern_if = OVSInterface(bridge_name) intern_if.type = "internal" intern_port = OVSPort(bridge_name, [intern_if]) bridge = OVSBridge(bridge_name, [intern_port]) # Generate Insert Operations for built components transaction.addOperation(InsertOperation(intern_if)) transaction.addOperation(InsertOperation(intern_port)) transaction.addOperation(InsertOperation(bridge)) switch.addBridge(bridge) transaction.addOperation(UpdateOperation(switch, ["bridges"])) transaction.addOperation(MutateOperation(switch, "next_cfg", "+=")) self.sock.send(bytes(json.dumps(transaction), "utf-8")) del switch.bridges[bridge.uuid] handled = False while not handled: responses = self.get_responses(self.sock.recv(self.BUFF_SIZE)) for response in responses: res = json.loads(response) handled = transaction.handleResult(res) self.update_notification(res) self.cur_id += 1
def addPort(self, bridge_name, port_name): if bridge_name not in \ [br.name for br in list(self.ovs_state.bridges.values())]: raise OVSExceptions.OVSNoSuchBridge(bridge_name) if port_name in \ [port.name for port in list(self.ovs_state.ports.values())]: raise OVSExceptions.OVSPortExists(port_name) transaction = Transaction(self.cur_id) for instance in list(self.ovs_state.bridges.values()) + list( self.ovs_state.ports.values()): transaction.addOperation(WaitOperation(instance)) switch = self.ovs_state.switch iface = OVSInterface(port_name) port = OVSPort(port_name, [iface]) transaction.addOperation(InsertOperation(iface)) transaction.addOperation(InsertOperation(port)) bridge = None for br in list(self.ovs_state.bridges.values()): if br.name == bridge_name: bridge = br break bridge.ports[port.uuid] = port transaction.addOperation(UpdateOperation(bridge, 'ports')) transaction.addOperation(MutateOperation(switch, 'next_cfg', '+=')) self.sock.send(bytes(json.dumps(transaction), 'utf-8')) del bridge.ports[port.uuid] responses = self.get_responses(self.sock.recv(self.BUFF_SIZE)) for response in responses: res = json.loads(response) transaction.handleResult(res) self.update_notification(res) self.cur_id += 1 return True
def addBridge(self, bridge_name): switch = self.ovs_state.switch if bridge_name in \ [br.name for br in list(self.ovs_state.bridges.values()) if br.name == bridge_name]: raise OVSExceptions.OVSBridgeExists(bridge_name) transaction = Transaction(self.cur_id) # Generate Wait operations for instance in list(self.ovs_state.ports.values()) + list( self.ovs_state.bridges.values()): transaction.addOperation(WaitOperation(instance)) # Build sub-components of a bridge intern_if = OVSInterface(bridge_name) intern_if.type = 'internal' intern_port = OVSPort(bridge_name, [intern_if]) bridge = OVSBridge(bridge_name, [intern_port]) # Generate Insert Operations for built components transaction.addOperation(InsertOperation(intern_if)) transaction.addOperation(InsertOperation(intern_port)) transaction.addOperation(InsertOperation(bridge)) switch.addBridge(bridge) transaction.addOperation(UpdateOperation(switch, ['bridges'])) transaction.addOperation(MutateOperation(switch, 'next_cfg', '+=')) self.sock.send(bytes(json.dumps(transaction), 'utf-8')) del switch.bridges[bridge.uuid] handled = False while not handled: responses = self.get_responses(self.sock.recv(self.BUFF_SIZE)) for response in responses: res = json.loads(response) handled = transaction.handleResult(res) self.update_notification(res) self.cur_id += 1
def __update_Interface(self, result): for uuid, table_states in list(result.items()): self.interfaces[uuid] = OVSInterface.parse(self, uuid, table_states)
def __update_Interface(self, result): for uuid, table_states in list(result.items()): self.interfaces[uuid] = OVSInterface.parse(self, uuid, table_states)