Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions ansible/roles/dashmate/defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,9 @@ dashmate_platform_gateway_max_connections: 5000
dashmate_platform_gateway_listeners_dapi_and_drive_http2_max_concurrent_streams: 100
dashmate_platform_gateway_listeners_dapi_and_drive_wait_for_st_result_timeout: "125s"
dashmate_platform_gateway_max_heap_size_in_bytes: 125000000 # 1 Gb
dashmate_platform_gateway_upstreams_drive_grpc_max_requests: 10000
dashmate_platform_gateway_upstreams_dapi_api_max_requests: 10000
dashmate_platform_gateway_upstreams_dapi_core_streams_max_requests: 100
dashmate_platform_gateway_upstreams_dapi_json_rpc_max_requests: 10000
dashmate_platform_gateway_upstreams_drive_grpc_max_requests: 10000
dashmate_platform_gateway_upstreams_rs_dapi_max_requests: 10000
dashmate_platform_gateway_metrics_enabled: false
dashmate_platform_gateway_metrics_port: 9090
dashmate_platform_gateway_rate_limiter_enabled: true
Expand All @@ -32,8 +31,21 @@ dashmate_platform_gateway_rate_limiter_metrics_docker_image: "prom/statsd-export
dashmate_platform_gateway_rate_limiter_metrics_port: 9102
dashmate_platform_gateway_rate_limiter_unit: "minute"
dashmate_platform_gateway_rate_limiter_requests_per_unit: 150

# DAPI rs-dapi configuration
dashmate_platform_dapi_api_docker_deploy_replicas: 1
dashmate_platform_dapi_rs_dapi_wait_for_st_result_timeout: 120000
# Legacy - kept for backward compatibility
dashmate_platform_dapi_api_wait_for_st_result_timeout: 120000
# rs-dapi metrics
dashmate_platform_dapi_rs_dapi_metrics_enabled: false
dashmate_platform_dapi_rs_dapi_metrics_host: "127.0.0.1"
dashmate_platform_dapi_rs_dapi_metrics_port: 9091
# rs-dapi logging
dashmate_platform_dapi_rs_dapi_log_level: "debug"
dashmate_platform_dapi_rs_dapi_log_json_format: false
dashmate_platform_dapi_rs_dapi_access_log_path:
dashmate_platform_dapi_rs_dapi_access_log_format: "combined"
Comment on lines +47 to +48
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, let's look at the actual file to see the full context around lines 47-48
cat -n ansible/roles/dashmate/defaults/main.yml | head -60 | tail -30

Repository: dashpay/dash-network-deploy

Length of output: 1884


🏁 Script executed:

#!/bin/bash
# Search for rs-dapi related documentation in the repository
fd -type f \( -name "*.md" -o -name "*.txt" -o -name "*.rst" \) | xargs rg -l "rs.?dapi|access.?log" 2>/dev/null

Repository: dashpay/dash-network-deploy

Length of output: 372


🏁 Script executed:

#!/bin/bash
# Look for any comments or documentation about access log configuration
rg -i "access.?log|accesslog" --type yaml --type json --type markdown -B 2 -A 2

Repository: dashpay/dash-network-deploy

Length of output: 630


🏁 Script executed:

#!/bin/bash
# Check the dashmate.json.j2 template to see how access_log_path is used
cat -n ansible/roles/dashmate/templates/dashmate.json.j2 | grep -A 5 -B 5 "access.*log"

Repository: dashpay/dash-network-deploy

Length of output: 1068


🏁 Script executed:

#!/bin/bash
# Check group_vars/all for any additional documentation
cat -n ansible/group_vars/all | grep -A 5 -B 5 "access.*log"

Repository: dashpay/dash-network-deploy

Length of output: 53


🏁 Script executed:

#!/bin/bash
# Search for any documentation files mentioning rs-dapi
fd . -name "*README*" -o -name "*CHANGELOG*" -o -name "*docs*" | xargs rg -i "rs.?dapi|access" -A 2 -B 2 2>/dev/null | head -50

Repository: dashpay/dash-network-deploy

Length of output: 2702


🏁 Script executed:

#!/bin/bash
# Look for any references to dashmate configuration or rs-dapi in comments
rg -i "combined.*log|access.*log.*format" --multiline -B 3 -A 3

Repository: dashpay/dash-network-deploy

Length of output: 1854


🏁 Script executed:

#!/bin/bash
# Search for any references to rs-dapi project or documentation
rg -i "rs.?dapi|dashmate" -t yaml -t md -t json | grep -i "github\|doc\|format\|combined" | head -20

Repository: dashpay/dash-network-deploy

Length of output: 2447


🏁 Script executed:

#!/bin/bash
# Check README or documentation files for rs-dapi details
find . -name "README*" -o -name "*.md" | head -10 | xargs cat 2>/dev/null | grep -i -A 5 -B 5 "rs.dapi\|access.*log" | head -30

Repository: dashpay/dash-network-deploy

Length of output: 53


🏁 Script executed:

#!/bin/bash
# Search for any configuration documentation or comments about log formats
rg "combined" --type yaml --type json -B 5 -A 2

Repository: dashpay/dash-network-deploy

Length of output: 780


🏁 Script executed:

#!/bin/bash
# Check if there's any reference to external rs-dapi documentation
rg -i "httpServer|accessLog" --type yaml --type json --type markdown

Repository: dashpay/dash-network-deploy

Length of output: 53


Add inline comments to document the behavior of access_log_path and access_log_format configuration.

The empty dashmate_platform_dapi_rs_dapi_access_log_path disables access logging (sets to null in the rendered config), and the "combined" format follows the standard HTTP combined log format. These behaviors should be documented with inline comments in the defaults file for clarity.

dashmate_platform_dapi_rs_dapi_access_log_path:  # Empty value disables access logging; set a path to enable
dashmate_platform_dapi_rs_dapi_access_log_format: "combined"  # HTTP combined log format (timestamp, method, path, status, bytes, referer, user-agent)
🤖 Prompt for AI Agents
In ansible/roles/dashmate/defaults/main.yml around lines 47 to 48, the two
defaults lack inline documentation; add concise inline comments on the same
lines: for dashmate_platform_dapi_rs_dapi_access_log_path note that an empty
value disables access logging (renders as null) and that providing a filesystem
path enables logging, and for dashmate_platform_dapi_rs_dapi_access_log_format
note that "combined" is the standard HTTP combined log format (timestamp,
method, path, status, bytes, referer, user-agent).

dashmate_platform_drive_abci_metrics_enabled: false
dashmate_platform_drive_abci_metrics_port: 29090
dashmate_platform_drive_tenderdash_p2p_flush_throttle_timeout: "100ms"
Expand Down Expand Up @@ -68,6 +80,7 @@ platform_drive_instant_lock_quorum_dkg_interval:
platform_drive_instant_lock_quorum_active_signers:
platform_drive_instant_lock_quorum_rotation:
dashmate_core_rpc_dashmate_password:
dashmate_core_rpc_quorum_list_password:
dashmate_core_rpc_dapi_password:
dashmate_core_rpc_drive_consensus_password:
dashmate_core_rpc_drive_check_tx_password:
Expand All @@ -76,6 +89,14 @@ platform_drive_grovedb_visualizer_enabled: false
platform_drive_grovedb_visualizer_port: 8083
initial_platform_protocol_version:

dashmate_platform_quorum_list_enabled: false
dashmate_platform_quorum_list_docker_image: "dashpay/quorum-list-server:latest"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, let's examine the actual file to understand the full context
git ls-files | grep -E "ansible.*defaults.*main.yml" | head -20

Repository: dashpay/dash-network-deploy

Length of output: 424


🏁 Script executed:

# Check the quorum-list configuration section and surrounding context
if [ -f "ansible/roles/dashmate/defaults/main.yml" ]; then
  echo "=== File found, showing context around line 93 ==="
  sed -n '85,105p' ansible/roles/dashmate/defaults/main.yml
  echo ""
  echo "=== Checking for other Docker image definitions ==="
  grep -n "docker_image" ansible/roles/dashmate/defaults/main.yml | head -20
fi

Repository: dashpay/dash-network-deploy

Length of output: 1451


🏁 Script executed:

# Search for versioning patterns in the repository
echo "=== Checking for Docker image tags used in Ansible files ==="
rg 'docker_image.*:' ansible/ --type yml -A 0 -B 0 | head -40

Repository: dashpay/dash-network-deploy

Length of output: 176


🏁 Script executed:

# Check if there's any documentation about versioning
echo "=== Looking for version-related documentation ==="
find . -maxdepth 2 -type f \( -name "*.md" -o -name "*.yml" \) | xargs grep -l "quorum-list" 2>/dev/null || echo "No quorum-list references found in top-level docs"

Repository: dashpay/dash-network-deploy

Length of output: 170


🌐 Web query:

dashpay quorum-list-server Docker image versions releases

💡 Result:

Do you mean the Docker Hub tags (image versions) for dashpay/quorum-list-server, or the upstream GitHub releases? Which exactly do you want me to list?


🏁 Script executed:

# Check if there are any version references or tags for quorum-list-server in the codebase
rg "quorum.list" . --type yaml -i -C 3

Repository: dashpay/dash-network-deploy

Length of output: 1837


🏁 Script executed:

# Look for any documentation or comments about image versioning strategy
echo "=== Checking for version/tag documentation ==="
rg "docker_image|:latest|:dev" ansible/roles/dashmate/defaults/main.yml -B 2 -A 1 | head -50

Repository: dashpay/dash-network-deploy

Length of output: 693


🏁 Script executed:

# Check git history to see if this has been a concern before
echo "=== Checking recent changes to this file ==="
git log --oneline -20 -- ansible/roles/dashmate/defaults/main.yml

Repository: dashpay/dash-network-deploy

Length of output: 139


🌐 Web query:

dashpay quorum-list-server GitHub repository releases versions

💡 Result:

Here are the released tag versions for dashpay/quorum-list-server (GitHub):

  • v0.6.0 — Dec 28, 2025. [1]
  • v0.5.0 — Dec 26, 2025. [1]
  • v0.4.0 — Dec 26, 2025. [1]
  • v0.3.0 — Nov 26, 2025. [1]
  • v0.2.0 — Jul 07, 2025. [1]
  • v0.1.1 — Jul 01, 2025. [1]
  • v0.1.0 — Jul 01, 2025. [1]

Source: GitHub tags for dashpay/quorum-list-server. [1] (github.com)

Citations:


🌐 Web query:

Docker Hub dashpay quorum-list-server image tags available

💡 Result:

Do you want me to fetch the full list of tags for dashpay/quorum-list-server from Docker Hub (I'll query the Hub API and return the tags)?


🏁 Script executed:

# Query Docker Hub API for quorum-list-server tags
pip install requests -q
python3 << 'EOF'
import requests
import json

# Query Docker Hub API for image tags
url = "https://registry.hub.docker.com/v2/repositories/dashpay/quorum-list-server/tags"
try:
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        print("Available tags for dashpay/quorum-list-server on Docker Hub:")
        for result in data.get('results', [])[:20]:  # First 20 tags
            print(f"  - {result['name']}")
    else:
        print(f"Status code: {response.status_code}")
except Exception as e:
    print(f"Error: {e}")
EOF

Repository: dashpay/dash-network-deploy

Length of output: 182


🏁 Script executed:

# Check if there are any comments or documentation about version choice
echo "=== Searching for version-related comments in dashmate defaults ==="
grep -n "version\|latest\|tag" ansible/roles/dashmate/defaults/main.yml -i | head -20

Repository: dashpay/dash-network-deploy

Length of output: 382


🏁 Script executed:

# Check if quorum-list is optional/experimental (disabled by default)
echo "=== Checking quorum-list configuration context ==="
sed -n '88,100p' ansible/roles/dashmate/defaults/main.yml

Repository: dashpay/dash-network-deploy

Length of output: 703


Pin the Docker image version for reproducibility.

The dashmate_platform_quorum_list_docker_image uses the latest tag, which can lead to non-reproducible deployments when the upstream image updates. While this feature is disabled by default, pinning to a specific version aligns with the pattern used for other images in this file (e.g., 3fcc3609, v0.26.1).

Available versions for dashpay/quorum-list-server are: 0.6.0, 0.5.0, 0.4.0, 0.3.0. Consider pinning to 0.6.0 or another stable release appropriate for your deployment.

🤖 Prompt for AI Agents
In ansible/roles/dashmate/defaults/main.yml around line 93, the
dashmate_platform_quorum_list_docker_image is set to the non-reproducible
"latest" tag; change this default to a specific released tag (for example
"dashpay/quorum-list-server:0.6.0" or another chosen stable version) to match
the pinned format used elsewhere in this file and ensure deterministic
deployments.

dashmate_platform_quorum_list_api_host: "127.0.0.1"
dashmate_platform_quorum_list_api_port: 2444
dashmate_platform_quorum_list_previous_blocks_offset: 8
dashmate_platform_quorum_list_version_check_host: ""
dashmate_platform_quorum_list_address_host_override: ""

# Unsafe params. Use only if you understand what you are doing.
dashmate_platform_drive_tenderdash_consensus_unsafe_override_propose_timeout:
dashmate_platform_drive_tenderdash_consensus_unsafe_override_propose_delta:
Expand Down
61 changes: 31 additions & 30 deletions ansible/roles/dashmate/templates/dashmate.json.j2
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@
"whitelist": null,
"lowPriority": false
},
"quorum_list": {
"password": "{{ dashmate_core_rpc_quorum_list_password | default(dashmate_core_rpc_dashmate_password) }}",
"whitelist": [
"quorum", "masternode", "getblockcount"
],
"lowPriority": true
},
"dashmate": {
"password": "{{ dashmate_core_rpc_dashmate_password }}",
"whitelist": null,
Expand Down Expand Up @@ -152,6 +159,19 @@
},
"platform": {
"enable": {% if dashmate_platform_enable %}true{% else %}false{% endif %},
"quorumList": {
"enabled": {% if dashmate_platform_quorum_list_enabled | default(false) %}true{% else %}false{% endif %},
"docker": {
"image": "{{ dashmate_platform_quorum_list_docker_image | default('dashpay/quorum-list-server:latest') }}"
},
"api": {
"host": "{{ dashmate_platform_quorum_list_api_host | default('127.0.0.1') }}",
"port": {{ dashmate_platform_quorum_list_api_port | default(2444) }}
},
"previousBlocksOffset": {{ dashmate_platform_quorum_list_previous_blocks_offset | default(8) }},
"versionCheckHost": "{{ dashmate_platform_quorum_list_version_check_host | default('') }}",
"addressHostOverride": "{{ dashmate_platform_quorum_list_address_host_override | default('') }}"
},
"gateway": {
"docker": {
"image": "{{ gateway_image }}"
Expand All @@ -162,11 +182,8 @@
"driveGrpc": {
"maxRequests": {{ dashmate_platform_gateway_upstreams_drive_grpc_max_requests }}
},
"dapiApi": {
"maxRequests": {{ dashmate_platform_gateway_upstreams_dapi_api_max_requests }}
},
"dapiCoreStreams": {
"maxRequests": {{ dashmate_platform_gateway_upstreams_dapi_core_streams_max_requests }}
"rsDapi": {
"maxRequests": {{ dashmate_platform_gateway_upstreams_rs_dapi_max_requests }}
},
"dapiJsonRpc": {
"maxRequests": {{ dashmate_platform_gateway_upstreams_dapi_json_rpc_max_requests }}
Expand Down Expand Up @@ -232,24 +249,6 @@
}
},
"dapi": {
"deprecated": {
"enabled": false
},
"api": {
"docker": {
"image": "{{ dapi_image }}",
"deploy": {
"replicas": {{ dashmate_platform_dapi_api_docker_deploy_replicas }}
},
"build": {
"enabled": false,
"context": "{{ dashmate_source_dir }}",
"dockerFile": "{{ dashmate_source_dir }}/Dockerfile",
"target": "dapi"
}
},
"waitForStResultTimeout": {{ dashmate_platform_dapi_api_wait_for_st_result_timeout }}
},
"rsDapi": {
"docker": {
"image": "{% if rs_dapi_image is defined %}{{ rs_dapi_image }}{% else %}{{ dapi_image | regex_replace('^dashpay/dapi:', 'dashpay/rs-dapi:') }}{% endif %}",
Expand All @@ -264,15 +263,17 @@
}
},
"metrics": {
"host": "127.0.0.1",
"port": 9091
"enabled": {% if dashmate_platform_dapi_rs_dapi_metrics_enabled | default(false) %}true{% else %}false{% endif %},
"host": "{{ dashmate_platform_dapi_rs_dapi_metrics_host | default('127.0.0.1') }}",
"port": {{ dashmate_platform_dapi_rs_dapi_metrics_port | default(9091) }}
},
"logs": {
"level": "debug",
"jsonFormat": false,
"accessLogPath": null,
"accessLogFormat": "combined"
}
"level": "{{ dashmate_platform_dapi_rs_dapi_log_level | default('debug') }}",
"jsonFormat": {% if dashmate_platform_dapi_rs_dapi_log_json_format | default(false) %}true{% else %}false{% endif %},
"accessLogPath": {% if dashmate_platform_dapi_rs_dapi_access_log_path is defined and dashmate_platform_dapi_rs_dapi_access_log_path %}"{{ dashmate_platform_dapi_rs_dapi_access_log_path }}"{% else %}null{% endif %},
"accessLogFormat": "{{ dashmate_platform_dapi_rs_dapi_access_log_format | default('combined') }}"
},
"waitForStResultTimeout": {{ dashmate_platform_dapi_rs_dapi_wait_for_st_result_timeout | default(dashmate_platform_dapi_api_wait_for_st_result_timeout) }}
}
},
"drive": {
Expand Down