From a347d47895f6446ff2806db54981ec0453aa5de2 Mon Sep 17 00:00:00 2001 From: Sivan Hajbi <117824107+sivan-hajbi-imperva@users.noreply.github.com> Date: Mon, 6 Nov 2023 14:11:32 +0200 Subject: [PATCH 01/15] Expand upgrade unit tests (#308) * add main unit tests and unit tests coverage --- .../workflows/sonar_upgrade_unit_tests.yml | 3 +- .gitignore | 1 + .../tests/requirements-dev.txt | 3 +- .../python_upgrader/tests/test_main.py | 512 ++++++++++++++++++ .../tests/test_upgrade_status_service.py | 143 ++++- .../python_upgrader/upgrade/main.py | 36 +- .../upgrade/upgrade_status_service.py | 14 - 7 files changed, 671 insertions(+), 41 deletions(-) create mode 100644 modules/aws/sonar-upgrader/python_upgrader/tests/test_main.py diff --git a/.github/workflows/sonar_upgrade_unit_tests.yml b/.github/workflows/sonar_upgrade_unit_tests.yml index 22c6210ea..722ff7baa 100644 --- a/.github/workflows/sonar_upgrade_unit_tests.yml +++ b/.github/workflows/sonar_upgrade_unit_tests.yml @@ -66,7 +66,8 @@ jobs: working-directory: ${{ env.PYTHON_UPGRADER_DIR }} run: | source venv/bin/activate - pytest + coverage run -m pytest + coverage report - name: Check how was the workflow run id: check-trigger diff --git a/.gitignore b/.gitignore index c50c97b0b..06a433b90 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ myip-default *.mprv __pycache__/ upgrade_status.json +.coverage diff --git a/modules/aws/sonar-upgrader/python_upgrader/tests/requirements-dev.txt b/modules/aws/sonar-upgrader/python_upgrader/tests/requirements-dev.txt index ea778e5dc..af0d1e42e 100644 --- a/modules/aws/sonar-upgrader/python_upgrader/tests/requirements-dev.txt +++ b/modules/aws/sonar-upgrader/python_upgrader/tests/requirements-dev.txt @@ -1,2 +1,3 @@ pytest==7.3.2 -pytest-mock==3.11.1 \ No newline at end of file +pytest-mock==3.11.1 +coverage==7.2.7 \ No newline at end of file diff --git a/modules/aws/sonar-upgrader/python_upgrader/tests/test_main.py b/modules/aws/sonar-upgrader/python_upgrader/tests/test_main.py new file mode 100644 index 000000000..19f806a6e --- /dev/null +++ b/modules/aws/sonar-upgrader/python_upgrader/tests/test_main.py @@ -0,0 +1,512 @@ +# test_main.py + +import pytest +import argparse +import json +from upgrade.main import main, fill_args_defaults, set_global_variables +from upgrade.upgrade_status_service import OverallUpgradeStatus +from upgrade.upgrade_exception import UpgradeException + +gw1 = { + "host": "host1", + "ssh_user": "ec2-user", + "ssh_private_key_file_path": "/home/ssh_key2.pem" +} + +gw2 = { + "host": "host2", + "ssh_user": "ec2-user", + "ssh_private_key_file_path": "/home/ssh_key2.pem" +} + +gw3 = { + "host": "host3", + "ssh_user": "ec2-user", + "ssh_private_key_file_path": "/home/ssh_key2.pem", + "proxy": { + "host": "host100", + "ssh_user": "ec2-user", + "ssh_private_key_file_path": "/home/ssh_key2.pem", + } +} + + +hub1 = { + "host": "host100", + "ssh_user": "ec2-user", + "ssh_private_key_file_path": "/home/ssh_key2.pem" +} + +hub2 = { + "host": "host101", + "ssh_user": "ec2-user", + "ssh_private_key_file_path": "/home/ssh_key2.pem" +} + +hub3 = { + "host": "host102", + "ssh_user": "ec2-user", + "ssh_private_key_file_path": "/home/ssh_key2.pem" +} + +@pytest.fixture +def setup_for_each_test(mocker): + default_args = argparse.Namespace( + agentless_gws=[], + dsf_hubs=[], + target_version="4.13", + connection_timeout=None, + test_connection=None, + run_preflight_validations=None, + run_upgrade=None, + run_postflight_validations=None, + stop_on_failure=None, + tarball_location=None, + ) + fill_args_defaults(default_args) + set_global_variables(100) + + # mock UpgradeStatusService class functions + upgrade_status_service_mock = mocker.Mock() + mocker.patch('upgrade.main.UpgradeStatusService', return_value=upgrade_status_service_mock) + mocker.patch.object(upgrade_status_service_mock, 'should_test_connection', return_value=True) + mocker.patch.object(upgrade_status_service_mock, 'should_collect_python_location', return_value=True) + mocker.patch.object(upgrade_status_service_mock, 'should_run_preflight_validations', return_value=True) + mocker.patch.object(upgrade_status_service_mock, 'should_run_upgrade', return_value=True) + mocker.patch.object(upgrade_status_service_mock, 'should_run_postflight_validations', return_value=True) + mocker.patch.object(upgrade_status_service_mock, 'get_summary', return_value="Mock Summary") + mocker.patch.object(upgrade_status_service_mock, 'are_nodes_with_upgrade_statuses', return_value=True) + mocker.patch.object(upgrade_status_service_mock, 'get_overall_upgrade_status', return_value=OverallUpgradeStatus.SUCCEEDED) + + mocker.patch('upgrade.main.join_paths', side_effect=lambda arg1, arg2, arg3: arg3) + mocker.patch('upgrade.main.read_file_contents', side_effect=lambda file_name: file_name + "_content") + + test_connection_mock = mocker.patch('upgrade.main.test_connection') + + yield default_args, upgrade_status_service_mock, test_connection_mock + + +def test_main_all_flags_disabled(setup_for_each_test, mocker): + # given + args, _, _ = setup_for_each_test + setup_custom_args(args, [{"main": gw1}], [{"main": hub1}], False, False, False, False, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script') + + # when + main(args) + + # then + run_remote_script_mock.assert_not_called() + + +def test_main_all_flags_enabled(setup_for_each_test, mocker): + # given + args, _, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}], [{"main": hub1}], True, True, True, True, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', + side_effect=create_mocked_run_remote_script_side_effects()) + + # when + main(args) + + # then + assert test_connection_mock.call_count == 2 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 8 + for host in ["host1", "host100"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_preflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_postflight_validations.py") == 1 + + +def test_main_only_test_connection_enabled(setup_for_each_test, mocker): + # given + args, _, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}], [{"main": hub1}], True, False, False, False, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script') + + # when + main(args) + + # then + assert test_connection_mock.call_count == 2 + run_remote_script_mock.assert_not_called() + + +def test_main_only_preflight_enabled(setup_for_each_test, mocker): + # given + args, _, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}], [{"main": hub1}], False, True, False, False, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', + side_effect=create_mocked_run_remote_script_side_effects()) + + # when + main(args) + + # then + test_connection_mock.assert_not_called() + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 4 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "run_preflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host100", "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host100", "run_preflight_validations.py") == 1 + + +def test_main_only_upgrade_enabled(setup_for_each_test, mocker): + # given + args, _, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}], [{"main": hub1}], False, False, True, False, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', + side_effect=create_mocked_run_remote_script_side_effects()) + + # when + main(args) + + # then + test_connection_mock.assert_not_called() + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 2 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host100", "upgrade_v4_10.sh") == 1 + + +def test_main_only_postflight_enabled(setup_for_each_test, mocker): + # given + args, _, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}], [{"main": hub1}], False, False, False, True, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', + side_effect=create_mocked_run_remote_script_side_effects()) + + # when + main(args) + + # then + test_connection_mock.assert_not_called() + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 4 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "run_postflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host100", "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host100", "run_postflight_validations.py") == 1 + + +def test_main_custom_tarball(setup_for_each_test, mocker): + # given + args, _, test_connection_mock = setup_for_each_test + tarball_location = '{"s3_bucket": "my_custom_bucket", "s3_region": "my_custom_region"}' + setup_custom_args(args, [{"main": gw1}], [], True, True, True, True, True, tarball_location=tarball_location) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', + side_effect=create_mocked_run_remote_script_side_effects()) + + # when + main(args) + + # then + assert test_connection_mock.call_count == 1 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 4 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "run_postflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "run_postflight_validations.py") == 1 + assert "my_custom_bucket" in call_args_list[2].args[4] + assert "my_custom_region" in call_args_list[2].args[4] + + +def test_main_host_with_proxy(setup_for_each_test, mocker): + # given + args, _, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw3}], [], True, True, True, True, True) + test_connection_via_proxy_mock = mocker.patch('upgrade.main.test_connection_via_proxy') + run_remote_script_via_proxy_mock = mocker.patch('upgrade.main.run_remote_script_via_proxy', + side_effect=create_mocked_run_remote_script_with_proxy_side_effects()) + + # when + main(args) + + # then + assert test_connection_via_proxy_mock.call_count == 1 + call_args_list = run_remote_script_via_proxy_mock.call_args_list + assert len(call_args_list) == 4 + assert count_remote_calls_with_host_and_script(call_args_list, "host3", "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host3", "run_postflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host3", "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host3", "run_postflight_validations.py") == 1 + + +def test_main_skip_successful_host(setup_for_each_test, mocker): + # given + args, upgrade_status_service_mock, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}, {"main": gw2}], [], True, True, True, True, True) + mocker.patch.object(upgrade_status_service_mock, 'should_test_connection', side_effect=lambda host: host == "host2") + mocker.patch.object(upgrade_status_service_mock, 'should_collect_python_location', side_effect=lambda host: host == "host2") + mocker.patch.object(upgrade_status_service_mock, 'should_run_preflight_validations', side_effect=lambda host: host == "host2") + mocker.patch.object(upgrade_status_service_mock, 'should_run_upgrade', side_effect=lambda host: host == "host2") + mocker.patch.object(upgrade_status_service_mock, 'should_run_postflight_validations', side_effect=lambda host: host == "host2") + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', side_effect=create_mocked_run_remote_script_side_effects()) + + # when + main(args) + + # then + assert test_connection_mock.call_count == 1 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 4 + assert count_remote_calls_with_host_and_script(call_args_list, "host2", "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host2", "run_preflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host2", "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host2", "run_postflight_validations.py") == 1 + + +@pytest.mark.parametrize("preflight_not_pass_hosts, preflight_error_hosts", [ + (["host1"], []), + ([], ["host1"]), +]) +def test_main_preflight_failure_with_stop_on_failure_true(setup_for_each_test, mocker, + preflight_not_pass_hosts, preflight_error_hosts): + # given + args, upgrade_status_service_mock, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}, {"main": gw2}], [{"main": hub1}], True, True, True, True, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', side_effect=create_mocked_run_remote_script_side_effects( + preflight_validations_not_pass_hosts=preflight_not_pass_hosts, preflight_validations_error_hosts=preflight_error_hosts)) + + # when + main(args) + + # then + assert test_connection_mock.call_count == 3 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 4 + for host in ["host1", "host2", "host100"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "run_preflight_validations.py") == 1 + + +def test_main_upgrade_failure_with_stop_on_failure_true(setup_for_each_test, mocker): + # given + args, upgrade_status_service_mock, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}, {"main": gw2}], [{"main": hub1}], True, True, True, True, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', side_effect=create_mocked_run_remote_script_side_effects( + upgrade_error_hosts=["host1"])) + + # when + main(args) + + # then + assert test_connection_mock.call_count == 3 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 7 + for host in ["host1", "host2", "host100"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_preflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "upgrade_v4_10.sh") == 1 + + +def test_main_python_location_failure_with_stop_on_failure_false(setup_for_each_test, mocker): + # given + args, upgrade_status_service_mock, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}, {"main": gw2}], [{"main": hub1}], True, True, True, True, False) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', side_effect=create_mocked_run_remote_script_side_effects( + python_location_error_hosts=["host1"])) + mocker.patch.object(upgrade_status_service_mock, 'should_run_preflight_validations', side_effect=lambda host: host != "host1") + mocker.patch.object(upgrade_status_service_mock, 'should_run_upgrade', side_effect=lambda host: host != "host1") + mocker.patch.object(upgrade_status_service_mock, 'should_run_postflight_validations', side_effect=lambda host: host != "host1") + + # when + main(args) + + # then + assert test_connection_mock.call_count == 3 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 9 + for host in ["host1", "host2", "host100"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "get_python_location.sh") == 1 + for host in ["host2", "host100"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_preflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_postflight_validations.py") == 1 + + +@pytest.mark.parametrize("preflight_not_pass_hosts, preflight_error_hosts", [ + (["host1"], []), + ([], ["host1"]), +]) +def test_main_preflight_failure_with_stop_on_failure_false(setup_for_each_test, mocker, + preflight_not_pass_hosts, preflight_error_hosts): + # given + args, upgrade_status_service_mock, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}, {"main": gw2}], [{"main": hub1}], True, True, True, True, False) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', side_effect=create_mocked_run_remote_script_side_effects( + preflight_validations_not_pass_hosts=preflight_not_pass_hosts, preflight_validations_error_hosts=preflight_error_hosts)) + mocker.patch.object(upgrade_status_service_mock, 'should_run_upgrade', side_effect=lambda host: host != "host1") + mocker.patch.object(upgrade_status_service_mock, 'should_run_postflight_validations', side_effect=lambda host: host != "host1") + + # when + main(args) + + # then + assert test_connection_mock.call_count == 3 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 10 + for host in ["host1", "host2", "host100"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_preflight_validations.py") == 1 + for host in ["host2", "host100"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_postflight_validations.py") == 1 + + +def test_main_hadr_set_successful(setup_for_each_test, mocker): + # given + args, upgrade_status_service_mock, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1, "dr": gw2}], [{"main": hub1, "dr": hub2, "minor": hub3}], True, True, True, True, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', side_effect=create_mocked_run_remote_script_side_effects()) + + # when + main(args) + + # then + assert test_connection_mock.call_count == 5 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 20 + for host in ["host1", "host2", "host100", "host101", "host102"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_preflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_postflight_validations.py") == 1 + + +def test_main_hadr_set_skip_node_after_hadr_upgrade_failure_stop_on_failure_false(setup_for_each_test, mocker): + # given + args, upgrade_status_service_mock, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1, "dr": gw2}], [{"main": hub1, "dr": hub2, "minor": hub3}], True, True, True, True, False) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', side_effect=create_mocked_run_remote_script_side_effects( + upgrade_error_hosts=["host2", "host102"])) + + # when + main(args) + + # then + assert test_connection_mock.call_count == 5 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 12 + for host in ["host1", "host2", "host100", "host101", "host102"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_preflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host2", "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host102", "upgrade_v4_10.sh") == 1 + + +@pytest.mark.parametrize("postflight_not_pass_hosts, postflight_error_hosts", [ + (["host2", "host102"], []), + ([], ["host2", "host102"]), +]) +def test_main_hadr_set_skip_node_after_hadr_postflight_failure_stop_on_failure_false(setup_for_each_test, mocker, + postflight_not_pass_hosts, + postflight_error_hosts): + # given + args, upgrade_status_service_mock, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1, "dr": gw2}], [{"main": hub1, "dr": hub2, "minor": hub3}], True, True, True, True, False) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', side_effect=create_mocked_run_remote_script_side_effects( + postflight_validations_not_pass_hosts=postflight_not_pass_hosts, postflight_validations_error_hosts=postflight_error_hosts)) + + # when + main(args) + + # then + assert test_connection_mock.call_count == 5 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 14 + for host in ["host1", "host2", "host100", "host101", "host102"]: + assert count_remote_calls_with_host_and_script(call_args_list, host, "get_python_location.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, host, "run_preflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host2", "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host2", "run_preflight_validations.py") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host102", "upgrade_v4_10.sh") == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host102", "run_preflight_validations.py") == 1 + + +@pytest.mark.xfail(raises=UpgradeException) +def test_main_raise_exception_on_overall_status_failed(setup_for_each_test, mocker): + # given + args, upgrade_status_service_mock, test_connection_mock = setup_for_each_test + setup_custom_args(args, [{"main": gw1}], [], True, True, True, True, True) + run_remote_script_mock = mocker.patch('upgrade.main.run_remote_script', side_effect=create_mocked_run_remote_script_side_effects( + python_location_error_hosts=["host1"])) + mocker.patch.object(upgrade_status_service_mock, 'get_overall_upgrade_status', return_value=OverallUpgradeStatus.FAILED) + + # when + main(args) + + # then + assert test_connection_mock.call_count == 1 + call_args_list = run_remote_script_mock.call_args_list + assert len(call_args_list) == 1 + assert count_remote_calls_with_host_and_script(call_args_list, "host1", "get_python_location.sh") == 1 + + +def setup_custom_args(args, agentless_gws, dsf_hubs, test_connection, run_preflight_validations, run_upgrade, + run_postflight_validations, stop_on_failure, tarball_location=None): + args.agentless_gws = json.dumps(agentless_gws) + args.dsf_hubs = json.dumps(dsf_hubs) + args.test_connection = test_connection + args.run_preflight_validations = run_preflight_validations + args.run_upgrade = run_upgrade + args.run_postflight_validations = run_postflight_validations + args.stop_on_failure = stop_on_failure + if tarball_location is not None: + args.tarball_location = tarball_location + + +def create_mocked_run_remote_script_side_effects(python_location_error_hosts=None, + preflight_validations_not_pass_hosts=None, + preflight_validations_error_hosts=None, + upgrade_error_hosts=None, + postflight_validations_not_pass_hosts=None, + postflight_validations_error_hosts=None): + def mocked_run_remote_script(host, remote_user, remote_key_filename, script_contents, script_run_command, + connection_timeout): + if "get_python_location.sh" in script_contents: + if python_location_error_hosts is not None and host in python_location_error_hosts: + return "get_python_location error" + else: + return "Python location: test_python_location" + elif "run_preflight_validations.py" in script_contents: + if preflight_validations_error_hosts is not None and host in preflight_validations_error_hosts: + return "run_preflight_validations error" + elif preflight_validations_not_pass_hosts is not None and host in preflight_validations_not_pass_hosts: + return 'Preflight validations result: {"different_version": true, "min_version": true, ' \ + '"max_version_hop": true, "enough_free_disk_space": false}' + else: + return 'Preflight validations result: {"different_version": true, "min_version": true, ' \ + '"max_version_hop": true, "enough_free_disk_space": true}' + elif "upgrade_v4_10.sh" in script_contents: + if upgrade_error_hosts is not None and host in upgrade_error_hosts: + return "upgrade error" + else: + return "Upgrade completed" + elif "run_postflight_validations.py" in script_contents: + if postflight_validations_error_hosts is not None and host in postflight_validations_error_hosts: + return "run_postflight_validations error" + elif postflight_validations_not_pass_hosts is not None and host in postflight_validations_not_pass_hosts: + return 'Postflight validations result: {"correct_version": false}' + else: + return 'Postflight validations result: {"correct_version": true}' + else: + raise Exception("unknown script") + return mocked_run_remote_script + + +def create_mocked_run_remote_script_with_proxy_side_effects(): + mocked_run_remote_script = create_mocked_run_remote_script_side_effects() + def mocked_run_remote_with_proxy_script(host, remote_user, remote_key_filename, script_contents, script_run_command, + proxy_host, proxy_user, proxy_key_filename, connection_timeout): + return mocked_run_remote_script(host, remote_user, remote_key_filename, script_contents, script_run_command, + connection_timeout) + return mocked_run_remote_with_proxy_script + + +def count_remote_calls_with_host_and_script(call_args_list, host, script_content): + return sum(1 for call_args in call_args_list if call_args.args[0] == host and script_content in call_args.args[3]) diff --git a/modules/aws/sonar-upgrader/python_upgrader/tests/test_upgrade_status_service.py b/modules/aws/sonar-upgrader/python_upgrader/tests/test_upgrade_status_service.py index 7cf82fdab..46eb9e306 100644 --- a/modules/aws/sonar-upgrader/python_upgrader/tests/test_upgrade_status_service.py +++ b/modules/aws/sonar-upgrader/python_upgrader/tests/test_upgrade_status_service.py @@ -1,7 +1,8 @@ # test_upgrade_status_service.py import pytest -from upgrade.upgrade_status_service import UpgradeStatusService, UpgradeStatus +from collections import Counter +from upgrade.upgrade_status_service import UpgradeStatusService, UpgradeStatus, OverallUpgradeStatus from unittest.mock import ANY # Import ANY from unittest.mock @@ -11,11 +12,11 @@ def setup_for_each_test(): yield upgrade_status_service -def test_init_status_when_file_not_exist(mocker, setup_for_each_test): +def test_init_status_when_file_not_exist(setup_for_each_test, mocker): # given upgrade_status_service = setup_for_each_test is_file_exist_mock = mocker.patch('upgrade.upgrade_status_service.is_file_exist', return_value=False) - read_file_contents_mock = mocker.patch('upgrade.upgrade_status_service.read_file_contents') + read_file_contents_mock = mocker.patch('upgrade.upgrade_status_service.read_file_contents') # for not_called check update_file_safely_mock = mocker.patch('upgrade.upgrade_status_service.update_file_safely') # when @@ -31,7 +32,7 @@ def test_init_status_when_file_not_exist(mocker, setup_for_each_test): update_file_safely_mock.assert_called_once_with("upgrade_status.json", ANY) -def test_init_status_when_file_exists(mocker, setup_for_each_test): +def test_init_status_when_file_exists(setup_for_each_test, mocker): # given upgrade_status_service = setup_for_each_test state_file_content = """ @@ -48,7 +49,7 @@ def test_init_status_when_file_exists(mocker, setup_for_each_test): read_file_contents_mock = mocker.patch('upgrade.upgrade_status_service.read_file_contents', return_value=state_file_content) update_file_safely_mock = mocker.patch('upgrade.upgrade_status_service.update_file_safely') - copy_file_mock = mocker.patch('upgrade.upgrade_status_service.copy_file') + copy_file_mock = mocker.patch('upgrade.upgrade_status_service.copy_file') # for not_called check # when upgrade_status_service.init_upgrade_status(["host1", "host2"], "4.12") @@ -64,7 +65,7 @@ def test_init_status_when_file_exists(mocker, setup_for_each_test): copy_file_mock.assert_not_called() -def test_init_status_when_file_exists_with_different_target_version(mocker, setup_for_each_test): +def test_init_status_when_file_exists_with_different_target_version(setup_for_each_test, mocker): # given upgrade_status_service = setup_for_each_test state_file_content = """ @@ -97,11 +98,11 @@ def test_init_status_when_file_exists_with_different_target_version(mocker, setu copy_file_mock.assert_called_once_with("upgrade_status.json", ANY) -def test_update_upgrade_status(mocker, setup_for_each_test): +def test_update_upgrade_status(setup_for_each_test, mocker): # given upgrade_status_service = setup_for_each_test is_file_exist_mock = mocker.patch('upgrade.upgrade_status_service.is_file_exist', return_value=False) - read_file_contents_mock = mocker.patch('upgrade.upgrade_status_service.read_file_contents') + read_file_contents_mock = mocker.patch('upgrade.upgrade_status_service.read_file_contents') # for not_called check update_file_safely_mock = mocker.patch('upgrade.upgrade_status_service.update_file_safely') # when @@ -118,11 +119,11 @@ def test_update_upgrade_status(mocker, setup_for_each_test): assert update_file_safely_mock.call_count == 2 -def test_flush(mocker, setup_for_each_test): +def test_flush(setup_for_each_test, mocker): # given upgrade_status_service = setup_for_each_test is_file_exist_mock = mocker.patch('upgrade.upgrade_status_service.is_file_exist', return_value=False) - read_file_contents_mock = mocker.patch('upgrade.upgrade_status_service.read_file_contents') + read_file_contents_mock = mocker.patch('upgrade.upgrade_status_service.read_file_contents') # for not_called check update_file_safely_mock = mocker.patch('upgrade.upgrade_status_service.update_file_safely') # when @@ -134,3 +135,125 @@ def test_flush(mocker, setup_for_each_test): read_file_contents_mock.assert_not_called() assert update_file_safely_mock.call_count == 2 + +@pytest.mark.parametrize("should_method", [ + UpgradeStatusService.should_test_connection, + UpgradeStatusService.should_collect_python_location, + UpgradeStatusService.should_run_preflight_validations, + UpgradeStatusService.should_run_upgrade, + UpgradeStatusService.should_run_postflight_validations, +]) +def test_should_run_step_methods_on_succeeded_status(setup_for_each_test, mocker, should_method): + # when + mocker.patch('upgrade.upgrade_status_service.is_file_exist', return_value=False) + mocker.patch('upgrade.upgrade_status_service.update_file_safely') + upgrade_status_service = setup_for_each_test + upgrade_status_service.init_upgrade_status(["host1"], "4.12") + upgrade_status_service.update_upgrade_status("host1", UpgradeStatus.SUCCEEDED) + + # given + result = should_method(upgrade_status_service, "host1") + + # then + assert result is False + + +def test_get_upgrade_statuses(setup_for_each_test, mocker): + # when + mocker.patch('upgrade.upgrade_status_service.is_file_exist', return_value=False) + mocker.patch('upgrade.upgrade_status_service.update_file_safely') + upgrade_status_service = setup_for_each_test + upgrade_status_service.init_upgrade_status(["host1", "host2", "host3", "host4"], "4.12") + upgrade_status_service.update_upgrade_status("host1", UpgradeStatus.SUCCEEDED) + upgrade_status_service.update_upgrade_status("host2", UpgradeStatus.SUCCEEDED) + upgrade_status_service.update_upgrade_status("host3", UpgradeStatus.UPGRADE_FAILED) + + # given + result = upgrade_status_service.get_upgrade_statuses() + + # then + # use Counter to ignore order + assert Counter(result) == Counter([UpgradeStatus.SUCCEEDED, UpgradeStatus.SUCCEEDED, + UpgradeStatus.UPGRADE_FAILED, UpgradeStatus.SUCCEEDED.NOT_STARTED]) + + +@pytest.mark.parametrize("statuses_list, expected_result", [ + ([UpgradeStatus.SUCCEEDED, UpgradeStatus.UPGRADE_FAILED, UpgradeStatus.NOT_STARTED], True), + ([UpgradeStatus.SUCCEEDED, UpgradeStatus.UPGRADE_FAILED, UpgradeStatus.NOT_STARTED, UpgradeStatus.UPGRADE_SUCCEEDED], True), + ([UpgradeStatus.SUCCEEDED, UpgradeStatus.UPGRADE_FAILED], False), +]) +def test_are_nodes_with_upgrade_statuses(setup_for_each_test, mocker, statuses_list, expected_result): + # when + mocker.patch('upgrade.upgrade_status_service.is_file_exist', return_value=False) + mocker.patch('upgrade.upgrade_status_service.update_file_safely') + upgrade_status_service = setup_for_each_test + upgrade_status_service.init_upgrade_status(["host1", "host2", "host3"], "4.12") + upgrade_status_service.update_upgrade_status("host1", UpgradeStatus.SUCCEEDED) + upgrade_status_service.update_upgrade_status("host2", UpgradeStatus.NOT_STARTED) + upgrade_status_service.update_upgrade_status("host3", UpgradeStatus.UPGRADE_FAILED) + + # given + result = upgrade_status_service.are_nodes_with_upgrade_statuses(statuses_list) + + # then + assert result == expected_result + + +@pytest.mark.parametrize("statuses_list, expected_overall_upgrade_status", [ + ([UpgradeStatus.NOT_STARTED, UpgradeStatus.NOT_STARTED, UpgradeStatus.NOT_STARTED], OverallUpgradeStatus.NOT_STARTED), + ([UpgradeStatus.SUCCEEDED, UpgradeStatus.SUCCEEDED, UpgradeStatus.SUCCEEDED], OverallUpgradeStatus.SUCCEEDED), + ([UpgradeStatus.SUCCEEDED, UpgradeStatus.SUCCEEDED_WITH_WARNINGS, UpgradeStatus.SUCCEEDED], OverallUpgradeStatus.SUCCEEDED_WITH_WARNINGS), + ([UpgradeStatus.NOT_STARTED, UpgradeStatus.SUCCEEDED, UpgradeStatus.SUCCEEDED], OverallUpgradeStatus.RUNNING), + ([UpgradeStatus.RUNNING_UPGRADE, UpgradeStatus.SUCCEEDED, UpgradeStatus.SUCCEEDED], OverallUpgradeStatus.RUNNING), + ([UpgradeStatus.SUCCEEDED, UpgradeStatus.UPGRADE_FAILED, UpgradeStatus.NOT_STARTED], OverallUpgradeStatus.RUNNING), + ([UpgradeStatus.SUCCEEDED, UpgradeStatus.UPGRADE_FAILED, UpgradeStatus.SUCCEEDED_WITH_WARNINGS], OverallUpgradeStatus.FAILED), +]) +def test_get_overall_upgrade_status(setup_for_each_test, mocker, statuses_list, expected_overall_upgrade_status): + # when + mocker.patch('upgrade.upgrade_status_service.is_file_exist', return_value=False) + mocker.patch('upgrade.upgrade_status_service.update_file_safely') + upgrade_status_service = setup_for_each_test + upgrade_status_service.init_upgrade_status(["host1", "host2", "host3"], "4.12") + upgrade_status_service.update_upgrade_status("host1", statuses_list[0]) + upgrade_status_service.update_upgrade_status("host2", statuses_list[1]) + upgrade_status_service.update_upgrade_status("host3", statuses_list[2]) + + # given + result = upgrade_status_service.get_overall_upgrade_status() + + # then + assert result == expected_overall_upgrade_status + + +def test_get_summary(setup_for_each_test, mocker): + # when + mocker.patch('upgrade.upgrade_status_service.is_file_exist', return_value=False) + mocker.patch('upgrade.upgrade_status_service.update_file_safely') + upgrade_status_service = setup_for_each_test + upgrade_status_service.init_upgrade_status(["host1", "host2"], "4.12") + upgrade_status_service.update_upgrade_status("host1", UpgradeStatus.TEST_CONNECTION_FAILED, "host1 error") + upgrade_status_service.update_upgrade_status("host2", UpgradeStatus.UPGRADE_FAILED, "host2 old error") + upgrade_status_service.update_upgrade_status("host2", UpgradeStatus.UPGRADE_SUCCEEDED) # empty message + + # given + summary_result = upgrade_status_service.get_summary() + + # then + assert "Overall upgrade status:" in summary_result + assert OverallUpgradeStatus.RUNNING.value in summary_result # expected overall status + assert "host1" in summary_result + assert UpgradeStatus.TEST_CONNECTION_FAILED.value in summary_result + assert "host1 error" in summary_result + assert "host2" in summary_result + assert UpgradeStatus.UPGRADE_SUCCEEDED.value in summary_result + assert UpgradeStatus.UPGRADE_FAILED.value not in summary_result + assert "host2 old error" not in summary_result + + +# def test_1(): +# service = UpgradeStatusService() +# service.init_upgrade_status(["1.2.3.7", "host2"], "4.13") +# service.update_upgrade_status("1.2.3.7", UpgradeStatus.PREFLIGHT_VALIDATIONS_SUCCEEDED, "abcd") +# service.update_upgrade_status("host2", UpgradeStatus.PREFLIGHT_VALIDATIONS_SUCCEEDED) +# service.flush() +# print(service.get_summary()) diff --git a/modules/aws/sonar-upgrader/python_upgrader/upgrade/main.py b/modules/aws/sonar-upgrader/python_upgrader/upgrade/main.py index 2fcb98d9d..c9112e50f 100644 --- a/modules/aws/sonar-upgrader/python_upgrader/upgrade/main.py +++ b/modules/aws/sonar-upgrader/python_upgrader/upgrade/main.py @@ -18,6 +18,10 @@ POSTFLIGHT_VALIDATIONS_SCRIPT_NAME = "run_postflight_validations.py" CLEAN_OLD_DEPLOYMENTS_SCRIPT_NAME = "clean_old_deployments.sh" +# Globals +_connection_timeout = None +_run_dummy_upgrade = False + # Helper functions @@ -38,8 +42,8 @@ def str_to_bool(arg): def set_socket_timeout(): print(f"Default socket timeout: {socket.getdefaulttimeout()}") - socket.setdefaulttimeout(CONNECTION_TIMEOUT) - print(f"Default socket timeout was set to {CONNECTION_TIMEOUT} seconds to ensure uniform behavior across " + socket.setdefaulttimeout(_connection_timeout) + print(f"Default socket timeout was set to {_connection_timeout} seconds to ensure uniform behavior across " f"different platforms") @@ -146,14 +150,14 @@ def run_remote_script_maybe_with_proxy(dsf_node, script_contents, script_run_com dsf_node.get("proxy").get('host'), dsf_node.get("proxy").get("ssh_user"), dsf_node.get("proxy").get("ssh_private_key_file_path"), - CONNECTION_TIMEOUT) + _connection_timeout) else: script_output = run_remote_script(dsf_node.get('host'), dsf_node.get("ssh_user"), dsf_node.get("ssh_private_key_file_path"), script_contents, script_run_command, - CONNECTION_TIMEOUT) + _connection_timeout) return script_output @@ -165,12 +169,12 @@ def test_connection_maybe_with_proxy(dsf_node): dsf_node.get("proxy").get('host'), dsf_node.get("proxy").get("ssh_user"), dsf_node.get("proxy").get("ssh_private_key_file_path"), - CONNECTION_TIMEOUT) + _connection_timeout) else: test_connection(dsf_node.get('host'), dsf_node.get("ssh_user"), dsf_node.get("ssh_private_key_file_path"), - CONNECTION_TIMEOUT) + _connection_timeout) def print_summary(upgrade_status_service, overall_upgrade_status=None): @@ -297,7 +301,7 @@ def parse_args(): return args -def fill_args_defaults(): +def fill_args_defaults(args): if args.connection_timeout is None: args.connection_timeout = 90 if args.test_connection is None: @@ -721,7 +725,7 @@ def upgrade_dsf_node(extended_node, target_version, upgrade_script_file_name, st def run_upgrade_script(dsf_node, target_version, tarball_location, upgrade_script_file_name): - if run_dummy_upgrade: + if _run_dummy_upgrade: print(f"Running dummy upgrade script") script_file_name = 'dummy_upgrade_script.sh' else: @@ -868,8 +872,8 @@ def are_postflight_validations_passed(postflight_validations_result): def verify_successful_run(overall_upgrade_status, args, upgrade_status_service): ''' - Verifies if the scrip run was successful from the applicative point of view. - For example, if if no exceptions were raised but the upgrade failed, the run is considered failed. + Verifies if the script run was successful from the applicative point of view. + For example, if no exceptions were raised but the upgrade failed, the run is considered failed. :param overall_upgrade_status: The overall upgrade status provided by the upgrade status service :param args: The program arguments which include the configuration options :param upgrade_status_service @@ -922,12 +926,14 @@ def verify_successful_run_by_configuration_options(args, upgrade_status_service) return is_successful_run -if __name__ == "__main__": - run_dummy_upgrade = False - args = parse_args() +def set_global_variables(connection_timeout): + global _connection_timeout + _connection_timeout = int(connection_timeout) - fill_args_defaults() - CONNECTION_TIMEOUT = int(args.connection_timeout) +if __name__ == "__main__": + args = parse_args() + fill_args_defaults(args) + set_global_variables(args.connection_timeout) main(args) diff --git a/modules/aws/sonar-upgrader/python_upgrader/upgrade/upgrade_status_service.py b/modules/aws/sonar-upgrader/python_upgrader/upgrade/upgrade_status_service.py index 7a2bee11e..c1ed751fa 100644 --- a/modules/aws/sonar-upgrader/python_upgrader/upgrade/upgrade_status_service.py +++ b/modules/aws/sonar-upgrader/python_upgrader/upgrade/upgrade_status_service.py @@ -369,17 +369,3 @@ class OverallUpgradeStatus(Enum): SUCCEEDED_WITH_WARNINGS = "Succeeded with warnings" FAILED = "Failed" UNKNOWN = "Unknown" - - -def test1(): - service = UpgradeStatusService() - service.init_upgrade_status(["1.2.3.7", "host2"], "4.13") - service.update_upgrade_status("1.2.3.7", UpgradeStatus.PREFLIGHT_VALIDATIONS_SUCCEEDED, "abcd") - service.update_upgrade_status("host2", UpgradeStatus.PREFLIGHT_VALIDATIONS_SUCCEEDED) - service.flush() - print(service.get_summary()) - - -if __name__ == "__main__": - print("UpgradeStatusService test") - test1() From 07b53ee44cf7320d65e289a8071b1404c9b6b3e4 Mon Sep 17 00:00:00 2001 From: "linda.nasredin" Date: Mon, 6 Nov 2023 14:32:02 +0200 Subject: [PATCH 02/15] Sonar upgrade - added supported target versions [skip actions] --- modules/aws/sonar-upgrader/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/aws/sonar-upgrader/README.md b/modules/aws/sonar-upgrader/README.md index 70cb3fb59..6a9cc2612 100644 --- a/modules/aws/sonar-upgrader/README.md +++ b/modules/aws/sonar-upgrader/README.md @@ -76,3 +76,12 @@ Among the DSF Hubs, if more than one is specified, the upgrade order is as appea The upgrade order within an HADR replica set is predefined and cannot be changed by the user - Minor first, DR second and Main last. If one is missing, it is skipped. + +## Target Version + +Supported Sonar target versions are: + +- 4.13.0.10.0 +- 4.12.0.10.0 +- 4.11.0.0.0 +- 4.10.0.1.0 From 8f1a34fe44dadd25ac89e82f06356f1b0a074ebc Mon Sep 17 00:00:00 2001 From: "linda.nasredin" Date: Mon, 6 Nov 2023 15:07:53 +0200 Subject: [PATCH 03/15] Added version history for 1.6.0 [skip actions] --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 65a2082f6..27f2ad136 100644 --- a/README.md +++ b/README.md @@ -424,6 +424,21 @@ The following table lists the released eDSF Kit versions, their release date and
2. Updated the Sonar upgrade Alpha release. + + 6 Nov 2023 + + 1.6.0 + + + 1. Sonar upgrade Beta release. +
2. Added automatic association between the DSF Hub and the DRA Admin and Analytics. As a result of this association, + the DRA sends its security issues to the DSF Hub, and the DSF Hub sends its security issues and audit from agent + and agentless sources to the DRA. +
3. Added the option to provide a URL to download the DSF Hub and Agentless Gateway tarball via the 'tarball_url' variable. +
4. Added the option to deploy the Agentless Gateway in a public subnet via the 'use_public_ip' variable. +
5. Added the option to provide a different IP for federation via the 'dsf_hub_federation_ip' and 'dsf_gw_federation_ip' variables. + + From dd5120c298920b51c32ef6594a9ff41ccb502f75 Mon Sep 17 00:00:00 2001 From: lindanasredin Date: Mon, 6 Nov 2023 13:28:06 +0000 Subject: [PATCH 04/15] Automatic commit before release [release=1.6.0] | [skip actions] --- README.md | 58 +++++++++--------- .../dsf_single_account_deployment/dam.tf | 6 +- .../dsf_single_account_deployment/dra.tf | 4 +- .../dsf_single_account_deployment_1_5_7.zip | Bin 15689 -> 0 bytes .../dsf_single_account_deployment_1_6_0.zip | Bin 0 -> 15413 bytes .../dsf_single_account_deployment/main.tf | 18 +++--- .../dsf_single_account_deployment/sonar.tf | 28 ++++----- .../sonar_multi_account_deployment/main.tf | 36 +++++------ ... sonar_multi_account_deployment_1_6_0.zip} | Bin 9624 -> 9288 bytes .../sonar_single_account_deployment/main.tf | 28 ++++----- ...sonar_single_account_deployment_1_6_0.zip} | Bin 8421 -> 8082 bytes .../aws/poc/dsf_deployment/agent_sources.tf | 2 +- .../poc/dsf_deployment/agentless_sources.tf | 6 +- examples/aws/poc/dsf_deployment/dam.tf | 6 +- examples/aws/poc/dsf_deployment/dra.tf | 4 +- .../dsf_deployment/dsf_deployment_1_5_7.zip | Bin 12770 -> 0 bytes .../dsf_deployment/dsf_deployment_1_6_0.zip | Bin 0 -> 12839 bytes examples/aws/poc/dsf_deployment/main.tf | 4 +- examples/aws/poc/dsf_deployment/sonar.tf | 28 ++++----- .../aws/poc/sonar_basic_deployment/main.tf | 28 ++++----- ...7.zip => sonar_basic_deployment_1_6_0.zip} | Bin 6036 -> 6060 bytes .../aws/poc/sonar_hadr_deployment/main.tf | 36 +++++------ .../sonar_hadr_deployment_1_5_7.zip | Bin 6772 -> 0 bytes .../sonar_hadr_deployment_1_6_0.zip | Bin 0 -> 6788 bytes examples/aws/sonar_upgrade/main.tf | 2 +- .../aws/sonar_upgrade/sonar_upgrade_1_5_7.zip | Bin 2880 -> 0 bytes .../aws/sonar_upgrade/sonar_upgrade_1_6_0.zip | Bin 0 -> 1924 bytes .../dsf_deployment/dsf_deployment_1_5_7.zip | Bin 7582 -> 0 bytes .../dsf_deployment/dsf_deployment_1_6_0.zip | Bin 0 -> 7823 bytes examples/azure/poc/dsf_deployment/main.tf | 2 +- examples/azure/poc/dsf_deployment/sonar.tf | 26 ++++---- modules/aws/agent-gw/README.md | 2 +- modules/aws/agentless-gw/README.md | 2 +- modules/aws/db-with-agent/README.md | 2 +- modules/aws/dra-admin/README.md | 2 +- modules/aws/dra-analytics/README.md | 2 +- modules/aws/hub/README.md | 2 +- modules/aws/mx/README.md | 2 +- modules/aws/rds-mssql-db/README.md | 2 +- modules/aws/sonar-upgrader/main.tf | 6 +- modules/azurerm/agentless-gw/README.md | 2 +- modules/azurerm/hub/README.md | 2 +- modules/azurerm/sonar-base-instance/main.tf | 6 +- modules/null/federation/variables.tf | 12 ++-- modules/sonar_python_upgrader_1_5_7.zip | Bin 18462 -> 0 bytes modules/sonar_python_upgrader_1_6_0.zip | Bin 0 -> 29317 bytes 46 files changed, 183 insertions(+), 183 deletions(-) delete mode 100644 examples/aws/installation/dsf_single_account_deployment/dsf_single_account_deployment_1_5_7.zip create mode 100644 examples/aws/installation/dsf_single_account_deployment/dsf_single_account_deployment_1_6_0.zip rename examples/aws/installation/sonar_multi_account_deployment/{sonar_multi_account_deployment_1_5_7.zip => sonar_multi_account_deployment_1_6_0.zip} (56%) rename examples/aws/installation/sonar_single_account_deployment/{sonar_single_account_deployment_1_5_7.zip => sonar_single_account_deployment_1_6_0.zip} (57%) delete mode 100644 examples/aws/poc/dsf_deployment/dsf_deployment_1_5_7.zip create mode 100644 examples/aws/poc/dsf_deployment/dsf_deployment_1_6_0.zip rename examples/aws/poc/sonar_basic_deployment/{sonar_basic_deployment_1_5_7.zip => sonar_basic_deployment_1_6_0.zip} (50%) delete mode 100644 examples/aws/poc/sonar_hadr_deployment/sonar_hadr_deployment_1_5_7.zip create mode 100644 examples/aws/poc/sonar_hadr_deployment/sonar_hadr_deployment_1_6_0.zip delete mode 100644 examples/aws/sonar_upgrade/sonar_upgrade_1_5_7.zip create mode 100644 examples/aws/sonar_upgrade/sonar_upgrade_1_6_0.zip delete mode 100644 examples/azure/poc/dsf_deployment/dsf_deployment_1_5_7.zip create mode 100644 examples/azure/poc/dsf_deployment/dsf_deployment_1_6_0.zip delete mode 100644 modules/sonar_python_upgrader_1_5_7.zip create mode 100644 modules/sonar_python_upgrader_1_6_0.zip diff --git a/README.md b/README.md index 27f2ad136..557b076c8 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ This guide references the following information and links, some of which are ava - eDSF Kit GitHub Repository + eDSF Kit GitHub Repository @@ -482,7 +482,7 @@ e.g., with or without DRA, the number of Agentless Gateways, with or without HAD We provide several of out-of-the-box Terraform recipes we call "examples" which are already configured to deploy common DSF environments. You can use the example as is, or customize it to accommodate your deployment requirements. -These examples can be found in the eDSF Kit GitHub Repository under the examples directory. +These examples can be found in the eDSF Kit GitHub Repository under the examples directory. Some examples are intended for Lab or POC and others for actual DSF deployments by Professional Services and customers. For more details about each example, click on the example name. @@ -499,73 +499,73 @@ For more details about each example, click on the example name. - Sonar Basic Deployment + Sonar Basic Deployment Lab/POC A DSF deployment with a DSF Hub, an Agentless Gateway, federation, networking and onboarding of a MySQL DB. - sonar_basic_deployment_1_5_7.zip + sonar_basic_deployment_1_6_0.zip - Sonar HADR Deployment + Sonar HADR Deployment Lab/POC A DSF deployment with a DSF Hub, an Agentless Gateway, DSF Hub and Agentless Gateway HADR, federation, networking and onboarding of a MySQL DB. - sonar_hadr_deployment_1_5_7.zip + sonar_hadr_deployment_1_6_0.zip - Sonar Single Account Deployment + Sonar Single Account Deployment PS/Customer A DSF deployment with a DSF Hub HADR, an Agentless Gateway and federation. The DSF nodes (Hubs and Agentless Gateway) are in the same AWS account and the same region. It is mandatory to provide as input to this example the subnets to deploy the DSF nodes on. - sonar_single_account_deployment_1_5_7.zip + sonar_single_account_deployment_1_6_0.zip - Sonar Multi Account Deployment + Sonar Multi Account Deployment PS/Customer A DSF deployment with a DSF Hub, an Agentless Gateway and federation. The DSF nodes (Hub and Agentless Gateway) are in different AWS accounts. It is mandatory to provide as input to this example the subnets to deploy the DSF nodes on. - sonar_multi_account_deployment_1_5_7.zip + sonar_multi_account_deployment_1_6_0.zip - DSF Deployment + DSF Deployment Lab/POC A full DSF deployment with DSF Hub and Agentless Gateways (formerly Sonar), DAM (MX and Agent Gateways), DRA (Admin and DRA Analytics), and Agent and Agentless audit sources. - dsf_deployment_1_5_7.zip + dsf_deployment_1_6_0.zip - DSF Single Account Deployment + DSF Single Account Deployment PS/Customer A full DSF deployment with DSF Hub and Agentless Gateways (formerly Sonar), DAM (MX and Agent Gateways) and DRA (Admin and DRA Analytics). - dsf_single_account_deployment_1_5_7.zip + dsf_single_account_deployment_1_6_0.zip - Sonar Upgrade (Alpha) + Sonar Upgrade (Alpha) All Upgrade of DSF Hub and Agentless Gateway (formerly Sonar). - sonar_upgrade_1_5_7.zip + sonar_upgrade_1_6_0.zip @@ -641,7 +641,7 @@ This mode makes use of the Terraform Command Line Interface (CLI) to deploy and **NOTE:** Update the values for the required parameters to complete the installation: example_name, aws_access_key_id, aws_secret_access_key and region -1. Download the zip file of the example you've chosen (See the [Choosing the Example/Recipe that Fits Your Use Case](#choosing-the-examplerecipe-that-fits-your-use-case) section) from the eDSF Kit GitHub Repository, e.g., if you choose the "sonar_basic_deployment" example, you should download sonar_basic_deployment.zip. +1. Download the zip file of the example you've chosen (See the [Choosing the Example/Recipe that Fits Your Use Case](#choosing-the-examplerecipe-that-fits-your-use-case) section) from the eDSF Kit GitHub Repository, e.g., if you choose the "sonar_basic_deployment" example, you should download sonar_basic_deployment.zip. 2. Unzip the zip file in CLI or using your operating system's UI. For example, in CLI: @@ -725,7 +725,7 @@ This mode can be used if a Linux/Unix machine is not available, or eDSF Kit cann 6. In the Network settings panel - make your configurations while keeping in mind that the installer machine should have access to the DSF environment that you want to deploy, and that your computer should have access to the installer machine. -8. In the “Advanced details” panel, copy and paste the contents of this [bash script](https://github.com/imperva/dsfkit/blob/1.5.7/installer_machine/installer_machine_user_data.sh) into the [User data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) textbox.
![User data](https://user-images.githubusercontent.com/87799317/203826003-661c829f-d704-43c4-adb7-854b8008577c.png) +8. In the “Advanced details” panel, copy and paste the contents of this [bash script](https://github.com/imperva/dsfkit/blob/1.6.0/installer_machine/installer_machine_user_data.sh) into the [User data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) textbox.
![User data](https://user-images.githubusercontent.com/87799317/203826003-661c829f-d704-43c4-adb7-854b8008577c.png) 9. Click on **Launch Instance**. At this stage, the installer machine is initializing and downloading the necessary dependencies. @@ -744,30 +744,30 @@ This mode can be used if a Linux/Unix machine is not available, or eDSF Kit cann For example: `chmode 400 a_key_pair.pem` -11. Download the zip file of the example you've chosen (See the [Choosing the Example/Recipe that Fits Your Use Case](#choosing-the-examplerecipe-that-fits-your-use-case) section) from the eDSF Kit GitHub Repository, e.g., if you choose the "sonar_basic_deployment" example, you should download sonar_basic_deployment.zip. +11. Download the zip file of the example you've chosen (See the [Choosing the Example/Recipe that Fits Your Use Case](#choosing-the-examplerecipe-that-fits-your-use-case) section) from the eDSF Kit GitHub Repository, e.g., if you choose the "sonar_basic_deployment" example, you should download sonar_basic_deployment.zip. Run: ```bash - wget https://github.com/imperva/dsfkit/raw/1.5.7/examples/aws/poc/sonar_basic_deployment/sonar_basic_deployment_1_5_7.zip + wget https://github.com/imperva/dsfkit/raw/1.6.0/examples/aws/poc/sonar_basic_deployment/sonar_basic_deployment_1_6_0.zip or - wget https://github.com/imperva/dsfkit/raw/1.5.7/examples/aws/poc/sonar_hadr_deployment/sonar_hadr_deployment_1_5_7.zip + wget https://github.com/imperva/dsfkit/raw/1.6.0/examples/aws/poc/sonar_hadr_deployment/sonar_hadr_deployment_1_6_0.zip or - wget https://github.com/imperva/dsfkit/raw/1.5.7/examples/aws/installation/sonar_single_account_deployment/sonar_single_account_deployment_1_5_7.zip + wget https://github.com/imperva/dsfkit/raw/1.6.0/examples/aws/installation/sonar_single_account_deployment/sonar_single_account_deployment_1_6_0.zip or - wget https://github.com/imperva/dsfkit/raw/1.5.7/examples/aws/installation/sonar_multi_account_deployment/sonar_multi_account_deployment_1_5_7.zip + wget https://github.com/imperva/dsfkit/raw/1.6.0/examples/aws/installation/sonar_multi_account_deployment/sonar_multi_account_deployment_1_6_0.zip or - wget https://github.com/imperva/dsfkit/raw/1.5.7/examples/aws/poc/dsf_deployment/dsf_deployment_1_5_7.zip + wget https://github.com/imperva/dsfkit/raw/1.6.0/examples/aws/poc/dsf_deployment/dsf_deployment_1_6_0.zip or - wget https://github.com/imperva/dsfkit/raw/1.5.7/examples/aws/installation/dsf_single_account_deployment/dsf_single_account_deployment_1_5_7.zip + wget https://github.com/imperva/dsfkit/raw/1.6.0/examples/aws/installation/dsf_single_account_deployment/dsf_single_account_deployment_1_6_0.zip ``` 12. Continue by following the [CLI Deployment Mode](#cli-deployment-mode) beginning at step 2. @@ -1044,7 +1044,7 @@ After you have [chosen the upgrade mode](#choosing-the-upgrade-mode), follow the This mode offers a straightforward deployment option that relies on running a Terraform script on the user's computer which must be a Linux/Unix machine, e.g, Mac. This mode makes use of the Terraform Command Line Interface (CLI) to deploy and manage environments. -1. Download the zip file of the Sonar upgrade example: sonar_upgrade_1_5_7.zip. +1. Download the zip file of the Sonar upgrade example: sonar_upgrade_1_6_0.zip. 2. Unzip the zip file in CLI or using your operating system's UI. For example, in CLI: @@ -1110,7 +1110,7 @@ This mode can be used if a Linux/Unix machine is not available, or eDSF Kit cann 5. In the Network settings panel - make your configurations while keeping in mind that the installer machine should have access to the DSF environment that you want to deploy, and that your computer should have access to the installer machine. -6. In the “Advanced details” panel, copy and paste the contents of this [bash script](https://github.com/imperva/dsfkit/blob/1.5.7/installer_machine/upgrade_installer_machine_user_data.sh) into the [User data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) textbox. +6. In the “Advanced details” panel, copy and paste the contents of this [bash script](https://github.com/imperva/dsfkit/blob/1.6.0/installer_machine/upgrade_installer_machine_user_data.sh) into the [User data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) textbox. 9. Click on **Launch Instance**. At this stage, the installer machine is initializing and downloading the necessary dependencies. @@ -1139,13 +1139,13 @@ This mode can be used if a Linux/Unix machine is not available, or eDSF Kit cann If you do not wish to use Terraform to run the upgrade, it is possible to bypass it and run the Python utility directly. -Use the Python Upgrader utility. +Use the Python Upgrader utility. # More Information Information about additional topics can be found in specific examples' READMEs, when relevant. -For example: Sonar Single Account Deployment +For example: Sonar Single Account Deployment These topics include: - Storing Terraform state in S3 bucket diff --git a/examples/aws/installation/dsf_single_account_deployment/dam.tf b/examples/aws/installation/dsf_single_account_deployment/dam.tf index d45c68d0b..7558af77c 100644 --- a/examples/aws/installation/dsf_single_account_deployment/dam.tf +++ b/examples/aws/installation/dsf_single_account_deployment/dam.tf @@ -8,7 +8,7 @@ locals { module "mx" { source = "imperva/dsf-mx/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.enable_dam ? 1 : 0 friendly_name = join("-", [local.deployment_name_salted, "mx"]) @@ -38,7 +38,7 @@ module "mx" { module "agent_gw" { source = "imperva/dsf-agent-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = local.agent_gw_count friendly_name = join("-", [local.deployment_name_salted, "agent", "gw", count.index]) @@ -68,7 +68,7 @@ module "agent_gw" { module "agent_gw_cluster_setup" { source = "imperva/dsf-agent-gw-cluster-setup/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = local.create_agent_gw_cluster cluster_name = var.cluster_name != null ? var.cluster_name : join("-", [local.deployment_name_salted, "agent", "gw", "cluster"]) diff --git a/examples/aws/installation/dsf_single_account_deployment/dra.tf b/examples/aws/installation/dsf_single_account_deployment/dra.tf index 02abad9ca..7b1b8798e 100644 --- a/examples/aws/installation/dsf_single_account_deployment/dra.tf +++ b/examples/aws/installation/dsf_single_account_deployment/dra.tf @@ -6,7 +6,7 @@ locals { module "dra_admin" { source = "imperva/dsf-dra-admin/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.enable_dra ? 1 : 0 friendly_name = join("-", [local.deployment_name_salted, "dra", "admin"]) @@ -28,7 +28,7 @@ module "dra_admin" { module "dra_analytics" { source = "imperva/dsf-dra-analytics/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = local.dra_analytics_count friendly_name = join("-", [local.deployment_name_salted, "dra", "analytics", count.index]) diff --git a/examples/aws/installation/dsf_single_account_deployment/dsf_single_account_deployment_1_5_7.zip b/examples/aws/installation/dsf_single_account_deployment/dsf_single_account_deployment_1_5_7.zip deleted file mode 100644 index 12968a83e94e4528a1b164c570375e43cee76711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15689 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 literal 0 HcmV?d00001 diff --git a/examples/aws/installation/dsf_single_account_deployment/main.tf b/examples/aws/installation/dsf_single_account_deployment/main.tf index 92c2aabae..3e5a91973 100644 --- a/examples/aws/installation/dsf_single_account_deployment/main.tf +++ b/examples/aws/installation/dsf_single_account_deployment/main.tf @@ -1,6 +1,6 @@ module "globals" { source = "imperva/dsf-globals/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = var.sonar_version dra_version = var.dra_version @@ -39,7 +39,7 @@ locals { module "key_pair_hub_main" { count = var.hub_main_key_pair == null ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-hub-main" private_key_filename = "ssh_keys/dsf_ssh_key-hub-main-${terraform.workspace}" tags = local.tags @@ -51,7 +51,7 @@ module "key_pair_hub_main" { module "key_pair_hub_dr" { count = var.hub_dr_key_pair == null ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-hub-dr" private_key_filename = "ssh_keys/dsf_ssh_key-hub-dr-${terraform.workspace}" tags = local.tags @@ -63,7 +63,7 @@ module "key_pair_hub_dr" { module "key_pair_agentless_gw_main" { count = var.agentless_gw_main_key_pair == null ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-gw-main" private_key_filename = "ssh_keys/dsf_ssh_key-agentless-gw-main-${terraform.workspace}" tags = local.tags @@ -75,7 +75,7 @@ module "key_pair_agentless_gw_main" { module "key_pair_agentless_gw_dr" { count = var.agentless_gw_dr_key_pair == null ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-gw-dr" private_key_filename = "ssh_keys/dsf_ssh_key-agentless-gw-dr-${terraform.workspace}" tags = local.tags @@ -87,7 +87,7 @@ module "key_pair_agentless_gw_dr" { module "key_pair_mx" { count = var.mx_key_pair == null ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-mx" private_key_filename = "ssh_keys/dsf_ssh_key-mx-${terraform.workspace}" tags = local.tags @@ -99,7 +99,7 @@ module "key_pair_mx" { module "key_pair_agent_gw" { count = var.agent_gw_key_pair == null ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-agent-gw" private_key_filename = "ssh_keys/dsf_ssh_key-agent-gw-${terraform.workspace}" tags = local.tags @@ -111,7 +111,7 @@ module "key_pair_agent_gw" { module "key_pair_dra_admin" { count = var.dra_admin_key_pair == null ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-dra-admin" private_key_filename = "ssh_keys/dsf_ssh_key-dra-admin-${terraform.workspace}" tags = local.tags @@ -123,7 +123,7 @@ module "key_pair_dra_admin" { module "key_pair_dra_analytics" { count = var.dra_analytics_key_pair == null ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-dra-analytics" private_key_filename = "ssh_keys/dsf_ssh_key-dra-analytics-${terraform.workspace}" tags = local.tags diff --git a/examples/aws/installation/dsf_single_account_deployment/sonar.tf b/examples/aws/installation/dsf_single_account_deployment/sonar.tf index 55bbd4e4a..4ff16a5ff 100644 --- a/examples/aws/installation/dsf_single_account_deployment/sonar.tf +++ b/examples/aws/installation/dsf_single_account_deployment/sonar.tf @@ -12,7 +12,7 @@ locals { module "hub_main" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.enable_sonar ? 1 : 0 friendly_name = join("-", [local.deployment_name_salted, "hub", "main"]) @@ -50,7 +50,7 @@ module "hub_main" { username = mx.web_console_user password = local.password }] : [] - dra_details = var.enable_dra? { + dra_details = var.enable_dra ? { name = module.dra_admin[0].display_name address = module.dra_admin[0].public_ip username = module.dra_admin[0].ssh_user @@ -67,7 +67,7 @@ module "hub_main" { module "hub_dr" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.enable_sonar && var.hub_hadr ? 1 : 0 friendly_name = join("-", [local.deployment_name_salted, "hub", "DR"]) @@ -112,7 +112,7 @@ module "hub_dr" { module "hub_hadr" { source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = length(module.hub_dr) > 0 ? 1 : 0 sonar_version = module.globals.tarball_location.version @@ -137,7 +137,7 @@ module "hub_hadr" { module "agentless_gw_main" { source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = local.agentless_gw_count friendly_name = join("-", [local.deployment_name_salted, "agentless", "gw", count.index, "main"]) @@ -177,7 +177,7 @@ module "agentless_gw_main" { module "agentless_gw_dr" { source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.agentless_gw_hadr ? local.agentless_gw_count : 0 friendly_name = join("-", [local.deployment_name_salted, "agentless", "gw", count.index, "DR"]) @@ -220,7 +220,7 @@ module "agentless_gw_dr" { module "agentless_gw_hadr" { source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = length(module.agentless_gw_dr) sonar_version = module.globals.tarball_location.version @@ -266,20 +266,20 @@ locals { module "federation" { source = "imperva/dsf-federation/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag for_each = local.hub_gw_combinations hub_info = { - hub_ip_address = each.value[0].ip + hub_ip_address = each.value[0].ip hub_federation_ip_address = each.value[0].ip - hub_private_ssh_key_path = each.value[0].private_key_file_path - hub_ssh_user = each.value[0].instance.ssh_user + hub_private_ssh_key_path = each.value[0].private_key_file_path + hub_ssh_user = each.value[0].instance.ssh_user } gw_info = { - gw_ip_address = each.value[1].instance.private_ip + gw_ip_address = each.value[1].instance.private_ip gw_federation_ip_address = each.value[1].instance.private_ip - gw_private_ssh_key_path = each.value[1].private_key_file_path - gw_ssh_user = each.value[1].instance.ssh_user + gw_private_ssh_key_path = each.value[1].private_key_file_path + gw_ssh_user = each.value[1].instance.ssh_user } hub_proxy_info = var.proxy_address != null ? { proxy_address = var.proxy_address diff --git a/examples/aws/installation/sonar_multi_account_deployment/main.tf b/examples/aws/installation/sonar_multi_account_deployment/main.tf index b5a6a7920..1d22ecb82 100644 --- a/examples/aws/installation/sonar_multi_account_deployment/main.tf +++ b/examples/aws/installation/sonar_multi_account_deployment/main.tf @@ -1,6 +1,6 @@ module "globals" { source = "imperva/dsf-globals/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = var.sonar_version } @@ -25,7 +25,7 @@ locals { module "key_pair_hub_main" { count = local.should_create_hub_main_key_pair ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-hub-main" private_key_filename = "ssh_keys/dsf_ssh_key-hub-main-${terraform.workspace}" tags = local.tags @@ -37,7 +37,7 @@ module "key_pair_hub_main" { module "key_pair_hub_dr" { count = local.should_create_hub_dr_key_pair ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-hub-dr" private_key_filename = "ssh_keys/dsf_ssh_key-hub-dr-${terraform.workspace}" tags = local.tags @@ -49,7 +49,7 @@ module "key_pair_hub_dr" { module "key_pair_gw_main" { count = local.should_create_gw_main_key_pair ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-gw" private_key_filename = "ssh_keys/dsf_ssh_key-gw-main-${terraform.workspace}" tags = local.tags @@ -61,7 +61,7 @@ module "key_pair_gw_main" { module "key_pair_gw_dr" { count = local.should_create_gw_dr_key_pair ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-gw-dr" private_key_filename = "ssh_keys/dsf_ssh_key-gw-dr-${terraform.workspace}" tags = local.tags @@ -106,7 +106,7 @@ locals { ############################## module "hub_main" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "hub", "main"]) subnet_id = var.subnet_hub_main security_group_ids = var.security_group_ids_hub_main @@ -144,7 +144,7 @@ module "hub_main" { module "hub_dr" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "hub", "DR"]) subnet_id = var.subnet_hub_dr security_group_ids = var.security_group_ids_hub_dr @@ -186,7 +186,7 @@ module "hub_dr" { module "agentless_gw_main" { count = var.gw_count source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "gw", count.index, "main"]) subnet_id = var.subnet_gw_main security_group_ids = var.security_group_ids_gw_main @@ -225,7 +225,7 @@ module "agentless_gw_main" { module "agentless_gw_dr" { count = var.gw_count source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "gw", count.index, "DR"]) subnet_id = var.subnet_gw_dr security_group_ids = var.security_group_ids_gw_dr @@ -266,7 +266,7 @@ module "agentless_gw_dr" { module "hub_hadr" { source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = module.globals.tarball_location.version dsf_main_ip = module.hub_main.private_ip dsf_main_private_ip = module.hub_main.private_ip @@ -290,7 +290,7 @@ module "hub_hadr" { module "agentless_gw_hadr" { count = var.gw_count source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = module.globals.tarball_location.version dsf_main_ip = module.agentless_gw_main[count.index].private_ip dsf_main_private_ip = module.agentless_gw_main[count.index].private_ip @@ -324,18 +324,18 @@ locals { module "federation" { count = length(local.hub_gws_combinations) source = "imperva/dsf-federation/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag gw_info = { - gw_ip_address = local.hub_gws_combinations[count.index][1].instance.private_ip + gw_ip_address = local.hub_gws_combinations[count.index][1].instance.private_ip gw_federation_ip_address = local.hub_gws_combinations[count.index][1].instance.private_ip - gw_private_ssh_key_path = local.hub_gws_combinations[count.index][1].private_key_file_path - gw_ssh_user = local.hub_gws_combinations[count.index][1].instance.ssh_user + gw_private_ssh_key_path = local.hub_gws_combinations[count.index][1].private_key_file_path + gw_ssh_user = local.hub_gws_combinations[count.index][1].instance.ssh_user } hub_info = { - hub_ip_address = local.hub_gws_combinations[count.index][0].instance.private_ip + hub_ip_address = local.hub_gws_combinations[count.index][0].instance.private_ip hub_federation_ip_address = local.hub_gws_combinations[count.index][0].instance.private_ip - hub_private_ssh_key_path = local.hub_gws_combinations[count.index][0].private_key_file_path - hub_ssh_user = local.hub_gws_combinations[count.index][0].instance.ssh_user + hub_private_ssh_key_path = local.hub_gws_combinations[count.index][0].private_key_file_path + hub_ssh_user = local.hub_gws_combinations[count.index][0].instance.ssh_user } hub_proxy_info = var.proxy_address != null ? { proxy_address = var.proxy_address diff --git a/examples/aws/installation/sonar_multi_account_deployment/sonar_multi_account_deployment_1_5_7.zip b/examples/aws/installation/sonar_multi_account_deployment/sonar_multi_account_deployment_1_6_0.zip similarity index 56% rename from examples/aws/installation/sonar_multi_account_deployment/sonar_multi_account_deployment_1_5_7.zip rename to examples/aws/installation/sonar_multi_account_deployment/sonar_multi_account_deployment_1_6_0.zip index 6c7a4763b55557fe319aabf3d9a4f8a31f51675b..05f772d9554588f1583e115006295ba1c2c63f8f 100644 GIT binary patch delta 2952 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 diff --git a/examples/aws/installation/sonar_single_account_deployment/main.tf b/examples/aws/installation/sonar_single_account_deployment/main.tf index 10442803c..979f9e176 100644 --- a/examples/aws/installation/sonar_single_account_deployment/main.tf +++ b/examples/aws/installation/sonar_single_account_deployment/main.tf @@ -5,7 +5,7 @@ provider "aws" { module "globals" { source = "imperva/dsf-globals/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = var.sonar_version } @@ -35,7 +35,7 @@ locals { module "key_pair_hub" { count = local.should_create_hub_key_pair ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-hub" private_key_filename = "ssh_keys/dsf_ssh_key-hub-${terraform.workspace}" tags = local.tags @@ -44,7 +44,7 @@ module "key_pair_hub" { module "key_pair_gw" { count = local.should_create_gw_key_pair ? 1 : 0 source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-gw" private_key_filename = "ssh_keys/dsf_ssh_key-gw-${terraform.workspace}" tags = local.tags @@ -74,7 +74,7 @@ data "aws_subnet" "subnet_gw" { ############################## module "hub_main" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "hub", "main"]) subnet_id = var.subnet_hub_main security_group_ids = var.security_group_ids_hub @@ -105,7 +105,7 @@ module "hub_main" { module "hub_dr" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "hub", "DR"]) subnet_id = var.subnet_hub_dr security_group_ids = var.security_group_ids_hub @@ -140,7 +140,7 @@ module "hub_dr" { module "agentless_gw" { count = var.gw_count source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "gw", count.index]) subnet_id = var.subnet_gw security_group_ids = var.security_group_ids_gw @@ -174,7 +174,7 @@ module "agentless_gw" { module "hub_hadr" { source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = module.globals.tarball_location.version dsf_main_ip = module.hub_main.private_ip dsf_main_private_ip = module.hub_main.private_ip @@ -201,19 +201,19 @@ locals { module "federation" { count = length(local.hub_gw_combinations) source = "imperva/dsf-federation/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag hub_info = { - hub_ip_address = local.hub_gw_combinations[count.index][0].private_ip + hub_ip_address = local.hub_gw_combinations[count.index][0].private_ip hub_federation_ip_address = local.hub_gw_combinations[count.index][0].private_ip - hub_private_ssh_key_path = local.hub_private_key_file_path - hub_ssh_user = local.hub_gw_combinations[count.index][0].ssh_user + hub_private_ssh_key_path = local.hub_private_key_file_path + hub_ssh_user = local.hub_gw_combinations[count.index][0].ssh_user } gw_info = { - gw_ip_address = local.hub_gw_combinations[count.index][1].private_ip + gw_ip_address = local.hub_gw_combinations[count.index][1].private_ip gw_federation_ip_address = local.hub_gw_combinations[count.index][1].private_ip - gw_private_ssh_key_path = local.gw_private_key_file_path - gw_ssh_user = local.hub_gw_combinations[count.index][1].ssh_user + gw_private_ssh_key_path = local.gw_private_key_file_path + gw_ssh_user = local.hub_gw_combinations[count.index][1].ssh_user } gw_proxy_info = var.use_hub_as_proxy ? { proxy_address = module.hub_main.private_ip diff --git a/examples/aws/installation/sonar_single_account_deployment/sonar_single_account_deployment_1_5_7.zip b/examples/aws/installation/sonar_single_account_deployment/sonar_single_account_deployment_1_6_0.zip similarity index 57% rename from examples/aws/installation/sonar_single_account_deployment/sonar_single_account_deployment_1_5_7.zip rename to examples/aws/installation/sonar_single_account_deployment/sonar_single_account_deployment_1_6_0.zip index cf1d6b6d522a40811f206800db2793e016d69932..39f7efda56397b2fff3bd355456a00d9ac784238 100644 GIT binary patch delta 2402 zcmZXWc|6oxAIHaFGGpxfSR4B`mdP6Cu|j zSt4=m5sGY$7A5x*J;w9A?yc^5y}sw4^ZtC#Ie&fMZ%uDtxEyU+*53qbI(1M&9$=ij&FbL@2+7mDu%hRWlW*_c2{P#xZFY07qw?c)UToGfvoo7Gza1 zQ&F+5P5O_zb?q4uLXMWZE|OTZJx#r^BqZ=+$PT$Vp0mJ(;;MOpwI(!YHgf?`3}k_| zw;-z*as0&zIkD2hV|P$U(^&eLtS>yrrohm-dT80;jeFg^Sf#_4${O!E{2&(*-Xvd> zLdw>v81XoSH{Ym~ppaGPJB_J)^du*fImH zQdmxeHf;L$UULoOB1&so-pZ~OT@4ADca@W81Mc!}4lC@cX+8;t&rbFwmsmf`{tC`r zFbvWMFM14ok#yqI7pMxVIw=ValPgqm;UVa$EpgoLGZ?l{u4hw2$V0om3RBGZZ1pJh zZB>h^@d#uS(ctwZx36hEu=}w>)1A1&xvkgpx2C_Za?ghLiYK?Wlp5VWFN%7LE$T;w z0wWU_F!8Q7EJ}4^(xp!y+3AsETDpeglxS-C)!tzoEBTW{icuHW=L-5#3?l4p)e(?< zM!VMH?W2?g8~-EHh-xtXJAOTUBmUa}Ou^gjT84FujJGq+dG%AZmsCQqsWysM5JjC` z3`A;q^{DIb48>1g3y2LLHk2iw^F-|e1DEi1dAg1K!7scR^vctulw(?)K$naoJCuFY zQBXVCm;Y7KE0K}L-A@mRW)>W|YswV`x0~60U8nBB6(f%r`WqRe>>F?z-?QS(vu%fS zq-JR$si-QOwb6r&t+~T}3gxRV`LkVO0UJ~{$0d;uuSij16w=-1aQL<9>fjW>@XVOL zL!MDIcyxi%n_yoo`?8-=SJYivo~JQWr1tr(kG+S+5oe#efSO66@}zn-O0-s+ti#rO z`{$}~iz|F@EwE(@J{Hx~71NF}JBsZcd|rFw^x);ipxhlLR>baZ3@Vqw?r(WxQYbGn z)g`;d$s{4;WvzEvNz-!?2P_7NJIv9c7Rpw?P^v_OWh}@ru=&VkhJM6f*+&b{iqG|| zJZ^dwq){1}w^J#2T(~@Sc$K`NT%Ha_^dX6LCaz@(1vh=;k1o1LAN!#}M{@Ex3j7{LY-b~%m*ZWXfy_^3ij8WgpBt9qdDw0jRf+??i6 zc(ts{^J{98E@eJT1wpoa)g%3}KdCdFYlfhz(VS39~+|0QoM6++R;_Uy*JsWwLv1938^g1`UG=;q~@L^Dd7cn}1{F$#! zMXNr|qDbUh*sh1c?>L}eU{G8f29ByHdc=<6t_QV;k2;oD%^a`aG2JKNP5g)iqm@VeJc(%!KVK4o^7 zcdj@UwP4wSQ?Ld`TH4dJmXru8k{Ib6v;pO^A!;bT+YgD+&`?;I#2OuKheb+2Xjb0m zZFV4TkE*+^(38Etz41*SZqxiMN-)25s&~Lh>lx>XpwhPW9@zeW8w=LK@QYdFC`xP=l8&{;dWrbq&8AA+6KA>~q>fGIis%VX**umyW&$g>o zncq)3W34P(p^90N-%vIqL+@IVT)Ie08CkH$SwZv&buwYn+wX&RtiNgMZeT znetY~g<_@FYTs)6B_TD~QV*1y4#|1^U5=R9C&b3slAuV_t(8ApP-V!^SF<5z+6u> zGHvFP%b5H%k?r+qY)SkxtHg6VCuWS7?dZGjOHRsK9}}A%S!*3G$qe_uQL#GGw9)cJ zIVW{0)Axwsr|s>Un0IX4Z$4m)#}^||ik{ZNDl?hAo?Z%5^(B2vz~fk2mr0Q;>vlxj z3hzgdHvB>Yd!#BilN4f-KZwIWpbXOi8oi4jU)USz{d=Va65ZQDAeOxZqPe6Pm0P()V=jwP?oti86uC~K7AcWS(&!>a zF1bWSE?p$ozLrcvp_1>m$M5m&^7wrokMq~(^?JX~IscqzuK9Z$c)uNx4+P+R7`sC` zV7;vvZ>)}svk(B7pMmvbSI&N@IQ!SZR@+-+r`fVbcIi^RA*vLP(ud$1DsYo6Xt1zVl)~6&Pm4h2#z?ts z#EsQvvPwtr;VFJ4zxV;OfHcX7W~OaaQll7;nU8%kI-j9ju%}wAp=P4%ShClMhp@rJ z%Y`GxmFwol=X!mTGeLvB<*zhU#fWtxvz81aBc+?;r&juh%KFNhIWtPJ+t|XLk*ue{ z={$-MMk4qG`-T72`<M)iasxXU9GNFjfv|GhbuyM5@i!B)oX!P+;{ zwZb;9HSZy|Dv#MEyo<9JNz4x{%xKtaw?IqTNS^Y<569(}#_hW@6v1E1}1fY_m6XW}RjxHsR+ zBVT!(X1c-BmW;bWO+;JVBAOz1`cg+R-?xHWlP1w}JxdR|1Jx(?E*!~7h-Zu(`IgDt zA|P2CRO|V8yJ41$BXh?UiE^@1h+kus70jvCbZD=EX1n_u)_(bpUUuJtgIgE z!NYFPD;`jFUWGqMW$bQ!-`<63*d!aCY*f3g{Bx;t`N(%dL*DViWA`5%p!o9ts&O(fPa99^u27 zF7A5&^q++wHpHmKRbn$@Md3n?m(;B)6nUs~G{@Aeu_aj|F!#WL*a@C zgGz$Banj__5NN=VeL&FJ7D_llR*Pw`tva3-5d9&@6RI-Y2mdO|SE*cb6`E!ta2#K9 zxqc(j_@#NXv!`v!#B17AuJsR$Y}FfWKSR=v7s%y%8IzJnw}tY{Zz z-FN9Km30=aXQI_Z&_FTMvB-<-VFv0MGAhVB?)omFVO}_oe00w0B4Vnhac~(5Jm6zx zls{N`N8v!QpKntB z`^l|##QEKfUB^8oO0yy#0X8h*v1BD3DP&tI1H+fVnZbM!>xrnU=#P_u{gJVaFCE@7 zcQtw=t2JXK%Lm6VIUQ0l($A0WAVq3knLdMdA5?yZEpn}rNhLv-LE1{7xX1YOLhVvz zH3^3bb%&uI;%wGg_v`=eO zbsB_a?#(*|o;RcwD0(?OcCC*b{j}lcRyvtkRFPJSKrwq>ZOK?&&kG{4qz#HQ|=dePF#MUS03ZEuLC7FBzzr;>J@Qc3r+DBe0zc}`m@ zwy#*7vS*0Vnu(r8_#IU=SGuypC@a-n8=cVQ4>#BG#&_2h#^feq=0s$JVF~NVFDTEk zPMFeDV)>+`QY!64N?{iQ754hVe23)qrue)0do;6dcGHbRC$B8aS=OXg zM6KCfw%W*`8}3$F5O{F;rK(e2N(lDVr-69^N(nkXZKBw;E=D~iuD|(pV?2bQv&kqe zIG=VJ;!yu_?QmY;wU_rh&mJPZs&AR>+~STcc(OV!$GX1)Wa-_;w=cMuZCj&TSY{(m zh2UWOHfHjF^GAncZjk(F?3tqAC)s7=kfmEXGiA>MftzKcB_v&35&cnzX{%Q058xkHo$4>8C(k|WeqrIH z(2&2+HML$U7tF&81OCT4)E5dk5st&fnV$MLlVb?03>(8`zY?F>ndM zOi>=VhX+6=6%VOMEFk_h(+ZrbnA z@#_I@nkGyhC@IF3LO5x^amOzuH|iI1003HlMByM@za+>1ABFsKb8|}AId>JfIvMU% Zzi;+`+F&JFQ9*zpK!;6wR~0#<{0j|cW5oaf diff --git a/examples/aws/poc/dsf_deployment/agent_sources.tf b/examples/aws/poc/dsf_deployment/agent_sources.tf index 9cacdcb8d..eee49398e 100644 --- a/examples/aws/poc/dsf_deployment/agent_sources.tf +++ b/examples/aws/poc/dsf_deployment/agent_sources.tf @@ -4,7 +4,7 @@ locals { module "db_with_agent" { source = "imperva/dsf-db-with-agent/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = length(local.db_types_for_agent) friendly_name = join("-", [local.deployment_name_salted, "db", "with", "agent", count.index]) diff --git a/examples/aws/poc/dsf_deployment/agentless_sources.tf b/examples/aws/poc/dsf_deployment/agentless_sources.tf index b85c03936..dbd938437 100644 --- a/examples/aws/poc/dsf_deployment/agentless_sources.tf +++ b/examples/aws/poc/dsf_deployment/agentless_sources.tf @@ -4,7 +4,7 @@ locals { module "rds_mysql" { source = "imperva/dsf-poc-db-onboarder/aws//modules/rds-mysql-db" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = contains(local.db_types_for_agentless, "RDS MySQL") ? 1 : 0 rds_subnet_ids = local.db_subnet_ids @@ -14,7 +14,7 @@ module "rds_mysql" { module "rds_mssql" { source = "imperva/dsf-poc-db-onboarder/aws//modules/rds-mssql-db" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = contains(local.db_types_for_agentless, "RDS MsSQL") ? 1 : 0 rds_subnet_ids = local.db_subnet_ids @@ -29,7 +29,7 @@ module "rds_mssql" { module "db_onboarding" { source = "imperva/dsf-poc-db-onboarder/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag for_each = { for idx, val in concat(module.rds_mysql, module.rds_mssql) : idx => val } sonar_version = module.globals.tarball_location.version diff --git a/examples/aws/poc/dsf_deployment/dam.tf b/examples/aws/poc/dsf_deployment/dam.tf index 5de0cd4a1..2603371cc 100644 --- a/examples/aws/poc/dsf_deployment/dam.tf +++ b/examples/aws/poc/dsf_deployment/dam.tf @@ -8,7 +8,7 @@ locals { module "mx" { source = "imperva/dsf-mx/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.enable_dam ? 1 : 0 friendly_name = join("-", [local.deployment_name_salted, "mx"]) @@ -41,7 +41,7 @@ module "mx" { module "agent_gw" { source = "imperva/dsf-agent-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = local.agent_gw_count friendly_name = join("-", [local.deployment_name_salted, "agent", "gw", count.index]) @@ -67,7 +67,7 @@ module "agent_gw" { module "agent_gw_cluster_setup" { source = "imperva/dsf-agent-gw-cluster-setup/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = local.create_agent_gw_cluster cluster_name = join("-", [local.deployment_name_salted, "agent", "gw", "cluster"]) diff --git a/examples/aws/poc/dsf_deployment/dra.tf b/examples/aws/poc/dsf_deployment/dra.tf index ebde4afe6..a70923b1c 100644 --- a/examples/aws/poc/dsf_deployment/dra.tf +++ b/examples/aws/poc/dsf_deployment/dra.tf @@ -6,7 +6,7 @@ locals { module "dra_admin" { source = "imperva/dsf-dra-admin/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.enable_dra ? 1 : 0 friendly_name = join("-", [local.deployment_name_salted, "dra", "admin"]) @@ -28,7 +28,7 @@ module "dra_admin" { module "dra_analytics" { source = "imperva/dsf-dra-analytics/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = local.dra_analytics_count friendly_name = join("-", [local.deployment_name_salted, "dra", "analytics", count.index]) diff --git a/examples/aws/poc/dsf_deployment/dsf_deployment_1_5_7.zip b/examples/aws/poc/dsf_deployment/dsf_deployment_1_5_7.zip deleted file mode 100644 index 0965cff9d532d539dd8b9fc3fe4adffef1266182..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12770 zcma)?1yEdzwx$~mn&1w>-QC??gS)#oPH=a3f(Lh(;O_1Ox8Ux>eecc8$(@@yr@MCV z-PP6WtG#Pkt@X=Gfq}yS{`F#!Qd9k}i~spR1>gXT98GkMjP0y!-K>pmoOBs+E1?>`3cm@?VI=ck}-`{teNmB4dlpfY83Lsy0%P7$-v&5EG+8i?a#f z`I5M+Eyr4@<8iS_fq3-Q)P(J6j<^#<;FC4y)!uPC=D?$(Itm|};DKPj7Z^DkuegeD zI2uA>{tuI=kcLqg*QH8Q!M7A@zAaD4B1rAk?!hkFY}X&WUhdbwlsIbIP|{UL^Kqm@F0(J|Ej*# zgyA3M+W(`I>6I(%;_KxqG7ph*28&s~vS zE6Rguz~k2=f^0(iqLj85@rwvXo9zz|8bU;g^KGb1H?qVwiuy7VAVOBiqfz(qA({_R z9!uYwa1FV_q1`?i_VlZn*$W|kl!e;td(1HVCf3j@@B<~c7zfbaKNGV=wKm{=k|HN6 z2j*Y2_UQag!5Mbj_5-SlfF>c!B*DrBoEb+mUD1&ZuA7U)G`9e+{mo?1@XXL5^5puQ zkcu4LortRG>HPCw7`JNId?!tVGSQI|@8*U(XB=?A=nLm!4; zbbES0xwsUh=kJPRA!h)J1z2{Ly8e`9?cuJK4X-#nF)= zqZBLvkVpdn5d0}Ffcg&R`UdZT@i*}>r{Q6{B8v33k!>)HLwSg=@QG|3%o&7DmbSmI zoNjpcV~AsSn3hDD1nme3303irr?FqO*||nb_WoZ!5{71EX5KxU6qAJWu- zcHjV-v^cBLNwT0eG0Kpk)W8iOg+W3Ado4#}cLaNi`PDrIfyZ&qy$%^Xb}>}q=+t=yM=oImv$q18LJy1fmP)rX84L)9 zDWMqoouBf@{rr&~lk6HNdxBuInT7~Zpv91qIxV_{LT2cDU*>WJHPqaOKrz^hrG)|I zX?Qe)%D=ib^6}9LZ?u2rNE`NOK@%9P@*(9&aj{=l?A!@DKke`t^5cTZNw!fkO(_i- zCdkB?)zGSrn)13JdGYL&N_R`+t(0*31Yh&U5*pdZ-xLYnV>ifcCD^7t6QW5)69>** zSh~i``UcWwj4DuPOF_T!`&TY%2x4atn{#ie~{vnxywi zLx~h;QNZl0M6i<~J{64&ab&zT%9E%Xj?6Q7G?i~;c7|f>F@IkZ+N(sKD7I}gPa_5C zW=^?u6$;qgd*!2&glUjj(2p~kR_JBDXWjczfCpJ0_QSz$7g0Pa-CTipHjqI=$o@qa3U+?Vi_vnLWawrNJ@Qm*uyCcA={5t5R%Nj zKKb4Ihk9|!nnZDkL^D!#DNC%{c~vfr8^`Kh$*F!A&mLl1Pba#7P*jR_ol9(jMXs{> zRtNx=(p|~`Q>3wU`Y7>u4OehHdCUjDkyoGMR( z-l2n|M%wqjEks#lW;!ixh^G&)F0Vw(s`a_JmwDUSf=k(!AFSXWg&I{BMPms&CyumG z192V~sxCdnO#g|8DcNl#i44Kk1WJpue#LIGLug#VoX5_zJYCMF?;MG3bNEX5%TPw(5mM(#?6eb*rTP8MGU=( z+@!~8j7;;-QW5Og0PK%8h;kmUtcTYxq5DZBT#yVes0^m*6#(k#L*gR;%hDZbnZ16Q z1k@UsmSO~3veK&Z7>ET;VauNl)tiv1M?V85SPxi-E=6@o%i|J9NiA#UJiTje>%YOc z0ZT|fct>)7Z%doZE%|0CzyPLC)3BMHA=c?nuC7#?duY5n1QCmlkO>J3gH7ohl&!7Q zsh?9Kkh3X5X=YZ5h2KQ2uk;Io5j!e|eZ!|UVMc1tqk{H;vn~u;f-2J2Jh_3JwQ2Ki z1JSZZMZsY4Gc&9|DW!V-I_B*YrebU5~_Q0DC2WF8|npt>|HbW5-6gX{k z6R1>Iv1X*!kPtGEG*Adtm5>LDV1PcST}FBJz8*jMEpu}z@2?A-a|PE`Pp=SsGQonA z=p$ErRXBp7xZcoO@;37LmdID;OJCHu7c^!1G~sdQ_($xu2h zZ`e+WN-us>w?X}`fFM|>L7FkIJe%V78%0W9m_o~eh1gC*57&@2SN6qHGd+Ea0nhQu zmHD^jhFA5Bp)9JINfOzBZfp%%4v zX-tB+w35o$Kj|-eyy7gcW`P|t%X2zAWUG{ionSH0+Hy8MZ3e6UXyct+XEGvBN`j&Y zJLnWlCuqm<{?QpIge{v90Dxt13J8xMt#`Y@dL7X*%8iA$9m`_+6d0*i<8#Z=nyV-L z(k{HMSRBHlt zBaWiQ%YN*7;mA{{Ki`Z0BrkuxRbmdJH&<4o;xf%bfk=ixm6waH_w%@hb9I;mUTpi( z12)PMw4v8%!ID{D_+whZGK1Bk9JDT*9q40$sO&6+Y*52FizfHl*GN*y(fLaJ+-RLreIsk6?E?=Ir2x4Ks+7B89YfkV`n zLY@3Y0cvd)g`vVarLMw7KK+?MEivhl* zFCA3#GDVqCuqnTi$!jK4F1HrZc^&y5*o>FFRLfc1fHf7ryjsr5aU>c_I(HT`JLi*@9CWhVminQzdW1Vpotgf;pZ zqOliGV|_6V|0dO%Fgx zaJl)UK^4VhbhEPTftnhuqo(scsKpw28qaV|xv5{sx(7--C(b%}vW3Nteep-%qLUH7 zT1f%MKeigH#+GbsZruAi!Rl z1AwJdH6bFLy7J?t542Lj+Sj2RvGUB>Et=%@E4pIhNs2O@ zC$n~!a;oRxxcCEjyW3H7+vl7QPjcBjxIB&M5|aTq*b)A_SMx862$?Q8!3o@!2?KBf&7SO# zi5)2e$4nMxh9BvOmM+89YgPem}cp_ z?P0!dGRX~v^x@1fU(P}|Mv6MOn0id(o=UJS$J;bH;!!EENgFo9mJq4GG%6pt&9ia& zP{X|_Ve1{dGW18O5Fh88=5FT#@E2G6TIY zpD&PGXTzA0)3Cj3h9fA|idJ5KP3~%wn#a~?`uxnWb6z>B1`9=jOnUJVjx9W^EDQPU zI?Nx;5fouJ2lT7x7b8spg${#YGA+*Xqyd)RVv1gZH~-+VkoE~}mAkwBLi7bX5JFPgh7I4{H=^YXYng4ktRvk9@-iS)oxn1}sHqEH_);dZL>BXM`OH;|+hK zZC3Q^EDTrczFRBEC+WZ}5XfSXmg-6kuBg-e?gNX9(u1ij-O~6jh$5x%J4N0!hs>fK zMeR8D<;2SiNk7{Vr0tQ-Esmk8#OvzYkHm~4A>U|#V1@@oVtj4Vt3F7DVBu=cfhHx- z9PDdcm84lRjVBzDkC~k~tNW`Qk&aP+ndwK@BA$=#Ua|Fc`S`G`EhaLDT%IG6H(u?LXyOQr zR1U8p3s~J)*L@uQ*swi2U-YHHw?LRjZ~`0)6Vi<}0DeD{vH@lrq1*He))xo#@QW7; z+K?-KdHi{?3a>zzjoSk+7kb}7!aHk)taJTpt&8tQv4*l>F+dB(_Uo9jGOJ77f^TlB zuZh#L=bUQd=V(oH3iLu0NE7m5PMBen5wLLB+zc$oED%2S5E^qIf+k@#1U`2(VZ(J7 zU46m%QCN9}(xzd#Uyh{b*bD6sSy>p2f7o{}tQ%dMI4{eMXJx5)XBc~a6yBvqCZ_BV zpqx)xi^X9}jpWqP7gF1=Qn_v&xCKo?&ZagZNFx0dyW1x*7}*KefODRjPE?_%npUMA z5qbrY#F*SB6RN^lCdLU}9E>z39wV_q82!31ih4TZK`FcuE%ZGf%M|^^wWHX%6O~LU2fg_IC~=M-&d|FHbI`VmZcv}8vd|Y>izwI z?`s96`iIoeYw!63l|u{0cr7E)Q>#3Qedv2iEt5+2F8LGAhQBHo02 zio}i(SADpnBHBk@Bne;_=%q)B#JXP}A0=8mvV9GY`5>|PEx0nJjp}7jM8o1%l#hlq zS|TS%SD-03)oDhPWSVGn3ZzbeJlq(fW6TS4p?Imw`f+Vm`PR0<%LnB<-Jt&6$;NgL z^rlf=f;;Qtjlo<=n5mz9KYMO$;tHUy;dNO>)+nmMW~U%?H8c{XOyCj9_LupnpY9}8 z;nl^-Vi(T~&AMf=xbR3l!7%j=x5qc*f+}(6;=RJ&k2)T9TG%@1&k#4a2nwG{iAEXd z<(?6Xs`vHybPp?@QM*z_KonuiOiKE&em6h21^LJTBU5rV8RFWo`* z=1XOD$xzTHJQ%#;F&TX9ElWW&hFF;ox&zCAB@v%1Y8J1nm~!JdJ-{uA24`biAwYSY z(p}jz(Ip0WplX(r(8BCn5cG_&ibA){b9zdp2q593^5{LUM-6 zIn}qP+(b1>*96qEy382t`Ora5U=oqqFO)^)+}F_7sul6)9knv`C5H`OeD|tZJS?5* zpyXru%;bw{^|ysK9Q$*41JJMNSJTZ;UOJpGTspk0G>3#HxqEMeGCyLx^G%{~lPKwU z_y|m{SuF==-ALA;6$JGIzL~n2!4OQ}wStz~E6)!`AoB#7wbC))?ecAI&Q?7KPo| z%jfsD<(a6-!C%d*hF1hkfw3)@>V=?5%~yOJ$>Fb-xQ* z!p>`Ac?{|j;JA0^P5;1L7YrUKwd~O28r^Xlt4lxS!7gTx1D4fyZu?CL5Z!%J=hjz~ zTS|{E*;KHDc6QI*c+!os%Q|~#ZtYEL_h5IDkL($cUf3;Tp}Aj|vn%?|lAE>0Bw3AF z6VOFt6o{=w-cM$0VJ$M~f6^&=mzJ{?BK5C;t%-3wQR`Xx^{6*-RJI(T9Fgu!> z1QhTSWpm!Zl(Fu*LX^$^M^T!@b%&r%hSvFFxN%S_iVwP2v_nCIL0?nwDn-g~=jL;! zvG?D6u&)zXcmBV}ePn=(w-U{YScku}am}8_2zlBw$I=jQi zxb-yhKYUN3N9{t)fgF`MahfMvO$8+Ja#|@|OVdV;zG3OA!Oxn3ZZ3Cxw`pH8HXsZ0 zwMqw%__;8jV+TI)OwN+jJX$r>@rwwlYgs9i&%=ESK!PVs+FX-XQQ*)4o-CzQa{ye0 zn5-u1b;3|u4jUb_o@he14{>}+ygKU}EANO)_M>xb*HGE`Qu@3T@9ri3fS{#w76BjL z=f4UMx$nZlT0P<0B~ljGqidVqJdX6x(OSuHDy``H3049oWoB`1i9lp`@wrZUY@XxB zL#rcw7>PNta*XPyATiNP?cU;knHQVzSAzXJ8>upjeE4y)JebFl+QYY7Njbrpfl_a> zo1U$1C8^-(=uFGAyT{3^@Xl+Wf3IXJhPZ~l@2eTi-in>xwiaJW=$awTahB}!j`YD6sx zC}548oYqIV-4HP7Gs4z&fAlO7{E$RH9L}|Vu*>l%iGap*pR0(_*T?!%gkNb1&QDK0L2uz%_UB63;yPlgYAa;;wAttL z7*9Fx-l=5qSnuU|KhP)yj;yD;G|G<&wv{hql9PfboQa%|JYqj0XW1^OvqZ02@IWPv zfq@ePJs1wV{L(@n!!->GWYnk}?^P|2dJ$n1xslhzP&Gw!q0F&C11gG#(wCMczzMB3_K%z@K5v4-*`k3{Um zL{J^J;;(|wXCB0YmjPSwyHE@o>LXn`b@{RGdrOM@^rX#t{(-i4mqJF4>rf|WJF0M7 zZLmg?573CX$^9sC2Rk-+EeDP@Mw1Es_1^3Q0X2SuQR*fPy?=UPPFBHB#fdX?3H1VI z6lt>zQK9T|Ef39{vql!@Bt#}h6NpE8LTzz2(0zu;wb4{ek=}4(YDhdrhJ~TK!<9xc zjju&S2&|Wzd|b+ZtS6(_IkBhtgvpD$|2! z)6>dFB3@6HOu4M{NU{7(9`=yGa5@obndDnXC9jw-25uQhT54E|=c84%Pa3t3war_! zE_yXAEZh7j_eiUN_-a*1GxW7?wxgmn;)c5JEVgG)S*X%k63IEsCZ&2&=cHx95m!f& zebCLV5Mtq)B*UlwOA@3uJv=OjTM9hT0mIK=#aT@~%JCk%qGA3Np9QC!$y+b~h)dH2Cngr z)^MlPh1zrU-}}?`48?3gNB}^D1OUMOQ&cCU%x%p=jz1Y@!#fQ;%V3F2|MU`LJ~g1qSv3Yn}* zsLe7xszQiJ;)zhVJ)?=sDz5XH3}UW=!OvOM9=Y;5uHsi8w5tRQLovVUdIv(oBvqy; zqL|x#Pwm7!7~h23h-csBBI%Bl)EDMLp~qYa$(I+jY~h$BUn3D=Nflp|gf5v0*qsB% zTlR49fKY5`MI8fDkq}WbO>^r=Ad|$&RA(x;5Lk{H)ih}bMTSs3h}!r9Gxr#%NW17B z_l}eGL}jm5u`OqRP}O&qc#Uyec)eP65cDKnfUvlE7sq`JRu$QHCvn!-q?O!`5a~1W z%|Wj5FLZB|6!vux>Zt~0;~fn##o0TFNtl|qk9(P7opLw=7s*@8U>{ygAgezL`SrcA zjZ;TEk(Ef`WT`VhP1ePYcoNGuf+_ZF34Y<&62Apx3Pk>wNCm^J?-uPd%`*=^A95cI z$nu^b^dP%<5j;ZDCMQCii!)B8BLz}LmRYxfK+8nNbLOxSl9qosdcj50pzXADuVmxIYK;4mw)sO}`*eCf! zUM?)q?i1#qKwr#!J_s&P6$(z1#ke5NA{PvkS3<5#6xZ$dcZ9fvf{Rl?9kzR#jw5fuFD?{>6H2u1az8v0VLbd5@8GSJ; zus){vzA5F}V03pX?95qUKX`()j-;!LmIc0{?Q@hh1Q+s&-$!)LzT|gPY}8~|4i6F zgD$io;DOcB^{e>$$`VzMYZvIsg|4d$Q+ANFGG+ZPZxKm85ysU0p(wO+Nkecetc0QDEZd9BPbn?uRxsbp`=hLn?&TpQ3Mp z2S=6yM-_R#D)CTtN$ao;IpcI?2lh+u)^Wo@ptk)iA^J>n#d^1PyoDxhTcBq^dQE%^X82CM*jS$n?sYum?kgLq@r8|a}s$|q~CKo)^T(c zI=wI>{Cgmt;w0Aw``p_(I^~GC6QI$fO_{}YUVdSnR+c;7HEm@a9qAu0sJ>-wZjJew zChN8E75Qap^S?>4j43IIMxh0zqshf$m)n?Tq&mTT)AW)}z)iKPGWDSj+twx=;s53_ z)QNn!t+b7OC7S-x5XIU`zO30Y+Zk|%w2)-r8NvqRHqdw==g#Z>snb!h%|a>2=X|U+ znL)bkd-);eIh++ve@i%a3_8BC+zZ=5#dDJzV+harLsEN`(g1przwXRy21U~hqSvpM z^E`4-pImw_b=39dp(Bu^>sA*vB8ii0Ie+bi0zXLX>MZE~zWemrt3J;GZ)-Tll}VaB z9n#}#A>(bkJ&wXu_^5{V5{t7gwhz)*YCG5r3>g!y$dbgtGNV}($DM1b(6`FI?U}8w z*Kk$?KBGS{=eK`>`tI?zQ$_9Tgw7~hmWa3wl>-IkBs2UbW*nFlK8cxwhH6!eIvO|G z$>`#(Og!V9HaF39;TSLvyhf5Dz^AFHb_ostG@o^LGmzJz&Mptw6!x)xNSb*R-LUdC zTpc9%X0D+DhXM*KpmvFSFq=_<-8$DeoS0Yy<~Q0REhGBjY^v5fR-B#ae&!N+J?leu z)}3C>Hp^>=CZ7MU&ouoIA7i-seArEi;YRS&0#CivtcD%8SI6Hb0-Lw4%FwfFmZU2o_a8`(xVHy-wRVq2Cfm+yS$0_UEcKPcGE%sZ^}}i zilyZWJ<7|eE&(?r4Y6#i0;GS{X9K^O@^s-yYD{eob&RL8R&Q}c_r7j)6r+G{X6XV@Kw?KF3r}BjrE9?GYjkGjf zur#jp5hygblfJU!5_ip?BxLQhGfq5^+P{spN~N|1(YHY`jU+66p#I1SAu zo5yHF@ix?a)3?Rpn*csN9T5CiaOWN=@Uuy+Gfc#+sg1BmGhG&oN8RvhzLW*+!pRp# z==z3zn20kdoWNUrbZxo-$tU1<8H*xpGSxVlY!>Y9zA@qJs>;co1da%|B5MK0AyK_t zL0_grP?n>7DG4>&F4%(Dl$TV0+~OW+xlLCZ1iASkH5>Mj^N^Gi8@Pq#EdEPmlzbWg zB-W{6SVQfJjR&%yg>&+;A5Ziw%@K{N&vrmrMasoZc6ekM%D68_|~E9|5Lm z;SN_+7!BzBGoLdn$l)aJk0^z1(PoYyET-u%$C2Hp34@piTJnFShaPq(=&g$Lsh*<3 zdsOU~UI{3AOW7ZZ`xSB>Gam1@qX{6pH(e}BT>~Cn^WOe#aF-q5w)x@R|Ki{MkMK{8 zk&UsFi>-sDxsB=HxM8NsNK`sK%Gy4a7IXNQGw0u^KJDk*AA><0l-9VDx2_b=#L=LH)$c*~~x0)Ev#nK&M$y%*rZ{cHY z@A(9*#v)NQAbv$VWuL~wFhy_!0uRZ7CEcNQ35&((L&?g=)x@4H_R7?$^siGikAP4%|uJE2-?k2~9lF`!Sa z26GW2>Q@xS#C$ zsf3|F4fkW==!Vc+dfReiU+Rh%Hm<$2$1`YQaexWDM^NQ6hQjsQnF3mEJ$3Q+DUc`( z`m<-Ry<@p~R&^1?}DaFWH|viGeM# zPL_Oe4|aqhbB@U+7AstGf!+Z3aSN<_G{T?kohR^cM|QUj9qrNGp zGLV{hyrBRE#+t7eJV(t?tlSDS5~Y&j=?quGp0)L`2P*>kc(i#mqTDi(PIa&cevry`k9$FuVs1E+oXsAXCQWiW>^Thso?#ZVgNWX_B-&7j!; z@YsAS{&pER4C1({YwF?#k#^R+{vshXy9DP{&iXQ^+MT2*9a1~%r}l}xBqjw#?kJ4> zsVW`I3uiS|sGhfhwrVjoBPhBesol7z{Yuuek5u^U*wS0R2jf7@jW z?x=#78{5vwYU3#CW0(;F9#^xWcrL|DxUmpNF?*ZPd1LaHie%vgqT5;~Eo3xDR7K*Y zMwkJ0Hh_9wE?sUq*h?PhMU7M8OY@PLhlch8wWrE;+}Y_Zf<~a-$H!j6S_9w{o>vaj zbH{`EotoCy5u{0D_J z#D6QK|4q95-=_bhkN$7d?+yvb_m%sT>Hn;je#iX>rS!k!ewUs86=(V$0{`(&eixzs zGtBRM^S@%?Km7so*Dd-#gZ#d<`YYrH`45o4tg!wWJU;g9s`aiSge@6Iy zVEI?V53D~B{`dIup8_$PrzierfZyAk zzXB@A{s8#5rstn=ey??Z+zcuJjD2Vql82|wH{%(2S Mh#MfB<0ZWU6m$VsCBdVPj(Jtk0^? zsn5c!rV0mu*gg7S@~_>+9RUCac?1CfKz{o5L8V{jFn%3j|HE8%h2}vxGyrf%1ppBK z$()m&Ey$6{+4O%id!{XGx5J6rb)Zpm>Xs;hclWw;n=z z+2j-Jq=~EBrDzwPz3mAfNZaZVil#^klC!vS6oWP6(P3jWr}2;+GZR5($Y{p))sA(q z#(3q^LZ>9IOT2$VDO)~{f+?LX6to*UyylW0qY^rX=# zw{5yI65B|v`i(m}^vA8Yy=-;eY>j&Vrj$NB~DF0-f2d{SJxGuSU ztZxlL9j#_AJl19+%%@LsN}Ik}Ewj&ItzZd^b#k zx$M90(Af%=&xc9~7!WbWQz4`w+W$KF1LBHJnE^Z3hAPo7BG7RK928e2K>Mh)cS)5% zwtp;cgatSA$}qec{+YUmG00tuJ0?<!i*DaHBIJ2h=?cykcZ!8I?% z<3!9J+spX^=1VnD=^+K)fp8j zv?6kRb2FcILaGv7TvSh4Gh7XDMOxQY3B;DIH=_L+8*(u#LYD2LNZ>e0^2Pp$qx`KU6 zoe15`Bx`X9&2kGJ7PI{VMsh{VucH%#EVeGAE*%GUq`m>jHaIJ zIB2k1adcRT>V#dobo3;<`NljJpzr*czQ{yl9!l(zd^n#SRZ{G*tT^Jf7q>h8;i7>; zQhk_6c)JN|ySg8bls>h{`N4C-&E3@i{*ruYR`7j6{HE4n3x>uUpp>dB9{hvf*ah$S zCPPsZLgH*pu~TKSF~Ae1HX0#h;32gB(y(i*gLCeE#vEgv-eAVAn3~b2J)Wwx+bYib zGD|(uC8F9f@;IA;e*3QPV#Z`V1cu0RT9b5{S>NR_mxfwb6`8wTk%za-K?0LisOEYS z=8-#T8ruz1>6XeJ#JP8(iV=cPDa8Yzd~M_e9Qf9nvFiqxqqZ*hZPsh2miqx4xP2eRS;__=-~QRCBD1 z$N4B#^iCGPR?p>B1MbCD(I#vKHkvCP)EXtPYj1f-5QaBMV~>oO4Rh47bqHH7j&!F z)vOc4)f5u-=>qrdYhYEG|1CLIRdVVr^Y8KP_}J*ZECK+K#0UV8{wcn>f*dVChSnxd ze-q>8wY}_CCDGnCa}2)`&>fK|qfk#kxPWmfFbxh=GJo4c4s+^__$XZ=%`{3$NniT) zdHj?qC*OG4Ay6HeEIczS>;A>GlrmC)^Oi>wE<+ZfivZB_k+&9`G8=Xarve>T6Veb` z94s8L-*!BHPr45*sO>8ZK8bhf@9BuPP}ZTU#h&1cIQU%XYk2O{%G1Kbt-0^j&VMz) z`yKQiPOG~SN6j^T9-4X-fsBY*Ych$=O66`glNHq{H5{j)8>L_(AQ0Ut*}i$IF9acn zZG;p9P6{o#+pO)xGGm8?+hWlN{3gZiM7#7CGA!8`is0ExEB6Ei|6r!fF=d7vS-3ah!0IJ! zQT(iT7fbqmsZD1~7ka{p)mWq(Alw9|57~gx7PO7Z9jPv%>* z5~YUG=mM)(OXX%(cR0QQd&#=kel_}Jsa=OfIu%$id+L?DSkTt~s}Q{me3SelDBgHR zxu5fabN_205p-k3S4aE3cORlN9QV{-=E%q!j(t^m*QIja@dr3D-vqD&2&obuQi}zP z{PQ*o&lKd{tinays0mqtR1DWgeY^@#3WIosVJZ9@QzgD%wMtXhrAx!4ThVIEIpQ=g zYVsL9c-HRA&Os3Z`|mpXy0JyXqEl@e+~N`~^HnXj!vF|$p0b9x63yi^$H9l*s;TGD z7Kc1?4wead9ZFOT{m4@sdbU;C>lN?@^2a48V<`a)pei#7yMbcWZ-v5M4UOQx!V__f z+R&xxoZ;|iLX!?DKK)}(tSiX*PBOLkI&^H z#T0dHrpkYvoyeY`yCTg$HGFPa9Lp%Kb*%_%v51n_1L4r37OHGI9rA|I$hao^N%083 z>lI6(FGv^}AwgYgVda_PM)tTo6}5P}I=#u7u1tp8WkzH`JMg_L!dPNwJ1=iaV2P}) ztj5Z&_q%+Mf7{(gOx;l$uHqkq9aELW;)uAQh_ciKbD0pUEkDQ2_)df?(`zh)4#m|1 z&P1?r&273%W>Upoz%?eg7_#{MSZP{pvMbkNo}bu;@PcnT&CPG=_lcNE4_r$Zzg(}t z&@Q}`JMIVrU3P;UeQsZD&HD!Dc2-~N$x6&Jmc>+Y%IiEVX^R^OXy zx1iIGzXwfn9&(OcN$OKo#wU$YS=G&Z`_|hv=E8fpmQlg@M)8+)q)+9SP(pb_Bl>HI@-bXB@Rd1WGbTM~5U=GAy4Ees%)Q>gd& z(Xrf{e(i~~vin|DOozM;5pdGg1)6P8bXHrMH`gTGHk$Ha-RqwM(og1iRLTtNe5Cf(ISL+2` zTvu%>WI3hfAIlL9`*@Ze(i<~2HpgW%Y!s)$neluPx}~dqgv~sLK|Mhs2+qTd<33+( zOFM6Ybb|0jRzr(%-9}#SVe9VPOXcPUAj=`|iR#sbx0RHX^AwPqvy+E~TNlBGvHn{~ zR6?dM+ShtU+o&-AT6bhKOdLmDzGpKQ3^UlJk9&-!A$%W`E4WcWOJ1)8D{I*hN9; zLdm^V_7^PKL*xdC1S1b%4+ui)ksMZ$6#`B&<9Om}+k70xZx)Ze#Rdy}gwMVdY_vZoo+Ag&b(nN8c$B+0J%Wy_MV};A+1CdYZg)6MqONwy% zTn4VSST#$1_7mwX{GjZw5PVF*Ind^iKiHUweRjFV(mSl#dEk)@2a~-UxJLacTkIp; z3g&ZlT&}mKb3tZSL{WHX@9nxakYv7+JLUtZkX9T z;AtRN?5%@hcrQ25A5@)5X=Zcbwn)k6pvme$nUZl~w8-PS=u5-aCEMIl)(_GKArIgg z{&*``EhJ_|dH&kL(d=VwbW;x;2xOk0gU2L~N&GKbp7JL)*~tT4!Ldqj3KjykhFQ65 ze)1uBRZBh+mZ4L}1GOe?O~_qGI45n&#abR+Wgrz7l84oRDcI%}IYV`Ic*iXl`>;!O zN{rr-I*QY$==z5$yJs$XL<&WvP6G+YxiKm4K3PtxGwWZvF!HC%ygi^IuF3@=_D_R~ z!{L2&Bed#7t5v~xzi;*~)mZfoxjuQ-B& z{62h{0lTaUwfqFn!D3qBUdd#i)0nEsXIZ*PfvoyHy6L{dlTsMSPLJc(4&pqRXT=-= zLV;#%>8T(B{Lg{)tDK{VO}Hl9o^?=g##`6L&hz_oHyW;M7d-?A$F37E;c<>=wW&}9 zk=m~iUu2@WKuwu&B?CYc*TT{?J+=D7KD^6i1N#SYe22HzP|T8hhGnq?Vk9-YmyJXGs2aPsnLPCCd$6s_}G6xkfY8zx~QW8w>5S}{bQ zc56N|L^-h0i8y0rsb{yem{@&5%y=R{`|7WB;g8+vb2{VsABymQ4REbh23ui}QS)=dlDwic_S8G}zL zeSn|9eqSU;iqmj0kiSZm1ONc>pB9Ooi?h9p^WP0u-E#}*xBJAGMC%b7KDoNkGg+h3u6UW-QlcgXIX#?) zyeBY~3!Y~7QVBevadkR=-!tu9R*!2T!ZDzefBK2X75%8L2qSj?CLGEW z^4WggHK1xxiYgTxE&__ptTfx3(Y5>zSMmz7^{arToL_jm;{6?plXm$20O=mw!T^}_ zaczl^zL@qGyfN7ANr)muf|%q0noU1+zpH??=j6z@mFav5DAj1I}AggWHb{LqRZA~jutP0L<*xYzlr z*B+i(uEN!#t8Gw$&ZH#9h|*|9997DV(RJjMYDhL`eQ{ISb&EJM^OnAzQ^BX!HRUZw zM%eG`p{sXHqI5^U;r%SjtVjuCaXe(oiJ@FkQ=EtJhqVLBHV--BU!12`3VsOY_IWk< zLK%=|8q8|E2+$^irgd;+z^@}2hQMZV^qG3ZdUx$MwS$G~<~TKug?4uuWJmcVHgYh^ ze7p8)!}dVka_&Ytxy@A?^@{nia}(&gqFu=bdwI!xv)|&C@RngdaD8>gaIV#^o7BY@ z`mQ=!MPw`4Ef0w*iucnMkI)RQ`kI|BNjp2h5U zCX-I+C+yC=wSzTIXeXGb=AfARcNb&3I3klDq6Hi+0xD8qSsdKg#9rCif@M0hJ|%tZ zSoJ$y-#3@5a$9BO7uRiB_IbS78#>#6^;x3KdU{;Zm6Di8ugsJ9GEwW5Wa{J^r5agB z9kjN&q5m|7+_W>dP^{kMUnnjhItht~3+=%fgmjQa*95uUMF^Cot@!um?TFxNxlHEBlS zf>-my1y;+vGK&~3+N4s1Gj7DxX9PriepZeX4k$kdDD8QekSPRh5#p{Ee8k@3YjuLJ zMb+0B9okk0m1qV|{cwTM)kUEsM*|n)`Z4uM3kv*1)>goKqqvLX$R15J6LVZ8%yQF3nLmCh`WOOiTtC1ZiBFAo`P^14@X9%S$lX82@iQnNE$(Up*N_-+TR@JZ899 z?v{-^Gy@coS-l^5y3-h;V46i!gr z1B7D|y2n10i4d3A<;Oq@{ZCI%(rsQj{zfN4(D(1?2Gf^L}@Fa_zvp=8@tez!^+)W@W9>_6MIJ%v*;et z-Hi{;p?t}>X(;~0-kV#5BADw$J=RfmKuv_4RCKW z1ATtI-+(_D-043<730fK$@p=WSX|hFA+y5EmmL~4V7sPM5Ch#Y_#UpD6FwH#Ohu$Y z0tOior1V+dx8!UMeb=kvVp)B!RVSC+-~CbBG>hee!Lbw5R0y)LHSF#{u8aE3pWgb4 zwXj2cICRr%D)huxftGRnU3CHYE&?l_bV9zQd4fJL_10--h+hT^(bld?gzhA@x4Lh( zMIkZgAhPQ{)l-=VUt+QZqoY9IEnpx_1$YDVb^)^tsRZ zNt$%-iI^1)S+V#F;lsSH$>f@+7)z@8ui@=As~=u=H7m519XAC@JZt8N@bqRvQcjez zQZ8q--WEFu94?Ry!9QVN&$K@K=<&ky=?QW&9+8>m@4pSpe~tAmFpVZmrehWmA~n6? zv>KlCpj?Mj76k?6nt7PRlg`|?gO@v~E)0K07YH$Lb12}{#=k61k&NZh72i3MEl+2F zbd^&lnw1?cSBP&jgn}9n(Sj<|JDD(LU{ zVydZ#biJSvSrs%5!L?Fu5QZhYP=!32*&lXsSdQ3epN~Ggye7)GFp<6Ic^|Tj|D}cF zDWpe)=fP7j1BSgJ6f#(L#j(#lrt2{c?(|gw7F;JIZ&Vnt| zQn-ut+1MU!0z(8FjP zjQ^2lklN1DMq)VdtY0>palH%6HT-xq8qxV8xL}veZefZgw6E6+F6Ntlxg1;H5r8X* zt*gsx9%@kuyZ&i3y#np#v3d@l>C z_>ad3QnTYEVV9G^g}{Q%jRN?=(f2HN8-j%Ot!SGUSb+AS-DQ`QWrquA zDTrmxsWNrXP$zh5m)Lv?siI{!xJ^hukKl$UW0I-<1yV0hbWgkRAs^A*=C?N|Rkf_2 zt>LSL!|8b!m@hN=z$X}~cLVUh%TLIQV-$LD06-8H0Kos#wHZ5t{-%d8pr&iJ%7Wo@ zUyVu>h=oSIo{JJ#Lu?ojTbUsq$$+cNqlNSQqy07ZcurwawEdAbZn8D!KyxKol>9k~ zg(~ZNFRagHnYiA{pnDUDdh0z){!}+ycb6NC)0CZcRuD}cFeF8Ww+gdKS;k6c>xUz4 z$8bL`4`(n~j)e0<9)iv2jw`Et`j3io8sR5g4gIeL2^5_!vFd}@t&`5Ywt-hpxPo0{sW-9(-}s-i)Ze%PlIyTh72hO(Stxtc)tm>~;cFK#RNx*C4eoA_$m;phG3QS#iY)ITj| z0ml8kYx`m3x5T)MYa6O4iC3L3gAH$e6^d@q(ci1vS@e!_4zj(duVFQaFp#{e4l=Gq zfWER0$KnA+d?&mox1Crb=$#tIM z)b>|q-0@5gc^eOC+GZDdhw;I4ObQ2DBpg2tNdo@kHx!J=dnVeEWNWS3jHg5;zP@Fc zP*tiO_%A{UG}}DpLsv+na)r7LZvs+Qw&+v*YTb~``TC$Onin&6>gY_qr3=E*%2Jsk z4=_fl(_EUUJ=c5fp^m56RF*U-Z4iv0S{{Tf&fWl_-OUw&4>jC9Xeis7mO%xLkQ6(B zFZ%-NeFYH7Rxv)PBr$a}B_U>{fF&P@IxxVAEFrA2j2K{`m1wZ|qVRpSVrk=DnnpWx z_ZS$l~ez zs!%^*n(o&1B}>Rh9@N>`zN=(S3-pC=1h4byybeJD7?a}n$^*&DH0a-3R1amb=*9|g zz!tv2wV_bu#^ah3Ogw9vq05%IE!D=$@`aSOr#Ivke+v5MaTcqFWe(?HbgBehdB+(f zoHz*k9WjjFgp*_m8i;2c6;kAH)#Favw`-VSec!JCL)a@J`sYt3{09i^?c>Cv;wWmf##S{0K|p@dPpEk&c~=O}Qh!mc$rEeEZ5U)#mbdss5zec~HKu7@eYbYf ziu{9uV7G&RHo)o$O+na*o<5K%H6%Ebe+-(B2T`Q}I=+=#EMD{iu25~i zuVLWb5*61Kv;db>@ueAqtVQMxwfBz%?s}h?N|~{x$2$ zeN(~gIhpSMEyD}c??Hu1up+AQS5Sfc6;x>d6jc7B@b#-Z?eq_eUju6LcId3Aod+74 zqlHQF@^lo)9~iNt?fr=8jXlmr2Is7piR@&8o;K5#$9*~A?1iVqGA246J?#b^MCe1e zheTmjhMh~m_Bh2$WiCd*@>?*YSsxAJ_7djuE~VGPqui-phq>4%Ohv-o;jQ6Oq_qPLUuW5*q@@ri;oHJF35{{ZRAf&^hZ`)dwm;mf zgvF%t$}EdH%sr2y6%XJz_p-f0WnXSyett_h$Uel)6P;r{Wn}F`rUJs|ALe82>fGgK z4kwj-sYFM*)Rv^-yJC8xx$-C@MRHXQF-<*rpcYl2eC{-@fTii&;dvwmjo(uewxTc8 zf7UK6ud4NK*(yxcc2}vA=7Gm(cC$IW&Oci&rwLVPNiotq5*3+5bs#*dP8j2-k0ENXuqv_j8}Y@sv@`HTi`CK^%W`5yD~5N8_q^Vnx`4sqWo4x zksoPOw5#Habbpq2P+*1HN>pvuz+gvcEy#+np@kFcgoRGUr%kF_v(DNzysp3 ze_qUrPLbMdLfA_KMQu9f^H|<49$H8$Q|{7y-=VWlosO*P*Py7XysH*;>Lfmm7)X6> z6ti--DkArSVu&L5mh`~oPK+*x^ES+f7kuMfXhrOWE+Q10<1d~%xjJ@=raT-mFrJ2c zyNU5UU=w%YyJ$F=ZN%~f|YCK`XtVp{vI3;A(rdfIr#v7N6N`hsSauW99C16fK zzN}kZH!8ovNn{-ifrLo%>#u{@>JS|1!YxhJWja4x)0V;wNmi-A$R8SAXb5^(g`}fQ znAoiA?4HBKYwlDJn6tBagu`Ltq^l~5tV%PPd-i4$8QKWlz?@HESqTRdo5-BJ7TJiz z3AR6eI(TVo>73QL0$#XOX_OxiStjLp1FKPJi33JYvT8xK?uqR^-(RW*sqT1KTEf&E zA5Lu87PZKPobNdXv!vmFIFL$%IpMYQ@)eX2WauZCE%O%p#*E&pXay8qHF`jN3^OkH zv_SBj+4v*$ka_oI+9q5rs-fr6SXD&dh4bg8-jTHVllwezfv@IAcgv%T%TlMapBqG; zzVA|rrv5Fh$Vuqfg8Aho6MlI~vOlc`TN7tDJ4Y)ETeH7e6Ip7b(HSfl>j(57*(24{ zS)>bXB_p0l)l772WEpVrA4RCp_cpzdCkhDQ*C5OXfMEL8f|0uhLjj#aZ!bDDr2!$ZVHL^&Fh zMyNxI>%g$gYU&40AB<;FUE&mARNDmZ;Y!vV_bPJ+7rp1jxpGN;=Y1Qk&y|5Ch6YI) zHKKVYKN0A<-NJeymEnj$-EI?ihZJY`AS7Zv9)+n5bsFQGbDn@iw7){nrSQ{U(I=+# z3>+vj(zl)xiAa_5UQgPGNsN+IobkiZvdgpM5gl#8#1!J}8a}$xhU2VoHEG62mf0i2 zXjRoYKRS1%ZTR;i?;-?xi88;hIWOW)ij9b3UQeGhsU#CMx`<3{YxO$udN5$Vcn=7V{?K zsMIgL>0}4jk{1 zG{_XmE2R1bNBL&`hcZ@uBSY!Vxhr`D9I9+lckQO#f-f`aezoa&CYEf5ktU{{JJ_{|xc_oZDX!%rJlW z_P>L=F$Fu`R{GJe}?+K-Sbz})30ClfBZlG+Wh%vkl$;qe}!!0{sHor z%IiO4{9Y9KD#-^dwJro6c6G*Q2uYR;-3M2&p-bPcqIK3;J>obe+Kwn z3;z``LHP&3|E!Gv8SZz9@mJhF%^z_8PjLJ*!tY`0uY?=AKM?*ci2aEJ_3McZ008mV PtL>LS()cyo3IO~c{3z)q literal 0 HcmV?d00001 diff --git a/examples/aws/poc/dsf_deployment/main.tf b/examples/aws/poc/dsf_deployment/main.tf index 04ecaec70..c1409acb6 100644 --- a/examples/aws/poc/dsf_deployment/main.tf +++ b/examples/aws/poc/dsf_deployment/main.tf @@ -8,7 +8,7 @@ provider "aws" { module "globals" { source = "imperva/dsf-globals/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = var.sonar_version dra_version = var.dra_version @@ -16,7 +16,7 @@ module "globals" { module "key_pair" { source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-" private_key_filename = "ssh_keys/dsf_ssh_key-${terraform.workspace}" diff --git a/examples/aws/poc/dsf_deployment/sonar.tf b/examples/aws/poc/dsf_deployment/sonar.tf index 60ccfed05..4274e145d 100644 --- a/examples/aws/poc/dsf_deployment/sonar.tf +++ b/examples/aws/poc/dsf_deployment/sonar.tf @@ -11,7 +11,7 @@ locals { module "hub_main" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.enable_sonar ? 1 : 0 friendly_name = join("-", [local.deployment_name_salted, "hub", "main"]) @@ -38,7 +38,7 @@ module "hub_main" { username = mx.web_console_user password = local.password }] : [] - dra_details = var.enable_dra? { + dra_details = var.enable_dra ? { name = module.dra_admin[0].display_name address = module.dra_admin[0].public_ip username = module.dra_admin[0].ssh_user @@ -53,7 +53,7 @@ module "hub_main" { module "hub_dr" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.enable_sonar && var.hub_hadr ? 1 : 0 friendly_name = join("-", [local.deployment_name_salted, "hub", "DR"]) @@ -85,7 +85,7 @@ module "hub_dr" { module "hub_hadr" { source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = length(module.hub_dr) > 0 ? 1 : 0 sonar_version = module.globals.tarball_location.version @@ -103,7 +103,7 @@ module "hub_hadr" { module "agentless_gw_main" { source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = local.agentless_gw_count friendly_name = join("-", [local.deployment_name_salted, "agentless", "gw", count.index, "main"]) @@ -133,7 +133,7 @@ module "agentless_gw_main" { module "agentless_gw_dr" { source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.agentless_gw_hadr ? local.agentless_gw_count : 0 friendly_name = join("-", [local.deployment_name_salted, "agentless", "gw", count.index, "DR"]) @@ -166,7 +166,7 @@ module "agentless_gw_dr" { module "agentless_gw_hadr" { source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = length(module.agentless_gw_dr) sonar_version = module.globals.tarball_location.version @@ -210,20 +210,20 @@ locals { module "federation" { source = "imperva/dsf-federation/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag for_each = local.hub_gw_combinations hub_info = { - hub_ip_address = each.value[0].public_ip + hub_ip_address = each.value[0].public_ip hub_federation_ip_address = each.value[0].public_ip - hub_private_ssh_key_path = module.key_pair.private_key_file_path - hub_ssh_user = each.value[0].ssh_user + hub_private_ssh_key_path = module.key_pair.private_key_file_path + hub_ssh_user = each.value[0].ssh_user } gw_info = { - gw_ip_address = each.value[1].private_ip + gw_ip_address = each.value[1].private_ip gw_federation_ip_address = each.value[1].private_ip - gw_private_ssh_key_path = module.key_pair.private_key_file_path - gw_ssh_user = each.value[1].ssh_user + gw_private_ssh_key_path = module.key_pair.private_key_file_path + gw_ssh_user = each.value[1].ssh_user } gw_proxy_info = { proxy_address = module.hub_main[0].public_ip diff --git a/examples/aws/poc/sonar_basic_deployment/main.tf b/examples/aws/poc/sonar_basic_deployment/main.tf index f349ee8df..04d2afb7c 100644 --- a/examples/aws/poc/sonar_basic_deployment/main.tf +++ b/examples/aws/poc/sonar_basic_deployment/main.tf @@ -8,14 +8,14 @@ provider "aws" { module "globals" { source = "imperva/dsf-globals/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = var.sonar_version } module "key_pair" { source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-" private_key_filename = "ssh_keys/dsf_ssh_key-${terraform.workspace}" @@ -80,7 +80,7 @@ data "aws_subnet" "gw" { module "hub" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "hub"]) instance_type = var.hub_instance_type @@ -106,7 +106,7 @@ module "hub" { module "agentless_gw" { source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.gw_count friendly_name = join("-", [local.deployment_name_salted, "gw", count.index]) @@ -135,20 +135,20 @@ module "agentless_gw" { module "federation" { source = "imperva/dsf-federation/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag for_each = { for idx, val in module.agentless_gw : idx => val } hub_info = { - hub_ip_address = module.hub.public_ip + hub_ip_address = module.hub.public_ip hub_federation_ip_address = module.hub.public_ip - hub_private_ssh_key_path = module.key_pair.private_key_file_path - hub_ssh_user = module.hub.ssh_user + hub_private_ssh_key_path = module.key_pair.private_key_file_path + hub_ssh_user = module.hub.ssh_user } gw_info = { - gw_ip_address = each.value.private_ip + gw_ip_address = each.value.private_ip gw_federation_ip_address = each.value.private_ip - gw_private_ssh_key_path = module.key_pair.private_key_file_path - gw_ssh_user = each.value.ssh_user + gw_private_ssh_key_path = module.key_pair.private_key_file_path + gw_ssh_user = each.value.ssh_user } gw_proxy_info = { proxy_address = module.hub.public_ip @@ -163,7 +163,7 @@ module "federation" { module "rds_mysql" { source = "imperva/dsf-poc-db-onboarder/aws//modules/rds-mysql-db" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = contains(var.db_types_to_onboard, "RDS MySQL") ? 1 : 0 rds_subnet_ids = local.db_subnet_ids @@ -173,7 +173,7 @@ module "rds_mysql" { module "rds_mssql" { source = "imperva/dsf-poc-db-onboarder/aws//modules/rds-mssql-db" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = contains(var.db_types_to_onboard, "RDS MsSQL") ? 1 : 0 rds_subnet_ids = local.db_subnet_ids @@ -188,7 +188,7 @@ module "rds_mssql" { module "db_onboarding" { source = "imperva/dsf-poc-db-onboarder/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag for_each = { for idx, val in concat(module.rds_mysql, module.rds_mssql) : idx => val } sonar_version = module.globals.tarball_location.version diff --git a/examples/aws/poc/sonar_basic_deployment/sonar_basic_deployment_1_5_7.zip b/examples/aws/poc/sonar_basic_deployment/sonar_basic_deployment_1_6_0.zip similarity index 50% rename from examples/aws/poc/sonar_basic_deployment/sonar_basic_deployment_1_5_7.zip rename to examples/aws/poc/sonar_basic_deployment/sonar_basic_deployment_1_6_0.zip index 3d2261f52d29653565cd3475b9b719b620b700f0..4907e70838e3e0caeb06bd27453fd9b25a0ec4e7 100644 GIT binary patch delta 2233 zcmZ9OdpHyNAIE2|XAH5K*vNI6Yi=V{7P*Tx3j1Li(cC2}+Nj(+ks%z{nhtV1jYi=} zBb!U2#9@ux3#Cq_MZe}ePmlUO&*%C6^Ll^2pYLC<4^{t;KG@AkPzVIzpJY-{4j83t z>Sv(uf%^?0IJ;yY$gkLVae#o(k{|#eME;KP1CZ~x*mi)3g7X7s3DF^hfY87gy)!{O z!%a1%B7)x==Q@d^6!>67?3u{eGrwYYuZboCw>c>gYB!(5+FIMV*y@E5cXqpr1#SF? zX+ltn+wTTO$Am1?gaZKTxd;%P%uk0ALc)I;_}AY) z^Ky!qG?nh)9dC35#b^F++;v0=$Y_Tw(yZv_6C&0Q_`;@qti$Os#qMubMpT=e^XA1O zx__lUQtd39evpc#vDzOqRCie{rdgI)m6dpOn_wVAwpx8;ll0T=)6T^M9zyIp($2E@ zdKPsVm(B{VA>RTYz=Yp7tQB{ye6Uy6lm7LLS1r}Yv8k3ZaW~UB0^f%)3SyW>mIHt9N+)a-&LImctu7AX;CD8V=eTy>`zj86+6#k$X&sSNBto)U z{hugrtqwBu+M})WQHqdMxVFZ}zbUF0wL!ldr;U738Z$1_G+JDQ@+Y@tmsQ?XWy z8MLpv$0<0Mluir*B< zvF_P^ePGb3dCM=py#=rc&Jj|U>{h(e6esB5B$?C0AvdC#Va;u7YdW3Hn{g&)K0URS zma7cotHLJQ5<}d0Wk;2vo8ZQFYd@(-HG+K{n&`W)&U&NYNM=2n-CotTeqSYqN%UL| z7QJB*!ahfbJIaT3l1facRp?+Nog@QN=)EeFK0y&TfGeO3`4OQnht^aAP#-De zwAw$U4*wQKTDPf8dZh~c)2Ni}n?&X9uV`~sN8^a?^WhFsqpRqd?9tX}KN`9qF3JOW z#omXK0+r5J#&{vc#O>|=nh2G;9LQPv5b_Z7G;qLRm#^;Dpl{C0)>#l-I|gVhudYAL z0EuJln9uTR!PHTgB&d-FUC69)bFsobC#Edx`u0N1c4xPm0z4#&LZCL!u>X4RP2NQe}_3=1);UP`P6 zXN*kgnT}rT{xHmKasSe2B`fS?qtc&qQAZ<{*oMzVYd2)l>sK?p85xW{s$~2-@mE5T z7M{arp;-WpO8;i(wF`Ngya5|_*UU+~jQk5Ws*ig#U2W#M)+vKe=2CYRmXU6!#3`f7 z5Ywx(My~|llpSD(=5YduhA@Jb{AA%41e!tVoZ6u(yCrLq*i7 z)~>9pyvtW6vsUmql*7ua33}3Cfp?ELy2ptX9A{yCeX)wnQ^#Y)m(b6ti7}UZExtu_ zwOejXOEUVTkX7f$p0}0T%FaAY0Gny>rYBz?Iiy4EQHG(c)egL!TYz5btFb63lf^!S zl;|lT3$CUo6W9cl9Z0w1@GHH@;D5!L>^z`m5Ua4{Ug=wbpweCwbsSk>a7l9Ewp>;>WzSgWiT?Lq z#X^{Hrv<(HZY~?7E+6|*(#%NbA>$=(u4U-mcvfeoWDB!@M4{{y^@w1ve?!szV{{N; z_>ZTVHs5?hbn1-uU%1}8AH5_Uyro;UkbnZluN>qJA7r@;>zuXQJlgbvU28Z+?5mgj$yhBaTG3DLSYQ^OB>EmyLxYjoe+Tsv;F;i?jEVwpZ z6LwMHZ6-(1h}80N zT*A4}75l=&P9@mgbbA|dK_XXt5E3%S6q=y;tNxq$xsw+zs<)0WXXEEF>kdl;o}v=Tew!p8$;M-aagPO^2 z`|>AG|IAE6&E)vZPDTGrILMhn`NR%6{|qR@6my@*Az<52?Nsv*Oy&DB@Ux8p^8Dok hAn?6zC89_t{}1dz6 z>NCRM`Ng*D&I+4Y?2ZHi0DZDFeK7?JFA?ZYApUmy@1qYo<4CMSQq9w6$$p?0aivOb z*Z2gh+<5h+C+u|;hJq4%L0mf zX?eyG>FLnfS8Opoa+-?k`A@bR1m84s0Imi<QE%3;e6%lsG1FB|c z`K07}F~ruj-Vs7!e&1Twp5RR>kC1Sesm_IK$0?tpfk7IOB!s_K zZA;AlXf0$4HW@P|-?wMRydi0DR`pE{-oNnh7n?62yXxD`n`HJ?3HC0+i|harTSej^b6kB9M{~SQuPq|O{D%Pr~9tzSkB6~PdzNJ zzarWc`e-cHrz92&OIZgmOx0<@E=@FzKMmbNSv-R_mJLL=7X}*oI(bL%&0MiJy{oEm z@p4?HJV&K1ZGqU`i0_E`YR*=gm`nv(<&UpH{XnUa6Vv=VwD5-WrK~~?)GETGi<`#qY zZ#4qc*Kig%nkDg}8t~0O>C(3hT?@1yf+uTxNvOsCXI;qjO8^1YeI+9=t8Bz!={8A}A--MO|+}$TClcWgwA|bQ~HPQ#OKo)pkx_rzy$)`^26#hJupKJTkG?!K22^nB}Vl#_%=`~Xhrysm$07{8}T zv#(xz;1LMbvwL9Phlq=}vrb8|!T!3Ds5ATc@~Ve+~~no?_uHsRD@&(mc~n4xM;#XSS_Q0ZMO z9MlB=u(*V6tnnx=WhJLRUIW))X6h_GUM7lSMjl!)2F?jeH7TDC>%>+GF+&8S8g1JD=TUT9yT->lgcc3R7}A zvHbF0@MO4Oo~xbklg{ag$+x!ZH$Rfgj};mI9aZ^_IXe{wp0Eicy~9+oT{P+Kg?w!9 zbp(FA0FSL;&h?B9z8yaIILg6GLmBfD3$fjRiiMXTz%5Zz0|}+T#8m9`!eh#bsYE$c z=o3jH&z15E#%ac@3Y!~-&hh29d`&i}@<%FidN>Wbj4qC{5Ecq;&5F5Fqos|yV*Nb*)p|I!C zvotX}#?wswNaqoGllByUkX`CpqHX1u{Eb!SKEW^Lm z0W6xmq>W{^$Ym0aFcpq*USsS($eVB+z;SJvjwOOal1%cXGB`a~{{*o-Qi)!e7UdXu zc~BrfOK!`0Zyf8n@e@k-`fXeY6PEu_FLP`HVpWk-y~Y2FL1{LkNZB2QdIyIPNW|aO zNTZ2ni1P8v3;d8YZ9i0Z4=>?hFSuiAS{V$nBhLh=uGCJ|FE-wWwoUv4T7l}qc+k%# z{ta=5=|XwPPZIu@koeWV0DuyW1w%^m_#X=Xm)@DH2PVre4WUWEWZ^sG{ruAZqlxf+ L!2j~T6@dQ%0?5j2 diff --git a/examples/aws/poc/sonar_hadr_deployment/main.tf b/examples/aws/poc/sonar_hadr_deployment/main.tf index 2a9af65bd..43da0367d 100644 --- a/examples/aws/poc/sonar_hadr_deployment/main.tf +++ b/examples/aws/poc/sonar_hadr_deployment/main.tf @@ -8,13 +8,13 @@ provider "aws" { module "globals" { source = "imperva/dsf-globals/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = var.sonar_version } module "key_pair" { source = "imperva/dsf-globals/aws//modules/key_pair" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag key_name_prefix = "imperva-dsf-" private_key_filename = "ssh_keys/dsf_ssh_key-${terraform.workspace}" tags = local.tags @@ -87,7 +87,7 @@ module "vpc" { ############################## module "hub_main" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "hub", "main"]) instance_type = var.hub_instance_type @@ -114,7 +114,7 @@ module "hub_main" { module "hub_dr" { source = "imperva/dsf-hub/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag friendly_name = join("-", [local.deployment_name_salted, "hub", "DR"]) instance_type = var.hub_instance_type @@ -143,7 +143,7 @@ module "hub_dr" { module "agentless_gw_main" { source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.gw_count friendly_name = join("-", [local.deployment_name_salted, "gw", count.index, "main"]) @@ -173,7 +173,7 @@ module "agentless_gw_main" { module "agentless_gw_dr" { source = "imperva/dsf-agentless-gw/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.gw_count friendly_name = join("-", [local.deployment_name_salted, "gw", count.index, "DR"]) @@ -206,7 +206,7 @@ module "agentless_gw_dr" { module "hub_hadr" { source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag sonar_version = module.globals.tarball_location.version dsf_main_ip = module.hub_main.public_ip @@ -223,7 +223,7 @@ module "hub_hadr" { module "agentless_gw_hadr" { source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.gw_count sonar_version = module.globals.tarball_location.version @@ -256,20 +256,20 @@ locals { module "federation" { source = "imperva/dsf-federation/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = length(local.hub_gw_combinations) hub_info = { - hub_ip_address = local.hub_gw_combinations[count.index][0].public_ip + hub_ip_address = local.hub_gw_combinations[count.index][0].public_ip hub_federation_ip_address = local.hub_gw_combinations[count.index][0].public_ip - hub_private_ssh_key_path = module.key_pair.private_key_file_path - hub_ssh_user = local.hub_gw_combinations[count.index][0].ssh_user + hub_private_ssh_key_path = module.key_pair.private_key_file_path + hub_ssh_user = local.hub_gw_combinations[count.index][0].ssh_user } gw_info = { - gw_ip_address = local.hub_gw_combinations[count.index][1].private_ip + gw_ip_address = local.hub_gw_combinations[count.index][1].private_ip gw_federation_ip_address = local.hub_gw_combinations[count.index][1].private_ip - gw_private_ssh_key_path = module.key_pair.private_key_file_path - gw_ssh_user = local.hub_gw_combinations[count.index][1].ssh_user + gw_private_ssh_key_path = module.key_pair.private_key_file_path + gw_ssh_user = local.hub_gw_combinations[count.index][1].ssh_user } gw_proxy_info = { proxy_address = module.hub_main.public_ip @@ -284,7 +284,7 @@ module "federation" { module "rds_mysql" { source = "imperva/dsf-poc-db-onboarder/aws//modules/rds-mysql-db" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = contains(var.db_types_to_onboard, "RDS MySQL") ? 1 : 0 rds_subnet_ids = local.db_subnet_ids @@ -295,7 +295,7 @@ module "rds_mysql" { # create a RDS SQL Server DB module "rds_mssql" { source = "imperva/dsf-poc-db-onboarder/aws//modules/rds-mssql-db" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = contains(var.db_types_to_onboard, "RDS MsSQL") ? 1 : 0 rds_subnet_ids = local.db_subnet_ids @@ -310,7 +310,7 @@ module "rds_mssql" { module "db_onboarding" { source = "imperva/dsf-poc-db-onboarder/aws" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag for_each = { for idx, val in concat(module.rds_mysql, module.rds_mssql) : idx => val } sonar_version = module.globals.tarball_location.version diff --git a/examples/aws/poc/sonar_hadr_deployment/sonar_hadr_deployment_1_5_7.zip b/examples/aws/poc/sonar_hadr_deployment/sonar_hadr_deployment_1_5_7.zip deleted file mode 100644 index 47ba31e9c6187ede2a5fef08391b5da5ca4997d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6772 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 XFofqC8~{Lkete!isP*TN0KoqNKrQzr diff --git a/examples/aws/poc/sonar_hadr_deployment/sonar_hadr_deployment_1_6_0.zip b/examples/aws/poc/sonar_hadr_deployment/sonar_hadr_deployment_1_6_0.zip new file mode 100644 index 0000000000000000000000000000000000000000..6d70cf159472264b3b49262979e5e18eab0d51c6 GIT binary patch literal 6788 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 literal 0 HcmV?d00001 diff --git a/examples/azure/poc/dsf_deployment/dsf_deployment_1_5_7.zip b/examples/azure/poc/dsf_deployment/dsf_deployment_1_5_7.zip deleted file mode 100644 index 5b42f6cf7fa9f49a0cb9bf2ad8e4c558ee54c702..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7582 zcma)>bx>ScxAq&C0Kpy7xI4k!-O@+KX3lu2OfYFVD4&ZWNzVP=jdf` z;oxS(Vf507mrWCd0)R`3=C$}^xqChXz`*ap0RZp;Pd`+9lEZ!aM*dTdxyVx30|@}A zCIkQ|ekbQ);$m%LYG>if>Sp<;bmEijAM0<@b2C;Q8ZKy2<_ij5+V)Af@lMLRFK*oO>>j|y?c*Dk)ip@O14-Xl4 z2b>(k(UnU zKu(=eVl4?axd$m{OFnk`8=J4XRryZfog0zFTz%Row_Cy$HbuFV?Leho5kX911?!I* zE({u3uuL=J%5SHLpb#hPDLyoXvGmtK1@>oo*0Uj4&v%^8S!NLZ)5xNqS95P^vVKNj zQwG%p2XytYR*K=`X)AhU>@zPkJmy%S^$~Iwiz(hq=;(bRnhs_TEzO7@oZ=;wCnRoL zrzvV-X1I3SQ_*vSfIohQ>XLxFrXggqQz?AaO;gXnI}E29I62I&rJ*4DPN;Nr+x8gYGf2S##MOA7imdqipwHXN?A%(8kN0G7>2(uTLO)V6B)eW zJQ#oau&{UW;2X#`P6MgfbB84EJ*51Fm+Fd5bu04}GHHl8LV@5j2Ox$5p@PUYZUqN@ z4PitUff-lW2wS((GA3<}SX7P|aa`)Rdg)SnbZwf^y}BaB>Dj=@16QFLNMZ^IXD5kF zET!v*(GeEJ>u^M^g2t;y)X}MKlfxoBY4?2`7l0!8zR4w#z7`LCg|A`a&h2EB+{}TH z`-&y?)3vUoPutF=fw@}wP$?b_CE3^qeXH79&3053iMy;Uct=DV9lGc#Dg!osLy9&X z{vG?pPk5?Q4GnZ1{^p#MTkn|jLVMF((JBp*c(eUf9SxCiJju!=@3Jb4kQ~{u>|Z(y z1ryF&&qVtAPk95lRFmq$MV?a=u)miG#(EH)!gK(d={SLL^LC`p(66sB!y8 znQZrXlLEK8YHBvEYj1 ztcW+1)RRI;mpVoxU{K4dMDT1vY@pMGi+CC*P?}7Zh0M)} zESeNt0-^UYZ`W9(T2-DmTc+>{pa;29)0&)e9k&0&cyaYY)oP1EG@ z@Z@5ym~+5}uJle4urWVKX=wz;-{n|O<1=Y+@NKa*LyWc+mfEmq}Axo96y zceC$oL%3M`tOHr~1=_5Df?H+6SNR*8LE=7`vHcS0JMSdX{^P>yS7MfhJmJ=Y_qv;q zSj93-o>BtOY>VyN>h`dX%Q0G>!+QuG-Vu5p5&qX19N63klh#_ZZzKZ8-3_N|1jEj_ z5d4cNZjbQe>M}EoU!koBeJD5E@`Of5lI+1)Z}*8)O^nY(M|ikj_QFJKky{+|TO6UPV>jf4k@Rpf(i0v?5b^QfxgY?rzBXYKLoLH&v3&Sd^L}V)iJwM zSb?k(v0d4FJfa9UUZ%o?^F*pidHXAY(>Cf8in(tupB3b8^#)VJA_ z-U$+vJ5KQ0nR`+BdOWn+4C}mAvel?pW7|Eb* z5n&vO{sNhsY-G0qlM?3q(FdI4H*WHp_X}G4UmdUnWFBIU8eD}crAG?!(m4Fiuct%k zHhOUHK3;aB@9%Zu%$E0E2ZZvuo57D#O;VSnm?8|CF8&-}D=^*?;&%nz(cR6--R+;s`H_~m?J_%V z$Bs5~?I(;S^D1%$pdCA5h=B)@U??T7V)5J%wA#Ed`?~XF7>dVVJ;P&G$WkbG;`gDW z@M=rCgj3o=P2z(1l@@aSXezf3G=pZ>D_Bigs(%U=B@vrLSgtz_xpy}&RS6^oN@$}+ z%n|4%X>gTFlOIQ~WJzUU!f!enbU3Prnu2-OR6MAfD_n-UKE3!7nuvK~#79)wY}^E- zC80+|lD6078)vn1=D323FM~IIN5iG3>2T|-)n?F((PtpuoP$?&d%qQaR~&7kvMgj! zZk#{(!xxsC7p~rhMt;R9L3LjNXcNm;`(C$&m zi&$<8U9)f(QspW{mUgd0N-8(UjAUPl(OQGe?AKm>CX=oay;%qEKi;0S^pbIHMu#Y# z2veE@}c7BTnzI&5~<`i`4qotRkb^4!GsN|)f&bO zozyNHA?l5Nm80RTT&W7TV)l!C?i+z-dzAKT);TTzS4+Eqfp&$ipy@q&4Db9%dz8_UM>b!+U=TQmJ*Y zB`k(xtzO?;dJLSb|C2cZxOera|ptk5U?$gxWbKruppK`7;BwO^&2gM3cf3C)X9==Jsfb3W@ zjk=cT-l>F_(2E+_z7xB9RL76~k;8%DV0g7d2eCW%V%1 zcN93O3VPn&2;U_241mv30L&QjS@&X>fCDBk{WABJuDQS^<7{PSo*5Xp_;4h~6)}HN zqyt>#9Z~$7#oK^T3-&c%Li~3}Lu+rexZUM7)Wlymb@j16dHXnf*z1?1|{i_h) zEdgUBp6Sp%i`6+3q6p2s@m8l=WDwV$F9HQ{;koX*pacaeu~dfM8H#Y{-$rU zH?em3haM|a)82809rNd^k+Y|y&2*Cc41j|{;vV6;NhK*+{}mTqj2#_&$`YD6|5N3aub@xhTW^HbU=MCekstE zo3O4t&v0~1OMGu+lwv><)z(7DL%fyf(W4e@{bK+a(X$|1BeOsVgG=EC&b6J>JpP>A zJ~<~AC#2_=g}L}c!0UrAt`njR!gn4bx4m2QNA#|5*qH(}-gqnYTKqOh8fJd=Xsmu3`S4T87-cT9(a-v%M z>$H1?ApU^71c)aeh{SX-qN(;+wwL#jHvr3RBo%8C=sHV?ta|OMHgDWkmgz7|IV`cT z>bUt1h5nUJVQ;}VM!$#4FinBVZ@Cy*)egxYL`Xlp(w5t+J`>o*-_j)^eZAElW8cE- z>43l3sn!lBP&hxIIQ;w|%eTBn$J9ano2!b6l<;0ie2B2ME#)S!QZ*Gmn{+a#TQ~(* zrl6NA3CTtlmS#$1qX^h=<;%Ng`$Mn+6a6-coqFZa5Yd|Gv>e~07DHxopmidack5xgTl=8Cgp8(OZ=pw-|MahM3tTE{CHIkK#9v57#MU4E(rmqLIbHO zCqTnO9Cup!mSyq+RaBZ5*d3~pL%-?nzB&B9BCB8tqn3`U160o`ye|RNB6h~eWG@dp zk|8RY%G^l{v{hN(cZzIt2hg_Pg+Pb#yRs`G@#D0zYL}KFszVZA=^WzQCitaOoh}W5Y{= z!#Q?j-8_2-Y6T!otM&S02Up&OGPow5Wy!(C323t&M>^3qSe;949!J6UCbTM34NM)C z-AaWXuWw;4kD)XfW|}Ui7EfO={J~?$>@G}bHS_p*Gjt~o*e$X)l_HO)V;BET02dwr zM^q^BVgZhKnTSxh>ZBQ80HbRkSQqzJqO|}1{mo9GFA!@qbT|S(&R8Zk>ZogKT<-or zZy`T$PD?S{^IQop(&Ttx4SF9h=l)_Wm;o$J7|Kszogg$=#c?2p9?98V=)u(O4I8N2 zWL zWV?{fl^k_&6A{-FIL!c`cx{{Kdl0o#X^1frUE(-UP{ajX*Ml0$x>OnCIS`h|vt}Hk zo^?X-3UrgIom5{5ImVmx&G_OB$By8(ac1VKJ4o3#q5JU!3*i!Lgx0Y4xs5^TvXw@M zQiT1mC)op=ce5sk_`dW-qbb)50cqPZKKSh<3M*@*^c*r3jbu2`n46B&_+gpbbm>^0 z0S{ZTpTA%q2W*96z0LVX&nNs2eKwvGrHj3vL6HWX=JPh`_^l6VWwYtW%)MQ1vkcp) zG*@(}%9lM4bT?a4n;r5hoWE#-O;E+K zH4;xJP#Kv(>b9FMy9*yH&gfCw`)hX>ywn-zTcR`;(NB*AH!$#r93`4~&setaECvul zkP>C5qkW&zwT)h0)thg7OLRa71*VtU3J|>8S4kY5;w^1UvkiM!H5e4zk3r_e?K9UI zBUi84jDr!u+-*&l%J8i9*7vLz))W2fs0Cg%RQrhGfs1v#b0o9QJZ&lTVZC+2R$Mi4 zLeXc0hl~mbi^tarFmL$Rjy!G=?uheQoz*Mf$X?g2yB0THdx*DHf{vUGAVzY@D;||h z`TqGQiJqNj-j+7Dm5&bV&A2-KClOm#<@aIVMyW`(nIN)*s}k<4L(w3?NNif?45mHK z5OV5}1?shuuH{10iOb^Wr%oFNQmx{CUqcMKuA3ZV?^VL;I<$mI28Dn*j&cE+?}T_+ z{OYc^+sC9K_e5zKSVx1(-xkFP$Fm=P#N>X`>Ov&CFeUPgxL_g4n#eTPB$(7b7o!Ry zv7c@=ZDSfxEh7|d`fgJ^_YJ+ZB53pQ9Mqnpy6WV0!b;a7Wk^dzcQ8;QHc2S_W%DVXb2^kW|rsl5a-e3df#i{v2tQ8;4 zHCV6^CF^Q187}mYyZ15jfMhPUoM7x-1BL|?jl8bcm4BXB{VD#@-d%g7&Le@)SQ)e-GvPgCC4=l}ra?^3jb zh1(lP7h7wG*Z+{G^R<>8o=(AjSK3w%NYr8n6^^}u#=FlCEqs_@CF?=5rOYHP)O+vl z?}{Sh7m_j+LxiX)-Q~#R!#l*=SlP9AshY)+%f}Qe#v(royoQ$+c~&>Tx!g*BZV?o^ zLHck=RKq&^95mPGlvbX;d9%!EJNE3gw3C`s&2v?A=8(}%4|bJM|MP5T`LJzJaoZOu z20qactRiu8XnA#kABI4qV3>YtH#bo`H7v=u-NoX`3vmLQTa%`RIgb_uwuqG=fl7q8 zef+d|IA-$tYF_aB!PM~ECuw;5u3y;^-Q{^>qWkd7ocrYtq2`t9$YG<=d6jmGcztYy zaT`5j5PiW@+GL%Ca}2-m6Cs#b5_pI*%Nq6z-29Dz{lLg2WMTT_X-HW#v(*|@`D}1?S8cl$X9zn0=qvp)fU2U|=u{I(*4G>0gUqv@ zfSPlryD)-%fJH91`c*2)*x=S5sAHC}sVqpqpkU&YXF?#*f1xhWI@b7Y!9I2wE6|KA ztBY^`7+J%&IpZyXs)L)J(nqaj=+UQ`tX)8)^|Lkq<`%1ZvV|aNbTW2H4VC?g=YJrB7!We&J_lFCZWL3EQ?sdTQ5@ z){W_QnzJ<3VpvGu)}Eyes$ zIcosc2{{MWX-z~$u(Y?W#zPQ$9u?PdMqQF!=8uUexhvj2_a4wPNxdzd;ud4pExFI` z<5>%EBmRwSYSePu-JDiFp)r`fF3vNYyZ2=ug4)ShUUw>B+(_9vlh~@sIC}L`r7m%X zkIyBwSs6+72sE-$v1;7WZo--?VYV1xSPM!o9E<+C@y4m!JN%v;mC>gK{N2X$uyAp; zc69isnTzH`H%2f!8shq0*5)L+ad5_9X^O>c6+DYaOo+KiYamx@GOcpw&!c#$FNs?a zO&E#yxS^0y32eAElWd>JdAEYO62#h5Y=|aF+k+s{DZ&F#{M1T*U`gY zA%ssuxc~Z^{xXR8cZ^@#$GmbA@CNfYg#SJ7|2xF573!}D uV*KAA{#LL49p~2#`BzRn(Qi1vY|r0O5T1JXKa5jk0Qpm$wITlF>3;xGdNB0> diff --git a/examples/azure/poc/dsf_deployment/dsf_deployment_1_6_0.zip b/examples/azure/poc/dsf_deployment/dsf_deployment_1_6_0.zip new file mode 100644 index 0000000000000000000000000000000000000000..b6fd778b77d9ee4877c3d16d26fa09cc968c02a2 GIT binary patch literal 7823 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 0 ? 1 : 0 sonar_version = var.sonar_version @@ -84,7 +84,7 @@ module "hub_hadr" { module "agentless_gw_main" { source = "imperva/dsf-agentless-gw/azurerm" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = local.agentless_gw_count friendly_name = join("-", [local.deployment_name_salted, "agentless", "gw", count.index]) @@ -115,7 +115,7 @@ module "agentless_gw_main" { module "agentless_gw_dr" { source = "imperva/dsf-agentless-gw/azurerm" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = var.agentless_gw_hadr ? local.agentless_gw_count : 0 friendly_name = join("-", [local.deployment_name_salted, "agentless", "gw", count.index, "DR"]) @@ -149,7 +149,7 @@ module "agentless_gw_dr" { module "agentless_gw_hadr" { source = "imperva/dsf-hadr/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag count = length(module.agentless_gw_dr) sonar_version = var.sonar_version @@ -193,20 +193,20 @@ locals { module "federation" { source = "imperva/dsf-federation/null" - version = "1.5.7" # latest release tag + version = "1.6.0" # latest release tag for_each = local.hub_gw_combinations hub_info = { - hub_ip_address = each.value[0].public_ip + hub_ip_address = each.value[0].public_ip hub_federation_ip_address = each.value[0].public_ip - hub_private_ssh_key_path = local_sensitive_file.ssh_key.filename - hub_ssh_user = each.value[0].ssh_user + hub_private_ssh_key_path = local_sensitive_file.ssh_key.filename + hub_ssh_user = each.value[0].ssh_user } gw_info = { - gw_ip_address = each.value[1].private_ip + gw_ip_address = each.value[1].private_ip gw_federation_ip_address = each.value[1].private_ip - gw_private_ssh_key_path = local_sensitive_file.ssh_key.filename - gw_ssh_user = each.value[1].ssh_user + gw_private_ssh_key_path = local_sensitive_file.ssh_key.filename + gw_ssh_user = each.value[1].ssh_user } gw_proxy_info = { proxy_address = module.hub_main[0].public_ip diff --git a/modules/aws/agent-gw/README.md b/modules/aws/agent-gw/README.md index 7a6d3135f..123729a3a 100644 --- a/modules/aws/agent-gw/README.md +++ b/modules/aws/agent-gw/README.md @@ -83,4 +83,4 @@ API access to the DSF Management server is required to provision this module. Pl For more information about the DSF Agent Gateway and its features, refer to the official documentation [here](https://docs.imperva.com/bundle/v14.11-database-activity-monitoring-user-guide/page/378.htm). -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/aws/agentless-gw/README.md b/modules/aws/agentless-gw/README.md index 2e82ffeac..076582f99 100644 --- a/modules/aws/agentless-gw/README.md +++ b/modules/aws/agentless-gw/README.md @@ -100,4 +100,4 @@ SSH access is required to provision this module. To SSH into the Agentless Gatew For more information about the Agentless Gateway and its features, refer to the official documentation [here](https://docs.imperva.com/bundle/v4.12-sonar-user-guide/page/80401.htm). -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/aws/db-with-agent/README.md b/modules/aws/db-with-agent/README.md index 05f6f1ecb..6cb5848d3 100644 --- a/modules/aws/db-with-agent/README.md +++ b/modules/aws/db-with-agent/README.md @@ -69,4 +69,4 @@ module "db_with_agent" { ## Additional Information For more information about the DSF Agent Gateway and its features, refer to the official documentation [here](https://docs.imperva.com/bundle/v14.11-database-activity-monitoring-user-guide/page/378.htm). -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/aws/dra-admin/README.md b/modules/aws/dra-admin/README.md index 96ee9e89c..eeb61e09c 100644 --- a/modules/aws/dra-admin/README.md +++ b/modules/aws/dra-admin/README.md @@ -72,4 +72,4 @@ module "dsf_dra_admin" { For more information about the DSF DRA Admin and its features, refer to the official documentation [here](https://docs.imperva.com/bundle/z-kb-articles-km/page/4e487f3c.html). -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/aws/dra-analytics/README.md b/modules/aws/dra-analytics/README.md index b052f6693..0c418ee4d 100644 --- a/modules/aws/dra-analytics/README.md +++ b/modules/aws/dra-analytics/README.md @@ -78,4 +78,4 @@ module "dsf_dra_admin" { For more information about the DSF DRA Analytics and its features, refer to the official documentation [here](https://docs.imperva.com/bundle/z-kb-articles-km/page/4e487f3c.html). -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/aws/hub/README.md b/modules/aws/hub/README.md index 4291978f7..e7a34ccbd 100644 --- a/modules/aws/hub/README.md +++ b/modules/aws/hub/README.md @@ -96,4 +96,4 @@ SSH access is required to provision this module. To SSH into the DSF Hub instanc For more information about the DSF Hub and its features, refer to the official documentation [here](https://docs.imperva.com/bundle/v4.12-sonar-user-guide/page/80401.htm). -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/aws/mx/README.md b/modules/aws/mx/README.md index b440baf56..68ad8947e 100644 --- a/modules/aws/mx/README.md +++ b/modules/aws/mx/README.md @@ -83,4 +83,4 @@ API access is required to provision this module. Please make sure to pass the re For more information about the DSF MX and its features, refer to the official documentation [here](https://docs.imperva.com/bundle/v14.11-dam-management-server-manager-user-guide/page/10068.htm). -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/aws/rds-mssql-db/README.md b/modules/aws/rds-mssql-db/README.md index 2c206cc85..95abdd0fc 100644 --- a/modules/aws/rds-mssql-db/README.md +++ b/modules/aws/rds-mssql-db/README.md @@ -80,4 +80,4 @@ module "dsf_rds_mssql" { ## Additional Information -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/aws/sonar-upgrader/main.tf b/modules/aws/sonar-upgrader/main.tf index 7a4db5c1b..53091e614 100644 --- a/modules/aws/sonar-upgrader/main.tf +++ b/modules/aws/sonar-upgrader/main.tf @@ -9,9 +9,9 @@ locals { run_preflight_validations = var.run_preflight_validations run_upgrade = var.run_upgrade run_postflight_validations = var.run_postflight_validations -# clean_old_deployments = var.clean_old_deployments - stop_on_failure = var.stop_on_failure - tarball_location = jsonencode(var.tarball_location) + # clean_old_deployments = var.clean_old_deployments + stop_on_failure = var.stop_on_failure + tarball_location = jsonencode(var.tarball_location) }) } diff --git a/modules/azurerm/agentless-gw/README.md b/modules/azurerm/agentless-gw/README.md index e08cb5899..94eafc637 100644 --- a/modules/azurerm/agentless-gw/README.md +++ b/modules/azurerm/agentless-gw/README.md @@ -100,4 +100,4 @@ SSH access is required to provision this module. To SSH into the Agentless Gatew For more information about the Agentless Gateway and its features, refer to the official documentation [here](https://docs.imperva.com/bundle/v4.12-sonar-user-guide/page/80401.htm). -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/azurerm/hub/README.md b/modules/azurerm/hub/README.md index 41955ef14..88f835aa1 100644 --- a/modules/azurerm/hub/README.md +++ b/modules/azurerm/hub/README.md @@ -98,4 +98,4 @@ SSH access is required to provision this module. To SSH into the DSF Hub instanc For more information about the DSF Hub and its features, refer to the official documentation [here](https://docs.imperva.com/bundle/v4.12-sonar-user-guide/page/80401.htm). -For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.5.7). \ No newline at end of file +For additional information about DSF deployment using terraform, refer to the main repo README [here](https://github.com/imperva/dsfkit/tree/1.6.0). \ No newline at end of file diff --git a/modules/azurerm/sonar-base-instance/main.tf b/modules/azurerm/sonar-base-instance/main.tf index 60d01f1f3..c31eeae72 100644 --- a/modules/azurerm/sonar-base-instance/main.tf +++ b/modules/azurerm/sonar-base-instance/main.tf @@ -72,8 +72,8 @@ resource "azurerm_linux_virtual_machine" "dsf_base_instance" { } identity { - type = "UserAssigned" - identity_ids = [azurerm_user_assigned_identity.dsf_base.id] + type = "UserAssigned" + identity_ids = [azurerm_user_assigned_identity.dsf_base.id] } tags = merge(var.tags, { Name = var.name }) @@ -88,7 +88,7 @@ resource "azurerm_linux_virtual_machine" "dsf_base_instance" { resource "azurerm_user_assigned_identity" "dsf_base" { name = var.name resource_group_name = var.resource_group.name - location = var.resource_group.location + location = var.resource_group.location } data "azurerm_subscription" "subscription" { diff --git a/modules/null/federation/variables.tf b/modules/null/federation/variables.tf index 7afdf2c00..ba02a7441 100644 --- a/modules/null/federation/variables.tf +++ b/modules/null/federation/variables.tf @@ -1,9 +1,9 @@ variable "gw_info" { type = object({ - gw_ip_address = string + gw_ip_address = string gw_federation_ip_address = string - gw_private_ssh_key_path = string - gw_ssh_user = string + gw_private_ssh_key_path = string + gw_ssh_user = string }) nullable = false @@ -12,10 +12,10 @@ variable "gw_info" { variable "hub_info" { type = object({ - hub_ip_address = string + hub_ip_address = string hub_federation_ip_address = string - hub_private_ssh_key_path = string - hub_ssh_user = string + hub_private_ssh_key_path = string + hub_ssh_user = string }) nullable = false diff --git a/modules/sonar_python_upgrader_1_5_7.zip b/modules/sonar_python_upgrader_1_5_7.zip deleted file mode 100644 index 58e20ae4d2a6b432c09809c6cc4eba504cce6a75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18462 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�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 D5UciU diff --git a/modules/sonar_python_upgrader_1_6_0.zip b/modules/sonar_python_upgrader_1_6_0.zip new file mode 100644 index 0000000000000000000000000000000000000000..ff6d89292ec00fd9067e93b20580c851c4b20c4a GIT binary patch literal 29317 zcmb4qV{m2Nx^8USwr$(C)3LRp4m-AO+qP}nNyqBA!`t89=iF2KRNcGxH><{~Ie)D8 zneUh{$9RU4EGQTZ&|g=8jk)GOZvN{B4+sy)#lha#+0fAwVCi6Q=;~Mt^7IS}a*E&;O8x-{3js?c@bdg^B55cL|DTzn`ww+-F>$tX1i1W-8QVT{Vuk_% z0ulrR0uuY1C?>XM#`cB|wx))rW{$QFo_1#T02c-q%m3f(6|3soY%-zwJlD204ocw(MrGOg@5=nd9GQ({3gAzf$bS&(5j*M2d@&DDyagt&+Ue?&K}l-fcb4isec!DG zTqa%zuE^v{XyhtmQu~pJdZbOu9^1xKBz_Y{g4)hN?bry@pf9;f?{s26d`&a&WN8`S zb8FrH0XHMA{{5Dnk;7;lTh=#(92{l^=OkULkh|HrBv><5leSG#GD4jpfKZfAzMeoq zs`eUL2jeBc;)eu-xr(?aX7Z!5^|&w+x<%sxPwt9vX$Az$J3Ifl0HGUa=EtwA<6HYT ztFP}Ig4|7UzS&u&bz+REOQ@ZNDy2X1vFY)=Pkgk0vHXnc(xFcap|K>eg7Cr%ty+w? zL%#F|-X(GNw*{CNvhl_oL@YGLr{^+6jm}pgh_farfsfQoHx`e?pvizX?g}FcZa@(c z0tw|P;=C(olfCuZ$jwtKO0<7gc6wlM8lgRJS(rTft?}V}ApaE={>N_zll;Nz|5zX> z91sxS-?YO2_Fp$PLuRIbXMGxW4x1cEpEZU~>RrSHbhHX@BZtCj<*U{2Io60#h|=wDBGG!R zUg-lJB4d--Jd2nRQoy2=DUFnen3b^ouz~_#r8_Qyr9+pIjc2F>r8y45vN1y+g9Vo( zsUnwEjWX(}w!-y`3!G{zR0<58N&nbBs!bOqh+>W)55Y-_QIeS(;0u@IZR)^|G&){jieqVd84+ATB}cC_GZ^)2%o$x0K=uueJxQP89iC$kHhsRvkT!&fS6?p8+`Yh9I zO*5nwn=Kby#$Y{YBD`L>=^!$3mx<@!iPu={Z$wq?G#;>;0r=Q`tQCY5@WdS4ax;zO z$<$`_g*WMFvTal-l{T)5ifW}LzWNuHm?{w5!sO7401uEyjx_Uq)bnTiivuMJCj~{a z3;c;3N7;Z$7JukORg^(G1tc!r1!!A-!u9(NX69pw*z%(UJz7pbIoi}N9dr9~1*btd z?C1X2RO$)z`?DjOFG6xI^iZD?g82)BG{KYA(a^Vkt`{Z`yq&G+-PV~C6jjHs9bNZ+ zN&Hvq$}-xi15aQ`MkI5<0%IV$;12&5;a>8^ZuDwc`C`;Kw)g7;){*_m zRBMKPXHaQbY}9s8bteFPIQJtgie4?>^y2*hm3(O6dY@m znmLli2j~{y())>p_ojOT+~Lu~JLQAAj`yPbC7P~J9+%Yk%z94WHvo^TI#|fU6anJE z@&S8la&B-+hTDaO%+PKlxZVA7*8a&>>iJD=pNV)UbG<$+r znnFC0O@k(wS^doCckv>3xKFq7(#T}#55`<%Um$2hCosZX4TX8qrL-TNa(b%r-ZeI< zH!tf7_7-rqD@WOG>pOb=Ivg>*miq$v*DyJq-s&;&Cs{*60s%??%`oZgYH#T1-~uqW zwX(1T7`hqTTA3RERqnX_n|h~OefLksM)G|&bSlHb8&i3;9vkG~Y3W~B00c6JDC2W0 z+sKL}WQNRr`M9Uxe@PiLvJ=NEx|iO(T`RN$=~hlzoHj=ptV4b^I(`q@k&*0YZjmq@BWX>v*P$;3)8iQ6|gTtQGMv#$0Tf6A^z2yFRBP9SUcVd8 z=ca05w<`kPEOb|lnAfOC$P9KQ)^`XyV`Q?&W_2cHovtGg%KeVt!Z3aK8?R+wxAbjv zPAE?cHydh}60cI+$c&9K_j~V$<3fn2E7p@LmY@omwe;205sltlWG;_(UamfFziv)jj~9%TmUb@CG}+!St4ZPJC!FQG z7^O^?U7McM8d|~@t8oEYH;5v}OadWv#9geJ!G%6y&Lk~R`t0G=nETayE<}^cv+%^KBJ*WwWI{vAl^W*HNJJd?ihHn(<;3^TN`t zQI&A#2@5?yqnCq?miK(PVjkDprBjKtX_t7AH$-K`n_+K%YL6@!H+zBCQ)5_qN%Z4{ zwtmtU`2A}qf&(pg%l)TM_-ly%O=mK7wX^g5?^o69+p-TQh)}DGAKKh5(Iz5mo>&5YXeF zFd*_b-`c_q@ZbHLt%J!wod4gvbaleEH7+w!@XaGyX#+L$ntsL(wu+-)9`!Ini~~%u z#7c}NO}KM3o0@d`}^(E zCI=W{Mh+5$NE?y};!VIXREcIYa)uTAcWagnIV){2%F*Nb*^%Sm10}N3n$%&{?M?6Q z-73w^kI?0h6UEle%ro^wDv>X|Y#TMQmI-}^q1c{sUo!-XeNJ0ls+A5ZjM0nqj<=q- z2JM?(JAoRv*38G~907M8_aUVtUj4ZnJoJ_FS*2b6TAy-d9g+;PJ<=j5lW)e8h%PUr zJod)f(DJ*`_kPBT18fhi@AZ@=g>Z~n2Iq=j|L6k$r!ro#a#lfx00Qzt2Lh7%o8S8% zA>Y~TZ%6!Qt$$X@*M?52NJ7_Y%d zWZ*Yttf+!Qw9qolz?t4PVTy~XIQf8*(V0W#Dl_~sUk1oRamObTC>?z^^EDhB_rcGY zCR>W*aF(i_YYCI7%*)Yqr986iv=Q76mb^E(OWJ2zw&Xi*ARJZC=yIpcp%slIUtcrE z*(Fum)htiExk0^U($P1bbNr%5Ggsr9H7X_Y>yS7<`NSqwUmvK_?`hnNRQ8*kbrj+%LilBkAaS<;5C{&f8y z!~v4q*P3kJT}v|KHlLI);lzLrop)OBBG;AhE4v^njDCYvuI5yx;g)1wDwRs6EAh5v+EnhfpsVp>4AdF@PU6=j<3m2}L$h$1~OSjhAq=S^VMparkHEePeR|A7%XS9+sCY7dbJd)`LX@ zSe0*?-Q5d5%NwPVx^6=wAorvl6w0MV?VL+QL~_uz@*?`-__by_D2U&Q}oer5Y*ExHb&clFz%lt5tm#W7jhA;cTuO=oi~O{eI;>;VOpH@ztZRS z5}5EnR~+7s&pBt+L)9DPezlkoNyT3*n~#0z2~yo_EIPd~6zLRV44RRAa-i zCi9Q#G43#+py}O^V%a@mjs>+oi)QMxuC3FQeI#DY*^TV*IF9V(n~`*%l*bTQcCE(0 zZ4(kwZLC1hJ~|Pp`o!mSN0)7q@CJP*z2c8aK0IQyDDpw$%Vk(!B)f8m5BuuYMXib% zF4P#R=<7W<)|xqYvYw+zJS&7eYhDv{DL0Qi9WcZF{Jh)y?0)9YW^@bnvMOq!QUG>Y zD}YnBo$Ma1{heI(lBm&WeyXwaWy~5j?hPbZnEE@$ZZZop@Vt`OA~ALUfQ%0Tb9BER zQ!5)zT-mO+9gL*RW)RTuVB>$#7AswlFeyj2=7Q2w2*tr>90A&c`MuxL6k+$qy z47lv*{cywKc?=35%WAmGP~p}O>-z1=YK;(>zhSm$l$0 z2R*Z1EvoPQ-y2Xq>k80$2#CMlbm{?=Yxj#TefQ=8^o2bRFAQ7zIZU(TRO2o)R7+tP z;CXLm+XR%fSNGD}pj>CU>$}>{L!ycY4qkM%_(IM-hQJ}`<7KLX02(KP_s)TpG^_+m zpXk>dyxAv0&ja{a!Sr9yM@DcPV7F{X9*~aB{Zpk;TM-@abpbJFpi5paKP5YGiP)Gr zj5&KRs2gj~U5AvEIXkW-VfU-ycc@+K>f(AnnmzZ@OjE2brCSx#?+Tdnic5UNeDKj% z`W}ZRBbg9wRAc%CJ)bUzodgSTCQC1|I{Jta3Tg_WC^n%+_1ztdKPcQ!BU_Aqm9+a; z)NUKB1at5~&~LpBG?-4H-TC0>Y6WD>y8&p+6)H)8l+1E>USW zf3Go{Omt{A<`0R56@a{1q4mSW7AuQkhASVfPv-d&8qSlOhneL5I$~yJ_w~NwdV~De z5+n={h4c^y2&i=c2#EGSOi6aeR{w5Y^@`ud<&Yy`_k&g`3o(VWAz}SeA4RjhMz7_> ziMPJgc2=Rdff|Ee1jB(!WpdP`i{b0}Vk8hm$R9CWCF}BbFiH+2TB5LX-jWT6af~D^ zVf@b6fl-HUv5H98tre~zYohmyQ4#ewZ{^PM*#j#5k)c%&=i~x-dXhNWNuoBIYVHRa ziWCm{Ckxf_Z!CYX{MiV(#iBfEVpHYulJ2g_03;!FVdZ0Ag~r+Wq={p}+uGI3L-sF@mED-} zpB5S5PF3CPd5esy9Yas>eJ6JxJ3BkD&KVT`5DP~i%fBn#9SnQhe|Aeb=>9dGD%f^Tomea#4 z*nZ2noBiA3X|nch+d zL+P1B{xm06D(L68Uwe`EeW{vC;UxZ?Yz7NaQxiezGsbKpJfy8=VDK;$CUTK_d@6=y z{Q(4cSI8b~yT(btMr4;wQ!GL#yFfBlPfR>U!z?;U+67R(Wo*EwYqwIL@I>0rJ~2st zM9LG9Q;aHK9P)?ARB&z#axnUvRsQMrl{{Emc1Vm%V40a7F& zq);ZQO|D~F7Y>ye_lYANSv!-2jiP*kau~#eog-spm6;&RC|(cPTJXH(1{nZfq?>j* zsDFB4y&tgTDCDX!#fAje7~|(=gQN5#2*S2(At6-n1XP5%WI|9tHUZfUAR~*Ul5PywNOs@k<>Nz30)-2+4Hc7q9Zt|IJcm3Il``fH5Rx}WGf=Y?F03)FjH`4;B+~#E$`P9SmW)(BTwA*vhse~uQgQTq zi*Y}&b7S``uo)xi4bLC@He8@;sS$t5E9=fiD2=#}R_ZFFPY;2}j9U;!9!F}#kA9+{ z&A;fg60DLKj5*32d5T=*XO4a^iB{^ChQdsq}DDJ%~++i9YCLqAsYwX8?c;taYXibkU>i{&+ibAP$NTp7NAgq zcRTQ^6=O&0DTr(x#~75%vWnh_P;xD+sOidH?RaM8k!ByR%KpKQY{@wGRVOS@dDxO8 zi*mPo7*tCeRb?pwN4?z;ib-y)VBwo_l5bMxJB2IbrOcj9doi`>aJhWLfb@Pe@D(Pl zPhxn_aIOi>b3Vcg09s(t@>u`C>tkz;3;emAhWwftPFck^^F9p0=U4hyZK3jyNOKsm z%AloR*$KUX>N!I%r%< z>%#3o7`cZvV>3{fo_zxjsndNWDl(N-)lL%daA0A~f?{T)-|sgq;h3ohw|Ndyc_ zi-Ue0rMI7)ZJ`f__ghtYc1>(d9-D4=f1dXAx@&)C(JojRi=OC%I^5M9Xh8tJ2f#WH z5}&42QdqOBTCSJ560v_z*Z2ZH&65?w4Iz52cq0u8-s*c+_Nx>9^2vimE&pp~)N5WL ze^?5Z9Hp%yC?Lt*q{u7A;Y%6ch_0Gn^+U!Jnk0=s>avr;B;l?a&G5@NiiD_0TnOmH zBJ{_a=JZ;B`3~_7J_i#H-nuGnS-`{N`o?}2HndBwhKD+DH4!E9^oB|yk+M^g31Bk zA($vOy-~PXCwOH0OrFh-kh|b!YV;067ce$%bhxgr3_*#gnmi-Hy{^<8#}guHVBGBK~NyaVx(!rQ>>~QzDnuOV%k&oY;CE*3% zRaFsq*e(e25N0}NEjrq|6S*ju7~GY(3(2DH_BcxR!AfKRrrY}%FjbDnY=wy#xLw-d z={DaKnn=8~_JPovloj30j(!4UsH33Z(zwkq%bE9{_9r6&XQIEfk%rA6ChFl$e&{Vf zD9bC##=b;iGLFF;i6`|#X8dT=*ctQ&mxLh+%wxp)V9F?RRGaxtj*9QXoWkB2z<_BxIYu*QC72-fX@Hfi@mc5vDk=HtL`LI0 zOqh$!5p?=CRHOpyHam@QjOcptz-TV!u}@}3yE>DE;C`%SJb2=4hFiunYnLmbPoyz5 zOAFbdh}-F4tDali)`>GulF;*D6PD0AXWhP7ORAs(IzhJWsn*iULvD0Pw-@@IM4wlz zYatI;rVCwhE(e;tR}#rtGfZp;oTB?ucwm+*tY`_G$vwfYNSTd&Gt!}#iw5Ja7sE3` zJ<*1MF#*m7rxqlMeHdr!7VA$8QqthaZtyQc5*il3Bxm$Iu3o#vZb~+doIh zbfsgk2#eGkSl3LQrd9RIj&GRIbBVsx)5;EX+(=PZo`GZQ&ue6X7y@=?^HSO|MjoZn zxn^fOBSP~3&MM@B;ZbUf4vq|$J#IsK!;8c`AWLGx4p{0MYXJ9+ z(Wn%MSd0~ELGN~+pz@M?gS1sS!ToV;|InTx-T&opj2m~ogL>nYY|u{J2d z2*g)qln^1_t|_^_;evjLY9YZmRPRPSlJXIUwGz2ReByo5d|Xl_3x^Fm_Fuj%8kfNaD~34AWIYY9N-qY(5d z1!nCYbCWVJHwm~ef*8AUY6%3Sx&x(N9zwM8;C>sOxu&ubnl$%8Ao`6DIn?8W(uZs1E z-|-#krFao_w$0deLE5K5bsN5ku=?A4d6HsJmU*e6E#53en1Wx>~BfbSPiRZ&>wa| z&O6=;A?qVw9PzOjRm1}dM}+K@*Es!6_08# zt4QW9PJ$2+r>9G;D>1_;aqd*(sukx|)ScGCR+?WYbf8l!`uA(jTJq;43*LmPmMWW3 zTUy)9S$3=zzjw=^o7YX}sI>$P3KO?HPraa3vquVwt$(57Z=EZJabVp8PzR<@$$#T% z^SaabCv?OIzU2~^)TQip#8?A!5t}D#L^u{{t z2Q}L{mP6J~kQvhsbntlEeuIXqGss>Z811+J$udM#MDd&xyt%T4v-IwpSc!;<>A-04 z#(A>J`FZwpc=$JUj-x^T7S6@0e+l1FDav94^=@$3ihS&eq(WfS=VR#N;{AQ&J*(ZU z@UHEP%1N7RI9Uk|9=;0x*yv!NIK+qFah2u5_44?p`-w$a5!T&?Htu5H{DwQ%CMWsD z50UQIoFt`@tqn~Bs*QGLOEK-!Kjq=ZbJI`hq#9w0j}oBiA?}}cW2o23Cqi2B(N1jL zaQL8VW~W>{?e#u^ym=CdGpPD4_MaORjJ^4zqP1l#Kj2HuG2yp<#T+Y@YVf9uZ(?yx zT27FM!{Z0i5&l1ctoWLkf(0$51iz@>>+?iMdE?k+t`F&+E zC2-+*DK=KW%S#(VZ7>~+4P{SuoVTr?Dy(Do4Z5yvrc7T2h}tGV9FsnKN?Iw$CMxEwAW z4pZ=5n9p@(UgN`xgIq0JL&wHms}u5k@fv77z;3BRmfaqKWy6v!HY3c2;P}dAuKuKj zNnrMe@UOFi2)df-j-nP+Iqt+}hGn^Z2b?(rUk%O`eden}3-(Up2({mE4>v2_WhZ@t zy1654JaEiTb~CB`rF1{VF>Mx8_~I_QcQi`kceNmzwPLYu?QQ4iQ)06B$neDrM3+TYaV{kpWg>N(ek zPG-ygYS4GOE==}mSSq8=gbo}`N?RxCY{OP!G0+OcH0BT{{tXi#lQpdxk`h;Lv~-9n z7~s=s9yhocU&z=W_ph0t1fs1_5ocM^&t#>-9NDpA)6C3HeFt>gOiN|$G;5pV`Y9=s z^RhOd>Ln}5i%mD+A+8S;iQ_#zboHvbqyY3yzC4~voBW;y3r&+vSJZCxIN?1Kd4 zGxj*z77YW9#+fHGWz=EX)%{MNan=s0Pu4SvM0lA_aiPxDCMlaiHL!v=uHVOJ*yHx3 z4H&}qShUZ-xn>#8M60lP<>m%Lk}SN6mo5oU$A^{BHv8!cOhtkEF`@f%OD7-w=g8=9 zjz8%NJr)%|$7fUflQb}K9uzZ7XwcZz5v-&<7wwrg7WV;_e*patgd8RVN9C5u0k6(0Zjy5D3GtKqRfqd;oE|?Dw0?dwxH#TBkX*{gy>sg(^OpvQ5~tmcGq&Z~ zJ2R{}vMnp_&0Tmtg1juYR+*mrbP*ownt0OE+DA@F@ zw2rtft4HI?%WhNT30uVCsO*%W{w7nxK%M(>gX(>g&tLIlnX(aINg zk)n;($5NPE*fa%f(sAVO^w1OfJ=0z3f)Xv3vpZ~~*-8&SV6m#?;sgxAAO|l%6vT5s`OicwT z!N6uftf(EWZay8^w8jKBv;b6n=QJhzLhFNM=@;ys zMiyKXg+c8ll6ga%{}v>+3#XA3Vadqn#y z{PS60itQ)R;esI?$uP)5VZZKqhl(=9gD0h%bBOCBKqm{H9Y3O^G*fR8d1r%3%81kV zT78zLDHXTOY$s!=cAv5?@3c*Hy1FtWSbr}0bX+E?ro4&t=c^N= zTC#$c+GOa2JMewB;HtmY4r3C)O({C^XKC!&==f)sHWjIGWX63?i;Xi{a(#gdm4-nxSgg~eAeIh5PRJMaZbF_U!CEY#vpnCZs%N_Q{ zuIH?9)ADCF!*ykXFi(Ex{FL!c27=(k{5t4FuILwe;sJ2lAKE9~}Sx#bz? zz9)D6dA01KS$#-}!{IZ>!J_JVs{XvB)+-qPeZJhd28`pk&A6XJfDau49PJzZe|nRzVmrTQXx8C7}I-r!)Wbr->QZ+q;I`5tH#mi0wplr@x-KvD=*6!U93rRw z6!S^#;>A5l-{eQ*4vL$klsD+==x~|8OUlzo?nj_H88HNNwH-_r{fI%P+piKJG;$eNqu(DtJbP_=Vn?OfF0SWDT zGnA<^{y7m0}- zC;uv7jC+xRVobZz{xvwf%g7*TKqdL;94IR6UX?(&xE75Ibv?Er(L6=C=~UM9M!37v z^-C~EFMsyeYaVv_`JOPULXEwl-pq`4Den(L#yhV>S$a8(JXBe8UtbmOSV?YWV;umfz+0J>T-hys|JvK2H}#M{ScR>dO?mc*d)fs-M(R5iZ2@`q z$(rQb9TnZ{xe3pbvxZJZi1q#O zI8>nW(b>pC0tU1SLg9XFjf*F}0ih|o33 z$Y;qM&@d-onKI`qjzxsC!>bCs1Tv>#8o=l4mb54J=5)mEn+{dTKl3C|<`JHb;_R)Y zwKU?vE^F9MnK6Ysh0vIfdL#np5_YS zT{Q*O%(6;%+vh@SXVn0acvS=>3_TQ-$6l==00w?4zi+ zP632cI6te3D3hZW^Rm%77k&$U>tI>WEaF&On}CQGMv3>J%m1k%PKgtdd>UBz$AP&| zy~R5uE7cJQo64SU<2OD^q1L{(1=au|4VVP<(4qDvb6pxT2GUde)Kb#!RDuY%E3S@& zvZewRl_yJ}^u1*~WD`?Ct@@s6J1=Y96=CyXvKNV64Lm&y`TO*cr=&a#v|;t@t_Jg6*5qGC)!XcRF;| z6J=t4Z)VU<&5=2PaMqi@YR{fNV2H`gc~cy<_}>;`+$O9B{SH3Ga$hi(`)(8<>rw#z zHglVEvj_Wq=lj!5t63?jIMU{C$@^7M+`vdsv6h=E`@Ev4u|L#HNMc=?;6o~diH@QP zE%9HikLSm4we4Q}Y~eOdF~8!n6n*4HBsIRBL+_=g(!e=o-W&_xXmt?aD;hKB#fH~-&2 zH2)!xE5OS3?;Q1kUXC^;{X-k%|3fEZ`CAzOK>9cOWUKKz{GkbNKhh#h8)2)nxw7Qt z%SM_@g_>i|9IO|R#)C*VJNo&=61G@rN(5NeiEnQocDl!U`>&7puPoM69dTJ5_T`~` z=c}$_Rk>2E3|y|Df)VCjOC$-5*+?^V8sJ#8+C)eo<$`&#f6V7vI zIu$hKX#xY~mJDG{24auZ^+m+WgoclCTsHw_(t+X%*|J@N z=rK@jC&6>^&?anBGn1?8G?=QD`+-;?PJ1!Pm%Zg*?}@8JEI4GPL%pHq5lBK9$&X0G_4w`T-UTtZ+Z-OQ6h; zBl2VO2TfWVySsOm2QA~&Vr}khxJvfqB{0XA$uV^#T)RXuR2J!K$6NU@{wx><1(GL( zaUOI@c7fPW)Njbd$TYA#g#={HX_KJwqaJRaO8-(+p5b5a>2!u`! zTz=E|)2lbkFTC*YxS{D?PT`CL3twu#bTc4SgX0I#$5RVpM{hpkJJBjc!P(^Lx=l@W zN2ju)1c8PH|CL5U?mWL4|Hm9({*c)@|CTwLTiKc!{wFrstI?02B)z2oRwfKsJT;9@zo6*>QuIV6c=6z-Gke5Q>RsLVHDnz*VBGl$p7A@Kl8J;kA5s z>SD1M%$WjbGs~h2ytO#CjN{p=`?oUJM&+D0kwD}9AULNizuIu=(818a(ez7(NU~Z{ zu}`?WW0?|uJjY?~pWY$!uG&~}lIBbY_(_u#Eja&_0=I+DYBT7mqNyqe1t<7zPl7Xx-T{R8i@cu;Bd0VXZh@fm(6w=c=1D2?&d1IoIk+8g*a-==S4#Z;2$Zd!(0xC+-c7H&t=_op1W$Xw(mu0)YX*o^p&$YHVQ z1t^fSZF6H|5~evAx%S6H2=J>TyhSO<6;&v{$j={X7&(X$56BLrbApHe5CHcuQ!IeA z$<_z8RL62(uhP8X784E>Gm>#({gR8=>UgLvu^a7ra3Ix?26HXw3pM6Axl&qH#{O`%D9mz7GU6S@vc z?w!pv{+bpiT)Y7W9s&j^uMS1npsi$&KsX^r}Jlsm+@tA$5aB<9mTE+!Q(oOfQvc)bcHnrd) zg$A6&*2?H$93v@i*c)YssXdTnzhUjP1zIIk?Nw{QW`vx^82bfa&sQ#S&r3jnBA95p zVkLxO@QESN^T_%^x`Ut$ja!Q=>lv3~_{TY9=Gjse)y>A4K9skJgyM+6a*hHz;3FMP zuvgIllFu39!MBXy`)zv-)UdO(KKENTb)!cZBDvEKGUeqYD1!Ke$igeGUIu)tzCQ^2 zPz^I)_PyJ1wzy*gqxgeQh0QP!C8FK*>0}VZ!rY-mq*-kbtOQaB zC|A1BL|n|!lt(noG6Z zLeA6g?8L`Dwz^~krXg(Xj31>g+TRVGH)&_zc32x#h}|@Kjtj=Ez_xzQ23Nr+bF4Js zjJAmtF2k(-2|EE{!X!Cp?iv6zc;c@HObWADCPS75)<2n?&Ae35bgXtIcRAjC2`MST z=11vF?`Y|MFtA%8c<@9lnuekGQ@iBmo1BVTOa6mgdy2S~sovOYPf#U!ueCyssx$gw zRruXmx~lxO!YydA&@8)}u&1`a;15Sj3UIBXH2-0XZ_30&#moYgJv}2~FR#>eaY6YO zMrCZ~=3eIT%qXgf+S&4U1N40q+F;ONWQ{bCgHdV8n|3oq-9Yxtj4}DT0reH>#Udo5 ztDbOHZW$WgGWj}k3T+|froZ;Y7P6x{B*IwSi;X6}%Nk#a3w}>D@PHZ&{C2=gZ0!Qa zL|v08i`lnXn(*M``xQwaGS;w9P17lk_|0cHq%hYee%aa~S3f2j{0d9rNB!-O90Z~v zs8w!p8wcg3?D%rt<8YY@dM)gT{r=n&(B>;yV0|=Qob)h`4~Z6Z=pV3oL%9j8X*6Of zK)@0&AFUJ0J@O6eHD_DLA||SL_VP~RVLtrn$Wy7k{+vV5USiLntB)1fCGwORUf*KQ zpuE1h4m$1F*t}u$SVC_jaVF21m*f*>51{z$L6`7nxn(+pQo@{=(#2hQHYzYXt$m9v z?#A-xC5gafY+i6H`^40xbFsIlfa_i^S(oT;r}))b&%nAqp<=kiNgEzKkJ3V=0r=K) z!Q8wq<8R8uNrP?m>EA-5tht~gjo{*z5n8V>cc0)O8`D%(uEdQBn+zu9L?eSKk!60- z1vXDy;7F%ure@jW!tue^I=2{M8xjXc3h9BGIZ3M{#+g|?qFy?XMTz>9CPTQgU0dk@6H-j!d9pitn&pVI`Nf%#~^ zdCLgze8!MrD^MPIT;aG&GwC@i?Hn8|Qdcz{e6=71v-J)2p*}HdfW8Q4edxW)>xZdb zM!t}0`6wncBQqWR3I_Y|QEcYJY&^|dLKVJRECj%Fc7 zd%j5&s%T#1bptlkljzkC)|6A#G3X*tUbS;!Y!t5<#O3?6I9#jDo|3fq^>{lqk=}#9 z8iDfPBcGg_ahOA)eJ+*aFOzn{6HFR+n)U1yd_0VUiAa zD543ZUyvxUh0@;S8Y(FYY=&Hao8tQxu`70%2`;)VuMjxaTknO4>=~C`z~l6l3AX_$ zWP@vh`R`ToVGTZ-;o*Q!r(8cVjZaKN=xL=V5+172iP@wW1KxwabK7<*!B!Jnz+Q|T z=sQE(X$0a*U#_vVr4ov#1i1x5tk8nJ#Vuz#*SN@CaB!Vo=-FqqRD}_qvAR5Ww-iiZ zhNYC6-m-k0?0(hb${p2*5DT=B{$OYXQ>V|j`JmsJgh@B>-gJy9dO007vI-?G$LwP0 zV+WL1_y6RL|1G+RfnzH_7Q1}D9n8$LaLka2Q;OdqXSe|v1b)xI!}FhLs@VT&Kuctm^C) z5CD@hhq|Gi3l*hqcV;1kVLB~Tn{dTmN*=uxbM!VYlI;3 z)`}EHedkgQgeuBzgX$I6z*_T9K}pa~&D!olkZzOL*J^reu?*0gcXaPs?K+Y@Cb8FR zSSj_z{!XDhBhhDWyQK-PM+%knx<}4BSB=UBkgQu!oGe?Z)_#+)qzy6FhSz39xd4hwIO(LC%8)pPH-oQtS*)gq|L zQpeu+!WH`qs)(NNU?Snn)jW%r0g~m=+j7~Hq!h=<>+Ej-!2_JiDLo2!Y z@i1;YG8%y2wmXMIsqHPliWLDL3*EdWY;C5mn6S%>Ga&gIe3!SfnqxN3W*sn!`);-L z*qz*{@VS%rwlLzg?TJl=ibt((0|A63^`=P6DzwTgbJaX}$*{{*x4bj06xN00Nt&$y zoS8fX(B*S22p9iMj-~TDA6c%PGnf~tz~BANAW!Jv*fGc6NWP)A!Fy-4Z_Z?9my%+< z|FO$_Bj~gc+hE*GK{5Bz9xhYAFs*A>GL9#OP$l#7^Bj@$1i}sw;}>~vyeOWxRkEdY zrs`vqE3DCufDiiuFM}B612t91X5bxifxZJSfh{4PClz^CGwx2ckbdRguO>-QY*+Gu&FI+3b87{-3u){M_eOoTu(~Z)v%wphZ zg;DAlGtv~Z^|xY{H(A#n@tYZ^JeKU~kYq&ZZ?4Ft;F6+BxO4S5di%Dpi@t1LrYo_< zd+hWJwm6Bya|w&WM(@J-afsC~Crd5Vc~JVSy(_L+g%-ygZq9owY}iIY{K?aO2mEaX zXDn;kClsrcHVn0%vkp7H%5nUGkc45_4HweZTFb(RJ$-y%>XF?gL)V8VccHXucEa#& z#`5PkV$W?}U-1gN&M_eA&DjiV&sv9Oew%zb&jFD+pfuaQC~(cy>KTxQn3_IeGA=dgEF^@zW>GT5>nU|VmpCAunS_8~&XvsBap&SQeQ z*8QwFFxO3QcDBnmJ_PN1liA0?qtEiH4IQq-b@mo&16SjLm%%;O#128K37 zO49Iny6N3a$`-&z*5t#dIb2a(fX*7~ERWo)LG2rIQ1w!f#-a&))^21azrj z_MoO_&^bbNUd7r_j27;`YTE_KPY-%_BP7*w0_0S0l}?~vOSii;k1SW_h??3IOSMPU zEHk|t$y*{BoF}3rO1VPRNUejHasW zkB91$NN72(+We5P3k=JQ%MeZVy)AS{kloi`_S+e&i((v1)B-j9VUoJ>Dz2g3uKy_R z{<+tU^CCNkyDyU#y-zUFJZ-Q0e|uaSJ1g^F2^hJ{&Y1eqA-JDW1{^E;#^v~X2$Eai z`;)}KhhU1((C=Grb{wyobI%te=x4W;ddVn#Fku2Oega-zd49ZbBd8v)6c4i+b>?(=Kg;DuFH6APw{SF<8Ylgjnx!Ohz3Vd z`7n++%rUTV$^u;*sWH|ptiaocgG}`@A8XikWSOXbQo=N6ctm5cFJDv%IYY2HA$B5TBr=5RHZYucX6vRn+h0dQd#3O4;P`ZM>-`qyn|UPw(%DCt1t| z<#git@Mn;SFY~{r5Sz9RzCKG45RXlMt&TDWXDsun+R5qdb(8J$6Cf>sMS-c)*nOd~ z2ITre3J?0JP(4szP)&VKRj4!0=S&JBc^Dc-WN1|Mw%A=Ftu8V@Gq|bOXhtuaQCJxI zbS=MZkYp(+vaT2xO+WLwxgnm8hGmLN#%yZF2P=K8lU~ISQx9>SXiXfHXcSHf2RKp~ z2YRp=T~^-3XV`V-r%guuN8`QrV0;IQ zzzw4sM~(oxHXCFxX|}Hd!~s4_C<82rE znxn|m1uvc;V0~g97!ej%69ot7&lR$uib6uw6%}4}=wu38yjBT1MiN)pw(*DgR5o|J zw8$8fm@iWpKAXaQ`<4=x@IIek#>OO6+q+5`6&%&MbQs)@KR<-loQlU?C!WntBi;0d zWb;VmGN)BONyKVP)BA{~71B3l!W5Nx&m`NA!7#_jfJh#c&lIW(LZ}VK7 zu4Rz5N~nZ_pmnpAv1Yv8vix=Wi@rfQIr;26h7C(q0z`$!N#Z1OQmXp^Wr}aE?sC?? z3T7SjrE&a4iKBe3VYh5YUv?Px!RKsxLfW@{j$C9G=>?X#-n!7ynT*f9BiPgsD^RL* ze1;YV8W_Bun9(`^K1_D|c!R{4#Ikj52MEo=<$d>SMT>-dSJwT`v5vAZ!GI%rZLHKF z4ejjbhVpEr!KK1T3NXpd`b);&z^2)8r!SKEnHZ8Wl$bG;LR_S_L(xh-^|{NHCy9^V zA;A<@J)6)ip);3gI-x;|=O#^hll%(OK@cA2&ZdsfSUCI=wj!cP%o3K;3E_Gk^&>Dr ze0~s1-S>b`dQdyIxz9v&kI;hisOMt$isimgohJ7Yr0dy?V+i22_X&-dqQmO$w;i1U zieahN=Vzek_BF9VZ$wJ06D}0`HmJ)x4FKZN@l?~2 zNv#uX?TLYe8m;OY^}@BCrEN%+-0CK-{NSwptV%FnJTn+{Q+oW(&P7D9x*tBJ{ zPZ<_h)-@p)+}YwhM=#JxSG-@ni~_@U-Ar$p)0pr00zllh?TwWR3DCyy3-w zfcz--;2oA>p4D2L$9e zG#kg;(z=;DjEfrs%(S~^hTHvG?2zV$T|()`Jvf`hcb@*XvI8#|)J7mDj!33FY(9xe z>vFNY;3l~>5vjqBp2?jE+~ei3gT_QOM7brq3N4{jTqM=K;F&* zr@kA^71HrrLxres6*7~B=Ul|;nd0WGUo8v~-&s01owFv?Fbz(F1()ino|7dGkf+6u zTgiXI7dp@n9kUu#dvBa;X6MP-`AooDpBMJq3H<^V-dN-WxZ|hPVcbtw0As&7yhXmb z>3#Y{`R0+akpxE->kKj(CX@=zKE=9lls}**5B(k-C0mt@hNr;%PmVf@w{IT@+#2 zhz*;J*y#y?=z;2X6hGa0X8Ur0ni-qle7lz1tk@Juk(50a+%&5OjIJDfGDom*JT5u~ zK7(EKdIlj;wde%-&K;yO-I=eU%YRa$%yVY5SiN=D{~(LB?o-em)A5?43o0P%Y=pv; zxDo|*zkNI9L)vZU&TAKVSGB7?V$)Mvtd0XOngalCGcsObDlJ}=wPZX{jR{jLQS4QZ z56g4Qc*>Zn$bAg9yPK7b&AzB1XR)eqQ$%G9im9>%OWkUQGWd_S;-9s26bxKP-aI~9 zU`X@VyT4Wf^yB?s;*mB6*7hd%7fb$7Z?to=`_`Xz$NFz)VEbD-l@ir2MY6zwfUM|%fOwzuzkeY7l<4`b^9wZ#%Vjo%+tfEY{_x=B z*qWQ-q>6=h`8k@|K_xJa69xQAH1s4jgu>Nh)Q(^8JUm`^a}q)-&Jg1xbTAHud}bVC zdx_hEU_htFh4@(@oFPyMMNTl)9eui}O6R-}^(AcaB>!+caswF6bC4AV{6LhArPnzA zu!zhhBRe+ZDyw{7KcUuw&c-^FoHOGzXOj z=v?O->J8nXqao@$89yh}9f297_wKevmkDunU58jy?tDcfo;SQJmQoc4Qpz9YN@D+B%_^4B=en>p5P1hvHC~U+B*xp_ z3iq$9$SP><;$ndAo05;;{a}PEL$!QHEkj4A$eyo8QmxCCAnhE^p-AQWUTq#wl#W{# zD@aJHFKsXfu-PGAFI5Ol^}Cqg30WIY=4!%LiD7Eipl+5YnY@;fwscMCD;N=&`h*~u zfMKOG#u(-%2L5la0e#=7K_PgPGH`dj348ZE%YF3ZRF4sZha zn3c(}r0{WZ?Mo9$>qDC9r(%H49V&z409dMBzM-@s#3gyZpqO;S9AX~)i&`glDj#kz z#58v>A`c$*X#qL<^;tm2jDuORdkkuHM7Ow zk!#6$AezxwgL%9VJaei+l32_$VR($hB4022RIgW$yrXh)^*!&xjljDDOIgo+i*!8D z)gl){Yd*Z94Bngrb|bjuM5BYf&O<;3qdP?HEdy!2(l@jw@2@fqE29QX=!j6K0MMJJdu?Q<&xA-3s& zEri3c%D`jxO`2I_?@JPPn{}l?-U(L0M0G~il;oLHm}ElR>6xJ5k1jbR>k=fa z6XCoS8LAiRObMtn5zN)_3Yc^HTIx{;Gsc(T9@w*CBHxn4Tp`QZQ1`|KKe@y1;diwe z`ipVF*zYyRPB&JzOjW3tg(z|xgY;B0mt|4Vb~)ezaJIiJY2~#WD6JmGO?#SHs1}b+ zsu+P6-xjY8^F6O}CQIC*C<$NV%}Z#xRgsZ+ttp7io0Mw`Dofz>XdoagqyJ7t{7LSQmFp>rDH_{h%iV}~gKw5T;sg0x`A*9t zy~q}Hbd}5QTg`5~V!~9#8}o9!maE}n)UUd8EyV9~sGs?w?YaoTq$|-}SXjTMJOO_O zNi6)L+HD5TaKwYo>V~YN3~|@Q=CZGArn?I)r@1+t4#V7P16!=J^Au~q*j->{biJU= znrp}>s6#C)G{uQN0Sl~ia`G9z#gI#NnHi7EJCqs3J8GmEYkn%9gNp6+%GJA9#OAK^ z`whcJO2V4>jT~e_a|bQa`A6iE_^{Qqwt5C`xEKeRd;Cc7ao2ZlY^(46c8bAN(lNW~ z@7hvroe>?|?jV--DbqDP@i9GYHdFFnMOAVsBM#X7;r7a1@B2Cs-VmK&5evkuFLQ_q@ko^Ln3)WA>dl9VW=zKnBzxuI}D%G zot~nB)ANFrRnzL*--VlWCYnU)N(zHHmp)Yr{9=*U5v?Xyg;(y8B4&Vyk$90D@xfu_CV#6sBh5?X~7QAsOw z2F>hVksCbz2KzRY-8ljTW^Jb{s{uWs!1zNh1Vm>W@NN|tfTBBQCe1(Wjkf4#)R^3^ zcROtz>gth5-F}|!&>T@d$S!y&)h$jAblsbD4!mMT<+vkA;PsJ$CL9(>SsQ#v3pIyY zZyiMKr_TEs1M`qR(wF;Kg}ysk?&2&`!Kk8n-Q7;|{)2=Ns=@&G-EBL38u!il=KbP= zdU{D>2f9XX+}DxQI%Nn7Tk>kgQ)32YXDvHS|+%9oF^TuS=*frLo|c z@MR6&3~e9?=puD=nHt0wzk01_9lnkvI%OhWrjZ&Q=wnUq$e(nF4PU`;J`6PDm9X#5 zVclpyE>t0+?Y$$2jn8+G$iQfW*y1_pcHJMmUyMvw5!dM z6_=!fSu%;UPQz8T?Q(KuKZYln%xdW4qC1;&43~?Y?h_{sI{Fa?xd)`u@y<`&7q^xQ zlz+rSPVaE2xOVSN6a@v&01{RwdqYJq+7ybl+!p~JYvOz)Bz5jfEOnzga}B`}2gK0` zhMo6Lk;SMkT*>@y-YtFv{|q0WNzp$;Svdyy19WGHo(L)pS+D9iU&i~@9;rFn=$v>U?tOveuOV{fOE&d9RBSG5sBNT2!q z%#p$(IHA3;EZI}JfRnIl(+u6SO%JI8bnoIE79%Y?cmspK*`?r)Y`pg_jKbzB569iu zkbgVJ9%lHe62)f$WIKv)bZ2NF-ksJd$=wOF!aGiENcWP(17xnNI!t%x7CtmkHEx(B z0}4ZL9C+SVT^GYwUb~0)C{>J3inR)JSUQ&|;#QoI;82H%{Zp~5wOhn9suYt-T`PD+ zk5aL8GEXdVw`rQwT`8~R=kC7WMOTiMuwoQbmU@+k;O4}+(s2p*GvQYNY)ZOKhZm7r zH7{3N*qOU3WL6EgQW7q8l$niE60$x?1z&IHsO!5{x^Phs>zm1Kd6`}<48yfJ0s)z4 z9gQOJ;*sMb(QWU08eZoq7P@l{hNzRcEcdewwKHcPEYRZm_Z8dsjd1d$xLU~1Wl3!& z*Y0tq>}chJx)n|D4WwvBa3(Ei*70mF$e--;(e|c^1tRY-S3|iXGta$f_y7$D)zHO3 zCC#|G3U#nk&qwA#Q=*@dRYVf9UoV7Rf%z2&&vw5&VIS0Y9Il|3 z^du-wxsEq07?$H?yTq{7uN0+uZ4IvZR(s~_j&Non_+k*WM}T9_w0x{0eJAZ#KbLCS z=}_I}H=&vAQc@736|rE)`0jW1Qu{?}~=1 z!f4+hymPE;by*A5;kh|_!-HS)tiGJFlp5b6UwD&mFSWls5^b*`8IPup3bR$glW>*E z6EcV9<5(%4#Of6(swLMbC8U4Hj9x>qs)PdTNr4{(h|R%h)y*dVf@V)>U*}OI)IuEd(3Aw9jE%xK69h911t_Mj3We@>=82` zc%IRE?@i`lFBA=nQEV)D=t?2dV|TAUET3r0wG@4<=eg;i3Ruyvaj2e+r@!?_TBq&> zl7jd45K1u+!`j1)d4*NH{80wHbwy^OyR;aX*h0G}L&}uJ48gh5kpi??&E2lw=9tUA zI9E%7ONr7|vd?hD0n0|MxY)qq*i3Dvn=uGctij2|4Yx$IMFKV@X`UO7&#-@4w9Z^c z90&7mLbVf0cYLZ6?odyb5x?$00ID?>1gK&)H5P_WVfh~-3x z#cUP(f6kQ190P-YaroJ`n#?s{z3I|dcahNl4T#Md@A^C}8<`J^7>e5BDmr{r>)juZ zn15Qe{I97B^^=k#Prg7341x#xZ=Nt1|CjJV0NUmI@$uIVG2nkX#Qcw&ip=Yu2>%<( z3!sMxO8ObhRFC5H zx+n3gmi#NupI$G&Li`!;W2cvg@vi+Q;=lX8JdMd?w~vQR%e-$SG6_KA~B+;m zN1h7(?}aG8ivA~s$2Wo=QfL%^QuL4R2mLqZ|9>IoAtr;wuQ4B7kGY5XM_0Ya&rOdH z{2oFz%KsYbVJh^`H0ZB_`{&_A^!IT3@tb8(_%-66Sx!ZTU*Y`hxW^}d4$)d>MDVR^1B*5=0k?#}Z_b<)+=Nu%%AK(5TuujpQ literal 0 HcmV?d00001 From e3b0dadccdbc60795d3158eaf2d62feda4c5ffae Mon Sep 17 00:00:00 2001 From: "linda.nasredin" Date: Mon, 6 Nov 2023 16:25:25 +0200 Subject: [PATCH 05/15] Added test_apply back the release, but moved it + the test_plan to be after the "release" job [skip action] --- .github/workflows/release.yml | 42 ++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a1ba7a51a..ea0ddc7ca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -175,22 +175,8 @@ jobs: secrets: PUSH_TO_OTHER_REPOS_TOKEN_ADMIN: ${{ secrets.PUSH_TO_OTHER_REPOS_TOKEN_ADMIN }} - test_plan: - needs: deploy_modules - uses: ./.github/workflows/plan_cli.yml - with: - use_modules_from_terraform_registry: true - explicit_ref: master - secrets: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_ACCESS_KEY_ID_STAGE: ${{ secrets.AWS_ACCESS_KEY_ID_STAGE }} - AWS_SECRET_ACCESS_KEY_STAGE: ${{ secrets.AWS_SECRET_ACCESS_KEY_STAGE }} - ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} - DAM_LICENSE: ${{ secrets.DAM_LICENSE }} - release: - needs: [test_plan] + needs: deploy_modules runs-on: ubuntu-latest steps: - name: Checkout @@ -203,4 +189,28 @@ jobs: gh release create ${{ github.event.inputs.future_release }} --verify-tag --latest --generate-notes env: GH_TOKEN: ${{ github.token }} - + + test_plan: + needs: release + uses: ./.github/workflows/plan_cli.yml + with: + use_modules_from_terraform_registry: true + explicit_ref: master + secrets: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_ACCESS_KEY_ID_STAGE: ${{ secrets.AWS_ACCESS_KEY_ID_STAGE }} + AWS_SECRET_ACCESS_KEY_STAGE: ${{ secrets.AWS_SECRET_ACCESS_KEY_STAGE }} + ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} + DAM_LICENSE: ${{ secrets.DAM_LICENSE }} + + test_apply: + needs: test_plan + uses: ./.github/workflows/sonar_poc_cli.yml + with: + use_modules_from_terraform_registry: true + explicit_ref: master + secrets: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} From 407b9831de150fab5098ed726b695a4b060cfefa Mon Sep 17 00:00:00 2001 From: Sivan Hajbi <117824107+sivan-hajbi-imperva@users.noreply.github.com> Date: Tue, 7 Nov 2023 14:40:20 +0200 Subject: [PATCH 06/15] fix upgrade permissions link (#309) --- modules/aws/sonar-upgrader/python_upgrader/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/aws/sonar-upgrader/python_upgrader/README.md b/modules/aws/sonar-upgrader/python_upgrader/README.md index f5ec1e50c..b94641941 100644 --- a/modules/aws/sonar-upgrader/python_upgrader/README.md +++ b/modules/aws/sonar-upgrader/python_upgrader/README.md @@ -18,7 +18,7 @@ Before using eDSF Kit to upgrade DSF Hubs and Agentless Gateways, it is necessar If the DSF deployment has not been deployed using the eDSF Kit, it is also necessary to satisfy the following prerequisites: -1. Grant the DSF Hubs and Agentless Gateways IAM roles access to the S3 bucket containing the DSF installation software, use the permissions specified here - [IAM Permissions for Granting Access to DSF Installation](https://github.com/imperva/dsfkit/permissions_samples/DSFIntallationAccessPermissions.txt). +1. Grant the DSF Hubs and Agentless Gateways IAM roles access to the S3 bucket containing the DSF installation software, use the permissions specified here - [IAM Permissions for Granting Access to DSF Installation](https://github.com/imperva/dsfkit/blob/master/permissions_samples/DSFIntallationAccessPermissions.txt). 2. Allow outbound connections from the DSF Hubs and Agentless Gateways to the S3 bucket containing the DSF installation software. 3. AWS CLI installed on the DSF Hubs and Agentless Gateways. From 5dce50d0b68cd81813b16c93b9f45e2016d2560b Mon Sep 17 00:00:00 2001 From: Eytan Naim Date: Tue, 7 Nov 2023 15:10:30 +0200 Subject: [PATCH 07/15] Azure | change readme and dependency --- README.md | 97 ++++++++++++++++------- examples/azure/poc/dsf_deployment/main.tf | 3 +- 2 files changed, 69 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 557b076c8..37ad8e5f6 100644 --- a/README.md +++ b/README.md @@ -1161,7 +1161,9 @@ terraform apply -auto-approve | tee tf.log Below is a list of possible issues and troubleshooting remediations. - +
+ Common issues +
@@ -1171,6 +1173,46 @@ Below is a list of possible issues and troubleshooting remediations. + + + + + + + + + + + + + + +
Title
Sonar HADR setup internal error + Replication failed!
+ Replication script exited with code 1 +
Contact Imperva's Technical Support. +
Sonar federation internal error + python_commons.http_client.UnexpectedStatusCode: Failed to run: federated_asset_connection_sync. Check /data_vol/sonar-dsf/jsonar/logs/sonarfinder/catalina.out for details.,
+ status: 500, data: None
+ See log "/data_vol/sonar-dsf/jsonar/logs/sonarg/federated.log" for details +
Contact Imperva's Technical Support. +
DAM configuration script exists with status code 28 + : exit status 28. Output: + set -e + Rerun “terraform apply”. +
+ +
+ AWS issues + + + + + + + - - - - - - - - - - - - - - - @@ -1291,4 +1306,28 @@ Below is a list of possible issues and troubleshooting remediations. -
Title + Error message + Remediation +
VPC quota exceeded error creating EC2 VPC: VpcLimitExceeded: The maximum number of VPCs has been reached @@ -1237,33 +1279,6 @@ Below is a list of possible issues and troubleshooting remediations. If you intended the DSF node to have outbound intent access, then make sure the private subnets have routing to a NAT gateway or equivalent. If you didn't intend the DSF node to have outbound internet access, follow the instructions for 'Deploying DSF Nodes without Outbound Internet Access' in your example's README.
Sonar HADR setup internal error - Replication failed!
- Replication script exited with code 1 -
Contact Imperva's Technical Support. -
Sonar federation internal error - python_commons.http_client.UnexpectedStatusCode: Failed to run: federated_asset_connection_sync. Check /data_vol/sonar-dsf/jsonar/logs/sonarfinder/catalina.out for details.,
- status: 500, data: None
- See log "/data_vol/sonar-dsf/jsonar/logs/sonarg/federated.log" for details -
Contact Imperva's Technical Support. -
DAM configuration script exists with status code 28 - : exit status 28. Output: + set -e - Rerun “terraform apply”. -
Sonar upgrade tarball download error - missing IAM role on Sonar node EC2 Connect with SSH to the Sonar node EC2 and fix the aws cli profile misconfiguration. Run, for example, 'aws sts get-caller-identity' to test it.
+
+
+ Azure issues + + + + + + + + + + + +
Title + Error message + Remediation +
Cores quota exceeded + Error: creating Linux Virtual Machine ...: compute.VirtualMachinesClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: autorest/azure: Service returned an error. Status= Code="OperationNotAllowed" Message="Operation could not be completed as it results in exceeding approved *** Cores quota. + + Increase the quota using the link provided in your own error message. +
+
+ + diff --git a/examples/azure/poc/dsf_deployment/main.tf b/examples/azure/poc/dsf_deployment/main.tf index 0cab45659..9fd8da2a1 100644 --- a/examples/azure/poc/dsf_deployment/main.tf +++ b/examples/azure/poc/dsf_deployment/main.tf @@ -1,6 +1,5 @@ module "globals" { - source = "imperva/dsf-globals/azurerm" - version = "1.6.0" # latest release tag + source = "../../../../modules/azurerm/core/globals" } resource "azurerm_resource_group" "rg" { From 396c8506fb86565b122ba3487ea9675ffb26e3c7 Mon Sep 17 00:00:00 2001 From: "linda.nasredin" Date: Tue, 7 Nov 2023 16:23:50 +0200 Subject: [PATCH 08/15] EDSF-452 Add outputs.tf to the upgrade example --- examples/aws/sonar_upgrade/outputs.tf | 43 +++++++++++++++++++++++++++ modules/aws/sonar-upgrader/outputs.tf | 4 +-- 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 examples/aws/sonar_upgrade/outputs.tf diff --git a/examples/aws/sonar_upgrade/outputs.tf b/examples/aws/sonar_upgrade/outputs.tf new file mode 100644 index 000000000..84e79f4e2 --- /dev/null +++ b/examples/aws/sonar_upgrade/outputs.tf @@ -0,0 +1,43 @@ +output "agentless_gws" { + value = module.sonar_upgrader.agentless_gws +} + +output "dsf_hubs" { + value = module.sonar_upgrader.dsf_hubs +} + +output "target_version" { + value = module.sonar_upgrader.target_version +} + +output "test_connection" { + value = module.sonar_upgrader.test_connection +} + +output "run_preflight_validations" { + value = module.sonar_upgrader.run_preflight_validations +} + +output "run_upgrade" { + value = module.sonar_upgrader.run_upgrade +} + +output "run_postflight_validations" { + value = module.sonar_upgrader.run_postflight_validations +} + +#output "clean_old_deployments" { +# value = module.sonar_upgrader.clean_old_deployments +#} + +output "stop_on_failure" { + value = module.sonar_upgrader.stop_on_failure +} + +output "tarball_location" { + value = var.tarball_location +} + +output "summary" { + value = try(jsondecode(file("upgrade_status.json")), null) +} \ No newline at end of file diff --git a/modules/aws/sonar-upgrader/outputs.tf b/modules/aws/sonar-upgrader/outputs.tf index 33389302c..74c16e3d7 100644 --- a/modules/aws/sonar-upgrader/outputs.tf +++ b/modules/aws/sonar-upgrader/outputs.tf @@ -1,8 +1,8 @@ -output "agentless_gw_list" { +output "agentless_gws" { value = var.agentless_gws } -output "hub_list" { +output "dsf_hubs" { value = var.dsf_hubs } From aa81a992c0a6af47736a49505050f592d8d39eee Mon Sep 17 00:00:00 2001 From: "linda.nasredin" Date: Tue, 7 Nov 2023 17:25:05 +0200 Subject: [PATCH 09/15] EDSF-279 Handle deprecation of DSFKit old versions --- PREVIOUS_RELEASES.md | 119 +++++++++++++++++++++++++++++++++++++++++++ README.md | 92 ++------------------------------- 2 files changed, 123 insertions(+), 88 deletions(-) create mode 100644 PREVIOUS_RELEASES.md diff --git a/PREVIOUS_RELEASES.md b/PREVIOUS_RELEASES.md new file mode 100644 index 000000000..730f65989 --- /dev/null +++ b/PREVIOUS_RELEASES.md @@ -0,0 +1,119 @@ +The following table lists _previous_ releases of eDSF Kit versions, their release date, a high-level summary of each version's content and whether they are active or deprecated. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Date + Version + Details + Status +
3 Nov 2022 + 1.0.0 + First release for SEs. Beta. + Deprecated +
20 Nov 2022 + 1.1.0 + Second Release for SEs. Beta. + Deprecated +
3 Jan 2023 + 1.2.0 + 1. Added multi accounts example.
2. Changed modules interface. +
Deprecated +
19 Jan 2023 + 1.3.4 + 1. Refactored directory structure.
2. Released to terraform registry.
3. Supported DSF Hub / Agentless Gateway on RedHat 7 ami.
4. Restricted permissions for Sonar installation.
5. Added the module's version to the examples. +
Deprecated +
26 Jan 2023 + 1.3.5 + 1. Enabled creating RDS MsSQL with synthetic data for POC purposes.
2. Fixed manual and automatic installer machine deployments. +
Deprecated +
5 Feb 2023 + 1.3.6 + Supported SSH proxy for DSF Hub / Agentless Gateway in modules: hub, agentless-gw, federation, poc-db-onboarder. + Deprecated +
28 Feb 2023 + 1.3.7 + + 1. Added the option to provide a custom security group id for the DSF Hub and the Agentless Gateway via the 'security_group_id' variable. +
2. Restricted network resources and general IAM permissions. +
3. Added a new installation example - single_account_deployment. +
4. Added the minimum required Terraform version to all modules. +
5. Added the option to provide EC2 AMI filter details for the DSF Hub and Agentless Gateway via the 'ami' variable. +
6. For user-provided AMI for the DSF node (DSF Hub and the Agentless Gateway) that denies execute access in '/tmp' folder, added the option to specify an alternative path via the 'terraform_script_path_folder' variable. +
7. Passed the password of the DSF node via AWS Secrets Manager. +
8. Added the option to provide a custom S3 bucket location for the Sonar binaries via the 'tarball_location' variable. +
9. Bug fixes. +
Active +
16 Mar 2023 + 1.3.9 + + 1. Added support for deploying a DSF node on an EC2 without outbound internet access by providing a custom AMI with the required dependencies and creating VPC endpoints. +
2. Replaced the installer machine manual and automatic deployment modes with a new and simplified single installer machine mode. +
3. Added support for storing the Terraform state in an AWS S3 bucket. +
4. Made adjustments to support Terraform version 1.4.0. +
Active +
27 Mar 2023 + 1.3.10 + + 1. Added support for supplying a custom key-pair for ssh to the DSF Hub and the Agentless Gateway. +
2. Added support for the new Sonar public patch '4.10.0.1'. +
Active +
diff --git a/README.md b/README.md index 37ad8e5f6..fab1b834c 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,10 @@ Latest Supported Terraform Version: 1.5.x. Using a higher version may result in #### Version History -The following table lists the released eDSF Kit versions, their release date and a high-level summary of each version's content. + +The following table lists the _latest_ releases of eDSF Kit, their release date and a high-level summary of each version's content. + +[Previous releases](https://github.com/imperva/dsfkit/blob/1.6.0/PREVIOUS_RELEASES.md) @@ -162,93 +165,6 @@ The following table lists the released eDSF Kit versions, their release date and - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 17dcf7b4e6c270c6aedea1e66ac5a95b35dd4935 Mon Sep 17 00:00:00 2001 From: "linda.nasredin" Date: Tue, 7 Nov 2023 17:27:27 +0200 Subject: [PATCH 10/15] EDSF-279 Handle deprecation of DSFKit old versions --- PREVIOUS_RELEASES.md | 2 +- README.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/PREVIOUS_RELEASES.md b/PREVIOUS_RELEASES.md index 730f65989..21d9bfd57 100644 --- a/PREVIOUS_RELEASES.md +++ b/PREVIOUS_RELEASES.md @@ -1,4 +1,4 @@ -The following table lists _previous_ releases of eDSF Kit versions, their release date, a high-level summary of each version's content and whether they are active or deprecated. +The following table lists _previous_ releases of eDSF Kit versions, their release date, a high-level summary of the release's content and whether they are active or deprecated.
Details
3 Nov 2022 - 1.0.0 - First release for SEs. Beta. -
20 Nov 2022 - 1.1.0 - Second Release for SEs. Beta. -
3 Jan 2023 - 1.2.0 - 1. Added multi accounts example.
2. Changed modules interface. -
19 Jan 2023 - 1.3.4 - 1. Refactored directory structure.
2. Released to terraform registry.
3. Supported DSF Hub / Agentless Gateway on RedHat 7 ami.
4. Restricted permissions for Sonar installation.
5. Added the module's version to the examples. -
26 Jan 2023 - 1.3.5 - 1. Enabled creating RDS MsSQL with synthetic data for POC purposes.
2. Fixed manual and automatic installer machine deployments. -
5 Feb 2023 - 1.3.6 - Supported SSH proxy for DSF Hub / Agentless Gateway in modules: hub, agentless-gw, federation, poc-db-onboarder. -
28 Feb 2023 - 1.3.7 - - 1. Added the option to provide a custom security group id for the DSF Hub and the Agentless Gateway via the 'security_group_id' variable. -
2. Restricted network resources and general IAM permissions. -
3. Added a new installation example - single_account_deployment. -
4. Added the minimum required Terraform version to all modules. -
5. Added the option to provide EC2 AMI filter details for the DSF Hub and Agentless Gateway via the 'ami' variable. -
6. For user-provided AMI for the DSF node (DSF Hub and the Agentless Gateway) that denies execute access in '/tmp' folder, added the option to specify an alternative path via the 'terraform_script_path_folder' variable. -
7. Passed the password of the DSF node via AWS Secrets Manager. -
8. Added the option to provide a custom S3 bucket location for the Sonar binaries via the 'tarball_location' variable. -
9. Bug fixes. -
16 Mar 2023 - 1.3.9 - - 1. Added support for deploying a DSF node on an EC2 without outbound internet access by providing a custom AMI with the required dependencies and creating VPC endpoints. -
2. Replaced the installer machine manual and automatic deployment modes with a new and simplified single installer machine mode. -
3. Added support for storing the Terraform state in an AWS S3 bucket. -
4. Made adjustments to support Terraform version 1.4.0. -
27 Mar 2023 - 1.3.10 - - 1. Added support for supplying a custom key-pair for ssh to the DSF Hub and the Agentless Gateway. -
2. Added support for the new Sonar public patch '4.10.0.1'. -
3 Apr 2023
diff --git a/README.md b/README.md index fab1b834c..ff25cee41 100644 --- a/README.md +++ b/README.md @@ -152,9 +152,9 @@ Latest Supported Terraform Version: 1.5.x. Using a higher version may result in #### Version History -The following table lists the _latest_ releases of eDSF Kit, their release date and a high-level summary of each version's content. +The following table lists the _latest_ eDSF Kit releases, their release date and a high-level summary of the release's content. -[Previous releases](https://github.com/imperva/dsfkit/blob/1.6.0/PREVIOUS_RELEASES.md) +[Previous releases](https://github.com/imperva/dsfkit/blob/deprecation-linda/PREVIOUS_RELEASES.md)
From 32a5690db9608640d45c9b1e3aeba2499e34362b Mon Sep 17 00:00:00 2001 From: "linda.nasredin" Date: Tue, 7 Nov 2023 17:29:13 +0200 Subject: [PATCH 11/15] EDSF-279 Handle deprecation of DSFKit old versions --- PREVIOUS_RELEASES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PREVIOUS_RELEASES.md b/PREVIOUS_RELEASES.md index 21d9bfd57..ad347c852 100644 --- a/PREVIOUS_RELEASES.md +++ b/PREVIOUS_RELEASES.md @@ -1,4 +1,4 @@ -The following table lists _previous_ releases of eDSF Kit versions, their release date, a high-level summary of the release's content and whether they are active or deprecated. +The following table lists _previous_ releases of eDSF Kit, their release date, a high-level summary of the release's content and whether they are active or deprecated.
From 586185a151c94202bfd4016b007dd6bf635be7f8 Mon Sep 17 00:00:00 2001 From: "linda.nasredin" Date: Tue, 7 Nov 2023 17:29:49 +0200 Subject: [PATCH 12/15] EDSF-279 Handle deprecation of DSFKit old versions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff25cee41..0f4f0e422 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ Latest Supported Terraform Version: 1.5.x. Using a higher version may result in The following table lists the _latest_ eDSF Kit releases, their release date and a high-level summary of the release's content. -[Previous releases](https://github.com/imperva/dsfkit/blob/deprecation-linda/PREVIOUS_RELEASES.md) +[Previous releases](https://github.com/imperva/dsfkit/blob/1.6.0/PREVIOUS_RELEASES.md)
From 6b18ddf6aca0e9df724e45fff46af2c7359791d9 Mon Sep 17 00:00:00 2001 From: Eytan Naim Date: Wed, 8 Nov 2023 09:23:42 +0200 Subject: [PATCH 13/15] Azure | fix [skip actions] --- .gitignore | 1 + examples/azure/poc/dsf_deployment/main.tf | 3 ++- modules/azurerm/sonar-base-instance/main.tf | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 06a433b90..4fb93f726 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ dsf_hub_ssh_key.pub *.svg *terraform.tfvars *backend.tf +*backend.tf_ *gitignore* *.terraform* *.DS_Store diff --git a/examples/azure/poc/dsf_deployment/main.tf b/examples/azure/poc/dsf_deployment/main.tf index 9fd8da2a1..0cab45659 100644 --- a/examples/azure/poc/dsf_deployment/main.tf +++ b/examples/azure/poc/dsf_deployment/main.tf @@ -1,5 +1,6 @@ module "globals" { - source = "../../../../modules/azurerm/core/globals" + source = "imperva/dsf-globals/azurerm" + version = "1.6.0" # latest release tag } resource "azurerm_resource_group" "rg" { diff --git a/modules/azurerm/sonar-base-instance/main.tf b/modules/azurerm/sonar-base-instance/main.tf index c31eeae72..ff8f658c9 100644 --- a/modules/azurerm/sonar-base-instance/main.tf +++ b/modules/azurerm/sonar-base-instance/main.tf @@ -83,6 +83,9 @@ resource "azurerm_linux_virtual_machine" "dsf_base_instance" { custom_data ] } + depends_on = [ + azurerm_role_assignment.dsf_base_storage_role_assignment + ] } resource "azurerm_user_assigned_identity" "dsf_base" { From c24c18af2f1110cb6fb072118e69be11670a3b0a Mon Sep 17 00:00:00 2001 From: "segev.elmalech" Date: Wed, 8 Nov 2023 11:54:14 +0200 Subject: [PATCH 14/15] fix sonar upgrade automation - add mv output file [skip actions] --- .github/workflows/sonar_upgrade.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/sonar_upgrade.yml b/.github/workflows/sonar_upgrade.yml index 0d7384b36..e92a961d2 100644 --- a/.github/workflows/sonar_upgrade.yml +++ b/.github/workflows/sonar_upgrade.yml @@ -273,8 +273,10 @@ jobs: run: | if [ ${{ github.event_name }} == 'schedule' ]; then mv $UPGRADE_EXAMPLE_DIR/main.tf{,_} + mv $UPGRADE_EXAMPLE_DIR/outputs.tf{,_} terraform -chdir=$UPGRADE_EXAMPLE_DIR destroy -auto-approve mv $UPGRADE_EXAMPLE_DIR/main.tf{_,} + mv $UPGRADE_EXAMPLE_DIR/outputs.tf{_,} fi - name: Terraform Validate for upgrade From 6010b345b176db1d858baa83b394787ddb5cc23d Mon Sep 17 00:00:00 2001 From: "linda.nasredin" Date: Wed, 8 Nov 2023 13:26:42 +0200 Subject: [PATCH 15/15] Sonar upgrade - minor refactoring and log print --- .../upgrade/scripts/upgrade_v4_10.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/modules/aws/sonar-upgrader/python_upgrader/upgrade/scripts/upgrade_v4_10.sh b/modules/aws/sonar-upgrader/python_upgrader/upgrade/scripts/upgrade_v4_10.sh index 02bf5f2f9..54f0d4b63 100644 --- a/modules/aws/sonar-upgrader/python_upgrader/upgrade/scripts/upgrade_v4_10.sh +++ b/modules/aws/sonar-upgrader/python_upgrader/upgrade/scripts/upgrade_v4_10.sh @@ -33,24 +33,26 @@ echo "Tarball file name: ${installation_s3_key}, in bucket: ${installation_s3_bu # For example: /imperva/apps/jsonar/apps/4.11.0.0.0 JSONAR_BASEDIR=$(grep "^JSONAR_BASEDIR=" /etc/sysconfig/jsonar | cut -d"=" -f2) JSONAR_VERSION=$(grep "^JSONAR_VERSION=" /etc/sysconfig/jsonar | cut -d"=" -f2) +echo "Current Sonar version ${JSONAR_VERSION}" + # For example, /imperva/apps -APPS_DIR=$(echo "$JSONAR_BASEDIR" | sed "s|/jsonar/apps/${JSONAR_VERSION}||") -echo "Apps directory: ${APPS_DIR}" +EXTRACTION_BASE_DIR=$(echo "$JSONAR_BASEDIR" | sed "s|/jsonar/apps/${JSONAR_VERSION}||") TARBALL_FILE_NAME=$(basename ${installation_s3_key}) -TARBALL_FILE=$APPS_DIR/$TARBALL_FILE_NAME +TARBALL_FILE=$EXTRACTION_BASE_DIR/$TARBALL_FILE_NAME VERSION="${TARBALL_FILE#*-}" VERSION="${VERSION%.tar.gz}" echo "Version: $VERSION" -EXTRACTION_DIR="${APPS_DIR}/jsonar/apps/${VERSION}" +EXTRACTION_DIR="${EXTRACTION_BASE_DIR}/jsonar/apps/${VERSION}" +echo "Tarball extraction base directory: ${EXTRACTION_BASE_DIR}" echo "Tarball extraction directory: $EXTRACTION_DIR" function extract_tarball() { echo "Extracting tarball..." - sudo tar -xf $TARBALL_FILE_NAME -gz -C $APPS_DIR - sudo chown -R sonarw:sonar $APPS_DIR + sudo tar -xf $TARBALL_FILE_NAME -gz -C $EXTRACTION_BASE_DIR + sudo chown -R sonarw:sonar $EXTRACTION_BASE_DIR echo "Extracting tarball completed" }