Statistics
| Branch: | Tag: | Revision:

root / ncclient / manager.py @ 68ac4439

History | View | Annotate | Download (3.8 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 216bb34c Shikhar Bhushan
"Thin layer of abstraction around NCClient"
16 216bb34c Shikhar Bhushan
17 94803aaf Shikhar Bhushan
import capabilities
18 0b7d3b31 Shikhar Bhushan
import operations
19 94803aaf Shikhar Bhushan
import transport
20 94803aaf Shikhar Bhushan
21 454339d6 Shikhar Bhushan
import logging
22 454339d6 Shikhar Bhushan
logger = logging.getLogger('ncclient.manager')
23 454339d6 Shikhar Bhushan
24 dd225c7a Shikhar Bhushan
25 68ac4439 Shikhar Bhushan
#: :class:`Capabilities` object representing the capabilities currently supported by NCClient
26 68ac4439 Shikhar Bhushan
CAPABILITIES = capabilities.Capabilities([
27 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:base:1.0",
28 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:capability:writable-running:1.0",
29 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:capability:candidate:1.0",
30 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:capability:confirmed-commit:1.0",
31 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:capability:rollback-on-error:1.0",
32 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:capability:startup:1.0",
33 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:capability:url:1.0?scheme=http,ftp,file,https,sftp",
34 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:capability:validate:1.0",
35 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:capability:xpath:1.0",
36 68ac4439 Shikhar Bhushan
    "urn:liberouter:params:netconf:capability:power-control:1.0"
37 68ac4439 Shikhar Bhushan
    "urn:ietf:params:netconf:capability:interleave:1.0"
38 68ac4439 Shikhar Bhushan
    #'urn:ietf:params:netconf:capability:notification:1.0', # TODO    
39 68ac4439 Shikhar Bhushan
])
40 2f8bc438 Shikhar Bhushan
41 2f8bc438 Shikhar Bhushan
42 b660fcda Shikhar Bhushan
OPERATIONS = {
43 b660fcda Shikhar Bhushan
    "get": operations.Get,
44 b660fcda Shikhar Bhushan
    "get_config": operations.GetConfig,
45 b660fcda Shikhar Bhushan
    "edit_config": operations.EditConfig,
46 b660fcda Shikhar Bhushan
    "copy_config": operations.CopyConfig,
47 b660fcda Shikhar Bhushan
    "validate": operations.Validate,
48 b660fcda Shikhar Bhushan
    "commit": operations.Commit,
49 b660fcda Shikhar Bhushan
    "discard_changes": operations.DiscardChanges,
50 b660fcda Shikhar Bhushan
    "delete_config": operations.DeleteConfig,
51 b660fcda Shikhar Bhushan
    "lock": operations.Lock,
52 b660fcda Shikhar Bhushan
    "unlock": operations.Unlock,
53 b660fcda Shikhar Bhushan
    "close_session": operations.CloseSession,
54 b660fcda Shikhar Bhushan
    "kill_session": operations.KillSession,
55 b660fcda Shikhar Bhushan
    "poweroff_machine": operations.PoweroffMachine,
56 b660fcda Shikhar Bhushan
    "reboot_machine": operations.RebootMachine
57 b660fcda Shikhar Bhushan
}
58 b660fcda Shikhar Bhushan
59 4f650d54 Shikhar Bhushan
60 68ac4439 Shikhar Bhushan
def connect_ssh(*args, **kwds):
61 68ac4439 Shikhar Bhushan
    session = transport.SSHSession(capabilities.CAPABILITIES)
62 68ac4439 Shikhar Bhushan
    session.load_known_hosts()
63 68ac4439 Shikhar Bhushan
    session.connect(*args, **kwds)
64 68ac4439 Shikhar Bhushan
    return Manager(session)
65 68ac4439 Shikhar Bhushan
66 68ac4439 Shikhar Bhushan
#: Same as :meth:`connect_ssh`
67 68ac4439 Shikhar Bhushan
connect = connect_ssh
68 68ac4439 Shikhar Bhushan
69 216bb34c Shikhar Bhushan
70 68ac4439 Shikhar Bhushan
class Manager(object):
71 4f650d54 Shikhar Bhushan
72 4f650d54 Shikhar Bhushan
    def __init__(self, session):
73 179b00d4 Shikhar Bhushan
        self._session = session
74 c8381a66 Shikhar Bhushan
        self._async_mode = False
75 c8381a66 Shikhar Bhushan
        self._timeout = None
76 6c70b245 Shikhar Bhushan
        self._raise_mode = 'all'
77 216bb34c Shikhar Bhushan
78 454339d6 Shikhar Bhushan
    def __enter__(self):
79 454339d6 Shikhar Bhushan
        return self
80 454339d6 Shikhar Bhushan
81 c8381a66 Shikhar Bhushan
    def __exit__(self, *argss):
82 68ac4439 Shikhar Bhushan
        self.close_session()
83 454339d6 Shikhar Bhushan
        return False
84 d6688264 Shikhar Bhushan
85 dd225c7a Shikhar Bhushan
    def __getattr__(self, name):
86 b660fcda Shikhar Bhushan
        op = OPERATIONS.get(name, None)
87 0304f041 Shikhar Bhushan
        if op is None:
88 dd225c7a Shikhar Bhushan
            raise AttributeError
89 c8381a66 Shikhar Bhushan
        else:
90 0304f041 Shikhar Bhushan
            return op(self.session,
91 c8381a66 Shikhar Bhushan
                      async=self._async_mode,
92 0304f041 Shikhar Bhushan
                      timeout=self._timeout,
93 6c70b245 Shikhar Bhushan
                      raise_mode=self._raise_mode).request
94 0304f041 Shikhar Bhushan
    
95 216bb34c Shikhar Bhushan
    def locked(self, target):
96 216bb34c Shikhar Bhushan
        return operations.LockContext(self._session, target)
97 68ac4439 Shikhar Bhushan
    
98 cc9af1c3 Shikhar Bhushan
    @property
99 a7cb58ce Shikhar Bhushan
    def client_capabilities(self):
100 cc9af1c3 Shikhar Bhushan
        return self._session._client_capabilities
101 4f650d54 Shikhar Bhushan
102 4f650d54 Shikhar Bhushan
    @property
103 4f650d54 Shikhar Bhushan
    def server_capabilities(self):
104 4f650d54 Shikhar Bhushan
        return self._session._server_capabilities
105 a7cb58ce Shikhar Bhushan
106 a7cb58ce Shikhar Bhushan
    @property
107 a7cb58ce Shikhar Bhushan
    def session_id(self):
108 a7cb58ce Shikhar Bhushan
        return self._session.id
109 216bb34c Shikhar Bhushan
110 216bb34c Shikhar Bhushan
    @property
111 216bb34c Shikhar Bhushan
    def connected(self):
112 216bb34c Shikhar Bhushan
        return self._session.connected
113 c8381a66 Shikhar Bhushan
114 68ac4439 Shikhar Bhushan
    def set_async_mode(self, mode):
115 68ac4439 Shikhar Bhushan
        self._async_mode = mode
116 c8381a66 Shikhar Bhushan
117 6c70b245 Shikhar Bhushan
    def set_raise_mode(self, mode):
118 68ac4439 Shikhar Bhushan
        assert(choice in ("all", "errors", "none"))
119 6c70b245 Shikhar Bhushan
        self._raise_mode = mode
120 c8381a66 Shikhar Bhushan
121 c8381a66 Shikhar Bhushan
    async_mode = property(fget=lambda self: self._async_mode, fset=set_async_mode)
122 c8381a66 Shikhar Bhushan
123 68ac4439 Shikhar Bhushan
    raise_mode = property(fget=lambda self: self._raise_mode, fset=set_raise_mode)