Example Baragon Agent Config

# Configuration for Baragon Agent instances running on each load balancer
#
# Example configuration for use with nginx is shown
#
# The `server` section is the `server` configuration for a dropwizard application.
# `logging` and other dropwizard configurations can also be used
server:
  type: simple
  applicationContextPath: /baragon-agent/v2
  connector:
    type: http
    port: 8882

zookeeper:
  quorum: localhost:2181  # comma separated list of ZK host:port goes here
  zkNamespace: baragon    # name of the base zk node
  sessionTimeoutMillis: 60000
  connectTimeoutMillis: 5000
  retryBaseSleepTimeMilliseconds: 1000
  retryMaxTries: 3

loadBalancerConfig:
  name: loadBalancerGroupName  # load balancer group name
  rootPath: /etc/nginx/conf.d  # base path for writing load balancer configs goes here
  checkConfigCommand: "nginx -t"              # command for checking configs goes here
  reloadConfigCommand: "service nginx reload" # command for reloading configs goes here

# Auth configuration
auth:
  enabled: true

# Host on which this agent is running, will be used to build the baseUrl
hostname: localhost

# (Optional) used to define the base url that Baragon Service will use to contact the Agent
baseUrlTemplate: "http://%s:%d%s"

# (Optional) amount of time to block other requests to this agent while an initial request is being processed
agentLockTimeoutMs: 5000

# (Optional) used in the formatTimestamp handlebars helper
defaultDateFormat: "yyyy-MM-dd hh:mm a"

# (Optional) enable a cors filter for this host, defaults to false
enableCorsFilter: false

# (Optional) set the heartbeat/agent-check-in interval for updating knownAgents metadata, default is 15
heartbeatIntervalSeconds: 15

# (Optional) Testing configuration
testing:
  enabled: false
  applyDelayMs: 0 # delay the processing of apply requests
  applyFailRate: 0 # Cause more failures during the application of a request
  revertDelayMs: 0 # Delay the processing of revert requests
  revertFailRate: 0 # Cause more failures during the processing of a revert request

# Templates used to render load balancer configuration files
templates:
  # File to render, the file will be written to `loadBalancerConfig.rootPath`/`filename` with %s replaced by the serivce ID
  - filename: "proxy/%s.conf"
    # Handlebars template used for this file, this template will be the default for all requests if no template name is specified
    # All variables from the BaragonService object will be available here,
    # this includes any custom `options` fields sent in the BAragonRequest
    #
    # The template below is an example used to proxy requests for a service at a particular path (serviceBasePath) on this
    # load balancer to one of the defined upstreams
    template: |
      # This configuration is automatically generated by Baragon, local changes may be lost!
      #
      # Service ID: {{{service.serviceId}}}
      # Service base path: {{{service.serviceBasePath}}}
      #
      # Service owner(s):
      {{#each service.owners}}
      #   - {{{.}}}
      {{else}}#   (no owners defined)
      {{/each}}#
      {{#if upstreams}}
      {{#if service.options.nginxExtraConfigs}}
      # BEGIN CUSTOM NGINX CONFIGS
      {{#each service.options.nginxExtraConfigs}}{{{.}}}
      {{/each}}
      # END CUSTOM NGINX CONFIGS
      {{/if}}
      location {{{service.options.nginxLocationModifier}}} {{{service.serviceBasePath}}} {
          proxy_pass_header Server;
          proxy_set_header Host $http_host;
          proxy_redirect off;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Scheme $scheme;
          proxy_set_header X-Request-Start "${msec}";
          {{#if service.options.nginxProxyPassOverride}}
          proxy_pass http://{{{service.options.nginxProxyPassOverride}}};
          {{else}}
          proxy_pass http://baragon_{{{service.serviceId}}};
          {{/if}}
          proxy_connect_timeout {{firstOf service.options.nginxProxyConnectTimeout 55}};
          proxy_read_timeout {{firstOf service.options.nginxProxyReadTimeout 60}};
          {{#if service.options.nginxExtraLocationConfigs}}
          # BEGIN CUSTOM NGINX LOCATION CONFIGS
          {{#each service.options.nginxExtraLocationConfigs}}{{{.}}}
          {{/each}}
          # END CUSTOM NGINX LOCATION CONFIGS
          {{/if}}
      }
      {{else}}
      #
      # Service has no defined upstreams -- delete service from Baragon if not needed
      #
      location {{{service.options.nginxLocationModifier}}} {{{service.serviceBasePath}}} {
        return 503;
      }
      {{/if}}

    # Additional templates for this file path can also be  specified and given a name. To render an alternate template for a request
    # include the `templateName` field in your BaragonRequest
    #
    # The example below shows a template named `custom` which will write each line of the config defined in the `proxyConfig`
    # section of the BaragonRequest options to the nginx config file
    #
    # Named templates will be written to the file path under when they are defined
    namedTemplates:
      custom: |
        # This configuration is automatically generated by Baragon, local changes may be lost!
        # Service ID: {{{service.serviceId}}}
        # Service base path: {{{service.serviceBasePath}}}
        # Template: loadbalancer
        # Owners:
        {{#each service.owners}}
        #   - {{{.}}}
        {{else}}
        #   No owners!
        {{/each}}
        # This is a blank template for writing custom configuration
        # BEGIN CUSTOM PROXY CONFIG
        {{#each service.options.proxyConfig}}{{{.}}}
        {{/each}}
        # END CUSTOM PROXY CONFIG

  # Multiple filenames to render for each request can be specified. While the file defined above writes the proxy config,
  # this additional file will define the upstreams
   - filename: "upstreams/%s.conf"
    template: |
      # This configuration is automatically generated by Baragon, local changes may be lost!
      #
      # Service ID: {{{service.serviceId}}}
      # Service base path: {{{service.serviceBasePath}}}
      #
      # Service owner(s):
      {{#each service.owners}}#   - {{{.}}}
      {{else}}#   (no owners defined)
      {{/each}}#
      {{#if upstreams}}
      upstream baragon_{{{service.serviceId}}} {
          {{#each upstreams}}server {{{upstream}}};  # {{{requestId}}}
          {{/each}}
          {{#if service.options.nginxExtraUpstreamConfigs}}
          # BEGIN CUSTOM NGINX UPSTREAM CONFIGS
          {{#each service.options.nginxExtraUpstreamConfigs}}{{{.}}}
          {{/each}}
          # END CUSTOM NGINX UPSTREAM CONFIGS
          {{/if}}
      }
      {{else}}
      #
      # Service is disabled due to no defined upstreams!
      # It's safe to delete this file if not needed.
      #
      {{/if}}