Skip to content

Commit 89eb804

Browse files
Merge branch 'main' into dependabot/github_actions/actions/setup-java-5.6.0
2 parents efc9875 + 2614927 commit 89eb804

503 files changed

Lines changed: 20791 additions & 3090 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/labeler.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
run: |
2424
curl -sSL -o remote-labeler.yml https://raw.githubusercontent.com/stackitcloud/stackit-sdk-go/main/.github/labeler.yml
2525
- name: Labeler action
26-
uses: actions/labeler@v6.2.0
26+
uses: actions/labeler@v7.0.0
2727
with:
2828
configuration-path: "remote-labeler.yml"
2929
sync-labels: false

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
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)

examples/iaas/build.gradle

Lines 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

Lines 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+
}

services/iaas/CHANGELOG.md

Lines changed: 14 additions & 0 deletions
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

services/iaas/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.2.0
1+
1.3.0

services/iaas/oas_commit

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1c36f3781c31a0e21c4588c7c4ec835d477d2f21
1+
d5bd75f47f4b364fa6f71663efb4ba41ec703ac8

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

Lines 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());

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

Lines 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;

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

Lines 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;

0 commit comments

Comments
 (0)