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