diff --git a/oam/etc/ConsoleCmds.xml b/oam/etc/ConsoleCmds.xml index 56a6e678f..17cf0581d 100644 --- a/oam/etc/ConsoleCmds.xml +++ b/oam/etc/ConsoleCmds.xml @@ -309,8 +309,10 @@ MariaDB Columnstore Packages and setup the module to make it ready to be restored Required: Module-type or Module-name being added Required: Number-of-Modules being added when Module-type is specified - Optional: Server-Hostnames/Amazon-Instance-Names seperated by commas - Optional: Server-root-password + Required: Store hostnames in the configuration instead of IP addresses (y/n) + If not Amazon, then Required: hostnames separated by commas + If Amazon, then Optional: Amazon-Instance-Names separated by commas + Optional: Server-user-password removeModule diff --git a/oam/oamcpp/liboamcpp.cpp b/oam/oamcpp/liboamcpp.cpp index 539b48bbd..805c7d5d0 100644 --- a/oam/oamcpp/liboamcpp.cpp +++ b/oam/oamcpp/liboamcpp.cpp @@ -1272,10 +1272,12 @@ void Oam::setSystemConfig(const std::string module, ModuleConfig moduleconfig) * ********************************************************************/ -void Oam::addModule(DeviceNetworkList devicenetworklist, const std::string password, const std::string mysqlpw) +void Oam::addModule(DeviceNetworkList devicenetworklist, const std::string password, const std::string mysqlpw, + bool storeHostnames) { // build and send msg - int returnStatus = sendMsgToProcMgr2(ADDMODULE, devicenetworklist, FORCEFUL, ACK_YES, password, mysqlpw); + int returnStatus = sendAddModuleToProcMgr(ADDMODULE, devicenetworklist, FORCEFUL, ACK_YES, storeHostnames, + password, mysqlpw); if (returnStatus != API_SUCCESS) exceptionControl("addModule", returnStatus); @@ -10007,6 +10009,124 @@ int Oam::sendMsgToProcMgr2(messageqcpp::ByteStream::byte requestType, DeviceNetw return returnStatus; } +/* A slightly different version of sendMsgToProcMgr2. Add-module needs to send one add'l + parameter, and this was the best of a couple bad options. */ +int Oam::sendAddModuleToProcMgr(messageqcpp::ByteStream::byte requestType, DeviceNetworkList devicenetworklist, + GRACEFUL_FLAG gracefulflag, ACK_FLAG ackflag, bool storeHostnames, const std::string password, + const std::string mysqlpw) +{ + if (!checkSystemRunning()) + return API_CONN_REFUSED; + + int returnStatus = API_TIMEOUT; //default + ByteStream msg; + ByteStream receivedMSG; + ByteStream::byte msgType; + ByteStream::byte actionType; + ByteStream::byte status; + + // get current requesting process, an error will occur if process is a UI tool (not kept in Status Table) + // this will be used to determine if this is a manually or auto request down within Process-Monitor + bool requestManual; + myProcessStatus_t t; + + try + { + t = getMyProcessStatus(); + requestManual = false; // set to auto + } + catch (...) + { + requestManual = true; // set to manual + } + + // setup message + msg << (ByteStream::byte) REQUEST; + msg << requestType; + msg << (std::string) " "; + msg << (ByteStream::byte) gracefulflag; + msg << (ByteStream::byte) ackflag; + msg << (ByteStream::byte) requestManual; + msg << (uint8_t) storeHostnames; + msg << (uint16_t) devicenetworklist.size(); + + DeviceNetworkList::iterator pt = devicenetworklist.begin(); + + for ( ; pt != devicenetworklist.end() ; pt++) + { + msg << (*pt).DeviceName; + + if ( (*pt).UserTempDeviceName.empty() ) + msg << " "; + else + msg << (*pt).UserTempDeviceName; + + if ( (*pt).DisableState.empty() ) + msg << " "; + else + msg << (*pt).DisableState; + + msg << (uint16_t) (*pt).hostConfigList.size(); + + HostConfigList::iterator pt1 = (*pt).hostConfigList.begin(); + + for ( ; pt1 != (*pt).hostConfigList.end() ; pt1++) + { + msg << (*pt1).IPAddr; + msg << (*pt1).HostName; + msg << (*pt1).NicID; + } + } + + msg << password; + msg << mysqlpw; + + try + { + //send the msg to Process Manager + MessageQueueClient procmgr("ProcMgr"); + procmgr.write(msg); + + // check for Ack msg if needed + if ( ackflag == ACK_YES ) + { + // wait 15 minutes for ACK from Process Manager + struct timespec ts = { 900, 0 }; + + receivedMSG = procmgr.read(&ts); + + if (receivedMSG.length() > 0) + { + receivedMSG >> msgType; + receivedMSG >> actionType; + receivedMSG >> status; + + if ( msgType == oam::ACK && actionType == requestType) + { + // ACK for this request + returnStatus = status; + } + } + else // timeout + returnStatus = API_TIMEOUT; + } + else + // No ACK, assume write success + returnStatus = API_SUCCESS; + + // shutdown connection + procmgr.shutdown(); + } + catch (...) + { + returnStatus = API_FAILURE; + } + + return returnStatus; +} + + + /*************************************************************************** * * Function: sendMsgToProcMgr3 diff --git a/oam/oamcpp/liboamcpp.h b/oam/oamcpp/liboamcpp.h index 39e2a51de..5d5a09c6c 100644 --- a/oam/oamcpp/liboamcpp.h +++ b/oam/oamcpp/liboamcpp.h @@ -1488,7 +1488,8 @@ public: * @param DeviceNetworkConfig the Modules added * @param password Host Root Password */ - EXPORT void addModule(DeviceNetworkList devicenetworklist, const std::string password, const std::string mysqlpw); + EXPORT void addModule(DeviceNetworkList devicenetworklist, const std::string password, const std::string mysqlpw, + bool storeHostnames); /** @brief remove Module * @@ -2503,6 +2504,12 @@ private: int sendMsgToProcMgr2(messageqcpp::ByteStream::byte requestType, DeviceNetworkList devicenetworklist, GRACEFUL_FLAG gracefulflag, ACK_FLAG ackflag, const std::string password = oam::UnassignedName, const std::string mysqlpw = oam::UnassignedName); + /** @brief a slightly different version of sendMsgToProcMgr2, which is for addmodule only. + */ + int sendAddModuleToProcMgr(messageqcpp::ByteStream::byte requestType, DeviceNetworkList devicenetworklist, + GRACEFUL_FLAG gracefulflag, ACK_FLAG ackflag, bool storeHostnames, const std::string password = oam::UnassignedName, + const std::string mysqlpw = oam::UnassignedName); + /** @brief build and send request message to Process Manager * Check for status messages */ diff --git a/oamapps/mcsadmin/mcsadmin.cpp b/oamapps/mcsadmin/mcsadmin.cpp index cf28b15bb..68355980a 100644 --- a/oamapps/mcsadmin/mcsadmin.cpp +++ b/oamapps/mcsadmin/mcsadmin.cpp @@ -5660,6 +5660,7 @@ int processCommand(string* arguments) DeviceNetworkList enabledevicenetworklist; HostConfig hostconfig; + bool storeHostnames = false; string moduleType; string moduleName; int moduleCount; @@ -5670,7 +5671,7 @@ int processCommand(string* arguments) umStorageNames umstoragenames; int hostArg; int dbrootPerPM = 0; - + //check if module type or module name was entered if ( arguments[1].size() == 2 ) { @@ -5685,8 +5686,47 @@ int processCommand(string* arguments) //Module Type was entered moduleType = arguments[1]; moduleCount = atoi(arguments[2].c_str()); + hostArg = 4; + + // MCOL-1607. Check whether we should store host names or IP addresses. + if (arguments[3] != "" && (arguments[3][0] == 'y' || arguments[3][0] == 'Y')) + storeHostnames = true; + + //check for a non-distrubuted install setup, dont need password + if ( DistributedInstall != "y" ) + { + if (arguments[5] != "") + password = arguments[5]; + else + { + cout << endl; + string prompt = "Enter the 'User' Password or 'ssh' if configured with ssh-keys"; + password = dataPrompt(prompt); + } + } + + if (arguments[6] != "") + dbrootPerPM = atoi(arguments[6].c_str()); + } + else + { + //Module Name was entered + if (arguments[2] == "" && cloud == oam::UnassignedName) + { + // need at least arguments + cout << endl << "**** addModule Failed : Missing a required Parameter, enter 'help' for additional information" << endl; + break; + } + + moduleName = arguments[1]; + moduleType = arguments[1].substr(0, MAX_MODULE_TYPE_SIZE); + moduleCount = 1; hostArg = 3; + // MCOL-1607. Check whether we should store host names or IP addresses. + if (arguments[2] != "" && (arguments[2][0] == 'y' || arguments[2][0] == 'Y')) + storeHostnames = true; + //check for a non-distrubuted install setup, dont need password if ( DistributedInstall != "y" ) { @@ -5703,37 +5743,6 @@ int processCommand(string* arguments) if (arguments[5] != "") dbrootPerPM = atoi(arguments[5].c_str()); } - else - { - //Module Name was entered - if (arguments[2] == "" && cloud == oam::UnassignedName) - { - // need at least arguments - cout << endl << "**** addModule Failed : Missing a required Parameter, enter 'help' for additional information" << endl; - break; - } - - moduleName = arguments[1]; - moduleType = arguments[1].substr(0, MAX_MODULE_TYPE_SIZE); - moduleCount = 1; - hostArg = 2; - - //check for a non-distrubuted install setup, dont need password - if ( DistributedInstall != "y" ) - { - if (arguments[3] != "") - password = arguments[3]; - else - { - cout << endl; - string prompt = "Enter the 'User' Password or 'ssh' if configured with ssh-keys"; - password = dataPrompt(prompt); - } - } - - if (arguments[4] != "") - dbrootPerPM = atoi(arguments[4].c_str()); - } //do we needed this check???? if ( moduleCount < 1 || moduleCount > 10 ) @@ -5925,7 +5934,24 @@ int processCommand(string* arguments) string hostName; string IPAddress; - if ( cloud == "amazon-ec2") + // MCOL-1607. Store hostnames in the config file if they entered one */ + if (storeHostnames) + { + // special case + if (cloud == "amazon-vpc" && *listPT1 == "autoassign") + { + hostName = oam::UnassignedName; + IPAddress = *listPT1; + } + else if (oam.isValidIP(*listPT1)) // they entered an IP addr + { + hostName = oam::UnassignedName; + IPAddress = *listPT1; + } + else // they entered a hostname + IPAddress = hostName = *listPT1; + } + else if ( cloud == "amazon-ec2") { hostName = *listPT1; @@ -5978,14 +6004,13 @@ int processCommand(string* arguments) // non-amazon hostName = *listPT1; IPAddress = oam.getIPAddress(hostName); - if ( IPAddress.empty() ) { // prompt for IP Address string prompt = "IP Address of " + hostName + " not found, enter IP Address or enter 'abort'"; IPAddress = dataPrompt(prompt); - - if ( IPAddress == "abort" || !oam.isValidIP(IPAddress)) + + if ( IPAddress == "abort" || !oam.isValidIP(IPAddress) ) return 1; } } @@ -6023,18 +6048,22 @@ int processCommand(string* arguments) { string prompt = "DataRedundancy is configured for dedicated network, enter a hostname"; DataRedundancyHostname = dataPrompt(prompt); - DataRedundancyIPAddress = oam.getIPAddress(DataRedundancyHostname); - - if ( DataRedundancyIPAddress.empty() ) + if (storeHostnames) + DataRedundancyIPAddress = DataRedundancyHostname; + else { - // prompt for IP Address - string prompt = "IP Address of " + DataRedundancyHostname + " not found, enter IP Address"; - DataRedundancyIPAddress = dataPrompt(prompt); + DataRedundancyIPAddress = oam.getIPAddress(DataRedundancyHostname); - if (!oam.isValidIP(DataRedundancyIPAddress)) - return 1; + if ( DataRedundancyIPAddress.empty() ) + { + // prompt for IP Address + string prompt = "IP Address of " + DataRedundancyHostname + " not found, enter IP Address"; + DataRedundancyIPAddress = dataPrompt(prompt); + + if (!oam.isValidIP(DataRedundancyIPAddress)) + return 1; + } } - sysConfig->setConfig("DataRedundancyConfig", dataDupHostName, DataRedundancyHostname); sysConfig->setConfig("DataRedundancyConfig", dataDupIPaddr, DataRedundancyIPAddress); } @@ -6105,7 +6134,7 @@ int processCommand(string* arguments) cout << "please wait..." << endl; - oam.addModule(devicenetworklist, password, mysqlpassword); + oam.addModule(devicenetworklist, password, mysqlpassword, storeHostnames); cout << "Add Module(s) successfully completed" << endl; diff --git a/oamapps/postConfigure/postConfigure.cpp b/oamapps/postConfigure/postConfigure.cpp index bb828b5be..e5680485b 100644 --- a/oamapps/postConfigure/postConfigure.cpp +++ b/oamapps/postConfigure/postConfigure.cpp @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301, USA. */ + MA 02110-1301, USA. */ /****************************************************************************************** * $Id: postConfigure.cpp 64 2006-10-12 22:21:51Z dhill $ @@ -129,7 +129,7 @@ void singleServerConfigSetup(Config* sysConfig); void remoteInstallThread(void*); -bool glusterSetup(string password); +bool glusterSetup(string password, bool doNotResolveHostNames); std::string launchInstance(ModuleIP moduleip); @@ -192,6 +192,7 @@ bool nonDistributeFlag = false; bool single_server_quick_install = false; bool multi_server_quick_install = false; bool amazon_quick_install = false; +bool doNotResolveHostNames = false; string DataFileEnvFile; @@ -275,12 +276,12 @@ int main(int argc, char* argv[]) usergroup = getgid(); string SUDO = ""; - if (user != 0) + if (user != 0) { rootUser = false; SUDO = "sudo "; } - + char* p = getenv("USER"); if (p && *p) @@ -298,7 +299,7 @@ int main(int argc, char* argv[]) for ( int i = 1; i < argc; i++ ) { - if( string("-h") == argv[i] ) + if( string("-h") == argv[i] ) { cout << endl; cout << "This is the MariaDB ColumnStore System Configuration and Installation tool." << endl; @@ -322,13 +323,18 @@ int main(int argc, char* argv[]) cout << " -qs Quick Install - Single Server" << endl; cout << " -qm Quick Install - Multi Server" << endl; cout << " -port MariaDB ColumnStore Port Address" << endl; - cout << " -i Non-root Install directory, Only use for non-root installs" << endl; - cout << " -n Non-distributed install, meaning postConfigure will not install packages on remote nodes" << endl; - cout << " -d Distributed install, meaning postConfigure will install packages on remote nodes" << endl; + cout << " -i Non-root Install directory, Only use for non-root installs" << endl; + cout << " -n Non-distributed install, meaning postConfigure will not install packages on remote nodes" << endl; + cout << " -d Distributed install, meaning postConfigure will install packages on remote nodes" << endl; cout << " -sn System Name" << endl; cout << " -pm-ip-addrs Performance Module IP Addresses xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx" << endl; cout << " -um-ip-addrs User Module IP Addresses xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx" << endl; + cout << " -x Do not resolve IP Addresses from host names" << endl; exit (0); + } + else if (string("-x") == argv[i]) + { + doNotResolveHostNames = true; } else if( string("-qs") == argv[i] ) { @@ -349,33 +355,33 @@ int main(int argc, char* argv[]) nodeps = "--nodeps"; else if ( string("-o") == argv[i] ) startOfflinePrompt = true; - else if( string("-c") == argv[i] ) + else if( string("-c") == argv[i] ) { i++; - if (i >= argc ) + if (i >= argc ) { cout << " ERROR: Config File not provided" << endl; exit (1); } oldFileName = argv[i]; - if ( oldFileName.find("Columnstore.xml") == string::npos ) + if ( oldFileName.find("Columnstore.xml") == string::npos ) { cout << " ERROR: Config File is not a Columnstore.xml file name" << endl; exit (1); } } - else if( string("-p") == argv[i] ) + else if( string("-p") == argv[i] ) { i++; - if (i >= argc ) + if (i >= argc ) { cout << " ERROR: Password not provided" << endl; exit (1); } password = argv[i]; - if ( password.find("-") != string::npos ) + if ( password.find("-") != string::npos ) { cout << " ERROR: Valid Password not provided" << endl; exit (1); @@ -394,10 +400,10 @@ int main(int argc, char* argv[]) nonDistribute = false; nonDistributeFlag = true; } - else if( string("-port") == argv[i] ) + else if( string("-port") == argv[i] ) { i++; - if (i >= argc ) + if (i >= argc ) { cout << " ERROR: MariaDB ColumnStore Port ID not supplied" << endl; exit (1); @@ -411,10 +417,10 @@ int main(int argc, char* argv[]) exit (1); } } - else if( string("-i") == argv[i] ) + else if( string("-i") == argv[i] ) { i++; - if (i >= argc ) + if (i >= argc ) { cout << " ERROR: Path not provided" << endl; exit (1); @@ -422,50 +428,50 @@ int main(int argc, char* argv[]) installDir = argv[i]; } - else if( string("-sn") == argv[i] ) + else if( string("-sn") == argv[i] ) { i++; - if (i >= argc ) + if (i >= argc ) { cout << " ERROR: System-name not provided" << endl; exit (1); } systemName = argv[i]; } - else if( string("-pm-ip-addrs") == argv[i] ) + else if( string("-pm-ip-addrs") == argv[i] ) { i++; - if (i >= argc ) + if (i >= argc ) { cout << " ERROR: PM-IP-ADRESSES not provided" << endl; exit (1); } pmIpAddrs = argv[i]; } - else if( string("-um-ip-addrs") == argv[i] ) + else if( string("-um-ip-addrs") == argv[i] ) { i++; - if (i >= argc ) + if (i >= argc ) { cout << " ERROR: UM-IP-ADRESSES not provided" << endl; exit (1); } umIpAddrs = argv[i]; } - else if( string("-pm-count") == argv[i] ) + else if( string("-pm-count") == argv[i] ) { i++; - if (i >= argc ) + if (i >= argc ) { cout << " ERROR: PM-COUNT not provided" << endl; exit (1); } pmNumber = atoi(argv[i]); } - else if( string("-um-count") == argv[i] ) + else if( string("-um-count") == argv[i] ) { i++; - if (i >= argc ) + if (i >= argc ) { cout << " ERROR: UM-COUNT not provided" << endl; exit (1); @@ -479,7 +485,7 @@ int main(int argc, char* argv[]) exit (1); } } - + //check if quick install multi-server has been given ip address if (multi_server_quick_install) { @@ -553,7 +559,7 @@ int main(int argc, char* argv[]) // redirectStandardOutputToFile(postConfigureLog, false ); } } - + //check if MariaDB ColumnStore is up and running if (oam.checkSystemRunning()) { @@ -567,7 +573,7 @@ int main(int argc, char* argv[]) cout << "ERROR: Configuration File not setup" << endl; exit(1); } - + //determine package type string EEPackageType; @@ -605,7 +611,7 @@ int main(int argc, char* argv[]) cout << "ERROR: Failed trying to update MariaDB ColumnStore System Configuration file" << endl; exit(1); } - + //check for local ip address as pm1 ModuleConfig moduleconfig; @@ -789,7 +795,7 @@ int main(int argc, char* argv[]) } cout << endl; - + if (single_server_quick_install) { cout << "===== Quick Install Single-Server Configuration =====" << endl << endl; @@ -797,13 +803,13 @@ int main(int argc, char* argv[]) cout << "Single-Server install is used when there will only be 1 server configured" << endl; cout << "on the system. It can also be used for production systems, if the plan is" << endl; cout << "to stay single-server." << endl; - + singleServerInstall = "1"; } else if (multi_server_quick_install) { cout << "===== Quick Install Multi-Server Configuration =====" << endl << endl; - + cout << "Multi-Server install defaulting to using local storage" << endl; singleServerInstall = "2"; @@ -811,7 +817,7 @@ int main(int argc, char* argv[]) else if (amazon_quick_install) { cout << "===== Quick Install Amazon Configuration =====" << endl << endl; - + cout << "Amazon AMI EC2 install defaulting to using local storage" << endl; singleServerInstall = "2"; @@ -842,7 +848,7 @@ int main(int argc, char* argv[]) else singleServerInstall = "2"; - while(true) + while(true) { string temp = singleServerInstall; prompt = "Select the type of System Server install [1=single, 2=multi] (" + singleServerInstall + ") > "; @@ -889,7 +895,7 @@ int main(int argc, char* argv[]) //setup to Columnstore.xml file for single server singleServerConfigSetup(sysConfig); } - + //module ProcessConfig.xml to setup all apps on the pm if ( !updateProcessConfig() ) cout << "Update ProcessConfig.xml error" << endl; @@ -967,7 +973,7 @@ int main(int argc, char* argv[]) } // perform multi-node install - + try { sysConfig->setConfig(InstallSection, "SingleServerInstall", "n"); @@ -987,7 +993,7 @@ int main(int argc, char* argv[]) // // Multi-server install // - + ModuleIP InputModuleIP; ModuleIpList InputModuleIPList; @@ -1001,7 +1007,7 @@ int main(int argc, char* argv[]) } catch(...) {} - + if (umIpAddrs == "" ) { // set Server Type Installation to combined @@ -1026,10 +1032,10 @@ int main(int argc, char* argv[]) InputModuleIP.moduleName = module; InputModuleIPList.push_back(InputModuleIP); } - + umNumber = id-1; } - + if (pmIpAddrs != "" ) { int id = 1; @@ -1045,16 +1051,16 @@ int main(int argc, char* argv[]) InputModuleIP.moduleName = module; InputModuleIPList.push_back(InputModuleIP); } - + pmNumber = id-1; } - if ( !writeConfig(sysConfig) ) + if ( !writeConfig(sysConfig) ) { cout << "ERROR: Failed trying to update MariaDB ColumnStore System Configuration file" << endl; exit(1); } - + MaxNicID = 1; } else @@ -1067,13 +1073,13 @@ int main(int argc, char* argv[]) } catch(...) {} - + try { sysConfig->setConfig(InstallSection, "Cloud", "amazon-vpc"); } catch(...) {} - + if (umNumber == 0 ) { // set Server Type Installation to combined @@ -1084,12 +1090,12 @@ int main(int argc, char* argv[]) {} } - if ( !writeConfig(sysConfig) ) + if ( !writeConfig(sysConfig) ) { cout << "ERROR: Failed trying to update MariaDB ColumnStore System Configuration file" << endl; exit(1); } - + MaxNicID = 1; } } @@ -1350,7 +1356,7 @@ int main(int argc, char* argv[]) //amazon install setup check bool amazonInstall = false; string cloud = oam::UnassignedName; - + if (!multi_server_quick_install) { string amazonLog = tmpDir + "/amazon.log"; @@ -1367,7 +1373,7 @@ int main(int argc, char* argv[]) // not running on amazon with ec2-api-tools if (amazon_quick_install) { - cout << "ERROR: Amazon Quick Installer was specified, bu the Amazon CLI API packages isnt installed, exiting" << endl; + cout << "ERROR: Amazon Quick Installer was specified, but the Amazon CLI API packages is not installed, exiting" << endl; exit(1); } @@ -1380,7 +1386,7 @@ int main(int argc, char* argv[]) // not running on amazon with ec2-api-tools if (amazon_quick_install) { - cout << "ERROR: Amazon Quick Installer was specified, bu the AMazon CLI API packages isnt installed, exiting" << endl; + cout << "ERROR: Amazon Quick Installer was specified, but the Amazon CLI API packages is not installed, exiting" << endl; exit(1); } @@ -1390,7 +1396,7 @@ int main(int argc, char* argv[]) amazonInstall = true; } } - + try { cloud = sysConfig->getConfig(InstallSection, "Cloud"); @@ -1717,13 +1723,6 @@ int main(int argc, char* argv[]) // are we using settings from previous config file? if ( reuseConfig == "n" ) { - - - - - - - string numBlocksPct; try @@ -1877,14 +1876,14 @@ int main(int argc, char* argv[]) catch (...) {} } - + if ( moduleType == "um") if ( umNumber != 0 ) moduleCount = umNumber; - + if ( moduleType == "pm") if ( pmNumber != 0 ) - moduleCount = pmNumber; + moduleCount = pmNumber; //verify and setup of modules count switch ( IserverTypeInstall ) @@ -2044,7 +2043,7 @@ int main(int argc, char* argv[]) moduleDisableState = oam::ENABLEDSTATE; //setup HostName/IPAddress for each NIC - + string moduleHostName = oam::UnassignedName; string moduleIPAddr = oam::UnassignedIpAddr; @@ -2063,7 +2062,7 @@ int main(int argc, char* argv[]) } } } - + unsigned int nicID=1; for( ; nicID < MaxNicID +1 ; nicID++ ) { @@ -2076,9 +2075,9 @@ int main(int argc, char* argv[]) for( ; listPT != sysModuleTypeConfig.moduletypeconfig[i].ModuleNetworkList.end() ; listPT++) { - if (newModuleName == (*listPT).DeviceName) + if (newModuleName == (*listPT).DeviceName) { - if ( nicID == 1 ) + if ( nicID == 1 ) { moduleDisableState = (*listPT).DisableState; @@ -2091,7 +2090,7 @@ int main(int argc, char* argv[]) for( ; pt1 != (*listPT).hostConfigList.end() ; pt1++) { - if ((*pt1).NicID == nicID) + if ((*pt1).NicID == nicID) { moduleHostName = (*pt1).HostName; moduleIPAddr = (*pt1).IPAddr; @@ -2103,8 +2102,8 @@ int main(int argc, char* argv[]) } } } - - if ( nicID == 1 ) + + if ( nicID == 1 ) { if ( moduleDisableState != oam::ENABLEDSTATE ) { @@ -2452,7 +2451,11 @@ int main(int argc, char* argv[]) if ( moduleIPAddr == oam::UnassignedIpAddr ) { //get IP Address - string IPAddress = oam.getIPAddress( newModuleHostName); + string IPAddress; + if (doNotResolveHostNames) + IPAddress = newModuleHostName; + else + IPAddress = oam.getIPAddress( newModuleHostName); if ( !IPAddress.empty() ) newModuleIPAddr = IPAddress; @@ -2468,7 +2471,7 @@ int main(int argc, char* argv[]) //prompt for IP address while (true) { - prompt = "Enter Nic Interface #" + oam.itoa(nicID) + " IP Address of " + newModuleHostName + " (" + newModuleIPAddr + ") > "; + prompt = "Enter Nic Interface #" + oam.itoa(nicID) + " IP Address or hostname of " + newModuleHostName + " (" + newModuleIPAddr + ") > "; pcommand = callReadline(prompt.c_str()); if (pcommand) @@ -2489,7 +2492,7 @@ int main(int argc, char* argv[]) continue; } - if (oam.isValidIP(newModuleIPAddr)) + if (oam.isValidIP(newModuleIPAddr) || doNotResolveHostNames) { //check and see if hostname already used bool matchFound = false; @@ -2948,7 +2951,7 @@ int main(int argc, char* argv[]) } } } - + vector dbroots; string tempdbrootList; @@ -3497,7 +3500,7 @@ int main(int argc, char* argv[]) } if ( IserverTypeInstall != oam::INSTALL_COMBINE_DM_UM_PM || - pmNumber > 1 ) + pmNumber > 1 ) { if ( password.empty() ) { @@ -3531,10 +3534,10 @@ int main(int argc, char* argv[]) if ( p1 == p2 ) { password = p2; break; - } + } else cout << "Password mismatch, please re-enter" << endl; - } + } //add single quote for special characters if ( password != "ssh" ) @@ -3543,7 +3546,7 @@ int main(int argc, char* argv[]) } } - } + } } int thread_id = 0; @@ -3824,7 +3827,7 @@ int main(int argc, char* argv[]) cout << " DONE" << endl; } } - + //configure data redundancy if (DataRedundancy) { @@ -3897,7 +3900,7 @@ int main(int argc, char* argv[]) { cout << endl << "===== Configuring MariaDB ColumnStore Data Redundancy Functionality =====" << endl << endl; - if (!glusterSetup(password)) + if (!glusterSetup(password, doNotResolveHostNames)) { cout << "ERROR: Problem setting up ColumnStore Data Redundancy" << endl; exit(1); @@ -4039,7 +4042,7 @@ int main(int argc, char* argv[]) } } } - + string dbbuilderLog = tmpDir + "/dbbuilder.log"; if (hdfs) @@ -4060,7 +4063,7 @@ int main(int argc, char* argv[]) //send message to procmon's to run upgrade script int status = sendUpgradeRequest(IserverTypeInstall, pmwithum); - + if ( status != 0 ) { cout << endl << "MariaDB Columnstore Install Failed" << endl << endl; exit(1); @@ -4423,7 +4426,7 @@ bool updateProcessConfig() vector oldModule; string newModule = ">pm"; oldModule.push_back(">um"); - + string fileName = installDir + "/etc/ProcessConfig.xml"; //Save a copy of the original version @@ -4564,9 +4567,9 @@ bool uncommentCalpontXml( string entry) */ bool makeRClocal(string moduleType, string moduleName, int IserverTypeInstall) { - + return true; - + vector lines; string mount1; @@ -5147,7 +5150,7 @@ bool storageSetup(bool amazonInstall) //check if hadoop is installed string hadoopLog = tmpDir + "/hadoop.log"; - + string cmd = "which hadoop > " + hadoopLog + " 2>&1"; system(cmd.c_str()); @@ -5732,7 +5735,7 @@ void setSystemName() Oam oam; //setup System Name - + if ( systemName.empty() ) { try { @@ -5743,7 +5746,7 @@ void setSystemName() systemName = oam::UnassignedName; } } - + if ( systemName.empty() ) systemName = "columnstore-1"; @@ -5759,7 +5762,7 @@ void setSystemName() callFree(pcommand); } } - + try { sysConfig->setConfig(SystemSection, "SystemName", systemName); @@ -6275,7 +6278,7 @@ std::string launchInstance(ModuleIP moduleip) return instanceName; } -bool glusterSetup(string password) +bool glusterSetup(string password, bool doNotResolveHostNames) { Oam oam; int dataRedundancyCopies = 0; @@ -6429,10 +6432,14 @@ bool glusterSetup(string password) callFree(pcommand); } - if ( moduleIPAddr == oam::UnassignedIpAddr ) + if ( moduleIPAddr == oam::UnassignedIpAddr) { //get IP Address - string IPAddress = oam.getIPAddress( moduleHostName); + string IPAddress; + if (doNotResolveHostNames) + IPAddress = moduleHostName; + else + IPAddress = oam.getIPAddress( moduleHostName); if ( !IPAddress.empty() ) moduleIPAddr = IPAddress; @@ -6467,7 +6474,7 @@ bool glusterSetup(string password) continue; } - if (oam.isValidIP(moduleIPAddr)) + if (oam.isValidIP(moduleIPAddr) || doNotResolveHostNames) { // run ping test to validate @@ -6926,7 +6933,7 @@ bool glusterSetup(string password) void singleServerConfigSetup(Config* sysConfig) { - + try { sysConfig->setConfig("ExeMgr1", "IPAddr", "127.0.0.1"); diff --git a/procmgr/processmanager.cpp b/procmgr/processmanager.cpp index f21459f22..686243f87 100644 --- a/procmgr/processmanager.cpp +++ b/procmgr/processmanager.cpp @@ -2205,10 +2205,15 @@ void processMSG(messageqcpp::IOSocket* cfIos) string value; uint16_t count, ivalue, nicCount; + uint8_t tmp8; oam::DeviceNetworkConfig devicenetworkconfig; oam::DeviceNetworkList devicenetworklist; oam::HostConfig hostconfig; + bool storeHostnames; + msg >> tmp8; + storeHostnames = (tmp8 != 0); + //get module count to add msg >> count; @@ -2223,7 +2228,7 @@ void processMSG(messageqcpp::IOSocket* cfIos) devicenetworkconfig.UserTempDeviceName = value; msg >> value; devicenetworkconfig.DisableState = value; - + msg >> nicCount; for (int j = 0 ; j < nicCount ; j ++ ) @@ -2244,7 +2249,7 @@ void processMSG(messageqcpp::IOSocket* cfIos) string password; msg >> password; - status = processManager.addModule(devicenetworklist, password); + status = processManager.addModule(devicenetworklist, password, storeHostnames); log.writeLog(__LINE__, "ADDMODULE: ACK received from Process-Monitor, return status = " + oam.itoa(status)); } @@ -4835,7 +4840,8 @@ int ProcessManager::reinitProcessType( std::string processName ) * purpose: Add Module to system configuration * ******************************************************************************************/ -int ProcessManager::addModule(oam::DeviceNetworkList devicenetworklist, std::string password, bool manualFlag) +int ProcessManager::addModule(oam::DeviceNetworkList devicenetworklist, std::string password, bool storeHostnames, + bool manualFlag) { ProcessLog log; Configuration config; @@ -5262,7 +5268,10 @@ int ProcessManager::addModule(oam::DeviceNetworkList devicenetworklist, std::str } hostconfig.HostName = hostName; - hostconfig.IPAddr = IPAddr; + if (storeHostnames) + hostconfig.IPAddr = hostName; + else + hostconfig.IPAddr = IPAddr; hostconfig.NicID = (*pt1).NicID; devicenetworkconfig.hostConfigList.push_back(hostconfig); } diff --git a/procmgr/processmanager.h b/procmgr/processmanager.h index 9a57b38b5..8dc39a540 100644 --- a/procmgr/processmanager.h +++ b/procmgr/processmanager.h @@ -416,7 +416,8 @@ public: /** *@brief Add Module */ - int addModule(oam::DeviceNetworkList devicenetworklist, std::string password, bool manualFlag = true); + int addModule(oam::DeviceNetworkList devicenetworklist, std::string password, bool storeHostnames, + bool manualFlag = true); /** *@brief Configure Module