/
create-backup.php
75 lines (66 loc) · 2 KB
/
create-backup.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
/**
* @file
* Deployment script using Acquia Cloud PHP SDK.
*
* The following environment variables must be set:
* - ACQUIA_CLOUD_USERNAME / ACQUIA_CLOUD_PASSWORD
* - ACQUIA_CLOUD_ENVIRONMENT (e.g. 'dev', 'test', 'prod')
* - ACQUIA_CLOUD_SITENAME (e.g. 'sitename')
*
*/
require_once 'vendor/autoload.php';
// Buffer output.
ob_start();
use Acquia\Cloud\Api\CloudApiClient;
// Build Cloud API client connection.
$cloudapi = CloudApiClient::factory(array(
'username' => getenv('ACQUIA_CLOUD_USERNAME'),
'password' => getenv('ACQUIA_CLOUD_PASSWORD'),
));
// Set up other required variables.
$environment = getenv('ACQUIA_CLOUD_ENVIRONMENT');
$site = getenv('ACQUIA_CLOUD_SITENAME');
$destination = getenv('ACQUIA_CLOUD_DATABASE_DESTINATION');
// Create a database backup (wait for completion).
update_console('Backing up database in ' . $environment . ' environment...');
$backup = $cloudapi->createDatabaseBackup('devcloud:' . $site, $environment, $site);
if (wait_for_task_to_complete($cloudapi, 'devcloud:' . $site, $backup->id())) {
update_console('...complete!');
$result = json_decode($cloudapi->task('devcloud:' . $site, $backup->id())->result());
$bid = $result->backupid;
}
$download = $cloudapi->downloadDatabaseBackup('devcloud:' . $site, $environment, $site, $bid, $destination . 'ac-dump.sql.gz');
/**
* Pause until a given task is completed.
*
* @param int $id
* The task ID.
*
* @todo - This currently will loop infinitely if you pass an invalid task id.
* Consider fixing that ;-)
*/
function wait_for_task_to_complete($cloudapi, $site, $id = 0) {
$task_complete = FALSE;
while ($task_complete !== TRUE) {
$task_status = $cloudapi->task($site, $id);
if ($task_status->state() == 'done') {
$task_complete = TRUE;
}
else {
sleep(5);
}
}
return $task_complete;
}
/**
* Post a string to the console mid-script.
*
* @param string $text
*/
function update_console($text) {
echo $text . "\n";
ob_flush();
}
// Flush all output.
ob_end_flush();