diff --git a/src/main/java/com/netflix/simianarmy/client/eucalyptus/EucalyptusChaosMonkeyContext.java b/src/main/java/com/netflix/simianarmy/client/eucalyptus/EucalyptusChaosMonkeyContext.java new file mode 100644 index 00000000..8e81d736 --- /dev/null +++ b/src/main/java/com/netflix/simianarmy/client/eucalyptus/EucalyptusChaosMonkeyContext.java @@ -0,0 +1,104 @@ +/************************************************************************* + * Copyright 2009-2012 Eucalyptus Systems, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta + * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need + * additional information or have any questions. + * + * This file may incorporate work covered under the following copyright + * and permission notice: + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, Regents of the University of California + * All rights reserved. + * + * Redistribution and use of this software in source and binary forms, + * with or without modification, are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. USERS OF THIS SOFTWARE ACKNOWLEDGE + * THE POSSIBLE PRESENCE OF OTHER OPEN SOURCE LICENSED MATERIAL, + * COPYRIGHTED MATERIAL OR PATENTED MATERIAL IN THIS SOFTWARE, + * AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY DISCOVERING + * IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF CALIFORNIA, + * SANTA BARBARA WHO WILL THEN ASCERTAIN THE MOST APPROPRIATE REMEDY, + * WHICH IN THE REGENTS' DISCRETION MAY INCLUDE, WITHOUT LIMITATION, + * REPLACEMENT OF THE CODE SO IDENTIFIED, LICENSING OF THE CODE SO + * IDENTIFIED, OR WITHDRAWAL OF THE CODE CAPABILITY TO THE EXTENT + * NEEDED TO COMPLY WITH ANY SUCH LICENSES OR RIGHTS. + ************************************************************************/ + +package com.netflix.simianarmy.client.eucalyptus; + +import com.netflix.simianarmy.CloudClient; +import com.netflix.simianarmy.basic.BasicChaosMonkeyContext; +import com.netflix.simianarmy.client.aws.AWSClient; + +/** + * @todo doc + * @author chris grzegorczyk + */ +public class EucalyptusChaosMonkeyContext extends BasicChaosMonkeyContext { + + private EucalyptusClient eucaClient; + + public EucalyptusChaosMonkeyContext( ) { + super( ); + } + + @Override + protected void createClient( ) { + String hostName = this.getProperties( ).getProperty( "simianarmy.client.eucalyptus.hostName" ); + String accessKey = this.getProperties( ).getProperty( "simianarmy.client.eucalyptus.accountKey" ); + String secretKey = this.getProperties( ).getProperty( "simianarmy.client.eucalyptus.secretKey" ); + this.eucaClient = new EucalyptusClient( region( ), hostName, accessKey, secretKey ); + this.setCloudClient( eucaClient ); + } + + + @Override + public AWSClient awsClient( ) { + return eucaClient; + } + + @Override + public CloudClient cloudClient( ) { + return eucaClient; + } + + + + +} diff --git a/src/main/java/com/netflix/simianarmy/client/eucalyptus/EucalyptusClient.java b/src/main/java/com/netflix/simianarmy/client/eucalyptus/EucalyptusClient.java new file mode 100644 index 00000000..61b1d6a1 --- /dev/null +++ b/src/main/java/com/netflix/simianarmy/client/eucalyptus/EucalyptusClient.java @@ -0,0 +1,112 @@ +/************************************************************************* + * Copyright 2009-2012 Eucalyptus Systems, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta + * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need + * additional information or have any questions. + * + * This file may incorporate work covered under the following copyright + * and permission notice: + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, Regents of the University of California + * All rights reserved. + * + * Redistribution and use of this software in source and binary forms, + * with or without modification, are permitted provided that the + * following conditions are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. USERS OF THIS SOFTWARE ACKNOWLEDGE + * THE POSSIBLE PRESENCE OF OTHER OPEN SOURCE LICENSED MATERIAL, + * COPYRIGHTED MATERIAL OR PATENTED MATERIAL IN THIS SOFTWARE, + * AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY DISCOVERING + * IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF CALIFORNIA, + * SANTA BARBARA WHO WILL THEN ASCERTAIN THE MOST APPROPRIATE REMEDY, + * WHICH IN THE REGENTS' DISCRETION MAY INCLUDE, WITHOUT LIMITATION, + * REPLACEMENT OF THE CODE SO IDENTIFIED, LICENSING OF THE CODE SO + * IDENTIFIED, OR WITHDRAWAL OF THE CODE CAPABILITY TO THE EXTENT + * NEEDED TO COMPLY WITH ANY SUCH LICENSES OR RIGHTS. + ************************************************************************/ + +package com.netflix.simianarmy.client.eucalyptus; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.services.autoscaling.AmazonAutoScalingClient; +import com.amazonaws.services.ec2.AmazonEC2; +import com.amazonaws.services.ec2.AmazonEC2Client; +import com.netflix.simianarmy.CloudClient; +import com.netflix.simianarmy.client.aws.AWSClient; + +/** + * @todo doc + * @author chris grzegorczyk + */ +public class EucalyptusClient extends AWSClient implements CloudClient { + + private final AWSCredentials eucalyptusCredentials; + private final String accessKey; + private final String secretKey; + private final String hostName; + + + + EucalyptusClient( String region, String hostName, String accessKey, String secretKey ) { + super( region ); + this.accessKey = accessKey; + this.secretKey = secretKey; + this.hostName = hostName; + this.eucalyptusCredentials = new BasicAWSCredentials(accessKey, secretKey); + } + + @Override + protected AmazonEC2 ec2Client( ) { + AmazonEC2 client = new AmazonEC2Client(eucalyptusCredentials); + client.setEndpoint("http://"+this.hostName+":8773/services/Eucalyptus/"); + return client; + } + + @Override + protected AmazonAutoScalingClient asgClient( ) { + AmazonAutoScalingClient client; + client = new AmazonAutoScalingClient(eucalyptusCredentials); + client.setEndpoint("http://"+this.hostName+":8773/services/AutoScaling/"); + return client; + } + + + +}