Skip to content

Commit e9ab43e

Browse files
committed
feat(serverbackup): add examples
relates to STACKITSDK-252
1 parent 6537235 commit e9ab43e

File tree

3 files changed

+192
-0
lines changed

3 files changed

+192
-0
lines changed

examples/serverbackup/build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
dependencies {
2+
implementation project (':services:iaas')
3+
implementation project (':services:serverbackup')
4+
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
5+
}
6+
7+
ext.mainClassName = 'cloud.stackit.sdk.serverbackup.examples.ServerBackupExample'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
package cloud.stackit.sdk.serverbackup.examples;
2+
3+
import cloud.stackit.sdk.core.exception.ApiException;
4+
import cloud.stackit.sdk.iaas.api.IaasApi;
5+
import cloud.stackit.sdk.iaas.model.*;
6+
import cloud.stackit.sdk.serverbackup.api.ServerBackupApi;
7+
import cloud.stackit.sdk.serverbackup.model.*;
8+
import cloud.stackit.sdk.serverbackup.model.Backup;
9+
import cloud.stackit.sdk.serverbackup.model.CreateBackupPayload;
10+
import java.io.IOException;
11+
import java.util.*;
12+
import java.util.concurrent.TimeUnit;
13+
import java.util.stream.Collectors;
14+
15+
final class ServerBackupExample {
16+
private static final String REGION = "eu01";
17+
18+
private ServerBackupExample() {}
19+
20+
@SuppressWarnings({
21+
"PMD.CyclomaticComplexity",
22+
"PMD.CognitiveComplexity",
23+
"PMD.NPathComplexity",
24+
"PMD.NcssCount",
25+
"PMD.SystemPrintln",
26+
"PMD.AvoidThrowingRawExceptionTypes"
27+
})
28+
public static void main(String[] args) throws IOException {
29+
/*
30+
* Credentials are read from the credentialsFile in `~/.stackit/credentials.json` or the env
31+
* STACKIT_SERVICE_ACCOUNT_KEY_PATH / STACKIT_SERVICE_ACCOUNT_KEY
32+
* */
33+
IaasApi iaasApi = new IaasApi();
34+
ServerBackupApi serverBackupApi = new ServerBackupApi();
35+
36+
// the id of your STACKIT project, read from env var for this example
37+
String projectIdString = System.getenv("STACKIT_PROJECT_ID");
38+
if (projectIdString == null || projectIdString.isEmpty()) {
39+
System.err.println("Environment variable 'STACKIT_PROJECT_ID' not found.");
40+
return;
41+
}
42+
UUID projectId = UUID.fromString(projectIdString);
43+
44+
// the id of your STACKIT server, read from env var for this example
45+
String serverIdString = System.getenv("STACKIT_SERVER_ID");
46+
if (serverIdString == null || serverIdString.isEmpty()) {
47+
System.err.println("Environment variable 'STACKIT_SERVER_ID' not found.");
48+
return;
49+
}
50+
UUID serverId = UUID.fromString(serverIdString);
51+
52+
try {
53+
Server server = iaasApi.getServer(projectId, serverId, true);
54+
assert server.getId() != null;
55+
assert server.getVolumes() != null;
56+
57+
// enable the backup service for the server
58+
serverBackupApi.enableServiceResource(
59+
projectIdString,
60+
server.getId().toString(),
61+
REGION,
62+
new EnableServiceResourcePayload());
63+
64+
// BACKUP POLICIES
65+
66+
// list backup policies
67+
GetBackupPoliciesResponse policies =
68+
serverBackupApi.listBackupPolicies(projectIdString);
69+
assert policies.getItems() != null;
70+
System.out.println("\nAvailable backup policies: ");
71+
for (BackupPolicy p : policies.getItems()) {
72+
System.out.println(p.getId() + " | " + p.getName());
73+
}
74+
75+
// BACKUP SCHEDULES
76+
77+
List<String> volumeIds =
78+
server.getVolumes().stream().map(UUID::toString).collect(Collectors.toList());
79+
80+
// create new backup schedule
81+
BackupSchedule newBackupSchedule =
82+
serverBackupApi.createBackupSchedule(
83+
projectIdString,
84+
server.getId().toString(),
85+
REGION,
86+
new CreateBackupSchedulePayload()
87+
.name("java-sdk-example-backup-schedule")
88+
.enabled(true)
89+
.rrule(
90+
"DTSTART;TZID=Europe/Sofia:20200803T023000 RRULE:FREQ=DAILY;INTERVAL=1")
91+
.backupProperties(
92+
new BackupProperties()
93+
.name("java-sdk-example-backup")
94+
.retentionPeriod(5)
95+
.volumeIds(volumeIds)));
96+
97+
// list backup schedules
98+
GetBackupSchedulesResponse backupSchedules =
99+
serverBackupApi.listBackupSchedules(
100+
projectIdString, server.getId().toString(), REGION);
101+
System.out.println("\nAvailable backup schedules: ");
102+
assert backupSchedules.getItems() != null;
103+
for (BackupSchedule s : backupSchedules.getItems()) {
104+
System.out.println(s.getId() + " | " + s.getName());
105+
}
106+
107+
// delete backup schedule
108+
serverBackupApi.deleteBackupSchedule(
109+
projectIdString,
110+
server.getId().toString(),
111+
REGION,
112+
newBackupSchedule.getId().toString());
113+
114+
// BACKUPS
115+
116+
// create backup
117+
BackupJob newBackup =
118+
serverBackupApi.createBackup(
119+
projectIdString,
120+
server.getId().toString(),
121+
REGION,
122+
new CreateBackupPayload()
123+
.name("java-sdk-example-single-backup")
124+
.retentionPeriod(5)
125+
.volumeIds(volumeIds));
126+
127+
// wait for creation of the backup
128+
System.out.println("\nWaiting for backup creation...");
129+
Backup.StatusEnum backupStatus;
130+
do {
131+
TimeUnit.SECONDS.sleep(30);
132+
Backup backup =
133+
serverBackupApi.getBackup(
134+
projectIdString,
135+
server.getId().toString(),
136+
REGION,
137+
newBackup.getId());
138+
backupStatus = backup.getStatus();
139+
} while (backupStatus == Backup.StatusEnum.IN_PROGRESS);
140+
System.out.println(backupStatus);
141+
142+
// list backups
143+
GetBackupsListResponse backups =
144+
serverBackupApi.listBackups(projectIdString, server.getId().toString(), REGION);
145+
System.out.println("\nAvailable backups: ");
146+
assert backups.getItems() != null;
147+
for (Backup b : backups.getItems()) {
148+
System.out.println(b.getId() + " | " + b.getName());
149+
}
150+
151+
// trigger restore of a backup
152+
serverBackupApi.restoreBackup(
153+
projectIdString,
154+
server.getId().toString(),
155+
REGION,
156+
newBackup.getId(),
157+
new RestoreBackupPayload().startServerAfterRestore(true).volumeIds(volumeIds));
158+
159+
// wait for restore of the backup
160+
System.out.println("\nWaiting for backup restore...");
161+
do {
162+
TimeUnit.SECONDS.sleep(5);
163+
Backup backup =
164+
serverBackupApi.getBackup(
165+
projectIdString,
166+
server.getId().toString(),
167+
REGION,
168+
newBackup.getId());
169+
backupStatus = backup.getStatus();
170+
} while (backupStatus == Backup.StatusEnum.IN_PROGRESS);
171+
172+
// delete backup
173+
serverBackupApi.deleteBackup(
174+
projectIdString, server.getId().toString(), REGION, newBackup.getId(), true);
175+
176+
// disable the backup service for the server
177+
serverBackupApi.disableServiceResource(
178+
projectIdString, server.getId().toString(), REGION);
179+
180+
} catch (ApiException | InterruptedException e) {
181+
throw new RuntimeException(e);
182+
}
183+
}
184+
}

0 commit comments

Comments
 (0)