blob: 7ab441fa6cc23c5abc04bab710a9a8924d4603a6 [file] [view]
---
section: Apache CloudStack
title: Apache CloudStack
section_type: inline
section_position: 4
---
## Apache CloudStack
### Connection Details
The endpoint URI will normally have the suffix `/client/api/`.
The identity is the "API key" and the credential is the "secret key". These can be generated in
the CloudStack GUI: under accounts, select "view users", then "generate key".
location:
jclouds:cloudstack:
endpoint: https://cloud.acme.com/client/api
identity: abcdefghijklmnopqrstuvwxyz01234567890-abcdefghijklmnopqrstuvwxyz01234567890-abcdefghij
credential: mycred-abcdefghijklmnopqrstuvwxyz01234567890-abcdefghijklmnopqrstuvwxyz01234567890-abc
Users are strongly recommended to use
[externalized configuration](/guide/ops/externalized-configuration.md) for better
credential management, for example using [Vault](https://www.vaultproject.io/).
### Common Configuration Options
Below are examples of configuration options that use values specific to CloudStack environments:
* The `imageId` is the template id. For example,
`imageId: db0bcce3-9e9e-4a87-a953-2f46b603498f`.
* The `region` is CloudStack zone id.
For example `region: 84539b9c-078e-458a-ae26-c3ffc5bb1ec9`..
* `networkName` is the network id (within the given zone) to be used. For example,
`networkName: 961c03d4-9828-4037-9f4d-3dd597f60c4f`.
For further configuration options, consult
[jclouds CloudStack template options](https://jclouds.apache.org/reference/javadoc/1.9.x/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.html).
These can be used with the **[templateOptions](#custom-template-options)** configuration option.
### Using a Pre-existing Key Pair
The configuration below uses a pre-existing key pair:
location:
jclouds:cloudstack:
...
loginUser: root
loginUser.privateKeyFile: /path/to/keypair.pem
keyPair: my-keypair
### Using Pre-existing Security Groups
To specify existing security groups, their IDs must be used rather than their names (note this
differs from the configuration on other clouds!).
The configuration below uses a pre-existing security group:
location:
jclouds:cloudstack:
...
templateOptions:
generateSecurityGroup: false
securityGroupIds:
- 12345678-90ab-def0-1234-567890abcdef
### Using Static NAT
Assigning a public IP to a VM at provision-time is referred to as "static NAT" in CloudStack
parlance. To give some consistency across different clouds, the configuration option is named
`autoAssignFloatingIp`. For example, `autoAssignFloatingIp: false`.
### CloudMonkey CLI
The [CloudStack CloudMonkey CLI](https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+cloudmonkey+CLI)
is a very useful tool. It gives is an easy way to validate that credentials are correct, and to query
the API to find the correct zone IDs etc.
Useful commands include:
# for finding the ids of the zones:
cloudmonkey api listZones
# for finding the ids of the networks.
cloudmonkey api listNetworks | grep -E "id =|name =|========="
### CloudStack Troubleshooting
These troubleshooting tips are more geared towards problems encountered in old test/dev
CloudStack environment.
#### Resource Garbage Collection Issues
The environment may run out of resources, due to GC issues, preventing the user from creating new
VMs or allocating IP addresses (May respond with this error message:
`errorCode=INTERNAL_ERROR, errorText=Job failed due to exception Unable to create a deployment for VM`).
There are two options worth checking it to enforce clearing up the zombie resources:
* Go to the Accounts tab in the webconsole and tap on the Update Resource Count button.
* Restart the VPC in question from the Network tab.
#### Releasing Allocated Public IP Addresses
Releasing an allocated Public IP from the web console did not free up the resources. Instead
CloudMonkey can be used to dissociate IPs and expunge VMs.
Here is a CloudMonkey script to dissociate any zombie IPs:
cloudmonkey set display json;
cloudmonkey api listPublicIpAddresses | grep '"id":' > ips.txt;
sed -i -e s/' "id": "'/''/g ips.txt;
sed -i -e s/'",'/''/g ips.txt
for line in $(cat ips.txt); do cloudmonkey api disassociateIpAddress id="$line"; done
rm ips.txt;
cloudmonkey set display default;
#### Restarting VPCs
Errors have been encountered when a zone failed to provision new VMs, with messages like:
Job failed due to exception Resource [Host:15] is unreachable: Host 15: Unable to start instance due to null
The workaround was to restart the VPC networks:
* Log into the CloudStack web-console.
* Go to Network -> VPC (from the "select view")
* For each of the VPCs, click on the "+" in the "quickview" column, and invoke "restart VPC".
Other symptoms of this issue were that: 1) an administrator could still provision VMs using
the admin account, which used a different network; and 2) the host number was very low, so it
was likely to be a system host/VM that was faulty.