diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index d8904ae5e828..47ccb2a3e4ee 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -44,7 +44,8 @@ Table of Contents * [Queue](#queue) * [Tacplus Server](#tacplus-server) * [TC to Priority group map](#tc-to-priority-group-map) - * [TC to Queue map](#tc-to-queue-map) + * [TC to Queue map](#tc-to-queue-map) + * [Telemetry](#telemetry) * [Versions](#versions) * [VLAN](#vlan) * [VLAN_MEMBER](#vlan_member) @@ -1355,6 +1356,25 @@ name as object key and member list as attribute. } ``` +### Telemetry + +``` +{ + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + } +} +``` + ### Versions This table is where the curret version of the software is recorded. diff --git a/src/sonic-yang-models/setup.py b/src/sonic-yang-models/setup.py index 1298b768bafb..52cf020f4491 100644 --- a/src/sonic-yang-models/setup.py +++ b/src/sonic-yang-models/setup.py @@ -126,6 +126,7 @@ def run(self): './yang-models/sonic-syslog.yang', './yang-models/sonic-system-aaa.yang', './yang-models/sonic-system-tacacs.yang', + './yang-models/sonic-telemetry.yang', './yang-models/sonic-types.yang', './yang-models/sonic-versions.yang', './yang-models/sonic-vlan.yang', @@ -184,6 +185,7 @@ def run(self): './cvlyang-models/sonic-sflow.yang', './cvlyang-models/sonic-system-aaa.yang', './cvlyang-models/sonic-system-tacacs.yang', + './cvlyang-models/sonic-telemetry.yang', './cvlyang-models/sonic-types.yang', './cvlyang-models/sonic-versions.yang', './cvlyang-models/sonic-vlan.yang', diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index e19c8aeb8d68..e284794616a7 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -1045,6 +1045,18 @@ "VERSION": "version_1_0_3" } }, + "TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + }, "FLEX_COUNTER_TABLE": { "PFCWD": { "FLEX_COUNTER_STATUS": "enable" @@ -1516,7 +1528,7 @@ "pir": "2560000", "type": "STRICT" } - }, + }, "WRED_PROFILE": { "Wred1": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry.json b/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry.json new file mode 100644 index 000000000000..f79e8ea73272 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry.json @@ -0,0 +1,17 @@ +{ + "TELEMETRY_TABLE_WITH_INCORRECT_CERT": { + "desc": "TABLE_WITH_INCORRECT_CERT failure.", + "eStrKey": "Pattern" + }, + "TELEMETRY_TABLE_WITH_INCORRECT_CLIENT_AUTH": { + "desc": "TABLE_WITH_INCORRECT_CLIENT_AUTH failure", + "eStrKey": "InvalidValue" + }, + "TELEMETRY_TABLE_WITH_INCORRECT_PORT": { + "desc": "TABLE_WITH_INCORRECT_PORT failure.", + "eStrKey": "InvalidValue" + }, + "TELEMETRY_TABLE_WITH_VALID_CONFIG": { + "desc": "TABLE WITH VALID CONFIG." + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json new file mode 100644 index 000000000000..1231a4cee662 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json @@ -0,0 +1,66 @@ +{ + "TELEMETRY_TABLE_WITH_INCORRECT_CERT": { + "sonic-telemetry:sonic-telemetry": { + "sonic-telemetry:TELEMETRY": { + "certs": { + "ca_crt": "abcd.config", + "server_crt": "a/b/c", + "server_key": "123" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + } + } + }, + "TELEMETRY_TABLE_WITH_INCORRECT_CLIENT_AUTH": { + "sonic-telemetry:sonic-telemetry": { + "sonic-telemetry:TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "up", + "log_level": "2", + "port": "50051" + } + } + } + }, + "TELEMETRY_TABLE_WITH_INCORRECT_PORT": { + "sonic-telemetry:sonic-telemetry": { + "sonic-telemetry:TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "abc" + } + } + } + }, + "TELEMETRY_TABLE_WITH_VALID_CONFIG": { + "sonic-telemetry:sonic-telemetry": { + "sonic-telemetry:TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + } + } + } + } +} diff --git a/src/sonic-yang-models/yang-models/sonic-telemetry.yang b/src/sonic-yang-models/yang-models/sonic-telemetry.yang new file mode 100644 index 000000000000..0164da5157eb --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-telemetry.yang @@ -0,0 +1,78 @@ +module sonic-telemetry { + + yang-version 1.1; + + namespace "http://github.com/Azure/sonic-telemetry"; + prefix telemetry; + + import ietf-inet-types { + prefix inet; + } + + organization + "SONiC"; + + contact + "SONiC"; + + description "TELEMETRY YANG Module for SONiC OS"; + + revision 2022-05-13 { + description "First Revision"; + } + + container sonic-telemetry { + + container TELEMETRY { + + description "TELEMETRY TABLE part of config_db.json"; + + container certs { + + leaf ca_crt { + type string { + pattern '(/[a-zA-Z0-9_-]+)*/([a-zA-Z0-9_-]+).cer'; + } + description "Local path for ca_crt."; + } + + leaf server_crt { + type string { + pattern '(/[a-zA-Z0-9_-]+)*/([a-zA-Z0-9_-]+).cer'; + } + description "Local path for server_crt."; + } + + leaf server_key { + type string { + pattern '(/[a-zA-Z0-9_-]+)*/([a-zA-Z0-9_-]+).key'; + } + description "Local path for server_key."; + } + + } + + container gnmi { + + leaf client_auth { + type boolean; + description "Flag for requiring client auth."; + } + + leaf log_level { + type uint8 { + range 0..100; + } + description "Log level for gnmi."; + } + + leaf port { + type inet:port-number; + description "Port gnmi runs on."; + } + + } + + } + } +}