A few new job properties were added to the etcd bosh release. One of these is etcd.cluster and reading the spec file you get the helpful hint that it is to represent Information about etcd cluster.

So what is this job property supposed to be set to? After a bit of trial and error and then reading the template the answer is simple, you need to know the names of your etcd jobs and the number of them. With this information in hand you can configure the property correctly.

Let's assume we have the deployment manifest for our etcd jobs as:

- instances: 2       # (A)
  name: etcd_z1      # (B)
      zone: z1
      apps: cf1
- instances: 1       # (C)
  name: etcd_z2      # (D)
      zone: z2
      apps: cf2

Now that you know the names and quantities of etcd jobs you can fill out the etcd.cluster property. You will have 1 instance of cluster for each etcd job:

    - instances: 2     # Value from (A)
      name: etcd_z1    # Value from (B)
    - instances: 1     # Value from (C)
      name: etcd_z2    # Value from (D)

Make sure you use instances and not instance, that error is annoying to track down.

If you forget to populate this field you will get an error similar to:

1 error(s) detected:  
 - $.properties.etcd.cluster: must define etcd cluster at env level

Even worse, you could have guessed at what the values were supposed to be and wind up with an error similar to:

  Error 100: Unable to render instance groups for deployment. Errors are:
   - Unable to render jobs for instance group 'etcd_z1'. Errors are:
     - Unable to render templates for job 'etcd'. Errors are:
       - Error filling in template 'etcd_bosh_utils.sh.erb' (line 33: undefined method `-' for nil:NilClass)