So you can do something like this:

In master:
````
ep = Services::Endpoint.new "graphite",
  ip: node[:ipaddress],
  proto: "tcp",
  port: 80
````
puts the master IP on the graphite endpoint

In each peer:
````
m = Services::Member.new node[:fqdn], service: 'graphite'
m.load
m.ip = node[:ipaddress]
# add port if you need m.port
m.save
````

now you have master as teh Endpoint IP and all peers as mebers on that endpoint.  We aren't loadbalancing on this, but you can then load up the members and exclude local:

````
graphite_service =  Services::Service.new 'graphite'
graphite_service.members.map { |m| m.to_hash } # or whatever this should return an array of hashes with member name/ip/port/proto 
````

If you want to Balance on the graphite EP, then yea you would need to make a different Service, but this would get you the Master + all peers ip/hostname/port info to map into templates as you need without using search.