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 |