How to beachhead on the MCP?

In many cloud deployments, the appropriate strategy is to run administration servers directly in the cloud. This usually facilitates a lot end-to-end connectivity to the other nodes.

For example, Dimension Data provides IPv6 connectivity to every virtual server. However, very few infrastructure managers do have IPv6 at their workstation. Therefore the recommendation to deploy a seminal server to the cloud infrastructure, since this machine will benefit from IPv6 end-to-end.

Requirements for this use case

  • Add a Network Domain
  • Add an Ethernet network
  • Deploy a Ubuntu server named beachhead
  • Monitor this server
  • Assign a public IPv4 address to beachhead
  • Add address translation to ensure end-to-end IP connectivity
  • Add firewall rule to accept TCP traffic on port 22 (ssh)
  • Install python, libcloud and plumbery

Fittings plan

Copy the text below and put it in a text file named fittings.yaml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 locationId: NA12
 regionId: dd-na

 blueprints:

   - beachhead:

       domain:
         name: Acme
         ipv4: 2

       ethernet:
         name: acme.control
         subnet: 10.0.0.0

       nodes:

         - beachhead:

             description: '#beachhead #ops'

             glue:
               - internet 22

             running: always
             monitoring: essentials

             cloud-config:

               disable_root: false
               ssh_pwauth: True

               packages:
                 - python-pip
                 - python-dev
                 - git

               runcmd:
                 - pip install -e git+https://github.com/apache/libcloud.git#egg=apache-libcloud
                 - pip install -e git+https://github.com/DimensionDataCBUSydney/plumbery.git#egg=plumbery

In this example, the plan is to deploy a single node in the data centre at Frankfurt, in Europe. The node beachhead is placed in a network named acme.control, and the network is part of a network domain acting as a virtual data centre, Acme. The blueprint has a name, beachhead, so that it can be handled independently from other blueprints.

Some notes on directives used in these fittings plan:

service: advanced - Dimension Data provides several flavours of Network Domains. Here the decision is to deploy an advanced domain

ipv4: 2 - This is to reserve some public IPv4 addresses. Here we anticipate on the public address assigned to the beachhead node.

glue: - This directive adds connectivity to a node, either by assigning a public IPv4 address to the Internet, or by adding network interfaces to additional networks. With internet 22, Plumbery assigns a public IPv4 address and adds a NAT rule to the firewall.

running: always - This directive prevents plumbery from stopping the node. In other terms, the command python -m plumbery stop is inoperative. And because plumbery cannot destroy a running node, this directive also prevents the deletion of beachhead.

monitoring: essential - Automatically adds monitoring to this node after its creation.

cloud-config - A list of statements that are passed to cloud-init so that they can be applied to the node during boot sequence. In this example we install a couple of packages, and run commands to install libcloud and plumbery itself. There are many ways to use cloud-init, maybe you would like to check a reference page full of examples.

Deployment commands

$ python -m plumbery fittings.yaml deploy

These commands will build fittings as per the provided plan, start the target node, and apply all cloud-init directives.

Follow-up commands

In this use case you can use the IPv4 assigned to the node for direct ssh connection.

$ ssh root@<ipv4_here>

You will have to accept the new host, then provide the password used for the creation of the node beahhead.

After that you can do whatever you want on this server.