Public | Automated Build

Last pushed: 2 years ago
Short Description
NodeJS server providing cloud-config to cloud instances using EJS template
Full Description


Docker NodeJS server providing cloud-config to Cloud instances using EJS template language

User manual

File query

The cloud-config file is queried through a GET HTTP request containing a config parameter containing the name of the file to serve.
If the file is an EJS template you can give any parameters you want through GET parameters to generate the file.

http://<server>:<port>/<filename>?<params ...>

File storage

The cloud-config files should be stored in the data/ folder of the application bearing '.ejs' as extension.


This server uses EJS for file templating. This allows code factoring (through includes), variables, dynamic scripting...

Here is a working example of what you can do:

<% var host = host || 'host' -%>
<% var domain = domain ? '.' + domain : '' -%>
hostname: "<%= host %><%= domain %>"

  <% include partials/ssh_keys/main %>

    reboot-strategy: best-effort
<% include partials/etcd %>
<% include partials/units/etcd2_unit.ejs %>
<% include partials/units/fleet_unit.ejs %>

Be aware that cloud-config files are writen in YAML which are space-indentation sensitive !
A more complete example can be found in the project coreos-consul-haproxy.


To build the docker image run:

docker build -t cloud-config-server .


The up-to-date image for this project is hosted on docker hub.

To retrieve the image and run it:

docker run -d -P auguster/cloud-config-server

This will run the image with the working example. To provide your own templates you can mount the data/ folder on your host:

docker run -d -p 8080 -v $PWD/data:/data:ro auguster/cloud-config-server


To boot a cloud-config compatible instance you have to make it point to the cloud-config-server. The following techniques have been tested on CoreOS only, for other distros you might have to adapt them.


With PXE this can be done by writing the URL on the kernel command line. An example is avaible on the documentation about Booting CoreOS via PXE.

To enable the internal TFTP in libvirt / virt manager, you can follow this nice tutorial.

Static content

Most cloud provider only allow passing a static config content to your instance. This content cannot be edited afterward.

On CoreOS, you can call an external cloud-config files using the following (hacky) technique:


    - name: cloudinit-url.service
      command: restart
      content: |
        Description=Cloudinit reconfiguration using external cloud-config file

        ExecStart=/usr/bin/coreos-cloudinit --from-url http://<cloud-config-server's url>

The configuration of the external cloud-config file will be appened to the existing one. Technically you could chain cloud-config file this way but that's probably a bad idea.


  • Bootcfg: CoreOS's own PXE/cloud-config server using go-template files


The MIT License (MIT) Copyright (c) 2016 Rémi AUGUSTE

Docker Pull Command
Source Repository