Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / edit.py @ e28708d2

History | View | Annotate | Download (3.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 9667bcb2 Shikhar Bhushan
from ncclient.xml_ import *
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 0b7d3b31 Shikhar Bhushan
import logging
22 9667bcb2 Shikhar Bhushan
logger = logging.getLogger("ncclient.operations.edit")
23 0b7d3b31 Shikhar Bhushan
24 216bb34c Shikhar Bhushan
"Operations related to changing device configuration"
25 c2a5b930 Shikhar Bhushan
26 11d9e642 Shikhar Bhushan
class EditConfig(RPC):
27 a7cb58ce Shikhar Bhushan
28 216bb34c Shikhar Bhushan
    "*<edit-config>* RPC"
29 9667bcb2 Shikhar Bhushan
    
30 216bb34c Shikhar Bhushan
    def request(self, target, config, default_operation=None, test_option=None,
31 216bb34c Shikhar Bhushan
                error_option=None):
32 9667bcb2 Shikhar Bhushan
        node = new_ele("edit-config")
33 9667bcb2 Shikhar Bhushan
        node.append(util.datastore_or_url("target", target, self._assert))
34 2abf9522 Shikhar Bhushan
        if error_option is not None:
35 9667bcb2 Shikhar Bhushan
            if error_option == "rollback-on-error":
36 9667bcb2 Shikhar Bhushan
                self._assert(":rollback-on-error")
37 9667bcb2 Shikhar Bhushan
            sub_ele(node, "error-option").text = error_option
38 2f8bc438 Shikhar Bhushan
        if test_option is not None:
39 c2a5b930 Shikhar Bhushan
            self._assert(':validate')
40 9667bcb2 Shikhar Bhushan
            sub_ele(node, "test-option").text = test_option
41 2abf9522 Shikhar Bhushan
        if default_operation is not None:
42 9667bcb2 Shikhar Bhushan
            # TODO: check if it is a valid default-operation
43 9667bcb2 Shikhar Bhushan
            sub_ele(node, "default-operation").text = default_operation
44 9667bcb2 Shikhar Bhushan
        node.append(validated_element(config, ("config", qualify("config"))))
45 e28708d2 Shikhar Bhushan
        return self._request(node)
46 179b00d4 Shikhar Bhushan
47 9667bcb2 Shikhar Bhushan
48 2f8bc438 Shikhar Bhushan
class DeleteConfig(RPC):
49 a7cb58ce Shikhar Bhushan
50 216bb34c Shikhar Bhushan
    "*<delete-config>* RPC"
51 216bb34c Shikhar Bhushan
52 d771dffc Shikhar Bhushan
    def request(self, target):
53 9667bcb2 Shikhar Bhushan
        node = new_ele("delete-config")
54 9667bcb2 Shikhar Bhushan
        node.append(util.datastore_or_url("target", target, self._assert))
55 e28708d2 Shikhar Bhushan
        return self._request(node)
56 d6688264 Shikhar Bhushan
57 1fca349b Shikhar Bhushan
58 2f8bc438 Shikhar Bhushan
class CopyConfig(RPC):
59 a7cb58ce Shikhar Bhushan
60 216bb34c Shikhar Bhushan
    "*<copy-config>* RPC"
61 9667bcb2 Shikhar Bhushan
    
62 d771dffc Shikhar Bhushan
    def request(self, source, target):
63 9667bcb2 Shikhar Bhushan
        node = new_ele("copy-config")
64 9667bcb2 Shikhar Bhushan
        node.append(util.datastore_or_url("target", target, self._assert))
65 9667bcb2 Shikhar Bhushan
        node.append(util.datastore_or_url("source", source, self._assert))
66 e28708d2 Shikhar Bhushan
        return self._request(node)
67 11d9e642 Shikhar Bhushan
68 d6688264 Shikhar Bhushan
69 2f8bc438 Shikhar Bhushan
class Validate(RPC):
70 a7cb58ce Shikhar Bhushan
71 216bb34c Shikhar Bhushan
    "*<validate>* RPC. Depends on the *:validate* capability."
72 216bb34c Shikhar Bhushan
73 d6688264 Shikhar Bhushan
    DEPENDS = [':validate']
74 a7cb58ce Shikhar Bhushan
75 a7cb58ce Shikhar Bhushan
    def request(self, source):
76 9667bcb2 Shikhar Bhushan
        node = new_ele("validate")
77 a7cb58ce Shikhar Bhushan
        try:
78 9667bcb2 Shikhar Bhushan
            src = validated_element(source, ("config", qualify("config")))
79 0b7d3b31 Shikhar Bhushan
        except Exception as e:
80 0b7d3b31 Shikhar Bhushan
            logger.debug(e)
81 9667bcb2 Shikhar Bhushan
            src = util.datastore_or_url("source", source, self._assert)
82 9667bcb2 Shikhar Bhushan
        (node if src.tag == "source" else sub_ele(node, "source")).append(src)
83 e28708d2 Shikhar Bhushan
        return self._request(node)
84 1fca349b Shikhar Bhushan
85 2f8bc438 Shikhar Bhushan
86 2f8bc438 Shikhar Bhushan
class Commit(RPC):
87 a7cb58ce Shikhar Bhushan
88 bfcf8aea Shikhar Bhushan
    "*<commit>* RPC. Depends on the *:candidate* capability, and the *:confirmed-commit* "
89 216bb34c Shikhar Bhushan
90 d6688264 Shikhar Bhushan
    DEPENDS = [':candidate']
91 9667bcb2 Shikhar Bhushan
    
92 216bb34c Shikhar Bhushan
    def request(self, confirmed=False, timeout=None):
93 9667bcb2 Shikhar Bhushan
        node = new_ele("commit")
94 d6688264 Shikhar Bhushan
        if confirmed:
95 9667bcb2 Shikhar Bhushan
            self._assert(":confirmed-commit")
96 9667bcb2 Shikhar Bhushan
            sub_ele(node, "confirmed")
97 d6688264 Shikhar Bhushan
            if timeout is not None:
98 9667bcb2 Shikhar Bhushan
                # TODO check if timeout is a valid integer?
99 9667bcb2 Shikhar Bhushan
                sub_ele(node, "confirm-timeout").text = timeout
100 e28708d2 Shikhar Bhushan
        return self._request(node)
101 94803aaf Shikhar Bhushan
102 1fca349b Shikhar Bhushan
103 d771dffc Shikhar Bhushan
class DiscardChanges(RPC):
104 a7cb58ce Shikhar Bhushan
105 216bb34c Shikhar Bhushan
    "*<discard-changes>* RPC. Depends on the *:candidate* capability."
106 216bb34c Shikhar Bhushan
107 9667bcb2 Shikhar Bhushan
    DEPENDS = [":candidate"]
108 0b7d3b31 Shikhar Bhushan
109 0b7d3b31 Shikhar Bhushan
    def request(self):
110 9667bcb2 Shikhar Bhushan
        return self._request(new_ele("discard-changes"))