Statistics
| Branch: | Tag: | Revision:

root / ncclient / manager.py @ 0cdb8b3c

History | View | Annotate | Download (3.5 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 94803aaf Shikhar Bhushan
    
32 0cdb8b3c Shikhar Bhushan
    "Thin layer of abstraction for the ncclient API."
33 94803aaf Shikhar Bhushan
    
34 4de03d63 Shikhar Bhushan
    def __init__(self, session, rpc_error=RAISE_ALL):
35 179b00d4 Shikhar Bhushan
        self._session = session
36 179b00d4 Shikhar Bhushan
        self._raise = rpc_error
37 d6688264 Shikhar Bhushan
38 d771dffc Shikhar Bhushan
    def do(self, op, *args, **kwds):
39 4de03d63 Shikhar Bhushan
        op = operations.OPERATIONS[op](self._session)
40 2f8bc438 Shikhar Bhushan
        reply = op.request(*args, **kwds)
41 2f8bc438 Shikhar Bhushan
        if not reply.ok:
42 4de03d63 Shikhar Bhushan
            if self._raise == RAISE_ALL:
43 179b00d4 Shikhar Bhushan
                raise reply.error
44 4de03d63 Shikhar Bhushan
            elif self._raise == RAISE_ERROR:
45 179b00d4 Shikhar Bhushan
                for error in reply.errors:
46 179b00d4 Shikhar Bhushan
                    if error.severity == 'error':
47 179b00d4 Shikhar Bhushan
                        raise error
48 2f8bc438 Shikhar Bhushan
        return reply
49 179b00d4 Shikhar Bhushan
    
50 179b00d4 Shikhar Bhushan
    def __enter__(self):
51 179b00d4 Shikhar Bhushan
        pass
52 179b00d4 Shikhar Bhushan
    
53 179b00d4 Shikhar Bhushan
    def __exit__(self, *args):
54 179b00d4 Shikhar Bhushan
        self.close()
55 179b00d4 Shikhar Bhushan
        return False
56 179b00d4 Shikhar Bhushan
    
57 179b00d4 Shikhar Bhushan
    def locked(self, target):
58 d771dffc Shikhar Bhushan
        """Returns a context manager for use withthe 'with' statement.
59 d771dffc Shikhar Bhushan
        `target` is the datastore to lock, e.g. 'candidate
60 d771dffc Shikhar Bhushan
        """
61 a6c00291 Shikhar Bhushan
        return operations.LockContext(self._session, target)
62 cc9af1c3 Shikhar Bhushan
     
63 d771dffc Shikhar Bhushan
    get = lambda self, *args, **kwds: self.do('get', *args, **kwds).data
64 2f8bc438 Shikhar Bhushan
    
65 d771dffc Shikhar Bhushan
    get_config = lambda self, *args, **kwds: self.do('get-config', *args, **kwds).data
66 2f8bc438 Shikhar Bhushan
    
67 a6c00291 Shikhar Bhushan
    edit_config = lambda self, *args, **kwds: self.do('edit-config', *args, **kwds)
68 2f8bc438 Shikhar Bhushan
    
69 a6c00291 Shikhar Bhushan
    copy_config = lambda self, *args, **kwds: self.do('copy-config', *args, **kwds)
70 2f8bc438 Shikhar Bhushan
    
71 a6c00291 Shikhar Bhushan
    validate = lambda self, *args, **kwds: self.do('validate', *args, **kwds)
72 2f8bc438 Shikhar Bhushan
    
73 a6c00291 Shikhar Bhushan
    commit = lambda self, *args, **kwds: self.do('commit', *args, **kwds)
74 2f8bc438 Shikhar Bhushan
    
75 a6c00291 Shikhar Bhushan
    discard_changes = lambda self, *args, **kwds: self.do('discard-changes', *args, **kwds)
76 2f8bc438 Shikhar Bhushan
    
77 a6c00291 Shikhar Bhushan
    delete_config = lambda self, *args, **kwds: self.do('delete-config', *args, **kwds)
78 2f8bc438 Shikhar Bhushan
    
79 a6c00291 Shikhar Bhushan
    lock = lambda self, *args, **kwds: self.do('lock', *args, **kwds)
80 2f8bc438 Shikhar Bhushan
    
81 a6c00291 Shikhar Bhushan
    unlock = lambda self, *args, **kwds: self.do('unlock', *args, **kwds)
82 2f8bc438 Shikhar Bhushan
    
83 a6c00291 Shikhar Bhushan
    close_session = lambda self, *args, **kwds: self.do('close-session', *args, **kwds)
84 2f8bc438 Shikhar Bhushan
    
85 a6c00291 Shikhar Bhushan
    kill_session = lambda self, *args, **kwds: self.do('kill-session', *args, **kwds)
86 2f8bc438 Shikhar Bhushan
    
87 2f8bc438 Shikhar Bhushan
    def close(self):
88 179b00d4 Shikhar Bhushan
        try: # try doing it clean
89 2f8bc438 Shikhar Bhushan
            self.close_session()
90 2f8bc438 Shikhar Bhushan
        except:
91 179b00d4 Shikhar Bhushan
            pass
92 179b00d4 Shikhar Bhushan
        if self._session.connected: # if that didn't work...
93 2f8bc438 Shikhar Bhushan
            self._session.close()
94 d771dffc Shikhar Bhushan
    
95 cc9af1c3 Shikhar Bhushan
    @property
96 cc9af1c3 Shikhar Bhushan
    def session(self, session):
97 d771dffc Shikhar Bhushan
        return self._session
98 cc9af1c3 Shikhar Bhushan
    
99 cc9af1c3 Shikhar Bhushan
    def get_capabilities(self, whose):
100 d771dffc Shikhar Bhushan
        if whose in ('manager', 'client'):
101 d771dffc Shikhar Bhushan
            return self._session._client_capabilities
102 d771dffc Shikhar Bhushan
        elif whose in ('agent', 'server'):
103 d771dffc Shikhar Bhushan
            return self._session._server_capabilities
104 d771dffc Shikhar Bhushan
    
105 cc9af1c3 Shikhar Bhushan
    @property
106 cc9af1c3 Shikhar Bhushan
    def capabilities(self):
107 cc9af1c3 Shikhar Bhushan
        return self._session._client_capabilities