Using plumbery from the command-line

Move first to the directory that contains your fittings plan, and then run:

$ python -m plumbery fittings.yaml deploy

Plumbery will load fittings.yaml, then build all blueprints there.

As you can expect, plumbery can be invoked through the entire life cycle of your fittings:

$ python -m plumbery fittings.yaml build
$ python -m plumbery fittings.yaml start
$ python -m plumbery fittings.yaml prepare

... nodes are up and running here ...

$ python -m plumbery fittings.yaml stop
$ python -m plumbery fittings.yaml destroy

The table below presents succinctly all actions that are supported by plumbery.

Action Description
deploy equivalent to: build + configure + start + prepare
dispose equivalent to: stop + destroy
build create network domains, networks, and nodes
configure adds public IP addresses, NAT and firewall rules
start start nodes
prepare contextualise nodes via ssh and cloud-init
information display information put in fittings plan
inventory produce an inventory of all assets deployed
ansible allow ansible to handle nodes and groups deployed by plumbery
ping check the status of nodes and display network addresses
stop stop nodes
wipe destroy only nodes
destroy destroy nodes and other resources
polish apply all polishers configured in fittings plan
secrets display secrets such as random passwords, etc.

How do I handle a subset of cloud resources?

You are right to ask. A common use case is the immediate creation of a new group of servers for some developer. You would not like this to interfere with existing servers. On the other hand, you may really want to destroy a group of unused servers that just add to the monthly invoices.

In plumbery the full fittings plan is split in multiple blueprints, and you can handle each of them separately. The most natural way to think about this is to conceive services as group of servers. For example, the blueprint docker is actually a cluster of nodes plugged into the same network. Look at the sample fittings.yaml file to get an idea of what you can put in a blueprint.

Then you can handle a single blueprint independently from the others:

$ python -m plumbery fittings.yaml build docker
$ python -m plumbery fittings.yaml build sql

... and then later ...

$ python -m plumbery fittings.yaml destroy sql
$ python -m plumbery fittings.yaml build mongodb

How to plumb only at a selected location?

By default Plumbery looks at every location mentioned in fittings plan. Sometimes you may want to limit actions performed to some locations. For this, mention the name of the target location, prefixed by @. As an example, here would be the command to build SQL servers only at NA12:

$ python -m plumbery fittings.yaml build sql @NA12

How to get help from the command line?

$ python -m plumbery -h

When you are not sure of directives put in fittings plan, you can ask plumbery for a dry-run. Use the -s swiftch to keep it safe:

$ python -m plumbery <your_various_args> -s

If some strange behaviour occurs, and you cannot understand what is happening, then you can use the debug option to get more information:

$ python -m plumbery <your_various_args> -d

Of course the switches -s and -d can be combined if needed.