From e4ee61fad746fca8be039db4e7315263fb2eb24e Mon Sep 17 00:00:00 2001 From: Rajneesh Date: Thu, 28 Jul 2022 05:13:55 -0400 Subject: [PATCH 01/94] TVAULT-5220 : Move kolla & RHOSP build scripts from cfg repo to automation repo --- kolla-ansible/build_containers.sh | 69 ------- kolla-ansible/publish_containers.sh | 36 ---- kolla-ansible/trilio-datamover-api/Dockerfile | 47 ----- .../Dockerfile_pike_ubuntu | 47 ----- .../Dockerfile_queens_centos | 52 ------ .../Dockerfile_queens_ubuntu | 47 ----- .../Dockerfile_rocky_centos | 52 ------ .../Dockerfile_rocky_ubuntu | 47 ----- .../Dockerfile_stein_centos | 52 ------ .../Dockerfile_stein_ubuntu | 47 ----- .../Dockerfile_train_centos | 35 ---- .../Dockerfile_train_ubuntu | 41 ----- .../Dockerfile_ussuri_centos | 37 ---- .../Dockerfile_ussuri_ubuntu | 34 ---- .../Dockerfile_victoria_centos | 45 ----- .../Dockerfile_victoria_ubuntu | 34 ---- .../Dockerfile_wallaby_centos | 37 ---- .../Dockerfile_wallaby_ubuntu | 34 ---- kolla-ansible/trilio-datamover-api/README.md | 42 ----- .../trilio-datamover-api/build_container.sh | 16 -- .../trilio-datamover-api/dmapi.conf.sample | 50 ------ .../trilio-datamover-api/dmapi_sudoers | 1 - .../trilio-datamover-api/extend_start.sh | 10 -- .../trilio-datamover-api/licensing.txt | 10 -- .../trilio-datamover-api/run_container.sh | 5 - .../trilio-datamover-api/trilio.list | 1 - .../trilio-datamover-api/trilio.repo | 5 - .../triliovault_datamover_api_extend_start.sh | 16 -- kolla-ansible/trilio-datamover/Dockerfile | 79 -------- .../trilio-datamover/Dockerfile_pike_ubuntu | 79 -------- .../trilio-datamover/Dockerfile_queens_centos | 77 -------- .../trilio-datamover/Dockerfile_queens_ubuntu | 79 -------- .../trilio-datamover/Dockerfile_rocky_centos | 77 -------- .../trilio-datamover/Dockerfile_rocky_ubuntu | 79 -------- .../trilio-datamover/Dockerfile_stein_centos | 77 -------- .../trilio-datamover/Dockerfile_stein_ubuntu | 79 -------- .../trilio-datamover/Dockerfile_train_centos | 77 -------- .../trilio-datamover/Dockerfile_train_ubuntu | 78 -------- .../trilio-datamover/Dockerfile_ussuri_centos | 61 ------- .../trilio-datamover/Dockerfile_ussuri_ubuntu | 82 --------- .../Dockerfile_victoria_centos | 70 -------- .../Dockerfile_victoria_ubuntu | 82 --------- .../Dockerfile_wallaby_centos | 60 ------- .../Dockerfile_wallaby_ubuntu | 81 --------- kolla-ansible/trilio-datamover/README.md | 42 ----- kolla-ansible/trilio-datamover/deploy.sh | 79 -------- .../trilio-datamover/extend_start.sh | 8 - kolla-ansible/trilio-datamover/licensing.txt | 10 -- .../trilio-datamover/log-rotate-conf | 9 - kolla-ansible/trilio-datamover/nova-sudoers | 1 - .../trilio-datamover/start_datamover_nfs | 3 - .../trilio-datamover/start_datamover_s3 | 36 ---- .../start_tvault_object_store | 3 - kolla-ansible/trilio-datamover/trilio.filters | 10 -- kolla-ansible/trilio-datamover/trilio.list | 1 - kolla-ansible/trilio-datamover/trilio.repo | 5 - .../trilio-datamover/tvault-contego.conf | 23 --- .../tvault-contego.conf.nfs.sample | 22 --- .../tvault-contego.conf.s3.sample | 27 --- .../trilio-datamover/tvault-contego.service | 17 -- .../trilio-horizon-plugin/Dockerfile | 23 --- .../Dockerfile_ussuri_centos | 28 --- .../Dockerfile_ussuri_ubuntu | 27 --- .../Dockerfile_victoria_centos | 36 ---- .../Dockerfile_victoria_ubuntu | 27 --- .../Dockerfile_wallaby_centos | 28 --- .../Dockerfile_wallaby_ubuntu | 27 --- .../trilio-horizon-plugin/build_container.sh | 16 -- .../horizon_template_overrides.j2 | 11 -- .../trilio-horizon-plugin/licensing.txt | 10 -- .../trilio-horizon-plugin/trilio.list | 1 - .../trilio-horizon-plugin/trilio.repo | 5 - .../local/enabled/tvault_admin_panel.py | 10 -- .../local/enabled/tvault_admin_panel_group.py | 8 - .../local/enabled/tvault_panel.py | 9 - .../local/enabled/tvault_panel_group.py | 8 - .../local/enabled/tvault_settings_panel.py | 9 - .../templatetags/tvault_filter.py | 125 ------------- .../docker/build_containers.sh | 168 ------------------ .../docker/build_rhosp13_containers.sh | 76 -------- .../docker/build_rhosp15.sh | 60 ------- .../docker/build_rhosp16_containers.sh | 79 -------- .../docker/build_tripleo_containers.sh | 86 --------- .../docker/publish_containers.sh | 22 --- .../docker/publish_tripleo_containers.sh | 43 ----- .../docker/test_build_rhosp16.sh | 80 --------- .../docker/trilio-datamover-api/Dockerfile | 31 ---- .../trilio-datamover-api/Dockerfile_rhosp13 | 30 ---- .../trilio-datamover-api/Dockerfile_rhosp14 | 31 ---- .../trilio-datamover-api/Dockerfile_rhosp15 | 31 ---- .../trilio-datamover-api/Dockerfile_rhosp16 | 29 --- .../trilio-datamover-api/Dockerfile_rhosp16.1 | 29 --- .../trilio-datamover-api/Dockerfile_rhosp16.2 | 29 --- .../Dockerfile_tripleo_train_centos7 | 38 ---- .../Dockerfile_tripleo_train_centos8 | 41 ----- .../Dockerfile_tripleo_wallaby_centos8s | 44 ----- .../Dockerfile_tripleorocky | 32 ---- .../docker/trilio-datamover-api/README.md | 42 ----- .../trilio-datamover-api/build_container.sh | 16 -- .../delorean-component-tripleo.repo | 6 - .../docker/trilio-datamover-api/licensing.txt | 10 -- .../trilio-datamover-api/run_container.sh | 16 -- .../start_datamover_api_tripleo_centos7 | 1 - .../start_datamover_api_tripleo_centos8 | 1 - .../docker/trilio-datamover-api/trilio.repo | 5 - .../docker/trilio-datamover/Dockerfile | 55 ------ .../trilio-datamover/Dockerfile_rhosp13 | 61 ------- .../trilio-datamover/Dockerfile_rhosp14 | 51 ------ .../trilio-datamover/Dockerfile_rhosp15 | 51 ------ .../trilio-datamover/Dockerfile_rhosp16 | 58 ------ .../trilio-datamover/Dockerfile_rhosp16.1 | 63 ------- .../trilio-datamover/Dockerfile_rhosp16.2 | 62 ------- .../Dockerfile_tripleo_train_centos7 | 59 ------ .../Dockerfile_tripleo_train_centos8 | 59 ------ .../Dockerfile_tripleo_wallaby_centos8s | 62 ------- .../trilio-datamover/Dockerfile_tripleorocky | 52 ------ .../docker/trilio-datamover/README.md | 42 ----- .../trilio-datamover/build_container.sh | 14 -- .../delorean-component-tripleo.repo | 6 - .../docker/trilio-datamover/licensing.txt | 10 -- .../docker/trilio-datamover/log-rotate-conf | 9 - .../docker/trilio-datamover/nova-sudoers | 2 - .../trilio-datamover/nova-sudoers-rhel8 | 2 - .../docker/trilio-datamover/run_container.sh | 13 -- .../trilio-datamover/start_datamover_nfs | 3 - .../start_datamover_nfs_python3 | 3 - .../start_datamover_nfs_tripleo_centos8 | 3 - .../trilio-datamover/start_datamover_s3 | 36 ---- .../start_tvault_object_store | 3 - .../start_tvault_object_store_python3 | 3 - .../start_tvault_object_store_rhel8 | 3 - .../start_tvault_object_store_tripleo_centos8 | 3 - .../docker/trilio-datamover/trilio.filters | 10 -- .../docker/trilio-datamover/trilio.repo | 5 - .../trilio-datamover/tvault-contego.conf | 23 --- .../trilio-datamover/tvault-contego.service | 17 -- .../docker/trilio-horizon-plugin/Dockerfile | 23 --- .../trilio-horizon-plugin/Dockerfile_rhosp13 | 28 --- .../trilio-horizon-plugin/Dockerfile_rhosp14 | 23 --- .../trilio-horizon-plugin/Dockerfile_rhosp15 | 23 --- .../trilio-horizon-plugin/Dockerfile_rhosp16 | 26 --- .../Dockerfile_rhosp16.1 | 26 --- .../Dockerfile_rhosp16.2 | 26 --- .../Dockerfile_tripleo_train_centos7 | 28 --- .../Dockerfile_tripleo_train_centos8 | 31 ---- .../Dockerfile_tripleo_wallaby_centos8s | 34 ---- .../Dockerfile_tripleorocky | 24 --- .../trilio-horizon-plugin/build_container.sh | 16 -- .../delorean-component-tripleo.repo | 6 - .../horizon_template_overrides.j2 | 11 -- .../trilio-horizon-plugin/kolla-build.conf | 9 - .../kolla_build_container.sh | 2 - .../trilio-horizon-plugin/licensing.txt | 10 -- .../docker/trilio-horizon-plugin/trilio.repo | 5 - .../local/enabled/tvault_admin_panel.py | 10 -- .../local/enabled/tvault_admin_panel_group.py | 8 - .../local/enabled/tvault_panel.py | 9 - .../local/enabled/tvault_panel_group.py | 8 - .../local/enabled/tvault_settings_panel.py | 9 - .../templatetags/tvault_filter.py | 125 ------------- 160 files changed, 5309 deletions(-) delete mode 100755 kolla-ansible/build_containers.sh delete mode 100755 kolla-ansible/publish_containers.sh delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_pike_ubuntu delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_queens_centos delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_queens_ubuntu delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_rocky_centos delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_rocky_ubuntu delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_stein_centos delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_stein_ubuntu delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_train_centos delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_train_ubuntu delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_ussuri_centos delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_ussuri_ubuntu delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_victoria_centos delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_victoria_ubuntu delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_wallaby_centos delete mode 100644 kolla-ansible/trilio-datamover-api/Dockerfile_wallaby_ubuntu delete mode 100644 kolla-ansible/trilio-datamover-api/README.md delete mode 100755 kolla-ansible/trilio-datamover-api/build_container.sh delete mode 100644 kolla-ansible/trilio-datamover-api/dmapi.conf.sample delete mode 100644 kolla-ansible/trilio-datamover-api/dmapi_sudoers delete mode 100644 kolla-ansible/trilio-datamover-api/extend_start.sh delete mode 100644 kolla-ansible/trilio-datamover-api/licensing.txt delete mode 100755 kolla-ansible/trilio-datamover-api/run_container.sh delete mode 100644 kolla-ansible/trilio-datamover-api/trilio.list delete mode 100644 kolla-ansible/trilio-datamover-api/trilio.repo delete mode 100644 kolla-ansible/trilio-datamover-api/triliovault_datamover_api_extend_start.sh delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_pike_ubuntu delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_queens_centos delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_queens_ubuntu delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_rocky_centos delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_rocky_ubuntu delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_stein_centos delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_stein_ubuntu delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_train_centos delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_train_ubuntu delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_ussuri_centos delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_ussuri_ubuntu delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_victoria_centos delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_victoria_ubuntu delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_wallaby_centos delete mode 100644 kolla-ansible/trilio-datamover/Dockerfile_wallaby_ubuntu delete mode 100644 kolla-ansible/trilio-datamover/README.md delete mode 100644 kolla-ansible/trilio-datamover/deploy.sh delete mode 100644 kolla-ansible/trilio-datamover/extend_start.sh delete mode 100644 kolla-ansible/trilio-datamover/licensing.txt delete mode 100644 kolla-ansible/trilio-datamover/log-rotate-conf delete mode 100644 kolla-ansible/trilio-datamover/nova-sudoers delete mode 100644 kolla-ansible/trilio-datamover/start_datamover_nfs delete mode 100644 kolla-ansible/trilio-datamover/start_datamover_s3 delete mode 100644 kolla-ansible/trilio-datamover/start_tvault_object_store delete mode 100644 kolla-ansible/trilio-datamover/trilio.filters delete mode 100644 kolla-ansible/trilio-datamover/trilio.list delete mode 100644 kolla-ansible/trilio-datamover/trilio.repo delete mode 100644 kolla-ansible/trilio-datamover/tvault-contego.conf delete mode 100644 kolla-ansible/trilio-datamover/tvault-contego.conf.nfs.sample delete mode 100644 kolla-ansible/trilio-datamover/tvault-contego.conf.s3.sample delete mode 100644 kolla-ansible/trilio-datamover/tvault-contego.service delete mode 100644 kolla-ansible/trilio-horizon-plugin/Dockerfile delete mode 100644 kolla-ansible/trilio-horizon-plugin/Dockerfile_ussuri_centos delete mode 100644 kolla-ansible/trilio-horizon-plugin/Dockerfile_ussuri_ubuntu delete mode 100644 kolla-ansible/trilio-horizon-plugin/Dockerfile_victoria_centos delete mode 100644 kolla-ansible/trilio-horizon-plugin/Dockerfile_victoria_ubuntu delete mode 100644 kolla-ansible/trilio-horizon-plugin/Dockerfile_wallaby_centos delete mode 100644 kolla-ansible/trilio-horizon-plugin/Dockerfile_wallaby_ubuntu delete mode 100644 kolla-ansible/trilio-horizon-plugin/build_container.sh delete mode 100644 kolla-ansible/trilio-horizon-plugin/horizon_template_overrides.j2 delete mode 100644 kolla-ansible/trilio-horizon-plugin/licensing.txt delete mode 100644 kolla-ansible/trilio-horizon-plugin/trilio.list delete mode 100644 kolla-ansible/trilio-horizon-plugin/trilio.repo delete mode 100644 kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel.py delete mode 100644 kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel_group.py delete mode 100644 kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel.py delete mode 100644 kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel_group.py delete mode 100644 kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_settings_panel.py delete mode 100644 kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/templatetags/tvault_filter.py delete mode 100755 redhat-director-scripts/docker/build_containers.sh delete mode 100755 redhat-director-scripts/docker/build_rhosp13_containers.sh delete mode 100755 redhat-director-scripts/docker/build_rhosp15.sh delete mode 100755 redhat-director-scripts/docker/build_rhosp16_containers.sh delete mode 100755 redhat-director-scripts/docker/build_tripleo_containers.sh delete mode 100755 redhat-director-scripts/docker/publish_containers.sh delete mode 100755 redhat-director-scripts/docker/publish_tripleo_containers.sh delete mode 100755 redhat-director-scripts/docker/test_build_rhosp16.sh delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp13 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp14 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp15 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16.1 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16.2 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_train_centos7 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_train_centos8 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_wallaby_centos8s delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleorocky delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/README.md delete mode 100755 redhat-director-scripts/docker/trilio-datamover-api/build_container.sh delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/delorean-component-tripleo.repo delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/licensing.txt delete mode 100755 redhat-director-scripts/docker/trilio-datamover-api/run_container.sh delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/start_datamover_api_tripleo_centos7 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/start_datamover_api_tripleo_centos8 delete mode 100644 redhat-director-scripts/docker/trilio-datamover-api/trilio.repo delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp13 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp14 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp15 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16.1 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16.2 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_train_centos7 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_train_centos8 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_wallaby_centos8s delete mode 100644 redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleorocky delete mode 100644 redhat-director-scripts/docker/trilio-datamover/README.md delete mode 100755 redhat-director-scripts/docker/trilio-datamover/build_container.sh delete mode 100644 redhat-director-scripts/docker/trilio-datamover/delorean-component-tripleo.repo delete mode 100644 redhat-director-scripts/docker/trilio-datamover/licensing.txt delete mode 100644 redhat-director-scripts/docker/trilio-datamover/log-rotate-conf delete mode 100644 redhat-director-scripts/docker/trilio-datamover/nova-sudoers delete mode 100644 redhat-director-scripts/docker/trilio-datamover/nova-sudoers-rhel8 delete mode 100755 redhat-director-scripts/docker/trilio-datamover/run_container.sh delete mode 100644 redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs delete mode 100644 redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs_python3 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs_tripleo_centos8 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/start_datamover_s3 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store delete mode 100644 redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_python3 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_rhel8 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_tripleo_centos8 delete mode 100644 redhat-director-scripts/docker/trilio-datamover/trilio.filters delete mode 100644 redhat-director-scripts/docker/trilio-datamover/trilio.repo delete mode 100644 redhat-director-scripts/docker/trilio-datamover/tvault-contego.conf delete mode 100644 redhat-director-scripts/docker/trilio-datamover/tvault-contego.service delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp13 delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp14 delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp15 delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16 delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16.1 delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16.2 delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_train_centos7 delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_train_centos8 delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_wallaby_centos8s delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleorocky delete mode 100755 redhat-director-scripts/docker/trilio-horizon-plugin/build_container.sh delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/delorean-component-tripleo.repo delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/horizon_template_overrides.j2 delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/kolla-build.conf delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/kolla_build_container.sh delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/licensing.txt delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/trilio.repo delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel.py delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel_group.py delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel.py delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel_group.py delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_settings_panel.py delete mode 100644 redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/templatetags/tvault_filter.py diff --git a/kolla-ansible/build_containers.sh b/kolla-ansible/build_containers.sh deleted file mode 100755 index 5413eb362..000000000 --- a/kolla-ansible/build_containers.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash -x - -set -e - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_container.sh " - exit 1 -fi - -tvault_version=($(echo $1| tr "," " ")) - - - -current_dir=$(pwd) -base_dir="$(dirname $0)" - -if [ $base_dir = '.' ] -then -base_dir="$current_dir" -fi - -declare -a openstack_releases=($(echo $2| tr "," " ")) - -declare -a openstack_platforms=("centos" "ubuntu") -count=0 -## now loop through the above array -for openstack_release in "${openstack_releases[@]}" -do - tag=${tvault_version[$count]} - - for openstack_platform in "${openstack_platforms[@]}" - do - - build_dir=tmp_docker_${openstack_release}_${openstack_platform} - rm -rf $base_dir/${build_dir} - mkdir -p $base_dir/${build_dir} - cp -R $base_dir/trilio-datamover $base_dir/${build_dir}/ - cp -R $base_dir/trilio-datamover-api $base_dir/${build_dir}/ - cp -R $base_dir/trilio-horizon-plugin $base_dir/${build_dir}/ - - docker pull kolla/${openstack_platform}-binary-nova-compute:${openstack_release} - docker pull kolla/${openstack_platform}-binary-horizon:${openstack_release} - docker pull kolla/${openstack_platform}-binary-nova-api:${openstack_release} - - #Build trilio-datamover containers - echo -e "Creating trilio-datamover container for kolla ${openstack_release} ${openstack_platform}" - cd $base_dir/${build_dir}/trilio-datamover/ - mv Dockerfile_${openstack_release}_${openstack_platform} Dockerfile - docker build --no-cache -t trilio/${openstack_platform}-binary-trilio-datamover:${tag}-${openstack_release} . - - - #Build trilio_datamover-api containers - echo -e "Creating trilio-datamover container-api for kolla ${openstack_release} ${openstack_platform}" - cd $base_dir/${build_dir}/trilio-datamover-api/ - mv Dockerfile_${openstack_release}_${openstack_platform} Dockerfile - docker build --no-cache -t trilio/${openstack_platform}-binary-trilio-datamover-api:${tag}-${openstack_release} . - - - echo -e "Creating trilio-horizon-plugin container for kolla ${openstack_release} ${openstack_platform}" - cd $base_dir/${build_dir}/trilio-horizon-plugin/ - mv Dockerfile_${openstack_release}_${openstack_platform} Dockerfile - docker build --no-cache -t trilio/${openstack_platform}-binary-trilio-horizon-plugin:${tag}-${openstack_release} . - # Clean the build_dir - rm -rf $base_dir/${build_dir} - - done - let count=count+1 -done diff --git a/kolla-ansible/publish_containers.sh b/kolla-ansible/publish_containers.sh deleted file mode 100755 index 8facc8020..000000000 --- a/kolla-ansible/publish_containers.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -set -e - - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_container.sh " - exit 1 -fi - -tvault_version=($(echo $1| tr "," " ")) - -declare -a openstack_releases=($(echo $2| tr "," " ")) -declare -a openstack_platforms=("centos" "ubuntu") -count=0 -## now loop through the above array -for openstack_release in "${openstack_releases[@]}" -do - tag=${tvault_version[$count]} - for openstack_platform in "${openstack_platforms[@]}" - do - docker tag trilio/${openstack_platform}-binary-trilio-datamover-api:${tag}-${openstack_release} \ - docker.io/trilio/${openstack_platform}-binary-trilio-datamover-api:${tag}-${openstack_release} - docker push docker.io/trilio/${openstack_platform}-binary-trilio-datamover-api:${tag}-${openstack_release} - - docker tag trilio/${openstack_platform}-binary-trilio-datamover-api:${tag}-${openstack_release} \ - docker.io/trilio/${openstack_platform}-binary-trilio-datamover-api:${tag}-${openstack_release} - docker push docker.io/trilio/${openstack_platform}-binary-trilio-datamover:${tag}-${openstack_release} - - docker tag trilio/${openstack_platform}-binary-trilio-horizon-plugin:${tag}-${openstack_release} \ - docker.io/trilio/${openstack_platform}-binary-trilio-horizon-plugin:${tag}-${openstack_release} - docker push docker.io/trilio/${openstack_platform}-binary-trilio-horizon-plugin:${tag}-${openstack_release} - done - let count=count+1 -done diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile b/kolla-ansible/trilio-datamover-api/Dockerfile deleted file mode 100644 index 52b703a8b..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ -FROM kolla/ubuntu-source-nova-api:train -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages - -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y dmapi --allow-unauthenticated - -RUN mkdir -p /var/log/dmapi/ \ - /var/cache/dmapi/ \ - /etc/nova \ - /var/log/kolla/dmapi \ - && chown -R nova:nova /var/log/dmapi/ \ - && chown -R nova:nova /var/log/kolla/dmapi \ - && chown nova:nova /var/cache/dmapi/ \ - && rm /etc/dmapi/dmapi.conf - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -# /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_dmapi -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_pike_ubuntu b/kolla-ansible/trilio-datamover-api/Dockerfile_pike_ubuntu deleted file mode 100644 index 61e8a51db..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_pike_ubuntu +++ /dev/null @@ -1,47 +0,0 @@ -FROM kolla/ubuntu-binary-nova-api:pike -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages - -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y dmapi --allow-unauthenticated - -RUN mkdir -p /var/log/dmapi/ \ - /var/cache/dmapi/ \ - /etc/nova \ - /var/log/kolla/dmapi \ - && chown -R nova:nova /var/log/dmapi/ \ - && chown -R nova:nova /var/log/kolla/dmapi \ - && chown nova:nova /var/cache/dmapi/ \ - && rm /etc/dmapi/dmapi.conf - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -# /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_dmapi -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_queens_centos b/kolla-ansible/trilio-datamover-api/Dockerfile_queens_centos deleted file mode 100644 index 023bcecbc..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_queens_centos +++ /dev/null @@ -1,52 +0,0 @@ -FROM kolla/centos-binary-nova-api:queens -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN yum-config-manager --disable opendaylight && yum-config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install dmapi -y - -RUN mkdir -p /var/log/dmapi/ \ - /var/cache/dmapi/ \ - /etc/nova \ - /var/log/kolla/dmapi \ - && chown -R nova:nova /var/log/dmapi/ \ - && chown -R nova:nova /var/log/kolla/dmapi \ - && chown nova:nova /var/cache/dmapi/ \ - && rm /etc/dmapi/dmapi.conf - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -# /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_dmapi -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_queens_ubuntu b/kolla-ansible/trilio-datamover-api/Dockerfile_queens_ubuntu deleted file mode 100644 index ca4cc7acf..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_queens_ubuntu +++ /dev/null @@ -1,47 +0,0 @@ -FROM kolla/ubuntu-binary-nova-api:queens -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages - -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y dmapi --allow-unauthenticated - -RUN mkdir -p /var/log/dmapi/ \ - /var/cache/dmapi/ \ - /etc/nova \ - /var/log/kolla/dmapi \ - && chown -R nova:nova /var/log/dmapi/ \ - && chown -R nova:nova /var/log/kolla/dmapi \ - && chown nova:nova /var/cache/dmapi/ \ - && rm /etc/dmapi/dmapi.conf - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -# /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_dmapi -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_rocky_centos b/kolla-ansible/trilio-datamover-api/Dockerfile_rocky_centos deleted file mode 100644 index dc20339be..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_rocky_centos +++ /dev/null @@ -1,52 +0,0 @@ -FROM kolla/centos-binary-nova-api:rocky -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN yum-config-manager --disable opendaylight && yum-config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install dmapi -y - -RUN mkdir -p /var/log/dmapi/ \ - /var/cache/dmapi/ \ - /etc/nova \ - /var/log/kolla/dmapi \ - && chown -R nova:nova /var/log/dmapi/ \ - && chown -R nova:nova /var/log/kolla/dmapi \ - && chown nova:nova /var/cache/dmapi/ \ - && rm /etc/dmapi/dmapi.conf - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -# /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_dmapi -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_rocky_ubuntu b/kolla-ansible/trilio-datamover-api/Dockerfile_rocky_ubuntu deleted file mode 100644 index 372767312..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_rocky_ubuntu +++ /dev/null @@ -1,47 +0,0 @@ -FROM kolla/ubuntu-binary-nova-api:rocky -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages - -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y dmapi --allow-unauthenticated - -RUN mkdir -p /var/log/dmapi/ \ - /var/cache/dmapi/ \ - /etc/nova \ - /var/log/kolla/dmapi \ - && chown -R nova:nova /var/log/dmapi/ \ - && chown -R nova:nova /var/log/kolla/dmapi \ - && chown nova:nova /var/cache/dmapi/ \ - && rm /etc/dmapi/dmapi.conf - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -# /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_dmapi -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_stein_centos b/kolla-ansible/trilio-datamover-api/Dockerfile_stein_centos deleted file mode 100644 index 5880cbf0a..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_stein_centos +++ /dev/null @@ -1,52 +0,0 @@ -FROM kolla/centos-binary-nova-api:stein -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN yum-config-manager --disable opendaylight && yum-config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install dmapi -y - -RUN mkdir -p /var/log/dmapi/ \ - /var/cache/dmapi/ \ - /etc/nova \ - /var/log/kolla/dmapi \ - && chown -R nova:nova /var/log/dmapi/ \ - && chown -R nova:nova /var/log/kolla/dmapi \ - && chown nova:nova /var/cache/dmapi/ \ - && rm /etc/dmapi/dmapi.conf - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -# /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_dmapi -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_stein_ubuntu b/kolla-ansible/trilio-datamover-api/Dockerfile_stein_ubuntu deleted file mode 100644 index 02fcb9053..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_stein_ubuntu +++ /dev/null @@ -1,47 +0,0 @@ -FROM kolla/ubuntu-binary-nova-api:stein -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages - -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y dmapi --allow-unauthenticated - -RUN mkdir -p /var/log/dmapi/ \ - /var/cache/dmapi/ \ - /etc/nova \ - /var/log/kolla/dmapi \ - && chown -R nova:nova /var/log/dmapi/ \ - && chown -R nova:nova /var/log/kolla/dmapi \ - && chown nova:nova /var/cache/dmapi/ \ - && rm /etc/dmapi/dmapi.conf - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -# /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_dmapi -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_train_centos b/kolla-ansible/trilio-datamover-api/Dockerfile_train_centos deleted file mode 100644 index ed89b5bd9..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_train_centos +++ /dev/null @@ -1,35 +0,0 @@ -FROM kolla/centos-binary-nova-api:train -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN yum-config-manager --disable opendaylight && yum-config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install dmapi -y - -RUN mkdir -p /var/cache/dmapi/ -RUN chown -R dmapi:dmapi /etc/nova/ && chown -R dmapi:dmapi /etc/dmapi && chown -R dmapi:dmapi /var/cache/dmapi/ - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_train_ubuntu b/kolla-ansible/trilio-datamover-api/Dockerfile_train_ubuntu deleted file mode 100644 index 57dfbf09f..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_train_ubuntu +++ /dev/null @@ -1,41 +0,0 @@ -FROM kolla/ubuntu-binary-nova-api:train -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages - -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y - -RUN apt-get install -y python3-dmapi --allow-unauthenticated - -RUN chown -R dmapi:dmapi /etc/nova/ && chown -R dmapi:dmapi /etc/dmapi - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -# /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_dmapi -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_ussuri_centos b/kolla-ansible/trilio-datamover-api/Dockerfile_ussuri_centos deleted file mode 100644 index 112222a57..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_ussuri_centos +++ /dev/null @@ -1,37 +0,0 @@ -FROM kolla/centos-binary-nova-api:ussuri -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN dnf clean all -RUN dnf config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install python3-dmapi -y - -## Kolla specifc settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start -COPY triliovault_datamover_api_extend_start.sh /usr/local/bin/kolla_triliovault_datamover_api_extend_start -RUN usermod -a -G kolla dmapi - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_ussuri_ubuntu b/kolla-ansible/trilio-datamover-api/Dockerfile_ussuri_ubuntu deleted file mode 100644 index 6ef20f4ad..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_ussuri_ubuntu +++ /dev/null @@ -1,34 +0,0 @@ -FROM kolla/ubuntu-binary-nova-api:ussuri -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages - -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y python3-dmapi --allow-unauthenticated - - -## Kolla specifc settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start -COPY triliovault_datamover_api_extend_start.sh /usr/local/bin/kolla_triliovault_datamover_api_extend_start -RUN usermod -a -G kolla dmapi - - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_victoria_centos b/kolla-ansible/trilio-datamover-api/Dockerfile_victoria_centos deleted file mode 100644 index 23a587b22..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_victoria_centos +++ /dev/null @@ -1,45 +0,0 @@ -FROM kolla/centos-binary-nova-api:victoria -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN dnf clean all -RUN dnf config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-* -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-* -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-NFV-OpenvSwitch.repo -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-NFV-OpenvSwitch.repo -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-OpenStack-* -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-OpenStack-* -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-OpsTools.repo -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-OpsTools.repo -RUN yum install python3-dmapi -y - -## Kolla specifc settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start -COPY triliovault_datamover_api_extend_start.sh /usr/local/bin/kolla_triliovault_datamover_api_extend_start -RUN usermod -a -G kolla dmapi - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_victoria_ubuntu b/kolla-ansible/trilio-datamover-api/Dockerfile_victoria_ubuntu deleted file mode 100644 index a12e929b0..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_victoria_ubuntu +++ /dev/null @@ -1,34 +0,0 @@ -FROM kolla/ubuntu-binary-nova-api:victoria -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages - -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y python3-dmapi --allow-unauthenticated - - -## Kolla specifc settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start -COPY triliovault_datamover_api_extend_start.sh /usr/local/bin/kolla_triliovault_datamover_api_extend_start -RUN usermod -a -G kolla dmapi - - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_wallaby_centos b/kolla-ansible/trilio-datamover-api/Dockerfile_wallaby_centos deleted file mode 100644 index 9158b7f65..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_wallaby_centos +++ /dev/null @@ -1,37 +0,0 @@ -FROM kolla/centos-binary-nova-api:wallaby -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN dnf clean all -RUN dnf config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install python3-dmapi -y - -## Kolla specifc settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start -COPY triliovault_datamover_api_extend_start.sh /usr/local/bin/kolla_triliovault_datamover_api_extend_start -RUN usermod -a -G kolla dmapi - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover-api/Dockerfile_wallaby_ubuntu b/kolla-ansible/trilio-datamover-api/Dockerfile_wallaby_ubuntu deleted file mode 100644 index 81469ac69..000000000 --- a/kolla-ansible/trilio-datamover-api/Dockerfile_wallaby_ubuntu +++ /dev/null @@ -1,34 +0,0 @@ -FROM kolla/ubuntu-binary-nova-api:wallaby -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="TrilioData trilio-datamover-api" \ - description="TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages - -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y python3-dmapi --allow-unauthenticated - - -## Kolla specifc settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start -COPY triliovault_datamover_api_extend_start.sh /usr/local/bin/kolla_triliovault_datamover_api_extend_start -RUN usermod -a -G kolla dmapi - - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover-api/README.md b/kolla-ansible/trilio-datamover-api/README.md deleted file mode 100644 index ab7dcba11..000000000 --- a/kolla-ansible/trilio-datamover-api/README.md +++ /dev/null @@ -1,42 +0,0 @@ -## Assumptions -This container is only designed for and tested on Redhat OpenStack Platform 13. - -## Pre-requisites -1. Redhat OpenStack Platform 13 setup deployed with container approach -2. To build container you will need redhat subscription with OpenStack Platform suite - -## Command to build container -``` -git clone -cd /path/to/redhat-director-scripts/docker/trilio-dmapi/ -docker build \ ---build-arg redhat_username= --build-arg redhat_password= \ ---build-arg redhat_pool_id= -t shyambiradar/trilio-dmapi:queens . -``` - -## Command to run container - -If you are running this container on non RHOSP setup, create /var/log/containers/nova directory on node where you want to run this container. - -##Step1: -Create tvault-contego.conf with all parameters(backup target) at location "/var/lib/config-data/triliodm/etc/tvault-contego/tvault-contego.conf" -Use puppet for that:(use puppet/trilio) -puppet agent --test --tags dmapiconfig - -#### For NFS as backup target: -``` -docker run -v /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova:/etc/nova:ro \ --v /var/run/libvirt/:/var/run/libvirt/ -v /var/lib/config-data/triliodmaoi/etc/dmapi:/etc/dmapi:ro \ --v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin \ --v /sbin:/sbin --network host --privileged=true \ --dt --name dmapi shyambiradar/trilio-dmapi:queens -``` -#### For Amazon S3 as backup target: -``` -docker run -v /etc/nova:/etc/nova -v /var/run/libvirt/:/var/run/libvirt/ -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin -v /sbin:/sbin --network host --privileged=true -it --name debug shyambiradar/trilio-datamover:queens amazon_s3 -``` -#### Redhat Ceph S3 as backup target -``` -docker run -v /etc/nova:/etc/nova -v /var/run/libvirt/:/var/run/libvirt/ -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin -v /sbin:/sbin --network host --privileged=true -it --name debug shyambiradar/trilio-datamover:queens ceph_s3 - -``` diff --git a/kolla-ansible/trilio-datamover-api/build_container.sh b/kolla-ansible/trilio-datamover-api/build_container.sh deleted file mode 100755 index 29725ba19..000000000 --- a/kolla-ansible/trilio-datamover-api/build_container.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -set -e - -if [ $# -ne 2 ];then - echo -e "Script takes exactly 2 arguments\n" - echo -e "./build_container.sh " - echo -e "./build_container.sh shyambiradar/trilio-dmapi queens" - exit 1 -fi - -name=$1 -tag=$2 - -docker build --no-cache -t $name:$tag . -docker push $name:$tag diff --git a/kolla-ansible/trilio-datamover-api/dmapi.conf.sample b/kolla-ansible/trilio-datamover-api/dmapi.conf.sample deleted file mode 100644 index 028d6d066..000000000 --- a/kolla-ansible/trilio-datamover-api/dmapi.conf.sample +++ /dev/null @@ -1,50 +0,0 @@ -[DEFAULT] -dmapi_workers = 2 -transport_url = rabbit://openstack:PiTBwZyWUOPVhws2RdaM7IiB1cBV8mjAPqx3FO5b@192.168.122.150:5672 -dmapi_link_prefix = https://192.168.122.151:8784 -dmapi_enabled_ssl_apis = -dmapi_listen_port = 8784 -dmapi_enabled_apis = dmapi -bindir = /usr/bin -instance_name_template = instance-%08x -dmapi_listen = 192.168.122.150 -my_ip = 192.168.122.150 -rootwrap_config = /etc/dmapi/rootwrap.conf -debug = True -log_file = /var/log/kolla/trilio-datamover-api/dmapi.log -log_dir = /var/log/kolla/trilio-datamover-api - -[wsgi] -ssl_cert_file = -ssl_key_file = -api_paste_config = /etc/dmapi/api-paste.ini - -[database] -connection = mysql+pymysql://nova:j4VnZXx5yZ5bN9ziaoBr1xGyRZSayFevd0hzV80r@192.168.122.151:3306/nova - -[api_database] -connection = mysql+pymysql://nova_api:4nrCV5Jg56mJHp0jZUGzPoMcrtnpTgYQNQzFrZQS@192.168.122.151:3306/nova_api - -[keystone_authtoken] -memcached_servers = 192.168.122.150:11211 -signing_dir = /var/cache/dmapi -cafile = -project_name = service -project_domain_id = default -user_domain_name = Default -username = nova -password = P7mBA60BBDfP4Wo2eeVBWmzLDBln6Vke16UUEV9N -auth_uri = http://192.168.122.151:5000 -auth_url = http://192.168.122.151:35357 -auth_type = password -user_domain_id = default -memcache_security_strategy = ENCRYPT -memcache_secret_key = zXNAkiAP96xgFkEjoYlg5wWUJJVitvc2axTB3jRb -insecure = True - -[oslo_messaging_notifications] -transport_url = rabbit://openstack:PiTBwZyWUOPVhws2RdaM7IiB1cBV8mjAPqx3FO5b@192.168.122.150:5672 -driver = noop - -[oslo_middleware] -enable_proxy_headers_parsing = true diff --git a/kolla-ansible/trilio-datamover-api/dmapi_sudoers b/kolla-ansible/trilio-datamover-api/dmapi_sudoers deleted file mode 100644 index ce6421d35..000000000 --- a/kolla-ansible/trilio-datamover-api/dmapi_sudoers +++ /dev/null @@ -1 +0,0 @@ -dmapi ALL=(ALL) NOPASSWD: ALL \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover-api/extend_start.sh b/kolla-ansible/trilio-datamover-api/extend_start.sh deleted file mode 100644 index f76edb326..000000000 --- a/kolla-ansible/trilio-datamover-api/extend_start.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -if [[ ! -d "/var/log/kolla/triliovault-datamover-api" ]]; then - mkdir -p /var/log/kolla/triliovault-datamover-api -fi -if [[ $(stat -c %a /var/log/kolla/triliovault-datamover-api) != "755" ]]; then - chmod 755 /var/log/kolla/triliovault-datamover-api -fi - -. /usr/local/bin/kolla_triliovault_datamover_api_extend_start \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover-api/licensing.txt b/kolla-ansible/trilio-datamover-api/licensing.txt deleted file mode 100644 index a87288e84..000000000 --- a/kolla-ansible/trilio-datamover-api/licensing.txt +++ /dev/null @@ -1,10 +0,0 @@ -LicenseID TVAULT-59508796-8e7f-11e7-9a79- -Description TrilioVault License from TrilioData, Inc -CreationDate 2017-08-31 -LicenseEdition ENTERPRISE -LicenseTypeName EULA -Organisation Luxoft -LicenseExpiryDate 2020-05-27 -Licensed For 1 GB Backup Capacity -Evaluation False -License Key AAABUA0ODAoPeNp9Uk2PgjAQvfdXNNnr diff --git a/kolla-ansible/trilio-datamover-api/run_container.sh b/kolla-ansible/trilio-datamover-api/run_container.sh deleted file mode 100755 index d2ebb8400..000000000 --- a/kolla-ansible/trilio-datamover-api/run_container.sh +++ /dev/null @@ -1,5 +0,0 @@ -# This is the output of "runlike trilio_dmapi". It contains lots of stuff -# that would be set by default if omitted. Note the volume mounts though in -# particular. - -docker run --name=trilio_dmapi --hostname=node001 --user=nova --env=PATH=/var/lib/kolla/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env=PIP_INDEX_URL=http://mirror.iad.rax.openstack.org:8080/pypi/simple --env=PIP_TRUSTED_HOST=mirror.iad.rax.openstack.org --env=KOLLA_BASE_DISTRO=ubuntu --env=KOLLA_INSTALL_TYPE=source --env=KOLLA_INSTALL_METATYPE=mixed --env='PS1=$(tput bold)($(printenv KOLLA_SERVICE_NAME))$(tput sgr0)[$(id -un)@$(hostname -s) $(pwd)]$ ' --env=DEBIAN_FRONTEND=noninteractive --volume=/etc/kolla/dmapi/dmapi.conf:/etc/dmapi/dmapi.conf --volume=/etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf --network=host --restart=no --label kolla_version="5.0.5" --label name="kolla/openstack-nova-api-triliodata-plugin" --label build-date="20190416" --label vendor="TrilioData" --label release="3.1" --label description="Red Hat OpenStack Platform 13.0 nova-api TrilioData trilio-datamover-api" --label maintainer="shyam.biradar@trilio.io" --label summary="Red Hat OpenStack Platform 13.0 nova-api TrilioData trilio-datamover-api" --label version="3.1.0" --log-opt max-size=10m --detach=true kolla/ubuntu-source-trilio-dmapi:pike /var/lib/kolla/venv/bin/python /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover-api/trilio.list b/kolla-ansible/trilio-datamover-api/trilio.list deleted file mode 100644 index c95b53900..000000000 --- a/kolla-ansible/trilio-datamover-api/trilio.list +++ /dev/null @@ -1 +0,0 @@ -deb [trusted=yes] https://apt.fury.io/triliodata-dev-stable-4-2/ / diff --git a/kolla-ansible/trilio-datamover-api/trilio.repo b/kolla-ansible/trilio-datamover-api/trilio.repo deleted file mode 100644 index fa008f8ac..000000000 --- a/kolla-ansible/trilio-datamover-api/trilio.repo +++ /dev/null @@ -1,5 +0,0 @@ -[triliovault-4-2] -name=triliovault-4-2 -baseurl=http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-stable-4-2/yum/ -gpgcheck=0 -enabled=1 diff --git a/kolla-ansible/trilio-datamover-api/triliovault_datamover_api_extend_start.sh b/kolla-ansible/trilio-datamover-api/triliovault_datamover_api_extend_start.sh deleted file mode 100644 index e0c87685f..000000000 --- a/kolla-ansible/trilio-datamover-api/triliovault_datamover_api_extend_start.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases -# of the KOLLA_BOOTSTRAP variable being set, including empty. - -## TODO: Uncomment following code once we get dmapi-dbsync tool - -if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then - dmapi-dbsync - exit 0 -fi - -if [[ "${!KOLLA_UPGRADE[@]}" ]]; then - dmapi-dbsync - exit 0 -fi \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover/Dockerfile b/kolla-ansible/trilio-datamover/Dockerfile deleted file mode 100644 index f7dd44400..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile +++ /dev/null @@ -1,79 +0,0 @@ -FROM kolla/ubuntu-source-nova-compute:train -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -RUN rm -f /etc/nova/rootwrap.conf -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y tvault-contego --allow-unauthenticated - -##Download virtenv -RUN mkdir -p /home/tvault \ - && curl -o /home/tvault/tvault-contego-virtenv.tar.gz http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/virtenv/queens/ubuntu/tvault-contego-virtenv.tar.gz \ - && tar -xzf /home/tvault/tvault-contego-virtenv.tar.gz -C /home/tvault/ \ - && chown -R nova:nova /home/tvault/ - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_pike_ubuntu b/kolla-ansible/trilio-datamover/Dockerfile_pike_ubuntu deleted file mode 100644 index e34f83198..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_pike_ubuntu +++ /dev/null @@ -1,79 +0,0 @@ -FROM kolla/ubuntu-binary-nova-compute:pike -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y tvault-contego --allow-unauthenticated - - -##Download virtenv -RUN mkdir -p /home/tvault \ - && curl -o /home/tvault/tvault-contego-virtenv.tar.gz http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/virtenv/queens/ubuntu/tvault-contego-virtenv.tar.gz \ - && tar -xzf /home/tvault/tvault-contego-virtenv.tar.gz -C /home/tvault/ \ - && chown -R nova:nova /home/tvault/ - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_queens_centos b/kolla-ansible/trilio-datamover/Dockerfile_queens_centos deleted file mode 100644 index 1bfeabecb..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_queens_centos +++ /dev/null @@ -1,77 +0,0 @@ -FROM kolla/centos-binary-nova-compute:queens -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix unless upstream openstack repo's not available completely -RUN yum-config-manager --disable opendaylight && yum-config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-contego puppet-triliovault -y - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_queens_ubuntu b/kolla-ansible/trilio-datamover/Dockerfile_queens_ubuntu deleted file mode 100644 index 9ea009a42..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_queens_ubuntu +++ /dev/null @@ -1,79 +0,0 @@ -FROM kolla/ubuntu-binary-nova-compute:queens -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y tvault-contego --allow-unauthenticated - - -##Download virtenv -RUN mkdir -p /home/tvault \ - && curl -o /home/tvault/tvault-contego-virtenv.tar.gz http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/virtenv/queens/ubuntu/tvault-contego-virtenv.tar.gz \ - && tar -xzf /home/tvault/tvault-contego-virtenv.tar.gz -C /home/tvault/ \ - && chown -R nova:nova /home/tvault/ - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_rocky_centos b/kolla-ansible/trilio-datamover/Dockerfile_rocky_centos deleted file mode 100644 index 4624568d8..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_rocky_centos +++ /dev/null @@ -1,77 +0,0 @@ -FROM kolla/centos-binary-nova-compute:rocky -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN yum-config-manager --disable opendaylight && yum-config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-contego puppet-triliovault -y - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_rocky_ubuntu b/kolla-ansible/trilio-datamover/Dockerfile_rocky_ubuntu deleted file mode 100644 index e09c42f6d..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_rocky_ubuntu +++ /dev/null @@ -1,79 +0,0 @@ -FROM kolla/ubuntu-binary-nova-compute:rocky -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y tvault-contego --allow-unauthenticated - - -##Download virtenv -RUN mkdir -p /home/tvault \ - && curl -o /home/tvault/tvault-contego-virtenv.tar.gz http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/virtenv/queens/ubuntu/tvault-contego-virtenv.tar.gz \ - && tar -xzf /home/tvault/tvault-contego-virtenv.tar.gz -C /home/tvault/ \ - && chown -R nova:nova /home/tvault/ - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_stein_centos b/kolla-ansible/trilio-datamover/Dockerfile_stein_centos deleted file mode 100644 index 013bb4f7d..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_stein_centos +++ /dev/null @@ -1,77 +0,0 @@ -FROM kolla/centos-binary-nova-compute:stein -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN yum-config-manager --disable opendaylight && yum-config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-contego puppet-triliovault -y - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_stein_ubuntu b/kolla-ansible/trilio-datamover/Dockerfile_stein_ubuntu deleted file mode 100644 index 5b27b8044..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_stein_ubuntu +++ /dev/null @@ -1,79 +0,0 @@ -FROM kolla/ubuntu-binary-nova-compute:stein -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y tvault-contego --allow-unauthenticated - - -##Download virtenv -RUN mkdir -p /home/tvault \ - && curl -o /home/tvault/tvault-contego-virtenv.tar.gz http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/virtenv/queens/ubuntu/tvault-contego-virtenv.tar.gz \ - && tar -xzf /home/tvault/tvault-contego-virtenv.tar.gz -C /home/tvault/ \ - && chown -R nova:nova /home/tvault/ - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_train_centos b/kolla-ansible/trilio-datamover/Dockerfile_train_centos deleted file mode 100644 index 1272af2c3..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_train_centos +++ /dev/null @@ -1,77 +0,0 @@ -FROM kolla/centos-binary-nova-compute:train -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -# temporary fix -RUN yum-config-manager --disable opendaylight && yum-config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-contego puppet-triliovault -y - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_train_ubuntu b/kolla-ansible/trilio-datamover/Dockerfile_train_ubuntu deleted file mode 100644 index 70bcaf042..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_train_ubuntu +++ /dev/null @@ -1,78 +0,0 @@ -FROM kolla/ubuntu-binary-nova-compute:train -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y python3-tvault-contego python3-s3-fuse-plugin --allow-unauthenticated - -##Download virtenv -RUN mkdir -p /home/tvault \ - && curl -o /home/tvault/tvault-contego-virtenv.tar.gz http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/virtenv/queens/ubuntu/tvault-contego-virtenv.tar.gz \ - && tar -xzf /home/tvault/tvault-contego-virtenv.tar.gz -C /home/tvault/ \ - && chown -R nova:nova /home/tvault/ - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_ussuri_centos b/kolla-ansible/trilio-datamover/Dockerfile_ussuri_centos deleted file mode 100644 index 7ba92291a..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_ussuri_centos +++ /dev/null @@ -1,61 +0,0 @@ -FROM kolla/centos-binary-nova-compute:ussuri -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -RUN dnf clean all -RUN dnf config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages in CentOS 8 -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf install -y python3-tvault-contego puppet-triliovault python3-s3fuse-plugin - -## Kolla settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start - - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN dnf clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_ussuri_ubuntu b/kolla-ansible/trilio-datamover/Dockerfile_ussuri_ubuntu deleted file mode 100644 index 720571677..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_ussuri_ubuntu +++ /dev/null @@ -1,82 +0,0 @@ -FROM kolla/ubuntu-binary-nova-compute:ussuri -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y python3-tvault-contego python3-s3-fuse-plugin --allow-unauthenticated - - -##Download virtenv -RUN mkdir -p /home/tvault \ - && curl -o /home/tvault/tvault-contego-virtenv.tar.gz http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/virtenv/queens/ubuntu/tvault-contego-virtenv.tar.gz \ - && tar -xzf /home/tvault/tvault-contego-virtenv.tar.gz -C /home/tvault/ \ - && chown -R nova:nova /home/tvault/ - -## Kolla settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_victoria_centos b/kolla-ansible/trilio-datamover/Dockerfile_victoria_centos deleted file mode 100644 index bbb783afc..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_victoria_centos +++ /dev/null @@ -1,70 +0,0 @@ -FROM kolla/centos-binary-nova-compute:victoria -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -RUN dnf clean all -RUN dnf config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages in CentOS 8 -ADD trilio.repo /etc/yum.repos.d/ -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Ceph-Nautilus.repo -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Ceph-Nautilus.repo -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-* -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-* -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-NFV-OpenvSwitch.repo -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-NFV-OpenvSwitch.repo -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-OpenStack-* -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-OpenStack-* -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-OpsTools.repo -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-OpsTools.repo -RUN dnf install -y python3-tvault-contego puppet-triliovault python3-s3fuse-plugin - -## Kolla settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start - - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN dnf clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/kolla-ansible/trilio-datamover/Dockerfile_victoria_ubuntu b/kolla-ansible/trilio-datamover/Dockerfile_victoria_ubuntu deleted file mode 100644 index 27a2606fa..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_victoria_ubuntu +++ /dev/null @@ -1,82 +0,0 @@ -FROM kolla/ubuntu-binary-nova-compute:victoria -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y python3-tvault-contego python3-s3-fuse-plugin --allow-unauthenticated - - -##Download virtenv -RUN mkdir -p /home/tvault \ - && curl -o /home/tvault/tvault-contego-virtenv.tar.gz http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/virtenv/queens/ubuntu/tvault-contego-virtenv.tar.gz \ - && tar -xzf /home/tvault/tvault-contego-virtenv.tar.gz -C /home/tvault/ \ - && chown -R nova:nova /home/tvault/ - -## Kolla settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike - diff --git a/kolla-ansible/trilio-datamover/Dockerfile_wallaby_centos b/kolla-ansible/trilio-datamover/Dockerfile_wallaby_centos deleted file mode 100644 index b33854ef4..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_wallaby_centos +++ /dev/null @@ -1,60 +0,0 @@ -FROM kolla/centos-binary-nova-compute:wallaby -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -RUN dnf clean all -RUN dnf config-manager --save --setopt=epel.skip_if_unavailable=true - -##Install datamover packages in CentOS 8 -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf install -y python3-tvault-contego puppet-triliovault python3-s3fuse-plugin - -## Kolla settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start - - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN dnf clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover/Dockerfile_wallaby_ubuntu b/kolla-ansible/trilio-datamover/Dockerfile_wallaby_ubuntu deleted file mode 100644 index 5b622da32..000000000 --- a/kolla-ansible/trilio-datamover/Dockerfile_wallaby_ubuntu +++ /dev/null @@ -1,81 +0,0 @@ -FROM kolla/ubuntu-binary-nova-compute:wallaby -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="kolla/trilio-datamover" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="TrilioData Datamover" \ - description="TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt-get update -y -RUN apt-get install -y python3-tvault-contego python3-s3-fuse-plugin --allow-unauthenticated - - -##Download virtenv -RUN mkdir -p /home/tvault \ - && curl -o /home/tvault/tvault-contego-virtenv.tar.gz http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/virtenv/queens/ubuntu/tvault-contego-virtenv.tar.gz \ - && tar -xzf /home/tvault/tvault-contego-virtenv.tar.gz -C /home/tvault/ \ - && chown -R nova:nova /home/tvault/ - -## Kolla settings -COPY extend_start.sh /usr/local/bin/kolla_extend_start - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ \ - && chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova \ - && usermod -aG kvm nova - -# ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -# RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf - -RUN mkdir -p /var/triliovault-mounts \ - && chown nova:nova /var/triliovault-mounts \ - && mkdir -p /var/triliovault \ - && chmod 777 /var/triliovault-mounts \ - && chown nova:nova /var/triliovault \ - && chmod 777 /var/triliovault - -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova - -################## -# REQUIRED MOUNTS# -################## -# /etc/kolla/datamover/nova.conf:/etc/nova/nova.conf -# /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf -# /etc/kolla/datamova/ceph.conf:/etc/ceph/ceph.conf -# /etc/kolla/datamova/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring -# iscsi_info:/etc/iscsi:rw -# /dev:/dev:rw -# nova_compute:/var/lib/nova/:rw -# /var/run/libvirt -# /etc/kolla/datamover/start_datamover_nfs:/opt/tvault/start_datamover_nfs - -## start_datamover_nfs was needed because it wasn't using NFS correctly - -############## -# RUN COMMAND# -############## -# docker run --network host --name trilio_datamover -d -v /etc/kolla/dmapi/nova.conf:/etc/nova/nova.conf -v /etc/kolla/datamover/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf kolla/ubuntu-source-trilio-datamover:pike \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover/README.md b/kolla-ansible/trilio-datamover/README.md deleted file mode 100644 index 3e8c9dc34..000000000 --- a/kolla-ansible/trilio-datamover/README.md +++ /dev/null @@ -1,42 +0,0 @@ -## Assumptions -This container is only designed for and tested on Redhat OpenStack Platform 13. - -## Pre-requisites -1. Redhat OpenStack Platform 13 setup deployed with container approach -2. To build container you will need redhat subscription with OpenStack Platform suite - -## Command to build container -``` -git clone -cd /path/to/redhat-director-scripts/docker/trilio-datamover/ -docker build \ ---build-arg redhat_username= --build-arg redhat_password= \ ---build-arg redhat_pool_id= -t shyambiradar/trilio-datamover:queens . -``` - -## Command to run container - -If you are running this container on non RHOSP setup, create /var/log/containers/nova directory on node where you want to run this container. - -##Step1: -Create tvault-contego.conf with all parameters(backup target) at location "/var/lib/config-data/triliodm/etc/tvault-contego/tvault-contego.conf" -Use puppet for that:(use puppet/trilio) -puppet agent --test --tags dmconfig - -#### For NFS as backup target: -``` -docker run -v /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova:/etc/nova:ro \ --v /var/run/libvirt/:/var/run/libvirt/ -v /var/lib/config-data/triliodm/etc/tvault-contego:/etc/tvault-contego:ro \ --v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin \ --v /sbin:/sbin --network host --privileged=true \ --dt --name dm shyambiradar/trilio-datamover:queens -``` -#### For Amazon S3 as backup target: -``` -docker run -v /etc/nova:/etc/nova -v /var/run/libvirt/:/var/run/libvirt/ -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin -v /sbin:/sbin --network host --privileged=true -it --name debug shyambiradar/trilio-datamover:queens amazon_s3 -``` -#### Redhat Ceph S3 as backup target -``` -docker run -v /etc/nova:/etc/nova -v /var/run/libvirt/:/var/run/libvirt/ -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin -v /sbin:/sbin --network host --privileged=true -it --name debug shyambiradar/trilio-datamover:queens ceph_s3 - -``` diff --git a/kolla-ansible/trilio-datamover/deploy.sh b/kolla-ansible/trilio-datamover/deploy.sh deleted file mode 100644 index ad9a6c8c1..000000000 --- a/kolla-ansible/trilio-datamover/deploy.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash -x - -set -e - - -if [ $# -lt 1 ];then - echo "Script takes exactly 1 arguments" - echo -e "./deploy_trilio_on_kolla_ansible.sh " - exit 1 -fi - - -tag=$1 - -##Select backup target nfs/s3 for tvault backups -BACKUP_TARGET='nfs' - -#Python executable path inside container -PYTHON_PATH=/var/lib/kolla/venv/bin/python -DATAMOVER_CONFIG_DIR="/etc/kolla/trilio-datamover" -DATAMOVER_API_CONFIG_DIR="/etc/kolla/trilio-datamover-api" - -DATAMOVER_LOG_DIR="/var/log/kolla/trilio-datamover" -DATAMOVER_API_LOG_DIR="/var/log/kolla/trilio-datamover-api" - - - -echo -e "Trilio container tag provided:$tag" - -##Pull docker containers from dockerhub -docker pull shyambiradar/ubuntu-source-trilio-datamover:$tag -docker pull shyambiradar/ubuntu-source-trilio-datamover-api:$tag - - - -##Prepare config directories ##Please perform these steps manually on production enviornment -##These steps are only need if it's single node kolla-ansible deployed openstack cloud - -##Perform on all nodes where nova_compute service is deployed -mkdir -p $DATAMOVER_CONFIG_DIR -mkdir -p $DATAMOVER_LOG_DIR -chown nova:nova $DATAMOVER_LOG_DIR - -##Perform on all nodes where nova_api service is deployed -mkdir -p $DATAMOVER_API_CONFIG_DIR -mkdir -p $DATAMOVER_API_LOG_DIR -chown nova:nova $DATAMOVER_API_LOG_DIR - - -#### Run Datamover container -###Uncomment following command If ceph is backend storage for nova or cinder - -#docker run --network host --name trilio_datamover -d \ -#-v $DATAMOVER_CONFIG_DIR/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf \ -#-v $DATAMOVER_CONFIG_DIR/nova.conf:/etc/nova/nova.conf \ -#-v $DATAMOVER_CONFIG_DIR/ceph.conf:/etc/ceph/ceph.conf \ -#-v $DATAMOVER_CONFIG_DIR/ceph.client.nova.keyring:/etc/ceph/ceph.client.nova.keyring \ -#-v /dev:/dev:rw \ -#-v nova_compute:/var/lib/nova/:rw \ -#-v /var/log/kolla/:/var/log/kolla/ \ -#-v iscsi_info:/etc/iscsi:rw -v /var/run/libvirt \ -#shyambiradar/ubuntu-source-trilio-datamover:$tag /opt/tvault/start_datamover_nfs - -#If ceph storage is not used for nova, cinder -docker run --privileged --network host --name trilio_datamover -it \ --v $DATAMOVER_CONFIG_DIR/tvault-contego.conf:/etc/tvault-contego/tvault-contego.conf \ --v $DATAMOVER_CONFIG_DIR/nova.conf:/etc/nova/nova.conf \ --v /dev:/dev:rw \ --v nova_compute:/var/lib/nova/:rw \ --v /var/log/kolla/:/var/log/kolla/ \ --v iscsi_info:/etc/iscsi:rw -v /var/run/libvirt \ -shyambiradar/ubuntu-source-trilio-datamover:$tag /opt/tvault/start_datamover_nfs - - -#### Run Datamover Api container -docker run --network host --name trilio_datamover_api -d -v $DATAMOVER_API_CONFIG_DIR/nova.conf:/etc/nova/nova.conf \ --v $DATAMOVER_API_CONFIG_DIR/dmapi.conf:/etc/dmapi/dmapi.conf \ --v /var/log/kolla/:/var/log/kolla/ \ -shyambiradar/ubuntu-source-trilio-datamover-api:$tag $PYTHON_PATH /usr/bin/dmapi-api diff --git a/kolla-ansible/trilio-datamover/extend_start.sh b/kolla-ansible/trilio-datamover/extend_start.sh deleted file mode 100644 index 8bccc41df..000000000 --- a/kolla-ansible/trilio-datamover/extend_start.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -if [[ ! -d "/var/log/kolla/triliovault-datamover" ]]; then - mkdir -p /var/log/kolla/triliovault-datamover -fi -if [[ $(stat -c %a /var/log/kolla/triliovault-datamover) != "755" ]]; then - chmod 755 /var/log/kolla/triliovault-datamover -fi \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover/licensing.txt b/kolla-ansible/trilio-datamover/licensing.txt deleted file mode 100644 index a87288e84..000000000 --- a/kolla-ansible/trilio-datamover/licensing.txt +++ /dev/null @@ -1,10 +0,0 @@ -LicenseID TVAULT-59508796-8e7f-11e7-9a79- -Description TrilioVault License from TrilioData, Inc -CreationDate 2017-08-31 -LicenseEdition ENTERPRISE -LicenseTypeName EULA -Organisation Luxoft -LicenseExpiryDate 2020-05-27 -Licensed For 1 GB Backup Capacity -Evaluation False -License Key AAABUA0ODAoPeNp9Uk2PgjAQvfdXNNnr diff --git a/kolla-ansible/trilio-datamover/log-rotate-conf b/kolla-ansible/trilio-datamover/log-rotate-conf deleted file mode 100644 index 66c8366ab..000000000 --- a/kolla-ansible/trilio-datamover/log-rotate-conf +++ /dev/null @@ -1,9 +0,0 @@ -/var/log/nova/tvault-contego.log { -daily -missingok -notifempty -copytruncate -size=25M -rotate 3 -compress -} diff --git a/kolla-ansible/trilio-datamover/nova-sudoers b/kolla-ansible/trilio-datamover/nova-sudoers deleted file mode 100644 index 584f4e3ae..000000000 --- a/kolla-ansible/trilio-datamover/nova-sudoers +++ /dev/null @@ -1 +0,0 @@ -nova ALL = (root) NOPASSWD: /usr/bin/privsep-helper * diff --git a/kolla-ansible/trilio-datamover/start_datamover_nfs b/kolla-ansible/trilio-datamover/start_datamover_nfs deleted file mode 100644 index 7d03e78f6..000000000 --- a/kolla-ansible/trilio-datamover/start_datamover_nfs +++ /dev/null @@ -1,3 +0,0 @@ -/usr/bin/python3 /usr/bin/tvault-contego \ ---config-file=/etc/nova/nova.conf \ ---config-file=/etc/tvault-contego/tvault-contego.conf \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover/start_datamover_s3 b/kolla-ansible/trilio-datamover/start_datamover_s3 deleted file mode 100644 index c5347e87c..000000000 --- a/kolla-ansible/trilio-datamover/start_datamover_s3 +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -# Start the first process -/opt/tvault/start_tvault_object_store & -status=$? -if [ $status -ne 0 ]; then - echo "Failed to start tvault-object-store service: $status" - exit $status -fi - -# Start the second process -/opt/tvault/start_datamover_nfs & -status=$? -if [ $status -ne 0 ]; then - echo "Failed to start tvault contego service: $status" - exit $status -fi - -# Naive check runs checks once a minute to see if either of the processes exited. -# This illustrates part of the heavy lifting you need to do if you want to run -# more than one service in a container. The container exits with an error -# if it detects that either of the processes has exited. -# Otherwise it loops forever, waking up every 60 seconds - -while sleep 60; do - ps aux | grep contego | grep -q -v grep - PROCESS_1_STATUS=$? - ps aux | grep vaultfuse | grep -q -v grep - PROCESS_2_STATUS=$? - # If the greps above find anything, they exit with 0 status - # If they are not both 0, then something is wrong - if [ $PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0 ]; then - echo "One of the processes has already exited." - exit 1 - fi -done diff --git a/kolla-ansible/trilio-datamover/start_tvault_object_store b/kolla-ansible/trilio-datamover/start_tvault_object_store deleted file mode 100644 index 19c684115..000000000 --- a/kolla-ansible/trilio-datamover/start_tvault_object_store +++ /dev/null @@ -1,3 +0,0 @@ -/usr/bin/python3 \ -/usr/bin/s3vaultfuse.py \ ---config-file=/etc/tvault-contego/tvault-contego.conf \ No newline at end of file diff --git a/kolla-ansible/trilio-datamover/trilio.filters b/kolla-ansible/trilio-datamover/trilio.filters deleted file mode 100644 index c2780cc64..000000000 --- a/kolla-ansible/trilio-datamover/trilio.filters +++ /dev/null @@ -1,10 +0,0 @@ -[Filters] -# mount and unmout filter -mount: CommandFilter, mount, root -umount: CommandFilter, umount, root -rescan-scsi-bus.sh: CommandFilter, /usr/bin/rescan-scsi-bus.sh, root -multipath: CommandFilter, multipath, root -qemu-img: CommandFilter, qemu-img, root -qemu-nbd: CommandFilter, qemu-nbd, root -rbd: CommandFilter, rbd, root -multipathd: CommandFilter, multipathd, root diff --git a/kolla-ansible/trilio-datamover/trilio.list b/kolla-ansible/trilio-datamover/trilio.list deleted file mode 100644 index c95b53900..000000000 --- a/kolla-ansible/trilio-datamover/trilio.list +++ /dev/null @@ -1 +0,0 @@ -deb [trusted=yes] https://apt.fury.io/triliodata-dev-stable-4-2/ / diff --git a/kolla-ansible/trilio-datamover/trilio.repo b/kolla-ansible/trilio-datamover/trilio.repo deleted file mode 100644 index fa008f8ac..000000000 --- a/kolla-ansible/trilio-datamover/trilio.repo +++ /dev/null @@ -1,5 +0,0 @@ -[triliovault-4-2] -name=triliovault-4-2 -baseurl=http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-stable-4-2/yum/ -gpgcheck=0 -enabled=1 diff --git a/kolla-ansible/trilio-datamover/tvault-contego.conf b/kolla-ansible/trilio-datamover/tvault-contego.conf deleted file mode 100644 index 262318b4f..000000000 --- a/kolla-ansible/trilio-datamover/tvault-contego.conf +++ /dev/null @@ -1,23 +0,0 @@ -[DEFAULT] -#vault_storage_type = - -vault_data_directory_old = /var/triliovault -vault_data_directory = /var/triliovault-mounts -log_file = /var/log/nova/tvault-contego.log -debug = False -verbose = True -max_uploads_pending = 3 -max_commit_pending = 3 - -########For backup target type 's3' -#vault_s3_auth_version = DEFAULT -#vault_s3_access_key_id = -#vault_s3_secret_access_key = -#vault_s3_region_name = -#vault_s3_bucket = -#vault_s3_endpoint_url = -#vault_s3_ssl = - -########For backup target type 'nfs' -#vault_storage_nfs_export = -#vault_storage_nfs_options = diff --git a/kolla-ansible/trilio-datamover/tvault-contego.conf.nfs.sample b/kolla-ansible/trilio-datamover/tvault-contego.conf.nfs.sample deleted file mode 100644 index c6d686c15..000000000 --- a/kolla-ansible/trilio-datamover/tvault-contego.conf.nfs.sample +++ /dev/null @@ -1,22 +0,0 @@ -[DEFAULT] -vault_storage_type = nfs -vault_storage_nfs_export = 192.168.122.1:/var/nfs -vault_data_directory_old = /var/triliovault -vault_data_directory = /var/triliovault-mounts -log_file = /var/log/kolla/trilio-datamover/tvault-contego.log -debug = False -verbose = True -max_uploads_pending = 3 -max_commit_pending = 3 -vault_s3_auth_version = DEFAULT -vault_s3_access_key_id = -vault_s3_secret_access_key = -vault_s3_region_name = us-east-2 -vault_s3_bucket = -qemu_agent_ping_timeout = 900 - -[contego_sys_admin] -helper_command = sudo /var/lib/kolla/venv/bin/privsep-helper - -[conductor] -use_local = True diff --git a/kolla-ansible/trilio-datamover/tvault-contego.conf.s3.sample b/kolla-ansible/trilio-datamover/tvault-contego.conf.s3.sample deleted file mode 100644 index 0afdae690..000000000 --- a/kolla-ansible/trilio-datamover/tvault-contego.conf.s3.sample +++ /dev/null @@ -1,27 +0,0 @@ -[DEFAULT] -vault_storage_type = s3 -vault_storage_nfs_export = TrilioVault -vault_data_directory_old = /var/triliovault -vault_data_directory = /var/triliovault-mounts -log_file = /var/log/kolla/trilio-datamover/tvault-contego.log -debug = False -verbose = True -max_uploads_pending = 3 -max_commit_pending = 3 -vault_s3_auth_version = DEFAULT -vault_s3_access_key_id = -vault_s3_secret_access_key = -vault_s3_region_name = -vault_s3_bucket = - -vault_s3_endpoint_url = -vault_s3_signature_version = "default" -vault_s3_ssl = True - -qemu_agent_ping_timeout=900 - -[contego_sys_admin] -helper_command = sudo /var/lib/kolla/venv/bin/privsep-helper - -[conductor] -use_local = True diff --git a/kolla-ansible/trilio-datamover/tvault-contego.service b/kolla-ansible/trilio-datamover/tvault-contego.service deleted file mode 100644 index 33981f4e3..000000000 --- a/kolla-ansible/trilio-datamover/tvault-contego.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=Tvault contego -After=openstack-nova-compute.service -StartLimitIntervalSec=120 -StartLimitInterval=120 -StartLimitBurst=3 - -[Service] -User=nova -Group=nova -Type=simple -ExecStart=/home/tvault/.virtenv/bin/python /home/tvault/.virtenv/bin/tvault-contego --config-file=/usr/share/nova/nova-dist.conf --config-file=/etc/nova/nova.conf --config-file=/etc/tvault-contego/tvault-contego.conf -TimeoutStopSec=20 -KillMode=process -Restart=on-failure -[Install] -WantedBy=multi-user.target diff --git a/kolla-ansible/trilio-horizon-plugin/Dockerfile b/kolla-ansible/trilio-horizon-plugin/Dockerfile deleted file mode 100644 index 9a4a0ba45..000000000 --- a/kolla-ansible/trilio-horizon-plugin/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM registry.access.redhat.com/rhosp13/openstack-horizon -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-horizon-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" \ - description="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-horizon-plugin python-workloadmgrclient -y -RUN rm /etc/yum.repos.d/trilio.repo - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/kolla-ansible/trilio-horizon-plugin/Dockerfile_ussuri_centos b/kolla-ansible/trilio-horizon-plugin/Dockerfile_ussuri_centos deleted file mode 100644 index b11f490c4..000000000 --- a/kolla-ansible/trilio-horizon-plugin/Dockerfile_ussuri_centos +++ /dev/null @@ -1,28 +0,0 @@ -FROM kolla/centos-binary-horizon:ussuri -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="centos-binary-trilio-horizon-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioVault Horizon Plugin" \ - description="TrilioVault Horizon Plugin for Kolla-ansible deployed OpenStack on centos platform" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf config-manager --set-enabled epel -RUN dnf install python3-tvault-horizon-plugin-el8 -y -RUN rm /etc/yum.repos.d/trilio.repo -RUN dnf config-manager --set-disabled epel - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py compress --force - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/kolla-ansible/trilio-horizon-plugin/Dockerfile_ussuri_ubuntu b/kolla-ansible/trilio-horizon-plugin/Dockerfile_ussuri_ubuntu deleted file mode 100644 index bc01b91f3..000000000 --- a/kolla-ansible/trilio-horizon-plugin/Dockerfile_ussuri_ubuntu +++ /dev/null @@ -1,27 +0,0 @@ -FROM kolla/ubuntu-binary-horizon:ussuri -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="ubuntu-binary-trilio-horizon-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioVault Horizon Plugin" \ - description="TrilioVault Horizon Plugin for Kolla-ansible deployed OpenStack on ubuntu platform" - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt update -y -RUN apt-get install -y python3-tvault-horizon-plugin python3-workloadmgrclient --allow-unauthenticated - - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py compress --force - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/kolla-ansible/trilio-horizon-plugin/Dockerfile_victoria_centos b/kolla-ansible/trilio-horizon-plugin/Dockerfile_victoria_centos deleted file mode 100644 index eb8ecc799..000000000 --- a/kolla-ansible/trilio-horizon-plugin/Dockerfile_victoria_centos +++ /dev/null @@ -1,36 +0,0 @@ -FROM kolla/centos-binary-horizon:victoria -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="centos-binary-trilio-horizon-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioVault Horizon Plugin" \ - description="TrilioVault Horizon Plugin for Kolla-ansible deployed OpenStack on centos platform" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf config-manager --set-enabled epel -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-* -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-* -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-NFV-OpenvSwitch.repo -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-NFV-OpenvSwitch.repo -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-OpenStack-* -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-OpenStack-* -RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-OpsTools.repo -RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-OpsTools.repo -RUN dnf install python3-tvault-horizon-plugin-el8 -y -RUN rm /etc/yum.repos.d/trilio.repo -RUN dnf config-manager --set-disabled epel - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py compress --force - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/kolla-ansible/trilio-horizon-plugin/Dockerfile_victoria_ubuntu b/kolla-ansible/trilio-horizon-plugin/Dockerfile_victoria_ubuntu deleted file mode 100644 index c7873cf88..000000000 --- a/kolla-ansible/trilio-horizon-plugin/Dockerfile_victoria_ubuntu +++ /dev/null @@ -1,27 +0,0 @@ -FROM kolla/ubuntu-binary-horizon:victoria -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="ubuntu-binary-trilio-horizon-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TrilioVault Horizon Plugin" \ - description="TrilioVault Horizon Plugin for Kolla-ansible deployed OpenStack on ubuntu platform" - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt update -y -RUN apt-get install -y python3-tvault-horizon-plugin python3-workloadmgrclient --allow-unauthenticated - - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py compress --force - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/kolla-ansible/trilio-horizon-plugin/Dockerfile_wallaby_centos b/kolla-ansible/trilio-horizon-plugin/Dockerfile_wallaby_centos deleted file mode 100644 index d6f5cd519..000000000 --- a/kolla-ansible/trilio-horizon-plugin/Dockerfile_wallaby_centos +++ /dev/null @@ -1,28 +0,0 @@ -FROM kolla/centos-binary-horizon:wallaby -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="centos-binary-trilio-horizon-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="TrilioVault Horizon Plugin" \ - description="TrilioVault Horizon Plugin for Kolla-ansible deployed OpenStack on centos platform" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf config-manager --set-enabled epel -RUN dnf install python3-tvault-horizon-plugin-el8 -y -RUN rm /etc/yum.repos.d/trilio.repo -RUN dnf config-manager --set-disabled epel - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py compress --force - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses \ No newline at end of file diff --git a/kolla-ansible/trilio-horizon-plugin/Dockerfile_wallaby_ubuntu b/kolla-ansible/trilio-horizon-plugin/Dockerfile_wallaby_ubuntu deleted file mode 100644 index a2ada012a..000000000 --- a/kolla-ansible/trilio-horizon-plugin/Dockerfile_wallaby_ubuntu +++ /dev/null @@ -1,27 +0,0 @@ -FROM kolla/ubuntu-binary-horizon:wallaby -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="ubuntu-binary-trilio-horizon-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="TrilioVault Horizon Plugin" \ - description="TrilioVault Horizon Plugin for Kolla-ansible deployed OpenStack on ubuntu platform" - -##Install datamover packages -ADD trilio.list /etc/apt/sources.list.d/ -RUN apt update -y -RUN apt-get install -y python3-tvault-horizon-plugin python3-workloadmgrclient --allow-unauthenticated - - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/bin/python3 /usr/share/openstack-dashboard/manage.py compress --force - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses \ No newline at end of file diff --git a/kolla-ansible/trilio-horizon-plugin/build_container.sh b/kolla-ansible/trilio-horizon-plugin/build_container.sh deleted file mode 100644 index b83cdb112..000000000 --- a/kolla-ansible/trilio-horizon-plugin/build_container.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -x - -set -e - -if [ $# -ne 2 ];then - echo -e "Script takes exactly 2 arguments\n" - echo -e "./build_container.sh " - echo -e "./build_container.sh trilio/openstack-horizon-with-trilio-plugin queens" - exit 1 -fi - -name=$1 -tag=$2 - -docker build --no-cache -t $name:$tag . -docker push $name:$tag diff --git a/kolla-ansible/trilio-horizon-plugin/horizon_template_overrides.j2 b/kolla-ansible/trilio-horizon-plugin/horizon_template_overrides.j2 deleted file mode 100644 index 6585d601b..000000000 --- a/kolla-ansible/trilio-horizon-plugin/horizon_template_overrides.j2 +++ /dev/null @@ -1,11 +0,0 @@ -{% extends parent_template %} - - -{% block horizon_header %} -RUN subscription-manager register --user= \ ---password= && subscription-manager attach --pool -{% endblock %} - - -# Horizon -{% set horizon_packages_append = ['tvault-horizon-plugin'] %} diff --git a/kolla-ansible/trilio-horizon-plugin/licensing.txt b/kolla-ansible/trilio-horizon-plugin/licensing.txt deleted file mode 100644 index a87288e84..000000000 --- a/kolla-ansible/trilio-horizon-plugin/licensing.txt +++ /dev/null @@ -1,10 +0,0 @@ -LicenseID TVAULT-59508796-8e7f-11e7-9a79- -Description TrilioVault License from TrilioData, Inc -CreationDate 2017-08-31 -LicenseEdition ENTERPRISE -LicenseTypeName EULA -Organisation Luxoft -LicenseExpiryDate 2020-05-27 -Licensed For 1 GB Backup Capacity -Evaluation False -License Key AAABUA0ODAoPeNp9Uk2PgjAQvfdXNNnr diff --git a/kolla-ansible/trilio-horizon-plugin/trilio.list b/kolla-ansible/trilio-horizon-plugin/trilio.list deleted file mode 100644 index c95b53900..000000000 --- a/kolla-ansible/trilio-horizon-plugin/trilio.list +++ /dev/null @@ -1 +0,0 @@ -deb [trusted=yes] https://apt.fury.io/triliodata-dev-stable-4-2/ / diff --git a/kolla-ansible/trilio-horizon-plugin/trilio.repo b/kolla-ansible/trilio-horizon-plugin/trilio.repo deleted file mode 100644 index fa008f8ac..000000000 --- a/kolla-ansible/trilio-horizon-plugin/trilio.repo +++ /dev/null @@ -1,5 +0,0 @@ -[triliovault-4-2] -name=triliovault-4-2 -baseurl=http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-stable-4-2/yum/ -gpgcheck=0 -enabled=1 diff --git a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel.py b/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel.py deleted file mode 100644 index 83107de44..000000000 --- a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel.py +++ /dev/null @@ -1,10 +0,0 @@ -# The slug of the panel to be added to HORIZON_CONFIG. Required. -PANEL = 'workloads_admin' -# The slug of the dashboard the PANEL associated with. Required. -PANEL_DASHBOARD = 'admin' -# The slug of the panel group the PANEL is associated with. -PANEL_GROUP = 'backups-admin' -# Python panel class of the PANEL to be added. -ADD_PANEL = ('dashboards.workloads_admin.panel.Workloads_admin') -ADD_INSTALLED_APPS = ['dashboards'] -DISABLED = False diff --git a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel_group.py b/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel_group.py deleted file mode 100644 index 9d8429742..000000000 --- a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel_group.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.utils.translation import ugettext_lazy as _ -# The slug of the panel group to be added to HORIZON_CONFIG. Required. -PANEL_GROUP = 'backups-admin' -# The display name of the PANEL_GROUP. Required. -PANEL_GROUP_NAME = _('Backups-Admin') -# The slug of the dashboard the PANEL_GROUP associated with. Required. -PANEL_GROUP_DASHBOARD = 'admin' -DISABLED = False diff --git a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel.py b/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel.py deleted file mode 100644 index 7c101db90..000000000 --- a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel.py +++ /dev/null @@ -1,9 +0,0 @@ -# The slug of the panel to be added to HORIZON_CONFIG. Required. -PANEL = 'workloads' -# The slug of the dashboard the PANEL associated with. Required. -PANEL_DASHBOARD = 'project' -# The slug of the panel group the PANEL is associated with. -PANEL_GROUP = 'backups' -# Python panel class of the PANEL to be added. -ADD_PANEL = ('dashboards.workloads.panel.Workloads') -DISABLED = False diff --git a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel_group.py b/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel_group.py deleted file mode 100644 index ea77c0bcd..000000000 --- a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel_group.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.utils.translation import ugettext_lazy as _ -# The slug of the panel group to be added to HORIZON_CONFIG. Required. -PANEL_GROUP = 'backups' -# The display name of the PANEL_GROUP. Required. -PANEL_GROUP_NAME = _('Backups') -# The slug of the dashboard the PANEL_GROUP associated with. Required. -PANEL_GROUP_DASHBOARD = 'project' -DISABLED = False diff --git a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_settings_panel.py b/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_settings_panel.py deleted file mode 100644 index 2221e0a33..000000000 --- a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_settings_panel.py +++ /dev/null @@ -1,9 +0,0 @@ -# The slug of the panel to be added to HORIZON_CONFIG. Required. -PANEL = 'settings' -# The slug of the dashboard the PANEL associated with. Required. -PANEL_DASHBOARD = 'project' -# The slug of the panel group the PANEL is associated with. -PANEL_GROUP = 'backups' -# Python panel class of the PANEL to be added. -ADD_PANEL = ('dashboards.settings.panel.Settings') -DISABLED = False diff --git a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/templatetags/tvault_filter.py b/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/templatetags/tvault_filter.py deleted file mode 100644 index 4f1707626..000000000 --- a/kolla-ansible/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/templatetags/tvault_filter.py +++ /dev/null @@ -1,125 +0,0 @@ -from django import template -from openstack_dashboard import api -from openstack_dashboard import policy -from datetime import datetime -from django.template.defaultfilters import stringfilter -import pytz -from django.utils.translation import ugettext_lazy as _ -import logging - -register = template.Library() - -LOG = logging.getLogger(__name__) - -@register.filter(name='getusername') -def get_user_name(user_id, request): - user_name = user_id - if policy.check((("identity", "identity:get_user"),), request): - try: - user = api.keystone.user_get(request, user_id) - if user: - user_name = user.username - except Exception as ex: - LOG.exception(ex) - pass - else: - LOG.debug(_("Insufficient privilege level to view user information.")) - return user_name - -@register.filter(name='getprojectname') -def get_project_name(project_id, request): - project_name = project_id - try: - project_info = api.keystone.tenant_get(request, project_id, admin = True) - if project_info: - project_name = project_info.name - except Exception as ex: - LOG.exception(ex) - pass - return project_name - -def get_time_zone(request): - tz = 'UTC' - try: - tz = request._get_cookies()['django_timezone'] - except: - try: - tz = request.COOKIES['django_timezone'] - except Exception as ex: - LOG.exception(ex) - pass - - return tz - -def get_local_time(record_time, input_format, output_format, tz): - """ - Convert and return the date and time - from GMT to local time - """ - try: - if not record_time or record_time is None or record_time == '': - return '' - else: - if not input_format \ - or input_format == None \ - or input_format == '': - input_format = '%Y-%m-%dT%H:%M:%S.%f'; - if not output_format \ - or output_format == None \ - or output_format == '': - output_format = "%m/%d/%Y %I:%M:%S %p"; - - local_time = datetime.strptime( - record_time, input_format) - local_tz = pytz.timezone(tz) - from_zone = pytz.timezone('UTC') - local_time = local_time.replace(tzinfo=from_zone) - local_time = local_time.astimezone(local_tz) - local_time = datetime.strftime( - local_time, output_format) - return local_time - except Exception as ex: - LOG.exception(ex) - pass - return record_time - -@register.filter(name='gettime') -def get_time_for_audit(time_stamp, request): - display_time = time_stamp - try: - time_zone_of_ui = get_time_zone(request) - display_time = get_local_time(time_stamp, '%I:%M:%S.%f %p - %m/%d/%Y','%I:%M:%S %p - %m/%d/%Y', time_zone_of_ui) - except Exception as ex: - LOG.exception(ex) - pass - return display_time - -@register.filter(name='getsnapshotquantifier') -def display_time_quantifier(seconds): - intervals = ( - ('weeks', 604800), # 60 * 60 * 24 * 7 - ('days', 86400), # 60 * 60 * 24 - ('hours', 3600), # 60 * 60 - ('minutes', 60), - ('seconds', 1), - ) - - result = [] - granularity = 4 - for name, count in intervals: - value = seconds // count - if value: - seconds -= value * count - if value == 1: - name = name.rstrip('s') - result.append("{} {}".format(value, name)) - else: - # Add a blank if we're in the middle of other values - if len(result) > 0: - result.append(None) - return ', '.join([x for x in result[:granularity] if x is not None]) - -@register.filter(name='custom_split') -@stringfilter -def custom_split(value, key): - key=int(key) - return value.split('_')[key] diff --git a/redhat-director-scripts/docker/build_containers.sh b/redhat-director-scripts/docker/build_containers.sh deleted file mode 100755 index 58e04f00e..000000000 --- a/redhat-director-scripts/docker/build_containers.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/bin/bash - -set -e - -echo -e "\nPREREQUISITES:\n\tPlease make sure that you logged in to docker.io and registry.redhat.io" -echo -e "\tdocker.io should be logged in with user having pull and push permissions to https://hub.docker.com/u/trilio/dashboard/" -echo -e "\tregistry.redhat.io registry login needs user with only pull permissions" -echo -e "\tYou can use following commands:" -echo -e "\n\t- docker login docker.io\n\t- docker login registry.redhat.io\n\t- podman login docker.io\n\t- podman login registry.redhat.io\n" - - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_container.sh " - exit 1 -fi - -tvault_version=$1 - - -current_dir=$(pwd) -base_dir="$(dirname $0)" - -if [ $base_dir = '.' ] -then -base_dir="$current_dir" -fi - -#declare -a openstack_releases=("rhosp13") - -#declare -a openstack_platforms=("centos" "ubuntu") - -################## Build RHOSP14 containers #################### - -## Work dir preparation for for rhosp14 -build_dir=tmp_docker_rhosp14_${tvault_version} -rm -rf $base_dir/${build_dir} -mkdir -p $base_dir/${build_dir} - -cp -R $base_dir/trilio-datamover $base_dir/${build_dir}/ -cp -R $base_dir/trilio-datamover-api $base_dir/${build_dir}/ -cp -R $base_dir/trilio-horizon-plugin $base_dir/${build_dir}/ - -#Build trilio-datamover containers for rhosp14 - -echo -e "Creating trilio-datamover container for rhosp14" -cd $base_dir/${build_dir}/trilio-datamover/ -rm Dockerfile -cp Dockerfile_rhosp14 Dockerfile -docker build --no-cache -t docker.io/trilio/trilio-datamover:${tvault_version}-rhosp14 . -docker push docker.io/trilio/trilio-datamover:${tvault_version}-rhosp14 - - - -#Build trilio_datamover-api containers for rhosp14 - -echo -e "Creating trilio-datamover-api container for rhosp14" -cd $base_dir/${build_dir}/trilio-datamover-api/ -rm Dockerfile -cp Dockerfile_rhosp14 Dockerfile -docker build --no-cache -t docker.io/trilio/trilio-datamover-api:${tvault_version}-rhosp14 . -docker push docker.io/trilio/trilio-datamover-api:${tvault_version}-rhosp14 - -## Build horizon plugin container for rhosp14 - -echo -e "Creating trilio horizon plugin container for rhosp14" -cd $base_dir/${build_dir}/trilio-horizon-plugin/ -rm Dockerfile -cp Dockerfile_rhosp14 Dockerfile -docker build --no-cache -t docker.io/trilio/trilio-horizon-plugin:${tvault_version}-rhosp14 . -docker push docker.io/trilio/trilio-horizon-plugin:${tvault_version}-rhosp14 - -# Clean the build_dir -rm -rf $base_dir/${build_dir} - -################## Build TripleO Rocky containers #################### - -## Work dir preparation for for tripleorocky -build_dir=tmp_docker_tripleorocky_${tvault_version} -rm -rf $base_dir/${build_dir} -mkdir -p $base_dir/${build_dir} - -cp -R $base_dir/trilio-datamover $base_dir/${build_dir}/ -cp -R $base_dir/trilio-datamover-api $base_dir/${build_dir}/ -cp -R $base_dir/trilio-horizon-plugin $base_dir/${build_dir}/ - -#Build trilio-datamover containers for Tripleo rocky - -echo -e "Creating trilio-datamover container for Tripleo rocky" -cd $base_dir/${build_dir}/trilio-datamover/ -rm Dockerfile -cp Dockerfile_tripleorocky Dockerfile -docker build --no-cache -t docker.io/trilio/trilio-datamover-tripleo:${tvault_version}-rocky . -docker push docker.io/trilio/trilio-datamover-tripleo:${tvault_version}-rocky - - - -#Build trilio_datamover-api containers for tripleo rocky - -echo -e "Creating trilio-datamover-api container for Tripleo rocky" -cd $base_dir/${build_dir}/trilio-datamover-api/ -rm Dockerfile -cp Dockerfile_tripleorocky Dockerfile -docker build --no-cache -t docker.io/trilio/trilio-datamover-api-tripleo:${tvault_version}-rocky . -docker push docker.io/trilio/trilio-datamover-api-tripleo:${tvault_version}-rocky - -## Build horizon plugin container for tripleo rocky - -echo -e "Creating trilio horizon plugin container for Tripleo rocky" -cd $base_dir/${build_dir}/trilio-horizon-plugin/ -rm Dockerfile -cp Dockerfile_tripleorocky Dockerfile -docker build --no-cache -t docker.io/trilio/trilio-horizon-plugin-tripleo:${tvault_version}-rocky . -docker push docker.io/trilio/trilio-horizon-plugin-tripleo:${tvault_version}-rocky - -# Clean the build_dir -rm -rf $base_dir/${build_dir} - - -<<'COMMENT' -################################################################################################# - -################## Build RHOSP15 containers #################### - -## Work dir preparation for for rhosp15 -build_dir=tmp_docker_rhosp15_${tvault_version} -rm -rf $base_dir/${build_dir} -mkdir -p $base_dir/${build_dir} - -cp -R $base_dir/trilio-datamover $base_dir/${build_dir}/ -cp -R $base_dir/trilio-datamover-api $base_dir/${build_dir}/ -cp -R $base_dir/trilio-horizon-plugin $base_dir/${build_dir}/ - -#Build trilio-datamover containers for rhosp15 - -echo -e "Creating trilio-datamover container for rhosp15" -cd $base_dir/${build_dir}/trilio-datamover/ -rm Dockerfile -cp Dockerfile_rhosp15 Dockerfile -buildah bud -t docker.io/trilio/trilio-datamover:${tvault_version}-rhosp15 . -podman push docker.io/trilio/trilio-datamover:${tvault_version}-rhosp15 - - - -#Build trilio_datamover-api containers for rhosp15 - -echo -e "Creating trilio-datamover-api container for rhosp15" -cd $base_dir/${build_dir}/trilio-datamover-api/ -rm Dockerfile -cp Dockerfile_rhosp15 Dockerfile -buildah bud -t docker.io/trilio/trilio-datamover-api:${tvault_version}-rhosp15 . -podman push docker.io/trilio/trilio-datamover-api:${tvault_version}-rhosp15 - -## Build horizon plugin container for rhosp15 - -echo -e "Creating trilio horizon plugin container for rhosp15" -cd $base_dir/${build_dir}/trilio-horizon-plugin/ -rm Dockerfile -cp Dockerfile_rhosp15 Dockerfile -buildah bud -t docker.io/trilio/trilio-horizon-plugin:${tvault_version}-rhosp15 . -podman push docker.io/trilio/trilio-horizon-plugin:${tvault_version}-rhosp15 - -# Clean the build_dir -rm -rf $base_dir/${build_dir} - -COMMENT -############################################# - diff --git a/redhat-director-scripts/docker/build_rhosp13_containers.sh b/redhat-director-scripts/docker/build_rhosp13_containers.sh deleted file mode 100755 index 2aefb7557..000000000 --- a/redhat-director-scripts/docker/build_rhosp13_containers.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash - -set -e - -echo -e "\nPREREQUISITES:\n\tPlease make sure that you logged in to docker.io and registry.redhat.io" -echo -e "\tdocker.io should be logged in with user having pull and push permissions to https://hub.docker.com/u/trilio/dashboard/" -echo -e "\tregistry.redhat.io registry login needs user with only pull permissions" -echo -e "\tYou can use following commands:" -echo -e "\n\t- docker login docker.io\n\t- docker login registry.redhat.io\n\t- podman login docker.io\n\t- podman login registry.redhat.io\n" - - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_container.sh " - exit 1 -fi - -tvault_version=$1 - - -current_dir=$(pwd) -base_dir="$(dirname $0)" - -if [ $base_dir = '.' ] -then -base_dir="$current_dir" -fi - -#declare -a openstack_releases=("rhosp13") - -#declare -a openstack_platforms=("centos" "ubuntu") - -##################### Create containers for rhosp13 ################ -declare -a repositories=("registry.redhat.io/rhosp13/openstack-base" "registry.access.redhat.com/rhosp13/openstack-nova-api" "registry.access.redhat.com/rhosp13/openstack-horizon") -for repository in "${repositories[@]}" -do - docker pull ${repository}:latest -done - -build_dir=tmp_docker_${tvault_version} -rm -rf $base_dir/${build_dir} -mkdir -p $base_dir/${build_dir} -cp -R $base_dir/trilio-datamover $base_dir/${build_dir}/ -cp -R $base_dir/trilio-datamover-api $base_dir/${build_dir}/ -cp -R $base_dir/trilio-horizon-plugin $base_dir/${build_dir}/ - -##Build trilio-datamover containers - -echo -e "Creating trilio-datamover container for rhosp13" -cd $base_dir/${build_dir}/trilio-datamover/ -rm Dockerfile -cp Dockerfile_rhosp13 Dockerfile -docker build --no-cache -t trilio/trilio-datamover:${tvault_version}-rhosp13 . - -#Build trilio_datamover-api containers - -echo -e "Creating trilio-datamover-api container for rhosp13" -cd $base_dir/${build_dir}/trilio-datamover-api/ -rm Dockerfile -cp Dockerfile_rhosp13 Dockerfile -docker build --no-cache -t trilio/trilio-datamover-api:${tvault_version}-rhosp13 . - - -## Build horizon plugin - -echo -e "Creating trilio horizon plugin container for rhosp13" -cd $base_dir/${build_dir}/trilio-horizon-plugin/ -rm Dockerfile -cp Dockerfile_rhosp13 Dockerfile -docker build --no-cache -t trilio/trilio-horizon-plugin:${tvault_version}-rhosp13 . - - - -# Clean the build_dir -rm -rf $base_dir/${build_dir} - diff --git a/redhat-director-scripts/docker/build_rhosp15.sh b/redhat-director-scripts/docker/build_rhosp15.sh deleted file mode 100755 index 3df4cd4c6..000000000 --- a/redhat-director-scripts/docker/build_rhosp15.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -x - -set -e - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_rhosp15.sh " - exit 1 -fi - -TVAULT_VERSION=$1 - - -current_dir=$(pwd) -base_dir="$(dirname $0)" - -if [ $base_dir = '.' ] -then -base_dir="$current_dir" -fi - -build_dir=tmp_docker_rhosp15_${TVAULT_VERSION} -rm -rf $base_dir/${build_dir} -mkdir -p $base_dir/${build_dir} - -cp -R $base_dir/trilio-datamover $base_dir/${build_dir}/ -cp -R $base_dir/trilio-datamover-api $base_dir/${build_dir}/ -cp -R $base_dir/trilio-horizon-plugin $base_dir/${build_dir}/ - -#Build trilio-datamover containers for rhosp15 - -echo -e "Creating trilio-datamover container for rhosp15" -cd $base_dir/${build_dir}/trilio-datamover/ -rm Dockerfile -cp Dockerfile_rhosp15 Dockerfile -buildah bud -t docker.io/trilio/trilio-datamover:${TVAULT_VERSION}-rhosp15 . -podman push docker.io/trilio/trilio-datamover:${TVAULT_VERSION}-rhosp15 - - - -#Build trilio_datamover-api containers for rhosp15 - -echo -e "Creating trilio-datamover-api container for rhosp15" -cd $base_dir/${build_dir}/trilio-datamover-api/ -rm Dockerfile -cp Dockerfile_rhosp15 Dockerfile -buildah bud -t docker.io/trilio/trilio-datamover-api:${TVAULT_VERSION}-rhosp15 . -podman push docker.io/trilio/trilio-datamover-api:${TVAULT_VERSION}-rhosp15 - -## Build horizon plugin - -echo -e "Creating trilio horizon plugin container for rhosp15" -cd $base_dir/${build_dir}/trilio-horizon-plugin/ -rm Dockerfile -cp Dockerfile_rhosp15 Dockerfile -buildah bud -t docker.io/trilio/trilio-horizon-plugin:${TVAULT_VERSION}-rhosp15 . -podman push docker.io/trilio/trilio-horizon-plugin:${TVAULT_VERSION}-rhosp15 - -# Clean the build_dir -rm -rf $base_dir/${build_dir} diff --git a/redhat-director-scripts/docker/build_rhosp16_containers.sh b/redhat-director-scripts/docker/build_rhosp16_containers.sh deleted file mode 100755 index 74d06e66c..000000000 --- a/redhat-director-scripts/docker/build_rhosp16_containers.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash - -set -e - -echo -e "\nPREREQUISITES:\n\tPlease make sure that you logged in to docker.io and registry.redhat.io" -echo -e "\tdocker.io should be logged in with user having pull and push permissions to https://hub.docker.com/u/trilio/dashboard/" -echo -e "\tregistry.redhat.io registry login needs user with only pull permissions" -echo -e "\tYou can use following commands:" -echo -e "\n\t- podman login docker.io\n\t- podman login registry.redhat.io\n" - - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_container.sh " - exit 1 -fi - -tvault_version=$1 - - -current_dir=$(pwd) -base_dir="$(dirname $0)" - -if [ $base_dir = '.' ] -then -base_dir="$current_dir" -fi - -declare -a openstack_releases=("rhosp16.1" "rhosp16.2") - -declare -a rhosp_releases=("16.1" "16.2") - -declare -a repositories=("registry.redhat.io/rhosp-rhel8/openstack-base" "registry.redhat.io/rhosp-rhel8/openstack-nova-api" "registry.redhat.io/rhosp-rhel8/openstack-horizon") - -for rhosp_release in "${rhosp_releases[@]}" -do - for repository in "${repositories[@]}" - do - podman pull --authfile /root/redhat-auth.json ${repository}:${rhosp_release} - done -done - -## now loop through the above array -for openstack_release in "${openstack_releases[@]}" -do - build_dir=tmp_docker_${openstack_release} - rm -rf $base_dir/${build_dir} - mkdir -p $base_dir/${build_dir} - cp -R $base_dir/trilio-datamover $base_dir/${build_dir}/ - cp -R $base_dir/trilio-datamover-api $base_dir/${build_dir}/ - cp -R $base_dir/trilio-horizon-plugin $base_dir/${build_dir}/ - - #Build trilio-datamover containers - echo -e "Creating trilio-datamover container for ${openstack_release}" - cd $base_dir/${build_dir}/trilio-datamover/ - cp Dockerfile_${openstack_release} Dockerfile - buildah bud --format docker -t docker.io/trilio/trilio-datamover:${tvault_version}-${openstack_release} . - podman push --authfile /root/auth.json docker.io/trilio/trilio-datamover:${tvault_version}-${openstack_release} - - - #Build trilio_datamover-api containers - echo -e "Creating trilio-datamover container-api for ${openstack_release}" - cd $base_dir/${build_dir}/trilio-datamover-api/ - cp Dockerfile_${openstack_release} Dockerfile - buildah bud --format docker -t docker.io/trilio/trilio-datamover-api:${tvault_version}-${openstack_release} . - podman push --authfile /root/auth.json docker.io/trilio/trilio-datamover-api:${tvault_version}-${openstack_release} - - #Build trilio_horizon_plugin containers - echo -e "Creating trilio-horizon-plugin container for ${openstack_release}" - cd $base_dir/${build_dir}/trilio-horizon-plugin/ - cp Dockerfile_${openstack_release} Dockerfile - buildah bud --format docker -t docker.io/trilio/trilio-horizon-plugin:${tvault_version}-${openstack_release} . - podman push --authfile /root/auth.json docker.io/trilio/trilio-horizon-plugin:${tvault_version}-${openstack_release} - - # Clean the build_dir - rm -rf $base_dir/${build_dir} - -done - diff --git a/redhat-director-scripts/docker/build_tripleo_containers.sh b/redhat-director-scripts/docker/build_tripleo_containers.sh deleted file mode 100755 index e443d8234..000000000 --- a/redhat-director-scripts/docker/build_tripleo_containers.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash -x - -set -e - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_container.sh " - exit 1 -fi - -tvault_version=$1 - - -current_dir=$(pwd) -base_dir="$(dirname $0)" - -if [ $base_dir = '.' ] -then -base_dir="$current_dir" -fi - - -openstack_distro="tripleo" - -declare -a openstack_releases=("train") -#Commenting for 4.2.HF2 only -#declare -a openstack_releases=("train" "wallaby") - -declare -a openstack_platforms=("centos7") -#Commenting for 4.2.HF2 only -#declare -a openstack_platforms=("centos7" "centos8s") - -declare -a base_containers=("docker.io/tripleotrain/centos-binary-nova-compute:current-tripleo-rdo" "docker.io/tripleotrain/centos-binary-nova-api:current-tripleo-rdo" "docker.io/tripleotrain/centos-binary-horizon:current-tripleo-rdo") - -#Commenting for 4.2.HF2 only -#declare -a base_containers=("docker.io/tripleotrain/centos-binary-nova-compute:current-tripleo-rdo" "docker.io/tripleotrain/centos-binary-nova-api:current-tripleo-rdo" "docker.io/tripleotrain/centos-binary-horizon:current-tripleo-rdo" "docker.io/tripleotraincentos8/centos-binary-nova-compute:current-tripleo-rdo" "docker.io/tripleotraincentos8/centos-binary-nova-api:current-tripleo-rdo" "docker.io/tripleotraincentos8/centos-binary-horizon:current-tripleo-rdo" "docker.io/tripleowallaby/openstack-nova-compute:current-tripleo-rdo" "docker.io/tripleowallaby/openstack-nova-api:current-tripleo-rdo" "docker.io/tripleowallaby/openstack-horizon:current-tripleo-rdo") - - -for base_container in "${base_containers[@]}" -do - podman pull ${base_container} -done -count=0 -## now loop through the above array -for openstack_release in "${openstack_releases[@]}" -do - build_dir=tmp_docker_${openstack_distro}_${openstack_releases[$count]}_${openstack_platforms[$count]} - rm -rf $base_dir/${build_dir} - mkdir -p $base_dir/${build_dir} - cp -R $base_dir/trilio-datamover $base_dir/${build_dir}/ - cp -R $base_dir/trilio-datamover-api $base_dir/${build_dir}/ - cp -R $base_dir/trilio-horizon-plugin $base_dir/${build_dir}/ - - #Build trilio-datamover containers - echo -e "Creating trilio-datamover container for tripleo ${openstack_releases[$count]} ${openstack_platforms[$count]}" - cd $base_dir/${build_dir}/trilio-datamover/ - mv Dockerfile_${openstack_distro}_${openstack_releases[$count]}_${openstack_platforms[$count]} Dockerfile - curl https://trunk.rdoproject.org/centos8/component/tripleo/current/delorean.repo > delorean-component-tripleo.repo - curl -O http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-4.el8.noarch.rpm - curl -O http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-8-4.el8.noarch.rpm - buildah bud --format docker -t trilio/${openstack_distro}-${openstack_releases[$count]}-${openstack_platforms[$count]}-trilio-datamover:${tvault_version}-${openstack_distro} . - - - #Build trilio_datamover-api containers - echo -e "Creating trilio-datamover container-api for tripleo ${openstack_releases[$count]} ${openstack_platforms[$count]}" - cd $base_dir/${build_dir}/trilio-datamover-api/ - mv Dockerfile_${openstack_distro}_${openstack_releases[$count]}_${openstack_platforms[$count]} Dockerfile - curl -O http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-4.el8.noarch.rpm - curl -O http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-8-4.el8.noarch.rpm - curl https://trunk.rdoproject.org/centos8/component/tripleo/current/delorean.repo > delorean-component-tripleo.repo - buildah bud --format docker -t trilio/${openstack_distro}-${openstack_releases[$count]}-${openstack_platforms[$count]}-trilio-datamover-api:${tvault_version}-${openstack_distro} . - - - #Build trilio_horizon_plugin containers - echo -e "Creating trilio-horizon-plugin container for tripleo ${openstack_releases[$count]} ${openstack_platforms[$count]}" - cd $base_dir/${build_dir}/trilio-horizon-plugin/ - mv Dockerfile_${openstack_distro}_${openstack_releases[$count]}_${openstack_platforms[$count]} Dockerfile - curl -O http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-4.el8.noarch.rpm - curl -O http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-8-4.el8.noarch.rpm - curl https://trunk.rdoproject.org/centos8/component/tripleo/current/delorean.repo > delorean-component-tripleo.repo - buildah bud --format docker -t trilio/${openstack_distro}-${openstack_releases[$count]}-${openstack_platforms[$count]}-trilio-horizon-plugin:${tvault_version}-${openstack_distro} . - - # Clean the build_dir - rm -rf $base_dir/${build_dir} - let count=count+1 -done diff --git a/redhat-director-scripts/docker/publish_containers.sh b/redhat-director-scripts/docker/publish_containers.sh deleted file mode 100755 index 49672b261..000000000 --- a/redhat-director-scripts/docker/publish_containers.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -set -e - - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_container.sh " - exit 1 -fi - -tvault_version=$1 - - -docker tag trilio/trilio-datamover-api:${tvault_version}-rhosp13 docker.io/trilio/trilio-datamover-api:${tvault_version}-rhosp13 -docker tag trilio/trilio-datamover:${tvault_version}-rhosp13 \ -docker.io/trilio/trilio-datamover:${tvault_version}-rhosp13 -docker tag trilio/trilio-horizon-plugin:${tvault_version}-rhosp13 docker.io/trilio/trilio-horizon-plugin:${tvault_version}-rhosp13 - -docker push docker.io/trilio/trilio-datamover-api:${tvault_version}-rhosp13 -docker push docker.io/trilio/trilio-datamover:${tvault_version}-rhosp13 -docker push docker.io/trilio/trilio-horizon-plugin:${tvault_version}-rhosp13 diff --git a/redhat-director-scripts/docker/publish_tripleo_containers.sh b/redhat-director-scripts/docker/publish_tripleo_containers.sh deleted file mode 100755 index 5ffe4d29a..000000000 --- a/redhat-director-scripts/docker/publish_tripleo_containers.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -set -e - - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_container.sh " - exit 1 -fi - -tvault_version=$1 - - -openstack_distro="tripleo" - -declare -a openstack_releases=("train") -#Commenting for 4.2.HF2 only -#declare -a openstack_releases=("train" "wallaby") - -declare -a openstack_platforms=("centos7") -#Commenting for 4.2.HF2 only -#declare -a openstack_platforms=("centos7" "centos8s") - -count=0 -## now loop through the above array -for openstack_release in "${openstack_releases[@]}" -do - - container_prefix="${openstack_distro}-${openstack_releases[$count]}-${openstack_platforms[$count]}" - podman tag trilio/${container_prefix}-trilio-datamover-api:${tvault_version}-${openstack_distro} \ - docker.io/trilio/${container_prefix}-trilio-datamover-api:${tvault_version}-${openstack_distro} - podman push --authfile /root/auth.json docker.io/trilio/${container_prefix}-trilio-datamover-api:${tvault_version}-${openstack_distro} - - podman tag trilio/${container_prefix}-trilio-datamover:${tvault_version}-${openstack_distro} \ - docker.io/trilio/${container_prefix}-trilio-datamover:${tvault_version}-${openstack_distro} - podman push --authfile /root/auth.json docker.io/trilio/${container_prefix}-trilio-datamover:${tvault_version}-${openstack_distro} - - podman tag trilio/${container_prefix}-trilio-horizon-plugin:${tvault_version}-${openstack_distro} \ - docker.io/trilio/${container_prefix}-trilio-horizon-plugin:${tvault_version}-${openstack_distro} - podman push --authfile /root/auth.json docker.io/trilio/${container_prefix}-trilio-horizon-plugin:${tvault_version}-${openstack_distro} - let count=count+1 -done diff --git a/redhat-director-scripts/docker/test_build_rhosp16.sh b/redhat-director-scripts/docker/test_build_rhosp16.sh deleted file mode 100755 index 1913e71d4..000000000 --- a/redhat-director-scripts/docker/test_build_rhosp16.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash - -set -e - -echo -e "\nPREREQUISITES:\n\tPlease make sure that you logged in to docker.io and registry.redhat.io" -echo -e "\tdocker.io should be logged in with user having pull and push permissions to https://hub.docker.com/u/trilio/dashboard/" -echo -e "\tregistry.redhat.io registry login needs user with only pull permissions" -echo -e "\tYou can use following commands:" -echo -e "\n\t- docker login docker.io\n\t- docker login registry.redhat.io\n\t- podman login docker.io\n\t- podman login registry.redhat.io\n" - - -if [ $# -lt 1 ];then - echo "Script takes exacyly 1 argument" - echo -e "./build_container.sh " - exit 1 -fi - -tvault_version=$1 - - -current_dir=$(pwd) -base_dir="$(dirname $0)" - -if [ $base_dir = '.' ] -then -base_dir="$current_dir" -fi - -#declare -a openstack_releases=("rhosp13") - -#declare -a openstack_platforms=("centos" "ubuntu") - - -################# Create containers for RHOSP16 ####################### -## Work dir preparation for for rhosp16 -build_dir=tmp_docker_rhosp16_${tvault_version} -rm -rf $base_dir/${build_dir} -mkdir -p $base_dir/${build_dir} - -cp -R $base_dir/trilio-datamover $base_dir/${build_dir}/ -cp -R $base_dir/trilio-datamover-api $base_dir/${build_dir}/ -cp -R $base_dir/trilio-horizon-plugin $base_dir/${build_dir}/ - -podman login registry.redhat.io -podman pull registry.redhat.io/rhosp-rhel8/openstack-nova-compute:16.0 -podman pull registry.redhat.io/rhosp-rhel8/openstack-nova-api:16.0 -podman pull registry.redhat.io/rhosp-rhel8/openstack-horizon:16.0 - -#Build trilio-datamover containers for rhosp16 - -echo -e "Creating trilio-datamover container for rhosp16" -cd $base_dir/${build_dir}/trilio-datamover/ -rm Dockerfile -cp Dockerfile_rhosp16 Dockerfile -buildah bud --format docker -t docker.io/trilio/trilio-datamover:${tvault_version}-rhosp16 . -openstack tripleo container image push --local docker.io/trilio/trilio-datamover:${tvault_version}-rhosp16 - - - -#Build trilio_datamover-api containers for rhosp16 - -echo -e "Creating trilio-datamover-api container for rhosp16" -cd $base_dir/${build_dir}/trilio-datamover-api/ -rm Dockerfile -cp Dockerfile_rhosp16 Dockerfile -buildah bud --format docker -t docker.io/trilio/trilio-datamover-api:${tvault_version}-rhosp16 . -openstack tripleo container image push --local docker.io/trilio/trilio-datamover-api:${tvault_version}-rhosp16 - -## Build horizon plugin container for rhosp16 - -echo -e "Creating trilio horizon plugin container for rhosp16" -cd $base_dir/${build_dir}/trilio-horizon-plugin/ -rm Dockerfile -cp Dockerfile_rhosp16 Dockerfile -buildah bud --format docker -t docker.io/trilio/trilio-horizon-plugin:${tvault_version}-rhosp16 . -openstack tripleo container image push --local docker.io/trilio/trilio-horizon-plugin:${tvault_version}-rhosp16 - -# Clean the build_dir -rm -rf $base_dir/${build_dir} - diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile deleted file mode 100644 index afa7093c7..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -FROM registry.access.redhat.com/rhosp13/openstack-nova-api -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 nova-api TrilioData trilio-datamover-api" \ - description="Red Hat OpenStack Platform 14.0 nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install dmapi -y -RUN mkdir -p /var/log/trilio-datamover-api -RUN chown -R nova:nova /var/log/trilio-datamover-api/ -RUN mkdir -p /var/cache/dmapi/ -RUN chown nova:nova /var/cache/dmapi/ -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp13 b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp13 deleted file mode 100644 index 6b824b2d8..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp13 +++ /dev/null @@ -1,30 +0,0 @@ -FROM registry.access.redhat.com/rhosp13/openstack-nova-api -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 nova-api TrilioData trilio-datamover-api" \ - description="Red Hat OpenStack Platform 14.0 nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install dmapi -y -RUN yum -y update-minimal --security --sec-severity=Important --sec-severity=Critical - -RUN rm -f /etc/yum.repos.d/trilio.repo -RUN usermod -a -G kolla dmapi - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp14 b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp14 deleted file mode 100644 index 92505ee72..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp14 +++ /dev/null @@ -1,31 +0,0 @@ -FROM registry.redhat.io/rhosp14/openstack-nova-api -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp14/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 nova-api TrilioData trilio-datamover-api" \ - description="Red Hat OpenStack Platform 14.0 nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install dmapi -y -RUN mkdir -p /var/log/trilio-datamover-api -RUN chown -R nova:nova /var/log/trilio-datamover-api/ -RUN mkdir -p /var/cache/dmapi/ -RUN chown nova:nova /var/cache/dmapi/ -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp15 b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp15 deleted file mode 100644 index f9e5529d8..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp15 +++ /dev/null @@ -1,31 +0,0 @@ -FROM registry.redhat.io/rhosp15-rhel8/openstack-nova-api -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 nova-api TrilioData trilio-datamover-api" \ - description="Red Hat OpenStack Platform 14.0 nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install python3-dmapi -y -RUN mkdir -p /var/log/trilio-datamover-api -RUN chown -R nova:nova /var/log/trilio-datamover-api/ -RUN mkdir -p /var/cache/dmapi/ -RUN chown nova:nova /var/cache/dmapi/ -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16 b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16 deleted file mode 100644 index 8a522114d..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16 +++ /dev/null @@ -1,29 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-nova-api:16.0 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp16/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 16.0 nova-api TrilioData trilio-datamover-api" \ - description="Red Hat OpenStack Platform 16.0 nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf install python3-dmapi -y -RUN yum -y --skip-broken --nobest update-minimal --security --sec-severity=Important --sec-severity=Critical -RUN rm -f /etc/yum.repos.d/trilio.repo -RUN usermod -a -G kolla dmapi - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16.1 b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16.1 deleted file mode 100644 index f29b4b4ad..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16.1 +++ /dev/null @@ -1,29 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-nova-api:16.1 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp16/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="Red Hat OpenStack Platform 16.1 nova-api TrilioData trilio-datamover-api" \ - description="Red Hat OpenStack Platform 16.1 nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf install python3-dmapi -y -RUN yum -y update-minimal --security --sec-severity=Important --sec-severity=Critical -RUN rm -f /etc/yum.repos.d/trilio.repo -RUN usermod -a -G kolla dmapi - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16.2 b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16.2 deleted file mode 100644 index 08bb96b7d..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_rhosp16.2 +++ /dev/null @@ -1,29 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-nova-api:16.2 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp16/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="Red Hat OpenStack Platform 16.2 nova-api TrilioData trilio-datamover-api" \ - description="Red Hat OpenStack Platform 16.2 nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf install python3-dmapi -y -RUN yum -y update-minimal --security --sec-severity=Important --sec-severity=Critical --nobest --skip-broken -RUN rm -f /etc/yum.repos.d/trilio.repo -RUN usermod -a -G kolla dmapi - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_train_centos7 b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_train_centos7 deleted file mode 100644 index 2238f782a..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_train_centos7 +++ /dev/null @@ -1,38 +0,0 @@ -FROM docker.io/tripleotrain/centos-binary-nova-api:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="tripleo/centos-binary-nova-compute-triliodata" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TripleO Train nova-api TrilioData trilio-datamover-api" \ - description="TripleO Train nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -RUN yum clean all && yum-config-manager --save --setopt=delorean.skip_if_unavailable=true -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install dmapi -y -RUN rm -f /etc/yum.repos.d/trilio.repo -RUN usermod -a -G kolla dmapi -RUN yum clean all - - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_api_tripleo_centos7 /opt/tvault/start_datamover_api -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_api - - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_train_centos8 b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_train_centos8 deleted file mode 100644 index d1e82dc88..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_train_centos8 +++ /dev/null @@ -1,41 +0,0 @@ -FROM docker.io/tripleotraincentos8/centos-binary-nova-api:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="tripleo/centos-binary-nova-compute-triliodata" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TripleO Train nova-api TrilioData trilio-datamover-api" \ - description="TripleO Train nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -RUN dnf clean all -ADD trilio.repo delorean-component-tripleo.repo /etc/yum.repos.d/ -RUN dnf install -y python3-tripleo-repos -RUN tripleo-repos -b train current && tripleo-repos -b train current ceph -RUN sed -i 's#baseurl.*#baseurl=http://mirror.centos.org/centos-8/8/storage/x86_64/ceph-nautilus/#g' /etc/yum.repos.d/tripleo-centos-ceph-nautilus.repo - -RUN dnf install python3-dmapi -y -RUN rm -f /etc/yum.repos.d/trilio.repo -RUN usermod -a -G kolla dmapi -RUN dnf clean all - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_api_tripleo_centos8 /opt/tvault/start_datamover_api -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_api - - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_wallaby_centos8s b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_wallaby_centos8s deleted file mode 100644 index 3a5fd9386..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleo_wallaby_centos8s +++ /dev/null @@ -1,44 +0,0 @@ -FROM docker.io/tripleowallaby/openstack-nova-api:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="tripleo/openstack-nova-api-triliodata" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="TripleO Wallaby nova-api TrilioData trilio-datamover-api" \ - description="TripleO Wallaby nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -RUN dnf clean all -ADD trilio.repo delorean-component-tripleo.repo /etc/yum.repos.d/ -ADD centos-gpg-keys-8-4.el8.noarch.rpm centos-stream-repos-8-4.el8.noarch.rpm /root/ -RUN rpm -ivh /root/centos-stream-repos-8-4.el8.noarch.rpm /root/centos-gpg-keys-8-4.el8.noarch.rpm -RUN rm -f centos-gpg-keys-8-4.el8.noarch.rpm centos-gpg-keys-8-4.el8.noarch.rpm -RUN dnf install -y python3-tripleo-repos -RUN tripleo-repos -b wallaby current ceph - - -RUN dnf install python3-dmapi -y -RUN rm -f /etc/yum.repos.d/trilio.repo -RUN usermod -a -G kolla dmapi -RUN dnf clean all - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_api_tripleo_centos8 /opt/tvault/start_datamover_api -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_api - - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER dmapi \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleorocky b/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleorocky deleted file mode 100644 index fa8a9ef96..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/Dockerfile_tripleorocky +++ /dev/null @@ -1,32 +0,0 @@ -FROM docker.io/tripleorocky/centos-binary-nova-api:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp14/openstack-nova-api-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="TripleO OpenStack Platform Rocky nova-api TrilioData trilio-datamover-api" \ - description="TripleO OpenStack Platform Rocky nova-api TrilioData trilio-datamover-api" - - -# switch to root and install a custom RPM, etc. -USER root - - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum-config-manager --save --setopt=delorean.skip_if_unavailable=true -RUN yum install dmapi -y -RUN mkdir -p /var/log/trilio-datamover-api -RUN chown -R nova:nova /var/log/trilio-datamover-api/ -RUN mkdir -p /var/cache/dmapi/ -RUN chown nova:nova /var/cache/dmapi/ -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Copy license file -RUN mkdir /licenses -COPY licensing.txt /licenses - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover-api/README.md b/redhat-director-scripts/docker/trilio-datamover-api/README.md deleted file mode 100644 index ab7dcba11..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/README.md +++ /dev/null @@ -1,42 +0,0 @@ -## Assumptions -This container is only designed for and tested on Redhat OpenStack Platform 13. - -## Pre-requisites -1. Redhat OpenStack Platform 13 setup deployed with container approach -2. To build container you will need redhat subscription with OpenStack Platform suite - -## Command to build container -``` -git clone -cd /path/to/redhat-director-scripts/docker/trilio-dmapi/ -docker build \ ---build-arg redhat_username= --build-arg redhat_password= \ ---build-arg redhat_pool_id= -t shyambiradar/trilio-dmapi:queens . -``` - -## Command to run container - -If you are running this container on non RHOSP setup, create /var/log/containers/nova directory on node where you want to run this container. - -##Step1: -Create tvault-contego.conf with all parameters(backup target) at location "/var/lib/config-data/triliodm/etc/tvault-contego/tvault-contego.conf" -Use puppet for that:(use puppet/trilio) -puppet agent --test --tags dmapiconfig - -#### For NFS as backup target: -``` -docker run -v /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova:/etc/nova:ro \ --v /var/run/libvirt/:/var/run/libvirt/ -v /var/lib/config-data/triliodmaoi/etc/dmapi:/etc/dmapi:ro \ --v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin \ --v /sbin:/sbin --network host --privileged=true \ --dt --name dmapi shyambiradar/trilio-dmapi:queens -``` -#### For Amazon S3 as backup target: -``` -docker run -v /etc/nova:/etc/nova -v /var/run/libvirt/:/var/run/libvirt/ -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin -v /sbin:/sbin --network host --privileged=true -it --name debug shyambiradar/trilio-datamover:queens amazon_s3 -``` -#### Redhat Ceph S3 as backup target -``` -docker run -v /etc/nova:/etc/nova -v /var/run/libvirt/:/var/run/libvirt/ -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin -v /sbin:/sbin --network host --privileged=true -it --name debug shyambiradar/trilio-datamover:queens ceph_s3 - -``` diff --git a/redhat-director-scripts/docker/trilio-datamover-api/build_container.sh b/redhat-director-scripts/docker/trilio-datamover-api/build_container.sh deleted file mode 100755 index 29725ba19..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/build_container.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -set -e - -if [ $# -ne 2 ];then - echo -e "Script takes exactly 2 arguments\n" - echo -e "./build_container.sh " - echo -e "./build_container.sh shyambiradar/trilio-dmapi queens" - exit 1 -fi - -name=$1 -tag=$2 - -docker build --no-cache -t $name:$tag . -docker push $name:$tag diff --git a/redhat-director-scripts/docker/trilio-datamover-api/delorean-component-tripleo.repo b/redhat-director-scripts/docker/trilio-datamover-api/delorean-component-tripleo.repo deleted file mode 100644 index 34acbf0fd..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/delorean-component-tripleo.repo +++ /dev/null @@ -1,6 +0,0 @@ -[delorean-component-tripleo] -name=delorean-puppet-apache-e44f1001e4b822767fced91afe7e216aa1b647a0 -baseurl=https://trunk.rdoproject.org/centos8/component/tripleo/e4/4f/e44f1001e4b822767fced91afe7e216aa1b647a0_642db7af -enabled=1 -gpgcheck=0 -priority=1 \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover-api/licensing.txt b/redhat-director-scripts/docker/trilio-datamover-api/licensing.txt deleted file mode 100644 index a87288e84..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/licensing.txt +++ /dev/null @@ -1,10 +0,0 @@ -LicenseID TVAULT-59508796-8e7f-11e7-9a79- -Description TrilioVault License from TrilioData, Inc -CreationDate 2017-08-31 -LicenseEdition ENTERPRISE -LicenseTypeName EULA -Organisation Luxoft -LicenseExpiryDate 2020-05-27 -Licensed For 1 GB Backup Capacity -Evaluation False -License Key AAABUA0ODAoPeNp9Uk2PgjAQvfdXNNnr diff --git a/redhat-director-scripts/docker/trilio-datamover-api/run_container.sh b/redhat-director-scripts/docker/trilio-datamover-api/run_container.sh deleted file mode 100755 index e8a6fbc99..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/run_container.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -x - - -if [ ! -f /var/lib/config-data/triliodmapi/etc/dmapi/dmapi.conf ]; then - echo "Before running this script, create dmapi.conf file at :\"/var/lib/config-data/triliodmapi/etc/dmapi/dmapi.conf\"" - exit 1 -fi - -if [ ! -d /var/lib/config-data/puppet-generated/nova/etc/nova ]; then - echo "Script is expecting nova.conf to be available at /var/lib/config-data/puppet-generated/nova/etc/nova" -fi - -docker run -v /var/lib/config-data/puppet-generated/nova/etc/nova:/etc/nova:ro \ --v /var/lib/config-data/triliodmapi/etc/dmapi/:/etc/dmapi:ro -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin \ --v /sbin:/sbin --network host --privileged=true \ --dt --name dmapi shyambiradar/trilio-dmapi:queens diff --git a/redhat-director-scripts/docker/trilio-datamover-api/start_datamover_api_tripleo_centos7 b/redhat-director-scripts/docker/trilio-datamover-api/start_datamover_api_tripleo_centos7 deleted file mode 100644 index 11fbfc3de..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/start_datamover_api_tripleo_centos7 +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/python /usr/bin/dmapi-api \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover-api/start_datamover_api_tripleo_centos8 b/redhat-director-scripts/docker/trilio-datamover-api/start_datamover_api_tripleo_centos8 deleted file mode 100644 index 7dca421ee..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/start_datamover_api_tripleo_centos8 +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/python3 /usr/bin/dmapi-api \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover-api/trilio.repo b/redhat-director-scripts/docker/trilio-datamover-api/trilio.repo deleted file mode 100644 index eaaa8b9a8..000000000 --- a/redhat-director-scripts/docker/trilio-datamover-api/trilio.repo +++ /dev/null @@ -1,5 +0,0 @@ -[triliovault-4-2] -name=triliovault-4-2 -baseurl=http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-hotfix1-4-2/yum/ -gpgcheck=0 -enabled=1 \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile b/redhat-director-scripts/docker/trilio-datamover/Dockerfile deleted file mode 100644 index 5922bc101..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile +++ /dev/null @@ -1,55 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-nova-compute:16.0 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp16/openstack-nova-compute-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 16.0 nova-compute TrilioData Datamover" \ - description="Red Hat OpenStack Platform 16.0 nova-compute TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ - -RUN dnf clean all -RUN dnf config-manager --enable openstack-16-for-rhel-8-x86_64-rpms --enable rhel-8-for-x86_64-baseos-rpms -RUN yum install python3-tvault-contego puppet-triliovault python3-s3fuse-plugin -y -RUN dnf config-manager --disable openstack-16-for-rhel-8-x86_64-rpms --disable rhel-8-for-x86_64-baseos-rpms - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp13 b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp13 deleted file mode 100644 index a503fab58..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp13 +++ /dev/null @@ -1,61 +0,0 @@ -FROM registry.redhat.io/rhosp13/openstack-base:13.0 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-nova-compute-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 nova-compute TrilioData Datamover" \ - description="Red Hat OpenStack Platform 14.0 nova-compute TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum clean all -RUN yum-config-manager --enable rhel-7-server-openstack-13-rpms --enable rhel-7-server-rpms --enable rhel-7-server-extras-rpms --enable rhel-ha-for-rhel-7-server-rpms -RUN yum install python3 openstack-nova-common python-nova python2-novaclient python-pyudev fuse nfs-utils -y -RUN usermod -u 42436 nova && groupmod -g 42436 nova && usermod -aG disk,libvirt,kolla nova -RUN yum install tvault-contego puppet-triliovault python-s3fuse-plugin-cent7 qemu-img-rhev ceph-common libvirt-python python2-cinderclient -y -RUN python3 -m venv /home/tvault/.s3venv -RUN /home/tvault/.s3venv/bin/pip install --upgrade pip -RUN /home/tvault/.s3venv/bin/pip install --extra-index-url "https://pypi.fury.io/triliodata-stable-4-2/" s3fuse --upgrade --no-cache-dir -RUN yum -y update-minimal --security --sec-severity=Important --sec-severity=Critical -RUN yum-config-manager --disable rhel-7-server-openstack-13-rpms --disable rhel-7-server-rpms --disable rhel-7-server-extras-rpms --disable rhel-ha-for-rhel-7-server-rpms - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN chown root:nova /usr/share/nova/nova-dist.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp14 b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp14 deleted file mode 100644 index 03249b046..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp14 +++ /dev/null @@ -1,51 +0,0 @@ -FROM registry.redhat.io/rhosp14/openstack-nova-compute -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-nova-compute-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 nova-compute TrilioData Datamover" \ - description="Red Hat OpenStack Platform 14.0 nova-compute TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-contego puppet-triliovault -y - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp15 b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp15 deleted file mode 100644 index d018bc94d..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp15 +++ /dev/null @@ -1,51 +0,0 @@ -FROM registry.redhat.io/rhosp15-rhel8/openstack-nova-compute -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-nova-compute-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 nova-compute TrilioData Datamover" \ - description="Red Hat OpenStack Platform 14.0 nova-compute TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install python3-tvault-contego puppet-triliovault -y - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16 b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16 deleted file mode 100644 index 1f8242b6e..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16 +++ /dev/null @@ -1,58 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-nova-compute:16.0 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp16/openstack-nova-compute-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 16.0 nova-compute TrilioData Datamover" \ - description="Red Hat OpenStack Platform 16.0 nova-compute TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ - -RUN dnf clean all -RUN dnf config-manager --enable openstack-16-for-rhel-8-x86_64-rpms --enable rhel-8-for-x86_64-baseos-rpms -RUN dnf install python3-tvault-contego puppet-triliovault python3-s3fuse-plugin -y -RUN yum -y --skip-broken --nobest update-minimal --security --sec-severity=Important --sec-severity=Critical -RUN dnf config-manager --disable openstack-16-for-rhel-8-x86_64-rpms --disable rhel-8-for-x86_64-baseos-rpms - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs /opt/tvault/ -ADD start_tvault_object_store_rhel8 /opt/tvault/start_tvault_object_store -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers-rhel8 /etc/sudoers.d/nova-sudoers -RUN chown root:root /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16.1 b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16.1 deleted file mode 100644 index b7b42334c..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16.1 +++ /dev/null @@ -1,63 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-base:16.1 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="trilio/openstack-nova-compute-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="Red Hat OpenStack Platform 16.1 nova-compute TrilioData Datamover" \ - description="Red Hat OpenStack Platform 16.1 nova-compute TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ - -RUN dnf clean all -RUN dnf config-manager --enable openstack-16.1-for-rhel-8-x86_64-rpms --enable rhel-8-for-x86_64-baseos-rpms --enable advanced-virt-for-rhel-8-x86_64-rpms --enable rhceph-4-tools-for-rhel-8-x86_64-rpms --enable fast-datapath-for-rhel-8-x86_64-rpms -RUN dnf install openstack-nova-common python3-nova python3-novaclient udev fuse -y -RUN usermod -u 42436 nova && groupmod -g 42436 nova && usermod -aG disk,libvirt,kolla nova -RUN dnf install python3-tvault-contego puppet-triliovault python3-s3fuse-plugin qemu-img ceph-common python3-libvirt-6.0.0-1.module+el8.3.0+6423+e4cb6418 python3-cinderclient qemu-kvm-block-rbd -y -RUN yum -y update-minimal --security --sec-severity=Important --sec-severity=Critical --exclude=python3-libvirt -RUN dnf config-manager --disable openstack-16.1-for-rhel-8-x86_64-rpms --disable rhel-8-for-x86_64-baseos-rpms --disable advanced-virt-for-rhel-8-x86_64-rpms --disable rhceph-4-tools-for-rhel-8-x86_64-rpms --disable fast-datapath-for-rhel-8-x86_64-rpms - - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs /opt/tvault/ -RUN sed -i '0,/^/s//sudo \/usr\/sbin\/modprobe nbd nbds_max=128\n\n/' /opt/tvault/start_datamover_nfs -ADD start_tvault_object_store_rhel8 /opt/tvault/start_tvault_object_store -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers-rhel8 /etc/sudoers.d/nova-sudoers -RUN chown root:root /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN chown root:nova /usr/share/nova/nova-dist.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16.2 b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16.2 deleted file mode 100644 index 8ed2cb545..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_rhosp16.2 +++ /dev/null @@ -1,62 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-base:16.2 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="trilio/openstack-nova-compute-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="Red Hat OpenStack Platform 16.2 nova-compute TrilioData Datamover" \ - description="Red Hat OpenStack Platform 16.2 nova-compute TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ - -RUN dnf clean all -RUN dnf config-manager --enable openstack-16.2-for-rhel-8-x86_64-rpms --enable rhel-8-for-x86_64-baseos-rpms --enable advanced-virt-for-rhel-8-x86_64-rpms --enable rhceph-4-tools-for-rhel-8-x86_64-rpms --enable fast-datapath-for-rhel-8-x86_64-rpms -RUN dnf install openstack-nova-common python3-nova python3-novaclient udev fuse -y -RUN usermod -u 42436 nova && groupmod -g 42436 nova && usermod -aG disk,libvirt,kolla nova -RUN dnf install python3-tvault-contego puppet-triliovault python3-s3fuse-plugin qemu-img ceph-common python3-libvirt-7.0.0-1.module+el8.4.0+9469+2eaf72bc python3-cinderclient qemu-kvm-block-rbd -y -RUN yum -y update-minimal --security --sec-severity=Important --sec-severity=Critical --exclude=python3-libvirt -RUN dnf config-manager --disable openstack-16.2-for-rhel-8-x86_64-rpms --disable rhel-8-for-x86_64-baseos-rpms --disable advanced-virt-for-rhel-8-x86_64-rpms --disable rhceph-4-tools-for-rhel-8-x86_64-rpms --disable fast-datapath-for-rhel-8-x86_64-rpms - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 /opt/tvault/ -ADD start_tvault_object_store_python3 /opt/tvault/start_tvault_object_store -ADD start_datamover_nfs_python3 /opt/tvault/start_datamover_nfs -RUN sed -i '0,/^/s//sudo \/usr\/sbin\/modprobe nbd nbds_max=128\n\n/' /opt/tvault/start_datamover_nfs -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers-rhel8 /etc/sudoers.d/nova-sudoers -RUN chown root:root /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN chown root:nova /usr/share/nova/nova-dist.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_train_centos7 b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_train_centos7 deleted file mode 100644 index e7a496ba7..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_train_centos7 +++ /dev/null @@ -1,59 +0,0 @@ -FROM docker.io/tripleotrain/centos-binary-nova-compute:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="tripleo/centos-binary-nova-compute-triliodata" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TripleO Train nova-compute plugin TrilioData Datamover" \ - description="TripleO Train nova-compute plugin TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ - -RUN yum clean all -RUN yum install python3 -y -RUN yum install tvault-contego puppet-triliovault python-s3fuse-plugin-cent7 -y -RUN python3 -m venv /home/tvault/.s3venv -RUN /home/tvault/.s3venv/bin/pip install --upgrade pip -RUN /home/tvault/.s3venv/bin/pip install --extra-index-url "https://pypi.fury.io/triliodata-stable-4-2/" s3fuse --upgrade --no-cache-dir - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs /opt/tvault/ -ADD start_tvault_object_store /opt/tvault/start_tvault_object_store -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -RUN chown root:root /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_train_centos8 b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_train_centos8 deleted file mode 100644 index 95f665abd..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_train_centos8 +++ /dev/null @@ -1,59 +0,0 @@ -FROM docker.io/tripleotraincentos8/centos-binary-nova-compute:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="tripleo/centos-binary-nova-compute-triliodata" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TripleO Train nova-compute plugin TrilioData Datamover" \ - description="TripleO Train nova-compute plugin TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -RUN dnf clean all -ADD trilio.repo delorean-component-tripleo.repo /etc/yum.repos.d/ -RUN dnf install -y python3-tripleo-repos -RUN tripleo-repos -b train current && tripleo-repos -b train current ceph -RUN sed -i 's#baseurl.*#baseurl=http://mirror.centos.org/centos-8/8/storage/x86_64/ceph-nautilus/#g' /etc/yum.repos.d/tripleo-centos-ceph-nautilus.repo -RUN dnf install python3-tvault-contego puppet-triliovault python3-s3fuse-plugin -y - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 /opt/tvault/ -ADD start_tvault_object_store_tripleo_centos8 /opt/tvault/start_tvault_object_store -ADD start_datamover_nfs_tripleo_centos8 /opt/tvault/start_datamover_nfs -RUN sed -i '0,/^/s//sudo \/usr\/sbin\/modprobe nbd nbds_max=128\n\n/' /opt/tvault/start_datamover_nfs -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers-rhel8 /etc/sudoers.d/nova-sudoers -RUN chown root:root /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN dnf clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_wallaby_centos8s b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_wallaby_centos8s deleted file mode 100644 index 9ea6cf0ad..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleo_wallaby_centos8s +++ /dev/null @@ -1,62 +0,0 @@ -FROM docker.io/tripleowallaby/openstack-nova-compute:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="tripleo/openstack-nova-compute-triliodata" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="TripleO Wallaby nova-compute plugin TrilioData Datamover" \ - description="TripleO Wallaby nova-compute plugin TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -RUN dnf clean all -ADD trilio.repo delorean-component-tripleo.repo /etc/yum.repos.d/ -ADD centos-gpg-keys-8-4.el8.noarch.rpm centos-stream-repos-8-4.el8.noarch.rpm /root/ -RUN rpm -ivh /root/centos-stream-repos-8-4.el8.noarch.rpm /root/centos-gpg-keys-8-4.el8.noarch.rpm -RUN rm -f centos-gpg-keys-8-4.el8.noarch.rpm centos-gpg-keys-8-4.el8.noarch.rpm -RUN dnf install -y python3-tripleo-repos -RUN tripleo-repos -b wallaby current ceph - -RUN dnf install python3-tvault-contego puppet-triliovault python3-s3fuse-plugin -y - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 /opt/tvault/ -ADD start_tvault_object_store_tripleo_centos8 /opt/tvault/start_tvault_object_store -ADD start_datamover_nfs_tripleo_centos8 /opt/tvault/start_datamover_nfs -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store -RUN sed -i '0,/^/s//sudo \/usr\/sbin\/modprobe nbd nbds_max=128\n\n/' /opt/tvault/start_datamover_nfs - -##Copy conf files -ADD nova-sudoers-rhel8 /etc/sudoers.d/nova-sudoers -RUN chown root:root /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN dnf clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleorocky b/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleorocky deleted file mode 100644 index 47fc42b7b..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/Dockerfile_tripleorocky +++ /dev/null @@ -1,52 +0,0 @@ -FROM docker.io/tripleorocky/centos-binary-nova-compute:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="triliorocky/openstack-nova-compute-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="TripleO OpenStack Platform Rocky nova-compute TrilioData Datamover" \ - description="TripleO OpenStack Platform Rocky nova-compute TrilioData Datamover" - -# switch to root and install a custom RPM, etc. -USER root - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum-config-manager --save --setopt=delorean.skip_if_unavailable=true -RUN yum install tvault-contego puppet-triliovault -y - -#Copy executable files -RUN mkdir -p /opt/tvault/ -ADD start_datamover_s3 start_datamover_nfs start_tvault_object_store /opt/tvault/ -RUN chown -R nova:nova /opt/tvault/ -RUN chmod 755 /opt/tvault/start_datamover_s3 /opt/tvault/start_datamover_nfs /opt/tvault/start_tvault_object_store - -##Copy conf files -ADD nova-sudoers /etc/sudoers.d/nova-sudoers -ADD trilio.filters /usr/share/nova/rootwrap/trilio.filters -RUN usermod -aG disk nova -ADD tvault-contego.conf /etc/tvault-contego/tvault-contego.conf -RUN chown nova:nova /etc/tvault-contego/tvault-contego.conf -RUN mkdir -p /var/triliovault-mounts -RUN chown nova:nova /var/triliovault-mounts -RUN mkdir -p /var/triliovault -RUN chmod 777 /var/triliovault-mounts -RUN chown nova:nova /var/triliovault -RUN chmod 777 /var/triliovault -RUN mkdir -p /var/log/trilio-datamover -RUN chown nova:nova /var/log/trilio-datamover -ADD log-rotate-conf /etc/logrotate.d/tvault-contego - -##Clean subscription -RUN yum clean all -RUN rm -f /etc/yum.repos.d/trilio.repo - -##Add license -RUN mkdir /licenses -COPY licensing.txt /licenses - - -##Become nova user for further operations -USER nova diff --git a/redhat-director-scripts/docker/trilio-datamover/README.md b/redhat-director-scripts/docker/trilio-datamover/README.md deleted file mode 100644 index 3e8c9dc34..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/README.md +++ /dev/null @@ -1,42 +0,0 @@ -## Assumptions -This container is only designed for and tested on Redhat OpenStack Platform 13. - -## Pre-requisites -1. Redhat OpenStack Platform 13 setup deployed with container approach -2. To build container you will need redhat subscription with OpenStack Platform suite - -## Command to build container -``` -git clone -cd /path/to/redhat-director-scripts/docker/trilio-datamover/ -docker build \ ---build-arg redhat_username= --build-arg redhat_password= \ ---build-arg redhat_pool_id= -t shyambiradar/trilio-datamover:queens . -``` - -## Command to run container - -If you are running this container on non RHOSP setup, create /var/log/containers/nova directory on node where you want to run this container. - -##Step1: -Create tvault-contego.conf with all parameters(backup target) at location "/var/lib/config-data/triliodm/etc/tvault-contego/tvault-contego.conf" -Use puppet for that:(use puppet/trilio) -puppet agent --test --tags dmconfig - -#### For NFS as backup target: -``` -docker run -v /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova:/etc/nova:ro \ --v /var/run/libvirt/:/var/run/libvirt/ -v /var/lib/config-data/triliodm/etc/tvault-contego:/etc/tvault-contego:ro \ --v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin \ --v /sbin:/sbin --network host --privileged=true \ --dt --name dm shyambiradar/trilio-datamover:queens -``` -#### For Amazon S3 as backup target: -``` -docker run -v /etc/nova:/etc/nova -v /var/run/libvirt/:/var/run/libvirt/ -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin -v /sbin:/sbin --network host --privileged=true -it --name debug shyambiradar/trilio-datamover:queens amazon_s3 -``` -#### Redhat Ceph S3 as backup target -``` -docker run -v /etc/nova:/etc/nova -v /var/run/libvirt/:/var/run/libvirt/ -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin -v /sbin:/sbin --network host --privileged=true -it --name debug shyambiradar/trilio-datamover:queens ceph_s3 - -``` diff --git a/redhat-director-scripts/docker/trilio-datamover/build_container.sh b/redhat-director-scripts/docker/trilio-datamover/build_container.sh deleted file mode 100755 index a9b652a62..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/build_container.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -set -e - -if [ $# -lt 2 ];then - echo "Script takes exacyly 5 arguments" - echo -e "./build_container.sh " - exit 1 -fi - -name=$1 -tag=$2 -docker build --no-cache -t $name:$tag . -docker push $name:$tag diff --git a/redhat-director-scripts/docker/trilio-datamover/delorean-component-tripleo.repo b/redhat-director-scripts/docker/trilio-datamover/delorean-component-tripleo.repo deleted file mode 100644 index 34acbf0fd..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/delorean-component-tripleo.repo +++ /dev/null @@ -1,6 +0,0 @@ -[delorean-component-tripleo] -name=delorean-puppet-apache-e44f1001e4b822767fced91afe7e216aa1b647a0 -baseurl=https://trunk.rdoproject.org/centos8/component/tripleo/e4/4f/e44f1001e4b822767fced91afe7e216aa1b647a0_642db7af -enabled=1 -gpgcheck=0 -priority=1 \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover/licensing.txt b/redhat-director-scripts/docker/trilio-datamover/licensing.txt deleted file mode 100644 index a87288e84..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/licensing.txt +++ /dev/null @@ -1,10 +0,0 @@ -LicenseID TVAULT-59508796-8e7f-11e7-9a79- -Description TrilioVault License from TrilioData, Inc -CreationDate 2017-08-31 -LicenseEdition ENTERPRISE -LicenseTypeName EULA -Organisation Luxoft -LicenseExpiryDate 2020-05-27 -Licensed For 1 GB Backup Capacity -Evaluation False -License Key AAABUA0ODAoPeNp9Uk2PgjAQvfdXNNnr diff --git a/redhat-director-scripts/docker/trilio-datamover/log-rotate-conf b/redhat-director-scripts/docker/trilio-datamover/log-rotate-conf deleted file mode 100644 index 66c8366ab..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/log-rotate-conf +++ /dev/null @@ -1,9 +0,0 @@ -/var/log/nova/tvault-contego.log { -daily -missingok -notifempty -copytruncate -size=25M -rotate 3 -compress -} diff --git a/redhat-director-scripts/docker/trilio-datamover/nova-sudoers b/redhat-director-scripts/docker/trilio-datamover/nova-sudoers deleted file mode 100644 index 46a5894ec..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/nova-sudoers +++ /dev/null @@ -1,2 +0,0 @@ -nova ALL = (root) NOPASSWD: /usr/bin/privsep-helper * -nova ALL = (root) NOPASSWD: /usr/sbin/modprobe * diff --git a/redhat-director-scripts/docker/trilio-datamover/nova-sudoers-rhel8 b/redhat-director-scripts/docker/trilio-datamover/nova-sudoers-rhel8 deleted file mode 100644 index 46a5894ec..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/nova-sudoers-rhel8 +++ /dev/null @@ -1,2 +0,0 @@ -nova ALL = (root) NOPASSWD: /usr/bin/privsep-helper * -nova ALL = (root) NOPASSWD: /usr/sbin/modprobe * diff --git a/redhat-director-scripts/docker/trilio-datamover/run_container.sh b/redhat-director-scripts/docker/trilio-datamover/run_container.sh deleted file mode 100755 index 27f1daee4..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/run_container.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -x - -##Before running this scripts create conteo conf file in directory "/var/lib/config-data/triliodm/etc/tvault-contego" - -if [ ! -f /var/lib/config-data/triliodm/etc/tvault-contego/tvault-contego.conf ]; then - echo "Before running this script, create tvault-contego.conf file in directory:\"/var/lib/config-data/triliodm/etc/tvault-contego\"" - exit 1 -fi - -docker run -v /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova:/etc/nova:ro \ --v /var/run/libvirt/:/var/run/libvirt/ -v /var/lib/config-data/triliodm/etc/tvault-contego:/etc/tvault-contego:ro -v /usr/sbin:/usr/sbin -v /usr/bin:/usr/bin -v /bin:/bin \ --v /sbin:/sbin --network host --privileged=true \ --dt --name dm shyambiradar/trilio-datamover:queens diff --git a/redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs b/redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs deleted file mode 100644 index 35bf64e90..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs +++ /dev/null @@ -1,3 +0,0 @@ -/usr/bin/python /usr/bin/tvault-contego \ ---config-file=/usr/share/nova/nova-dist.conf --config-file=/etc/nova/nova.conf \ ---config-file=/etc/tvault-contego/tvault-contego.conf diff --git a/redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs_python3 b/redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs_python3 deleted file mode 100644 index 1560b3ffb..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs_python3 +++ /dev/null @@ -1,3 +0,0 @@ -/usr/bin/python3 /usr/bin/tvault-contego \ ---config-file=/usr/share/nova/nova-dist.conf --config-file=/etc/nova/nova.conf \ ---config-file=/etc/tvault-contego/tvault-contego.conf \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs_tripleo_centos8 b/redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs_tripleo_centos8 deleted file mode 100644 index 1560b3ffb..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/start_datamover_nfs_tripleo_centos8 +++ /dev/null @@ -1,3 +0,0 @@ -/usr/bin/python3 /usr/bin/tvault-contego \ ---config-file=/usr/share/nova/nova-dist.conf --config-file=/etc/nova/nova.conf \ ---config-file=/etc/tvault-contego/tvault-contego.conf \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover/start_datamover_s3 b/redhat-director-scripts/docker/trilio-datamover/start_datamover_s3 deleted file mode 100644 index c5347e87c..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/start_datamover_s3 +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -# Start the first process -/opt/tvault/start_tvault_object_store & -status=$? -if [ $status -ne 0 ]; then - echo "Failed to start tvault-object-store service: $status" - exit $status -fi - -# Start the second process -/opt/tvault/start_datamover_nfs & -status=$? -if [ $status -ne 0 ]; then - echo "Failed to start tvault contego service: $status" - exit $status -fi - -# Naive check runs checks once a minute to see if either of the processes exited. -# This illustrates part of the heavy lifting you need to do if you want to run -# more than one service in a container. The container exits with an error -# if it detects that either of the processes has exited. -# Otherwise it loops forever, waking up every 60 seconds - -while sleep 60; do - ps aux | grep contego | grep -q -v grep - PROCESS_1_STATUS=$? - ps aux | grep vaultfuse | grep -q -v grep - PROCESS_2_STATUS=$? - # If the greps above find anything, they exit with 0 status - # If they are not both 0, then something is wrong - if [ $PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0 ]; then - echo "One of the processes has already exited." - exit 1 - fi -done diff --git a/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store b/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store deleted file mode 100644 index 159126805..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store +++ /dev/null @@ -1,3 +0,0 @@ -/home/tvault/.s3venv/bin/python3 \ -/home/tvault/.s3venv/bin/s3vaultfuse.py \ ---config-file=/etc/tvault-contego/tvault-contego.conf diff --git a/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_python3 b/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_python3 deleted file mode 100644 index 19c684115..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_python3 +++ /dev/null @@ -1,3 +0,0 @@ -/usr/bin/python3 \ -/usr/bin/s3vaultfuse.py \ ---config-file=/etc/tvault-contego/tvault-contego.conf \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_rhel8 b/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_rhel8 deleted file mode 100644 index b2089bc68..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_rhel8 +++ /dev/null @@ -1,3 +0,0 @@ -/usr/bin/python \ -/usr/bin/s3vaultfuse.py \ ---config-file=/etc/tvault-contego/tvault-contego.conf diff --git a/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_tripleo_centos8 b/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_tripleo_centos8 deleted file mode 100644 index 19c684115..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/start_tvault_object_store_tripleo_centos8 +++ /dev/null @@ -1,3 +0,0 @@ -/usr/bin/python3 \ -/usr/bin/s3vaultfuse.py \ ---config-file=/etc/tvault-contego/tvault-contego.conf \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover/trilio.filters b/redhat-director-scripts/docker/trilio-datamover/trilio.filters deleted file mode 100644 index c2780cc64..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/trilio.filters +++ /dev/null @@ -1,10 +0,0 @@ -[Filters] -# mount and unmout filter -mount: CommandFilter, mount, root -umount: CommandFilter, umount, root -rescan-scsi-bus.sh: CommandFilter, /usr/bin/rescan-scsi-bus.sh, root -multipath: CommandFilter, multipath, root -qemu-img: CommandFilter, qemu-img, root -qemu-nbd: CommandFilter, qemu-nbd, root -rbd: CommandFilter, rbd, root -multipathd: CommandFilter, multipathd, root diff --git a/redhat-director-scripts/docker/trilio-datamover/trilio.repo b/redhat-director-scripts/docker/trilio-datamover/trilio.repo deleted file mode 100644 index eaaa8b9a8..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/trilio.repo +++ /dev/null @@ -1,5 +0,0 @@ -[triliovault-4-2] -name=triliovault-4-2 -baseurl=http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-hotfix1-4-2/yum/ -gpgcheck=0 -enabled=1 \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-datamover/tvault-contego.conf b/redhat-director-scripts/docker/trilio-datamover/tvault-contego.conf deleted file mode 100644 index 262318b4f..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/tvault-contego.conf +++ /dev/null @@ -1,23 +0,0 @@ -[DEFAULT] -#vault_storage_type = - -vault_data_directory_old = /var/triliovault -vault_data_directory = /var/triliovault-mounts -log_file = /var/log/nova/tvault-contego.log -debug = False -verbose = True -max_uploads_pending = 3 -max_commit_pending = 3 - -########For backup target type 's3' -#vault_s3_auth_version = DEFAULT -#vault_s3_access_key_id = -#vault_s3_secret_access_key = -#vault_s3_region_name = -#vault_s3_bucket = -#vault_s3_endpoint_url = -#vault_s3_ssl = - -########For backup target type 'nfs' -#vault_storage_nfs_export = -#vault_storage_nfs_options = diff --git a/redhat-director-scripts/docker/trilio-datamover/tvault-contego.service b/redhat-director-scripts/docker/trilio-datamover/tvault-contego.service deleted file mode 100644 index 33981f4e3..000000000 --- a/redhat-director-scripts/docker/trilio-datamover/tvault-contego.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=Tvault contego -After=openstack-nova-compute.service -StartLimitIntervalSec=120 -StartLimitInterval=120 -StartLimitBurst=3 - -[Service] -User=nova -Group=nova -Type=simple -ExecStart=/home/tvault/.virtenv/bin/python /home/tvault/.virtenv/bin/tvault-contego --config-file=/usr/share/nova/nova-dist.conf --config-file=/etc/nova/nova.conf --config-file=/etc/tvault-contego/tvault-contego.conf -TimeoutStopSec=20 -KillMode=process -Restart=on-failure -[Install] -WantedBy=multi-user.target diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile deleted file mode 100644 index 9a4a0ba45..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM registry.access.redhat.com/rhosp13/openstack-horizon -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-horizon-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" \ - description="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-horizon-plugin python-workloadmgrclient -y -RUN rm /etc/yum.repos.d/trilio.repo - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp13 b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp13 deleted file mode 100644 index 330767d5a..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp13 +++ /dev/null @@ -1,28 +0,0 @@ -FROM registry.access.redhat.com/rhosp13/openstack-horizon -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-horizon-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" \ - description="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-horizon-plugin workloadmgrclient -y -RUN yum -y update-minimal --security --sec-severity=Important --sec-severity=Critical -RUN rm /etc/yum.repos.d/trilio.repo - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/share/openstack-dashboard/manage.py compress --force - - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp14 b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp14 deleted file mode 100644 index 4020f7b48..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp14 +++ /dev/null @@ -1,23 +0,0 @@ -FROM registry.redhat.io/rhosp14/openstack-horizon -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp14/openstack-horizon-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" \ - description="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-horizon-plugin workloadmgrclient -y -RUN rm /etc/yum.repos.d/trilio.repo - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp15 b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp15 deleted file mode 100644 index 558ad607e..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp15 +++ /dev/null @@ -1,23 +0,0 @@ -FROM registry.redhat.io/rhosp15-rhel8/openstack-horizon -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp13/openstack-horizon-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" \ - description="Red Hat OpenStack Platform 14.0 horizon TrilioData TrilioVault Horizon Plugin" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install python3-tvault-horizon-plugin python3-workloadmgrclient -y -RUN rm /etc/yum.repos.d/trilio.repo - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16 b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16 deleted file mode 100644 index de4b5a368..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16 +++ /dev/null @@ -1,26 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-horizon:16.0 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp16/openstack-horizon-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="Red Hat OpenStack Platform 16.0 horizon TrilioData TrilioVault Horizon Plugin" \ - description="Red Hat OpenStack Platform 16.0 horizon TrilioData TrilioVault Horizon Plugin" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf install python3-tvault-horizon-plugin-el8 -y -RUN yum -y --skip-broken --nobest update-minimal --security --sec-severity=Important --sec-severity=Critical -RUN rm /etc/yum.repos.d/trilio.repo - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/share/openstack-dashboard/manage.py compress --force - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16.1 b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16.1 deleted file mode 100644 index a73548ba9..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16.1 +++ /dev/null @@ -1,26 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-horizon:16.1 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="trilio/openstack-horizon-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="Red Hat OpenStack Platform 16.1 horizon TrilioData TrilioVault Horizon Plugin" \ - description="Red Hat OpenStack Platform 16.1 horizon TrilioData TrilioVault Horizon Plugin" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf install python3-tvault-horizon-plugin-el8 -y -RUN yum -y update-minimal --security --sec-severity=Important --sec-severity=Critical -RUN rm /etc/yum.repos.d/trilio.repo - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/share/openstack-dashboard/manage.py compress --force - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16.2 b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16.2 deleted file mode 100644 index a16e5ac1c..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_rhosp16.2 +++ /dev/null @@ -1,26 +0,0 @@ -FROM registry.redhat.io/rhosp-rhel8/openstack-horizon:16.2 -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="trilio/openstack-horizon-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="Red Hat OpenStack Platform 16.2 horizon TrilioData TrilioVault Horizon Plugin" \ - description="Red Hat OpenStack Platform 16.2 horizon TrilioData TrilioVault Horizon Plugin" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN dnf install python3-tvault-horizon-plugin-el8 -y -RUN yum -y update-minimal --security --sec-severity=Important --sec-severity=Critical -RUN rm /etc/yum.repos.d/trilio.repo - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/share/openstack-dashboard/manage.py compress --force - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_train_centos7 b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_train_centos7 deleted file mode 100644 index 64cf78977..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_train_centos7 +++ /dev/null @@ -1,28 +0,0 @@ -FROM docker.io/tripleotrain/centos-binary-horizon:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="tripleo/centos-binary-nova-compute-triliodata" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TripleO Train Horizon plugin TrilioVault Horizon Plugin" \ - description="TripleO Train Horizon plugin TrilioVault Horizon Plugin" - -##Install datamover packages -RUN yum clean all -ADD trilio.repo /etc/yum.repos.d/ -RUN yum install tvault-horizon-plugin workloadmgrclient -y -RUN rm /etc/yum.repos.d/trilio.repo -RUN yum clean all - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/share/openstack-dashboard/manage.py compress --force - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_train_centos8 b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_train_centos8 deleted file mode 100644 index fcf9628ae..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_train_centos8 +++ /dev/null @@ -1,31 +0,0 @@ -FROM docker.io/tripleotraincentos8/centos-binary-horizon:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="tripleo/centos-binary-nova-compute-triliodata" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.1.0" \ - release="4.1" \ - summary="TripleO Train Horizon plugin TrilioData Datamover" \ - description="TripleO Train Horizon plugin TrilioData Datamover" - -##Install datamover packages -RUN dnf clean all -ADD trilio.repo delorean-component-tripleo.repo /etc/yum.repos.d/ -RUN dnf install -y python3-tripleo-repos -RUN tripleo-repos -b train current && tripleo-repos -b train current ceph -RUN sed -i 's#baseurl.*#baseurl=http://mirror.centos.org/centos-8/8/storage/x86_64/ceph-nautilus/#g' /etc/yum.repos.d/tripleo-centos-ceph-nautilus.repo -RUN dnf install python3-tvault-horizon-plugin-el8 -y -RUN rm /etc/yum.repos.d/trilio.repo -RUN dnf clean all - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/share/openstack-dashboard/manage.py compress --force - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_wallaby_centos8s b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_wallaby_centos8s deleted file mode 100644 index 699eb40c7..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleo_wallaby_centos8s +++ /dev/null @@ -1,34 +0,0 @@ -FROM docker.io/tripleowallaby/openstack-horizon:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="tripleo/openstack-nova-compute-triliodata" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.2.0" \ - release="4.2" \ - summary="TripleO Wallaby Horizon plugin TrilioData Datamover" \ - description="TripleO Wallaby Horizon plugin TrilioData Datamover" - -##Install datamover packages -RUN dnf clean all -ADD trilio.repo delorean-component-tripleo.repo /etc/yum.repos.d/ -ADD centos-gpg-keys-8-4.el8.noarch.rpm centos-stream-repos-8-4.el8.noarch.rpm /root/ -RUN rpm -ivh /root/centos-stream-repos-8-4.el8.noarch.rpm /root/centos-gpg-keys-8-4.el8.noarch.rpm -RUN rm -f centos-gpg-keys-8-4.el8.noarch.rpm centos-gpg-keys-8-4.el8.noarch.rpm -RUN dnf install -y python3-tripleo-repos -RUN tripleo-repos -b wallaby current ceph - -RUN dnf install python3-tvault-horizon-plugin-el8 -y -RUN rm /etc/yum.repos.d/trilio.repo -RUN dnf clean all - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ -RUN /usr/share/openstack-dashboard/manage.py collectstatic --clear --noinput -RUN /usr/share/openstack-dashboard/manage.py compress --force - - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleorocky b/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleorocky deleted file mode 100644 index 2a7ea3a19..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/Dockerfile_tripleorocky +++ /dev/null @@ -1,24 +0,0 @@ -FROM docker.io/tripleorocky/centos-binary-horizon:current-tripleo-rdo -MAINTAINER TrilioData shyam.biradar@trilio.io - -LABEL name="rhosp14/openstack-horizon-triliodata-plugin" \ - maintainer="shyam.biradar@trilio.io" \ - vendor="TrilioData" \ - version="4.0.0" \ - release="4.0" \ - summary="TripleO OpenStack Platform Rocky horizon TrilioData TrilioVault Horizon Plugin" \ - description="TripleO OpenStack Platform Rocky horizon TrilioData TrilioVault Horizon Plugin" - -##Install datamover packages -ADD trilio.repo /etc/yum.repos.d/ -RUN yum-config-manager --save --setopt=delorean.skip_if_unavailable=true -RUN yum install tvault-horizon-plugin workloadmgrclient -y -RUN rm /etc/yum.repos.d/trilio.repo - -##Move necessary files -ADD usr/share/openstack-dashboard/openstack_dashboard/local/enabled/* /usr/share/openstack-dashboard/openstack_dashboard/local/enabled/ -ADD usr/share/openstack-dashboard/openstack_dashboard/templatetags/* /usr/share/openstack-dashboard/openstack_dashboard/templatetags/ - -## Add license -RUN mkdir /licenses -COPY licensing.txt /licenses diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/build_container.sh b/redhat-director-scripts/docker/trilio-horizon-plugin/build_container.sh deleted file mode 100755 index b83cdb112..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/build_container.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -x - -set -e - -if [ $# -ne 2 ];then - echo -e "Script takes exactly 2 arguments\n" - echo -e "./build_container.sh " - echo -e "./build_container.sh trilio/openstack-horizon-with-trilio-plugin queens" - exit 1 -fi - -name=$1 -tag=$2 - -docker build --no-cache -t $name:$tag . -docker push $name:$tag diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/delorean-component-tripleo.repo b/redhat-director-scripts/docker/trilio-horizon-plugin/delorean-component-tripleo.repo deleted file mode 100644 index 34acbf0fd..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/delorean-component-tripleo.repo +++ /dev/null @@ -1,6 +0,0 @@ -[delorean-component-tripleo] -name=delorean-puppet-apache-e44f1001e4b822767fced91afe7e216aa1b647a0 -baseurl=https://trunk.rdoproject.org/centos8/component/tripleo/e4/4f/e44f1001e4b822767fced91afe7e216aa1b647a0_642db7af -enabled=1 -gpgcheck=0 -priority=1 \ No newline at end of file diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/horizon_template_overrides.j2 b/redhat-director-scripts/docker/trilio-horizon-plugin/horizon_template_overrides.j2 deleted file mode 100644 index 6585d601b..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/horizon_template_overrides.j2 +++ /dev/null @@ -1,11 +0,0 @@ -{% extends parent_template %} - - -{% block horizon_header %} -RUN subscription-manager register --user= \ ---password= && subscription-manager attach --pool -{% endblock %} - - -# Horizon -{% set horizon_packages_append = ['tvault-horizon-plugin'] %} diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/kolla-build.conf b/redhat-director-scripts/docker/trilio-horizon-plugin/kolla-build.conf deleted file mode 100644 index d4a18b07e..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/kolla-build.conf +++ /dev/null @@ -1,9 +0,0 @@ -[DEFAULT] -base=rhel -type=binary -namespace=rhosp13 -registry=registry.access.redhat.com -tag=13.0-45 -template_override=horizon_template_overrides.j2 -rpm_setup_config=trilio.repo -push=False diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/kolla_build_container.sh b/redhat-director-scripts/docker/trilio-horizon-plugin/kolla_build_container.sh deleted file mode 100644 index c8b139c92..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/kolla_build_container.sh +++ /dev/null @@ -1,2 +0,0 @@ -#cp kolla-build.conf /etc/kolla/ -#python /home/stack/kolla/tools/build.py --template-override horizon_template_overrides.j2 horizon diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/licensing.txt b/redhat-director-scripts/docker/trilio-horizon-plugin/licensing.txt deleted file mode 100644 index a87288e84..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/licensing.txt +++ /dev/null @@ -1,10 +0,0 @@ -LicenseID TVAULT-59508796-8e7f-11e7-9a79- -Description TrilioVault License from TrilioData, Inc -CreationDate 2017-08-31 -LicenseEdition ENTERPRISE -LicenseTypeName EULA -Organisation Luxoft -LicenseExpiryDate 2020-05-27 -Licensed For 1 GB Backup Capacity -Evaluation False -License Key AAABUA0ODAoPeNp9Uk2PgjAQvfdXNNnr diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/trilio.repo b/redhat-director-scripts/docker/trilio-horizon-plugin/trilio.repo deleted file mode 100644 index fa6cf98ff..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/trilio.repo +++ /dev/null @@ -1,5 +0,0 @@ -[triliovault-4-2] -name=triliovault-4-2 -baseurl=http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-hotfix1-4-2/yum/ -gpgcheck=0 -enabled=1 diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel.py b/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel.py deleted file mode 100644 index 83107de44..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel.py +++ /dev/null @@ -1,10 +0,0 @@ -# The slug of the panel to be added to HORIZON_CONFIG. Required. -PANEL = 'workloads_admin' -# The slug of the dashboard the PANEL associated with. Required. -PANEL_DASHBOARD = 'admin' -# The slug of the panel group the PANEL is associated with. -PANEL_GROUP = 'backups-admin' -# Python panel class of the PANEL to be added. -ADD_PANEL = ('dashboards.workloads_admin.panel.Workloads_admin') -ADD_INSTALLED_APPS = ['dashboards'] -DISABLED = False diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel_group.py b/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel_group.py deleted file mode 100644 index 9d8429742..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_admin_panel_group.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.utils.translation import ugettext_lazy as _ -# The slug of the panel group to be added to HORIZON_CONFIG. Required. -PANEL_GROUP = 'backups-admin' -# The display name of the PANEL_GROUP. Required. -PANEL_GROUP_NAME = _('Backups-Admin') -# The slug of the dashboard the PANEL_GROUP associated with. Required. -PANEL_GROUP_DASHBOARD = 'admin' -DISABLED = False diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel.py b/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel.py deleted file mode 100644 index 7c101db90..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel.py +++ /dev/null @@ -1,9 +0,0 @@ -# The slug of the panel to be added to HORIZON_CONFIG. Required. -PANEL = 'workloads' -# The slug of the dashboard the PANEL associated with. Required. -PANEL_DASHBOARD = 'project' -# The slug of the panel group the PANEL is associated with. -PANEL_GROUP = 'backups' -# Python panel class of the PANEL to be added. -ADD_PANEL = ('dashboards.workloads.panel.Workloads') -DISABLED = False diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel_group.py b/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel_group.py deleted file mode 100644 index ea77c0bcd..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_panel_group.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.utils.translation import ugettext_lazy as _ -# The slug of the panel group to be added to HORIZON_CONFIG. Required. -PANEL_GROUP = 'backups' -# The display name of the PANEL_GROUP. Required. -PANEL_GROUP_NAME = _('Backups') -# The slug of the dashboard the PANEL_GROUP associated with. Required. -PANEL_GROUP_DASHBOARD = 'project' -DISABLED = False diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_settings_panel.py b/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_settings_panel.py deleted file mode 100644 index 2221e0a33..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/local/enabled/tvault_settings_panel.py +++ /dev/null @@ -1,9 +0,0 @@ -# The slug of the panel to be added to HORIZON_CONFIG. Required. -PANEL = 'settings' -# The slug of the dashboard the PANEL associated with. Required. -PANEL_DASHBOARD = 'project' -# The slug of the panel group the PANEL is associated with. -PANEL_GROUP = 'backups' -# Python panel class of the PANEL to be added. -ADD_PANEL = ('dashboards.settings.panel.Settings') -DISABLED = False diff --git a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/templatetags/tvault_filter.py b/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/templatetags/tvault_filter.py deleted file mode 100644 index 4f1707626..000000000 --- a/redhat-director-scripts/docker/trilio-horizon-plugin/usr/share/openstack-dashboard/openstack_dashboard/templatetags/tvault_filter.py +++ /dev/null @@ -1,125 +0,0 @@ -from django import template -from openstack_dashboard import api -from openstack_dashboard import policy -from datetime import datetime -from django.template.defaultfilters import stringfilter -import pytz -from django.utils.translation import ugettext_lazy as _ -import logging - -register = template.Library() - -LOG = logging.getLogger(__name__) - -@register.filter(name='getusername') -def get_user_name(user_id, request): - user_name = user_id - if policy.check((("identity", "identity:get_user"),), request): - try: - user = api.keystone.user_get(request, user_id) - if user: - user_name = user.username - except Exception as ex: - LOG.exception(ex) - pass - else: - LOG.debug(_("Insufficient privilege level to view user information.")) - return user_name - -@register.filter(name='getprojectname') -def get_project_name(project_id, request): - project_name = project_id - try: - project_info = api.keystone.tenant_get(request, project_id, admin = True) - if project_info: - project_name = project_info.name - except Exception as ex: - LOG.exception(ex) - pass - return project_name - -def get_time_zone(request): - tz = 'UTC' - try: - tz = request._get_cookies()['django_timezone'] - except: - try: - tz = request.COOKIES['django_timezone'] - except Exception as ex: - LOG.exception(ex) - pass - - return tz - -def get_local_time(record_time, input_format, output_format, tz): - """ - Convert and return the date and time - from GMT to local time - """ - try: - if not record_time or record_time is None or record_time == '': - return '' - else: - if not input_format \ - or input_format == None \ - or input_format == '': - input_format = '%Y-%m-%dT%H:%M:%S.%f'; - if not output_format \ - or output_format == None \ - or output_format == '': - output_format = "%m/%d/%Y %I:%M:%S %p"; - - local_time = datetime.strptime( - record_time, input_format) - local_tz = pytz.timezone(tz) - from_zone = pytz.timezone('UTC') - local_time = local_time.replace(tzinfo=from_zone) - local_time = local_time.astimezone(local_tz) - local_time = datetime.strftime( - local_time, output_format) - return local_time - except Exception as ex: - LOG.exception(ex) - pass - return record_time - -@register.filter(name='gettime') -def get_time_for_audit(time_stamp, request): - display_time = time_stamp - try: - time_zone_of_ui = get_time_zone(request) - display_time = get_local_time(time_stamp, '%I:%M:%S.%f %p - %m/%d/%Y','%I:%M:%S %p - %m/%d/%Y', time_zone_of_ui) - except Exception as ex: - LOG.exception(ex) - pass - return display_time - -@register.filter(name='getsnapshotquantifier') -def display_time_quantifier(seconds): - intervals = ( - ('weeks', 604800), # 60 * 60 * 24 * 7 - ('days', 86400), # 60 * 60 * 24 - ('hours', 3600), # 60 * 60 - ('minutes', 60), - ('seconds', 1), - ) - - result = [] - granularity = 4 - for name, count in intervals: - value = seconds // count - if value: - seconds -= value * count - if value == 1: - name = name.rstrip('s') - result.append("{} {}".format(value, name)) - else: - # Add a blank if we're in the middle of other values - if len(result) > 0: - result.append(None) - return ', '.join([x for x in result[:granularity] if x is not None]) - -@register.filter(name='custom_split') -@stringfilter -def custom_split(value, key): - key=int(key) - return value.split('_')[key] From c2874d44b773b2d0b707d1ed60af183b37fe7db2 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Mon, 7 Nov 2022 01:44:53 -0500 Subject: [PATCH 02/94] Added fixes for yoga --- .../ansible/roles/triliovault/defaults/main.yml | 4 ++-- kolla-ansible/ansible/triliovault_site.yml | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/kolla-ansible/ansible/roles/triliovault/defaults/main.yml b/kolla-ansible/ansible/roles/triliovault/defaults/main.yml index 50cf5c3ab..4ba13d3d2 100644 --- a/kolla-ansible/ansible/roles/triliovault/defaults/main.yml +++ b/kolla-ansible/ansible/roles/triliovault/defaults/main.yml @@ -59,13 +59,13 @@ triliovault_services: #################### # Docker #################### -triliovault_datamover_api_image: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-datamover-api" +triliovault_datamover_api_image: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover-api" triliovault_datamover_api_tag: "{{ triliovault_tag }}" triliovault_datamover_api_image_full: "{{ triliovault_datamover_api_image }}:{{ triliovault_datamover_api_tag }}" -triliovault_datamover_image: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-datamover" +triliovault_datamover_image: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover" triliovault_datamover_tag: "{{ triliovault_tag }}" triliovault_datamover_image_full: "{{ triliovault_datamover_image }}:{{ triliovault_datamover_tag }}" diff --git a/kolla-ansible/ansible/triliovault_site.yml b/kolla-ansible/ansible/triliovault_site.yml index 904100604..c0dfad6dc 100644 --- a/kolla-ansible/ansible/triliovault_site.yml +++ b/kolla-ansible/ansible/triliovault_site.yml @@ -1,13 +1,16 @@ - name: Apply haproxy config for triliovault services + gather_facts: false hosts: - - haproxy - - '&enable_haproxy_True' + - loadbalancer + - '&enable_loadbalancer_True' serial: '{{ kolla_serial|default("0") }}' tags: - haproxy + - keepalived + - loadbalancer roles: - - { role: haproxy, - when: enable_haproxy | bool } + - { role: loadbalancer, + when: enable_loadbalancer | bool } tasks: - include_role: name: triliovault @@ -28,4 +31,4 @@ roles: - { role: triliovault, tags: triliovault, - when: enable_triliovault | bool } \ No newline at end of file + when: enable_triliovault | bool } From 1c58927b84390f38355c6a59620f086b411ad003 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Mon, 7 Nov 2022 12:31:18 +0530 Subject: [PATCH 03/94] Fixes for yoga --- kolla-ansible/ansible/triliovault_globals.yml | 3 + .../ansible/triliovault_globals_yoga.yaml | 79 +++++++++++++++++++ kolla-ansible/ansible/triliovault_site.yml | 11 +-- .../ansible/triliovault_site_yoga.yaml | 34 ++++++++ 4 files changed, 120 insertions(+), 7 deletions(-) create mode 100644 kolla-ansible/ansible/triliovault_globals_yoga.yaml create mode 100644 kolla-ansible/ansible/triliovault_site_yoga.yaml diff --git a/kolla-ansible/ansible/triliovault_globals.yml b/kolla-ansible/ansible/triliovault_globals.yml index 8d91a8609..e4deb7a26 100644 --- a/kolla-ansible/ansible/triliovault_globals.yml +++ b/kolla-ansible/ansible/triliovault_globals.yml @@ -4,6 +4,9 @@ enable_triliovault: "yes" triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-horizon-plugin:{{ triliovault_tag }}" +triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-datamover:{{ triliovault_tag }}" +triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-datamover-api:{{ triliovault_tag }}" + ## If you wants to enable triliovault horizon then please uncomment following variable named - 'horizon_image_full' ## By default triliovault horizon will not be enabled on openstack horizon diff --git a/kolla-ansible/ansible/triliovault_globals_yoga.yaml b/kolla-ansible/ansible/triliovault_globals_yoga.yaml new file mode 100644 index 000000000..904787168 --- /dev/null +++ b/kolla-ansible/ansible/triliovault_globals_yoga.yaml @@ -0,0 +1,79 @@ +############ Following variables are user configurable ########## +############ Copy all the following variables in this file to "/etc/kolla/globals.yaml" and configure their values. +## Whether to enable TrilioVault or not on OpenStack cloud +enable_triliovault: "yes" + +triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-horizon-plugin:{{ triliovault_tag }}" +triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover:{{ triliovault_tag }}" +triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover-api:{{ triliovault_tag }}" + +## If you wants to enable triliovault horizon then please uncomment following variable named - 'horizon_image_full' +## By default triliovault horizon will not be enabled on openstack horizon +## NOTE: With this change, openstack horizon container will be replaced by triliovault horizon container. +## Don't worry, triliovault horizon container image uses upstream kolla horizon container as base image + +#horizon_image_full: "{{ triliovault_horizon_image_full }}" + +## Triliovault dmapi_workers count +## This parameter value used to spawn the number of dmapi processes to handle the incoming api requests. +## If your dmapi node has ‘n' cpu cores, It is recommended, to set this parameter to '4*n’. +## If dmapi_workers field is not present in config file. The Default value will be equals to number of cores present on the node +## Default value of dmapi_workers is 16 +dmapi_workers: '16' + +## TrilioVault's containers tag +## TrilioVault docker registry credentials. Request credentials from TrilioVault team. +triliovault_tag: "4.1.5-ussuri" +triliovault_docker_username: "" +triliovault_docker_password: "" +triliovault_docker_registry: "docker.io" + +## triliovault backup target possible values: 'nfs'/'amazon_s3'/'other_s3_compatible' +triliovault_backup_target: 'nfs' + +### 'NFS' backup target details +## Valid for backup target 'nfs' only, provide full NFS share path. +## If you want to use multiple nfs shares, then you can provide comma delimated list of shares to the following parameter +triliovault_nfs_shares: '192.168.122.101:/opt/tvault' +## Valid for backup target 'nfs' only, Following parameter takes NFS mount options. +## Keep default values, unless you have a special need. +triliovault_nfs_options: 'nolock,soft,timeo=180,intr,lookupcache=none' + +## Valid for 'nfs' backup target only. +## If backup target NFS share supports multiple endpoints/ips but in backend it's a single share then +## set 'is_multi_ip_nfs' paremeter to 'yes'. Otherwise it's value should be 'no' +multi_ip_nfs_enabled: 'no' + + +### 'amazon_s3/other_s3_compatible' backup target details +## Valid for 'amazon_s3'/'other_s3_compatible' backup target, provide S3 access key +triliovault_s3_access_key: '' +## Valid for 'amazon_s3'/'other_s3_compatible' backup target, provide S3 secret key +triliovault_s3_secret_key: '' +## Valid for 'amazon_s3'/'other_s3_compatible' backup target, provide S3 region +## if your s3 does not have any region, just keep the parameter as it is +triliovault_s3_region_name: 'us-east-1' +## Valid for 'amazon_s3'/'other_s3_compatible' backup target, provide S3 bucket name +triliovault_s3_bucket_name: '' +## Valid for 'other_s3_compatible' backup target only, provide S3 endpoint url +## This paramter is not valid for Amazon S3 backup target type, keep it as it is +triliovault_s3_endpoint_url: '' + +## S3 signature version +triliovault_s3_version: 'default' + +## S3 Auth version +triliovault_s3_auth_version: 'DEFAULT' + +## Valid for 'other_s3_compatible' backup target only, If SSL is enabled on S3 endpoint url then change it to 'True', otherwise keep it as 'False' +triliovault_s3_ssl_enabled: False +## Valid for 'ceph_s3' backup target only, if SSL is enabled on S3 endpoint URL and SSL certificates are self signed +# OR issued by a private authority then, user needs to copy the 'ceph s3 ca chain file' to "/etc/kolla/config/triliovault/" +# directory on ansible server. You need to create this directory if not exists already. +# And provide the cert file name as value of following parameter. +triliovault_s3_ssl_cert_file_name: 's3-cert.pem' + +## Valid for 'ceph_s3' backup target only, if SSL is enabled on S3 endpoint URL and SSL certificates are self signed or issued by private authority, +## then, user needs to set this parameter value to: True , otherwise keep it's value as False. +## Type: Boolean +triliovault_copy_ceph_s3_ssl_cert: False diff --git a/kolla-ansible/ansible/triliovault_site.yml b/kolla-ansible/ansible/triliovault_site.yml index c0dfad6dc..8cb8db651 100644 --- a/kolla-ansible/ansible/triliovault_site.yml +++ b/kolla-ansible/ansible/triliovault_site.yml @@ -1,16 +1,13 @@ - name: Apply haproxy config for triliovault services - gather_facts: false hosts: - - loadbalancer - - '&enable_loadbalancer_True' + - haproxy + - '&enable_haproxy_True' serial: '{{ kolla_serial|default("0") }}' tags: - haproxy - - keepalived - - loadbalancer roles: - - { role: loadbalancer, - when: enable_loadbalancer | bool } + - { role: haproxy, + when: enable_haproxy | bool } tasks: - include_role: name: triliovault diff --git a/kolla-ansible/ansible/triliovault_site_yoga.yaml b/kolla-ansible/ansible/triliovault_site_yoga.yaml new file mode 100644 index 000000000..c0dfad6dc --- /dev/null +++ b/kolla-ansible/ansible/triliovault_site_yoga.yaml @@ -0,0 +1,34 @@ +- name: Apply haproxy config for triliovault services + gather_facts: false + hosts: + - loadbalancer + - '&enable_loadbalancer_True' + serial: '{{ kolla_serial|default("0") }}' + tags: + - haproxy + - keepalived + - loadbalancer + roles: + - { role: loadbalancer, + when: enable_loadbalancer | bool } + tasks: + - include_role: + name: triliovault + tasks_from: loadbalancer + when: + - inventory_hostname in groups['triliovault-datamover-api'] + - enable_haproxy | bool + - enable_triliovault | bool + - kolla_action in ['deploy', 'reconfigure', 'upgrade', 'config'] + +- name: Apply role triliovault + gather_facts: false + hosts: + - triliovault-datamover-api + - triliovault-datamover + - enable_triliovault | bool + serial: '{{ kolla_serial|default("0") }}' + roles: + - { role: triliovault, + tags: triliovault, + when: enable_triliovault | bool } From 36ca9f593e0510ff92acf9046e3c1a940a2776b9 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Mon, 7 Nov 2022 12:38:54 +0530 Subject: [PATCH 04/94] Fixes for yoga --- ...triliovault_globals_yoga.yaml => triliovault_globals_yoga.yml} | 0 .../{triliovault_site_yoga.yaml => triliovault_site_yoga.yml} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename kolla-ansible/ansible/{triliovault_globals_yoga.yaml => triliovault_globals_yoga.yml} (100%) rename kolla-ansible/ansible/{triliovault_site_yoga.yaml => triliovault_site_yoga.yml} (100%) diff --git a/kolla-ansible/ansible/triliovault_globals_yoga.yaml b/kolla-ansible/ansible/triliovault_globals_yoga.yml similarity index 100% rename from kolla-ansible/ansible/triliovault_globals_yoga.yaml rename to kolla-ansible/ansible/triliovault_globals_yoga.yml diff --git a/kolla-ansible/ansible/triliovault_site_yoga.yaml b/kolla-ansible/ansible/triliovault_site_yoga.yml similarity index 100% rename from kolla-ansible/ansible/triliovault_site_yoga.yaml rename to kolla-ansible/ansible/triliovault_site_yoga.yml From 589f424a1e2eb225c06c902edc8cd9147da63af4 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Mon, 7 Nov 2022 14:26:41 +0530 Subject: [PATCH 05/94] Fixes for yoga --- kolla-ansible/ansible/triliovault_globals_yoga.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kolla-ansible/ansible/triliovault_globals_yoga.yml b/kolla-ansible/ansible/triliovault_globals_yoga.yml index 904787168..ac89a0788 100644 --- a/kolla-ansible/ansible/triliovault_globals_yoga.yml +++ b/kolla-ansible/ansible/triliovault_globals_yoga.yml @@ -5,7 +5,7 @@ enable_triliovault: "yes" triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-horizon-plugin:{{ triliovault_tag }}" triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover:{{ triliovault_tag }}" -triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover-api:{{ triliovault_tag }}" +triliovault_datamover_api_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover-api:{{ triliovault_tag }}" ## If you wants to enable triliovault horizon then please uncomment following variable named - 'horizon_image_full' ## By default triliovault horizon will not be enabled on openstack horizon From 55d08634727e96f42497773dc2e27a4e76b1f9d0 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Fri, 11 Nov 2022 15:25:29 +0530 Subject: [PATCH 06/94] Fixed parameter name --- kolla-ansible/ansible/triliovault_globals.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kolla-ansible/ansible/triliovault_globals.yml b/kolla-ansible/ansible/triliovault_globals.yml index e4deb7a26..7589434ac 100644 --- a/kolla-ansible/ansible/triliovault_globals.yml +++ b/kolla-ansible/ansible/triliovault_globals.yml @@ -5,7 +5,7 @@ enable_triliovault: "yes" triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-horizon-plugin:{{ triliovault_tag }}" triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-datamover:{{ triliovault_tag }}" -triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-datamover-api:{{ triliovault_tag }}" +triliovault_datamover_api_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-datamover-api:{{ triliovault_tag }}" ## If you wants to enable triliovault horizon then please uncomment following variable named - 'horizon_image_full' From 8a5b124900c7096d092413492ab67cd68092974b Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Fri, 11 Nov 2022 17:12:02 +0530 Subject: [PATCH 07/94] Merged globals file in one file --- .../roles/triliovault/defaults/main.yml | 10 +-- kolla-ansible/ansible/triliovault_globals.yml | 5 -- .../ansible/triliovault_globals_yoga.yml | 79 ------------------- 3 files changed, 3 insertions(+), 91 deletions(-) delete mode 100644 kolla-ansible/ansible/triliovault_globals_yoga.yml diff --git a/kolla-ansible/ansible/roles/triliovault/defaults/main.yml b/kolla-ansible/ansible/roles/triliovault/defaults/main.yml index 4ba13d3d2..074333af3 100644 --- a/kolla-ansible/ansible/roles/triliovault/defaults/main.yml +++ b/kolla-ansible/ansible/roles/triliovault/defaults/main.yml @@ -59,16 +59,12 @@ triliovault_services: #################### # Docker #################### -triliovault_datamover_api_image: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover-api" -triliovault_datamover_api_tag: "{{ triliovault_tag }}" -triliovault_datamover_api_image_full: "{{ triliovault_datamover_api_image }}:{{ triliovault_datamover_api_tag }}" +triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-{{ kolla_install_type }}-trilio-horizon-plugin:{{ triliovault_tag }}" +triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover:{{ triliovault_tag }}" +triliovault_datamover_api_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover-api:{{ triliovault_tag }}" -triliovault_datamover_image: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover" -triliovault_datamover_tag: "{{ triliovault_tag }}" -triliovault_datamover_image_full: "{{ triliovault_datamover_image }}:{{ triliovault_datamover_tag }}" - triliovault_datamover_api_dimensions: "{{ default_container_dimensions }}" triliovault_datamover_dimensions: "{{ default_container_dimensions }}" diff --git a/kolla-ansible/ansible/triliovault_globals.yml b/kolla-ansible/ansible/triliovault_globals.yml index 7589434ac..9c1566b1a 100644 --- a/kolla-ansible/ansible/triliovault_globals.yml +++ b/kolla-ansible/ansible/triliovault_globals.yml @@ -3,11 +3,6 @@ ## Whether to enable TrilioVault or not on OpenStack cloud enable_triliovault: "yes" -triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-horizon-plugin:{{ triliovault_tag }}" -triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-datamover:{{ triliovault_tag }}" -triliovault_datamover_api_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-binary-trilio-datamover-api:{{ triliovault_tag }}" - - ## If you wants to enable triliovault horizon then please uncomment following variable named - 'horizon_image_full' ## By default triliovault horizon will not be enabled on openstack horizon ## NOTE: With this change, openstack horizon container will be replaced by triliovault horizon container. diff --git a/kolla-ansible/ansible/triliovault_globals_yoga.yml b/kolla-ansible/ansible/triliovault_globals_yoga.yml deleted file mode 100644 index ac89a0788..000000000 --- a/kolla-ansible/ansible/triliovault_globals_yoga.yml +++ /dev/null @@ -1,79 +0,0 @@ -############ Following variables are user configurable ########## -############ Copy all the following variables in this file to "/etc/kolla/globals.yaml" and configure their values. -## Whether to enable TrilioVault or not on OpenStack cloud -enable_triliovault: "yes" - -triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-horizon-plugin:{{ triliovault_tag }}" -triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover:{{ triliovault_tag }}" -triliovault_datamover_api_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover-api:{{ triliovault_tag }}" - -## If you wants to enable triliovault horizon then please uncomment following variable named - 'horizon_image_full' -## By default triliovault horizon will not be enabled on openstack horizon -## NOTE: With this change, openstack horizon container will be replaced by triliovault horizon container. -## Don't worry, triliovault horizon container image uses upstream kolla horizon container as base image - -#horizon_image_full: "{{ triliovault_horizon_image_full }}" - -## Triliovault dmapi_workers count -## This parameter value used to spawn the number of dmapi processes to handle the incoming api requests. -## If your dmapi node has ‘n' cpu cores, It is recommended, to set this parameter to '4*n’. -## If dmapi_workers field is not present in config file. The Default value will be equals to number of cores present on the node -## Default value of dmapi_workers is 16 -dmapi_workers: '16' - -## TrilioVault's containers tag -## TrilioVault docker registry credentials. Request credentials from TrilioVault team. -triliovault_tag: "4.1.5-ussuri" -triliovault_docker_username: "" -triliovault_docker_password: "" -triliovault_docker_registry: "docker.io" - -## triliovault backup target possible values: 'nfs'/'amazon_s3'/'other_s3_compatible' -triliovault_backup_target: 'nfs' - -### 'NFS' backup target details -## Valid for backup target 'nfs' only, provide full NFS share path. -## If you want to use multiple nfs shares, then you can provide comma delimated list of shares to the following parameter -triliovault_nfs_shares: '192.168.122.101:/opt/tvault' -## Valid for backup target 'nfs' only, Following parameter takes NFS mount options. -## Keep default values, unless you have a special need. -triliovault_nfs_options: 'nolock,soft,timeo=180,intr,lookupcache=none' - -## Valid for 'nfs' backup target only. -## If backup target NFS share supports multiple endpoints/ips but in backend it's a single share then -## set 'is_multi_ip_nfs' paremeter to 'yes'. Otherwise it's value should be 'no' -multi_ip_nfs_enabled: 'no' - - -### 'amazon_s3/other_s3_compatible' backup target details -## Valid for 'amazon_s3'/'other_s3_compatible' backup target, provide S3 access key -triliovault_s3_access_key: '' -## Valid for 'amazon_s3'/'other_s3_compatible' backup target, provide S3 secret key -triliovault_s3_secret_key: '' -## Valid for 'amazon_s3'/'other_s3_compatible' backup target, provide S3 region -## if your s3 does not have any region, just keep the parameter as it is -triliovault_s3_region_name: 'us-east-1' -## Valid for 'amazon_s3'/'other_s3_compatible' backup target, provide S3 bucket name -triliovault_s3_bucket_name: '' -## Valid for 'other_s3_compatible' backup target only, provide S3 endpoint url -## This paramter is not valid for Amazon S3 backup target type, keep it as it is -triliovault_s3_endpoint_url: '' - -## S3 signature version -triliovault_s3_version: 'default' - -## S3 Auth version -triliovault_s3_auth_version: 'DEFAULT' - -## Valid for 'other_s3_compatible' backup target only, If SSL is enabled on S3 endpoint url then change it to 'True', otherwise keep it as 'False' -triliovault_s3_ssl_enabled: False -## Valid for 'ceph_s3' backup target only, if SSL is enabled on S3 endpoint URL and SSL certificates are self signed -# OR issued by a private authority then, user needs to copy the 'ceph s3 ca chain file' to "/etc/kolla/config/triliovault/" -# directory on ansible server. You need to create this directory if not exists already. -# And provide the cert file name as value of following parameter. -triliovault_s3_ssl_cert_file_name: 's3-cert.pem' - -## Valid for 'ceph_s3' backup target only, if SSL is enabled on S3 endpoint URL and SSL certificates are self signed or issued by private authority, -## then, user needs to set this parameter value to: True , otherwise keep it's value as False. -## Type: Boolean -triliovault_copy_ceph_s3_ssl_cert: False From 339de2a39c7e351bf5719287ae5dc014986481a6 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Fri, 11 Nov 2022 17:47:42 +0530 Subject: [PATCH 08/94] Handling horizon image urls for source and binary --- kolla-ansible/ansible/roles/triliovault/defaults/main.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kolla-ansible/ansible/roles/triliovault/defaults/main.yml b/kolla-ansible/ansible/roles/triliovault/defaults/main.yml index 074333af3..5ecbd810b 100644 --- a/kolla-ansible/ansible/roles/triliovault/defaults/main.yml +++ b/kolla-ansible/ansible/roles/triliovault/defaults/main.yml @@ -60,7 +60,12 @@ triliovault_services: # Docker #################### -triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/{{ kolla_base_distro }}-{{ kolla_install_type }}-trilio-horizon-plugin:{{ triliovault_tag }}" + +horizon_source_image_prefix: "kolla-{{ kolla_base_distro }}-trilio-horizon-plugin" +horizon_binary_image_prefix: "{{ kolla_base_distro }}-{{ kolla_install_type }}-trilio-horizon-plugin" + +triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/{{ horizon_source_image_prefix if kolla_install_type == 'source' else horizon_binary_image_prefix }}:{{ triliovault_tag }}" + triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover:{{ triliovault_tag }}" triliovault_datamover_api_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover-api:{{ triliovault_tag }}" From 49dc62aa1c12674f7bceeb8e4f772a32e51d3135 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Mon, 14 Nov 2022 12:16:04 +0530 Subject: [PATCH 09/94] Moved variables to globals.yaml --- kolla-ansible/ansible/roles/triliovault/defaults/main.yml | 5 ----- kolla-ansible/ansible/triliovault_globals.yml | 6 ++++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/kolla-ansible/ansible/roles/triliovault/defaults/main.yml b/kolla-ansible/ansible/roles/triliovault/defaults/main.yml index 5ecbd810b..82648dbb3 100644 --- a/kolla-ansible/ansible/roles/triliovault/defaults/main.yml +++ b/kolla-ansible/ansible/roles/triliovault/defaults/main.yml @@ -61,11 +61,6 @@ triliovault_services: #################### -horizon_source_image_prefix: "kolla-{{ kolla_base_distro }}-trilio-horizon-plugin" -horizon_binary_image_prefix: "{{ kolla_base_distro }}-{{ kolla_install_type }}-trilio-horizon-plugin" - -triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/{{ horizon_source_image_prefix if kolla_install_type == 'source' else horizon_binary_image_prefix }}:{{ triliovault_tag }}" - triliovault_datamover_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover:{{ triliovault_tag }}" triliovault_datamover_api_image_full: "{{ triliovault_docker_registry }}/trilio/kolla-{{ kolla_base_distro }}-trilio-datamover-api:{{ triliovault_tag }}" diff --git a/kolla-ansible/ansible/triliovault_globals.yml b/kolla-ansible/ansible/triliovault_globals.yml index 9c1566b1a..d31b5ffb9 100644 --- a/kolla-ansible/ansible/triliovault_globals.yml +++ b/kolla-ansible/ansible/triliovault_globals.yml @@ -3,6 +3,12 @@ ## Whether to enable TrilioVault or not on OpenStack cloud enable_triliovault: "yes" +horizon_source_image_prefix: "kolla-{{ kolla_base_distro }}-trilio-horizon-plugin" +horizon_binary_image_prefix: "{{ kolla_base_distro }}-{{ kolla_install_type }}-trilio-horizon-plugin" + +triliovault_horizon_image_full: "{{ triliovault_docker_registry }}/trilio/{{ horizon_source_image_prefix if kolla_install_type == 'source' else horizon_binary_image_prefix }}:{{ triliovault_tag }}" + + ## If you wants to enable triliovault horizon then please uncomment following variable named - 'horizon_image_full' ## By default triliovault horizon will not be enabled on openstack horizon ## NOTE: With this change, openstack horizon container will be replaced by triliovault horizon container. From 02443bcc713a5ff71ee654b023ba43e2f791d05a Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Tue, 15 Nov 2022 13:14:44 +0530 Subject: [PATCH 10/94] TVAULT-5326 dmapi_all also includes bare metal hosts on non LXC deployments --- ansible/main-install.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/main-install.yml b/ansible/main-install.yml index 83e1b41f5..5db4ce1df 100644 --- a/ansible/main-install.yml +++ b/ansible/main-install.yml @@ -1,6 +1,6 @@ --- - name: Installation and setup of dmapi conatiner - hosts: dmapi_all + hosts: tvault-dmapi_all gather_facts: "{{ osa_gather_facts | default(True) }}" user: root environment: "{{ deployment_environment_variables | default({}) }}" From 8ef5b33a2a7ef125026fd4cf0d040eacee28d25e Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Thu, 24 Nov 2022 15:02:24 +0530 Subject: [PATCH 11/94] TVAULT-5325 lxc packages not installed when using bare metal install --- ansible/utils/install_lxc_packages.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 ansible/utils/install_lxc_packages.yml diff --git a/ansible/utils/install_lxc_packages.yml b/ansible/utils/install_lxc_packages.yml new file mode 100644 index 000000000..dea798ccf --- /dev/null +++ b/ansible/utils/install_lxc_packages.yml @@ -0,0 +1,15 @@ +--- + +- hosts: localhost + become: true + vars: + ansible_python_interpreter: /usr/bin/python3 + tasks: + - name: Install lxc packages + package: + update_cache: yes + name: + - "lxc" + - "python3-lxc" + - "lxc-templates" + state: latest From eb29246212b35cc14b26cca0efbb6733cf7a11bd Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Tue, 29 Nov 2022 21:06:16 +0530 Subject: [PATCH 12/94] TVAULT-5328 Failed ansible-tvault-contego-extension : create trilio.filters for mount and unmount task --- ansible/environments/group_vars/all/vars.yml | 4 ++++ .../tasks/nova_compute_filter_file.yml | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ansible/environments/group_vars/all/vars.yml b/ansible/environments/group_vars/all/vars.yml index d696a324d..4795a9ad2 100644 --- a/ansible/environments/group_vars/all/vars.yml +++ b/ansible/environments/group_vars/all/vars.yml @@ -73,6 +73,10 @@ ceph_backend_enabled: False ## e.g. '/openstack/venvs/horizon-23.1.0' horizon_virtual_env: '/openstack/venvs/horizon*' +## If more than one Nova Virtual Env on Compute Node(s) +### then specify Nova Virtual Env as e.g. 'openstack/venvs/nova-23.2.0' +nova_virtual_env: '/openstack/venvs/nova*' + #Set verbosity level and run playbooks with -vvv option to display custom debug messages verbosity_level: 3 diff --git a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml index 4c608cb1b..5d22c0a77 100644 --- a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml +++ b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml @@ -1,5 +1,5 @@ - name: Get nova venv path - shell: echo /openstack/venvs/nova* + shell: echo {{ nova_virtual_env }} register: venv_path - set_fact: virtual_env_path={{venv_path.stdout}} @@ -11,4 +11,4 @@ - debug: msg: "NOVA_COMPUTE_FILTERS_FILE: {{NOVA_COMPUTE_FILTERS_FILE}}" - verbosity: "{{ verbosity_level }}" \ No newline at end of file + verbosity: "{{ verbosity_level }}" From 385a425ffc0667e3d927da8a79549192fa4f632c Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Wed, 30 Nov 2022 18:15:50 +0530 Subject: [PATCH 13/94] dont install latest module, just present module --- ansible/utils/install_lxc_packages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/utils/install_lxc_packages.yml b/ansible/utils/install_lxc_packages.yml index dea798ccf..d37669d7a 100644 --- a/ansible/utils/install_lxc_packages.yml +++ b/ansible/utils/install_lxc_packages.yml @@ -12,4 +12,4 @@ - "lxc" - "python3-lxc" - "lxc-templates" - state: latest + state: present From dbdbf45a4406148bb3e7fadafa61f5c6c3a92533 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Wed, 30 Nov 2022 21:00:40 +0530 Subject: [PATCH 14/94] Added the fix witl os-tvault-install.yml for installation of lxc packages --- ansible/main-install.yml | 16 ++++++++++++++++ ansible/utils/install_lxc_packages.yml | 15 --------------- 2 files changed, 16 insertions(+), 15 deletions(-) delete mode 100644 ansible/utils/install_lxc_packages.yml diff --git a/ansible/main-install.yml b/ansible/main-install.yml index 83e1b41f5..98fb978db 100644 --- a/ansible/main-install.yml +++ b/ansible/main-install.yml @@ -1,4 +1,20 @@ --- + +- hosts: localhost + become: true + vars: + ansible_python_interpreter: /usr/bin/python3 + tasks: + - name: Install lxc packages + package: + update_cache: yes + name: + - "lxc" + - "python3-lxc" + - "lxc-templates" + state: present + tags: [ 'never', 'tvault_pre_install'] + - name: Installation and setup of dmapi conatiner hosts: dmapi_all gather_facts: "{{ osa_gather_facts | default(True) }}" diff --git a/ansible/utils/install_lxc_packages.yml b/ansible/utils/install_lxc_packages.yml deleted file mode 100644 index d37669d7a..000000000 --- a/ansible/utils/install_lxc_packages.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- - -- hosts: localhost - become: true - vars: - ansible_python_interpreter: /usr/bin/python3 - tasks: - - name: Install lxc packages - package: - update_cache: yes - name: - - "lxc" - - "python3-lxc" - - "lxc-templates" - state: present From 8a66049aeed7a6ebbb53d292f1ae577438cc2af8 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Fri, 2 Dec 2022 17:40:44 +0530 Subject: [PATCH 15/94] improvement TVAULT-5328 Nova virtual env with venv_tag --- ansible/environments/group_vars/all/vars.yml | 8 +++++--- .../tasks/nova_compute_filter_file.yml | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ansible/environments/group_vars/all/vars.yml b/ansible/environments/group_vars/all/vars.yml index 4795a9ad2..ea7747dd8 100644 --- a/ansible/environments/group_vars/all/vars.yml +++ b/ansible/environments/group_vars/all/vars.yml @@ -73,9 +73,11 @@ ceph_backend_enabled: False ## e.g. '/openstack/venvs/horizon-23.1.0' horizon_virtual_env: '/openstack/venvs/horizon*' -## If more than one Nova Virtual Env on Compute Node(s) -### then specify Nova Virtual Env as e.g. 'openstack/venvs/nova-23.2.0' -nova_virtual_env: '/openstack/venvs/nova*' +## When More Than One Nova Virtual Env. On Compute Node(s) and +## User Wants To Specify Specific Nova Virtual Env. From Existing +## Then Only Uncomment the var nova_virtual_env and pass value like 'openstack/venvs/nova-23.2.0' + +#nova_virtual_env: 'openstack/venvs/nova-23.2.0' #Set verbosity level and run playbooks with -vvv option to display custom debug messages verbosity_level: 3 diff --git a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml index 5d22c0a77..36eb002cc 100644 --- a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml +++ b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml @@ -1,6 +1,13 @@ + - name: Get nova venv path + shell: echo /openstack/venvs/nova-{{ venv_tag }} + register: venv_path + when: nova_virtual_env is undefined + +- name: Get nova venv path when nova_virtual_env is passed shell: echo {{ nova_virtual_env }} register: venv_path + when: nova_virtual_env is defined - set_fact: virtual_env_path={{venv_path.stdout}} From 955b4fd7c92de51ae78bc296c2b8032332cf1007 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Mon, 5 Dec 2022 16:47:56 +0530 Subject: [PATCH 16/94] TVAULT-5328 Improvement if more than one nova virtual dir on compute node --- .../tasks/nova_compute_filter_file.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml index 36eb002cc..ecc7b86db 100644 --- a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml +++ b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml @@ -1,15 +1,22 @@ - name: Get nova venv path shell: echo /openstack/venvs/nova-{{ venv_tag }} - register: venv_path + register: pre_check_nova when: nova_virtual_env is undefined - name: Get nova venv path when nova_virtual_env is passed shell: echo {{ nova_virtual_env }} - register: venv_path + register: pre_check_nova when: nova_virtual_env is defined -- set_fact: virtual_env_path={{venv_path.stdout}} +- name: Get stats nova virtual path + stat: + path: "{{ pre_check_nova.stdout }}" + register: check_venv_path + +- set_fact: virtual_env_path={{pre_check_nova.stdout}} + when: + - check_venv_path.stat.exists == True - set_fact: virtual_env: ". {{virtual_env_path}}/bin/activate" From 1fca264d67ca2ea446d915710d92187d6cc45429 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Mon, 5 Dec 2022 21:23:14 +0530 Subject: [PATCH 17/94] improvement added if more than nova virtual hanled --- .../tasks/nova_compute_filter_file.yml | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml index ecc7b86db..19e3217d4 100644 --- a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml +++ b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml @@ -1,22 +1,40 @@ +- set_fact: + sys_nova_pth: /openstack/venvs/nova-{{ venv_tag }} + - name: Get nova venv path - shell: echo /openstack/venvs/nova-{{ venv_tag }} - register: pre_check_nova + shell: echo {{ sys_nova_pth }} + register: pre_def_pth when: nova_virtual_env is undefined - name: Get nova venv path when nova_virtual_env is passed shell: echo {{ nova_virtual_env }} - register: pre_check_nova + register: pre_usr_pth when: nova_virtual_env is defined -- name: Get stats nova virtual path +- name: Check stat default nova virt path stat: - path: "{{ pre_check_nova.stdout }}" - register: check_venv_path + path: "{{ sys_nova_pth }}" + register: chk_def_pth + when: nova_virtual_env is undefined -- set_fact: virtual_env_path={{pre_check_nova.stdout}} +- name: Check stat user provided nova virt path + stat: + path: "{{ nova_virtual_env }}" + register: chk_usr_pth + when: nova_virtual_env is defined + +- set_fact: + virtual_env_path: "{{ pre_def_pth.stdout }}" + when: + - chk_def_pth.stat.exists == true + - nova_virtual_env is undefined + +- set_fact: + virtual_env_path: "{{ pre_usr_pth.stdout }}" when: - - check_venv_path.stat.exists == True + - chk_usr_pth.stat.exists == true + - nova_virtual_env is defined - set_fact: virtual_env: ". {{virtual_env_path}}/bin/activate" From 2e1bca3768d4981247484c90231f7ce76a70412c Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Mon, 5 Dec 2022 22:28:33 +0530 Subject: [PATCH 18/94] minor changes --- .../tasks/nova_compute_filter_file.yml | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml index 19e3217d4..670f59a75 100644 --- a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml +++ b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml @@ -2,16 +2,6 @@ - set_fact: sys_nova_pth: /openstack/venvs/nova-{{ venv_tag }} -- name: Get nova venv path - shell: echo {{ sys_nova_pth }} - register: pre_def_pth - when: nova_virtual_env is undefined - -- name: Get nova venv path when nova_virtual_env is passed - shell: echo {{ nova_virtual_env }} - register: pre_usr_pth - when: nova_virtual_env is defined - - name: Check stat default nova virt path stat: path: "{{ sys_nova_pth }}" @@ -25,16 +15,16 @@ when: nova_virtual_env is defined - set_fact: - virtual_env_path: "{{ pre_def_pth.stdout }}" - when: - - chk_def_pth.stat.exists == true - - nova_virtual_env is undefined + virtual_env_path: "{{ sys_nova_pth }}" + when: > + ( nova_virtual_env is undefined ) and + ( chk_def_pth.stat.exists == true ) - set_fact: - virtual_env_path: "{{ pre_usr_pth.stdout }}" - when: - - chk_usr_pth.stat.exists == true - - nova_virtual_env is defined + virtual_env_path: "{{ nova_virtual_env }}" + when: > + ( nova_virtual_env is defined ) and + ( chk_usr_pth.stat.exists == true ) - set_fact: virtual_env: ". {{virtual_env_path}}/bin/activate" From 612704ef1ec3b50c5a30846fef4b6763ebab2d49 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Tue, 6 Dec 2022 12:54:53 +0530 Subject: [PATCH 19/94] added task to failed if specified nova virt env not found --- .../tasks/nova_compute_filter_file.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml index 670f59a75..712602e67 100644 --- a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml +++ b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml @@ -14,6 +14,20 @@ register: chk_usr_pth when: nova_virtual_env is defined +- name: Failed when nova virt env not found + fail: + msg: "Anisble Failed Cause Path {{ sys_nova_pth }} Not Found" + when: > + ( nova_virtual_env is undefined ) and + ( chk_def_pth.stat.exists == false ) + +- name: Failed when nova virt env not found + fail: + msg: "Anisble Failed Cause Path {{ nova_virtual_env }} Not Found" + when: > + ( nova_virtual_env is defined ) and + ( chk_usr_pth.stat.exists == false ) + - set_fact: virtual_env_path: "{{ sys_nova_pth }}" when: > From 014533cf312b5e480e11d2234e12ac5a2aa676ae Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Tue, 6 Dec 2022 13:46:58 +0530 Subject: [PATCH 20/94] improvement added --- .../tasks/nova_compute_filter_file.yml | 48 ++++++------------- 1 file changed, 14 insertions(+), 34 deletions(-) diff --git a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml index 712602e67..6313cd8c4 100644 --- a/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml +++ b/ansible/roles/ansible-tvault-contego-extension/tasks/nova_compute_filter_file.yml @@ -1,44 +1,24 @@ -- set_fact: - sys_nova_pth: /openstack/venvs/nova-{{ venv_tag }} - -- name: Check stat default nova virt path - stat: - path: "{{ sys_nova_pth }}" - register: chk_def_pth - when: nova_virtual_env is undefined - -- name: Check stat user provided nova virt path - stat: - path: "{{ nova_virtual_env }}" - register: chk_usr_pth - when: nova_virtual_env is defined - -- name: Failed when nova virt env not found - fail: - msg: "Anisble Failed Cause Path {{ sys_nova_pth }} Not Found" - when: > - ( nova_virtual_env is undefined ) and - ( chk_def_pth.stat.exists == false ) - -- name: Failed when nova virt env not found - fail: - msg: "Anisble Failed Cause Path {{ nova_virtual_env }} Not Found" - when: > - ( nova_virtual_env is defined ) and - ( chk_usr_pth.stat.exists == false ) - - set_fact: - virtual_env_path: "{{ sys_nova_pth }}" + virtual_env_path: "/openstack/venvs/nova-{{ venv_tag }}" when: > - ( nova_virtual_env is undefined ) and - ( chk_def_pth.stat.exists == true ) + ( nova_virtual_env is undefined ) - set_fact: virtual_env_path: "{{ nova_virtual_env }}" when: > - ( nova_virtual_env is defined ) and - ( chk_usr_pth.stat.exists == true ) + ( nova_virtual_env is defined ) + +- name: Check stat virtual env path + stat: + path: "{{ virtual_env_path }}" + register: chk_nova_pth + +- name: Failed when nova virt env not found + fail: + msg: "Anisble Failed Cause Path {{ virtual_env_path }} Not Found" + when: > + ( chk_nova_pth.stat.exists == false ) - set_fact: virtual_env: ". {{virtual_env_path}}/bin/activate" From 220fe7918c9df714bf1f5516e5d009baff9bc9e0 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Tue, 6 Dec 2022 18:46:38 +0530 Subject: [PATCH 21/94] AUTO-258 - Script for TVO Upgrade to Yoga release from 4.2 GA --- TVOAppliance/README | 13 +++++ TVOAppliance/hf_upgrade.sh | 108 +++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 TVOAppliance/README create mode 100755 TVOAppliance/hf_upgrade.sh diff --git a/TVOAppliance/README b/TVOAppliance/README new file mode 100644 index 000000000..efc55dff2 --- /dev/null +++ b/TVOAppliance/README @@ -0,0 +1,13 @@ +============================================================================ +Steps to upgrade TVO packages to Yoga release from 4.2 GA / 4.2 HF +============================================================================ + +1. Download the hf_upgrade.sh script to your TVO appliance. +2. Make sure that it is having executable permissions. If not the apply executable permissions. + chmod +x ./hf_upgrade.sh +3. hf_upgrade.sh having command line options as, + --downloadonly | -d (It will only download the package and extract it in current folder) + --installonly | -i (It will install the package available in current directory. If machine is not on network then copy required package "offline_pkgs.tar.gz" in the current directory) + --all | -a (It will download and install the package on the current TVO appliance.) + + diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh new file mode 100755 index 000000000..d47d72fe3 --- /dev/null +++ b/TVOAppliance/hf_upgrade.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +BASE_DIR="$(pwd)" + +#function to display usage... +function usage() +{ + echo "Usage: ./hf_upgrade.sh [ -h | --help ] + [ -d | --downloadonly ] + [ -i | --installonly ] + [ -a | --all ]" + exit 2 +} + + +#function to download the package and extract... +function download_package() +{ + #define file id and filename which we want to download. + fileid=16JM1Z1jZvISwmo0Bqnj0wJSUu2C1ZJ7G + outfile="offline_pkgs.tar.gz" + + #run the wget command to download the package. + wget_command=`wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=$fileid' -O- | sed -rn 's/.confirm=([0-9A-Za-z_]+)./\1\n/p')&id=$fileid" -O $outfile && rm -rf /tmp/cookies.txt` + + #now the package is downloaded. Extract the package. + extract_packages=`tar -xzf $outfile` +} + + +#function to install the package on the system... +function install_package() +{ + #it is expected that package is available in current directory. + outfile="$BASE_DIR/offline_pkgs.tar.gz" + if [[ -f $outfile ]] + then + echo "$outfile present. we can continue with the installation." + else + echo "$outfile is not present. Cannot proceed with the installation. Exiting." + exit 2 + fi + + #extract offline_dist_pkgs.tar.gz file + extract_offline_dist_pkg=`tar -xzf offline_dist_pkgs.tar.gz` + cd offline_dist_pkgs*/ + install_cmd=`yum -y install ./*.rpm` + + #move to base dir again + cd $BASE_DIR + + #extract Python-3.8.12.tgz + extract_python_pkg=`tar -xf Python-3.8.12.tgz` + cd Python-3.8.12*/ + config_cmd=`./configure --enable-optimizations` + make_cmd=`sudo make altinstall` + + #move to base dir again + cd $BASE_DIR + + #now move existing myansible enviornment + date=`date '+%Y-%m-%d-%H:%M:%S'` + mv /home/stack/myansible /home/stack/myansible_old_$date + mkdir -p /home/stack/myansible + + #extract the package at the / directory. + extract_myansible_pkg=`tar -xzf myansible_py38.tar.gz -C /` + + #set the default python3 + update_python_cmd=`update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.8 0` + + #restart the services post install + service_restart_cmd=`systemctl restart tvault-config wlm-workloads wlm-api wlm-cron wlm-workloads` + + #restart s3 related services. + service_restart_s3_cmd=`systemctl restart tvault-object-store` + +} + +######## Start of the script. ######## + +CMDLINE_ARGUMENTS=$(getopt -o hdia --long help,downloadonly,installonly,all -- "$@") +CMD_OUTPUT=$? +if [ "$CMD_OUTPUT" != "0" ]; then + usage +fi + +eval set -- "$CMDLINE_ARGUMENTS" + +echo "TVO Upgrade for Yoga release from previous 4.2GA/4.2HF" + +#command line arguments. +if [ $# -le 1 ]; then + echo "Invalid number of arguments" + usage +fi + + +while [ $# -gt 0 ]; do + case "$1" in + -h|--help) usage; exit;; + -d|--downloadonly) download_package ;; + -i|--installonly) install_package ;; + -a|--all) download_package; install_package ;; + esac + shift +done + From 012f6e53fbb8fca03c0605543edf8f8d70622301 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Tue, 6 Dec 2022 19:33:40 +0530 Subject: [PATCH 22/94] AUTO-258 - minor corrections in script and python version validation. --- TVOAppliance/hf_upgrade.sh | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index d47d72fe3..2406cbd27 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -1,6 +1,7 @@ -#!/bin/bash +#!/bin/bash BASE_DIR="$(pwd)" +PYTHON_VERSION="Python 3.8.12" #function to display usage... function usage() @@ -50,10 +51,18 @@ function install_package() cd $BASE_DIR #extract Python-3.8.12.tgz - extract_python_pkg=`tar -xf Python-3.8.12.tgz` - cd Python-3.8.12*/ - config_cmd=`./configure --enable-optimizations` - make_cmd=`sudo make altinstall` + python_version=`python3 --version` + if [ "$python_version" == "$PYTHON_VERSION" ]; then + echo "Python 3.8.12 package is already installed. We can skip Python package installation." + else + echo "Python 3.8.12 package is missing. We need to install Python package." + + #Install python 3.8.12 package on the TVO appliance. + extract_python_pkg=`tar -xf Python-3.8.12.tgz` + cd Python-3.8.12*/ + config_cmd=`./configure --enable-optimizations` + make_cmd=`sudo make altinstall` + fi #move to base dir again cd $BASE_DIR @@ -96,7 +105,7 @@ if [ $# -le 1 ]; then fi -while [ $# -gt 0 ]; do +if [ $# -gt 0 ]; then case "$1" in -h|--help) usage; exit;; -d|--downloadonly) download_package ;; @@ -104,5 +113,5 @@ while [ $# -gt 0 ]; do -a|--all) download_package; install_package ;; esac shift -done +fi From 1ae8dccb5cd0408a34b2e8c9aec33b5335817af4 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Tue, 6 Dec 2022 19:41:59 +0530 Subject: [PATCH 23/94] AUTO-258 - Added examples in readme file --- TVOAppliance/README | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/TVOAppliance/README b/TVOAppliance/README index efc55dff2..4819e57a0 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -3,11 +3,24 @@ Steps to upgrade TVO packages to Yoga release from 4.2 GA / 4.2 HF ============================================================================ 1. Download the hf_upgrade.sh script to your TVO appliance. -2. Make sure that it is having executable permissions. If not the apply executable permissions. +2. Make sure that it is having executable permissions. If not then apply executable permissions. chmod +x ./hf_upgrade.sh 3. hf_upgrade.sh having command line options as, --downloadonly | -d (It will only download the package and extract it in current folder) --installonly | -i (It will install the package available in current directory. If machine is not on network then copy required package "offline_pkgs.tar.gz" in the current directory) --all | -a (It will download and install the package on the current TVO appliance.) +Example: + 1. Customer wants to download the package only to copy it to some other machine. + ./hf_upgrade.sh --downloadonly + ./hf_upgrade.sh -d + + 2. Customer wants to install the package which is copied / downloaded on the TVO appliance. + ./hf_upgrade.sh --installonly + ./hf_upgrade.sh -i + + 3. Customer is having network (internet connection) and wants to download + Install the upgrade package. + ./hf_upgrade.sh --all + ./hf_upgrade.sh -a + From 66a220b7019c9bb4f56a834a5b50fcf07b41f481 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Wed, 7 Dec 2022 13:51:17 +0530 Subject: [PATCH 24/94] AUTO-258 - Modified code to install dependancy packages only if python 3.8.12 is not present on the system. --- TVOAppliance/hf_upgrade.sh | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 2406cbd27..27ed3836f 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -42,26 +42,31 @@ function install_package() exit 2 fi - #extract offline_dist_pkgs.tar.gz file - extract_offline_dist_pkg=`tar -xzf offline_dist_pkgs.tar.gz` - cd offline_dist_pkgs*/ - install_cmd=`yum -y install ./*.rpm` - - #move to base dir again + #make sure to be in base directory for installation. cd $BASE_DIR - #extract Python-3.8.12.tgz + #extract Python-3.8.12.tgz - first check if python 3.8.12 version is availble or not. python_version=`python3 --version` if [ "$python_version" == "$PYTHON_VERSION" ]; then echo "Python 3.8.12 package is already installed. We can skip Python package installation." + else echo "Python 3.8.12 package is missing. We need to install Python package." + #extract offline_dist_pkgs.tar.gz file to install dependancy packages first. + extract_offline_dist_pkg=`tar -xzf offline_dist_pkgs.tar.gz` + cd offline_dist_pkgs*/ + install_cmd=`yum -y install ./*.rpm` + + #move to base dir again + cd $BASE_DIR + #Install python 3.8.12 package on the TVO appliance. extract_python_pkg=`tar -xf Python-3.8.12.tgz` cd Python-3.8.12*/ config_cmd=`./configure --enable-optimizations` make_cmd=`sudo make altinstall` + fi #move to base dir again From 9bde5a83a5ef51dce5c54ede02778e142b3f5e93 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Wed, 7 Dec 2022 17:00:13 +0530 Subject: [PATCH 25/94] AUTO-258 - introduced changes for checking rpm package on the system before installation --- TVOAppliance/hf_upgrade.sh | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 27ed3836f..33873a544 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -28,6 +28,31 @@ function download_package() extract_packages=`tar -xzf $outfile` } +function check_package_status() +{ + all_pkgs=`ls -1` + + # iterate through all packages to check installation status. + for pkg_name in $all_pkgs + do + if [[ $pkg_name = *"rpm"* ]]; then + #remove last 4 chars of (.rpm) + total_len="${#pkg_name}" + rpm_pkg_info="${pkg_name:0:$total_len-4}" + + #check result for this package + rpm_result=`rpm -qa | grep $rpm_pkg_info` + result=$? + if [[ $result == 1 ]]; then + echo "Package $rpm_pkg_info not found on the system." + # perform yum command to install package. + install_cmd=`yum -y install $rpm_pkg_info.rpm` + else + echo "Package $rpm_pkg_info.rpm present on the system." + fi + fi + done +} #function to install the package on the system... function install_package() @@ -56,7 +81,9 @@ function install_package() #extract offline_dist_pkgs.tar.gz file to install dependancy packages first. extract_offline_dist_pkg=`tar -xzf offline_dist_pkgs.tar.gz` cd offline_dist_pkgs*/ - install_cmd=`yum -y install ./*.rpm` + + #check if the packages are already installed or not. call function check_package_status() + check_package_status #move to base dir again cd $BASE_DIR From 9db20640b985d721a223d4a01645f198fa3e3707 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Wed, 7 Dec 2022 20:03:58 +0530 Subject: [PATCH 26/94] AUTO-258 - minor changes to extract package during installation only --- TVOAppliance/hf_upgrade.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 33873a544..11a4bda4f 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -24,8 +24,6 @@ function download_package() #run the wget command to download the package. wget_command=`wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=$fileid' -O- | sed -rn 's/.confirm=([0-9A-Za-z_]+)./\1\n/p')&id=$fileid" -O $outfile && rm -rf /tmp/cookies.txt` - #now the package is downloaded. Extract the package. - extract_packages=`tar -xzf $outfile` } function check_package_status() @@ -62,6 +60,11 @@ function install_package() if [[ -f $outfile ]] then echo "$outfile present. we can continue with the installation." + + echo "Extracting $outfile now" + #now the package is downloaded. Extract the package. + extract_packages=`tar -xzf $outfile` + else echo "$outfile is not present. Cannot proceed with the installation. Exiting." exit 2 @@ -81,7 +84,6 @@ function install_package() #extract offline_dist_pkgs.tar.gz file to install dependancy packages first. extract_offline_dist_pkg=`tar -xzf offline_dist_pkgs.tar.gz` cd offline_dist_pkgs*/ - #check if the packages are already installed or not. call function check_package_status() check_package_status From 613157e2b9ee833a56907e91aa30ad5fb55c81ac Mon Sep 17 00:00:00 2001 From: SuhasT Date: Wed, 7 Dec 2022 20:07:16 +0530 Subject: [PATCH 27/94] AUTO-258 - minor changes/comments --- TVOAppliance/hf_upgrade.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 11a4bda4f..dd01861ce 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -21,6 +21,8 @@ function download_package() fileid=16JM1Z1jZvISwmo0Bqnj0wJSUu2C1ZJ7G outfile="offline_pkgs.tar.gz" + echo "Downloading $outfile for Yoga release" + #run the wget command to download the package. wget_command=`wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=$fileid' -O- | sed -rn 's/.confirm=([0-9A-Za-z_]+)./\1\n/p')&id=$fileid" -O $outfile && rm -rf /tmp/cookies.txt` @@ -55,6 +57,7 @@ function check_package_status() #function to install the package on the system... function install_package() { + #it is expected that package is available in current directory. outfile="$BASE_DIR/offline_pkgs.tar.gz" if [[ -f $outfile ]] @@ -69,6 +72,8 @@ function install_package() echo "$outfile is not present. Cannot proceed with the installation. Exiting." exit 2 fi + + echo "Installing $outfile for Yoga release" #make sure to be in base directory for installation. cd $BASE_DIR From f41c720f5075b789490d66f40a7bd8592fed36e0 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Fri, 9 Dec 2022 13:28:52 +0530 Subject: [PATCH 28/94] AUTO-260 - Changes to include new rpm server details and package details. --- TVOAppliance/README | 4 ++++ TVOAppliance/hf_upgrade.sh | 28 ++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/TVOAppliance/README b/TVOAppliance/README index 4819e57a0..c9c69a9d2 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -24,3 +24,7 @@ Example: ./hf_upgrade.sh -a +============================================================================== +Rev 1.1 changes: +- URL changed to - http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-qual2-4-2/offlinePkgs/$OFFLINE_PKG_NAME +- Package name changed to - 4.2-offlinePkgs.tar.gz diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index dd01861ce..005a7eb01 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -2,6 +2,8 @@ BASE_DIR="$(pwd)" PYTHON_VERSION="Python 3.8.12" +OFFLINE_PKG_NAME="4.2-offlinePkgs.tar.gz" +PKG_DIR_NAME="4.2.64-dev-qual2-8-offlinePkgs" #function to display usage... function usage() @@ -17,14 +19,10 @@ function usage() #function to download the package and extract... function download_package() { - #define file id and filename which we want to download. - fileid=16JM1Z1jZvISwmo0Bqnj0wJSUu2C1ZJ7G - outfile="offline_pkgs.tar.gz" + echo "Downloading $OFFLINE_PKG_NAME for Yoga release" - echo "Downloading $outfile for Yoga release" - - #run the wget command to download the package. - wget_command=`wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=$fileid' -O- | sed -rn 's/.confirm=([0-9A-Za-z_]+)./\1\n/p')&id=$fileid" -O $outfile && rm -rf /tmp/cookies.txt` + #run the wget command to download the package from rpm server. + wget_command_rpm_server=`wget --backups 0 http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-qual2-4-2/offlinePkgs/$OFFLINE_PKG_NAME` } @@ -57,26 +55,24 @@ function check_package_status() #function to install the package on the system... function install_package() { - #it is expected that package is available in current directory. - outfile="$BASE_DIR/offline_pkgs.tar.gz" + outfile="$BASE_DIR/$OFFLINE_PKG_NAME" if [[ -f $outfile ]] then echo "$outfile present. we can continue with the installation." echo "Extracting $outfile now" #now the package is downloaded. Extract the package. - extract_packages=`tar -xzf $outfile` - + extract_packages=`tar -xzf $outfile` else echo "$outfile is not present. Cannot proceed with the installation. Exiting." exit 2 fi - + echo "Installing $outfile for Yoga release" #make sure to be in base directory for installation. - cd $BASE_DIR + cd $BASE_DIR/$PKG_DIR_NAME #extract Python-3.8.12.tgz - first check if python 3.8.12 version is availble or not. python_version=`python3 --version` @@ -93,7 +89,7 @@ function install_package() check_package_status #move to base dir again - cd $BASE_DIR + cd $BASE_DIR/$PKG_DIR_NAME #Install python 3.8.12 package on the TVO appliance. extract_python_pkg=`tar -xf Python-3.8.12.tgz` @@ -103,8 +99,8 @@ function install_package() fi - #move to base dir again - cd $BASE_DIR + #move to base dir/4.2.64-dev-qual2-8-offlinePkgs again for furthe installation. + cd $BASE_DIR/$PKG_DIR_NAME #now move existing myansible enviornment date=`date '+%Y-%m-%d-%H:%M:%S'` From 6e665797f231aed4584b4ed239711a3406f53382 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Fri, 9 Dec 2022 15:24:10 +0530 Subject: [PATCH 29/94] AUTO-260 - Implemented generic changes to include further released packages. --- TVOAppliance/README | 6 ++++++ TVOAppliance/hf_upgrade.sh | 23 ++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/TVOAppliance/README b/TVOAppliance/README index c9c69a9d2..c234da201 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -28,3 +28,9 @@ Example: Rev 1.1 changes: - URL changed to - http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-qual2-4-2/offlinePkgs/$OFFLINE_PKG_NAME - Package name changed to - 4.2-offlinePkgs.tar.gz +- Make sure uuidgen utility is available on the system (it comes default with the package util-linux) +- This utility uuidgen is used to create unique folder for extraction of package and further installation. + Example - root@test_folder]# which uuidgen + /usr/bin/uuidgen + root@test_folder]# usr/bin/uuidgen --version + uuidgen from util-linux X.XX.XXXXX VERSION_NUM diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 005a7eb01..c6edef481 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -1,9 +1,11 @@ -#!/bin/bash +#!/bin/bash BASE_DIR="$(pwd)" PYTHON_VERSION="Python 3.8.12" OFFLINE_PKG_NAME="4.2-offlinePkgs.tar.gz" -PKG_DIR_NAME="4.2.64-dev-qual2-8-offlinePkgs" +PKG_DIR_NAME="4.2.64" +BRANCH_NAME="triliodata-dev-qual2-4-2" +UUID_NUM=`uuidgen` #function to display usage... function usage() @@ -19,10 +21,10 @@ function usage() #function to download the package and extract... function download_package() { - echo "Downloading $OFFLINE_PKG_NAME for Yoga release" + echo "Downloading $outfile for Yoga release" #run the wget command to download the package from rpm server. - wget_command_rpm_server=`wget --backups 0 http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-qual2-4-2/offlinePkgs/$OFFLINE_PKG_NAME` + wget_command_rpm_server=`wget --backups 0 http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/$BRANCH_NAME/offlinePkgs/$OFFLINE_PKG_NAME` } @@ -63,7 +65,10 @@ function install_package() echo "Extracting $outfile now" #now the package is downloaded. Extract the package. - extract_packages=`tar -xzf $outfile` + #1. create directory with unique number and extract package inside it. + mkdir $UUID_NUM + + extract_packages=`tar -xzf $outfile -C $UUID_NUM/` else echo "$outfile is not present. Cannot proceed with the installation. Exiting." exit 2 @@ -72,7 +77,7 @@ function install_package() echo "Installing $outfile for Yoga release" #make sure to be in base directory for installation. - cd $BASE_DIR/$PKG_DIR_NAME + cd $BASE_DIR/$UUID_NUM/$PKG_DIR_NAME*/ #extract Python-3.8.12.tgz - first check if python 3.8.12 version is availble or not. python_version=`python3 --version` @@ -89,7 +94,7 @@ function install_package() check_package_status #move to base dir again - cd $BASE_DIR/$PKG_DIR_NAME + cd $BASE_DIR/$UUID_NUM/$PKG_DIR_NAME*/ #Install python 3.8.12 package on the TVO appliance. extract_python_pkg=`tar -xf Python-3.8.12.tgz` @@ -99,8 +104,8 @@ function install_package() fi - #move to base dir/4.2.64-dev-qual2-8-offlinePkgs again for furthe installation. - cd $BASE_DIR/$PKG_DIR_NAME + #move to base dir/UUID_NUM/4.2.64-dev-qual2-8-offlinePkgs again for furthe installation. + cd $BASE_DIR/$UUID_NUM/$PKG_DIR_NAME*/ #now move existing myansible enviornment date=`date '+%Y-%m-%d-%H:%M:%S'` From 7ff5303a96117cf4a876ca94af1af1f8ddc829a3 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Fri, 9 Dec 2022 15:27:14 +0530 Subject: [PATCH 30/94] AUTO-260 - minor changes --- TVOAppliance/hf_upgrade.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index c6edef481..2bfa30b5b 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -104,7 +104,7 @@ function install_package() fi - #move to base dir/UUID_NUM/4.2.64-dev-qual2-8-offlinePkgs again for furthe installation. + #move to base dir/UUID_NUM/PKG_DIR_NAME again for further installation. cd $BASE_DIR/$UUID_NUM/$PKG_DIR_NAME*/ #now move existing myansible enviornment From ee0a73b7e7cdddaade4d938acae7b587b83ef178 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Tue, 13 Dec 2022 19:53:48 +0530 Subject: [PATCH 31/94] AUTO-262: Disable rabbitmq-server and mariadb before installation --- TVOAppliance/README | 3 +++ TVOAppliance/hf_upgrade.sh | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/TVOAppliance/README b/TVOAppliance/README index c234da201..ca668dc54 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -26,6 +26,7 @@ Example: ============================================================================== Rev 1.1 changes: +- Disable mariadb and rabbitmq-server by default before installing packages. - URL changed to - http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-qual2-4-2/offlinePkgs/$OFFLINE_PKG_NAME - Package name changed to - 4.2-offlinePkgs.tar.gz - Make sure uuidgen utility is available on the system (it comes default with the package util-linux) @@ -34,3 +35,5 @@ Rev 1.1 changes: /usr/bin/uuidgen root@test_folder]# usr/bin/uuidgen --version uuidgen from util-linux X.XX.XXXXX VERSION_NUM + + diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 2bfa30b5b..a2d6b85be 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -76,6 +76,10 @@ function install_package() echo "Installing $outfile for Yoga release" + echo "Before installation disable mariadb and rabbitmq-server" + disable_rabbitmq_server=`yum-config-manager --disable bintray-rabbitmq-server` + disable_mariadb_server=`yum-config-manager --disable mariadb` + #make sure to be in base directory for installation. cd $BASE_DIR/$UUID_NUM/$PKG_DIR_NAME*/ @@ -138,6 +142,7 @@ eval set -- "$CMDLINE_ARGUMENTS" echo "TVO Upgrade for Yoga release from previous 4.2GA/4.2HF" + #command line arguments. if [ $# -le 1 ]; then echo "Invalid number of arguments" From 6f10d25640b604f92eb3d6b1ca00da87ea1c403e Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Wed, 14 Dec 2022 13:08:07 +0530 Subject: [PATCH 32/94] INTEROP-805 set the default value of TVAULT_PACKAGE_VERSION --- ansible/environments/group_vars/all/vars.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ansible/environments/group_vars/all/vars.yml b/ansible/environments/group_vars/all/vars.yml index ea7747dd8..3548688c7 100644 --- a/ansible/environments/group_vars/all/vars.yml +++ b/ansible/environments/group_vars/all/vars.yml @@ -5,8 +5,9 @@ IP_ADDRESS: sample_tvault_ip_address ##Time Zone TIME_ZONE: "Etc/UTC" -#Update TVAULT package version here, we will install mentioned version plugins for Example# TVAULT_PACKAGE_VERSION: 3.3.36 -TVAULT_PACKAGE_VERSION: 4.1.4 +## Don't update or modify the value of TVAULT_PACKAGE_VERSION +## The default value of is '4.2.64' +TVAULT_PACKAGE_VERSION: 4.2.64 # Update Openstack dist code name like ussuri etc. OPENSTACK_DIST: ussuri From 9743b55a70e07446c536bfa9edbabcadba8120b4 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Wed, 14 Dec 2022 15:22:26 +0530 Subject: [PATCH 33/94] AUTO-262: minor correction in script --- TVOAppliance/hf_upgrade.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index a2d6b85be..d49928b5c 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -76,7 +76,7 @@ function install_package() echo "Installing $outfile for Yoga release" - echo "Before installation disable mariadb and rabbitmq-server" + echo "Before installation disabling old and deleted MariaDB and Rabbitmq-server yum repositories" disable_rabbitmq_server=`yum-config-manager --disable bintray-rabbitmq-server` disable_mariadb_server=`yum-config-manager --disable mariadb` From f932279934b566cd96515a9b408df5dc15fde39d Mon Sep 17 00:00:00 2001 From: SuhasT Date: Thu, 15 Dec 2022 18:26:24 +0530 Subject: [PATCH 34/94] AUTO-263 - Changes related to s3 service configuration path change --- TVOAppliance/hf_upgrade.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index d49928b5c..9e8ff3b68 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -54,6 +54,16 @@ function check_package_status() done } +#function to reconfigure s3 service path... +function reconfigure_s3_service_path() +{ + file_name="/etc/systemd/system/tvault-object-store.service" + src_string="ExecStart=/home/stack/myansible/bin/python3 /home/stack/myansible/lib/python3.6/site-packages/s3fuse/s3vaultfuse.py --config-file=/etc/workloadmgr/workloadmgr.conf" + dest_string="ExecStart=/home/stack/myansible/bin/python /home/stack/myansible/bin/s3vaultfuse.py --config-file=/etc/workloadmgr/s3-fuse.conf" + + sed -i "s~$src_string~$dest_string~g" $file_name + +} #function to install the package on the system... function install_package() { @@ -125,6 +135,12 @@ function install_package() #restart the services post install service_restart_cmd=`systemctl restart tvault-config wlm-workloads wlm-api wlm-cron wlm-workloads` + #before restarting service replace the service path in tvault-object-store.service file + reconfigure_s3_service_path + + #before restarting the s3 service reload the modified service file. + daemon_reload_cmd=`sytemctl daemon-reload` + #restart s3 related services. service_restart_s3_cmd=`systemctl restart tvault-object-store` From 3ef156414ed816851b4b6b62c74b49ed3f8e981e Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Thu, 15 Dec 2022 21:05:14 +0530 Subject: [PATCH 35/94] dmapi package installation corrected to inside dmapi container only --- ansible/main-install.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/main-install.yml b/ansible/main-install.yml index 9a97e1221..9b51e90f4 100644 --- a/ansible/main-install.yml +++ b/ansible/main-install.yml @@ -16,7 +16,7 @@ tags: [ 'never', 'tvault_pre_install'] - name: Installation and setup of dmapi conatiner - hosts: tvault-dmapi_all + hosts: dmapi_all gather_facts: "{{ osa_gather_facts | default(True) }}" user: root environment: "{{ deployment_environment_variables | default({}) }}" From ebc8302e7881e2334a9e1e1c0c36096bb8c3ce26 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Fri, 16 Dec 2022 21:46:13 +0530 Subject: [PATCH 36/94] lxc container installation --- ansible/main-install.yml | 15 ------------ ansible/tvault_pre_install.yml | 43 ++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 ansible/tvault_pre_install.yml diff --git a/ansible/main-install.yml b/ansible/main-install.yml index 9b51e90f4..3218666f5 100644 --- a/ansible/main-install.yml +++ b/ansible/main-install.yml @@ -1,20 +1,5 @@ --- -- hosts: localhost - become: true - vars: - ansible_python_interpreter: /usr/bin/python3 - tasks: - - name: Install lxc packages - package: - update_cache: yes - name: - - "lxc" - - "python3-lxc" - - "lxc-templates" - state: present - tags: [ 'never', 'tvault_pre_install'] - - name: Installation and setup of dmapi conatiner hosts: dmapi_all gather_facts: "{{ osa_gather_facts | default(True) }}" diff --git a/ansible/tvault_pre_install.yml b/ansible/tvault_pre_install.yml new file mode 100644 index 000000000..874cfef52 --- /dev/null +++ b/ansible/tvault_pre_install.yml @@ -0,0 +1,43 @@ +--- + +- hosts: localhost + become: true + vars: + ansible_python_interpreter: /usr/bin/python3 + tasks: + - name: Add & enable epel repo + yum_repository: + name: epel + description: EPEL YUM REPO + baseurl: https://download.fedoraproject.org/pub/epel/8/$basearch/ + async: true + enabled: yes + when: > + (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Install snapd package + package: + update_cache: yes + name: snapd + state: present + when: > + (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Enable service httpd snapd + service: + name: snapd + enabled: yes + when: > + (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Install lxc packages + package: + update_cache: yes + name: + - "lxc" + - "python3-lxc" + - "lxc-templates" + state: present From 8abd8321b7620e50e9ab456336193aef8a4adba0 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Sun, 18 Dec 2022 15:35:59 +0530 Subject: [PATCH 37/94] TVAULT-5326 dmapi deploy only on container in both parth is metal or not --- ansible/main-install.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ansible/main-install.yml b/ansible/main-install.yml index 3218666f5..8f60a19f2 100644 --- a/ansible/main-install.yml +++ b/ansible/main-install.yml @@ -1,5 +1,24 @@ --- +- name: Installation dmapi on bare metal + hosts: tvault-dmapi_containers + gather_facts: "{{ osa_gather_facts | default(True) }}" + user: root + environment: "{{ deployment_environment_variables | default({}) }}" + vars_files: + - "defaults/repo_packages/openstack_services.yml" + - "defaults/{{ install_method }}_install.yml" + pre_tasks: + - include_tasks: "common-tasks/os-{{ container_tech | default('lxc') }}-container-setup.yml" + when: is_metal + + - include_tasks: common-tasks/unbound-clients.yml + when: + - hostvars['localhost']['resolvconf_enabled'] | bool + roles: + - role: ansible-datamover-api + when: is_metal + - name: Installation and setup of dmapi conatiner hosts: dmapi_all gather_facts: "{{ osa_gather_facts | default(True) }}" @@ -17,6 +36,7 @@ - hostvars['localhost']['resolvconf_enabled'] | bool roles: - role: ansible-datamover-api + when: not is_metal - hosts: tvault_compute_hosts roles: From b9884b9ca2135ef62a9bb309d08f7f85d5bec325 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Sun, 18 Dec 2022 15:38:39 +0530 Subject: [PATCH 38/94] minor change --- ansible/tvault_pre_install.yml | 43 ---------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 ansible/tvault_pre_install.yml diff --git a/ansible/tvault_pre_install.yml b/ansible/tvault_pre_install.yml deleted file mode 100644 index 874cfef52..000000000 --- a/ansible/tvault_pre_install.yml +++ /dev/null @@ -1,43 +0,0 @@ ---- - -- hosts: localhost - become: true - vars: - ansible_python_interpreter: /usr/bin/python3 - tasks: - - name: Add & enable epel repo - yum_repository: - name: epel - description: EPEL YUM REPO - baseurl: https://download.fedoraproject.org/pub/epel/8/$basearch/ - async: true - enabled: yes - when: > - (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or - (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - - - name: Install snapd package - package: - update_cache: yes - name: snapd - state: present - when: > - (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or - (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - - - name: Enable service httpd snapd - service: - name: snapd - enabled: yes - when: > - (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or - (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - - - name: Install lxc packages - package: - update_cache: yes - name: - - "lxc" - - "python3-lxc" - - "lxc-templates" - state: present From 38434fc5a903cab238260e8357c46b7eae692285 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Sun, 18 Dec 2022 15:41:39 +0530 Subject: [PATCH 39/94] TVAULT-5325 install lxc pre-requisites packages --- ansible/tvault_pre_install.yml | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 ansible/tvault_pre_install.yml diff --git a/ansible/tvault_pre_install.yml b/ansible/tvault_pre_install.yml new file mode 100644 index 000000000..874cfef52 --- /dev/null +++ b/ansible/tvault_pre_install.yml @@ -0,0 +1,43 @@ +--- + +- hosts: localhost + become: true + vars: + ansible_python_interpreter: /usr/bin/python3 + tasks: + - name: Add & enable epel repo + yum_repository: + name: epel + description: EPEL YUM REPO + baseurl: https://download.fedoraproject.org/pub/epel/8/$basearch/ + async: true + enabled: yes + when: > + (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Install snapd package + package: + update_cache: yes + name: snapd + state: present + when: > + (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Enable service httpd snapd + service: + name: snapd + enabled: yes + when: > + (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Install lxc packages + package: + update_cache: yes + name: + - "lxc" + - "python3-lxc" + - "lxc-templates" + state: present From b872646ceafe3294e725569a4c9f11f49db0dc30 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Sun, 18 Dec 2022 15:55:16 +0530 Subject: [PATCH 40/94] TVAULT-5325 install lxc pre-requisites packages --- ansible/tvault_pre_install.yml | 43 ---------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 ansible/tvault_pre_install.yml diff --git a/ansible/tvault_pre_install.yml b/ansible/tvault_pre_install.yml deleted file mode 100644 index 874cfef52..000000000 --- a/ansible/tvault_pre_install.yml +++ /dev/null @@ -1,43 +0,0 @@ ---- - -- hosts: localhost - become: true - vars: - ansible_python_interpreter: /usr/bin/python3 - tasks: - - name: Add & enable epel repo - yum_repository: - name: epel - description: EPEL YUM REPO - baseurl: https://download.fedoraproject.org/pub/epel/8/$basearch/ - async: true - enabled: yes - when: > - (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or - (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - - - name: Install snapd package - package: - update_cache: yes - name: snapd - state: present - when: > - (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or - (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - - - name: Enable service httpd snapd - service: - name: snapd - enabled: yes - when: > - (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or - (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - - - name: Install lxc packages - package: - update_cache: yes - name: - - "lxc" - - "python3-lxc" - - "lxc-templates" - state: present From 8147124bccc16a1d1ec228cb39b592c647ac1b7f Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Sun, 18 Dec 2022 16:00:36 +0530 Subject: [PATCH 41/94] TVAULT-5325 SOLUTION added --- ansible/tvault_pre_install.yml | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 ansible/tvault_pre_install.yml diff --git a/ansible/tvault_pre_install.yml b/ansible/tvault_pre_install.yml new file mode 100644 index 000000000..79a509229 --- /dev/null +++ b/ansible/tvault_pre_install.yml @@ -0,0 +1,55 @@ +--- + +- hosts: localhost + become: true + vars: + ansible_python_interpreter: /usr/bin/python3 + tasks: + - name: Add & enable epel repo + yum_repository: + name: epel + description: EPEL YUM REPO + baseurl: https://download.fedoraproject.org/pub/epel/8/$basearch/ + async: true + enabled: yes + when: > + (ansible_distribution_major_version>="7" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Install snapd package + dnf: + name: snapd + state: present + when: > + (ansible_distribution_major_version>="7" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Enable service httpd snapd + service: + name: snapd + enabled: yes + when: > + (ansible_distribution_major_version>="7" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Install RPM lxc packages + dnf: + name: + - "lxc" + - "python3-lxc" + - "lxc-templates" + state: present + when: > + (ansible_distribution_major_version>="7" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") + + - name: Install Debian lxc packages + package: + update_cache: yes + name: + - "lxc" + - "python3-lxc" + - "lxc-templates" + state: present + when: > + (ansible_distribution_major_version>="20.04" and ansible_distribution=="Debian") From 529ecb5aca83dd2ca9fab0fbf3fb6ce25a9b3d66 Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Mon, 19 Dec 2022 16:33:59 +0530 Subject: [PATCH 42/94] TVAULT-5325 install pre-requisite lxc packages --- ansible/tvault_pre_install.yml | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/ansible/tvault_pre_install.yml b/ansible/tvault_pre_install.yml index 79a509229..6252b594e 100644 --- a/ansible/tvault_pre_install.yml +++ b/ansible/tvault_pre_install.yml @@ -8,20 +8,19 @@ - name: Add & enable epel repo yum_repository: name: epel - description: EPEL YUM REPO - baseurl: https://download.fedoraproject.org/pub/epel/8/$basearch/ - async: true - enabled: yes + description: EPEL YUM Repo + baseurl: https://download.fedoraproject.org/pub/epel/$releasever/Everything/$basearch/ when: > - (ansible_distribution_major_version>="7" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - name: Install snapd package - dnf: + package: + update_cache: yes name: snapd state: present when: > - (ansible_distribution_major_version>="7" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - name: Enable service httpd snapd @@ -29,21 +28,10 @@ name: snapd enabled: yes when: > - (ansible_distribution_major_version>="7" and ansible_distribution=="CentOS") or - (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - - - name: Install RPM lxc packages - dnf: - name: - - "lxc" - - "python3-lxc" - - "lxc-templates" - state: present - when: > - (ansible_distribution_major_version>="7" and ansible_distribution=="CentOS") or + (ansible_distribution_major_version>="8" and ansible_distribution=="CentOS") or (ansible_distribution_major_version>="8" and ansible_distribution=="RedHat") - - name: Install Debian lxc packages + - name: Install lxc packages package: update_cache: yes name: @@ -51,5 +39,3 @@ - "python3-lxc" - "lxc-templates" state: present - when: > - (ansible_distribution_major_version>="20.04" and ansible_distribution=="Debian") From eae2d8a56713ef42cbda45b6ce2e41c9f5d6f383 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Thu, 22 Dec 2022 11:26:12 +0530 Subject: [PATCH 43/94] AUTO-267 - Change configuration file path in s3 object service file --- TVOAppliance/hf_upgrade.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 9e8ff3b68..b70e59830 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -59,7 +59,7 @@ function reconfigure_s3_service_path() { file_name="/etc/systemd/system/tvault-object-store.service" src_string="ExecStart=/home/stack/myansible/bin/python3 /home/stack/myansible/lib/python3.6/site-packages/s3fuse/s3vaultfuse.py --config-file=/etc/workloadmgr/workloadmgr.conf" - dest_string="ExecStart=/home/stack/myansible/bin/python /home/stack/myansible/bin/s3vaultfuse.py --config-file=/etc/workloadmgr/s3-fuse.conf" + dest_string="ExecStart=/home/stack/myansible/bin/python3 /home/stack/myansible/bin/s3vaultfuse.py --config-file=/etc/workloadmgr/workloadmgr.conf" sed -i "s~$src_string~$dest_string~g" $file_name @@ -139,7 +139,7 @@ function install_package() reconfigure_s3_service_path #before restarting the s3 service reload the modified service file. - daemon_reload_cmd=`sytemctl daemon-reload` + daemon_reload_cmd=`systemctl daemon-reload` #restart s3 related services. service_restart_s3_cmd=`systemctl restart tvault-object-store` From 08cc674a14c527742208892af13e824c099f2af3 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Thu, 22 Dec 2022 17:09:41 +0530 Subject: [PATCH 44/94] AUTO-267 - Change for downloading packages from correct location --- TVOAppliance/README | 16 ++++++++++++++++ TVOAppliance/hf_upgrade.sh | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/TVOAppliance/README b/TVOAppliance/README index ca668dc54..8772dca27 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -37,3 +37,19 @@ Rev 1.1 changes: uuidgen from util-linux X.XX.XXXXX VERSION_NUM +=============================================================================== +Rev 1.2 changes: +While running hf_upgrade.sh script in offline mode. We need to change the BRANCH_NAME inside hf_upgrade.sh script to download the package from correct location. + +For end customer usage set BRANCH_NAME="triliodata-4-2" inside hf_upgade.sh script. +For internal testing set BRANCH_NAME="triliodata-hotfix-4-2" inside hf_upgrade.sh script. + +Make the above mentioned change in hf_upgrade.sh script with following steps, + - open hf_upgrade.sh script using any familier editor + - Go to line number#7 in hf_upgrade.sh script and edit the file to change the value for BRANCH_NAME + - For end customer usage set it to BRANCH_NAME="triliodata-4-2" + - For internal testing set it to BRANCH_NAME="triliodata-hotfix-4-2" + - Save the changes and run the hf_upgade.sh script using -d option / -i option / -a option. + + + diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index b70e59830..b3670960f 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -4,7 +4,7 @@ BASE_DIR="$(pwd)" PYTHON_VERSION="Python 3.8.12" OFFLINE_PKG_NAME="4.2-offlinePkgs.tar.gz" PKG_DIR_NAME="4.2.64" -BRANCH_NAME="triliodata-dev-qual2-4-2" +BRANCH_NAME="triliodata-hotfix-4-2" UUID_NUM=`uuidgen` #function to display usage... From 52f3bfc99b2310fd61499bfe1201d68d5432af6a Mon Sep 17 00:00:00 2001 From: trilio-shiwanand Date: Thu, 22 Dec 2022 18:08:47 +0530 Subject: [PATCH 45/94] TVAULT-5546 snapshot and restore failing intermittently because of nfsvers in OSA --- ansible/roles/ansible-tvault-contego-extension/tasks/nfs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/roles/ansible-tvault-contego-extension/tasks/nfs.yml b/ansible/roles/ansible-tvault-contego-extension/tasks/nfs.yml index 2d60c256a..a34f24ce6 100644 --- a/ansible/roles/ansible-tvault-contego-extension/tasks/nfs.yml +++ b/ansible/roles/ansible-tvault-contego-extension/tasks/nfs.yml @@ -18,7 +18,7 @@ when: NFS_OPTS != "" - set_fact: - NFS_OPTIONS: "nolock,soft,timeo=180,intr,lookupcache=none" + NFS_OPTIONS: "nolock,soft,timeo=180,intr,lookupcache=none,nfsvers=3" when: NFS_OPTS == "" - debug: msg="value of NFS_OPTIONS is:{{NFS_OPTIONS}}" verbosity={{ verbosity_level }} From d87983d95e7555ba45bda29ca5870b1205032ad5 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Fri, 23 Dec 2022 11:20:17 +0530 Subject: [PATCH 46/94] AUTO-267 - Restart wlm-service on primary node only. --- TVOAppliance/hf_upgrade.sh | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index b3670960f..81c7c346c 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -4,7 +4,7 @@ BASE_DIR="$(pwd)" PYTHON_VERSION="Python 3.8.12" OFFLINE_PKG_NAME="4.2-offlinePkgs.tar.gz" PKG_DIR_NAME="4.2.64" -BRANCH_NAME="triliodata-hotfix-4-2" +BRANCH_NAME="triliodata-4-2" UUID_NUM=`uuidgen` #function to display usage... @@ -54,6 +54,32 @@ function check_package_status() done } +#function to restart wlm-cron on primary node only... +function restart_wlm_cron_on_primary_node() +{ + FILE="/etc/tvault-config/tvault-config.conf" + #find primary node first. + if [ -f "$FILE" ]; then + external_virtual_ip=`grep -i 'virtual_ip\ ' /etc/tvault-config/tvault-config.conf | cut -d ' ' -f 3` + #check the last command status. + if [ $? -eq 0 ]; then + current_node_ip=`ip a | grep $external_virtual_ip` + #check the last command status. + if [ $? -eq 0 ]; then + echo Restart wlm-cron service here. + + #This is primary node so disable and enable the wlm-cron service. + disable_wlm_cron=`pcs resource disable wlm-cron` + enable_wlm_cron=`pcs resource enable wlm-cron` + else + echo Not required to restart wlm-cron service here. + fi + else + echo Not able to find $FILE file. + fi + fi +} + #function to reconfigure s3 service path... function reconfigure_s3_service_path() { @@ -133,7 +159,10 @@ function install_package() update_python_cmd=`update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.8 0` #restart the services post install - service_restart_cmd=`systemctl restart tvault-config wlm-workloads wlm-api wlm-cron wlm-workloads` + service_restart_cmd=`systemctl restart tvault-config wlm-workloads wlm-api wlm-workloads` + + #restart wlm-cron service on primary node only. + restart_wlm_cron_on_primary_node #before restarting service replace the service path in tvault-object-store.service file reconfigure_s3_service_path From ebb749feba15c85c2d6e2261600d097d85df4ed0 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Fri, 23 Dec 2022 13:28:24 +0530 Subject: [PATCH 47/94] AUTO-267 - Note related to wlm-cron services added in README --- TVOAppliance/README | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/TVOAppliance/README b/TVOAppliance/README index 8772dca27..c2bb84a7d 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -52,4 +52,10 @@ Make the above mentioned change in hf_upgrade.sh script with following steps, - Save the changes and run the hf_upgade.sh script using -d option / -i option / -a option. +Note: + If end user is running this script manually on TVM then please make sure you run it on the primary node so that wlm-cron service will get reloaded properly. + To make sure if it is a primary node or not, perform following commands. + - Run pcs status command on TVM + - Check the output and see the value of Current DC: + - Run the hostname command the check the value with Current DC output. If it is matched then it is a primary node. From 825d8eb0cdaa9750442d3fb9e386cfb3393eaee1 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Fri, 23 Dec 2022 14:36:59 +0530 Subject: [PATCH 48/94] AUTO-267 - minor changes --- TVOAppliance/hf_upgrade.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 81c7c346c..c7e1a51be 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -60,7 +60,7 @@ function restart_wlm_cron_on_primary_node() FILE="/etc/tvault-config/tvault-config.conf" #find primary node first. if [ -f "$FILE" ]; then - external_virtual_ip=`grep -i 'virtual_ip\ ' /etc/tvault-config/tvault-config.conf | cut -d ' ' -f 3` + external_virtual_ip=`grep -i 'virtual_ip\ ' $FILE | cut -d ' ' -f 3` #check the last command status. if [ $? -eq 0 ]; then current_node_ip=`ip a | grep $external_virtual_ip` @@ -69,8 +69,8 @@ function restart_wlm_cron_on_primary_node() echo Restart wlm-cron service here. #This is primary node so disable and enable the wlm-cron service. - disable_wlm_cron=`pcs resource disable wlm-cron` - enable_wlm_cron=`pcs resource enable wlm-cron` + pcs resource disable wlm-cron + pcs resource enable wlm-cron else echo Not required to restart wlm-cron service here. fi From eef33858990605b9cf6820265d05f08a53d97382 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Fri, 23 Dec 2022 15:42:18 +0530 Subject: [PATCH 49/94] AUTO-267 - removed var names and kept only commands --- TVOAppliance/hf_upgrade.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index c7e1a51be..35924370a 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -113,8 +113,8 @@ function install_package() echo "Installing $outfile for Yoga release" echo "Before installation disabling old and deleted MariaDB and Rabbitmq-server yum repositories" - disable_rabbitmq_server=`yum-config-manager --disable bintray-rabbitmq-server` - disable_mariadb_server=`yum-config-manager --disable mariadb` + yum-config-manager --disable bintray-rabbitmq-server + yum-config-manager --disable mariadb #make sure to be in base directory for installation. cd $BASE_DIR/$UUID_NUM/$PKG_DIR_NAME*/ @@ -156,22 +156,22 @@ function install_package() extract_myansible_pkg=`tar -xzf myansible_py38.tar.gz -C /` #set the default python3 - update_python_cmd=`update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.8 0` + update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.8 0 #restart the services post install - service_restart_cmd=`systemctl restart tvault-config wlm-workloads wlm-api wlm-workloads` + systemctl restart tvault-config wlm-workloads wlm-api wlm-workloads - #restart wlm-cron service on primary node only. + #call function - restart wlm-cron service on primary node only. restart_wlm_cron_on_primary_node - #before restarting service replace the service path in tvault-object-store.service file + #call function - before restarting service replace the service path in tvault-object-store.service file reconfigure_s3_service_path #before restarting the s3 service reload the modified service file. - daemon_reload_cmd=`systemctl daemon-reload` + systemctl daemon-reload #restart s3 related services. - service_restart_s3_cmd=`systemctl restart tvault-object-store` + systemctl restart tvault-object-store } From 4bdab1ad398b2c2e9eba1014c796b061b9b07ef1 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Thu, 29 Dec 2022 16:16:57 +0530 Subject: [PATCH 50/94] AUTO-273: code changes to restart all services using systemctl command --- TVOAppliance/README | 8 ++---- TVOAppliance/hf_upgrade.sh | 51 ++++++++++++++++++-------------------- 2 files changed, 26 insertions(+), 33 deletions(-) diff --git a/TVOAppliance/README b/TVOAppliance/README index c2bb84a7d..481e1b01f 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -53,9 +53,5 @@ Make the above mentioned change in hf_upgrade.sh script with following steps, Note: - If end user is running this script manually on TVM then please make sure you run it on the primary node so that wlm-cron service will get reloaded properly. - To make sure if it is a primary node or not, perform following commands. - - Run pcs status command on TVM - - Check the output and see the value of Current DC: - - Run the hostname command the check the value with Current DC output. If it is matched then it is a primary node. - + - restart_services function restart following services. If any of the service name mentioned below is in inactive mode then it will not perform restart operation on the respective service. + Service Names - tvault-config, wlm-workloads, wlm-api, wlm-workloads, wlm-cron diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 35924370a..eddf4cba3 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -54,32 +54,27 @@ function check_package_status() done } -#function to restart wlm-cron on primary node only... -function restart_wlm_cron_on_primary_node() +#function to restart the services. +function restart_services() { - FILE="/etc/tvault-config/tvault-config.conf" - #find primary node first. - if [ -f "$FILE" ]; then - external_virtual_ip=`grep -i 'virtual_ip\ ' $FILE | cut -d ' ' -f 3` - #check the last command status. - if [ $? -eq 0 ]; then - current_node_ip=`ip a | grep $external_virtual_ip` - #check the last command status. - if [ $? -eq 0 ]; then - echo Restart wlm-cron service here. - - #This is primary node so disable and enable the wlm-cron service. - pcs resource disable wlm-cron - pcs resource enable wlm-cron - else - echo Not required to restart wlm-cron service here. - fi - else - echo Not able to find $FILE file. - fi - fi + #get the service name passed. + service_name=$1 + + #check if the service is in active state or not. + systemctl is-active $service_name + + #check the result code. 0 - Success AND 3 - Inactive + if [ $? -eq 0 ] + then + #restart the service as it is in active state. + systemctl restart $service_name + else + #print failure message and continue ahead. + echo "Service {$service_name} is in Inactive state. Cannot restart the service" + fi } + #function to reconfigure s3 service path... function reconfigure_s3_service_path() { @@ -158,11 +153,13 @@ function install_package() #set the default python3 update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.8 0 - #restart the services post install - systemctl restart tvault-config wlm-workloads wlm-api wlm-workloads - #call function - restart wlm-cron service on primary node only. - restart_wlm_cron_on_primary_node + #restart all active services + SERVICE_NAMES=('tvault-config' 'wlm-workloads' 'wlm-api' 'wlm-workloads' 'wlm-cron') + for service in "${SERVICE_NAMES[@]}" + do + restart_services $service + done #call function - before restarting service replace the service path in tvault-object-store.service file reconfigure_s3_service_path From 81e376286552d3e31ebf5f8f99c15b839dae9904 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Thu, 29 Dec 2022 17:42:03 +0530 Subject: [PATCH 51/94] AUTO-273: minor code changes to include additional services --- TVOAppliance/hf_upgrade.sh | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index eddf4cba3..102056d2d 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -153,23 +153,20 @@ function install_package() #set the default python3 update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.8 0 + #call function - before restarting service replace the service path in tvault-object-store.service file + reconfigure_s3_service_path + + #before restarting the s3 service reload the modified service file. + systemctl daemon-reload #restart all active services - SERVICE_NAMES=('tvault-config' 'wlm-workloads' 'wlm-api' 'wlm-workloads' 'wlm-cron') + SERVICE_NAMES=('tvault-config' 'wlm-workloads' 'wlm-api' 'wlm-workloads' 'wlm-cron' 'tvault-object-store') for service in "${SERVICE_NAMES[@]}" do restart_services $service done - #call function - before restarting service replace the service path in tvault-object-store.service file - reconfigure_s3_service_path - - #before restarting the s3 service reload the modified service file. - systemctl daemon-reload - #restart s3 related services. - systemctl restart tvault-object-store - } ######## Start of the script. ######## From aa64174aa438c722ec1593782e63a93f9cfeaf36 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Wed, 4 Jan 2023 11:34:33 +0530 Subject: [PATCH 52/94] AUTO-274: Add wlm-scheduler service in restart of services functionality --- TVOAppliance/README | 3 ++- TVOAppliance/hf_upgrade.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/TVOAppliance/README b/TVOAppliance/README index 481e1b01f..579d1da20 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -54,4 +54,5 @@ Make the above mentioned change in hf_upgrade.sh script with following steps, Note: - restart_services function restart following services. If any of the service name mentioned below is in inactive mode then it will not perform restart operation on the respective service. - Service Names - tvault-config, wlm-workloads, wlm-api, wlm-workloads, wlm-cron + Service Names - tvault-config, wlm-workloads, wlm-api, wlm-workloads, wlm-cron, wlm-scheduler + diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 102056d2d..b15940b04 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -160,7 +160,7 @@ function install_package() systemctl daemon-reload #restart all active services - SERVICE_NAMES=('tvault-config' 'wlm-workloads' 'wlm-api' 'wlm-workloads' 'wlm-cron' 'tvault-object-store') + SERVICE_NAMES=('tvault-config' 'wlm-workloads' 'wlm-api' 'wlm-workloads' 'wlm-cron' 'tvault-object-store' 'wlm-scheduler') for service in "${SERVICE_NAMES[@]}" do restart_services $service From e552b5eba7efddad0a43cbb92896498680228f19 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Thu, 5 Jan 2023 17:02:05 +0530 Subject: [PATCH 53/94] AUTO-277: Take backup and restore user json file in offline upgrade script --- TVOAppliance/README | 6 ++++++ TVOAppliance/hf_upgrade.sh | 19 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/TVOAppliance/README b/TVOAppliance/README index 579d1da20..e59d87a19 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -56,3 +56,9 @@ Note: - restart_services function restart following services. If any of the service name mentioned below is in inactive mode then it will not perform restart operation on the respective service. Service Names - tvault-config, wlm-workloads, wlm-api, wlm-workloads, wlm-cron, wlm-scheduler +================================================================================= +Rev 1.3 changes: +Take backup of /etc/tvault /etc/tvault-config /etc/workloadmgr before installation. +Take backup of user json file and copy it to the new myansible env installed. +Copy the user.json file from old venv to new env post installation before restarting services. + diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index b15940b04..eb5454e37 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -106,6 +106,12 @@ function install_package() fi echo "Installing $outfile for Yoga release" + + #get the current date and time. + date=`date '+%Y-%m-%d-%H:%M:%S'` + + #before performing further installation take backup. + tar -czvf /home/stack/tvault_backup_$date.tar.gz /etc/tvault /etc/tvault-config /etc/workloadmgr echo "Before installation disabling old and deleted MariaDB and Rabbitmq-server yum repositories" yum-config-manager --disable bintray-rabbitmq-server @@ -142,8 +148,7 @@ function install_package() #move to base dir/UUID_NUM/PKG_DIR_NAME again for further installation. cd $BASE_DIR/$UUID_NUM/$PKG_DIR_NAME*/ - #now move existing myansible enviornment - date=`date '+%Y-%m-%d-%H:%M:%S'` + #move myansible env to myansible_old_$date folder. mv /home/stack/myansible /home/stack/myansible_old_$date mkdir -p /home/stack/myansible @@ -153,6 +158,14 @@ function install_package() #set the default python3 update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.8 0 + #get the OLD and NEW user json. + USER_JSON_OLD=`/home/stack/myansible_old_$date/bin/python3 -c 'import tvault_configurator; print(tvault_configurator.__path__[0])'`/conf/users.json + + USER_JSON_NEW=`/home/stack/myansible/bin/python3 -c 'import tvault_configurator; print(tvault_configurator.__path__[0])'`/conf/users.json + + #replace / copy the user.json file from USER_JSON_OLD to USER_JSON_NEW path. + cp USER_JSON_OLD USER_JSON_NEW --backup=numbered + #call function - before restarting service replace the service path in tvault-object-store.service file reconfigure_s3_service_path @@ -160,7 +173,7 @@ function install_package() systemctl daemon-reload #restart all active services - SERVICE_NAMES=('tvault-config' 'wlm-workloads' 'wlm-api' 'wlm-workloads' 'wlm-cron' 'tvault-object-store' 'wlm-scheduler') + SERVICE_NAMES=('tvault-config' 'wlm-api' 'wlm-workloads' 'wlm-cron' 'tvault-object-store' 'wlm-scheduler') for service in "${SERVICE_NAMES[@]}" do restart_services $service From d693e67f281d871d5eead65fd73d45250eb24de1 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Thu, 5 Jan 2023 17:42:51 +0530 Subject: [PATCH 54/94] AUTO-277: minor changes for avoid errors while running python3 commands on backup folder --- TVOAppliance/hf_upgrade.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index eb5454e37..e1b061f7a 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -108,7 +108,7 @@ function install_package() echo "Installing $outfile for Yoga release" #get the current date and time. - date=`date '+%Y-%m-%d-%H:%M:%S'` + date=`date '+%Y-%m-%d-%H-%M-%S'` #before performing further installation take backup. tar -czvf /home/stack/tvault_backup_$date.tar.gz /etc/tvault /etc/tvault-config /etc/workloadmgr From 859e4fce827764bd3a5491ce6cba5d52a834a3d3 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Fri, 6 Jan 2023 11:49:35 +0530 Subject: [PATCH 55/94] AUTO-278: Functional fixes for handling copy of json file --- TVOAppliance/hf_upgrade.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index e1b061f7a..4f506579e 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -164,7 +164,7 @@ function install_package() USER_JSON_NEW=`/home/stack/myansible/bin/python3 -c 'import tvault_configurator; print(tvault_configurator.__path__[0])'`/conf/users.json #replace / copy the user.json file from USER_JSON_OLD to USER_JSON_NEW path. - cp USER_JSON_OLD USER_JSON_NEW --backup=numbered + yes | cp $USER_JSON_OLD $USER_JSON_NEW --backup=numbered #call function - before restarting service replace the service path in tvault-object-store.service file reconfigure_s3_service_path From 24797d4b1677aa372a620b96ae78c5a0f8d1f856 Mon Sep 17 00:00:00 2001 From: SuhasT Date: Thu, 12 Jan 2023 19:56:42 +0530 Subject: [PATCH 56/94] TVAULT-5559: remove / move un-nessesary part from README to revision_history file for keeping clean notes --- TVOAppliance/README | 33 +---------------------- TVOAppliance/revision_history.txt | 45 +++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 32 deletions(-) create mode 100644 TVOAppliance/revision_history.txt diff --git a/TVOAppliance/README b/TVOAppliance/README index e59d87a19..5037953ac 100644 --- a/TVOAppliance/README +++ b/TVOAppliance/README @@ -24,41 +24,10 @@ Example: ./hf_upgrade.sh -a -============================================================================== -Rev 1.1 changes: -- Disable mariadb and rabbitmq-server by default before installing packages. -- URL changed to - http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-qual2-4-2/offlinePkgs/$OFFLINE_PKG_NAME -- Package name changed to - 4.2-offlinePkgs.tar.gz -- Make sure uuidgen utility is available on the system (it comes default with the package util-linux) -- This utility uuidgen is used to create unique folder for extraction of package and further installation. - Example - root@test_folder]# which uuidgen - /usr/bin/uuidgen - root@test_folder]# usr/bin/uuidgen --version - uuidgen from util-linux X.XX.XXXXX VERSION_NUM - - -=============================================================================== -Rev 1.2 changes: +Note: While running hf_upgrade.sh script in offline mode. We need to change the BRANCH_NAME inside hf_upgrade.sh script to download the package from correct location. For end customer usage set BRANCH_NAME="triliodata-4-2" inside hf_upgade.sh script. For internal testing set BRANCH_NAME="triliodata-hotfix-4-2" inside hf_upgrade.sh script. -Make the above mentioned change in hf_upgrade.sh script with following steps, - - open hf_upgrade.sh script using any familier editor - - Go to line number#7 in hf_upgrade.sh script and edit the file to change the value for BRANCH_NAME - - For end customer usage set it to BRANCH_NAME="triliodata-4-2" - - For internal testing set it to BRANCH_NAME="triliodata-hotfix-4-2" - - Save the changes and run the hf_upgade.sh script using -d option / -i option / -a option. - - -Note: - - restart_services function restart following services. If any of the service name mentioned below is in inactive mode then it will not perform restart operation on the respective service. - Service Names - tvault-config, wlm-workloads, wlm-api, wlm-workloads, wlm-cron, wlm-scheduler - -================================================================================= -Rev 1.3 changes: -Take backup of /etc/tvault /etc/tvault-config /etc/workloadmgr before installation. -Take backup of user json file and copy it to the new myansible env installed. -Copy the user.json file from old venv to new env post installation before restarting services. diff --git a/TVOAppliance/revision_history.txt b/TVOAppliance/revision_history.txt new file mode 100644 index 000000000..421655823 --- /dev/null +++ b/TVOAppliance/revision_history.txt @@ -0,0 +1,45 @@ +Rev 1.1 changes: +============================================================================== +- Disable mariadb and rabbitmq-server by default before installing packages. +- URL changed to - http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-qual2-4-2/offlinePkgs/$OFFLINE_PKG_NAME +- Package name changed to - 4.2-offlinePkgs.tar.gz +- Make sure uuidgen utility is available on the system (it comes default with the package util-linux) +- This utility uuidgen is used to create unique folder for extraction of package and further installation. + Example - root@test_folder]# which uuidgen + /usr/bin/uuidgen + root@test_folder]# usr/bin/uuidgen --version + uuidgen from util-linux X.XX.XXXXX VERSION_NUM + + +Rev 1.2 changes: +=============================================================================== +While running hf_upgrade.sh script in offline mode. We need to change the BRANCH_NAME inside hf_upgrade.sh script to download the package from correct location. + +For end customer usage set BRANCH_NAME="triliodata-4-2" inside hf_upgade.sh script. +For internal testing set BRANCH_NAME="triliodata-hotfix-4-2" inside hf_upgrade.sh script. + +Make the above mentioned change in hf_upgrade.sh script with following steps, + - open hf_upgrade.sh script using any familier editor + - Go to line number#7 in hf_upgrade.sh script and edit the file to change the value for BRANCH_NAME + - For end customer usage set it to BRANCH_NAME="triliodata-4-2" + - For internal testing set it to BRANCH_NAME="triliodata-hotfix-4-2" + - Save the changes and run the hf_upgade.sh script using -d option / -i option / -a option. + + +Note: + - restart_services function restart following services. If any of the service name mentioned below is in inactive mode then it will not perform restart operation on the respective service. + Service Names - tvault-config, wlm-workloads, wlm-api, wlm-workloads, wlm-cron, wlm-scheduler + +Rev 1.3 changes: +================================================================================= +Take backup of /etc/tvault /etc/tvault-config /etc/workloadmgr before installation. +Take backup of user json file and copy it to the new myansible env installed. +Copy the user.json file from old venv to new env post installation before restarting services. + +Rev 1.4 changes: +================================================================================= +- Take the backup of conf filles /etc/tvault /etc/tvault-config /etc/workloadmgr +- Copy old user json file at the new path before restarting services. + + + From fd7f8f5a9fd86c467a91e2f9145f202d1639627c Mon Sep 17 00:00:00 2001 From: SuhasT Date: Fri, 13 Jan 2023 14:37:30 +0530 Subject: [PATCH 57/94] TVAULT-5559: remove revision_history.txt file keeping revision information --- TVOAppliance/revision_history.txt | 45 ------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 TVOAppliance/revision_history.txt diff --git a/TVOAppliance/revision_history.txt b/TVOAppliance/revision_history.txt deleted file mode 100644 index 421655823..000000000 --- a/TVOAppliance/revision_history.txt +++ /dev/null @@ -1,45 +0,0 @@ -Rev 1.1 changes: -============================================================================== -- Disable mariadb and rabbitmq-server by default before installing packages. -- URL changed to - http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliodata-dev-qual2-4-2/offlinePkgs/$OFFLINE_PKG_NAME -- Package name changed to - 4.2-offlinePkgs.tar.gz -- Make sure uuidgen utility is available on the system (it comes default with the package util-linux) -- This utility uuidgen is used to create unique folder for extraction of package and further installation. - Example - root@test_folder]# which uuidgen - /usr/bin/uuidgen - root@test_folder]# usr/bin/uuidgen --version - uuidgen from util-linux X.XX.XXXXX VERSION_NUM - - -Rev 1.2 changes: -=============================================================================== -While running hf_upgrade.sh script in offline mode. We need to change the BRANCH_NAME inside hf_upgrade.sh script to download the package from correct location. - -For end customer usage set BRANCH_NAME="triliodata-4-2" inside hf_upgade.sh script. -For internal testing set BRANCH_NAME="triliodata-hotfix-4-2" inside hf_upgrade.sh script. - -Make the above mentioned change in hf_upgrade.sh script with following steps, - - open hf_upgrade.sh script using any familier editor - - Go to line number#7 in hf_upgrade.sh script and edit the file to change the value for BRANCH_NAME - - For end customer usage set it to BRANCH_NAME="triliodata-4-2" - - For internal testing set it to BRANCH_NAME="triliodata-hotfix-4-2" - - Save the changes and run the hf_upgade.sh script using -d option / -i option / -a option. - - -Note: - - restart_services function restart following services. If any of the service name mentioned below is in inactive mode then it will not perform restart operation on the respective service. - Service Names - tvault-config, wlm-workloads, wlm-api, wlm-workloads, wlm-cron, wlm-scheduler - -Rev 1.3 changes: -================================================================================= -Take backup of /etc/tvault /etc/tvault-config /etc/workloadmgr before installation. -Take backup of user json file and copy it to the new myansible env installed. -Copy the user.json file from old venv to new env post installation before restarting services. - -Rev 1.4 changes: -================================================================================= -- Take the backup of conf filles /etc/tvault /etc/tvault-config /etc/workloadmgr -- Copy old user json file at the new path before restarting services. - - - From 3818696bac3322c3ebb66c27e29e71c55b7d672b Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Mon, 20 Feb 2023 14:49:53 +0530 Subject: [PATCH 58/94] Added variable for extra volume mounts on datamover container --- .../environments/trilio_datamover_opt_volumes.yaml | 8 ++++++++ .../rhosp16.1/services/trilio-datamover.yaml | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 redhat-director-scripts/rhosp16.1/environments/trilio_datamover_opt_volumes.yaml diff --git a/redhat-director-scripts/rhosp16.1/environments/trilio_datamover_opt_volumes.yaml b/redhat-director-scripts/rhosp16.1/environments/trilio_datamover_opt_volumes.yaml new file mode 100644 index 000000000..6c042d814 --- /dev/null +++ b/redhat-director-scripts/rhosp16.1/environments/trilio_datamover_opt_volumes.yaml @@ -0,0 +1,8 @@ +parameter_defaults: + ## User can specify list of extra volumes that he/she wants to mount on 'trilio_datamover' container. + TrilioDatamoverOptVolumes: + +# Example: +# TrilioDatamoverOptVolumes: +# - /opt/dir1:/opt/dir1 +# - /mnt/dir2:/var/dir2 diff --git a/redhat-director-scripts/rhosp16.1/services/trilio-datamover.yaml b/redhat-director-scripts/rhosp16.1/services/trilio-datamover.yaml index 77ade00cc..4ee9cbcf5 100644 --- a/redhat-director-scripts/rhosp16.1/services/trilio-datamover.yaml +++ b/redhat-director-scripts/rhosp16.1/services/trilio-datamover.yaml @@ -110,7 +110,11 @@ parameters: NovaComputeOptVolumes: default: [] description: list of optional vo - type: comma_delimited_list + type: yaml list format + TrilioDatamoverOptVolumes: + default: [] + description: list of optional volumes to be mounted + type: yaml list format TrilioDatamoverNfsMap: default: {} description: Mapping of datamover node -> NFS share. Typically set @@ -218,6 +222,7 @@ outputs: list_concat: - {get_attr: [ContainersCommon, volumes]} - {get_param: NovaComputeOptVolumes} + - {get_param: TrilioDatamoverOptVolumes} - - /var/lib/kolla/config_files/trilio_dm.json:/var/lib/kolla/config_files/config.json:ro - /var/lib/config-data/puppet-generated/nova_libvirt/:/var/lib/kolla/config_files/nova_libvirt:ro From ee2026e01dd0d9e1f4ca3772beee79aaa35f5d50 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Mon, 20 Feb 2023 14:54:10 +0530 Subject: [PATCH 59/94] Added variable for extra volume mounts on datamover container --- .../environments/trilio_datamover_opt_volumes.yaml | 8 ++++++++ .../rhosp16.2/services/trilio-datamover.yaml | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 redhat-director-scripts/rhosp16.2/environments/trilio_datamover_opt_volumes.yaml diff --git a/redhat-director-scripts/rhosp16.2/environments/trilio_datamover_opt_volumes.yaml b/redhat-director-scripts/rhosp16.2/environments/trilio_datamover_opt_volumes.yaml new file mode 100644 index 000000000..6c042d814 --- /dev/null +++ b/redhat-director-scripts/rhosp16.2/environments/trilio_datamover_opt_volumes.yaml @@ -0,0 +1,8 @@ +parameter_defaults: + ## User can specify list of extra volumes that he/she wants to mount on 'trilio_datamover' container. + TrilioDatamoverOptVolumes: + +# Example: +# TrilioDatamoverOptVolumes: +# - /opt/dir1:/opt/dir1 +# - /mnt/dir2:/var/dir2 diff --git a/redhat-director-scripts/rhosp16.2/services/trilio-datamover.yaml b/redhat-director-scripts/rhosp16.2/services/trilio-datamover.yaml index 77ade00cc..4ee9cbcf5 100644 --- a/redhat-director-scripts/rhosp16.2/services/trilio-datamover.yaml +++ b/redhat-director-scripts/rhosp16.2/services/trilio-datamover.yaml @@ -110,7 +110,11 @@ parameters: NovaComputeOptVolumes: default: [] description: list of optional vo - type: comma_delimited_list + type: yaml list format + TrilioDatamoverOptVolumes: + default: [] + description: list of optional volumes to be mounted + type: yaml list format TrilioDatamoverNfsMap: default: {} description: Mapping of datamover node -> NFS share. Typically set @@ -218,6 +222,7 @@ outputs: list_concat: - {get_attr: [ContainersCommon, volumes]} - {get_param: NovaComputeOptVolumes} + - {get_param: TrilioDatamoverOptVolumes} - - /var/lib/kolla/config_files/trilio_dm.json:/var/lib/kolla/config_files/config.json:ro - /var/lib/config-data/puppet-generated/nova_libvirt/:/var/lib/kolla/config_files/nova_libvirt:ro From fdadf3617ac6b2e3b25e35b2cd8495509646b40d Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Mon, 20 Feb 2023 05:54:21 -0500 Subject: [PATCH 60/94] fixes --- .../rhosp16.1/environments/trilio_datamover_opt_volumes.yaml | 4 ++-- .../rhosp16.1/services/trilio-datamover.yaml | 4 ++-- .../rhosp16.2/environments/trilio_datamover_opt_volumes.yaml | 4 ++-- .../rhosp16.2/services/trilio-datamover.yaml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/redhat-director-scripts/rhosp16.1/environments/trilio_datamover_opt_volumes.yaml b/redhat-director-scripts/rhosp16.1/environments/trilio_datamover_opt_volumes.yaml index 6c042d814..2e0f96201 100644 --- a/redhat-director-scripts/rhosp16.1/environments/trilio_datamover_opt_volumes.yaml +++ b/redhat-director-scripts/rhosp16.1/environments/trilio_datamover_opt_volumes.yaml @@ -4,5 +4,5 @@ parameter_defaults: # Example: # TrilioDatamoverOptVolumes: -# - /opt/dir1:/opt/dir1 -# - /mnt/dir2:/var/dir2 +# - /opt/dir1:/opt/dir1 +# - /mnt/dir2:/var/dir2 diff --git a/redhat-director-scripts/rhosp16.1/services/trilio-datamover.yaml b/redhat-director-scripts/rhosp16.1/services/trilio-datamover.yaml index 4ee9cbcf5..2735fc0d7 100644 --- a/redhat-director-scripts/rhosp16.1/services/trilio-datamover.yaml +++ b/redhat-director-scripts/rhosp16.1/services/trilio-datamover.yaml @@ -110,11 +110,11 @@ parameters: NovaComputeOptVolumes: default: [] description: list of optional vo - type: yaml list format + type: comma_delimited_list TrilioDatamoverOptVolumes: default: [] description: list of optional volumes to be mounted - type: yaml list format + type: comma_delimited_list TrilioDatamoverNfsMap: default: {} description: Mapping of datamover node -> NFS share. Typically set diff --git a/redhat-director-scripts/rhosp16.2/environments/trilio_datamover_opt_volumes.yaml b/redhat-director-scripts/rhosp16.2/environments/trilio_datamover_opt_volumes.yaml index 6c042d814..2e0f96201 100644 --- a/redhat-director-scripts/rhosp16.2/environments/trilio_datamover_opt_volumes.yaml +++ b/redhat-director-scripts/rhosp16.2/environments/trilio_datamover_opt_volumes.yaml @@ -4,5 +4,5 @@ parameter_defaults: # Example: # TrilioDatamoverOptVolumes: -# - /opt/dir1:/opt/dir1 -# - /mnt/dir2:/var/dir2 +# - /opt/dir1:/opt/dir1 +# - /mnt/dir2:/var/dir2 diff --git a/redhat-director-scripts/rhosp16.2/services/trilio-datamover.yaml b/redhat-director-scripts/rhosp16.2/services/trilio-datamover.yaml index 4ee9cbcf5..2735fc0d7 100644 --- a/redhat-director-scripts/rhosp16.2/services/trilio-datamover.yaml +++ b/redhat-director-scripts/rhosp16.2/services/trilio-datamover.yaml @@ -110,11 +110,11 @@ parameters: NovaComputeOptVolumes: default: [] description: list of optional vo - type: yaml list format + type: comma_delimited_list TrilioDatamoverOptVolumes: default: [] description: list of optional volumes to be mounted - type: yaml list format + type: comma_delimited_list TrilioDatamoverNfsMap: default: {} description: Mapping of datamover node -> NFS share. Typically set From dfdac46692ea7c41edb03d9fceded874fca6fa27 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Fri, 17 Mar 2023 14:51:29 +0530 Subject: [PATCH 61/94] Removed password based rpm repo url --- TVOAppliance/hf_upgrade.sh | 2 +- tripleo-scripts/docker/trilio-datamover-api/trilio.repo | 2 +- tripleo-scripts/docker/trilio-datamover/trilio.repo | 2 +- tripleo-scripts/docker/trilio-horizon-plugin/trilio.repo | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TVOAppliance/hf_upgrade.sh b/TVOAppliance/hf_upgrade.sh index 4f506579e..c80c8a641 100755 --- a/TVOAppliance/hf_upgrade.sh +++ b/TVOAppliance/hf_upgrade.sh @@ -24,7 +24,7 @@ function download_package() echo "Downloading $outfile for Yoga release" #run the wget command to download the package from rpm server. - wget_command_rpm_server=`wget --backups 0 http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/$BRANCH_NAME/offlinePkgs/$OFFLINE_PKG_NAME` + wget_command_rpm_server=`wget --backups 0 http://repos.trilio.io:8283/$BRANCH_NAME/offlinePkgs/$OFFLINE_PKG_NAME` } diff --git a/tripleo-scripts/docker/trilio-datamover-api/trilio.repo b/tripleo-scripts/docker/trilio-datamover-api/trilio.repo index bea3f0384..8f5c99bbe 100644 --- a/tripleo-scripts/docker/trilio-datamover-api/trilio.repo +++ b/tripleo-scripts/docker/trilio-datamover-api/trilio.repo @@ -1,5 +1,5 @@ [triliovault-4-1] name=triliovault-4-1 -baseurl=http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliovault-4.1-dev/yum/ +baseurl={RPM_REPO_URL} gpgcheck=0 enabled=1 diff --git a/tripleo-scripts/docker/trilio-datamover/trilio.repo b/tripleo-scripts/docker/trilio-datamover/trilio.repo index bea3f0384..8f5c99bbe 100644 --- a/tripleo-scripts/docker/trilio-datamover/trilio.repo +++ b/tripleo-scripts/docker/trilio-datamover/trilio.repo @@ -1,5 +1,5 @@ [triliovault-4-1] name=triliovault-4-1 -baseurl=http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliovault-4.1-dev/yum/ +baseurl={RPM_REPO_URL} gpgcheck=0 enabled=1 diff --git a/tripleo-scripts/docker/trilio-horizon-plugin/trilio.repo b/tripleo-scripts/docker/trilio-horizon-plugin/trilio.repo index bea3f0384..8f5c99bbe 100644 --- a/tripleo-scripts/docker/trilio-horizon-plugin/trilio.repo +++ b/tripleo-scripts/docker/trilio-horizon-plugin/trilio.repo @@ -1,5 +1,5 @@ [triliovault-4-1] name=triliovault-4-1 -baseurl=http://trilio:XpmkpMFviqSe@repos.trilio.io:8283/triliovault-4.1-dev/yum/ +baseurl={RPM_REPO_URL} gpgcheck=0 enabled=1 From fc8e7e96dc6689770deaf93cbc7743d8ea6c5310 Mon Sep 17 00:00:00 2001 From: shyam-biradar Date: Fri, 24 Mar 2023 12:55:20 +0530 Subject: [PATCH 62/94] Intial commit for rhosp17.0 devops code --- .../rhosp17.0/environments/endpoint_map.yaml | 14780 ++++++++++++++++ .../trilio_datamover_opt_volumes.yaml | 8 + .../environments/trilio_endpoint_data.yaml | 16 + .../rhosp17.0/environments/trilio_env.yaml | 86 + .../trilio_env_non_tls_endpoints_ip.yaml | 104 + .../trilio_env_tls_endpoints_public_dns.yaml | 104 + .../trilio_env_tls_endpoints_public_ip.yaml | 104 + .../trilio_env_tls_everywhere_dns.yaml | 104 + .../environments/trilio_nfs_map.yaml | 4 + .../rhosp17.0/puppet/trilio/.gitignore | 11 + .../rhosp17.0/puppet/trilio/Gemfile | 7 + .../rhosp17.0/puppet/trilio/Puppetfile | 1 + .../rhosp17.0/puppet/trilio/README.md | 79 + .../rhosp17.0/puppet/trilio/Rakefile | 18 + .../puppet/trilio/examples/init_amazons3.pp | 19 + .../puppet/trilio/examples/init_nfs.pp | 13 + .../puppet/trilio/examples/init_s3.pp | 19 + .../puppet/trilio/examples/init_swift.pp | 20 + .../puppet/trilio/examples/site_config.pp | 72 + .../rhosp17.0/puppet/trilio/files/cpu.shares | 1 + .../puppet/trilio/files/log_rotate_conf | 9 + .../rhosp17.0/puppet/trilio/files/mc | Bin 0 -> 8222112 bytes .../rhosp17.0/puppet/trilio/files/s3-cert.pem | 0 .../puppet/trilio/files/sync_static.py | 8 + .../rhosp17.0/puppet/trilio/files/test_s3.py | 8 + .../puppet/trilio/files/tvault_admin_panel.py | 10 + .../trilio/files/tvault_admin_panel_group.py | 7 + .../puppet/trilio/files/tvault_filter.py | 125 + .../puppet/trilio/files/tvault_panel.py | 9 + .../puppet/trilio/files/tvault_panel_group.py | 7 + .../trilio/files/tvault_settings_panel.py | 9 + .../rhosp17.0/puppet/trilio/lib/facter/env.rb | 57 + .../puppet/trilio/manifests/config.pp | 94 + .../puppet/trilio/manifests/contego.pp | 64 + .../puppet/trilio/manifests/contego/cgroup.pp | 49 + .../puppet/trilio/manifests/contego/config.pp | 55 + .../trilio/manifests/contego/install.pp | 30 + .../trilio/manifests/contego/postinstall.pp | 118 + .../trilio/manifests/contego/service.pp | 26 + .../puppet/trilio/manifests/db/mysql.pp | 55 + .../puppet/trilio/manifests/dmapi.pp | 34 + .../puppet/trilio/manifests/dmapi/config.pp | 36 + .../puppet/trilio/manifests/horizon.pp | 32 + .../rhosp17.0/puppet/trilio/manifests/init.pp | 4 + .../puppet/trilio/manifests/keystone/auth.pp | 110 + .../puppet/trilio/manifests/tripleo/api.pp | 8 + .../trilio/manifests/tripleo/contego.pp | 8 + .../trilio/manifests/tripleo/horizon.pp | 8 + .../trilio/manifests/tripleo/keystone.pp | 32 + .../puppet/trilio/manifests/tripleo/mysql.pp | 26 + .../rhosp17.0/puppet/trilio/metadata.json | 55 + .../puppet/trilio/spec/classes/init_spec.rb | 7 + .../puppet/trilio/spec/spec_helper.rb | 1 + .../templates/contego_amazon_s3_conf.erb | 49 + .../trilio/templates/contego_ceph_s3_conf.erb | 51 + .../trilio/templates/contego_nfs_conf.erb | 45 + .../trilio/templates/contego_swift_conf.erb | 16 + .../trilio/templates/contego_systemd_conf.erb | 19 + .../puppet/trilio/templates/dmapi.erb | 45 + .../templates/object_store_systemd_conf.erb | 15 + .../rhosp17.0/puppet/trilio/testfile | 1 + .../rhosp17.0/puppet/trilio/tests/init.pp | 12 + .../rhosp17.0/scripts/README_ENDPOINT_MAP.md | 70 + .../scripts/generate_endpoint_map.sh | 24 + .../scripts/prepare_trilio_images.sh | 47 + .../prepare_trilio_images_dockerhub.sh | 43 + .../rhosp17.0/scripts/upload_puppet_module.sh | 11 + .../services/trilio-datamover-api.yaml | 315 + .../rhosp17.0/services/trilio-datamover.yaml | 261 + .../rhosp17.0/services/trilio-horizon.yaml | 62 + 70 files changed, 17757 insertions(+) create mode 100644 redhat-director-scripts/rhosp17.0/environments/endpoint_map.yaml create mode 100644 redhat-director-scripts/rhosp17.0/environments/trilio_datamover_opt_volumes.yaml create mode 100644 redhat-director-scripts/rhosp17.0/environments/trilio_endpoint_data.yaml create mode 100644 redhat-director-scripts/rhosp17.0/environments/trilio_env.yaml create mode 100644 redhat-director-scripts/rhosp17.0/environments/trilio_env_non_tls_endpoints_ip.yaml create mode 100644 redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_endpoints_public_dns.yaml create mode 100644 redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_endpoints_public_ip.yaml create mode 100644 redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_everywhere_dns.yaml create mode 100644 redhat-director-scripts/rhosp17.0/environments/trilio_nfs_map.yaml create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/.gitignore create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/Gemfile create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/Puppetfile create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/README.md create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/Rakefile create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_amazons3.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_nfs.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_s3.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_swift.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/examples/site_config.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/cpu.shares create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/log_rotate_conf create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/mc create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/s3-cert.pem create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/sync_static.py create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/test_s3.py create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/tvault_admin_panel.py create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/tvault_admin_panel_group.py create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/tvault_filter.py create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/tvault_panel.py create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/tvault_panel_group.py create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/files/tvault_settings_panel.py create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/lib/facter/env.rb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/config.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/contego.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/contego/cgroup.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/contego/config.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/contego/install.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/contego/postinstall.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/contego/service.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/db/mysql.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/dmapi.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/dmapi/config.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/horizon.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/init.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/keystone/auth.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/tripleo/api.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/tripleo/contego.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/tripleo/horizon.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/tripleo/keystone.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/manifests/tripleo/mysql.pp create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/metadata.json create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/spec/classes/init_spec.rb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/spec/spec_helper.rb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/templates/contego_amazon_s3_conf.erb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/templates/contego_ceph_s3_conf.erb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/templates/contego_nfs_conf.erb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/templates/contego_swift_conf.erb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/templates/contego_systemd_conf.erb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/templates/dmapi.erb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/templates/object_store_systemd_conf.erb create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/testfile create mode 100644 redhat-director-scripts/rhosp17.0/puppet/trilio/tests/init.pp create mode 100644 redhat-director-scripts/rhosp17.0/scripts/README_ENDPOINT_MAP.md create mode 100644 redhat-director-scripts/rhosp17.0/scripts/generate_endpoint_map.sh create mode 100644 redhat-director-scripts/rhosp17.0/scripts/prepare_trilio_images.sh create mode 100644 redhat-director-scripts/rhosp17.0/scripts/prepare_trilio_images_dockerhub.sh create mode 100644 redhat-director-scripts/rhosp17.0/scripts/upload_puppet_module.sh create mode 100644 redhat-director-scripts/rhosp17.0/services/trilio-datamover-api.yaml create mode 100644 redhat-director-scripts/rhosp17.0/services/trilio-datamover.yaml create mode 100644 redhat-director-scripts/rhosp17.0/services/trilio-horizon.yaml diff --git a/redhat-director-scripts/rhosp17.0/environments/endpoint_map.yaml b/redhat-director-scripts/rhosp17.0/environments/endpoint_map.yaml new file mode 100644 index 000000000..dd07618b5 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/environments/endpoint_map.yaml @@ -0,0 +1,14780 @@ +### DO NOT MODIFY THIS FILE +### This file is automatically generated from endpoint_data.yaml +### by the script build_endpoint_map.py + +heat_template_version: rocky +description: A map of OpenStack endpoints. Since the endpoints are URLs, + we need to have brackets around IPv6 IP addresses. The inputs to these + parameters come from net_ip_uri_map, which will include these brackets + in IPv6 addresses. +parameters: + NetIpMap: + type: json + default: {} + description: The Net IP map + ServiceNetMap: + type: json + default: {} + description: The Service Net map + EndpointMap: + type: json + default: + AodhAdmin: + protocol: http + port: '8042' + host: IP_ADDRESS + AodhInternal: + protocol: http + port: '8042' + host: IP_ADDRESS + AodhPublic: + protocol: http + port: '8042' + host: IP_ADDRESS + BarbicanAdmin: + protocol: http + port: '9311' + host: IP_ADDRESS + BarbicanInternal: + protocol: http + port: '9311' + host: IP_ADDRESS + BarbicanPublic: + protocol: http + port: '9311' + host: IP_ADDRESS + CephDashboardInternal: + protocol: http + port: '8444' + host: IP_ADDRESS + CephGrafanaInternal: + protocol: http + port: '3100' + host: IP_ADDRESS + CephRgwAdmin: + protocol: http + port: '8080' + host: IP_ADDRESS + CephRgwInternal: + protocol: http + port: '8080' + host: IP_ADDRESS + CephRgwPublic: + protocol: http + port: '8080' + host: IP_ADDRESS + CinderAdmin: + protocol: http + port: '8776' + host: IP_ADDRESS + CinderInternal: + protocol: http + port: '8776' + host: IP_ADDRESS + CinderPublic: + protocol: http + port: '8776' + host: IP_ADDRESS + DesignateAdmin: + protocol: http + port: '9001' + host: IP_ADDRESS + DesignateInternal: + protocol: http + port: '9001' + host: IP_ADDRESS + DesignatePublic: + protocol: http + port: '9001' + host: IP_ADDRESS + DockerRegistryInternal: + protocol: http + port: '8787' + host: IP_ADDRESS + Ec2ApiAdmin: + protocol: http + port: '8788' + host: IP_ADDRESS + Ec2ApiInternal: + protocol: http + port: '8788' + host: IP_ADDRESS + Ec2ApiPublic: + protocol: http + port: '8788' + host: IP_ADDRESS + GaneshaInternal: + protocol: nfs + port: '2049' + host: IP_ADDRESS + GlanceAdmin: + protocol: http + port: '9292' + host: IP_ADDRESS + GlanceInternal: + protocol: http + port: '9292' + host: IP_ADDRESS + GlancePublic: + protocol: http + port: '9292' + host: IP_ADDRESS + GnocchiAdmin: + protocol: http + port: '8041' + host: IP_ADDRESS + GnocchiInternal: + protocol: http + port: '8041' + host: IP_ADDRESS + GnocchiPublic: + protocol: http + port: '8041' + host: IP_ADDRESS + HeatAdmin: + protocol: http + port: '8004' + host: IP_ADDRESS + HeatInternal: + protocol: http + port: '8004' + host: IP_ADDRESS + HeatPublic: + protocol: http + port: '8004' + host: IP_ADDRESS + HeatUIConfig: + protocol: http + port: '3000' + host: IP_ADDRESS + HeatCfnAdmin: + protocol: http + port: '8000' + host: IP_ADDRESS + HeatCfnInternal: + protocol: http + port: '8000' + host: IP_ADDRESS + HeatCfnPublic: + protocol: http + port: '8000' + host: IP_ADDRESS + HorizonPublic: + protocol: http + port: '80' + host: IP_ADDRESS + IronicAdmin: + protocol: http + port: '6385' + host: IP_ADDRESS + IronicInternal: + protocol: http + port: '6385' + host: IP_ADDRESS + IronicPublic: + protocol: http + port: '6385' + host: IP_ADDRESS + IronicUIConfig: + protocol: http + port: '3000' + host: IP_ADDRESS + IronicInspectorAdmin: + protocol: http + port: '5050' + host: IP_ADDRESS + IronicInspectorInternal: + protocol: http + port: '5050' + host: IP_ADDRESS + IronicInspectorPublic: + protocol: http + port: '5050' + host: IP_ADDRESS + IronicInspectorUIConfig: + protocol: http + port: '3000' + host: IP_ADDRESS + KeystoneAdmin: + protocol: http + port: '35357' + host: IP_ADDRESS + KeystoneInternal: + protocol: http + port: '5000' + host: IP_ADDRESS + KeystonePublic: + protocol: http + port: '5000' + host: IP_ADDRESS + KeystoneUIConfig: + protocol: http + port: '3000' + host: IP_ADDRESS + ManilaAdmin: + protocol: http + port: '8786' + host: IP_ADDRESS + ManilaInternal: + protocol: http + port: '8786' + host: IP_ADDRESS + ManilaPublic: + protocol: http + port: '8786' + host: IP_ADDRESS + MetricsQdrPublic: + protocol: amqp + port: '5666' + host: IP_ADDRESS + MistralAdmin: + protocol: http + port: '8989' + host: IP_ADDRESS + MistralInternal: + protocol: http + port: '8989' + host: IP_ADDRESS + MistralPublic: + protocol: http + port: '8989' + host: IP_ADDRESS + MistralUIConfig: + protocol: http + port: '3000' + host: IP_ADDRESS + MysqlInternal: + protocol: mysql+pymysql + port: '3306' + host: IP_ADDRESS + NeutronAdmin: + protocol: http + port: '9696' + host: IP_ADDRESS + NeutronInternal: + protocol: http + port: '9696' + host: IP_ADDRESS + NeutronPublic: + protocol: http + port: '9696' + host: IP_ADDRESS + NovaAdmin: + protocol: http + port: '8774' + host: IP_ADDRESS + NovaInternal: + protocol: http + port: '8774' + host: IP_ADDRESS + NovaPublic: + protocol: http + port: '8774' + host: IP_ADDRESS + NovaUIConfig: + protocol: http + port: '3000' + host: IP_ADDRESS + NovaMetadataInternal: + protocol: http + port: '8775' + host: IP_ADDRESS + NovaVNCProxyAdmin: + protocol: http + port: '6080' + host: IP_ADDRESS + NovaVNCProxyInternal: + protocol: http + port: '6080' + host: IP_ADDRESS + NovaVNCProxyPublic: + protocol: http + port: '6080' + host: IP_ADDRESS + NovajoinAdmin: + protocol: http + port: '9090' + host: IP_ADDRESS + NovajoinInternal: + protocol: http + port: '9090' + host: IP_ADDRESS + NovajoinPublic: + protocol: http + port: '9090' + host: IP_ADDRESS + OctaviaAdmin: + protocol: http + port: '9876' + host: IP_ADDRESS + OctaviaInternal: + protocol: http + port: '9876' + host: IP_ADDRESS + OctaviaPublic: + protocol: http + port: '9876' + host: IP_ADDRESS + PankoAdmin: + protocol: http + port: '8977' + host: IP_ADDRESS + PankoInternal: + protocol: http + port: '8977' + host: IP_ADDRESS + PankoPublic: + protocol: http + port: '8977' + host: IP_ADDRESS + PlacementAdmin: + protocol: http + port: '8778' + host: IP_ADDRESS + PlacementInternal: + protocol: http + port: '8778' + host: IP_ADDRESS + PlacementPublic: + protocol: http + port: '8778' + host: IP_ADDRESS + SaharaAdmin: + protocol: http + port: '8386' + host: IP_ADDRESS + SaharaInternal: + protocol: http + port: '8386' + host: IP_ADDRESS + SaharaPublic: + protocol: http + port: '8386' + host: IP_ADDRESS + SwiftAdmin: + protocol: http + port: '8080' + host: IP_ADDRESS + SwiftInternal: + protocol: http + port: '8080' + host: IP_ADDRESS + SwiftPublic: + protocol: http + port: '8080' + host: IP_ADDRESS + SwiftUIConfig: + protocol: http + port: '3000' + host: IP_ADDRESS + TrilioDatamoverAdmin: + protocol: http + port: '8784' + host: IP_ADDRESS + TrilioDatamoverInternal: + protocol: http + port: '8784' + host: IP_ADDRESS + TrilioDatamoverPublic: + protocol: http + port: '8784' + host: IP_ADDRESS + ZaqarAdmin: + protocol: http + port: '8888' + host: IP_ADDRESS + ZaqarInternal: + protocol: http + port: '8888' + host: IP_ADDRESS + ZaqarPublic: + protocol: http + port: '8888' + host: IP_ADDRESS + ZaqarWebSocketAdmin: + protocol: ws + port: '9000' + host: IP_ADDRESS + ZaqarWebSocketInternal: + protocol: ws + port: '9000' + host: IP_ADDRESS + ZaqarWebSocketPublic: + protocol: ws + port: '9000' + host: IP_ADDRESS + ZaqarWebSocketUIConfig: + protocol: ws + port: '3000' + host: IP_ADDRESS + description: Mapping of service endpoint -> protocol. Typically set + via parameter_defaults in the resource registry. + CloudEndpoints: + type: json + default: {} + description: A map containing the DNS names for the different endpoints + (external, internal_api, etc.) +outputs: + endpoint_map: + value: + AodhAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - AodhAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - AodhApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - AodhApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - AodhAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - AodhApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - AodhApiNetwork + port: + get_param: + - EndpointMap + - AodhAdmin + - port + protocol: + get_param: + - EndpointMap + - AodhAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - AodhAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - AodhAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - AodhApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - AodhApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - AodhAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - AodhAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - AodhAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - AodhApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - AodhApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - AodhAdmin + - port + AodhInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - AodhInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - AodhApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - AodhApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - AodhInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - AodhApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - AodhApiNetwork + port: + get_param: + - EndpointMap + - AodhInternal + - port + protocol: + get_param: + - EndpointMap + - AodhInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - AodhInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - AodhInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - AodhApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - AodhApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - AodhInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - AodhInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - AodhInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - AodhApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - AodhApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - AodhInternal + - port + AodhPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - AodhPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - AodhPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - AodhPublic + - port + protocol: + get_param: + - EndpointMap + - AodhPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - AodhPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - AodhPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - AodhPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - AodhPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - AodhPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - AodhPublic + - port + BarbicanAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - BarbicanApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + port: + get_param: + - EndpointMap + - BarbicanAdmin + - port + protocol: + get_param: + - EndpointMap + - BarbicanAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - BarbicanAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - BarbicanApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - BarbicanAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - BarbicanAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - BarbicanApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - BarbicanAdmin + - port + BarbicanInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - BarbicanApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + port: + get_param: + - EndpointMap + - BarbicanInternal + - port + protocol: + get_param: + - EndpointMap + - BarbicanInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - BarbicanInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - BarbicanApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - BarbicanInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - BarbicanInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - BarbicanApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - BarbicanApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - BarbicanInternal + - port + BarbicanPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - BarbicanPublic + - port + protocol: + get_param: + - EndpointMap + - BarbicanPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - BarbicanPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - BarbicanPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - BarbicanPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - BarbicanPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - BarbicanPublic + - port + CephDashboardInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - CephDashboardInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephDashboardNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephDashboardNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CephDashboardInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephDashboardNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CephDashboardNetwork + port: + get_param: + - EndpointMap + - CephDashboardInternal + - port + protocol: + get_param: + - EndpointMap + - CephDashboardInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - CephDashboardInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephDashboardInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephDashboardNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephDashboardNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephDashboardInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CephDashboardInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephDashboardInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephDashboardNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephDashboardNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephDashboardInternal + - port + CephGrafanaInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - CephGrafanaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephGrafanaNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephGrafanaNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CephGrafanaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephGrafanaNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CephGrafanaNetwork + port: + get_param: + - EndpointMap + - CephGrafanaInternal + - port + protocol: + get_param: + - EndpointMap + - CephGrafanaInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - CephGrafanaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephGrafanaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephGrafanaNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephGrafanaNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephGrafanaInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CephGrafanaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephGrafanaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephGrafanaNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephGrafanaNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephGrafanaInternal + - port + CephRgwAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephRgwNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephRgwNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephRgwNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CephRgwNetwork + port: + get_param: + - EndpointMap + - CephRgwAdmin + - port + protocol: + get_param: + - EndpointMap + - CephRgwAdmin + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CephRgwAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephRgwNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephRgwNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephRgwAdmin + - port + path: /swift/v1/AUTH_ + - '%(project_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CephRgwAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephRgwNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephRgwNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephRgwAdmin + - port + CephRgwInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephRgwNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephRgwNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephRgwNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CephRgwNetwork + port: + get_param: + - EndpointMap + - CephRgwInternal + - port + protocol: + get_param: + - EndpointMap + - CephRgwInternal + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CephRgwInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephRgwNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephRgwNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephRgwInternal + - port + path: /swift/v1/AUTH_ + - '%(project_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CephRgwInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CephRgwNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CephRgwNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephRgwInternal + - port + CephRgwPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - CephRgwPublic + - port + protocol: + get_param: + - EndpointMap + - CephRgwPublic + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CephRgwPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephRgwPublic + - port + path: /swift/v1/AUTH_ + - '%(project_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CephRgwPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CephRgwPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CephRgwPublic + - port + CinderAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CinderApiNetwork + port: + get_param: + - EndpointMap + - CinderAdmin + - port + protocol: + get_param: + - EndpointMap + - CinderAdmin + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CinderAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderAdmin + - port + path: /v1/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CinderAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderAdmin + - port + CinderInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CinderApiNetwork + port: + get_param: + - EndpointMap + - CinderInternal + - port + protocol: + get_param: + - EndpointMap + - CinderInternal + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CinderInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderInternal + - port + path: /v1/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CinderInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderInternal + - port + CinderPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - CinderPublic + - port + protocol: + get_param: + - EndpointMap + - CinderPublic + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CinderPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderPublic + - port + path: /v1/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CinderPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderPublic + - port + CinderV2Admin: + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CinderApiNetwork + port: + get_param: + - EndpointMap + - CinderAdmin + - port + protocol: + get_param: + - EndpointMap + - CinderAdmin + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CinderAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderAdmin + - port + path: /v2/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CinderAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderAdmin + - port + CinderV2Internal: + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CinderApiNetwork + port: + get_param: + - EndpointMap + - CinderInternal + - port + protocol: + get_param: + - EndpointMap + - CinderInternal + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CinderInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderInternal + - port + path: /v2/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CinderInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderInternal + - port + CinderV2Public: + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - CinderPublic + - port + protocol: + get_param: + - EndpointMap + - CinderPublic + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CinderPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderPublic + - port + path: /v2/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CinderPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderPublic + - port + CinderV3Admin: + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CinderApiNetwork + port: + get_param: + - EndpointMap + - CinderAdmin + - port + protocol: + get_param: + - EndpointMap + - CinderAdmin + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CinderAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderAdmin + - port + path: /v3/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CinderAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderAdmin + - port + CinderV3Internal: + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - CinderApiNetwork + port: + get_param: + - EndpointMap + - CinderInternal + - port + protocol: + get_param: + - EndpointMap + - CinderInternal + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CinderInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderInternal + - port + path: /v3/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CinderInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - CinderApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - CinderApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderInternal + - port + CinderV3Public: + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - CinderPublic + - port + protocol: + get_param: + - EndpointMap + - CinderPublic + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - CinderPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderPublic + - port + path: /v3/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - CinderPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - CinderPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - CinderPublic + - port + DesignateAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - DesignateAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DesignateApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - DesignateApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - DesignateAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DesignateApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - DesignateApiNetwork + port: + get_param: + - EndpointMap + - DesignateAdmin + - port + protocol: + get_param: + - EndpointMap + - DesignateAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - DesignateAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - DesignateAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DesignateApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - DesignateApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - DesignateAdmin + - port + path: /v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - DesignateAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - DesignateAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DesignateApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - DesignateApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - DesignateAdmin + - port + DesignateInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - DesignateInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DesignateApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - DesignateApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - DesignateInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DesignateApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - DesignateApiNetwork + port: + get_param: + - EndpointMap + - DesignateInternal + - port + protocol: + get_param: + - EndpointMap + - DesignateInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - DesignateInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - DesignateInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DesignateApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - DesignateApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - DesignateInternal + - port + path: /v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - DesignateInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - DesignateInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DesignateApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - DesignateApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - DesignateInternal + - port + DesignatePublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - DesignatePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - DesignatePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - DesignatePublic + - port + protocol: + get_param: + - EndpointMap + - DesignatePublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - DesignatePublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - DesignatePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - DesignatePublic + - port + path: /v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - DesignatePublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - DesignatePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - DesignatePublic + - port + DockerRegistryInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - DockerRegistryInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DockerRegistryNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - DockerRegistryNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - DockerRegistryInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DockerRegistryNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - DockerRegistryNetwork + port: + get_param: + - EndpointMap + - DockerRegistryInternal + - port + protocol: + get_param: + - EndpointMap + - DockerRegistryInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - DockerRegistryInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - DockerRegistryInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DockerRegistryNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - DockerRegistryNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - DockerRegistryInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - DockerRegistryInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - DockerRegistryInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - DockerRegistryNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - DockerRegistryNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - DockerRegistryInternal + - port + Ec2ApiAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - Ec2ApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + port: + get_param: + - EndpointMap + - Ec2ApiAdmin + - port + protocol: + get_param: + - EndpointMap + - Ec2ApiAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - Ec2ApiAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - Ec2ApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - Ec2ApiAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - Ec2ApiAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - Ec2ApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - Ec2ApiAdmin + - port + Ec2ApiInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - Ec2ApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + port: + get_param: + - EndpointMap + - Ec2ApiInternal + - port + protocol: + get_param: + - EndpointMap + - Ec2ApiInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - Ec2ApiInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - Ec2ApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - Ec2ApiInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - Ec2ApiInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - Ec2ApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - Ec2ApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - Ec2ApiInternal + - port + Ec2ApiPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - Ec2ApiPublic + - port + protocol: + get_param: + - EndpointMap + - Ec2ApiPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - Ec2ApiPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - Ec2ApiPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - Ec2ApiPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - Ec2ApiPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - Ec2ApiPublic + - port + GaneshaInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - GaneshaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GaneshaNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GaneshaNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - GaneshaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GaneshaNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - GaneshaNetwork + port: + get_param: + - EndpointMap + - GaneshaInternal + - port + protocol: + get_param: + - EndpointMap + - GaneshaInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - GaneshaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GaneshaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GaneshaNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GaneshaNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GaneshaInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - GaneshaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GaneshaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GaneshaNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GaneshaNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GaneshaInternal + - port + GlanceAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - GlanceAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GlanceApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GlanceApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - GlanceAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GlanceApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - GlanceApiNetwork + port: + get_param: + - EndpointMap + - GlanceAdmin + - port + protocol: + get_param: + - EndpointMap + - GlanceAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - GlanceAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GlanceAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GlanceApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GlanceApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GlanceAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - GlanceAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GlanceAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GlanceApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GlanceApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GlanceAdmin + - port + GlanceInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - GlanceInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GlanceApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GlanceApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - GlanceInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GlanceApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - GlanceApiNetwork + port: + get_param: + - EndpointMap + - GlanceInternal + - port + protocol: + get_param: + - EndpointMap + - GlanceInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - GlanceInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GlanceInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GlanceApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GlanceApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GlanceInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - GlanceInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GlanceInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GlanceApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GlanceApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GlanceInternal + - port + GlancePublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - GlancePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - GlancePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - GlancePublic + - port + protocol: + get_param: + - EndpointMap + - GlancePublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - GlancePublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GlancePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GlancePublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - GlancePublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GlancePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GlancePublic + - port + GnocchiAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GnocchiApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + port: + get_param: + - EndpointMap + - GnocchiAdmin + - port + protocol: + get_param: + - EndpointMap + - GnocchiAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - GnocchiAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GnocchiApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GnocchiAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - GnocchiAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GnocchiApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GnocchiAdmin + - port + GnocchiInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GnocchiApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + port: + get_param: + - EndpointMap + - GnocchiInternal + - port + protocol: + get_param: + - EndpointMap + - GnocchiInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - GnocchiInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GnocchiApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GnocchiInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - GnocchiInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - GnocchiApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - GnocchiApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GnocchiInternal + - port + GnocchiPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - GnocchiPublic + - port + protocol: + get_param: + - EndpointMap + - GnocchiPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - GnocchiPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GnocchiPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - GnocchiPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - GnocchiPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - GnocchiPublic + - port + HeatAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - HeatAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - HeatApiNetwork + port: + get_param: + - EndpointMap + - HeatAdmin + - port + protocol: + get_param: + - EndpointMap + - HeatAdmin + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - HeatAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatAdmin + - port + path: /v1/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - HeatAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatAdmin + - port + HeatInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - HeatInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - HeatApiNetwork + port: + get_param: + - EndpointMap + - HeatInternal + - port + protocol: + get_param: + - EndpointMap + - HeatInternal + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - HeatInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatInternal + - port + path: /v1/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - HeatInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatInternal + - port + HeatPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - HeatPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - HeatPublic + - port + protocol: + get_param: + - EndpointMap + - HeatPublic + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - HeatPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatPublic + - port + path: /v1/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - HeatPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatPublic + - port + HeatUIConfig: + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - HeatUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - HeatUIConfig + - port + protocol: + get_param: + - EndpointMap + - HeatUIConfig + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - HeatUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatUIConfig + - port + path: /heat/v1/ + - '%(project_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - HeatUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatUIConfig + - port + HeatCfnAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - HeatApiNetwork + port: + get_param: + - EndpointMap + - HeatCfnAdmin + - port + protocol: + get_param: + - EndpointMap + - HeatCfnAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - HeatCfnAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatCfnAdmin + - port + path: /v1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - HeatCfnAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatCfnAdmin + - port + HeatCfnInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - HeatApiNetwork + port: + get_param: + - EndpointMap + - HeatCfnInternal + - port + protocol: + get_param: + - EndpointMap + - HeatCfnInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - HeatCfnInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatCfnInternal + - port + path: /v1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - HeatCfnInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - HeatApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - HeatApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatCfnInternal + - port + HeatCfnPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - HeatCfnPublic + - port + protocol: + get_param: + - EndpointMap + - HeatCfnPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - HeatCfnPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatCfnPublic + - port + path: /v1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - HeatCfnPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HeatCfnPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HeatCfnPublic + - port + HorizonPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - HorizonPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - HorizonPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - HorizonPublic + - port + protocol: + get_param: + - EndpointMap + - HorizonPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - HorizonPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HorizonPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HorizonPublic + - port + path: /dashboard + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - HorizonPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - HorizonPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - HorizonPublic + - port + IronicAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - IronicAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - IronicApiNetwork + port: + get_param: + - EndpointMap + - IronicAdmin + - port + protocol: + get_param: + - EndpointMap + - IronicAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - IronicAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicAdmin + - port + path: /v1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - IronicAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicAdmin + - port + IronicInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - IronicInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - IronicApiNetwork + port: + get_param: + - EndpointMap + - IronicInternal + - port + protocol: + get_param: + - EndpointMap + - IronicInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInternal + - port + path: /v1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInternal + - port + IronicPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - IronicPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - IronicPublic + - port + protocol: + get_param: + - EndpointMap + - IronicPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - IronicPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicPublic + - port + path: /v1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - IronicPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicPublic + - port + IronicUIConfig: + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - IronicUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - IronicUIConfig + - port + protocol: + get_param: + - EndpointMap + - IronicUIConfig + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - IronicUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicUIConfig + - port + path: /ironic + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - IronicUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicUIConfig + - port + IronicInspectorAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicInspectorNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + port: + get_param: + - EndpointMap + - IronicInspectorAdmin + - port + protocol: + get_param: + - EndpointMap + - IronicInspectorAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInspectorAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicInspectorNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInspectorAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInspectorAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicInspectorNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInspectorAdmin + - port + IronicInspectorInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicInspectorNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + port: + get_param: + - EndpointMap + - IronicInspectorInternal + - port + protocol: + get_param: + - EndpointMap + - IronicInspectorInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInspectorInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicInspectorNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInspectorInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInspectorInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - IronicInspectorNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - IronicInspectorNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInspectorInternal + - port + IronicInspectorPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - IronicInspectorPublic + - port + protocol: + get_param: + - EndpointMap + - IronicInspectorPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInspectorPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInspectorPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInspectorPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInspectorPublic + - port + IronicInspectorUIConfig: + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - port + protocol: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - port + path: /ironic-inspector + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - IronicInspectorUIConfig + - port + KeystoneAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + port: + get_param: + - EndpointMap + - KeystoneAdmin + - port + protocol: + get_param: + - EndpointMap + - KeystoneAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneAdmin + - port + path: / + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneAdmin + - port + KeystoneInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + port: + get_param: + - EndpointMap + - KeystoneInternal + - port + protocol: + get_param: + - EndpointMap + - KeystoneInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneInternal + - port + path: / + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneInternal + - port + KeystonePublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystonePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - KeystonePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - KeystonePublic + - port + protocol: + get_param: + - EndpointMap + - KeystonePublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - KeystonePublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystonePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystonePublic + - port + path: / + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - KeystonePublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystonePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystonePublic + - port + KeystoneUIConfig: + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - KeystoneUIConfig + - port + protocol: + get_param: + - EndpointMap + - KeystoneUIConfig + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneUIConfig + - port + path: /keystone/v3 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneUIConfig + - port + KeystoneV3Admin: + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + port: + get_param: + - EndpointMap + - KeystoneAdmin + - port + protocol: + get_param: + - EndpointMap + - KeystoneAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneAdmin + - port + path: /v3 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystoneAdminApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneAdmin + - port + KeystoneV3Internal: + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + port: + get_param: + - EndpointMap + - KeystoneInternal + - port + protocol: + get_param: + - EndpointMap + - KeystoneInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneInternal + - port + path: /v3 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - KeystoneInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystoneInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - KeystonePublicApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystoneInternal + - port + KeystoneV3Public: + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystonePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - KeystonePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - KeystonePublic + - port + protocol: + get_param: + - EndpointMap + - KeystonePublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - KeystonePublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystonePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystonePublic + - port + path: /v3 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - KeystonePublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - KeystonePublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - KeystonePublic + - port + ManilaAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ManilaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - ManilaApiNetwork + port: + get_param: + - EndpointMap + - ManilaAdmin + - port + protocol: + get_param: + - EndpointMap + - ManilaAdmin + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - ManilaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaAdmin + - port + path: /v2/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ManilaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaAdmin + - port + ManilaInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ManilaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - ManilaApiNetwork + port: + get_param: + - EndpointMap + - ManilaInternal + - port + protocol: + get_param: + - EndpointMap + - ManilaInternal + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - ManilaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaInternal + - port + path: /v2/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ManilaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaInternal + - port + ManilaPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ManilaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - ManilaPublic + - port + protocol: + get_param: + - EndpointMap + - ManilaPublic + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - ManilaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaPublic + - port + path: /v2/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ManilaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaPublic + - port + ManilaV1Admin: + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ManilaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - ManilaApiNetwork + port: + get_param: + - EndpointMap + - ManilaAdmin + - port + protocol: + get_param: + - EndpointMap + - ManilaAdmin + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - ManilaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaAdmin + - port + path: /v1/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ManilaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaAdmin + - port + ManilaV1Internal: + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ManilaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - ManilaApiNetwork + port: + get_param: + - EndpointMap + - ManilaInternal + - port + protocol: + get_param: + - EndpointMap + - ManilaInternal + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - ManilaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaInternal + - port + path: /v1/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ManilaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ManilaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ManilaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaInternal + - port + ManilaV1Public: + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ManilaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - ManilaPublic + - port + protocol: + get_param: + - EndpointMap + - ManilaPublic + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - ManilaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaPublic + - port + path: /v1/ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ManilaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ManilaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ManilaPublic + - port + MetricsQdrPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - MetricsQdrPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - MetricsQdrPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - MetricsQdrPublic + - port + protocol: + get_param: + - EndpointMap + - MetricsQdrPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - MetricsQdrPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MetricsQdrPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MetricsQdrPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - MetricsQdrPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MetricsQdrPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MetricsQdrPublic + - port + MistralAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MistralApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - MistralApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - MistralAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MistralApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - MistralApiNetwork + port: + get_param: + - EndpointMap + - MistralAdmin + - port + protocol: + get_param: + - EndpointMap + - MistralAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - MistralAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MistralApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - MistralApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MistralAdmin + - port + path: /v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - MistralAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MistralApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - MistralApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MistralAdmin + - port + MistralInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MistralApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - MistralApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - MistralInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MistralApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - MistralApiNetwork + port: + get_param: + - EndpointMap + - MistralInternal + - port + protocol: + get_param: + - EndpointMap + - MistralInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - MistralInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MistralApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - MistralApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MistralInternal + - port + path: /v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - MistralInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MistralApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - MistralApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MistralInternal + - port + MistralPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - MistralPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - MistralPublic + - port + protocol: + get_param: + - EndpointMap + - MistralPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - MistralPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MistralPublic + - port + path: /v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - MistralPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MistralPublic + - port + MistralUIConfig: + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - MistralUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - MistralUIConfig + - port + protocol: + get_param: + - EndpointMap + - MistralUIConfig + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - MistralUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MistralUIConfig + - port + path: /mistral/v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - MistralUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MistralUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MistralUIConfig + - port + MysqlInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - MysqlInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MysqlNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - MysqlNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - MysqlInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MysqlNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - MysqlNetwork + port: + get_param: + - EndpointMap + - MysqlInternal + - port + protocol: + get_param: + - EndpointMap + - MysqlInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - MysqlInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MysqlInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MysqlNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - MysqlNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MysqlInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - MysqlInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - MysqlInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - MysqlNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - MysqlNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - MysqlInternal + - port + NeutronAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - NeutronAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NeutronApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NeutronApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NeutronAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NeutronApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - NeutronApiNetwork + port: + get_param: + - EndpointMap + - NeutronAdmin + - port + protocol: + get_param: + - EndpointMap + - NeutronAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NeutronAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NeutronAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NeutronApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NeutronApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NeutronAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NeutronAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NeutronAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NeutronApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NeutronApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NeutronAdmin + - port + NeutronInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - NeutronInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NeutronApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NeutronApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NeutronInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NeutronApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - NeutronApiNetwork + port: + get_param: + - EndpointMap + - NeutronInternal + - port + protocol: + get_param: + - EndpointMap + - NeutronInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NeutronInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NeutronInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NeutronApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NeutronApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NeutronInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NeutronInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NeutronInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NeutronApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NeutronApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NeutronInternal + - port + NeutronPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - NeutronPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NeutronPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - NeutronPublic + - port + protocol: + get_param: + - EndpointMap + - NeutronPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NeutronPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NeutronPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NeutronPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NeutronPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NeutronPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NeutronPublic + - port + NovaAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - NovaApiNetwork + port: + get_param: + - EndpointMap + - NovaAdmin + - port + protocol: + get_param: + - EndpointMap + - NovaAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaAdmin + - port + path: /v2.1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaAdmin + - port + NovaInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - NovaApiNetwork + port: + get_param: + - EndpointMap + - NovaInternal + - port + protocol: + get_param: + - EndpointMap + - NovaInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaInternal + - port + path: /v2.1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaInternal + - port + NovaPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - NovaPublic + - port + protocol: + get_param: + - EndpointMap + - NovaPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaPublic + - port + path: /v2.1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaPublic + - port + NovaUIConfig: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovaUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - NovaUIConfig + - port + protocol: + get_param: + - EndpointMap + - NovaUIConfig + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovaUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaUIConfig + - port + path: /nova/v2.1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovaUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaUIConfig + - port + NovaMetadataInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaMetadataInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaMetadataNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaMetadataNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovaMetadataInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaMetadataNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - NovaMetadataNetwork + port: + get_param: + - EndpointMap + - NovaMetadataInternal + - port + protocol: + get_param: + - EndpointMap + - NovaMetadataInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovaMetadataInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaMetadataInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaMetadataNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaMetadataNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaMetadataInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovaMetadataInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaMetadataInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaMetadataNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaMetadataNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaMetadataInternal + - port + NovaVNCProxyAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - NovaApiNetwork + port: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - port + protocol: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaVNCProxyAdmin + - port + NovaVNCProxyInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - NovaApiNetwork + port: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - port + protocol: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaVNCProxyInternal + - port + NovaVNCProxyPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - port + protocol: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovaVNCProxyPublic + - port + NovajoinAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovajoinNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovajoinNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovajoinNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - NovajoinNetwork + port: + get_param: + - EndpointMap + - NovajoinAdmin + - port + protocol: + get_param: + - EndpointMap + - NovajoinAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovajoinAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovajoinNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovajoinNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovajoinAdmin + - port + path: /v1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovajoinAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovajoinNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovajoinNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovajoinAdmin + - port + NovajoinInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovajoinNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovajoinNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovajoinNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - NovajoinNetwork + port: + get_param: + - EndpointMap + - NovajoinInternal + - port + protocol: + get_param: + - EndpointMap + - NovajoinInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovajoinInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovajoinNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovajoinNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovajoinInternal + - port + path: /v1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovajoinInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - NovajoinNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - NovajoinNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovajoinInternal + - port + NovajoinPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - NovajoinPublic + - port + protocol: + get_param: + - EndpointMap + - NovajoinPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - NovajoinPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovajoinPublic + - port + path: /v1 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - NovajoinPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - NovajoinPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - NovajoinPublic + - port + OctaviaAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - OctaviaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + port: + get_param: + - EndpointMap + - OctaviaAdmin + - port + protocol: + get_param: + - EndpointMap + - OctaviaAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - OctaviaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - OctaviaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - OctaviaAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - OctaviaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - OctaviaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - OctaviaAdmin + - port + OctaviaInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - OctaviaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + port: + get_param: + - EndpointMap + - OctaviaInternal + - port + protocol: + get_param: + - EndpointMap + - OctaviaInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - OctaviaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - OctaviaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - OctaviaInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - OctaviaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - OctaviaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - OctaviaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - OctaviaInternal + - port + OctaviaPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - OctaviaPublic + - port + protocol: + get_param: + - EndpointMap + - OctaviaPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - OctaviaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - OctaviaPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - OctaviaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - OctaviaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - OctaviaPublic + - port + PankoAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - PankoAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PankoApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PankoApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - PankoAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PankoApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PankoApiNetwork + port: + get_param: + - EndpointMap + - PankoAdmin + - port + protocol: + get_param: + - EndpointMap + - PankoAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - PankoAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PankoAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PankoApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PankoApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PankoAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - PankoAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PankoAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PankoApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PankoApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PankoAdmin + - port + PankoInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - PankoInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PankoApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PankoApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - PankoInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PankoApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PankoApiNetwork + port: + get_param: + - EndpointMap + - PankoInternal + - port + protocol: + get_param: + - EndpointMap + - PankoInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - PankoInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PankoInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PankoApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PankoApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PankoInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - PankoInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PankoInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PankoApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PankoApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PankoInternal + - port + PankoPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - PankoPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - PankoPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - PankoPublic + - port + protocol: + get_param: + - EndpointMap + - PankoPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - PankoPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PankoPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PankoPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - PankoPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PankoPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PankoPublic + - port + PlacementAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - PlacementAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PlacementNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PlacementNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - PlacementAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PlacementNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PlacementNetwork + port: + get_param: + - EndpointMap + - PlacementAdmin + - port + protocol: + get_param: + - EndpointMap + - PlacementAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - PlacementAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PlacementAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PlacementNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PlacementNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PlacementAdmin + - port + path: /placement + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - PlacementAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PlacementAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PlacementNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PlacementNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PlacementAdmin + - port + PlacementInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - PlacementInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PlacementNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PlacementNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - PlacementInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PlacementNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PlacementNetwork + port: + get_param: + - EndpointMap + - PlacementInternal + - port + protocol: + get_param: + - EndpointMap + - PlacementInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - PlacementInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PlacementInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PlacementNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PlacementNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PlacementInternal + - port + path: /placement + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - PlacementInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PlacementInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PlacementNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PlacementNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PlacementInternal + - port + PlacementPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - PlacementPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - PlacementPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - PlacementPublic + - port + protocol: + get_param: + - EndpointMap + - PlacementPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - PlacementPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PlacementPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PlacementPublic + - port + path: /placement + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - PlacementPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - PlacementPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - PlacementPublic + - port + SaharaAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - SaharaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SaharaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SaharaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SaharaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SaharaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - SaharaApiNetwork + port: + get_param: + - EndpointMap + - SaharaAdmin + - port + protocol: + get_param: + - EndpointMap + - SaharaAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - SaharaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SaharaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SaharaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SaharaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SaharaAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SaharaAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SaharaAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SaharaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SaharaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SaharaAdmin + - port + SaharaInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - SaharaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SaharaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SaharaApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SaharaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SaharaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - SaharaApiNetwork + port: + get_param: + - EndpointMap + - SaharaInternal + - port + protocol: + get_param: + - EndpointMap + - SaharaInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - SaharaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SaharaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SaharaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SaharaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SaharaInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SaharaInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SaharaInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SaharaApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SaharaApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SaharaInternal + - port + SaharaPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - SaharaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SaharaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - SaharaPublic + - port + protocol: + get_param: + - EndpointMap + - SaharaPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - SaharaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SaharaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SaharaPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SaharaPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SaharaPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SaharaPublic + - port + SwiftAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SwiftAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + port: + get_param: + - EndpointMap + - SwiftAdmin + - port + protocol: + get_param: + - EndpointMap + - SwiftAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftAdmin + - port + SwiftInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SwiftInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + port: + get_param: + - EndpointMap + - SwiftInternal + - port + protocol: + get_param: + - EndpointMap + - SwiftInternal + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - SwiftInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftInternal + - port + path: /v1/AUTH_ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftInternal + - port + SwiftPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SwiftPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - SwiftPublic + - port + protocol: + get_param: + - EndpointMap + - SwiftPublic + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - SwiftPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftPublic + - port + path: /v1/AUTH_ + - '%(tenant_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftPublic + - port + SwiftS3Admin: + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SwiftAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + port: + get_param: + - EndpointMap + - SwiftAdmin + - port + protocol: + get_param: + - EndpointMap + - SwiftAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftAdmin + - port + SwiftS3Internal: + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SwiftInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + port: + get_param: + - EndpointMap + - SwiftInternal + - port + protocol: + get_param: + - EndpointMap + - SwiftInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - SwiftProxyNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - SwiftProxyNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftInternal + - port + SwiftS3Public: + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SwiftPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - SwiftPublic + - port + protocol: + get_param: + - EndpointMap + - SwiftPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftPublic + - port + SwiftUIConfig: + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - SwiftUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - SwiftUIConfig + - port + protocol: + get_param: + - EndpointMap + - SwiftUIConfig + - protocol + uri: + list_join: + - '' + - - make_url: + scheme: + get_param: + - EndpointMap + - SwiftUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftUIConfig + - port + path: /swift/v1/AUTH_ + - '%(project_id)s' + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - SwiftUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - SwiftUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - SwiftUIConfig + - port + TrilioDatamoverAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + port: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - port + protocol: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - port + path: /v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - TrilioDatamoverAdmin + - port + TrilioDatamoverInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + port: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - port + protocol: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - port + path: /v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - TrilioDatamoverApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - TrilioDatamoverInternal + - port + TrilioDatamoverPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - port + protocol: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - port + path: /v2 + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - TrilioDatamoverPublic + - port + ZaqarAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + port: + get_param: + - EndpointMap + - ZaqarAdmin + - port + protocol: + get_param: + - EndpointMap + - ZaqarAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarAdmin + - port + ZaqarInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + port: + get_param: + - EndpointMap + - ZaqarInternal + - port + protocol: + get_param: + - EndpointMap + - ZaqarInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarInternal + - port + ZaqarPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - ZaqarPublic + - port + protocol: + get_param: + - EndpointMap + - ZaqarPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarPublic + - port + ZaqarWebSocketAdmin: + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + port: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - port + protocol: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarWebSocketAdmin + - port + ZaqarWebSocketInternal: + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + port: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - port + protocol: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - ZaqarApiNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - ZaqarApiNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarWebSocketInternal + - port + ZaqarWebSocketPublic: + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - port + protocol: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - port + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarWebSocketPublic + - port + ZaqarWebSocketUIConfig: + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + host_nobrackets: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - get_param: + - ServiceNetMap + - PublicNetwork + port: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - port + protocol: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - protocol + uri: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - port + path: /zaqar + uri_no_suffix: + make_url: + scheme: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - protocol + host: + str_replace: + template: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - host + params: + CLOUDNAME: + get_param: + - CloudEndpoints + - get_param: + - ServiceNetMap + - PublicNetwork + IP_ADDRESS: + get_param: + - NetIpMap + - str_replace: + params: + NETWORK: + get_param: + - ServiceNetMap + - PublicNetwork + template: NETWORK_uri + port: + get_param: + - EndpointMap + - ZaqarWebSocketUIConfig + - port diff --git a/redhat-director-scripts/rhosp17.0/environments/trilio_datamover_opt_volumes.yaml b/redhat-director-scripts/rhosp17.0/environments/trilio_datamover_opt_volumes.yaml new file mode 100644 index 000000000..2e0f96201 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/environments/trilio_datamover_opt_volumes.yaml @@ -0,0 +1,8 @@ +parameter_defaults: + ## User can specify list of extra volumes that he/she wants to mount on 'trilio_datamover' container. + TrilioDatamoverOptVolumes: + +# Example: +# TrilioDatamoverOptVolumes: +# - /opt/dir1:/opt/dir1 +# - /mnt/dir2:/var/dir2 diff --git a/redhat-director-scripts/rhosp17.0/environments/trilio_endpoint_data.yaml b/redhat-director-scripts/rhosp17.0/environments/trilio_endpoint_data.yaml new file mode 100644 index 000000000..beed0ad2f --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/environments/trilio_endpoint_data.yaml @@ -0,0 +1,16 @@ +# Trilio endpoint map file + +TrilioDatamover: + Internal: + net_param: TrilioDatamoverApi + uri_suffixes: + '': /v2 + Public: + net_param: Public + uri_suffixes: + '': /v2 + Admin: + net_param: TrilioDatamoverApi + uri_suffixes: + '': /v2 + port: 8784 diff --git a/redhat-director-scripts/rhosp17.0/environments/trilio_env.yaml b/redhat-director-scripts/rhosp17.0/environments/trilio_env.yaml new file mode 100644 index 000000000..5a85c7be6 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/environments/trilio_env.yaml @@ -0,0 +1,86 @@ +resource_registry: + OS::TripleO::Services::TrilioDatamover: ../services/trilio-datamover.yaml + OS::TripleO::Services::TrilioDatamoverApi: ../services/trilio-datamover-api.yaml + OS::TripleO::Services::TrilioHorizon: ../services/trilio-horizon.yaml + + # NOTE: If there are addition customizations to the endpoint map (e.g. for + # other integratiosn), this will need to be regenerated. + OS::TripleO::EndpointMap: endpoint_map.yaml + +parameter_defaults: + + ## Enable TrilioVault's quota functionality on horizon + ExtraConfig: + horizon::customization_module: 'dashboards.overrides' + + ## Define network map for trilio datamover api service + ServiceNetMap: + TrilioDatamoverApiNetwork: internal_api + + ## TrilioVault Datamover Password for keystone and database + TrilioDatamoverPassword: "test1234" + + ## TrilioVault container pull urls + DockerTrilioDatamoverImage: devundercloud.ctlplane.localdomain:8787/trilio/trilio-datamover:4.0.41-rhosp16 + DockerTrilioDmApiImage: devundercloud.ctlplane.localdomain:8787/trilio/trilio-datamover-api:4.0.41-rhosp16 + + ## If you do not want Trilio's horizon plugin to replace your horizon container, just comment following line. + ContainerHorizonImage: devundercloud.ctlplane.localdomain:8787/trilio/trilio-horizon-plugin:4.0.41-rhosp16 + + ## Backup target type nfs/s3, used to store snapshots taken by triliovault + BackupTargetType: 'nfs' + + ## If backup target NFS share support multiple IPs and you want to use those IPs(more than one) then + ## set this parameter to True. Otherwise keep it False. + MultiIPNfsEnabled: False + + ## For backup target 'nfs' + NfsShares: '192.168.122.101:/opt/tvault' + NfsOptions: 'nolock,soft,timeo=180,intr,lookupcache=none' + + ## For backup target 's3' + ## S3 type: amazon_s3/ceph_s3 + S3Type: 'amazon_s3' + + ## S3 access key + S3AccessKey: '' + + ## S3 secret key + S3SecretKey: '' + + ## S3 region, if your s3 does not have any region, just keep the parameter as it is + S3RegionName: '' + + ## S3 bucket name + S3Bucket: '' + + ## S3 endpoint url, not required for Amazon S3, keep it as it is + S3EndpointUrl: '' + + ## S3 signature version + S3SignatureVersion: 'default' + + ## S3 Auth version + S3AuthVersion: 'DEFAULT' + + ## If S3 backend is not Amazon S3 and SSL is enabled on S3 endpoint url then change it to 'True', otherwise keep it as 'False' + S3SslEnabled: False + + ## If S3 backend is not Amazon S3 and SSL is enabled on S3 endpoint URL and SSL certificates are self signed, then + ## user need to set this parameter value to: '/etc/tvault-contego/s3-cert.pem', otherwise keep it's value as empty string. + S3SslCert: '' + + ## Configure 'dmapi_workers' parameter of '/etc/dmapi/dmapi.conf' file + ## This parameter value used to spawn the number of dmapi processes to handle the incoming api requests. + ## If your dmapi node has ‘n' cpu cores, It is recommended, to set this parameter to '4*n’. + ## If dmapi_workers field is not present in config file. The Default value will be equals to number of cores present on the node + DmApiWorkers: 16 + + ## Don't edit following parameter + EnablePackageInstall: True + + + ## Load 'rbd' kernel module on all compute nodes + ComputeParameters: + ExtraKernelModules: + rbd: {} diff --git a/redhat-director-scripts/rhosp17.0/environments/trilio_env_non_tls_endpoints_ip.yaml b/redhat-director-scripts/rhosp17.0/environments/trilio_env_non_tls_endpoints_ip.yaml new file mode 100644 index 000000000..4f007a18a --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/environments/trilio_env_non_tls_endpoints_ip.yaml @@ -0,0 +1,104 @@ +# Trilio tls public ip endpoint map +# +# This file should be used instead of tls-endpoints-public-ip.yaml when +# deploying Trilio +parameter_defaults: + EndpointMap: + AodhAdmin: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} + AodhInternal: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} + AodhPublic: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} + BarbicanAdmin: {protocol: 'http', port: '9311', host: 'IP_ADDRESS'} + BarbicanInternal: {protocol: 'http', port: '9311', host: 'IP_ADDRESS'} + BarbicanPublic: {protocol: 'http', port: '9311', host: 'IP_ADDRESS'} + CephDashboardInternal: {protocol: 'http', port: '8444', host: 'IP_ADDRESS'} + CephGrafanaInternal: {protocol: 'http', port: '3100', host: 'IP_ADDRESS'} + CephRgwAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + CephRgwInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + CephRgwPublic: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + CinderAdmin: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'} + CinderInternal: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'} + CinderPublic: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'} + DesignateAdmin: {protocol: 'http', port: '9001', host: 'IP_ADDRESS'} + DesignateInternal: {protocol: 'http', port: '9001', host: 'IP_ADDRESS'} + DesignatePublic: {protocol: 'http', port: '9001', host: 'IP_ADDRESS'} + DockerRegistryInternal: {protocol: 'http', port: '8787', host: 'IP_ADDRESS'} + Ec2ApiAdmin: {protocol: 'http', port: '8788', host: 'IP_ADDRESS'} + Ec2ApiInternal: {protocol: 'http', port: '8788', host: 'IP_ADDRESS'} + Ec2ApiPublic: {protocol: 'http', port: '8788', host: 'IP_ADDRESS'} + GaneshaInternal: {protocol: 'nfs', port: '2049', host: 'IP_ADDRESS'} + GlanceAdmin: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'} + GlanceInternal: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'} + GlancePublic: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'} + GnocchiAdmin: {protocol: 'http', port: '8041', host: 'IP_ADDRESS'} + GnocchiInternal: {protocol: 'http', port: '8041', host: 'IP_ADDRESS'} + GnocchiPublic: {protocol: 'http', port: '8041', host: 'IP_ADDRESS'} + HeatAdmin: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'} + HeatInternal: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'} + HeatPublic: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'} + HeatCfnAdmin: {protocol: 'http', port: '8000', host: 'IP_ADDRESS'} + HeatCfnInternal: {protocol: 'http', port: '8000', host: 'IP_ADDRESS'} + HeatCfnPublic: {protocol: 'http', port: '8000', host: 'IP_ADDRESS'} + HeatUIConfig: {protocol: 'http', port: '3000', host: 'IP_ADDRESS'} + HorizonPublic: {protocol: 'http', port: '80', host: 'IP_ADDRESS'} + IronicAdmin: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'} + IronicInternal: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'} + IronicPublic: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'} + IronicInspectorAdmin: {protocol: 'http', port: '5050', host: 'IP_ADDRESS'} + IronicInspectorInternal: {protocol: 'http', port: '5050', host: 'IP_ADDRESS'} + IronicInspectorPublic: {protocol: 'http', port: '5050', host: 'IP_ADDRESS'} + IronicInspectorUIConfig: {protocol: 'http', port: '3000', host: 'IP_ADDRESS'} + IronicUIConfig: {protocol: 'http', port: '3000', host: 'IP_ADDRESS'} + KeystoneAdmin: {protocol: 'http', port: '35357', host: 'IP_ADDRESS'} + KeystoneInternal: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'} + KeystonePublic: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'} + KeystoneUIConfig: {protocol: 'http', port: '3000', host: 'IP_ADDRESS'} + ManilaAdmin: {protocol: 'http', port: '8786', host: 'IP_ADDRESS'} + ManilaInternal: {protocol: 'http', port: '8786', host: 'IP_ADDRESS'} + ManilaPublic: {protocol: 'http', port: '8786', host: 'IP_ADDRESS'} + MetricsQdrPublic: {protocol: 'amqp', port: '5666', host: 'IP_ADDRESS'} + MistralAdmin: {protocol: 'http', port: '8989', host: 'IP_ADDRESS'} + MistralInternal: {protocol: 'http', port: '8989', host: 'IP_ADDRESS'} + MistralPublic: {protocol: 'http', port: '8989', host: 'IP_ADDRESS'} + MistralUIConfig: {protocol: 'http', port: '443', host: 'IP_ADDRESS'} + MysqlInternal: {protocol: 'mysql+pymysql', port: '3306', host: 'IP_ADDRESS'} + NeutronAdmin: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'} + NeutronInternal: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'} + NeutronPublic: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'} + NovaAdmin: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'} + NovaInternal: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'} + NovaPublic: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'} + NovajoinAdmin: {protocol: 'http', port: '9090', host: 'IP_ADDRESS'} + NovajoinInternal: {protocol: 'http', port: '9090', host: 'IP_ADDRESS'} + NovajoinPublic: {protocol: 'http', port: '9090', host: 'IP_ADDRESS'} + NovaMetadataInternal: {protocol: 'http', port: '8775', host: 'IP_ADDRESS'} + NovaUIConfig: {protocol: 'http', port: '3000', host: 'IP_ADDRESS'} + PlacementAdmin: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'} + PlacementInternal: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'} + PlacementPublic: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'} + NovaVNCProxyAdmin: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'} + NovaVNCProxyInternal: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'} + NovaVNCProxyPublic: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'} + OctaviaAdmin: {protocol: 'http', port: '9876', host: 'IP_ADDRESS'} + OctaviaInternal: {protocol: 'http', port: '9876', host: 'IP_ADDRESS'} + OctaviaPublic: {protocol: 'http', port: '9876', host: 'IP_ADDRESS'} + PankoAdmin: {protocol: 'http', port: '8977', host: 'IP_ADDRESS'} + PankoInternal: {protocol: 'http', port: '8977', host: 'IP_ADDRESS'} + PankoPublic: {protocol: 'http', port: '8977', host: 'IP_ADDRESS'} + SaharaAdmin: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'} + SaharaInternal: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'} + SaharaPublic: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'} + SwiftAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + SwiftInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + SwiftPublic: {protocol: 'http', port: '8808', host: 'IP_ADDRESS'} + SwiftUIConfig: {protocol: 'http', port: '3000', host: 'IP_ADDRESS'} + ZaqarAdmin: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'} + ZaqarInternal: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'} + ZaqarPublic: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'} + ZaqarWebSocketAdmin: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'} + ZaqarWebSocketInternal: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'} + ZaqarWebSocketPublic: {protocol: 'wss', port: '9000', host: 'IP_ADDRESS'} + ZaqarWebSocketUIConfig: {protocol: 'wss', port: '3000', host: 'IP_ADDRESS'} + # ADDED FOR TRILIO + TrilioDatamoverAdmin: {protocol: 'http', port: '8784', host: 'IP_ADDRESS'} + TrilioDatamoverInternal: {protocol: 'http', port: '8784', host: 'IP_ADDRESS'} + TrilioDatamoverPublic: {protocol: 'http', port: '8784', host: 'IP_ADDRESS'} \ No newline at end of file diff --git a/redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_endpoints_public_dns.yaml b/redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_endpoints_public_dns.yaml new file mode 100644 index 000000000..124269f4f --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_endpoints_public_dns.yaml @@ -0,0 +1,104 @@ +# Trilio tls public dns endpoint map +# +# This file should be used instead of tls-endpoints-public-dns.yaml when +# deploying Trilio +parameter_defaults: + EndpointMap: + AodhAdmin: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} + AodhInternal: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} + AodhPublic: {protocol: 'https', port: '13042', host: 'CLOUDNAME'} + BarbicanAdmin: {protocol: 'http', port: '9311', host: 'IP_ADDRESS'} + BarbicanInternal: {protocol: 'http', port: '9311', host: 'IP_ADDRESS'} + BarbicanPublic: {protocol: 'https', port: '13311', host: 'CLOUDNAME'} + CephDashboardInternal: {protocol: 'https', port: '8444', host: 'CLOUDNAME'} + CephGrafanaInternal: {protocol: 'https', port: '3100', host: 'CLOUDNAME'} + CephRgwAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + CephRgwInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + CephRgwPublic: {protocol: 'https', port: '13808', host: 'CLOUDNAME'} + CinderAdmin: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'} + CinderInternal: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'} + CinderPublic: {protocol: 'https', port: '13776', host: 'CLOUDNAME'} + DesignateAdmin: {protocol: 'http', port: '9001', host: 'IP_ADDRESS'} + DesignateInternal: {protocol: 'http', port: '9001', host: 'IP_ADDRESS'} + DesignatePublic: {protocol: 'https', port: '13001', host: 'CLOUDNAME'} + DockerRegistryInternal: {protocol: 'https', port: '8787', host: 'CLOUDNAME'} + Ec2ApiAdmin: {protocol: 'http', port: '8788', host: 'IP_ADDRESS'} + Ec2ApiInternal: {protocol: 'http', port: '8788', host: 'IP_ADDRESS'} + Ec2ApiPublic: {protocol: 'https', port: '13788', host: 'CLOUDNAME'} + GaneshaInternal: {protocol: 'nfs', port: '2049', host: 'IP_ADDRESS'} + GlanceAdmin: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'} + GlanceInternal: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'} + GlancePublic: {protocol: 'https', port: '13292', host: 'CLOUDNAME'} + GnocchiAdmin: {protocol: 'http', port: '8041', host: 'IP_ADDRESS'} + GnocchiInternal: {protocol: 'http', port: '8041', host: 'IP_ADDRESS'} + GnocchiPublic: {protocol: 'https', port: '13041', host: 'CLOUDNAME'} + HeatAdmin: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'} + HeatInternal: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'} + HeatPublic: {protocol: 'https', port: '13004', host: 'CLOUDNAME'} + HeatCfnAdmin: {protocol: 'http', port: '8000', host: 'IP_ADDRESS'} + HeatCfnInternal: {protocol: 'http', port: '8000', host: 'IP_ADDRESS'} + HeatCfnPublic: {protocol: 'https', port: '13005', host: 'CLOUDNAME'} + HeatUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + HorizonPublic: {protocol: 'https', port: '443', host: 'CLOUDNAME'} + IronicAdmin: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'} + IronicInternal: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'} + IronicPublic: {protocol: 'https', port: '13385', host: 'CLOUDNAME'} + IronicInspectorAdmin: {protocol: 'http', port: '5050', host: 'IP_ADDRESS'} + IronicInspectorInternal: {protocol: 'http', port: '5050', host: 'IP_ADDRESS'} + IronicInspectorPublic: {protocol: 'https', port: '13050', host: 'CLOUDNAME'} + IronicInspectorUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + IronicUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + KeystoneAdmin: {protocol: 'http', port: '35357', host: 'IP_ADDRESS'} + KeystoneInternal: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'} + KeystonePublic: {protocol: 'https', port: '13000', host: 'CLOUDNAME'} + KeystoneUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + ManilaAdmin: {protocol: 'http', port: '8786', host: 'IP_ADDRESS'} + ManilaInternal: {protocol: 'http', port: '8786', host: 'IP_ADDRESS'} + ManilaPublic: {protocol: 'https', port: '13786', host: 'CLOUDNAME'} + MetricsQdrPublic: {protocol: 'amqp', port: '5666', host: 'CLOUDNAME'} + MistralAdmin: {protocol: 'http', port: '8989', host: 'IP_ADDRESS'} + MistralInternal: {protocol: 'http', port: '8989', host: 'IP_ADDRESS'} + MistralPublic: {protocol: 'https', port: '13989', host: 'CLOUDNAME'} + MistralUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + MysqlInternal: {protocol: 'mysql+pymysql', port: '3306', host: 'IP_ADDRESS'} + NeutronAdmin: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'} + NeutronInternal: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'} + NeutronPublic: {protocol: 'https', port: '13696', host: 'CLOUDNAME'} + NovaAdmin: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'} + NovaInternal: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'} + NovaPublic: {protocol: 'https', port: '13774', host: 'CLOUDNAME'} + NovajoinAdmin: {protocol: 'http', port: '9090', host: 'IP_ADDRESS'} + NovajoinInternal: {protocol: 'http', port: '9090', host: 'IP_ADDRESS'} + NovajoinPublic: {protocol: 'https', port: '13090', host: 'CLOUDNAME'} + NovaMetadataInternal: {protocol: 'https', port: '8775', host: 'IP_ADDRESS'} + NovaUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + PlacementAdmin: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'} + PlacementInternal: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'} + PlacementPublic: {protocol: 'https', port: '13778', host: 'CLOUDNAME'} + NovaVNCProxyAdmin: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'} + NovaVNCProxyInternal: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'} + NovaVNCProxyPublic: {protocol: 'https', port: '13080', host: 'CLOUDNAME'} + OctaviaAdmin: {protocol: 'http', port: '9876', host: 'IP_ADDRESS'} + OctaviaInternal: {protocol: 'http', port: '9876', host: 'IP_ADDRESS'} + OctaviaPublic: {protocol: 'https', port: '13876', host: 'CLOUDNAME'} + PankoAdmin: {protocol: 'http', port: '8977', host: 'IP_ADDRESS'} + PankoInternal: {protocol: 'http', port: '8977', host: 'IP_ADDRESS'} + PankoPublic: {protocol: 'https', port: '13977', host: 'CLOUDNAME'} + SaharaAdmin: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'} + SaharaInternal: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'} + SaharaPublic: {protocol: 'https', port: '13386', host: 'CLOUDNAME'} + SwiftAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + SwiftInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + SwiftPublic: {protocol: 'https', port: '13808', host: 'CLOUDNAME'} + SwiftUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + ZaqarAdmin: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'} + ZaqarInternal: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'} + ZaqarPublic: {protocol: 'https', port: '13888', host: 'CLOUDNAME'} + ZaqarWebSocketAdmin: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'} + ZaqarWebSocketInternal: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'} + ZaqarWebSocketPublic: {protocol: 'wss', port: '3000', host: 'CLOUDNAME'} + ZaqarWebSocketUIConfig: {protocol: 'wss', port: '443', host: 'IP_ADDRESS'} + # ADDED FOR TRILIO + TrilioDatamoverAdmin: {protocol: 'http', port: '8784', host: 'IP_ADDRESS'} + TrilioDatamoverInternal: {protocol: 'http', port: '8784', host: 'IP_ADDRESS'} + TrilioDatamoverPublic: {protocol: 'https', port: '13784', host: 'CLOUDNAME'} diff --git a/redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_endpoints_public_ip.yaml b/redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_endpoints_public_ip.yaml new file mode 100644 index 000000000..71bfa1d15 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_endpoints_public_ip.yaml @@ -0,0 +1,104 @@ +# Trilio tls public ip endpoint map +# +# This file should be used instead of tls-endpoints-public-ip.yaml when +# deploying Trilio +parameter_defaults: + EndpointMap: + AodhAdmin: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} + AodhInternal: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} + AodhPublic: {protocol: 'https', port: '13042', host: 'IP_ADDRESS'} + BarbicanAdmin: {protocol: 'http', port: '9311', host: 'IP_ADDRESS'} + BarbicanInternal: {protocol: 'http', port: '9311', host: 'IP_ADDRESS'} + BarbicanPublic: {protocol: 'https', port: '13311', host: 'IP_ADDRESS'} + CephDashboardInternal: {protocol: 'https', port: '8444', host: 'IP_ADDRESS'} + CephGrafanaInternal: {protocol: 'https', port: '3100', host: 'IP_ADDRESS'} + CephRgwAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + CephRgwInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + CephRgwPublic: {protocol: 'https', port: '13808', host: 'IP_ADDRESS'} + CinderAdmin: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'} + CinderInternal: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'} + CinderPublic: {protocol: 'https', port: '13776', host: 'IP_ADDRESS'} + DesignateAdmin: {protocol: 'http', port: '9001', host: 'IP_ADDRESS'} + DesignateInternal: {protocol: 'http', port: '9001', host: 'IP_ADDRESS'} + DesignatePublic: {protocol: 'https', port: '13001', host: 'IP_ADDRESS'} + DockerRegistryInternal: {protocol: 'https', port: '8787', host: 'IP_ADDRESS'} + Ec2ApiAdmin: {protocol: 'http', port: '8788', host: 'IP_ADDRESS'} + Ec2ApiInternal: {protocol: 'http', port: '8788', host: 'IP_ADDRESS'} + Ec2ApiPublic: {protocol: 'https', port: '13788', host: 'IP_ADDRESS'} + GaneshaInternal: {protocol: 'nfs', port: '2049', host: 'IP_ADDRESS'} + GlanceAdmin: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'} + GlanceInternal: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'} + GlancePublic: {protocol: 'https', port: '13292', host: 'IP_ADDRESS'} + GnocchiAdmin: {protocol: 'http', port: '8041', host: 'IP_ADDRESS'} + GnocchiInternal: {protocol: 'http', port: '8041', host: 'IP_ADDRESS'} + GnocchiPublic: {protocol: 'https', port: '13041', host: 'IP_ADDRESS'} + HeatAdmin: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'} + HeatInternal: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'} + HeatPublic: {protocol: 'https', port: '13004', host: 'IP_ADDRESS'} + HeatCfnAdmin: {protocol: 'http', port: '8000', host: 'IP_ADDRESS'} + HeatCfnInternal: {protocol: 'http', port: '8000', host: 'IP_ADDRESS'} + HeatCfnPublic: {protocol: 'https', port: '13005', host: 'IP_ADDRESS'} + HeatUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + HorizonPublic: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + IronicAdmin: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'} + IronicInternal: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'} + IronicPublic: {protocol: 'https', port: '13385', host: 'IP_ADDRESS'} + IronicInspectorAdmin: {protocol: 'http', port: '5050', host: 'IP_ADDRESS'} + IronicInspectorInternal: {protocol: 'http', port: '5050', host: 'IP_ADDRESS'} + IronicInspectorPublic: {protocol: 'https', port: '13050', host: 'IP_ADDRESS'} + IronicInspectorUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + IronicUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + KeystoneAdmin: {protocol: 'http', port: '35357', host: 'IP_ADDRESS'} + KeystoneInternal: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'} + KeystonePublic: {protocol: 'https', port: '13000', host: 'IP_ADDRESS'} + KeystoneUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + ManilaAdmin: {protocol: 'http', port: '8786', host: 'IP_ADDRESS'} + ManilaInternal: {protocol: 'http', port: '8786', host: 'IP_ADDRESS'} + ManilaPublic: {protocol: 'https', port: '13786', host: 'IP_ADDRESS'} + MetricsQdrPublic: {protocol: 'amqp', port: '5666', host: 'IP_ADDRESS'} + MistralAdmin: {protocol: 'http', port: '8989', host: 'IP_ADDRESS'} + MistralInternal: {protocol: 'http', port: '8989', host: 'IP_ADDRESS'} + MistralPublic: {protocol: 'https', port: '13989', host: 'IP_ADDRESS'} + MistralUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + MysqlInternal: {protocol: 'mysql+pymysql', port: '3306', host: 'IP_ADDRESS'} + NeutronAdmin: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'} + NeutronInternal: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'} + NeutronPublic: {protocol: 'https', port: '13696', host: 'IP_ADDRESS'} + NovaAdmin: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'} + NovaInternal: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'} + NovaPublic: {protocol: 'https', port: '13774', host: 'IP_ADDRESS'} + NovajoinAdmin: {protocol: 'http', port: '9090', host: 'IP_ADDRESS'} + NovajoinInternal: {protocol: 'http', port: '9090', host: 'IP_ADDRESS'} + NovajoinPublic: {protocol: 'https', port: '13090', host: 'IP_ADDRESS'} + NovaMetadataInternal: {protocol: 'https', port: '8775', host: 'IP_ADDRESS'} + NovaUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + PlacementAdmin: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'} + PlacementInternal: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'} + PlacementPublic: {protocol: 'https', port: '13778', host: 'IP_ADDRESS'} + NovaVNCProxyAdmin: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'} + NovaVNCProxyInternal: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'} + NovaVNCProxyPublic: {protocol: 'https', port: '13080', host: 'IP_ADDRESS'} + OctaviaAdmin: {protocol: 'http', port: '9876', host: 'IP_ADDRESS'} + OctaviaInternal: {protocol: 'http', port: '9876', host: 'IP_ADDRESS'} + OctaviaPublic: {protocol: 'https', port: '13876', host: 'IP_ADDRESS'} + PankoAdmin: {protocol: 'http', port: '8977', host: 'IP_ADDRESS'} + PankoInternal: {protocol: 'http', port: '8977', host: 'IP_ADDRESS'} + PankoPublic: {protocol: 'https', port: '13977', host: 'IP_ADDRESS'} + SaharaAdmin: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'} + SaharaInternal: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'} + SaharaPublic: {protocol: 'https', port: '13386', host: 'IP_ADDRESS'} + SwiftAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + SwiftInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'} + SwiftPublic: {protocol: 'https', port: '13808', host: 'IP_ADDRESS'} + SwiftUIConfig: {protocol: 'https', port: '443', host: 'IP_ADDRESS'} + ZaqarAdmin: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'} + ZaqarInternal: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'} + ZaqarPublic: {protocol: 'https', port: '13888', host: 'IP_ADDRESS'} + ZaqarWebSocketAdmin: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'} + ZaqarWebSocketInternal: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'} + ZaqarWebSocketPublic: {protocol: 'wss', port: '3000', host: 'IP_ADDRESS'} + ZaqarWebSocketUIConfig: {protocol: 'wss', port: '443', host: 'IP_ADDRESS'} + # ADDED FOR TRILIO + TrilioDatamoverAdmin: {protocol: 'http', port: '8784', host: 'IP_ADDRESS'} + TrilioDatamoverInternal: {protocol: 'http', port: '8784', host: 'IP_ADDRESS'} + TrilioDatamoverPublic: {protocol: 'https', port: '13784', host: 'IP_ADDRESS'} diff --git a/redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_everywhere_dns.yaml b/redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_everywhere_dns.yaml new file mode 100644 index 000000000..47837d186 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/environments/trilio_env_tls_everywhere_dns.yaml @@ -0,0 +1,104 @@ +# Trilio tls everywhere endpoint map +# +# This file should be used instead of tls-everywhere-endpoints-dns.yaml when +# deploying Trilio. +parameter_defaults: + EndpointMap: + AodhAdmin: {protocol: 'https', port: '8042', host: 'CLOUDNAME'} + AodhInternal: {protocol: 'https', port: '8042', host: 'CLOUDNAME'} + AodhPublic: {protocol: 'https', port: '13042', host: 'CLOUDNAME'} + BarbicanAdmin: {protocol: 'https', port: '9311', host: 'CLOUDNAME'} + BarbicanInternal: {protocol: 'https', port: '9311', host: 'CLOUDNAME'} + BarbicanPublic: {protocol: 'https', port: '13311', host: 'CLOUDNAME'} + CephDashboardInternal: {protocol: 'https', port: '8444', host: 'CLOUDNAME'} + CephGrafanaInternal: {protocol: 'https', port: '3100', host: 'CLOUDNAME'} + CephRgwAdmin: {protocol: 'https', port: '8080', host: 'CLOUDNAME'} + CephRgwInternal: {protocol: 'https', port: '8080', host: 'CLOUDNAME'} + CephRgwPublic: {protocol: 'https', port: '13808', host: 'CLOUDNAME'} + CinderAdmin: {protocol: 'https', port: '8776', host: 'CLOUDNAME'} + CinderInternal: {protocol: 'https', port: '8776', host: 'CLOUDNAME'} + CinderPublic: {protocol: 'https', port: '13776', host: 'CLOUDNAME'} + DesignateAdmin: {protocol: 'https', port: '9001', host: 'CLOUDNAME'} + DesignateInternal: {protocol: 'https', port: '9001', host: 'CLOUDNAME'} + DesignatePublic: {protocol: 'https', port: '13001', host: 'CLOUDNAME'} + DockerRegistryInternal: {protocol: 'https', port: '8787', host: 'CLOUDNAME'} + Ec2ApiAdmin: {protocol: 'https', port: '8788', host: 'CLOUDNAME'} + Ec2ApiInternal: {protocol: 'https', port: '8788', host: 'CLOUDNAME'} + Ec2ApiPublic: {protocol: 'https', port: '13788', host: 'CLOUDNAME'} + GaneshaInternal: {protocol: 'nfs', port: '2049', host: 'IP_ADDRESS'} + GlanceAdmin: {protocol: 'https', port: '9292', host: 'CLOUDNAME'} + GlanceInternal: {protocol: 'https', port: '9292', host: 'CLOUDNAME'} + GlancePublic: {protocol: 'https', port: '13292', host: 'CLOUDNAME'} + GnocchiAdmin: {protocol: 'https', port: '8041', host: 'CLOUDNAME'} + GnocchiInternal: {protocol: 'https', port: '8041', host: 'CLOUDNAME'} + GnocchiPublic: {protocol: 'https', port: '13041', host: 'CLOUDNAME'} + HeatAdmin: {protocol: 'https', port: '8004', host: 'CLOUDNAME'} + HeatInternal: {protocol: 'https', port: '8004', host: 'CLOUDNAME'} + HeatPublic: {protocol: 'https', port: '13004', host: 'CLOUDNAME'} + HeatCfnAdmin: {protocol: 'https', port: '8000', host: 'CLOUDNAME'} + HeatCfnInternal: {protocol: 'https', port: '8000', host: 'CLOUDNAME'} + HeatCfnPublic: {protocol: 'https', port: '13005', host: 'CLOUDNAME'} + HeatUIConfig: {protocol: 'https', port: '443', host: 'CLOUDNAME'} + HorizonPublic: {protocol: 'https', port: '443', host: 'CLOUDNAME'} + IronicAdmin: {protocol: 'https', port: '6385', host: 'CLOUDNAME'} + IronicInternal: {protocol: 'https', port: '6385', host: 'CLOUDNAME'} + IronicPublic: {protocol: 'https', port: '13385', host: 'CLOUDNAME'} + IronicInspectorAdmin: {protocol: 'http', port: '5050', host: 'CLOUDNAME'} + IronicInspectorInternal: {protocol: 'http', port: '5050', host: 'CLOUDNAME'} + IronicInspectorPublic: {protocol: 'https', port: '13050', host: 'CLOUDNAME'} + IronicInspectorUIConfig: {protocol: 'https', port: '443', host: 'CLOUDNAME'} + IronicUIConfig: {protocol: 'https', port: '443', host: 'CLOUDNAME'} + KeystoneAdmin: {protocol: 'https', port: '35357', host: 'CLOUDNAME'} + KeystoneInternal: {protocol: 'https', port: '5000', host: 'CLOUDNAME'} + KeystonePublic: {protocol: 'https', port: '13000', host: 'CLOUDNAME'} + KeystoneUIConfig: {protocol: 'https', port: '443', host: 'CLOUDNAME'} + ManilaAdmin: {protocol: 'https', port: '8786', host: 'CLOUDNAME'} + ManilaInternal: {protocol: 'https', port: '8786', host: 'CLOUDNAME'} + ManilaPublic: {protocol: 'https', port: '13786', host: 'CLOUDNAME'} + MetricsQdrPublic: {protocol: 'amqp', port: '5666', host: 'CLOUDNAME'} + MistralAdmin: {protocol: 'https', port: '8989', host: 'CLOUDNAME'} + MistralInternal: {protocol: 'https', port: '8989', host: 'CLOUDNAME'} + MistralPublic: {protocol: 'https', port: '13989', host: 'CLOUDNAME'} + MistralUIConfig: {protocol: 'https', port: '443', host: 'CLOUDNAME'} + MysqlInternal: {protocol: 'mysql+pymysql', port: '3306', host: 'CLOUDNAME'} + NeutronAdmin: {protocol: 'https', port: '9696', host: 'CLOUDNAME'} + NeutronInternal: {protocol: 'https', port: '9696', host: 'CLOUDNAME'} + NeutronPublic: {protocol: 'https', port: '13696', host: 'CLOUDNAME'} + NovaAdmin: {protocol: 'https', port: '8774', host: 'CLOUDNAME'} + NovaInternal: {protocol: 'https', port: '8774', host: 'CLOUDNAME'} + NovaPublic: {protocol: 'https', port: '13774', host: 'CLOUDNAME'} + NovajoinAdmin: {protocol: 'https', port: '9090', host: 'CLOUDNAME'} + NovajoinInternal: {protocol: 'https', port: '9090', host: 'CLOUDNAME'} + NovajoinPublic: {protocol: 'https', port: '13090', host: 'CLOUDNAME'} + NovaMetadataInternal: {protocol: 'https', port: '8775', host: 'CLOUDNAME'} + NovaUIConfig: {protocol: 'https', port: '443', host: 'CLOUDNAME'} + PlacementAdmin: {protocol: 'https', port: '8778', host: 'CLOUDNAME'} + PlacementInternal: {protocol: 'https', port: '8778', host: 'CLOUDNAME'} + PlacementPublic: {protocol: 'https', port: '13778', host: 'CLOUDNAME'} + NovaVNCProxyAdmin: {protocol: 'https', port: '6080', host: 'CLOUDNAME'} + NovaVNCProxyInternal: {protocol: 'https', port: '6080', host: 'CLOUDNAME'} + NovaVNCProxyPublic: {protocol: 'https', port: '13080', host: 'CLOUDNAME'} + OctaviaAdmin: {protocol: 'https', port: '9876', host: 'CLOUDNAME'} + OctaviaInternal: {protocol: 'https', port: '9876', host: 'CLOUDNAME'} + OctaviaPublic: {protocol: 'https', port: '13876', host: 'CLOUDNAME'} + PankoAdmin: {protocol: 'https', port: '8977', host: 'CLOUDNAME'} + PankoInternal: {protocol: 'https', port: '8977', host: 'CLOUDNAME'} + PankoPublic: {protocol: 'https', port: '13977', host: 'CLOUDNAME'} + SaharaAdmin: {protocol: 'https', port: '8386', host: 'CLOUDNAME'} + SaharaInternal: {protocol: 'https', port: '8386', host: 'CLOUDNAME'} + SaharaPublic: {protocol: 'https', port: '13386', host: 'CLOUDNAME'} + SwiftAdmin: {protocol: 'https', port: '8080', host: 'CLOUDNAME'} + SwiftInternal: {protocol: 'https', port: '8080', host: 'CLOUDNAME'} + SwiftPublic: {protocol: 'https', port: '13808', host: 'CLOUDNAME'} + SwiftUIConfig: {protocol: 'https', port: '443', host: 'CLOUDNAME'} + ZaqarAdmin: {protocol: 'https', port: '8888', host: 'CLOUDNAME'} + ZaqarInternal: {protocol: 'https', port: '8888', host: 'CLOUDNAME'} + ZaqarPublic: {protocol: 'https', port: '13888', host: 'CLOUDNAME'} + ZaqarWebSocketAdmin: {protocol: 'wss', port: '9000', host: 'CLOUDNAME'} + ZaqarWebSocketInternal: {protocol: 'wss', port: '9000', host: 'CLOUDNAME'} + ZaqarWebSocketPublic: {protocol: 'wss', port: '3000', host: 'CLOUDNAME'} + ZaqarWebSocketUIConfig: {protocol: 'wss', port: '443', host: 'CLOUDNAME'} + # ADDED FOR TRILIO + TrilioDatamoverAdmin: {protocol: 'https', port: '8784', host: 'CLOUDNAME'} + TrilioDatamoverInternal: {protocol: 'https', port: '8784', host: 'CLOUDNAME'} + TrilioDatamoverPublic: {protocol: 'https', port: '13784', host: 'CLOUDNAME'} diff --git a/redhat-director-scripts/rhosp17.0/environments/trilio_nfs_map.yaml b/redhat-director-scripts/rhosp17.0/environments/trilio_nfs_map.yaml new file mode 100644 index 000000000..4e980b4c4 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/environments/trilio_nfs_map.yaml @@ -0,0 +1,4 @@ +# TrilioDatamoverNfsMap represents datamover node (compute node) and it's NFS share mapping. +# NFS share is a backup target of TrilioVault +parameter_defaults: + TrilioDatamoverNfsMap: diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/.gitignore b/redhat-director-scripts/rhosp17.0/puppet/trilio/.gitignore new file mode 100644 index 000000000..b3c5c017f --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/.gitignore @@ -0,0 +1,11 @@ +pkg/ +Gemfile.lock +.bundle/ +.rspec_system/ +.*.sw* +/spec/fixtures/.librarian +/spec/fixtures/.tmp +/spec/fixtures/Puppetfile.lock +/spec/fixtures/modules +/spec/fixtures/manifests +/spec/fixtures/vendor diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/Gemfile b/redhat-director-scripts/rhosp17.0/puppet/trilio/Gemfile new file mode 100644 index 000000000..7bd34cda7 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/Gemfile @@ -0,0 +1,7 @@ +source 'https://rubygems.org' + +puppetversion = ENV.key?('PUPPET_VERSION') ? "= #{ENV['PUPPET_VERSION']}" : ['>= 3.3'] +gem 'puppet', puppetversion +gem 'puppetlabs_spec_helper', '>= 0.1.0' +gem 'puppet-lint', '>= 0.3.2' +gem 'facter', '>= 1.7.0' diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/Puppetfile b/redhat-director-scripts/rhosp17.0/puppet/trilio/Puppetfile new file mode 100644 index 000000000..7e993b4f4 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/Puppetfile @@ -0,0 +1 @@ +mod 'stankevich-python', '1.19.0' diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/README.md b/redhat-director-scripts/rhosp17.0/puppet/trilio/README.md new file mode 100644 index 000000000..70d37f0df --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/README.md @@ -0,0 +1,79 @@ +# trilio + +#### Table of Contents + +1. [Overview](#overview) +2. [Module Description - What the module does and why it is useful](#module-description) +3. [Setup - The basics of getting started with trilio](#setup) + * [What trilio affects](#what-trilio-affects) + * [Setup requirements](#setup-requirements) + * [Beginning with trilio](#beginning-with-trilio) +4. [Usage - Configuration options and additional functionality](#usage) +5. [Reference - An under-the-hood peek at what the module is doing and how](#reference) +5. [Limitations - OS compatibility, etc.](#limitations) +6. [Development - Guide for contributing to the module](#development) + +## Overview + +A one-maybe-two sentence summary of what the module does/what problem it solves. +This is your 30 second elevator pitch for your module. Consider including +OS/Puppet version it works with. + +## Module Description + +If applicable, this section should have a brief description of the technology +the module integrates with and what that integration enables. This section +should answer the questions: "What does this module *do*?" and "Why would I use +it?" + +If your module has a range of functionality (installation, configuration, +management, etc.) this is the time to mention it. + +## Setup + +### What trilio affects + +* A list of files, packages, services, or operations that the module will alter, + impact, or execute on the system it's installed on. +* This is a great place to stick any warnings. +* Can be in list or paragraph form. + +### Setup Requirements **OPTIONAL** + +If your module requires anything extra before setting up (pluginsync enabled, +etc.), mention it here. + +### Beginning with trilio + +The very basic steps needed for a user to get the module up and running. + +If your most recent release breaks compatibility or requires particular steps +for upgrading, you may wish to include an additional section here: Upgrading +(For an example, see http://forge.puppetlabs.com/puppetlabs/firewall). + +## Usage + +Put the classes, types, and resources for customizing, configuring, and doing +the fancy stuff with your module here. + +## Reference + +Here, list the classes, types, providers, facts, etc contained in your module. +This section should include all of the under-the-hood workings of your module so +people know what the module is touching on their system but don't need to mess +with things. (We are working on automating this section!) + +## Limitations + +This is where you list OS compatibility, version compatibility, etc. + +## Development + +Since your module is awesome, other users will want to play with it. Let them +know what the ground rules for contributing are. + +## Release Notes/Contributors/Etc **Optional** + +If you aren't using changelog, put your release notes here (though you should +consider using changelog). You may also add any additional sections you feel are +necessary or important to include here. Please use the `## ` header. diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/Rakefile b/redhat-director-scripts/rhosp17.0/puppet/trilio/Rakefile new file mode 100644 index 000000000..d1e11f798 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/Rakefile @@ -0,0 +1,18 @@ +require 'rubygems' +require 'puppetlabs_spec_helper/rake_tasks' +require 'puppet-lint/tasks/puppet-lint' +PuppetLint.configuration.send('disable_80chars') +PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"] + +desc "Validate manifests, templates, and ruby files" +task :validate do + Dir['manifests/**/*.pp'].each do |manifest| + sh "puppet parser validate --noop #{manifest}" + end + Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file| + sh "ruby -c #{ruby_file}" unless ruby_file =~ /spec\/fixtures/ + end + Dir['templates/**/*.erb'].each do |template| + sh "erb -P -x -T '-' #{template} | ruby -c" + end +end diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_amazons3.pp b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_amazons3.pp new file mode 100644 index 000000000..1e702ffbe --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_amazons3.pp @@ -0,0 +1,19 @@ +class trilio { + + class {'trilio::contego': + nova_conf_file => '/etc/nova/nova.conf', + nova_dist_conf_file => '/usr/share/nova/nova-dist.conf', + backup_target_type => 's3', + tvault_appliance_ip => '192.168.1.26', + redhat_openstack_version => '9', + s3_type => 'amazon_s3', ##Other values: ceph_s3, minio_s3 + s3_accesskey => '', + s3_secretkey => '', + s3_region_name => 'us-east-2', + s3_bucket => '', + s3_endpoint_url => undef, + s3_ssl_enabled => 'True', + s3_signature_version => 's3v4', + } + +} diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_nfs.pp b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_nfs.pp new file mode 100644 index 000000000..ba9dcdd3f --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_nfs.pp @@ -0,0 +1,13 @@ +class trilio { + + class {'trilio::contego': + nova_conf_file => '/etc/nova/nova.conf', + nova_dist_conf_file => '/usr/share/nova/nova-dist.conf', + backup_target_type => 'nfs', + nfs_shares => '192.168.1.33:/mnt/tvault', + nfs_options => 'nolock,soft,timeo=180,intr', + tvault_appliance_ip => '192.168.1.26', + redhat_openstack_version => '9', + } + +} diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_s3.pp b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_s3.pp new file mode 100644 index 000000000..af768a073 --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_s3.pp @@ -0,0 +1,19 @@ +class trilio { + + class {'trilio::contego': + nova_conf_file => '/etc/nova/nova.conf', + nova_dist_conf_file => '/usr/share/nova/nova-dist.conf', + backup_target_type => 's3', + tvault_appliance_ip => '192.168.1.26', + redhat_openstack_version => '9', + s3_type => 'amazon_s3', ##Other values: ceph_s3, minio_s3 + s3_accesskey => '', + s3_secretkey => '', + s3_region_name => '', + s3_bucket => '', + s3_endpoint_url => undef, + s3_ssl_enabled => 'True', + s3_signature_version => 's3v4', + } + +} diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_swift.pp b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_swift.pp new file mode 100644 index 000000000..aa7ca868a --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/init_swift.pp @@ -0,0 +1,20 @@ +class trilio { + + class {'trilio::contego': + nova_conf_file => '/etc/nova/nova.conf', + nova_dist_conf_file => '/usr/share/nova/nova-dist.conf', + backup_target_type => 'swift', + tvault_appliance_ip => '192.168.1.26', + redhat_openstack_version => '9', + swift_auth_version => 'keystone_v2', + swift_auth_url => 'http://192.168.1.21:5000/v2.0', + swift_tenant => 'admin', + swift_username => 'admin', + swift_password => 'password', + swift_domain_id => 'default', + swift_domain_name => 'Default', + swift_region_name => 'RegionOne', + + } + +} diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/site_config.pp b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/site_config.pp new file mode 100644 index 000000000..25df7b35d --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/examples/site_config.pp @@ -0,0 +1,72 @@ +node 'RHEL-newton-controller' { +# class {'trilio::horizon': +# tvault_version => '3.0.32', +# tvault_virtual_ip => '192.168.13.3', +# } + + + +# class {'trilio::api': +# tvault_version => '3.0.32', +# tvault_virtual_ip => '192.168.13.3', +# } + + class {'trilio::config': + tvault_version => '3.0.35', + redhat_openstack_version => '10', + configurator_node_ip => '192.168.15.32', + configurator_username => 'admin', + configurator_password => 'password', + controller_nodes => "192.168.15.32=shyam-node1", + tvault_virtual_ip => '192.168.15.38', + name_server => '8.8.8.8', + domain_search_order => 'triliodata.demo', + ntp_enabled => 'on', + ntp_servers => '0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org', + timezone => 'Etc/UTC', + keystone_admin_url => 'http://192.168.1.68:35357/v3', + keystone_public_url => 'http://192.168.1.68:5000/v3', + admin_username => 'admin', + admin_password => 'password', + admin_tenant_name => 'admin', + region_name => 'RegionOne', + domain_id => 'default', + trustee_role => '_member_', + backup_target_type => 'NFS', + storage_nfs_export => '192.168.1.33:/mnt/tvault', + nfs_options => "nolock,soft,timeo=180,intr", + swift_auth_version => undef, + swift_auth_url => undef, + swift_username => undef, + swift_password => undef, + s3_type => undef, + s3_accesskey => undef, + s3_secretkey => undef, + s3_bucket => undef, + s3_region_name => undef, + s3_endpoint_url => undef, + s3_ssl_enabled => False, + s3_signature_version => 's3v4', + enable_tls => 'off', + cert_file_path => undef, + privatekey_file_path => undef, + import_workloads => 'off', + } + +} + + +node 'RHEL-newton-compute' { + + /*class {'trilio::contego': + tvault_version => '3.0.32', + tvault_virtual_ip => '192.168.13.3', + nfs_shares => '192.168.1.33:/mnt/tvault,192.168.1.34:/mnt/tvault', + }*/ + #$test=file('/tmp/test.txt') + /*class {'trilio::testfile': + test = file('/tmp/test.txt')*/ + # notify { $test: } + + +} diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/files/cpu.shares b/redhat-director-scripts/rhosp17.0/puppet/trilio/files/cpu.shares new file mode 100644 index 000000000..d7b1c440c --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/files/cpu.shares @@ -0,0 +1 @@ +1024 diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/files/log_rotate_conf b/redhat-director-scripts/rhosp17.0/puppet/trilio/files/log_rotate_conf new file mode 100644 index 000000000..66c8366ab --- /dev/null +++ b/redhat-director-scripts/rhosp17.0/puppet/trilio/files/log_rotate_conf @@ -0,0 +1,9 @@ +/var/log/nova/tvault-contego.log { +daily +missingok +notifempty +copytruncate +size=25M +rotate 3 +compress +} diff --git a/redhat-director-scripts/rhosp17.0/puppet/trilio/files/mc b/redhat-director-scripts/rhosp17.0/puppet/trilio/files/mc new file mode 100644 index 0000000000000000000000000000000000000000..983dae80410bc702a67524be39598011876219a7 GIT binary patch literal 8222112 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�T)yB!-n#AQ|4H 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 nz|^mz&&Ky;F2fPAy{| zkIdX(b(r~_ZgW4Ic7i|%`&)qHxF7gSJiKt#q1O%Tl@9xOeJ1dpK^gY2r|!nBzInhL ztm8Q|QaU^_OHhws7ioC>ChI^>OJ!`ct?+)=L|twPe4_IPaD*s)>RK%gmdmE0<4noI z@21&$sLn169otS4H%D;d&QFat%h3vDgouLMsGjFvdybnN%hC(z-Y8WqDi^)yq%9&E z=+n28c8oRK9BI5xedPQ{ChzC(5+-1xm)OOK_?m=W{H>G)sZNGluL)}W$vdt_Pf){c zB2u#0CpmS66>(s(XcKnxhGnqJYgU)$3$rP6%SwiO9iOF^U=(qCD6)~Rd{t7xsXR?$vIJWBo+rvl|nKJ`(x|aV( zwdLu$hTfrHi&L5sGh_j1Y`XS24QbF9{=@DW(WEghJQ=5!=&3@?0o!C`(FG?4vS?Ag zK>0u0OoVR-hm)-CFa1Y|Xh$Dn5~d{FG*-lnG|Gj7*C*_?c7lTl+~)<H^Ko z*Lh)=$$dv0sMeU>*qr}w>!?=nE>*pydnMX`fSEX<7Gt~F%BLUNQ8gfi1~qgtW)AOPD@p42`=>S4y?dK zQ;H1^cen4a{on34?oDwaCD8Y}LC{Y6USwtwoZE%vs?IZ(YxrCvISWIPMw`u`O$`cl z-lUU+pON0C)iUqIKJ1Y(%DOYM+TSB4LRGRmx8%{gs+?t2ahOHuM3LI8-WK?OXQiSx zz_(*0hXvJKqpSt~$sCdZ^YeaTeA5N|O zAD~KMJ8_f^Qb`*iD)4{Bp@nuD?J(O+JU*?u^waL=G57Nq_j7+cfWSv*C(w7`8>wU_ z#~^w6Qu1hz9KW%DPPy~ zycrQO$@K+0XuUF)FTdtol)btx5nw!eKa$>Skq<5bhn_j=(-l!)L5I~l|8fp47zTvB zn^h}dX38&1-|xjWE~JN$-9!qw3D7c8PsZSeppt9^mFmT;N#rT>KQ<9+0=siFzFz^K zf9?3ZBY&%5CLt#usXo*O1lUGX+nbGqZ1#m>f&6sbo>>d{|F#V>D$8EW1@l8m`*^bU zRCAl7qP|dNjzi zU=l~bYoI9+dqp@1lB&2qo_T1Fw`qZl)m$sf zwX-a0=!ON}X|IP@7)tHNVWZ}?0BiGipbjD5mB!3el5W}_9OUi*R`||rmmS;I_HHt@ z^~qzP$_*W-2kAQug27q#39YLog0QG3MiqI3TBL&?I)ug-ph)L>xs@Z`Fpe(=K|R=J z4~15~kMYpD!7!$>m{#v|N1Zp0-Q+z9dp^$Yx${=~^;;^uJ>bF?Rz2xQx0}KZBx59Q zB6Ci;q*IAt)+_wiS6TzKM6Rnbk`~Xkcl;AP_rCaZtpJXgr=R#@bwS3`@>P>rK=fL~ zdEJz**7CVf0M&Q_oxf!aJfGUozC&J%+>FO--m;KI`pO4<3Wga!3i1qgct50!? z|Jy%Uwk;22WivzcvLKr=ls~~`yX5SwY@(R|V34iAY8&CQ{UbXYW(54-$mY*=AibXL zgtf0yzYOf>N5feQjI%o7Puty{=cjN;eTA)Si2lN&452%b%FF0A>-Eb&?GkHJ z(7(MLJ8`Dt0V@EmAfOIYb67OYh($NW=2I03v4k(ILr=VDShu>Pe;k~6aAP)LY3|cM$pi;VB7FSMwXysERf!ad3dw+> zeiNSJ{V@YyMCwO^s%F zRV8ND^R=pcA;yu$jj0n+lGtZF@uJH5%{i>B`E(ecxS7f%?`7Vg?;>-NwyT+UkBZDW zb)2_ytx4ckZ@^Y0us2Ae=a(8G@%OL-BdJ!Iq|&`%fOw_X{1rjxKFf_iH&6|G8TJnX z__nh?EqRHv#!I)rVMq<7X{dUSrm6u831xiZ817-^?wwOFVVX1u)9qbG5TS5tDAJU!AyFqOPiZ#pJi6iTXQfQ$#57;&QfBEHFevK^1-p49p^bgCrNS zhqdjCV@1c&uDx390v2CmJ8em3W!lmlpK0si|I*gXPHkmcRk)z^9YdCKKx|)|dNT=t zv!^e?3py5>DsxO9d*2#~IZMwm`+hPFC!z3e{OIakd3-TXBf87UvkriwiN5F_D{6ak zEp<_}e9Pp#Dz@sN7nZyyIrG zV`CuEEoCS&Rh;knjJBKoaP^=C)yd;qy%>S_6d3Gjiqf&}(d5ZcbbTatHy;SiTZ9im zym@6h^2|q}$>pac`|sS)ttxS!)tuNX8s96r_ypNpp^N(%Tgdckk7TFiZA#xCZCwJl-zE2_GAKP*!3c-i_5(8Qf)RH9YcTdu7#96mtco7UZ4%^?iDJAQ z4a(9_v~z(28l!yq`pGF=9}1$}FWg+Ya&2YgnGZvgkL8+!U8<7<_Y&BT3+(DdpX$WG zfz|P!hpOWj=T#*POEQv!m&xW_?8+);0q1iu2ir${+%^=Wjn`G+lCXw>g*@<#*YdjRB zyOn=Mr135&6q%EM*vZIo3`h06A{0x8tl*F>*Uc@U+(ZV+hRNq=7HFqO=Ip`oaU0oo z+PDPf#*JC)TN)jYFIYDrb*!CvaX~*2$m|p>3!+mnxmaeF)8y-)zH@on4b6<6no$!? zjp(~17m&0z*4R-|Bn7&c|I+oQ3e4{^1U5*upaksiEG%Uzn&+=}D#xF1&(a-iA<#^M z|Glg3*0Zuk)IiYTA2!1V8+G}!7du#hKnfMG09D}sM6ZZyfgS`+K0@&ys09NS$ z>vMG$V3^NBerZsk)G%@K&DP<9zhz~E|3iLGkZq!6+mCGiv8*@zK@O0A{k(IR#@1Vx zlHtd%&Pp1jx<*(MY5@|X-98?C3=LM2I%8)7Kx%^Y2C>Ki=I@`$!(@GefK7(| zud{G&TX@CS3Wfg6gHfcGGZfjS5JVV->-N)QiE#&B{1L`W?4xzF_h2-2*M@NUf=QpF zg_to3T?NsjkPN3r<{Ujdd16j9zEqbSKT|-@xJxv)rDVh&O(O=hRBmdi9I$!#?A&NF z%1N}vnwTr&>!QiSQ3}?1&0ltlYEmBbHH-EtHuK7tPkI!o(EhI-zJ0sG_fn)2e8>|= z3J>CFZJs-1&5(`h{k_DM+)&j0XvBL}@&w$Wh82)ZDT9tcR zvKP~s>Y7Yl)m;5tf<96eZ?2Ai5?%SRGnZ|w9`H?d&(FbrPt_aSTrp+!2np>CK!ggz z&DiB&nx{3<_`iq8S8?a=kQL)9H?70BlobSK#3i8J`36Q;zVB+45e_Y-dcccARPLSjo5eHBeRmEyZ8|0tEOBdGa0L>r1!nI=`B+WJO`Aw#~N>dTV5?hwsiM; zu8Ix-PwCvM^3_w19zOeLUh??v#7t>T@2q2ku_leHD(YN6WJNT2Za0ox*6kdblM{RY z<(>;>6HUH-LTMqUWfh)Wt7tv_cU9HwQ`HsUd#$g{2anXY==*dj*9S!xpgk_k1vv zH~HkqoNiGJr(DjEL49jp?rZDU0k`FmLLos#_XH)#ULF5D{eD$^W7P1J`WaR0OiiQKP>wxvqs^Zpw_dG?%=uaD z(|-={xv@gTrRTBlx=k&ZX9j`zrV&Fnrj}}(quK9PmArJD#ozGao2o!amDHg4*Qo}j ziznZq_9(&3<9;;$A5A_RL2gxYd@DoXTQApfFHokAq6AQ;2Jp*JG2&v6ZccrTr&o3I z3JCaRZguh+GBw*^Z~iQ|de9a|`l-p86$4s&uF5XdUR-O8pJwR@1E|3taHZ3Ta4MeiLY78^0+`W={DaY&WQh1r*2HP2 z%FdKhf;4T@&X`~{^$z2^KP$$cNv`PpcviaytKCPY+MN53vG(&f_tX6+%)syA^xQtx z*;A+a;xrRg9ZeiT{OV23QX?Xby_F@i1DM%kV_n{`UYM6uyj%jXO{IY-l*@RC50w|3 z=fziJ9%8!C8Z^F1k}?`!rD>Vv^2`UQXdKIzGD$5W=FG(ZP6zxCo#C~<1SavMVdeam zH{+#xo@b9aybQ)8m^+N~k~iZ!eVnulgR*qeTd7q7ipNN7F;B|NIa)a|@`clRRNKF- z-fLZ$=9tu?=!_*Q%u%fVWxzz03(*>)Gd5?c{H}D;s?da^&1MyG*b#}L*NeS(4xIIG-YJ*;!a;5 zudmLvLQ{(0EVPrSUU^_K-R#O*zX}xR$Y+U>(4>Vc>yCh=w$EqAE3H*9s!)8hUdQnwmPT!sDw?0s}8x@QdVB^Ij6)dtn`6vA~`{cdFM(R7+ z2zSi6_H(5BxzGKK=cGvLBdrc>eV*sV2M7Cyf%ac2K~W?tN&%Y1kfl)~A);zDZ`Mj? z(kKaux?aO)cVoCIY+9PBq!~RQMPZ2)1yZV#r?+w~XLWoDqM|!Tmq=S`O2py?uwLtl zvwQWi(y;~G(tk#!i&S$HXzYV)F|Nwi)gy8pOcsi6T5v5DMjCGuO0@B#+ZndlB>QU0 z!qW&Ac8hI5CA*_dvQ7S$Ohue_NbkzZL~uJm@f}<`^$XE}MKWEEvCC;CTfAiV8EqwV zRdOFp+8w&2dcHT6tM#QQmQJdAJN-}1z-ZX%ouZORi_xAZUqWvVXwyl)s2=cnb%$(= zP0d=#Oc^XBa%Hg7pE+vwR&~!M)yZBv0~QlJbH5j774&B6IS7wFonG69TwKjK|G6UF zqbfP7M^!vUP5V^GIam78wbA%1RkVY}%}%hP?7v&xbG;+d$2}&!It0z3t>F3&1z*iB zh-&s-byrBz^wK8R2m-56^6)jbzhoA&x$PVJ&Jh*}MzAk|Bb z^{IC)#A`xzUsjDK7Ter?@|yI6)r}jcoK(fNeP(@ZqZ0ss5N&lX2cQ`~(XNZ$Y39^q z_aV00V$HPPsP|fGo3y}qOZqeFN}WY#PD>8#$+^4osh0!17HBV9C;r`58K~b}-P5m1 z_F{qd0oY-IX6{%z$QO+_&okV_Uzbw4o+)g}GoUu)t^Clz@YgnlW_KSLZGBY(OXn$DUt}2zwWf-< zBu5w~Hoy+1ik_8*9I6mA4p^pjX;zJPz|*zQXOPuSw-edbVw(h|KQ$hz(PLH_YY~v@ zaW2-}K6F;9mfLR9)o~|A=JfAlyp@bcgMD($>s&sEjQ{_6Ir$*MjKA@#dk z`grSi?8Auh1yy9I>iQ0|cN9W~2>2I+P%9(r16WPCnD20r3oZoXl%H)M7iL%pS^%gI z!EQ7MHi21|rPhk-c#W)M-GQOO!dxLr|SjPx9ow(>|@ee+W&RZUj~@4%)VoR44EyI_A}v_85^*I;e?*R|ajop7PB0}`7*WQ!#KlX)a0 zZ|FUeHJ!8;|4acwm)Nv!svQ-X>ro;1335_nkRi{s7OGu_E}^=K)_^KRA#|pUArsQ& z{wqr%G-s!CFAMa$AycxF%mbk!lhpqgS*oAyFYRwh{;8*%x-$#BZr`7!D?hP;$Br)R z1#!T1oM=({?BXb5sw9i^&lW;f*S_N@*Ze-nC|)&J$Y{uQ$befwRG!b#W5Wo1SNz6V zQo@biPsQRt*al^5o)A5dn!ioI_e z)53h7zwiwwao~TuYm+RReQ>P63$Q|YMv4=L+CCZWJb0)(uH;`2LmLLtfAsgRl^p{_ zq;K#)yexQjcRh8$@L4I9fiYOObjI-3bS6z09t_o$6V7yz4RZXq{=#l~lQm=0IMEVH zWGfKyYX|)Z%_TY7X#N`b`D)N~*4AuKH$@ujMXNXmJDz#OwdlC6S1?LUZd3^kCLmnm zSAWT5?b?mQI&|Y=D%F{8(j5~rNKQg=5cj|W4x#?SC) zk?$}BiTLD@BN8^X@h#u|4G(w0+VsOg%K|^SAyZbE-gb!IoSJ;ewx8pl5jF{Cknv3M8OcqKy7_B zEH|wZ5*fNt#j0AueEs0LZXDwJ40bglE6dU|{9%R#&~@`sS#tt9!_grCbL+PdI}<+gVrdl-#FNL~cm6$@f0!HU^v0&F4ads;~3f7v`OG|Q{OR#stb z=O%LNcYxyl+;lHSE!UX1UWLN*DP+ByRaqmUGmaV5g2*^Fx*nozuR3hyaM3`c} zi{{0bWzTr;(jF7-!N=Q-N1MeLj8SCMUZ)s&<|&!pfKqMN$dKHQ}`ijfEh|7pMxD(1et1BbpkLI92DetudosZ6qp-gmJ%NC1YDk zCuQ@zczYlPqeFo|oMYZ?WXYEN+mTx1Pc~f5;9^@)_Dlqn{U?L6PWWmN3?0rFpw9qA ze$@dwOdyz(-EGKJ=+I@<5P&{+|Nfe7g0mAKx-Ysem;e~<5{3MKdqiwPZ;NeSTl-{e z^Eb7Bhb0La0P~bGW0ft`tMQV1_4^9S^I6%ntFGG{Z}OG|UgTl6{cWUBD9qIua|8BR z>7HzrUIcCWVvHJ(^eDm}H35gP{(g^D+YFf{DublesW2>?ebu{(s^UrkS^=O~$M}ZH z%{JcYA)TTTN%wz%QjN?44t4&IBMk%bWIYA&WU}&QEJX_Vy@)Lf9{ch*p5G#VC-B?f zuYEHcBnvjInrK-)%hcq*0^|yVtrTD{vwP?KH}gT>3L|kR+ncWi*uEmW z$TuI1GlRgd{ssazDPMpT2`Qc7L_y4_SFtU-)NU_IrN7sBGql#u$r7JOiv^Cycgmkm zDlnid;m@H1eRg!U%>RVATa5F)zsVZs#mdx6rB2E!^^%>KR9CMwP_5^N4~H1nE&uTT z&JGO1WZ`ThUnhR2;!gbTaLG0y8o@rSo^6H19`61jj?QSey~2*8E98NazY|K5XYSTY z2nEXl&3E&XPlQ4xDEcUdc47w~@Ly{KlVcw(b;n^a=X}7{{TMPF!qIvCMXIH7Wu)P^Vs6m{!5H#XWvmfBDr^X^$`d6-rV#`HZ}L=>s>C03tCVu$<>TK<5% z6jE;W&TcBpDpJwj#KaCwq>cdpLsq1AHZm+g<#-p4gNVD`kwrw-cOm~xXXmfrBHq+* zGLpv)><;vpGN$X?iGnrTg%AF~Q9y?9oR)wdoV7q2waq}<8%75h)MC6X+}NhTT%=EW zmEXioKo*?mZnRIXt$1KOGsWrrn|5OsyUJ6Qz1M zZ~~Q5eVMAS$W)Ka()iQN5;~Os^;%#iMLiYylUBO=%Md$57y7vZ{(;W(o1!{(ZNnqJ zHUCJ12bV-y&GINW=XQ%mOy!C??YYZ~~&3??Ji2AXJ`tz(uE<d;cI)fZ;x*8ZFWjQfEcU2mwE&WU_*pv z+uSxn?Nns7lMEk{9euhCp!|Jsb2a^|&!bsG+RQ55Ey+I^HH;yD#gSRk9!VMU&qNb$ z!;HU^-U#=6U{*CI*$xh}0Ub)udstmG3mle}Z70=c<-vrFO@HX6maTBVtZdzsP38SP z9Z31v(Ok9j?T@MndNcg*Sp}^(M_Q79-%hZ`S{6>3(cDF!96&paH$;PsPK@c2M7U?M z3mv&um`;Y*@@l=g;x17m{Et%9LS}_tsQR%j7e^XR)lB4HZ{JxI{1xCbfw6^&NZDj*7(QMf;^8zOSTcWJqN56Rqfy)TKrg#1U;1o+ z9*{uVQ)}}JN2zX0kaQmFlM=%hxAmMD4s?RWk!J3E+1Nz9KO5+Z|UQN4G-k-ohJs! z@a4>5Zk4jUWKp>9Ue|D~2=R~m2gGPFVzgNbRoowWFw-jD3#!3CftM;A4poVNBrh%u z)=>XIp51x+iepWIF1H^l-~4PA9~FtkzBIG5e|C3@EHFOmAYZ2FenE)XHr*t{&jF|x zhxbpo!^~&r?kW1!Rzu2B?(x_~;SoHA7KM+~4-~KYi72kgBbh(V%40x%@J`1g(7+^P zW@3U7R`UOA{(@Y9`tkb(r~JGleAw@35<#&C_MBvX0WY>+fvK){x*0H| zTCyvDv!YvQ?tIrLX87CwNi?0l-8iiSJ|Z)v-w>*}Ui1eoS87OI=`Ni%VJf+mEWCq; zrSzEXLzEpP;8XEngbtW)|HIV5vKz!?VLP|53CQe+AIps z?psv(p!L;oz%0_A{(fCfcQW5VW<#Qn}-s9 zpaiTpYy8M(p}8dUFjNnz7nrHJllxDDG*;i^>27=4#M8|@rT!qLlU3YAu5dG^(BVWBVViHZK{-6UWi*5`jZ&W6n8q&5p;R@t&|lL!i*QG zDlj!68{{RDEIbjy*noQFR#g$+Hb4^HqC8ZRDgR5oWB<2o2&WToQ#J`&GEtN2WJX})>(N+P=M+Won+1c~2dCSeQB>%mkCSZ$Nv0AQlCdhVq zfgjcV?!KCr**`^Sybls}U(G80Cf#o$yb_#Zt#AC9Bn#eD7y%_9A`QQxln#Ut1FwDy zH249{0-Thg2t^wHqnEY-77YW}S>5z}g4&|zSm~%^i0xwB;F1}S4ZGQgOhgJ!^UHtk zbSjI?Ij7&oh4tKeW6kt2uj|-Qd%11kW&?_>zhwj~YwV+a>c879()dVNaNK5RoQd>$ z=(tS_L-moyH|PwnW#i;d*ND3fg(mf_*tm!zy(dz|3!dR%*zOHIB6HW66W+H58S{Po z-huT>36x@TC`BpGzIlFsvCmlNDQ^kUe%srjWi>)~uY;WVu$gJ-r zW(IBbl5_2*mrd__{D+&U*SzgGZ@?xmXUmX{94;)bN_5ASV-do~D?B+lEkZourO{2x zs|LIl&1J{rjcFXD;cS&Zdka&Yg6g@D%le%Mg!)|~NR#1DU&YQ2IUcsxfQY=atR}g^ z;g5F}6LrSp8rOs4dYe_K$v!p=tk*B^RwtZrbMW4xUn;T6B`=l?N zKa{_z4;groIg|UvKHaCHe%tP~m-4r79XHobt}rj$Cp26$OorgI0ft<`WpuY2oH?kJ z*&J(ZhD97{y@Vr5>ep6*3j&k62ZA72Qk-+)mpUH5O@OId#8!E`Zy-#I1E=*zG4spc ziZsfV5o5Z(&sP634eS~~=sHhl&&{f{_V1Z`Qu|Q;1?%(E8p_G=ey=zZ+^O2Ymakv1 zd4KS3--W$Bw|2!|roSo0zShe+E0sTPH{_1SjqRHz^N($q8cL%>#G4HKRW=q6G0q)@ zjOB>Mf~g$$9Canj&q+)ox74d1KKA0-`pI{Yaf@{?_->H#y@>Dk2l+9P-D316?Ay(q zY5m{c{keymOGu zRmo=n%&Sz9>6xUF*JULguA~bxNx5UxQc%k5VJEpHzWMjwv;(Yew(Bu7tXkR`{L4pX zgKzE>0|M|X1U|&i5c)082+fU~BeP&M=i3)7$vvEq>+3rqv9-23*bLpow$Nf0$z>YVG$@I{yjj`~etdQMBbT`2 zKKhfG?Ah)~{8T?}290){TKrq|uI<vy1 zWJzKqMT-Wlj_X%nX-WS}c4W0+`g~1+YB%9WH0;)u5{kf1TKZAyhX*B|CD1AyKjhJ$ zkiR)_3!p1D&MHe5SC(29JlQY8ob8`=npv2Bnr#uYK{Xvikw4F+j(IR^T$vjC)d)j* z%{Q>~Z<%<(dMA88BZPLa0W1!0d2pJUY84^5aik(7_YQwMOpBKAV?Ruh@;dEu)Fnkp zZc9?9+OUfR6*=DO~zTEpxEL zdn|WhE-@7rh3luw>Y;hqf76)`7`s71a)kW#Z0RiuKXbS(pxdB2NKj2_gQ^q14DLEU zli`PNfsPX1kwz_W8}qn#lV}lQ=EkMd!x#%&TLGjZo_`rh-i6C?w%FZUzSf(!%bO2Q zJZ9%NAM`eTi0gS6176j4Q((A)aKlm8i1Da&EmH*DIl&rX6@Btd^D?38X?+-9gJ~*z zBqqa84h_JmZxA?Jd+1WBoVxSrO2(5g|8~nWd!9qpEZz|0@$fbJoDBausDZ~%C%Ab9 zJp_raz($?yG6yjWq-yCQnSU0P^B)2cwp;AKy$*EFbz@IV+6kY(l5W{yzt~*qSQSUO z^`LiU0sogUr%W%`_$xkSE8|b0r_67!ia~Hcm&v0G8E5Ppu3aMlPC9})WIqho=hnL8-!P1b&6nA zc=dw9Z|s?{>_CPoL+8{jsC!GK;6wUAxb`vhrJ%UV^<#Bp<}0uwqUM7soQPtf&vACn zt!GM+eOV%$YwZyi{y^fw3lF`cXno;%`$_H;&gX}t4Fz7}@Kp^vMS9Ql(6KmOMUbFr zII+QM@6kjeyrrjB@YkAYvBK@S!*?TrrlNu>%_Nuq`OoMxOpXvJEI3jOXu+w94K>RZ@ zYMSAEnU8+}yVtTGn@? zvV@C&FcUZ(x}#@SHj`4Xlg&C*;5zg=YXd)`KU>kcQui}LNG^USYHYePGHU=|j8~vp z>Lg1Zv&`}Bvw*07%nz$mN1CNahu)bY(tK$j4K+(sDU3g=_Z8|*^&zW&$`_Jve0Ebt zBK$_K$U8ke?|wU~mA~ha#>BtbhaUoW%=!Z@G4yuP=f*YDYJ;hdO9cw@cR$%UcuB0u z?i#QO@w_F1vRUdyo_A2LcZ|;vrF#8n6Qgm(wFk`?PJ)V<)7*^%kpj4!(vjY$z*pxj z;Nb-McPvl;M_OLyo`H9Ra*H$vnxv-6Y5NCXDOHgFndiWA=;B_zBd!U#*u1RB4N<<= zb3uCv=F%k&9i8Pp3mHoR@72{wce>oMVYSqLKC#i`sG{KCP ziN|{oeyX%}<9K13&7RD?5Z;A_TXKLyK^xCr15yrLMLi}?es1;DtftPw-oU}{MFMRM zLZ{$}(@2dJd`ISYheryU_`HB$;2%xUu!7flf1hmOp;pQ07a@p<#ypV-zZf>N-;IBi zv>mRG^gvzG3;sX65W|PR#M{v)QzyfZ9R`?8XsDWn*W0tM{z??jv}av{EL>hjosqLY zR!3;R_eIh%ZCkm-KNyXV@mKMStnp`SxifL9l$g(1e+dH@~T7Bw08Q(d{>U*}JbHh)OQShNzlkE-G zvot%mOSWXDKCurOldisrT{2$eGKOCtAx439C{QETK@YL(Je+z;6<0ghCwHl0K&CB` ziHrkWTc>r&xEbM0&EXPjOIbIbXz+g&>DEB-xh_0ROYCcZYBTp$=TreEr`i#u%S*rSy_NlmLMe5+LshMk5kkV;v z>q6j7Wv29P2MGVR&k)<^x48ia(yHV7T!>{huNZ1l;5?hWL))fH`-|L2f3rg5$#{Mc zUvzFmxf}Mjm--fZZ120ObVVM=X*fN>0%S`#l3Y(B`dfPxw?y#+KTHoL{!yaL&kW>m z{24tHA*T7$-ouA1s*GzV`=RzF%xu(*rh>5;$B+lt&M)z^1a-Cj*@UQIyRQ-cHOV7pr zN+{nUD;hB8S6Zfwl_7C=lXY(mp%{spRKBvVJBJ(JTolvi9B=Unb~B0XsHU6QXb-&n z+KTV+!JmV<)-CEg>9;kAD)d{}eFCNfHdBj;=lK0}?T9p(?}CPW1AU!cBjrnL{7oRo zOU|CiyUwZDgC)GKghaGJFO5z1GW$xE3clUO25_X|_m+@fdl0BoMowJg$ovJbiNZ90 znbKq9`DRnF3LxRALVlLXQA3HuC%<+y>l+8@yF1M*Z*0EGIS!ROOoAbaV;h%vi|fY% zgZ>e7(K>dG#ZtvZ2gWnxX=I^r4R8m1+YYF8Al6vn^jl4wu7(Qwo+z_&ird;XntKw&m705Mj0k&yBf1?XjxiT_S zo-xuKUqT6aK0PIrC{DBX)$mZBZGxe{7+I7`9F2FH_o=V zp9`v`wSDM&_y<`Bz-(~bD3O1rT86G@HS1cr(xt?7aQ)D$xt6=w>=uJoqSar!vnrX# z=k)wwB^`hbuNVUpJ()HP}`TI zHNc1(7JoIxttC9RcrMyeYNz0pW26sj93+Zw8zjsfQND?)n?LRAE&nnbdvAK1K6Oj- z)e1*C>k<`;Z%v)gFIwqpM?M+%^pADY^3+c)i%$HqPFl;CfIndd=4UyX1;Wm9Ci4Ha zQIwo^sIo;4G?u9!W?XKHbN^%XeBMe}X4#ayNWrqyRaC(eCjGVkd0_>eyI z2Fjw><}WMNGd58O@t8fE$3XFF^CH4m!XJN>X-^Z*$x>oudGT*TRS`Cw68mI@Wh?(# zRyJFbjt{bx7*Vcw*?yJn>$i()s|>Q4S{CD7OONPs}P{wtzv-aDMB%NQ-wm zYe4Nn%IxQr8jKz6Nn{ADUN+Sv^KX^2lB^rQ$`P?Z#0;4>S%;VYDp zi4hflhBK6f&*Kxbbv*y)N=xRSs2}RWh2!~Phj536vToAwGn;u#GkL7iY*R$*6B$!W ziAe%q4CenLzdaWO#aNqJTX_AY#kwlL)UN1>gp=Gt#g|H6_FIGMNvU#Jx1T zw1#85;T^RWB|8!Rdt3Ip-TkTmL;eJlXKZt8-KuohUu1b^x98y!?5#H-UYaa!Z^mrc zez7}RBSz6=Q_J6oP%bArD`KNwuB&eH1`O;W(H;x-WglAVG z{E3;YI?!STpNtkumBzjI`aufuIK(yJ%#Ve4coxFrN(V_S0~H?7sw zmbh!PXeZ~d)x2k4*j>k+781`kM=gt(r$QS;>)mWB3!n?DU|QQ zQM$6cHsaqtA&bH<(@SsPfRToVqm5`t%LtWoQe)`*B#QY|c$GC!l@rw^J)G{#qmq%K2PjiG{_7X3s+ATWDc=P|- zAGCyPfFd5=nFiwFJpMW#s6_s7zLzh#W~aahDiQvTj%mch{RPV6a1KBE=b(y*r{gH) z-`O|NaA46q@-~?_m3w}hXS%hrp14SSz{AGhtfbSvqFPV`H$a%h|$naac7$y#+cB2ny-*w&e(5#$9cqe|f z>T7%w+yum11eb`qx3+(JoKK6x|Ji4n8L$_J*91@gLu`-x>wg)PrQ%1wQpLiu5ZXhK za3u3@fC-NAAhz$)?s#$&#c#RK!R0?Fe2My*8?LeLhDYfqsOeyyQyUm_;PWRylez>= zK;imsYqFzL!U81XeB(h3$-X9&{u;l$y$u_OMjR zNqSC(qx8&hHv#r<$F#r@m)GrVNV4cFiTovBYU;1;!4aA-v~HKg(smhK7SIGLA$iLtN?O`m7+^6D6^0CJL z*0$V=68T}^#P5WhsFs%Fa&kD}era`f1USOCM1H?^fVVM0wgG&anokr~WCN@jlnmYK zMkMmre4&mSz&c?Ja6icE3&8ux52nI`Ckf`q-p_*h9?QznBmiHR0laGO&VbjF%>jNH zPydI>poG;2mp%XS4X8VvlP_7TgD&fvOC?V_tgj*V*y4cLr&X~_8Q$`FFc^B1nR%^0 zkmi5PU#8B+A0z-0;Ss#T2a(2IEzb*<=Q)=r_BDB|Cz4<v)kFqJduki?p6b4`=HuxVbN75_Ak*z4wBktLLuF#Z&n<0Lw8a_rubX zJpRC+seHImJrIWeRBaflW_qyq;mAY?fE;oX_99xaE3Vq)=yeAmM|JmWV%upU|KsoB zuB(iK;j&Dnr>WAc-lui}9fp8ZjzmucGNi6XqO`MQyMBsC_=nVVh$^WCaz@(6MA+lkr1y*1IIa2F;XH<_r1ziOKdpz0 zAnIjyq$0c33cZ+OFl$?r$( zH+dmi`r`U0NWi23)9h_P%zKy@G0pEV-GY~IM`=kgTVDZX&xbVY;CrgdnQlD22uoh_ z2KP~VN8jb-N`?;(GT)z_`C)r$7-%2GOrH@;S@5{tWNtKR2a!CUMG!VZNvrVB)Dg-# z;defDdd-KJt+fv$#0F>uT1;+LurH##@lj=1YzVZ3@P)pqU5#lHVBCg*EfjUUyZK9a zZ6${@-FRa&!v7Y>W_!C3OBy1*a1X`-J8a{%GsY4=xA?mvjf~=N?B|G2^mA!bXxZII zD_CVR|0#C)Wa?oO#{tC7U99(J;V~5cE0zWp+|Q~+@`!saU;jlU+@geJ@%5%=^u;z8 zo~p#$@Xgjn_)@)H7(PpHiNXu@b5P-#`q8~H5W0eDUxaUg?rHb)f_@T5oMd^A80zv8 zbVAOMIV-)Kg=AgUj~e2|3-yyY;zg8QZ_s*70Y`pDS)$5$xkt>E2JAd=GG>ZbW#E$- z{C~u~3wTw<_5Ym!M}rVgRHE^M94yu#T7yC*Dm6jS9Sj=pL2ZqSN?TNv1W_&~CR~o& zqiEH7Yqe@yZPj{3MXLlT;bIl=g5VAB`*>_ctz5K{_w!w|&&f_u-{1fD{-5XN(VV^a zteIJ}X3d&4Yu2oJUrX(_Sj%=!F~o*)2_>OJqd6~98hVS>K);`LE&?ESzrOmhtFm8j zh4(4pBHs0n3}4tSlc`Uh{RU)J-8@{?354OA+xSB0-(>eTQxAQgk| zg91VjEzmE5=sP-MApRY6SMUhd4UsY-@?#ki`BQfcD6)3Tjn0&6b7&U$!o`mA3H6#0 z$FhN#s1qDgs-}b~B7G;aoido#&NUFZNn>fCjjFtst)1@EPgLhl!DspfYb5B^%4pi6 zJ0gWgP4LQoM#txZ2pvI``^F(~@YAs58nvP}{f#EeyIqb0N+R|gvpX$QjvmSZ$!k;y z|3Z@2@+#7g7ZE_OLX8y+y>tn4rCtTY>!o__9y>SuTIarw3tzJZOjM4Eq@k4GPd#4h z2L}lxt#gdN3uk160Yf6}orHQvGoY7L@5mJwsxdBD_XGnL{ouH`>Bm3RJ5Mqef-gdl zM%6&TvgXZfxy`ofm?`z^U$fXqL9KPB!j}fam5Cr$A9wARaVqjoQe8X%RzvlxrQo($ z-)!fyZTP5bwgZ)Id=wK=B)vq6&AG9Qch*Q?;xuduZ?RV2|1aB0iyx^+?9o}~dI*HsFaDd_b z?uU_b4d)d=2HVkoX4o}FrvFX|CbP&5@)xm5eA9_T-3e5w$B+Gycab zs!;uGTD+8DuqfEU75>-lB5g3*4;E$Sdx~o6VL!xh&7!I)w|D6h*Opq47Y0r#Uc6QmhUdZ8;=^WqRYn86GeavmLZfy9- zO_(~Fm~$A7Ri3PATgu&&4;uXwaj|5EO}=peV`A z(kh~ibu57**0s^9q2#tjLu9=$a=>P{SP0OJSu7Z*B_9~js5Y`#&~FDggC6O60*kDx zHj{u;C>vA%UXKh+&6iM;32`Jd8|a;0s;<3CUwIq-e3i8#xCF0ONi>R)mTpH0Yykiq zW!-IM*#baieG0cm6jl+eu0!>Y*g9njM)41w7Lp@41s(gS&`~b9@Ju7v+b24WNF=J0 z)C8#b_8~%3ngu#aNfAh}0hzEPzokMcsNIS2bug! z%Gzh;*<7GA3iYaPNA|zpl%*rya*imZ=`EPVdc^ZJPlmzUlTF&!oUeXH>wTrSt;%<4 zU(P+XJaa>-#TOKVRM5hc@6aklC*2@qjf!NZ(HxpGr5qpo8y0uB^*=Rh{eLky1zT|g zbCu$TW2YR#$~jD-O;xQF3WR*B*k|x)h2QNd-u2KA{^Um%+$1+8cyr^_qF8nrFVldSU`h3zD65wvx_75<~5 zD>qXl=j)+)Yd%im^M12{f)v0p>pu~UW%=@boZ|W)Lt>U)9L~+M!Cn&5@)ZE9o3d3RVzdIK44v*6SF#wtx4gq)sP$o*(<= zTeg0>ZZv6rY|vU6N9gjK1q%I2F-Y&-6XVC{8bNKbU3u2OV5gDLx5t2FY;ytQ0KXgk zXgGWY_wv3IfGChVyPsX$PapjVXeB^PVsDa%O6Tz-i_B~t1r6rlc^qMI1fV}>B{jC> zBc)PJ^4t-J6tVXF9U0|h11fwA`^m67=@20Sly&S^oDlJ2zNFNG_;tM26+-)<{wio@|8||H`VFmSbtLVnes^@^r%PbFeeNm;v zt`x$_Sb)PgZ*GX%7)x7 z2!voBRa=1R91ZDw{HG7*vkn)KYY@3?PTrdb{qtjaJVEn7_b;Z825d>JH=pv;gLn>h zUP|T%+-P4kB;sOIrlKF;NyCV8KmSQ2=^!QDnoYU|8IeOs6LK&kn>69fNUmW@I@gkd z7oLaxx9>0^cH#dPk-iK6m%nCQF>{R4QnAC%5|L@vAGl+(IX3#@X?fk+Vk7y{KjJI! zv?|bvp;V7XEI+^E-5=SS5L15!1ViMp5SY?F{Y6;XmnXR?fS6`%4qQmms%+9QDw4Sc z>&i{!BxznY>F?yyo@8IRFPK5Mo^Xm7{_*Ix*ma@H#tb`g^j;h759E&F%y$zPzx zc}z(imR3q!{2%FXv}(l(raS5#@I6SnKburzC}xe*OJaADAV!-T0@zwxL_m)q97EG^ zf}K210m&01{bVi$uf@aOeXAhSPXoysJYz}00Pe*xcajcMZx{W|MMO! ztWI0nYeZA_XKjS`=Z6u>PSReh&Tng8BuwdzX01-`(X`cR>nY)*SHcp04(aKzeR{aw zrLd_wq>_w1z?UVl3-w)ebRJv5MYxb#;Po8Vo%n0=&%l-0_5iyM#4r4tIBQu0Hzb=J zinYBXL`iMd%^9iTPue?a!4n@cI6nw>r2NbSxx#tqR6g-j9RDKJgcJMYGFDDhF;Z=C zTNC$;|CV>r=bht?K6SjKtP_QgomCftH8rJ(b0k7cB z%SMdk5lfd)hW=4}&usAtSSk8Gk?PpeI88B>@EZLofsjkR)TN~(edN(}La?w8=(UY7 zIjS)x<4nYiYgDYNcMcVxLZdg`2+-8E>>S zFZHbbW>Q#RDQN;F;rNt!3B)GaS_L{>W_*(EMF@W!DF7b{aC(0!q<**dmFZTAE&mz5 z={5$}3ti~{o=EUL{s~M;c;Dr0^+7AJ_>ru#`Ltn-n84EUptRYnTZ`QNQdhhA3`+;m zy8oGvlwHjg*632X;TFt3fLa|7(VBsEDz_O(b9Iz1%QIVCJG8g9FD+kMzeiYA#L%AI z`i3g!0Bqbb7^-Am$<<^Mzb`dqZVYD4hY0x)rZfLdzKFKt&NP8p72cETnsr_Aa7QVE z{hGf{Oghlxe%SJ*(O^l`yXL8glt@6E;Nf1Ol-TFSNYY+Py2+A)twigzU8LNQhz>BV zcCgBxK=lwR3N2u~+|Um``T~jFD|pBKyly|= z$!`sF9F)#<57$kXdIGnmf65C)i2 z@j%krY?u-zy0saBTpEQD0GJV5%!vvKtiEXG&TL3>>Y|7|=}&WmQQMoSkwGf>C2|U&^C}`h7^AV@@9x%> zFeqYngx*rIXZl3IObPvE2*$Vo%-@yu+MjmjkK|w2)Cve{g9LhL1O;EA^-x%^hDc$% ztIoZ`!k`_6y;x#k?NOIgL+vXiKnGXnZmRQO)!Emz|> zeLw%iQopJc-bWKM?qG6*KE%sIJY|-3`M3pc&pe*Z9HX$zV_EJwH)N596S#A_fJ(*D ziSXAr8~xz*IZUD~-3r@z;ELd-`bidkt{=Z}wY@P&V)h-r;XwZ4l0{w{ZKdXi96I6K zUG!Sd=mtezk=zn_W%w3-~y@D$O|+8qaR$Y{U``^isz3_ zNJ5;&MH^7_H6(=JGxLEbX5|yq+*rS(=g%N*&80|>&ofKKEH(@RyC~H$hNc@@x&{PdA#H>KJpsJz zwagO0OGt3E-zK_**S$-oo?a66jnq-CJR0QaQ(f}Zs77lJsmXST`xNwhgl6uc zX6F8NqJMnWy{^66jz4haIs?C!UpT}scV<3BY_eRjReE^I<9Q|-#^U8DUf{NkdOn(G zB9)?{(~Q#*xQiN?aYj>0ZYa>Rd?n7w4w;x}HHEfV!;aylB+{<`ZCn0(b)+q(b@p>@ zne#W=qATKQfgjsrNoWvjk}Nzowj=Kdk3k!!x=q#CKt0Wijo?SNUY6f*T5QECEy`fa zN@Y_lLO*IhI@rU0gnej^pa(tHXqo!HEn8C)q1IW%wEmkTbZ^giiNh*we9kPP(8<|C z-#2*5`fNRs}grHpprucS1kPWxAW z>;&Nb!sGdiL*iBcR(GUgA1n?n0M8)x{Mb-lWtTaReeb2#`ZHL`+QnAH|9w}O6}RfA zeChQ4JiqtC_`K^Efdgx`UOXl9Tgz9Rl+^fgdsZDq$G}Qu z63VCWY*)=WRt-A{m{+K_cWbVyh82=CrGAq-7BR*Vzw525kzI-Syjz9PoHGZoY4C^; z(mfqJ2UF2}z~th8Mm9>jlN#I|sw<_EnZe0Uky!M41Pp(gykKewh6n)c!5yu%dq0SP zX&Sct2#P*h!~@q*XmID4TN@%7;aAXGa0gJFY*o8(YhdtvPlHjZ z1u7V+KL@$Clr9SU?oRrSw(S^=w-Z+_r+#b7{FNW-2TJV)-AaOqC_do0mtpuaMqu(D z|6-&isF!)c)u?JfA#&AT2X)!72!>|i8V3~dv#pGOofb*8O@i0{YxN(A19$rLPAXOx zem#<|fM2I*KAWidY$8Ko<>yoLQXYGL#V_)dkC-U_rydsK@AZNn;Fh5)^zb&D$dVw< z?cFXdD1Rw_)wA$FL$7>GeD>e?UfvdO{xiQ6diX!#G|8iD?Hy5DQ6O%z#e!zP8e)~4 zugR~%^Lwz4ez+09YQNDWl;3!ZxDiq!e1{CE8pzG{bg6cL1g3-%meGXmN(7f{3_`&Q zFI9^chVIW~S*lsKCPbIXW!g;|4ilLgr?54|@y>~i^3>>V<(uQPB|&LS^W7@hFKl{2 zm}BHm+WSr@o(0r*fFZ3BF)V_4Z!mvEbr5ViJ1c5hF0}nIX8!kYK9<{-V|9$xcxvN(ozeb5Jrn;uklT&?< zG;tuc4z+`;FH^mfUhBK)Mz+d{AQZ&1)I0@XkgVk=PrH4jLCdZSWL~hirS}C;gwu^C**6@&blZwj7PrfGehVTTtw4x zVZWt&{ln<4IiBe;z_Cn0@KabOonfG)j@fFN{`dqR*6|^D=3NaXTA4REGRkaGG;xcK zvbEM~b`hm;bQxbQ!o8EdP7GNidr0g0oyC**gzd#(s7D{ne~oMICXJ>`dV8rBP|^;z zbi@2rUipT}`+EZk=qlHwdN`kEla1~*-VaV@X(f(Mz|p0Po>Sh;>W&Y=5FvRMykS~V z$Dc0vvhUXw-&AbM$09nUj2~vaHPPM~ihkjk1TSD4ektG$@*!z?s41^e< zaxEX^!3RSZ1lNreDMJ0f%n^ltujo*@;;B8=W2jw(%_ZO=d-fm2=MBB{ndx~IEgR!4 z|1x4eW||lpE!VY}#Z1eLRI^D|DstoG;9-ui40#)VXdjqSCHH1g2r=Tgz&yVp!xfDM z=>6k~_ar4a-g2+?sG0BF-EuhbqI>kl{OQ&y6HUGZBldRvT7$(D^KIWJ{wnXMP#D<+ zt%+P*Kn6KPHlY)%^&mv)?zV7V9kv5PHZZDGDA%xbnoi+9Lm6Mow>IpW?rx$`9nrja z{Gwph+ZwJ6o&$o9wo-H|_J>y^ldowTg?MLB2eKV@FN-n9euFOrUzn%(vbVmJqooG} z+O34siX%dy2>gRHz6#~Vq01sk1C&%@Nx}X1z(9+`S-A`UNDy__A4LJ$=am7OHIHH4 zULJ4JiFeN*9iGEv|K++5j2DudMMv$Oyuv$&c-V!d42ANGd;Z*s0@_3vDT{DOK%cR( z{TRh^seRpR`bO~*rtd93=H2y`SVV*K%%9o9KCOC2=}iC6GRRoZ%^1TPA)ewIhOEOj zVVlOr-X>KAuJpRQ`q=tPx~Jq9ie{Y}J{1tTavUo6cJUD^3tU$G>nCjoqENf)+K7Id zqVwhm^;GfmQzh@S#$YiIYw$CrD&ddQ?GGe6V$CtmPCca`;@>kE*v`4sYcpMfZ#JC} zPGXMHf)i5s$jomZMmD8C(?oGt_G#=uERLD5{m$tzjI)YVh z?#2dpa2Qt*TlUQF-ImbU<-&R;N9k>4KcCQwA)YY5H7~svoSMDeAuR1nz}PMi>6azm z+v#VhT>{F1bvy+p(*E>=os_*U^HE8B7P3qH#RN1#B0zr_T(vFve(_cF>Cx2FqM7#c zjum&cHR)CV{Mgk`npiF7qsXRzs@-F7)nHqhM(E-8b?Sm111usU{dF;Ofb9z{^ZTB} zGwxh1e^j{$9R_YVmc6I>6rLVI5ee3sOS}@@(Gi_e_Y2>DTIl7Dj#%vORN=k5YLMB{ z5ynS$GwAy~Himgg$=7gSp&;nTWi&#gNCujls{!kv@kHOra;}`EeK&V(-N$=6nVU6p+Up9+8yAR2j_b z7Fj9X??mlCH%5eYp`hv<6bccdx!FOL4~mp!E2YDLViK-@e0rW%b1RT=!DRh8+tq&H z@sS+1db;H^iEt*`1Os+J@HFxiEN?t20%x}vt!E;DdlFWEcUS*@+h950K{+hnV&Vxl zf6brwU8y7Xir2Et8yx z)o0)DInUOL<9K&YfU&Vk!ke_?%kl2ZF#U+8&kuI8CiFhofKOz4DqY`!PFHNpWY88a6PRDTTtAw~DV}DW_ z=P30F6kq2Y(e3u>7HN$w-3PznCGC-x?;(MK8EGV@_lpFSEWTJjiYMizOwDwJa2jVS zR%t*qdnu&D#blU`iqLwRitQ67Q~!$piWRl~#I9gh-T_{+zupp(6T!wE^5vv5jOC|D zVD?wGhg0(nO#+6}7*}obi}WC=DTG6RPdHM2Raku_bI@=*q@T+;f?&N}BrLP zzKfM1f$2%XlVyb_n@>(&@Gsj=vgNk&Nqc;cL}7ESd2;yI+nk%fl26m`4yB{#yF!KY zJpymDcNGgmJS~G%>NeNIb_@5_dS;{LPEyeSlYMXIVKD1i{7CuIO_GSKcu*|L6Ysq`c=jdRF=h%LDSVgcy&s9eEz$=)xB*ZU0Ow-)`~QQvtH@C*yhOU?asB zd6+L!F(DN3CXz+GY5>mQmq{^=dylj+ocINW{$5jK19X-3!n6Ssp{*EjgBWl_FlLeF zrVG_Uzqph~_PVXlQ`G||>Sc<%>2EBOlL>nElM0F*l6TZILgrNCg#TegeO zM9ZYiE|qtEPsM%~4cKE_wp#*CPvBWs9ho~ytbLZ`x*p=3iMoG_P-nIsAAF970lD6b z9+fkjXbH1nlz2fK6BLm1mPKYewBa6rr@2Hg9Qf=r(v6S%&EP zm%9YzpFYeRgqt6g&iM>O(C}~|6CN|zVYJ;ZK!9GW_&2I)3Oe}^ z6#HvnFQO^MQ}hf8_^z|*8*KT9i?y$n1I>30v$%Q6i^w#S_z&QKAju0JTj-XR4hIgr zhd32rIUT{ueQfpns5kF;CGb)nmspz-noWsozOtBB_gucGbIvWwLuvxCAj~{zFmjyX&a6Ehj?@@ zR1Ib$YXGczIwA&Gz~==&0Z{eS8CabIt35wbp6$bKAA*^f6MU_jTo8PQ0f%x|ycsFC zm&$!j3BaL;QT=AR7qAZ>jDSJxyx?zu1)qFssnz2mweG3Z{_mSy@5F6UBE3tL1yurF zBoB;Rpb$&I+*qg(v(&)ro+#!8TQgSI@usiBy_(CIxRAFY!d+Wf=vsKrh6w8Bbo3w5 zipp!Og*PJ;Y2n-lB4Eaa{|v#XA3|I#(YeFF`SX=SBqeT3hNCxY;_mx1MaGTs+2t}Es$EUk_^0L1~z>P5; z55eJ3z)l4$_?%7)-gF4Plox5UmA}h+o1dm#i?)2hmhYIKZ2fbL^yE(VESCDu{@KM+ zA)-xmfhns{;{tk77&B^4K-is$DA=^9gpctSPN(L@=fB@Q-fUK~)X?#JvagkzZ*lV( za*(ioKn2d^jjv4AZIaXZ0bc)i8-*I(e4dF~3#Bj(ot31_-XhVkutKF+jqLVR$f!~> zX(w(bGMq-qb%WEld6i~YsZJH{LGc?#u`uDf(4Bc6rBi)33;ks80V7Qw9rT`-DcT{z zzKNF;f-OFOeIAxZ`I9?)Wy3DH?*^LwmDFrN!6i$EnX6~?W2L?Rezz1N2Zur9^WW=s z>CU*hi8|0MXX+E-6yt!)xGwr!Wl>CKjhYK7#jn=#-J&fQnRW3m?e5ZKt(V1`WwIca zRQs{pS5M6wqiOVI_$FIm%T2sg`}vm8#Pb-uIdvuL%u{$7HF$v~lqf-2*`~*xA9<(Q zDp|aoX4t=r`>O3 z^uBVex)Gwkfsc0667dHa!;|>%NU0i>FsHM1xo+TCh@l|kBjhF7rgfk*&nPL8p1{gL z1gaf44BvkgAk0b+5PJZ^YB9=oCVDt$}#;X3!wV-lOCL!a2~#JqG3*0RAH(^dR< z&qEmfyOIw_@*((g5slEQY3~>L z=J#DmK7aU&{4M`x(%@&v0Ot>%&pW2*e*W;sUCM6i8uW*PV9i^O&5F_|LqgB51fP}C zIw~Xv61K(cB|~j6uo!K$gO=vT*EEcO#dH7Y#ul3-B;>}C8pDoua%p;__yI~3WjLh( zTYNT1ZPC3VB8#IDoJ`vxMH-t-dv)pq*ReqPQoo~ElBSZ8E)vd@5Or?}U%$-S14+?|Ot44RjU$O#rO4F@Zcw$KQOKQh-0 z(ra?K1HzrnAdo&@ERsan@@b05K<`bHo;Zz;1BDV;Dj`Ws4dH2cUdqJO!-C&2MQ5&a z1-T&6U!)fsSBSLDizhA$u9(HJY*1h5ALA>uf3hlE@7AZk(!AUB>0Kfd#xgD1Jl3c7 z>&JF3m)mvmF7|UrxV9vy7VEm<9}Sz9SA`k572olJ?|7-RAk6TdTyIoOT)m;w^2Q_= zR&i%x6%H(RUHGy75v|q!G2?BPS!Gj~>4Hp`a3lfJ^5V1p%I9kT_>$_>StZrwFUDuW zQh7}C$DdQFYk+5tS2~S{hr-|~P-;pwFIo>(r)H^`%=T4H3-mxq*GYCS`HB!Cj zcaW~OGPzU)t4a6Eje`yYh7E<f}Mv*8S3OCU7%(Xdl1PV^Iq$IA#lAifnctj+I zY~8f@E^;rzw4#alMMlRcCP_&*sFs=UCAXw!*f7cl08?pr-KezAMd;%4lK>4?KO0KL z!-$_~16r#^Gjh#-#iZiH1`(vMVnEi1J5wFw(e&|FwW*UnE)qh49s@8E%T`+uj6G%> zs!Ql6kT2MA!aa4*wv{RUi16NzE6b|=*()g?k=eoyN=JcO^OhiJ5+-D-QjOUI`W2E! zA$5n4(~rG)i*vJu3YyF)BsgO~$ev;rKZ!JU^gqlr2HUHJ`_P|Jd1LLn*R3}q^S??e z^X^Bd%!|+b70LK8Bq&Nvs^xq_jRfgACmc;Ju{lDH&uxqx&hKu6!c3u4mW$gY&|8*M| z=ErYZs9I06T1`#eN!uq!VPiwh{l+9rLieuJo7Y2D4PXyQLO&SMA3}ZM-gNbc&>CidUd_==`BSnD9R8@ZE>cEJwdQ|_Fl^Yini3lT;%hF%M(SG5cx3kl@ zY(`JdKenujIH)6xy1k+9s)hroVYm3aW6!a>*?Vd5(vx)zHZDOumJZWU$tgRLr(?aU zRG*$L-RP&@Jt?WaXXd`(CIlWT2EtkpGe4kyHC41=OH6=IFQEyL@_-nZWe5pv2`W|7oOX)8>v0 zb2)OpyWR?aR09V(PyCbRJOU~;ko#x#C`v~y& zk@H+&zlWU1T^eavKViJ_#gLrCZ;d4VNJ(#4QZRBlBJ9X6iN}iH$kR)9vwBT}%s6p;qdwfX?%8oEe7WNN-&K!|1! z9(hr`QxjagM&+1ITlyl}qeON=@Z0r#Pa%OLbh4hAp@fJ*H0b+|L5`2|x+of)Y>;R% zHgYziDF;nqZQ2Hix6A;H`;*U6jTP+DG?Gg?DCptL2%fBm@o1F78nnG;wH(+Q!3P63 z`&X)-1^~zSoJ%dB{e0BS+*4p}A(%tvmk#Wsmm{SW3hb^B%<4|^^DPazRH8geHoazC)wJf`IkN7+e<@6nW?G+>qJzPIH6kW4FOdY)S zs#QARsYs;-!mS6T$;k~7xxgCxBUf+HZzGU4EY^wE#o2n1pX1~6D#jf_1Rt$5ZKGJC zLfvQv{}ek#^Z_#oZu337=7pR9TOMydLoiKW%Ma|*y}Z=KMx8`tY5#B|=x_!2rQ6%W zH3KVg^QhL!|5ZYkIa0kjuYk)^HCFEe*Qg=Ufo@E4kb2@f_-{AYL#;PO+GhN>^(~j7 z)JTv(;?Up!y(0n!x_PXZ9hmFy%b`@zLpV@XX>P}ezzC(mg=kX2W{4HM&r^;j426VL z%u*JypGX-SrPNd`woO$Ns4Dm~shP)ugabPAt_VJiXX5P%=qjs#GA&kC%Nx#Du@1co zU)T>{w(@&yleM?99;5Q%8P{X!G14Sk-|InpcBSuZrQds3(YiLcLj}>!T2V+3Hcb=+ zi$#RE8u~R5>Gc?Ef{CuuUQz3}^rqmq0$yz;O<)Q(437#6o|r9oifS$hehn;?+3&_k zqphz_R6>>=KqmOy&3wcAMMR|8drDQ^xt*(f z9F4KRJ;qzEGDgf!?)&3ju91WKfNa}Pkl#tFd)tJPlG`3jVQ$;908B~u!>0;9S&XKn z{osl5aEiK@xsJ@LUo`ZVz38qCMA_%nNK+3GW&gQU&9arV`vWpj|Dmside`$mjenIJ zjAW@_IKiILV52_g^R2-;>Nkna){XTab2?ZCsCv#P2ydimjU;KEmpr0F??3x+bTS(e zW))MLrS?mwt+NnS$ssvlr_;+v2`*y{X`dmM)$8FkBeo0(XA(}5uDJOcQ{L^;Inb8I zEefVbhkBi{XK?YJ5b8~-b?)F#u=ixTTW;ey3U#5+Dn}n$Bl9=*9&bsklDcpki7m6s zfowDsK4H&YT=TCE$<*PRZ?Y?#Y>p}sX9vA-WT$zKTO23&rzgDD_puS4I35Lj@^CJw zl&jksOiG(Jc}a|P*%hn^K`~G|VF)y%zlK`;q7*m>VMo+_2GlmDY%IFM1BlL6YZ=p~?J z?CJX%W-J!;BTje(1K1LKg}cJNWYQ0N?Gz(>L2ws>m=BkS8St;_Wv40;Gg8aBnAqI# zN-V@?!i3_5@4@lh6g8GS!GiTjgfpa;Wt;X*lhRXq4p9KrP#B*Fi zB+=!tNFZC4viY;AzY7BD7k|i8rd#rhbylO{T>@mjf-&$kW0G3K0P-SO$!>X9?dsSBN;V+VPQTryoohEHT|f zS+h}_KR~hon!h?SZSN@1+jF2Mx7bI{W_iSAsf#*0+59~|%reY|&D9R)aoaA{PlHwC){z~CgcMRZKR1><2M@~t!zzWS-5e{c=!P`{PN0{ZlnD^%dreJt=F;g(SDDGquY8cq?LK;f1?1gky6&& zD9$uL$MGtxgX{?P0dr0s&~GFpPXr^e@Plkk^x*FvqSvp{Tclp}%PQtqvwjBh`2~^o zTeB*Gq(N{GjUVTru6aBHWmMYJL1DxJ>SsU&V_)D;SbrjF$*``SxMy^Cn5*<-s8zNR1;qcrq&ZDRP`!6eu@XHIwPxX zDsQtc4Z4u}GPmbu>n`=hXZ>A;cdD}kA>@O9o2bvO*v|fK0iZk;*j2%+8h-5;uGhUn zs10TQ>9yr6>W@!VZcUAC-w=P~bOz)iH0XU90efY33=Vyedmngoz$0pjHI`9FIwZYh zpKzcaDQr5vcRZzHOQ%J~41zZ=*ynkps87?=KZY~9&My$>DYxHo0*g%cJ5cSQAkn|| zn{vNqWOY$->cPxa^KQfABc81s%kXC(K={eX1W6zr;F_V(I~r)gO=b~OH;Wy+i?=lO81n0AJ3$Vu`K;5CGrnV zvzON%-g(0DC;vG1u-UuXN?LaRFFudZ^SsCB^{i;wQh$1U-Zl2#xTUdSgfgqcbCvUc zmjS!oDFN*)peP2JYgWBG$E9bQ>`~B5<(TCyGULTG)+`SeZs-6ky3t$^yx!Y0M!XCHBgjs4Q#mDV(fSjT@)her-L ze`NWB`0P8;0p?T>*k3_52A-chs?JMt2J$Balg!CYru1v9AUqJ5Dz$;tR#`@Q;MKRs z431g8Q9lH!5V=|1zg-o#bdNvDDcSgwTdV!b@zwFawN-a-F56k#miEIu29H$2X_amY zo;})83RxP~m=pvItSuzf7}O7RtKxyuS)MdTbD$h79>=sd2n{JdGePtHv9+uShp^vm zdXnUE^5xm+L{FYf;~DL)h%;e)z) zDAj|VIjW)!BEQ(MAb43=gXeykhbi+4KQ{U*jnWwe9&2g@O8?9=!*bekLD@b%Qyk!k z;k7s3XWIUpyX;58Ra=VoYU0WS0F&_&Zd1y&R!a#8k{8tcgfa9eVq!mdyJdl$Y>7X~ zowVnp@3tI{B+2%-Mn?J!``~yNubZPy{0t)FD*HTP05{F|d~3McSr;6if)gYT{2WFi77)?iqFQ zEf(YmAmdL`c^2|)2U)RAnI$14Bi@yHD3HO43;8qLp}Xe=ktQZodi^}>lIeHq2R*=b z$+hS(bjfY$2-?;qPcQ;Hb;&FLFv$PjAAz(k@qrW_T$eoPz$Qj_%8Xp&00YW($!ws4 zyXlP}Bjno?c%;vD{NAKn1YB!rhh;snPYWO42~|6=qQ!w;L3C&4-V}` zUT@$M-4TCnv(TB3Ma%OM2iP9!e~I1Yb8dN7R_x?U>z}e*vA677;c*XWqq%sE-Z=7W zMd#}-^Vkde#Qo;SXRkq52XS}e*o8Xy1}ah`2CkKOE3z;$Iv+;_t{ce*?jK$z+?}P- z1@sH{!O55d>1_Ad73&$V=ZdgwE=;doo%wyRavtsUp~ zL4@s4$8G=Vw~n54_5_xstPyHVE~&Y7IHy%6z#74LLJ=n>TNS1YL6>m>l=k7&l^6wu z5n$Q_oLnVwlf9};#U^nC`}tQ6sLu9vX)L;v#9;aIOXr(+XZhNOGrd*s<7f)f?G3SK z)OoU~m12V9m8Qj4NaPhiU{PUVTod zR0v+pEuy(4i#Yb#^uCdT(2jo(y5ANK_)!Ww=q>S8;=KG|P5a9p=cq7yRKY*0Oj0 zP<`=P>^OY~eW7T9Hr85xXC#KYp_8uTKZQL_f~JmS@n1*sjSK5Xp)(YD!@nitq$?x^ z;LA0py>?vBWR)OQ}L+Hv}Gq^pyojz#H94$0g#d7fKl0FOt&JHV@4f>o4 zg&K9*jVQC#VYNRZ>tzxD?86}+2pp6N2-hX>J$f}1(zARJ0fOfi%brl`pU zr5eQ8AD#VxvP;GbNkXPDrscV~=?$;-8zO$MlMiKCRcgpiiubI!2IS)NK+chf5rx=P zUQj^X(n?#ERO2>wKDe`7SMNVKDboAHVA%>Ch;6$(?EQ-fIHt(3^!)o6eR9+n`O;0M z|EY_VE%@SQ>*0+1dHhT|x?dMz(sg{rXRTB#JI${lSscILsAMrT4zqheEBX#Thuh)! zkk#>68fZM8szKk(@xFx5$X0;OwwaxqoGhPX{L3h2(C#A$3d>re9tfGnJ~37bGIvY% zlz|ACbdI~Yxi(~RG{Qdt+dkcP`z0cZ8LCS`);}5m> zUA9R(xA!{whe5sc^zUtNXrGJ7P?f+Ws{WO5vc8SaoGtQ-%?>bp1kxswLvwYy*27O3vJCk1-z2 z6*kC>rE%Y7pEG^tE>*G3e3%H^Hk!m_d*QT6&eu490w#Gn4s# ztlz}QXw1pta?tjYFx+|~6f+ugGoXn&cr7pZ$Xe>=C5oyn$UNEs7L=+9VSL$6{5ZMt zJ8`c7-vwPJgso9G6;U=g=P%azD{7h5?$3(z&idXDmG5-TTqFPf@5sWSkIL`n%K!Bb zlpmiJNG^BrKaJJ=o_#7=S1u>jHf9>8nIzUomPP5d4X5HS!ut#1yBkiD zVZk2`Fv#1oke{=+rsRaJ=gHHUO*vF$_^~PWE(Gwx)y+I-WdY{pvc4xFPu!3&B~slD z`&)HKZJSa8BD9)$)aJ_UxpFIz?D@$$Xp z|IubgXx&l%!rQ~f5A0n2Z9h={Sny~3YMMd!;ZJN@wv?l|5-&?aH)|nOY1yE#W}E6t zqf?Zr7ugvr_>ro;zVrBu&-z3vb*K2n)LD?N^CiPP?6#Tvz}9ZHmMWYH2yocdWn{oIO@n&=lla+`+b>V|Xt;-mTO_bpS#bq(AMw70$QW$%*? zVkNx8v_1LTXZrTRGrs}v2Ut~&V;}^DDc*k1n~8|CI0?d$1X~-}D4xJ_p_xlM=QH`T zk<+>p*FE-KM!n@P$6JUCrIED1&=BQ5|EPna4L{Dd?5`weTXvmtuDt9x(LIqKMVTFJ z`&e!^w9yOyxT-rKuKykg;QJsj_6lkqGK7Xj4_})p=Q5UARN2SSyzOy=dM;|rvQcq@ zgL13mdZ2>q9_G&#uGFJ@MC=~BiFS|Nt5HPFI-#>yu=+tOcYgG0Z>xO^rXFfXEJ38b zTO-X|hKwlHF{!@KKv_^sHe(|%%bH5N(FcXMl* z&EZM3@vo2MXxEWm{yJ~f*HX`uW5HMf<@t5K^OKGdD=>!7Tnj06$SuX`(j*3k?D9Og zj&ld%tuiC^^`SlqkXbph`-?%TZ^)m00?1c8wetJ$pXKnUh}`--6`S+hkmHa1KpY<{ z)jJ};k_fH|p7jqZ|1t#Q@gjTFq;gHErHu;Hf;&Ep3QItT{U*}W0Oti&cN@Bo)`0HM zyP(^Z-k9RL(3>J(zd6MBy7#xTUDfjf8N%!Pk@8$Nr5H36a0~Kf$wcy>NtSzE?Dv8r z&kKC~WPdl;vP^~2S(83%2)O&X+Aetim(w8U5^0BbJ*TZE}v^6sawE`FNVA zBZ|4Mu!m0bMNU8Q)E^a+=?cwdJ}LSGJ7F>gu z_2E+Yu8fCnl7QIP9w*VJku6!MPQWf_)s#7AW9^$NyrfBbB&vRJj75jHC66Wv&B+Q` zWY~EA9IM^g&Z;E_WTgtf`g09Y4q5CkeTW9sQ$YEO__d4FlgS}0ve`?^Mwu=O9=Ou6 zxF$w5mV#Ux=UOfPEw14zg@bAAXhN0hWTQjjDFaPD?CM;t3oadUA)!)Z^P$pZ;|K!h zN^3O8^0fq2W)iAJL0&2bsbEszawr>n+3?rgOW7!TK!xBmlw-qAAw1XG<<9d(*z|p9 zD#86MPFUsaJV!q;)WJtbIKCgv4o)+xc(7m$Eb&A7Nqm+qw>r=9tm8{{FWdEXL)p*j z#&(Y$$|%<_e*1h-Og%lG4_@lliTuducy^Dlf18wGJ>4{gC!%-qSN|wvZusaI-|7mv zg%8TDC<(OU+$+`kCVgGfbQgbx!pb2b3VOg|0}5xj+^_Qi6xQ>jLhfbN!E)>9bvn3l zy(K1-N{sK+6!6p5w3)y92P%0vRCaWQ6@;i9 zM>x-@k>CTUl=34~-bU@9R(<8CjGwlq3jT(bd*P#Be7(zF!w2Q_rTV0bk8+jk>yoBg z{)!Iw@oSaq!F9z+F89NHpz^2qQ6WEemFp{&FW{%GX(fNd%3lv3{o+0@`+7bo-@7(o zoAkP*Dd4Ya-N3Kast2u8{NlI9S(7*Ofm-u^>T)-eo9gtHp8~$NHI?u;tThon`o+I@ z*-OKGKXbL}bxBhhfAbx^rM3;#>Gan1J&+*z1+Jix`G_GZZfnUevQO^0B>OBCZ+IgR z(=ZxcUj%SVH}KH|1=hI&*<`&VU%RU<-RInxU(16&)Y%7>tS9}`^Z4vD5EF9{ddfmf z$v#`%n(e0DLfxL#?H50Eu8~Wx8qZ~Dn@7Xs_TJW1!)GgqB<$`1rst+w18pj!T*(5a z1@pQq!aqmELU@F`8qN49X66Ue_+iAQpG7hd>Oz-KkUZ||=T~abk zdRQxiRP658PRI-Xp`_$H9zk8_JE(I*sAC<}$tvJZl7vqNO@vD4x=cLH;wk+bz6NjN z#+BZWr*PWqG~Z1=<9pU$o`js6dwi_F>YId@bUIb|{SbP_zH6c|=sDIY^nf!G1ZPuq z=DN<)ZC8Eb8I{sWe=|OCWfD1TPN_OtN16QMwP%T0s+YHW?aRGQtG)iKbYzoB*zv?I zVi%^iNhfj!>at(3jcyobhJ{pYs~J+!A%g$>OwG>e zD!HfN*d_*Xui$a_GyNFITN=?SI?*>i>!)JM=1(K~gkQM(rm1<%(R;CR|A7&4&+6m? ziwU8uDpce)_C87H?%wc!QP4Z9mmd->M-MLIz~K00M`PDYR?=;_C5oubuC4=zxsDyt*L{~hLrQSz8*X`p?!e`3AZR`AJX&{M8=jfK)!}#* zmQbIUdHG8<2vG&(u$n{(ORaT<*e9GXmQLDiiC~6`NlCCib4D>3aOa1*Kb!c|y8(Vy+f|8#`QZMNUOwMX@ey*V&=8VsLiQeQQ zlVusM$-wmQDdIYAB`Y1J`BcLe-1IXXe$!8iH{U1TFzO0J^fu2+wUkBBM0Xo#7X}ms zvvO6@O7aFcyx%?68*-DnAhnTP;MvT|3%4D{H4B)~OM2Fc}|O<5m+{ z5@d-H44q-4;wSFsf{}FHiPm*p`fEFB5S{E70A!D-65y1*O}x=&F4kOcZKvvrkUb}#&egFnsSEpC++)>e_A)2xyT(aU(wu|}$RG#htj zcr^cTA%d!|k;KaG6u)rASXNET8gS1nEU+du>?0T}CwMJvdO|rENLk}W@bf>g>A!|q zW3hxIRR({>(@7Zhe z+(~=YzT*k(VxH!;$Exc^>YDLh_u^%`o;z8*P(SUlMf%a{npANS2V1l`z)n(40=sS_ z)lbrLoB?~|PHrS*k*`PpvSz0r(SUX8jT3@u+bJY-L0$a0WnS}^qbAi+`VFbc_}}yy zjTvA(`|4FVV0x?G<be`v)BY5ANrj@yEQ4tFb5u3O(rx`WsYHZUoc&=c|>-q)hKjv0^}6-Ev?n}@+# zD;FtkSZLgaiB9F-Ddn+^1*Ub7g&*d=W)J`>sLuyQgL1gL*7pEJY*2R0tVMk zRgw}H%Q3ty7*j!`bv`{S)T8Yse$yh?-ZIJaQmwxktY8*OfP-GnPEi!;7|kkx&hX1}VrR4^pZPKp3+6%+a4BSTvE_+SqkbgR?I zGKGUTX0|^z*<-2Kj&sy&lbGY5mcqroT2i=({jzse`IbxHO8?r#t`r0!Vu_A~&PwhM zaR;+|=7_qVo)p+Yr>|s|7CT17oYBbUTCH=vB#OpJ&j~9LL7l(cWD@cw;icH}>CP-W zDPbc+&2R%o0a^yW<|QX4Ot@JCt@B|K7G@O_<2%_6B*xio6=iBWpDFz$sHEsF3VSx_ z+MG_hsg)jXpG@L&uIaN})2rHPI#)tK(5mE_OE-5;$I&_7e6FQIz0O%7|L9b8PaJE2 z85Y721>?Lq-g!%o8rRL3**|uo`WZe|ha=w3cQPS3%QnLi1%RO#)79x=l7?XfpFX!$PO-jst_oiIJ*gP*yxEI_nDL4e5b>Ee zDb4s;0Iowc0UrsJdU_i;5p;2Y%#~F7@AUR73U_o@A{OA{WE%c+-%HE41VP5 zUmEP^9`|#H`?<+}m?wKi?{nCjih|LWjikp$N9;uVDCrW*Z2S7FtZ^hGvJ`Bb3-h-BBNkJM1sQcZ6bQ< z+jwF!!2L(v>TbSU-F<%Py7Z4|fPZy@u|C_YWdtCwt~M>CJ2EZl9%25-h~Z=eQ-!!K z7yzMI>x?H;Zr|6940A_BBI2(m8+Cl~&?wKAEf|ZI-f>RvWvy&rWJylw7z=C6_OUP1g2eP@Y)!B%l zuV=fKMhr{SX`tMi-YC^1d8rMMg~MRy-|-Hp&u zu6Y%5+(6C^!)b#_8m&<-vwRxC8~*FvV~c;O4vPISc%+q6(qVtm##f%?uS<3DVJG<5~j+B@;)=Pl{X*EXBY!{aSHfRCPX zkfkxclb0~YFJY}UDZz7s*?bDWQ{wY3IWInM>UljkRm{2kJk9amz%RIq)Cq&9oG|zz z-h8sk!Td2y(-kH3USqILTN~-+_*D-`)}`h+v8+bRP}0BIi8i=x9Jotk$ywO_>+^<^ zWsq6iSOWQ{d=CXz{q}4was2%1uSU6a)ue^?#wwG&i?CyR@Iz)Y?H;&2($0 zsgB&PjxFD+cR)U5x$PDtTjnh@W~WA?(b^CdcJJVFWm}S7>qn@()!T)c)LV;`W|2?K zjFN6KsVs|1`tpv)i+BtQSbKQB(@bi`%xN8V(Y$tb5%f#<;H{A>SZ3;gosCuv)Prq4 zROG z-nBS}3<&)H+-zWDPmc(EWDEA?5Uj+&{(h5z?c5Rp>n$+lk8_%2*X$XQUEF*$cuEA4 zQJohoS54GgY6X6Z#09-y9Tx$k;d#M5A(%xq{YtUxCs!^~qN?fH>1bZZfT zNLq14Bx#_MK5h<^W^a@9f+Yn*4`wpD3kQtoe875XM|DD%{WqcRS7?JWns>zoq=BSxEa2a?h%rH5oKq^PMn2~8{=pQ+9 z0#4x`Q8Q^_!lA7Nng#l-N`6f=3u>?F&^|=(8gMmwhwJpe9|SSw|DM%Jy71punn#*H z9WNcIPC9)Z0HM8--mHbu%G#R(E0hzxp?WfV;a2uzAT+0n#I0t)RYX~w&7FAjTLv^L z6Uk^RE|jZgp$>a97UBhJA&u_IHjb)_0K&P%j}u9OL^BK#|HjGh5z!f>P@smZ-013aU0S4WHgGUWVNcm3^>y&d?M0iL5#QW%iE{jrV z>IS>56?F9Ggn|sh4Pc*1b@$A3k`v0EFmc7a0Sw|OsAIpH)}-e~=CcDus@WnpRHf-O z^8RZKY{_X6;#q=F+*nyRAQ<~)m zY?xL0JHUccSS#4YHRjZ)*`!G2j-IB;Id}}WtF+XmPTkYh9{pc(Y&*ZuKafmBWCw#6 z2*^(Up*&z(Slz(!T20Oz<3UyCFGoO%z2pe8u$oiH=6Xn;@M+hNCi%!uPZR~Ops_;b>U=v%7^!ZPhCy@qM?3f^cj(*4;C>;pR$lX9CfmTGW!}$<)`e2s-Xe?vF?uW8LOS$EP@vJ9K zMcU|ggLzSIxbC45o=NA90d}E(+|AdpgSIA-NwA&f4b}*L@qO#qTGA~o7a(QA08r0L z;7HhZ6hs^v7oSQYn8enlUXl@aFaexgVQ_Q8OKIIp2WetOG7-@8^d07$Ie-g%A7Qvr zCPxWmpbf5=@8;Qr7em6@dY!vhkT0lV91ueWaddJY1ur3rWwk}+frYzn3}yB z-ehge`{$ET%+O}exASmx31bNgWvxo{xOKWiF#)iY1uHE}o!*|jRS#Tk*sx2-CECOz zt0;OKbsH;Et(m;CJG$8t$NhgP5rz}xn{_(P?_0iBWM^rbgeiEhdX0B~=wbRvws`|r zGB*_hFbTiy9!oGZ)U$h!wYq%Gr0wyMIK^_!Z4^=Y^sg{nSHlPC!gZ-W5A+{(fAgo`%`a145Ba4UsE}X&pbYBtj)K02U%EXR z;TP<|Iesa^tl(HgOP3_(_|wop)tM!ZMby(p+AOV!vPivSk~(=F9?H#+EyFwzAQtW^uI1PYSGUz#eg*-Q{3yAVhA@V!4&)I=YPNy6Tg=! zPIXLiKdQdRu$9tZkPuUx*0On=J5S*2f8jterWS{YcLWM_YD$sp4C}>F^mwfa zdLqc!bWq1ziC>s9K&&gN+EM{u8v>6fnVvUY-a|gwGD54JB$WjW>~Pz~E&2RdL%Dpi z8{&-jDK_3K7@fG-(&gl#DK~P-hae9$P=$c34>z0SbFRT z{rIuI_9JaYx=G=VdQHWyG#E-fjt&@gF1D6IB{oz5sGY@u%6_Zc5h+x~;!|9D47Q!q)H~`l^)u%n2`g2V( zf$)nP!$yDmm^Jz*yj!DBQNp0u-j*IaMn9Y{upcR0*67{!nu=X*Ff@AX6Ov97kPXe4 z!aJUV#sv6tSxr_KlIGY2e>1Lh#y=G+%a(kW!|wI3LToRNhDSnV7H(&du=K0yJepa; z_#u$Abr5Qiel&rtpzX^w^Wp8=>QfZ0jz0)cWF+|Ac+9lM)8S*742` zMR&dVu@Cg-+9w8lRj>FZ8Vr5$Pf@HxU$$itQ>D+YfIpE@Rj>I#yVSNdEL(u|XU!8O zK_z|{l=Wz~tatI0;eBV`jW^1bFeui|(qn`4n^aPUe0S|g8Z znXijzgr+lpcCit;c5jG$4;;TOf2{cqeJwWrR8=iHHn(zYC(Qv*ZSQv%ixWW@#@Op+ z4()7cr}SC!=yr4S%-$*t(!(*mTng-W<6)qO8v=$P= z(rS1Ne%@VO%QWH_u0DmrkijhnT4pScm}~H)T8C$n%e)rG;+AvCY1_vFT~mEiz1M~n zOs;b2E%&JmP({oZUao=_3?fx{ksgUDl8T*dA3^;M^%6YCn3t@MC|1_c<#LcBYeyA5 zushu@zlyL;&8MlZRCPg7rbShjQsvf@!zz=pFZGy;ePCax@7G~{CZaplCktKjHPyFM zq}h|VAH2*WL}()>q(pN@Vk=d>Ls9zQHc>;Vw4F?)4GC(SoUQF!>zGjQ=v14vZbi0r z+160og7nW-CL4X(2C`(MHoV`{M_FxjYWh$;b)i^t+v0ZM{0Jrf9U_VZKsbCCNfbw6kC3ETJXEZ#fI$H^Q)>>8UTVGR2! zh8OiZcxYIHWO7sqM9sno& z=R`d(YlzAJe`R)Q`XA#*KlX2>CSxz@$B(`4-qyOeh3;(;Ka7}E;iGyt-o3?AsITAO zRG+Lv&BRurpjo73o(PWF1ImmrsoMqrWe$IseFBV%z6H0&YE&NhjuJ5vNLr{;cz9Te zDR`WW$TNR)(JX;VAVq_%O8un)W&u}O&G=?PkWDA3Ss*y$ArMpqAoA<`vCghp5WLET zGb+obRnAOGHz$T`Hs7BJKC9%C%y0O-YNv>s?mtleqn9+BB)oB8ok;kV8F zg7K0oun|tE%Pic^^I{K&?MMjiu*u|16&_(IqhkdJ+m5vm^$UMiMnlMt8COng2ia?O z(nPXW(7!goy~t#eI(@6x{7wF4+u==8k-46Rog73Y`ktT=^mPrJRYJq?A?kAf-sGC^ z;%7}#&0F#tK#WRL{||L<9v)?N{&6Rek$_AmD$%G=M@0>y80rQJ8WioI@h2*^xYN26 z6)Qplh=744!1y?dTV1PIZC&cFMQ}|3+1vnIrJ~|e?TO=pwF*i#@8^4;XEM(Ow7=hb zUGE=nt}F9A&spztZ|6Su*@iANRR&>mOifKQqUVg6H{tQ~4TU|aDSOKg@cV?5f4II* zwY1}#&Och~#(N{}vswrHTK}{IwO+4UJMbscCwh$(e-0OaqO;<22Z}%G8Eg$Q=p8HE zPhtjOZFZMba6pS(`7B)FhSipjy3ux5>n;&#mhkDl13V7P8vJPCyMiUK@}$_O4gK)K}>?kz9k3 zDvm3I=E~(3svQjp45c|CkOm|0x+Ip;w#dVY&dz*0Y#EY-C*YJkL_9n6B zzH=Q$P3*ON%4NJ}|4P{5`LF{N)(ov%j~0G7@pTS}&|e-s(qtPqmP?cE@$;M}+nQtC zgV<61q!3UO3<7sVBYb)ga0T&?^pL%x!yvPJa)|n06~eBgp@Wftx82MCV^X-pKaRHt z#joq$QR9`IX9+K2c~I-J$gBavg0|j=ks|+~22{%G!CyaALIOvCah8&Hwq>MCrh?%? z2*oSo_pb>`{#7$@Y3)Z0xT*n`{0)ms7wHR(N51lL?xEuZMP6HUklzWv1|0fz^+?Dr zKe5~T3Q=?gul-4Tm(Sp{t$D$p@4x?kJBGHU^^o(`CvDYdSvpotzz-!oUrNz~6~g?IPXSh!ZFdlcuQ*4$H2!H&SQ zBsPzP#o0A()3#K1bFR9M`bs?@b)xGvexuFFAa*G^5lxsbe%OJR6}5_yLg{6s)feZ1 z2vurGfJ8k&1m<_^t`{!voPMnjukXhoVi{|5plqpLD^s1-Cu>HfrmTt&aLhj+1Ngvd zDlY36#&ca_di$&IpMb^8% zEI~~L7eT9%-X+2g>-kbr=l&jxq=N9PRp`Zid!xVHKB)xNm?XmtQdp^;F`rne8YPDo z{?4*-lZBp|uQp(6B!*gY;0LPG5EPwM(TI9wv75ZnGh~&HwN8;Ih(Ea(6s+kz$OLyX zqkdypJ8yANLrbTpLXv4M#;zBx?#x)INl%uVD})I17$w6**& z2K>ge5v3^J5v2p*P?WK6{s5YLRj#IUjdZHMK}UrCj@GoEAkiy;cf#Zj`V3+-ozZ;x z_BJATWDnrh37I+F2p<&Jb(s$?*o@;&7>3cU955e;p6=b83Uq1ca=kC(B-9qpNsW)W z@E2SXab}B7MQx_&x_f-~xvrC7()}b6ZO~EQpVI-C)K)3@VpfP5C`Rq0fk;M*u2x|J zD%Wm72Zl>}>%|WFY?lFyD)!&1AuHXaI4XFi2Lq+Lpf}Ct9*?cy-!kriMTauAvufI} zz+L_<@8IzycnF@BI1EXzZ~17Oq5YR|ig^DGEuVGi|NYSP(jhIbY)Jq0M`TKvF?$_j zwym~H>gLpjZ@3J3!;*t@EuKJe`NfQgm# zf!LWG;R2V;6g&PRq8PTd<-8~cze%o{_R~`4YjnfF7y3d*OcsPRv_`dXyd|x%__~PJ zfc4_r32S2JWA5-;gRzgahF{KgrB_+ROFQ_{UB<>S*fgr6qt+N|r}TdMv_q;MA>W%^*i)<38Zo>ulkeGo|M=^isI4AjUwh(EHMG2FB>AzkhYi4(a? zL+lYeChkbDYx!WC{+rSp`oGhX?b83t^!F{Fm-Szl>3NuT7q8JlC7ZLCF=*NtRP)gh zxv<4pn~4NNqat^u49UOA#eKF~ct$sxw&nfN@S`2-Z~fCVYUlJ%N{vtt^e)m9e)P{l zVE73;^E|?e4IwMCCJx)NS2Fy(*qL>{*4=7Yh!x^H3XT4gFZw(8Fip)@(m3UjllbV0j#?7n25oG5A`D0KSE~7_K{>(TucS5osL#Tt<1Aj_Tf}b7fh+5t zwnDPcC@D6A#^1YkFArTbNS+vu&MNpv{0OsMrlf{S)r!YEXSzfJdeP%J0ht`7quyK zN)_i*2AANh_&z!Dms2^1jLuUY4ctYYHK$YN%1vHXQ&0_AKzg=2%+Znr9(GN8^;a_P zlPuE`IqT&)MP?s!Hy>tA>f~GYVhJt#!ShkC6%!ZkXUW7S^$g|h;Twg`*u8toN6>=@GP zSHJt;(Cg4cjZk;{$G-k?UU80I2onspPw4-Ooxw6fFFI(3`r#50FFjv)6*zF=<)@1` z%&^SZVi=qe!oVftmSlG}4)oofH5dpQ z@See9AG_Iy2xM=ldW}6^x5}^~AW))0X4m3)NWzW67Ie3ZH`2 z&*E$^spyf?wn%dPk%Q!5M|sO=??Qgp9f3uK{2s@P?~;Oe+TK~b(towCV=VIBOJyo^ zGDAm#QyiEM)l9sEWYIU1+-@IiXlxeq24Z$#+ zZ_n#{H|xo%eOIqB)Yizwt5y2yDrD%?6R$sOwD&wGxUB6af*32m|F(Ax)a#SdJ-U3d zR3^M(3$tmC#SfK-BbV2l$&J0|Du$HxdeRcN?mIsynxuB47<6R>Gbf1|M+m^SWx~XU zHK~@3ho|#6VT189y@IRJbL%GcSCO$eWx1*GADsqVbsuzvd(BE z8^NlXNrN_2LQ?cOf67ZOzqwla5%iso~)^3XD2 zm|3lH7o^(kf{6{B!1T@GT$ABjL?f+5M?_j=N4e&7>RxU%C{>A7!stqh7i@dcuX`&c zfZU587mKP>$&2mOze)D$Q+$5gkPQk0wro?xm}z4b`wbXD(3*r18ej= z&W|6cRk*~T#!t*`7xs_qu8J;|^yE!dEt%d2*|Jqele~=~Q4@HVhr@SpB}*G}ms-Qz zK_`=fql!0!^^CKGP?LA$JE5;ktagV;lK`;D9TX;mp-8so3`=(0X2~qSXMC^sz%Yu{ zZ8+01^w=!JJ4Co01su7cM2fC2-As+@Dq@<2nQS$lJQLcnZ{tmo&=iC8H*ZkMfS3BR zA_yBUdZCR$NWX776}f>dcW{e;$Qg*8=IEvXk8RqUi~LwqN$R*#zFYAfNbCNBjA zz$yT4Ia>yt2<3utod@4WIr3_I}KUSgHP^~AJ)o3Q;CU)h1*%0!Zo-`p1`83gGg zBY<`jcT|LcrmQ_HJfQn+2Iv=xpxMJM*>$H`X+@hQQ+^i{?nnzK!*IWBH1d!7yC;8z zVyZolLw>3?=CRb$y6xh+-v-Ek2w=Mx!~>700ahqG%JSsDv@C3XS;mte&z>$I8L|;f z>RiUWHrouJi^V~O1rGFRX(!H?nd&Jzs-M;_4;pUXgv>)Z~kFz^*@=*IdCeU6J{ z=q>`>s0^!#b;s#v4ajqglz8*TUYQ6RyF0WNuZJG=5uj>I{-Heo1eb6U_4itopJ=?# z1P6zYmK*e0pBj7_{tbC9nJti2OoJxAI#FwOPGNl`3VFpbUu{GJ1{7u{KFy|gq_%_jjJ7%|qz`iQ z_w?fe=^zdyOO0Z}a&&}tH?a#e`@4?zvh^=l`2Gbb$51G3q~zGB6|%l!*Ql}}*3Ey7 z_h0Ae(K)uSf1KwZ7yHLp|G30I#_5rct<{uF5bv$8;$;M^Ai%7N*duz|CbpahR?gmd zO{(dKZ&8M&jVsT0e@xk>iDypXQ$yLXv{d+1i5d-p>iu&zz&{Hf`JwbQ<_887g@f+r@fn(WU zRW$W~+Rv2j)%kjml6j)@aPnw){eJ;8x>)3jMuDhGr|ihiX>PTyZxQbUyHDO**9yd_s@lz>5?Z44%NFCWuYcqjPL7 zaW(1K%}P@I1^13>q4SyHr(HR>{Ahjpf#8+?hD)ki#h8xS&T%O{UlW zgdUf^ev<LHP=f^AU9f`oR1CAH6oqj571beQ;lbX^lrL3&F(o~vr zfJ)TSA*tk(8HZJ0n#GyjE}iE9Np?mDeLmp=>c`R>Lk?txY_SLAOA6u-+CwJez!faN z3|LnaaPSrbj6DS%b;6``!ecA_*B=-xs=_ibP{9Z>_vY^FYq)s-3m~X3)DMRh){oTS z3C5*H4s9mL< z_=%VRso z@AUDv_;>~C56A8SXoD-~kSlZB3UM_;w@jDqraI$K=rzu=9q=N$!a|ivrz~+k;*=%r zvlN92RjsWO#VZkPt<5dg5OmjO% zWNLux9VV+X${$TK_p9Uhsi9nYC^O(z?vJmN0HV$d&B*|XN5a01tLs=O z-%^B%Qu^#GP-N%_5tw&T(}q=>ygc?9x?{8X^g@7uHuU&l;RUlb`-4;U>PCvurKDYK z?UFfPl5z=a6;s2Mu#4%Wr4;QDimbvXjHD6FxvapZgg;mbb;}Cs!BMu73N)WJd(O5t zE0vi&mlw`y)OV!N|8>e7yA;^(oIiDq@6RVmM~#(^8XFn^`&yY4%gnLrgPW{+&dg{* zUryho`z{l+ey$?0D@My1!*J8XsL@gxwyql4S!hZ$tu_@J4!Se5$6AXtLJrEmze6I= zs+j(3{n|M6+Y|~LxG9ktOtzY!ag9J2hUmSodWOq2%?eK~plH^JywqJAF61{2jnK-q z4NZ2>HArGiU0QmBn`gMMfO(zj?3`3^3I)E-@|n(beA_j0w%kWuhNYLK(q9a*Ikq9M zy_cBRW4j@ZtI*G(gX9OxYaNVYT|cxmF@$Y1zy7+Vxb_fBs}-8Q^)gp69T1<1(X5=8|HasJ(^uwXy}LO$WIcrPy~5 zmgUL`$GD|7*&-)Ng;KagMr$VrcG4|xowSnJM#c0*OXjGn5O*{zp2V`$*t}xVwC?R} zD}9P}Ss*lY=U_k?SZSuiE*kConBnSU0FYKJ!xC#R%ALN43FC*o?eRbUYu4MvoTqHv zI+7922g|-@iX!h`c8`EK@Au8b=KzqF-t6Q3zV5Hw9F<+zp+8Q{wE5e@_2-$`?487Y zH1l%nG^~FFB@#eCiJcVI+?`W3!Z8ydB}WNfS2-)2%!j6>-UMk4c5&UsYU%(~5QoNA z(8*LM=^rb>zBgp6$I`Dg>ytmxmh!>Xd((XRWc0eC!t09r#2;r%6;moN&iU=n9^NBVGd*juLOswaQ9@j!7&6ePvZ-wMkIceTFAkvmT0{D04!6)jV zL6NAv6?IuIYCxAr)b5HJWl?UqqnUEoN(mOUZ^F^E4e;_~8Bccc!sD0asm&nAh{Wz0 zos~iCfyN8%=ID7;k-b~xt6e%b81&Q*Hr)YR)NvABjSRPM#?@_`V+AjEz`2O4fT5K2Ro#o+-%H_J{EwV!TK5aJFU(%MV=ikgj%_hK z4C#meR>GEGU%e&RpA{YTq&^btmw_fH(LW)UIcnm&`GLUJ9XhO@Dm-b4GCu??EI z4vuEbo~zc-Z|XtECXq-qaXJif(t`T3X(zg(QS3q)muPy*`cY2!YS=U}(R7P_&2Coy zfIu=_b)j{jH(A)gzbBeT@*TuaZJQ#aq-lS}X5wFtll=iy%9T#hsQCO}9;u*_LA)Pn z0e6(r8*8MiN0Bf|>}XnCWsSXWXAGB|>pO){0-b|GA_PW2tS)`Ael%q z&z|=)&!!TQV~WjQkxMbIJ;iKGAps=Wa2ut%5v*ZsE!GGKYdI5p_7W~3sU|GNO0E`l znp`3E%OL*UcOJR_rZ6yhJIOjA_q3Bk5r^HV%bnbvk;LC+0#*9_?;oqH6!n~!ZRQt7@TP?q zxufg6e57*v<#L1>+o9Oo4!OxS9MMTpGB1mt-sfcz1?J@<&-K?zwNaVLMN)6=iSoj8 zQ8bZR&X^S^pwcjibq~}7hTLoB>XEtG9vpCFk`3fY_C6DSShBs}TgePylk9!aYaJ!K zLSaa@P1R1XS6wRlPS`bwUG}Y!yxcb+Px4k{MOxYF-69ozyOhJ}T91~j;H7T%Ax!?0=W~WYg7n*OQj->;=|0&=L?Mt*( zlF+C>E5Wu+G2cfyer z50tVMd{`2{N0h$XJK)_G}5%o|ccE!{n8q4AvT63mObJyO9Ctcd2RU5pgjf2biC zk<*(gpKy%G=IpBkW?NHB)dYc1a8yzzcEZCESIW*Lao_ioIMAY7#zmrfDCz@?ay6_P zX=NE*j!Cw_AMMCZ3MSgs!otN7y&68stami|RqHIUgC2CVFyGkwB6H^7~)&mR=Pd=77AVN6kg9C%tW?Kd`V;g)O!Np&IFf&H%9N z?y%?eoLsQ2B%boAjV|IL!@Hm_2PxHU3|DVVHxB83R{y$iM`k%S_KR?atzxVI|$NGQs z-|8=-{bojOvHk7!U+n9z{Gs|2Gp*Yy>`#Sh`mSI@a**cH=lk zSw|C!u~|*4Q|To4{VvLJJ28k`d*7LE$-d%-uYs{N5Y4NXj`qTnsDZ;~>M(kz?xPsYHFs%y%vlyQrKfQ58le$>Yv()w>)~c%wt$8Ds4sk1iNJ$+ zf~chj^95%&8&1~_B>1BP_*vyMO^6;uzeFI(6*@VM14sp zjWm^dQ9vwNRIiRqH-`XA%G7ueoAFLv5e*}S=H4u-n#Mp9@_1Tay}jY6V#69D7(L_^ zfqVURK)Xbs70S~Y{|%lXwspQ*Z?izy4%JpftHoY!ul6je&1NFhj{2K2jlHY2*Vy*| zd?$53{gZ0OxmwvUK+lYS2IaHguHyhhmPP0`#l*bpd#8v-6E^O`x7j=Z#PmMP$QLw& znly|4SOd{|6Yp&;16!tY!Y~KOd|S_Vq9LxTaK$}yLtfzk~N7=G^s>NjQ;r_u!ddjPyf=ZZu>xPa0 zsXId%voA=Ft4OD9Cc8jWF$vH#_8u;*1tIpPFBUSvMC&?rO)O_swEj9Kag%=H`FB4d zCbr=ENWZWn>D^5Oh&Ve|445Vo%MP-Hd+rlS7+1oJNhl=brRVn~b@%q?=Q>~dxebv_ zJ1EnNJ*@Wq{|bw~gOV;_mzQ8r1R&>(3MV%(Iy86Dw0!D;YW#3P1yal%!}my#)?Jez zWdtUvqsV=@jn@W#jGCJN(ut?uI(NVMLsJ`C?MAI{IA`kHp5c9pRj9wB6}KF!)6ma; zF?8kGLgeoGYVcaY7TrTukTZqKDpXl}rDF>!_3ffPfI9}MrUOM*fHns`d|9M+so1cg z`3Cf+EE2;DQ_M@0qK6;OSvK)opU}D)u@-qLtETq=nqMvcf+Ywb9SRj4u*B`M4G%0f) zv`B%I&ht5<%O{<3i`USMXV zk>DUIME!mRmIzUhH+IRH8r6tB zq0DGh2PCl@Qy7=UM}(0TLQf(_LxwV&WQFoJT5n|{X40L?ZgGMt2|0kori9Ty)GPA| z=pZUs-5&r*c0i6nM#3PYaGJ-q-G&*4zOkM4pp0sl?rWf~I5c7!GB{!V9=)94sLu6$ z>wJ$lV^Bn9RhyehN>!E@^e24MYd-lOYANyNxTvi`oSM=TPSrDL z>^+i)=HIUDJ&Lz%C$0Bb$+UaB6$!yRS&|qPA!cc!@J6CuOg43k|LM7Szv}( zXP-1Mz=(z4;%4>O)o3~i+jct(bua0>;e7h47Fs!`bW!O*m?RtHl*Ppf? z@Dr6(V81d>+d(U)Z10%s^*itG#`V%{E6jBiPNLx<1HhcUJ=sjRmTi>U&ol6qM8lPe z5+AVVa$zZxAzRgTWqsRA|CoZ)hR+@A?qr`3R{GLd?@pJA187)m*YI^{5EreE!t6+p z>-%CBz@?XjCpHfLoX=s}Bf8#=V2xu9zV7$r|JDYR7I(PT8?M@DN<+PdAGx_>FeAXj zk^V8|CD5@UCyi12PV>`yf(z7`JP?q#)Lq5lDnUu_bnMgj#ZwAz(DJo|C?&gC80~;h z+eFyG{}dYl*vQyGJ@DxKT7Ir0a zLBskuYBpGwlTP#36{=2r+*^EnwnEANqYzek2=Br074|%YZaypyMIQB!k5@nuj%@V| zT7b_9J3$XHvJb+wPj6SWwTj`Rft_LQG4f?s7N)<5^nfW>A@nO#UsaF1{N`cF3$_(U zuEan708(nokA{}QXMLCy*5zjLRTeS1im;!s=e0@@hc3sDv^wx}v08ei`#T?+W_i)= zC(tJsjGzkPIjAE)P2=3Zu3(O2k%dW6C7rT?NXTEWFQ>jI#9wab>BU9utJ|2LE?5vr zo2np_+BQI_F4Y@a1FE7dDr8`~Q`tbPrX)cd$Kg)@WR7vd1OCdDjDLpqo9&ZhFB!Z= zqTIe2+XN)N)YFs_9SjLHyQKXtr!Djr1lC7<-N~{bFbU-n^p7CEA`HYG8~^OrM_U5S zjrc8L`0xb+)1Rpm^x(KTytL}qaBkn$d#<9`^44^hz?oOxc^!9SudY2;O&m?_%KQA0eI{(7D717<7n^u@vv)@u3NFCRr- z4#(rYs{wp{?|LP{UYwK)x&y8c;C8N{IC~|#_p`G^x7;7}LUhN-z~U!FbES;^0gwt= z1}=aQ3Mf?CKr)wyYmmVOnG;XFyYu*{DXkFOmVy{ATVP zSl8n6LMyI)0nyK`2IKp3I zJg}g?gMEETAGhn4>wCbU}RLTe6<)tb$1ubgvw`p+mq;+p)Y1wTGdQDpfHu{M;|IvVPjTEOH{?3ricm zDXrT+P@mmRlWDBxD$Q~bP;*uGUl!U^Q%DjgI(8W>W_^^oGiOJ${zn4lR-Ym2Py1rpjVd{z;_m7Gbb8>!*xxSe4W8O)Sx1>mC)T5!h2z{NNvyZIfuY z+kb2X_Y>K_w6KdUgPs2Ebixx2w^9g;=j*nfK=;`Ldx{MzcF{LGNUGxmKH1~sV9J&I zXtiw1d!3rvrglw_=)OEV4S}2aS;mboYf*`NnP&I1@LOxuqxxFauv3za4=e5C{yz}kS=OYcoKQSyc?2c|wvfZJZ{9i6+FT08i=sc@9+mAo@a zIFp}mw4Bn+M9#XeSWYtl4bSefkvZI(X!t!TxdoOk_turXV#Q?+sOB7$FGn3mPhG** zt9aXFHY7DR-%B)MiKgu-%u;Ze?w2D8ns(Z8nc;2R#+Yc(oa*sGP0L0d2h4dYB&Z2a zr!Wr0HQqZmGo@wY(4f~2YcynJ+14`@do0JyY~*Rhj#fdlGy%b(zh92h%5mHuYis>m zn){n5nHy1i{q+rv3NEeWD&|T~RHw zr8l@1Rx4)TcTefD49*+!2Pqj$BA~C5@kwrJOmC&ZEOVb>fs7D~f-5s2V+G4)WN#fJ zHpj0HQ`O2eiI>k+S>|9kT|+Jn2q~x9m~LdW95pei^Nvbe?W&s05r~K@X{|v-+(Wu? zVrzG>e^l8cr^)=2@qwAZIHBsnVJZ_ogWSOoDE7>7;L@IXY4~pDRpQW~%p}^UMgIz2 z1IANl+nnC4=XuZRvAcMObMnUuhOA2*^%#spIH)8Y?JZ zDS&BtRY|xUyEKTGzdnVXebtq!`&A+n+i+l0xMmv~e<>VO7OXh3hJ&bv4P1Wt&r&*( zDoqtZ{Pn+0;Y5-_DG$%$JWXqU<%mt%y|U#8OExBkl1 z+?3uaH%1k&p}&ANM)A&8L*7p2ttP#cw;Bsu*1Cgf$XKsCJX;E5ijG5JI^c!cwibn=x0|e%5q&MSGCAXc8#tP!73UyDLufPz7)L%! z;;=&fwz++Bb@YhypHi4RwY%xdMF5X|^562GT_4f6J1PH8K7WJHU)VY4OAAgw>=A$6 z^4eX@8=Q*ViEO&;d_4sPJ4wULwDz3}yN|0F%DFJFN%J(Muq+TE@m6nel6(gd&yk|c#5T2iI1JKo}a2j?zgabk9HD!mZ}1E)an(+Gj| z+21v6D&=VG%&8p4^|ToTK~L-o2-|=iD#)~XW2avHeKf@u!9LmPZVG^k^)q-(=T>%Myljd6m|EGLw!*gp9BgKEr&%`7LY|F z{PZy>m-(x-h?vz@=_AT;0QrTr;HlcZ!aBn2ClvR$-XUZr_$p3S4)8E8`?-$F4%I?Z z1+&CU16Q31@}-FzC# z8(xTD4U5Mvn&Vu-w>#xYdLUi+w3)mnX1*!*FR)1jF>Rs)knYv^-L1jG0q9?R8nKmd zMi;p@1kxR{t)$Cm0!z9wQ{!YP>Jm?e^96}{+?UPC?=C}8t^&Ksb+&Bn9=Tdy$AeuW z;*Ovfxm#7o>%?Xks$h30tn7~VsZU!Sfe5}Uau+G}y~Nrv_3q4hG+pQF`OdIFUm-cp zPuA4qN~WK@i2^iPGe=MQNj;+qr79KN(yX|FFD9Da!=?;wks%^2a+iHMBK5U5Um_|B z;TBmg7$}LR153zot!4$aj`tajtQbj*COS8g7@Od5r+U6q!S%i8>Io9Z>f_$9Ex zBnfGcSDD10toY!VO2uzmlO9%S+Hx%Ri48YCk3^GcrXLZ26+CNOLkbm*rjn+hWR6N!)0?4cCw| z(R3au`>*E0stPjq%%zuVA}MAYp%w1un$ylv$1*cAF?|Y2PpwQ1T$E^9M?pcaivUH` z{mj~59pZsaX8Z;5Wm$m;?am+qx} z2N@sofqfcw3hXL`$=TG*))@PYMA0c*@tfhZW2)dw}2~JjH=vkn1K3774Gi zw>5qvhsJl;(F~~T>WFAP(=->rs==K1+vcVr27Z1q6CbzST4{@hL36cFR-^mn!am4d zPI7z#-d>bVXQDcNu_TwlBb0XCRndP;0h+^Lx{b7;$GNVwT1&0y&&Og z+NV>{`!0Gl{PsfqUo5?Qr<=u}wi#$K zfmZ#aplvJAeoq0eQlM?;LA(Cg2x#D&`>%afk3TF4K`7e0Dti%En-U8TZl*(OpJ+nj zn`^bXG0EcnuAx7Qd#(byVHs2dSJZvHq&kU2$sE%`qcWYO;R@yp2pU6bj6Hs0TMrI} zWA%g50SatjiZllm#sUg!4D=>_WgZ&jS5wOr9##WSkWhnUT7cms3G{72@Fq}pM37Zn z1N&wR`sdvKVk{|H2~yq6}2J3aFTh0WLR zLm`DIRU1)%cD6w(m}4r7jm$d>wIBd&$R9B9@8d``78<`YZa;jjAb5B+1LRS_MAub4 zQo!LNB^-3`^=D5?kL4UIRJb`tF-`{j{jNI3Rmm<-q{ZL&}H!Dh)GC7JuggEX}`LNN44k=q^ILgy_3II`g+x$tqa4qbLYaaBg@2YUqoUx`YWt^?pRuawa`4RVhNX! zxW`&()xK4#S+F*6&qWY>&{ACfPWD53(`uF^X7A%lwAzskn>y98eMovsK+!Q2xgj!J zGqL;6j-blAsL|?G?jn|c6FaEL?e#$?y*XY}5RMLJUGen*RB&Y^)AK)W40 zP=ER`!kMK4>M(#(fx|^4y_m`>b$bffUn!Sr%Sj^)l*)-Dg;%G7o8-Py9Ru9svN$ub zvezSZ(ApyRrr82RWh}u6Q+#Lm#@{+7dpt~5ZOMM&lb!NXB$<)&$}pK1?0!DkjY}fQ zjF{(=%*`bS?C<-FApXK5EE|*_oAZf~#~zdwKySl@#5_AJQ8xbrgeB%R(^hGB@7Tk{ zzUm6{%pTEuFS(b%$h4}OU{*6>a-5A!1&5~wZb&p~K{T6x5?8hn3qY!IuZ9*HY#$?#fs-xFVI|jF~uIy9LmlFav%Hb_1F;>ZAt>zP%Ytq;M4j+sAQcadZ)5}_1r`F?mOFZ>napKyA zt@|mIW#BF;Dagbgem}w;#`Zs_f1{>-tlp2&_^ytmtqDAPOivBrDA>#a!NwJwOg@~jcaLw zIZ~~C=hzT>bw1Ptdv)FV9GB`!z&U1wqHf;|O#MOImBI8m@XH=;+@S!+2?}DLJR{YdXj;M-lXj<=nFR74SPEkl<9g7f%oG_n zs5-Zm4hsxouRcp8ZLF}9@fL>b)(+O0R4p63G9%bE)rYL*_gFgFF2&1~z8Wr?dKTyG zT%`ym{=oi3HX`0q1nG40Jl8Yw+p_8K)UI!mcH$AFstALno z^&(he-fZbSE+(5jM=w~O+ca1V46l3*It+|yxodksWr|KUcdrrUFzxrO#7W`^gbqV|O+ z+RXS|qZ(MD@k_&>dHv+jl48QFMvdbpaJrZ`51x|WWXWgC8h~SkEBXh|xXWv&Y0=ZH z#}r3F$rQJ^alX+8?sEGUBEFU?X7j&#l!32LGW|c$@g*9VOy+ALQI?+;{?ISNKhUJ{xrp)sC(O5-4Ul6M_cXI=*#+%H0;hR--9mZiZC2jo!tyTs zvGRUV2%ns|NxGBW0d&c-2%y&0?pjbVNs`gt7zNILTYj@^-3Df9vNu>83gA!7948fA zpl`TT3|gF*=!dfDPi*1}G|% z4zo}1-jm%9*t)s^ZQ;KXrvp-1>`Tjd$}&2JE>l)(PixQFHNAJHgr5Dhw{rJ$`ywq< zbv8}!eRa+quA=!{zj4>t!QI}tOWRwDSLAoNY{d?jhJ{tw5qqTOzZ?=hwIQo3;99=z zOl)G_iu0G>0?;k3-7j3ul91Q?tYB(`D!CoB`#dcx@AG2jSOx5*g(f?hpve1z$z}*C z(~Ij7`oKL;PuRv!dlB2}#LL>Wz9<|p3Rc(@+cDO%K#yB1mJpA$8b ztXkMHiP=x>f($RTey1Lq>&u^yB&8hs?}F0Yd3PYHmyo!y|C>--$p7wp{0)@%;Zu?F zz5@tpC$Tr#x#&dhNS;Vy7Khw!;m6;!z;#XSw_ z75Z)Y1_~^L0wo~@Z1PZ@@-7=Ur-0k(b;J60{?Xk(j=BvRtOuWk`0ub^K=`LS1NAS2 zsQ0#p+luU4*e@_)67<7B&_pZjS*`rT)!SC+ZKUt|!DuB2&&~Q^BwHnf>Mf~67G`fa zdBT+kmEHu+`Pbb3Os0q#sAw}*Y3&1%#AMFI-MQc-7pWn!QGrDGHK4wHd!lD*|& zU%Xi|<#&e}?CrM9=QjiGkE}0F%v6sL{znPkk>Zh&ZZbDT(mU;?zI(4E-BMRi^9=jj zp~z_Vh4G?6H!Bw!>;NNU5xfr7sr&HF6xEr%+GKkN)9myKV$bb?6E{=-B#*Y0u0nTF zW@7h5+hEFC^t1Y9d`_|{p?y&!^3!s370ONhs`QFpjk%@i5N1FCH8$(B%qV}N z?;9JU9IZ z!b^#u*IJ_1VT!0zM3Ex0di#hU3AbO2=5D+ZzIqH|Mf*>a=aK673zqyNAmIc7jfP6P za-%C=$|{kMKQ?Fmdv0Bk_7^XS&3sU9i%k4ayUXd1_u}mvI^|tP8p5~LZ=})rLRDVo zn$Z--4hi+F)AgRp%y^fw*+~+x&n9gj9x?I)Wa1yaiz5NgNmGWxTxt%7y?<#7V?dk6 zPNxwJ`yXrv=o~C^X|Iob6%cG215Om&?=`>ftaN>^xs33YstqNl0q_FP> z{~gbLkM!R!KNiMIZrr*dmTA5MbK+wleDrHAgoqu#n~7zLhn9xK_ETvjbn_;CCpI~_ z$o*#~J;S`%$A1<`iKai0ozJ(!&+GUkU&5DDYUKp60l?2p5C?B%kq!9WeGNW^{{cGY zb+Cg;rZRh6rgY2e-U?#hQyyLtxy1~=t=Lr9zj>+Ni?UyvyBo@6V(Z_KtVmu_02P`V z0Lr9&Rnp)h_be4<7tC>WZ+eDJp|-UxeDH`T)wE@93MpE-c&=@ZJE23G*h$S1$KW0+ z?y!&4S5xuJ`$nQ{nr!!6)PS8MQRbj7%|$gFABnP^DW85A7C3)MB+6zVSLdQ09vF$T z*}o?($|bJ{_5f**bg1nUVPP1O5gD&ysYJ)WA$rxGT_j-Q;nOY^Y1+GtXRgDNcq(5( zL3xRpJB!T<#*ab#8_3u$kXqBQ0@SfIc-XSZMcIAaEzmL*NO^nWnjk`cji-= zL;ZV>xqGhmG4uc?z&LZbPBI}=jD$FBeGtfFhyf@);={w;21ds2C zJ&{jfQ$^nIazd4Mq+QVr^uf*YLoz>8+kN_`PPn)IMbtsB6Opl0=BYA-Pb)-TCY2OE z9pNns3wrhU3E1&W1b9;_TXCJ9;lr3#NTqLnM3wX^vBV4R<%0zstcNp$X}Z4E=Ty(0 zQ4y9yw>KlndpnB+R|x3LDQ)Rn^r8cix5Js%Ojf*iP_Vj8x4wX@%X7Fo`D%}=(4D8s z++z#i)a%@zd9;oaod~UTx9QXF_0Gi3-@PN1e*3;r=?zfds}`mYJ6KrY%i28$P4 zh@V(V2!cwlHi^+2Z8D=FXHKihBk5+7iX5fLO7}C$7k!aIPPKApQ)l*?$aquZE1fS4 z0mhJ#`uK^Rekm=LV5%g#uCN+28EophG?j*VUbxC5Bs5F6QsMr5;eyGjA7BHL$ znH|NiLF}hWu5PO<-$D5s_o}aB?PX?cnb!HdO1-IcuZ^#g3TpF3^fgv{aI-Jo4c9neohKJgTVRz_d!s40@B5uk8FTdDCvYb$4l1;jhI9;4B5myKNPAyjW)- zjXNaOm{&#g){w_c~P^l=r3*9Q=&v8Vs&9=bkJSO;Xl+zh#9bN5kFTRGeLh zmguAA$OKvAwkM25Wz3m&x3`u45J^^cyb|KE$L_+T&Em|q7HjhGQA33P#$_wKA|_hj z*I@3opmxPZ91knllMrjT$FB^&1Rb|RE>=)D+ekt3S(k_o>6<(*k4}mfO-B&cE`(-U zf^)($r?#bUHc9;U2P6@^jTI}8f|W<(P1j=a{aMOLhnh`;>L>qQ!#iww`=ETQ43@AJ zfrms?1ZP?$aQUIB%(2kaH#XD#&EUXC{{+g7ri0$}XWOU0O{HJeC6DZiUi25$x2E+i zi4`*+BJtrRo0C|xAHbV*3t7k_44V~=(P?);8%u{I9-{hIb16eeV!wb)^us|IPML|o z!>C#30IX>prMfe*rne({Wp6O=wtvU;%EL?SF~A;Pqa)yBCEyI3^aDJTuz?{6QZ^YW zW3@~vXYw_jWZIH-F^cHxKm3wcc5~AXwr?wj)nxh@X&;aC5s~m~)JfW)>2gb@l>{QI zRuV)dUb3Ja)Is1$^tiaBCS!c=XHS{BY1)>YIRnpcB~1mv&6xz$~tUS zR$FDR%24ldaM5whDKz|te8&gptlG%tnN=|AzHi03h)sO{Id6-PAOLzYx#TA7Y%=vtFLudMY_6YM25>37{zG@BC|TF)b>CjDOPnLIhP z0hXLgjLvMhLkxh5)*vnuyW+)AhJ#rmI$7evussmp0`X#NWQlbk#dF1jXSeQ{VZ2Cxpn~ zXyk7!>!~QmJ^mP6`4`|jq&O!8we5P22^+8Hp8fe2g>o*M*!2mvw^>bWKIYNhdQ zz1I3OAswk0>5f)qA4m)b@rJG&yaL<^Pp&Tkt$#x>+@p((`wy`PfX)0MA|`z$CZA(* zn>oE=Y$U3eqW+qT8udsdN}~a{AQ$z*6_Kc-)B&62 zI?keU#u(4}rR0!fzcdw;V01F}m*~JK*q0sWb0=)R-{hj`nW)yBkN<9HI%zg2{qOrt z`lln%Tbu9q`M29r{(Vq4kW$t>>V}`#Gh>eiR;+K%Uy8G*Po{;NwaP$PISUY;i!_$k z4h9M5E6=b^&{KFIPz<%gBbTh8ci7;kj=`HDDrvL)$NKy=Tg-p^mhu-i;GXC_m@Njo z&%DRiReH`T z>ILRotqgpLt*I@a9YLxC!l_(CuAgaTL7giZy1C${%coHd=l|Vd0I**qb_N0A?$yC3 z@a}G-^wwb#TrR_ijxlZc`CISte}mf{TNfg;9qix4%-z&;6!-)4$_k1PSQ>ldg~>%_ zdr2nZ&C{fL{& z-9G1g{9DFkh(J2_^XvVRJPSJghYBiR8k*8?g>2kmbWVy@OdXCT_egu?ad^7FzC9yYXeDRXli+aFm zFPW>weCg%$?HwN?4wHQ)p_Qqi`$E*r^cK5NNvQe9_0q+P!h-^2G~DLrmrZ$v(!QUD zkkZHOjyLTy-n&@sqo|8Oh7GZkpH@3#uP7b-7;Y-f41QJtnb^TZyI(y3W4=cnz3tRa zf^U5%qI^t)@B25?9KUOTfm-AM>>z))QZf9Kln$a^euCJ2i%hm|(W7ttE*_lqA30Wo z2KR6!SWwhB?Z`-t#Nuq>krs5xBeo}|Do$rZo}i0jFn6aCH2t$PvxdXp42y!uAI=9 zxboLZ1EmJwlYCcbX^Y)Ryjy|XiITAIY=xh{{DyN5JS#mrNqYD4%~GiFoHC}T_a-d3 zMloF%(o1(+Y9V|Y)4H>sY%hunJy_TD6CKz-ec@P{jOi09xc>oG$He*iE&(=QD@0_**?O;UO8nMvS=q1-}Js*oClS*=DhRKqaY|eX@?2}Fr z`k4b&`N392y4li=WQm^}{}w-1KQWb_B0$O+JaasJ9I)x0!#1Mg{+q$~A&#GvGFpK* z>I(z)(T?yv7bf%Yt+#_BxbLhZe9BK@Jwy2BuLHE#*76h9|C?kahk054zNa>M=jjKJVJ$#Q_!73X$5eBYIWbOv#si0SvM?pq#;KoOIaN$yeiFMGE9vKIO z)+F0SvBC3J@W4%V9KF&)w)$sC&mj@i{j|;7qz7L_P($pu{BpC<+S-fL4P}BN7des%40#wg%xFdD_=GxYnnu^XU>ZdV;j9?wj0Nm8mss3sKrrWfOx@dhp{22;(9qU)c`j=i-?NI{HFM-HDd|mD^h~adXBqOlNkrrV z9*}pSosrz9lYx3WG(0ogtM$%_S$ohyq+4uRFT@`)aADnU zEYHDjo?4%H^g1do;u?=7)s0{4?691^wRkS7bWZjX$el4if?SMe_Ak8S6_Qt&Tj`5i zGUi7Vl8trtB|;Dx1y`a1Np<07sk-=7BP`YZQj|ww=({Q^r@i^|G*s}i(KIJD>S*Y9JqDOHXK%@)n-#>bT1l=n0xhqUgj_~juvN}R)vzgBiEB2(` z*~9m6bUBET`UqdKC-sNEqpja8RZpMFllplf?^FSI6qOf{8r2geHL4~;>Kn0-K;=%^ z2#ySu&j~BE-h(>UMtZS-34D*|Ae1JHVx@aT-R@zk^067XqCq{ZDIWUJgExx9~D$)Qf&?2be_0h zx+PvjJ5VJ1ph%KlktB19giDVw03lqi8+4zqG(0Su9$~3n1;_Rta?kM#z^g>;g;={+hj?;3{by0M^X zKf<(2D$7D~Brvr4-O)j$YoJ(6mW|z}PSc=bRB(%Uh8}kGz<27F%RfoayfnQ&rP+cP z#rC6!90OJ#Rl@L=r9{(1e8@nr@Bo$6Z5=F7f`+!@+H-K5*B)n+MDAleC@4+zr0Qj3 z#J1cSFoiC}*G|3JE8K_bcbao4GqV>X!tL>P)0q21d+bfKVYlp^Dn1FJ?rZaG<%-68 z>=?|-jg*o^(A$Z`4c~XF>#}6JaAkekaE$qpjJ?W#Zdk__0cX|Z8$+{(iVS#SY?77> z>F*jBDcn{(ST(J7mmq{DZ(GJX=rX2PKkUKaiNIDGFEseIO?mEKn`E z8os1{k$|!z>bLQ;$Tpi}Gi1XP^KMdfBlE|TMRV~7cS94@u&E?5>-QFhxz0|)L?dVJ zYPLGjq?6~!xzKXfPT;lKzg}olhtoG{Qn>C+4Re2P11(qmV4hM{qLkK;m=kBKwCA6y z*0Ug-I~X6e+cuXvCUW@mIKIc_VYJT7kxz>Qq|+L_(dQRw>RgbQx*h+6STMm`#>#wp zP@2zdwKZ^gt;rS{NUTgg!%Z8!`WY^alY^$V9t9jr>eaa7CH2jE3@ez!t}gRj%Jl zrkWo8M?^JISdsgM>>@#Duy)ZG%RBFiBr`?cFHGk3{V3nVKJ)KLGE?NrPhq)^rjqW> z9r=p%o$4oMKzm0M9WPe7t6sEr7t3_j(j zu$;{^8wKp{!n)4Y|9Cv2;LY}ap~X~jzp|Xn}c*0u+)J?Wiw=9+S22{A= z7(S5gwWur3s5?=FYR6t5PqvCbM95~;9UdlQgbBmW@ZHio(XqQxSNSO{XOSI4r|8aw zu)cm`lI_%unh_Q5k>v*8?wi5)h6tsMR&m;sZPJ|`;d>-Z=HYwacgB4;gHQP>EN4dC z&rsjJ0AuCqf93E9b+9Gwo7M>G z9|g1desd!YvI8=L_&KvQ6ES~1!iIZjPiZ2WF!KWamG8$Rj?@6vjk4F;kh{+F3iaLZFm z?Q9RCBG56z`y9(bv!A*h1ll+QEzhVno@1(B@-Rv`8!4QPBtbX;iulVCS6`xpbf5H? zG50_?L|)gXm6>NWFg*~vS&BgkmiARs@o*PrX zn3#89H_iuOd|B7M?Z}=Du`a46`?xwlOsrgIKXZ9*N<^$N`dNL+#YfkJLQpEqq$*zn zyNA1gSJ9a)&iLw(1U22JwYFWco2q?rykQ=MN_Y zLsPkpa?q;a^6m|7o$+aBdi8kY_@d|fkv+?0nPIx@iXirf>CA96*KKDfT3uzui|+o! zOj%nj1i);Goje2f5^BC<#}eO1=e|GHw~Q{iY^t+QKHW!!WDfj%-tk4*JKRs}^%c9( z+J@(%5KT^w$~_!qS@Eqc?Y7JuQhR;gy3sDuXvI z${mR-y0zbT9mGxgKF7Y*9JU~@kVw(K?6U*^5Ayt9E&liZ?0f+b3T8-EwVD5zGhXX8 zJ(Or#MVYST6B!vLy;;Pz1JwN6eIYep`j1577?N^FkI&Gk)2)`qj^ImwqWMrOPQBk_0X@Wt zE_GaD9P3qGt@={I<7@QDJZ%r%tlF2t8@u4a^AULu-ZW|vnRZ}J2)3bR2f|WU&ao=^ zqSEd^Y|jM6HUYx%ewff&jguxN>yrT%Ym=4A-Td4625jSUHaH+&AoGN(hTIW8oYoPZ zrY2|nHO-X3L4nL&4DqWOsTO%`_YmPh`6@EH6lAVGJmsV!JJ;RKE;Ccd*}yG(+DmtZ zm)BT#pwS=rjOXxqJ&fFXD}712rS$?H9O+Ty?zqPHbC3m;pHKx`ZbuyXYHy6Np)GYj z2@z)>{WHIT4e!abA<7gf%1!3wnTa!fAghg76Lmk!ogK#VrPWONXuhT>DFE38#gdv* ziCCF78BbrxEjfrHhD0gTn|`87S|()|KhY?+6F;I^Vm2__SOKh6Ak#@PeFuKuPHgo< zAZn_mtLEaGRtZ~BfNH~DUruKfsCc1u5Vba*!w}()+dRHVM&3;M^LSHJ91(E2eFy3J zDu(WqyX%;Hxmm)<;@3lTuu;Oz0KFox2Q?K;H)a&#Qx_`6YNwlCTCWKGWnWxsM}XV?2>!zq~sv_KI&< zZ*T)7a#c*#5cBt3%*qW^*cSVOZ`b3u7WZr}ZUni+rIic{BXilFNU@%RL@*!6#=JaJ z*x4qt<|sBOUpUoFo&lH-%n9_SmBO7}RQ ztp`{%(*TxYu2OJ*Xt_dl9jR7bbPwlt8~QWR_n?>l=c7JUW1C<6#n|Sm3qV63Mj)VJ zwM`AvhUH%y8b0RR#V@kBdAYdbax|gyi?vUjECo4~@cLU3i`r)4KYPNe`Q_QbzR;9R zlz%D`Gfg4Iz{u6&+g7$WXxQ)QCDT@2V{_+-krGZ67Xbpw3nr}>l(@^2V4h)=$B zN>SVLbo?DcgZKbsKnw@^AO-F!R!Tgh>_L2w8}%sP-X0v?gR#OS&Jq@|PTdI`uNu5>@virDu&LQHFq}z&?gF5V23MePL5k=G?LN>gdv zP5-v@%c#NJ9Wpm7$(+4T<`0A+#rx0sUW_l8YVl+GA};$ZHIcOST)38onBBM(xPn+U zjTFuHkTeCcn{P0ZT)~58K!$}f6}L|Xx~DFoyI_g6} z^5)~oq4tnVN#^63q%iaGgb=dU?@dw%AE>NgWwcwwdcW2SkQtKSzel9^R)6VkcvON# z)X&#NWDc4XxyiYx-N#3Afvh5TmPNS%C!!k0doM#?wro6gx3E+&2F)kP3twY#2fp@~ zua81@O_A|0qKyBSjkSozJD!e@;H81f+%;u6GMDD_FU8!sPKcO;a@6`G zB+dRcALmNW0zHSrLItDM&Flq+wrUSrVhn7__^^uh6ikri?BlS@*BDQ|QR7hM4B`gA zzMobE=keSgw&$)d1Z(VcjcS%N+Ost-68o`%DSRBvtQeeQ$~`k*kD%A{6Jg1SD708C%RC!=!n*lU20 zL@I6`BKUXD!(SKoMWjprAJ*OlzN+Ht`%jRgQHdug(Wpd&#+rBq1tkg^5Oha_f?`F~ zM-;VKK@k%~1x-u>95+Wnt;I`QTkEaW)=P_cX-xzTs8zrl-toSVvDRA!(USl7w`T8i zb`q`c^MBubJ~{g`YtO7%v(}n5Yu3ydhh;w=7=FALwN`smju-4~FIQw%I{~i!mH1;t z(3{tpi}enuYA=NZ3_8Q%R*})>J;BIRff$psyd5KVWmYJD#tgI4lHAtXZL;|-h;K&Q z6|$|#A081`q~~i&`8Tr(IY}W3x*F@K4AvG5aJT3ToBX(FIO9dfB&u_zdK zo$V?}UGst`uZ5Ta!m@%>Y#`$*aYL` ziQrZjs;VydB{&`reOe#_M$=xm{7v)ws@I#F- z>B)$vqlt9!3wPE_!cbCPH7X9jU)wtFIfAcx66gU>(g+WmrJCz3uINhkFtcl80}yUP zD*vg*WjruiLAOgaN>f+q9-dwY7&S>P)QwrxIEadGgk`*B+jizj3M0ah zu{T%4R^kZAF-S1UwtQ=>@yZNxmXM=FL9{_xp^5d>nHY8fxKSI#qp)JS8qwIXn&#FF z%8KB?Mp|*aBwx7%jL6DvU+hhb1A7 zveNikzZg~L%*BzEn0lMvVBd&US1_j*?0&U50rCS(daG$cXX0n)yC$L1i>%VUh)vZ^ ze{K=LnqAC65I z|C~$bD)S6<+%2}Q5E{%3v%wo?)OLu3J`euDT2Z4>M^i+qi>A3<7&~6KLOasry0go* zUoO|oSgO&jy-b02(Gj8qA|YeDR+g=r<(J`vAC;c3p{8RdpzMk2Z?5X6tch|3;9A<9 z4ju2-O3WVUUE(j&@Pr<5m*kQZgJRahYD5Ut|0=3w)eW8ZS>j2h?46MvRnH@~#u-%X zc%^_F&EVRWb#lCt6crxC4IRh9dTwRqTRPES(8{OjV`poH3N5iM36MRpT?BAI2PW4) zc(Ygh2$j7=@*VE9VO_(C@WP|U_TR5>lXHhqsc!mhN#g4BoDuP`Dv9r?f@^F$nnb}2 z`cO1TvrKz)+)x?c{AmcR7$IRx-yk7sFHw1{RG@@{^_K5Q1;WbNbv%eyZ&Qb5Y9&j= zQJNTU@(vx2`2%GTe|w>`>tcSQLFXYGR6m0JtwCx^+;l=ZQ52zC3llrsq-Ng?Ho=91yCK+`0 z#bby6L;K6UZj^zI<r=bbaVT$T{=_h@Hsabp_eD|k#l`v}ohY$q zT4_DV^8DGEUt z`|^wu=*LA4>5q&g=-`fnf*Wse<~m~nZ(z=Ys3-PSQLL#^z&$EMd&K^~Hf)v+?>mB6 z2I^*l8)jJRyuB!dm}%sd$|o1(q_NEtegf?Xsp&pWFH!;veA*jzVikk^M#7tLeFVBv1dH&Z5uKT{`xx!0c|inzQddLc?fQbl4|1aCi7}t zVM#$SmUf!#+6n&6&8IxoAo^-s*6d$5{$`nh_!~X19*-`KpTyFIA({UCo+IQ?(@tBE zm-rCM6#mLUWc;Aqi)mQvWmCm1yl+a($|Qb zy-@uNnI>E0MU+FcnoeTh`3{!BWTPrElS!x?gF)ti{qoD=LW=7u+7&WY)Qeb$HGUicO9X1)|}GQSKI7TX%>JTOA1);)|xO?prUuzKS9V{^A46!{GK$i0RICY`NgNQwX$D2kzXBt_%83vc!DKb zm`w&?3()mT|C7EnFaI?xlv0hAiof8I$tjGskh$%CVLrxdqO(-=j88iy?hg1U#T8@YP*`{o>J9_t0JDCl2G$=re>H(TAx9>YUlv zq$07WL4)B9WZm(;kQWm9!9iW~4d3SlyL5Sv)3rasXH?6u)*-wr;BL^G%qkes?1s!! z#*!)*A8BWB<1vUqZ|gFEhCFimopY$`Pwp;~W{dwvDecKw$qyzg2Nw{{M6kOHQ$rf|yp{^N5xETZ~)$2)( z1`_u(G!5ICw>xBRaF!ce0MJ`bTB3(4U_Y0mWgdDvVs4ENoAwK zOM;ZktIywJp5r3rbsu@TI!X%8)KfY!ZgvdJ!njf)7)lSYNB?MGJNzRCW}UIVhni8C zRMQ_o^w)RrW95@lmJQ>g2hA?(DhV>TS&pa1dw#>OC@k2dFL>e}1H1pSSiy#0MhWEa z@Y~tpch<8pFvCyZ0~Ljty>~aLZGwv71u*;@^Fig>jV6PEQ|kmG-#}HHCZe4wm0slRfY$nP8UfLf)1||> z>Mnx~;uSXdHSR6ZSV`TrL4{wNv1ZM6>YL1d9`$cgXew%~31=3K{9ZgD(t5|iH->dx z&^K0Bn|s*Nl7cIbqOPTs|KH?QLB7t?tjk7jTU8%Fw zvS)K$%Ji>XIc5%A5WF%*b)}MKeWeR`AX&;V*yc4SrA65uX9Y>7Q6J|<8g*By`_bG` z(_c>S9#nnhsF5{C7h87l_Wta?$x&tL#NXlz{Q84#&~I@_pWTXM^fBwzB}i`I^teOdSyHOF)N1Gdc@s=Og5C${PRv{1sL%jko%@ z9ER}^W;=pA1EEUgw6%*(b^nzJK#!^JS>pG*6b?9nyKHsBIfTxUC7B%s@gd4Svq-eh z$sYkA>)d|N3$`Zv#!qgwg6}C`tZO>Dnw9G|6V82`T2S5qROV?M?t|8>|C}bM=J4Ng z4k2+VG}BOAox`eDC!6mE(oY=IBKsrR;_FFM0Dj?$S+Jd7{ID*pDsKw5QZ;*1K{|2I zZ!Vt?tfaJt^%EXBFXTD-oBUwjQ~^q(VY8HW;*e5~n~f?TMY+S&kNu2VXBH{HlsoC| zspj(g_?pkciZw33l}9}5u5Pudm6`8wHrAx8^K01wrfEa(WcoHBa+Owd-&jUN`}fP! zmbzc}skhtS>pSRM_PTnjtz(NpU#2#-{i|ru+o^{IlJ0XbHsvL%<&abCGW=97ID4D> zf?G|hHMOE9wHgY3+0vP8{(4LDTVc=ZQ)|4cjmf4rc%_|e2KxPOz)>+2gcKA%44qdE z(MQ>Vei5lMzobl?RJOgPs96Kxb~cLMa!%r_$+TWcWx~F8ln&c>h{aw!J8PWRKZbm@#dZMK{_!co4-TvG(9WB+W`(y ztKnUQ+Gy^>5m#N2TrL_GNY|b%cnCa;LDsrP)fvgV_+_UyXIYkaimGs7&~T)q(ViM8 zHXE%SiDl0`)o5eshj|Tx#cRpS3Us@s%~Bb#{J&4qXr}IRbxIKub<;hT{cALXL(Xmt zv$G%+Du&Sv{5;kk=DX31dnZp;vUy)iC@hwW7T|U~`-NBY=$9_wSIcrYP)EZ{o|K;( zffBX#s;e1yg+uLLhv}q?-)PW#7~+K&G;H|=)lj=6?JKIl-cj={(txZsA}@YnFM;rM z3s1qAqlC2UZav#!_H(@VM$|QDiZF@GtN^IFt+iZpxiKUJBxuk^{A=n4I9f)HSGs^t zpyk$`D=B9|3mMMmxSv5QGe5zy5OXOD+t1KX-1Sp)1n)|0tliBlHY5B$S5Ph7_^OM< zHW>d;_o-BhREx6EL~E!y{nDE$lrhx~!66%ZLNfKvsjpH`bR0JsJzh_?TnFuwOG=lX zh->ZjI%X(K|75p>a*;xi(@_I8hqtpu>u#Y}BJ?9?D-DgOo{825!)KwkUwAh-i?Czt z>3On}queiCX?HVWTE>Eiq55aBkBdx&1f#SKKaSE7LXg0LJxsGGW>5u1OH zs+mSMMwPHDi`Y4{PfR?tfnV?PEKZ64arH)pE8Z(z`2K7)2fFVvYYqzn`;nd#*OPq& zsz=&Kt|!eFe=iX=SYwmWY%msNZZNG20i%AsJHfBf#(_%`CF6|Xj5{OHAHgIG7bp7x z^oAXep(Qqlpr-yZ-!ag3cVBQv(j(ay_i@)%g_jmnJE@(F&hPe1H|NnG^4(>Z=B<9O z@^kj?yYg?UU|4o$XEMl%nnOIZxpHNyIw(F{sWNNSNgb~bA^e0mD?VVds+TlWcgoa1 zX_VP?T#gli`!TXanPr=Omm7=~(}{my8cN?M|A>iCoI~C_CB`9>;E*Tm6FB7L=UwkO z$?9^ZvFndu5@I@kff->vY%s#(a^mtd-f9t2Op72&)?rm)5gy(DA%!X}#Ejlie(NaNH;G!@p?K{?)N2wRRhy3S0Z-{bNbHf=*Cn zNx|<92KO;>+`q>kcRnPceTL@zaiUqZNs3%#j1Lc~wejHrM4EIklnwndS!N znVSU5y%@5<2N!a{!-9EHjkGX&qoBE60d9niho z$SPg<&P-4tK!q+Z@e=oLE7^3Sk$dBtl4l(5MIE~em!c^80$ySQ;L;CV$weIdM71?l zFpn<@nc$dsc{!UbAS${GwmOJ*sgL{$-T0|mO0~=WCNX}B&p*oc5i;_I%4ca-RkL22 zX&Oc&BwMsLx?>xw#vn5x`NS_g-w+Ias(cW-RPoKHB4b$t7g~SV(Q5r<^S>!0*mahg z+7w%|uy|#(E(^4OzBR1O&0Q_ajz@wISokVT^s=Di1_4k~wjyR3^bLE2tf5+mGVYF% z3%bnI3Kb=0M%taYEM{FFU-IbXR~<9gOa7U2#ya*m@Acu8OsXVXwgK2LzORnv<~YR6!1)Dy|k)D>f+XWd`8R#v|$qXn2tN!LlJ5bo>1p4l)oj?!Flu|4_ zP~{m9w6L^Hrr#F44VqtY-&SN8FtdKPBYOOe9ybrd$FNO|L$TJJ#4JUv8UC5$0ES}c z*2Hw!ZlX+mbEw{adPl5VDpJzKDCwa1I^i9Zbhsr2cO8I)-3H&F@Vdy?%)OBpUf)%@FsVjqrXGDAB%AB~tYvB99Uv6T;-8T$}2q+4Z+ z`W5>xvaSEqH`)cyUoyB!1`mQ&X3k=CZV2Ny>KFm(5Tk=bOJ~qzb8F65_*IcVq#ed% zpFriQ<$J$Wk?oCo)SqERgz#@2lyarusX*vff7)3>0hHLvpNxhYt@T4Ls9p zmeauoM)CQKWC!wX=3H^}%z<#s0Pec-OL8u&>(ss=GZl>h&mhZk-`PGm(F_rrVZ075 z9*pGnqL6UAcAfUf|5dxD6W?7BDw8i+e`95L?cnyA?m9T{dpbBItB_s*s! zWgu!#Uu$3wpAi%6E!32sE5SHfV7n^_nIk3QdlK5bkG=;gn)m6rM*3y}KUO{|W!ZVD zuGJ09q+4}0cU+ate^tpm>H=eztyeQ$n;^uX`C5r&^a7i%7Nkto5?y)|OW z=6Eg(v{|J1#XewoUzhqO=YG*c{s8DUPYPRUensj4?+DB;d+@6zj+q?K9Z95WG@2-i zyfdq(Mt%sK|61a(ZnV^#mN+C^c2vRbBL2JZYJ=NkOOpYb5@OAWkHkNTt3``jI% zhdI!@cu|{f)QGb-otnT0wdqBZxaj+B-S>jgAKwd3f62ZUVCpA!9ciPfq0CNB7c|FQ z?gK_Tx0M4;PflFy&Cb)guC2uR9>~2SwKpdt0qZXeDbF>9Kb@}U@2w;?Z|xXX-mZ{OEFkx!lMSkN!{8pA`%>gAYdn?+JeRJW9YVNxwEaLPP> zj%+dbeZPsp?@YCWIhUC#_^^`PKbHj)qcOdsTLoYEX4$0xa$MHuFAGj5 zo~~mooPQdj9#Y({$>J=Gwa9-{~eF)71Du66=8IqZ+Cm00A~9O%f7 z)VNs&`KVe_{lD8#;j9OpJgSiCp3g>ItCLL&#eC_)yZWiSuGNIU+K{CW++hSS+>?e_ zl6ZKyR7kQ#vB;dmcCPatY*f~e*0BDb@r(Fh6+(DdaqA!7KecEd@Oi4CokyxfQn%>K zFs`J1L^TlckDK$&T$^`vANFlk`7813w1>wYG1cGHppmF)-KY~yJo;d$?VkRLv>ir+ zctAH0P}aBB8(0N8{sQaF{%Z(+b60SUrOiTQX`KVl{6v&bC(eutIQIv>Xyc2_t15-_ zwxaBZ{Q&Uw0{*q3#PWaQZLU-RW@ZjQ-T8;ck^2N=2--*PfV5fCs@F}1s1loq^oPT8 z`;*N)y=(sfV*P&>+Be%hqWPN-c!YP=UG$1lZhTahPt;x5^vK^yV|Ijz{Rn8(V@&n0 z4DO|R9exbsF6AfZu292v@kixEKrtJU2a1Zom{*)5UM)&w>s2%ydyeC^!F26@`;5n`&ImuB47*rQ6wPiYt$Uy)c7_{b^`&x?)IJl`KC#Voy2^JX*I6F^?{eY< zg9@o+vZuRcr-&&|5lpo4g%d=0T++=_rIa@-F6o~e#m2I12@9V4Xt}`9WZzNR)2H<$k}$vF=bP$h1Qy+Krf)WpvbJZYC9&OpQ zZKPz#hXSx;l`TfSt#D#EFhJR|5A%JYB=!x9p~4gcgY%Ub{9JipX%M)-i|9{);U_Uc zZ}Kx^0h|7~+vJtKXrs*0)=*veapt(L@&NZdJJh(RU+~~wbO*<>QCg1mgJeVg4|_}x zXvBsT2(cA$T9fB#zPWLAy79$a~d zfTSX8$t~4rqUw*xDpwrae+pY>eOWd?LrtcSa@`Z9JY5*XP=;$AxARhDXmSx#qoTa_ z9uVfGDX%syHOloVVZO=cHdm|t4_2+}DqZ$2_#aEKgk`VE=6NcYefA^vSF z&hj;NSHE?XQN+YZ#6aOe0u<-ryEtAi==fWNaJEG~o6mSuEzqTZgut^-5Bul~9#DUk zxK+YyU&v-xvr{`u`}uQGcPs{B>|IHOy3)rgb&!R=;q)?tf87!i-*IU?dw+{cJml5GA1i1>x=yvO#ujEcX1TA1Bs z)+TCZMC1t1X)j|BbGq`fU$Db7j5)6T$n_;o1qPGXIGr<4NWsm_WR$(aaAA!hIeIrL zPF}IpUP}FqHNoNFVdmFi+!*|m5fI6`ASavl)oR9=}?+l{zLIir?d)*x&z6X3SzFpy; zO8jb&_K`a1Z#}1K9XiPE%IA>VL>+)XR{!MOg{niBE(H=+Y~hB%K{A{qEWiY)Zdp0U zl({FOIyJ4fD^g=E`3`Y#y6(}frTsB0NGlUnXdW}`WN8TYXk0n&eV1O67A}FoIy-I- zW*c`0ZLe zs>$>)fl&Tf%;|kXF0$?xdQCFo%n9R(T%5;3tOme%ApiGeLYSYMeQA>|(uc~+qiy!_ zCa+{80?3W6TgfgcSdRVzLx3-@ISb3iOXHxRmA6e(7VdIUBCX=SJwAF4_u#(`m`U?c1SNe)$hEf1~_=d{cPF1UKcc`g>0`EaxpB zVemdIx1|9=u!5ipuZ>_PG3UK1p>h_k)rENNJs&Qzyoz5siM;U2abTNHyIW{*O>KR( zl+Zp2zZ@^-yh@zmbv6hHE8^UJ%!;_!%9gVf?N9K@6Nk{=iD$`}Ua8nmJY{$F+G+0A zeQo{uVZsWEc>_b+RJT8Rq|q#|ad`s>EDIXwhB_Yg{40&Vv@RmSxNGG!H^8O7plka| zg=ffKaX8$z0lHs?hc#)ZCsd4n5=I{b>nZT3o>S%7L#W3d0sXqR3h zf<_7>(59Bk6JsqhDb%{EBls!O0nid*V{M~cL)2{_NjO#kr92ppIzhl( zNa7oPE#6Um3xa%BJ?gt^;SpSi=h2=rd&z;HPTc=_%-LvRK}AHJTg1=Qm6gd_y6;;v?>&Y)J z*bjF%K7HDev_^Z`xPhe3)|6eFHdH4U6j|zQDe}aJ<3qb<&YjLot?1aiGZFCCpRW%& zI4QY+URayb*$YI~m30fE!fGv7{{6bBijA)8EBWIdirUR z(l4wPnhg0b^NTC@$&wuMoq!R!KZ%_U)=-H9bf23X^%q(rq(YkibMJ`e)_#g4i72xo z$fL?oyrYqZc;k4Hg@#xgWDaq!e+3%<&}+~**f0JaS%obR8Z<=deI#0Q@%`^}-{0-N z503#&Txuyu?EQC$;8I_{V`Im^bUbWX$_d)&pVAYpJeJNv-x1M=YuS%VjW9IxqA2f| z9_*m%UsI>GC+A)nYF8RJzFvP?C<9GS2H5FM;}C2ux!Y*)(1mRZHJ#XbGu2jlj2C6< zj7`r4UnY5vGD9$Xd5P&}9gHmMcsO{v3iI=}V0RpP8BTDHJ12X#w^p5WH94u+lyM;o zcHZVHRwC*9Id2^w$U2eBp_}k&`*f4{lD)Dm;iZ362Dh@(LVkF&GUA8AFUBH+^J%&a zH`eqkf=`E9(`U{{x=aS2w6yT!TiwT!!Fzdc=T`FlZ*$-ODg1svNvGqco5NRf(@^)R z1`IdcW{o-(`Zg&TI1N9oINQVUqt><2Ji)*HQ2Izg zif!iQ+CRc8hRw(*qb^wai#7<^HFf#RvODekn_;EU(;r@=b#_CD+neF05HJ(`DKt?Y zMP0K?S#~Syj&+V(J;j#Y%9e==j0It4Oa9~sO2$iX6;_+W;O)Z5~Hxv<$N zTQ&`T&Ffs|FOkx#{M@TrHv1E{Z<@1}8J|LM8HWe1@1}2O?gY6oDE6V%_9+k6i3NQg znwA$V3(gb*tGeR<-{24UU&8nLU&60}s&RbM&1?@3!iSD1O3t0;#!ZXG=Bazi7wVdJ zR~x!DmrvqVvTt+w^zhoi)lZyUE^$dV7w~Sg-Yf3TId_IPf7 z(4H@6?G{Vw?y!fM(=FvjedlYZ8I4#PEy=HzY)S*#i3s6N%4d@n?XlXlv1|?-AP!zl z9`&DkJSOKIW$Jl6qp_xq)yXuG7LZ3H3<<26rETxxkijYq&XYMnwS_cRjTP5!0;j%d z0)r95+@Cnh^Jh$FkFe@w(>pG|XUR{4U4_RpEshfS-6BW{lPdAg&agECe>*8NX0vD7| z0W3V%`g&`4&+o@b=@v^+1l+c^?Hq?wsWDwmZ`z=uwA4|)Hf7piwMy(|nKC4>$MCh^ z8{ZFuao)-Hbi-0+h{P;fW40S?wURyXWm(RX_Z#d+{9OG=pK?{in92yBwxKxV716^H zshT{3FaPshTsdi`NgRoQhV0$AT-?6QzgC8;j7(4B3*O>zXmjQDB1UuhEPD)Jhj{B< z7rZk^=;L(aSG|r1DFQGTgCB!hBLu0e=Z)d@pmYHp%isoV?zO^HLjd%VM)!7 zC1B&=0mu-=_^^Xd^q~{h%t;}*5k8b)x3uPPO9{aS+Cx_g2lGdoM(*n_m%7Ul1$4;g zN5dK$+vo>{iU7zVj~XcR6B~B5{`g3C*9g|k_OKOwh{zXflP=-%B5A5ZvH3!iE~ zF~#t4#|%~TIh!LA511!0l2<03IPhAr4b73=fo-4{?!aanQbsekWv+ohw9I@m=H*J9 z#x%FH0^}zn8>a+lerxO!-2~ou-*sj#gW;S#5bGbOfG(eD&;hy(olTw4xW$!DE7)|w zfqpgHdj5z0?P4wc7-+O`!<42C$+}OPHuSCgNC{9l8ozXd3z|2lH@UJ~f0&&6o)GO~ zLV!Y9OY59ogIcMLCQw6kt%aELa_%>_a^TCn;9k589f@G(=w1qTN*DgSw9960%UEam zE_?0r7Sp+m-E1ZfYBf)Kzat&tf~{{P)PRywiTtB@l`h;kS}FJ;77ovE&V;$J&kkGWvumOL#eZ{;Pu(bXM1LZIs8lHx6Q!oP$*x`J0ht^74Uy^LR2 zr7EiDny61T*qHp9mwL*pTtQs@T5q$`GNVE1j&>Qcl`ekbgeuH_R}PB*8V&uCrCyz_ zEVWMmMVi$w-4hs=tXJqVnIn7FC!5ANeAvIJ|F=4h)MCA* zd+%M79-B`Oo|totm+pT&+H>tB03=y!r=)udK=ZST@aU0<|{6e`Yn zE92Kr!2hN_t5*fPV+5ehJN_sso$jUQFVqrq@mXa*kt6Zi!6ItmGj>t52PYvl{c8)A z(tEY4C^|q77%@2LneW7!ajGapa(ZU2`UW@9c|cL0_%9BGTJ#!+p$a+^^+(XU53Wl< zf=A!yw`x<}`1Hk{sR#7{Gkxv(fB7=to}-nkfb~*;H?~X<-CABvxJN=QfEfY;Y>elEJ&q&WetmYFX2ntWnilx#`YEq*beO`eg|AR#YXsMrS zP%i2D0-#U+0sa_;*oFKd#yCrvrsf-Ctkl689$w&8SYwG~x>5O|o+f#1?_k_3+9iEU zfw;gdGb^9ZgT7Y2tiW`iY8gTe0%;%h^dzo!P&E|b6EkcVW`?g|0XYWOL+rdaXQ!3 z;>+?loh#Wq7aOL#^ji(9-byxCkZtBHvvUKl0+D^M& zt8QFrnavIQvGThp+DrYV{8qaTX8&bXh$46^>G8DCa!F!!KlCPXj^->RZv*eLn(gpv zaplT7g1gM+5RKQJNDL_>S&Uk|12>(C9R=A>WgHt(5*nEnJ6hFE7rt;f znZQicJJHU4#~rGt;X)(HVnZ{+Jxvo?JaHl|9c+1WtliX*I>x12?pc~7&A=+0bD-^& z(egf2pcSG%)y*M!T|!Bc%?|L=ouT;JD7e1=LbC1Oz4-(BvU)Kdv&V7+2&)*EMZnYo~ zLjzO;6PJrDCCauH!`AnUkcujGHhdp^Ii7H|4`?>q^M{^sA_$w{S1y#^OI%4oVK3@U zUaj6`p81_p#gl{r`vONFEMA1+<0_tEEw{!gg;ClY*H~sla+y`NU2$NPp>4&PDo(l# z*KQYLaFjBPb>M&0e$eSe*|d>{p}w|}i$*NLUQDy788Pc^1-uMi6w6pi4X&ne`pGYS zV4&zXc@v z+~omxIn*xH-ak9$u20g|!DqDwzoP@()?F@(;BSi`<88t2tq#8OTMGRBzn$kdC)`@U zaw4`hgpgMg`yK-}@+Oa_JV0}WJ$0BTPSO_z`;3TUZZ4)7PHh5BQ&F@=WE=k zvrMu+u;ULjx)R~bqv6Zi@`~U;#~Y1bJ~l=&qjCAEuEoF?8o%tCVqAF)%sd_cQG&0L zx4{1Fzy|gJv+n_O4Z8uaIs*IM$XIS{iAMW}xec}4&TzTqAJH9beh7vRqR>Me*atmw zv+pU?u}Kq!2ET?wf|RTC@8X+28=JJ^figCkc3rGU7VYE(w_8%M&3f46RaCgis(!lg zOAq}(B@aTK3e7K5=G^SrbfZJOA$MAJPv$ z#S-hvpD3C?_pyk9mi=5e_v`SH_)&E7W`)wp$$4AY(=-*#dU{>g5gD^!z$x1Jp2dlr4mZZ zb*Wl4=XA%NejnI0T$B?`nV*X`K?TuODfS!}PPh>AX}3_7J(hHE`&`*vP2cpE4@kXQ zXKP1`-I+@U-0r5no=9GHmFt`;%>B(a51e0efFuGtP!4g|yDH$In?ZZ=6%q4yF<%>G zp34Dnw}kHdOxVO}fM7MHipO))nfR%`@Duynhq-`L+4)hd=s_JVAoh2#vWiE93N$N@4Q&jK}tHaF%1|LOd zrJpJdaq(Dw&U6`fEQoz!y5Po9Mg`CtC}oOv?Qh`c^p4iI&>$*4{+N>pFE5&o#ni{eSxk^e;de~|S=OVx~R+*q_{Uf#^a zBf8Ldfs@$>JE|dEqn)270%n{QK=V`YLkZ6x{Q!|`Jjd8@yH zMt6ky2=RhovE-QmD4EMbp6%{nSLB$~=u7~0o_BnOl z65M>fGrDCV{Nj>#W;+*B|V~SH1OOj$Yiz3p$wX4@Rfb zXyJx3i~xv&B|d*W>2?hSBX`3&^~$kiC-nkOB)Z|3FFyjKCC9)>Bj2n~~vk z%cCvxHvShs@!`IhQHABy3om+ez1~F(ohbm)Pb@cxULnMg9uT-14@h49A}VS1yP1DT zGcCTetFvZkKhbg}o6b5E6+bdLugNU2_mnsr_g8AmpE29MCA z7mpY~)B2?c=u)*Rnby`sOr_!OU=;C|9*~1FFFmo$1_tcTaS$&#a&%&U|58@Cy44xUtP- z7FMq&KKJr%)hcBg5z>SunWJo+o|v>*SfA$`;L>o@@68w>1I*Z-am1iC;Udyj7AJAi zR^rJ#8|&8Ef-wg1qkrXEyd<1!)866M;E#Pp0_P_63X6Ca;Sv%MO6M`6JB3l^Z^m?F z)F&L$INSeIf(r}*w}nzk$87?qYShPeLSkH%Y-ys(B43F=ql^JpUEkEivM~FJ6`3=Q zyC+t7jmsP@)OA#Sc{$?zWoEP`9?zh8P2IM%egAN>UKJk(kp_JqQ^r-T?+Y>b$Mn0P7d?P4me0o>-xK&cCjtJ}Jay6`O~6lM@3pRAA!&KIJ#L@M%k4 zU~XW)_%nNAZl6TI^eub3#ciSO54l(w;;3GzFa6<*mAd!v-x`qfkOqA)-YE00JH$*X z8_6ChbI38z0+#{vda&Qp*9R|o<;u5qKEhj{aXrw+ZEei}qIUQ(mRZ>evCPc#^dX)k zYSPqsnXB3M4)Ci3V}NFT{!M^*$DBP24c@4+EbsV94021V6I>TUnx{21Bp=6lAtpL4 z2HaP`=Y+twiVz}gi_3PW>KLRZfP!Hmc)S3ol0g>bF4Rc zu7b)Uj`ELX39DN(;r|rZfLnLs{|}xKeDJ|1c(ftuwwuSQkENFvY^NrKKPDJGM>~4H zvPTTen&}gf53pGVwhe9ray$Ki7?`#DlLi)R_xI7YKzw zl^HDc*xrr??95!leQ<9zKLHUY!R{iY(ThokGlT0%=vM0IM*{X8@6l=d?gYQE{~$0o|+ACHEc!Kc{7=5*XfAV}6N*`{XI(cD%I0{BF8JT>aX1=moX7bWc>_ewsYA0Ke zlXj4wUhB_aM^Y^eI;EDdZM!F0OILsK277c9ZKIM)ZtX{=qvoGgz5@?;72Ctq^6i7u z4mS!kY!<7OHFmR_7lKZ)23!IuA=JC!LNv3TsAFDm8el+`MZ>?e1DshD%g@x`;4r^x z%kLZqcJ}@;Fyq_85Nx`E9qz!+tBipek9{bHLamvyO2J{p4sy34F-Y?>J{CfXEXq?~ zHQ2po7Juy+^ZmG|*oL(&;b*4lRlr|x89;&CdqAENLS_}*RSt5%&M{O9C@~lmLS~tL zl7k#u5reeqZ2_cAtR3c4@=cEKt|*H^nJRdPItyxhLDe~^x*kxEiZV2jb5s12?kU(n zqX+K|cO*2v^c$FxM7F*~3_D4n8{Wn^TjYu$ zG|rH@-x2LEt(l3C7NF}LO zW4tA37~uB(j|)~Yeh16EU|N`CtI+7dPRF?hJ-v4f5fhVx>@!(j;-x7Li`Bctz^p}+ zA=pp@8zD7Vdl)|ltAe06N!G1jIJ6jL<`-A#g3I$5&+mg7tCe^+t`lA~(tb3O-9ybu zvfsU^mGm}~HofXv$@Xt=cdfLFN`>S#JS~5~_+@(=^ z-|tEH69;M-g0*!k;8(#q46!6u3V1 zqj=wD{;tPE$gFIB>L7!-8_Oi_7a?SpQHl&P0EH zgOdVLfUlYqi2f>Lx{fni+f*9mMYj7`cAS^esp1r`I#+fKmxTqyrGkjI@-LifPoW22AKEHR z>`5wwB=l#~AW1|S6C95#*~T<(E;03L=4Ys!)Y{ZDwyBJy*K=q@(~ZIC5}Io3;MZ@` zK02^5q+a*=mP?@>HXJJ@G&fgdC7LYMlV3ClJ_O|NEfw-M^*sXE#IJa^R=b{?$c?v< zd+lkh;g<_W1oDH8F%H|EY=ay3Gu(O!w`o))i<@qQLIFKLrm4SB2CC;TR;ZPKpM{6L zT>oCx)6kwc?dx?`bn{=_!qQeFitY!?v)R#wi8N-x#NhHeF@ zs3N%-f>T1umN3$PJU39SPA+*FHL_Z9>d+>949)qI@ppO5e3CXvq_NZH)maQ#Lw$tF$5<0)%>^&A z+eyMd^;x*s_LZn=yQrKMqVD50s+B+f*^=g7oo(UU87nf6@|q^@Cq9p#Ed$#oojY|R4AKs?r0>ltt)b*fVE6(aV-QXF%i!@Cn75;`Bzwo#G=C5FFY2ugq zD4iIpiwb%Ee0CXbF88PfLK2d{ak*NBo~CpHaEd1=K8~A?J3>fG?+O{r-_8W6(OoXJ z3&k|7j7gf!MC`w}0WN+O7GZg@Bn@FGiU(krOU-dTjJ==G#2J-id_^q7_`Qvb%ZQ?m zZ;>45dR#UKCYK;Wx4ddRJR?7~iiW*E+pu*6)v#-(vY<-Q6s?q38D!M%JMs6CK3?b5qYp;&6 zdkLvQb%n9}-7izwexXLBzPX^H&ITKMhMW9NuBJ(8u=sJ(qE8OK$>2NV0A14mALQ4a znbq@f0M=|RY;f}6_y+solgmWK%RlrJ=W**74%q(Eyv+)C<+rn~YQ^QxbwMq=lOby7 zE&|-6&fM~i_0Zjl>82lGZc`-ZbjVK}$!sK>x>9Iv{YG-`W==jQNX0PS!4I4uk&j1uq>12ycF|p<(-0s*Z>^tI5 zDDl$M2_(BDAD{jeeZBO_On6QxLYPLS`d`&?E1eK#Q#!HbP_1r}1~Vasccq9>A#`^^ zEg37{3gO5I!veid)tKUh62JJle_}k^V(ug073OT#b}ZHkaW8oPJB(7i#9*WXGy9ty ztI|!&CoBv0co804C&6GUhfMo)Y{f}=FX-gF)T`w9g+xev^}YId95p<-L=hnua(4-+ ze&MCQmE;UErXJU_Nbk+yfsq`JlxISb`^m{+tbQw6C})L?YXAB2sjYC^klMdY+o z)5gv^dcld%ZI$vlIn3wnWvW<_H*Z9Vm6RTt@3pO?#8zGvb-WYirAxQ=U*+0=tlHnj zdnqS6O^^Ot>+LjcOSlTg$TzfTQ8LZ$mNbCY7c_2kZ!YAGmdxd0ldXOaPv-0mn)H2NjC%q5l~EJblZhGiB7o9J-#&bX;- zhLGe4rb}nL3~@!&Pa`vrjgE!k?L$Hgn_4jdvibcf%#Wn)h3*!x~Y;XIhS6e6V-}drtQm4e*?7|B8@od2*iXPC*t9t(O&9&i2l-W~hT%(!&OUcRh=3 z2CW&f{y~b3vU4CqBs7bd+*>?eyQ)uYSVoN9hV-J z-@B%&^>U7E8oxs?uX2@FsR|B?Dq0b*D7kek4Rv)`_u!1JdepXuJRT&2xkr2ncKm$R zOrzvGuwKxqR48=NBB9s3?_L%$7@qei4&LNEi)ToQ}cdex@-9qeH>Cg)zmt6GS*m;!23;}4byAj+5b@|rq(C9gbJ$yLuM=S@-(NaX}6 z9;6mqrY3#KCT~3>rA}4|e^g`@aT9d4RnH}_-efr{E<^$3RPk2TL0X}PagZG1MZxk- z>X8)!V0sQb9NAf`)6oZ`dad=eYzaV=Ea4qrUbKyuz6cUMH{;!mmUG*>bY;r|5e;Jo zb#`olfw{u#B+TROIXl$)y*JhRM^}tV*H-nasanZrDf^7kGg+bo>d@xtVOx8fU5ZK8 z&hY0mukF*_yw0b*whwnBSY*ph>QZJDL?$&xw7T!)BkRg$us&Uzn>8+PplG=MN?kqJ zE0}#I`#8QsV`Mg>aPXeia1jlxdLaXfl3-TuZcU>cSe%0z|*t6h)?Mq^S@9on46P*}ib<_jJbI$~%mFPlkJHbooO zMZ!b|Yi=oRx)yj4B}h3MU~r@1abBS9n=-#Q1Y$G`ni7)!V79w_;4bI8%g@|pmAjnm zE(hQw;Dck_Q@K6SmEAupru8kP`CyaGd4E?7f*-J6*?O=wsi*X?5|= z)@9H0%B)otm8e#6wk)O2Sr#kRPAzM4rGA0{cifay;a$r+>HE#40#8HwJOnMz+mdK} zXUr5Nuh;1HZCLKzvKcsQB6G+~H#P{Ah6(yig5TZ`>Q(G@J?)uEj8`agpzIlhTR*h; zP=a%k&F4zD`XeT(2gH7L8vsk;5mF~5M^{+6N}8`9nWWl5%gnzu+3qh|6JE7;j#ulC z;J;>UE$X-F4RWqY4_h^geU9F{EN?WSKqWQpy;p%WvwTkgJGQ23RXtrx$KxEz%$Wrz z5^ShG;vI?Myg^bHB^`%kD{3ZTC;}L&ok8(rXDgNA#Ip*u8%eAH_!=_^<(+z=@`+p@ zuBf*AOuA$|Cg(i`us^O$w`t*(eB`|W7Y*_omjGg-T;!K7XdwWEw;-!VOrdL3>|J&M z`Qy+w28xE81jbxMAWcl7>)BGp=s;^{J~bU=LxYJZ+!<3m|I%5t{z%t1?5QpbyRA00 zx$7B{)>$1}fRjq9__pwJW7a8L0XF6IEoY zttPbwb_~z$p2wa|y!_Uye5EG!mGy@I?$R56QIj5AR9p2*^6IlGVocS?$$6dJ)TUOA zfdS@z!hMb3uZXFcWQ%+>HC4-!R}T9P3p!;o>d2D*{E@P@bP0o9oPdnDsr28K* z#^DN4B(MMKRh$33*Y?qFqcB;weA`Q1GO4!e!{of{fLC4T$x_s`HLX-vKDIV>mh0~) z)zb4%QA17d-YltaZLi!~_BYf(aZKtHs9BTxZ1kWtndf;?Q@PPzY;-|~|0|9TUh3S0 zvWHJj9v%x09|)4cPDB{e4;*0-!9DJBySr?Yr!+o$b$aZxVfyU7?d`MK4lv;^=ex_# z++~%!oa`>|ZW0Q?>+bTRyZpmlo^qGpILHml>1h~?YJAZ}-zVo5(Nx{_Z({LV49YYj zdjrHkc9x!{%%49=TFpIUQ{sJ>2&W5AG6019*pr>w!@ktOEvqkr+s&LpL-M{TSdUNL z^W9S!K9F1I=H~^y{=?6l7+gW{d<2II#S~yjsZBbGCu`Fvt<0-jtKkcC%cH$>Tl1d2 z=}@93JL|UaZuGMAPZ|jFK`U6cy{T$Ep<};UCeN%JVWM5Jyugud#WLvi0xZ&#UZ05~ zU5^^pV?*jJG#iJA`z&tF?#TyFf7mVL2a6VnANIfBji0xjli}OO<}mF_ zpZQn(0DYeS*66diEk>Vi{(l5Sk~8|7A8_z>q2EjzDsJz=_GPKUhhM=PS$rE*$Fa4$ zYok=+(DyFMOZ9P+U%~dDE1WxL{|zrC)gXhLGgw|P2Vb>vxwc1p6*~EcRi@JX*kAl4 zHVkl7AVP3BWjhv~oEQ||7X=s35kb1TVN!*a|5l48_Tu6vzIqjOQ6YL-rHT|j$psD_tSwC# z;nRc9Mr^8`P}zVbp4k?GO>Y+pZMKcN6}jxMPJ}$L{SDd z&~tW3&jE%=(@Wonh$vgtYLvZ6nfrylGXFlx9uuSNPbj+!Wm6$#hkpdME|DsY6Zc?c z4RLo>D(jazgCQG?xaa?!7k6ig+mpU*DJ=a;{~>0E9~sOgYN6>~s&#v!id+5J=08Ju zc!UPYlLg$@MkC3VkJUncX+P3r`?S!U`Y9HhDPrw>59IwB#Vg26owd{)g$S- zD5<7L(t}abem#;FTT+n!7|eDHLnYWO``1O^Cg)zDF=m(b)7XLgi0*U&U#gF+;N}b6 znD3xkNr05=>Mb4g+)2kALQs*1j^}NG*&u0hkj}*aO;i?YvSfG_mSM8xBihYpclX9` z2EC|fZFtC6WiU|`5q(?uPnQ ztAb&tSP%qPeiylPk}VqUs4uAYaIyf0W}}YWNVlOF$!n;i#{IF+n%VU>{0!)!7E=2X zbcjf+Yd(KVKLcUqyvJt+1Y`4d7!tV~mI6gbzPa%FOU#Pd%L5EkjYj#P+kY zFt5&JOJz1MzUZILiUXKKJT35er@%eC;jELgs#8k z3M7-Iot<9_vVz~jllqO%OYXO#zSm{v23z3u!R*Z|Kt7MT*_xnWxSr|{2)1S_*&Y6* zJ=3RRKQ?L2d^*wRl$hXbPZ_~|=Ab6&t@u=JeXCGMlr*MC z(x@nDNj!deE0t9lCH?Z7Sh%AFByJNWZToI4Nqif8xn(HzU%b;jX>F9Wrbp7>qNI=B zh}?7FG{+*N7B?N>8c({}SqWutCCKa4V_MY+vYUichwLS6eYWj8Fv?uzmad$AlijQN|umI$` z2fm|E4m~VI3Z=3ogR&v8 zcW1Fc>V$2n_FYW|FxNCw@+zES^c~p8lOi&-s_tR}lh|bX(oyAE>hJ z6bC=<-VGb4)Ni#^G|#ZNnm*sWzEmI=oqPVz>Z_9vjq45mQ;`(&#*&+$? zZvWd5?CfdDmMWp64j}V{Sc4DPQcLA(k)!w|l~XEJYvW4A)b)EzdaK@2Dpy#fXLaTR z<1yMNGla~8>IZ1ly?K|l-kyC{l#(bFJgmSOx4Lj8E|%GQdy_x&UieTOCVM;L9N)w& z(8uZ0H_vv? zjo>WiP23BxkL0lJE^q_lsPv0MDxJc>dr516vLuhrg)vtMULC14-35f=d>CK ziMOM4UXfN!?SL>2I>`<5gAJ#vtPlqfv$3^5-v%=N!VOkjgL!sRClz?9m= z)pCX9W-5ur1uTqq)6;`mZJ?utx~aGDxkejTc5G=T;g_|k4`uSDZSX_w8&rn$vL<|m zDemJZYSZWBkMaMg%8jX7p1ek@j7RxHZbJITq=$VzS^)>nLXFKLJJBBoDr@~r*Sa1VV_roIA4tbV9xg_@JA_EIU}d@ZN7 zXx7kmT!MYh@h#VrcgF+W{A)j+->=5}Kz^hCALsYgJ>P?0a_(6oXqWi?V5cL6QsOpw z<)pU4Nr3lejCP#u7cNwiaS0qzt-GS&_g{tmxVo`2U)|`=kf*3Flu;|mEfgr+;w&2`lY_6L)f?PenPdPb{ zAk_T#WD^``DV4dD?MbzJ$$wmyCT>}d9LHdv0)efOU^aM?$RDYbpj1B=O@?=yUp*tlOjL}J826FyrxYBbNUd#H)o3(A7ksNV&!LYqVTnro0rTJ_mQwbDw}9?q$h zlo+<6Yu=Y0iJ57%qkvFGWrM!9RT5Zv9k=FMH#qWr6S%|OW!4|4J5lsK=2K?syvDMe zyg`g8I5;{#vN`mO2wB#?jHu{rZE2ltBV#9dXs)5RP$eqsaP{bzxx?vx-(8UYrQn;p zxkTqRcB8lX=(_kD%}*jCmbv0qK>G5g4NUARM0Pl}c-(~|7@%PG=>(?kurA2^i=?vB z6FXBk>W1lfSz+^A$pXo+<1gQ0LQW(LeRnB5vlk3=%vy$-fL*kbg*d9mhT+6e+)A*4 zCu!B2C5MH89dA+p#h1p$_&ZZXa09_T7{{FuAj1$mrtrGe-`0Y3X#;9LR2y_^18lk0 z({NS11K{|gRJH6JQBxb2NC$-Hv?MKr4v!BZoGL$dJT{~)*5|G~COC5=c@I{-w zF7W*SA*uHXq%a^jl4ogFQ<|NtXqkTn8+5@)q00&SY$kC^96BXdr5#nJ1N%6!9cTnN zn_2<(?rX9u;Z#PK1vc*O6M~_jq0@ehxPuxZa)QAw-y`DA!ld#&&$<0yyc1Hr{iE`! zpbU7nL_8b%r^PCm#l4ab?RbtN?9_!5@_SC|$(|EgXTJj;L1NuSHccJL1eM>aa zVKLID_O0+s+gnAd*?r3}M-GLP`<9*4KC16PwtgzTCrm0KiN!Or8%U>T$}*1L1%G`W z5`G-~Nf)fwY+^dGW_pa0JE_K(IA8p`cTnTfF3izWAAR`a^;JjSt-b^!^76mc*=p;T zKKD4P{B>9=TW30p(xto=0G)7M-=U;)5OS{K&Y#$KXsnh-f(M?H7FaLPp~3Aubi5h- zT9-Rxkm*4z#~{?nZUy2%Rx&HugqFFG-##eb{4U;5JDb1l9T+}pQ| zjPtD3H=`Sh+KNn z#L@Yy=A0u|WB@q$2z9Z0d7ir@&~IP=*PqvmJkNce^URquGiT16IdkT~wY}Mw0dYNO zzFu18EBq!K#k%JAAVc$8jxUL7$C4ExOGsCR>dhSF5v~;lMj4pyFp5UU|F_t zu6>eVAG~ZGI}hqM9MHHZQQY*o2g}yznh35;XP7(D{XKMI@g?x2^Hhr4@vtXHOrS>IQ?EfGbRd^U#q)Q z1ILeidwgtbb@vCw<468&eC*dMUe5uu<71n~_uE<@dF1Wd?yaS@RsW8(?=v(n@7s~3 z!@gv_!-og7z#>GZmsE}o|LmB5QGzGOUgIQO7?BDgB?_5_`&t}%1S^}(VyFWbf zw8X42J+&Kp>IqpjX^BC#L|5mZ8n4^Cu)ZoeZLj*O7pLBs z92}IM!p}(izrPgVP|w_7c1F5>fK7t*TW60p^7s^lJV!&Gmm=-2^6Rw3KqzGLRpQm9^q>Z*Do?Y{$l9eC)2^^^eWm~pflwZu1n?EOtWdiqOs zVBAm-9&@!YmAsikY6M}fpf;OdmyC}cJ*~Efecuq%nkos`m<=0eoorN}Lpc%i!ts%% z|EkrOmsn+^rq?nAoEmRFw$P#wYk5kMZ_ypbTsVGYPx2M?0p6YDNz^Upw-3Z?%jl6aY=B4LhZ=ZJy( z$Q>184<3V}b&NKZ^v6hh2d||6aB$!pKP@o~VS78@`Dx<6EL#ll(-KD?Cb1}lbEn0d zhan@6nd5<`&l*;8Ni})NBJi?sWlf${y)b$u%bNRWL8;Fq~Df2AE1W zPK6F45ml8tQrF2*p-CT)OZB)_I2olMCX8MN(G)#itjF;)`!TcF*gRmBw$tYKqcJUK zsydNHU}lnIT{i0+)6iS&X`tBKR<7sg3W07?(F)BTg`uo(-sJf|yFqbCyiP685T~}( zjZ86SIEn8u+AIoCa#_+CHv5CpYoIiMK7Te+n$N&-RSBmSeag-yf?lDw88Y!|Kxtmu zj4Ng=poI7qYZmFqi3*Hy(cVRJ7-)`F!7I!k9UqZRPiH}D)DE{jm{U2-u_V_oG=rWt z`i9;~%ntutl5*q_EBR+}3qe|BSWF0;I>eAH_Gf=bNQPqKiX}%OS<>B$L^J*cBjauS zlxn{}xGv+0Z{x@tWY^*d)X$KO{8n+9TgV24v>(AH6{Ug-eme;v3r6077d zamuNa^=}@o%Yc@>@l@8u)+YakN6sS$0XyY3a$6n0ZW#Tq^UNYbe-kIsJPgc#U7y|g z-WF8nPfjQG9nnVu0k1^85A}dF~GcRrEbZ{g5V`Y9E6Mn3TTVH z9h8v~Lm*d1j=Wl|%a(*YSo@aY-gzC%N0|vr{H97(lK8D%6zTpAma8QCT~^IwfgAXv z;3Q5>F1$KIrxMizG%z@Q$iOgUf*j=x49v#2QpIV^yla_xhuRi}KY2(ATKH(of5AZQs`kSZ03jm^gwYYzl>A`MWw%WiyprVbiYHZa8SEE-v`(VmR!9w-mO>r$)Wi$AA2kS#oO==J9Ih{*nvmejM%kyr zu45pZR&J#vn^q#7ABbSFfsv&X4=TAtyXHEzx2+mvhfj0RiWLL*7ame|F&Da2V`ayH z+IVBMKH){Bcc<6HhmLopOX?EeD<01PHkO^<3;^SbYh%%9T|(224o7}4XNYhEn&Ut~ zc%wPH8|q>&C(kv*po#K1;r9W zF&3>mZ-{+c~Zv%@O_XZK;IqgG_^$%yn_(L1O35}_t-#sgO_St%#Ni!(cLu=n`$tbnaq8vHR^DFwRFJ)`Y zjAaw5B_b#!T}~&-Lx%N-LSp$$J)jjZQqtxAkPjWKE}pDzm1@&JFTOxX#)q~%L{|m# z&tyQZZcSqzUu4Q9wkd^me!8bFSiNd&A;-y$;|q?TDXmM4Z6tsgVH{g(AXkrV)HU@2 z`_ACTDMS?#Q_Nj8ciM8bBtCSHpt@yLK+S7G?X;!yV>* zdw7V7xMa{6BwP(_ShWraX^wb`9{$j2@iPxE1l@~3x4Qk`^h)Wg>W=>Pi3?cUoQAf! z79~Sgg;R>_5|M5N=xW%Mwr)5ZO zj1zLm+#FW_iD?9yysb92Qmy_a{tFhfsp$^8+d>0VFV)&2vD(kWpxxV2KT{30oVg>u zAU`eD@uE>y+huBN5$&sv3?Azx7n)8A8VQsWT_yf;c2x^Sic2V^s|EqbZ1%?On%S=h z%)St2FMlAH*|af-*~xvvHX2)3EK9R>ncb?b58GXje;?N@wk9{B-{M70R>Q71dy>7m zAR2Hsn$6i;O?PH-w$@dm_S;=A&K?=oox|C8?%zFU*YFO`R)(DAq~;7~OQ_z2Ippj* z!Ur8^yX>wPXMe-PKAf$DvjlD#XV0l}W&Q>Og7R-n*ExXuN;(y<+A!ip-N}TOb zY5L>dawfB#?l_`!rK2awQuNg$mX5_9+1{^Z5L+#C<^zkxaSa@38BBXkEf^6N*wfy# zFvTB~>UC@Iy4?R;lA3s;N;J`&l&t?)Po6g81jHX)!uZ%>OKV~Hz;Yh{n8$cclb_>y z;O9J*8qIy~aP)tpB(zbaeefC|;N>)-W*?736Mvt3#SFDJoE}+_q_dvLW=?XLG5FbW z6|JtRvVdV$cOy&XOZsB=US8G9Q(sT+jn35fMkAE&Vww&Uv!_vj%g!yL{{}@7o15#x?g|5c#=t zuop5LN{)jgz1Op*kIG#OQ9Btm^UE+)3b7LqK**Wr>+Gql<%(r-MzbZ(F`k*OC|=}$ zghwaJhBs-q@V>Sy|3COC*u8v#$b1(DL)OZ|aDjR%%V(d9U*&GvD|i)xXKiNoME>wx z99Lcs;6CvzM*y!_Yo9m-^auJefHOaT92i22n1q$ZEBtx-dS&kVf#`L{uG*)g56&-;^C{LPSj4t<&NLyC?@a`H48Do#g=BK+JcC#M z1=cv)OH-rLWfWYOo*=G{mIH`WK`V9PSQ*k5t?-t8yE-~;_MH6-NYvtOd(-Q;&fD-R zi4X>Qmu~!AEdwExXmJG6Q+7A{8d{KfnpxsiAMrV#>JaFadnnqH)r z9hazZ>oI zB^CYxW(R)4|fUi^-z*e5 z4w5;iVl1~wI_G>zxcDcq;ZuUrgqTlaon7i<1a3z>AesmPAY#?y^XXWU23m_d zEWp$M$}k0V_#gdD@{Fqx8p1MLG;QWk@7WkS{-*RxJzqV}HlBoh4Zcv}(G+F~{wkL& z%n0YpUgx&u;rMb{gZ~9e)LOeURHPf1%Oh|Wa*wh{XH`8 zVM$ZY{wkr~h@@wPK(d_??A=JU1Tiu6go%>DQG1acG%;qc_#9>iHG37yTVHBos|6$L zPKkWmyo7}T*Gl$xk{FE_;xy^_n>E7%3Y@k99ch~ln!Ldygj9S5Pjs6!4erc+EbWHz z2v&Yc#T@L32RPVrnKu*ePogKpYNAP3r1KW4Qb1f2XJ&G&1Jy}PsE7UjLHJLwzXyPz z0kU!Xgi_?MB|#mSpaaxlQqS10)G}R4vt92dc5eq_SDtED0f*fmt>u&HNw$dy$qnuj z1zojSqo>7%obN{Pbse&e5GUiT$WRy`%shENMKdYo=>9Gl-unneaX+O9E6&?he6+>i zU#{V*SG)|Amp5(WPp_5p&n=^RiN;dAXG9cCA%rN>xk3FphATiZYB8@AgC{aL%5N5t zNT^rXF@R(rh1#vLZ(V$FeXP4)xgDNk!$Do_HS%3?R3SRHo-nGqsiGWU5?)=ss&52%KRF|V>#EG5ky`5<}E=9FmYJ5yP@ z0A(Aa@uC5|t&KO7;9s*AG}xPll6X<_E_+j4o0y`6U!8}!H#CM-a3+5H#fPq<2#FS> za#<)#AA_4TPjT@2S6Qz&1h3;oH`&vfl!PF*>#&=!<8weKZa{+ zW4tKe!QBHS8dA5(_jIV<+@NJG!g7b&XKR9B!EU|pA3Ul>)%yQZh~Nm_rF5sz%HYe_ z_{}&UEVS$(!iNdAKrZJ62|So(C2y1Ri}8-^D!kk5-3(-` z&B&L>$Cg)*{HXgM18YXE8XsF<-Ti)X^~g_ZVmGPqI1c7(U)v99h5uAaPtx>mR$a`C zO0s{zGk#xyRJ)|wjM(Z(aXEn3Hb=?Y7N1gC_389)u>Mx!Rc+S6YiE;eV@0G>`bcV! zk)1*P`}F73A2PoaIH^((Wd;S2d4%FE?}2^fmhp%2L+ooYj=~1A5Uuz3u&3K8t^Gk# za{j0Hs~}D`xjf&sAKU!b?J6GAvy)$F-GG!UZw4{;YqmD+t#^+vL0@sc9E}RGF zZ0RXw8&TkiFo7{8LZVo%H@=@*tjMd;&5SwMpe}lv4~WmHj8Ctu+BS`WY7pilQ#rqY zF(vgx=J(@NmwJE%b0zgKxBw7vO{Y7{#nvU3#!n@@?mC#gF4C!~CHn6+lady1^+~1@ z;zeKMi5o@SGE*^i>W0GO`^=7D3iPpS&EOo znPRxfC{kT0M1nXEd1im5QpZz@aPgwcR1OtcZR9>KesX2(RQkyou9hec3i?WB|>;EgU*BYW~!bJa-{Z>7oxwMR{o>>3$bnf z60XTQ9{Ue+ms%MwY7QXs-ChvUbb9JRXcJcfdgn)en?9NWmHZjHvom*je3^cb*u2MY z(j6Y*9{;<#b2~{s@@w_uaZ|a(y7@=m0uFK3iILYF8Rn(QaB>fM&@g-&X}Ha@o9ren zApTjifOtAir9ScS!;s^?_5l0^0)k!^y)W%MU#)psQsh+s8nhNNH6h4T@ zh^7_RN*jElaA8pRWuBmNfviD&_{X{2KD&x*LZ3}J-&2mIBSNN6MiM7umA0=eK^?8}*AhRd)X3*xEnVZ3^s4}h4{vp! zFk?Hpm;>}E`ZE>nHf7(@KR*0CtNWTl;Hpp|+2Sa4wF=#(=_Q(ZGC#D~bg9^W9zT*A zpXs~2mp-ox-k0e8iF!|tAO>GP{>cAY@X`fEu$hYS*ihb&7r|z##T2iN{YSP#o)v$? z#_TozCqy9PKBt)fp53m;%bEPHpeG8>%64WEOqJ*V{y9_l!>$2^)!}TWkNkWtruVTw zB|i|g!O0IMXI&iI67$pKhvdyHI2ad8@Vg)RBMHc*QM|K}&SsO4T26W^+L!0H2s_dV z7TQ>X)quvuSdI_>g%W3BGqvQn=?p{zvtk(QNX`C+nRg3{$5 z7Q8$VL9yi8+x%jC^hT1fWkdjv`Wya#77GL-U}Ey2{o00A=fA@(qJWx9J{T5fYo4ub ztg&}n^sd>7$NZwK$qW&NdHyZV9{A4;u<|qF@jT9XB!ZE)P*ZY-Xv-3wnZ#x+GMm4w zbn=5IVluOE>;=?K4def;%lT4}Q;?PZ^K=iUwteiamUw?N_ z42+kq7W=fqi!nPrp2H8MjiP8H4+n@je>gd61ZFpm49#xQ*yNv>^hHl70NCHN7?(6RA_pe`Qv zBtI16oiX`@mEN9QqDNsP{T0TN5L5r3EeOKFl*q8!?t1b21JSR~e(}n9VZ0%qIKz$= zdLOX9)L8!%=lQx?H6}rJQzY@BpNe^!3vO(g5zJoWh4a09mE}ulc}O5M#i=jrw-L{L zRBPUM4Ka&@A=SavAXgk8dM9v!$)N5gY;5<4X@%qWKNZc^rydh~%3)7M@Zt`8@rHl1 zE8wPJ=`#Lns5I-5jxfFGaif!em@lBnKdKWkO4H+Fz0aY?Zw3bRP**4x%|=j$Am{lF zw4I&Lw1REh?BK$()&5{-TyKT2@u`(ne{Ol#i=Rv>*}aIkLN6gB2lkfiL@+j5 z7m!DT>DiT2L0tw#x)^ekPvp=KIj7#n5_ZKnSP~%S=&Cs2D6`F-X)mxcL(#f0A{2A4(1P> zS@EmhcJ9=ki3&In~B^A|aov-`kY3T7T1g29fqpDmdGgwy^T`d}Ar zubm`C81+wd01xj2@R9&v)BqL=;5`C(!|ni15x`0QKh{~R2lW9sGyq7&V7Qcn=Ka$J z@c7*Ugye2-y?=*;dHH?4DcKELYMm1fz%~i&=g`rASKsWS;jzU5gG&5y4(y~pU@tSU z;lkMfHgXP}{|J|7Q;7 z`F&tM3tDQR6Ar*$B(ObD(|=#z?4s?pNXNpmR)PJt1N+J^d!u?~09K_8+aiIzUtoW< zJFv(IYh(VWYpnST`@lTFV1}zWPZNOWpCy1}cL&fDp6W^d&mGJY`@mcUT56-~Z#4g6 zfz1=xl)l+j^BaU`gMW&H`N=)K+dkD`Vmw;IhX~*!aLB)7cL3?ZIE4J2tF7Vp_W^iF z0Fd^8;R@;Ba|N(=cK}gcENA!+IDqH&0k|HVym&bNOclT)0o<++cG2YE6xBMsci(X^ zC-;FlD}ad*gXBSi`2>vdf4MuDPHSUV`u!Zt!F^zs2QZOiV6KyPyI3$Ab_p}GG-etf zrY{!Le@$!w{piA9^k&cokW({N${t#_6nk2T1_u-CRybY0

8(}T0dG| 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

L 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�phbgh<^*bs>OqM`cW=jaX8r^KfDMRGt~C- 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

q_X<=oEP1B-614FYH$AntoDhr*7 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�jI+a3R2X9ps4NODrauV|R56L4*@PWY+Uw&El7 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.vM4@A*gmX|jHbui<9%xx)deu1|{RPD}wtx(Hf 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