PageRenderTime 28ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/branches/1.2.0/www/instances_view.php

http://scalr.googlecode.com/
PHP | 198 lines | 161 code | 35 blank | 2 comment | 32 complexity | 5300bf488fa0e45f4eb0dfab6fcf765b MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, GPL-3.0
  1. <?
  2. require("src/prepend.inc.php");
  3. $display['load_extjs'] = true;
  4. if ($req_farmid)
  5. {
  6. if ($_SESSION["uid"] != 0)
  7. $farminfo = $db->GetRow("SELECT * FROM farms WHERE id=? AND clientid=?", array($req_farmid, $_SESSION["uid"]));
  8. else
  9. $farminfo = $db->GetRow("SELECT * FROM farms WHERE id=?", array($req_farmid));
  10. if (!$farminfo)
  11. {
  12. $errmsg = _("Farm not found");
  13. UI::Redirect("farms_view.php");
  14. }
  15. $clientid = $farminfo['clientid'];
  16. }
  17. else
  18. {
  19. if ($_SESSION["uid"] == 0)
  20. {
  21. $errmsg = _("Requested page cannot be viewed from admin account");
  22. UI::Redirect("index.php");
  23. }
  24. else
  25. $clientid = $_SESSION['uid'];
  26. }
  27. // Load Client Object
  28. $Client = Client::Load($clientid);
  29. if ($post_cancel)
  30. UI::Redirect("instances_view.php?farmid={$farminfo['id']}");
  31. $display["title"] = _("Servers&nbsp;&raquo;&nbsp;View");
  32. if ($req_action == "sshClient")
  33. {
  34. $DBInstance = DBInstance::LoadByIID($req_instanceid);
  35. $DBFarm = $DBInstance->GetFarmObject();
  36. if ($DBFarm->ClientID == $clientid)
  37. {
  38. $ssh_host = $DBInstance->ExternalIP;
  39. if ($ssh_host)
  40. {
  41. $ssh_port = $db->GetOne("SELECT default_ssh_port FROM roles WHERE ami_id=?", array($DBInstance->AMIID));
  42. if (!$ssh_port)
  43. $ssh_port = 22;
  44. $Smarty->assign(
  45. array(
  46. "DBInstance" => $DBInstance,
  47. "host" => $ssh_host,
  48. "port" => $ssh_port,
  49. "key" => base64_encode($DBFarm->GetSetting(DBFarm::SETTING_AWS_PRIVATE_KEY))
  50. )
  51. );
  52. $Smarty->display("ssh_applet.tpl");
  53. exit();
  54. }
  55. }
  56. else
  57. {
  58. $errmsg = _("SSH console works only for instances launched by Scalr");
  59. }
  60. }
  61. if ($req_task || $req_action)
  62. {
  63. $AmazonEC2Client = AmazonEC2::GetInstance(AWSRegions::GetAPIURL($farminfo['region']));
  64. $AmazonEC2Client->SetAuthKeys($Client->AWSPrivateKey, $Client->AWSCertificate);
  65. if ($req_task == 'setactive')
  66. {
  67. $instanceinfo = $db->GetRow("SELECT * FROM farm_instances
  68. WHERE instance_id=? AND farmid=?",
  69. array($req_iid, $farminfo["id"])
  70. );
  71. if ($instanceinfo)
  72. {
  73. $db->Execute("UPDATE farm_instances SET isactive='1'
  74. WHERE id=?",
  75. array($instanceinfo['id'])
  76. );
  77. $zones = $db->GetAll("SELECT * FROM zones WHERE farmid=?", array($instanceinfo['farmid']));
  78. $DNSZoneController = new DNSZoneControler();
  79. $ami_info = $db->GetRow("SELECT * FROM roles WHERE ami_id=?", array($instanceinfo['ami_id']));
  80. try
  81. {
  82. foreach ($zones as $zoneinfo)
  83. {
  84. try
  85. {
  86. $DBFarmRole = DBFarmRole::LoadByID($instanceinfo['farm_roleid']);
  87. $skip_main_a_records = ($DBFarmRole->GetSetting(DBFarmRole::SETTING_BALANCING_USE_ELB) == 1) ? true : false;
  88. }
  89. catch(Exception $e)
  90. {
  91. $Logger->fatal(sprintf("instances_view(73): %s", $e->getMessage()));
  92. $skip_main_a_records = false;
  93. }
  94. $records = DNSZoneControler::GetInstanceDNSRecordsList($instanceinfo, $zoneinfo["role_name"], $ami_info['alias']);
  95. foreach ($records as $k=>$v)
  96. {
  97. if ($v["rkey"] != '' && $v["rvalue"] != '')
  98. $db->Execute("REPLACE INTO records SET zoneid=?, `rtype`=?, `ttl`=?, `rpriority`=?, `rvalue`=?, `rkey`=?, `issystem`=?", array($zoneinfo["id"], $v["rtype"], $v["ttl"], $v["rpriority"], $v["rvalue"], $v["rkey"], $v["issystem"] ? 1 : 0));
  99. }
  100. $DNSZoneController->Update($zoneinfo["id"]);
  101. }
  102. $i++;
  103. }
  104. catch(Exception $e)
  105. {
  106. $err[] = $e->getMessage();
  107. }
  108. }
  109. if (count($err) == 0)
  110. $okmsg = _("Instance successfully marked as active");
  111. }
  112. elseif ($req_task == 'setinactive')
  113. {
  114. $instanceinfo = $db->GetRow("SELECT * FROM farm_instances
  115. WHERE instance_id=? AND farmid=?",
  116. array($req_iid, $farminfo["id"])
  117. );
  118. if ($instanceinfo)
  119. {
  120. $db->Execute("UPDATE farm_instances SET isactive='0'
  121. WHERE id=?",
  122. array($instanceinfo['id'])
  123. );
  124. $zones = $db->GetAll("SELECT zoneid FROM records
  125. WHERE (rvalue='{$instanceinfo['internal_ip']}' OR
  126. rvalue='{$instanceinfo['external_ip']}') AND issystem='1' GROUP BY zoneid"
  127. );
  128. $DNSZoneController = new DNSZoneControler();
  129. try
  130. {
  131. foreach ($zones as $zoneid)
  132. {
  133. $zoneinfo = $db->GetRow("SELECT * FROM zones WHERE id=?", array($zoneid));
  134. // Add A records pointed to new active instance
  135. $db->Execute("DELETE FROM records WHERE
  136. zoneid='{$zoneinfo['id']}' AND
  137. (rvalue='{$instanceinfo['internal_ip']}' OR
  138. rvalue='{$instanceinfo['external_ip']}'
  139. ) AND issystem='1'"
  140. );
  141. $DNSZoneController->Update($zoneinfo["id"]);
  142. }
  143. $i++;
  144. }
  145. catch(Exception $e)
  146. {
  147. $err[] = $e->getMessage();
  148. }
  149. }
  150. if (count($err) == 0)
  151. $okmsg = _("Instance successfully marked as active");
  152. }
  153. if ($okmsg)
  154. UI::Redirect("instances_view.php?farmid={$req_farmid}");
  155. }
  156. $display["grid_query_string"] = "&farmid={$farminfo["id"]}";
  157. if (isset($req_farm_roleid))
  158. {
  159. $req_farm_roleid = (int)$req_farm_roleid;
  160. $display["grid_query_string"] .= "&farm_roleid={$req_farm_roleid}";
  161. }
  162. require("src/append.inc.php");
  163. ?>