Hello,

I am trying to enable/disable servers at runtime by means of the UNIX socket 
created by HAProxy.
In order to do that, I am using the Python script below.
I'm testing the code with 2 servers, and I have noticed that quite often only 
one of the 2 servers is enabled/disable (sometimes the first, others the 
second). However sometimes none of them changes state, of both of them do.
I have tried to open the socket in non-interactive mode as well (i.e., re-open 
the socket at every command), but I didn't notice any difference.

Am I doing anything wrong?, servers' names are something like i-a3c832c7.
As a side not, I should add that replacing the send() on the socket with socat

echo disable server www/i-9bb943ff | socat stdio unix-connect:/tmp/haproxy
does not change the behavior of the system.


Thanks,
Michele


    def change_state(self, servers_list, enable=True):
        try:
            s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
            s.connect(self.socket_path)
            # interactive mode (see documentation, sec. 9.2)
            s.send('prompt\n')
            self.wait(s) # waits for the prompt
            for i in servers_list:
                command = None
                if enable == True:
                    command = 'enable server www/%s' % i
                else:
                    command = 'disable server www/%s' % i
                    
                log.info(command)
                s.send('%s\n' % command)
                self.wait(s)

            s.shutdown(socket.SHUT_RDWR)
            s.close()
    
        
        except SocketError, e:
            log.error('socket error: %s' % e)
            self.__go = False





Reply via email to