Пример #1
0
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");
   }
}
Пример #2
0
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;
}
Пример #3
0
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());
    }
}
Пример #4
0
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);
    }
}
Пример #6
0
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());
}
Пример #7
0
void CEnvGen::createUpdateServiceTask(const char* action, IPropertyTree * config, const char* param)
{
    StringBuffer sbParam;
    sbParam.append("sw:").appendf("%s", param);
    createUpdateTask(action, config, sbParam.str());
}
Пример #8
0
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;
}