Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / edit.py @ 216bb34c

History | View | Annotate | Download (5.4 kB)

1 11d9e642 Shikhar Bhushan
# Copyright 2009 Shikhar Bhushan
2 11d9e642 Shikhar Bhushan
#
3 11d9e642 Shikhar Bhushan
# Licensed under the Apache License, Version 2.0 (the "License");
4 11d9e642 Shikhar Bhushan
# you may not use this file except in compliance with the License.
5 11d9e642 Shikhar Bhushan
# You may obtain a copy of the License at
6 11d9e642 Shikhar Bhushan
#
7 11d9e642 Shikhar Bhushan
#    http://www.apache.org/licenses/LICENSE-2.0
8 11d9e642 Shikhar Bhushan
#
9 11d9e642 Shikhar Bhushan
# Unless required by applicable law or agreed to in writing, software
10 11d9e642 Shikhar Bhushan
# distributed under the License is distributed on an "AS IS" BASIS,
11 11d9e642 Shikhar Bhushan
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 11d9e642 Shikhar Bhushan
# See the License for the specific language governing permissions and
13 11d9e642 Shikhar Bhushan
# limitations under the License.
14 11d9e642 Shikhar Bhushan
15 ebf2bbc6 Shikhar Bhushan
from ncclient import content
16 11d9e642 Shikhar Bhushan
17 cc9af1c3 Shikhar Bhushan
from rpc import RPC
18 cc9af1c3 Shikhar Bhushan
19 d6688264 Shikhar Bhushan
import util
20 1fca349b Shikhar Bhushan
21 216bb34c Shikhar Bhushan
"Operations related to changing device configuration"
22 c2a5b930 Shikhar Bhushan
23 11d9e642 Shikhar Bhushan
class EditConfig(RPC):
24 a7cb58ce Shikhar Bhushan
25 216bb34c Shikhar Bhushan
    "*<edit-config>* RPC"
26 216bb34c Shikhar Bhushan
27 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'edit-config', 'subtree': []}
28 a7cb58ce Shikhar Bhushan
29 216bb34c Shikhar Bhushan
    def request(self, target, config, default_operation=None, test_option=None,
30 216bb34c Shikhar Bhushan
                error_option=None):
31 216bb34c Shikhar Bhushan
        """
32 216bb34c Shikhar Bhushan
        :arg target: see :ref:`source_target`
33 216bb34c Shikhar Bhushan
        :type target: string
34 216bb34c Shikhar Bhushan

35 216bb34c Shikhar Bhushan
        :arg config: a config element in :ref:`dtree`
36 216bb34c Shikhar Bhushan
        :type config: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
37 216bb34c Shikhar Bhushan

38 216bb34c Shikhar Bhushan
        :arg default_operation: optional; one of {'merge', 'replace', 'none'}
39 216bb34c Shikhar Bhushan
        :type default_operation: `string`
40 216bb34c Shikhar Bhushan

41 216bb34c Shikhar Bhushan
        :arg test_option: optional; one of {'stop-on-error', 'continue-on-error', 'rollback-on-error'}. Last option depends on the *:rollback-on-error* capability
42 216bb34c Shikhar Bhushan
        :type test_option: string
43 216bb34c Shikhar Bhushan

44 216bb34c Shikhar Bhushan
        :seealso: :ref:`return`
45 216bb34c Shikhar Bhushan
        """
46 2f8bc438 Shikhar Bhushan
        spec = EditConfig.SPEC.copy()
47 c2a5b930 Shikhar Bhushan
        subtree = spec['subtree']
48 d771dffc Shikhar Bhushan
        subtree.append(util.store_or_url('target', target, self._assert))
49 216bb34c Shikhar Bhushan
        subtree.append(content.validated_element(config, ('config', content.qualify('config'))))
50 2f8bc438 Shikhar Bhushan
        if default_operation is not None:
51 c2a5b930 Shikhar Bhushan
            subtree.append({
52 179b00d4 Shikhar Bhushan
                'tag': 'default-operation',
53 179b00d4 Shikhar Bhushan
                'text': default_operation
54 179b00d4 Shikhar Bhushan
                })
55 2f8bc438 Shikhar Bhushan
        if test_option is not None:
56 c2a5b930 Shikhar Bhushan
            self._assert(':validate')
57 c2a5b930 Shikhar Bhushan
            subtree.append({
58 179b00d4 Shikhar Bhushan
                'tag': 'test-option',
59 179b00d4 Shikhar Bhushan
                'text': test_option
60 179b00d4 Shikhar Bhushan
                })
61 2f8bc438 Shikhar Bhushan
        if error_option is not None:
62 179b00d4 Shikhar Bhushan
            if error_option == 'rollback-on-error':
63 179b00d4 Shikhar Bhushan
                self._assert(':rollback-on-error')
64 c2a5b930 Shikhar Bhushan
            subtree.append({
65 179b00d4 Shikhar Bhushan
                'tag': 'error-option',
66 179b00d4 Shikhar Bhushan
                'text': error_option
67 179b00d4 Shikhar Bhushan
                })
68 a7cb58ce Shikhar Bhushan
        return self._request(spec)
69 179b00d4 Shikhar Bhushan
70 2f8bc438 Shikhar Bhushan
class DeleteConfig(RPC):
71 a7cb58ce Shikhar Bhushan
72 216bb34c Shikhar Bhushan
    "*<delete-config>* RPC"
73 216bb34c Shikhar Bhushan
74 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'delete-config', 'subtree': []}
75 a7cb58ce Shikhar Bhushan
76 d771dffc Shikhar Bhushan
    def request(self, target):
77 216bb34c Shikhar Bhushan
        """
78 216bb34c Shikhar Bhushan
        :arg target: See :ref:`source_target`
79 216bb34c Shikhar Bhushan
        :type target: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
80 216bb34c Shikhar Bhushan

81 216bb34c Shikhar Bhushan
        :seealso: :ref:`return`
82 216bb34c Shikhar Bhushan
        """
83 d6688264 Shikhar Bhushan
        spec = DeleteConfig.SPEC.copy()
84 a7cb58ce Shikhar Bhushan
        spec['subtree'].append(util.store_or_url('target', target, self._assert))
85 d6688264 Shikhar Bhushan
        return self._request(spec)
86 d6688264 Shikhar Bhushan
87 1fca349b Shikhar Bhushan
88 2f8bc438 Shikhar Bhushan
class CopyConfig(RPC):
89 a7cb58ce Shikhar Bhushan
90 216bb34c Shikhar Bhushan
    "*<copy-config>* RPC"
91 216bb34c Shikhar Bhushan
92 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'copy-config', 'subtree': []}
93 a7cb58ce Shikhar Bhushan
94 d771dffc Shikhar Bhushan
    def request(self, source, target):
95 216bb34c Shikhar Bhushan
        """
96 216bb34c Shikhar Bhushan
        :arg source: See :ref:`source_target`
97 216bb34c Shikhar Bhushan
        :type source: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
98 216bb34c Shikhar Bhushan

99 216bb34c Shikhar Bhushan
        :arg target: See :ref:`source_target`
100 216bb34c Shikhar Bhushan
        :type target: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
101 216bb34c Shikhar Bhushan

102 216bb34c Shikhar Bhushan
        :seealso: :ref:`return`
103 216bb34c Shikhar Bhushan
        """
104 d6688264 Shikhar Bhushan
        spec = CopyConfig.SPEC.copy()
105 d771dffc Shikhar Bhushan
        spec['subtree'].append(util.store_or_url('source', source, self._assert))
106 a7cb58ce Shikhar Bhushan
        spec['subtree'].append(util.store_or_url('target', target, self._assert))
107 d6688264 Shikhar Bhushan
        return self._request(spec)
108 11d9e642 Shikhar Bhushan
109 d6688264 Shikhar Bhushan
110 2f8bc438 Shikhar Bhushan
class Validate(RPC):
111 a7cb58ce Shikhar Bhushan
112 216bb34c Shikhar Bhushan
    "*<validate>* RPC. Depends on the *:validate* capability."
113 216bb34c Shikhar Bhushan
114 d6688264 Shikhar Bhushan
    DEPENDS = [':validate']
115 a7cb58ce Shikhar Bhushan
116 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'validate', 'subtree': []}
117 a7cb58ce Shikhar Bhushan
118 a7cb58ce Shikhar Bhushan
    def request(self, source):
119 216bb34c Shikhar Bhushan
        """
120 216bb34c Shikhar Bhushan
        :arg source: See :ref:`source_target`
121 216bb34c Shikhar Bhushan
        :type source: `string` or `dict` or :class:`~xml.etree.ElementTree.Element`
122 216bb34c Shikhar Bhushan

123 216bb34c Shikhar Bhushan
        :seealso: :ref:`return`
124 216bb34c Shikhar Bhushan
        """
125 cc9af1c3 Shikhar Bhushan
        spec = Validate.SPEC.copy()
126 a7cb58ce Shikhar Bhushan
        try:
127 a7cb58ce Shikhar Bhushan
            spec['subtree'].append({
128 a7cb58ce Shikhar Bhushan
                'tag': 'source',
129 216bb34c Shikhar Bhushan
                'subtree':
130 216bb34c Shikhar Bhushan
                    content.validated_element(
131 216bb34c Shikhar Bhushan
                        config, ('config', content.qualify('config')))
132 a7cb58ce Shikhar Bhushan
                })
133 216bb34c Shikhar Bhushan
        except:
134 d771dffc Shikhar Bhushan
            spec['subtree'].append(util.store_or_url('source', source, self._assert))
135 d6688264 Shikhar Bhushan
        return self._request(spec)
136 1fca349b Shikhar Bhushan
137 2f8bc438 Shikhar Bhushan
138 2f8bc438 Shikhar Bhushan
class Commit(RPC):
139 a7cb58ce Shikhar Bhushan
140 216bb34c Shikhar Bhushan
    "*<commit>* RPC. Depends on the *:candidate* capability."
141 216bb34c Shikhar Bhushan
142 d6688264 Shikhar Bhushan
    DEPENDS = [':candidate']
143 a7cb58ce Shikhar Bhushan
144 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'commit', 'subtree': []}
145 a7cb58ce Shikhar Bhushan
146 d6688264 Shikhar Bhushan
    def _parse_hook(self):
147 d6688264 Shikhar Bhushan
        pass
148 a7cb58ce Shikhar Bhushan
149 216bb34c Shikhar Bhushan
    def request(self, confirmed=False, timeout=None):
150 216bb34c Shikhar Bhushan
        """
151 216bb34c Shikhar Bhushan
        Requires *:confirmed-commit* capability if *confirmed* argument is
152 216bb34c Shikhar Bhushan
        :const:`True`.
153 216bb34c Shikhar Bhushan

154 216bb34c Shikhar Bhushan
        :arg confirmed: optional; request a confirmed commit
155 216bb34c Shikhar Bhushan
        :type confirmed: `bool`
156 216bb34c Shikhar Bhushan

157 216bb34c Shikhar Bhushan
        :arg timeout: specify timeout for confirmed commit
158 216bb34c Shikhar Bhushan
        :type timeout: `int`
159 216bb34c Shikhar Bhushan

160 216bb34c Shikhar Bhushan
        :seealso: :ref:`return`
161 216bb34c Shikhar Bhushan
        """
162 d6688264 Shikhar Bhushan
        spec = SPEC.copy()
163 d6688264 Shikhar Bhushan
        if confirmed:
164 cc9af1c3 Shikhar Bhushan
            self._assert(':confirmed-commit')
165 179b00d4 Shikhar Bhushan
            spec['subtree'].append({'tag': 'confirmed'})
166 d6688264 Shikhar Bhushan
            if timeout is not None:
167 179b00d4 Shikhar Bhushan
                spec['subtree'].append({
168 d6688264 Shikhar Bhushan
                    'tag': 'confirm-timeout',
169 d6688264 Shikhar Bhushan
                    'text': timeout
170 d6688264 Shikhar Bhushan
                })
171 94803aaf Shikhar Bhushan
        return self._request(Commit.SPEC)
172 94803aaf Shikhar Bhushan
173 1fca349b Shikhar Bhushan
174 d771dffc Shikhar Bhushan
class DiscardChanges(RPC):
175 a7cb58ce Shikhar Bhushan
176 216bb34c Shikhar Bhushan
    "*<discard-changes>* RPC. Depends on the *:candidate* capability."
177 216bb34c Shikhar Bhushan
178 d771dffc Shikhar Bhushan
    DEPENDS = [':candidate']
179 a7cb58ce Shikhar Bhushan
180 d771dffc Shikhar Bhushan
    SPEC = {'tag': 'discard-changes'}