item_updater: sort ubi specific code
Add item_updater_helper and implement it in ubi and static layouts.
Tested: Build this repo on both Romulus and Witherspoon OK;
Tested on Romulus and Witherspoon that code update works fine.
Change-Id: I706cfe63900f89bb41672dcc745b3483e06838c7
Signed-off-by: Lei YU <mine260309@gmail.com>
diff --git a/item_updater.cpp b/item_updater.cpp
index 51523d4..1bbf200 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -292,12 +292,7 @@
entry("VERSIONID=%s", entryId.c_str()));
}
- // Remove the priority environment variable.
- auto serviceFile = "obmc-flash-bmc-setenv@" + entryId + ".service";
- auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
- SYSTEMD_INTERFACE, "StartUnit");
- method.append(serviceFile, "replace");
- bus.call_noreply(method);
+ helper.clearEntry(entryId);
// Removing entry in activations map
auto ita = activations.find(entryId);
@@ -332,11 +327,7 @@
ItemUpdater::erase(deletableIt);
}
- // Remove any volumes that do not match current versions.
- auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
- SYSTEMD_INTERFACE, "StartUnit");
- method.append("obmc-flash-bmc-cleanup.service", "replace");
- bus.call_noreply(method);
+ helper.cleanup();
}
ItemUpdater::ActivationStatus
@@ -421,26 +412,14 @@
void ItemUpdater::reset()
{
- // Mark the read-write partition for recreation upon reboot.
- auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
- SYSTEMD_INTERFACE, "StartUnit");
- method.append("obmc-flash-bmc-setenv@rwreset\\x3dtrue.service", "replace");
- bus.call_noreply(method);
+ helper.factoryReset();
log<level::INFO>("BMC factory reset will take effect upon reboot.");
-
- return;
}
void ItemUpdater::removeReadOnlyPartition(std::string versionId)
{
- auto serviceFile = "obmc-flash-bmc-ubiro-remove@" + versionId + ".service";
-
- // Remove the read-only partitions.
- auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
- SYSTEMD_INTERFACE, "StartUnit");
- method.append(serviceFile, "replace");
- bus.call_noreply(method);
+ helper.removeVersion(versionId);
}
bool ItemUpdater::fieldModeEnabled(bool value)
@@ -450,23 +429,7 @@
{
control::FieldMode::fieldModeEnabled(value);
- auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
- SYSTEMD_INTERFACE, "StartUnit");
- method.append("obmc-flash-bmc-setenv@fieldmode\\x3dtrue.service",
- "replace");
- bus.call_noreply(method);
-
- method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
- SYSTEMD_INTERFACE, "StopUnit");
- method.append("usr-local.mount", "replace");
- bus.call_noreply(method);
-
- std::vector<std::string> usrLocal = {"usr-local.mount"};
-
- method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
- SYSTEMD_INTERFACE, "MaskUnitFiles");
- method.append(usrLocal, false, true);
- bus.call_noreply(method);
+ helper.enableFieldMode();
}
return control::FieldMode::fieldModeEnabled();
@@ -564,19 +527,7 @@
void ItemUpdater::updateUbootEnvVars(const std::string& versionId)
{
- auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
- SYSTEMD_INTERFACE, "StartUnit");
- auto updateEnvVarsFile =
- "obmc-flash-bmc-updateubootvars@" + versionId + ".service";
- method.append(updateEnvVarsFile, "replace");
- auto result = bus.call(method);
-
- // Check that the bus call didn't result in an error
- if (result.is_method_error())
- {
- log<level::ERR>("Failed to update u-boot env variables",
- entry("VERSIONID=%s", versionId.c_str()));
- }
+ helper.updateUbootVersionId(versionId);
}
void ItemUpdater::resetUbootEnvVars()
@@ -644,17 +595,7 @@
void ItemUpdater::mirrorUbootToAlt()
{
- auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
- SYSTEMD_INTERFACE, "StartUnit");
- auto mirrorUbootFile = "obmc-flash-bmc-mirroruboot.service";
- method.append(mirrorUbootFile, "replace");
- auto result = bus.call(method);
-
- // Check that the bus call didn't result in an error
- if (result.is_method_error())
- {
- log<level::ERR>("Failed to copy U-Boot to alternate chip");
- }
+ helper.mirrorAlt();
}
} // namespace updater