void CEnvGen::cloudConfiguration(IPropertyTree * config, const char* cloud) { if (!stricmp(cloud, "aws")) { createUpdateTask("modify", config, "sw:espsmc@enableSystemUseRewrite=true|false"); createUpdateTask("modify", config, "sw:roxie@roxieMulticastEnabled=false"); } }
bool CEnvGen::convertOverrideTask(IPropertyTree *config, const char * input) { StringArray sbarr; sbarr.appendList(input, ","); StringArray sbarrXPath; sbarrXPath.appendList(sbarr.item(1), "@"); StringBuffer sbTask; sbTask.clear().appendf("sw:%s", sbarr.item(0)); if (sbarrXPath.ordinality() < 2) { fprintf(stderr, "Override xpath miss '@'\n"); return false; } if ((sbarrXPath.ordinality() == 2) && !(*sbarrXPath.item(0))) sbTask.appendf("@%s=%s", sbarrXPath.item(1), sbarr.item(2)); else { sbTask.appendf(":selector=%s", sbarrXPath.item(0)); for (unsigned i=1; i < sbarrXPath.ordinality()-1; i++) sbTask.appendf("#%s", sbarrXPath.item(i)); sbTask.appendf("@%s=%s", sbarrXPath.item(sbarrXPath.ordinality()-1), sbarr.item(2)); } createUpdateTask("modify", config, sbTask.str()); return true; }
void CEnvGen::createUpdateTopologyTask(const char* action, IPropertyTree * config, const char* param) { StringBuffer sbParam; if (!stricmp(action, "add") && !stricmp(param, "default")) { sbParam.clear().append("sw:topology#topology:cluster@name=thor:eclagent@process=myeclagent:eclscheduler@process=myeclscheduler:eclccserver@process=myeclccserver:thor@process=mythor"); createUpdateTask(action, config, sbParam.str()); sbParam.clear().append("sw:topology#topology:cluster@name=roxie:eclscheduler@process=myeclscheduler:eclccserver@process=myeclccserver:roxie@process=myroxie"); createUpdateTask(action, config, sbParam.str()); sbParam.clear().append("sw:topology#topology:cluster@name=thor_roxie:eclscheduler@process=myeclscheduler:eclccserver@process=myeclccserver:roxie@process=myroxie:thor@process=mythor"); createUpdateTask(action, config, sbParam.str()); } else { sbParam.clear().append("sw:topology#").appendf("%s", param); createUpdateTask(action, config, sbParam.str()); } }
void CEnvGen::createUpdateNodeTask(const char* action, IPropertyTree * config, const char* param) { StringBuffer sbParam; StringArray parts; parts.appendList(param, ":"); String part1(parts.item(0)); if (part1.startsWith("spark")) { sbParam.clear().append("pg:buildset#sparkthor"); createUpdateTask(action, config, sbParam.str()); } if (part1.startsWith("thor")) { for ( unsigned i = 1; i < parts.ordinality() ; i++) { sbParam.clear().append("sw:"); StringBuffer sbPart1(part1.str()); sbPart1.append(":instance-").appendf("%s",parts.item(i)); sbParam.appendf("%s", sbPart1.str()); createUpdateTask(action, config, sbParam.str()); } } else { if (part1.startsWith("computer")) sbParam.append("hd:").appendf("%s", part1.str()); else { sbParam.clear().append("sw:"); StringBuffer sbPart1(part1.str()); sbPart1.replaceString("@", ":instance@"); sbParam.appendf("%s", sbPart1.str()); } createUpdateTask(action, config, sbParam.str()); } }
void UIGInformationElementInterface::updateAppearance() { /* Call to base-class: */ UIGInformationElement::updateAppearance(); /* Prepare/start update task: */ if (!m_pTask) { /* Prepare update task: */ m_pTask = createUpdateTask(); /* Post task into global thread-pool: */ vboxGlobal().threadPool()->enqueueTask(m_pTask); } }
void CEnvGen::createUpdateBindingTask(const char* action, IPropertyTree * config, const char* param) { StringArray bindingAndAttrs; bindingAndAttrs.appendList(param, "@"); StringArray espAndBinding; espAndBinding.appendList(bindingAndAttrs.item(0), ":"); if (bindingAndAttrs.ordinality() != 2) { if (!stricmp(action, "modify") && (espAndBinding.ordinality() != 2)) throw MakeStringException(CfgEnvErrorCode::InvalidParams, "\"-mod-binding\" should have format: <esp name>:<binding name>@attr1=<value>^attr2=value>"); else if (!stricmp(action, "add")) throw MakeStringException(CfgEnvErrorCode::InvalidParams, "\"-add-binding\" should have format: <esp name>@name=<value>^service=<value>"); } if (!stricmp(action, "remove") && (espAndBinding.ordinality() != 2)) throw MakeStringException(CfgEnvErrorCode::InvalidParams, "\"-rmv-binding\" should have format: <esp name>:<binding name>"); StringBuffer sbParam; sbParam.appendf("sw:esp#%s:EspBinding", espAndBinding.item(0)); if ((espAndBinding.ordinality() == 2) && *(espAndBinding.item(1))) { if (stricmp(action, "remove")) sbParam.appendf("#%s", espAndBinding.item(1)); else sbParam.appendf("@name=%s", espAndBinding.item(1)); } if (stricmp(action, "remove")) sbParam.appendf("@%s", bindingAndAttrs.item(1)); createUpdateTask(action, config, sbParam.str()); }
void CEnvGen::createUpdateServiceTask(const char* action, IPropertyTree * config, const char* param) { StringBuffer sbParam; sbParam.append("sw:").appendf("%s", param); createUpdateTask(action, config, sbParam.str()); }
bool CEnvGen::parseArgs(int argc, char** argv) { int i = 1; //m_params = createPTree("Env"); m_params.setown(createPTree("Env")); IPropertyTree * config = createPTree("Config"); m_params->addPropTree("Config", config); while (i < argc) { if (stricmp(argv[i], "-help") == 0 || stricmp(argv[i], "-?") == 0) { usage(); return false; } else if (stricmp(argv[i], "-mode") == 0) { i++; config->setProp("@mode", argv[i++]); } else if ((stricmp(argv[i], "-env") == 0) || (stricmp(argv[i], "-env-out") == 0)) { i++; config->addProp("@env-out", argv[i++]); } else if (stricmp(argv[i], "-env-in") == 0) { i++; config->addProp("@env-in", argv[i++]); } else if (stricmp(argv[i], "-ip") == 0) { i++; config->addProp("@ip-list", argv[i++]); } else if (stricmp(argv[i], "-ipfile") == 0) { i++; config->addProp("@ip-file", argv[i++]); } else if (stricmp(argv[i], "-supportnodes") == 0) { i++; config->addProp("@support-nodes", argv[i++]); } else if (stricmp(argv[i], "-espnodes") == 0) { i++; config->addProp("@esp-nodes", argv[i++]); } else if (stricmp(argv[i], "-roxienodes") == 0) { i++; config->addProp("@roxie-nodes", argv[i++]); } else if (stricmp(argv[i], "-thornodes") == 0) { i++; config->addProp("@thor-nodes", argv[i++]); } else if (stricmp(argv[i], "-slavespernode") == 0) { i++; config->addProp("@slaves-per-node", argv[i++]); } else if (stricmp(argv[i], "-thorchannelsperslave") == 0) { i++; config->addProp("@thor-channels-per-slave", argv[i++]); } else if (stricmp(argv[i], "-roxiechannelsperslave") == 0) { i++; config->addProp("@roxie-channels-per-slave", argv[i++]); } else if (stricmp(argv[i], "-roxieondemand") == 0) { i++; if (!strcmp(argv[i++], "0")) config->addProp("@roxie-on-demand", "false"); } else if (stricmp(argv[i], "-o") == 0) { i++; StringArray sbarr; sbarr.appendList(argv[i++], "="); if (sbarr.length() != 2) continue; if (strstr(sbarr.item(1), "[NAME]") && (strstr(sbarr.item(1), "[INST]") || strstr(sbarr.item(1), "[COMPONENT]"))) { StringBuffer sb; sb.clear().appendf("sw:dirs:category@%s=%s",sbarr.item(0), sbarr.item(1)); createUpdateTask("modify", config, sb.str()); } else { fprintf(stderr, "Error: Directory Override must contain [NAME] and either [INST] or [COMPONENT]\n"); return false; } } else if (stricmp(argv[i], "-override") == 0) { i++; if (!convertOverrideTask(config, argv[i++])) return false; } else if (stricmp(argv[i], "-set-xpath-attrib-value")== 0) { i++; m_arrXPaths.append(*new StringBufferItem (argv[i++])); m_arrAttrib.append(*new StringBufferItem (argv[i++])); m_arrValues.append(*new StringBufferItem (argv[i++])); } // new parameters else if (stricmp(argv[i], "-env-options") == 0) { i++; config->addProp("@options", argv[i++]); } else if (stricmp(argv[i], "-env-rules") == 0) { i++; config->addProp("@rules", argv[i++]); } else if (stricmp(argv[i], "-buildset") == 0) { i++; config->addProp("@buildset", argv[i++]); } else if (stricmp(argv[i], "-add") == 0) { i++; createUpdateTask("add", config, argv[i++]); } else if (stricmp(argv[i], "-mod") == 0) { i++; createUpdateTask("modify", config, argv[i++]); } else if (stricmp(argv[i], "-rmv") == 0) { i++; createUpdateTask("remove", config, argv[i++]); } else if (stricmp(argv[i], "-add-node") == 0) { i++; createUpdateNodeTask("add", config, argv[i++]); } else if (stricmp(argv[i], "-mod-node") == 0) { i++; createUpdateNodeTask("modify", config, argv[i++]); } else if (stricmp(argv[i], "-rmv-node") == 0) { i++; createUpdateNodeTask("remove", config, argv[i++]); } else if (stricmp(argv[i], "-add-binding") == 0) { i++; createUpdateBindingTask("add", config, argv[i++]); } else if (stricmp(argv[i], "-mod-binding") == 0) { i++; createUpdateBindingTask("modify", config, argv[i++]); } else if (stricmp(argv[i], "-rmv-binding") == 0) { i++; createUpdateBindingTask("remove", config, argv[i++]); } else if (stricmp(argv[i], "-add-service") == 0) { i++; createUpdateServiceTask("add", config, argv[i++]); } else if (stricmp(argv[i], "-mod-service") == 0) { i++; createUpdateServiceTask("modify", config, argv[i++]); } else if (stricmp(argv[i], "-rmv-service") == 0) { i++; createUpdateServiceTask("remove", config, argv[i++]); } else if (stricmp(argv[i], "-add-topology") == 0) { i++; createUpdateTopologyTask("add", config, argv[i++]); } else if (stricmp(argv[i], "-mod-topology") == 0) { i++; createUpdateTopologyTask("modify", config, argv[i++]); } else if (stricmp(argv[i], "-rmv-topology") == 0) { i++; createUpdateTopologyTask("remove", config, argv[i++]); } else if (stricmp(argv[i], "-in-file") == 0) { i++; addUpdateTaskFromFile(argv[i++]); } else if (stricmp(argv[i], "-add-content")== 0) { i++; m_arrContentXPaths.append(*new StringBufferItem (argv[i++])); const char* fileName = argv[i++]; StringBufferItem * sbi = new StringBufferItem() ; sbi->loadFile(fileName); m_arrContents.append(*sbi); if ((String(fileName).toLowerCase())->endsWith(".json")) m_arrContentFormats.append(*new StringBufferItem("json")); else m_arrContentFormats.append(*new StringBufferItem("xml")); } else if (stricmp(argv[i], "-show-input-only") == 0) { i++; m_showInputOnly = true; m_displayFormat = XML_Format; } else if (stricmp(argv[i], "-show-input-json-only") == 0) { i++; m_showInputOnly = true; m_displayFormat = JSON_Format; } else if (stricmp(argv[i], "-help-update-1") == 0) { usage_update_input_format_1(); return false; } else if (stricmp(argv[i], "-help-update-2") == 0) { usage_update_input_format_2(); return false; } else if (stricmp(argv[i], "-help-update-3") == 0) { usage_update_input_format_3(); return false; } else if (stricmp(argv[i], "-help-update-3-json") == 0) { usage_update_input_format_3_json(); return false; } else if (stricmp(argv[i], "-cloud") == 0) { i++; cloudConfiguration(config, argv[i++]); } else { fprintf(stderr, "\nUnknown option %s\n", argv[i]); usage(); return false; } } // Check input parameters if (!config->queryProp("@env-out")) { fprintf(stderr, "\nMissing -env-out\n"); usage(); return false; } if (!config->queryProp("@mode")) { if (config->queryProp("@env-in")) config->addProp("@mode", "update"); else config->addProp("@mode", "create"); } if (!stricmp(config->queryProp("@mode"), "update") && !config->queryProp("@env-in")) { fprintf(stderr, "\nMissing input enviroment.xml (-env-in) in update mode\n"); return false; } if (!stricmp(config->queryProp("@mode"), "create") && !config->hasProp("@ip-list") && !config->hasProp("@ip-file")) { config->setProp("@support-nodes", "0"); config->setProp("@roxie-nodes", "0"); config->setProp("@thor-nodes", "0"); config->setProp("@esp-nodes", "0"); } m_iConfigEnv = ConfigEnvFactory::getIConfigEnv(config); return true; }