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'} |