Apply configuration from cloud metadata.
Go to file
Robert Collins ba51abbdf1 Rename to os-apply-config.
The name os-config-applier was too confusing given os-refresh-config as the
partner program, so we've decided to rename to os-apply-config.

To aid migration the old command name and default template path are still
supported.

Change-Id: I39725595275e7b4375ac4fda52e6a14b7071f7e9
2013-06-14 15:30:14 +12:00
os_apply_config Rename to os-apply-config. 2013-06-14 15:30:14 +12:00
.gitignore Rename to os-apply-config. 2013-06-14 15:30:14 +12:00
.gitreview Adding stackforge .gitreview file 2013-03-27 21:10:31 -07:00
.testr.conf Remove env vars we don't use. 2013-03-28 04:05:31 +01:00
.travis.yml Aligned tests with OpenStack standards. 2013-03-28 03:40:38 +01:00
LICENSE Aligned tests with OpenStack standards. 2013-03-28 03:40:38 +01:00
README.md Rename to os-apply-config. 2013-06-14 15:30:14 +12:00
requirements.txt Make main() return rather than call sys.exit 2013-04-10 15:56:34 -07:00
setup.cfg Rename to os-apply-config. 2013-06-14 15:30:14 +12:00
setup.py Migrate to pbr and testr. 2013-03-28 02:37:45 +01:00
test-requirements.txt Align to OpenStack Hacking rules. 2013-03-28 04:03:46 +01:00
tox.ini Migrate to pbr and testr. 2013-03-28 02:37:45 +01:00

README.md

os-apply-config

Apply configuration from cloud metadata (JSON).

What does it do?

It turns a cloud-metadata file like this:

{"keystone": {"database": {"host": "127.0.0.1", "user": "keystone", "password": "foobar"}}}

into service config files like this:

[sql]
connection = mysql://keystone:foobar@127.0.0.1/keystone
...other settings...

Usage

Just pass it the path to a directory tree of templates:

sudo os-apply-config -t /home/me/my_templates

Templates

The template directory structure should mimic a root filesystem, and contain templates for only those files you want configured.

e.g.

~/my_templates$ tree
.
└── etc
    ├── keystone
    │   └── keystone.conf
    └── mysql
        └── mysql.conf

An example tree can be found here.

If a template is executable it will be treated as an executable template. Otherwise, it will be treated as a mustache template.

Mustache Templates

If you don't need any logic, just some string substitution, use a mustache template.

Metadata settings are accessed with dot ('.') notation:

[sql]
connection = mysql://{{keystone.database.user}}:{{keystone.database.password}@{{keystone.database.host}}/keystone

Executable Templates

Configuration requiring logic is expressed in executable templates.

An executable template is a script which accepts configuration as a JSON string on standard in, and writes a config file to standard out.

The script should exit non-zero if it encounters a problem, so that os-apply-config knows what's up.

The output of the script will be written to the path corresponding to the executable template's path in the template tree.

#!/usr/bin/env ruby
require 'json'
params = JSON.parse STDIN.read
puts "connection = mysql://#{c['keystone']['database']['user']}:#{c['keystone']['database']['password']}@#{c['keystone']['database']['host']}/keystone"

You could even embed mustache in a heredoc, and use that:

#!/usr/bin/env ruby
require 'json'
require 'mustache'
params = JSON.parse STDIN.read

template = <<-eos
[sql]
connection = mysql://{{keystone.database.user}}:{{keystone.database.password}}@{{keystone.database.host}}/keystone

[log]
...
eos

# tweak params here...

puts Mustache.render(template, params)

Quick Start

# install it
sudo pip install -U git+git://github.com/stackforge/os-config-applier.git

# grab example templates
git clone git://github.com/stackforge/triple-image-elements /tmp/config

# run it
os-apply-config -t /tmp/config/elements/nova/os-config-applier/ -m /tmp/config/elements/boot-stack/config.json -o /tmp/config_output