in vandelay-bigtable/src/main/java/com/spotify/api/vandelay/bigtable/imports/VandelayBigTableImporter.java [151:223]
private void createInstance(
final String instanceId,
final VandelayBigTableImportConfiguration importConfiguration,
final BigtableInstanceAdminClient instanceAdminClient) {
if (instanceAdminClient.exists(instanceId)) {
logger.debug("Instance " + instanceId + " already exists");
return;
}
final VandelayBigTableGCPConfiguration gcpConfiguration =
importConfiguration.getGcpConfiguration();
final VandelayBigTableInstanceConfiguration instanceConfiguration =
gcpConfiguration.getInstanceConfiguration();
final BigTableInstance configInstance = instanceConfiguration.getInstance();
final Optional<Instance> instance =
new BigTableInstanceMapperFunction().convertFrom(configInstance);
if (instance.isPresent()) {
logger.info("Creating create instance request for instance id " + instanceId);
final CreateInstanceRequest createInstanceRequest =
CreateInstanceRequest.of(instanceId)
.setDisplayName(instance.get().getDisplayName())
.setType(instance.get().getType());
instance.get().getLabels().forEach(createInstanceRequest::addLabel);
final List<BigTableCluster> clusters = instanceConfiguration.getClusters();
logger.trace("Adding " + clusters.size() + " clusters to create instance request");
for (final var cluster : clusters) {
Optional<Cluster> savedCluster = new BigTableClusterMapperFunction().convertFrom(cluster);
savedCluster.ifPresent(
value ->
createInstanceRequest.addCluster(
value.getId(), value.getZone(), value.getServeNodes(), value.getStorageType()));
}
logger.info("Performing create instance call");
final Instance newInstance = instanceAdminClient.createInstance(createInstanceRequest);
final List<BigTableAppProfile> appProfiles = instanceConfiguration.getAppProfiles();
logger.info("Found " + appProfiles.size() + " app profiles for instance");
for (final var appProfile : appProfiles) {
final Optional<AppProfile> savedAppProfile =
new BigTableAppProfileMapperFunction().convertFrom(appProfile);
if (savedAppProfile.isPresent()) {
if (Objects.isNull(
instanceAdminClient.getAppProfile(
savedAppProfile.get().getInstanceId(), savedAppProfile.get().getId()))) {
logger.info(
"App profile " + savedAppProfile.get().getId() + " is not set, attempting to set");
final CreateAppProfileRequest createAppProfileRequest =
CreateAppProfileRequest.of(
savedAppProfile.get().getInstanceId(), savedAppProfile.get().getId())
.setDescription(savedAppProfile.get().getDescription())
.setRoutingPolicy(savedAppProfile.get().getPolicy());
logger.info("Performing create app profile call");
instanceAdminClient.createAppProfile(createAppProfileRequest);
}
}
}
final IAMPolicy savedPolicy = instanceConfiguration.getAppPolicy();
final IAMPolicy changedPolicy =
new IAMPolicy(null, savedPolicy.getVersion(), savedPolicy.getBindingList());
final Optional<Policy> iamPolicy = new IAMPolicyMapperFunction().convertFrom(changedPolicy);
if (iamPolicy.isPresent()) {
if (!iamPolicy.get().equals(instanceAdminClient.getIamPolicy(newInstance.getId()))) {
logger.info(
"IAM policy on the instance does not match the expected one - setting IAM policy");
instanceAdminClient.setIamPolicy(newInstance.getId(), iamPolicy.get());
}
}
}
}