diff --git a/app/Config/Boot/production.php b/app/Config/Boot/production.php index 679b341..8afcc58 100644 --- a/app/Config/Boot/production.php +++ b/app/Config/Boot/production.php @@ -24,4 +24,4 @@ ini_set('display_errors', '0'); */ defined('CI_DEBUG') || define('CI_DEBUG', false); -$_ENV['CONFIG_NAME']='

I beleive you are doing CI envrionment handling wrong. You should define CI_ENVIRONMENT environment variable and utilize the respective app/Config/Boot/...php file


'; +//$_ENV['CONFIG_NAME']='

I beleive you are doing CI envrionment handling wrong. You should define CI_ENVIRONMENT environment variable and utilize the respective app/Config/Boot/...php file


'; diff --git a/app/Controllers/Provision.php b/app/Controllers/Provision.php index d5e9e4a..5a1e305 100644 --- a/app/Controllers/Provision.php +++ b/app/Controllers/Provision.php @@ -5,20 +5,21 @@ namespace App\Controllers; class Provision extends BaseController { - - - public function prepareProvision(): string - { - - //http://10.10.10.13:5006/broadcast/provisioning?product_uid=bea86662-adb3-4c09-816b-014f450d9713&provision_action=Auto%20Configuration%20Started - + private function testSocket(): void{ // TELL THE SOCKET TO REFRESH PAGE $data["product_uid"] = "bea86662-adb3-4c09-816b-014f450d9713"; $data["provision_action"] = "Auto%20Configuration%20Started"; $SOCKET_SERVER_LOCATION = $_ENV['SOCKET_SERVER_LOCATION']; - log_message('critical', "TEST TEST ***** ***** Provision :: Action To :: ".$SOCKET_SERVER_LOCATION .'/broadcast/provisioning'); - $this->APIcall("GET", $SOCKET_SERVER_LOCATION .'/broadcast/provisioning', $data); + log_message('critical', "TEST TEST ***** ***** Provision :: Action To :: " . $SOCKET_SERVER_LOCATION . '/broadcast/provisioning'); + $this->APIcall("GET", $SOCKET_SERVER_LOCATION . '/broadcast/provisioning', $data); + } + public function prepareProvision(): string + { + + //$this->testSocket(); + $current_database = $_ENV['MAIN_DATABASE_IP']; + log_message('critical', "***** ***** prepareProvision :: Working Database ".$current_database ); log_message('critical', "***** ***** prepareProvision :: Starting Port Allocation "); $this->allocatePortNo(); // allocte port for the conyainer use @@ -44,12 +45,12 @@ class Provision extends BaseController //PROVISION_MSQL_DATABASE="wordpress" //PROVISION_MSQL_DATABASE_PORT="3307" - private function prepareDataBase():string + private function prepareDataBase(): string { - $servername = $_ENV['PROVISION_MSQL_DATABASE_IP'].":". $_ENV['PROVISION_MSQL_DATABASE_PORT']; // "172.16.4.96:3307"; - $database = $_ENV['PROVISION_MSQL_DATABASE']; //"wordpress"; - $username = $_ENV['PROVISION_MSQL_DATABASE_USERNAME']; //"root"; - $password = $_ENV['PROVISION_MSQL_DATABASE_PASSWORD']; //"may12002!"; + $servername = $_ENV['PROVISION_MSQL_DATABASE_IP'] . ":" . $_ENV['PROVISION_MSQL_DATABASE_PORT']; // "172.16.4.96:3307"; + $database = $_ENV['PROVISION_MSQL_DATABASE']; //"wordpress"; + $username = $_ENV['PROVISION_MSQL_DATABASE_USERNAME']; //"root"; + $password = $_ENV['PROVISION_MSQL_DATABASE_PASSWORD']; //"may12002!"; // Create connection $conn = mysqli_connect($servername, $username, $password, $database); if ($conn->connect_error) { @@ -64,7 +65,7 @@ class Provision extends BaseController WHERE db_status = 0 AND product_id IN ('A000004','A000003') AND provision_status = 0 - ORDER BY updated ASC LIMIT ".$list_limit; + ORDER BY updated ASC LIMIT " . $list_limit; $query = $this->db->query($mysql); $provision_list = $query->getResult(); @@ -72,16 +73,16 @@ class Provision extends BaseController $memberID = $pr->member_id; $productId = $pr->product_id; $provisionUID = $pr->uid; - $ContainerName = $this->generatedContainerName($productId, $pr->id ); // $productId . str_pad($pr->id, 10, "0", STR_PAD_LEFT); + $ContainerName = $this->generatedContainerName($productId, $pr->id); // $productId . str_pad($pr->id, 10, "0", STR_PAD_LEFT); $dbName = $ContainerName; // Create database $sql = "CREATE DATABASE $dbName"; if ($conn->query($sql) === TRUE) { - // echo "Database created successfully"; + // echo "Database created successfully"; log_message('critical', "***** ***** prepareDataBase :: () Database created successfully "); - $mysql = "UPDATE members_products SET updated=now() WHERE uid::TEXT = '".$provisionUID."'"; + $mysql = "UPDATE members_products SET updated=now() WHERE uid::TEXT = '" . $provisionUID . "'"; try { $query = $this->db->query($mysql); @@ -91,25 +92,27 @@ class Provision extends BaseController $sql = "GRANT SELECT , INSERT , UPDATE , DELETE ON " . $dbName . " . * TO '" . $dbName . "'@'localhost' IDENTIFIED BY '" . $provisionUID . "'"; $result = mysqli_query($conn, $sql); - $mysql = "UPDATE members_products SET updated=now(), db_status = db_status + 1 WHERE uid::TEXT = '".$provisionUID."'"; + $mysql = "UPDATE members_products SET updated=now(), db_status = db_status + 1 WHERE uid::TEXT = '" . $provisionUID . "'"; $query = $this->db->query($mysql); - } - catch(\Exception $e) { - // echo 'Message: ' .$e->getMessage(); - log_message('critical', "***** ***** prepareDataBase Error:: () ".$e->getMessage()); + } catch (\Exception $e) { + // echo 'Message: ' .$e->getMessage(); + log_message('critical', "***** ***** prepareDataBase Error:: () " . $e->getMessage()); } } else { //echo "Error creating database: " . $conn->error; - log_message('critical', "***** ***** prepareDataBase Error:: (Error creating database:) ". $conn->error); + log_message('critical', "***** ***** prepareDataBase Error:: (Error creating database:) " . $conn->error); } } mysqli_close($conn); return ''; } - private function generatedContainerName($productId, $provID){ - return $productId ."-SVR-" . str_pad($provID, 10, "0", STR_PAD_LEFT); + + private function generatedContainerName($productId, $provID) + { + return $productId . "-SVR-" . str_pad($provID, 10, "0", STR_PAD_LEFT); } + public function updateProvision(): string { $list_limit = 1; // for noow @@ -126,19 +129,19 @@ class Provision extends BaseController FROM members_products WHERE provision_port > 0 AND provision_status = 0 AND p_file = 0 - ORDER BY updated ASC LIMIT ".$list_limit; + ORDER BY updated ASC LIMIT " . $list_limit; $query = $this->db->query($mysql); // $num = $query->num_rows(); $provision_list = $query->getResult(); //$provision_list =[]; foreach ($provision_list as $pr) { - $subscriptionId = $pr->subscription_id; + $subscriptionId = $pr->subscription_id; $provisionPort = $pr->provision_port; $productId = $pr->product_id; $provisionUID = $pr->uid; $memberID = $pr->member_id; - $ContainerName = $this->generatedContainerName($productId, $pr->id ); // $productId . str_pad($pr->id, 10, "0", STR_PAD_LEFT); + $ContainerName = $this->generatedContainerName($productId, $pr->id); // $productId . str_pad($pr->id, 10, "0", STR_PAD_LEFT); $partFolder = $ansible_folder . "/parts/" . $provisionUID; // // make sure we compose the docker compose to use @@ -170,18 +173,17 @@ class Provision extends BaseController // Do the processing $composer_template_contents = str_replace("WHAT_CONTAINER_NAME", $ContainerName, $composer_template_contents); //$destinationHomeFolder = "/home/chiefsoft/SITES/" . $ContainerName; - $destinationHomeFolder =$_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName; + $destinationHomeFolder = $_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName; $composer_template_contents = str_replace("DESTINATION_FOLDER", $destinationHomeFolder, $composer_template_contents); $composer_template_contents = str_replace("ALLOCATED_PORT", $allocatedPort, $composer_template_contents); $composer_template_contents = str_replace("CNT_DB_NAME", $ContainerName, $composer_template_contents); $composer_template_contents = str_replace("CNT_DB_PASS", $provisionUID, $composer_template_contents); $composer_template_contents = str_replace("CNT_DB_DATA", '172.16.4.96:3307', $composer_template_contents); $composer_template_contents = str_replace("PROVISION_UID_REPLACE", $provisionUID, $composer_template_contents); - $templateRandom = 'P'. rand(1,6); + $templateRandom = 'P' . rand(1, 6); $composer_template_contents = str_replace("TEMPLATE_NAME_REPLACE", $templateRandom, $composer_template_contents); - //Save to the specific path $destination_composer_path = $ansible_folder . "/parts/" . $provisionUID . "/docker-compose.yml"; $composerFile = fopen($destination_composer_path, "w") or die("Unable to open file!"); @@ -198,34 +200,36 @@ class Provision extends BaseController $myfile = fopen($ansible_folder . "/" . $prov_name, "w") or die("Unable to open file!"); fwrite($myfile, $template_content_processed); fclose($myfile); - $this->registerProvision($subscriptionId,$prov_name); + $this->registerProvision($subscriptionId, $prov_name); $this->provisionActions($memberID, $provisionUID, "Auto Configuration Started"); } return 0; } - private function scheduleRefreshAction(){ + private function scheduleRefreshAction() + { $mysql = "SELECT * FROM member_product_refresh WHERE product_id IN ('A000001','A000002') AND status =0 LIMIT 1"; $query = $this->db->query($mysql); // $num = $query->num_rows(); $provision_list = $query->getResult(); //$provision_list =[]; foreach ($provision_list as $pr) { - $this->db->query("UPDATE member_product_refresh SET status = status + 1 WHERE id = ".$pr->id); + $this->db->query("UPDATE member_product_refresh SET status = status + 1 WHERE id = " . $pr->id); $subscriptionUId = $pr->subscription_uid; $this->refreshProvision($subscriptionUId); } } - private function refreshProvision($subscriptionUId){ + private function refreshProvision($subscriptionUId) + { log_message('critical', "***** ***** refreshProvision :: Execute Refresh Provisioning() "); $rsyncPass = "******noNEDD****"; // $remote_composer_path = "chiefsoft@10.0.0.32:/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; // $partMachineLocal = "/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; $remote_composer_path = $_ENV['REMOTE_COMPOSER_PATH']; // "chiefsoft@10.0.0.32:/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; $partMachineLocal = $_ENV['PATH_MACHINE_LOCAL']; // "/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; - $ansibleToken = $this->ansibleLogin(); - $mysql ="SELECT pp.uid AS prov_uid, p.id AS mpid, + $ansibleToken = $this->ansibleLogin(); + $mysql = "SELECT pp.uid AS prov_uid, p.id AS mpid, p.product_id, pp.id AS plan_id, pp.uid , pp.provision_id, pp.play_file, p.uid AS member_product_uid , @@ -245,18 +249,18 @@ class Provision extends BaseController $provisionId = $pr->provision_id; $productId = $pr->product_id; $productUid = $pr->member_product_uid; - $playbook = $pr->product_id."_repair.yml"; + $playbook = $pr->product_id . "_repair.yml"; $provisionUID = $pr->prov_uid; $member_id = $pr->member_id; $internal_url = $pr->internal_url; $provision_port = $pr->provision_port; $members_product_id = $pr->mpid; - log_message('critical', "Members Product ID ***** ".$pr->mpid." Provision_Status == ". $pr->provision_status); + log_message('critical', "Members Product ID ***** " . $pr->mpid . " Provision_Status == " . $pr->provision_status); $this->updateToNow($productUid); // increase count not to repeat $ansible_host = $productId . "_SERVER"; - $ContainerName = $this->generatedContainerName($productId, $pr->mpid ); //$productId ."-SVR-". str_pad($pr->mpid, 10, "0", STR_PAD_LEFT); + $ContainerName = $this->generatedContainerName($productId, $pr->mpid); //$productId ."-SVR-". str_pad($pr->mpid, 10, "0", STR_PAD_LEFT); //$destinationHomeFolder = "/home/chiefsoft/SITES/" . $ContainerName; $destinationHomeFolder = $_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName; // $composer_template_path_local = $partMachineLocal . $provisionUID; @@ -273,9 +277,9 @@ class Provision extends BaseController // Remember this is in a CONTAINER so the path follows - $this_composer_part_location = "/var/www/html/ANSIBLE/parts/". $productUid; - if (!is_dir( $this_composer_part_location )) { - mkdir($this_composer_part_location , 0700); + $this_composer_part_location = "/var/www/html/ANSIBLE/parts/" . $productUid; + if (!is_dir($this_composer_part_location)) { + mkdir($this_composer_part_location, 0700); } // make sure we compose the docker compose to use @@ -289,13 +293,13 @@ class Provision extends BaseController ); $this->db->query("UPDATE provision_plans SET updated = now() WHERE id = $planId"); - // $this->db->query("UPDATE members_products SET p_file = p_file + 1 WHERE id = $provisionId"); - $params = [ - "template_id"=> 2, - "debug"=> false, - "dry_run"=> false, - "playbook"=> $playbook, - "environment"=> "{ + // $this->db->query("UPDATE members_products SET p_file = p_file + 1 WHERE id = $provisionId"); + $params = [ + "template_id" => 2, + "debug" => false, + "dry_run" => false, + "playbook" => $playbook, + "environment" => "{ \"WHAT_HOST_IN_USE\":\"$ansible_host\", \"DESTINATION_FOLDER\":\"$destinationHomeFolder\", \"WHAT_PART_LOCAL\":\"$composer_template_path_local\", @@ -305,15 +309,14 @@ class Provision extends BaseController \"CONTAINER_NAME\":\"$ContainerName\" }" ]; - $ansibleReturn = $this->ansibleProvision($ansibleToken, $params); + $ansibleReturn = $this->ansibleProvision($ansibleToken, $params); - log_message('critical', "ANSIBLE RETURN ***** ".$ansibleReturn); - if ( $ansibleReturn === 200 ){ - log_message('critical', "Calling update_To_Completed ***** ".$ansibleReturn); + log_message('critical', "ANSIBLE RETURN ***** " . $ansibleReturn); + if ($ansibleReturn === 200) { + log_message('critical', "Calling update_To_Completed ***** " . $ansibleReturn); $this->update_To_Completed($productUid); - } - else{ - log_message('critical', "Calling WHY PATH update_To_Completed ***** ".$ansibleReturn); + } else { + log_message('critical', "Calling WHY PATH update_To_Completed ***** " . $ansibleReturn); $this->update_To_Completed($productUid); } } @@ -327,19 +330,20 @@ class Provision extends BaseController $member_product_uid, $member_id, $internal_url - ){ + ) + { $public_path = FCPATH; $ansible_folder = str_replace("public/", "ANSIBLE", $public_path); $partMachineLocal = $_ENV['PATH_MACHINE_LOCAL']; - $subscriptionId = $members_product_id; + $subscriptionId = $members_product_id; $provisionPort = $members_product_port; $productId = $product_id; $provisionUID = $member_product_uid; $memberID = $member_id; - $ContainerName = $this->generatedContainerName($productId, $members_product_id ); // $productId . str_pad($pr->id, 10, "0", STR_PAD_LEFT); + $ContainerName = $this->generatedContainerName($productId, $members_product_id); // $productId . str_pad($pr->id, 10, "0", STR_PAD_LEFT); $partFolder = $ansible_folder . "/parts/" . $member_product_uid; /* @@ -349,7 +353,6 @@ class Provision extends BaseController $destination_composer_path = $ansible_folder . "/parts/" . $provisionUID . "/docker-compose.yml"; - $allocatedPort = $provisionPort; $this->updateToNow($provisionUID); @@ -368,14 +371,14 @@ class Provision extends BaseController // Do the processing $composer_template_contents = str_replace("WHAT_CONTAINER_NAME", $ContainerName, $composer_template_contents); //$destinationHomeFolder = "/home/chiefsoft/SITES/" . $ContainerName; - $destinationHomeFolder =$_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName; + $destinationHomeFolder = $_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName; $composer_template_contents = str_replace("DESTINATION_FOLDER", $destinationHomeFolder, $composer_template_contents); $composer_template_contents = str_replace("ALLOCATED_PORT", $allocatedPort, $composer_template_contents); $composer_template_contents = str_replace("CNT_DB_NAME", $ContainerName, $composer_template_contents); $composer_template_contents = str_replace("CNT_DB_PASS", $provisionUID, $composer_template_contents); $composer_template_contents = str_replace("CNT_DB_DATA", '172.16.4.96:3307', $composer_template_contents); $composer_template_contents = str_replace("PROVISION_UID_REPLACE", $provisionUID, $composer_template_contents); - $templateRandom = 'P'. rand(1,6); + $templateRandom = 'P' . rand(1, 6); $composer_template_contents = str_replace("TEMPLATE_NAME_REPLACE", $templateRandom, $composer_template_contents); //Save to the specific path $composerFile = fopen($destination_composer_path, "w") or die("Unable to open file!"); @@ -393,7 +396,9 @@ class Provision extends BaseController fwrite($myfile, $template_content_processed); fclose($myfile); } - private function registerProvision($subscriptionId,$prov_name){ + + private function registerProvision($subscriptionId, $prov_name) + { /* CREATE TABLE provision_plans ( @@ -409,20 +414,22 @@ class Provision extends BaseController ADD CONSTRAINT provision_plans_id_key UNIQUE (id); */ - try{ - $mysql = "INSERT INTO provision_plans (provision_id,play_file) VALUES($subscriptionId,'$prov_name')"; + try { + $mysql = "INSERT INTO provision_plans (provision_id,play_file) VALUES($subscriptionId,'$prov_name')"; $query = $this->db->query($mysql); - } catch ( \Exception $e){ - log_message('critical', "***** ***** registerProvision Error:: registerProvision() ".$e->getMessage()); + } catch (\Exception $e) { + log_message('critical', "***** ***** registerProvision Error:: registerProvision() " . $e->getMessage()); } - return 0; + return 0; } - private function allocatePortNo(){ + + private function allocatePortNo() + { $list_limit = 2; $mysql = "SELECT id, member_id, uid, internal_url,product_id,status,provision_port,updated FROM members_products WHERE provision_port = 0 - ORDER BY updated ASC LIMIT ".$list_limit; + ORDER BY updated ASC LIMIT " . $list_limit; $query = $this->db->query($mysql); $provision_list = $query->getResult(); @@ -431,23 +438,24 @@ class Provision extends BaseController $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"; + $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); $this->provisionActions($memberID, $provisionUID, "Allocating Provisioning Ports"); } } - private function allocatePortNumber($productId){ + private function allocatePortNumber($productId) + { $portF = 0; try { - $mysql = "SELECT max(provision_port) AS max_port FROM members_products WHERE product_id = '".$productId."'"; + $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 ){ + if ($maxItem == 0) { switch ($productId) { case "A000002": $maxItem = 5500; @@ -465,18 +473,18 @@ class Provision extends BaseController $maxItem = 6600; break; } - } - else{ - $maxItem = $maxItem+1; + } else { + $maxItem = $maxItem + 1; } $portF = $maxItem; } catch (Exception $e) { - echo 'Caught exception: ', $e->getMessage(), "\n"; + echo 'Caught exception: ', $e->getMessage(), "\n"; } return $portF; } - private function provisionServer($productId){ + private function provisionServer($productId) + { switch ($productId) { case "A000001": case "A000002": @@ -493,41 +501,43 @@ class Provision extends BaseController return $primaryServer; } -/* - * -[A000001_SERVER] -172.16.4.92 + /* + * + [A000001_SERVER] + 172.16.4.92 -[A000002_SERVER] -172.16.4.92 + [A000002_SERVER] + 172.16.4.92 -[A000003_SERVER] -172.16.4.91 + [A000003_SERVER] + 172.16.4.91 -[A000004_SERVER] -172.16.4.91 + [A000004_SERVER] + 172.16.4.91 -[A000005_SERVER] -172.16.4.95 - */ - private function updateToNow($provisionUID){ + [A000005_SERVER] + 172.16.4.95 + */ + private function updateToNow($provisionUID) + { try { $mysql = "UPDATE members_products SET updated=now(), provision_status=provision_status+1 - WHERE uid::TEXT = '".$provisionUID."'"; + WHERE uid::TEXT = '" . $provisionUID . "'"; $query = $this->db->query($mysql); } catch (Exception $e) { - echo 'Caught exception: ', $e->getMessage(), "\n"; - log_message('critical', "***** ***** Provision Error:: updateToNow() ".$e->getMessage()); + echo 'Caught exception: ', $e->getMessage(), "\n"; + log_message('critical', "***** ***** Provision Error:: updateToNow() " . $e->getMessage()); } } - private function provisionActions($memberID, $provisionUID,$actionText){ + private function provisionActions($memberID, $provisionUID, $actionText) + { log_message('critical', "***** ***** Provision :: provisionActions($memberID, $provisionUID,$actionText) "); try { $mysql = "INSERT INTO provision_actions (member_id,product_uid,action) VALUES ($memberID,'$provisionUID', '$actionText')"; - log_message('critical', "***** ***** Provision :: provisionActions(QUERY) :: ".$mysql); + log_message('critical', "***** ***** Provision :: provisionActions(QUERY) :: " . $mysql); $query = $this->db->query($mysql); // TELL THE SOCKET TO REFRESH PAGE @@ -535,26 +545,27 @@ class Provision extends BaseController $data["provision_action"] = $actionText; $SOCKET_SERVER_LOCATION = $_ENV['SOCKET_SERVER_LOCATION']; - log_message('critical', "***** ***** Provision :: Action To :: ".$SOCKET_SERVER_LOCATION .'/broadcast/provisioning'); - $this->APIcall("GET", $SOCKET_SERVER_LOCATION .'/broadcast/provisioning', $data); + log_message('critical', "***** ***** Provision :: Action To :: " . $SOCKET_SERVER_LOCATION . '/broadcast/provisioning'); + $this->APIcall("GET", $SOCKET_SERVER_LOCATION . '/broadcast/provisioning', $data); - } catch ( \Exception $e) { - // echo 'Caught exception: ', $e->getMessage(), "\n"; - log_message('critical', "***** ***** Provision Error:: provisionActions() ".$e->getMessage()); + } catch (\Exception $e) { + // echo 'Caught exception: ', $e->getMessage(), "\n"; + log_message('critical', "***** ***** Provision Error:: provisionActions() " . $e->getMessage()); } return 0; } - public function releaseProvision(){ + public function releaseProvision() + { log_message('critical', "***** ***** ReleaseProvision :: Execute Actual Provisioning() "); $PROCESS_LIMIT = 2; $rsyncPass = "******noNEDD****"; - // $remote_composer_path = "chiefsoft@10.0.0.32:/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; - // $partMachineLocal = "/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; + // $remote_composer_path = "chiefsoft@10.0.0.32:/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; + // $partMachineLocal = "/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; $remote_composer_path = $_ENV['REMOTE_COMPOSER_PATH']; // "chiefsoft@10.0.0.32:/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; $partMachineLocal = $_ENV['PATH_MACHINE_LOCAL']; // "/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; - $ansibleToken = $this->ansibleLogin(); - $mysql ="SELECT pp.uid AS prov_uid, p.id AS mpid, + $ansibleToken = $this->ansibleLogin(); + $mysql = "SELECT pp.uid AS prov_uid, p.id AS mpid, p.product_id, pp.id AS plan_id, pp.uid , pp.provision_id, pp.play_file, p.uid AS member_product_uid , @@ -565,7 +576,7 @@ class Provision extends BaseController FROM provision_plans pp LEFT JOIN members_products p ON p.id =pp.provision_id WHERE p.provision_status = 1 - ORDER BY pp.updated ASC LIMIT ".$PROCESS_LIMIT; + ORDER BY pp.updated ASC LIMIT " . $PROCESS_LIMIT; $query = $this->db->query($mysql); $provision_list = $query->getResult(); foreach ($provision_list as $pr) { @@ -574,18 +585,18 @@ class Provision extends BaseController $provisionId = $pr->provision_id; $productId = $pr->product_id; $productUid = $pr->member_product_uid; - $playbook = $pr->product_id.".yml"; + $playbook = $pr->product_id . ".yml"; $provisionUID = $pr->prov_uid; $member_id = $pr->member_id; $internal_url = $pr->internal_url; $provision_port = $pr->provision_port; $members_product_id = $pr->mpid; - log_message('critical', "Members Product ID ***** ".$pr->mpid." Provision_Status == ". $pr->provision_status); + log_message('critical', "Members Product ID ***** " . $pr->mpid . " Provision_Status == " . $pr->provision_status); $this->updateToNow($productUid); // increase count not to repeat $ansible_host = $productId . "_SERVER"; - $ContainerName = $this->generatedContainerName($productId, $pr->mpid ); //$productId ."-SVR-". str_pad($pr->mpid, 10, "0", STR_PAD_LEFT); + $ContainerName = $this->generatedContainerName($productId, $pr->mpid); //$productId ."-SVR-". str_pad($pr->mpid, 10, "0", STR_PAD_LEFT); //$destinationHomeFolder = "/home/chiefsoft/SITES/" . $ContainerName; $destinationHomeFolder = $_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName; // $composer_template_path_local = $partMachineLocal . $provisionUID; @@ -602,9 +613,9 @@ class Provision extends BaseController // Remember this is in a CONTAINER so the path follows - $this_composer_part_location = "/var/www/html/ANSIBLE/parts/". $productUid; - if (!is_dir( $this_composer_part_location )) { - mkdir($this_composer_part_location , 0700); + $this_composer_part_location = "/var/www/html/ANSIBLE/parts/" . $productUid; + if (!is_dir($this_composer_part_location)) { + mkdir($this_composer_part_location, 0700); } // make sure we compose the docker compose to use @@ -619,12 +630,12 @@ class Provision extends BaseController $this->db->query("UPDATE provision_plans SET updated = now() WHERE id = $planId"); $this->db->query("UPDATE members_products SET p_file = p_file + 1 WHERE id = $provisionId"); - $params = [ - "template_id"=> 2, - "debug"=> false, - "dry_run"=> false, - "playbook"=> $playbook, - "environment"=> "{ + $params = [ + "template_id" => 2, + "debug" => false, + "dry_run" => false, + "playbook" => $playbook, + "environment" => "{ \"WHAT_HOST_IN_USE\":\"$ansible_host\", \"DESTINATION_FOLDER\":\"$destinationHomeFolder\", \"WHAT_PART_LOCAL\":\"$composer_template_path_local\", @@ -633,35 +644,35 @@ class Provision extends BaseController \"RSYNC_PASSWORD\":\"$rsyncPass\", \"CONTAINER_NAME\":\"$ContainerName\" }" - ]; - $ansibleReturn = $this->ansibleProvision($ansibleToken, $params); + ]; + $ansibleReturn = $this->ansibleProvision($ansibleToken, $params); - log_message('critical', "ANSIBLE RETURN ***** ".$ansibleReturn); - if ( $ansibleReturn === 200 ){ - log_message('critical', "Calling update_To_Completed ***** ".$ansibleReturn); - $this->update_To_Completed($productUid); - } - else{ - log_message('critical', "Calling WHY PATH update_To_Completed ***** ".$ansibleReturn); - $this->update_To_Completed($productUid); - } + log_message('critical', "ANSIBLE RETURN ***** " . $ansibleReturn); + if ($ansibleReturn === 200) { + log_message('critical', "Calling update_To_Completed ***** " . $ansibleReturn); + $this->update_To_Completed($productUid); + } else { + log_message('critical', "Calling WHY PATH update_To_Completed ***** " . $ansibleReturn); + $this->update_To_Completed($productUid); + } } return 0; } - private function update_To_Completed($provisionUID){ - log_message('critical', "update_To_Completed ******** ***** ".$provisionUID); + private function update_To_Completed($provisionUID) + { + log_message('critical', "update_To_Completed ******** ***** " . $provisionUID); try { $mysql = "UPDATE members_products SET updated=now(), provision_status=provision_status+1 , status = 7 WHERE status = 6 - AND uid::TEXT = '".$provisionUID."'"; + AND uid::TEXT = '" . $provisionUID . "'"; $query = $this->db->query($mysql); } catch (Exception $e) { - echo 'Caught exception: ', $e->getMessage(), "\n"; - log_message('critical', "***** ***** Provision Error:: updateToCompleted() ".$e->getMessage()); + echo 'Caught exception: ', $e->getMessage(), "\n"; + log_message('critical', "***** ***** Provision Error:: updateToCompleted() " . $e->getMessage()); } } @@ -685,7 +696,8 @@ class Provision extends BaseController // return 0; // } - public function directProvision(){ + public function directProvision() + { $mysql = "SELECT id AS plan_id, uid, provision_id, play_file from provision_plans ORDER BY updated ASC LIMIT 1 "; $query = $this->db->query($mysql); @@ -699,44 +711,44 @@ class Provision extends BaseController $this->db->query("UPDATE members_products SET p_file = p_file + 1 WHERE id = $provisionId"); //$this->runAnsibleShell($playFile); - try{ - log_message('critical', "***** ***** Provision :: runAnsibleShell($playFile) "); - $shellCommand ="ansible-playbook --vault-password-file /var/www/html/ANSIBLE/secrets.pass --key-file ~/.ssh/ansible_worker -i /var/www/html/ANSIBLE/inventory /var/www/html/ANSIBLE/$playFile"; - log_message('critical', $shellCommand); - $output = shell_exec($shellCommand ); - log_message('critical', "***** ***** Provision :: runAnsibleShell(output) AFTER SHELL RUN ".$output); - } catch ( \Exception $e){ - log_message('critical', "***** ***** Provision Error:: runAnsibleShell() ".$e->getMessage()); + try { + log_message('critical', "***** ***** Provision :: runAnsibleShell($playFile) "); + $shellCommand = "ansible-playbook --vault-password-file /var/www/html/ANSIBLE/secrets.pass --key-file ~/.ssh/ansible_worker -i /var/www/html/ANSIBLE/inventory /var/www/html/ANSIBLE/$playFile"; + log_message('critical', $shellCommand); + $output = shell_exec($shellCommand); + log_message('critical', "***** ***** Provision :: runAnsibleShell(output) AFTER SHELL RUN " . $output); + } catch (\Exception $e) { + log_message('critical', "***** ***** Provision Error:: runAnsibleShell() " . $e->getMessage()); } } - return 0; } - public function demo():string { + public function demo(): string + { $PROJECT_ID = 8; $result = "Unhandled exception"; $base_url = "http://172.16.4.90:3000"; - $cookies = tempnam('/tmp','cookie.txt'); + $cookies = tempnam('/tmp', 'cookie.txt'); # 1. Login $url = $base_url . "/api/auth/login"; - $ch = curl_init( $url ); + $ch = curl_init($url); # Setup request to send json via POST. - $payload = json_encode( array( "auth"=> "admin", "password" => "may12002" ) ); - curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload ); - curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); + $payload = json_encode(array("auth" => "admin", "password" => "may12002")); + curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); # Return response instead of printing. - curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); # Fetch the headers, not the body content: //curl_setopt($ch, CURLOPT_HEADER, true); // we want headers //curl_setopt($ch, CURLOPT_NOBODY, true); // we don't need body # Cookie jar - curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies); + curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); # Send request. @@ -752,8 +764,8 @@ class Provision extends BaseController # 2. Get token $url = $base_url . "/api/user/tokens"; - $ch = curl_init( $url ); - curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); $res = curl_exec($ch); @@ -763,7 +775,7 @@ class Provision extends BaseController $token = null; $arr = json_decode($res, true); foreach ($arr as $item) { - if ($item["expired"]===false) { + if ($item["expired"] === false) { $token = $item["id"]; break; } @@ -779,11 +791,11 @@ class Provision extends BaseController 'Accept: application/json', 'Authorization: Bearer ' . $token ]; - $ch = curl_init( $url ); - $payload = json_encode( array( "template_id"=> 1, "debug" => false, "dry_run" => false, "playbook" => "first-playbook.yml", "environment" => "{}" ) ); - curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload ); - curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); - curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); + $ch = curl_init($url); + $payload = json_encode(array("template_id" => 1, "debug" => false, "dry_run" => false, "playbook" => "first-playbook.yml", "environment" => "{}")); + curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result .= "\n" . 'Launch task HTTP code: ' . $httpcode; @@ -792,9 +804,9 @@ class Provision extends BaseController # 4. Get tasks $url = $base_url . "/api/project/$PROJECT_ID/tasks"; - $ch = curl_init( $url ); - curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); - curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result .= "\n" . 'Get tasks HTTP code: ' . $httpcode; @@ -811,7 +823,8 @@ class Provision extends BaseController } - public function configureURL(){ + public function configureURL() + { log_message('critical', "***** ***** Configure URL :: Set up URL access for product "); $limit = 1; $mysql = "SELECT id, uid, internal_url,primary_server,provision_port,url_status FROM members_products WHERE url_status = 0 LIMIT $limit"; @@ -826,7 +839,7 @@ class Provision extends BaseController log_message('critical', "***** ***** Configure URL Start ::: $provisionURL == $provisionServer:$provisionPort "); // Here call haproxy actions - list ($res, $message) = $this->configureHaproxyURL($provisionURL,$provisionServer,$provisionPort); + list ($res, $message) = $this->configureHaproxyURL($provisionURL, $provisionServer, $provisionPort); // TODO: Check $res for errors $mysql_close = "UPDATE members_products SET url_status = url_status + 1 WHERE id = $mbId "; $this->db->query($mysql_close); @@ -835,7 +848,8 @@ class Provision extends BaseController } - public function haproxy():string { + public function haproxy(): string + { // $limit = 1; // $mysql = "SELECT // internal_url, @@ -859,26 +873,27 @@ class Provision extends BaseController // } - list ($res, $message) = $this->configureHaproxyURL("23607.devprov.mermsemr.com","172.16.4.91","6603"); - var_dump($message); - log_message('critical',"Message => '".$message."'"); - return "Message:
".$message; + list ($res, $message) = $this->configureHaproxyURL("23607.devprov.mermsemr.com", "172.16.4.91", "6603"); + var_dump($message); + log_message('critical', "Message => '" . $message . "'"); + return "Message:
" . $message; } - public function configureHaproxyURL($provisionURL, $provisionServer, $provisionPort) { - $message = ""; - $base_url = $_ENV['HAPROXY_SERVER_URL']; //'http://172.16.4.99:5555'; - $username = $_ENV['HAPROXY_SERVER_USER']; //'admin'; - $password = $_ENV['HAPROXY_SERVER_PASS']; //'Hapr0xy001'; + public function configureHaproxyURL($provisionURL, $provisionServer, $provisionPort) + { + $message = ""; + $base_url = $_ENV['HAPROXY_SERVER_URL']; //'http://172.16.4.99:5555'; + $username = $_ENV['HAPROXY_SERVER_USER']; //'admin'; + $password = $_ENV['HAPROXY_SERVER_PASS']; //'Hapr0xy001'; - log_message('critical',"provisionURL => $provisionURL"); - log_message('critical',"provisionServer => $provisionServer"); - log_message('critical',"provisionPort => $provisionPort"); + log_message('critical', "provisionURL => $provisionURL"); + log_message('critical', "provisionServer => $provisionServer"); + log_message('critical', "provisionPort => $provisionPort"); $status_code = []; // 200 - list($status_code[0], $cfgver) = $this->getHaProxyCfgVer($base_url,$username,$password); + list($status_code[0], $cfgver) = $this->getHaProxyCfgVer($base_url, $username, $password); $cfgver0 = trim($cfgver); // Add backend @@ -901,7 +916,7 @@ curl -XPOST --user admin:Hapr0xy001 \ }' \ "http://172.16.4.99:5555/v3/services/haproxy/configuration/backends?version=$CFGVER" > backend.txt */ - $backend = "backend".$cfgver0; + $backend = "backend" . $cfgver0; $data = [ "name" => $backend, "mode" => "http", @@ -916,12 +931,12 @@ curl -XPOST --user admin:Hapr0xy001 \ ]; $uri = '/v3/services/haproxy/configuration/backends?version=' . $cfgver0; // 202 - list($status_code[1], $result) = $this->getHaProxyPost($base_url,$username,$password,$uri,$data); + list($status_code[1], $result) = $this->getHaProxyPost($base_url, $username, $password, $uri, $data); // TODO: check the status code // 200 - list($status_code[2], $cfgver) = $this->getHaProxyCfgVer($base_url,$username,$password); + list($status_code[2], $cfgver) = $this->getHaProxyCfgVer($base_url, $username, $password); $cfgver = trim($cfgver); // Add Server @@ -939,7 +954,7 @@ curl -XPOST --user admin:Hapr0xy001 \ "http://172.16.4.99:5555/v3//services/haproxy/configuration/backends/$BACKEND/servers?version=$CFGVER" > server.txt */ # test => "server4" - $server = "server".$cfgver0; + $server = "server" . $cfgver0; $data = [ "name" => $server, "address" => $provisionServer, @@ -947,29 +962,29 @@ curl -XPOST --user admin:Hapr0xy001 \ "check" => "enabled", "health_check_port" => (int)$provisionPort ]; - $uri = '/v3/services/haproxy/configuration/backends/'.$backend.'/servers?version=' . $cfgver; + $uri = '/v3/services/haproxy/configuration/backends/' . $backend . '/servers?version=' . $cfgver; // 202 - list($status_code[3], $result) = $this->getHaProxyPost($base_url,$username,$password,$uri,$data); + list($status_code[3], $result) = $this->getHaProxyPost($base_url, $username, $password, $uri, $data); // TODO: check the status code // 200 - list($status_code[4], $cfgver) = $this->getHaProxyCfgVer($base_url,$username,$password); + list($status_code[4], $cfgver) = $this->getHaProxyCfgVer($base_url, $username, $password); $cfgver = trim($cfgver); - // Add a new ACL to "http" frontend -/* -# https://www.haproxy.com/documentation/dataplaneapi/community/?v=v3#post-/services/haproxy/configuration/frontends/-parent_name-/acls/-index- -curl -X POST --user admin:Hapr0xy001 \ - -H 'Content-Type: application/json' -H 'Accept: application/json' \ - -d '{ - "acl_name": "acl'$CFGVER'", - "criterion": "req.hdr(Host)", - "value": "23233.devprov.mermsemr.com" - }' \ - "http://172.16.4.99:5555/v3/services/haproxy/configuration/frontends/http/acls/0?version=$CFGVER" -*/ - $acl = "acl".$cfgver0; + // Add a new ACL to "http" frontend + /* + # https://www.haproxy.com/documentation/dataplaneapi/community/?v=v3#post-/services/haproxy/configuration/frontends/-parent_name-/acls/-index- + curl -X POST --user admin:Hapr0xy001 \ + -H 'Content-Type: application/json' -H 'Accept: application/json' \ + -d '{ + "acl_name": "acl'$CFGVER'", + "criterion": "req.hdr(Host)", + "value": "23233.devprov.mermsemr.com" + }' \ + "http://172.16.4.99:5555/v3/services/haproxy/configuration/frontends/http/acls/0?version=$CFGVER" + */ + $acl = "acl" . $cfgver0; $data = [ "acl_name" => $acl, "criterion" => "req.hdr(Host)", @@ -977,26 +992,26 @@ curl -X POST --user admin:Hapr0xy001 \ ]; $uri = '/v3/services/haproxy/configuration/frontends/http/acls/0?version=' . $cfgver; // 202 - list($status_code[5], $result) = $this->getHaProxyPost($base_url,$username,$password,$uri,$data); + list($status_code[5], $result) = $this->getHaProxyPost($base_url, $username, $password, $uri, $data); // TODO: check the status code // 200 - list($status_code[6], $cfgver) = $this->getHaProxyCfgVer($base_url,$username,$password); + list($status_code[6], $cfgver) = $this->getHaProxyCfgVer($base_url, $username, $password); $cfgver = trim($cfgver); - // Add a new Backend Switching Rule to "http" frontend for "use_backend" -/* -# https://www.haproxy.com/documentation/dataplaneapi/community/?v=v3#post-/services/haproxy/configuration/frontends/-parent_name-/backend_switching_rules/-index- -curl -X POST --user admin:Hapr0xy001 \ - -H 'Content-Type: application/json' -H 'Accept: application/json' \ - -d '{ - "name": "'$BACKEND'", - "cond": "if", - "cond_test": "'$ACL'" - }' \ - "http://172.16.4.99:5555/v3/services/haproxy/configuration/frontends/http/backend_switching_rules/0?version=$CFGVER" > use_backend.txt -*/ + // Add a new Backend Switching Rule to "http" frontend for "use_backend" + /* + # https://www.haproxy.com/documentation/dataplaneapi/community/?v=v3#post-/services/haproxy/configuration/frontends/-parent_name-/backend_switching_rules/-index- + curl -X POST --user admin:Hapr0xy001 \ + -H 'Content-Type: application/json' -H 'Accept: application/json' \ + -d '{ + "name": "'$BACKEND'", + "cond": "if", + "cond_test": "'$ACL'" + }' \ + "http://172.16.4.99:5555/v3/services/haproxy/configuration/frontends/http/backend_switching_rules/0?version=$CFGVER" > use_backend.txt + */ $data = [ "name" => $backend, "cond" => "if", @@ -1004,32 +1019,33 @@ curl -X POST --user admin:Hapr0xy001 \ ]; $uri = '/v3/services/haproxy/configuration/frontends/http/backend_switching_rules/0?version=' . $cfgver; // 202 - list($status_code[7], $result) = $this->getHaProxyPost($base_url,$username,$password,$uri,$data); + list($status_code[7], $result) = $this->getHaProxyPost($base_url, $username, $password, $uri, $data); // TODO: check the status code // 200 - list($status_code[8], $cfgver) = $this->getHaProxyCfgVer($base_url,$username,$password); + list($status_code[8], $cfgver) = $this->getHaProxyCfgVer($base_url, $username, $password); $cfgver = trim($cfgver); $codes = ""; - foreach ($status_code as $i=>$code) { - $codes .= "\n$i => $code"; + foreach ($status_code as $i => $code) { + $codes .= "\n$i => $code"; } - return [$status_code[7],"
FIRST CFGVER=$cfgver0\n\n--- CODES: ----$codes\n\nLAST CFGVER=$cfgver
"]; + return [$status_code[7], "
FIRST CFGVER=$cfgver0\n\n--- CODES: ----$codes\n\nLAST CFGVER=$cfgver
"]; } - private function getHaproxyPost($base_url,$username,$password,$uri,$data) { + private function getHaproxyPost($base_url, $username, $password, $uri, $data) + { $url = $base_url . $uri; $payload = json_encode($data); $headers = array( 'Content-Type:application/json', - 'Authorization: Basic '. base64_encode("$username:$password") // <--- + 'Authorization: Basic ' . base64_encode("$username:$password") // <--- ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds - curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); @@ -1038,7 +1054,7 @@ curl -X POST --user admin:Hapr0xy001 \ //$streamVerboseHandle = fopen('php://temp', 'w+'); //curl_setopt($ch, CURLOPT_STDERR, $streamVerboseHandle); // End Debug - $result = curl_exec ($ch); + $result = curl_exec($ch); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code if ($result === FALSE) { $result = sprintf("cUrl error (#%d): %s
\n", curl_errno($ch), htmlspecialchars(curl_error($ch))); @@ -1049,26 +1065,28 @@ curl -X POST --user admin:Hapr0xy001 \ //$result .= "\ncUrl verbose information:\n
" . htmlspecialchars($verboseLog) . "
\n"; //$result .= "
$payload
\n"; // End Debug - curl_close ($ch); + curl_close($ch); return [$status_code, $result]; } - private function getHaproxyGet($base_url,$username,$password,$uri) { + private function getHaproxyGet($base_url, $username, $password, $uri) + { $url = $base_url . $uri; $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL,$url); + curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds - curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); - $result = curl_exec ($ch); + $result = curl_exec($ch); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code - curl_close ($ch); + curl_close($ch); return [$status_code, $result]; } - private function getHaproxyCfgVer($base_url,$username,$password) { - return $this->getHaproxyGet($base_url,$username,$password,'/v3/services/haproxy/configuration/version'); + private function getHaproxyCfgVer($base_url, $username, $password) + { + return $this->getHaproxyGet($base_url, $username, $password, '/v3/services/haproxy/configuration/version'); } }