Suponiendo que Consul y Nomad se han configurado para ejecutarse en un conjunto de recursos. ¿Cómo renderizaría un archivo de plantilla con el único propósito de generar, por ejemplo, un archivo 'default.conf' de Nginx?
Usando la configuración de estrofa de la plantilla a continuación, como ejemplo; Nomad no puede generar un 'archivo' default.conf; en su lugar, se crea un 'directorio' default.conf.
template { source = "/path/to/tmp.ctmpl" destination = "folder/default.conf" change_mode = "restart" change_signal = "SIGINT" }Me estoy perdiendo un truco o he entendido mal las funcionalidades de la 'estrofa de la plantilla'.
Uno de los problemas con la plantilla que genera un directorio en lugar de un archivo es que no puede montar un directorio en una ruta de archivo de configuración. Por lo tanto, ejecutar una tarea que utiliza el controlador de la ventana acoplable Nomad con la configuración de volumen ejemplar de la ventana acoplable da como resultado un error.
volumes = ["/path/to/job/folder/default.conf:/etc/nginx/conf.d/default.conf" ]¿O es imposible que la estrofa de la plantilla genere un archivo de configuración?
*Ps usando la versión 0.5.5 de Nomad**
Acabo de armar un pequeño trabajo de Nomad que muestra este funcionamiento, por lo que es posible que tenga un pequeño error de configuración. Para permitirle ejecutar el trabajo usted mismo, lo he puesto a disposición como esencia aquí . En la misma esencia, tengo un nginx.conf que tiene nginx escucha en cualquier puerto que esté en el archivo de trabajo de Nomad.
Aquí está el trabajo de Nomad:
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 } } } } } }Luego puedo consultar esa dirección y ver que nginx está vinculado a ese puerto, por lo que la plantilla que se está montando funciona correctamente.
$ 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>Si observa la esencia, también muestro que el archivo se procesa y se monta correctamente.
¡Espero que esto te ayude! También asegúrese de consultar la página de la comunidad para obtener ayuda. Tenemos una sala Gitter y una lista de correo.
Es mucho más fácil colocar la configuración generada en carpetas local o secrets en el directorio de trabajo del trabajo (directorio alloc). Estas carpetas estarán disponibles en el contenedor como /secrets y /local. No se requieren montajes de volumen.
Terminé siguiendo la solución anterior basada en el siguiente error:
"¿Está intentando montar un directorio en un archivo (o viceversa)? Compruebe si existe la ruta de host especificada y si es del tipo esperado"
El siguiente fragmento es cómo hice que nginx funcionara como un proxy inverso para mi instancia de jenkins (todo basado en nómadas). Esta plantilla es parte de un trabajo multitarea, hecho de jenkins y nginx.
Espero que sea de alguna utilidad para alguien más en la misma situación que yo, durante los últimos días.
task "nginx" { driver = "docker" resources { cpu = 75 memory = 75 } service { name = "jenkins-nginx" tags = ["urlprefix-/jenkins-nginx"] port = "http" check { name = "nginx port alive" type = "http" path = "/login" interval = "10s" timeout = "2s" } } template { change_mode = "restart" destination = "local/default.conf" data = <<EOH upstream jenkins { server {{ env "NOMAD_ADDR_jenkins" }}; } server { listen {{ env "NOMAD_PORT_http" }}; location / { proxy_redirect off; proxy_pass_header Server; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_set_header X-Accel-Buffering no; proxy_connect_timeout 5; proxy_http_version 1.1; proxy_read_timeout 240; proxy_intercept_errors on; keepalive_timeout 3600; proxy_set_header Connection ''; chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; proxy_pass http://jenkins; } } EOH } config { image = "nginx" network_mode = "host" ports = ["http","https"] volumes = [ "local/default.conf:/etc/nginx/conf.d/default.conf" ] } }