[DNS] yang model for static DNS (#13834)

- Why I did it
Add SONiC YANG model for DNS to provide the possibility to configure static DNS entries in Config DB.

- How I did it
Added sonic-dns.yang file that contains the YANG model for the static DNS configuration.

- How to verify it
This PR extends YANG model tests to cover DNS configuration.
To run the test sonic_yang_models-1.0-py3-none-any.whl should be compiled.
This commit is contained in:
Oleksandr Ivantsiv 2023-02-19 08:43:17 +01:00 committed by GitHub
parent a81ffeb5c2
commit a82e45a192
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 126 additions and 2 deletions

View File

@ -66,8 +66,9 @@ Table of Contents
* [LOGGER](#logger) * [LOGGER](#logger)
* [WRED_PROFILE](#wred_profile) * [WRED_PROFILE](#wred_profile)
* [PASSWORD_HARDENING](#password_hardening) * [PASSWORD_HARDENING](#password_hardening)
* [SYSTEM_DEFAULTS table](#systemdefaults-table) * [SYSTEM_DEFAULTS table](#systemdefaults-table)
* [RADIUS](#radius) * [RADIUS](#radius)
* [Static DNS](#static-dns)
* [For Developers](#for-developers) * [For Developers](#for-developers)
* [Generating Application Config by Jinja2 Template](#generating-application-config-by-jinja2-template) * [Generating Application Config by Jinja2 Template](#generating-application-config-by-jinja2-template)
* [Incremental Configuration by Subscribing to ConfigDB](#incremental-configuration-by-subscribing-to-configdb) * [Incremental Configuration by Subscribing to ConfigDB](#incremental-configuration-by-subscribing-to-configdb)
@ -2096,6 +2097,19 @@ The RADIUS and RADIUS_SERVER tables define RADIUS configuration parameters. RADI
} }
``` ```
### Static DNS
The DNS_NAMESERVER table introduces static DNS nameservers configuration.
```json
{
"DNS_NAMESERVER": {
"1.1.1.1": {},
"fe80:1000:2000:3000::1": {}
},
}
```
#### 5.2.3 Update value directly in db memory #### 5.2.3 Update value directly in db memory
For Developers For Developers

View File

@ -107,6 +107,7 @@ setup(
'./yang-models/sonic-device_neighbor_metadata.yang', './yang-models/sonic-device_neighbor_metadata.yang',
'./yang-models/sonic-dhcp-server.yang', './yang-models/sonic-dhcp-server.yang',
'./yang-models/sonic-dhcpv6-relay.yang', './yang-models/sonic-dhcpv6-relay.yang',
'./yang-models/sonic-dns.yang',
'./yang-models/sonic-events-bgp.yang', './yang-models/sonic-events-bgp.yang',
'./yang-models/sonic-events-common.yang', './yang-models/sonic-events-common.yang',
'./yang-models/sonic-events-dhcp-relay.yang', './yang-models/sonic-events-dhcp-relay.yang',

View File

@ -8,6 +8,10 @@
"192.0.0.8": {}, "192.0.0.8": {},
"192.0.0.8": {} "192.0.0.8": {}
}, },
"DNS_NAMESERVER": {
"1.1.1.1": {},
"fe80:1000:2000:3000::1": {}
},
"BUFFER_POOL": { "BUFFER_POOL": {
"ingress_lossy_pool": { "ingress_lossy_pool": {
"mode": "static", "mode": "static",

View File

@ -0,0 +1,13 @@
{
"DNS_NAMESERVER_TEST" : {
"desc": "DNS nameserver configuration in DNS_NAMESERVER table."
},
"DNS_NAMESERVER_TEST_INVALID_IP" : {
"desc": "DNS nameserver configuration with invalid IP value in DNS_NAMESERVER table.",
"eStr": "Invalid value"
},
"DNS_NAMESERVER_TEST_MAX_IP_NUMBER" : {
"desc": "DNS nameserver configuration exceeds the maximum IPs in DNS_NAMESERVER table.",
"eStr": "Too many elements."
}
}

View File

@ -0,0 +1,47 @@
{
"DNS_NAMESERVER_TEST": {
"sonic-dns:sonic-dns": {
"sonic-dns:DNS_NAMESERVER": {
"DNS_NAMESERVER_LIST": [
{
"ip": "192.168.1.1"
},
{
"ip": "fe80:1000:2000:3000::1"
}
]
}
}
},
"DNS_NAMESERVER_TEST_INVALID_IP": {
"sonic-dns:sonic-dns": {
"sonic-dns:DNS_NAMESERVER": {
"DNS_NAMESERVER_LIST": [
{
"ip": "1.x.2.x"
}
]
}
}
},
"DNS_NAMESERVER_TEST_MAX_IP_NUMBER": {
"sonic-dns:sonic-dns": {
"sonic-dns:DNS_NAMESERVER": {
"DNS_NAMESERVER_LIST": [
{
"ip": "192.168.1.1"
},
{
"ip": "fe80:1000:2000:3000::2"
},
{
"ip": "192.168.1.3"
},
{
"ip": "fe80:1000:2000:3000::4"
}
]
}
}
}
}

View File

@ -0,0 +1,45 @@
module sonic-dns {
namespace "http://github.com/sonic-net/sonic-dns";
yang-version 1.1;
prefix dns;
import ietf-inet-types {
prefix inet;
}
organization
"SONiC";
contact
"SONiC";
description "DNS YANG module for SONiC OS";
revision 2023-02-14 {
description "Initial version";
}
container sonic-dns {
container DNS_NAMESERVER {
description "DNS_NAMESERVER part of config_db.json";
list DNS_NAMESERVER_LIST {
max-elements 3;
description "List of nameservers IPs";
key "ip";
leaf ip {
description "IP as DHCP_SERVER";
type inet:ip-address;
}
} /* end of list DNS_NAMESERVER_LIST */
} /* end of container DNS_NAMESERVER */
} /* end of container sonic-dns */
} /* end of module sonic-dns */