Skip to content

Commit

Permalink
[sm,launcher] Implement override env vars
Browse files Browse the repository at this point in the history
Signed-off-by: Oleksandr Grytsov <[email protected]>
  • Loading branch information
al1img committed Jan 23, 2025
1 parent 50a1bd2 commit ddd3606
Show file tree
Hide file tree
Showing 4 changed files with 342 additions and 21 deletions.
40 changes: 26 additions & 14 deletions include/aos/sm/launcher.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -341,22 +341,44 @@ class Launcher : public LauncherItf,

static constexpr auto cHostFSWhiteoutsDir = "whiteouts";

static constexpr auto cAllocatorSize
= Max(sizeof(InstanceInfoStaticArray) + sizeof(InstanceDataStaticArray) * 2 + sizeof(ServiceInfoStaticArray)
+ sizeof(LayerInfoStaticArray) + sizeof(servicemanager::ServiceDataStaticArray)
+ sizeof(InstanceStatusStaticArray) + sizeof(servicemanager::ServiceData) + sizeof(InstanceData),
sizeof(EnvVarsArray) + sizeof(InstanceStatusStaticArray) + sizeof(InstanceDataStaticArray));

void ShowResourceUsageStats();
Error ProcessLastInstances();
Error ProcessInstances(const Array<InstanceInfo>& instances, bool forceRestart = false);
Error ProcessServices(const Array<ServiceInfo>& services);
Error ProcessLayers(const Array<LayerInfo>& layers);
Error ProcessStopInstances(const Array<InstanceData>& instances);
Error ProcessRestartInstances(const Array<InstanceData>& instances);
Error SendRunStatus();
Error SendOutdatedInstancesStatus(const Array<InstanceData>& instances);
void StopInstances(const Array<InstanceData>& instances);
void StartInstances(const Array<InstanceData>& instances);
void RestartInstances(const Array<InstanceData>& instances);
void CacheServices(const Array<InstanceData>& instances);
void UpdateInstanceServices();
Error GetStartInstances(const Array<InstanceInfo>& desiredInstances, Array<InstanceData>& startInstances) const;
Error GetStopInstances(
const Array<InstanceData>& startInstances, Array<InstanceData>& stopInstances, bool forceRestart) const;
Error GetCurrentInstances(Array<InstanceData>& instance) const;
Error GetCurrentInstances(Array<InstanceData>& instances) const;
Error StartInstance(const InstanceData& info);
Error StopInstance(const String& instanceID);
Error FillCurrentInstance(const Array<InstanceData>& instances);
Error RunLastInstances();
Error StopCurrentInstances();
Error GetOutdatedInstances(Array<InstanceData>& instances);
Error HandleOfflineTTLs();
Error SetEnvVars(const Array<cloudprotocol::EnvVarsInstanceInfo>& envVarsInfo,
Array<cloudprotocol::EnvVarsInstanceStatus>& statuses);
Error GetInstanceEnvVars(const InstanceIdent& instanceIdent, Array<StaticString<cEnvVarNameLen>>& envVars) const;
Error RemoveOutdatedEnvVars();
Error GetEnvChangedInstances(Array<InstanceData>& instance) const;
Error SendEnvChangedInstancesStatus(const Array<InstanceData>& instances);
Error UpdateInstancesEnvVars();

servicemanager::ServiceData* GetService(const String& serviceID)
{
Expand All @@ -370,14 +392,6 @@ class Launcher : public LauncherItf,
[&instanceID](const Instance& instance) { return instanceID == instance.InstanceID(); });
}

Error StartInstance(const InstanceData& info);
Error StopInstance(const String& instanceID);
Error FillCurrentInstance(const Array<InstanceData>& instances);
Error RunLastInstances();
Error StopCurrentInstances();
Error GetOutdatedInstances(Array<InstanceData>& instances);
Error HandleOfflineTTLs();

Config mConfig;
ConnectionPublisherItf* mConnectionPublisher {};
InstanceStatusReceiverItf* mStatusReceiver {};
Expand All @@ -392,22 +406,20 @@ class Launcher : public LauncherItf,
StorageItf* mStorage {};
RuntimeItf* mRuntime {};

mutable StaticAllocator<sizeof(InstanceInfoStaticArray) + sizeof(InstanceDataStaticArray) * 2
+ sizeof(ServiceInfoStaticArray) + sizeof(LayerInfoStaticArray) + sizeof(servicemanager::ServiceDataStaticArray)
+ sizeof(InstanceStatusStaticArray) + sizeof(servicemanager::ServiceData) + sizeof(InstanceData)>
mAllocator;
mutable StaticAllocator<cAllocatorSize> mAllocator;

bool mLaunchInProgress = false;
mutable Mutex mMutex;
Thread<cThreadTaskSize, cThreadStackSize> mThread;
ThreadPool<cNumLaunchThreads, Max(cMaxNumInstances, cMaxNumServices, cMaxNumLayers), cThreadTaskSize,
ThreadPool<cNumLaunchThreads, Max(cMaxNumInstances * 2, cMaxNumServices, cMaxNumLayers), cThreadTaskSize,
cThreadStackSize>
mLaunchPool;
bool mConnected = false;
mutable ConditionalVariable mCondVar;

StaticArray<servicemanager::ServiceData, cMaxNumServices> mCurrentServices;
StaticArray<Instance, cMaxNumInstances> mCurrentInstances;
cloudprotocol::EnvVarsInstanceInfoArray mCurrentEnvVars;
StaticString<cFilePathLen> mHostWhiteoutsDir;
NodeInfo mNodeInfo;
Time mOnlineTime;
Expand Down
18 changes: 16 additions & 2 deletions include/aos/sm/launcher/instance.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,20 @@ class Instance {
*/
Duration GetOfflineTTL() const { return mOfflineTTL; };

/**
* Returns instance override env vars.
*
* @return EnvVarsArray.
*/
const EnvVarsArray& GetOverrideEnvVars() const { return mOverrideEnvVars; };

/**
* Sets
*
* @param envVars
*/
void SetOverrideEnvVars(const Array<StaticString<cEnvVarNameLen>>& envVars) { mOverrideEnvVars = envVars; };

/**
* Returns instances allocator.
*/
Expand Down Expand Up @@ -314,8 +328,7 @@ class Instance {
static constexpr auto cAllocatorSize
= (sizeof(oci::RuntimeSpec) + sizeof(image::ImageParts)
+ Max(sizeof(networkmanager::NetworkParams), sizeof(monitoring::InstanceMonitorParams),
sizeof(oci::ImageSpec) + sizeof(oci::ServiceConfig)
+ sizeof(StaticArray<StaticString<cEnvVarNameLen>, cMaxNumEnvVariables>),
sizeof(oci::ImageSpec) + sizeof(oci::ServiceConfig) + sizeof(EnvVarsArray),
sizeof(LayersStaticArray) + sizeof(layermanager::LayerData), sizeof(Mount) + sizeof(ResourceInfo),
sizeof(Mount) + sizeof(DeviceInfo) + sizeof(StaticArray<oci::LinuxDevice, cMaxNumHostDevices>)))
* AOS_CONFIG_LAUNCHER_NUM_COOPERATE_LAUNCHES;
Expand Down Expand Up @@ -392,6 +405,7 @@ class Instance {
Error mRunError;
bool mPermissionsRegistered = false;
Duration mOfflineTTL = 0;
EnvVarsArray mOverrideEnvVars;
};

} // namespace aos::sm::launcher
Expand Down
4 changes: 4 additions & 0 deletions src/sm/launcher/instance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,10 @@ Error Instance::CreateLinuxSpec(
return err;
}

if (auto err = AddEnvVars(mOverrideEnvVars, runtimeSpec); !err.IsNone()) {
return err;
}

if (auto err = ApplyImageConfig(imageSpec, runtimeSpec); !err.IsNone()) {
return AOS_ERROR_WRAP(err);
}
Expand Down
Loading

0 comments on commit ddd3606

Please sign in to comment.