Search code examples
ansiblehaproxycontinuous-deploymentsocat

No such server found while disabling HAproxy disable server from cluster


My haproxy.cfg

global
    log 127.0.0.1 local0
    maxconn 20000
    user haproxy
    group haproxy
    stats socket /var/run/haproxy/haproxy.sock level admin
    stats timeout 2m
    listen admin
    bind *:8080
    stats enable

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    option redispatch
#    timeout http-request 5s
    timeout connect  5000
    timeout client  60000
    timeout server  60000

frontend http-in
   bind *:80
   default_backend monkey


backend monkey
    stats enable
    stats uri /haproxy?stats
    stats realm Strictly\ Private
    stats auth admin:hello
    stats auth Another_User:hi
    mode http
    compression algo gzip
    compression type text/html text/plain text/css application/json
    balance roundrobin
    option httpclose
    option forwardfor
    default-server inter 1s fall 1
    server        cd-test-1 1.2.3.4:80 check
    server        cd-test-2 5.6.7.8:80 check

I have been using socat to disable a node from HAproxy cluster. below is the command

echo "disable server monkey/cd-test-1"| socat stdio /var/run/haproxy/haproxy.sock

The above disables my node from haproxy. But if I use the ip address(1.2.3.4) instead of "cd-test-1" it returns No such server.

I am using ansible to automated this. I use {{inventory_hostname}} and delegate the command to my HAproxy server. Hence the issue.

- name: Disable {{ inventory_hostname }} in haproxy and letting the services drain
    shell: echo "disable server monkey/{{inventory_hostname}}"| socat stdio /var/run/haproxy/haproxy.sock
    become_user: root
    delegate_to: "{{ item }}"
    with_items: groups.haproxy_backend

This returns "No such server." and moves along.

Can someone please help me find the issue with using the IP instead of the name of server. Might be doing something very silly. Any help is appreciated.


Solution

  • Disabling and enabling HAproxy using socat, the server alias name has to be mentioned.

    Otherwise, we will be getting a No such server error.