Exemple #1
0
 /**
  * Returns all the scripts that are available on each given host.
  *
  * @param $hostIds
  *
  * @return array (an array of scripts in the form of array($hostId => array($script1, $script2, ...), ...) )
  */
 public function getScriptsByHosts($hostIds)
 {
     zbx_value2array($hostIds);
     $scriptsByHost = array();
     if (!$hostIds) {
         return $scriptsByHost;
     }
     foreach ($hostIds as $hostId) {
         $scriptsByHost[$hostId] = array();
     }
     $scripts = $this->get(array('output' => API_OUTPUT_EXTEND, 'selectHosts' => array('hostid'), 'hostids' => $hostIds, 'sortfield' => 'name', 'preservekeys' => true));
     if ($scripts) {
         // resolve macros
         $macrosData = array();
         foreach ($scripts as $scriptId => $script) {
             if (!empty($script['confirmation'])) {
                 foreach ($script['hosts'] as $host) {
                     if (isset($scriptsByHost[$host['hostid']])) {
                         $macrosData[$host['hostid']][$scriptId] = $script['confirmation'];
                     }
                 }
             }
         }
         if ($macrosData) {
             $macrosData = CMacrosResolverHelper::resolve(array('config' => 'scriptConfirmation', 'data' => $macrosData));
         }
         foreach ($scripts as $scriptId => $script) {
             $hosts = $script['hosts'];
             unset($script['hosts']);
             // set script to host
             foreach ($hosts as $host) {
                 $hostId = $host['hostid'];
                 if (isset($scriptsByHost[$hostId])) {
                     $size = count($scriptsByHost[$hostId]);
                     $scriptsByHost[$hostId][$size] = $script;
                     // set confirmation text with resolved macros
                     if (isset($macrosData[$hostId][$scriptId]) && $script['confirmation']) {
                         $scriptsByHost[$hostId][$size]['confirmation'] = $macrosData[$hostId][$scriptId];
                     }
                 }
             }
         }
     }
     return $scriptsByHost;
 }
$page['file'] = 'scripts_exec.php';
define('ZBX_PAGE_NO_MENU', 1);
ob_start();
require_once dirname(__FILE__) . '/include/page_header.php';
// VAR	TYPE	OPTIONAL	FLAGS	VALIDATION	EXCEPTION
$fields = ['hostid' => [T_ZBX_INT, O_MAND, P_SYS, DB_ID, null], 'scriptid' => [T_ZBX_INT, O_MAND, P_SYS, DB_ID, null]];
check_fields($fields);
ob_end_flush();
$scriptid = getRequest('scriptid');
$hostid = getRequest('hostid');
$data = ['name' => '', 'command' => '', 'message' => ''];
$scripts = API::Script()->get(['scriptids' => $scriptid, 'output' => ['name', 'command']]);
$error_exist = false;
if ($scripts) {
    $script = $scripts[0];
    $macros_data = CMacrosResolverHelper::resolve(['config' => 'scriptConfirmation', 'data' => [$hostid => [$scriptid => $script['command']]]]);
    $data['name'] = $script['name'];
    $data['command'] = $macros_data[$hostid][$scriptid];
    $result = API::Script()->execute(['hostid' => $hostid, 'scriptid' => $scriptid]);
    if (!$result) {
        $error_exist = true;
    } elseif ($result['response'] == 'failed') {
        error($result['value']);
        $error_exist = true;
    } else {
        $data['message'] = $result['value'];
    }
} else {
    error(_('No permissions to referred object or it does not exist!'));
    $error_exist = true;
}