Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / edit.py @ 0cdb8b3c

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