Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ed12c28

Browse filesBrowse files
feat(iaas): add VPC example, write changelog, bump version
1 parent 1b7cf01 commit ed12c28
Copy full SHA for ed12c28

502 files changed

+20,790-3,089Lines changed: 20790 additions & 3089 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Dismiss banner
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎CHANGELOG.md‎

Copy file name to clipboardExpand all lines: CHANGELOG.md
+13Lines changed: 13 additions & 0 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
## Release (YYYY-MM-DD)
22
- `alb`: [v0.6.0](services/alb/CHANGELOG.md#v060)
33
- **Breaking change:** Remove `v2beta` API
4+
- `iaas`: [v1.3.0](services/iaas/CHANGELOG.md#v130)
5+
- new example for managing `VPCs` with the `v2alpha1api`
6+
- `v1api`
7+
- **Braking Change:** remove deprecated operations: `updateImageScopeLocal`, `updateImageScopePublic`
8+
- **Feature:** add attribute `vtpm` (new model `ServerVTPM`) to model `Server`
9+
- **Feature:** add attribute `availabilityZone` to model `Snapshot`
10+
- `v2alpha1api`
11+
- **Feature:** add operations and models to manage `VPCs`
12+
- `v2api`
13+
- **Feature:** add attribute `vpcNetworkRangeId` to models `NetworkIPv4` `NetworkIPv6`
14+
- **Feature:** add attribute `vpcId` to model `Network`,
15+
- **Feature:** add attribute `vtpm` (new model `ServerVTPM`) to model `Server`,
16+
- **Feature:** add attribute `availabilityZone` to model `Snapshot`,
417

518
## Release (2026-04-28)
619
- `alb`: [v0.5.0](services/alb/CHANGELOG.md#v050)
Collapse file

‎examples/iaas/build.gradle‎

Copy file name to clipboardExpand all lines: examples/iaas/build.gradle
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
dependencies {
22
implementation project (':services:iaas')
3+
implementation project (':services:resourcemanager')
34
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
45
}
56

Collapse file
+291Lines changed: 291 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,291 @@
1+
package cloud.stackit.sdk.iaas.examples;
2+
3+
import cloud.stackit.sdk.core.exception.ApiException;
4+
import cloud.stackit.sdk.iaas.v2alpha1api.api.IaasApi;
5+
import cloud.stackit.sdk.iaas.v2alpha1api.model.AddVPCRoutingTablePayload;
6+
import cloud.stackit.sdk.iaas.v2alpha1api.model.AddVPCStaticRoutePayload;
7+
import cloud.stackit.sdk.iaas.v2alpha1api.model.AddVPCStaticRoutePayloadDestination;
8+
import cloud.stackit.sdk.iaas.v2alpha1api.model.AddVPCStaticRoutePayloadNexthop;
9+
import cloud.stackit.sdk.iaas.v2alpha1api.model.CreateVPCPayload;
10+
import cloud.stackit.sdk.iaas.v2alpha1api.model.CreateVPCRegionPayload;
11+
import cloud.stackit.sdk.iaas.v2alpha1api.model.DestinationCIDRv4;
12+
import cloud.stackit.sdk.iaas.v2alpha1api.model.NetworkRangeIPv4Request;
13+
import cloud.stackit.sdk.iaas.v2alpha1api.model.NexthopInternet;
14+
import cloud.stackit.sdk.iaas.v2alpha1api.model.RegionalVPC;
15+
import cloud.stackit.sdk.iaas.v2alpha1api.model.Route;
16+
import cloud.stackit.sdk.iaas.v2alpha1api.model.VPC;
17+
import cloud.stackit.sdk.iaas.v2alpha1api.model.VPCNetworkRange;
18+
import cloud.stackit.sdk.iaas.v2alpha1api.model.VPCRoutingTable;
19+
import cloud.stackit.sdk.resourcemanager.v0api.api.ResourceManagerApi;
20+
import cloud.stackit.sdk.resourcemanager.v0api.model.CreateProjectPayload;
21+
import cloud.stackit.sdk.resourcemanager.v0api.model.Member;
22+
import cloud.stackit.sdk.resourcemanager.v0api.model.Project;
23+
import cloud.stackit.sdk.resourcemanager.v0api.wait.ResourcemanagerWait;
24+
import java.io.IOException;
25+
import java.util.HashMap;
26+
import java.util.HashSet;
27+
import java.util.Map;
28+
import java.util.Set;
29+
import java.util.concurrent.TimeUnit;
30+
31+
@SuppressWarnings({
32+
"PMD.CyclomaticComplexity",
33+
"PMD.CognitiveComplexity",
34+
"PMD.NcssCount",
35+
"PMD.SystemPrintln",
36+
"PMD.AvoidThrowingRawExceptionTypes",
37+
"PMD.AvoidLiteralsInIfCondition",
38+
"PMD.AvoidUsingHardCodedIP",
39+
"PMD.AvoidDuplicateLiterals",
40+
"PMD.ShortVariable",
41+
"PMD.UseUtilityClass",
42+
"PMD.AvoidPrintStackTrace",
43+
"PMD.AvoidCatchingGenericException",
44+
"PMD.ExceptionAsFlowControl",
45+
"PMD.UseConcurrentHashMap",
46+
})
47+
public class IaaSVPCExample {
48+
public static void main(String[] args) throws IOException {
49+
/*
50+
* Credentials are read from the credentialsFile in `~/.stackit/credentials.json` or the env
51+
* STACKIT_SERVICE_ACCOUNT_KEY_PATH / STACKIT_SERVICE_ACCOUNT_KEY
52+
* */
53+
IaasApi iaasApi = new IaasApi();
54+
ResourceManagerApi resourceManagerApi = new ResourceManagerApi();
55+
56+
String region = "eu01";
57+
String parentContainerId = System.getenv("STACKIT_CONTAINER_ID");
58+
String ownerEmail = System.getenv("STACKIT_OWNER_EMAIL");
59+
60+
final Resources r = new Resources();
61+
62+
Runnable cleanup =
63+
() -> {
64+
try {
65+
if (r.networkRange != null) {
66+
iaasApi.deleteVPCNetworkRange(
67+
r.project.getProjectId(),
68+
r.vpc.getId(),
69+
region,
70+
r.networkRange.getVPCNetworkRangeIPv4().getId());
71+
while (true) {
72+
try {
73+
String status =
74+
iaasApi.getVPCNetworkRange(
75+
r.project.getProjectId(),
76+
r.vpc.getId(),
77+
region,
78+
r.networkRange
79+
.getVPCNetworkRangeIPv4()
80+
.getId())
81+
.getVPCNetworkRangeIPv4()
82+
.getStatus();
83+
if ("FAILED".equals(status)) {
84+
throw new RuntimeException("network range deletion failed");
85+
}
86+
TimeUnit.SECONDS.sleep(5);
87+
} catch (ApiException e) {
88+
if (e.getCode() == 404) {
89+
break;
90+
}
91+
throw e;
92+
} catch (InterruptedException e) {
93+
throw new RuntimeException(e);
94+
}
95+
}
96+
}
97+
if (r.staticRoute != null) {
98+
iaasApi.deleteVPCStaticRoute(
99+
r.project.getProjectId(),
100+
r.vpc.getId(),
101+
region,
102+
r.vpcRoutingTable.getId(),
103+
r.staticRoute.getId());
104+
}
105+
if (r.vpcRoutingTable != null) {
106+
iaasApi.deleteVPCRoutingTable(
107+
r.project.getProjectId(),
108+
r.vpc.getId(),
109+
region,
110+
r.vpcRoutingTable.getId());
111+
}
112+
if (r.vpcRegion != null) {
113+
iaasApi.deleteVPCRegion(
114+
r.project.getProjectId(), r.vpc.getId(), region);
115+
while (true) {
116+
try {
117+
String status =
118+
iaasApi.getVPCRegion(
119+
r.project.getProjectId(),
120+
r.vpc.getId(),
121+
region)
122+
.getStatus();
123+
if ("FAILED".equals(status)) {
124+
throw new RuntimeException("region deletion failed");
125+
}
126+
TimeUnit.SECONDS.sleep(5);
127+
} catch (ApiException e) {
128+
if (e.getCode() == 404 || e.getCode() == 400) {
129+
break;
130+
}
131+
} catch (InterruptedException e) {
132+
throw new RuntimeException(e);
133+
}
134+
}
135+
}
136+
if (r.vpc != null) {
137+
iaasApi.deleteVPC(r.project.getProjectId(), r.vpc.getId());
138+
}
139+
if (r.project != null) {
140+
resourceManagerApi.deleteProject(r.project.getProjectId().toString());
141+
}
142+
} catch (ApiException e) {
143+
System.out.println(
144+
"cleanup failed, there may be resource left over: "
145+
+ e.getMessage());
146+
}
147+
};
148+
149+
try {
150+
// create project
151+
System.out.println("creating project...");
152+
Set<Member> members = new HashSet<>();
153+
members.add(new Member().subject(ownerEmail).role("owner"));
154+
Map<String, String> labels = new HashMap<>();
155+
labels.put("enable-vpc", "true");
156+
r.project =
157+
resourceManagerApi.createProject(
158+
new CreateProjectPayload()
159+
.containerParentId(parentContainerId)
160+
.name("vpc-example-project")
161+
.members(members)
162+
.labels(labels));
163+
ResourcemanagerWait.createProjectWaitHandler(
164+
resourceManagerApi, r.project.getContainerId())
165+
.waitWithContextAsync()
166+
.get();
167+
System.out.println("project created: " + r.project.getProjectId());
168+
169+
// create vpc
170+
System.out.println("creating vpc...");
171+
r.vpc =
172+
iaasApi.createVPC(
173+
r.project.getProjectId(),
174+
new CreateVPCPayload().name("example-vpc").description("example-vpc"));
175+
System.out.println("vpc created: " + r.vpc.getId());
176+
177+
// create region (this must happen before creating a routing table or network area)
178+
System.out.println("creating region...");
179+
r.vpcRegion =
180+
iaasApi.createVPCRegion(
181+
r.project.getProjectId(),
182+
r.vpc.getId(),
183+
region,
184+
new CreateVPCRegionPayload());
185+
while (true) {
186+
try {
187+
String status =
188+
iaasApi.getVPCRegion(r.project.getProjectId(), r.vpc.getId(), region)
189+
.getStatus();
190+
if ("FAILED".equals(status)) {
191+
throw new RuntimeException("region creation failed");
192+
}
193+
if ("CREATED".equals(status)) {
194+
break;
195+
}
196+
TimeUnit.SECONDS.sleep(5);
197+
} catch (ApiException e) {
198+
if (e.getCode() == 404) {
199+
break;
200+
}
201+
}
202+
}
203+
System.out.println("region created");
204+
205+
// create routing table
206+
System.out.println("creating routing table...");
207+
r.vpcRoutingTable =
208+
iaasApi.addVPCRoutingTable(
209+
r.project.getProjectId(),
210+
r.vpc.getId(),
211+
region,
212+
new AddVPCRoutingTablePayload().name("example-routing-table"));
213+
System.out.println("routing table created: " + r.vpcRoutingTable.getId());
214+
215+
// create a static route
216+
System.out.println("creating static route...");
217+
r.staticRoute =
218+
iaasApi.addVPCStaticRoute(
219+
r.project.getProjectId(),
220+
r.vpc.getId(),
221+
region,
222+
r.vpcRoutingTable.getId(),
223+
new AddVPCStaticRoutePayload()
224+
.destination(
225+
new AddVPCStaticRoutePayloadDestination(
226+
new DestinationCIDRv4()
227+
.type("cidrv4")
228+
.value("0.0.0.0/0")))
229+
.nexthop(
230+
new AddVPCStaticRoutePayloadNexthop(
231+
new NexthopInternet().type("internet"))));
232+
System.out.println("static route created: " + r.staticRoute.getId());
233+
234+
// create a network range
235+
System.out.println("creating network range...");
236+
r.networkRange =
237+
iaasApi.createVPCNetworkRange(
238+
r.project.getProjectId(),
239+
r.vpc.getId(),
240+
region,
241+
new NetworkRangeIPv4Request()
242+
.ipVersion(NetworkRangeIPv4Request.IpVersionEnum.IPV4)
243+
.prefix("192.168.1.0/24")
244+
.description("example-network-range")
245+
.defaultPrefixLen(26L)
246+
.maxPrefixLen(29L)
247+
.minPrefixLen(16L)
248+
.addNameserversItem("10.0.0.1")
249+
.addNameserversItem("10.0.0.8"));
250+
while (true) {
251+
try {
252+
String status =
253+
iaasApi.getVPCNetworkRange(
254+
r.project.getProjectId(),
255+
r.vpc.getId(),
256+
region,
257+
r.networkRange.getVPCNetworkRangeIPv4().getId())
258+
.getVPCNetworkRangeIPv4()
259+
.getStatus();
260+
if ("FAILED".equals(status)) {
261+
throw new RuntimeException("region creation failed");
262+
}
263+
if ("CREATED".equals(status)) {
264+
break;
265+
}
266+
TimeUnit.SECONDS.sleep(5);
267+
} catch (ApiException e) {
268+
if (e.getCode() == 404) {
269+
break;
270+
}
271+
}
272+
}
273+
System.out.println(
274+
"network range created: " + r.networkRange.getVPCNetworkRangeIPv4().getId());
275+
} catch (Exception e) {
276+
System.out.println("failed to create resources: " + e.getMessage());
277+
e.printStackTrace();
278+
} finally {
279+
cleanup.run();
280+
}
281+
}
282+
283+
private static final class Resources {
284+
private Project project;
285+
private VPC vpc;
286+
private RegionalVPC vpcRegion;
287+
private VPCRoutingTable vpcRoutingTable;
288+
private Route staticRoute;
289+
private VPCNetworkRange networkRange;
290+
}
291+
}
Collapse file

‎services/iaas/CHANGELOG.md‎

Copy file name to clipboardExpand all lines: services/iaas/CHANGELOG.md
+14Lines changed: 14 additions & 0 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
## v1.3.0
2+
- new example for managing `VPCs` with the `v2alpha1api`
3+
- `v1api`
4+
- **Braking Change:** remove deprecated operations: `updateImageScopeLocal`, `updateImageScopePublic`
5+
- **Feature:** add attribute `vtpm` (new model `ServerVTPM`) to model `Server`
6+
- **Feature:** add attribute `availabilityZone` to model `Snapshot`
7+
- `v2alpha1api`
8+
- **Feature:** add operations and models to manage `VPCs`
9+
- `v2api`
10+
- **Feature:** add attribute `vpcNetworkRangeId` to models `NetworkIPv4` `NetworkIPv6`
11+
- **Feature:** add attribute `vpcId` to model `Network`,
12+
- **Feature:** add attribute `vtpm` (new model `ServerVTPM`) to model `Server`,
13+
- **Feature:** add attribute `availabilityZone` to model `Snapshot`,
14+
115
## v1.2.0
216
- **Feature (breaking change):** Introduction of multi API version support. See the GitHub discussion post for more details: https://github.com/stackitcloud/stackit-sdk-java/discussions/530
317

Collapse file

‎services/iaas/VERSION‎

Copy file name to clipboard
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.2.0
1+
1.3.0
Collapse file

‎services/iaas/oas_commit‎

Copy file name to clipboard
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1c36f3781c31a0e21c4588c7c4ec835d477d2f21
1+
d5bd75f47f4b364fa6f71663efb4ba41ec703ac8
Collapse file

‎services/iaas/src/main/java/cloud/stackit/sdk/iaas/v1api/JSON.java‎

Copy file name to clipboardExpand all lines: services/iaas/src/main/java/cloud/stackit/sdk/iaas/v1api/JSON.java
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,8 @@ private static Class getClassByDiscriminator(
341341
new cloud.stackit.sdk.iaas.v1api.model.ServerNetwork.CustomTypeAdapterFactory());
342342
gsonBuilder.registerTypeAdapterFactory(
343343
new cloud.stackit.sdk.iaas.v1api.model.ServerNetworking.CustomTypeAdapterFactory());
344+
gsonBuilder.registerTypeAdapterFactory(
345+
new cloud.stackit.sdk.iaas.v1api.model.ServerVTPM.CustomTypeAdapterFactory());
344346
gsonBuilder.registerTypeAdapterFactory(
345347
new cloud.stackit.sdk.iaas.v1api.model.ServiceAccountMailListResponse
346348
.CustomTypeAdapterFactory());
Collapse file

‎services/iaas/src/main/java/cloud/stackit/sdk/iaas/v1api/Pair.java‎

Copy file name to clipboardExpand all lines: services/iaas/src/main/java/cloud/stackit/sdk/iaas/v1api/Pair.java
+1-3Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@
1212

1313
package cloud.stackit.sdk.iaas.v1api;
1414

15-
@javax.annotation.Generated(
16-
value = "org.openapitools.codegen.languages.JavaClientCodegen",
17-
comments = "Generator version: 7.19.0")
15+
@javax.annotation.Generated(value = "JavaGenerator", comments = "Generator version: 7.19.0")
1816
public class Pair {
1917
private final String name;
2018
private final String value;
Collapse file

‎services/iaas/src/main/java/cloud/stackit/sdk/iaas/v1api/ServerConfiguration.java‎

Copy file name to clipboardExpand all lines: services/iaas/src/main/java/cloud/stackit/sdk/iaas/v1api/ServerConfiguration.java
+1-3Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
import java.util.Map;
1616

1717
/** Representing a Server configuration. */
18-
@javax.annotation.Generated(
19-
value = "org.openapitools.codegen.languages.JavaClientCodegen",
20-
comments = "Generator version: 7.19.0")
18+
@javax.annotation.Generated(value = "JavaGenerator", comments = "Generator version: 7.19.0")
2119
public class ServerConfiguration {
2220
public String URL;
2321
public String description;
Collapse file

‎services/iaas/src/main/java/cloud/stackit/sdk/iaas/v1api/ServerVariable.java‎

Copy file name to clipboardExpand all lines: services/iaas/src/main/java/cloud/stackit/sdk/iaas/v1api/ServerVariable.java
+1-3Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
import java.util.HashSet;
1616

1717
/** Representing a Server Variable for server URL template substitution. */
18-
@javax.annotation.Generated(
19-
value = "org.openapitools.codegen.languages.JavaClientCodegen",
20-
comments = "Generator version: 7.19.0")
18+
@javax.annotation.Generated(value = "JavaGenerator", comments = "Generator version: 7.19.0")
2119
public class ServerVariable {
2220
public String description;
2321
public String defaultValue;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.