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.commandchannel = /tmp/app.owprov
openwifi.system.uri.ui = owprov-ui.arilia.com openwifi.system.uri.ui = owprov-ui.arilia.com
firmware.updater.upgrade = yes firmware.updater.upgrade = false
firmware.updater.rconly = no firmware.updater.releaseonly = false
geocodeapi = google geocodeapi = google
google.apikey = ********************************** google.apikey = **********************************

View File

@@ -70,8 +70,6 @@ namespace OpenWifi {
}; };
int AutoDiscovery::Start() { 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); }; Types::TopicNotifyFunction F = [this](std::string s1,std::string s2) { this->ConnectionReceived(s1,s2); };
ConnectionWatcherId_ = KafkaManager()->RegisterTopicWatcher(KafkaTopics::CONNECTION, F); ConnectionWatcherId_ = KafkaManager()->RegisterTopicWatcher(KafkaTopics::CONNECTION, F);
Worker_.start(*this); Worker_.start(*this);

View File

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

View File

@@ -40,6 +40,15 @@ namespace OpenWifi {
} }
void Daemon::initialize() { 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() { void MicroServicePostInitialization() {

View File

@@ -15,20 +15,10 @@
#include <vector> #include <vector>
#include <set> #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 "Dashboard.h"
#include "framework/MicroService.h" #include "framework/MicroService.h"
#include "framework/OpenWifiTypes.h" #include "framework/OpenWifiTypes.h"
#include "RESTObjects/RESTAPI_ProvObjects.h"
namespace OpenWifi { namespace OpenWifi {
@@ -52,9 +42,11 @@ namespace OpenWifi {
static Daemon *instance(); static Daemon *instance();
inline OpenWifi::TopoDashboard & GetDashboard() { return DB_; } inline OpenWifi::TopoDashboard & GetDashboard() { return DB_; }
Poco::Logger & Log() { return Poco::Logger::get(AppName()); } Poco::Logger & Log() { return Poco::Logger::get(AppName()); }
ProvObjects::FIRMWARE_UPGRADE_RULES FirmwareRules() const { return FWRules_; }
private: private:
static Daemon *instance_; static Daemon *instance_;
OpenWifi::TopoDashboard DB_{}; OpenWifi::TopoDashboard DB_{};
ProvObjects::FIRMWARE_UPGRADE_RULES FWRules_{ProvObjects::dont_upgrade};
}; };

View File

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

View File

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

View File

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

View File

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