blob: d761013db1e3f44386ac12969d0013c46fd35cd0 [file] [log] [blame]
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.trmk.ecloud.config;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.trmk.ecloud.TerremarkECloudAsyncClient;
import org.jclouds.trmk.ecloud.TerremarkECloudClient;
import org.jclouds.trmk.ecloud.features.DataCenterOperationsAsyncClient;
import org.jclouds.trmk.ecloud.features.DataCenterOperationsClient;
import org.jclouds.trmk.ecloud.features.TagOperationsAsyncClient;
import org.jclouds.trmk.ecloud.features.TagOperationsClient;
import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudAsyncClient;
import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
import org.jclouds.trmk.vcloud_0_8.config.DefaultVCloudReferencesModule;
import org.jclouds.trmk.vcloud_0_8.config.TerremarkVCloudRestClientModule;
import org.jclouds.trmk.vcloud_0_8.domain.Network;
import org.jclouds.trmk.vcloud_0_8.domain.NetworkExtendedInfo;
import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Injector;
import com.google.inject.Provides;
/**
* Configures the VCloud authentication service connection, including logging
* and http transport.
*
* @author Adrian Cole
*/
@ConfiguresRestClient
public class TerremarkECloudRestClientModule extends
TerremarkVCloudRestClientModule<TerremarkECloudClient, TerremarkECloudAsyncClient> {
public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>> builder()//
.put(DataCenterOperationsClient.class, DataCenterOperationsAsyncClient.class)//
.put(TagOperationsClient.class, TagOperationsAsyncClient.class)//
.build();
public TerremarkECloudRestClientModule() {
super(DELEGATE_MAP);
}
@Provides
@Singleton
protected TerremarkVCloudAsyncClient provideTerremarkAsyncClient(TerremarkECloudAsyncClient in) {
return in;
}
@Provides
@Singleton
protected TerremarkVCloudClient provideTerremarkClient(TerremarkECloudClient in) {
return in;
}
@Singleton
public static class IsDMZNetwork implements Predicate<ReferenceType> {
private final TerremarkECloudClient client;
@Inject
public IsDMZNetwork(TerremarkECloudClient client) {
this.client = client;
}
@Override
public boolean apply(ReferenceType arg0) {
// TODO FIXME XXX: In Terremark Enterprise environment with multiple
// VDC's
// this does not
// work well.
// Each VDC will have differnt network subnets. So we cannot assume the
// default VDC's
// networks will
// work with non-default VDC's. So make PROPERTY_VCLOUD_DEFAULT_NETWORK
// optional. If
// this property
// is not set, they are expected to add NetworkConfig to the options
// when
// launching a
// server.
Network orgNetwork = client.getNetwork(arg0.getHref());
NetworkExtendedInfo terremarkNetwork = client.getNetworkExtendedInfo(checkNotNull(
checkNotNull(orgNetwork, "network at: " + arg0).getNetworkExtension(), "network extension for: " + arg0)
.getHref());
return checkNotNull(terremarkNetwork, "terremark network extension at: " + orgNetwork.getNetworkExtension())
.getNetworkType() == NetworkExtendedInfo.Type.DMZ;
}
}
@Override
protected void installDefaultVCloudEndpointsModule() {
install(new DefaultVCloudReferencesModule() {
@Override
protected Predicate<ReferenceType> provideDefaultNetworkSelector(Injector i) {
return i.getInstance(IsDMZNetwork.class);
}
});
}
}