Provision Socket Calls

This commit is contained in:
CHIEFSOFT\ameye
2026-05-19 12:41:57 -04:00
parent 37f1326f22
commit 317ee76c3e
+37 -107
View File
@@ -188,7 +188,7 @@ class Provision extends BaseController
$this->registerProvision($subscriptionId, $prov_name);
$this->provisionActions($memberID, $subscriptionUId, "Auto Configuration Started");
$this->create_provision_action($memberID, $subscriptionUId, "Auto Configuration Started", false);
}
return 0;
}
@@ -436,8 +436,8 @@ class Provision extends BaseController
$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);
$subscriptionUId = $pr->subscription_uid;
$this->db->query("UPDATE member_product_refresh SET status = status + 1 WHERE id = " . $pr->id);
$this->auditProvisionPlans($subscriptionUId);
if ($this->refreshProvision($subscriptionUId) == 100) {
log_message('critical', "***** ***** scheduleRefreshAction Started:: () ");
@@ -523,7 +523,7 @@ class Provision extends BaseController
$members_product_id = $pr->mpid;
$this->provisionActions($member_id, $subscriptionUId, "Rebuilding Provision Started ");
$this->create_provision_action($member_id, $subscriptionUId, "Rebuilding Provision Started ");
log_message('critical', "Members Product ID ***** " . $pr->mpid . " Provision_Status == " . $pr->provision_status);
@@ -548,7 +548,7 @@ class Provision extends BaseController
}
// make sure we compose the docker compose to use
$this->prepareDockerComposer(
$this->prepare_provision_docker_composer(
$members_product_id,
$provision_port,
$productId,
@@ -581,17 +581,17 @@ class Provision extends BaseController
log_message('critical', "ANSIBLE RETURN ***** " . $ansibleReturn);
if ($ansibleReturn === 200) {
log_message('critical', "Calling update_To_Completed ***** " . $ansibleReturn);
$this->update_To_Completed($productUid);
$this->update_provision_to_completed($productUid);
} else {
log_message('critical', "Calling WHY PATH update_To_Completed ***** " . $ansibleReturn);
$this->update_To_Completed($productUid);
$this->update_provision_to_completed($productUid);
}
$this->provisionActions($member_id, $subscriptionUId, "Rebuilding Provision Completed ");
$this->create_provision_action($member_id, $subscriptionUId, "Rebuilding Provision Completed", true);
}
return 100;
}
private function prepareDockerComposer(
private function prepare_provision_docker_composer(
$members_product_id,
$members_product_port,
$product_id,
@@ -638,74 +638,20 @@ class Provision extends BaseController
$destinationHomeFolder = $_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName;
$composer_template_contents = file_get_contents($composer_template_path);
// Do the processing
// $composer_template_contents = str_replace("WHAT_CONTAINER_NAME", $ContainerName, $composer_template_contents);
// //$destinationHomeFolder = "/home/chiefsoft/SITES/" . $ContainerName;
// $SITE_CONTENTS_GATEWAY = $_ENV['SITE_CONTENTS_GATEWAY'];
// $SITE_CONTACT_GATEWAY = $_ENV['SITE_CONTACT_GATEWAY'];
// $MYSQL_PROVISION_DATABASE_PORT = $_ENV['PROVISION_MSQL_DATABASE_IP'] . ":" . $_ENV['PROVISION_MSQL_DATABASE_PORT']; // "172.16.4.96:3307";
// $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", $MYSQL_PROVISION_DATABASE_PORT, $composer_template_contents);
// $composer_template_contents = str_replace("PROVISION_UID_REPLACE", $provisionUID, $composer_template_contents);
// $composer_template_contents = str_replace("PROVISION_IMAGE_NAME_REPLACE", "registry.chiefsoft.com/pweb/pweb-01-merms-pweb0006c:latest", $composer_template_contents);
// $composer_template_contents = str_replace("SITE_CONTENTS_URL_REPLACE", $SITE_CONTENTS_GATEWAY, $composer_template_contents);
// $composer_template_contents = str_replace("SITE_CONTACT_URL_REPLACE", $SITE_CONTACT_GATEWAY, $composer_template_contents);
//
//
// $templateRandom = 'P' . rand(1, 6);
// $composer_template_contents = str_replace("TEMPLATE_NAME_REPLACE", $templateRandom, $composer_template_contents);
//
$composer_template_contents = $this->prepareTemplateFile($composer_template_contents, $ContainerName, $allocatedPort, $provisionUID, $ansible_folder, $productId, $internal_url, $members_product_id);
//Save to the specific path
// $composerFile = fopen($destination_composer_path, "w") or die("Unable to open file!");
// fwrite($composerFile, $composer_template_contents);
// fclose($composerFile);
// GET THE TEMPLATE FOR THIS PROVISIONING
/*
$template_content = file_get_contents($template_file);
$template_content_processed = str_replace("WHAT_HOST_IN_USE", $productId . "_SERVER", $template_content);
$template_content_processed = str_replace("WHAT_PART_FOLDER", $partFolder, $template_content_processed);
$template_content_processed = str_replace("DESTINATION_FOLDER", $destinationHomeFolder, $template_content_processed);
$template_content_processed = str_replace("WHAT_PART_LOCAL", $composer_template_path_local, $template_content_processed); // depends on the local machine
// CREATE PROVISOINING FILE
$myfile = fopen($ansible_folder . "/" . $prov_name, "w") or die("Unable to open file!");
fwrite($myfile, $template_content_processed);
fclose($myfile);
*/
}
private function registerProvision($subscriptionId, $prov_name): int
private function registerProvision($subscriptionId, $prov_name): void
{
/*
CREATE TABLE provision_plans (
id SERIAL,
uid uuid DEFAULT uuid_generate_v4(),
provision_id INT REFERENCES members_products(id),
play_file VARCHAR(100)UNIQUE NOT NULL,
msg VARCHAR(100) ,
added timestamp without time zone DEFAULT now(),
updated timestamp without time zone DEFAULT now()
);
ALTER TABLE ONLY provision_plans
ADD CONSTRAINT provision_plans_id_key UNIQUE (id);
*/
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());
}
return 0;
}
private function allocatePortNo()
private function allocatePortNo(): void
{
$list_limit = 2;
$mysql = "SELECT id, member_id, uid, internal_url,product_id,status,provision_port,updated
@@ -725,7 +671,7 @@ class Provision extends BaseController
$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");
$this->create_provision_action($memberID, $provisionUID, "Allocating Provisioning Ports");
}
//Now let us try fix hanging stuffs
@@ -841,12 +787,26 @@ class Provision extends BaseController
}
}
private function provisionActions($memberID, $provisionUID, $actionText): int
private function create_provision_action($memberID, $provisionUID, $actionText, $completedAction = false): void
{
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);
if ($completedAction) {
$percent_completed = 100;
} else {
$percent_completed = 10;
$mysql_find = "SELECT * FROM provision_actions WHERE product_uid = '$provisionUID' ORDER BY id DESC limit 1";
$query_find = $this->db->query($mysql_find);
$row = $query_find->getResult();
if (count($row) > 0) {
$percent_completed = $row['percent_completed'];
$percent_completed = $percent_completed + 10;
}
}
if ($percent_completed > 100) $percent_completed = 1000;
$mysql = "INSERT INTO provision_actions (member_id,product_uid,action ,percent_completed) VALUES ($memberID,'$provisionUID','$actionText', $percent_completed)";
log_message('info', "***** ***** Provision :: provisionActions(QUERY) :: " . $mysql);
$query = $this->db->query($mysql);
// TELL THE SOCKET TO REFRESH PAGE
@@ -854,26 +814,17 @@ class Provision extends BaseController
$data["provision_action"] = urlencode($actionText);
$SOCKET_SERVER_LOCATION = $_ENV['SOCKET_SERVER_LOCATION'];
log_message('critical', "***** ***** Provision :: Action To :: " . $SOCKET_SERVER_LOCATION . '/broadcast/provisioning');
log_message('info', "***** ***** Provision :: Action To :: " . $SOCKET_SERVER_LOCATION . '/broadcast/provisioning');
$this->APIcall("GET", $SOCKET_SERVER_LOCATION . '/broadcast/provisioning', $data);
} catch (\Exception $e) {
log_message('critical', "***** ***** Provision Error:: provisionActions() " . $e->getMessage());
}
return 0;
}
/*
// $data["product_uid"] = "bea86662-adb3-4c09-816b-014f450d9713"; // 3cc24fd6-e6c7-4c08-8a64-f06e3f790f38
$data["product_uid"] = "3cc24fd6-e6c7-4c08-8a64-f06e3f790f38"; //
$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);
*/
public function releaseProvision()
public function releaseProvision(): int
{
log_message('critical', "***** ***** ReleaseProvision :: Execute Actual Provisioning() ");
log_message('info', "***** ***** ReleaseProvision :: Execute Actual Provisioning() ");
$PROCESS_LIMIT = 2;
$rsyncPass = "******noNEDD****";
// $remote_composer_path = "chiefsoft@10.0.0.32:/home/chiefsoft/MermsProvision/ANSIBLE/parts/";
@@ -908,7 +859,7 @@ class Provision extends BaseController
$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('info', "Members Product ID ***** " . $pr->mpid . " Provision_Status == " . $pr->provision_status);
$this->updateToNow($productUid); // increase count not to repeat
$ansible_host = $productId . "_SERVER";
@@ -935,7 +886,7 @@ class Provision extends BaseController
}
// make sure we compose the docker compose to use
$this->prepareDockerComposer(
$this->prepare_provision_docker_composer(
$members_product_id,
$provision_port,
$productId,
@@ -967,16 +918,16 @@ class Provision extends BaseController
log_message('critical', "ANSIBLE RETURN ***** " . $ansibleReturn);
if ($ansibleReturn === 200) {
log_message('critical', "Calling update_To_Completed ***** " . $ansibleReturn);
$this->update_To_Completed($productUid);
$this->update_provision_to_completed($productUid);
} else {
log_message('critical', "Calling WHY PATH update_To_Completed ***** " . $ansibleReturn);
$this->update_To_Completed($productUid);
$this->update_provision_to_completed($productUid);
}
}
return 0;
}
private function update_To_Completed($provisionUID)
private function update_provision_to_completed($provisionUID): void
{
log_message('critical', "update_To_Completed ******** ***** " . $provisionUID);
try {
@@ -993,27 +944,8 @@ class Provision extends BaseController
}
}
// public function runAnsibleShell($provisionFile){
// try{
// log_message('critical', "***** ***** Provision :: runAnsibleShell($provisionFile) ");
// $shellCommand ="/var/www/html/ANSIBLE/auto_play.sh A000001.yml OLU AMEYE "; ///var/www/html/ANSIBLE/$provisionFile";
// log_message('critical', $shellCommand);
// $output = shell_exec($shellCommand );
// log_message('critical', "***** ***** Provision :: runAnsibleShell(output) AFTER SHELL RUN ".serialize($output));
//
//// $shellCommand ="ansible-playbook --vault-password-file /var/www/html/ANSIBLE/secrets.pass --key-file ~/.ssh/ansible_worker -i /var/www/html/ANSIBLE/inventory $provisionFile";
//// log_message('critical', $shellCommand);
////
//// $output = shell_exec($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 directProvision()
public function directProvision(): int
{
$mysql = "SELECT id AS plan_id, uid, provision_id, play_file from provision_plans ORDER BY updated ASC LIMIT 1 ";
@@ -1038,8 +970,6 @@ class Provision extends BaseController
log_message('critical', "***** ***** Provision Error:: runAnsibleShell() " . $e->getMessage());
}
}
return 0;
}