/** * * update local machine interface. invoques local perl script throught php */ static function updateLocalNetwork(SystemNetwork $network_obj) { $network = $network_obj->_VA(); $build_args = array(); if ($network['if']) { $build_args[] = '-if ' . $network['if']; } if ($network['ip']) { $build_args[] = '-ip ' . $network['ip']; } if ($network['netmask']) { $build_args[] = '-netmask ' . $network['netmask']; } if ($network['gateway']) { $build_args[] = '-gateway ' . $network['gateway']; } if ($network['primarydns']) { $build_args[] = '-primarydns ' . $network['primarydns']; } if ($network['secondarydns']) { $build_args[] = '-secondarydns ' . $network['secondarydns']; } if ($network['dhcp']) { $build_args[] = '-dhcp'; } $args = implode(' ', $build_args); $path = sfConfig::get('sf_root_dir') . DIRECTORY_SEPARATOR . "utils"; $command = "perl -I" . $path . DIRECTORY_SEPARATOR . "pl" . " " . $path . DIRECTORY_SEPARATOR . "pl" . DIRECTORY_SEPARATOR . "script_chgip.pl " . $args; ob_start(); passthru('echo ' . $command . ' | sudo /usr/bin/php -f ' . $path . DIRECTORY_SEPARATOR . 'sudoexec.php', $return); $result = ob_get_contents(); ob_end_clean(); if ($result == 0 && $return == 0) { return true; } else { return false; } }
public function send_change_ip($network) { $sys_network = new SystemNetwork(); if (!$sys_network->fromArray($network)) { $intf = $network['if']; $msg_i18n = sfContext::getInstance()->getI18N()->__(SystemNetwork::_ERR_NOTFOUND_INTF_, array('%name%' => $intf, '%info%' => '')); //notify event log $node_log = Etva::getLogMessage(array('name' => $intf, 'info' => ''), SystemNetwork::_ERR_NOTFOUND_INTF_); $message = Etva::getLogMessage(array('name' => sfConfig::get('config_acronym'), 'info' => $node_log), EtvaNodePeer::_ERR_CHANGEIP_); sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR))); $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n); return $error; } $criteria = new Criteria(); $criteria->add(EtvaNodePeer::ID, $this->etva_node->getId(), Criteria::NOT_EQUAL); $cluster_nodes = $this->etva_node->getNodesCluster($criteria); foreach ($cluster_nodes as $node) { $node_name = $node->getName(); $node_ip = $node->getIp(); if ($sys_network->get(SystemNetwork::IP) == $node_ip) { $msg_i18n = sfContext::getInstance()->getI18N()->__(SystemNetwork::_ERR_IP_INUSE_, array('%ip%' => $node_ip, '%name%' => $node_name)); $msg = Etva::getLogMessage(array('ip' => $node_ip, 'name' => $node_name), SystemNetwork::_ERR_IP_INUSE_); $message = Etva::getLogMessage(array('name' => sfConfig::get('config_acronym'), 'info' => $msg), EtvaNodePeer::_ERR_CHANGEIP_); sfContext::getInstance()->getEventDispatcher()->notify(new sfEvent(sfConfig::get('config_acronym'), 'event.log', array('message' => $message, 'priority' => EtvaEventLogger::ERR))); $error = array('success' => false, 'agent' => sfConfig::get('config_acronym'), 'error' => $msg_i18n); return $error; } } $method = self::CHANGE_IP; $params = $sys_network->_VA(); /* * update MA if any... * */ $etva_servers = $this->etva_node->getEtvaServers(); foreach ($etva_servers as $etva_server) { $server_ma = $etva_server->getAgentTmpl(); $server_state = $etva_server->getState(); if ($server_state && $server_ma) { $etva_server->setSoapTimeout(5); $response = $etva_server->soapSend($method, $params); $result = $this->processChangeIpResponse($response, $method); } } $this->etva_node->setSoapTimeout(5); $response = $this->etva_node->soapSend($method, $params); $result = $this->processChangeIpResponse($response, $method); return $result; }
private function remoteUpdate($etva_node, $net, $cm_uri_ip = false, $cm_uri_port = false) { $sys = new SystemNetwork(); if (!$sys->fromArray($net)) { return false; } if ($cm_uri_ip) { $sys->setURI($cm_uri_ip, $cm_uri_port); } $method = 'change_ip'; $params = $sys->_VA(); $response = $etva_node->soapSend($method, $params); $success = $response['success']; if (!$success) { /* * if error is caused by socket read timeout then maybe ip changed */ if ($response['faultactor'] == 'socket_read') { //return true; //$etva_node->setIp($sys->get($sys->getIntf(), SystemNetwork::IP)); //$etva_node->save(); } else { $info = array('success' => false, 'agent' => $response['agent'], 'error' => $response['info'], 'info' => $response['info']); return $info; } } return true; }