05-10-2019 10:31 AM - edited 05-10-2019 11:14 AM
I want to remove all dns-servers in an ios device. I created the following template attempting to remove the existing DNS servers
<config xmlns="http://tail-f.com/ns/config/1.0"> <devices xmlns="http://tail-f.com/ns/ncs"> <device> <name>{$DEVICE_NAME}</name> <config> <ip xmlns="urn:ios"> <dhcp> <pool> <id>LAN-POOL</id> <?foreach {dns-server}?> <dns-server tags="delete">{dns-server}</dns-server> <?end?> </pool> </dhcp> </ip> </config> </device> </devices> </config>
NSO process the template successfully but the config remains. It seems the way I am dereferencing the value of the dns-server node it is not correct.
I attempted a variation, I made {dns-server} to be {/dns-server} and "/dns-server" was interpreted as a value and it looks like a new entry will be added when I do a sh template
[edit] admin@ncs% show devices template BBB config { ios:ip { dhcp { pool LAN-POOL { dns-server [ "{/dns-server}" ]; } } } } [ok][2019-05-10 13:31:17] [edit] admin@ncs%
This is the original config I want to remove <dns-server> entries from
admin@ncs% show devices device CPE-c2d09c6c-6688-4b3f-b74a-f9fb18be6326 config ios:ip dhcp pool | display xml <config xmlns="http://tail-f.com/ns/config/1.0"> <devices xmlns="http://tail-f.com/ns/ncs" tags=" merge "> <device> <name>CPE-c2d09c6c-6688-4b3f-b74a-f9fb18be6326</name> <config> <ip xmlns="urn:ios"> <dhcp> <pool refcounter="2" backpointer="[ /vmsservice:ufp/vmsservice:vmsservice[vmsservice:name='CPE-c2d09c6c-6688-4b3f-b74a-f9fb18be6326'] ]" > <id>LAN-POOL</id> <network> <network-number>172.26.0.0</network-number> </network> <dns-server>172.16.1.102</dns-server> <dns-server>172.16.2.103</dns-server> <dns-server>172.16.2.104</dns-server> <domain-name>msx.cisco.com</domain-name> </pool> </dhcp> </ip> </config> </device> </devices> </config> [ok][2019-05-10 14:04:15] [edit] admin@ncs%
Any thoughts ?
05-10-2019 11:10 AM
This looks like an attempt to delete a list of dns-servers that you define in your service model. But it sounds like you actually want to delete all pre-existing dns-servers and that is actually much easier.
A tempalte to delete all dns-servers looks something like this:
<ip xmlns="urn:ios"> <dhcp> <pool> <id>LAN-POOL</id> <dns-server tags="delete"></dns-server> </pool> </dhcp> </ip>
05-10-2019 11:34 AM - edited 05-10-2019 11:38 AM
@vleijon Thanks a lot for the response. I tried and that fails with this error
y error: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"> <rpc-error> <error-type>application</error-type> <error-tag>operation-failed</error-tag> <error-severity>error</error-severity> <error-message unknown:lang="en">Exception in callback: Exception while applying template to device CPE-c2d09c6c-6688-4b3f-b74a-f9fb18be6326 message /ncs:devices/template{RemovingDNSConfigs}/config/ip/dhcp/pool{LAN-POOL}/dns-server{""}: Expression '' resulted in an incompatible value '' for /ncs:devices/device{CPE-c2d09c6c-6688-4b3f-b74a-f9fb18be6326}/config/ip/dhcp/pool{LAN-POOL}/dns-server</error-message> </rpc-error> </rpc-reply> at com.cisco.vms.orchestrationservice.nso.NSOClient.handleEditConfig(NSOClient.java:219) at com.cisco.vms.orchestrationservice.stream.handler.OrchestrationMessageProcessor.submitRequest(Orchestration
Running on NSO 4.7.1.
I think it fails because the XPATH query will not be able to find a match. I tried the abbreviated form before trying to use foreach with
<dns-server tags="delete" />
05-10-2019 11:38 AM
05-10-2019 12:30 PM
This is the template I am using
<config xmlns="http://tail-f.com/ns/config/1.0"> <devices xmlns="http://tail-f.com/ns/ncs"> <device> <name>{$DEVICE_NAME}</name> <config> <ip xmlns="urn:ios"> <dhcp> <pool> <id>LAN-POOL</id> <dns-server tags="delete"></dns-server> </pool> </dhcp> </ip> </config> </device> </devices> </config>
05-10-2019 12:38 PM
Sorry, I have no idea why the template doesn't work for you even tough it does for you. You can try doing your commit | debug template or | debug service to try and find more information,
05-10-2019 03:22 PM - edited 05-10-2019 03:24 PM
The best debug information I was able to retrieve is this
[edit] admin@ncs% request devices device CPE-4a07e720-f89f-447b-8a0d-5cf4b3c46542 apply-template template-name Clean\ Previous\ DNS\ Servers | debug template Operation 'merge' on existing node: /devices/device[name='CPE-4a07e720-f89f-447b-8a0d-5cf4b3c46542'] Fetching literal "LAN-POOL" Operation 'merge' on existing node: /devices/device[name='CPE-4a07e720-f89f-447b-8a0d-5cf4b3c46542']/config/ios:ip/dhcp/pool[id='LAN-POOL'] Fetching literal [] Error: 'devices template "Clean Previous DNS Servers" config ip dhcp pool LAN-POOL dns-server ""': Expression '' resulted in an incompatible value '' for 'devices device CPE-4a07e720-f89f-447b-8a0d-5cf4b3c46542 config ip dhcp pool LAN-POOL dns-server' [error][2019-05-10 22:20:14] [edit] admin@ncs%
I think the Fetching Literal [] confirms XPATH is looking for non empty value in the <dns-server tags=delete></dns-server>
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide