PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/branches/1.0/www/instances_view.php

http://scalr.googlecode.com/
PHP | 240 lines | 193 code | 43 blank | 4 comment | 39 complexity | 294592fa274965f104e423813f308869 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 ($_SESSION["uid"] != 0)
  5. $farminfo = $db->GetRow("SELECT * FROM farms WHERE id=? AND clientid=?", array($req_farmid, $_SESSION["uid"]));
  6. else
  7. $farminfo = $db->GetRow("SELECT * FROM farms WHERE id=?", array($req_farmid));
  8. if (!$farminfo)
  9. {
  10. $errmsg = _("Farm not found");
  11. UI::Redirect("farms_view.php");
  12. }
  13. // Load Client Object
  14. $Client = Client::Load($farminfo['clientid']);
  15. if ($post_cancel)
  16. UI::Redirect("instances_view.php?farmid={$farminfo['id']}");
  17. $display["title"] = _("Instances&nbsp;&raquo;&nbsp;View");
  18. if ($req_action == "sshClient")
  19. {
  20. $ssh_host = $db->GetOne("SELECT external_ip FROM farm_instances WHERE instance_id=? AND farmid=?", array($req_instanceid, $farminfo["id"]));
  21. if ($ssh_host)
  22. {
  23. $Smarty->assign(array("i" => $db->GetRow("SELECT * FROM farm_instances WHERE instance_id=? AND farmid=?", array($req_instanceid, $farminfo["id"])), "host" => $ssh_host, "key" => base64_encode($farminfo["private_key"])));
  24. $Smarty->display("ssh_applet.tpl");
  25. exit();
  26. }
  27. }
  28. if ($req_task || $req_action)
  29. {
  30. $AmazonEC2Client = AmazonEC2::GetInstance(AWSRegions::GetAPIURL($farminfo['region']));
  31. $AmazonEC2Client->SetAuthKeys($Client->AWSPrivateKey, $Client->AWSCertificate);
  32. if ($req_task == 'setactive')
  33. {
  34. $instanceinfo = $db->GetRow("SELECT * FROM farm_instances
  35. WHERE instance_id=? AND farmid=?",
  36. array($req_iid, $farminfo["id"])
  37. );
  38. if ($instanceinfo)
  39. {
  40. $db->Execute("UPDATE farm_instances SET isactive='1'
  41. WHERE id=?",
  42. array($instanceinfo['id'])
  43. );
  44. $zones = $db->GetAll("SELECT * FROM zones WHERE farmid=?", array($instanceinfo['farmid']));
  45. $DNSZoneController = new DNSZoneControler();
  46. $ami_info = $db->GetRow("SELECT * FROM ami_roles WHERE ami_id=?", array($instanceinfo['ami_id']));
  47. try
  48. {
  49. foreach ($zones as $zoneinfo)
  50. {
  51. $records = DNSZoneControler::GetInstanceDNSRecordsList($instanceinfo, $zoneinfo["role_name"], $ami_info['alias']);
  52. foreach ($records as $k=>$v)
  53. {
  54. if ($v["rkey"] != '' && $v["rvalue"] != '')
  55. $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));
  56. }
  57. $DNSZoneController->Update($zoneinfo["id"]);
  58. }
  59. $i++;
  60. }
  61. catch(Exception $e)
  62. {
  63. $err[] = $e->getMessage();
  64. }
  65. }
  66. if (count($err) == 0)
  67. $okmsg = _("Instance succesfully marked as active");
  68. }
  69. elseif ($req_task == 'setinactive')
  70. {
  71. $instanceinfo = $db->GetRow("SELECT * FROM farm_instances
  72. WHERE instance_id=? AND farmid=?",
  73. array($req_iid, $farminfo["id"])
  74. );
  75. if ($instanceinfo)
  76. {
  77. $db->Execute("UPDATE farm_instances SET isactive='0'
  78. WHERE id=?",
  79. array($instanceinfo['id'])
  80. );
  81. $zones = $db->GetAll("SELECT zoneid FROM records
  82. WHERE (rvalue='{$instanceinfo['internal_ip']}' OR
  83. rvalue='{$instanceinfo['external_ip']}') AND issystem='1' GROUP BY zoneid"
  84. );
  85. $DNSZoneController = new DNSZoneControler();
  86. try
  87. {
  88. foreach ($zones as $zoneid)
  89. {
  90. $zoneinfo = $db->GetRow("SELECT * FROM zones WHERE id=?", array($zoneid));
  91. // Add A records pointed to new active instance
  92. $db->Execute("DELETE FROM records WHERE
  93. zoneid='{$zoneinfo['id']}' AND
  94. (rvalue='{$instanceinfo['internal_ip']}' OR
  95. rvalue='{$instanceinfo['external_ip']}'
  96. ) AND issystem='1'"
  97. );
  98. $DNSZoneController->Update($zoneinfo["id"]);
  99. }
  100. $i++;
  101. }
  102. catch(Exception $e)
  103. {
  104. $err[] = $e->getMessage();
  105. }
  106. }
  107. if (count($err) == 0)
  108. $okmsg = _("Instance succesfully marked as active");
  109. }
  110. else
  111. {
  112. if (isset($req_action) && $_POST)
  113. {
  114. $req_instances = $post_id;
  115. $req_task = $req_action;
  116. }
  117. else
  118. {
  119. $req_instances = array($req_iid);
  120. }
  121. foreach ($req_instances as $instanceid)
  122. {
  123. $instance_info = $db->GetRow("SELECT * FROM farm_instances WHERE instance_id=? AND farmid=?", array($instanceid, $farminfo["id"]));
  124. if ($instance_info)
  125. {
  126. try
  127. {
  128. $instances = array($instanceid);
  129. // Do something
  130. if ($req_task == "terminate")
  131. {
  132. $running_instances = $db->GetOne("SELECT COUNT(*) FROM farm_instances WHERE ami_id=? AND farmid=?",
  133. array($instance_info['ami_id'], $farminfo["id"])
  134. );
  135. $db->BeginTrans();
  136. $DBFarmRole = DBFarmRole::Load($farminfo["id"], $instance_info['ami_id']);
  137. if (count($req_instances) == 1)
  138. {
  139. $min_instances = $DBFarmRole->GetSetting(DBFarmRole::SETTING_SCALING_MIN_INSTANCES);
  140. if ($post_cbtn_2)
  141. {
  142. $DBFarmRole->SetSetting(DBFarmRole::SETTING_SCALING_MIN_INSTANCES, $min_instances-1);
  143. }
  144. elseif ($post_cbtn_3)
  145. {
  146. //
  147. }
  148. else
  149. {
  150. if ($running_instances == $min_instances && $min_instances > 1)
  151. {
  152. $display["instance_id"] = $instance_info['instance_id'];
  153. $display["min_count"] = $min_instances;
  154. $display["role_name"] = $instance_info["role_name"];
  155. $display["min_count_new"] = $min_instances-1;
  156. $display["action"] = $post_action;
  157. $Smarty->assign($display);
  158. $Smarty->display("instance_terminate_confirm.tpl");
  159. exit();
  160. }
  161. }
  162. }
  163. try
  164. {
  165. $response = $AmazonEC2Client->TerminateInstances($instances);
  166. }
  167. catch(Exception $e)
  168. {
  169. $db->RollbackTrans();
  170. $err[] = $e->getMessage();
  171. }
  172. $db->CommitTrans();
  173. }
  174. elseif ($req_task == "reboot")
  175. {
  176. $response = $AmazonEC2Client->RebootInstances($instances);
  177. }
  178. if ($response instanceof SoapFault)
  179. $err[] = $response->faultstring;
  180. }
  181. catch (Exception $e)
  182. {
  183. $err[] = $e->getMessage();
  184. }
  185. }
  186. }
  187. if (count($err) == 0)
  188. $okmsg = sprintf(_("%d instance(s) %s"),
  189. count($req_instances),
  190. ($req_task == "reboot" ? _("going to reboot") : _("terminated")));
  191. }
  192. if ($okmsg)
  193. UI::Redirect("instances_view.php?farmid={$req_farmid}");
  194. }
  195. $display["grid_query_string"] = "&farmid={$farminfo["id"]}";
  196. require("src/append.inc.php");
  197. ?>