ddc7be8a52
Change-Id: Iffda024271159369cc87e4fd7216267fd4512841
140 lines
4.5 KiB
ReStructuredText
140 lines
4.5 KiB
ReStructuredText
===============
|
|
os-apply-config
|
|
===============
|
|
|
|
-----------------------------------------------
|
|
Apply configuration from cloud metadata (JSON)
|
|
-----------------------------------------------
|
|
|
|
What does it do?
|
|
================
|
|
|
|
It turns metadata from one or more JSON files 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
|
|
|
|
By default it will read config files according to the contents of
|
|
the file `/var/lib/os-collect-config/os_config_files.json`. In
|
|
order to remain backward compatible it will also fall back to
|
|
/var/run/os-collect-config/os_config_files.json, but the fallback
|
|
path is deprecated and will be removed in a later release. The main
|
|
path can be changed with the command line switch `--os-config-files`,
|
|
or the environment variable `OS_CONFIG_FILES_PATH`. The list can
|
|
also be overridden with the environment variable `OS_CONFIG_FILES`.
|
|
If overriding with `OS_CONFIG_FILES`, the paths are expected to be colon,
|
|
":", separated. Each json file referred to must have a mapping as their
|
|
root structure. Keys in files mentioned later in the list will override
|
|
keys in earlier files from this list. For example::
|
|
|
|
OS_CONFIG_FILES=/tmp/ec2.json:/tmp/cfn.json os-apply-config
|
|
|
|
This will read `ec2.json` and `cfn.json`, and if they have any
|
|
overlapping keys, the value from `cfn.json` will be used. That will
|
|
populate the tree for any templates found in the template path. See
|
|
https://git.openstack.org/cgit/openstack/os-collect-config for a
|
|
program that will automatically collect data and populate this list.
|
|
|
|
You can also override `OS_CONFIG_FILES` with the `--metadata` command
|
|
line option, specifying it multiple times instead of colon separating
|
|
the list.
|
|
|
|
`os-apply-config` will also always try to read metadata in the old
|
|
legacy paths first to populate the tree. These paths can be changed
|
|
with `--fallback-metadata`.
|
|
|
|
Templates
|
|
=========
|
|
|
|
The template directory structure should mimic a root filesystem, and
|
|
contain templates for only those files you want configured. For
|
|
example::
|
|
|
|
~/my_templates$ tree
|
|
.
|
|
└── etc
|
|
├── keystone
|
|
│ └── keystone.conf
|
|
└── mysql
|
|
└── mysql.conf
|
|
|
|
An example tree can be found `here <http://git.openstack.org/cgit/openstack/tripleo-image-elements/tree/elements/keystone/os-apply-config>`_.
|
|
|
|
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://git.openstack.org/openstack/os-apply-config.git
|
|
|
|
# grab example templates
|
|
git clone git://git.openstack.org/openstack/tripleo-image-elements /tmp/config
|
|
|
|
# run it
|
|
os-apply-config -t /tmp/config/elements/nova/os-apply-config/ -m /tmp/config/elements/seed-stack-config/config.json -o /tmp/config_output
|