Defining Locations
Defining locations
Locations in Cloudsoft AMP are server resources which AMP can use to deploy applications. These locations may be servers or cloud providers which provide access to servers.
A standard location catalog for AWS could look like the following.
In here we describe 3 locations. One that can be used to target any amazon location (you would then need to configure a region when you deployed a blueprint). This location has an Amazon key and identity. To use the blueprint replace these values with your own. The other two locations extend this basic location by adding region config.
To add these locations to your catalog save the yaml to a file called amazon-locations.bom
and run the following command (which uses the Cloudsoft AMP CLI):
This location will now be available to any application you launch through Cloudsoft AMP. You can see a list of currently available locations using the CLI with:
br catalog
Included in the list should be the amazon entities you just added.
Id Name Spec
...
amazon-anywhere amazon-anywhere brooklyn.catalog:amazon-anywhere:1.0.0
amazon-us-east-1 amazon-us-east-1 brooklyn.catalog:amazon-us-east-1:1.0.0
amazon-us-west-1 amazon-us-west-1 brooklyn.catalog:amazon-us-west-1:1.0.0
...
As with entity catalogs you can version locations and set readable names, ids, and descriptions.
Using a Location
TOSCA does not natively provide for the use and specification of multiple target environments. Cloudsoft AMP provides conveniences to make working with one location simple, and it also provides the capability to use multiple locations, even within a single blueprint.
TOSCA Default Location
Typically a topology_template
does not specify where it should be deployed;
Cloudsoft AMP assumes that a tosca.default.location
has been defined in the catalog,
and will use that location when nothing is specified. For example,
add the following to the catalog to use the amazon-us-east-1
location defined above:
TOSCA topology templates such as the one below will deploy to the location above (unless otherwise configured, as shown further below):
Configuring Custom Locations in a Topology Template
To indicate that a topology template or individual nodes should
deploy to a location other than the tosca.default.location
,
you can specify a group called add_brooklyn_types
of type brooklyn.tosca.groups.initializer
,
containing properties
including a location
containing the Cloudsoft AMP location ID.
For example, the blueprint above could have the following YAML appended to the topology_template
to specify it should deploy to amazon-us-west-1
instead:
It is also possible to use the extended location syntax where additional configuration for the location is supplied, as follows:
As a result, a simple demo application deployed to a custom location
with additional configuration for minRam
can be represented by the following blueprint:
To use one of the locations above, add its ID to your application YAML under a top-level location
key:
It is also possible to supply custom configuration to extend the location definition, as follows:
Save this YAML to test-amazon-location.yaml
and deploy with:
br deploy test-amazon-location.yaml
This will provision and configure a VM then test SSH access.
Catalog and Abbreviated Syntax
Most of the illustrations in this section use location: { parent_id: { config_key: value }}
syntax to illustrate configuring locations.
To convert this to the catalog item
syntax (when adding things to the catalog),
use parent_id
as the type
and provide all the key-pairs
underneath brooklyn.config
, e.g.:
becomes
Testing our deployed application
We should now wait until our application has deployed (or failed to deploy).
br application "location test"
Running the following command will let us know the state of our application.
br application "location test"
Id: cb69jpljes
Name: location test
Status: STARTING
ServiceUp: false
Type: org.apache.brooklyn.entity.stock.BasicApplication
CatalogItemId:
LocationId: gaix92akwi
LocationName: AWS Virginia
LocationSpec: jclouds:aws-ec2
LocationType: org.apache.brooklyn.location.jclouds.JcloudsLocation
As we can see our application has not yet started. We could keep running the same command until we see that our application is ready or we could run something like the following to watch this for us.
br application "location test" | grep STARTING
while [ $? -eq 0 ]; do !!; done ; bp
Now that the application is running we want to make sure that the provisioned VM is accessible. Within our application are the entities that make it up. If an entity has been deployed on a host then it will contain a host.sshAddress sensor with details of how to connect to the host.
To see the entities that make up our app we run:
br application "location test" entity
Id Name Type
mlbnk1bf7e EmptySoftwareProcess:mlbn org.apache.brooklyn.entity.software.base.EmptySoftwareProcess
As we might expect there is only a single entity in our app which is an empty software process that has been “deployed” to an AWS VM. We will want to look at its sensors for the host.sshAdress sensor.
br application "location test" entity mlbnk1bf7e sensor
Name Description Value
download.addon.urls URL patterns for downloading named add-ons (will substitute things like ${version} automatically) null
download.url URL pattern for downloading the installer (will substitute things like ${version} automatically) null
expandedinstall.dir Directory for installed artifacts (e.g. expanded dir after unpacking .tgz) null
host.address Host IP address 50.19.22.101
host.name Host name ec2-50-19-22-101.compute-1.amazonaws.com
host.sshAddress user@host:port for SSH'ing (or null if inappropriate) ampuser@ec2-50-19-22-101.compute-1.amazonaws.com:22
host.subnet.address Host address as known internally in the subnet where it is running (if different to host.name) 10.165.155.118
host.subnet.hostname Host name as known internally in the subnet where it is running (if different to host.name) ec2-50-19-22-101.compute-1.amazonaws.com
install.dir Directory for this software to be installed in /home/users/ampuser/brooklyn-managed-processes/installs/EmptySoftwareProcess
run.dir Directory for this software to be run from /home/users/ampuser/brooklyn-managed-processes/apps/cb69jpljes/entities/EmptySoftwareProcess_mlbnk1bf7e
service.isUp Whether the service is active and availability (confirmed and monitored) true
service.notUp.diagnostics A map of namespaced diagnostics, from when the service is not up {}
service.notUp.indicators A map of namespaced indicators that the service is not up {}
service.process.isRunning Whether the process for the service is confirmed as running true
service.state Actual lifecycle state of the service RUNNING
service.state.expected Last controlled change to service state, indicating what the expected state should be running @ 1467965495843 / Fri Jul 08 09:11:35 BST 2016
softwareprocess.pid.file PID file null
softwareservice.provisioningLocation Location used to provision a machine where this is running {"id":"gaix92akwi","type":"org.apache.brooklyn.api.location.Location"}
We can see the host.sshAddress value in the above table. If we use the value, replacing the : with -p for ssh, we can run the following command.
ssh ampuser@ec2-50-19-22-101.compute-1.amazonaws.com -p 22
Assuming this works we will see a command prompt on our provisioned VM. At this point we might want to provision a more complex blueprint to further test our location.
This section of the documentation has provided a short introduction into locations.
The following sections provide a reference for locations and the differences between different cloud providers,
how to write java to customize locations, and how to troubleshoot issues with a location.