Skip to content

Commit bc6e085

Browse files
Support providing ZDM configuration as YAML file
1 parent 8980640 commit bc6e085

8 files changed

+182
-14
lines changed

ansible/deploy_zdm_proxy.yml

+26-6
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@
209209
- name: Create ZDM proxy configuration env file
210210
hosts: proxies
211211
vars_files:
212+
- vars/zdm_proxy_container_config.yml
212213
- vars/zdm_proxy_cluster_config.yml
213214
- vars/zdm_proxy_core_config.yml
214215
- vars/zdm_proxy_advanced_config.yml
@@ -220,18 +221,18 @@
220221
file:
221222
path: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}"
222223
state: directory
223-
- name: Generate env var file from template for immutable configuration
224+
- name: Generate configuration file from template for immutable configuration
224225
template:
225-
src: "zdm_proxy_immutable_config.j2"
226+
src: "{{ 'zdm_proxy_immutable_config_env_vars.j2' if zdm_proxy_config_mode == 'env_vars' else 'zdm_proxy_immutable_config_file.j2' }}"
226227
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}/{{ zdm_proxy_immutable_config_fragment_file_name }}"
227-
- name: Generate env var file from template for mutable configuration
228+
- name: Generate configuration file from template for mutable configuration
228229
template:
229-
src: "zdm_proxy_mutable_config.j2"
230+
src: "{{ 'zdm_proxy_mutable_config_env_vars.j2' if zdm_proxy_config_mode == 'env_vars' else 'zdm_proxy_mutable_config_file.j2' }}"
230231
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}/{{ zdm_proxy_mutable_config_fragment_file_name }}"
231232
- name: Merge the immutable and mutable configuration files into a single one
232233
assemble:
233234
src: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}"
234-
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_environment_config_file_name }}"
235+
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_environment_config_file_name if zdm_proxy_config_mode == 'env_vars' else (zdm_proxy_shared_assets_dir_name + '/' + zdm_proxy_config_file_name) }}"
235236

236237
- name: Install ZDM Proxy
237238
hosts: proxies
@@ -251,7 +252,8 @@
251252
vars:
252253
ansible_python_interpreter: python3
253254

254-
- name: Create ZDM proxy container
255+
- name: Create ZDM proxy container with env vars
256+
when: "zdm_proxy_config_mode == 'env_vars'"
255257
docker_container:
256258
name: "{{ zdm_proxy_container_name }}"
257259
image: "docker.io/{{ zdm_proxy_image }}"
@@ -272,6 +274,24 @@
272274
vars:
273275
ansible_python_interpreter: python3
274276

277+
- name: Create ZDM proxy container with configuration file
278+
when: "zdm_proxy_config_mode == 'conf_file'"
279+
docker_container:
280+
name: "{{ zdm_proxy_container_name }}"
281+
image: "docker.io/{{ zdm_proxy_image }}"
282+
command:
283+
- "--config={{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{zdm_proxy_config_file_name}}"
284+
mounts:
285+
- source: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}"
286+
target: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}"
287+
type: bind
288+
network_mode: host
289+
restart_policy: unless-stopped
290+
restart: yes
291+
state: started
292+
vars:
293+
ansible_python_interpreter: python3
294+
275295
- name: Wait for this ZDM proxy to come up
276296
uri:
277297
url: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ metrics_port }}/health/readiness"

ansible/rolling_update_zdm_proxy.yml

+25-7
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,21 @@
1818
- name: Create ZDM proxy configuration env file based on the latest configuration
1919
hosts: proxies
2020
vars_files:
21+
- vars/zdm_proxy_container_config.yml
2122
- vars/zdm_proxy_cluster_config.yml
2223
- vars/zdm_proxy_core_config.yml
2324
- vars/zdm_proxy_advanced_config.yml
2425
- vars/zdm_playbook_internal_config.yml
2526

2627
tasks:
27-
- name: Generate env var file from template for mutable configuration
28+
- name: Generate configuration file from template for mutable configuration
2829
template:
29-
src: "zdm_proxy_mutable_config.j2"
30+
src: "{{ 'zdm_proxy_mutable_config_env_vars.j2' if zdm_proxy_config_mode == 'env_vars' else 'zdm_proxy_mutable_config_file.j2' }}"
3031
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}/{{ zdm_proxy_mutable_config_fragment_file_name }}"
3132
- name: Merge the immutable and mutable configuration files into a single one
3233
assemble:
3334
src: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}"
34-
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_environment_config_file_name }}"
35+
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_environment_config_file_name if zdm_proxy_config_mode == 'env_vars' else (zdm_proxy_shared_assets_dir_name + '/' + zdm_proxy_config_file_name) }}"
3536

3637
- name: Configure and restart each ZDM proxy in a rolling fashion
3738
hosts: proxies
@@ -45,7 +46,8 @@
4546
- vars/zdm_proxy_core_config.yml # this inclusion is for backward compatibility and will be removed in the future
4647

4748
tasks:
48-
- name: Create ZDM proxy container with updated configuration
49+
- name: Create ZDM proxy container with updated env vars
50+
when: "zdm_proxy_config_mode == 'env_vars'"
4951
docker_container:
5052
name: "{{ zdm_proxy_container_name }}"
5153
image: "{{ zdm_proxy_image }}"
@@ -65,6 +67,25 @@
6567
state: started
6668
vars:
6769
ansible_python_interpreter: python3
70+
71+
- name: Create ZDM proxy container with updated configuration file
72+
when: "zdm_proxy_config_mode == 'conf_file'"
73+
docker_container:
74+
name: "{{ zdm_proxy_container_name }}"
75+
image: "{{ zdm_proxy_image }}"
76+
command:
77+
- "--config={{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{zdm_proxy_config_file_name}}"
78+
mounts:
79+
- source: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}"
80+
target: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}"
81+
type: bind
82+
network_mode: host
83+
restart_policy: unless-stopped
84+
restart: yes
85+
state: started
86+
vars:
87+
ansible_python_interpreter: python3
88+
6889
- name: Wait for this ZDM proxy to come up
6990
uri:
7091
url: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ metrics_port }}/health/readiness"
@@ -76,6 +97,3 @@
7697
- pause:
7798
prompt: "Pause for {{ pause_between_restarts_in_seconds }} seconds after restarting this ZDM proxy instance"
7899
seconds: "{{ pause_between_restarts_in_seconds }}"
79-
80-
81-
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#jinja2: lstrip_blocks: "True", trim_blocks: "True"
2+
3+
{% set zdm_proxy_address_list = [] %}
4+
{% for host in groups['proxies'] %}
5+
{{ zdm_proxy_address_list.append(host) }}
6+
{% endfor %}
7+
proxy_topology_index:{{ groups['proxies'].index(hostvars[inventory_hostname]['ansible_default_ipv4']['address']) }}
8+
proxy_topology_addresses:{{ zdm_proxy_address_list|join(',') }}
9+
10+
{% if ( origin_contact_points is defined ) %}
11+
origin_contact_points:{{ origin_contact_points }}
12+
{% if ( origin_port is defined ) %}
13+
origin_port:{{ origin_port }}
14+
{% endif %}
15+
{% elif ( ( origin_scb_downloaded is defined and origin_scb_downloaded == 'success' ) or ( origin_scb_provided is defined and origin_scb_provided == 'success' ) )%}
16+
origin_secure_connect_bundle_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/origin_scb.zip
17+
{% endif %}
18+
{% if ( origin_local_datacenter is defined ) %}
19+
origin_local_datacenter:{{ origin_local_datacenter }}
20+
{% endif %}
21+
22+
{% if ( target_contact_points is defined ) %}
23+
target_contact_points:{{ target_contact_points }}
24+
{% if ( target_port is defined ) %}
25+
target_port:{{ target_port }}
26+
{% endif %}
27+
{% elif ( target_scb_downloaded is defined and target_scb_downloaded == 'success' ) or ( target_scb_provided is defined and target_scb_provided == 'success' ) %}
28+
target_secure_connect_bundle_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/target_scb.zip
29+
{% endif %}
30+
{% if ( target_local_datacenter is defined ) %}
31+
target_local_datacenter:{{ target_local_datacenter }}
32+
{% endif %}
33+
34+
proxy_listen_address:{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}
35+
proxy_listen_port:{{ zdm_proxy_listen_port }}
36+
37+
metrics_address:{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}
38+
metrics_port:{{ metrics_port }}
39+
40+
{% if ( origin_tls_user_dir_path is defined and origin_tls_server_ca_filename is defined ) %}
41+
origin_tls_server_ca_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{ origin_tls_dest_dir_name }}/{{ origin_tls_server_ca_filename }}
42+
{% endif %}
43+
{% if ( origin_tls_user_dir_path is defined and origin_tls_client_cert_filename is defined ) %}
44+
origin_tls_client_cert_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{ origin_tls_dest_dir_name }}/{{ origin_tls_client_cert_filename }}
45+
{% endif %}
46+
{% if ( origin_tls_user_dir_path is defined and origin_tls_client_key_filename is defined ) %}
47+
origin_tls_client_key_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{ origin_tls_dest_dir_name }}/{{ origin_tls_client_key_filename }}
48+
{% endif %}
49+
50+
{% if ( target_tls_user_dir_path is defined and target_tls_server_ca_filename is defined ) %}
51+
target_tls_server_ca_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{ target_tls_dest_dir_name }}/{{ target_tls_server_ca_filename }}
52+
{% endif %}
53+
{% if ( target_tls_user_dir_path is defined and target_tls_client_cert_filename is defined ) %}
54+
target_tls_client_cert_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{ target_tls_dest_dir_name }}/{{ target_tls_client_cert_filename }}
55+
{% endif %}
56+
{% if ( target_tls_user_dir_path is defined and target_tls_client_key_filename is defined ) %}
57+
target_tls_client_key_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{ target_tls_dest_dir_name }}/{{ target_tls_client_key_filename }}
58+
{% endif %}
59+
60+
{% if ( zdm_proxy_tls_user_dir_path is defined and zdm_proxy_tls_ca_filename is defined ) %}
61+
proxy_tls_ca_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{ zdm_proxy_tls_dest_dir_name }}/{{ zdm_proxy_tls_ca_filename }}
62+
{% endif %}
63+
{% if ( zdm_proxy_tls_user_dir_path is defined and zdm_proxy_tls_cert_filename is defined ) %}
64+
proxy_tls_cert_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{ zdm_proxy_tls_dest_dir_name }}/{{ zdm_proxy_tls_cert_filename }}
65+
{% endif %}
66+
{% if ( zdm_proxy_tls_user_dir_path is defined and zdm_proxy_tls_key_filename is defined ) %}
67+
proxy_tls_key_path:{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{ zdm_proxy_tls_dest_dir_name }}/{{ zdm_proxy_tls_key_filename }}
68+
{% endif %}
69+
{% if ( zdm_proxy_tls_require_client_auth is defined ) %}
70+
proxy_tls_require_client_auth:{{ zdm_proxy_tls_require_client_auth }}
71+
{% endif %}
72+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#jinja2: lstrip_blocks: "True", trim_blocks: "True"
2+
3+
{% if ( primary_cluster is defined ) %}
4+
primary_cluster:{{ primary_cluster }}
5+
{% endif %}
6+
7+
{% if ( read_mode is defined ) %}
8+
read_mode:{{ read_mode }}
9+
{% endif %}
10+
11+
{% if ( log_level is defined ) %}
12+
log_level:{{ log_level }}
13+
{% endif %}
14+
15+
{% if ( zdm_proxy_max_clients_connections is defined ) %}
16+
proxy_max_client_connections:{{ zdm_proxy_max_clients_connections }}
17+
{% endif %}
18+
19+
{% if ( zdm_proxy_request_timeout_ms is defined ) %}
20+
proxy_request_timeout_ms:{{ zdm_proxy_request_timeout_ms }}
21+
{% endif %}
22+
{% if ( origin_connection_timeout_ms is defined ) %}
23+
origin_connection_timeout_ms:{{ origin_connection_timeout_ms }}
24+
{% endif %}
25+
{% if ( target_connection_timeout_ms is defined ) %}
26+
target_connection_timeout_ms:{{ target_connection_timeout_ms }}
27+
{% endif %}
28+
{% if ( async_handshake_timeout_ms is defined ) %}
29+
async_handshake_timeout_ms:{{ async_handshake_timeout_ms }}
30+
{% endif %}
31+
{% if ( heartbeat_interval_ms is defined ) %}
32+
heartbeat_interval_ms:{{ heartbeat_interval_ms }}
33+
{% endif %}
34+
{% if ( zdm_proxy_max_stream_ids is defined ) %}
35+
proxy_max_stream_ids:{{ zdm_proxy_max_stream_ids }}
36+
{% endif %}
37+
38+
{% if ( metrics_enabled is defined ) %}
39+
metrics_enabled:{{ metrics_enabled }}
40+
{% endif %}
41+
42+
{% if ( system_queries_mode is defined ) %}
43+
system_queries_mode:{{ system_queries_mode }}
44+
{% endif %}
45+
46+
{% if ( replace_cql_functions is defined ) %}
47+
replace_cql_functions:{{ replace_cql_functions }}
48+
{% endif %}
49+
50+
{% if ( forward_client_credentials_to_origin is defined ) %}
51+
forward_client_credentials_to_origin:{{ forward_client_credentials_to_origin }}
52+
{% endif %}
53+

ansible/vars/zdm_playbook_internal_config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ zdm_proxy_config_fragments_dir_name: zdm_proxy_config_fragments
1111
zdm_proxy_mutable_config_fragment_file_name: zdm_proxy_mutable_config.env
1212
zdm_proxy_immutable_config_fragment_file_name: zdm_proxy_immutable_config.env
1313
zdm_proxy_environment_config_file_name: zdm_proxy_config.env
14+
zdm_proxy_config_file_name: zdm_proxy_config.yml
1415

1516
origin_scb_file_name: origin_scb
1617
target_scb_file_name: target_scb

ansible/vars/zdm_proxy_container_config.yml

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@
22
zdm_proxy_image: datastax/zdm-proxy:2.x
33

44
create_containers: 1
5-
zdm_proxy_container_name: zdm-proxy-container
5+
zdm_proxy_container_name: zdm-proxy-container
6+
7+
# Defines how configuration shall be passed to ZDM proxy.
8+
# Allowed values are "env_vars" and "conf_file".
9+
zdm_proxy_config_mode: env_vars

0 commit comments

Comments
 (0)