Skip to content

Commit

Permalink
[minigraph] add option to specify golden path in load_minigraph (soni…
Browse files Browse the repository at this point in the history
…c-net#2350)

What I did
Add an option for load_minigraph to specify golden path

How I did it
Add an option for load_minigraph

How to verify it
Unit test
  • Loading branch information
wen587 authored and mdanish-kh committed Oct 22, 2022
1 parent 842efc0 commit b608706
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 4 deletions.
16 changes: 12 additions & 4 deletions config/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -1720,8 +1720,9 @@ def load_mgmt_config(filename):
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')
@click.option('-t', '--traffic_shift_away', default=False, is_flag=True, help='Keep device in maintenance with TSA')
@click.option('-p', '--golden_config_path', help='The path of golden config file')
@clicommon.pass_db
def load_minigraph(db, no_service_restart, traffic_shift_away):
def load_minigraph(db, no_service_restart, traffic_shift_away, golden_config_path):
"""Reconfigure based on minigraph."""
log.log_info("'load_minigraph' executing...")

Expand Down Expand Up @@ -1794,13 +1795,20 @@ def load_minigraph(db, no_service_restart, traffic_shift_away):
# Keep device isolated with TSA
if traffic_shift_away:
clicommon.run_command("TSA", display_cmd=True)
if os.path.isfile(DEFAULT_GOLDEN_CONFIG_DB_FILE):
if golden_config_path or not golden_config_path and os.path.isfile(DEFAULT_GOLDEN_CONFIG_DB_FILE):
log.log_warning("Golden configuration may override System Maintenance state. Please execute TSC to check the current System mode")
click.secho("[WARNING] Golden configuration may override Traffic-shift-away state. Please execute TSC to check the current System mode")

# Load golden_config_db.json
if os.path.isfile(DEFAULT_GOLDEN_CONFIG_DB_FILE):
override_config_by(DEFAULT_GOLDEN_CONFIG_DB_FILE)
if golden_config_path:
if not os.path.isfile(golden_config_path):
click.secho("Cannot find '{}'!".format(golden_config_path),
fg='magenta')
raise click.Abort()
override_config_by(golden_config_path)
else:
if os.path.isfile(DEFAULT_GOLDEN_CONFIG_DB_FILE):
override_config_by(DEFAULT_GOLDEN_CONFIG_DB_FILE)

# We first run "systemctl reset-failed" to remove the "failed"
# status from all services before we attempt to restart them
Expand Down
25 changes: 25 additions & 0 deletions tests/config_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,31 @@ def is_file_side_effect(filename):
assert result.exit_code == 0
assert expected_output in result.output

def test_load_minigraph_with_non_exist_golden_config_path(self, get_cmd_module):
def is_file_side_effect(filename):
return True if 'golden_config' in filename else False
with mock.patch("utilities_common.cli.run_command", mock.MagicMock(side_effect=mock_run_command_side_effect)) as mock_run_command, \
mock.patch('os.path.isfile', mock.MagicMock(side_effect=is_file_side_effect)):
(config, show) = get_cmd_module
runner = CliRunner()
result = runner.invoke(config.config.commands["load_minigraph"], ["-p", "non_exist.json", "-y"])
assert result.exit_code != 0
assert "Cannot find 'non_exist.json'" in result.output

def test_load_minigraph_with_golden_config_path(self, get_cmd_module):
def is_file_side_effect(filename):
return True if 'golden_config' in filename else False
with mock.patch("utilities_common.cli.run_command", mock.MagicMock(side_effect=mock_run_command_side_effect)) as mock_run_command, \
mock.patch('os.path.isfile', mock.MagicMock(side_effect=is_file_side_effect)):
(config, show) = get_cmd_module
runner = CliRunner()
result = runner.invoke(config.config.commands["load_minigraph"], ["-p", "golden_config.json", "-y"])
print(result.exit_code)
print(result.output)
traceback.print_tb(result.exc_info[2])
assert result.exit_code == 0
assert "config override-config-table golden_config.json" in result.output

def test_load_minigraph_with_traffic_shift_away(self, get_cmd_module):
with mock.patch("utilities_common.cli.run_command", mock.MagicMock(side_effect=mock_run_command_side_effect)) as mock_run_command:
(config, show) = get_cmd_module
Expand Down

0 comments on commit b608706

Please sign in to comment.