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

Sign up
Appearance settings
This repository was archived by the owner on Nov 2, 2023. It is now read-only.

Commit d5e0040

Browse files
New Release v1.2.1 for OCI Service Broker
- Minor Update to use unified API for ATP/ADW service. Internal change with no customer impact Co-authored-by: Ashokkumar Kannan ashokkumar.kannan@oracle.com Co-authored-by: Jayasheelan Kumar jayasheelan.kumar@oracle.com Co-authored-by: Naman Mehta naman.mehta@oracle.com
1 parent 097a944 commit d5e0040

File tree

16 files changed

+364
-673
lines changed

16 files changed

+364
-673
lines changed

‎CHANGELOG.md‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,19 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
66
This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
77

8+
[1.2.1]
9+
10+
- Minor Update to use unified API for ATP/ADW service. Internal change with no customer impact
11+
12+
[1.2.0]
13+
14+
- Adding Support to Bind Existing Service Instance for all supported services
15+
- Adding Diagnostic Tool to help identify the common issues during installation
16+
- Minor Document Fixes
17+
818
[1.1.1]
919

20+
- Adding support for Seoul (ICN) region
1021
- Minor Document Fixes
1122
- Bug Fixes
1223

‎charts/oci-service-broker/Chart.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
apiVersion: v1
66
description: A Helm chart for installing OCI Service Broker into a Kubernetes cluster
77
name: oci-service-broker
8-
version: 1.2.0
8+
version: 1.2.1

‎charts/oci-service-broker/docs/installation.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ brew update && brew install kubernetes-service-catalog-client
6969
The OCI Service Broker is packaged as Helm chart for making it easy to install in Kubernetes. The chart is available at [charts/oci-service-broker](../) directory.
7070

7171
```plain
72-
https://github.com/oracle/oci-service-broker/releases/download/v1.2.0/oci-service-broker-1.2.0.tgz
72+
https://github.com/oracle/oci-service-broker/releases/download/v1.2.0/oci-service-broker-1.2.1.tgz
7373
```
7474

7575
### OCI credentials

‎charts/oci-service-broker/values.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ image:
1414
repository: iad.ocir.io/oracle/oci-service-broker
1515

1616
# Tag of the image
17-
tag: 1.2.0
17+
tag: 1.2.1
1818

1919
# The image pull policy
2020
pullPolicy: Always

‎oci-service-broker/build.gradle‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ apply plugin: 'maven-publish'
3030
archivesBaseName = 'oci-service-broker'
3131

3232
// Sometimes, the version has to be overridden from command line
33-
version = project.hasProperty('version_num') ? project.getProperty('version_num') : '1.2.0'
33+
version = project.hasProperty('version_num') ? project.getProperty('version_num') : '1.2.1'
3434
ext.dockerGroup = 'iad.ocir.io/oci-cnp-dev'
3535
mainClassName = 'com.oracle.oci.osb.Broker'
3636

‎oci-service-broker/src/main/java/com/oracle/oci/osb/adapters/adb/AutonomousDatabaseAdapter.java‎

Lines changed: 69 additions & 71 deletions
Large diffs are not rendered by default.

‎oci-service-broker/src/main/java/com/oracle/oci/osb/adapters/adb/AutonomousDatabaseInstance.java‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*/
1313
public class AutonomousDatabaseInstance {
1414
private String id;
15-
private TYPEtype;
15+
private AutonomousDatabaseAdapter.DBWorkloadTypedbWorkloadType;
1616
private String displayName;
1717
private int cpuCoreCount;
1818
private int storageSizeInGBs;
@@ -30,10 +30,10 @@ public enum TYPE {
3030
}
3131

3232

33-
public AutonomousDatabaseInstance(String id, TYPEtype, String displayName, int cpuCoreCount, int
33+
public AutonomousDatabaseInstance(String id, AutonomousDatabaseAdapter.DBWorkloadTypedbWorkloadType, String displayName, int cpuCoreCount, int
3434
storageSizeInGBs, String dbName, AutonomousDatabaseAdapter.LicenseModel licenseModel, Map<String, String> freeformTags, LifecycleState lifecycleState) {
3535
this.id = id;
36-
this.type = type;
36+
this.dbWorkloadType = dbWorkloadType;
3737
this.displayName = displayName;
3838
this.cpuCoreCount = cpuCoreCount;
3939
this.storageSizeInGBs = storageSizeInGBs;
@@ -56,8 +56,8 @@ public String getId() {
5656
return id;
5757
}
5858

59-
public TYPEgetType() {
60-
return type;
59+
public AutonomousDatabaseAdapter.DBWorkloadTypegetDbWorkloadType() {
60+
return dbWorkloadType;
6161
}
6262

6363
public String getDbName() {

‎oci-service-broker/src/main/java/com/oracle/oci/osb/adapters/adb/AutonomousDatabaseOCIClient.java‎

Lines changed: 269 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,283 @@
55

66
package com.oracle.oci.osb.adapters.adb;
77

8+
import com.oracle.bmc.Region;
9+
import com.oracle.bmc.auth.AuthenticationDetailsProvider;
10+
import com.oracle.bmc.database.DatabaseClient;
11+
import com.oracle.bmc.database.model.*;
12+
import com.oracle.bmc.database.requests.*;
13+
import com.oracle.bmc.database.responses.*;
14+
import com.oracle.oci.osb.util.Constants;
15+
import com.oracle.oci.osb.util.RequestUtil;
16+
import com.oracle.oci.osb.util.Utils;
17+
818
import java.io.IOException;
19+
import java.util.ArrayList;
920
import java.util.List;
1021
import java.util.Map;
22+
import java.util.logging.Level;
23+
import java.util.logging.Logger;
24+
25+
import static com.oracle.oci.osb.util.Utils.debugLog;
26+
import static com.oracle.oci.osb.util.Utils.getLogger;
27+
28+
public class AutonomousDatabaseOCIClient implements AutoCloseable{
29+
30+
private static final Logger LOGGER = getLogger(AutonomousDatabaseOCIClient.class);
31+
32+
private DatabaseClient ociDBClient;
33+
34+
private String compartmentId;
35+
36+
AutonomousDatabaseOCIClient(AuthenticationDetailsProvider authProvider, String compartmentId) {
37+
this(authProvider, compartmentId, Region.fromRegionId(System.getProperty(Constants.REGION_ID)));
38+
}
39+
40+
private AutonomousDatabaseOCIClient(AuthenticationDetailsProvider authProvider, String compartmentId, Region regionId) {
41+
this.compartmentId = compartmentId;
42+
ociDBClient = new DatabaseClient(authProvider);
43+
ociDBClient.setRegion(regionId);
44+
}
45+
46+
/**
47+
* Create an AD instance. The instance will be provisioned asynchronously
48+
*
49+
* @param displayName display name(mostly for console)
50+
* @param dbName name of the database.
51+
* @param type DBWorkload Type of the Database. OLTP or DW.
52+
* @param cpuCount number of cpu cores required.
53+
* @param StorageSize required storage size for DB in Terabytes.
54+
* @param tags freeform tags.
55+
* @param password password to be set for the DB admin user.
56+
* @return AutonomousDatabase
57+
*/
58+
public AutonomousDatabaseInstance create(String displayName, String dbName, CreateAutonomousDatabaseBase.DbWorkload type,
59+
int cpuCount, int StorageSize, Map<String, String> tags,
60+
Map<String, Map<String, Object>> definedTags, String password,
61+
boolean licenseIncluded) {
62+
CreateAutonomousDatabaseDetails request = CreateAutonomousDatabaseDetails.builder()
63+
.adminPassword(password)
64+
.compartmentId(compartmentId)
65+
.cpuCoreCount(cpuCount)
66+
.dbWorkload(type)
67+
.dataStorageSizeInTBs(StorageSize)
68+
.dbName(dbName)
69+
.displayName(displayName)
70+
.freeformTags(tags)
71+
.definedTags(definedTags)
72+
.licenseModel(licenseIncluded ? CreateAutonomousDatabaseDetails
73+
.LicenseModel.LicenseIncluded : CreateAutonomousDatabaseDetails.LicenseModel
74+
.BringYourOwnLicense)
75+
.build();
76+
CreateAutonomousDatabaseResponse response = ociDBClient.createAutonomousDatabase
77+
(CreateAutonomousDatabaseRequest.builder().createAutonomousDatabaseDetails(request).build());
78+
79+
return buildADInstance(response.getAutonomousDatabase());
80+
}
81+
82+
/**
83+
* Update an AD Instance. Update will be done asynchronously. If the param
84+
* values are empty or if they already match the existing value then update
85+
* is skipped for those values. If none of the params have any change then
86+
* this simply returns without doing any update.
87+
*
88+
* @param adOCID OCID of the AD instance to be updated.
89+
* @param displayName new display name.
90+
* @param cpuCount new number of CPU core.
91+
* @param StorageSize new DB storage size in Terabytes.
92+
* @param tags new freeform tags.
93+
* @return AutonomousDatabase
94+
*/
95+
public AutonomousDatabaseInstance update(String adOCID, String displayName, int cpuCount, int StorageSize,
96+
Map<String, String> tags, Map<String, Map<String, Object>> definedTags) {
97+
AutonomousDatabase ad = getADInstance(adOCID);
98+
UpdateAutonomousDatabaseDetails.Builder reqBuilder = UpdateAutonomousDatabaseDetails.builder();
99+
100+
//Check if update required
101+
boolean updateRequired = false;
102+
if (!Utils.isNullOrEmptyString(displayName) && !ad.getDisplayName().equals(displayName)) {
103+
reqBuilder = reqBuilder.displayName(displayName);
104+
debugLog(LOGGER, "DisplayName to be updated.from:%s;to:%s", Level.FINE, ad.getDisplayName(), displayName);
105+
updateRequired = true;
106+
}
107+
if (cpuCount > 0 && ad.getCpuCoreCount() != cpuCount) {
108+
reqBuilder = reqBuilder.cpuCoreCount(cpuCount);
109+
debugLog(LOGGER, "CpuCoreCount to be updated.from:%s;to:%s", Level.FINE, ad.getCpuCoreCount()
110+
.toString(), Integer.toString(cpuCount));
111+
updateRequired = true;
112+
}
113+
if (StorageSize > 0 && ad.getDataStorageSizeInTBs() != StorageSize) {
114+
reqBuilder = reqBuilder.dataStorageSizeInTBs(StorageSize);
115+
debugLog(LOGGER, "StorageSize to be updated.from:%s;to:%s", Level.FINE, ad.getDataStorageSizeInTBs()
116+
.toString(), Integer.toString(StorageSize));
117+
updateRequired = true;
118+
}
119+
if (tags != null && tags.entrySet().size() > 0 && !tags.equals(ad.getFreeformTags())) {
120+
reqBuilder = reqBuilder.freeformTags(tags);
121+
debugLog(LOGGER, "tags to be updated.from:%s;to:%s", Level.FINE, ad.getFreeformTags(), tags);
122+
updateRequired = true;
123+
}
124+
if (definedTags != null && definedTags.entrySet().size() > 0 && !definedTags.equals(ad.getDefinedTags())) {
125+
reqBuilder = reqBuilder.definedTags(definedTags);
126+
debugLog(LOGGER, "Defined tags to be updated.from:%s;to:%s", Level.FINE, ad.getDefinedTags(), definedTags);
127+
updateRequired = true;
128+
}
129+
if (!updateRequired) {
130+
throw new AutonomousDatabaseAdapter.UpdateNotRequiredException();
131+
}
132+
133+
UpdateAutonomousDatabaseDetails request = reqBuilder.build();
134+
UpdateAutonomousDatabaseResponse response = ociDBClient.updateAutonomousDatabase
135+
(UpdateAutonomousDatabaseRequest.builder().autonomousDatabaseId(adOCID)
136+
.updateAutonomousDatabaseDetails(request).build());
137+
return buildADInstance(response.getAutonomousDatabase());
138+
}
139+
140+
/**
141+
* Get details of an AD instance.
142+
* @param adOCID OCID of the AD instance to be updated.
143+
* @return AutonomousDatabase
144+
*/
145+
public AutonomousDatabaseInstance get(String adOCID) {
146+
return buildADInstance(getADInstance(adOCID));
147+
}
148+
149+
/**
150+
* Delete an AD instance. The operation will be asynchronously.
151+
*
152+
* @param adOCID OCID of the AD instance to be deleted.
153+
*/
154+
public void delete(String adOCID) {
155+
DeleteAutonomousDatabaseRequest request = DeleteAutonomousDatabaseRequest.builder().autonomousDatabaseId
156+
(adOCID).build();
157+
ociDBClient.deleteAutonomousDatabase(request);
158+
}
159+
160+
/**
161+
* Update DB ADMIN password.
162+
*
163+
* @param password new DB ADMIN password.
164+
* @return AutonomousDatabase
165+
*/
166+
public AutonomousDatabaseInstance changePassword(String password) {
167+
UpdateAutonomousDatabaseDetails request = UpdateAutonomousDatabaseDetails.builder().adminPassword(password)
168+
.build();
169+
UpdateAutonomousDatabaseResponse response = ociDBClient.updateAutonomousDatabase
170+
(UpdateAutonomousDatabaseRequest.builder().updateAutonomousDatabaseDetails(request).build());
171+
return buildADInstance(response.getAutonomousDatabase());
172+
}
173+
174+
/**
175+
* Download the credential/configuration files for connecting to an AD
176+
* instance. The files are base64 encoded and converted as strings.
177+
*
178+
* @param adID OCID of the AD instance.
179+
* @param dbName name of the database.
180+
* @param wPassword password to set for the Oracle wallet that is
181+
* created for this request.
182+
* @return Map with filename/attribute name as keys and filename/attribute
183+
* base64 encoded contents as values.
184+
* @throws IOException if downloading credential zip file fails.
185+
*/
186+
public Map<String, String> getCredentials(String adID, String dbName, String wPassword) throws IOException {
187+
GenerateAutonomousDatabaseWalletDetails adbWalletDetails = GenerateAutonomousDatabaseWalletDetails.builder()
188+
.password(wPassword).build();
189+
GenerateAutonomousDatabaseWalletResponse adbWalletResponse = ociDBClient.generateAutonomousDatabaseWallet(
190+
GenerateAutonomousDatabaseWalletRequest.builder()
191+
.generateAutonomousDatabaseWalletDetails(adbWalletDetails)
192+
.autonomousDatabaseId(adID)
193+
.build());
194+
return ADBUtils.generateCredentialsMap(dbName, adbWalletResponse.getInputStream());
195+
}
196+
197+
/**
198+
* Fetch the list of all AD with a specific display name in a given OCI
199+
* compartment.
200+
*
201+
* @param compartmentId OCID of the Compartment.
202+
* @param displayName display name to filter the AD instances.
203+
* @return List of ADB instance details.
204+
*/
205+
public List<AutonomousDatabaseInstance> listInstances(String compartmentId, String displayName) {
206+
ListAutonomousDatabasesRequest.Builder reqBuilder = ListAutonomousDatabasesRequest.builder().compartmentId
207+
(compartmentId);
208+
if (displayName != null && !displayName.isEmpty()) {
209+
reqBuilder.displayName(displayName);
210+
}
211+
ListAutonomousDatabasesRequest request = reqBuilder.build();
212+
ListAutonomousDatabasesResponse response = ociDBClient.listAutonomousDatabases(request);
213+
List<AutonomousDatabaseInstance> autonomousDatabaseInstanceList = new ArrayList<>();
214+
response.getItems().forEach((adwSummary) -> autonomousDatabaseInstanceList.add(buildADInstance(adwSummary)));
215+
216+
return autonomousDatabaseInstanceList;
217+
}
11218

12-
publicinterfaceAutonomousDatabaseOCIClientextendsAutoCloseable {
13-
AutonomousDatabaseInstancecreate(StringdisplayName, StringdbName, intcpuCount, intStorageSize, Map<String,
14-
String> tags, Map<String, Map<String, Object>> definedTags, Stringpassword, booleanlicenseIncluded);
219+
publicvoidclose() {
220+
ociDBClient.close();
221+
}
15222

16-
AutonomousDatabaseInstance update(String instanceOCID, String displayName, int cpuCount, int StorageSize,
17-
Map<String, String> tags, Map<String, Map<String, Object>> definedTags);
223+
private AutonomousDatabase getADInstance(String adOCID) {
224+
GetAutonomousDatabaseRequest request = GetAutonomousDatabaseRequest.builder().autonomousDatabaseId(adOCID)
225+
.build();
226+
GetAutonomousDatabaseResponse response = ociDBClient.getAutonomousDatabase(request);
227+
return response.getAutonomousDatabase();
228+
}
18229

19-
AutonomousDatabaseInstance get(String instanceOCID);
230+
private AutonomousDatabaseInstance buildADInstance(AutonomousDatabaseSummary summary) {
231+
if (summary == null) {
232+
return null;
233+
} else {
234+
return new AutonomousDatabaseInstance(summary.getId(),
235+
getDBWorkloadType(summary.getDbWorkload().getValue()),
236+
summary.getDisplayName(),
237+
summary.getCpuCoreCount(),
238+
summary.getDataStorageSizeInTBs(),
239+
summary.getDbName(),
240+
getADBLicenseType(summary.getLicenseModel()),
241+
summary.getFreeformTags(),
242+
AutonomousDatabaseInstance.lifecycleState(summary.getLifecycleState().getValue()));
243+
}
244+
}
20245

21-
void delete(String instanceOCID);
246+
private AutonomousDatabaseInstance buildADInstance(AutonomousDatabase adbInstance) {
247+
if (adbInstance == null) {
248+
return null;
249+
} else {
250+
return new AutonomousDatabaseInstance(adbInstance.getId(),
251+
getDBWorkloadType(adbInstance.getDbWorkload().getValue()),
252+
adbInstance.getDisplayName(),
253+
adbInstance.getCpuCoreCount(),
254+
adbInstance.getDataStorageSizeInTBs(),
255+
adbInstance.getDbName(),
256+
getADBLicenseType(adbInstance.getLicenseModel()),
257+
adbInstance.getFreeformTags(),
258+
AutonomousDatabaseInstance.lifecycleState(adbInstance.getLifecycleState().getValue()));
259+
}
260+
}
22261

23-
void close();
262+
private AutonomousDatabaseAdapter.DBWorkloadType getDBWorkloadType (String dbWorkloadType) {
263+
if (dbWorkloadType.equalsIgnoreCase(AutonomousDatabase.DbWorkload.Oltp.getValue())) {
264+
return AutonomousDatabaseAdapter.DBWorkloadType.ATP;
265+
} else {
266+
return AutonomousDatabaseAdapter.DBWorkloadType.ADW;
267+
}
268+
}
24269

25-
Map<String, String> getCredentials(String atpId, String dbName, String wPassword) throws IOException;
270+
private AutonomousDatabaseAdapter.LicenseModel getADBLicenseType(AutonomousDatabaseSummary.LicenseModel
271+
sdkLicenseModel){
272+
switch (sdkLicenseModel) {
273+
case BringYourOwnLicense: return AutonomousDatabaseAdapter.LicenseModel.BYOL;
274+
case LicenseIncluded: return AutonomousDatabaseAdapter.LicenseModel.NEW;
275+
default: return AutonomousDatabaseAdapter.LicenseModel.UNKNOWN;
276+
}
277+
}
26278

27-
List<AutonomousDatabaseInstance> listInstances(String compartmentId, String displayName);
279+
private AutonomousDatabaseAdapter.LicenseModel getADBLicenseType(AutonomousDatabase.LicenseModel
280+
adwLicenseModel){
281+
switch (adwLicenseModel) {
282+
case BringYourOwnLicense: return AutonomousDatabaseAdapter.LicenseModel.BYOL;
283+
case LicenseIncluded: return AutonomousDatabaseAdapter.LicenseModel.NEW;
284+
default: return AutonomousDatabaseAdapter.LicenseModel.UNKNOWN;
285+
}
286+
}
28287
}

‎oci-service-broker/src/main/java/com/oracle/oci/osb/adapters/adb/adw/ADWServiceAdapter.java‎

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,9 @@
1717
*/
1818
public class ADWServiceAdapter extends AutonomousDatabaseAdapter {
1919

20-
@Override
21-
protected AutonomousDatabaseOCIClient getOCIClient(AuthenticationDetailsProvider authProvider, String
22-
compartmentId) {
23-
return new ADWServiceOCIClient(authProvider, compartmentId);
24-
}
25-
2620
@Override
2721
protected String getInstanceTypeString() {
28-
return AutonomousDatabaseInstance.TYPE.ADW.name();
22+
return AutonomousDatabaseAdapter.DBWorkloadType.ADW.name();
2923
}
3024

3125
@Override

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /