diff --git a/app/Controllers/Provision.php b/app/Controllers/Provision.php index 7bf8da2..4e147f4 100644 --- a/app/Controllers/Provision.php +++ b/app/Controllers/Provision.php @@ -11,10 +11,12 @@ class Provision extends BaseController { $this->allocatePortNo(); // allocte port for the conyainer use + $this->updateProvision(); return 0; } public function updateProvision(): string { + $list_limit = 1; // for noow $public_path = FCPATH; $ansible_folder = str_replace("public/", "ANSIBLE", $public_path); $partMachineLocal = "/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; @@ -22,7 +24,11 @@ class Provision extends BaseController mkdir($ansible_folder . "/parts", 0700); } - $mysql = "SELECT id, uid, internal_url,product_id,status,provision_port FROM members_products WHERE provision_port = 0 "; + $mysql = "SELECT id, uid, internal_url,product_id,status,provision_port,updated + FROM members_products + WHERE provision_port > 0 + ORDER BY updated ASC LIMIT ".$list_limit; + $query = $this->db->query($mysql); // $num = $query->num_rows(); $provision_list = $query->getResult(); @@ -35,6 +41,7 @@ class Provision extends BaseController $partFolder = $ansible_folder . "/parts/" . $provisionUID; $allocatedPort = 8011; + $this->updateToNow($provisionUID); if (!is_dir($partFolder)) { mkdir($partFolder, 0700); @@ -77,9 +84,103 @@ class Provision extends BaseController return view('welcome_message'); } - private function allocatePortNo(){ + private function allocatePortNo(){ + $list_limit = 2; + $mysql = "SELECT id, uid, internal_url,product_id,status,provision_port,updated + FROM members_products + WHERE provision_port = 0 + ORDER BY updated ASC LIMIT ".$list_limit; - // return; + $query = $this->db->query($mysql); + $provision_list = $query->getResult(); + foreach ($provision_list as $pr) { + + $productId = $pr->product_id; + $provisionUID = $pr->uid; + + $allocated_port = $this->allocatePortNumber( $productId ); + $primary_server = $this->provisionServer( $productId ); + $mysql = "UPDATE members_products SET updated=now(), provision_port=".$allocated_port.", primary_server='".$primary_server."' WHERE uid::TEXT = '".$provisionUID."' AND provision_port = 0"; + $query = $this->db->query($mysql); } + } + + private function allocatePortNumber($productId){ + $portF = 0; + try { + $mysql = "SELECT max(provision_port) AS max_port FROM members_products WHERE product_id = '".$productId."'"; + $query = $this->db->query($mysql); + $maxItem = $query->getResult()[0]->max_port; + //var_dump($maxItem); + if ($maxItem == 0 ){ + switch ($productId) { + case "A000002": + $maxItem = 5500; + break; + case "A000004": + $maxItem = 8800; + break; + case "A000005": + $maxItem = 7700; + break; + case "A000001": + $maxItem = 4400; + break; + case "A000003": + $maxItem = 6600; + break; + } + } + else{ + $maxItem = $maxItem+1; + } + $portF = $maxItem; + } catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } + return $portF; + } + + private function provisionServer($productId){ + switch ($productId) { + case "A000001": + case "A000002": + $primaryServer = "172.16.4.92"; + break; + case "A000003": + case "A000004": + $primaryServer = "172.16.4.91"; + break; + case "A000005": + $primaryServer = "172.16.4.95"; + break; + } + return $primaryServer; + } + +/* + [A000001_SERVER] +172.16.4.92 + +[A000002_SERVER] +172.16.4.92 + +[A000003_SERVER] +172.16.4.91 + +[A000004_SERVER] +172.16.4.91 + +[A000005_SERVER] +172.16.4.95 + */ + private function updateToNow($provisionUID){ + try { + $mysql = "UPDATE members_products SET updated=now() WHERE uid::TEXT = '".$provisionUID."'"; + $query = $this->db->query($mysql); + } catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } + } }