Add parameterized proxy client requests
This commit is contained in:
@@ -16,14 +16,14 @@ d7d2fd7ab651d1f2f026bdb11d62e2c0c6ce6ee3128c9814d09550cf4304b3f2 ocf/loxthelion
|
|||||||
70431e0d390a3612339c7b5887286c1be4d6b305cbe8898e7895a211c26b6087 ocf/loxthelion/managed-container.d/engine.sh
|
70431e0d390a3612339c7b5887286c1be4d6b305cbe8898e7895a211c26b6087 ocf/loxthelion/managed-container.d/engine.sh
|
||||||
6c92c095ce10ac95d843fdc1c49e31c19491ca22fdac960affd8649606d76d82 ocf/loxthelion/managed-container.d/lifecycles/systemd.sh
|
6c92c095ce10ac95d843fdc1c49e31c19491ca22fdac960affd8649606d76d82 ocf/loxthelion/managed-container.d/lifecycles/systemd.sh
|
||||||
5f3528932ea72ef42c18465e7f31f9a430407e8d4ff7c03c705fe8cae39dc26e ocf/loxthelion/managed-container.d/proxy.sh
|
5f3528932ea72ef42c18465e7f31f9a430407e8d4ff7c03c705fe8cae39dc26e ocf/loxthelion/managed-container.d/proxy.sh
|
||||||
fb01359a84062ec3e910a8b27e460953a0ae1641a69167b3497f2594911d2a00 ocf/loxthelion/managed-container.d/proxy_client.py
|
1acc1776f521557a047e7a53e5253f3b4373e9269cb3d9c5872b3e48033d2c18 ocf/loxthelion/managed-container.d/proxy_client.py
|
||||||
f82e2571d309bce8e4d7e6aee6b61b68feb7d99dc85bb8b688b6123c13ccf6a7 ocf/loxthelion/managed-container.d/runtimes/podman.sh
|
f82e2571d309bce8e4d7e6aee6b61b68feb7d99dc85bb8b688b6123c13ccf6a7 ocf/loxthelion/managed-container.d/runtimes/podman.sh
|
||||||
4a99efea3d4a185e0630db89cfacc28aa8777bad9c747794ae69f70d87cd0327 pacemaker/README.md
|
4a99efea3d4a185e0630db89cfacc28aa8777bad9c747794ae69f70d87cd0327 pacemaker/README.md
|
||||||
a42bb59a058ffeb59c1baa96e403856910bbbaea98f9104ff93daf4b5970c780 postgres-host/postgres-ha-bootstrap
|
a42bb59a058ffeb59c1baa96e403856910bbbaea98f9104ff93daf4b5970c780 postgres-host/postgres-ha-bootstrap
|
||||||
957a5a72ed277d0216e070abb80733483be3d421b9fa488e27fdd75bb2919548 postgres-host/postgres-ha-peer-config.sh
|
957a5a72ed277d0216e070abb80733483be3d421b9fa488e27fdd75bb2919548 postgres-host/postgres-ha-peer-config.sh
|
||||||
deb09e3ae40629f43b262ba4f9a7ebf59a1dca3da9d8c94478f670aea28bd0e1 quadlet/postgres.container
|
deb09e3ae40629f43b262ba4f9a7ebf59a1dca3da9d8c94478f670aea28bd0e1 quadlet/postgres.container
|
||||||
04a125068677bbee6e71d313ca9d95d35faa32851b79de781cd7b9f466561445 quadlet/postgres.env.example
|
04a125068677bbee6e71d313ca9d95d35faa32851b79de781cd7b9f466561445 quadlet/postgres.env.example
|
||||||
0fb32ab5a9a51044ae9e4ae75b7d70bfb7f5e640c41a3d0de02277c9a8c44c91 tests/run-all.sh
|
82162526c92a18c90ee425a28a89667fc211c7be4825ef2e91747e97efca41bd tests/run-all.sh
|
||||||
5e5d4fdd2b6c7e0b8b146de7aad06c1f96b221a10fec525b00d40e0d85709fb0 tests/test-entrypoint-structure.sh
|
5e5d4fdd2b6c7e0b8b146de7aad06c1f96b221a10fec525b00d40e0d85709fb0 tests/test-entrypoint-structure.sh
|
||||||
b83f0415c09f0be34c51722370e5b07c51b9a9756d305d3b3f50827f484aa4dd tests/test-proxy-client-actions.py
|
b83f0415c09f0be34c51722370e5b07c51b9a9756d305d3b3f50827f484aa4dd tests/test-proxy-client-actions.py
|
||||||
c3b988d7b2b1b138bb2530df9172f96bb0f5edc2f1561f38f0055695f4126134 tests/test-proxy-protocol.sh
|
c3b988d7b2b1b138bb2530df9172f96bb0f5edc2f1561f38f0055695f4126134 tests/test-proxy-protocol.sh
|
||||||
|
|||||||
@@ -17,13 +17,21 @@ class ProtocolFailure(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def send_request(socket_path, resource, action):
|
def send_request(
|
||||||
|
socket_path,
|
||||||
|
resource,
|
||||||
|
action,
|
||||||
|
parameters=None,
|
||||||
|
):
|
||||||
request = {
|
request = {
|
||||||
"protocol_version": PROTOCOL_VERSION,
|
"protocol_version": PROTOCOL_VERSION,
|
||||||
"action": action,
|
"action": action,
|
||||||
"resource": resource,
|
"resource": resource,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if parameters is not None:
|
||||||
|
request["parameters"] = parameters
|
||||||
|
|
||||||
try:
|
try:
|
||||||
sock = socket.socket(
|
sock = socket.socket(
|
||||||
socket.AF_UNIX,
|
socket.AF_UNIX,
|
||||||
@@ -166,12 +174,26 @@ def format_result(action, result):
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if len(sys.argv) != 6:
|
if len(sys.argv) not in (6, 7):
|
||||||
raise SystemExit(11)
|
raise SystemExit(11)
|
||||||
|
|
||||||
socket_path = sys.argv[1]
|
socket_path = sys.argv[1]
|
||||||
resource = sys.argv[2]
|
resource = sys.argv[2]
|
||||||
action = sys.argv[3]
|
action = sys.argv[3]
|
||||||
|
request_parameters = None
|
||||||
|
|
||||||
|
if len(sys.argv) == 7:
|
||||||
|
try:
|
||||||
|
request_parameters = json.loads(sys.argv[6])
|
||||||
|
|
||||||
|
except (
|
||||||
|
TypeError,
|
||||||
|
json.JSONDecodeError,
|
||||||
|
):
|
||||||
|
raise SystemExit(11)
|
||||||
|
|
||||||
|
if not isinstance(request_parameters, dict):
|
||||||
|
raise SystemExit(11)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
transport_failure = int(sys.argv[4])
|
transport_failure = int(sys.argv[4])
|
||||||
@@ -188,6 +210,7 @@ def main():
|
|||||||
socket_path,
|
socket_path,
|
||||||
resource,
|
resource,
|
||||||
action,
|
action,
|
||||||
|
request_parameters,
|
||||||
)
|
)
|
||||||
|
|
||||||
except TransportFailure:
|
except TransportFailure:
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ echo ">>> Proxy protocol contract"
|
|||||||
echo
|
echo
|
||||||
echo ">>> Generic proxy client actions"
|
echo ">>> Generic proxy client actions"
|
||||||
python3 ./tests/test-proxy-client-actions.py
|
python3 ./tests/test-proxy-client-actions.py
|
||||||
|
python3 ./tests/test-proxy-client-parameters.py
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo ">>> Python syntax"
|
echo ">>> Python syntax"
|
||||||
|
|||||||
Executable
+84
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import importlib.util
|
||||||
|
import json
|
||||||
|
import socket
|
||||||
|
import tempfile
|
||||||
|
import threading
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
CLIENT_PATH = Path(
|
||||||
|
"ocf/loxthelion/managed-container.d/proxy_client.py"
|
||||||
|
)
|
||||||
|
|
||||||
|
spec = importlib.util.spec_from_file_location(
|
||||||
|
"proxy_client",
|
||||||
|
CLIENT_PATH,
|
||||||
|
)
|
||||||
|
client = importlib.util.module_from_spec(spec)
|
||||||
|
spec.loader.exec_module(client)
|
||||||
|
|
||||||
|
with tempfile.TemporaryDirectory() as directory:
|
||||||
|
socket_path = str(Path(directory) / "test.sock")
|
||||||
|
received = {}
|
||||||
|
|
||||||
|
listener = socket.socket(
|
||||||
|
socket.AF_UNIX,
|
||||||
|
socket.SOCK_STREAM,
|
||||||
|
)
|
||||||
|
listener.bind(socket_path)
|
||||||
|
listener.listen(1)
|
||||||
|
|
||||||
|
def serve():
|
||||||
|
connection, _ = listener.accept()
|
||||||
|
|
||||||
|
with connection:
|
||||||
|
raw = b""
|
||||||
|
|
||||||
|
while b"\n" not in raw:
|
||||||
|
chunk = connection.recv(65536)
|
||||||
|
|
||||||
|
if not chunk:
|
||||||
|
break
|
||||||
|
|
||||||
|
raw += chunk
|
||||||
|
|
||||||
|
received.update(
|
||||||
|
json.loads(raw.decode().strip())
|
||||||
|
)
|
||||||
|
|
||||||
|
connection.sendall(
|
||||||
|
json.dumps({
|
||||||
|
"protocol_version": 1,
|
||||||
|
"ok": True,
|
||||||
|
"resource": "postgresql-ha",
|
||||||
|
"action": "notify",
|
||||||
|
"result": {"ocf_rc": 0},
|
||||||
|
}).encode()
|
||||||
|
+ b"\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
thread = threading.Thread(target=serve)
|
||||||
|
thread.start()
|
||||||
|
|
||||||
|
client.send_request(
|
||||||
|
socket_path,
|
||||||
|
"postgresql-ha",
|
||||||
|
"notify",
|
||||||
|
{
|
||||||
|
"type": "pre",
|
||||||
|
"operation": "demote",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
thread.join()
|
||||||
|
listener.close()
|
||||||
|
|
||||||
|
assert received["action"] == "notify"
|
||||||
|
assert received["parameters"] == {
|
||||||
|
"type": "pre",
|
||||||
|
"operation": "demote",
|
||||||
|
}
|
||||||
|
|
||||||
|
print("PROXY_CLIENT_PARAMETER_TEST_PASS=1")
|
||||||
Reference in New Issue
Block a user