# Licensed to libcloud.org under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# libcloud.org 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.

# Make a copy of this file named 'secrets.py' and add your credentials there.
# Note you can run unit tests without setting your credentials.

# for test_ec2.py
EC2_ACCESS_ID='YoUR K3Y'
EC2_SECRET='secr3t'

RACKSPACE_USER=''
RACKSPACE_KEY=''

SLICEHOST_KEY=''

VPSNET_USER=''
VPSNET_KEY=''

GOGRID_API_KEY=''
GOGRID_SECRET=''

LINODE_KEY=''

HOSTINGCOM_USER=''
HOSTINGCOM_SECRET=''

TERREMARK_USER=''
TERREMARK_SECRET=''

VOXEL_KEY=''
VOXEL_SECRET=''
