Here are some quick and simple Yaybu examples to show you what you can do right now and we are working on.
To use Yaybu you write first need to write a Yaybufile. This describes the infrastructure you want to deploy.
Here is an example that provisions 2 compute nodes with different hosting providers and sets up subdomains for them. Yaybu is quite happy talking to Amazon EC2, BigV and Gandi DNS all from the same deployment:
new Provisioner as instance1:
new Compute as server:
driver:
id: BIGV
key: yourusername
secret: yourpassword
account: youraccountname
image: precise
name: test_at_bigv
user: root
password: aez5Eep4
resources:
- File:
name: /etc/heartbeat.conf
template: heartbeat.conf.j2
template_args:
partner: {{ instance2.public_ip }}
new Provisioner as instance2:
new Compute as server:
driver:
id: EC2
key: yourusername
secret: yourpassword
image: ami-57afb223
name: test_at_ec2
user: root
public_key: instance2.pub
private_key: instance2.priv
resources:
- File:
name: /etc/heartbeat.conf
template: heartbeat.conf.j2
template_args:
partner: {{ instance1.public_ip }}
new Zone as dns:
driver:
id: GANDI
key: yourgandikey
domain: example.com
records:
- name: instance1
data: {{ instance1.server.public_ip }}
- name: instance2
data: {{ instance2.server.public_ip }}
Currently the following commands are available:
You can do yaybu help COMMAND to learn more about each of these.
Parts are the building blocks that you connect together to describe your services and how to deploy them. There are several core ones at the moment.
The Compute part can be used to create and destroy services in various cloud services supported by libcloud.
The Provisioner part provides idempotent configuration of UNIX servers that can be accessed by SSH. It can be connected to Compute part to create and deploy to a new cloud server, or it can be pointed at a static set of SSH connection details to deploy to a dedicated server.
The part needs connection details, these are provided through the server parameter:
new Provisioner as provisioner:
server:
fqdn: example.com
port: 22
username: root
password: penguin55
private_key: path/to/id_rsa
The part deploys a list of resources provided by the resources parameter. These are idempotent - when used correctly they only make changes that need making, which means that you can see quite clearly what has been changed by an update deployment and it is safe to run repeatedly.
For detailed documentation of the resources you can you see the online documention.
The Zone part uses the libcloud DNS API to manage DNS entries in various cloud services.
You can reference encrypted yay files in your Yaybufile:
include "mysecrets.yay.gpg"
Any include of a .gpg file is automatically decrypted, using your gpg-agent to prompt for any passphrases that are required.
Additionally the file ~/.yaybu/defaults.yay.gpg is automatically loaded when Yaybu starts. This is useful for storing your credentials/tokens outside of your code repository and easily injected them into multiple projects.
For vim users, vim-gnupg is a gret way to transparently edit your GPG armored configuration files.