Statistics
| Branch: | Tag: | Revision:

root / ncclient / manager.py @ 4f650d54

History | View | Annotate | Download (3.6 kB)

1 94803aaf Shikhar Bhushan
# Copyright 2009 Shikhar Bhushan
2 94803aaf Shikhar Bhushan
#
3 94803aaf Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 94803aaf Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 94803aaf Shikhar Bhushan
# You may obtain a copy of the License at
6 94803aaf Shikhar Bhushan
#
7 94803aaf Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 94803aaf Shikhar Bhushan
#
9 94803aaf Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 94803aaf Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 94803aaf Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 94803aaf Shikhar Bhushan
# See the License for the specific language governing permissions and
13 94803aaf Shikhar Bhushan
# limitations under the License.
14 94803aaf Shikhar Bhushan
15 94803aaf Shikhar Bhushan
import capabilities
16 94803aaf Shikhar Bhushan
import operations
17 94803aaf Shikhar Bhushan
import transport
18 94803aaf Shikhar Bhushan
19 94803aaf Shikhar Bhushan
20 0cdb8b3c Shikhar Bhushan
def ssh_connect(*args, **kwds):
21 2f8bc438 Shikhar Bhushan
    session = transport.SSHSession(capabilities.CAPABILITIES)
22 2f8bc438 Shikhar Bhushan
    session.load_system_host_keys()
23 2f8bc438 Shikhar Bhushan
    session.connect(*args, **kwds)
24 2f8bc438 Shikhar Bhushan
    return Manager(session)
25 2f8bc438 Shikhar Bhushan
26 0cdb8b3c Shikhar Bhushan
connect = ssh_connect # default session type
27 2f8bc438 Shikhar Bhushan
28 4de03d63 Shikhar Bhushan
RAISE_ALL, RAISE_ERROR, RAISE_NONE = range(3)
29 4de03d63 Shikhar Bhushan
30 2f8bc438 Shikhar Bhushan
class Manager:
31 4f650d54 Shikhar Bhushan
32 0cdb8b3c Shikhar Bhushan
    "Thin layer of abstraction for the ncclient API."
33 4f650d54 Shikhar Bhushan
34 4f650d54 Shikhar Bhushan
    def __init__(self, session):
35 179b00d4 Shikhar Bhushan
        self._session = session
36 4f650d54 Shikhar Bhushan
        self._rpc_error_handling = RAISE_ALL
37 4f650d54 Shikhar Bhushan
38 4f650d54 Shikhar Bhushan
    def set_rpc_error_option(self, option):
39 4f650d54 Shikhar Bhushan
        self._rpc_error_handling = option
40 d6688264 Shikhar Bhushan
41 d771dffc Shikhar Bhushan
    def do(self, op, *args, **kwds):
42 4de03d63 Shikhar Bhushan
        op = operations.OPERATIONS[op](self._session)
43 2f8bc438 Shikhar Bhushan
        reply = op.request(*args, **kwds)
44 2f8bc438 Shikhar Bhushan
        if not reply.ok:
45 4de03d63 Shikhar Bhushan
            if self._raise == RAISE_ALL:
46 179b00d4 Shikhar Bhushan
                raise reply.error
47 4de03d63 Shikhar Bhushan
            elif self._raise == RAISE_ERROR:
48 179b00d4 Shikhar Bhushan
                for error in reply.errors:
49 179b00d4 Shikhar Bhushan
                    if error.severity == 'error':
50 179b00d4 Shikhar Bhushan
                        raise error
51 2f8bc438 Shikhar Bhushan
        return reply
52 4f650d54 Shikhar Bhushan
53 179b00d4 Shikhar Bhushan
    def __enter__(self):
54 179b00d4 Shikhar Bhushan
        pass
55 4f650d54 Shikhar Bhushan
56 179b00d4 Shikhar Bhushan
    def __exit__(self, *args):
57 179b00d4 Shikhar Bhushan
        self.close()
58 179b00d4 Shikhar Bhushan
        return False
59 4f650d54 Shikhar Bhushan
60 179b00d4 Shikhar Bhushan
    def locked(self, target):
61 4f650d54 Shikhar Bhushan
        """Returns a context manager for use with the 'with' statement.
62 d771dffc Shikhar Bhushan
        `target` is the datastore to lock, e.g. 'candidate
63 d771dffc Shikhar Bhushan
        """
64 a6c00291 Shikhar Bhushan
        return operations.LockContext(self._session, target)
65 4f650d54 Shikhar Bhushan
66 d771dffc Shikhar Bhushan
    get = lambda self, *args, **kwds: self.do('get', *args, **kwds).data
67 4f650d54 Shikhar Bhushan
68 d771dffc Shikhar Bhushan
    get_config = lambda self, *args, **kwds: self.do('get-config', *args, **kwds).data
69 4f650d54 Shikhar Bhushan
70 a6c00291 Shikhar Bhushan
    edit_config = lambda self, *args, **kwds: self.do('edit-config', *args, **kwds)
71 4f650d54 Shikhar Bhushan
72 a6c00291 Shikhar Bhushan
    copy_config = lambda self, *args, **kwds: self.do('copy-config', *args, **kwds)
73 4f650d54 Shikhar Bhushan
74 a6c00291 Shikhar Bhushan
    validate = lambda self, *args, **kwds: self.do('validate', *args, **kwds)
75 4f650d54 Shikhar Bhushan
76 a6c00291 Shikhar Bhushan
    commit = lambda self, *args, **kwds: self.do('commit', *args, **kwds)
77 4f650d54 Shikhar Bhushan
78 a6c00291 Shikhar Bhushan
    discard_changes = lambda self, *args, **kwds: self.do('discard-changes', *args, **kwds)
79 4f650d54 Shikhar Bhushan
80 a6c00291 Shikhar Bhushan
    delete_config = lambda self, *args, **kwds: self.do('delete-config', *args, **kwds)
81 4f650d54 Shikhar Bhushan
82 a6c00291 Shikhar Bhushan
    lock = lambda self, *args, **kwds: self.do('lock', *args, **kwds)
83 4f650d54 Shikhar Bhushan
84 a6c00291 Shikhar Bhushan
    unlock = lambda self, *args, **kwds: self.do('unlock', *args, **kwds)
85 4f650d54 Shikhar Bhushan
86 a6c00291 Shikhar Bhushan
    close_session = lambda self, *args, **kwds: self.do('close-session', *args, **kwds)
87 4f650d54 Shikhar Bhushan
88 a6c00291 Shikhar Bhushan
    kill_session = lambda self, *args, **kwds: self.do('kill-session', *args, **kwds)
89 4f650d54 Shikhar Bhushan
90 2f8bc438 Shikhar Bhushan
    def close(self):
91 179b00d4 Shikhar Bhushan
        try: # try doing it clean
92 2f8bc438 Shikhar Bhushan
            self.close_session()
93 2f8bc438 Shikhar Bhushan
        except:
94 179b00d4 Shikhar Bhushan
            pass
95 179b00d4 Shikhar Bhushan
        if self._session.connected: # if that didn't work...
96 2f8bc438 Shikhar Bhushan
            self._session.close()
97 4f650d54 Shikhar Bhushan
98 cc9af1c3 Shikhar Bhushan
    @property
99 cc9af1c3 Shikhar Bhushan
    def session(self, session):
100 d771dffc Shikhar Bhushan
        return self._session
101 4f650d54 Shikhar Bhushan
102 cc9af1c3 Shikhar Bhushan
    def get_capabilities(self, whose):
103 d771dffc Shikhar Bhushan
        if whose in ('manager', 'client'):
104 d771dffc Shikhar Bhushan
            return self._session._client_capabilities
105 d771dffc Shikhar Bhushan
        elif whose in ('agent', 'server'):
106 d771dffc Shikhar Bhushan
            return self._session._server_capabilities
107 4f650d54 Shikhar Bhushan
108 cc9af1c3 Shikhar Bhushan
    @property
109 cc9af1c3 Shikhar Bhushan
    def capabilities(self):
110 cc9af1c3 Shikhar Bhushan
        return self._session._client_capabilities
111 4f650d54 Shikhar Bhushan
112 4f650d54 Shikhar Bhushan
    @property
113 4f650d54 Shikhar Bhushan
    def server_capabilities(self):
114 4f650d54 Shikhar Bhushan
        return self._session._server_capabilities