Skip to content

Commit 16903f5

Browse files
committed
CA-227145: Call precheck script in extension.
To ensure precheck can run more than once and return the expected output, the precheck script should be called in extension. Signed-off-by: Hui Zhang <[email protected]>
1 parent 79bc6b3 commit 16903f5

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

scripts/extensions/pool_update.precheck

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import xcp.logger
1919

2020

2121
TMP_DIR = '/tmp/'
22+
UPDATE_DIR = '/var/update/'
2223
UPDATE_PRECHECK_FAILED_UNKNOWN_ERROR = 'UPDATE_PRECHECK_FAILED_UNKNOWN_ERROR'
2324
UPDATE_PRECHECK_FAILED_PREREQUISITE_MISSING = 'UPDATE_PRECHECK_FAILED_PREREQUISITE_MISSING'
2425
UPDATE_PRECHECK_FAILED_CONFLICT_PRESENT = 'UPDATE_PRECHECK_FAILED_CONFLICT_PRESENT'
@@ -72,7 +73,7 @@ def parse_control_package(session, yum_url):
7273
return items[0].getAttribute('control')
7374

7475

75-
def execute_precheck(session, control_package, yum_conf_file):
76+
def execute_precheck(session, control_package, yum_conf_file, update_precheck_file):
7677
if not control_package:
7778
return 'ok'
7879
livepatch_messages = {'PATCH_PRECHECK_LIVEPATCH_COMPLETE': 'ok_livepatch_complete',
@@ -102,11 +103,17 @@ def execute_precheck(session, control_package, yum_conf_file):
102103
else:
103104
raise PrecheckFailure()
104105
else:
105-
for msg in livepatch_messages.keys():
106-
if msg in output:
107-
return livepatch_messages[msg]
108-
return 'ok'
109-
106+
if not os.path.isfile(update_precheck_file):
107+
return 'ok'
108+
else:
109+
pp = subprocess.Popen(update_precheck_file, shell=False, stdout=subprocess.PIPE, close_fds=True)
110+
precheck_output, _ = pp.communicate()
111+
xcp.logger.info('pool_update.precheck %r precheck_output=%r', update_precheck_file, precheck_output)
112+
for msg in livepatch_messages.keys():
113+
if msg in precheck_output:
114+
return livepatch_messages[msg]
115+
raise PrecheckFailure()
116+
110117

111118
if __name__ == '__main__':
112119
xcp.logger.logToSyslog(level=logging.INFO)
@@ -166,7 +173,8 @@ if __name__ == '__main__':
166173
yum_url = config.get(update_package, 'baseurl')
167174

168175
control_package = parse_control_package(session, yum_url)
169-
print(success_message(execute_precheck(session, control_package, yum_conf_file)))
176+
update_precheck_file = os.path.join(UPDATE_DIR, update_uuid, 'precheck')
177+
print(success_message(execute_precheck(session, control_package, yum_conf_file, update_precheck_file)))
170178
except PrerequisiteMissing as e:
171179
print(failure_message(UPDATE_PRECHECK_FAILED_PREREQUISITE_MISSING, [update_package, str(e)]))
172180
except ConflictPresent as e:

0 commit comments

Comments
 (0)