Example #1
0
 private static function prepareScript($scriptSettings, DBServer $targetServer, Event $event = null)
 {
     $db = Core::GetDBInstance();
     //$scriptSettings['version'] = (int)$scriptSettings['version'];
     if ($scriptSettings['version'] == 'latest' || (int) $scriptSettings['version'] == -1) {
         $version = (int) $db->GetOne("SELECT MAX(revision) FROM script_revisions WHERE scriptid=?", array($scriptSettings['scriptid']));
     } else {
         $version = (int) $scriptSettings['version'];
     }
     $template = $db->GetRow("SELECT name,id FROM scripts WHERE id=?", array($scriptSettings['scriptid']));
     $template['timeout'] = $scriptSettings['timeout'];
     $template['issync'] = $scriptSettings['issync'];
     $template['body'] = $db->GetOne("SELECT script FROM script_revisions WHERE scriptid=? AND revision=?", array($template['id'], $version));
     if (!$template['body']) {
         return false;
     }
     $params = array_merge($targetServer->GetScriptingVars(), (array) unserialize($scriptSettings['params']));
     if ($event) {
         $eventServer = $event->DBServer;
         foreach ($eventServer->GetScriptingVars() as $k => $v) {
             $params["event_{$k}"] = $v;
         }
         foreach ($event->GetScriptingVars() as $k => $v) {
             $params[$k] = $event->{$v};
         }
     }
     // Prepare keys array and array with values for replacement in script
     $keys = array_keys($params);
     $f = create_function('$item', 'return "%".$item."%";');
     $keys = array_map($f, $keys);
     $values = array_values($params);
     // Generate script contents
     $script_contents = str_replace($keys, $values, $template['body']);
     $template['body'] = str_replace('\\%', "%", $script_contents);
     $template['name'] = preg_replace("/[^A-Za-z0-9]+/", "_", $template['name']);
     return $template;
 }
Example #2
0
 public static function prepareScript($scriptSettings, DBServer $targetServer, Event $event = null)
 {
     $db = \Scalr::getDb();
     $template = array('type' => $scriptSettings['type'], 'timeout' => $scriptSettings['timeout'], 'issync' => $scriptSettings['issync'], 'run_as' => $scriptSettings['run_as'], 'execution_id' => Scalr::GenerateUID());
     if ($scriptSettings['type'] == self::ORCHESTRATION_SCRIPT_TYPE_SCALR) {
         /* @var Script $script */
         $script = Script::findPk($scriptSettings['scriptid']);
         if (!$script) {
             return false;
         }
         // TODO: validate permission to access script ?
         if ($script->os && $targetServer->osType && $script->os != $targetServer->osType) {
             return false;
         }
         if ($scriptSettings['version'] == 'latest' || (int) $scriptSettings['version'] == -1) {
             $version = $script->getLatestVersion();
         } else {
             $version = $script->getVersion((int) $scriptSettings['version']);
         }
         if (!$version) {
             return false;
         }
         $template['name'] = $script->name;
         $template['id'] = $script->id;
         $template['body'] = $version->content;
         $scriptParams = (array) $version->variables;
         // variables could be null
         foreach ($scriptParams as &$val) {
             $val = "";
         }
         $params = array_merge($scriptParams, $targetServer->GetScriptingVars(), (array) unserialize($scriptSettings['params']));
         if ($event) {
             $eventServer = $event->DBServer;
             foreach ($eventServer->GetScriptingVars() as $k => $v) {
                 $params["event_{$k}"] = $v;
             }
             foreach ($event->GetScriptingVars() as $k => $v) {
                 $params[$k] = $event->{$v};
             }
             if (isset($event->params) && is_array($event->params)) {
                 foreach ($event->params as $k => $v) {
                     $params[$k] = $v;
                 }
             }
             $params['event_name'] = $event->GetName();
         }
         if ($event instanceof CustomEvent) {
             if (count($event->params) > 0) {
                 $params = array_merge($params, $event->params);
             }
         }
         // Prepare keys array and array with values for replacement in script
         $keys = array_keys($params);
         $f = create_function('$item', 'return "%".$item."%";');
         $keys = array_map($f, $keys);
         $values = array_values($params);
         $script_contents = str_replace($keys, $values, $template['body']);
         $template['body'] = str_replace('\\%', "%", $script_contents);
         // Generate script contents
         $template['name'] = preg_replace("/[^A-Za-z0-9]+/", "_", $template['name']);
     } elseif ($scriptSettings['type'] == self::ORCHESTRATION_SCRIPT_TYPE_LOCAL) {
         $template['path'] = $targetServer->applyGlobalVarsToValue($scriptSettings['script_path']);
     } elseif ($scriptSettings['type'] == self::ORCHESTRATION_SCRIPT_TYPE_CHEF) {
         $chef = new stdClass();
         $chefSettings = (array) unserialize($scriptSettings['params']);
         if ($chefSettings['chef.cookbook_url']) {
             $chef->cookbookUrl = $chefSettings['chef.cookbook_url'];
         }
         if ($chefSettings['chef.cookbook_url_type']) {
             $chef->cookbookUrlType = $chefSettings['chef.cookbook_url_type'];
         }
         if ($chefSettings['chef.relative_path']) {
             $chef->relativePath = $chefSettings['chef.relative_path'];
         }
         if ($chefSettings['chef.ssh_private_key']) {
             $chef->sshPrivateKey = $chefSettings['chef.ssh_private_key'];
         }
         $chef->runList = $chefSettings['chef.runlist'];
         $chef->jsonAttributes = $chefSettings['chef.attributes'];
         $template['chef'] = $chef;
     }
     return $template;
 }
Example #3
0
 public static function listServerGlobalVariables(DBServer $dbServer, $includeSystem = false, Event $event = null)
 {
     $retval = array();
     if ($includeSystem) {
         $variables = $dbServer->GetScriptingVars();
         if ($event) {
             if ($event->DBServer) {
                 foreach ($event->DBServer->GetScriptingVars() as $k => $v) {
                     $variables["event_{$k}"] = $v;
                 }
             }
             foreach ($event->GetScriptingVars() as $k => $v) {
                 $variables[$k] = $event->{$v};
             }
             if (isset($event->params) && is_array($event->params)) {
                 foreach ($event->params as $k => $v) {
                     $variables[$k] = $v;
                 }
             }
             $variables['event_name'] = $event->GetName();
         }
         $formats = \Scalr::config("scalr.system.global_variables.format");
         foreach ($variables as $name => $value) {
             $name = "SCALR_" . strtoupper($name);
             $value = trim($value);
             if (isset($formats[$name])) {
                 $value = @sprintf($formats[$name], $value);
             }
             $private = strpos($name, 'SCALR_EVENT_') === 0 ? 1 : 0;
             $retval[] = (object) array('name' => $name, 'value' => $value, 'private' => $private, 'system' => 1);
         }
     }
     try {
         $globalVariables = new Scalr_Scripting_GlobalVariables($dbServer->GetEnvironmentObject()->clientId, $dbServer->envId, Scalr_Scripting_GlobalVariables::SCOPE_SERVER);
         $vars = $globalVariables->listVariables($dbServer->GetFarmRoleObject()->RoleID, $dbServer->farmId, $dbServer->farmRoleId, $dbServer->serverId);
         foreach ($vars as $v) {
             $retval[] = (object) $v;
         }
     } catch (Exception $e) {
     }
     return $retval;
 }
Example #4
0
 public static function prepareScript($scriptSettings, DBServer $targetServer, Event $event = null)
 {
     $db = \Scalr::getDb();
     $template = array('timeout' => $scriptSettings['timeout'], 'issync' => $scriptSettings['issync'], 'run_as' => $scriptSettings['run_as'], 'execution_id' => Scalr::GenerateUID());
     if ($scriptSettings['scriptid']) {
         if ($scriptSettings['version'] == 'latest' || (int) $scriptSettings['version'] == -1) {
             $version = (int) $db->GetOne("SELECT MAX(revision) FROM script_revisions WHERE scriptid=?", array($scriptSettings['scriptid']));
         } else {
             $version = (int) $scriptSettings['version'];
         }
         $info = $db->GetRow("SELECT name,id FROM scripts WHERE id=? LIMIT 1", array($scriptSettings['scriptid']));
         $template['name'] = $info['name'];
         $template['id'] = $info['id'];
         $revisionInfo = $db->GetRow("SELECT script, variables FROM script_revisions WHERE scriptid=? AND revision=? LIMIT 1", array($template['id'], $version));
         $template['body'] = $revisionInfo['script'];
         if (!$template['body']) {
             return false;
         }
         $scriptParams = (array) unserialize($revisionInfo['variables']);
         foreach ($scriptParams as &$val) {
             $val = "";
         }
         $params = array_merge($scriptParams, $targetServer->GetScriptingVars(), (array) unserialize($scriptSettings['params']));
         if ($event) {
             $eventServer = $event->DBServer;
             foreach ($eventServer->GetScriptingVars() as $k => $v) {
                 $params["event_{$k}"] = $v;
             }
             foreach ($event->GetScriptingVars() as $k => $v) {
                 $params[$k] = $event->{$v};
             }
             if (isset($event->params) && is_array($event->params)) {
                 foreach ($event->params as $k => $v) {
                     $params[$k] = $v;
                 }
             }
             $params['event_name'] = $event->GetName();
         }
         if ($event instanceof CustomEvent) {
             if (count($event->params) > 0) {
                 $params = array_merge($params, $event->params);
             }
         }
         // Prepare keys array and array with values for replacement in script
         $keys = array_keys($params);
         $f = create_function('$item', 'return "%".$item."%";');
         $keys = array_map($f, $keys);
         $values = array_values($params);
         $script_contents = str_replace($keys, $values, $template['body']);
         $template['body'] = str_replace('\\%', "%", $script_contents);
         // Parse and set variables from data bag
         //TODO: @param_name@
         // Generate script contents
         $template['name'] = preg_replace("/[^A-Za-z0-9]+/", "_", $template['name']);
     } else {
         $template['path'] = $scriptSettings['script_path'];
     }
     return $template;
 }