Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 5 additions & 4 deletions config/chassis_modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import click

import utilities_common.cli as clicommon
from utilities_common import constants

#
# 'chassis_modules' group ('config chassis_modules ...')
Expand All @@ -16,11 +17,11 @@ def chassis_modules():
# 'shutdown' subcommand ('config chassis_modules shutdown ...')
#
@chassis_modules.command('shutdown')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
@click.argument('chassis_module_name', metavar='<module_name>', required=True)
def shutdown_chassis_module(db, chassis_module_name):
"""Chassis-module shutdown of module"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]
ctx = click.get_current_context()

if not chassis_module_name.startswith("SUPERVISOR") and \
Expand All @@ -35,10 +36,10 @@ def shutdown_chassis_module(db, chassis_module_name):
# 'startup' subcommand ('config chassis_modules startup ...')
#
@chassis_modules.command('startup')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
@click.argument('chassis_module_name', metavar='<module_name>', required=True)
def startup_chassis_module(db, chassis_module_name):
"""Chassis-module startup of module"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]

config_db.set_entry('CHASSIS_MODULE', chassis_module_name, None)
29 changes: 15 additions & 14 deletions config/console.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import click
import utilities_common.cli as clicommon
from utilities_common import constants

#
# 'console' group ('config console ...')
Expand All @@ -13,10 +14,10 @@ def console():
# 'console enable' group ('config console enable')
#
@console.command('enable')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
def enable_console_switch(db):
"""Enable console switch"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]

table = "CONSOLE_SWITCH"
dataKey1 = 'console_mgmt'
Expand All @@ -29,10 +30,10 @@ def enable_console_switch(db):
# 'console disable' group ('config console disable')
#
@console.command('disable')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
def disable_console_switch(db):
"""Disable console switch"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]

table = "CONSOLE_SWITCH"
dataKey1 = 'console_mgmt'
Expand All @@ -45,14 +46,14 @@ def disable_console_switch(db):
# 'console add' group ('config console add ...')
#
@console.command('add')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
@click.argument('linenum', metavar='<line_number>', required=True, type=click.IntRange(0, 65535))
@click.option('--baud', '-b', metavar='<baud>', required=True, type=click.INT)
@click.option('--flowcontrol', '-f', metavar='<flow_control>', required=False, is_flag=True)
@click.option('--devicename', '-d', metavar='<device_name>', required=False)
def add_console_setting(db, linenum, baud, flowcontrol, devicename):
"""Add Console-realted configuration tasks"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]

table = "CONSOLE_PORT"
dataKey1 = 'baud_rate'
Expand All @@ -79,11 +80,11 @@ def add_console_setting(db, linenum, baud, flowcontrol, devicename):
# 'console del' group ('config console del ...')
#
@console.command('del')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
@click.argument('linenum', metavar='<line_number>', required=True, type=click.IntRange(0, 65535))
def remove_console_setting(db, linenum):
"""Remove Console-related configuration tasks"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]

table = "CONSOLE_PORT"

Expand All @@ -98,12 +99,12 @@ def remove_console_setting(db, linenum):
# 'console remote_device' group ('config console remote_device ...')
#
@console.command('remote_device')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
@click.argument('linenum', metavar='<line_number>', required=True, type=click.IntRange(0, 65535))
@click.argument('devicename', metavar='<device_name>', required=False)
def upate_console_remote_device_name(db, linenum, devicename):
"""Update remote device name for a console line"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]
ctx = click.get_current_context()

table = "CONSOLE_PORT"
Expand All @@ -130,12 +131,12 @@ def upate_console_remote_device_name(db, linenum, devicename):
# 'console baud' group ('config console baud ...')
#
@console.command('baud')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
@click.argument('linenum', metavar='<line_number>', required=True, type=click.IntRange(0, 65535))
@click.argument('baud', metavar='<baud>', required=True, type=click.INT)
def update_console_baud(db, linenum, baud):
"""Update baud for a console line"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]
ctx = click.get_current_context()

table = "CONSOLE_PORT"
Expand All @@ -157,12 +158,12 @@ def update_console_baud(db, linenum, baud):
# 'console flow_control' group ('config console flow_control ...')
#
@console.command('flow_control')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
@click.argument('mode', metavar='<mode>', required=True, type=click.Choice(["enable", "disable"]))
@click.argument('linenum', metavar='<line_number>', required=True, type=click.IntRange(0, 65535))
def update_console_flow_control(db, mode, linenum):
"""Update flow control setting for a console line"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]
ctx = click.get_current_context()

table = "CONSOLE_PORT"
Expand Down
40 changes: 28 additions & 12 deletions config/feature.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import sys

import click
from utilities_common.cli import AbbreviationGroup, pass_db
from utilities_common.cli import AbbreviationGroup, pass_multi_asic_db

#
# 'feature' group ('config feature ...')
Expand All @@ -17,38 +17,54 @@ def feature():
@feature.command('state', short_help="Enable/disable a feature")
@click.argument('name', metavar='<feature-name>', required=True)
@click.argument('state', metavar='<state>', required=True, type=click.Choice(["enabled", "disabled"]))
@pass_db
@pass_multi_asic_db
def feature_state(db, name, state):
"""Enable/disable a feature"""
entry_data = db.cfgdb.get_entry('FEATURE', name)
entry_data_set = set()

if not entry_data:
click.echo("Feature '{}' doesn't exist".format(name))
for ns, cfgdb in db.cfgdb.items():
entry_data = cfgdb.get_entry('FEATURE', name)
if not entry_data:
click.echo("Feature '{}' doesn't exist".format(name))
sys.exit(1)
entry_data_set.add(entry_data['state'])

if len(entry_data_set) > 1:
click.echo("Feature '{}' state is not consistent across namespaces".format(name))
sys.exit(1)

if entry_data['state'] == "always_enabled":
click.echo("Feature '{}' state is always enabled and can not be modified".format(name))
return

db.cfgdb.mod_entry('FEATURE', name, {'state': state})
for ns, cfgdb in db.cfgdb.items():
cfgdb.mod_entry('FEATURE', name, {'state': state})

#
# 'autorestart' command ('config feature autorestart ...')
#
@feature.command(name='autorestart', short_help="Enable/disable autosrestart of a feature")
@click.argument('name', metavar='<feature-name>', required=True)
@click.argument('autorestart', metavar='<autorestart>', required=True, type=click.Choice(["enabled", "disabled"]))
@pass_db
@pass_multi_asic_db
def feature_autorestart(db, name, autorestart):
"""Enable/disable autorestart of a feature"""
entry_data = db.cfgdb.get_entry('FEATURE', name)
entry_data_set = set()

if not entry_data:
click.echo("Feature '{}' doesn't exist".format(name))
sys.exit(1)
for ns, cfgdb in db.cfgdb.items():
entry_data = cfgdb.get_entry('FEATURE', name)
if not entry_data:
click.echo("Feature '{}' doesn't exist".format(name))
sys.exit(1)
entry_data_set.add(entry_data['auto_restart'])

if len(entry_data_set) > 1:
click.echo("Feature '{}' auto-restart is not consistent across namespaces".format(name))
sys.exit(1)

if entry_data['auto_restart'] == "always_enabled":
click.echo("Feature '{}' auto-restart is always enabled and can not be modified".format(name))
return

db.cfgdb.mod_entry('FEATURE', name, {'auto_restart': autorestart})
for ns, cfgdb in db.cfgdb.items():
cfgdb.mod_entry('FEATURE', name, {'auto_restart': autorestart})
8 changes: 4 additions & 4 deletions config/kube.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import yaml
from sonic_py_common import device_info
from swsssdk import ConfigDBConnector
from utilities_common.db import Db
from utilities_common.multi_asic import MultiAsicDb

from .utils import log

Expand All @@ -31,7 +31,7 @@ def _update_kube_server(field, val):
config_db.connect()
table = "KUBERNETES_MASTER"
key = "SERVER"
db_data = Db().get_data(table, key)
db_data = MultiAsicDb().get_default_namespace_data(table, key)
def_data = {
"IP": "",
"insecure": "False",
Expand Down Expand Up @@ -112,7 +112,7 @@ def _get_labels():

labels.append("sonic_version={}".format(version_info['build_version']))
labels.append("hwsku={}".format(hwsku))
lh = Db().get_data('DEVICE_METADATA', 'localhost')
lh = MultiAsicDb().get_default_namespace_data('DEVICE_METADATA', 'localhost')
labels.append("deployment_type={}".format(
lh['type'] if lh and 'type' in lh else "Unknown"))
labels.append("enable_pods=True")
Expand Down Expand Up @@ -215,7 +215,7 @@ def kube_join(force=False):
log.log_error("Lock {} is active; Bail out".format(LOCK_FILE))
return

db_data = Db().get_data('KUBERNETES_MASTER', 'SERVER')
db_data = MultiAsicDb().get_default_namespace_data('KUBERNETES_MASTER', 'SERVER')
if not db_data or 'IP' not in db_data or not db_data['IP']:
log.log_error("Kubernetes server is not configured")

Expand Down
33 changes: 17 additions & 16 deletions config/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
from sonic_py_common.interface import get_interface_table_name, get_port_table_name
from swsssdk import ConfigDBConnector, SonicDBConfig
from swsscommon.swsscommon import SonicV2Connector
from utilities_common.db import Db
from utilities_common import constants
from utilities_common.multi_asic import MultiAsicDb
from utilities_common.intf_filter import parse_interface_in_filter
import utilities_common.cli as clicommon
from .utils import log
Expand Down Expand Up @@ -870,7 +871,7 @@ def config(ctx):
if os.geteuid() != 0:
exit("Root privileges are required for this operation")

ctx.obj = Db()
ctx.obj = MultiAsicDb()


# Add groups from other modules
Expand Down Expand Up @@ -1001,7 +1002,7 @@ def load(filename, yes):
@click.option('-l', '--load-sysinfo', is_flag=True, help='load system default information (mac, portmap etc) first.')
@click.option('-n', '--no_service_restart', default=False, is_flag=True, help='Do not restart docker services')
@click.argument('filename', required=False)
@clicommon.pass_db
@clicommon.pass_multi_asic_db
def reload(db, filename, yes, load_sysinfo, no_service_restart):
"""Clear current configuration and import a previous saved config DB dump file.
<filename> : Names of configuration file(s) to load, separated by comma with no spaces in between
Expand Down Expand Up @@ -1044,7 +1045,7 @@ def reload(db, filename, yes, load_sysinfo, no_service_restart):
#Stop services before config push
if not no_service_restart:
log.log_info("'reload' stopping services...")
_stop_services(db.cfgdb)
_stop_services(db.cfgdb[DEFAULT_NAMESPACE])

# In Single ASIC platforms we have single DB service. In multi-ASIC platforms we have a global DB
# service running in the host + DB services running in each ASIC namespace created per ASIC.
Expand Down Expand Up @@ -1115,9 +1116,9 @@ def reload(db, filename, yes, load_sysinfo, no_service_restart):
# We first run "systemctl reset-failed" to remove the "failed"
# status from all services before we attempt to restart them
if not no_service_restart:
_reset_failed_services(db.cfgdb)
_reset_failed_services(db.cfgdb[DEFAULT_NAMESPACE])
log.log_info("'reload' restarting services...")
_restart_services(db.cfgdb)
_restart_services(db.cfgdb[DEFAULT_NAMESPACE])

@config.command("load_mgmt_config")
@click.option('-y', '--yes', is_flag=True, callback=_abort_if_false,
Expand Down Expand Up @@ -1148,15 +1149,15 @@ def load_mgmt_config(filename):
@click.option('-y', '--yes', is_flag=True, callback=_abort_if_false,
expose_value=False, prompt='Reload config from minigraph?')
@click.option('-n', '--no_service_restart', default=False, is_flag=True, help='Do not restart docker services')
@clicommon.pass_db
@clicommon.pass_multi_asic_db
def load_minigraph(db, no_service_restart):
"""Reconfigure based on minigraph."""
log.log_info("'load_minigraph' executing...")

#Stop services before config push
if not no_service_restart:
log.log_info("'load_minigraph' stopping services...")
_stop_services(db.cfgdb)
_stop_services(db.cfgdb[DEFAULT_NAMESPACE])

# For Single Asic platform the namespace list has the empty string
# for mulit Asic platform the empty string to generate the config
Expand Down Expand Up @@ -1212,10 +1213,10 @@ def load_minigraph(db, no_service_restart):
# We first run "systemctl reset-failed" to remove the "failed"
# status from all services before we attempt to restart them
if not no_service_restart:
_reset_failed_services(db.cfgdb)
_reset_failed_services(db.cfgdb[DEFAULT_NAMESPACE])
#FIXME: After config DB daemon is implemented, we'll no longer need to restart every service.
log.log_info("'load_minigraph' restarting services...")
_restart_services(db.cfgdb)
_restart_services(db.cfgdb[DEFAULT_NAMESPACE])
click.echo("Please note setting loaded from minigraph will be lost after system reboot. To preserve setting, run `config save`.")


Expand Down Expand Up @@ -3358,10 +3359,10 @@ def profile(ctx):
@click.option('--size', metavar='<size>', type=int, help="Set reserved size size")
@click.option('--dynamic_th', metavar='<dynamic_th>', type=str, help="Set dynamic threshold")
@click.option('--pool', metavar='<pool>', type=str, help="Buffer pool")
@clicommon.pass_db
@clicommon.pass_multi_asic_db
def add_profile(db, profile, xon, xoff, size, dynamic_th, pool):
"""Add or modify a buffer profile"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]
ctx = click.get_current_context()

profile_entry = config_db.get_entry('BUFFER_PROFILE', profile)
Expand All @@ -3378,10 +3379,10 @@ def add_profile(db, profile, xon, xoff, size, dynamic_th, pool):
@click.option('--size', metavar='<size>', type=int, help="Set reserved size size")
@click.option('--dynamic_th', metavar='<dynamic_th>', type=str, help="Set dynamic threshold")
@click.option('--pool', metavar='<pool>', type=str, help="Buffer pool")
@clicommon.pass_db
@clicommon.pass_multi_asic_db
def set_profile(db, profile, xon, xoff, size, dynamic_th, pool):
"""Add or modify a buffer profile"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]
ctx = click.get_current_context()

profile_entry = config_db.get_entry('BUFFER_PROFILE', profile)
Expand Down Expand Up @@ -3455,10 +3456,10 @@ def update_profile(ctx, config_db, profile_name, xon, xoff, size, dynamic_th, po

@profile.command('remove')
@click.argument('profile', metavar='<profile>', required=True)
@clicommon.pass_db
@clicommon.pass_multi_asic_db
def remove_profile(db, profile):
"""Delete a buffer profile"""
config_db = db.cfgdb
config_db = db.cfgdb[constants.DEFAULT_NAMESPACE]
ctx = click.get_current_context()

full_profile_name = '[BUFFER_PROFILE|{}]'.format(profile)
Expand Down
Loading