diff --git a/app/Controllers/Provision.php b/app/Controllers/Provision.php index 074e973..0195b29 100644 --- a/app/Controllers/Provision.php +++ b/app/Controllers/Provision.php @@ -32,6 +32,9 @@ class Provision extends BaseController log_message('critical', "***** ***** prepareProvision :: Populate HAPROXY for URL "); $this->configureURL(); + log_message('critical', "***** ***** scheduleRefreshAction :: Refresh Requested Sites "); + $this->scheduleRefreshAction(); + return 0; } @@ -193,8 +196,123 @@ class Provision extends BaseController $this->registerProvision($subscriptionId,$prov_name); $this->provisionActions($memberID, $provisionUID, "Auto Configuration Started"); } + return 0; + } - return view('welcome_message'); + private function scheduleRefreshAction(){ + $mysql = "SELECT * FROM member_product_refresh WHERE product_id IN ('A000001','A0000012') 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); + $subscriptionUId = $pr->subscription_uid; + $this->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, + p.product_id, pp.id AS plan_id, pp.uid , + pp.provision_id, pp.play_file, + p.uid AS member_product_uid , + p.member_id AS member_id , + p.internal_url , + p.provision_port, + p.provision_status + FROM provision_plans pp + LEFT JOIN members_products p ON p.id =pp.provision_id + WHERE p.uid = '$subscriptionUId' "; + + $query = $this->db->query($mysql); + $provision_list = $query->getResult(); + foreach ($provision_list as $pr) { + $playFile = $pr->play_file; + $planId = $pr->plan_id; + $provisionId = $pr->provision_id; + $productId = $pr->product_id; + $productUid = $pr->member_product_uid; + $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); + $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); + //$destinationHomeFolder = "/home/chiefsoft/SITES/" . $ContainerName; + $destinationHomeFolder = $_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName; +// $composer_template_path_local = $partMachineLocal . $provisionUID; +// $composer_template_path_remote = $remote_composer_path . $provisionUID; + + $composer_template_path_local = $partMachineLocal . $productUid; + $composer_template_path_remote = $remote_composer_path . $productUid; + +// $ansible_transport_path = $pr->provision_uid; // $ContainerName; + $ansible_transport_path = $productUid; // $ContainerName; + + // let us make sure all we promise are availale + //"WHAT_PART_LOCAL + + + // 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); + } + + // make sure we compose the docker compose to use + $this->prepareDockerComposer( + $members_product_id, + $provision_port, + $productId, + $productUid, + $member_id, + $internal_url + ); + + $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"=> "{ + \"WHAT_HOST_IN_USE\":\"$ansible_host\", + \"DESTINATION_FOLDER\":\"$destinationHomeFolder\", + \"WHAT_PART_LOCAL\":\"$composer_template_path_local\", + \"WHAT_PART_REMOTE\":\"$composer_template_path_remote\", + \"ANSIBLE_TRANSPORT_PATH\":\"$ansible_transport_path\", + \"RSYNC_PASSWORD\":\"$rsyncPass\", + \"CONTAINER_NAME\":\"$ContainerName\" + }" + ]; + $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); + } + } + return 0; } private function prepareDockerComposer(