Skip to content
Merged
Changes from 15 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
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
89 changes: 89 additions & 0 deletions files/image_config/bash/bash.bashrc
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,92 @@ if [ -n "$SSH_TARGET_CONSOLE_LINE" ]; then
exit
fi
fi

# Helper function to generate all redis-cli aliases at once
generate_sonic_redis_aliases() {
# Define DB names and alias suffixes
local -A SONIC_DBS=(
["APPL_DB"]="appdb"
["ASIC_DB"]="asicdb"
["COUNTERS_DB"]="counterdb"
["LOGLEVEL_DB"]="logleveldb"
["CONFIG_DB"]="configdb"
["FLEX_COUNTER_DB"]="flexcounterdb"
["STATE_DB"]="statedb"
["APPL_STATE_DB"]="appstatedb"
)

# Run Python once to get all DB configurations
local python_output
python_output=$(python3 -c "
import sys
try:
import swsscommon.swsscommon

SonicDBConfig = None

if hasattr(swsscommon.swsscommon, 'SonicDBConfig'):
SonicDBConfig = swsscommon.swsscommon.SonicDBConfig

if SonicDBConfig is None:
print('ERROR:SonicDBConfig not found in swsscommon module', file=sys.stderr)
sys.exit(1)

# Initialize config (some versions require this)
try:
SonicDBConfig.loadSonicDBConfig()
except AttributeError:
pass # Some versions don't have this method
except Exception:
pass # Ignore if config file is missing

dbs = ['APPL_DB', 'ASIC_DB', 'COUNTERS_DB', 'LOGLEVEL_DB',
'CONFIG_DB', 'FLEX_COUNTER_DB', 'STATE_DB', 'APPL_STATE_DB']
for db in dbs:
try:
db_id = SonicDBConfig.getDbId(db)
db_port = SonicDBConfig.getDbPort(db)
print(f'{db}:{db_id}:{db_port}')
except Exception as e:
print(f'ERROR:Failed to get config for {db}: {e}', file=sys.stderr)
sys.exit(1)

except ImportError as e:
print(f'ERROR:swsscommon module not found: {e}', file=sys.stderr)
sys.exit(1)
except Exception as e:
print(f'ERROR:Unexpected error: {e}', file=sys.stderr)
sys.exit(1)
" 2>&1)

# Check if Python command succeeded
if [ $? -ne 0 ]; then
echo "Error generating Redis aliases: $python_output" >&2
return 1
fi

# Check for Python-level errors in output
if [[ "$python_output" == ERROR:* ]]; then
echo "$python_output" >&2
return 1
fi

# Check if redis-cli exists
if ! command -v redis-cli &> /dev/null; then
echo "Error: redis-cli command not found" >&2
return 1
fi

# Parse output and create aliases
while IFS=: read -r db_name db_id db_port; do
if [ -n "$db_name" ] && [ -n "$db_id" ] && [ -n "$db_port" ]; then
local alias_name="redis-${SONIC_DBS[$db_name]}"
if [ -n "$alias_name" ]; then
eval "alias $alias_name='redis-cli -n $db_id -p $db_port'"
fi
fi
done <<< "$python_output"
}

# Generate all aliases at shell startup
generate_sonic_redis_aliases
Loading