Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / edit.py @ ebf2bbc6

History | View | Annotate | Download (4.7 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 cc9af1c3 Shikhar Bhushan
"Operations related to configuration editing"
22 c2a5b930 Shikhar Bhushan
23 11d9e642 Shikhar Bhushan
class EditConfig(RPC):
24 94803aaf Shikhar Bhushan
    
25 179b00d4 Shikhar Bhushan
    # tested: no
26 cc9af1c3 Shikhar Bhushan
    # combed: yes
27 179b00d4 Shikhar Bhushan
    
28 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'edit-config', 'subtree': []}
29 94803aaf Shikhar Bhushan
    
30 2f8bc438 Shikhar Bhushan
    def request(self, target=None, target_url=None, config=None,
31 2f8bc438 Shikhar Bhushan
                default_operation=None, test_option=None, error_option=None):
32 2f8bc438 Shikhar Bhushan
        util.one_of(target, target_url)
33 2f8bc438 Shikhar Bhushan
        spec = EditConfig.SPEC.copy()
34 c2a5b930 Shikhar Bhushan
        subtree = spec['subtree']
35 c2a5b930 Shikhar Bhushan
        subtree.append({
36 179b00d4 Shikhar Bhushan
            'tag': 'target',
37 cc9af1c3 Shikhar Bhushan
            'subtree': util.store_or_url(target, target_url, self._assert)
38 179b00d4 Shikhar Bhushan
            })
39 ebf2bbc6 Shikhar Bhushan
        subtree.append(content.root_ensured(config, 'config'))
40 2f8bc438 Shikhar Bhushan
        if default_operation is not None:
41 c2a5b930 Shikhar Bhushan
            subtree.append({
42 179b00d4 Shikhar Bhushan
                'tag': 'default-operation',
43 179b00d4 Shikhar Bhushan
                'text': default_operation
44 179b00d4 Shikhar Bhushan
                })
45 2f8bc438 Shikhar Bhushan
        if test_option is not None:
46 c2a5b930 Shikhar Bhushan
            self._assert(':validate')
47 c2a5b930 Shikhar Bhushan
            subtree.append({
48 179b00d4 Shikhar Bhushan
                'tag': 'test-option',
49 179b00d4 Shikhar Bhushan
                'text': test_option
50 179b00d4 Shikhar Bhushan
                })
51 2f8bc438 Shikhar Bhushan
        if error_option is not None:
52 179b00d4 Shikhar Bhushan
            if error_option == 'rollback-on-error':
53 179b00d4 Shikhar Bhushan
                self._assert(':rollback-on-error')
54 c2a5b930 Shikhar Bhushan
            subtree.append({
55 179b00d4 Shikhar Bhushan
                'tag': 'error-option',
56 179b00d4 Shikhar Bhushan
                'text': error_option
57 179b00d4 Shikhar Bhushan
                })
58 179b00d4 Shikhar Bhushan
59 11d9e642 Shikhar Bhushan
60 2f8bc438 Shikhar Bhushan
class DeleteConfig(RPC):
61 94803aaf Shikhar Bhushan
    
62 179b00d4 Shikhar Bhushan
    # tested: no
63 c2a5b930 Shikhar Bhushan
    # combed: yes
64 179b00d4 Shikhar Bhushan
    
65 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'delete-config', 'subtree': []}
66 94803aaf Shikhar Bhushan
    
67 d6688264 Shikhar Bhushan
    def request(self, target=None, target_url=None):
68 d6688264 Shikhar Bhushan
        spec = DeleteConfig.SPEC.copy()
69 cc9af1c3 Shikhar Bhushan
        spec['subtree'].append({
70 cc9af1c3 Shikhar Bhushan
            'tag': 'target',
71 cc9af1c3 Shikhar Bhushan
            'subtree': util.store_or_url(target, target_url, self._assert)
72 cc9af1c3 Shikhar Bhushan
            })
73 d6688264 Shikhar Bhushan
        return self._request(spec)
74 d6688264 Shikhar Bhushan
75 1fca349b Shikhar Bhushan
76 2f8bc438 Shikhar Bhushan
class CopyConfig(RPC):
77 94803aaf Shikhar Bhushan
    
78 179b00d4 Shikhar Bhushan
    # tested: no
79 c2a5b930 Shikhar Bhushan
    # combed: yes
80 179b00d4 Shikhar Bhushan
    
81 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'copy-config', 'subtree': []}
82 94803aaf Shikhar Bhushan
    
83 d6688264 Shikhar Bhushan
    def request(self, source=None, source_url=None, target=None, target_url=None):
84 d6688264 Shikhar Bhushan
        spec = CopyConfig.SPEC.copy()
85 179b00d4 Shikhar Bhushan
        spec['subtree'].append({
86 cc9af1c3 Shikhar Bhushan
            'tag': 'source',
87 cc9af1c3 Shikhar Bhushan
            'subtree': util.store_or_url(source, source_url, self._assert)
88 179b00d4 Shikhar Bhushan
            })
89 179b00d4 Shikhar Bhushan
        spec['subtree'].append({
90 179b00d4 Shikhar Bhushan
            'tag': 'target',
91 cc9af1c3 Shikhar Bhushan
            'subtree': util.store_or_url(target, target_url, self._assert)
92 179b00d4 Shikhar Bhushan
            })
93 d6688264 Shikhar Bhushan
        return self._request(spec)
94 11d9e642 Shikhar Bhushan
95 d6688264 Shikhar Bhushan
96 2f8bc438 Shikhar Bhushan
class Validate(RPC):
97 2f8bc438 Shikhar Bhushan
    
98 179b00d4 Shikhar Bhushan
    # tested: no
99 179b00d4 Shikhar Bhushan
    # combed: yes
100 179b00d4 Shikhar Bhushan
    
101 2f8bc438 Shikhar Bhushan
    'config attr shd not include <config> root'
102 94803aaf Shikhar Bhushan
    
103 d6688264 Shikhar Bhushan
    DEPENDS = [':validate']
104 94803aaf Shikhar Bhushan
    
105 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'validate', 'subtree': []}
106 d6688264 Shikhar Bhushan
    
107 cc9af1c3 Shikhar Bhushan
    def request(self, source=None, source_url=None, config=None):
108 cc9af1c3 Shikhar Bhushan
        util.one_of(source, source_url, config)
109 cc9af1c3 Shikhar Bhushan
        spec = Validate.SPEC.copy()
110 cc9af1c3 Shikhar Bhushan
        if config is None:
111 179b00d4 Shikhar Bhushan
            spec['subtree'].append({
112 179b00d4 Shikhar Bhushan
                'tag': 'source',
113 cc9af1c3 Shikhar Bhushan
                'subtree': util.store_or_url(source, source_url, self._assert)
114 179b00d4 Shikhar Bhushan
            })
115 2f8bc438 Shikhar Bhushan
        else:
116 ebf2bbc6 Shikhar Bhushan
            spec['subtree'].append(content.root_ensured(config, 'config'))
117 d6688264 Shikhar Bhushan
        return self._request(spec)
118 1fca349b Shikhar Bhushan
119 2f8bc438 Shikhar Bhushan
120 2f8bc438 Shikhar Bhushan
class Commit(RPC):
121 94803aaf Shikhar Bhushan
    
122 179b00d4 Shikhar Bhushan
    # tested: no
123 179b00d4 Shikhar Bhushan
    # combed: yes
124 179b00d4 Shikhar Bhushan
    
125 d6688264 Shikhar Bhushan
    DEPENDS = [':candidate']
126 94803aaf Shikhar Bhushan
    
127 cc9af1c3 Shikhar Bhushan
    SPEC = {'tag': 'commit', 'subtree': []}
128 d6688264 Shikhar Bhushan
    
129 d6688264 Shikhar Bhushan
    def _parse_hook(self):
130 d6688264 Shikhar Bhushan
        pass
131 d6688264 Shikhar Bhushan
    
132 d6688264 Shikhar Bhushan
    def request(self, confirmed=False, timeout=None):
133 d6688264 Shikhar Bhushan
        spec = SPEC.copy()
134 d6688264 Shikhar Bhushan
        if confirmed:
135 cc9af1c3 Shikhar Bhushan
            self._assert(':confirmed-commit')
136 179b00d4 Shikhar Bhushan
            spec['subtree'].append({'tag': 'confirmed'})
137 d6688264 Shikhar Bhushan
            if timeout is not None:
138 179b00d4 Shikhar Bhushan
                spec['subtree'].append({
139 d6688264 Shikhar Bhushan
                    'tag': 'confirm-timeout',
140 d6688264 Shikhar Bhushan
                    'text': timeout
141 d6688264 Shikhar Bhushan
                })
142 94803aaf Shikhar Bhushan
        return self._request(Commit.SPEC)
143 94803aaf Shikhar Bhushan
144 1fca349b Shikhar Bhushan
145 179b00d4 Shikhar Bhushan
class ConfirmedCommit(Commit):
146 179b00d4 Shikhar Bhushan
    "psuedo-op"
147 179b00d4 Shikhar Bhushan
    
148 179b00d4 Shikhar Bhushan
    # tested: no
149 179b00d4 Shikhar Bhushan
    # combed: yes
150 179b00d4 Shikhar Bhushan
    
151 179b00d4 Shikhar Bhushan
    DEPENDS = [':candidate', ':confirmed-commit']
152 179b00d4 Shikhar Bhushan
    
153 179b00d4 Shikhar Bhushan
    def request(self, timeout=None):
154 179b00d4 Shikhar Bhushan
        "Commit changes; requireing that a confirming commit follow"
155 179b00d4 Shikhar Bhushan
        return Commit.request(self, confirmed=True, timeout=timeout)
156 179b00d4 Shikhar Bhushan
    
157 179b00d4 Shikhar Bhushan
    def confirm(self):
158 179b00d4 Shikhar Bhushan
        "Make the confirming commit"
159 179b00d4 Shikhar Bhushan
        return Commit.request(self, confirmed=True)
160 179b00d4 Shikhar Bhushan
161 179b00d4 Shikhar Bhushan
162 2f8bc438 Shikhar Bhushan
class DiscardChanges(RPC):
163 d6688264 Shikhar Bhushan
    
164 179b00d4 Shikhar Bhushan
    # tested: no
165 179b00d4 Shikhar Bhushan
    # combed: yes
166 179b00d4 Shikhar Bhushan
    
167 d6688264 Shikhar Bhushan
    DEPENDS = [':candidate']
168 94803aaf Shikhar Bhushan
    
169 94803aaf Shikhar Bhushan
    SPEC = {'tag': 'discard-changes'}