blob: e7f199f13a847756925273c647ace5e4b38b5b3c [file] [log] [blame] [view]
---
title: Locations
---
Locations are the environments to which Brooklyn deploys applications. Most commonly these
are cloud services such as AWS, GCE, and IBM Softlayer. Brooklyn also supports deploying
to a pre-provisioned network or to localhost (primarily useful for testing blueprints).
See also:
* The [Locations yaml guide]({{book.path.docs}}/blueprints/setting-locations.md)
* Use within an entity of the configuration option
[provisioning.properties]({{book.path.docs}}/blueprints/entity-configuration.md#entity-provisioningproperties-overriding-and-merging)
* How to add location definitions to the [Catalog]({{book.path.docs}}/blueprints/catalog/index.md); and
* How to use [Externalized Configuration]({{book.path.docs}}/ops/externalized-configuration.md).
The requirements for how a provisioned machine should behave will depend on the
entites subsequently deployed there.
Below are a set of common assumptions, made by many entity implementations, which
could cause subsequent errors if they do not hold. These relate to the machine's
configuration, rather than additional networking or security that a given Cloud
might offer.
Also see the [Troubleshooting]({{book.path.docs}}/ops/troubleshooting/index.md) docs.
## Remote Access
### SSH or WinRM Access
Many entities require ssh'ing (or using WinRM for Windows), to install and configure
the software.
An example of disabling all ssh'ing is shown below:
location:
aws-ec2:us-east-1:
identity: XXXXXXXX
credential: XXXXXXXX
waitForSshable: false
pollForFirstReachableAddress: false
services:
- type: org.apache.brooklyn.entity.software.base.EmptySoftwareProcess
brooklyn.config:
onbox.base.dir.skipResolution: true
sshMonitoring.enabled: false
### Parsing SSH stdout: No Extra Lines
For entities that execute ssh commands, these sometimes parse the resulting stdout.
It is strongly recommended that VMs are configured so that no additional stdout is written when executing
remote ssh (or WinRM) commands. Such stdout risks interfering with the response parsing in some blueprints.
For example, if configuring the VM to write out "Last login" information, this should be done for only
"interactive" shells (see [Stackoverflow](http://stackoverflow.com/a/415444/1393883) for more details).
### Passwordless Sudo
Does passwordless sudo work?
Try executing:
sudo whoami
See [Passwordless Sudo](#passwordless-sudo).
## Advertised Addresses
### Hostname Resolves Locally
Does the hostname known at the box resolve at the box?
Try executing:
ping $(hostname)
if not, consider setting `generate.hostname: true` in the location config, for jclouds-based locations.
### IP Resolves Locally
For the IP address advertised in Brooklyn using the sensor `host.addresses.private` (or `host.subnet.address`),
can the machine reach that IP?
Get the sensor value, and then try executing:
ping ${PRIVATE_IP}
Is there a public IP (advertised using the sensor `host.addresses.public`, or `host.address`), and can the
machine reach it?
Get the sensor value, and then try executing:
ping ${PUBLIC_IP}
## Networking
### Public Internet Access
Can the machine reach the public internet, and does DNS resolve?
Try executing:
ping www.example.org
### Machine's Hostname in DNS
Is the machine hostname well-known? If ones does a DNS lookup, e.g. from the Brooklyn server, does it resolve and
does it return the expected IP (e.g. the same IP as the `host.addresses.public` sensor)? Try using the hostname
that the machine reports when you execute `hostname`.
Many blueprints do not require this, instead using IP addresses directly. Some blueprints may include registration
with an appropriate DNS server. Some clouds do this automatically.
### Reachability
When provisioning two machines, can these two machines reach each other on the expected IP(s) and hostname(s)?
Try using `ping` from one machine to another using the public or subnet ip or hostname.
However, note that `ping` requires access over ICMP, which may be disabled. Alternatively,
try connecting to a specific TCP port using `telnet <address> <port>`.
### Firewalls
What firewall(s) are running on the machine, and are the required ports open?
On Linux, check things like `iptables`, `firewalld`, `ufw` or other commercial
firewalls. On Windows, check the settings of the
[Windows Firewall](https://en.wikipedia.org/wiki/Windows_Firewall).
Consider using `openIptables: true`, or even `stopIptables: true`.
## Sufficient Entropy for /dev/random
Is there sufficient entropy on the machine, for `/dev/random` to respond quickly?
Try executing:
{ cat /dev/random > /tmp/x & } ; sleep 10 ; kill %1 ; { cat /dev/random > /tmp/x & } ; sleep 1 ; kill %1 ; wc /tmp/x | awk '{print $3}'
The result should be more than 1M.
If not, consider setting `installDevUrandom: true` for jclouds-based locations.
See instructions to [Increase Entropy]({{book.path.docs}}/ops/troubleshooting/increase-entropy.md).
## File System
### Permissions of /tmp
Is `/tmp` writable?
Try executing:
touch /tmp/amp-test-file ; rm /tmp/amp-test-file
Are files in `/tmp` executable (e.g. some places it has been mounted NO_EXECUTE)?
Try executing:
echo date > /tmp/brooklyn-test.sh && chmod +x /tmp/brooklyn-test.sh && /tmp/brooklyn-test.sh && rm /tmp/brooklyn-test.sh
{% include '_clouds.md' %}
{% include '_AWS.md' %}
{% include '_azure-ARM.md' %}
{% include '_azure-classic.md' %}
{% include '_cloudstack.md' %}
{% include '_GCE.md' %}
{% include '_ibm-softlayer.md' %}
{% include '_openstack.md' %}
{% include '_inheritance-and-named-locations.md' %}
{% include '_byon.md' %}
{% include '_ssh-keys.md' %}
{% include '_localhost.md' %}
{% include '_location-customizers.md' %}
{% include '_location-customizer-security-groups.md' %}
{% include '_special-locations.md' %}