Statistics
| Branch: | Tag: | Revision:

root / ncclient / operations / edit.py @ dd8b8dd7

History | View | Annotate | Download (4.2 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 dd8b8dd7 Shikhar Bhushan
        #:arg default_operation: optional; one of {'merge', 'replace', 'none'}
33 dd8b8dd7 Shikhar Bhushan
        #:type default_operation: `string`
34 dd8b8dd7 Shikhar Bhushan
        #
35 dd8b8dd7 Shikhar Bhushan
        #:arg error_option: optional; one of {'stop-on-error', 'continue-on-error', 'rollback-on-error'}. Last option depends on the *:rollback-on-error* capability
36 dd8b8dd7 Shikhar Bhushan
        #:type error_option: string
37 dd8b8dd7 Shikhar Bhushan
        #
38 dd8b8dd7 Shikhar Bhushan
        #:arg test_option: optional; one of {'test-then-set', 'set'}. Depends on *:validate* capability.
39 dd8b8dd7 Shikhar Bhushan
        #:type test_option: string
40 9667bcb2 Shikhar Bhushan
        node = new_ele("edit-config")
41 9667bcb2 Shikhar Bhushan
        node.append(util.datastore_or_url("target", target, self._assert))
42 2abf9522 Shikhar Bhushan
        if error_option is not None:
43 9667bcb2 Shikhar Bhushan
            if error_option == "rollback-on-error":
44 9667bcb2 Shikhar Bhushan
                self._assert(":rollback-on-error")
45 9667bcb2 Shikhar Bhushan
            sub_ele(node, "error-option").text = error_option
46 2f8bc438 Shikhar Bhushan
        if test_option is not None:
47 c2a5b930 Shikhar Bhushan
            self._assert(':validate')
48 9667bcb2 Shikhar Bhushan
            sub_ele(node, "test-option").text = test_option
49 2abf9522 Shikhar Bhushan
        if default_operation is not None:
50 9667bcb2 Shikhar Bhushan
            # TODO: check if it is a valid default-operation
51 9667bcb2 Shikhar Bhushan
            sub_ele(node, "default-operation").text = default_operation
52 9667bcb2 Shikhar Bhushan
        node.append(validated_element(config, ("config", qualify("config"))))
53 a7cb58ce Shikhar Bhushan
        return self._request(spec)
54 179b00d4 Shikhar Bhushan
55 9667bcb2 Shikhar Bhushan
56 2f8bc438 Shikhar Bhushan
class DeleteConfig(RPC):
57 a7cb58ce Shikhar Bhushan
58 216bb34c Shikhar Bhushan
    "*<delete-config>* RPC"
59 216bb34c Shikhar Bhushan
60 d771dffc Shikhar Bhushan
    def request(self, target):
61 9667bcb2 Shikhar Bhushan
        node = new_ele("delete-config")
62 9667bcb2 Shikhar Bhushan
        node.append(util.datastore_or_url("target", target, self._assert))
63 d6688264 Shikhar Bhushan
        return self._request(spec)
64 d6688264 Shikhar Bhushan
65 1fca349b Shikhar Bhushan
66 2f8bc438 Shikhar Bhushan
class CopyConfig(RPC):
67 a7cb58ce Shikhar Bhushan
68 216bb34c Shikhar Bhushan
    "*<copy-config>* RPC"
69 9667bcb2 Shikhar Bhushan
    
70 d771dffc Shikhar Bhushan
    def request(self, source, target):
71 9667bcb2 Shikhar Bhushan
        node = new_ele("copy-config")
72 9667bcb2 Shikhar Bhushan
        node.append(util.datastore_or_url("target", target, self._assert))
73 9667bcb2 Shikhar Bhushan
        node.append(util.datastore_or_url("source", source, self._assert))
74 d6688264 Shikhar Bhushan
        return self._request(spec)
75 11d9e642 Shikhar Bhushan
76 d6688264 Shikhar Bhushan
77 2f8bc438 Shikhar Bhushan
class Validate(RPC):
78 a7cb58ce Shikhar Bhushan
79 216bb34c Shikhar Bhushan
    "*<validate>* RPC. Depends on the *:validate* capability."
80 216bb34c Shikhar Bhushan
81 d6688264 Shikhar Bhushan
    DEPENDS = [':validate']
82 a7cb58ce Shikhar Bhushan
83 a7cb58ce Shikhar Bhushan
    def request(self, source):
84 9667bcb2 Shikhar Bhushan
        node = new_ele("validate")
85 a7cb58ce Shikhar Bhushan
        try:
86 9667bcb2 Shikhar Bhushan
            src = validated_element(source, ("config", qualify("config")))
87 0b7d3b31 Shikhar Bhushan
        except Exception as e:
88 0b7d3b31 Shikhar Bhushan
            logger.debug(e)
89 9667bcb2 Shikhar Bhushan
            src = util.datastore_or_url("source", source, self._assert)
90 9667bcb2 Shikhar Bhushan
        (node if src.tag == "source" else sub_ele(node, "source")).append(src)
91 d6688264 Shikhar Bhushan
        return self._request(spec)
92 1fca349b Shikhar Bhushan
93 2f8bc438 Shikhar Bhushan
94 2f8bc438 Shikhar Bhushan
class Commit(RPC):
95 a7cb58ce Shikhar Bhushan
96 216bb34c Shikhar Bhushan
    "*<commit>* RPC. Depends on the *:candidate* capability."
97 216bb34c Shikhar Bhushan
98 d6688264 Shikhar Bhushan
    DEPENDS = [':candidate']
99 9667bcb2 Shikhar Bhushan
    
100 216bb34c Shikhar Bhushan
    def request(self, confirmed=False, timeout=None):
101 216bb34c Shikhar Bhushan
        """
102 216bb34c Shikhar Bhushan
        Requires *:confirmed-commit* capability if *confirmed* argument is
103 216bb34c Shikhar Bhushan
        :const:`True`.
104 216bb34c Shikhar Bhushan
        """
105 dd8b8dd7 Shikhar Bhushan
        #:arg confirmed: optional; request a confirmed commit
106 dd8b8dd7 Shikhar Bhushan
        #:type confirmed: `bool`
107 dd8b8dd7 Shikhar Bhushan
        #
108 dd8b8dd7 Shikhar Bhushan
        #:arg timeout: specify timeout for confirmed commit
109 dd8b8dd7 Shikhar Bhushan
        #:type timeout: `int`
110 9667bcb2 Shikhar Bhushan
        node = new_ele("commit")
111 d6688264 Shikhar Bhushan
        if confirmed:
112 9667bcb2 Shikhar Bhushan
            self._assert(":confirmed-commit")
113 9667bcb2 Shikhar Bhushan
            sub_ele(node, "confirmed")
114 d6688264 Shikhar Bhushan
            if timeout is not None:
115 9667bcb2 Shikhar Bhushan
                # TODO check if timeout is a valid integer?
116 9667bcb2 Shikhar Bhushan
                sub_ele(node, "confirm-timeout").text = timeout
117 94803aaf Shikhar Bhushan
        return self._request(Commit.SPEC)
118 94803aaf Shikhar Bhushan
119 1fca349b Shikhar Bhushan
120 d771dffc Shikhar Bhushan
class DiscardChanges(RPC):
121 a7cb58ce Shikhar Bhushan
122 216bb34c Shikhar Bhushan
    "*<discard-changes>* RPC. Depends on the *:candidate* capability."
123 216bb34c Shikhar Bhushan
124 9667bcb2 Shikhar Bhushan
    DEPENDS = [":candidate"]
125 0b7d3b31 Shikhar Bhushan
126 0b7d3b31 Shikhar Bhushan
    def request(self):
127 9667bcb2 Shikhar Bhushan
        return self._request(new_ele("discard-changes"))