Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clock commands management HLD #1219

Merged
merged 22 commits into from
Apr 28, 2023
Merged
Changes from 14 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
a4968d6
Initial doc for HLD
Meir-renford Jan 12, 2023
428521c
Merge pull request #1 from Meir-renford/master
Meir-renford Jan 15, 2023
8775600
Update clock_managment_hld.md
Meir-renford Jan 15, 2023
e4607f9
Update clock_managment_hld.md
Meir-renford Jan 15, 2023
d6bd0f1
Update clock_managment_hld.md
Meir-renford Jan 15, 2023
9a38f25
Update clock_managment_hld.md
Meir-renford Jan 15, 2023
8fe9815
Update clock_managment_hld.md
Meir-renford Jan 15, 2023
0217fc0
Update clock_managment_hld.md
Meir-renford Jan 15, 2023
54dd6e6
Update clock_managment_hld.md
Meir-renford Jan 16, 2023
0ab39a3
Update clock_managment_hld.md
Meir-renford Jan 17, 2023
9be491b
Update clock_managment_hld.md
Meir-renford Feb 13, 2023
1f31645
Update clock_managment_hld.md
Meir-renford Feb 13, 2023
387066a
Update clock_managment_hld.md
Meir-renford Feb 13, 2023
1546f86
Update clock_managment_hld.md
Meir-renford Feb 13, 2023
36d83a4
Merge branch 'master' into clock-commands
liat-grozovik Mar 7, 2023
340f463
Merge branch 'master' into clock-commands
liat-grozovik Mar 21, 2023
1f27985
Update clock_managment_hld.md
Meir-renford Apr 11, 2023
5886871
Update clock_managment_hld.md
Meir-renford Apr 11, 2023
f082135
Update clock_managment_hld.md
Meir-renford Apr 21, 2023
1db60fd
Merge branch 'clock-commands' of https://github.com/Meir-renford/SONi…
Meir-renford Apr 21, 2023
2c29a42
Merge branch 'master' into clock-commands
yxieca Apr 21, 2023
06b0cb4
Merge branch 'master' into clock-commands
liat-grozovik Apr 28, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
219 changes: 219 additions & 0 deletions doc/Clock commands/clock_managment_hld.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
# Clock Managment Design #

## Table of Content


* 1. [Table of Content](#TableofContent)
* 1.1. [Revision](#Revision)
* 1.2. [Scope](#Scope)
* 1.3. [Definitions/Abbreviations](#DefinitionsAbbreviations)
* 1.4. [Overview](#Overview)
* 1.5. [Requirements](#Requirements)
* 1.5.1. [Functional requirements](#FunctionalRequirements)
* 1.5.2. [Configuration and Management Requirements](#ConfigurationManagementRequirements)
* 2. [Design](#Design)
* 2.1. [High-Level Design](#High-LevelDesign)
* 3. [Configuration and management](#Configurationandmanagement)
* 3.1. [ConfigDB Tables](#ConfigDBTables)
* 3.2. [CLI/YANG model](#CLIYANGmodel)
* 3.2.1. [Yang model](#Yangmodel)
* 3.2.2. [CLI](#Climodel)
* 4. [Test Plan](#TestPlan)
* 4.1. [Unit Test cases](#UnitTestcases)


### 1.1 <a name='Revision'></a>Revision

| Rev | Date | Author | Change Description |
| :---: | :-----: | :--------------: | :----------------: |
| 0.1 | 01/2023 | Meir Renford | High level Design |

### 1.2. <a name='Scope'></a>Scope

This document will address the high level design for clock commands:
1. Set/show date-time command
2. Set/show timezone command


### 1.3 <a name='DefinitionsAbbreviations'></a>Definitions/Abbreviations

N/A

### 1.4 Overview

The clock commands allow to set and review the current time parameters of the system - including: time, date and timezone.

### 1.5 Requirements
#### 1.5.1. <a name='FunctionalRequirements'></a>Functional requirements

1. Any time/date configuration will change accordingly the system time.

#### 1.5.2. <a name='ConfigurationManagementRequirements'></a>Configuration and Management Requirements
The requirements from the module are:
1. Set and show the system time and date.
2. Set and show the system timezone.


## 2 <a name='Design'></a>Design

### 2.1 <a name='High-LevelDesign'></a>High-Level Design

The design of this feature is based on Linux command of <b>timedatectl</b>.<BR>
(man page for timedatectl: https://man7.org/linux/man-pages/man1/timedatectl.1.html)

All set operations are based on this command, executing directly in linux upon user CLI execution.
Meir-renford marked this conversation as resolved.
Show resolved Hide resolved
The time/date/timezone are configured directly to Linux, and is persistent upon any reboot.

System state of time/date/timezone will appear in 1 line as an output of existing "show clock" command.

hostcfgd will be the daemon in charge of this configuration management.

<u>CLI Commands desin:</u><br>

Set operations will be divided into 2 different commands:

1. config clock set-timezone <timezone> (to set timezone command)
* will get single input as a string, and validate it is valid as part of ("timedatectl list-timezones" command).
Validation will be done either by YANG model, or (if not possible) by issueing relevant error to log.
* Value will be stored in db for future upgrade operations.
Value is persistent upon reboot.
* Linux timedatectl with set-timezone flag will be called.
e.g. timedatectl set-timezone "Asia/Kolkata"
* <b>In case NTP is enabled -> timezone configuration is allowed and overrides the current time.</b>
* Date & timezone setting will be reflected of all the services/dockers in the system.


2. config clock set-date "<YYYY-MM-DD HH:MM:SS>" (to set time and date)
* Command will recieve single string with date-time format "<YYYY-MM-DD HH:MM:SS>"
* It will be possible to call command with the following options:
1. Only with a date <YYYY-MM-DD>
2. Only with time <HH:MM:SS>
3. both date and time "<YYYY-MM-DD HH:MM:SS>"
* Command does not need to be stored in DB.
* Linux timedatectl with set-time flag will be called.
e.g. timedatectl set-time "2012-10-30 18:17:16"
* <b>In case NTP is enabled -> time/date set is NOT allowed and being blocked</b>

Meir-renford marked this conversation as resolved.
Show resolved Hide resolved
Additional show command will be added to display all valid timezones:

3. show clock-timezones

* Will display list of all valid timezones to be configured.
* based on "timedatectl list-timezones" linux command.


<u>General notes:</u><br>

* Both set commands will be written directly to Linux (via imedatectl command), and will be activated immediately.

* In case of any set command (time/date/timezone) a relevant message will be print to syslog.

* In case of any set command (time/date/timezone) - rsyslog service should be restarted to reflect the time change.

* Upgrades - timezone configuration is part of DEVICE_METADATA, hence - configuration upgrade will be taken care of as any other sonic configuration.


## 3 <a name='Configurationandmanagement'></a>Configuration and management

### 3.1 <a name='ConfigDBTables'></a>ConfigDB Tables

Only timezone configuration will be saved.
Additional field will be added to DEVICE_METADATA table

```
DEVICE_METADATA :{
"timezone": {{string}}
}
Meir-renford marked this conversation as resolved.
Show resolved Hide resolved
```

default value: "Etc/UTC"
Meir-renford marked this conversation as resolved.
Show resolved Hide resolved


### 3.2 <a name='CLIYANGmodel'></a>CLI/YANG model

#### 3.2.1. <a name='Yangmodel'></a>Yang model


Adding to existing Yang model of device_metadata (https://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-yang-models/yang-models/sonic-device_metadata.yang)

```
container sonic-device_metadata {

container DEVICE_METADATA {

description "DEVICE_METADATA part of config_db.json";

container localhost{
...
leaf timezone {
type string;
Meir-renford marked this conversation as resolved.
Show resolved Hide resolved
description "System time-zone setting";
}
```

#### 3.2.2. <a name='Climodel'></a>CLI

##### Show CLI

```
root@host:~$ show clock
Sun 15 Jan 2023 06:12:08 PM IST

```

```
root@host:~$ show clock-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
...

```

##### Config CLI

```
root@host:~$ config clock set-timezone "<timezone>"

```

```
root@host:~$ config clock set-date "<YYYY-MM-DD HH:MM:SS>"

```


## 4 <a name='TestPlan'></a>Test Plan

### 4.1 <a name='UnitTestcases'></a>Unit Test cases
Meir-renford marked this conversation as resolved.
Show resolved Hide resolved

1. Good flows:<br>
a. set timezone<br>
b. set date<br>
c. set time<br>
d. set date & time<br>
e. check reboot / upgrade<br>
Meir-renford marked this conversation as resolved.
Show resolved Hide resolved
f. check docker restart<br>
g. config load / reload <> <br>
h. reboot without config save<br>
i. upgrade with manually timedatectl before upgrade<br>
Meir-renford marked this conversation as resolved.
Show resolved Hide resolved


2. Bad flows:<br>
a. set invalid timezone<br>
b. set empty string<br>
c. set invalid date format<br>
d. set invalid time format<br>
e. set invalide date/time format<br>

3. NTP interop<br>
a. Change time/date, followed by changing NTP - and see time changed.<br>
b. try to change time/date in case NTP is enabled -> and expect getting a failure.<br>
c. Change timezone in case NTP is enabled, and expect to succeed and change relevant time.<br>

4. Rsyslog:<br>
a. In case of any set command (time/date/timezone) - verify rsyslog service should be restarted to reflect the time change.

* Functional tests covering flows above will be part of sonic-mgmt tests suite.