root / ncclient / manager.py @ 583c11f6
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 | 2f8bc438 | Shikhar Bhushan | def connect_ssh(*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 | 179b00d4 | Shikhar Bhushan | connect = connect_ssh # 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 | d771dffc | Shikhar Bhushan | "Thin layer of abstraction for the 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 |