Skip to main content

os-apply-config

https://governance.openstack.org/tc/badges/os-apply-config.svg

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://opendev.org/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.

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+https://opendev.org/openstack/os-apply-config.git

# grab example templates
git clone https://opendev.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

Metadata

Release files for os-apply-config 14.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for os-apply-config 14.1.0
File Size Uploaded
os_apply_config-14.1.0.tar.gz 28.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for os-apply-config 14.1.0
File Interpreter ABI Platform
os_apply_config-14.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 60.3 kB

Release files / os_apply_config-14.1.0.tar.gz

Download URL os_apply_config-14.1.0.tar.gz
Size 28.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ce03293fb7d23525549927696a1d9980972b5900d5619cc91c0f1a16992e9baf
BLAKE2b-256 checksum
How to use checksums
927d3b61e15decd3d6ef76cdb589d8d44676dd8479eb93153cd1b89adc5cc1d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / os_apply_config-14.1.0-py3-none-any.whl

Download URL os_apply_config-14.1.0-py3-none-any.whl
Size 32.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3d0dc0c16a18d2b127991f21e970f7ef043907994ed9d6b70e2e105788a5565f
BLAKE2b-256 checksum
How to use checksums
a2883b0149ab4a51d989880770a25f70f6511358eca2012cae46b924029c96af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

This release

14.1.0 This release

2 release files

14.0.1

2 release files

14.0.0

2 release files

13.2.0

2 release files

13.1.0

2 release files

13.0.1

2 release files

13.0.0

2 release files

11.3.0

2 release files

11.2.3

2 release files

11.2.2

2 release files

11.2.1

2 release files

11.2.0

2 release files

11.1.0

2 release files

11.0.0

2 release files

10.5.0

2 release files

10.4.1

2 release files

10.4.0

2 release files

10.3.0

2 release files

10.2.0

2 release files

10.1.0

2 release files

9.1.2

2 release files

9.1.1

2 release files

9.1.0

2 release files

9.0.0

2 release files

8.3.2

2 release files

8.3.1

2 release files

8.3.0

2 release files

8.2.0

2 release files

8.1.0

2 release files

8.0.0

2 release files

7.2.4

2 release files

7.2.3

2 release files

7.2.2

2 release files

7.2.1

2 release files

7.2.0

2 release files

7.1.0

2 release files

7.0.0

2 release files

6.1.3

2 release files

6.1.2

2 release files

6.1.1

2 release files

6.1.0

2 release files

6.0.0

2 release files

5.1.1

2 release files

5.1.0

2 release files

5.0.0

2 release files

0.1.32

2 release files

0.1.31

2 release files

0.1.30

2 release files

0.1.27

2 release files

0.1.24

2 release files

0.1.22

2 release files

0.1.21

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

1 release file

0.1.16

1 release file

0.1.14

1 release file

0.1.13

1 release file

0.1.12

1 release file

0.1.11

1 release file

0.1.10

1 release file

0.1.9

1 release file

0.1.8

1 release file

0.1.7

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page