diff --git a/ovsdbapp/backend/ovs_idl/command.py b/ovsdbapp/backend/ovs_idl/command.py index fa2a998e..78c036ed 100644 --- a/ovsdbapp/backend/ovs_idl/command.py +++ b/ovsdbapp/backend/ovs_idl/command.py @@ -25,12 +25,17 @@ LOG = logging.getLogger(__name__) class BaseCommand(api.Command): + READ_ONLY = False + def __init__(self, api): self.api = api self.result = None def execute(self, check_error=False, log_errors=True): try: + if self.READ_ONLY: + self.run_idl(None) + return self.result with self.api.transaction(check_error, log_errors) as txn: txn.add(self) return self.result @@ -60,6 +65,10 @@ class BaseCommand(api.Command): if k not in ['api', 'result'])) +class ReadOnlyCommand(BaseCommand): + READ_ONLY = True + + class AddCommand(BaseCommand): table_name = [] # unhashable, won't be looked up @@ -274,7 +283,7 @@ class DbFindCommand(BaseCommand): ] -class BaseGetRowCommand(BaseCommand): +class BaseGetRowCommand(ReadOnlyCommand): def __init__(self, api, record): super(BaseGetRowCommand, self).__init__(api) self.record = record diff --git a/ovsdbapp/schema/open_vswitch/commands.py b/ovsdbapp/schema/open_vswitch/commands.py index 78ed03f7..ffc1b17e 100644 --- a/ovsdbapp/schema/open_vswitch/commands.py +++ b/ovsdbapp/schema/open_vswitch/commands.py @@ -41,7 +41,7 @@ class AddManagerCommand(command.AddCommand): self.result = row.uuid -class GetManagerCommand(BaseCommand): +class GetManagerCommand(command.ReadOnlyCommand): def __init__(self, api): super(GetManagerCommand, self).__init__(api) @@ -143,7 +143,7 @@ class DelBridgeCommand(BaseCommand): br.delete() -class BridgeExistsCommand(BaseCommand): +class BridgeExistsCommand(command.ReadOnlyCommand): def __init__(self, api, name): super(BridgeExistsCommand, self).__init__(api) self.name = name @@ -153,7 +153,7 @@ class BridgeExistsCommand(BaseCommand): 'name', self.name, None)) -class ListBridgesCommand(BaseCommand): +class ListBridgesCommand(command.ReadOnlyCommand): def __init__(self, api): super(ListBridgesCommand, self).__init__(api) @@ -190,7 +190,7 @@ class DelControllerCommand(BaseCommand): br.controller = [] -class GetControllerCommand(BaseCommand): +class GetControllerCommand(command.ReadOnlyCommand): def __init__(self, api, bridge): super(GetControllerCommand, self).__init__(api) self.bridge = bridge @@ -291,7 +291,7 @@ class DelPortCommand(BaseCommand): port.delete() -class ListPortsCommand(BaseCommand): +class ListPortsCommand(command.ReadOnlyCommand): def __init__(self, api, bridge): super(ListPortsCommand, self).__init__(api) self.bridge = bridge @@ -301,7 +301,7 @@ class ListPortsCommand(BaseCommand): self.result = [p.name for p in br.ports if p.name != self.bridge] -class ListIfacesCommand(BaseCommand): +class ListIfacesCommand(command.ReadOnlyCommand): def __init__(self, api, bridge): super(ListIfacesCommand, self).__init__(api) self.bridge = bridge @@ -312,7 +312,7 @@ class ListIfacesCommand(BaseCommand): for i in p.interfaces] -class PortToBridgeCommand(BaseCommand): +class PortToBridgeCommand(command.ReadOnlyCommand): def __init__(self, api, name): super(PortToBridgeCommand, self).__init__(api) self.name = name @@ -328,7 +328,7 @@ class PortToBridgeCommand(BaseCommand): self.result = next(br.name for br in bridges if port in br.ports) -class InterfaceToBridgeCommand(BaseCommand): +class InterfaceToBridgeCommand(command.ReadOnlyCommand): def __init__(self, api, name): super(InterfaceToBridgeCommand, self).__init__(api) self.name = name @@ -344,7 +344,7 @@ class InterfaceToBridgeCommand(BaseCommand): self.result = next(br.name for br in bridges if pname in br.ports) -class GetExternalIdCommand(BaseCommand): +class GetExternalIdCommand(command.ReadOnlyCommand): def __init__(self, api, table, name, field): super(GetExternalIdCommand, self).__init__(api) self.table = table diff --git a/ovsdbapp/schema/ovn_northbound/commands.py b/ovsdbapp/schema/ovn_northbound/commands.py index 8d77f55d..a68beb1c 100644 --- a/ovsdbapp/schema/ovn_northbound/commands.py +++ b/ovsdbapp/schema/ovn_northbound/commands.py @@ -487,7 +487,7 @@ class LspGetPortSecurityCommand(cmd.BaseCommand): self.result = lsp.port_security -class LspGetUpCommand(cmd.BaseCommand): +class LspGetUpCommand(cmd.ReadOnlyCommand): def __init__(self, api, port): super(LspGetUpCommand, self).__init__(api) self.port = port @@ -509,7 +509,7 @@ class LspSetEnabledCommand(cmd.BaseCommand): lsp.enabled = self.is_enabled -class LspGetEnabledCommand(cmd.BaseCommand): +class LspGetEnabledCommand(cmd.ReadOnlyCommand): def __init__(self, api, port): super(LspGetEnabledCommand, self).__init__(api) self.port = port @@ -531,7 +531,7 @@ class LspSetTypeCommand(cmd.BaseCommand): lsp.type = self.port_type -class LspGetTypeCommand(cmd.BaseCommand): +class LspGetTypeCommand(cmd.ReadOnlyCommand): def __init__(self, api, port): super(LspGetTypeCommand, self).__init__(api) self.port = port @@ -552,7 +552,7 @@ class LspSetOptionsCommand(cmd.BaseCommand): lsp.options = self.options -class LspGetOptionsCommand(cmd.BaseCommand): +class LspGetOptionsCommand(cmd.ReadOnlyCommand): def __init__(self, api, port): super(LspGetOptionsCommand, self).__init__(api) self.port = port @@ -573,7 +573,7 @@ class LspSetDhcpV4OptionsCommand(cmd.BaseCommand): lsp.dhcpv4_options = self.dhcpopt_uuid -class LspGetDhcpV4OptionsCommand(cmd.BaseCommand): +class LspGetDhcpV4OptionsCommand(cmd.ReadOnlyCommand): def __init__(self, api, port): super(LspGetDhcpV4OptionsCommand, self).__init__(api) self.port = port @@ -610,7 +610,7 @@ class DhcpOptionsDelCommand(cmd.BaseCommand): dhcpopt.delete() -class DhcpOptionsListCommand(cmd.BaseCommand): +class DhcpOptionsListCommand(cmd.ReadOnlyCommand): def run_idl(self, txn): self.result = [rowview.RowView(r) for r in self.api.tables['DHCP_Options'].rows.values()] @@ -631,7 +631,7 @@ class DhcpOptionsSetOptionsCommand(cmd.BaseCommand): dhcpopt.options = self.options -class DhcpOptionsGetOptionsCommand(cmd.BaseCommand): +class DhcpOptionsGetOptionsCommand(cmd.ReadOnlyCommand): def __init__(self, api, dhcpopt_uuid): super(DhcpOptionsGetOptionsCommand, self).__init__(api) self.dhcpopt_uuid = dhcpopt_uuid @@ -686,7 +686,7 @@ class LrDelCommand(cmd.BaseCommand): raise RuntimeError(msg) -class LrListCommand(cmd.BaseCommand): +class LrListCommand(cmd.ReadOnlyCommand): def run_idl(self, txn): self.result = [rowview.RowView(r) for r in self.api.tables['Logical_Router'].rows.values()] @@ -763,7 +763,7 @@ class LrpDelCommand(PortDelCommand): if_exists) -class LrpListCommand(cmd.BaseCommand): +class LrpListCommand(cmd.ReadOnlyCommand): def __init__(self, api, router): super(LrpListCommand, self).__init__(api) self.router = router @@ -784,7 +784,7 @@ class LrpSetEnabledCommand(cmd.BaseCommand): lrp.enabled = self.is_enabled -class LrpGetEnabledCommand(cmd.BaseCommand): +class LrpGetEnabledCommand(cmd.ReadOnlyCommand): def __init__(self, api, port): super(LrpGetEnabledCommand, self).__init__(api) self.port = port @@ -865,7 +865,7 @@ class LrRouteDelCommand(cmd.BaseCommand): raise RuntimeError(msg) -class LrRouteListCommand(cmd.BaseCommand): +class LrRouteListCommand(cmd.ReadOnlyCommand): def __init__(self, api, router): super(LrRouteListCommand, self).__init__(api) self.router = router @@ -974,7 +974,7 @@ class LrNatDelCommand(cmd.BaseCommand): match=self.match_ip) -class LrNatListCommand(cmd.BaseCommand): +class LrNatListCommand(cmd.ReadOnlyCommand): def __init__(self, api, router): super(LrNatListCommand, self).__init__(api) self.router = router @@ -1041,7 +1041,7 @@ class LbDelCommand(cmd.BaseCommand): raise -class LbListCommand(cmd.BaseCommand): +class LbListCommand(cmd.ReadOnlyCommand): def run_idl(self, txn): self.result = [rowview.RowView(r) for r in self.api.tables['Load_Balancer'].rows.values()] @@ -1086,7 +1086,7 @@ class LrLbDelCommand(cmd.BaseCommand): raise -class LrLbListCommand(cmd.BaseCommand): +class LrLbListCommand(cmd.ReadOnlyCommand): def __init__(self, api, router): super(LrLbListCommand, self).__init__(api) self.router = router @@ -1135,7 +1135,7 @@ class LsLbDelCommand(cmd.BaseCommand): raise -class LsLbListCommand(cmd.BaseCommand): +class LsLbListCommand(cmd.ReadOnlyCommand): def __init__(self, api, switch): super(LsLbListCommand, self).__init__(api) self.switch = switch @@ -1170,7 +1170,7 @@ class DnsGetCommand(cmd.BaseGetRowCommand): table = 'DNS' -class DnsListCommand(cmd.BaseCommand): +class DnsListCommand(cmd.ReadOnlyCommand): def run_idl(self, txn): table = self.api.tables['DNS'] self.result = [rowview.RowView(r) for r in table.rows.values()] diff --git a/ovsdbapp/schema/ovn_southbound/commands.py b/ovsdbapp/schema/ovn_southbound/commands.py index 53b5aa04..afb8843e 100644 --- a/ovsdbapp/schema/ovn_southbound/commands.py +++ b/ovsdbapp/schema/ovn_southbound/commands.py @@ -75,7 +75,7 @@ class ChassisDelCommand(cmd.BaseCommand): chassis.delete() -class ChassisListCommand(cmd.BaseCommand): +class ChassisListCommand(cmd.ReadOnlyCommand): def run_idl(self, txn): self.result = [rowview.RowView(r) for r in self.api.tables['Chassis'].rows.values()]