patch-builder: Flag for adding precheck scripts
Currently, if the patching framework deb package (software.deb) is one of the pkgs selected for the patch, patch-builder will also extract a couple scripts (refered to here as 'precheck scripts') and put them in the separatly in the patch for easier access. The issue is that, if we create a patch that delivers an ostree repo instead of a set of deb packages, then auto-inclusion of the precheck scripts will never happen. Added a Y/N flag the user can add in the patch XML (similar to the reboot_required flag) to request inclusion of the precheck scripts. Test Plan: pass - flag is not mandatory pass - if 'Y' regardless of debs requested, scripts are included pass - if 'N', scripts are included only if software.deb is requested Story: 2011498 Task: 52900 Change-Id: Ic9866bcd251bfe6f27ce4b60be604beccb815183 Signed-off-by: Leonardo Fagundes Luz Serrano <Leonardo.FagundesLuzSerrano@windriver.com>
This commit is contained in:
@@ -20,6 +20,7 @@
|
|||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="semantics" type="xs:string"/>
|
<xs:element name="semantics" type="xs:string"/>
|
||||||
|
<xs:element name="precheck_scripts" type="xs:string" minOccurs="0"/>
|
||||||
<xs:element name="pre_start" type="xs:string" minOccurs="0"/>
|
<xs:element name="pre_start" type="xs:string" minOccurs="0"/>
|
||||||
<xs:element name="post_start" type="xs:string" minOccurs="0"/>
|
<xs:element name="post_start" type="xs:string" minOccurs="0"/>
|
||||||
<xs:element name="pre_install" type="xs:string" minOccurs="0"/>
|
<xs:element name="pre_install" type="xs:string" minOccurs="0"/>
|
||||||
|
@@ -42,6 +42,7 @@ class FetchDebs(object):
|
|||||||
# In general: /localdisk/loadbuild/<USER>/<PROJECT>
|
# In general: /localdisk/loadbuild/<USER>/<PROJECT>
|
||||||
self.loadbuild_root = utils.get_env_variable('MY_BUILD_PKG_DIR')
|
self.loadbuild_root = utils.get_env_variable('MY_BUILD_PKG_DIR')
|
||||||
|
|
||||||
|
# TODO: These directories should be inputs, not hardcoded.
|
||||||
self.output_dir = os.path.join(self.loadbuild_root, 'dl_debs')
|
self.output_dir = os.path.join(self.loadbuild_root, 'dl_debs')
|
||||||
self.apt_src_file = os.path.join(self.loadbuild_root, 'aptsrc')
|
self.apt_src_file = os.path.join(self.loadbuild_root, 'aptsrc')
|
||||||
|
|
||||||
|
@@ -45,6 +45,7 @@ BINARY_PACKAGES = 'binary_packages'
|
|||||||
SEMANTICS = 'semantics'
|
SEMANTICS = 'semantics'
|
||||||
ACTIVATION_SCRIPTS = 'activation_scripts'
|
ACTIVATION_SCRIPTS = 'activation_scripts'
|
||||||
EXTRA_CONTENT = 'extra_content'
|
EXTRA_CONTENT = 'extra_content'
|
||||||
|
PRECHECK_SCRIPTS_FLAG = 'precheck_scripts'
|
||||||
|
|
||||||
|
|
||||||
class PatchMetadata(object):
|
class PatchMetadata(object):
|
||||||
@@ -122,6 +123,11 @@ class PatchMetadata(object):
|
|||||||
else:
|
else:
|
||||||
raise Exception('Supported values for "Reboot Required" are Y or N, for "Yes" or "No" respectively')
|
raise Exception('Supported values for "Reboot Required" are Y or N, for "Yes" or "No" respectively')
|
||||||
|
|
||||||
|
if self.precheck_scripts_flag.upper() in ["Y","N"]:
|
||||||
|
self.__add_text_tag_to_xml(top_tag, PRECHECK_SCRIPTS_FLAG, self.precheck_scripts_flag.upper())
|
||||||
|
else:
|
||||||
|
raise Exception('Supported values for "Precheck Scripts" are Y or N, for "Yes" or "No" respectively')
|
||||||
|
|
||||||
self.__add_text_tag_to_xml(top_tag, SEMANTICS, self.semantics)
|
self.__add_text_tag_to_xml(top_tag, SEMANTICS, self.semantics)
|
||||||
|
|
||||||
requires_atg = ET.SubElement(top_tag, REQUIRES)
|
requires_atg = ET.SubElement(top_tag, REQUIRES)
|
||||||
@@ -194,6 +200,10 @@ class PatchMetadata(object):
|
|||||||
self.warnings = patch_recipe[WARNINGS]
|
self.warnings = patch_recipe[WARNINGS]
|
||||||
self.reboot_required = patch_recipe[REBOOT_REQUIRED]
|
self.reboot_required = patch_recipe[REBOOT_REQUIRED]
|
||||||
|
|
||||||
|
self.precheck_scripts_flag = 'N'
|
||||||
|
if PRECHECK_SCRIPTS_FLAG in patch_recipe:
|
||||||
|
self.precheck_scripts_flag = patch_recipe[PRECHECK_SCRIPTS_FLAG]
|
||||||
|
|
||||||
# For each patch script, validate the path provided
|
# For each patch script, validate the path provided
|
||||||
self.patch_script_paths = {
|
self.patch_script_paths = {
|
||||||
script_id: self.check_script_path(patch_recipe.get(script_id, None))
|
script_id: self.check_script_path(patch_recipe.get(script_id, None))
|
||||||
|
@@ -135,14 +135,20 @@ class PatchBuilder(object):
|
|||||||
logger.info(f"Adding: {item}")
|
logger.info(f"Adding: {item}")
|
||||||
extra_tar.add(item, arcname=os.path.join("extra", os.path.basename(item)))
|
extra_tar.add(item, arcname=os.path.join("extra", os.path.basename(item)))
|
||||||
|
|
||||||
# if the patch includes the 'software' package we need to make deploy-precheck
|
# Precheck Scripts:
|
||||||
# and upgrade_utils.py from .deb file accessible directly from patch file
|
# If the patch includes the 'software' package or
|
||||||
if 'software' in self.metadata.stx_packages:
|
# if the patch XML has the 'precheck_scripts' flag set to 'Y',
|
||||||
logger.info(f"Patch includes the software package, getting scripts from deb file...")
|
# extract precheck scripts from software.deb and put them in the patch file
|
||||||
|
if 'software' in self.metadata.stx_packages or \
|
||||||
|
self.metadata.precheck_scripts_flag == 'Y':
|
||||||
|
logger.info(f"Adding precheck scripts...")
|
||||||
|
|
||||||
# create temporary folder to hold our files until we copy them to the patch
|
# create temporary folder to hold our files until we copy them to the patch
|
||||||
tmp_folder = tempfile.mkdtemp(prefix='deb_')
|
tmp_folder = tempfile.mkdtemp(prefix='deb_')
|
||||||
|
|
||||||
|
# Fetch software deb
|
||||||
|
fetch_debs.FetchDebs(need_dl_stx_pkgs = ['software']).fetch_stx_packages()
|
||||||
|
|
||||||
# Collect files
|
# Collect files
|
||||||
files_to_get = [constants.PRECHECK_SCRIPTS["DEPLOY_PRECHECK"],
|
files_to_get = [constants.PRECHECK_SCRIPTS["DEPLOY_PRECHECK"],
|
||||||
constants.PRECHECK_SCRIPTS["UPGRADE_UTILS"]]
|
constants.PRECHECK_SCRIPTS["UPGRADE_UTILS"]]
|
||||||
|
Reference in New Issue
Block a user