PageRenderTime 46ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/branches/1.0RC4/www/farms_add.php

http://scalr.googlecode.com/
PHP | 216 lines | 172 code | 38 blank | 6 comment | 34 complexity | 13a294b9d84df24d21df20e4bcd76287 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, GPL-3.0
  1. <?
  2. require("src/prepend.inc.php");
  3. set_time_limit(360);
  4. $req_farmid = ($req_farmid) ? $req_farmid : $req_id;
  5. if ($_SESSION['uid'] == 0)
  6. {
  7. if (!$req_farmid)
  8. UI::Redirect("farms_view.php");
  9. else
  10. {
  11. $uid = $db->GetOne("SELECT clientid FROM farms WHERE id='{$req_farmid}'");
  12. }
  13. }
  14. else
  15. {
  16. $uid = $_SESSION['uid'];
  17. }
  18. $used_slots = $db->GetOne("SELECT SUM(max_count) FROM farm_amis WHERE farmid IN (SELECT id FROM farms WHERE clientid='{$uid}')");
  19. $client_max_instances = $db->GetOne("SELECT `value` FROM client_settings WHERE `key`=? AND clientid=?", array('client_max_instances', $uid));
  20. $i_limit = $client_max_instances ? $client_max_instances : CONFIG::$CLIENT_MAX_INSTANCES;
  21. $client_max_eips = $db->GetOne("SELECT `value` FROM client_settings WHERE `key`=? AND clientid=?", array('client_max_eips', $uid));
  22. $eips_limit = $client_max_eips ? $client_max_eips : CONFIG::$CLIENT_MAX_EIPS;
  23. $avail_slots = $i_limit - $used_slots;
  24. if ($avail_slots <= 5)
  25. $display["warnmsg"] = sprintf(_("You have %s spare instances available on your account."), $avail_slots);
  26. if ($req_farmid)
  27. {
  28. $region = $db->GetOne("SELECT region FROM farms WHERE id=?", array($req_farmid));
  29. $display["title"] = _("Edit farm");
  30. }
  31. else
  32. {
  33. $display["title"] = _("Farm builder");
  34. if (!$req_region)
  35. {
  36. $Smarty->assign($display);
  37. $Smarty->display("region_information_step.tpl");
  38. exit();
  39. }
  40. else
  41. $region = $req_region;
  42. }
  43. $display['region'] = $region;
  44. $_SESSION['farm_builder_region'] = $region;
  45. $Client = Client::Load($uid);
  46. $AmazonEC2Client = AmazonEC2::GetInstance(AWSRegions::GetAPIURL($region));
  47. $AmazonEC2Client->SetAuthKeys($Client->AWSPrivateKey, $Client->AWSCertificate);
  48. // Get Avail zones
  49. $avail_zones_resp = $AmazonEC2Client->DescribeAvailabilityZones();
  50. $display["avail_zones"] = array();
  51. // Random assign zone
  52. array_push($display["avail_zones"], "");
  53. foreach ($avail_zones_resp->availabilityZoneInfo->item as $zone)
  54. {
  55. if (stristr($zone->zoneState,'available')) //TODO:
  56. array_push($display["avail_zones"], (string)$zone->zoneName);
  57. }
  58. // Get EBS Snapshots list
  59. $response = $AmazonEC2Client->DescribeSnapshots();
  60. $rowz = $response->snapshotSet->item;
  61. if ($rowz instanceof stdClass)
  62. $rowz = array($rowz);
  63. foreach ($rowz as $pk=>$pv)
  64. {
  65. if ($pv->status == 'completed')
  66. $display['snapshots'][] = $pv->snapshotId;
  67. }
  68. if ($req_id)
  69. {
  70. $display["farminfo"] = $db->GetRow("SELECT * FROM farms WHERE id=?", array($req_id));
  71. if ($_SESSION['uid'] != 0 && $_SESSION['uid'] != $display["farminfo"]["clientid"])
  72. UI::Redirect("farms_view.php");
  73. if (!$display["farminfo"])
  74. {
  75. $errmsg = _("Farm not found");
  76. UI::Redirect("farms_view.php");
  77. }
  78. $servers = $db->GetAll("SELECT * FROM farm_amis WHERE farmid=?", array($req_id));
  79. $display['roles'] = array();
  80. foreach ($servers as &$row)
  81. {
  82. $ami_info = $db->GetRow("SELECT * FROM ami_roles WHERE ami_id=?", array($row['ami_id']));
  83. if (!$ami_info)
  84. continue;
  85. $row["role"] = $ami_info["name"];
  86. $scripts = $db->GetAll("SELECT * FROM farm_role_scripts WHERE farmid=? AND ami_id=?", array($display["farminfo"]["id"], $row['ami_id']));
  87. $scripts_object = new stdClass();
  88. foreach ($scripts as $script)
  89. {
  90. if (substr($script['event_name'], 0, 11) != 'CustomEvent')
  91. {
  92. $scripts_object->{"{$script['event_name']}_{$script['scriptid']}"} = new stdClass();
  93. $scripts_object->{"{$script['event_name']}_{$script['scriptid']}"}->config = unserialize($script['params']);
  94. $scripts_object->{"{$script['event_name']}_{$script['scriptid']}"}->target = $script['target'];
  95. $scripts_object->{"{$script['event_name']}_{$script['scriptid']}"}->version = $script['version'];
  96. $scripts_object->{"{$script['event_name']}_{$script['scriptid']}"}->issync = $script['issync'];
  97. $scripts_object->{"{$script['event_name']}_{$script['scriptid']}"}->timeout = $script['timeout'];
  98. $scripts_object->{"{$script['event_name']}_{$script['scriptid']}"}->order_index = $script['order_index'];
  99. }
  100. }
  101. if ($ami_info['roletype'] == ROLE_TYPE::SHARED && $ami_info['clientid'] != 0)
  102. {
  103. $author_info = $db->GetRow("SELECT fullname FROM clients WHERE id=?", array($ami_info['clientid']));
  104. $author = ($author_info['fullname']) ? $author_info['fullname'] : _('Scalr user');
  105. }
  106. else
  107. $author = false;
  108. $role = array(
  109. 'name' => $ami_info["name"],
  110. 'arch' => $ami_info["architecture"],
  111. 'alias' => $ami_info["alias"],
  112. 'ami_id' => $ami_info["ami_id"],
  113. 'type' => ROLE_ALIAS::GetTypeByAlias($ami_info["alias"]),
  114. 'description' => $ami_info["description"],
  115. 'scripts' => $scripts_object,
  116. 'author' => $author,
  117. 'options' => array(
  118. 'min_instances' => $row['min_count'],
  119. 'max_instances' => $row['max_count'],
  120. 'min_LA' => $row['min_LA'],
  121. 'max_LA' => $row['max_LA'],
  122. 'reboot_timeout' => $row['reboot_timeout'],
  123. 'launch_timeout' => $row['launch_timeout'],
  124. 'status_timeout' => $row['status_timeout'],
  125. 'placement' => ($row['avail_zone']) ? $row['avail_zone'] : "",
  126. 'i_type' => $row['instance_type'],
  127. 'use_elastic_ips' => ($row['use_elastic_ips'] == 1) ? true : false,
  128. 'use_ebs' => ($row['use_ebs'] == 1) ? true : false,
  129. 'ebs_size' => ($row['ebs_snapid']) ? 0 : $row['ebs_size'],
  130. 'ebs_snapid' => $row['ebs_snapid'],
  131. 'ebs_mount' => ($row['ebs_mount'] == 1) ? true : false,
  132. 'ebs_mountpoint' => $row['ebs_mountpoint']
  133. ));
  134. if ($ami_info["alias"] == ROLE_ALIAS::MYSQL)
  135. {
  136. $role['options']['mysql_bundle_every'] = $display["farminfo"]['mysql_rebundle_every'] ? $display["farminfo"]['mysql_rebundle_every'] : 48;
  137. $role['options']['mysql_make_backup_every'] = $display["farminfo"]['mysql_bcp_every'] ? $display["farminfo"]['mysql_bcp_every'] : 180;
  138. $role['options']['mysql_make_backup'] = ($display["farminfo"]['mysql_bcp'] == 1) ? true : false;
  139. $role['options']['mysql_bundle'] = ($display["farminfo"]['mysql_bundle'] == 1) ? true : false;
  140. }
  141. array_push($display['roles'], $role);
  142. }
  143. $display["id"] = $req_id;
  144. }
  145. $display['roles'] = json_encode($display['roles']);
  146. $r = new ReflectionClass("X86_64_TYPE");
  147. $display["64bit_types"] = array_values($r->getConstants());
  148. $r = new ReflectionClass("I386_TYPE");
  149. $display["32bit_types"] = array_values($r->getConstants());
  150. unset($r);
  151. $display["roles_descr"] = $db->GetAll("SELECT ami_id, name, description FROM ami_roles WHERE roletype=? OR (roletype=? and clientid=?)",
  152. array(ROLE_TYPE::SHARED, ROLE_TYPE::CUSTOM, $uid)
  153. );
  154. if ($req_configure == 1)
  155. $display["ami_id"] = $req_ami_id;
  156. /**
  157. * Tabs
  158. */
  159. $display["tabs_list"] = array(
  160. "general" => _("Settings"),
  161. "roles" => _("Roles")
  162. );
  163. $display["intable_tabs"] = array(
  164. array("id" => "info", "name" => _("About"), "display" => ""),
  165. array("id" => "scaling", "name" => _("Scaling"), "display" => ""),
  166. array("id" => "mysql", "name" => _("MySQL settings"), "display" => "none"),
  167. array("id" => "placement", "name" => _("Placement and type"), "display" => ""),
  168. array("id" => "eips", "name" => _("Elastic IPs"), "display" => ""),
  169. array("id" => "ebs", "name" => _("EBS"), "display" => ""),
  170. array("id" => "timeouts", "name" => _("Timeouts"), "display" => ""),
  171. array("id" => "scripts", "name" => _("Scripting"), "display" => ""),
  172. array("id" => "params", "name" => _("Parameters"), "display" => "")
  173. );
  174. $display['intable_selected_tab'] = "info";
  175. $display["help"] = _("Tick the checkbox to add the role to your farm.<br> Click on the role name to customize it's behavior");
  176. require("src/append.inc.php");
  177. ?>