mirror of https://github.com/apache/jclouds.git
LibvirtConstants
This commit is contained in:
parent
02611ad2ef
commit
013b1714c1
|
@ -0,0 +1,33 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.libvirt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration properties and constants used in libvirt local connections.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public interface LibvirtConstants {
|
||||||
|
public static final String PROPERTY_LIBVIRT_DOMAIN_DIR = "jclouds.libvirt.domain.dir";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//public static final String PROPERTY_AUTH_TAG = "jclouds.aws.auth.tag";
|
||||||
|
//public static final String PROPERTY_HEADER_TAG = "jclouds.aws.header.tag";
|
|
@ -0,0 +1,110 @@
|
||||||
|
package org.jclouds.libvirt.compute;
|
||||||
|
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import javax.inject.Provider;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
|
import org.jclouds.Constants;
|
||||||
|
import org.jclouds.collect.Memoized;
|
||||||
|
import org.jclouds.compute.ComputeServiceContext;
|
||||||
|
import org.jclouds.compute.domain.Hardware;
|
||||||
|
import org.jclouds.compute.domain.Image;
|
||||||
|
import org.jclouds.compute.domain.NodeMetadata;
|
||||||
|
import org.jclouds.compute.domain.TemplateBuilder;
|
||||||
|
import org.jclouds.compute.internal.BaseComputeService;
|
||||||
|
import org.jclouds.compute.options.TemplateOptions;
|
||||||
|
import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
|
||||||
|
import org.jclouds.compute.strategy.DestroyNodeStrategy;
|
||||||
|
import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
|
||||||
|
import org.jclouds.compute.strategy.ListNodesStrategy;
|
||||||
|
import org.jclouds.compute.strategy.RebootNodeStrategy;
|
||||||
|
import org.jclouds.compute.strategy.ResumeNodeStrategy;
|
||||||
|
import org.jclouds.compute.strategy.RunNodesAndAddToSetStrategy;
|
||||||
|
import org.jclouds.compute.strategy.SuspendNodeStrategy;
|
||||||
|
import org.jclouds.compute.util.ComputeUtils;
|
||||||
|
import org.jclouds.domain.Credentials;
|
||||||
|
import org.jclouds.domain.Location;
|
||||||
|
import org.libvirt.Connect;
|
||||||
|
import org.libvirt.StorageVol;
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.common.base.Supplier;
|
||||||
|
import com.google.common.base.Throwables;
|
||||||
|
import com.jamesmurty.utils.XMLBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author andrea turli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
public class LibvirtComputeService extends BaseComputeService {
|
||||||
|
|
||||||
|
private final Connect client;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
protected LibvirtComputeService(ComputeServiceContext context,
|
||||||
|
Map<String, Credentials> credentialStore,
|
||||||
|
@Memoized Supplier<Set<? extends Image>> images,
|
||||||
|
@Memoized Supplier<Set<? extends Hardware>> hardwareProfiles,
|
||||||
|
@Memoized Supplier<Set<? extends Location>> locations,
|
||||||
|
ListNodesStrategy listNodesStrategy,
|
||||||
|
GetNodeMetadataStrategy getNodeMetadataStrategy,
|
||||||
|
RunNodesAndAddToSetStrategy runNodesAndAddToSetStrategy,
|
||||||
|
RebootNodeStrategy rebootNodeStrategy,
|
||||||
|
DestroyNodeStrategy destroyNodeStrategy,
|
||||||
|
ResumeNodeStrategy resumeNodeStrategy,
|
||||||
|
SuspendNodeStrategy suspendNodeStrategy,
|
||||||
|
Provider<TemplateBuilder> templateBuilderProvider,
|
||||||
|
Provider<TemplateOptions> templateOptionsProvider,
|
||||||
|
@Named("NODE_RUNNING") Predicate<NodeMetadata> nodeRunning,
|
||||||
|
@Named("NODE_TERMINATED") Predicate<NodeMetadata> nodeTerminated,
|
||||||
|
@Named("NODE_SUSPENDED") Predicate<NodeMetadata> nodeSuspended, ComputeUtils utils,
|
||||||
|
Timeouts timeouts,
|
||||||
|
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor,
|
||||||
|
Connect client) {
|
||||||
|
super(context, credentialStore, images, hardwareProfiles, locations,
|
||||||
|
listNodesStrategy, getNodeMetadataStrategy,
|
||||||
|
runNodesAndAddToSetStrategy, rebootNodeStrategy, destroyNodeStrategy,
|
||||||
|
resumeNodeStrategy, suspendNodeStrategy, templateBuilderProvider,
|
||||||
|
templateOptionsProvider, nodeRunning, nodeTerminated, nodeSuspended,
|
||||||
|
utils, timeouts, executor);
|
||||||
|
|
||||||
|
this.client = client;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroyNode(String id) {
|
||||||
|
super.destroyNode(id);
|
||||||
|
eliminateDomain(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void eliminateDomain(String id) {
|
||||||
|
try {
|
||||||
|
XMLBuilder builder = XMLBuilder.parse(new InputSource(new StringReader(
|
||||||
|
client.domainLookupByUUIDString(id).getXMLDesc(0)
|
||||||
|
)));
|
||||||
|
String diskFileName = builder.xpathFind("//devices/disk[@device='disk']/source").getElement().getAttribute("file");
|
||||||
|
StorageVol storageVol = client.storageVolLookupByPath(diskFileName);
|
||||||
|
storageVol.delete(0);
|
||||||
|
client.domainLookupByUUIDString(id).undefine();
|
||||||
|
} catch (Exception e) {
|
||||||
|
propogate(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected <T> T propogate(Exception e) {
|
||||||
|
Throwables.propagate(e);
|
||||||
|
assert false;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,73 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* Licensed 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.libvirt.compute;
|
||||||
|
|
||||||
|
import static org.jclouds.Constants.PROPERTY_API_VERSION;
|
||||||
|
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||||
|
import static org.jclouds.libvirt.LibvirtConstants.PROPERTY_LIBVIRT_DOMAIN_DIR;
|
||||||
|
import static org.jclouds.compute.reference.ComputeServiceConstants.PROPERTY_TIMEOUT_NODE_SUSPENDED;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.jclouds.PropertiesBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds properties used in Libvirt Clients
|
||||||
|
*
|
||||||
|
* @author Andrea Turli
|
||||||
|
*/
|
||||||
|
public class LibvirtPropertiesBuilder extends PropertiesBuilder {
|
||||||
|
@Override
|
||||||
|
protected Properties defaultProperties() {
|
||||||
|
Properties properties = super.defaultProperties();
|
||||||
|
properties.setProperty(PROPERTY_LIBVIRT_DOMAIN_DIR, "/etc/libvirt/qemu");
|
||||||
|
|
||||||
|
/*
|
||||||
|
properties.setProperty(PROPERTY_AUTH_TAG, "AWS");
|
||||||
|
properties.setProperty(PROPERTY_HEADER_TAG, "amz");
|
||||||
|
properties.setProperty(PROPERTY_ENDPOINT, "https://ec2.us-east-1.amazonaws.com");
|
||||||
|
properties.setProperty(PROPERTY_API_VERSION, EC2AsyncClient.VERSION);
|
||||||
|
properties.setProperty(PROPERTY_ELB_ENDPOINT, "https://elasticloadbalancing.us-east-1.amazonaws.com");
|
||||||
|
// amazon, alestic, canonical, and rightscale
|
||||||
|
properties.setProperty(PROPERTY_EC2_AMI_OWNERS, "137112412989,063491364108,099720109477,411009282317");
|
||||||
|
// amis that work with the cluster instances
|
||||||
|
properties.setProperty(PROPERTY_EC2_CC_AMIs, "us-east-1/ami-7ea24a17");
|
||||||
|
*/
|
||||||
|
|
||||||
|
// sometimes, like in ec2, stop takes a very long time, perhaps
|
||||||
|
// due to volume management. one example spent 2 minutes moving
|
||||||
|
// from stopping->stopped state on an ec2 micro
|
||||||
|
properties.setProperty(PROPERTY_TIMEOUT_NODE_SUSPENDED, 120 * 1000 + "");
|
||||||
|
// auth fail sometimes happens in EC2, as the rc.local script that injects the
|
||||||
|
// authorized key executes after ssh has started
|
||||||
|
properties.setProperty("jclouds.ssh.max_retries", "7");
|
||||||
|
properties.setProperty("jclouds.ssh.retryable_messages",
|
||||||
|
"Auth fail,invalid data,End of IO Stream Read,Connection reset,socket is not established");
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LibvirtPropertiesBuilder(Properties properties) {
|
||||||
|
super(properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LibvirtPropertiesBuilder() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue