package io.fathom.auto.config;
import io.fathom.auto.openstack.metadata.Metadata;
import io.fathom.auto.openstack.metadata.MetadataClient;
import io.fathom.cloud.openstack.client.OpenstackClient;
import io.fathom.cloud.openstack.client.RestClientException;
import io.fathom.cloud.openstack.client.identity.OpenstackIdentityClient;
import io.fathom.cloud.openstack.client.identity.StaticTokenProvider;
import io.fathom.cloud.openstack.client.storage.OpenstackStorageClient;
import io.fathom.http.HttpClient;
import java.net.URI;
public class OpenstackConfig {
Metadata metadata;
public Metadata getMetadata() throws RestClientException {
if (metadata == null) {
MetadataClient metadataClient = MetadataClient.INSTANCE;
Metadata metadata = metadataClient.getMetadata();
this.metadata = metadata;
}
return metadata;
}
public OpenstackStorageClient getStorageClient() throws RestClientException {
return getOpenstackClient().getStorage();
}
OpenstackClient client;
public OpenstackClient getOpenstackClient() throws RestClientException {
if (client == null) {
MetadataClient metadataClient = MetadataClient.INSTANCE;
String serviceToken = metadataClient.getSecretString("token");
serviceToken = serviceToken.trim();
Metadata metadata = getMetadata();
URI identityEndpoint = URI.create(metadata.getTopLevel("identity_uri"));
HttpClient httpClient = metadataClient.getHttpClient();
OpenstackIdentityClient identityClient = new OpenstackIdentityClient(httpClient, identityEndpoint, null);
StaticTokenProvider tokenProvider = new StaticTokenProvider(identityClient, serviceToken);
this.client = OpenstackClient.build(tokenProvider);
}
return client;
}
public String getInstanceProperty(String key) {
if (metadata == null) {
throw new IllegalStateException();
}
String value = System.getProperty(key);
if (value == null) {
value = metadata.findMeta(key);
}
return value;
}
}