11import shutil
2+ from scp import SCPClient
3+ import os
24
35import cli .network .virtual_network as virtual_network
4- import cli .partition .activation as activation
56import cli .partition .partition as partition
67import cli .utils .monitor_util as monitor_util
7- import cli .storage .vopt_storage as vopt
88import cli .utils .command_util as command_util
99import cli .utils .common as common
1010import cli .utils .iso_util as iso_util
1111import cli .utils .string_util as util
12- import cli .vios .vios as vios
1312
1413
1514logger = common .get_logger ("pim-update-config" )
@@ -20,18 +19,18 @@ def update_config(config_file_path):
2019 logger .info ("Updating PIM partition's config" )
2120 config = common .initialize_config (config_file_path )
2221 # Invoking initialize_command to perform common actions like validation, authentication etc.
23- is_config_valid , cookies , sys_uuid , vios_uuid_list = command_util .initialize_command (
22+ is_config_valid , cookies , sys_uuid , _ = command_util .initialize_command (
2423 config )
2524 if is_config_valid :
26- _update_config (config , cookies , sys_uuid , vios_uuid_list )
25+ _update_config (config , cookies , sys_uuid )
2726 logger .info ("PIM partition's config successfully updated" )
2827 except Exception as e :
2928 logger .error (f"encountered an error: { e } " )
3029 finally :
3130 if cookies :
3231 command_util .cleanup (config , cookies )
3332
34- def _update_config (config , cookies , sys_uuid , vios_uuid_list ):
33+ def _update_config (config , cookies , sys_uuid ):
3534 try :
3635 logger .debug ("Checking partition exists" )
3736 exists , _ , partition_uuid = partition .check_partition_exists (config , cookies , sys_uuid )
@@ -60,34 +59,45 @@ def _update_config(config, cookies, sys_uuid, vios_uuid_list):
6059 shutil .rmtree (common .cloud_init_update_config_dir )
6160 return
6261 logger .info ("Detected config change, updating" )
63- iso_util .generate_cloud_init_iso_file (common .update_iso_dir , config , common .cloud_init_update_config_dir )
6462
65- logger .info ("Shutting down the partition" )
66- activation .shutdown_partition (config , cookies , partition_uuid )
67- logger .info ("Partition shut down to attach the new config" )
63+ # Create pim_config.json file
64+ pim_config = util .get_pim_config_json (config )
65+ with open (f"{ common .cloud_init_update_config_dir } /pim_config.json" , "w" ) as config_file :
66+ config_file .write (pim_config )
6867
69- cloud_init_iso = util .get_cloud_init_iso (config )
70- logger .info ("Uploading the new cloud init with the config changes" )
71- vios_cloudinit_media_uuid = iso_util .upload_iso_to_media_repository (config , cookies , common .update_iso_dir , cloud_init_iso , sys_uuid , vios_uuid_list )
72- logger .debug ("Cloud init uploaded" )
73-
74- logger .info ("Attaching the cloud init to the partition" )
75- vios_payload = vios .get_vios_details (config , cookies , sys_uuid , vios_cloudinit_media_uuid )
76- vopt .attach_vopt (vios_payload , config , cookies , partition_uuid , sys_uuid , vios_cloudinit_media_uuid , cloud_init_iso )
77- logger .info ("New cloud init config attached to the partition." )
68+ ssh_client = common .ssh_to_partition (config )
7869
79- logger .info ("Activating the partition" )
80- activation .activate_partition (config , cookies , partition_uuid )
81- logger .info ("Partition activated" )
70+ with SCPClient (ssh_client .get_transport ()) as scp :
71+ scp .put (f'{ common .cloud_init_update_config_dir } /pim_config.json' , '/tmp' )
72+
73+ move_cmd = "sudo mv /tmp/pim_config.json /etc/pim/"
74+ _ , stdout , stderr = ssh_client .exec_command (move_cmd )
75+ exit_status = stdout .channel .recv_exit_status ()
76+ if exit_status == 0 :
77+ logger .info ("Successfully updated the config of the partition." )
78+ else :
79+ errorMsg = stderr .read ().decode ('utf-8' )
80+ logger .error (f"failed to update config of the partition. error: { errorMsg } " )
81+ raise Exception (errorMsg )
8282
83- logger .info ("Monitoring boot process, this will take a while" )
84- monitor_util .monitor_pim (config )
83+
84+ # Restart pim_init.service
85+ restart_command = "sudo systemctl restart pim_init.service"
86+ _ , stdout , stderr = ssh_client .exec_command (restart_command )
87+ exit_status = stdout .channel .recv_exit_status ()
8588
86- # Move used cloud init iso to iso dir
87- shutil .move (f"{ common .update_iso_dir } /{ cloud_init_iso } " , f"{ common .iso_dir } /{ cloud_init_iso } " )
89+ if exit_status == 0 :
90+ logger .info ("Successfully restarted pim_init.service" )
91+ else :
92+ errorMsg = stderr .read ().decode ('utf-8' )
93+ logger .error (f"failed to restart pim_init.service. error: { errorMsg } " )
94+ raise Exception (errorMsg )
8895
96+ os .remove (f"{ common .cloud_init_update_config_dir } /pim_config.json" )
8997 # Cleanup existing config and move updated config
9098 shutil .rmtree (common .cloud_init_config_dir )
9199 shutil .move (common .cloud_init_update_config_dir , common .cloud_init_config_dir )
100+ logger .info ("Monitoring AI application, this will take a while" )
101+ monitor_util .monitor_pim (config )
92102 except Exception as e :
93103 raise e
0 commit comments