This document aims to provide the OSM community an easy way of testing and debugging OSM.
Benefits:
juju config <module> debug_mode=True debug_pubkey="ssh-rsa ...".Download the installer:
wget http://osm-download.etsi.org/ftp/osm-10.0-ten/install_osm.sh chmod +x install_osm.sh
Install OSM from master (tag=testing-daily):
./install_osm.sh -R testing-daily -r testing --charmed
Install OSM from a specific tag:
./install_osm.sh -R testing-daily -r testing --charmed --tag <X.Y.Z>
Once the Charmed OSM installation has finished, you can select which applications you want to run with the debug mode.
# LCM juju config lcm debug_mode=True debug_pubkey="`cat ~/.ssh/id_rsa.pub`" # MON juju config mon debug_mode=True debug_pubkey="`cat ~/.ssh/id_rsa.pub`" # NBI juju config nbi debug_mode=True debug_pubkey="`cat ~/.ssh/id_rsa.pub`" # RO juju config ro debug_mode=True debug_pubkey="`cat ~/.ssh/id_rsa.pub`" # POL juju config pol debug_mode=True debug_pubkey="`cat ~/.ssh/id_rsa.pub`"
Enabling the debug_mode will put a sleep infinity as the entrypoint of the container. That way, we can later connect to the pod through SSH in VSCode, and run the entrypoint of the application from the debugger.
The Charmed OSM Debugging mode allows you to mount local modules to the desired charms. The following commands show which modules can be mounted in each charm.
LCM_LOCAL_PATH="/path/to/LCM" N2VC_LOCAL_PATH="/path/to/N2VC" NBI_LOCAL_PATH="/path/to/NBI" RO_LOCAL_PATH="/path/to/RO" MON_LOCAL_PATH="/path/to/MON" POL_LOCAL_PATH="/path/to/POL" COMMON_LOCAL_PATH="/path/to/common" # LCM juju config lcm debug_lcm_local_path=$LCM_LOCAL_PATH juju config lcm debug_n2vc_local_path=$N2VC_LOCAL_PATH juju config lcm debug_common_local_path=$COMMON_LOCAL_PATH # MON juju config mon debug_mon_local_path=$MON_LOCAL_PATH juju config mon debug_n2vc_local_path=$N2VC_LOCAL_PATH juju config mon debug_common_local_path=$COMMON_LOCAL_PATH # NBI juju config nbi debug_nbi_local_path=$LCM_LOCAL_PATH juju config nbi debug_common_local_path=$COMMON_LOCAL_PATH # RO juju config ro debug_ro_local_path=$RO_LOCAL_PATH juju config ro debug_common_local_path=$COMMON_LOCAL_PATH # POL juju config pol debug_pol_local_path=$POL_LOCAL_PATH juju config pol debug_common_local_path=$COMMON_LOCAL_PATH
Preparing the pods includes setting up the ~/.ssh/config so the VSCode can easily discover which ssh hosts are available
Just execute:
./generate_ssh_config.sh
NOTE: The public key that will be used will be
$HOME/.ssh/id_rsa.pub. If you want to use a different one, add the absolute path to it as a first argument:./generate_ssh_config.sh /path/to/key.pub.
In VScode, navigate to Remote Explorer, and select the pod to which you want to connect.
You should be able to see the following hosts in the Remote Explorer:
Right click on the host, and "Connect to host in a New Window".
The ./generate_ssh_config.sh script adds a workspace to the /root folder of each pod, with the following name: debug.code-workspace.
In the window of the connected host, go to File/Open Workspace from File.... Then select the debug.code-workspace file.
Open the Terminal tab, and the Python extension will be automatically downloaded. It will be installed in the remote pod.
Go to the Explorer (ctrl + shift + E) to see the module folders in the charm. You can add breakpoints and start debugging.
Go to the Run and Debug (ctrl + shift + D) and press F5 to start the main entrypoint of the charm.
Happy debugging!