diff --git a/files/build_templates/init_cfg.json.j2 b/files/build_templates/init_cfg.json.j2 index 39e180a1179..66ad0f87001 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": "Etc/UTC" } }, "CRM": { diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index c0bec1558f6..495dbdb195d 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -865,7 +865,8 @@ instance is supported in SONiC. "type": "ToRRouter", "bgp_adv_lo_prefix_as_128" : "true", "buffer_model": "traditional", - "yang_config_validation": "disable" + "yang_config_validation": "disable", + "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 66adb918f34..56a97ff257e 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -357,7 +357,8 @@ "sub_role": "FrontEnd", "dhcp_server": "disabled", "bgp_adv_lo_prefix_as_128": "true", - "yang_config_validation": "disable" + "yang_config_validation": "disable", + "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 e55ba4c8257..e480a6b6117 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 @@ -125,6 +125,13 @@ }, "DEVICE_METADATA_ADVERTISE_LO_PREFIX_AS_128": { "desc": "Verifying advertising lo prefix as /128." + }, + "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 638f83d562c..1eead6000a9 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 @@ -332,5 +332,23 @@ } } } + }, + "DEVICE_METADATA_VALID_TIMEZONE": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "timezone": "Etc/UTC" + } + } + } + }, + "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 62daae42065..f6010cf7c69 100644 --- a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang +++ b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang @@ -204,6 +204,15 @@ module sonic-device_metadata { description "Advertise Loopback0 interface IPv6 /128 subnet address as it is with set to true. By default SONiC advertises /128 subnet prefix in Loopback0 as /64 subnet route"; } + + leaf timezone { + type stypes:timezone-name-type { + length 1..255; + } + default "Etc/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 ee26a7d67b1..4b61e086877 100644 --- a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 @@ -333,6 +333,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 {