Getting in a bit late on this but its the exact problem I'm having with the cs:precise/nginx-proxy as well ( it works on the surface very much like HAProxy ) but just was adding another "me too"<br><br><br clear="all">
-- <br>Brandon Holtsclaw<br>Web <a href="http://brandonholtsclaw.com" target="_blank">http://brandonholtsclaw.com</a><br>Voice/SMS Tel:816-974-6106<br><br>
<br><br><div class="gmail_quote">On Wed, Jul 18, 2012 at 7:51 PM, Juan Negron <span dir="ltr"><<a href="mailto:negronjl@xtremeghost.com" target="_blank">negronjl@xtremeghost.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Given my recent experience with the proposed haproxy charm, I believe that changes like the ones Clint is proposing would have made my life a bit easier.<div><br></div><div>+1 on the changes</div><div><br clear="all">Thanks,<div>

<br></div><div>Juan</div><div><div class="h5"><br>
<br><br><div class="gmail_quote">On Wed, Jul 18, 2012 at 5:44 PM, Clint Byrum <span dir="ltr"><<a href="mailto:clint@ubuntu.com" target="_blank">clint@ubuntu.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

I"ve run into this problem a few times, and I think there's a hole in<br>
the current model that needs filling.<br>
<br>
Recently Juan Negron and Tom Haddon submitted a really awesome set of<br>
enhancements for the haproxy charm.<br>
<br>
<a href="https://code.launchpad.net/%7Emthaddon/charms/precise/haproxy/mini-sprint-sf/+merge/114951" target="_blank">https://code.launchpad.net/~mthaddon/charms/precise/haproxy/mini-sprint-sf/+merge/114951</a><br>
<br>
You can see there a lot of it was some nice abstraction for juju commands<br>
which I think belongs in its own package. But thats not what I'm writing<br>
about.<br>
<br>
Tom and Juan felt that there needed to be a way to assign units of<br>
a backend web service to servics, which were created by dumping raw<br>
haproxy service configs into a config option.<br>
<br>
They're right! But I have some deep concerns about the proposed method.<br>
<br>
The merge proposal wants to add a parameter for the "provides" side of<br>
the http interface which uniquely identifies which endpoint service this<br>
web server wants to belong to. Right now most web services do something<br>
like this in an http interface 'joined' hook:<br>
<br>
relation-set hostname=$(unit-get private-address) port=$(config-get myport)<br>
<br>
Then load balancers can just add this hostname/port combo to their<br>
backend list to spray content to.<br>
<br>
This presents issues though, because now we can't do multi-site on either<br>
the load balancer *or* the backend. This is what the Host: header is<br>
meant for.<br>
<br>
The proposal has us passing in a yaml list of services to define:<br>
<br>
  - service_name: website1<br>
    service_host: "website1.foo.bar"<br>
    service_port: 80<br>
    service_options: [balance leastconn]<br>
    server_options: maxconn 100<br>
  - service_name: website2<br>
    service_host: "website2.foo.bar"<br>
    service_port: 80<br>
    service_options: [balance leastconn]<br>
    server_options: maxconn 100<br>
<br>
Then each backend service which wants to be able to be bound to a specific<br>
frontend would change their joined to do:<br>
<br>
relation-set hostname=$(unit-get private-address) \<br>
             port=$(config-get myport) \<br>
             service_name=$(config-get my-service-name)<br>
<br>
This feels *very* limiting. In order to close the loop we have to set<br>
configs on both ends of a relationship, and the configs we have to set<br>
are extremely complicated and error prone.<br>
<br>
I think there's a need for relations to have config items, as this would<br>
solve the problem far more elegantly.<br>
<br>
I'd propose that it work like this:<br>
<br>
* metadata.yaml:<br>
<br>
requires:<br>
  backends:<br>
    interface: http<br>
    options:<br>
        endpoint-host:<br>
            type: string<br>
            description: Host to tie this traffic to.<br>
        endpoint-port:<br>
            type: int<br>
            default: 80<br>
            description: Port to tie this traffic to.<br>
<br>
* relation-config-get<br>
<br>
A new command, like config-get, but works in relation context only to<br>
pick these up. Changes to relation config settings would fire the same<br>
relation-changed hooks as changes on the units fire.<br>
<br>
* juju add-relation , juju set-relation<br>
<br>
Commands to set values for these per-relation. So<br>
<br>
juju add-relation wp1 loadbalancer endpoint-host="website1.foo.bar"<br>
<br>
For the simple case (one frontend, one backend) nothing would then change,<br>
but this would also allow this:<br>
<br>
juju add-relation wp2 loadbalancer endpoint-host="website2.foo.bar"<br>
<br>
So now haproxy has become multi-site, which is crucial, as load balancing<br>
is really quite a low-impact duty and one m1.small can handle thousands<br>
of requests per second.<br>
<br>
But what about wordpress? It could be multi-site too. So I think we<br>
should also enable this:<br>
<br>
juju add-relation wp1 loadbalancer endpoint-host="website1.foo.bar"<br>
juju add-relation wp1 loadbalancer endpoint-host="website2.foo.bar"<br>
<br>
Note that this is the same two services related, but with two different<br>
relationships.  This would allow both haproxy and wordpress to be<br>
multi-site.<br>
<br>
This is not the only case of this. There are quite a few others. For<br>
instance one might want to have multiple services accessing the same<br>
mysql db. This makes more sense doing at relation time, and not with<br>
config settings. The way it works now:<br>
<br>
juju deploy mysql mydb<br>
juju deploy service1 --set store-db=foo<br>
juju deploy service2 --set service-db=foo<br>
juju add-relation mydb service1<br>
juju add-relation mydb service2<br>
<br>
Versus<br>
<br>
juju deploy mysql mydb<br>
juju deploy service1<br>
juju deploy service2<br>
juju add-relation mydb service1 db=foo<br>
juju add-relation mydb service2 db=foo<br>
<br>
Thoughts?<br>
<span><font color="#888888"><br>
--<br>
Juju mailing list<br>
<a href="mailto:Juju@lists.ubuntu.com" target="_blank">Juju@lists.ubuntu.com</a><br>
Modify settings or unsubscribe at: <a href="https://lists.ubuntu.com/mailman/listinfo/juju" target="_blank">https://lists.ubuntu.com/mailman/listinfo/juju</a><br>
<br>
</font></span></blockquote></div><br></div></div></div>
<br>--<br>
Juju mailing list<br>
<a href="mailto:Juju@lists.ubuntu.com">Juju@lists.ubuntu.com</a><br>
Modify settings or unsubscribe at: <a href="https://lists.ubuntu.com/mailman/listinfo/juju" target="_blank">https://lists.ubuntu.com/mailman/listinfo/juju</a><br>
<br></blockquote></div><br>