From 8a6d45227ebe1ef07793dac277359fec7d81aff3 Mon Sep 17 00:00:00 2001 From: Yevhen Fastiuk Date: Wed, 7 Jun 2023 20:39:24 +0300 Subject: [PATCH] [Clock] Add timezone config YANG model (#14651) * Add the ability to configure timezone Signed-off-by: Yevhen Fastiuk * Add YANG model for timezone Signed-off-by: Yevhen Fastiuk * Add timezone reference Signed-off-by: Yevhen Fastiuk --------- Signed-off-by: Yevhen Fastiuk --- files/build_templates/init_cfg.json.j2 | 3 ++- src/sonic-yang-models/doc/Configuration.md | 3 ++- .../tests/files/sample_config_db.json | 3 ++- .../tests/device_metadata.json | 7 +++++++ .../tests_config/device_metadata.json | 18 ++++++++++++++++++ .../yang-models/sonic-device_metadata.yang | 9 +++++++++ .../yang-templates/sonic-types.yang.j2 | 13 +++++++++++++ 7 files changed, 53 insertions(+), 3 deletions(-) diff --git a/files/build_templates/init_cfg.json.j2 b/files/build_templates/init_cfg.json.j2 index d7a898dd44..c266988b4d 100644 --- a/files/build_templates/init_cfg.json.j2 +++ b/files/build_templates/init_cfg.json.j2 @@ -4,7 +4,8 @@ "buffer_model": {% if default_buffer_model == "dynamic" %}"dynamic"{% else %}"traditional"{% endif %}, {%- if include_p4rt == "y" %}"synchronous_mode":"enable",{% endif %} "default_bgp_status": {% if shutdown_bgp_on_start == "y" %}"down"{% else %}"up"{% endif %}, - "default_pfcwd_status": {% if enable_pfcwd_on_start == "y" %}"enable"{% else %}"disable"{% endif %} + "default_pfcwd_status": {% if enable_pfcwd_on_start == "y" %}"enable"{% else %}"disable"{% endif %}, + "timezone": "UTC" } }, "CRM": { diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index 7b68497a56..4d1fb79263 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -927,7 +927,8 @@ instance is supported in SONiC. "bgp_adv_lo_prefix_as_128" : "true", "buffer_model": "traditional", "yang_config_validation": "disable", - "rack_mgmt_map": "dummy_value" + "rack_mgmt_map": "dummy_value", + "timezome": "Europe/Kiev" } } } 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 f75a8602fc..059da13fb7 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -360,7 +360,8 @@ "dhcp_server": "disabled", "bgp_adv_lo_prefix_as_128": "true", "yang_config_validation": "disable", - "rack_mgmt_map": "dummy_value" + "rack_mgmt_map": "dummy_value", + "timezone": "Europe/Kiev" } }, "VLAN": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json index c10101e1f6..c77f39e079 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json @@ -142,5 +142,12 @@ "DEVICE_METADATA_INVALID_RACK_MGMT_MAP": { "desc": "Verifying invalid rack_mgmt_map configuration.", "eStr": "Invalid length for the rack mgmt map." + }, + "DEVICE_METADATA_VALID_TIMEZONE": { + "desc": "Verifying valid timezone value" + }, + "DEVICE_METADATA_INVALID_TIMEZONE": { + "desc": "Verifying invalid timezone value", + "eStrKey": "Range" } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json index 1d0d2e6165..e2a8b344e3 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json @@ -372,6 +372,15 @@ } } }, + "DEVICE_METADATA_VALID_TIMEZONE": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "timezone": "UTC" + } + } + } + }, "DEVICE_METADATA_INVALID_RACK_MGMT_MAP": { "sonic-device_metadata:sonic-device_metadata": { "sonic-device_metadata:DEVICE_METADATA": { @@ -380,5 +389,14 @@ } } } + }, + "DEVICE_METADATA_INVALID_TIMEZONE": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "timezone": "" + } + } + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang index 52a5aa37fb..a652b4c686 100644 --- a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang +++ b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang @@ -225,6 +225,15 @@ module sonic-device_metadata { } description "Information of rack mgmt map."; } + + leaf timezone { + type stypes:timezone-name-type { + length 1..255; + } + default "UTC"; + description "The TZ database name to use for the system, such as 'Europe/Stockholm'."; + reference "IANA Time Zone Database http://www.iana.org/time-zones"; + } } /* end of container localhost */ } diff --git a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 index 7f82eb3dc4..4a81da6ed3 100644 --- a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 @@ -334,6 +334,19 @@ module sonic-types { } } + typedef timezone-name-type { + type string; + description + "A time zone name as used by the Time Zone Database, + sometimes referred to as the 'Olson Database'. + + The exact set of valid values is an implementation-specific + matter. Client discovery of the exact set of time zone names + for a particular server is out of scope."; + reference + "BCP 175: Procedures for Maintaining the Time Zone Database"; + } + {% if yang_model_type == "cvl" %} /* Required for CVL */ container operation {