adapt hub code to use another env thant production

This commit is contained in:
odain
2024-09-11 15:35:17 +02:00
parent 4a99afae3b
commit cd41eda29d
3 changed files with 32 additions and 30 deletions

View File

@@ -36,6 +36,7 @@ require_once(APPROOT.'core/dict.class.inc.php');
require_once(APPROOT.'setup/xmldataloader.class.inc.php'); require_once(APPROOT.'setup/xmldataloader.class.inc.php');
require_once(__DIR__.'/hubruntimeenvironment.class.inc.php'); require_once(__DIR__.'/hubruntimeenvironment.class.inc.php');
/** /**
* Overload of DBBackup to handle logging * Overload of DBBackup to handle logging
*/ */
@@ -79,11 +80,11 @@ function DoBackup($sTargetFile)
// Make sure the target directory exists // Make sure the target directory exists
$sBackupDir = dirname($sTargetFile); $sBackupDir = dirname($sTargetFile);
SetupUtils::builddir($sBackupDir); SetupUtils::builddir($sBackupDir);
$oBackup = new DBBackupWithErrorReporting(); $oBackup = new DBBackupWithErrorReporting();
$oBackup->SetMySQLBinDir(MetaModel::GetConfig()->GetModuleSetting('itop-backup', 'mysql_bindir', '')); $oBackup->SetMySQLBinDir(MetaModel::GetConfig()->GetModuleSetting('itop-backup', 'mysql_bindir', ''));
$sSourceConfigFile = APPCONF.utils::GetCurrentEnvironment().'/'.ITOP_CONFIG_FILE; $sSourceConfigFile = APPCONF.utils::GetCurrentEnvironment().'/'.ITOP_CONFIG_FILE;
$oMutex = new iTopMutex('backup.'.utils::GetCurrentEnvironment()); $oMutex = new iTopMutex('backup.'.utils::GetCurrentEnvironment());
$oMutex->Lock(); $oMutex->Lock();
try try
@@ -101,7 +102,7 @@ function DoBackup($sTargetFile)
/** /**
* Outputs the status of the current ajax execution (as a JSON structure) * Outputs the status of the current ajax execution (as a JSON structure)
* *
* @param string $sMessage * @param string $sMessage
* @param bool $bSuccess * @param bool $bSuccess
* @param number $iErrorCode * @param number $iErrorCode
@@ -123,7 +124,7 @@ function ReportStatus($sMessage, $bSuccess, $iErrorCode = 0, $aMoreFields = arra
/** /**
* Helper to output the status of a successful execution * Helper to output the status of a successful execution
* *
* @param string $sMessage * @param string $sMessage
* @param array $aMoreFields * @param array $aMoreFields
* Extra fields to pass to the caller, if needed * Extra fields to pass to the caller, if needed
@@ -135,7 +136,7 @@ function ReportSuccess($sMessage, $aMoreFields = array())
/** /**
* Helper to output the status of a failed execution * Helper to output the status of a failed execution
* *
* @param string $sMessage * @param string $sMessage
* @param number $iErrorCode * @param number $iErrorCode
* @param array $aMoreFields * @param array $aMoreFields
@@ -156,21 +157,21 @@ try
SetupUtils::ExitMaintenanceMode(false); // Reset maintenance mode in case of problem SetupUtils::ExitMaintenanceMode(false); // Reset maintenance mode in case of problem
utils::PushArchiveMode(false); utils::PushArchiveMode(false);
ini_set('max_execution_time', max(3600, ini_get('max_execution_time'))); // Under Windows SQL/backup operations are part of the PHP timeout and require extra time ini_set('max_execution_time', max(3600, ini_get('max_execution_time'))); // Under Windows SQL/backup operations are part of the PHP timeout and require extra time
ini_set('display_errors', 1); // Make sure that fatal errors remain visible from the end-user ini_set('display_errors', 1); // Make sure that fatal errors remain visible from the end-user
// Most of the ajax calls are done without the MetaModel being loaded // Most of the ajax calls are done without the MetaModel being loaded
// Therefore, the language must be passed as an argument, // Therefore, the language must be passed as an argument,
// and the dictionnaries be loaded here // and the dictionnaries be loaded here
$sLanguage = utils::ReadParam('language', ''); $sLanguage = utils::ReadParam('language', '');
if ($sLanguage!='') if ($sLanguage!='')
{ {
foreach (glob(APPROOT.'env-production/dictionaries/*.dict.php') as $sFilePath) foreach (glob(APPROOT.'env-'. utils::GetCurrentEnvironment(). '/dictionaries/*.dict.php') as $sFilePath)
{ {
require_once ($sFilePath); require_once ($sFilePath);
} }
$aLanguages = Dict::GetLanguages(); $aLanguages = Dict::GetLanguages();
if (array_key_exists($sLanguage, $aLanguages)) if (array_key_exists($sLanguage, $aLanguages))
{ {
@@ -211,7 +212,7 @@ try
} }
} }
break; break;
case 'do_backup': case 'do_backup':
require_once (APPROOT.'/application/startup.inc.php'); require_once (APPROOT.'/application/startup.inc.php');
require_once (APPROOT.'/application/loginwebpage.class.inc.php'); require_once (APPROOT.'/application/loginwebpage.class.inc.php');
@@ -254,8 +255,9 @@ try
ReportError($e->getMessage(), $e->getCode()); ReportError($e->getMessage(), $e->getCode());
} }
break; break;
case 'compile': case 'compile':
SetupLog::Info('Deployment starts...'); SetupLog::Info('Deployment starts...');
$sAuthent = utils::ReadParam('authent', '', false, 'raw_data'); $sAuthent = utils::ReadParam('authent', '', false, 'raw_data');
if (!file_exists(APPROOT.'data/hub/compile_authent') || $sAuthent !== file_get_contents(APPROOT.'data/hub/compile_authent')) if (!file_exists(APPROOT.'data/hub/compile_authent') || $sAuthent !== file_get_contents(APPROOT.'data/hub/compile_authent'))
@@ -266,13 +268,13 @@ try
$aSelectedExtensionCodes = utils::ReadParam('extension_codes', array()); $aSelectedExtensionCodes = utils::ReadParam('extension_codes', array());
$aSelectedExtensionDirs = utils::ReadParam('extension_dirs', array()); $aSelectedExtensionDirs = utils::ReadParam('extension_dirs', array());
$oRuntimeEnv = new HubRunTimeEnvironment('production', false); // use a temp environment: production-build $oRuntimeEnv = new HubRunTimeEnvironment(utils::GetCurrentEnvironment(), false); // use a temp environment: production-build
$oRuntimeEnv->MoveSelectedExtensions(APPROOT.'/data/downloaded-extensions/', $aSelectedExtensionDirs); $oRuntimeEnv->MoveSelectedExtensions(APPROOT.'/data/downloaded-extensions/', $aSelectedExtensionDirs);
$oConfig = new Config(APPCONF.'production/'.ITOP_CONFIG_FILE); $oConfig = new Config(APPCONF.utils::GetCurrentEnvironment().'/'.ITOP_CONFIG_FILE);
if ($oConfig->Get('demo_mode')) throw new Exception('Sorry the installation of extensions is not allowed in demo mode'); if ($oConfig->Get('demo_mode')) throw new Exception('Sorry the installation of extensions is not allowed in demo mode');
$aSelectModules = $oRuntimeEnv->CompileFrom('production', false); // WARNING symlinks does not seem to be compatible with manual Commit $aSelectModules = $oRuntimeEnv->CompileFrom(utils::GetCurrentEnvironment(), false); // WARNING symlinks does not seem to be compatible with manual Commit
$oRuntimeEnv->UpdateIncludes($oConfig); $oRuntimeEnv->UpdateIncludes($oConfig);
@@ -291,11 +293,11 @@ try
SetupLog::Info('Compilation completed...'); SetupLog::Info('Compilation completed...');
ReportSuccess('Ok'); // No access to Dict::S here ReportSuccess('Ok'); // No access to Dict::S here
break; break;
case 'move_to_production': case 'move_to_production':
// Second step: update the schema and the data // Second step: update the schema and the data
// Everything happening below is based on env-production // Everything happening below is based on env-production
$oRuntimeEnv = new RunTimeEnvironment('production', true); $oRuntimeEnv = new RunTimeEnvironment(utils::GetCurrentEnvironment(), true);
try try
{ {
@@ -307,7 +309,7 @@ try
} }
unlink(APPROOT.'data/hub/compile_authent'); unlink(APPROOT.'data/hub/compile_authent');
// Load the "production" config file to clone & update it // Load the "production" config file to clone & update it
$oConfig = new Config(APPCONF.'production/'.ITOP_CONFIG_FILE); $oConfig = new Config(APPCONF.utils::GetCurrentEnvironment().'/'.ITOP_CONFIG_FILE);
SetupUtils::EnterReadOnlyMode($oConfig); SetupUtils::EnterReadOnlyMode($oConfig);
$oRuntimeEnv->InitDataModel($oConfig, true /* model only */); $oRuntimeEnv->InitDataModel($oConfig, true /* model only */);
@@ -375,7 +377,7 @@ try
unlink(APPROOT.'data/hub/compile_authent'); unlink(APPROOT.'data/hub/compile_authent');
} }
// Note: at this point, the dictionnary is not necessarily loaded // Note: at this point, the dictionnary is not necessarily loaded
SetupLog::Error(get_class($e).': '.Dict::S('iTopHub:ConfigurationSafelyReverted')."\n".$e->getMessage()); SetupLog::Error(get_class($e).': '.Dict::S('iTopHub:ConfigurationSafelyReverted'), null, [$e->getMessage(), $e->getTraceAsString()]);
SetupLog::Error('Debug trace: '.$e->getTraceAsString()); SetupLog::Error('Debug trace: '.$e->getTraceAsString());
ReportError($e->getMessage(), $e->getCode()); ReportError($e->getMessage(), $e->getCode());
} }
@@ -384,17 +386,17 @@ try
SetupUtils::ExitReadOnlyMode(); SetupUtils::ExitReadOnlyMode();
} }
break; break;
default: default:
ReportError("Invalid operation: '$sOperation'", -1); ReportError("Invalid operation: '$sOperation'", -1);
} }
} }
catch (Exception $e) catch (Exception $e)
{ {
SetupLog::Error(get_class($e).': '.Dict::S('iTopHub:ConfigurationSafelyReverted')."\n".$e->getMessage()); SetupLog::Error(get_class($e).': '.Dict::S('iTopHub:ConfigurationSafelyReverted'), null, [$e->getMessage(), $e->getTraceAsString()]);
SetupLog::Error('Debug trace: '.$e->getTraceAsString()); SetupLog::Error('Debug trace: '.$e->getTraceAsString());
utils::PopArchiveMode(); utils::PopArchiveMode();
ReportError($e->getMessage(), $e->getCode()); ReportError($e->getMessage(), $e->getCode());
} }

View File

@@ -1,6 +1,6 @@
<?php <?php
class HubRunTimeEnvironment extends RunTimeEnvironment class HubRunTimeEnvironment extends RunTimeEnvironment
{ {
/** /**
* Constructor * Constructor
* @param string $sEnvironment * @param string $sEnvironment
@@ -9,7 +9,7 @@ class HubRunTimeEnvironment extends RunTimeEnvironment
public function __construct($sEnvironment = 'production', $bAutoCommit = true) public function __construct($sEnvironment = 'production', $bAutoCommit = true)
{ {
parent::__construct($sEnvironment, $bAutoCommit); parent::__construct($sEnvironment, $bAutoCommit);
if ($sEnvironment != $this->sTargetEnv) if ($sEnvironment != $this->sTargetEnv)
{ {
if (is_dir(APPROOT.'/env-'.$this->sTargetEnv)) if (is_dir(APPROOT.'/env-'.$this->sTargetEnv))
@@ -23,7 +23,7 @@ class HubRunTimeEnvironment extends RunTimeEnvironment
SetupUtils::copydir(APPROOT.'/data/'.$sEnvironment.'-modules', APPROOT.'/data/'.$this->sTargetEnv.'-modules'); SetupUtils::copydir(APPROOT.'/data/'.$sEnvironment.'-modules', APPROOT.'/data/'.$this->sTargetEnv.'-modules');
} }
} }
/** /**
* Update the includes for the target environment * Update the includes for the target environment
* @param Config $oConfig * @param Config $oConfig
@@ -32,7 +32,7 @@ class HubRunTimeEnvironment extends RunTimeEnvironment
{ {
$oConfig->UpdateIncludes('env-'.$this->sTargetEnv); // TargetEnv != FinalEnv $oConfig->UpdateIncludes('env-'.$this->sTargetEnv); // TargetEnv != FinalEnv
} }
/** /**
* Move an extension (path to folder of this extension) to the target environment * Move an extension (path to folder of this extension) to the target environment
* @param string $sExtensionDirectory The folder of the extension * @param string $sExtensionDirectory The folder of the extension
@@ -45,7 +45,7 @@ class HubRunTimeEnvironment extends RunTimeEnvironment
if (!mkdir(APPROOT.'/data/'.$this->sTargetEnv.'-modules')) throw new Exception("ERROR: failed to create directory:'".(APPROOT.'/data/'.$this->sTargetEnv.'-modules')."'"); if (!mkdir(APPROOT.'/data/'.$this->sTargetEnv.'-modules')) throw new Exception("ERROR: failed to create directory:'".(APPROOT.'/data/'.$this->sTargetEnv.'-modules')."'");
} }
$sDestinationPath = APPROOT.'/data/'.$this->sTargetEnv.'-modules/'; $sDestinationPath = APPROOT.'/data/'.$this->sTargetEnv.'-modules/';
// Make sure that the destination directory of the extension does not already exist // Make sure that the destination directory of the extension does not already exist
if (is_dir($sDestinationPath.basename($sExtensionDirectory))) if (is_dir($sDestinationPath.basename($sExtensionDirectory)))
{ {
@@ -54,7 +54,7 @@ class HubRunTimeEnvironment extends RunTimeEnvironment
} }
if (!rename($sExtensionDirectory, $sDestinationPath.basename($sExtensionDirectory))) throw new Exception("ERROR: failed move directory:'$sExtensionDirectory' to '".$sDestinationPath.basename($sExtensionDirectory)."'"); if (!rename($sExtensionDirectory, $sDestinationPath.basename($sExtensionDirectory))) throw new Exception("ERROR: failed move directory:'$sExtensionDirectory' to '".$sDestinationPath.basename($sExtensionDirectory)."'");
} }
/** /**
* Move the selected extensions located in the given directory in data/<target-env>-modules * Move the selected extensions located in the given directory in data/<target-env>-modules
* @param string $sDownloadedExtensionsDir The directory to scan * @param string $sDownloadedExtensionsDir The directory to scan

View File

@@ -20,7 +20,7 @@ function DisplayStatus(WebPage $oPage)
if (is_dir($sPath)) { if (is_dir($sPath)) {
$aExtraDirs[] = $sPath; // Also read the extra downloaded-modules directory $aExtraDirs[] = $sPath; // Also read the extra downloaded-modules directory
} }
$oExtensionsMap = new iTopExtensionsMap('production', true, $aExtraDirs); $oExtensionsMap = new iTopExtensionsMap(utils::GetCurrentEnvironment(), true, $aExtraDirs);
$oExtensionsMap->LoadChoicesFromDatabase(MetaModel::GetConfig()); $oExtensionsMap->LoadChoicesFromDatabase(MetaModel::GetConfig());
foreach ($oExtensionsMap->GetAllExtensions() as $oExtension) { foreach ($oExtensionsMap->GetAllExtensions() as $oExtension) {
@@ -156,7 +156,7 @@ function DoInstall(WebPage $oPage)
if (is_dir($sPath)) { if (is_dir($sPath)) {
$aExtraDirs[] = $sPath; // Also read the extra downloaded-modules directory $aExtraDirs[] = $sPath; // Also read the extra downloaded-modules directory
} }
$oExtensionsMap = new iTopExtensionsMap('production', true, $aExtraDirs); $oExtensionsMap = new iTopExtensionsMap(utils::GetCurrentEnvironment(), true, $aExtraDirs);
$oExtensionsMap->LoadChoicesFromDatabase(MetaModel::GetConfig()); $oExtensionsMap->LoadChoicesFromDatabase(MetaModel::GetConfig());
foreach ($oExtensionsMap->GetAllExtensions() as $oExtension) { foreach ($oExtensionsMap->GetAllExtensions() as $oExtension) {