Fixing firmware inheritance rules.

This commit is contained in:
stephb9959
2021-10-26 15:47:22 -07:00
parent 24cee14ad9
commit 19f8783c7c
10 changed files with 60 additions and 55 deletions

2
build
View File

@@ -1 +1 @@
1
3

View File

@@ -35,8 +35,8 @@ openwifi.system.uri.public = https://ucentral.dpaas.arilia.com:16005
openwifi.system.commandchannel = /tmp/app.owprov
openwifi.system.uri.ui = owprov-ui.arilia.com
firmware.updater.upgrade = yes
firmware.updater.rconly = no
firmware.updater.upgrade = false
firmware.updater.releaseonly = false
geocodeapi = google
google.apikey = **********************************

View File

@@ -70,8 +70,6 @@ namespace OpenWifi {
};
int AutoDiscovery::Start() {
firmwareUpgrade_ = MicroService::instance().ConfigGetString("firmware.updater.upgrade","no");
firmwareRCOnly_ = MicroService::instance().ConfigGetBool("firmware.updater.rconly",false);
Types::TopicNotifyFunction F = [this](std::string s1,std::string s2) { this->ConnectionReceived(s1,s2); };
ConnectionWatcherId_ = KafkaManager()->RegisterTopicWatcher(KafkaTopics::CONNECTION, F);
Worker_.start(*this);

View File

@@ -22,8 +22,6 @@ namespace OpenWifi {
void Stop() override;
void run() override;
void ConnectionReceived( const std::string & Key, const std::string & Message);
[[nodiscard]] const std::string & firmwareUpgrade() { return firmwareUpgrade_; }
bool firmwareRCOnly() const { return firmwareRCOnly_; }
private:
static AutoDiscovery *instance_;
@@ -31,8 +29,6 @@ namespace OpenWifi {
std::atomic_bool Running_ = false;
int ConnectionWatcherId_=0;
Types::StringPairQueue NewConnections_;
std::string firmwareUpgrade_{"no"};
bool firmwareRCOnly_=false;
AutoDiscovery() noexcept:
SubSystemServer("AutoDiscovery", "AUTO-DISCOVERY", "discovery")

View File

@@ -40,6 +40,15 @@ namespace OpenWifi {
}
void Daemon::initialize() {
if(MicroService::instance().ConfigGetBool("firmware.updater.upgrade",false)) {
if(MicroService::instance().ConfigGetBool("firmware.updater.releaseonly",false)) {
FWRules_ = ProvObjects::upgrade_release_only;
} else {
FWRules_ = ProvObjects::upgrade_latest;
}
} else {
FWRules_ = ProvObjects::dont_upgrade;
}
}
void MicroServicePostInitialization() {

View File

@@ -15,20 +15,10 @@
#include <vector>
#include <set>
/*
#include "Poco/Util/Application.h"
#include "Poco/Util/ServerApplication.h"
#include "Poco/Util/Option.h"
#include "Poco/Util/OptionSet.h"
#include "Poco/UUIDGenerator.h"
#include "Poco/ErrorHandler.h"
#include "Poco/Crypto/RSAKey.h"
#include "Poco/Crypto/CipherFactory.h"
#include "Poco/Crypto/Cipher.h"
*/
#include "Dashboard.h"
#include "framework/MicroService.h"
#include "framework/OpenWifiTypes.h"
#include "RESTObjects/RESTAPI_ProvObjects.h"
namespace OpenWifi {
@@ -52,9 +42,11 @@ namespace OpenWifi {
static Daemon *instance();
inline OpenWifi::TopoDashboard & GetDashboard() { return DB_; }
Poco::Logger & Log() { return Poco::Logger::get(AppName()); }
ProvObjects::FIRMWARE_UPGRADE_RULES FirmwareRules() const { return FWRules_; }
private:
static Daemon *instance_;
OpenWifi::TopoDashboard DB_{};
ProvObjects::FIRMWARE_UPGRADE_RULES FWRules_{ProvObjects::dont_upgrade};
};

View File

@@ -56,13 +56,17 @@ namespace OpenWifi{
}
return ReturnObject(Answer);
} else if(HasParameter("firmwareOptions", Arg) && Arg=="true") {
std::string firmwareUpgrade = AutoDiscovery()->firmwareUpgrade();
bool firmwareRCOnly = AutoDiscovery()->firmwareRCOnly();
ProvObjects::FIRMWARE_UPGRADE_RULES Rules;
StorageService()->InventoryDB().FindFirmwareOptions(SerialNumber,firmwareUpgrade, firmwareRCOnly);
StorageService()->InventoryDB().FindFirmwareOptions(SerialNumber,Rules);
Answer.set("firmwareUpgrade",firmwareUpgrade);
Answer.set("firmwareRCOnly", firmwareRCOnly);
if(Rules == ProvObjects::dont_upgrade) {
Answer.set("firmwareUpgrade","no");
} else {
Answer.set("firmwareUpgrade","no");
if(Rules == ProvObjects::upgrade_release_only)
Answer.set("firmwareRCOnly", Rules == ProvObjects::upgrade_release_only );
}
return ReturnObject(Answer);
} else if(HasParameter("applyConfiguration",Arg) && Arg=="true") {
APConfig Device(SerialNumber,Existing.deviceType,Logger_, false);

View File

@@ -15,6 +15,13 @@
namespace OpenWifi::ProvObjects {
enum FIRMWARE_UPGRADE_RULES {
dont_upgrade,
upgrade_inherit,
upgrade_release_only,
upgrade_latest
};
struct ObjectInfo {
Types::UUID_t id;
std::string name;

View File

@@ -15,6 +15,7 @@
#include "SDK_stubs.h"
#include "AutoDiscovery.h"
#include "SerialNumberCache.h"
#include "Daemon.h"
namespace OpenWifi {
@@ -112,8 +113,7 @@ namespace OpenWifi {
return false;
}
bool InventoryDB::FindFirmwareOptionsForEntity(const std::string &EntityUUID, std::string &firmwareUpgrade,
bool &firmwareRCOnly) {
bool InventoryDB::FindFirmwareOptionsForEntity(const std::string &EntityUUID, ProvObjects::FIRMWARE_UPGRADE_RULES & Rules) {
std::string UUID = EntityUUID;
while(!UUID.empty() && UUID!=EntityDB::RootUUID()) {
ProvObjects::Entity E;
@@ -122,12 +122,14 @@ namespace OpenWifi {
ProvObjects::DeviceConfiguration C;
if(StorageService()->ConfigurationDB().GetRecord("id",E.deviceConfiguration,C)) {
if(C.firmwareUpgrade=="no") {
firmwareUpgrade="no";
Rules = ProvObjects::dont_upgrade;
return false;
}
if(C.firmwareUpgrade=="yes") {
firmwareUpgrade="yes";
firmwareRCOnly=C.firmwareRCOnly;
if(C.firmwareRCOnly)
Rules = ProvObjects::upgrade_release_only;
else
Rules = ProvObjects::upgrade_latest;
return true;
}
if(C.firmwareUpgrade.empty() || C.firmwareUpgrade=="inherit") {
@@ -141,13 +143,11 @@ namespace OpenWifi {
break;
}
}
firmwareUpgrade = AutoDiscovery()->firmwareUpgrade();
firmwareRCOnly= AutoDiscovery()->firmwareRCOnly();
Rules = Daemon()->FirmwareRules();
return false;
}
bool InventoryDB::FindFirmwareOptionsForVenue(const std::string &VenueUUID, std::string &firmwareUpgrade,
bool &firmwareRCOnly) {
bool InventoryDB::FindFirmwareOptionsForVenue(const std::string &VenueUUID, ProvObjects::FIRMWARE_UPGRADE_RULES & Rules) {
std::string UUID = VenueUUID;
while(!UUID.empty()) {
ProvObjects::Venue V;
@@ -156,19 +156,21 @@ namespace OpenWifi {
ProvObjects::DeviceConfiguration C;
if(StorageService()->ConfigurationDB().GetRecord("id",V.deviceConfiguration,C)) {
if(C.firmwareUpgrade=="no") {
firmwareUpgrade="no";
Rules = ProvObjects::dont_upgrade;
return false;
}
if(C.firmwareUpgrade=="yes") {
firmwareUpgrade="yes";
firmwareRCOnly=C.firmwareRCOnly;
if(C.firmwareRCOnly)
Rules = ProvObjects::upgrade_release_only;
else
Rules = ProvObjects::upgrade_latest;
return true;
}
}
}
// must be inherit...
if(!V.entity.empty()) {
return FindFirmwareOptionsForEntity(V.entity,firmwareUpgrade,firmwareRCOnly);
return FindFirmwareOptionsForEntity(V.entity,Rules);
} else {
UUID=V.parent;
}
@@ -176,31 +178,26 @@ namespace OpenWifi {
break;
}
}
firmwareUpgrade = AutoDiscovery()->firmwareUpgrade();
firmwareRCOnly= AutoDiscovery()->firmwareRCOnly();
Rules = Daemon()->FirmwareRules();
return false;
}
bool InventoryDB::FindFirmwareOptions(std::string &SerialNumber, std::string &firmwareUpgrade,
bool &firmwareRCOnly) {
bool InventoryDB::FindFirmwareOptions(std::string &SerialNumber, ProvObjects::FIRMWARE_UPGRADE_RULES & Rules) {
ProvObjects::InventoryTag T;
firmwareUpgrade = AutoDiscovery()->firmwareUpgrade();
firmwareRCOnly= AutoDiscovery()->firmwareRCOnly();
if(GetRecord("serialNumber",SerialNumber,T)) {
// if there is a local configuration, use this
firmwareRCOnly = false;
firmwareUpgrade.clear();
if(!T.deviceConfiguration.empty()) {
ProvObjects::DeviceConfiguration C;
if(StorageService()->ConfigurationDB().GetRecord("id",T.deviceConfiguration,C)) {
if(C.firmwareUpgrade=="no") {
firmwareUpgrade="no";
Rules = ProvObjects::dont_upgrade;
return false;
}
if(C.firmwareUpgrade=="yes") {
firmwareUpgrade="yes";
firmwareRCOnly = C.firmwareRCOnly;
if(C.firmwareRCOnly)
Rules = ProvObjects::upgrade_release_only;
else
Rules = ProvObjects::upgrade_latest;
return true;
}
}
@@ -208,14 +205,16 @@ namespace OpenWifi {
// look at entity...
if(!T.entity.empty()) {
return FindFirmwareOptionsForEntity(T.entity,firmwareUpgrade,firmwareRCOnly);
return FindFirmwareOptionsForEntity(T.entity,Rules);
}
if(!T.venue.empty()) {
return FindFirmwareOptionsForVenue(T.venue,firmwareUpgrade,firmwareRCOnly);
return FindFirmwareOptionsForVenue(T.venue,Rules);
}
Rules = Daemon()->FirmwareRules();
return false;
}
Rules = ProvObjects::dont_upgrade;
return false;
}

View File

@@ -40,9 +40,9 @@ namespace OpenWifi {
public:
InventoryDB( OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L);
bool CreateFromConnection(const std::string & SerialNumber, const std::string & ConnectionInfo, const std::string & DeviceType);
bool FindFirmwareOptions(std::string & SerialNumber, std::string &firmwareUpgrade, bool &firmwareRCOnly);
static bool FindFirmwareOptionsForEntity(const std::string & EntityUUID, std::string &firmwareUpgrade, bool &firmwareRCOnly);
static bool FindFirmwareOptionsForVenue(const std::string & VenueUUID, std::string &firmwareUpgrade, bool &firmwareRCOnly);
bool FindFirmwareOptions(std::string & SerialNumber, ProvObjects::FIRMWARE_UPGRADE_RULES & Rules);
static bool FindFirmwareOptionsForEntity(const std::string & EntityUUID, ProvObjects::FIRMWARE_UPGRADE_RULES & Rules);
static bool FindFirmwareOptionsForVenue(const std::string & VenueUUID, ProvObjects::FIRMWARE_UPGRADE_RULES & Rules);
void InitializeSerialCache();
private:
};