-
Notifications
You must be signed in to change notification settings - Fork 86
Open
Description
Expected behaviour
Per https://www.haproxy.com/documentation/dataplaneapi/community/?v=v3#post-/services/haproxy/runtime/ssl_certs post /services/haproxy/runtime/ssl_certs should return a 409 if "the specified resource already exists".
Actual behavior
Returns a 500 instead:
curl -s --unix-socket "/data/run/dataplaneapi.sock" "http://localhost/v3/services/haproxy/runtime/ssl_certs" -v'
* Trying /data/run/dataplaneapi.sock:0...
* Connected to localhost (/data/run/dataplaneapi.sock) port 80 (#0)
> GET /v3/services/haproxy/runtime/ssl_certs HTTP/1.1
> Host: localhost
> User-Agent: curl/7.86.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Configuration-Version: 1
< Content-Type: application/json
< Vary: Origin
< Date: Fri, 23 Jan 2026 13:40:44 GMT
< Content-Length: 1381
<
{ [1381 bytes data]
* Connection #0 to host localhost left intact
[{"description":"example.com","storage_name":"/data/haproxy/ssl/example.com"}]
curl -s --unix-socket "/data/run/dataplaneapi.sock" "http://localhost/v3/services/haproxy/runtime/ssl_certs" -X POST -F "file_upload=@/data/haproxy/ssl/example.com" -v'
* Trying /data/run/dataplaneapi.sock:0...
* Connected to localhost (/data/run/dataplaneapi.sock) port 80 (#0)
> POST /v3/services/haproxy/runtime/ssl_certs HTTP/1.1
> Host: localhost
> User-Agent: curl/7.86.0
> Accept: */*
> Content-Length: 3480
> Content-Type: multipart/form-data; boundary=------------------------914ee16b89929b78
>
} [3480 bytes data]
* We are completely uploaded and fine
* Mark bundle as not supporting multiuse
< HTTP/1.1 500 Internal Server Error
< Configuration-Version: 1
< Content-Type: application/json
< Vary: Origin
< Date: Fri, 23 Jan 2026 13:40:20 GMT
< Content-Length: 153
<
{ [153 bytes data]
* Connection #0 to host localhost left intact
{"code":500,"message":"/tmp/admin.sock [3] Certificate 'example.com' already exists! [new ssl cert example.com] general error"}
Additional information
haproxy.cfg:
global
stats socket /tmp/admin.sock mode 600 level admin
defaults www_defaults
mode http
userlist haproxy-dataplaneapi
resolvers docker
nameserver dnsmasq 127.0.0.11:53
frontend www from www_defaults
bind *:8888
bind *:8443 ssl crt /data/haproxy/ssl/
http-request set-var(txn.path_config) path,map_reg(opt@/data/haproxy/maps/path_percentage_routing.map)
http-request set-var(txn.backend_key) var(txn.path_config),field(2,|)
acl has_dynamic_backend var(txn.backend_key) -m found
use_backend %[var(txn.backend_key)] if has_dynamic_backend
default_backend legacy
backend legacy from www_defaults
server app app:8001 check resolvers docker resolve-prefer ipv4
backend backend1 from www_defaults
http-request return status 200 content-type "text/plain" lf-string "200 OK" hdr "X-Backend" "backend1"
backend backend2 from www_defaults
http-request return status 200 content-type "text/plain" lf-string "200 OK" hdr "X-Backend" "backend2"
dataplaneapi.yaml:
config_version: 2
name: 40a1dac72c2f
dataplaneapi:
show_system_info: true
socket_path: /data/run/dataplaneapi.sock
host: 127.0.0.1
disable_inotify: true
advertised:
api_address: ""
api_port: 0
scheme:
- unix
userlist:
userlist: controller
userlist_file: ""
transaction:
transaction_dir: /data/dataplaneapi/transactions
backups_number: 10
backups_dir: /data/dataplaneapi/backups
max_open_transactions: 10
resources:
maps_dir: /data/haproxy/maps
ssl_certs_dir: /data/haproxy/ssl
general_storage_dir: /data/dataplaneapi/general
dataplane_storage_dir: /data/dataplaneapi/dataplane
spoe_dir: /data/dataplaneapi/spoe
haproxy:
config_file: /data/haproxy/haproxy.cfg
haproxy_bin: /usr/sbin/haproxy
reload:
reload_delay: 5
service_name: /run/service/haproxy
reload_strategy: s6
log_targets:
- log_to: stdout
log_level: debug
log_format: text
log_types:
- app
- access
Metadata
Metadata
Assignees
Labels
No labels