use of com.google.api.services.sqladmin.SQLAdmin in project cloudbreak by hortonworks.
the class AbstractGcpDatabaseServerStartStopService method startStop.
protected void startStop(AuthenticatedContext ac, DatabaseStack stack, DatabasePollerService databasePollerService, String policy) throws IOException {
GcpDatabaseServerView databaseServerView = new GcpDatabaseServerView(stack.getDatabaseServer());
String deploymentName = databaseServerView.getDbServerName();
SQLAdmin sqlAdmin = gcpSQLAdminFactory.buildSQLAdmin(ac.getCloudCredential(), ac.getCloudCredential().getName());
String projectId = gcpStackUtil.getProjectId(ac.getCloudCredential());
List<CloudResource> gcpDatabase = getGcpDatabase(stack, ac.getCloudContext().getLocation().getAvailabilityZone().value());
try {
InstancesListResponse list = sqlAdmin.instances().list(projectId).execute();
Optional<DatabaseInstance> first = Optional.empty();
if (!list.isEmpty()) {
first = list.getItems().stream().filter(e -> e.getName().equals(deploymentName)).findFirst();
}
if (!first.isEmpty()) {
try {
Operation operation = sqlAdmin.instances().patch(projectId, deploymentName, getDatabaseInstance(policy)).execute();
verifyOperation(operation, gcpDatabase);
CloudResource operationAwareCloudResource = createOperationAwareCloudResource(gcpDatabase.get(0), operation);
databasePollerService.startDatabasePoller(ac, List.of(operationAwareCloudResource));
} catch (GoogleJsonResponseException e) {
throw new GcpResourceException(checkException(e), resourceType(), gcpDatabase.get(0).getName());
}
} else {
LOGGER.debug("Deployment does not exists: {}", deploymentName);
}
} catch (GoogleJsonResponseException e) {
throw new GcpResourceException(checkException(e), resourceType(), gcpDatabase.get(0).getName());
}
}
use of com.google.api.services.sqladmin.SQLAdmin in project cloudbreak by hortonworks.
the class GcpDatabaseServerLaunchService method launch.
public List<CloudResource> launch(AuthenticatedContext ac, DatabaseStack stack, PersistenceNotifier resourceNotifier) throws Exception {
GcpDatabaseServerView databaseServerView = new GcpDatabaseServerView(stack.getDatabaseServer());
String deploymentName = databaseServerView.getDbServerName();
SQLAdmin sqlAdmin = gcpSQLAdminFactory.buildSQLAdmin(ac.getCloudCredential(), ac.getCloudCredential().getName());
Compute compute = gcpComputeFactory.buildCompute(ac.getCloudCredential());
String projectId = gcpStackUtil.getProjectId(ac.getCloudCredential());
List<CloudResource> buildableResource = new ArrayList<>();
String availabilityZone = ac.getCloudContext().getLocation().getAvailabilityZone().value();
buildableResource.add(getGcpDatabase(deploymentName, availabilityZone));
buildableResource.add(getRdsPort(availabilityZone));
try {
InstancesListResponse list = sqlAdmin.instances().list(projectId).execute();
Optional<DatabaseInstance> first = Optional.empty();
if (!list.isEmpty()) {
first = list.getItems().stream().filter(e -> e.getName().equals(deploymentName)).findFirst();
}
if (first.isEmpty()) {
DatabaseInstance databaseInstance = getDatabaseInstance(stack, deploymentName, compute, projectId);
SQLAdmin.Instances.Insert insert = sqlAdmin.instances().insert(projectId, databaseInstance);
insert.setPrettyPrint(Boolean.TRUE);
try {
Operation operation = insert.execute();
verifyOperation(operation, buildableResource);
CloudResource operationAwareCloudResource = createOperationAwareCloudResource(buildableResource.get(0), operation);
databasePollerService.launchDatabasePoller(ac, List.of(operationAwareCloudResource));
DatabaseInstance instance = sqlAdmin.instances().get(projectId, deploymentName).execute();
if (instance != null) {
CloudResource.Builder rdsInstance = new CloudResource.Builder();
String instanceName = instance.getName();
buildableResource.add(getRdsHostName(instance, rdsInstance, instanceName, availabilityZone));
User rootUser = getRootUser(stack, projectId, instanceName);
operation = sqlAdmin.users().insert(projectId, instanceName, rootUser).execute();
verifyOperation(operation, buildableResource);
operationAwareCloudResource = createOperationAwareCloudResource(buildableResource.get(0), operation);
databasePollerService.insertUserPoller(ac, List.of(operationAwareCloudResource));
}
buildableResource.forEach(dbr -> resourceNotifier.notifyAllocation(dbr, ac.getCloudContext()));
return Collections.singletonList(operationAwareCloudResource);
} catch (GoogleJsonResponseException e) {
throw new GcpResourceException(checkException(e), resourceType(), buildableResource.get(0).getName());
}
} else {
LOGGER.debug("Deployment already exists: {}", deploymentName);
}
} catch (GoogleJsonResponseException e) {
throw new GcpResourceException(checkException(e), resourceType(), buildableResource.get(0).getName());
}
return List.of();
}
use of com.google.api.services.sqladmin.SQLAdmin in project cloudbreak by hortonworks.
the class GcpDatabaseServerCheckServiceTest method testCheckWhenDbInstanceIsRunnableNOTAlwaysShouldReturnStarted.
@Test
public void testCheckWhenDbInstanceIsRunnableNOTAlwaysShouldReturnStarted() throws IOException {
AuthenticatedContext authenticatedContext = mock(AuthenticatedContext.class);
CloudCredential cloudCredential = mock(CloudCredential.class);
DatabaseStack databaseStack = mock(DatabaseStack.class);
DatabaseServer databaseServer = mock(DatabaseServer.class);
SQLAdmin sqlAdmin = mock(SQLAdmin.class);
SQLAdmin.Instances sqlAdminInstances = mock(SQLAdmin.Instances.class);
SQLAdmin.Instances.List sqlAdminInstancesList = mock(SQLAdmin.Instances.List.class);
InstancesListResponse instancesListResponse = mock(InstancesListResponse.class);
when(authenticatedContext.getCloudCredential()).thenReturn(cloudCredential);
when(cloudCredential.getName()).thenReturn("credential");
when(databaseStack.getDatabaseServer()).thenReturn(databaseServer);
when(databaseServer.getServerId()).thenReturn("test");
when(gcpSQLAdminFactory.buildSQLAdmin(any(CloudCredential.class), anyString())).thenReturn(sqlAdmin);
when(gcpStackUtil.getProjectId(any(CloudCredential.class))).thenReturn("project-id");
when(sqlAdmin.instances()).thenReturn(sqlAdminInstances);
when(sqlAdminInstances.list(anyString())).thenReturn(sqlAdminInstancesList);
when(sqlAdminInstancesList.execute()).thenReturn(instancesListResponse);
when(instancesListResponse.isEmpty()).thenReturn(false);
DatabaseInstance databaseInstance = new DatabaseInstance();
databaseInstance.setName("test");
databaseInstance.setState("RUNNABLE");
Settings settings = new Settings();
settings.setActivationPolicy("NOT_ALWAYS");
databaseInstance.setSettings(settings);
when(instancesListResponse.getItems()).thenReturn(List.of(databaseInstance));
ExternalDatabaseStatus check = underTest.check(authenticatedContext, databaseStack);
Assert.assertEquals(ExternalDatabaseStatus.STOPPED, check);
}
use of com.google.api.services.sqladmin.SQLAdmin in project cloudbreak by hortonworks.
the class GcpDatabaseServerCheckServiceTest method testCheckWhenDbInstanceNotAvailableShouldReturnDeleted.
@Test
public void testCheckWhenDbInstanceNotAvailableShouldReturnDeleted() throws IOException {
AuthenticatedContext authenticatedContext = mock(AuthenticatedContext.class);
CloudCredential cloudCredential = mock(CloudCredential.class);
DatabaseStack databaseStack = mock(DatabaseStack.class);
DatabaseServer databaseServer = mock(DatabaseServer.class);
SQLAdmin sqlAdmin = mock(SQLAdmin.class);
SQLAdmin.Instances sqlAdminInstances = mock(SQLAdmin.Instances.class);
SQLAdmin.Instances.List sqlAdminInstancesList = mock(SQLAdmin.Instances.List.class);
InstancesListResponse instancesListResponse = mock(InstancesListResponse.class);
when(authenticatedContext.getCloudCredential()).thenReturn(cloudCredential);
when(cloudCredential.getName()).thenReturn("credential");
when(databaseStack.getDatabaseServer()).thenReturn(databaseServer);
when(databaseServer.getServerId()).thenReturn("test");
when(gcpSQLAdminFactory.buildSQLAdmin(any(CloudCredential.class), anyString())).thenReturn(sqlAdmin);
when(gcpStackUtil.getProjectId(any(CloudCredential.class))).thenReturn("project-id");
when(sqlAdmin.instances()).thenReturn(sqlAdminInstances);
when(sqlAdminInstances.list(anyString())).thenReturn(sqlAdminInstancesList);
when(sqlAdminInstancesList.execute()).thenReturn(instancesListResponse);
when(instancesListResponse.isEmpty()).thenReturn(true);
ExternalDatabaseStatus check = underTest.check(authenticatedContext, databaseStack);
Assert.assertEquals(ExternalDatabaseStatus.DELETED, check);
}
use of com.google.api.services.sqladmin.SQLAdmin in project cloudbreak by hortonworks.
the class GcpDatabaseServerCheckServiceTest method testCheckWhenDbInstanceDropGcpResourceExceptionShouldReturnGcpResourceException.
@Test
public void testCheckWhenDbInstanceDropGcpResourceExceptionShouldReturnGcpResourceException() throws IOException {
AuthenticatedContext authenticatedContext = mock(AuthenticatedContext.class);
CloudCredential cloudCredential = mock(CloudCredential.class);
DatabaseStack databaseStack = mock(DatabaseStack.class);
DatabaseServer databaseServer = mock(DatabaseServer.class);
SQLAdmin sqlAdmin = mock(SQLAdmin.class);
SQLAdmin.Instances sqlAdminInstances = mock(SQLAdmin.Instances.class);
SQLAdmin.Instances.List sqlAdminInstancesList = mock(SQLAdmin.Instances.List.class);
TokenResponseException tokenResponseException = mock(TokenResponseException.class);
when(authenticatedContext.getCloudCredential()).thenReturn(cloudCredential);
when(cloudCredential.getName()).thenReturn("credential");
when(databaseStack.getDatabaseServer()).thenReturn(databaseServer);
when(databaseServer.getServerId()).thenReturn("test");
when(gcpSQLAdminFactory.buildSQLAdmin(any(CloudCredential.class), anyString())).thenReturn(sqlAdmin);
when(gcpStackUtil.getProjectId(any(CloudCredential.class))).thenReturn("project-id");
when(sqlAdmin.instances()).thenReturn(sqlAdminInstances);
when(sqlAdminInstances.list(anyString())).thenReturn(sqlAdminInstancesList);
when(sqlAdminInstancesList.execute()).thenThrow(tokenResponseException);
when(gcpStackUtil.getMissingServiceAccountKeyError(any(TokenResponseException.class), anyString())).thenReturn(new GcpResourceException("error"));
GcpResourceException gcpResourceException = assertThrows(GcpResourceException.class, () -> underTest.check(authenticatedContext, databaseStack));
Assert.assertEquals("error", gcpResourceException.getMessage());
}
Aggregations