How would you use Hashicorp's Nomad 'template stanza' to generate an nginx config file through the Nomad job file?

With the assumption that Consul and Nomad has been configured to run on a pool of resource. How would you rendered a template file for the sole purpose of generating e.g. an Nginx ‘default.conf’ file.

Using the template stanza configuration below, as an example; Nomad fails to generate a default.conf ‘file’; instead a default.conf ‘directory’ is created.

  • consul-template using Address not ServiceAddress in template
  • What container orchestration tools can deploy containers with routable IP addresses?
  • How to enable faster container rescheduling with Docker Swarm and Consul?
  • Consul and Spring Boot services in Docker - not deregistering
  • Generating -bind parameter in Consul JSON files for use with Marathon
  • Does my docker images need its own consul client instances?
  • template {
        source        = "/path/to/tmp.ctmpl"
        destination   = "folder/default.conf"
        change_mode   = "restart"
        change_signal = "SIGINT"
    }
    

    I’m either missing a trick, or have misunderstood the functionalities of the ‘template stanza’.

    One of the issue with the template generating a directory rather than a file is, you cannot mount a directory to a config file path. So running a task that uses the Nomad docker driver with the exemplar ‘docker’ volume config results in an error.

    volumes = ["/path/to/job/folder/default.conf:/etc/nginx/conf.d/default.conf" ]
    

    Or is it impossible to have the template stanza generate a config file?

    *P.s. Using Nomad build 0.5.5**

  • Docker Compose: No such image
  • How to upgrade npm to npm@5 on the latest node docker image?
  • How to reach local server runing nightwatch tests against docker selenium and local app?
  • How to resolve `Illegal instruction` error while running docker run command?
  • How to keep a data store portable in Docker?
  • How to set environment variables via env-file
  • One Solution collect form web for “How would you use Hashicorp's Nomad 'template stanza' to generate an nginx config file through the Nomad job file?”

    I just put together a little Nomad job showing this working, so you may have a slight configuration error. To allow you to run the job yourself I have made it available as a gist here. In the same gist I have a nginx.conf that has nginx listen on whatever port is in the Nomad job file.

    Here is the Nomad job:

    job "nginx" {
      datacenters = ["dc1"]
      type = "service"
      group "cache" {
        count = 1
        task "redis" {
          driver = "docker"
          config {
            image = "nginx:1.11.10"
            volumes = ["new/default.conf:/etc/nginx/conf.d/default.conf" ]
            network_mode = "host"
          }
    
          artifact {
            source = "https://gist.githubusercontent.com/dadgar/2dcf68ab5c49f7a36dcfe74171ca7936/raw/c287c16dbc9ddc16b18fa5c65a37ff25d2e0e667/nginx.conf"
          }
    
          template {
            source        = "local/nginx.conf"
            destination   = "new/default.conf"
            change_mode   = "restart"
          }
    
          resources {
            network {
              mbits = 10
              port "nginx" {
                static = 8080
              }
            }
          }
        }
      }
    }
    

    I can then query that address and see that nginx is bound to that port, thus the template being mounted is working properly.

    $ curl http://127.0.0.1:8080
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    

    If you take a look at the gist, I show the file being rendered and mounted properly as well.

    Hope this helps you! Also be sure to check out the community page for getting help. We have both a Gitter room and a mailing list.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.