Nodes

Working with nodes, services, tags, and locations.

Locations

All nodes should have a location.name specified, and optionally additional information about the location, like the time zone. This location information is used for two things:

The location stanza in a node’s config file looks like this:

{
  "location": {
    "id": "ankara",
    "name": "Ankara",
    "country_code": "TR",
    "timezone": "+2",
    "hemisphere": "N"
  }
}

The fields:

These location options are very imprecise, but good enough for most usage. The client often does not know its own location precisely either. Instead, the client makes an educated guess at location based on the OS’s timezone and locale.

If you have multiple nodes in a single location, it is best to use a tag for the location. For example:

tags/ankara.json:

{
  "location": {
    "name": "Ankara",
    "country_code": "TR",
    "timezone": "+2",
    "hemisphere": "N"
  }
}

nodes/vpngateway.json:

{
  "services": "openvpn",
  "tags": ["production", "ankara"],
  "ip_address": "1.1.1.1",
  "openvpn": {
    "gateway_address": "1.1.1.2"
  }
}

Unless you are using OpenStack or AWS, setting location for nodes is not required. It is, however, highly recommended.

Disabling Nodes

There are two ways to temporarily disable a node:

Option 1: disabled environment

You can assign an environment to the node that marks it as disabled. Then, if you use environment pinning, the node will be ignored when you deploy. For example:

{
  "environment": "disabled"
}

Then use leap env pin ENV to pin the environment to something other than ‘disabled’. This only works if all the other nodes are also assigned to some environment.

Option 2: enabled == false

If a node has a property enabled set to false, then the leap command will skip over the node and pretend that it does not exist. For example:

{
  "ip_address": "1.1.1.1",
  "services": ["openvpn"],
  "enabled": false
}

Options 3: no-deploy

If the file /etc/leap/no-deploy exists on a node, then when you run the commmand leap deploy it will halt and prevent a deploy from going through (if the node was going to be included in the deploy).