Skip to content

Commit 08142af

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

8 files changed

+205
-14
lines changed

ansible/deploy_zdm_proxy.yml

+35-6
Original file line numberDiff line numberDiff line change
@@ -209,29 +209,39 @@
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
215216
- vars/zdm_proxy_custom_tls_config.yml
216217
- vars/zdm_playbook_internal_config.yml
217218

218219
tasks:
220+
- name: Applying default ZDM proxy config mode
221+
when: zdm_proxy_config_mode is undefined
222+
set_fact:
223+
zdm_proxy_config_mode: "env_vars"
224+
- name: Verify proxy container configuration
225+
assert:
226+
that: zdm_proxy_config_mode == "env_vars" or zdm_proxy_config_mode == "config_file"
227+
success_msg: "ZDM proxy container correctly configured"
228+
fail_msg: "Invalid value of 'zdm_proxy_config_mode' parameter, supported values are 'env_vars' or 'config_file'"
219229
- name: Create configuration fragment directory
220230
file:
221231
path: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}"
222232
state: directory
223-
- name: Generate env var file from template for immutable configuration
233+
- name: Generate configuration file from template for immutable configuration
224234
template:
225-
src: "zdm_proxy_immutable_config.j2"
235+
src: "{{ 'zdm_proxy_immutable_config_env_vars.j2' if zdm_proxy_config_mode == 'env_vars' else 'zdm_proxy_immutable_config_file.j2' }}"
226236
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
237+
- name: Generate configuration file from template for mutable configuration
228238
template:
229-
src: "zdm_proxy_mutable_config.j2"
239+
src: "{{ 'zdm_proxy_mutable_config_env_vars.j2' if zdm_proxy_config_mode == 'env_vars' else 'zdm_proxy_mutable_config_file.j2' }}"
230240
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}/{{ zdm_proxy_mutable_config_fragment_file_name }}"
231241
- name: Merge the immutable and mutable configuration files into a single one
232242
assemble:
233243
src: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}"
234-
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_environment_config_file_name }}"
244+
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) }}"
235245

236246
- name: Install ZDM Proxy
237247
hosts: proxies
@@ -251,7 +261,8 @@
251261
vars:
252262
ansible_python_interpreter: python3
253263

254-
- name: Create ZDM proxy container
264+
- name: Create ZDM proxy container with env vars
265+
when: "zdm_proxy_config_mode == 'env_vars'"
255266
docker_container:
256267
name: "{{ zdm_proxy_container_name }}"
257268
image: "docker.io/{{ zdm_proxy_image }}"
@@ -272,6 +283,24 @@
272283
vars:
273284
ansible_python_interpreter: python3
274285

286+
- name: Create ZDM proxy container with configuration file
287+
when: "zdm_proxy_config_mode == 'config_file'"
288+
docker_container:
289+
name: "{{ zdm_proxy_container_name }}"
290+
image: "docker.io/{{ zdm_proxy_image }}"
291+
command:
292+
- "--config={{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{zdm_proxy_config_file_name}}"
293+
mounts:
294+
- source: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}"
295+
target: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}"
296+
type: bind
297+
network_mode: host
298+
restart_policy: unless-stopped
299+
restart: yes
300+
state: started
301+
vars:
302+
ansible_python_interpreter: python3
303+
275304
- name: Wait for this ZDM proxy to come up
276305
uri:
277306
url: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ metrics_port }}/health/readiness"

ansible/rolling_update_zdm_proxy.yml

+34-7
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,30 @@
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: Applying default ZDM proxy config mode
29+
when: zdm_proxy_config_mode is undefined
30+
set_fact:
31+
zdm_proxy_config_mode: "env_vars"
32+
- name: Verify proxy container configuration
33+
assert:
34+
that: zdm_proxy_config_mode == "env_vars" or zdm_proxy_config_mode == "config_file"
35+
success_msg: "ZDM proxy container correctly configured"
36+
fail_msg: "Invalid value of 'zdm_proxy_config_mode' parameter, supported values are 'env_vars' or 'config_file'"
37+
- name: Generate configuration file from template for mutable configuration
2838
template:
29-
src: "zdm_proxy_mutable_config.j2"
39+
src: "{{ 'zdm_proxy_mutable_config_env_vars.j2' if zdm_proxy_config_mode == 'env_vars' else 'zdm_proxy_mutable_config_file.j2' }}"
3040
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}/{{ zdm_proxy_mutable_config_fragment_file_name }}"
3141
- name: Merge the immutable and mutable configuration files into a single one
3242
assemble:
3343
src: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_config_fragments_dir_name }}"
34-
dest: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_environment_config_file_name }}"
44+
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) }}"
3545

3646
- name: Configure and restart each ZDM proxy in a rolling fashion
3747
hosts: proxies
@@ -45,7 +55,8 @@
4555
- vars/zdm_proxy_core_config.yml # this inclusion is for backward compatibility and will be removed in the future
4656

4757
tasks:
48-
- name: Create ZDM proxy container with updated configuration
58+
- name: Create ZDM proxy container with updated env vars
59+
when: "zdm_proxy_config_mode == 'env_vars'"
4960
docker_container:
5061
name: "{{ zdm_proxy_container_name }}"
5162
image: "{{ zdm_proxy_image }}"
@@ -65,6 +76,25 @@
6576
state: started
6677
vars:
6778
ansible_python_interpreter: python3
79+
80+
- name: Create ZDM proxy container with updated configuration file
81+
when: "zdm_proxy_config_mode == 'config_file'"
82+
docker_container:
83+
name: "{{ zdm_proxy_container_name }}"
84+
image: "{{ zdm_proxy_image }}"
85+
command:
86+
- "--config={{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}/{{zdm_proxy_config_file_name}}"
87+
mounts:
88+
- source: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}"
89+
target: "{{ zdm_proxy_home_dir }}/{{ zdm_proxy_shared_assets_dir_name }}"
90+
type: bind
91+
network_mode: host
92+
restart_policy: unless-stopped
93+
restart: yes
94+
state: started
95+
vars:
96+
ansible_python_interpreter: python3
97+
6898
- name: Wait for this ZDM proxy to come up
6999
uri:
70100
url: "http://{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:{{ metrics_port }}/health/readiness"
@@ -76,6 +106,3 @@
76106
- pause:
77107
prompt: "Pause for {{ pause_between_restarts_in_seconds }} seconds after restarting this ZDM proxy instance"
78108
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,58 @@
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+
origin_username: {{ origin_username | default('') }}
16+
origin_password: {{ origin_password | default('') }}
17+
target_username: {{ target_username | default('') }}
18+
target_password: {{ target_password | default('') }}
19+
20+
{% if ( zdm_proxy_max_clients_connections is defined ) %}
21+
proxy_max_client_connections: {{ zdm_proxy_max_clients_connections }}
22+
{% endif %}
23+
24+
{% if ( zdm_proxy_request_timeout_ms is defined ) %}
25+
proxy_request_timeout_ms: {{ zdm_proxy_request_timeout_ms }}
26+
{% endif %}
27+
{% if ( origin_connection_timeout_ms is defined ) %}
28+
origin_connection_timeout_ms: {{ origin_connection_timeout_ms }}
29+
{% endif %}
30+
{% if ( target_connection_timeout_ms is defined ) %}
31+
target_connection_timeout_ms: {{ target_connection_timeout_ms }}
32+
{% endif %}
33+
{% if ( async_handshake_timeout_ms is defined ) %}
34+
async_handshake_timeout_ms: {{ async_handshake_timeout_ms }}
35+
{% endif %}
36+
{% if ( heartbeat_interval_ms is defined ) %}
37+
heartbeat_interval_ms: {{ heartbeat_interval_ms }}
38+
{% endif %}
39+
{% if ( zdm_proxy_max_stream_ids is defined ) %}
40+
proxy_max_stream_ids: {{ zdm_proxy_max_stream_ids }}
41+
{% endif %}
42+
43+
{% if ( metrics_enabled is defined ) %}
44+
metrics_enabled: {{ metrics_enabled }}
45+
{% endif %}
46+
47+
{% if ( system_queries_mode is defined ) %}
48+
system_queries_mode: {{ system_queries_mode }}
49+
{% endif %}
50+
51+
{% if ( replace_cql_functions is defined ) %}
52+
replace_cql_functions: {{ replace_cql_functions }}
53+
{% endif %}
54+
55+
{% if ( forward_client_credentials_to_origin is defined ) %}
56+
forward_client_credentials_to_origin: {{ forward_client_credentials_to_origin }}
57+
{% endif %}
58+

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 "config_file".
9+
zdm_proxy_config_mode: env_vars

0 commit comments

Comments
 (0)