Я ищу, чтобы использовать платформу CloudFiles RackSpace для хранения больших объектов (текстовые документы, изображения и т. Д.). Следуя некоторым из их руководств, я нашел полезный фрагмент кода, который выглядит так, как будто он должен работать, но не в моем случае.Переопределение поведения аутентификации в jclouds
Iterable<Module> modules = ImmutableSet.<Module> of(
new Log4JLoggingModule());
Properties properties = new Properties();
properties.setProperty(LocationConstants.PROPERTY_ZONE, ZONE);
properties.setProperty(LocationConstants.PROPERTY_REGION, "ORD");
CloudFilesClient cloudFilesClient = ContextBuilder.newBuilder(PROVIDER)
.credentials(username, apiKey)
.overrides(properties)
.modules(modules)
.buildApi(CloudFilesClient.class);
Проблема заключается в том, что при выполнении этого кода, он пытается войти в меня в экземпляре IAD (Вирджиния) из CloudFiles. Цель моей организации - использовать экземпляр ORD (Чикаго) как основной, который будет помещен в облако и использовать DFW в качестве резервной среды. Ответ входа в систему приводит к возврату экземпляра IAD, поэтому я предполагаю, что JClouds использует это. Просмотр вокруг, похоже, что атрибуты ZONE/REGION игнорируются для CloudFiles. Мне было интересно, есть ли способ переопределить код, который возвращается для проверки подлинности, через петлю через возвращаемых провайдеров и выбрать, к кому войти.
Update:
Принятый ответ в основном хорошие, с большим количеством некоторой информации, имеющейся в этом фрагменте:
RestContext<CommonSwiftClient, CommonSwiftAsyncClient> swift = cloudFilesClient.unwrap();
CommonSwiftClient client = swift.getApi();
SwiftObject object = client.newSwiftObject();
object.getInfo().setName(FILENAME + SUFFIX);
object.setPayload("This is my payload."); //input stream.
String id = client.putObject(CONTAINER, object);
System.out.println(id);
SwiftObject obj2 = client.getObject(CONTAINER,FILENAME + SUFFIX);
System.out.println(obj2.getPayload());
Я пробовал это изначально. Одна проблема с этим типом примера заключается в том, что переменные swift и storage не определены. Можете ли вы также прокомментировать, как вы бы быстро использовали конкретный контейнер? Это также отсутствовало в комментарии к веб-сайту. –
Итак, я немного поиграл. Я могу заставить его работать, если я использую учетные данные для пароля, а не ключ API. Результат API составляет 400. –
Я отмечаю ответ как принятый. Проблема с ключом API по-прежнему остается проблемой, но я могу хотя бы войти в систему, используя имя пользователя/пароль. Для тех, кто интересуется, другой способ взглянуть на хранилище и быстрота в моем оригинале. –