# Deploying to Rackspace using salt-cloud

## Deploying Rackspace Cloud servers using salt-cloud.

These instructions should be a nice and easy start to deploying Rackspace Cloud servers using the salt-cloud tool. Just follow along exactly, and at the end you should have a fully functional salt-cloud deployment tool.

## Dependencies

I’m performing my installation on a Debian 7 (Wheezy) server, where my salt-master already exists. The following two commands should install salt-cloud, and all the necessary dependencies. This assumes you are already using the Python tool pip.

apt-get install sshpass
pip install salt-cloud apache-libcloud


## Configuration

Here are the configuration files we need to put in place. Replace the appropriate sections with your account information.

### /etc/salt/cloud.providers.d/rackspace.conf

my-rackspace-config:
# Set the location of the salt-master
#
minion:
master: saltmaster.yourdomain.com

# Configure Rackspace using the OpenStack plugin
#
identity_url: 'https://identity.api.rackspacecloud.com/v2.0/tokens'
compute_name: cloudServersOpenStack
protocol: ipv4

# Set the compute region:
#
compute_region: DFW

# Configure Rackspace authentication credentials
#
tenant: 123456
apikey: xxxxxxxxxxxxxxxxxxxxxxxxxxxx

provider: openstack


Be sure to replace the appropriate sections with your specific information:

• my-rackspace-config can be whatever label you want to use. Depending on your use case, it might make sense to identify specific regions by this name.
• saltmaster.yourdomain.com should be replaced with your salt-master’s DNS name.
• compute_region should be set to the region where you want to deploy resources. Options include DFW, ORD, SYD, and IAD if you have a US Rackspace account.
• tenant is your Rackspace Account Number. This can be found at the top, right of your Rackspace Control Panel.
• apikey can be found in the Rackspace Control Panel as well. Just go to your Account Settings and look for the API Key.

### /etc/salt/cloud.profiles.d/openstack.conf

Here you define the different server profiles. These will determine options such as server size and operating system. Here’s mine:

openstack_512:
provider: my-rackspace-config
size: 512MB Standard Instance
image: Debian 7 (Wheezy)


To see a listing of available sizes and instances, run the following commands. Make sure your provider file is in place, or this won’t work.

salt-cloud --list-sizes=my-rackspace-config
salt-cloud --list-images=my-rackspace-config


## Deployment

Now, let’s deploy a test instance of the server we just defined.

salt-cloud -p openstack_512 testinstance


This should start outputting information on the process. The longest wait in this process will be the server’s build. Once it completes, you’ll see the output of salt-cloud logging into the server and running various commands to bootstrap the system. At the end, you should see output similar to the following:

testinstance:
----------
_uuid:
None
driver:
extra:
----------
created:
2013-08-22T20:00:50Z
flavorId:
2
hostId:

imageId:
23b564c9-c3e6-49f9-bc68-86c7a9ab5018
key_name:
None
----------
sosecret
tenantId:
123456
updated:
2013-08-22T20:00:50Z
uri:
id:
UUID
image:
None
name:
testinstance
private_ips:
- 10.x.x.x
public_ips:
- 2001:
- x.x.x.x
size:
None
state:
3


To delete this test instance, just run the following command. It will prompt for confirmation before actually deleting the instance.

salt-cloud -d testinstance


As you can see, this makes spinning up resources using SaltStack very easy, and automatically ties these new resources into your salt-master. Now go populate your profiles, and also checkout maps to automate the deployment of many machines at once.