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

[init_cfg.json][YANG] The initial configuration /etc/sonic/init_cfg.json does not pass YANG validation #9598

Open
stepanblyschak opened this issue Dec 20, 2021 · 2 comments
Labels
Dual ToR Platform ♊ Issues found on dual ToR platforms

Comments

@stepanblyschak
Copy link
Collaborator

Description

The init_cfg.json does not pass YANG validation due to:

Value "{% if not (DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['type'] is defined and DEVICE_METADATA['localhost']['type'] != 'ToRRouter') %}enabled{% else %}disabled{% endif %}" does not satisfy the constraint "enabled|disabled|always_enabled|always_disabled" (range, length, or pattern).

Steps to reproduce the issue:

There is no user interface flow to reproduce it, but it is going to be sonic-package-manager (sonic-net/sonic-utilities#1650). With sonic-net/sonic-utilities#1650 the SONiC build will fail due to invalid init_cfg.json.

Simple steps to reproduce:

admin@r-boxer-sw01:~$ python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from config.config_mgmt import ConfigMgmt
>>> mgmt = ConfigMgmt(source='/etc/sonic/init_cfg.json')
Note: Below table(s) have no YANG models:
WJH, WJH_CHANNEL,
libyang[0]: Value "{% if not (DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['type'] is defined and DEVICE_METADATA['localhost']['type'] != 'ToRRouter') %}enabled{% else %}disabled{% endif %}" does not satisfy the
constraint "enabled|disabled|always_enabled|always_disabled" (range, length, or pattern). (path: /sonic-feature:sonic-feature/FEATURE/FEATURE_LIST[name='dhcp_relay']/state)
sonic_yang(3):Data Loading Failed:Value "{% if not (DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['type'] is defined and DEVICE_METADATA['localhost']['type'] != 'ToRRouter') %}enabled{% else %}disabled{% endif %}" does not satisfy the constraint "enabled|disabled|always_enabled|always_disabled" (range, length, or pattern).
Data Loading Failed
Value "{% if not (DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['type'] is defined and DEVICE_METADATA['localhost']['type'] != 'ToRRouter') %}enabled{% else %}disabled{% endif %}" does not satisfy the constraint "enabled|disabled|always_enabled|always_disabled" (range, length, or pattern).
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/sonic_yang_ext.py", line 1065, in loadData
    self.root = self.ctx.parse_data_mem(dumps(self.xlateJson), \
  File "/usr/lib/python3/dist-packages/yang.py", line 2604, in parse_data_mem
    return _yang.Context_parse_data_mem(self, data, format, options)
RuntimeError: Value "{% if not (DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['type'] is defined and DEVICE_METADATA['localhost']['type'] != 'ToRRouter') %}enabled{% else %}disabled{% endif %}" does not satisfy the constraint "enabled|disabled|always_enabled|always_disabled" (range, length, or pattern).

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/config/config_mgmt.py", line 65, in __init__
    self.sy.loadData(self.configdbJsonIn)
  File "/usr/local/lib/python3.9/dist-packages/sonic_yang_ext.py", line 1072, in loadData
    raise SonicYangException("Data Loading Failed\n{}".format(str(e)))
sonic_yang_ext.SonicYangException: Data Loading Failed
Value "{% if not (DEVICE_METADATA is defined and DEVICE_METADATA['localhost'] is defined and DEVICE_METADATA['localhost']['type'] is defined and DEVICE_METADATA['localhost']['type'] != 'ToRRouter') %}enabled{% else %}disabled{% endif %}" does not satisfy the constraint "enabled|disabled|always_enabled|always_disabled" (range, length, or pattern).

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.9/dist-packages/config/config_mgmt.py", line 73, in __init__
    raise Exception('ConfigMgmt Class creation failed')
Exception: ConfigMgmt Class creation failed

Describe the results you received:

A RuntimeError is thrown due to invalid state field value.

Describe the results you expected:

ConfigMgmt(source='/etc/sonic/init_cfg.json') class creation succedes.

Output of show version:

SONiC Software Version: SONiC.master.241-0d327abe9_Internal
Distribution: Debian 11.2
Kernel: 5.10.0-8-2-amd64
Build commit: 0d327abe9
Build date: Mon Dec 20 09:09:58 UTC 2021
Built by: sw-r2d2-bot@r-build-sonic02-005

Platform: x86_64-mlnx_msn2010-r0
HwSKU: ACS-MSN2010
ASIC: mellanox
ASIC Count: 1
Serial Number: Undefined.
Model Number: Undefined.
Hardware Revision: N/A
Uptime: 16:58:49 up  3:29,  1 user,  load average: 1.14, 1.34, 0.91

Docker images:
REPOSITORY                                         TAG                             IMAGE ID       SIZE
docker-teamd                                       latest                          2f47d005bb95   436MB
docker-teamd                                       master.241-0d327abe9_Internal   2f47d005bb95   436MB
docker-syncd-mlnx                                  latest                          cc4d31e33915   1.01GB
docker-syncd-mlnx                                  master.241-0d327abe9_Internal   cc4d31e33915   1.01GB
docker-platform-monitor                            latest                          6b9c00dab5b7   809MB
docker-platform-monitor                            master.241-0d327abe9_Internal   6b9c00dab5b7   809MB
docker-orchagent                                   latest                          5c891ff8f214   455MB
docker-orchagent                                   master.241-0d327abe9_Internal   5c891ff8f214   455MB
docker-dhcp-relay                                  latest                          c646bc83cc8c   436MB
docker-sonic-telemetry                             latest                          606f26ae194f   511MB
docker-sonic-telemetry                             master.241-0d327abe9_Internal   606f26ae194f   511MB
docker-sonic-mgmt-framework                        latest                          7c86fd946748   578MB
docker-sonic-mgmt-framework                        master.241-0d327abe9_Internal   7c86fd946748   578MB
docker-snmp                                        latest                          546605aaf36c   465MB
docker-snmp                                        master.241-0d327abe9_Internal   546605aaf36c   465MB
docker-sflow                                       latest                          68f7233b21a9   436MB
docker-sflow                                       master.241-0d327abe9_Internal   68f7233b21a9   436MB
docker-router-advertiser                           latest                          dafc3d1fb775   423MB
docker-router-advertiser                           master.241-0d327abe9_Internal   dafc3d1fb775   423MB
docker-nat                                         latest                          47bf92fce979   438MB
docker-nat                                         master.241-0d327abe9_Internal   47bf92fce979   438MB
docker-mux                                         latest                          b68969e05d75   475MB
docker-mux                                         master.241-0d327abe9_Internal   b68969e05d75   475MB
docker-macsec                                      latest                          acb05bec6969   439MB
docker-macsec                                      master.241-0d327abe9_Internal   acb05bec6969   439MB
docker-lldp                                        latest                          85f1ea2eb1a0   463MB
docker-lldp                                        master.241-0d327abe9_Internal   85f1ea2eb1a0   463MB
docker-fpm-frr                                     latest                          ebb395f4d389   454MB
docker-fpm-frr                                     master.241-0d327abe9_Internal   ebb395f4d389   454MB
docker-database                                    latest                          89d24c1c4f64   423MB
docker-database                                    master.241-0d327abe9_Internal   89d24c1c4f64   423MB

Output of show techsupport:

(paste your output here or download and attach the file here )

Additional information you deem important (e.g. issue happens only occasionally):

@stepanblyschak
Copy link
Collaborator Author

Temporary W/A #9587 to unblock sonic-net/sonic-utilities#1650 which was reverted by sonic-net/sonic-utilities#1972

@qiluo-msft
Copy link
Collaborator

The issue seems from the hack of field in FEATURE table, mux entry's state field in /etc/sonic/init_cfg.json, contains a short json template.

Since the ground truth of DualToR is from minigraph parser, we should manipulate the state in that script. In Yang model, we could enforce that the mux enabled when DualToR, and disabled when not.

@lguohan Any thought?

@qiluo-msft qiluo-msft added the Dual ToR Platform ♊ Issues found on dual ToR platforms label Dec 20, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Dual ToR Platform ♊ Issues found on dual ToR platforms
Projects
None yet
Development

No branches or pull requests

2 participants