42 using namespace Generator;
56 includeNode.
append_attribute(
"file", ArmarXDataPath::GetDefaultUserConfigPath() +
"/icegrid-sync-variables.icegrid.xml");
63 variableScenarioDependencyNode.
append_attribute(
"name",
"ARMARX_SCENARIO_DEPENDENCY_CONFIG");
64 variableScenarioDependencyNode.
append_attribute(
"value",
"dependencies.cfg");
67 variablePackageConfigDir.
append_attribute(
"name",
"ARMARX_PACKAGE_CONFIG_DIR");
88 std::map<std::string, RapidXmlWriterNode> existingNodes;
90 for (
auto app : *scenario->getApplications())
92 if (!existingNodes.count(app->getEffectiveNodeName()))
96 existingNodes.insert(make_pair(app->getEffectiveNodeName(), node));
99 generateComponent(app);
101 if (app->getInstanceName().empty())
103 includeNode.
append_attribute(
"file",
"icegrid/" + app->getName() +
".icegrid.xml");
107 includeNode.
append_attribute(
"file",
"icegrid/" + app->getName() +
"." + app->getInstanceName() +
".icegrid.xml");
111 writer.
saveToFile(scenario->getFolder() +
"/" + scenario->getName() +
".icegrid.xml",
true);
125 includeNode.
append_attribute(
"file", ArmarXDataPath::GetDefaultUserConfigPath() +
"/icegrid-sync-variables.icegrid.xml");
129 variableScenarioDirNode.
append_attribute(
"value",
"${ARMARX_SYNC_DIR}/share/" + scenario->getPackage()->getName() +
"/scenarios/" + scenario->getName());
132 variableScenarioDependencyNode.
append_attribute(
"name",
"ARMARX_SCENARIO_DEPENDENCY_CONFIG");
133 variableScenarioDependencyNode.
append_attribute(
"value",
"dependencies.remote.cfg");
136 variablePackageConfigDir.
append_attribute(
"name",
"ARMARX_PACKAGE_CONFIG_DIR");
137 variablePackageConfigDir.
append_attribute(
"value",
"${ARMARX_SYNC_DIR}/share/" + scenario->getPackage()->getName() +
"/config");
155 std::map<std::string, RapidXmlWriterNode> existingNodes;
157 for (
auto app : *scenario->getApplications())
159 if (!existingNodes.count(app->getEffectiveNodeName()))
163 existingNodes.insert(make_pair(app->getEffectiveNodeName(), node));
166 generateComponent(app);
168 if (app->getInstanceName().empty())
170 includeNode.
append_attribute(
"file",
"icegrid/" + app->getName() +
".icegrid.xml");
174 includeNode.
append_attribute(
"file",
"icegrid/" + app->getName() +
"." + app->getInstanceName() +
".icegrid.xml");
178 writer.
saveToFile(scenario->getFolder() +
"/" + scenario->getName() +
".remote.icegrid.xml",
true);
190 applicationNode.
append_attribute(
"componentExeDir",
"${" + app->getPackageName() +
"_BIN_DIR}");
193 std::string armarXConfigValue = (app->getScenario()->isGlobalConfigFileexistent() ? app->getScenario()->getGlobalConfigPath() +
"," :
"")
194 + (app->getInstanceName().empty() ?
"${ARMARX_SCENARIO_DIR}/config/" + app->getName() +
".cfg" :
"${ARMARX_SCENARIO_DIR}/config/" + app->getName() +
"." + app->getInstanceName() +
".cfg");
209 applicationNode.
append_attribute(
"ArmarXDependenciesConfig",
"${ARMARX_PACKAGE_CONFIG_DIR}/${ARMARX_SCENARIO_DEPENDENCY_CONFIG}");
210 applicationNode.
append_attribute(
"ArmarXLoggingGroup", app->getScenario()->getName());
212 std::filesystem::create_directory(app->getScenario()->getFolder() +
"/icegrid");
213 if (app->getInstanceName().empty())
215 writer.
saveToFile(app->getScenario()->getFolder() +
"/icegrid/" + app->getName() +
".icegrid.xml",
true);
219 writer.
saveToFile(app->getScenario()->getFolder() +
"/icegrid/" + app->getName() +
"." + app->getInstanceName() +
".icegrid.xml",
true);
227 IceGrid::ApplicationDescriptor result;
228 result.name = scenario->getName();
230 IceGrid::StringStringDict variables;
231 variables[
"ARMARX_SYNC_DIR"] = getDefaultSyncFile();
232 variables[
"ARMARX_SCENARIO_DIR"] = scenario->getFolder();
233 variables[
"ARMARX_SCENARIO_DEPENDENCY_CONFIG"] =
"dependencies.cfg";
234 variables[
"ARMARX_PACKAGE_CONFIG_DIR"] = finder.
getConfigDir();
235 variables[
"ArmarX_LD_LIB_PATH"] =
"";
236 variables[
"ArmarX_PATH"] =
"";
237 variables[
"ARMARX_LOGGING_GROUP"] = scenario->getName();
242 variables[dep +
"_BIN_DIR"] = currentFinder.
getBinaryDir();
245 result.variables = variables;
247 IceGrid::ApplicationDescriptor defaultDesc = iceAdmin->getDefaultApplicationDescriptor();
248 result.serverTemplates = defaultDesc.serverTemplates;
249 auto v = IceGrid::ServerDescriptorPtr::dynamicCast(result.serverTemplates[
"ArmarXComponentTemplate"].descriptor.get());
252 for (
auto variable : scenario->getIceEnviromentVariables())
254 v->envs.push_back(variable.first +
"=" + variable.second);
257 result.serviceTemplates = defaultDesc.serviceTemplates;
264 IceGrid::ApplicationDescriptor result = generateEmptyLocalApplicationDescriptor(scenario, iceAdmin);
266 for (
auto app : *scenario->getApplications())
268 if (!app->getEnabled())
273 result.nodes[app->getEffectiveNodeName()].serverInstances.push_back(generateComponentNode(app));
281 IceGrid::ApplicationDescriptor result;
282 result.name = scenario->getName();
284 IceGrid::StringStringDict variables;
285 variables[
"ARMARX_SYNC_DIR"] = getDefaultSyncFile();
286 variables[
"ARMARX_SCENARIO_DIR"] =
"${ARMARX_SYNC_DIR}/share/" + scenario->getPackage()->getName() +
"/scenarios/" + scenario->getName();
287 variables[
"ARMARX_SCENARIO_DEPENDENCY_CONFIG"] =
"dependencies.remote.cfg";
288 variables[
"ARMARX_PACKAGE_CONFIG_DIR"] =
"${ARMARX_SYNC_DIR}/share/" + scenario->getPackage()->getName() +
"/config";
289 variables[
"ArmarX_LD_LIB_PATH"] =
"${ARMARX_SYNC_DIR}/lib:${ARMARX_SYNC_DIR}/usr/lib";
290 variables[
"ArmarX_PATH"] =
"${ARMARX_SYNC_DIR}/bin:${ARMARX_SYNC_DIR}/usr/bin";
291 variables[
"ARMARX_LOGGING_GROUP"] = scenario->getName();
297 variables[dep +
"_BIN_DIR"] =
"${ARMARX_SYNC_DIR}/bin";
300 result.variables = variables;
302 IceGrid::ApplicationDescriptor defaultDesc = iceAdmin->getDefaultApplicationDescriptor();
303 result.serverTemplates = defaultDesc.serverTemplates;
304 auto v = IceGrid::ServerDescriptorPtr::dynamicCast(result.serverTemplates[
"ArmarXComponentTemplate"].descriptor.get());
307 for (
auto variable : scenario->getIceEnviromentVariables())
309 v->envs.push_back(variable.first +
"=" + variable.second);
312 result.serviceTemplates = defaultDesc.serviceTemplates;
321 IceGrid::ApplicationDescriptor result = generateEmptyRemoteApplicationDescriptor(scenario, iceAdmin);
323 for (
auto app : *scenario->getApplications())
325 if (!app->getEnabled())
329 result.nodes[app->getEffectiveNodeName()].serverInstances.push_back(generateComponentNode(app));
337 IceGrid::ServerInstanceDescriptor result;
338 result._cpp_template =
"ArmarXComponentTemplate";
339 result.parameterValues[
"component"] = app->getName();
341 result.parameterValues[
"componentExeDir"] =
"${" + app->getPackageName() +
"_BIN_DIR}";
343 std::string armarXConfigValue = (app->getScenario()->isGlobalConfigFileexistent() ? app->getScenario()->getGlobalConfigPath() +
"," :
"")
344 + (app->getInstanceName().empty() ?
"${ARMARX_SCENARIO_DIR}/config/" + app->getName() +
".cfg" :
"${ARMARX_SCENARIO_DIR}/config/" + app->getName() +
"." + app->getInstanceName() +
".cfg");
346 result.parameterValues[
"configDomain"] = app->getConfigDomain();
347 result.parameterValues[
"ArmarXConfig"] = armarXConfigValue;
348 result.parameterValues[
"ArmarXDependenciesConfig"] =
"${ARMARX_PACKAGE_CONFIG_DIR}/${ARMARX_SCENARIO_DEPENDENCY_CONFIG}";
349 result.parameterValues[
"ArmarXLoggingGroup"] = app->getScenario()->getName();
350 result.parameterValues[
"activationType"] = app->getIceAutoRestart() ?
"always" :
"manual";
351 result.parameterValues[
"activationTimeout"] =
"10";
357 std::string IceGridXmlGenerator::getSyncDirFromFile(std::string path)
367 ARMARX_DEBUG_S <<
"Your icegrid-sync-variables file is ill formatted (Error: " << exception.what() <<
")";
380 doc.
saveToFile(ArmarXDataPath::GetDefaultUserConfigPath() +
"/icegrid-sync-variables.icegrid.xml",
true);
385 IceGrid::ApplicationUpdateDescriptor result;
386 result.name = descriptor.name;
388 for (
auto nodes : descriptor.nodes)
390 IceGrid::NodeUpdateDescriptor nodeUpdate;
391 nodeUpdate.name = nodes.first;
392 nodeUpdate.serverInstances = nodes.second.serverInstances;
394 nodeUpdate.propertySets = nodes.second.propertySets;
395 nodeUpdate.serverInstances = nodes.second.serverInstances;
396 nodeUpdate.servers = nodes.second.servers;
397 nodeUpdate.variables = nodes.second.variables;
398 result.nodes.push_back(nodeUpdate);
401 result.serverTemplates = descriptor.serverTemplates;
402 result.serviceTemplates = descriptor.serviceTemplates;
403 result.variables = result.variables;
410 return getSyncDirFromFile(ArmarXDataPath::GetDefaultUserConfigPath() +
"/icegrid-sync-variables.icegrid.xml");