From 2082084a141359dbdd46336e18cbd2776f6c3d72 Mon Sep 17 00:00:00 2001 From: laurent grateau Date: Fri, 28 Jun 2019 13:15:38 +0200 Subject: [PATCH] 19.0.1 Release --- .gitignore | 5 + BACA/README-HA.md | 93 + BACA/README.md | 25 + BACA/configuration-ha/DB2/AddOntology.sh | 7 + BACA/configuration-ha/DB2/AddTenant.sh | 349 +++ BACA/configuration-ha/DB2/CSVFiles/cword.csv | 75 + .../DB2/CSVFiles/cword_dc.csv | 75 + .../DB2/CSVFiles/doc_alias.csv | 10 + .../DB2/CSVFiles/doc_alias_dc.csv | 10 + .../DB2/CSVFiles/doc_class.csv | 9 + .../configuration-ha/DB2/CSVFiles/heading.csv | 2 + .../DB2/CSVFiles/heading_alias.csv | 2 + .../DB2/CSVFiles/heading_alias_dc.csv | 2 + .../DB2/CSVFiles/heading_alias_h.csv | 2 + .../DB2/CSVFiles/heading_dc.csv | 2 + .../DB2/CSVFiles/key_alias.csv | 238 ++ .../DB2/CSVFiles/key_alias_dc.csv | 255 ++ .../DB2/CSVFiles/key_alias_kc.csv | 255 ++ .../DB2/CSVFiles/key_class.csv | 201 ++ .../DB2/CSVFiles/key_class_dc.csv | 201 ++ BACA/configuration-ha/DB2/CreateBaseDB.sh | 122 + BACA/configuration-ha/DB2/ScriptFunctions.sh | 16 + .../DB2/common_for_DB2.sh.sample | 47 + .../DB2/sql/CreateBacaSchema.sql.template | 6 + .../DB2/sql/CreateBacaTables.sql | 586 ++++ .../DB2/sql/CreateBaseDB.sql.template | 27 + .../DB2/sql/CreateDB.sql.template | 9 + .../DB2/sql/InsertTenant.sql.template | 4 + .../DB2/sql/InsertUser.sql.template | 5 + .../DB2/sql/LoadData.sql.template | 37 + .../DB2/sql/TablePermissions.sql.template | 19 + BACA/configuration-ha/README.md | 4 + BACA/configuration-ha/baca-psp.yaml | 65 + BACA/configuration-ha/bashfunctions.sh | 403 +++ BACA/configuration-ha/common.sh | 27 + BACA/configuration-ha/common_ICP_template.sh | 27 + BACA/configuration-ha/common_OCP_template.sh | 27 + BACA/configuration-ha/createSSLCert.sh | 197 ++ .../delete_ContentAnalyzer.sh | 117 + BACA/configuration-ha/generateMemoryValues.sh | 28 + BACA/configuration-ha/init_deployments.sh | 90 + BACA/configuration-ha/init_persistent.sh | 14 + BACA/configuration-ha/mongo/post-setup.sh | 121 + BACA/configuration-ha/mongo/pre-setup.sh | 89 + .../configuration-ha/mongoadmin/post-setup.sh | 133 + BACA/configuration-ha/mongoadmin/pre-setup.sh | 89 + BACA/configuration-ha/openssl.cnf | 38 + BACA/configuration-ha/renewCert.sh | 54 + BACA/configuration-ha/sppersistent.yaml | 159 + BACA/configuration/DB2/AddOntology.sh | 7 + BACA/configuration/DB2/AddTenant.sh | 349 +++ BACA/configuration/DB2/CSVFiles/cword.csv | 75 + BACA/configuration/DB2/CSVFiles/cword_dc.csv | 75 + BACA/configuration/DB2/CSVFiles/doc_alias.csv | 10 + .../DB2/CSVFiles/doc_alias_dc.csv | 10 + BACA/configuration/DB2/CSVFiles/doc_class.csv | 9 + BACA/configuration/DB2/CSVFiles/heading.csv | 2 + .../DB2/CSVFiles/heading_alias.csv | 2 + .../DB2/CSVFiles/heading_alias_dc.csv | 2 + .../DB2/CSVFiles/heading_alias_h.csv | 2 + .../configuration/DB2/CSVFiles/heading_dc.csv | 2 + BACA/configuration/DB2/CSVFiles/key_alias.csv | 238 ++ .../DB2/CSVFiles/key_alias_dc.csv | 255 ++ .../DB2/CSVFiles/key_alias_kc.csv | 255 ++ BACA/configuration/DB2/CSVFiles/key_class.csv | 201 ++ .../DB2/CSVFiles/key_class_dc.csv | 201 ++ BACA/configuration/DB2/CreateBaseDB.sh | 122 + BACA/configuration/DB2/ScriptFunctions.sh | 16 + .../DB2/common_for_DB2.sh.sample | 47 + .../DB2/sql/CreateBacaSchema.sql.template | 6 + .../DB2/sql/CreateBacaTables.sql | 586 ++++ .../DB2/sql/CreateBaseDB.sql.template | 27 + .../DB2/sql/CreateDB.sql.template | 9 + .../DB2/sql/InsertTenant.sql.template | 4 + .../DB2/sql/InsertUser.sql.template | 5 + .../DB2/sql/LoadData.sql.template | 37 + .../DB2/sql/TablePermissions.sql.template | 19 + BACA/configuration/README.md | 4 + BACA/configuration/baca-psp.yaml | 65 + BACA/configuration/bashfunctions.sh | 402 +++ BACA/configuration/common.sh | 27 + BACA/configuration/common_ICP_template.sh | 27 + BACA/configuration/common_OCP_template.sh | 27 + BACA/configuration/createSSLCert.sh | 179 ++ BACA/configuration/delete_ContentAnalyzer.sh | 118 + BACA/configuration/generateMemoryValues.sh | 28 + BACA/configuration/init_deployments.sh | 90 + BACA/configuration/init_persistent.sh | 14 + BACA/configuration/renewCert.sh | 54 + BACA/configuration/sppersistent.yaml | 83 + BACA/docs/DB2_setup.md | 40 + BACA/docs/common_sh_values.md | 47 + BACA/docs/init_deployment.md | 38 + BACA/docs/post-deployment.md | 79 + BACA/docs/values_yaml_parameters.md | 121 + BACA/helm-charts/README.md | 55 + BACA/helm-charts/ibm-dba-baca-prod-1.0.0.tgz | Bin 0 -> 516313 bytes .../ibm-dba-baca-prod-1.0.0_ha.tgz | Bin 0 -> 77203 bytes BACA/k8s-yaml/README.md | 36 + BACA/k8s-yaml/ca-deploy.yml | 2636 +++++++++++++++++ BACA/k8s-yaml/ca_deploy_yaml_parameters.md | 59 + BAI/README.md | 642 ++++ BAI/configuration/.gitkeep | 0 .../bai-pod-security-policy.yaml | 31 + BAI/configuration/pv.yaml | 103 + BAI/configuration/sample-values.yaml | 60 + BAI/helm-charts/.gitkeep | 0 BAI/helm-charts/README.md | 70 + ...ibm-business-automation-insights-3.1.0.tgz | Bin 0 -> 86291 bytes BAI/k8s-yaml/.gitkeep | 0 BAI/k8s-yaml/README.md | 59 + BAI/platform/minikube/Monitoring.md | 251 ++ BAI/platform/minikube/README.md | 287 ++ .../minikube/configuration/bai-configmap.yaml | 49 + .../minikube/configuration/bai-psp.yaml | 38 + .../configuration/easy-install-kafka.yaml | 33 + .../minikube/configuration/easy-install.yaml | 110 + BAI/platform/minikube/configuration/pv.yaml | 55 + BAI/platform/minikube/get-logs.sh | 31 + BAI/platform/minikube/install-bai-minikube.sh | 188 ++ BAI/platform/minikube/install-bai.sh | 172 ++ BAI/platform/minikube/ip-update.sh | 72 + BAI/platform/minikube/recover-minikube-bai.sh | 35 + BAI/platform/minikube/utilities.sh | 77 + CONTENT/README.md | 32 + .../CMIS/configDropins/overrides/ldap_AD.xml | 17 + .../CMIS/configDropins/overrides/ldap_TDS.xml | 18 + .../configDropins/overrides/DB2JCCDriver.xml | 6 + .../CPE/configDropins/overrides/GCD.xml | 29 + .../CPE/configDropins/overrides/GCD_HADR.xml | 35 + .../configDropins/overrides/GCD_Oracle.xml | 21 + .../CPE/configDropins/overrides/OBJSTORE.xml | 29 + .../configDropins/overrides/OBJSTORE_HADR.xml | 32 + .../overrides/OBJSTORE_Oracle.xml | 23 + .../configDropins/overrides/OraJDBCDriver.xml | 7 + .../CPE/configDropins/overrides/ldap_AD.xml | 17 + .../CPE/configDropins/overrides/ldap_TDS.xml | 18 + .../sslkeystore/cssSelfsignedServerStore | Bin 0 -> 2231 bytes .../configDropins/overrides/CORS.xml | 10 + .../configDropins/overrides/UMS.xml | 21 + .../overrides/UMS_clientRegistration.json | 33 + .../configDropins/overrides/crs-ssl.xml | 5 + .../configDropins/overrides/ldap_AD.xml | 17 + .../configDropins/overrides/ldap_TDS.xml | 18 + CONTENT/configuration/README.md | 16 + .../extShare/configDropins/overrides/CORS.xml | 10 + .../configDropins/overrides/DB2JCCDriver.xml | 6 + .../configDropins/overrides/ICNDS.xml | 15 + .../configDropins/overrides/ICNDS_HADR.xml | 17 + .../configDropins/overrides/ICNDS_Oracle.xml | 12 + .../configDropins/overrides/OraJDBCDriver.xml | 7 + .../configDropins/overrides/ldapExt.xml | 7 + .../configDropins/overrides/ldap_AD.xml | 17 + .../configDropins/overrides/ldap_TDS.xml | 18 + CONTENT/helm-charts/README.md | 154 + .../ibm-dba-contentrestservice-dev-3.0.0.tgz | Bin 0 -> 58039 bytes .../ibm-dba-contentsearch-3.0.0.tgz | Bin 0 -> 62185 bytes .../ibm-dba-contentservices-3.0.0.tgz | Bin 0 -> 64026 bytes CONTENT/helm-charts/ibm-dba-cscmis-1.7.0.tgz | Bin 0 -> 63859 bytes .../ibm-dba-extshare-prod-3.0.0.tgz | Bin 0 -> 63132 bytes CONTENT/k8s-yaml/CMIS/cmis-deploy.yml | 150 + CONTENT/k8s-yaml/CPE/cpe-deploy.yml | 162 + CONTENT/k8s-yaml/CSS/css-deploy.yml | 142 + .../k8s-yaml/ContentGraphQL/crs-deploy.yml | 110 + CONTENT/k8s-yaml/README.md | 78 + CONTENT/k8s-yaml/extShare/es-deploy.yml | 128 + LICENSE | 221 ++ NAVIGATOR/README.md | 37 + NAVIGATOR/configuration/.gitkeep | 0 .../configDropins/overrides/DB2JCCDriver.xml | 6 + .../ICN/configDropins/overrides/ICNDS.xml | 15 + .../configDropins/overrides/ICNDS_HADR.xml | 17 + .../configDropins/overrides/ICNDS_Oracle.xml | 12 + .../configDropins/overrides/OraJDBCDriver.xml | 7 + .../ICN/configDropins/overrides/ldap_AD.xml | 17 + .../ICN/configDropins/overrides/ldap_TDS.xml | 18 + NAVIGATOR/configuration/README.md | 8 + NAVIGATOR/helm-charts/.gitkeep | 0 NAVIGATOR/helm-charts/README.md | 99 + .../helm-charts/ibm-dba-navigator-3.0.0.tgz | Bin 0 -> 63308 bytes NAVIGATOR/k8s-yaml/.gitkeep | 0 NAVIGATOR/k8s-yaml/README.md | 38 + NAVIGATOR/k8s-yaml/icn-deploy.yml | 156 + ODM/README.md | 125 + ODM/configuration/.gitkeep | 0 .../sample-datasource-dc-oracle.xml | 24 + .../sample-datasource-ds-oracle.xml | 18 + .../sample-driver-pvc.yaml | 11 + ODM/configuration/odm-eval.yaml | 159 + ODM/configuration/sample-values.yaml | 117 + ODM/configuration/sample-webSecurity-LDAP.xml | 51 + .../sample-webSecurity-basic-registry.xml | 52 + .../template-plugin-configuration.properties | 27 + ODM/helm-charts/.gitkeep | 0 ODM/helm-charts/README.md | 100 + ODM/helm-charts/ibm-odm-prod-2.2.0.tgz | Bin 0 -> 26720 bytes ODM/k8s-yaml/.gitkeep | 0 ODM/k8s-yaml/README.md | 110 + ODM/platform/README_Eval_Minikube.md | 72 + ODM/platform/README_Eval_Openshift.md | 62 + ODM/platform/README_Minikube.md | 103 + ODM/platform/README_Openshift.md | 165 ++ README.md | 74 +- images/bai-architecture.jpg | Bin 0 -> 182269 bytes images/diag_icp4a_k8s.jpg | Bin 0 -> 69473 bytes images/samples-structure.png | Bin 0 -> 39946 bytes legal-notice.md | 112 + scripts/loadimages.sh | 149 + 208 files changed, 17161 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 BACA/README-HA.md create mode 100644 BACA/README.md create mode 100644 BACA/configuration-ha/DB2/AddOntology.sh create mode 100755 BACA/configuration-ha/DB2/AddTenant.sh create mode 100644 BACA/configuration-ha/DB2/CSVFiles/cword.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/cword_dc.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/doc_alias.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/doc_alias_dc.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/doc_class.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/heading.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/heading_alias.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/heading_alias_dc.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/heading_alias_h.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/heading_dc.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/key_alias.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/key_alias_dc.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/key_alias_kc.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/key_class.csv create mode 100644 BACA/configuration-ha/DB2/CSVFiles/key_class_dc.csv create mode 100755 BACA/configuration-ha/DB2/CreateBaseDB.sh create mode 100644 BACA/configuration-ha/DB2/ScriptFunctions.sh create mode 100644 BACA/configuration-ha/DB2/common_for_DB2.sh.sample create mode 100644 BACA/configuration-ha/DB2/sql/CreateBacaSchema.sql.template create mode 100644 BACA/configuration-ha/DB2/sql/CreateBacaTables.sql create mode 100644 BACA/configuration-ha/DB2/sql/CreateBaseDB.sql.template create mode 100644 BACA/configuration-ha/DB2/sql/CreateDB.sql.template create mode 100644 BACA/configuration-ha/DB2/sql/InsertTenant.sql.template create mode 100644 BACA/configuration-ha/DB2/sql/InsertUser.sql.template create mode 100644 BACA/configuration-ha/DB2/sql/LoadData.sql.template create mode 100644 BACA/configuration-ha/DB2/sql/TablePermissions.sql.template create mode 100644 BACA/configuration-ha/README.md create mode 100644 BACA/configuration-ha/baca-psp.yaml create mode 100755 BACA/configuration-ha/bashfunctions.sh create mode 100644 BACA/configuration-ha/common.sh create mode 100644 BACA/configuration-ha/common_ICP_template.sh create mode 100644 BACA/configuration-ha/common_OCP_template.sh create mode 100644 BACA/configuration-ha/createSSLCert.sh create mode 100755 BACA/configuration-ha/delete_ContentAnalyzer.sh create mode 100755 BACA/configuration-ha/generateMemoryValues.sh create mode 100755 BACA/configuration-ha/init_deployments.sh create mode 100755 BACA/configuration-ha/init_persistent.sh create mode 100644 BACA/configuration-ha/mongo/post-setup.sh create mode 100644 BACA/configuration-ha/mongo/pre-setup.sh create mode 100644 BACA/configuration-ha/mongoadmin/post-setup.sh create mode 100644 BACA/configuration-ha/mongoadmin/pre-setup.sh create mode 100644 BACA/configuration-ha/openssl.cnf create mode 100644 BACA/configuration-ha/renewCert.sh create mode 100644 BACA/configuration-ha/sppersistent.yaml create mode 100644 BACA/configuration/DB2/AddOntology.sh create mode 100755 BACA/configuration/DB2/AddTenant.sh create mode 100644 BACA/configuration/DB2/CSVFiles/cword.csv create mode 100644 BACA/configuration/DB2/CSVFiles/cword_dc.csv create mode 100644 BACA/configuration/DB2/CSVFiles/doc_alias.csv create mode 100644 BACA/configuration/DB2/CSVFiles/doc_alias_dc.csv create mode 100644 BACA/configuration/DB2/CSVFiles/doc_class.csv create mode 100644 BACA/configuration/DB2/CSVFiles/heading.csv create mode 100644 BACA/configuration/DB2/CSVFiles/heading_alias.csv create mode 100644 BACA/configuration/DB2/CSVFiles/heading_alias_dc.csv create mode 100644 BACA/configuration/DB2/CSVFiles/heading_alias_h.csv create mode 100644 BACA/configuration/DB2/CSVFiles/heading_dc.csv create mode 100644 BACA/configuration/DB2/CSVFiles/key_alias.csv create mode 100644 BACA/configuration/DB2/CSVFiles/key_alias_dc.csv create mode 100644 BACA/configuration/DB2/CSVFiles/key_alias_kc.csv create mode 100644 BACA/configuration/DB2/CSVFiles/key_class.csv create mode 100644 BACA/configuration/DB2/CSVFiles/key_class_dc.csv create mode 100755 BACA/configuration/DB2/CreateBaseDB.sh create mode 100644 BACA/configuration/DB2/ScriptFunctions.sh create mode 100644 BACA/configuration/DB2/common_for_DB2.sh.sample create mode 100644 BACA/configuration/DB2/sql/CreateBacaSchema.sql.template create mode 100644 BACA/configuration/DB2/sql/CreateBacaTables.sql create mode 100644 BACA/configuration/DB2/sql/CreateBaseDB.sql.template create mode 100644 BACA/configuration/DB2/sql/CreateDB.sql.template create mode 100644 BACA/configuration/DB2/sql/InsertTenant.sql.template create mode 100644 BACA/configuration/DB2/sql/InsertUser.sql.template create mode 100644 BACA/configuration/DB2/sql/LoadData.sql.template create mode 100644 BACA/configuration/DB2/sql/TablePermissions.sql.template create mode 100644 BACA/configuration/README.md create mode 100644 BACA/configuration/baca-psp.yaml create mode 100755 BACA/configuration/bashfunctions.sh create mode 100644 BACA/configuration/common.sh create mode 100644 BACA/configuration/common_ICP_template.sh create mode 100644 BACA/configuration/common_OCP_template.sh create mode 100644 BACA/configuration/createSSLCert.sh create mode 100755 BACA/configuration/delete_ContentAnalyzer.sh create mode 100755 BACA/configuration/generateMemoryValues.sh create mode 100755 BACA/configuration/init_deployments.sh create mode 100755 BACA/configuration/init_persistent.sh create mode 100644 BACA/configuration/renewCert.sh create mode 100644 BACA/configuration/sppersistent.yaml create mode 100644 BACA/docs/DB2_setup.md create mode 100644 BACA/docs/common_sh_values.md create mode 100644 BACA/docs/init_deployment.md create mode 100644 BACA/docs/post-deployment.md create mode 100644 BACA/docs/values_yaml_parameters.md create mode 100644 BACA/helm-charts/README.md create mode 100644 BACA/helm-charts/ibm-dba-baca-prod-1.0.0.tgz create mode 100644 BACA/helm-charts/ibm-dba-baca-prod-1.0.0_ha.tgz create mode 100644 BACA/k8s-yaml/README.md create mode 100644 BACA/k8s-yaml/ca-deploy.yml create mode 100644 BACA/k8s-yaml/ca_deploy_yaml_parameters.md create mode 100644 BAI/README.md create mode 100644 BAI/configuration/.gitkeep create mode 100644 BAI/configuration/bai-pod-security-policy.yaml create mode 100644 BAI/configuration/pv.yaml create mode 100644 BAI/configuration/sample-values.yaml create mode 100644 BAI/helm-charts/.gitkeep create mode 100644 BAI/helm-charts/README.md create mode 100644 BAI/helm-charts/ibm-business-automation-insights-3.1.0.tgz create mode 100644 BAI/k8s-yaml/.gitkeep create mode 100644 BAI/k8s-yaml/README.md create mode 100644 BAI/platform/minikube/Monitoring.md create mode 100644 BAI/platform/minikube/README.md create mode 100755 BAI/platform/minikube/configuration/bai-configmap.yaml create mode 100644 BAI/platform/minikube/configuration/bai-psp.yaml create mode 100644 BAI/platform/minikube/configuration/easy-install-kafka.yaml create mode 100644 BAI/platform/minikube/configuration/easy-install.yaml create mode 100644 BAI/platform/minikube/configuration/pv.yaml create mode 100755 BAI/platform/minikube/get-logs.sh create mode 100755 BAI/platform/minikube/install-bai-minikube.sh create mode 100755 BAI/platform/minikube/install-bai.sh create mode 100755 BAI/platform/minikube/ip-update.sh create mode 100755 BAI/platform/minikube/recover-minikube-bai.sh create mode 100644 BAI/platform/minikube/utilities.sh create mode 100644 CONTENT/README.md create mode 100644 CONTENT/configuration/CMIS/configDropins/overrides/ldap_AD.xml create mode 100644 CONTENT/configuration/CMIS/configDropins/overrides/ldap_TDS.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/DB2JCCDriver.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/GCD.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/GCD_HADR.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/GCD_Oracle.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE_HADR.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE_Oracle.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/OraJDBCDriver.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/ldap_AD.xml create mode 100644 CONTENT/configuration/CPE/configDropins/overrides/ldap_TDS.xml create mode 100644 CONTENT/configuration/CSS/CSS_Server_data/sslkeystore/cssSelfsignedServerStore create mode 100644 CONTENT/configuration/ContentGraphQL/configDropins/overrides/CORS.xml create mode 100644 CONTENT/configuration/ContentGraphQL/configDropins/overrides/UMS.xml create mode 100644 CONTENT/configuration/ContentGraphQL/configDropins/overrides/UMS_clientRegistration.json create mode 100644 CONTENT/configuration/ContentGraphQL/configDropins/overrides/crs-ssl.xml create mode 100644 CONTENT/configuration/ContentGraphQL/configDropins/overrides/ldap_AD.xml create mode 100644 CONTENT/configuration/ContentGraphQL/configDropins/overrides/ldap_TDS.xml create mode 100644 CONTENT/configuration/README.md create mode 100644 CONTENT/configuration/extShare/configDropins/overrides/CORS.xml create mode 100644 CONTENT/configuration/extShare/configDropins/overrides/DB2JCCDriver.xml create mode 100644 CONTENT/configuration/extShare/configDropins/overrides/ICNDS.xml create mode 100644 CONTENT/configuration/extShare/configDropins/overrides/ICNDS_HADR.xml create mode 100644 CONTENT/configuration/extShare/configDropins/overrides/ICNDS_Oracle.xml create mode 100644 CONTENT/configuration/extShare/configDropins/overrides/OraJDBCDriver.xml create mode 100644 CONTENT/configuration/extShare/configDropins/overrides/ldapExt.xml create mode 100644 CONTENT/configuration/extShare/configDropins/overrides/ldap_AD.xml create mode 100644 CONTENT/configuration/extShare/configDropins/overrides/ldap_TDS.xml create mode 100644 CONTENT/helm-charts/README.md create mode 100644 CONTENT/helm-charts/ibm-dba-contentrestservice-dev-3.0.0.tgz create mode 100644 CONTENT/helm-charts/ibm-dba-contentsearch-3.0.0.tgz create mode 100644 CONTENT/helm-charts/ibm-dba-contentservices-3.0.0.tgz create mode 100644 CONTENT/helm-charts/ibm-dba-cscmis-1.7.0.tgz create mode 100644 CONTENT/helm-charts/ibm-dba-extshare-prod-3.0.0.tgz create mode 100644 CONTENT/k8s-yaml/CMIS/cmis-deploy.yml create mode 100644 CONTENT/k8s-yaml/CPE/cpe-deploy.yml create mode 100644 CONTENT/k8s-yaml/CSS/css-deploy.yml create mode 100755 CONTENT/k8s-yaml/ContentGraphQL/crs-deploy.yml create mode 100644 CONTENT/k8s-yaml/README.md create mode 100755 CONTENT/k8s-yaml/extShare/es-deploy.yml create mode 100755 LICENSE create mode 100644 NAVIGATOR/README.md create mode 100644 NAVIGATOR/configuration/.gitkeep create mode 100644 NAVIGATOR/configuration/ICN/configDropins/overrides/DB2JCCDriver.xml create mode 100644 NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS.xml create mode 100644 NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS_HADR.xml create mode 100644 NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS_Oracle.xml create mode 100644 NAVIGATOR/configuration/ICN/configDropins/overrides/OraJDBCDriver.xml create mode 100644 NAVIGATOR/configuration/ICN/configDropins/overrides/ldap_AD.xml create mode 100644 NAVIGATOR/configuration/ICN/configDropins/overrides/ldap_TDS.xml create mode 100644 NAVIGATOR/configuration/README.md create mode 100644 NAVIGATOR/helm-charts/.gitkeep create mode 100644 NAVIGATOR/helm-charts/README.md create mode 100644 NAVIGATOR/helm-charts/ibm-dba-navigator-3.0.0.tgz create mode 100644 NAVIGATOR/k8s-yaml/.gitkeep create mode 100644 NAVIGATOR/k8s-yaml/README.md create mode 100644 NAVIGATOR/k8s-yaml/icn-deploy.yml create mode 100644 ODM/README.md create mode 100644 ODM/configuration/.gitkeep create mode 100644 ODM/configuration/custom-external-database/sample-datasource-dc-oracle.xml create mode 100644 ODM/configuration/custom-external-database/sample-datasource-ds-oracle.xml create mode 100644 ODM/configuration/custom-external-database/sample-driver-pvc.yaml create mode 100644 ODM/configuration/odm-eval.yaml create mode 100755 ODM/configuration/sample-values.yaml create mode 100644 ODM/configuration/sample-webSecurity-LDAP.xml create mode 100644 ODM/configuration/sample-webSecurity-basic-registry.xml create mode 100644 ODM/configuration/template-plugin-configuration.properties create mode 100644 ODM/helm-charts/.gitkeep create mode 100644 ODM/helm-charts/README.md create mode 100644 ODM/helm-charts/ibm-odm-prod-2.2.0.tgz create mode 100644 ODM/k8s-yaml/.gitkeep create mode 100644 ODM/k8s-yaml/README.md create mode 100644 ODM/platform/README_Eval_Minikube.md create mode 100644 ODM/platform/README_Eval_Openshift.md create mode 100644 ODM/platform/README_Minikube.md create mode 100644 ODM/platform/README_Openshift.md create mode 100644 images/bai-architecture.jpg create mode 100644 images/diag_icp4a_k8s.jpg create mode 100644 images/samples-structure.png create mode 100644 legal-notice.md create mode 100755 scripts/loadimages.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..ef4db9d6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.idea +.DS_Store +/BAI/platform/minikube/ibm-bai-dev-3.1.0-*-.tar.gz +/BAI/platform/minikube/chart* +/BAI/platform/minikube/images* \ No newline at end of file diff --git a/BACA/README-HA.md b/BACA/README-HA.md new file mode 100644 index 00000000..a868765b --- /dev/null +++ b/BACA/README-HA.md @@ -0,0 +1,93 @@ +# Deploy Business Automation Content Analyzer + +IBM Business Automation Content Analyzer offers the power of intelligent capture with the flexibility of an API that enables you to extend the value of your core enterprise content management (ECM) technology stack. Advanced AI more accurately classifies data and can be configurable in minutes, instead of weeks. + +For more information, see [IBM Business Automation Content Analyzer: Details](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.offerings/topics/con_baca.html) + +## Requirements and Prerequisites + +Perform the following tasks to prepare to deploy your Business Automation Content Analyzer images on Kubernetes: + +- Download the PPA. Refer to the top repository [readme](../README.md) to find instructions on how to push and tag the product container images to your Docker registry. + +- Several utility scripts are provided in this git repository to assist in the creation of databases, PVCs, secrets, etc. When you are installing via the helm chart method. Information about the utility can be found in the [Configuration Readme](configuration/README.md). + +- Prepare environment for IBM Business Automation Content Analyzer. See [Preparing to install automation containers on Kubernetes](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_bacak8s.html). These procedures include setting up databases, LDAP, storage, and configuration files that are required for use and operation. + +NOTE: To deploy Redis HA, and Mongo HA, you need to follow the below instructions to download and push the HA docker images to the appropriate docker registries. +## Steps to load the High-Availability docker images for Redis and Mongo +1) Download the docker images to your ICP's bootmaster node. +2) Un-tar the image by `tar xvf .tar.tgz`. For example: `tar xvf redis-ha.tar.tgz` +3) For OpenShift, be sure to log into docker first by executing: + - oc login (and enter user name and password) + - docker login -u $(oc whoami) -p $(oc whoami -t) +3) Load the container into your local repository by `docker load --input `. For example: `docker load --input redis-ha.tar` +4) You should see the image shows up as `hyc-smartpage-stage-docker-local.artifactory.swg-devops.com/smartpages/redis:ha` by issuing `docker images` +5) Tag the docker image by +`docker tag hyc-smartpage-stage-docker-local.artifactory.swg-devops.com/smartpages/redis:ha mycluster.icp:8500/sp/redis:ha` + +NOTE: +- `mycluster.icp:8500` is the ICP's clustername and port +- `sp`: the namespace BACA will be deployed on + +6) Push the docker image to ICP's repository +- `docker login mycluster.icp:8500` +- `docker push mycluster.icp:8500/sp/redis:ha` + + +## Redis +- You can change the `replicas` value in the `values.yaml` under global->redis to the desired value. The default is 3, which means you must have 3 worker nodes. +- You can also adjust the `quorum` value. For more information on `quorum` can be found [here](https://redis.io/topics/sentinel) + +## Minio +- The Minio helm chart has been modified from the base helm chart that is part of the baca package to deploy Minio in distributed mode. In particular the mode in the values.yaml has been set to 'distributed'. + +- In the 'distributed' mode, the helm chart will use StatefulSet to deploy minio rather than the Deployment which is used for the 'standalone' mode. There will a PVC dynamically created for each StatefulSet replica. The default number of replicas is 4. So, there will be 4 PVC's generated dynamically when minio is deployed. There needs to be four persistent volumes (PVs) available that will meet the PVC requirements. The sppersistent.yaml file in the configuration directory contains the definition of the 4 PVs needed by the 4 PVCs. If you increase the number of replicas (4 is the minimun number replicas required for distributed mode), you will need to create a corresponding number of PVs. You can use the PV defintion in the sppersistent.yaml as your template for defining additional PVs. + + +## RabbitMQ + +- The `rabbitmq-ha` helm chart is installed as a subchart when installing the `ibm-dba-baca-prod` helm chart. That helm chart deploys RabbitMQ in HA (high-availability) mode for BACA to use. + +- No changes are needed to deploy this subchart with the default parameters. With the default parameters, there will be 3 RabbitMQ pods (this means for each BACA task queue, there will be 1 master queue and 2 mirrors). If you want to increase or decrease the number of RabbitMQ pods, change the `replicaCount` parameter in the `charts/rabbitmq-ha/values.yaml`. + +## Mongo DBs + +- Make sure the `common.sh` has been filled out properly +- Copy the `configuration/mongo/pre-setup.sh` and `configuration/mongo/post-setup.sh` to `stable/ibm-dba-baca-prod/charts/mongo-ha` +- Copy the `configuration/mongoadmin/pre-setup.sh` and `configuration/mongoadmin/post-setup.sh` to `stable/ibm-dba-baca-prod/charts/mongoadmin-ha` +- Run the `stable/ibm-dba-baca-prod/charts/mongo-ha/pre_setup.sh` and `stable/ibm-dba-baca-prod/charts/mongoadmin-ha/pre_setup.sh` respectively. +- By default we have 3 replicas for mongodb config, if you want to increase the number of replicas, please reference comments sections under `cp mongodb router(mongos)` in `pre-setup.sh` for mongo-ha and mongoadmin-ha. +- If you have different namespace other than `sp`, please reference comments sections under `Configuring Config Server Replica Sets`, `Configuring shardX Replica Sets` and `...first mongos router is now running ` in `post-setup.sh` for mongo-ha and mongoadmin-ha. +- By default we have 3 replicas for mongodb, if you want to increase the number of replicas, please reference comments sections under `Configuring Config Server Replica Sets` and `Configuring shardX Replica Sets` in `post-setup.sh` for mongo-ha and mongoadmin-ha. + +## Deploying + +You can deploy your container images with the following method: +- [Using Helm charts](helm-charts/README.md) + + + +# Completing post deployment configuration + +- After you deploy your container images, you might need to perform some required and some optional steps to get your Business Automation Content Analyzer environment up and running. For detailed instructions, see [Completing post deployment tasks for Business Automation Content Analyzer](docs/post-deployment.md) +## Mongo DBs + +1) When you see all the `mongodb-shard-` and `mongodb-admin-shard-` pods are in Running/Ready status (eg: 1/1), you need to run the `stable/ibm-dba-baca-prod/charts/mongo-ha/post_setup.sh` and `stable/ibm-dba-baca-prod/charts/mongoadmin-ha/post_setup.sh` respectively + +## Redis + +1) Get the Redis master ip address by executing: +- `kubectl -n get ep` +2) Look for the name `redis-ha-announce-0`, and copy the IP address to the right of it. +3) Edit the spbackend deployments by executing: +- `kubectl -n edit deploy spbackend` +- Change `RESULT_HOST`'s value to the IP obtained in step 2 +4) Edit the callerapi deployment by executing: +- `kubectl -n edit deploy callerapi` +- Change `RESULTS_URL`'s value to the IP obtained in step 2 +5) Edit the reannalyze deployment by executing: +- `kubectl -n edit deploy reanalyze` +- Change `RESULTS_URL`'s value to the IP obtained in step 2 + +In the event the redis master goes down, you must use the above procedure to determine the new IP address of the new redis master and follow the same steps to update BACA's containers. diff --git a/BACA/README.md b/BACA/README.md new file mode 100644 index 00000000..73420d55 --- /dev/null +++ b/BACA/README.md @@ -0,0 +1,25 @@ +# Deploy Business Automation Content Analyzer + +IBM Business Automation Content Analyzer offers the power of intelligent capture with the flexibility of an API that enables you to extend the value of your core enterprise content management (ECM) technology stack. Advanced AI more accurately classifies data and can be configurable in minutes, instead of weeks. + +For more information, see [IBM Business Automation Content Analyzer: Details](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.offerings/topics/con_baca.html) + +## Requirements and Prerequisites + +Perform the following tasks to prepare to deploy your Business Automation Content Analyzer images on Kubernetes: + +- Download the PPA. Refer to the top repository [readme](../README.md) to find instructions on how to push and tag the product container images to your Docker registry. + +- Prepare environment for IBM Business Automation Content Analyzer. See [Preparing to install automation containers on Kubernetes](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_bacak8s.html). These procedures include setting up databases, LDAP, storage, and configuration files that are required for use and operation. + +- Several utility scripts are provided in this git repository to assist in the creation of databases, PVCs, secrets, etc. regardless of whether you are installing via the helm chart or generic yaml method. See the detail information about the utility in [Configuration Readme](configuration/README.md). + +## Deploying + +You can deploy your container images with the following methods: +- [Using Helm charts](helm-charts/README.md) +- [Using Kubernetes YAML](k8s-yaml/README.md) + +## Completing post deployment configuration + +After you deploy your container images, you might need to perform some required and some optional steps to get your Business Automation Content Analyzer environment up and running. For detail instructions, see [Completing post deployment tasks for Business Automation Content Analyzer](docs/post-deployment.md) diff --git a/BACA/configuration-ha/DB2/AddOntology.sh b/BACA/configuration-ha/DB2/AddOntology.sh new file mode 100644 index 00000000..73d6a186 --- /dev/null +++ b/BACA/configuration-ha/DB2/AddOntology.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +echo +echo "-- This script will create a new ontology for an existing tenant and load it with default data." +echo + +AddTenant.sh 1 \ No newline at end of file diff --git a/BACA/configuration-ha/DB2/AddTenant.sh b/BACA/configuration-ha/DB2/AddTenant.sh new file mode 100755 index 00000000..f6257593 --- /dev/null +++ b/BACA/configuration-ha/DB2/AddTenant.sh @@ -0,0 +1,349 @@ +#!/bin/bash +. ScriptFunctions.sh + +INPUT_PROPS_FILENAME="./common_for_DB2.sh" + +if [ -f $INPUT_PROPS_FILENAME ]; then + echo "Found a $INPUT_PROPS_FILENAME. Reading in variables from that script." + . $INPUT_PROPS_FILENAME +fi + +NUMARGS=$# + +# if an argument of '1' is passed, it is assumed that a tenant already exists, +# and the script will add a new ontology to an existing tenant +if [[ "$NUMARGS" -gt 0 ]]; then + use_existing_tenant=$1 +fi + + +if [[ -z "$use_existing_tenant" || $use_existing_tenant -ne 1 ]]; then + echo -e "\n-- This script will create a BACA database and an ontology for a new tenant and load it with default data" + echo +fi + +if [[ -z "$use_existing_tenant" || $use_existing_tenant -ne 1 ]]; then + echo "Enter the tenant ID for the new tenant: (eg. t4900)" +else + echo "Enter the tenant ID for the existing tenant: (eg. t4900)" +fi +while [[ -z "$tenant_id" || $tenant_id == '' ]] +do + echo "Please enter a valid value for the tenant ID:" + read tenant_id +done + +echo +if [[ -z "$use_existing_tenant" || $use_existing_tenant -ne 1 ]]; then + echo "Enter the name of the new BACA tenant database to create: (eg. t4900)" +else + echo "Enter the name of the existing BACA tenant database: (eg. t4900)" +fi +while [[ $tenant_db_name == '' ]] +do + echo "Please enter a valid value for the tenant database name of max length 8 :" + read tenant_db_name + while [ ${#tenant_db_name} -gt 8 ]; + do + echo "Please enter a valid value for the tenant database name of max length 8 :" + read tenant_db_name; + echo ${#tenant_db_name}; + done +done + +default_dbserver='thrown1.fyre.ibm.com' +if [[ -z "$baca_database_server_ip" ]]; then + echo -e "\nEnter the host/IP of the database server. If no value is entered we will use the following default value: " $default_dbserver + read baca_database_server_ip + if [[ -z "$baca_database_server_ip" ]]; then + baca_database_server_ip=$default_dbserver + fi +fi + +default_dbport=50000 +if [[ -z "$baca_database_port" ]]; then + echo -e "\nEnter the port of the database server. If nothing is entered we will use the following default value: " $default_dbport + read baca_database_port + if [[ -z "$baca_database_port" ]]; then + baca_database_port=$default_dbport + fi +fi + +if [[ $use_existing_tenant -eq 1 ]]; then + user_already_defined=1 +fi + +echo +echo "We need a non-admin database user that BACA will use to access your BACA tenant database." +while [[ -z "$tenant_db_user" || $tenant_db_user == "" ]] +do + echo + if [[ -z "$user_already_defined" || $user_already_defined -ne 1 ]]; then + while [[ "$create_new_user" != "y" && "$create_new_user" != "Y" && "$create_new_user" != "n" && "$create_new_user" != "N" ]] + do + echo "Do you want this script to create a database user for you (This will create local OS user)? (Please enter y or n)" + read create_new_user + done + + if [[ "$create_new_user" == "n" && "$create_new_user" == "N" ]]; then + user_already_defined=1 + fi + fi + + while [[ -z "$tenant_db_user" || $tenant_db_user == "" ]] + do + if [[ "$create_new_user" == "y" || "$create_new_user" = "Y" ]]; then + echo "Please enter the name of database user to create: " + else + echo "Please enter the name of an existing database user" + fi + read tenant_db_user + done + + if [[ -z "$user_already_defined" || $user_already_defined -ne 1 ]]; then + getent passwd $tenant_db_user > /dev/null + if [[ $? -eq 0 ]]; then + while [[ "$use_existing_user" != "y" && "$use_existing_user" != "Y" && "$use_existing_user" != "n" && "$use_existing_user" != "N" ]] + do + echo "$tenant_db_user already exists. Do you want to use this user (Please enter y or n)" + read use_existing_user + if [ "$use_existing_user" = "y" ] || [ "$use_existing_user" = "Y" ]; then + user_already_defined=1 + else + unset tenant_db_user + unset user_already_defined + unset create_new_user + fi + done + fi + fi +done + + +while [[ $pwdconfirmed -ne 1 ]] # While pwd is not yet received and confirmed (i.e. entered teh same time twice) +do + while [[ $tenant_db_pwd == '' ]] # While pwd is empty... + do + echo "Enter the password for the user: " + read -s tenant_db_pwd + done + + while [[ $tenant_db_pwd2 == '' ]] # While pwd is empty... + do + echo "Please confirm the password by entering it again:" + read -s tenant_db_pwd2 + done + + if [[ "$tenant_db_pwd" == "$tenant_db_pwd2" ]]; then + pwdconfirmed=1 + else + echo "The passwords do not match. Please enter the password again." + unset tenant_db_pwd + unset tenant_db_pwd2 + fi +done + +if [[ $tenant_db_pwd_b64_encoded -eq 1 ]]; then + tenant_db_pwd=$(echo $tenant_db_pwd | base64 --decode) +fi + +default_ontology='default' +if [[ -z "$tenant_ontology" ]]; then + echo -e "\nEnter the tenant ontology name. If nothing is entered, the default name will be used: " $default_ontology + read tenant_ontology + if [[ -z "$tenant_ontology" ]]; then + tenant_ontology=$default_ontology + fi +fi + +default_basedb='CABASEDB' +if [[ -z "$base_db_name" ]]; then + echo -e "\nEnter the name of the Base BACA database with the TENANTINFO Table. If nothing is entered, we will use the following default value : " $default_basedb + read base_db_name + if [[ -z "$base_db_name" ]]; then + base_db_name=$default_basedb + fi +fi + +default_basedb_user='CABASEUSER' +if [[ -z "$base_db_user" ]]; then + echo -e "\nEnter the name of the database user for the Base BACA database. If nothing is entered, we will use the following default value : " $default_basedb_user + read base_db_user + if [[ -z "$base_db_user" ]]; then + base_db_user=$default_basedb_user + fi +fi + +# FOR NOW, there is no need to collect credentials for Base DB, as we are currently assuming that we are running script as DB2 admin (eg. db2inst1) on the DB2 server. +# If we decide to run from a remote machine, then UNCOMMENT the following to collect the DB2 admin credentials + +# pwdconfirmed=0 +# while [[ $pwdconfirmed -ne 1 ]] # While pwd is not yet received and confirmed (i.e. entered teh same time twice) +# do +# echo "Enter the password for the BACA base database user: " +# read -s base_tenant_db_pwd +# while [[ $base_tenant_db_pwd == '' ]] # While pwd is empty... +# do +# echo "Enter a valid value" +# read -r base_tenant_db_pwd +# done + +# echo "Please confirm the password by entering it again:" +# read -s base_tenant_db_pwd2 +# while [[ $base_tenant_db_pwd2 == '' ]] # While pwd is empty... +# do +# echo "Enter a valid value" +# read -r base_tenant_db_pwd2 +# done + +# if [[ "$base_tenant_db_pwd" == "$base_tenant_db_pwd2" ]]; then +# pwdconfirmed=1 +# else +# echo "The passwords do not match. Please enter the password again." +# unset base_tenant_db_pwd +# unset base_tenant_db_pwd2 +# fi +# done + +echo +echo "Now we will gather information about the initial BACA user that will be defined:" + +while [[ $tenant_company == '' ]] +do + echo -e "\nPlease enter the company name for the initial BACA user:" + read tenant_company +done + + +while [[ $tenant_first_name == '' ]] +do + echo -e "\nPlease enter the first name for the initial BACA user:" + read tenant_first_name +done + + +while [[ $tenant_last_name == '' ]] +do + echo -e "\nPlease enter the last name for the initial BACA user:" + read tenant_last_name +done + + +while [[ $tenant_email == '' || ! $tenant_email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]] +do + echo -e "\nPlease enter a valid email address for the initial BACA user:" + read tenant_email +done + + +while [[ $tenant_user_name == '' ]] +do + echo -e "\nPlease enter the login name for the initial BACA user:" + read tenant_user_name +done + + +echo +if [[ $use_existing_tenant -ne 1 ]]; then + echo "-- Information gathering is completed. Add tenant is about to begin." +else + echo "-- Information gathering is completed. Add ontology is about to begin." +fi +echo "-- Please confirm these are the desired settings:" +echo " - tenant ID: $tenant_id" +echo " - tenant database name: $tenant_db_name" +echo " - database server hostname/IP: $baca_database_server_ip" +echo " - database server port: $baca_database_port" +if [[ $user_already_defined -ne 1 ]]; then + echo " - tenant database user will be created by this script" +else + echo " - tenant database user already exists and will not be created by this script" +fi +echo " - tenant database user: $tenant_db_user" +echo " - ontology name: $tenant_ontology" +echo " - base database: $base_db_name" +echo " - base database user: $base_db_user" +echo " - tenant company name: $tenant_company" +echo " - tenant first name: $tenant_first_name" +echo " - tenant last name: $tenant_last_name" +echo " - tenant email address: $tenant_email" +echo " - tenant login name: $tenant_user_name" +askForConfirmation + + +if [[ $user_already_defined -ne 1 ]]; then + encrypted_pwd=$(perl -e 'print crypt($ARGV[0], "pwsalt")' $tenant_db_pwd) + sudo useradd -m -p $encrypted_pwd $tenant_db_user + if [[ $? -eq 0 ]]; then + echo "User $tenant_db_user has been added to system!" + else + echo "ERROR: Failed to add a user $tenant_db_user! Please try again..." + exit 1 + fi + echo "setting password to not expire" + sudo chage -E -1 -M -1 $tenant_db_user +fi + +# Only create DB for new tenants +if [[ $use_existing_tenant -ne 1 ]]; then + cp sql/CreateDB.sql.template sql/CreateDB.sql + sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/CreateDB.sql + sed -i s/\$tenant_db_user/"$tenant_db_user"/ sql/CreateDB.sql + + echo -e "\nRunning script: sql/CreateDB.sql" + db2 -stvf sql/CreateDB.sql +fi + +cp sql/CreateBacaSchema.sql.template sql/CreateBacaSchema.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/CreateBacaSchema.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/CreateBacaSchema.sql +echo -e "\nRunning script: sql/CreateBacaSchema.sql" +db2 -stvf sql/CreateBacaSchema.sql + +echo -e "\nRunning script: sql/CreateBacaTables.sql" +db2 -tf sql/CreateBacaTables.sql +echo "CONNECT RESET" +db2 "CONNECT RESET" + +cp sql/TablePermissions.sql.template sql/TablePermissions.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/TablePermissions.sql +sed -i s/\$tenant_db_user/"$tenant_db_user"/ sql/TablePermissions.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/TablePermissions.sql +echo -e "\nRunning script: sql/TablePermissions.sql" +db2 -stvf sql/TablePermissions.sql + +cp sql/LoadData.sql.template sql/LoadData.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/LoadData.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/LoadData.sql +echo -e "\nRunning script: sql/LoadData.sql" +db2 -stvf sql/LoadData.sql + +cp sql/InsertTenant.sql.template sql/InsertTenant.sql +sed -i s/\$base_db_name/"$base_db_name"/ sql/InsertTenant.sql +sed -i s/\$base_db_user/"$base_db_user"/ sql/InsertTenant.sql +sed -i s/\$tenant_id/"$tenant_id"/ sql/InsertTenant.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/InsertTenant.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/InsertTenant.sql +sed -i s/\$baca_database_server_ip/"$baca_database_server_ip"/ sql/InsertTenant.sql +sed -i s/\$baca_database_port/"$baca_database_port"/ sql/InsertTenant.sql +sed -i s/\$tenant_db_user/"$tenant_db_user"/ sql/InsertTenant.sql +sed -i s/\$tenant_db_pwd/"$tenant_db_pwd"/ sql/InsertTenant.sql +echo -e "\nRunning script: sql/InsertTenant.sql" +db2 -stvf sql/InsertTenant.sql + + +cp sql/InsertUser.sql.template sql/InsertUser.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/InsertUser.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/InsertUser.sql +sed -i s/\$tenant_email/"$tenant_email"/ sql/InsertUser.sql +sed -i s/\$tenant_first_name/"$tenant_first_name"/ sql/InsertUser.sql +sed -i s/\$tenant_last_name/"$tenant_last_name"/ sql/InsertUser.sql +sed -i s/\$tenant_user_name/"$tenant_user_name"/ sql/InsertUser.sql +sed -i s/\$tenant_company/"$tenant_company"/ sql/InsertUser.sql +sed -i s/\$tenant_email/"$tenant_email"/ sql/InsertUser.sql +echo -e "\nRunning script: sql/InsertUser.sql" +db2 -stvf sql/InsertUser.sql + +echo -e "\n-- Add completed succesfully. Tenant ID: $tenant_id , Ontology: $tenant_ontology \n" + +echo "-- URL (replace frontend with your frontend host): https://frontend/?tid=$tenant_id&ont=$tenant_ontology" \ No newline at end of file diff --git a/BACA/configuration-ha/DB2/CSVFiles/cword.csv b/BACA/configuration-ha/DB2/CSVFiles/cword.csv new file mode 100644 index 00000000..f7240470 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/cword.csv @@ -0,0 +1,75 @@ +12,inspection +13,vin +14,repair +15,estimates +16,policy +17,qty +18,excluding +19,bank +20,cost +21,credit +22,taxable +23,task +24,shipped +25,ship +26,salesperson +27,handling +28,gst +29,client +30,order +31,receipt +32,draft +33,payment +34,fees +35,offer +36,claim +37,report +38,invoice +39,total +40,settlement +41,services +42,amount +43,brand +44,terms +45,tax +46,purchase +47,due +48,acct +49,account +50,campaign +51,letter +52,invitation +53,attn +54,sincerely +55,insurance +56,patient +57,disability +58,health +59,adjuster +60,division +61,investigating +62,attorney +63,power +64,principal +65,designation +66,authority +67,agreement +68,contract +69,pricing +70,provider +71,schedule +72,branch +73,solution +74,authorized +75,sales +1,statement +2,balance +3,capital +4,shipment +5,flag +6,lading +7,master +8,shipper +9,consignee +10,voyage +11,loading diff --git a/BACA/configuration-ha/DB2/CSVFiles/cword_dc.csv b/BACA/configuration-ha/DB2/CSVFiles/cword_dc.csv new file mode 100644 index 00000000..ce162f91 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/cword_dc.csv @@ -0,0 +1,75 @@ +3,12,0 +3,13,0 +3,14,0 +3,15,0 +3,16,0 +4,17,0 +4,18,0 +4,19,0 +4,20,0 +4,21,0 +4,22,0 +4,23,0 +4,24,0 +4,25,0 +4,26,0 +4,27,0 +4,28,0 +4,29,0 +4,30,0 +4,31,0 +4,32,0 +4,33,0 +4,34,0 +4,35,0 +4,36,0 +4,37,0 +4,38,0 +4,39,0 +4,40,0 +4,41,0 +4,42,0 +4,43,0 +4,44,0 +4,45,0 +4,46,0 +4,47,0 +4,48,0 +4,49,0 +4,50,0 +5,51,0 +5,52,0 +5,53,0 +5,54,0 +6,55,0 +6,56,0 +6,57,0 +6,58,0 +7,59,0 +7,60,0 +7,61,0 +8,62,0 +8,63,0 +8,64,0 +8,65,0 +8,66,0 +9,67,0 +9,68,0 +9,69,0 +9,70,0 +9,71,0 +9,72,0 +9,73,0 +9,74,0 +9,75,0 +1,1,0 +1,2,0 +1,3,0 +2,4,0 +2,5,0 +2,6,0 +2,7,0 +2,8,0 +2,9,0 +2,10,0 +2,11,0 diff --git a/BACA/configuration-ha/DB2/CSVFiles/doc_alias.csv b/BACA/configuration-ha/DB2/CSVFiles/doc_alias.csv new file mode 100644 index 00000000..54990440 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/doc_alias.csv @@ -0,0 +1,10 @@ +1,Capital Balance statement,en +2,valuation report,en +3,Balance statement,en +4,bill of lading,en +5,Tax Invoice,en +6,Invoice,en +7,Letter of Invitation,en +8,Letter of Employment,en +9,Police Report,en +10,Power of Attorney,en diff --git a/BACA/configuration-ha/DB2/CSVFiles/doc_alias_dc.csv b/BACA/configuration-ha/DB2/CSVFiles/doc_alias_dc.csv new file mode 100644 index 00000000..2cc9d633 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/doc_alias_dc.csv @@ -0,0 +1,10 @@ +1,1,0 +2,1,0 +3,1,0 +4,2,0 +5,4,0 +6,4,0 +7,5,0 +8,5,0 +9,7,0 +10,8,0 diff --git a/BACA/configuration-ha/DB2/CSVFiles/doc_class.csv b/BACA/configuration-ha/DB2/CSVFiles/doc_class.csv new file mode 100644 index 00000000..0d53dbd4 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/doc_class.csv @@ -0,0 +1,9 @@ +1,Balance Statement,This is a Sample +2,Bill of Lading,This is a Sample +3,Estimates,This is a Sample +4,Invoice,This is a Sample +5,Letter,This is a Sample +6,Medical Record,This is a Sample +7,Police Report,This is a Sample +8,Power of Attorney,This is a Sample +9,Pricing Schedule,This is a Sample diff --git a/BACA/configuration-ha/DB2/CSVFiles/heading.csv b/BACA/configuration-ha/DB2/CSVFiles/heading.csv new file mode 100644 index 00000000..77896d2f --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/heading.csv @@ -0,0 +1,2 @@ +1,Principal, +2,designation, diff --git a/BACA/configuration-ha/DB2/CSVFiles/heading_alias.csv b/BACA/configuration-ha/DB2/CSVFiles/heading_alias.csv new file mode 100644 index 00000000..c6d1389d --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/heading_alias.csv @@ -0,0 +1,2 @@ +1,caution to the principal +2,designation of agent diff --git a/BACA/configuration-ha/DB2/CSVFiles/heading_alias_dc.csv b/BACA/configuration-ha/DB2/CSVFiles/heading_alias_dc.csv new file mode 100644 index 00000000..2e787c85 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/heading_alias_dc.csv @@ -0,0 +1,2 @@ +1,8 +2,8 diff --git a/BACA/configuration-ha/DB2/CSVFiles/heading_alias_h.csv b/BACA/configuration-ha/DB2/CSVFiles/heading_alias_h.csv new file mode 100644 index 00000000..3bf58f25 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/heading_alias_h.csv @@ -0,0 +1,2 @@ +1,1 +2,2 diff --git a/BACA/configuration-ha/DB2/CSVFiles/heading_dc.csv b/BACA/configuration-ha/DB2/CSVFiles/heading_dc.csv new file mode 100644 index 00000000..2e787c85 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/heading_dc.csv @@ -0,0 +1,2 @@ +1,8 +2,8 diff --git a/BACA/configuration-ha/DB2/CSVFiles/key_alias.csv b/BACA/configuration-ha/DB2/CSVFiles/key_alias.csv new file mode 100644 index 00000000..7981e570 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/key_alias.csv @@ -0,0 +1,238 @@ +20,Adjuster,en +21,Written By,en +22,Claim #,en +23,Grand Total,en +24,Vehicle Out,en +25,Type of Loss,en +26,Insured,en +27,Policy #,en +28,Fax,en +29,Workfile ID,en +30,Phone,en +31,Days to Repair,en +32,CUSTOMER PAY,en +33,Subtotal,en +34,INSURANCE PAY,en +35,Condition,en +36,Job #,en +37,Production Date,en +38,State,en +39,Federal ID,en +40,Mileage Out,en +41,RO Number,en +42,Deductible,en +43,License,en +44,VIN,en +45,Point of Impact,en +46,Date of Loss:,en +47,Date Of Loss,en +48,Inspection Location:,en +49,Owner:,en +50,Mileage In,en +51,Exterior Color,en +52,Interior Color,en +53,Page #:,en +54,Job Description,en +55,SB Cess on Taxable Value [B],en +56,SB Cess levied by Vendor [A],en +57,Service Tax on Taxable Value [B],en +58,Inv No#,en +59,Inv Ni #:,en +60,Inv No #:,en +61,TAX INVOICE NUMBER,en +62,Invoice Number,en +63,Invoice #,en +64,Invoice Number:,en +65,Total Cost,en +66,Total Invoice Value (Rs.),en +67,INVOICE TOTAL INCLUDING GST,en +68,Total,en +69,TOTAL INC GST:,en +70,Office,en +71,Address,en +72,Work Site,en +73,Brand,en +74,Website,en +75,ATTORNEY,en +76,Email,en +77,Matter Number,en +78,Matter Number:,en +79,Regd. Office,en +80,Terms,en +81,Payment Terms,en +82,Est No,en +83,Est Ni:,en +84,Est Date,en +85,Est Date:,en +86,Campaign Name,en +87,Service Tax levied by Vendor [A],en +88,Agency Commission,en +89,Beneficiary Name,en +90,Sub Brand,en +91,PAN NO:,en +92,Credit,en +93,CIN No:,en +94,Swift Code,en +95,To:,en +96,Customer Name,en +97,Client,en +98,Tel,en +99,Telephone,en +100,BANK Name:,en +101,Bank,en +102,Price,en +103,Qty,en +104,Description,en +105,GL Code / Item,en +106,Sold To,en +107,ABN,en +108,Regarding,en +109,RE:,en +110,Requesting Manager,en +111,Inv Date,en +112,INVOICE DATE,en +113,Date,en +114,DUE DATE,en +115,Account No:,en +116,Acct No,en +117,Account,en +118,BSB,en +119,Acct Name,en +120,Account Name,en +121,Sub Total (Rs.),en +122,INVOICE TOTAL EXCLUDING GST,en +123,SUBTOTAL:,en +124,sales tax,en +125,GST,en +126,P.O. Number,en +127,PO Number,en +128,Purchase Nbr,en +129,Order #,en +130,Order Number,en +131,Ship To:,en +132,Branch Office:,en +133,IFSC Code,en +134,Centralised Billing and Accounting Office:,en +135,Service Tax Category:,en +136,Service Tax Regn No:,en +137,Branch,en +138,Branch:,en +139,Attn,en +140,Date of Birth,en +141,Start Date,en +142,Title,en +143,Place of Birth,en +144,Status,en +145,Employee,en +146,Full Name,en +147,Subject,en +148,Annual Salary,en +149,Citizenship,en +150,Expire Date,en +151,Passport no.,en +152,Gender,en +153,Issue Date,en +154,Smoking Status:,en +155,Service Dept,en +156,PCP,en +157,Progress Notes,en +158,Appointment Facility,en +159,Referring,en +160,med primary,en +161,prescription,en +162,primary care provider,en +163,Ph,en +164,Horne:,en +165,Horme:,en +166,NPI,en +167,Follow Up,en +168,llãollow Up,en +169,Division,en +170,Claim,en +171,Name,en +172,Diabetes,en +173,Appt. Date/Time,en +174,DOB,en +175,Marital status,en +176,Alcohol intake,en +177,Hypertension,en +178,Occupation,en +179,Kidney Stones,en +180,CELEBREX:,en +181,CEI.EBRi=X:,en +182,CËLEBREX:,en +183,Employer,en +184,Vitals,en +185,ROS,en +186,Qty:,en +187,Refills:,en +188,BMI,en +189,Wt,en +190,Encounter Date,en +191,Provider,en +192,Insurance,en +193,Client Name,en +194,Investigating Agency,en +195,County,en +196,PARTY 1:,en +197,Transaction #,en +198,TIME OF LOSS:,en +199,Claim No,en +200,Driver License,en +201,Street,en +202,DIVISION:,en +203,Division Code,en +204,ADJUSTER:,en +205,Report Number,en +206,Report Type,en +207,Tag,en +208,City,en +209,Start Date of Minimum payment period per service component,en +210,Zip Code,en +211,Zi. Code:,en +212,Service Components,en +213,existing circuit ids,en +214,State/Province,en +215,Country,en +216,MA Reference No.,en +217,PS/CSA Reference No.,en +218,AT&T PS Reference No.:,en +219,AT&T PA Reference No.:,en +220,pre-existing Contract no (must be included),en +221,account number,en +222,Calculation of early termination charges*,en +223,Customer,en +224,Sales Region,en +225,Pricing Schedule Term,en +226,Sales Strata,en +227,Sales / Branch Manager,en +228,Branch Manager:,en +229,Existing Service,en +230,Street Address,en +231,per Service Component,en +232,Program Code,en +233,scvp name,en +234,Rates following the end of minimum payment,en +235,Branch Transit No.,en +236,Branch Transit No.:,en +237,Rate Stabilization per service component,en +238,Effective Date of this pricing schedule,en +1,Capital Balance,en +2,balance,en +3,capital,en +4,amount,en +5,Fund as of date,en +6,period end date,en +7,Issued Date,en +8,Issued At,en +9,Master,en +10,Shipper,en +11,BL NO:,en +12,Flag,en +13,Consignee,en +14,Consignee:,en +15,Voyage No,en +16,Notify Party,en +17,On board the Tanker,en +18,Loading Port,en +19,To be delivered to the port of,en diff --git a/BACA/configuration-ha/DB2/CSVFiles/key_alias_dc.csv b/BACA/configuration-ha/DB2/CSVFiles/key_alias_dc.csv new file mode 100644 index 00000000..5aa00e02 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/key_alias_dc.csv @@ -0,0 +1,255 @@ +20,3,0 +21,3,0 +22,3,0 +23,3,0 +24,3,0 +25,3,0 +26,3,0 +27,3,0 +28,3,0 +29,3,0 +30,3,0 +31,3,0 +32,3,0 +33,3,0 +34,3,0 +35,3,0 +36,3,0 +37,3,0 +38,3,0 +39,3,0 +40,3,0 +41,3,0 +42,3,0 +43,3,0 +44,3,0 +45,3,0 +46,3,0 +47,3,0 +48,3,0 +49,3,0 +50,3,0 +51,3,0 +52,3,0 +53,4,0 +54,4,0 +55,4,0 +56,4,0 +57,4,0 +58,4,0 +59,4,0 +60,4,0 +61,4,0 +62,4,0 +63,4,0 +64,4,0 +65,4,0 +66,4,0 +67,4,0 +68,4,0 +69,4,0 +70,4,0 +71,4,0 +72,4,0 +73,4,0 +74,4,0 +75,4,0 +76,4,0 +77,4,0 +78,4,0 +79,4,0 +80,4,0 +81,4,0 +82,4,0 +83,4,0 +84,4,0 +85,4,0 +86,4,0 +87,4,0 +88,4,0 +89,4,0 +90,4,0 +91,4,0 +92,4,0 +93,4,0 +94,4,0 +95,4,0 +96,4,0 +97,4,0 +98,4,0 +99,4,0 +100,4,0 +101,4,0 +102,4,0 +103,4,0 +104,4,0 +105,4,0 +106,4,0 +107,4,0 +108,4,0 +109,4,0 +110,4,0 +111,4,0 +112,4,0 +113,4,0 +114,4,0 +115,4,0 +116,4,0 +117,4,0 +118,4,0 +119,4,0 +120,4,0 +121,4,0 +122,4,0 +123,4,0 +124,4,0 +125,4,0 +126,4,0 +127,4,0 +128,4,0 +129,4,0 +130,4,0 +131,4,0 +132,4,0 +133,4,0 +134,4,0 +135,4,0 +136,4,0 +137,4,0 +138,4,0 +28,4,0 +30,4,0 +139,5,0 +140,5,0 +141,5,0 +142,5,0 +143,5,0 +144,5,0 +145,5,0 +146,5,0 +147,5,0 +148,5,0 +149,5,0 +150,5,0 +151,5,0 +152,5,0 +153,5,0 +154,6,0 +155,6,0 +156,6,0 +157,6,0 +158,6,0 +159,6,0 +160,6,0 +161,6,0 +162,6,0 +163,6,0 +164,6,0 +165,6,0 +166,6,0 +167,6,0 +168,6,0 +169,6,0 +170,6,0 +171,6,0 +172,6,0 +173,6,0 +174,6,0 +175,6,0 +176,6,0 +177,6,0 +178,6,0 +179,6,0 +180,6,0 +181,6,0 +182,6,0 +183,6,0 +184,6,0 +185,6,0 +186,6,0 +187,6,0 +188,6,0 +189,6,0 +190,6,0 +191,6,0 +192,6,0 +99,6,0 +28,6,0 +193,7,0 +194,7,0 +195,7,0 +196,7,0 +197,7,0 +198,7,0 +199,7,0 +200,7,0 +201,7,0 +202,7,0 +203,7,0 +204,7,0 +205,7,0 +206,7,0 +207,7,0 +208,7,0 +97,7,0 +113,7,0 +170,7,0 +38,7,0 +47,7,0 +209,9,0 +210,9,0 +211,9,0 +212,9,0 +213,9,0 +214,9,0 +215,9,0 +216,9,0 +217,9,0 +218,9,0 +219,9,0 +220,9,0 +221,9,0 +222,9,0 +223,9,0 +224,9,0 +225,9,0 +226,9,0 +227,9,0 +228,9,0 +229,9,0 +230,9,0 +231,9,0 +232,9,0 +233,9,0 +234,9,0 +235,9,0 +236,9,0 +237,9,0 +238,9,0 +113,9,0 +139,9,0 +208,9,0 +171,9,0 +142,9,0 +76,9,0 +28,9,0 +99,9,0 +1,1,0 +2,1,0 +3,1,0 +4,1,0 +5,1,0 +6,1,0 +7,2,0 +8,2,0 +9,2,0 +10,2,0 +11,2,0 +12,2,0 +13,2,0 +14,2,0 +15,2,0 +16,2,0 +17,2,0 +18,2,0 +19,2,0 diff --git a/BACA/configuration-ha/DB2/CSVFiles/key_alias_kc.csv b/BACA/configuration-ha/DB2/CSVFiles/key_alias_kc.csv new file mode 100644 index 00000000..2f375e78 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/key_alias_kc.csv @@ -0,0 +1,255 @@ +20,17 +21,18 +22,19 +23,20 +24,21 +25,22 +26,23 +27,24 +28,25 +29,26 +30,27 +31,28 +32,29 +33,30 +34,31 +35,32 +36,33 +37,34 +38,35 +39,36 +40,37 +41,38 +42,39 +43,40 +44,41 +45,42 +46,43 +47,43 +48,44 +49,45 +50,46 +51,47 +52,48 +53,49 +54,50 +55,51 +56,51 +57,51 +58,52 +59,52 +60,52 +61,52 +62,52 +63,52 +64,52 +65,54 +66,54 +67,54 +68,54 +69,54 +70,55 +71,55 +72,56 +73,58 +74,59 +75,60 +76,60 +77,61 +78,61 +79,62 +80,63 +81,63 +82,64 +83,64 +84,65 +85,65 +86,66 +87,67 +88,68 +89,69 +90,70 +91,71 +92,72 +93,73 +94,74 +95,75 +96,75 +97,75 +98,76 +99,76 +100,77 +101,77 +102,78 +103,79 +104,80 +105,81 +106,82 +107,83 +108,85 +109,85 +110,86 +111,87 +112,87 +113,87 +114,88 +115,89 +116,89 +117,89 +118,90 +119,91 +120,91 +121,92 +122,92 +123,92 +124,93 +125,93 +126,94 +127,94 +128,94 +129,94 +130,94 +131,95 +132,96 +133,97 +134,98 +135,99 +136,100 +137,101 +138,101 +28,53 +30,84 +139,102 +140,103 +141,104 +142,105 +143,106 +144,107 +145,108 +146,109 +147,110 +148,111 +149,112 +150,113 +151,114 +152,115 +153,116 +154,117 +155,118 +156,119 +157,120 +158,121 +159,122 +160,123 +161,124 +162,125 +163,126 +164,126 +165,126 +166,128 +167,129 +168,129 +169,129 +170,129 +171,130 +172,131 +173,132 +174,133 +175,134 +176,135 +177,136 +178,137 +179,138 +180,139 +181,139 +182,139 +183,140 +184,141 +185,142 +186,143 +187,144 +188,145 +189,146 +190,147 +191,148 +192,149 +99,126 +28,127 +193,150 +194,151 +195,152 +196,153 +197,154 +198,156 +199,157 +200,160 +201,161 +202,162 +203,162 +204,163 +205,164 +206,165 +207,166 +208,167 +97,150 +113,155 +170,157 +38,158 +47,159 +209,168 +210,169 +211,169 +212,170 +213,171 +214,173 +1,3 +2,3 +3,3 +4,3 +5,4 +6,4 +7,5 +8,6 +9,7 +10,8 +11,9 +12,10 +13,11 +14,11 +15,12 +16,13 +17,14 +18,15 +19,16 +215,175 +216,176 +217,176 +218,176 +219,176 +220,177 +221,178 +222,179 +223,180 +224,186 +225,189 +226,190 +227,191 +228,191 +229,193 +230,194 +231,195 +232,196 +233,197 +234,198 +235,199 +236,199 +237,200 +238,201 +113,172 +139,174 +208,185 +171,187 +142,188 +76,192 +28,193 +99,193 diff --git a/BACA/configuration-ha/DB2/CSVFiles/key_class.csv b/BACA/configuration-ha/DB2/CSVFiles/key_class.csv new file mode 100644 index 00000000..af8fdae7 --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/key_class.csv @@ -0,0 +1,201 @@ +47,ExteriorColor,char,0,0,Exterior Color +48,InteriorColor,char,0,0,Interior Color +49,Page Number,number,0,0, +50,JobDescription,char,0,0,Job Description +51,SBCess,number,0,0,Swachh Bharat Cess +52,InvoiceNumber,number,1,0,Invoice Number +53,Fax,number,0,0,FaxNo +54,Total,number,1,0,Grand Total +55,Address,char,0,0, +56,WorkSite,char,0,0,Work Site +57,SalesPerson,char,0,0, +58,Brand,char,0,0,Brand +59,Website,char,0,0,Website Address +60,EmailAddress,char,0,0,Email address +61,MatterNumber,char,0,0,Matter Number +62,RegdOffice,char,0,0,Regd Office +63,Terms,char,0,0,Payment Terms +64,EstNo,number,0,0,Est No +65,EstDate,number,0,0,Est Date +66,CampaignName,char,0,0,Campaign Name +67,ServiceTax,number,0,0,Service Tax +68,AgencyCommission,number,0,0,Agency Commission +69,BeneficiaryName,char,0,0,Beneficiary Name +70,Sub Brand,char,0,0, +71,PANNo,number,0,0,PAN NO +72,Credit,char,0,0,Credit +73,CINNo,number,0,0,CIN No +74,SwiftCode,number,0,1,Swift Code +75,CustName,char,0,1, +76,Telephone,number,0,0,Telephone +77,BankName,char,0,0,Bank Name +78,Price,number,0,0,Price +79,Qty,number,0,0,Quantity +80,Description,char,0,0,Description +81,GLCode,number,0,0,GL Code +82,SoldTo,char,0,0,Sold To +83,ABN,char,0,0,ABN number +84,Phone,number,0,0,Phone no +85,Regarding,char,0,0,Regarding +86,RequestingManager,char,0,0,Requesting Manager +87,InvoiceDate,number,0,0,Invoice Date +88,DueDate,number,0,0,Due Date +89,AccNo,number,0,0,Account Number +90,BSB,number,0,0,BSB No +91,AccName,char,0,0,Account Name +92,SubTotal,number,0,0,Sub Total before tax +93,Tax,number,0,0,Tac amounts +94,PurchaseNo,number,0,0,Purchase number +95,ShipTo,char,0,0, +96,BranchOffice,char,0,0,Branch Office +97,IFSCCode,number,0,0,IFSC Code +98,CentralisedBillingAndAccOffice,char,0,0,Centralised Billing and Accounting Office +99,ServiceTaxCategory,char,0,0,Service Tax Category +100,ServiceTaxRegnNo,number,0,0,Service Tax Regn No +101,Branch,char,0,0,Branch +168,StartDate,char,0,0,Start Date of Minimum payment period per service component +169,ZipCode,number,0,0,Zip Code +170,ServiceComponents,char,0,0,Service Components +171,ExistingCircuitIds,number,0,0,existing circuit ids +172,SignedDate,number,0,0,Signed Date +173,StateProvince,char,0,0,State Province +174,Attention,char,0,0,Attention +175,Country,char,0,0,Country +176,ReferenceNo,number,0,0,Reference No +177,PreExistingContractNo,number,0,0,Pre Existing Contract No +178,AccNo,number,0,0,AccountNumber +179,PercMonthlyFee,char,0,0,Percentage of Monthly Fee +180,Customer,char,0,0,Customer +181,SDAcode,number,0,0,SDA code +182,ContractIDNo,number,0,0,contract id no +183,DS1No,number,0,0,ds1 no +184,PRINo,char,0,0,PRI No +185,City,char,0,0,City +186,SalesRegion,char,0,0,Sales Region +187,Name,char,0,0,Name +188,Title,char,0,0,Title +189,PricingTerm,char,0,0,Pricing Schedule Term +190,SalesStrata,char,0,0,Sales Strata +191,SalesBranchManager,char,0,0,Sales Branch Manager +192,EmailAddress,char,0,0,Email Address +193,TeleFax,number,0,0,Telephone and Fax +194,StreetAddress,char,0,0,Street Address +195,MinPayPeriod,char,0,0,Minimum Payment Period +196,ProgramCode,number,0,0,Program Code +197,SCVPName,char,0,0,SCVP Name +198,RatesForMinPayment,char,0,0,Rates following the end of minimum payment +199,Branch Transit Number,number,0,1, +200,RateStabilization,char,0,0,Rate Stabilization per service component +201,EfffectiveDate,char,0,0,Effective Date of this pricing schedule +46,MileageIn,number,0,0,Mileage In +102,Attention,char,0,0,Attention +103,DOB,number,0,0,Date of Birth +104,StartDate,number,0,0,Start Date +105,Title,char,0,0,Title +106,PlaceOfBirth,char,0,0,Place of Birth +107,Status,char,0,0,Status +108,Employee,char,0,0,Employee +109,FullName,char,0,0,Full Name +110,Subject,char,0,0,Subject +111,AnnualSalary,number,0,0,Annual Salary +112,Citizenship,char,0,0,Citizenship +113,ExpireDate,number,0,0,Expire Date +114,PassportNo,number,0,0,Passport no +115,Gender,char,0,0,Gender +116,IssueDate,number,0,0,Issue Date +117,Smoking Status,char,0,0, +118,ServiceDept,char,0,0,Service Department +119,PCP,char,0,0,PCP +120,ProgressNotes,char,0,0,Progress Notes +121,AppointmentFacility,char,0,0,Appointment Facility +122,Referring,char,0,0,Referring +123,MedPrimary,char,0,0,med primary +124,Prescription,char,0,0,prescription +125,PrimaryCareProvider,char,0,0,primary care provider +126,Telephone,number,0,0,Telephone +127,FaxNo,number,0,0,Fax Number +128,NPI,number,0,0,NPI +129,FollowUp,char,0,0,Follow Up +130,Name,char,0,0,Name +131,Diabetes,char,0,0, +132,AppointmentDateTime,number,0,0,Appt. Date/Time +133,DOB,number,0,0,Date of Birth +134,Marital status,char,0,0, +135,Alcohol intake,char,0,0, +136,Hypertension,char,0,0, +137,Occupation,char,0,0, +138,Kidney Stones,char,0,0, +139,Celebrex,char,0,0, +140,Employer,char,0,0, +141,Vitals,char,0,0, +142,ROS,char,0,0, +143,Quantity,number,0,0, +144,Refills,number,0,0, +145,BodyMassIndex,number,0,0,Body Mass Index (BMI) +146,Weight,number,0,0, +147,EncounterDate,number,0,0,Encounter Date +148,Provider,char,0,0,Provider +149,Insurance,char,0,0,Insurance +150,Client,char,0,0,Client +151,InvestigatingAgency,char,0,0,Investigating Agency +152,County,char,0,0,County +153,Parties,char,0,0,Parties +154,TransactionNo,number,0,0,Transaction Number +155,Date,number,0,0,Date +156,TimeofLoss,number,0,0,Time of Loss +157,ClaimNo,number,0,0,Claim Number +158,State,char,0,0,State +159,DateOfLoss,number,0,0,Date Of Loss +160,DriverLicense,number,0,0,Driver License No +161,Street,char,0,0,Street +162,Division,char,0,0,Division +163,Adjuster,char,0,0,Adjuster +164,ReportNumber,number,0,0,Report Number +165,ReportType,char,0,0,Report Type +166,Tag,char,0,0,Tag +167,City,char,0,0,City +1,InvestmentName,char,1,0, +2,InvestorName,char,1,0, +3,CapBalance,number,1,0, +4,FundAsOfDate,number,1,0, +5,IssuedDate,number,0,0,Issued Date +6,IssuedAt,char,0,0,Issued At +7,Master,char,0,0,Master/Captain +8,Shipper,char,0,0,Shipper +9,BLNo,char,0,0,Bill of Lading number +10,Flag,char,0,0,Flag +11,Consignee,char,0,0,Consignee +12,VoyageNo,number,0,0,Voyage No +13,NotifyParty,char,0,0,Notify Party +14,OnboardTanker,char,0,0,OnboardTanker +15,LoadingPort,char,0,0,Loading Port +16,DeliveryPort,char,0,0,Delivery Port +17,Adjuster,char,0,0,Adjuster +18,WrittenBy,char,0,0,Written By +19,ClaimNo,number,0,0,Claim No +20,GrandTotal,number,0,0,Grand Total +21,VehicleOut,char,0,0,Vehicle Out +22,TypeOfLoss,char,0,0,Type of Loss +23,Insured,char,0,0,Insured +24,PolicyNo,number,0,0,Policy no +25,Fax,number,0,0,Fax +26,WorkfileID,number,0,0,Workfile ID +27,Telephone,number,0,0,Telephone +28,DaysToRepair,number,0,0,Days to Repair +29,CUSTOMERPAY,number,0,0,CUSTOMER PAY +30,Subtotal,number,0,0,Subtotal +31,INSURANCEPAY,number,0,0,INSURANCE PAY +32,Condition,char,0,0,Condition +33,JobNo,number,0,0,Jon no +34,ProductionDate,number,0,0,Production Date +35,State,char,0,0,State +36,FederalID,number,0,0,Federal ID +37,MileageOut,char,0,0,Mileage Out +38,RONumber,number,0,0,RO Number +39,Deductible,number,0,0,Deductible +40,License,char,0,0,License +41,VIN,number,0,0,VIN +42,PointOfImpact,char,0,0,Point of Impact +43,DateOfLoss,number,0,0,Date of Loss +44,InspectionLocation,char,0,0,Inspection Location +45,Owner,char,0,0,Owner diff --git a/BACA/configuration-ha/DB2/CSVFiles/key_class_dc.csv b/BACA/configuration-ha/DB2/CSVFiles/key_class_dc.csv new file mode 100644 index 00000000..bd42f1ae --- /dev/null +++ b/BACA/configuration-ha/DB2/CSVFiles/key_class_dc.csv @@ -0,0 +1,201 @@ +46,3 +47,3 +48,3 +49,4 +50,4 +51,4 +52,4 +53,4 +54,4 +55,4 +56,4 +57,4 +58,4 +59,4 +60,4 +61,4 +62,4 +63,4 +64,4 +65,4 +66,4 +67,4 +68,4 +69,4 +70,4 +71,4 +72,4 +73,4 +74,4 +75,4 +76,4 +77,4 +78,4 +79,4 +80,4 +81,4 +82,4 +83,4 +84,4 +85,4 +86,4 +87,4 +88,4 +89,4 +90,4 +91,4 +92,4 +93,4 +94,4 +95,4 +96,4 +97,4 +98,4 +99,4 +100,4 +101,4 +168,9 +169,9 +170,9 +171,9 +172,9 +173,9 +174,9 +175,9 +176,9 +177,9 +178,9 +179,9 +180,9 +181,9 +182,9 +183,9 +184,9 +185,9 +186,9 +187,9 +188,9 +189,9 +190,9 +191,9 +192,9 +193,9 +194,9 +195,9 +196,9 +197,9 +198,9 +199,9 +200,9 +201,9 +102,5 +103,5 +104,5 +105,5 +106,5 +107,5 +108,5 +109,5 +110,5 +111,5 +112,5 +113,5 +114,5 +115,5 +116,5 +1,1 +2,1 +3,1 +4,1 +5,2 +6,2 +7,2 +8,2 +9,2 +10,2 +11,2 +12,2 +13,2 +14,2 +15,2 +16,2 +17,3 +18,3 +19,3 +20,3 +21,3 +22,3 +23,3 +24,3 +25,3 +26,3 +27,3 +28,3 +29,3 +30,3 +31,3 +32,3 +33,3 +34,3 +35,3 +36,3 +37,3 +38,3 +39,3 +40,3 +41,3 +42,3 +43,3 +44,3 +45,3 +117,6 +118,6 +119,6 +120,6 +121,6 +122,6 +123,6 +124,6 +125,6 +126,6 +127,6 +128,6 +129,6 +130,6 +131,6 +132,6 +133,6 +134,6 +135,6 +136,6 +137,6 +138,6 +139,6 +140,6 +141,6 +142,6 +143,6 +144,6 +145,6 +146,6 +147,6 +148,6 +149,6 +150,7 +151,7 +152,7 +153,7 +154,7 +155,7 +156,7 +157,7 +158,7 +159,7 +160,7 +161,7 +162,7 +163,7 +164,7 +165,7 +166,7 +167,7 diff --git a/BACA/configuration-ha/DB2/CreateBaseDB.sh b/BACA/configuration-ha/DB2/CreateBaseDB.sh new file mode 100755 index 00000000..eacf13cd --- /dev/null +++ b/BACA/configuration-ha/DB2/CreateBaseDB.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +. ScriptFunctions.sh + +INPUT_PROPS_FILENAME="./common_for_DB2.sh" + +if [ -f $INPUT_PROPS_FILENAME ]; then + echo "Found a $INPUT_PROPS_FILENAME. Reading in variables from that script." + . $INPUT_PROPS_FILENAME +fi + +default_basedb='CABASEDB' +echo -e "\n-- This script will create the BACA Base database." + +if [[ -z "$base_db_name" ]]; then + echo -e "\nEnter the name of the BACA Base database to create. (The name must be 8 chars or less). If nothing is entered, we will use this default value : " $default_basedb + read base_db_name + if [[ -z "$base_db_name" ]]; then + base_db_name=$default_basedb + fi + while [ ${#base_db_name} -gt 8 ]; + do + echo "Please enter a valid value for the tenant database name of max length 8 :" + read base_db_name; + echo ${#base_db_name}; + done +fi + +if [[ -z "$base_valid_user" ]]; then + base_valid_user=0 +fi + +while [[ $base_valid_user -ne 1 ]] +do + echo -e "\nWe need to create a non-admin database user to access BASE database." + echo "Enter the name of database user to create: " + read base_db_user + while [[ $base_db_user == '' ]] + do + echo "Enter a valid value" + read base_db_user + done + + getent passwd $base_db_user > /dev/null + if [[ $? -eq 0 ]]; then + echo "$base_db_user already exists. Do you want to use this user (y/n)" + read use_existing_user + if [ "$use_existing_user" = "y" ] || [ "$use_existing_user" = "Y" ]; then + base_user_already_defined=1 + base_valid_user=1 + fi + else + base_valid_user=1 + fi +done + +if [[ $base_user_already_defined = 1 ]]; then + base_pwdconfirmed=1 +else + base_pwdconfirmed=0 +fi + +while [[ $base_pwdconfirmed -ne 1 ]] # While pwd is not yet received and confirmed (i.e. entered the same time twice) +do + echo "Enter the password for the user: " + read -s db_user_pwd + while [[ $db_user_pwd == '' ]] # While pwd is empty... + do + echo "Enter a valid value" + read -s db_user_pwd + done + + echo "Please confirm the password by entering it again:" + read -s db_user_pwd2 + while [[ $db_user_pwd2 == '' ]] # While pwd is empty... + do + echo "Enter a valid value" + read -s db_user_pwd2 + done + + if [[ "$db_user_pwd" == "$db_user_pwd2" ]]; then + base_pwdconfirmed=1 + else + echo "The passwords do not match. Please enter the password again." + unset db_user_pwd + unset db_user_pwd2 + fi +done + +echo +echo "-- Information gathering is completed. Create base DB is about to begin." +askForConfirmation + +if [[ $db_user_pwd_b64_encoded -eq 1 ]]; then + db_user_pwd=$(echo $db_user_pwd | base64 --decode) +fi + +if [[ $base_user_already_defined -ne 1 ]]; then + echo + echo "Creating user $base_db_user..." + + encrypted_pwd=$(perl -e 'print crypt($ARGV[0], "pwsalt")' $db_user_pwd) + sudo useradd -m -p $encrypted_pwd $base_db_user + if [[ $? -eq 0 ]]; then + echo "User $base_db_user has been added to system!" + else + echo "ERROR: Failed to add a user $base_db_user! Please try again..." + exit 1 + fi + echo "setting password to not expire" + sudo chage -E -1 -M -1 $base_db_user +fi + +cp sql/CreateBaseDB.sql.template sql/CreateBaseDB.sql +sed -i s/\$base_db_name/"$base_db_name"/ sql/CreateBaseDB.sql +sed -i s/\$base_db_user/"$base_db_user"/ sql/CreateBaseDB.sql +# sed -i s/\$db_user_pwd/"$db_user_pwd"/ sql/CreateBaseDB.sql + +echo +echo "Running script: sql/CreateBaseDB.sql" +db2 -stvf sql/CreateBaseDB.sql + diff --git a/BACA/configuration-ha/DB2/ScriptFunctions.sh b/BACA/configuration-ha/DB2/ScriptFunctions.sh new file mode 100644 index 00000000..4d40ce59 --- /dev/null +++ b/BACA/configuration-ha/DB2/ScriptFunctions.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +function askForConfirmation(){ + while [[ $confirmation != "y" && $confirmation != "n" && $confirmation != "yes" && $confirmation != "no" ]] # While confirmation is not y or n... + do + echo + echo -e "Would you like to continue (Y/N):" + read confirmation + confirmation=$(echo "$confirmation" | tr '[:upper:]' '[:lower:]') + done + + if [[ $confirmation == "n" || $confirmation == "no" ]] + then + exit + fi +} \ No newline at end of file diff --git a/BACA/configuration-ha/DB2/common_for_DB2.sh.sample b/BACA/configuration-ha/DB2/common_for_DB2.sh.sample new file mode 100644 index 00000000..50dd65b8 --- /dev/null +++ b/BACA/configuration-ha/DB2/common_for_DB2.sh.sample @@ -0,0 +1,47 @@ +# Sample script for running the DB2 scripts non-interactively by providing the needed env vars +# To use: Make a copy and name it "common_for_DB2.sh", update the needed variables. + + +# --- For Base BACA DB: +# update these variables for the BACA Base database +base_db_name=CABASE3 +base_db_user=baseuser3 + + +# To skip creating base databse user and skip asking for pwd, use these vars below. +# Prereq is that the DB2 user (from var "base_db_user") must already be created. +base_valid_user=1 +base_user_already_defined=1 +base_pwdconfirmed=1 + +# --- For adding tenant: +# update these variables +baca_database_server_ip=10.126.18.120 +baca_database_port=50000 +tenant_id=t4910 +tenant_db_name=t4910 +tenant_db_user=t4910user + +# To skip creating tenant database user and skip asking for pwd, use these vars below. +# Prereq is that the DB2 user (from var "tenant_db_user") must already be created. +user_already_defined=1 +pwdconfirmed=1 + +# update these variables +tenant_db_pwd=xyz123ee +tenant_db_pwd_b64_encoded=1 # set to 1 if "tenant_db_pwd" is base64 encoded +tenant_ontology=ONT1 + +tenant_company=IBM +tenant_first_name=John +tenant_last_name=Smith +tenant_email=johnsmith@ibm.com +tenant_user_name=johnsmith + +# --- For adding ontology to existing tenant +# uncomment this below to add ontology, and comment out "tenant_ontology" line above in this file +#use_existing_tenant=1 +#tenant_ontology=ONT2 + +# skip confirmation prompts: +confirmation=y diff --git a/BACA/configuration-ha/DB2/sql/CreateBacaSchema.sql.template b/BACA/configuration-ha/DB2/sql/CreateBacaSchema.sql.template new file mode 100644 index 00000000..2968a7ac --- /dev/null +++ b/BACA/configuration-ha/DB2/sql/CreateBacaSchema.sql.template @@ -0,0 +1,6 @@ +CONNECT TO $tenant_db_name ; + +CREATE SCHEMA $tenant_ontology ; + +SET SCHEMA $tenant_ontology ; + diff --git a/BACA/configuration-ha/DB2/sql/CreateBacaTables.sql b/BACA/configuration-ha/DB2/sql/CreateBacaTables.sql new file mode 100644 index 00000000..62c4ccf6 --- /dev/null +++ b/BACA/configuration-ha/DB2/sql/CreateBacaTables.sql @@ -0,0 +1,586 @@ +create table doc_class +( + doc_class_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + doc_class_name VARCHAR (512) NOT NULL, + comment varchar(1024), + + CONSTRAINT doc_class_pkey PRIMARY KEY (doc_class_id), + + CONSTRAINT doc_class_doc_class_name_key UNIQUE (doc_class_name) +); + +create table doc_alias +( + doc_alias_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + doc_alias_name VARCHAR (512) NOT NULL, + language CHAR(3) NOT NULL, + + CONSTRAINT doc_alias_pkey PRIMARY KEY (doc_alias_id), + + CONSTRAINT doc_alias_doc_alias_name_key UNIQUE (doc_alias_name) +); + +create table key_class +( + key_class_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + key_class_name VARCHAR (512) NOT NULL, + datatype VARCHAR (256) NOT NULL, + mandatory BOOLEAN, + sensitive BOOLEAN, + comment VARCHAR(1024), + + CONSTRAINT key_class_pkey PRIMARY KEY (key_class_id) +); + +create table key_alias +( + key_alias_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + key_alias_name VARCHAR (512) NOT NULL, + language CHAR(3) NOT NULL, + + CONSTRAINT key_alias_pkey PRIMARY KEY (key_alias_id), + + CONSTRAINT key_alias_key_alias_name_key UNIQUE (key_alias_name) +); + +create table cword +( + cword_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + cword_name VARCHAR (512) NOT NULL, + + CONSTRAINT cword_pkey PRIMARY KEY (cword_id), + + CONSTRAINT cword_cword_name_key UNIQUE (cword_name) +); + +create table doc_alias_dc +( + doc_alias_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + da_count INTEGER NOT NULL, + + CONSTRAINT doc_alias_dc_pkey PRIMARY KEY (doc_alias_id, doc_class_id), + + CONSTRAINT doc_alias_dc_doc_alias_id_fkey FOREIGN KEY (doc_alias_id) REFERENCES doc_alias (doc_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + constraint doc_alias_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE + +); + +create table key_class_dc +( + key_class_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + CONSTRAINT key_class_dc_pkey PRIMARY KEY (key_class_id, doc_class_id), + + CONSTRAINT key_class_dc_key_class_id_fkey FOREIGN KEY (key_class_id) REFERENCES key_class (key_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT key_class_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table key_alias_dc +( + key_alias_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + ka_count INTEGER NOT NULL, + + CONSTRAINT key_alias_dc_pkey PRIMARY KEY (key_alias_id, doc_class_id), + + CONSTRAINT key_alias_dc_key_alias_id_fkey FOREIGN KEY (key_alias_id) REFERENCES key_alias (key_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT key_alias_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table key_alias_kc +( + key_alias_id INTEGER NOT NULL, + + key_class_id INTEGER NOT NULL, + + CONSTRAINT key_alias_kc_pkey PRIMARY KEY (key_alias_id, key_class_id), + + CONSTRAINT key_alias_kc_key_alias_id_fkey FOREIGN KEY (key_alias_id) REFERENCES key_alias (key_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT key_alias_kc_key_class_id_fkey FOREIGN KEY (key_class_id) REFERENCES key_class (key_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table cword_dc +( + doc_class_id INTEGER NOT NULL, + cword_id INTEGER NOT NULL, + cw_count INTEGER NOT NULL, + + CONSTRAINT cword_dc_pkey PRIMARY KEY (cword_id, doc_class_id), + + CONSTRAINT cword_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT cword_dc_cword_id_fkey FOREIGN KEY (cword_id) REFERENCES cword (cword_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table heading +( + heading_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + heading_name VARCHAR (512) NOT NULL, + comment VARCHAR(1024), + CONSTRAINT heading_pkey PRIMARY KEY (heading_id) +); + +create table heading_alias +( + heading_alias_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + heading_alias_name VARCHAR (512) NOT NULL, + + CONSTRAINT heading_alias_pkey PRIMARY KEY (heading_alias_id), + + CONSTRAINT heading_alias_heading_alias_name_key unique (heading_alias_name) +); + +create table heading_dc +( + heading_id INTEGER NOT NULL, + + doc_class_id INTEGER NOT NULL, + + CONSTRAINT heading_dc_pkey PRIMARY KEY (heading_id, doc_class_id), + + CONSTRAINT heading_dc_heading_id_fkey FOREIGN KEY (heading_id) REFERENCES heading (heading_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT heading_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table heading_alias_h +( + heading_alias_id INTEGER NOT NULL, + heading_id INTEGER NOT NULL, + + CONSTRAINT heading_alias_h_pkey PRIMARY KEY (heading_alias_id, heading_id), + + CONSTRAINT heading_alias_h_heading_alias_id_fkey FOREIGN KEY (heading_alias_id) REFERENCES heading_alias (heading_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT heading_alias_h_heading_id_fkey FOREIGN KEY (heading_id) REFERENCES heading (heading_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table heading_alias_dc +( + heading_alias_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + + CONSTRAINT heading_alias_dc_pkey PRIMARY KEY (heading_alias_id, doc_class_id), + + CONSTRAINT heading_alias_dc_heading_alias_id_fkey FOREIGN KEY (heading_alias_id) REFERENCES heading_alias (heading_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT heading_alias_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table user_detail +( + user_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + email VARCHAR(1024) NOT NULL, + first_name VARCHAR(512) NOT NULL, + last_name VARCHAR(512) NOT NULL, + phone VARCHAR(256), + company VARCHAR(512), + expire INTEGER, + expiry_date BIGINT, + token VARCHAR(1024) FOR BIT DATA DEFAULT NULL, + user_name VARCHAR(1024) NOT NULL, + CONSTRAINT user_detail_pkey PRIMARY KEY (user_id), + CONSTRAINT user_detail_email_key UNIQUE (email), + CONSTRAINT user_name UNIQUE (user_name) +); + +create table login_detail +( + user_id INTEGER, + role VARCHAR(32), + status BOOLEAN, + logged_in BOOLEAN DEFAULT 0, + + CONSTRAINT login_detail_user_id_fkey FOREIGN KEY (user_id) REFERENCES user_detail (user_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table integration +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + type VARCHAR(32), + url VARCHAR(1024), + user_name VARCHAR(256) DEFAULT NULL, + password VARCHAR(512) FOR BIT DATA DEFAULT NULL, + label VARCHAR(256), + status BOOLEAN, + model_id VARCHAR(32), + api_key VARCHAR(1024) FOR BIT DATA DEFAULT NULL, + flag VARCHAR(64), + CONSTRAINT integration_pkey PRIMARY KEY (id) +); + +create table integration_dc +( + id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + checked SMALLINT, + + CONSTRAINT integration_dc_id_fkey FOREIGN KEY (id) REFERENCES integration (id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT integration_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT integration_dc_pkey PRIMARY KEY (id, doc_class_id) +); + +create table import_ontology +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + user_id INTEGER, + date BIGINT, + start_time BIGINT, + end_time BIGINT, + complete BOOLEAN, + failure BOOLEAN, + + CONSTRAINT import_ontology_user_id_fkey FOREIGN KEY (user_id) REFERENCES user_detail (user_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT import_ontology_pkey PRIMARY KEY (id) +); + +create table api_integrations_objectsstore +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + user_id INTEGER NOT NULL, + type VARCHAR(64), + bucket_name VARCHAR(128) NOT NULL, + endpoint VARCHAR(1024) NOT NULL, + access_key VARCHAR(1024) NOT NULL FOR BIT DATA, + access_id VARCHAR(1024) NOT NULL FOR BIT DATA, + signatureversion VARCHAR(128) NOT NULL, + forcestylepath boolean, + + CONSTRAINT api_integrations_objectsstore_id_pk PRIMARY KEY (id), + + CONSTRAINT api_integrations_objectsstore_user_detail_user_id_fk FOREIGN KEY (user_id) REFERENCES user_detail (user_id) +); + +create table smartpages_options +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + outputname VARCHAR(6), + company VARCHAR(512), + selections VARCHAR(256), + CONSTRAINT smartpages_options_pkey PRIMARY KEY (id) +); + +create table fonts +( + font_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + font_size VARCHAR(256) NOT NULL, + total_no_of_observations INTEGER, + sum_of_observations_by_no_of_pixels DOUBLE, + sum_of_square_of_observations DOUBLE, + + CONSTRAINT fonts_pkey PRIMARY KEY (font_id) +); + +create table fonts_dc +( + font_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + + CONSTRAINT fonts_dc_pkey PRIMARY KEY (font_id, doc_class_id), + + CONSTRAINT fonts_dc_font_id_fkey FOREIGN KEY (font_id) REFERENCES fonts (font_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT fonts_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table fonts_transid +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + transid VARCHAR(256) NOT NULL, + + CONSTRAINT fonts_transid_pkey PRIMARY KEY (id), + + CONSTRAINT fonts_transid_transid_key UNIQUE (transid) +); + +create table db_backup +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + date BIGINT NOT NULL, + frequency CHAR(15) NOT NULL, + type VARCHAR(1024) NOT NULL, + start_time BIGINT, + end_time BIGINT, + complete BOOLEAN DEFAULT 0, + failure BOOLEAN DEFAULT 0, + obj_cred_id INTEGER NOT NULL, + + CONSTRAINT db_backup_pkey PRIMARY KEY (id) + + --CONSTRAINT db_backup_obj_cred_id_fkey FOREIGN KEY (obj_cred_id) REFERENCES api_integrations_objectsstore (obj_cred_id) + --ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table key_spacing +( + key_class_id INTEGER NOT NULL, + key_class_count INTEGER, + key_class_count_doc INTEGER, + class_total_docs INTEGER, + sum_x INTEGER, + sum_x_sq INTEGER, + sum_y INTEGER, + sum_y_sq INTEGER, + + CONSTRAINT key_spacing_pkey PRIMARY KEY (key_class_id), + + CONSTRAINT key_spacing_key_class_id_fkey FOREIGN KEY (key_class_id) REFERENCES key_class (key_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + + +create table processed_file +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + transaction_id VARCHAR(256) NOT NULL, + file_name VARCHAR(1024) NOT NULL, + number_of_page INTEGER, + date BIGINT, + start_time BIGINT, + end_time BIGINT, + failed_ocr_pages INTEGER DEFAULT 0, + failed_pages INTEGER DEFAULT 0, + failed BOOLEAN DEFAULT FALSE, + + CONSTRAINT processed_file_pkey PRIMARY KEY (id), + CONSTRAINT processed_file_transaction_id_key UNIQUE (transaction_id) +); + +create table error_log +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + transaction_id VARCHAR(256), + error_code CHAR(32), + description VARCHAR(1024), + date BIGINT, + + CONSTRAINT error_log_pkey PRIMARY KEY (id), + + CONSTRAINT error_log_transaction_id_fkey FOREIGN KEY (transaction_id) REFERENCES processed_file (transaction_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table db_restore +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + start_time BIGINT, + end_time BIGINT, + complete BOOLEAN DEFAULT FALSE, + failure BOOLEAN DEFAULT FALSE, + + CONSTRAINT db_restore_pkey PRIMARY KEY (id) +); + +create table audit_ontology +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_ontology_pkey PRIMARY KEY (id) +); + +create table audit_login_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_login_activity_pkey PRIMARY KEY (id) +); + +create table audit_processed_files +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + transaction_id VARCHAR(256), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_processed_files_pkey PRIMARY KEY (id) +); + +create table audit_user_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_user_activity_pkey PRIMARY KEY (id) +); + +create table audit_api_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_api_activity PRIMARY KEY (id) +); + +create table audit_system_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_system_activity_pkey PRIMARY KEY (id) +); + +create table audit_integration_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_integration_activity_pkey PRIMARY KEY (id) +); + +CREATE OR REPLACE VIEW audit_sys_report AS SELECT audit_ontology.username, + audit_ontology.type, + audit_ontology.action, + audit_ontology.description, + audit_ontology.date, + audit_ontology.time_elapsed, + audit_ontology.error, + audit_ontology.page, + 'Ontology' AS details + FROM audit_ontology +UNION + SELECT audit_processed_files.username, + audit_processed_files.type, + audit_processed_files.action, + audit_processed_files.description, + audit_processed_files.date, + audit_processed_files.time_elapsed, + audit_processed_files.error, + audit_processed_files.page, + 'Processed files' AS details + FROM audit_processed_files +UNION + SELECT audit_login_activity.username, + audit_login_activity.type, + audit_login_activity.action, + audit_login_activity.description, + audit_login_activity.date, + audit_login_activity.time_elapsed, + audit_login_activity.error, + audit_login_activity.page, + 'Login activity' AS details + FROM audit_login_activity +UNION + SELECT audit_user_activity.username, + audit_user_activity.type, + audit_user_activity.action, + audit_user_activity.description, + audit_user_activity.date, + audit_user_activity.time_elapsed, + audit_user_activity.error, + audit_user_activity.page, + 'User activity' AS details + FROM audit_user_activity +UNION + SELECT audit_system_activity.username, + audit_system_activity.type, + audit_system_activity.action, + audit_system_activity.description, + audit_system_activity.date, + audit_system_activity.time_elapsed, + audit_system_activity.error, + audit_system_activity.page, + 'System activity' AS detailsimport_ontology + FROM audit_system_activity +UNION + SELECT audit_integration_activity.username, + audit_integration_activity.type, + audit_integration_activity.action, + audit_integration_activity.description, + audit_integration_activity.date, + audit_integration_activity.time_elapsed, + audit_integration_activity.error, + audit_integration_activity.page, + 'Integration activity' AS details + FROM audit_integration_activity +UNION + SELECT audit_api_activity.username, + audit_api_activity.type, + audit_api_activity.action, + audit_api_activity.description, + audit_api_activity.date, + audit_api_activity.time_elapsed, + audit_api_activity.error, + audit_api_activity.page, + 'API activity' AS details + FROM audit_api_activity +; diff --git a/BACA/configuration-ha/DB2/sql/CreateBaseDB.sql.template b/BACA/configuration-ha/DB2/sql/CreateBaseDB.sql.template new file mode 100644 index 00000000..15d3298a --- /dev/null +++ b/BACA/configuration-ha/DB2/sql/CreateBaseDB.sql.template @@ -0,0 +1,27 @@ +CREATE DATABASE $base_db_name AUTOMATIC STORAGE YES USING CODESET UTF-8 TERRITORY DEFAULT COLLATE USING SYSTEM PAGESIZE 32768; + +CONNECT TO $base_db_name ; + +GRANT CONNECT,DATAACCESS ON DATABASE TO USER $base_db_user ; + +GRANT USE OF TABLESPACE USERSPACE1 TO USER $base_db_user ; + +CONNECT RESET; + +CONNECT TO $base_db_name ; + +SET SCHEMA $base_db_user ; + +CREATE TABLE TENANTINFO + (tenantid varchar(128) NOT NULL, + ontology varchar(128) not null, + tenanttype smallint not null with default, + rdbmsengine varchar(128) not null, + bacaversion varchar(1024) not null, + rdbmsconnection varchar(1024) for bit data default null, + mongoconnection varchar(1024) for bit data default null, + mongoadminconnection varchar(1024) for bit data default null, + CONSTRAINT tenantinfo_pkey PRIMARY KEY (tenantid, ontology) + ); + +CONNECT RESET; diff --git a/BACA/configuration-ha/DB2/sql/CreateDB.sql.template b/BACA/configuration-ha/DB2/sql/CreateDB.sql.template new file mode 100644 index 00000000..cc8e1636 --- /dev/null +++ b/BACA/configuration-ha/DB2/sql/CreateDB.sql.template @@ -0,0 +1,9 @@ +CREATE DATABASE $tenant_db_name AUTOMATIC STORAGE YES USING CODESET UTF-8 TERRITORY DEFAULT COLLATE USING SYSTEM PAGESIZE 32768; + +CONNECT TO $tenant_db_name ; + +GRANT CONNECT,DATAACCESS ON DATABASE TO USER $tenant_db_user ; + +GRANT USE OF TABLESPACE USERSPACE1 TO USER $tenant_db_user ; + +CONNECT RESET; \ No newline at end of file diff --git a/BACA/configuration-ha/DB2/sql/InsertTenant.sql.template b/BACA/configuration-ha/DB2/sql/InsertTenant.sql.template new file mode 100644 index 00000000..464d18e5 --- /dev/null +++ b/BACA/configuration-ha/DB2/sql/InsertTenant.sql.template @@ -0,0 +1,4 @@ +connect to $base_db_name ; +set schema $base_db_user ; +insert into TENANTINFO (tenantid,ontology,tenanttype,rdbmsengine,bacaversion,rdbmsconnection) values ( '$tenant_id', '$tenant_ontology', 0, 'DB2', '1.1', encrypt('DATABASE=$tenant_db_name;HOSTNAME=$baca_database_server_ip;PORT=$baca_database_port;PROTOCOL=TCPIP;UID=$tenant_db_user;PWD=$tenant_db_pwd;','AES_KEY')) ; +connect reset ; \ No newline at end of file diff --git a/BACA/configuration-ha/DB2/sql/InsertUser.sql.template b/BACA/configuration-ha/DB2/sql/InsertUser.sql.template new file mode 100644 index 00000000..bcc368d7 --- /dev/null +++ b/BACA/configuration-ha/DB2/sql/InsertUser.sql.template @@ -0,0 +1,5 @@ +connect to $tenant_db_name ; +set schema $tenant_ontology ; +insert into user_detail (email,first_name,last_name,user_name,company,expire) values ('$tenant_email','$tenant_first_name','$tenant_last_name','$tenant_user_name','$tenant_company',10080) ; +insert into login_detail (user_id,role,status,logged_in) select user_id,'Admin','1',0 from user_detail where email='$tenant_email' ; +connect reset ; \ No newline at end of file diff --git a/BACA/configuration-ha/DB2/sql/LoadData.sql.template b/BACA/configuration-ha/DB2/sql/LoadData.sql.template new file mode 100644 index 00000000..24c2657e --- /dev/null +++ b/BACA/configuration-ha/DB2/sql/LoadData.sql.template @@ -0,0 +1,37 @@ +CONNECT TO $tenant_db_name ; +SET SCHEMA $tenant_ontology ; + +load from ./CSVFiles/doc_class.csv of del modified by identityoverride insert into doc_class ; +load from ./CSVFiles/key_class.csv of del modified by identityoverride insert into key_class ; +load from ./CSVFiles/doc_alias.csv of del modified by identityoverride insert into doc_alias ; +load from ./CSVFiles/key_alias.csv of del modified by identityoverride insert into key_alias ; +load from ./CSVFiles/cword.csv of del modified by identityoverride insert into cword ; +load from ./CSVFiles/heading.csv of del modified by identityoverride insert into heading ; +load from ./CSVFiles/heading_alias.csv of del modified by identityoverride insert into heading_alias ; +load from ./CSVFiles/key_class_dc.csv of del modified by identityoverride insert into key_class_dc ; +load from ./CSVFiles/doc_alias_dc.csv of del modified by identityoverride insert into doc_alias_dc ; +load from ./CSVFiles/key_alias_dc.csv of del modified by identityoverride insert into key_alias_dc ; +load from ./CSVFiles/key_alias_kc.csv of del modified by identityoverride insert into key_alias_kc ; +load from ./CSVFiles/heading_dc.csv of del modified by identityoverride insert into heading_dc ; +load from ./CSVFiles/heading_alias_dc.csv of del modified by identityoverride insert into heading_alias_dc ; +load from ./CSVFiles/heading_alias_h.csv of del modified by identityoverride insert into heading_alias_h ; +load from ./CSVFiles/cword_dc.csv of del modified by identityoverride insert into cword_dc ; + +set integrity for key_class_dc immediate checked ; +set integrity for doc_alias_dc immediate checked ; +set integrity for key_alias_dc immediate checked ; +set integrity for key_alias_kc immediate checked ; +set integrity for heading_dc immediate checked ; +set integrity for heading_alias_dc immediate checked ; +set integrity for heading_alias_h immediate checked ; +set integrity for cword_dc immediate checked ; + +alter table doc_class alter column doc_class_id restart with 10 ; +alter table doc_alias alter column doc_alias_id restart with 11 ; +alter table key_class alter column key_class_id restart with 202 ; +alter table key_alias alter column key_alias_id restart with 239 ; +alter table cword alter column cword_id restart with 76 ; +alter table heading alter column heading_id restart with 3 ; +alter table heading_alias alter column heading_alias_id restart with 3 ; + +CONNECT RESET; diff --git a/BACA/configuration-ha/DB2/sql/TablePermissions.sql.template b/BACA/configuration-ha/DB2/sql/TablePermissions.sql.template new file mode 100644 index 00000000..08a276d2 --- /dev/null +++ b/BACA/configuration-ha/DB2/sql/TablePermissions.sql.template @@ -0,0 +1,19 @@ +CONNECT TO $tenant_db_name ; + +GRANT ALTER ON TABLE $tenant_ontology.DOC_CLASS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.DOC_ALIAS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.KEY_CLASS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.KEY_ALIAS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.CWORD TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.HEADING TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.HEADING_ALIAS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.USER_DETAIL TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.INTEGRATION TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.IMPORT_ONTOLOGY TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.API_INTEGRATIONS_OBJECTSSTORE TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.SMARTPAGES_OPTIONS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.FONTS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.FONTS_TRANSID TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.DB_BACKUP TO USER $tenant_db_user ; + +CONNECT RESET; \ No newline at end of file diff --git a/BACA/configuration-ha/README.md b/BACA/configuration-ha/README.md new file mode 100644 index 00000000..e667ef6b --- /dev/null +++ b/BACA/configuration-ha/README.md @@ -0,0 +1,4 @@ +# Refer to the IBM Business Automation Content Analyzer Knowledge Center + +Preparing your environment for Content Analyzer +https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/topics/tsk_preparing_baca_deploy.html diff --git a/BACA/configuration-ha/baca-psp.yaml b/BACA/configuration-ha/baca-psp.yaml new file mode 100644 index 00000000..a4fcd95c --- /dev/null +++ b/BACA/configuration-ha/baca-psp.yaml @@ -0,0 +1,65 @@ +apiVersion: extensions/v1beta1 +kind: PodSecurityPolicy +metadata: + annotations: + kubernetes.io/description: "This policy allows pods to run with + any UID and GID, but preventing access to the host." + name: baca-anyuid-psp +spec: + allowPrivilegeEscalation: false + fsGroup: + ranges: + - max: 65535 + min: 1 + rule: MustRunAs + #rule: RunAsAny + requiredDropCapabilities: + - MKNOD + - SETFCAP + - NET_RAW + - NET_BIND_SERVICE + - KILL + allowedCapabilities: + - SETPCAP + - AUDIT_WRITE + - CHOWN + - FOWNER + - FSETID + - SETUID + - SETGID + - SYS_CHROOT + - DAC_OVERRIDE + runAsUser: + rule: RunAsAny #TODO: We need to set this value to "MustRunAsNonRoot" but minio is currently running as root + seLinux: + rule: RunAsAny + supplementalGroups: + ranges: + - max: 65535 + min: 1 + rule: MustRunAs + #rule: RunAsAny + volumes: + - configMap + - emptyDir + - projected + - secret + - downwardAPI + - persistentVolumeClaim + forbiddenSysctls: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + name: baca-anyuid-clusterrole +rules: +- apiGroups: + - extensions + resourceNames: + - baca-anyuid-psp + resources: + - podsecuritypolicies + verbs: + - use diff --git a/BACA/configuration-ha/bashfunctions.sh b/BACA/configuration-ha/bashfunctions.sh new file mode 100755 index 00000000..ba89aa5d --- /dev/null +++ b/BACA/configuration-ha/bashfunctions.sh @@ -0,0 +1,403 @@ +#!/usr/bin/env bash + +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +# Function to request user for their domain name + +export ICP_clustername=$(echo $DOCKER_REG_FOR_SERVICES | awk -F'[.]' '{print $1}') +export ICP_account_id="id-"$ICP_clustername"-account" + +# Login to ICP, to ensure bx pr and kubectl commands work in later functions +function loginToCluster() { + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + echo + #echo "\x1B[1;31m Logging into ICP using: bx pr login -a https://$MasterIp:8443 --skip-ssl-validation -u admin + # -p admin -c id-mycluster-account. \x1B[0m" + export ICP_USER_PASSWORD_DECODE=$(echo $ICP_USER_PASSWORD | base64 --decode) + #ICP 3.10 + cloudctl login -a https://$MasterIp:8443 --skip-ssl-validation -u $ICP_USER -p $ICP_USER_PASSWORD_DECODE -c $ICP_account_id -n default + fi + if [[ $OCP_VERSION == "3.11" ]]; then + echo + export OCP_USER_PASSWORD_DECODE=$(echo $OCP_USER_PASSWORD | base64 --decode) + #echo "\x1B[1;31m Logging into OCP using: oc login https://$MasterIp:8443 --insecure-skip-tls-verify=true -u $OCP_USER + # -p $OCP_USER_PASSWORD_DECODE. \x1B[0m" + #OCP 3.11 + oc login https://$MasterIp:8443 --insecure-skip-tls-verify=true -u $OCP_USER -p $OCP_USER_PASSWORD_DECODE + fi +} + +# ------------------- +# HELM Client setup +# ------------------- +function downloadHelmClient() { + + + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + echo + echo "Downloading Helm 2.9.1 from ICp" + curl -kLo helm-linux-amd64-v2.9.1.tar.gz https://$MasterIp:8443/api/cli/helm-linux-amd64.tar.gz + echo + echo "Moving helm to /usr/local/bin and chmod 755 helm" + tar -xvf helm-linux-amd64-v2.9.1.tar.gz + chmod 755 ./linux-amd64/helm && mv ./linux-amd64/helm /usr/local/bin + rm -rf linux-amd64 + # testing Helm + echo Testing Helm CLI using: helm version --tls + helm version --tls + fi + + if [[ $OCP_VERSION == "3.11" ]]; then + echo "Downloading Helm 2.11.0 from Github" + curl -s https://storage.googleapis.com/kubernetes-helm/helm-v2.11.0-linux-amd64.tar.gz | tar xz + echo + echo "Moving helm to /usr/local/bin and chmod 755 helm" + + chmod 755 ./linux-amd64/helm && mv ./linux-amd64/helm /usr/local/bin + rm -rf linux-amd64 + + fi +} + + +function helmSetup(){ + + if [[ $ICP_VERSION == "3.1.2" ]]; then + # ICP specific setup + echo + echo Initializing Helm CLI using: helm init --client-only + helm init --client-only + echo + echo Creating clusterrolebinding tiller-cluster-admin .... + kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default + fi + + if [[ $OCP_VERSION == "3.11" ]]; then + echo Creating clusterrolebinding tiller-cluster-admin .... + export TILLER_NAMESPACE=tiller + oc new-project $TILLER_NAMESPACE + oc project $TILLER_NAMESPACE + oc process -f /~https://github.com/openshift/origin/raw/master/examples/helm/tiller-template.yaml -p TILLER_NAMESPACE="${TILLER_NAMESPACE}" -p HELM_VERSION=v2.11.0 | oc create -f - + oc rollout status deployment tiller + oc project $KUBE_NAME_SPACE + oc policy add-role-to-user $OCP_USER "system:serviceaccount:${TILLER_NAMESPACE}:tiller" + fi + +} + +function checkHelm(){ + + if [[ $ICP_VERSION == "3.1.2" ]]; then + MAX_ITERATIONS=120 + count=0 + while [[ $( kubectl get deployment tiller-deploy --namespace kube-system | sed -n '1!p' | awk '{print $5}' ) == 0 ]] + do + if [ "$count" -eq $MAX_ITERATIONS ]; then + echo "ERROR: Failed to find tiller-deploy after $MAX_ITERATIONS tries. Please check your cluster using kubectl get deployment tiller-deploy --namespace kube-system" + return 1 + fi + echo "Checking that helm tiller is deployed ......................" + sleep 10 + ((count++)) + done + echo "Helm deployed successfully ......................" + fi +} + + + +function getWorkerIPs() { + echo "inside getWorkerIPs" + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + export ICP_USER_PASSWORD_DECODE=$(echo $ICP_USER_PASSWORD | base64 --decode) + echo "About to get all the worker IPs from $ICP_VERSION" + echo "login -a https://$MasterIp:8443 --skip-ssl-validation -u $ICP_USER -p $ICP_USER_PASSWORD_DECODE -c $ICP_account_id" + cloudctl login -a https://$MasterIp:8443 --skip-ssl-validation -u $ICP_USER -p $ICP_USER_PASSWORD_DECODE -c $ICP_account_id -n default + export WORKER_IPs=$(cloudctl cm workers --json | grep "publicIP" | awk '{print $2}' | cut -d ',' -f1 | tr -d '"') + if [ -z "$WORKER_IPs" ]; then + echo "Cannot find public IP for worker nodes. Will try to check for Private IP now" + export WORKER_IPs=$(cloudctl cm workers --json | grep "privateIP" | awk '{print $2}' | cut -d ',' -f1 | tr -d '"') + echo WORKER_IPs=$WORKER_IPs + if [[ -z "$WORKER_IPs" ]]; then exit 1; fi + fi + fi + if [[ $OCP_VERSION == "3.11" ]]; then + echo "About to get all the worker IPs from $OCP_VERSION" + loginToCluster + export WORKER_IPs=$(oc get nodes | grep compute | grep [^Not]Ready | awk '{print $1}' | cut -d ',' -f1 | tr -d '"') + echo WORKER_IPs=$WORKER_IPs + if [[ -z "$WORKER_IPs" ]]; then exit 1; fi + fi + +} +function getWorkerIPBasedOnLabel() { + echo "inside getWorkerIP1s. It will get the worker IPs based on label" + + loginToCluster + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + export WORKER_IP1s=$(kubectl get nodes --show-labels |grep worker.*$KUBE_NAME_SPACE=baca | grep [^Not]Ready | awk {'print $1'}) + fi + if [[ $OCP_VERSION == "3.11" ]]; then + export WORKER_IP1s=$(kubectl get nodes --show-labels |grep compute=true |grep celery$KUBE_NAME_SPACE'='baca | grep [^Not]Ready | awk {'print $1'}) + fi + echo $WORKER_IP1s + if [[ -z "$WORKER_IP1s" ]]; then exit 1; fi + +} +function clearAllLabels(){ + echo "About to clear ALL label nodes with in $KUBE_NAME_SPACE" + getWorkerIPs + for i in $WORKER_IPs + do + echo "Clear out previous labeling" + kubectl label nodes $i {celery$KUBE_NAME_SPACE-,mongo$KUBE_NAME_SPACE-,mongo-admin$KUBE_NAME_SPACE-} + echo + done +} +#function labelNodes() { +# clearAllLabels +# echo "About to label ALL nodes with celery$KUBE_NAME_SPACE=baca." +# getWorkerIPs +# for i in $WORKER_IPs +# do +# echo "Label --overwrite $i with celery$KUBE_NAME_SPACE=baca" +# kubectl label nodes --overwrite $i {celery$KUBE_NAME_SPACE=baca,mongo$KUBE_NAME_SPACE=baca,mongo-admin$KUBE_NAME_SPACE=baca} +# done +#} + +function customLabelNodes() { + loginToCluster + clearAllLabels +# echo "Clear out previous labeling" +# kubectl label nodes $i {celery$KUBE_NAME_SPACE-,mongo$KUBE_NAME_SPACE-,mongo-admin$KUBE_NAME_SPACE-,postgres$KUBE_NAME_SPACE-} + + echo "About to label --overwrite $CA_WORKERS with celery$KUBE_NAME_SPACE=baca." + echo label nodes {$CA_WORKERS} celery$KUBE_NAME_SPACE=baca + for i in $(echo $CA_WORKERS | sed "s/,/ /g") + do + echo "Label $i with celery$KUBE_NAME_SPACE=baca" + kubectl label nodes --overwrite $i celery$KUBE_NAME_SPACE=baca + echo + done + echo + echo "About to label $MONGO_WORKERS with mongo$KUBE_NAME_SPACE=baca." + for i in $(echo $MONGO_WORKERS | sed "s/,/ /g") + do + echo "Label $i with mongo$KUBE_NAME_SPACE=baca" + kubectl label nodes --overwrite $i mongo$KUBE_NAME_SPACE=baca + done + echo + echo "About to label $MONGO_ADMIN_WORKERS with mongo-admin$KUBE_NAME_SPACE=baca." + for i in $(echo $MONGO_ADMIN_WORKERS | sed "s/,/ /g") + do + echo "Label $i with mongo-admin$KUBE_NAME_SPACE=baca" + kubectl label nodes --overwrite $i mongo-admin$KUBE_NAME_SPACE=baca + done + echo +} + + + +function getNFSServer() { + #Get a list of worker IPs + if [[ $PVCCHOICE == "1" ]]; then # This is the option 1 where the script will create everything for Internal usage. + getWorkerIPBasedOnLabel + #Create directories: + echo "Creating required directory for SP by ssh into $NFS_IP" + if [ -z "$SSH_USER" ]; then + export SSH_USER="root" + fi + + if [ "$SSH_USER" == "root" ]; then + export SUDO_CMD="" + else + export SUDO_CMD="sudo " + fi + echo "Creating necessary folder in $NFS_IP..." + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/{logs,data,config}" + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/logs/{backend,frontend,callerapi,processing-extraction,pdfprocess,setup,interprocessing,classifyprocess-classify,ocr-extraction,postprocessing,reanalyze,updatefiledetail,spfrontend,minio,redis,rabbitmq,mongo,mongoadmin,utf8process}" + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/config/backend" + + + + echo "Creating data directory on NFS ..." + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/data/{mongo,mongoadmin,redis,rabbitmq,minio}" + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/data/minio/{vol0,vol1,vol2,vol3}" + + + echo "Setting owner (51000:51001) for BACA's PVC" + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD chown -R 51000:51001 /exports/smartpages/" + + + + + echo "Checking to see if NFS server is installed..." + if [[ $ICP_VERSION == "3.1.2" ]]; then + ssh $SSH_USER@$NFS_IP "$SUDO_CMD systemctl status nfs-kernel-server" + if [[ $? != "0" ]]; then + echo "We could not find nfs service. We will try to install nfs server" + ssh $SSH_USER@$NFS_IP "$SUDO_CMD apt install nfs-kernel-server && $SUDO_CMD systemctl enable nfs-kernel-server && $SUDO_CMD systemctl restart nfs-kernel-server" + + fi + fi + if [[ $OCP_VERSION == "3.11" ]]; then + ssh $SSH_USER@$NFS_IP "$SUDO_CMD systemctl status nfs-server" + if [[ $? != "0" ]]; then + echo "We could not find nfs service. We will try to install nfs server" + ssh $SSH_USER@$NFS_IP "$SUDO_CMD yum install nfs-utils && $SUDO_CMD systemctl enable nfs-server && $SUDO_CMD systemctl restart nfs-server" + fi + fi + + + + + #We will backup the existing /etc/exports + #Compare the icp worker ip w/ the existing IP in the /etc/exports file then insert any missing entry (IP) into /etc/exports. + echo "ssh $SSH_USER@$NFS_IP "$SUDO_CMD cp /etc/exports /etc/exports_bak"" + ssh $SSH_USER@$NFS_IP "$SUDO_CMD cp /etc/exports /etc/exports_bak" + export EXPORTS_FILE=`ssh $SSH_USER@$NFS_IP "$SUDO_CMD cat /etc/exports |grep '/exports/smartpages'" | awk '{print $2}' | cut -d'(' -f1` + echo "from exports files: $EXPORTS_FILE" + echo "from k8's : $WORKER_IP1s" + + #if [[ $? == "1" ]]; then + + echo "Inside writting to /etc/exports routine" + echo $WORKER_IP1s + + for i in $WORKER_IP1s + do + + echo $EXPORTS_FILE |grep $i + if [[ $? == "1" ]]; then + echo $i + echo "Cannot find $i in the /etc/exports file....." + echo "Writing '/exports/smartpages "$i"(rw,sync,no_root_squash)' to $NFS_IP/etc/exports file" + + ssh $SSH_USER@$NFS_IP "echo '/exports/smartpages "$i"(rw,sync,no_root_squash)' | $SUDO_CMD tee --append /etc/exports" + else + echo " $i matched" + fi + + done + + + #restart nfs service if available$KUBE_NAME_SPACE/config + if [[ $ICP_VERSION == "3.1.2" ]]; then + ssh $SSH_USER@$NFS_IP "$SUDO_CMD systemctl restart nfs-kernel-server" + fi + if [[ $OCP_VERSION == "3.11" ]]; then + ssh $SSH_USER@$NFS_IP "$SUDO_CMD systemctl restart nfs-server" + fi + + + else + echo -e "\x1B[1;32mPVCCHOICE is not defined. Therefore, you must create the following pvc name: \x1B[0m" + fi # end if of pvc=1 + +} +function calMemoryLimitedDist(){ + + + echo CALLERAPI_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo SETUP_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo OCR_EXTRACTION_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.09 * 1024" | bc)Mi" + echo CLASSIFY_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo PROCESSING_EXTRACTION_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.09 * 1024" | bc)Mi" + echo INTER_PROCESSING_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo POST_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo PDF_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo UTF8_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo REANALYZE_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.045 * 1024" | bc)Mi" + echo UPDATEFILE_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo FRONTEND_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo BACKEND_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + echo MONGO_LIMITED_MEMORY="$(echo "$MONGO_SERVER_MEMORY * 0.6 * 1024" | bc)Mi" + echo MONGO_ADMIN_LIMITED_MEMORY="$(echo "$MONGO_ADMIN_SERVER_MEMORY * 0.6 * 1024" | bc)Mi" + echo RABBITMQ_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo MINIO_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + echo REDIS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + export mongo_memory_value="$(echo "$MONGO_SERVER_MEMORY * 0.6 " | bc)" + export mongo_admin_memory_value="$(echo "$MONGO_ADMIN_SERVER_MEMORY * 0.6 " | bc)" + + + export MONGO_WIREDTIGER_LIMIT="$(echo "($mongo_memory_value -1)*0.5" | bc)" + + if [[ 1 -eq $(echo "$MONGO_WIREDTIGER_LIMIT < 0.25" |bc -l) ]];then + echo MONGO_WIREDTIGER_LIMIT='0.25' + + + else + echo "MONGO_WIREDTIGER_LIMIT=$MONGO_WIREDTIGER_LIMIT" + + fi + +# echo "mongo_admin_memory_value=$mongo_admin_memory_value" + export MONGO_ADMIN_WIREDTIGER_LIMIT="$(echo "($mongo_admin_memory_value -1)*0.5" | bc)" + + if [[ 1 -eq $(echo "$MONGO_ADMIN_WIREDTIGER_LIMIT < 0.25" |bc -l) ]];then + echo MONGO_ADMIN_WIREDTIGER_LIMIT='0.25' + + else + echo "MONGO_ADMIN_WIREDTIGER_LIMIT=$MONGO_ADMIN_WIREDTIGER_LIMIT" + fi + +} + +function calMemoryLimitedShared(){ + echo CALLERAPI_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo SETUP_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo OCR_EXTRACTION_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.09 * 1024" | bc)Mi" + echo CLASSIFY_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo PROCESSING_EXTRACTION_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.09 * 1024" | bc)Mi" + echo INTER_PROCESSING_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo POST_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo PDF_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo UTF8_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo REANALYZE_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.045 * 1024" | bc)Mi" + echo UPDATEFILE_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo FRONTEND_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo BACKEND_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + echo MONGO_LIMITED_MEMORY="$(echo "$MONGO_SERVER_MEMORY * 0.1 * 1024" | bc)Mi" + echo MONGO_ADMIN_LIMITED_MEMORY="$(echo "$MONGO_ADMIN_SERVER_MEMORY * 0.1 * 1024" | bc)Mi" + echo RABBITMQ_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo MINIO_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + echo REDIS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + export mongo_memory_value="$(echo "$MONGO_SERVER_MEMORY * 0.1" | bc)" + export mongo_admin_memory_value="$(echo "$MONGO_ADMIN_SERVER_MEMORY * 0.1" | bc)" + +# echo "mongo_memory_value=$mongo_memory_value" + export MONGO_WIREDTIGER_LIMIT="$(echo "($mongo_memory_value -1)*0.5" | bc)" + #echo "MONGO_WIREDTIGER_LIMIT=$MONGO_WIREDTIGER_LIMIT" + if [[ 1 -eq $(echo "$MONGO_WIREDTIGER_LIMIT < 0.25" |bc -l) ]];then + echo MONGO_WIREDTIGER_LIMIT='0.25' + + else + echo "MONGO_WIREDTIGER_LIMIT=$MONGO_WIREDTIGER_LIMIT" + fi + +# echo "mongo_admin_memory_value=$mongo_admin_memory_value" + export MONGO_ADMIN_WIREDTIGER_LIMIT="$(echo "($mongo_admin_memory_value -1)*0.5" | bc)" + #echo "MONGO_WIREDTIGER_LIMIT=$MONGO_WIREDTIGER_LIMIT" + if [[ 1 -eq $(echo "$MONGO_WIREDTIGER_LIMIT < 0.25" |bc -l) ]];then + echo MONGO_ADMIN_WIREDTIGER_LIMIT='.25' + else + echo "MONGO_ADMIN_WIREDTIGER_LIMIT=$MONGO_ADMIN_WIREDTIGER_LIMIT" + fi + +} +function calNumOfContainers(){ + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + export numOfCelery=$(kubectl get nodes --show-labels |grep worker.*celery$KUBE_NAME_SPACE=baca | wc -l) + fi + if [[ $OCP_VERSION == "3.11" ]]; then + export numOfCelery=$(oc get nodes --show-labels |grep compute=true | grep celery$KUBE_NAME_SPACE=baca | wc -l) + fi + echo CELERY_REPLICAS=$numOfCelery + echo NON_CELERY_REPLICAS=$numOfCelery + +} diff --git a/BACA/configuration-ha/common.sh b/BACA/configuration-ha/common.sh new file mode 100644 index 00000000..7cce399e --- /dev/null +++ b/BACA/configuration-ha/common.sh @@ -0,0 +1,27 @@ +SERVER_MEMORY=16 +MONGO_SERVER_MEMORY=16 +MONGO_ADMIN_SERVER_MEMORY=16 +USING_HELM=y +HELM_INIT_BEFORE=n +KUBE_NAME_SPACE=sp +DOCKER_REG_FOR_SERVICES=mycluster.icp:8500/sp +LABEL_NODE=y +CA_WORKERS=172.16.29.200,172.16.29.201 +MONGO_WORKERS=172.16.29.200,172.16.29.201 +MONGO_ADMIN_WORKERS=172.16.29.200,172.16.29.201 +ICP_VERSION=3.1.2 +ICP_USER=admin +ICP_USER_PASSWORD=YWRtaW4K +BXDOMAINNAME=9.30.181.31 +MasterIp=9.30.181.31 +SSH_USER=root +PVCCHOICE=1 +NFS_IP=172.16.29.200 +DATAPVC=sp-data-pvc +LOGPVC=sp-log-pvc +CONFIGPVC=sp-config-pvc +BASE_DB_PWD="cGFzc3cwcmQK" +LDAP=y +LDAP_PASSWORD="R2VuaXVzMQo=" +LDAP_URL=ldap://172.16.194.107 +LDAP_CRT_NAME= \ No newline at end of file diff --git a/BACA/configuration-ha/common_ICP_template.sh b/BACA/configuration-ha/common_ICP_template.sh new file mode 100644 index 00000000..1543328a --- /dev/null +++ b/BACA/configuration-ha/common_ICP_template.sh @@ -0,0 +1,27 @@ +SERVER_MEMORY=16 +MONGO_SERVER_MEMORY=16 +MONGO_ADMIN_SERVER_MEMORY=16 +USING_HELM=y +HELM_INIT_BEFORE=n +KUBE_NAME_SPACE=sp +DOCKER_REG_FOR_SERVICES=mycluster.icp:8500/sp +LABEL_NODE=y +CA_WORKERS= +MONGO_WORKERS= +MONGO_ADMIN_WORKERS= +ICP_VERSION=3.1.2 +ICP_USER=admin +ICP_USER_PASSWORD=YWRtaW4K +BXDOMAINNAME= +MasterIp= +SSH_USER=root +PVCCHOICE=1 +NFS_IP= +DATAPVC=sp-data-pvc +LOGPVC=sp-log-pvc +CONFIGPVC=sp-config-pvc +BASE_DB_PWD= +LDAP= +LDAP_PASSWORD= +LDAP_URL=ldap://172.16.194.107 +LDAP_CRT_NAME= \ No newline at end of file diff --git a/BACA/configuration-ha/common_OCP_template.sh b/BACA/configuration-ha/common_OCP_template.sh new file mode 100644 index 00000000..ec105772 --- /dev/null +++ b/BACA/configuration-ha/common_OCP_template.sh @@ -0,0 +1,27 @@ +SERVER_MEMORY=16 +MONGO_SERVER_MEMORY=16 +MONGO_ADMIN_SERVER_MEMORY=16 +USING_HELM=y +HELM_INIT_BEFORE=n +KUBE_NAME_SPACE=sp +DOCKER_REG_FOR_SERVICES=docker-registry.default.svc:5000/sp +LABEL_NODE=y +CA_WORKERS= +MONGO_WORKERS= +MONGO_ADMIN_WORKERS= +OCP_VERSION=3.11 +OCP_USER=admin +OCP_USER_PASSWORD=YWRtaW4K +BXDOMAINNAME= +MasterIp= +SSH_USER=root +PVCCHOICE=1 +NFS_IP= +DATAPVC=sp-data-pvc +LOGPVC=sp-log-pvc +CONFIGPVC=sp-config-pvc +BASE_DB_PWD= +LDAP=y +LDAP_PASSWORD= +LDAP_URL=ldap://172.16.194.107 +LDAP_CRT_NAME= \ No newline at end of file diff --git a/BACA/configuration-ha/createSSLCert.sh b/BACA/configuration-ha/createSSLCert.sh new file mode 100644 index 00000000..d718a8ef --- /dev/null +++ b/BACA/configuration-ha/createSSLCert.sh @@ -0,0 +1,197 @@ +#!/usr/bin/env bash + +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + + +function createSSLCert() { + rm -r *.crt *.pem *.key || true + + echo -e "\x1B[1;32mAbout to create a self-signed SSL cert for ingress, celery, mongo, redis, rabbitmq....\x1B[0m" + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/tls.key -out $PWD/tls.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/tls.key -out $PWD/tls.crt -subj "/CN=127.0.0.1" + cat $PWD/tls.key $PWD/tls.crt > $PWD/tls.pem + + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/celery.key -out $PWD/celery.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/celery.key -out $PWD/celery.crt -subj "/CN=127.0.0.1" + cat $PWD/celery.key $PWD/celery.crt > $PWD/celery.pem + if [[ $HA_ENABLE = false ]]; then + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/mongo.key -out $PWD/mongo.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/mongo.key -out $PWD/mongo.crt -subj "/CN=127.0.0.1" + cat $PWD/mongo.key $PWD/mongo.crt > $PWD/mongo.pem + else + echo "create mongo and mongo admin cluster certifications" + CERT_DOMAIN="svc.cluster.local" + openssl genrsa -out $PWD/CA.key 4096 + openssl req -new -x509 -days 365 -key $PWD/CA.key -out $PWD/CA.crt \ + -subj "/C=CA/ST=NS/L=Halifax/O=IBM/CN=IBM baca" + openssl genrsa -out $PWD/certificate.key 4096 + openssl req -new -nodes -key $PWD/certificate.key -out $PWD/certificate.csr -config $PWD/openssl.cnf -extensions v3_req \ + -subj "/C=CA/ST=NS/L=Halifax/O=IBM/CN=*.${KUBE_NAME_SPACE}.${CERT_DOMAIN}" + openssl x509 -req -days 365 -in $PWD/certificate.csr -CA $PWD/CA.crt -CAkey $PWD/CA.key -set_serial 01 -out $PWD/certificate.crt + cat $PWD/certificate.key $PWD/certificate.crt > $PWD/mongo.key + cat $PWD/CA.key $PWD/CA.crt > $PWD/mongo.pem + cp $PWD/CA.crt $PWD/mongo.crt + fi + + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/public.crt -out $PWD/public.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/private.key -out $PWD/public.crt -subj "/CN=127.0.0.1" + + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/redis.key -out $PWD/redis.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/redis.key -out $PWD/redis.crt -subj "/CN=127.0.0.1" + cat $PWD/redis.key $PWD/redis.crt > $PWD/redis.pem + echo "changing file permissions for redis.key ..." + chmod 600 $PWD/redis.key + + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/rabbitmq.key -out $PWD/rabbitmq.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/rabbitmq.key -out $PWD/rabbitmq.crt -subj "/CN=127.0.0.1" + cat $PWD/rabbitmq.key $PWD/rabbitmq.crt > $PWD/rabbitmq.pem + + +} +function createSecret (){ + + echo -e "\x1B[1;32mAbout to create a secrets for ingress, celery, mongo, redis, rabbitmq....\x1B[0m" + echo "kubectl -n $KUBE_NAME_SPACE create secret tls baca-ingress-secret --key $PWD/tls.key --cert $PWD/tls.crt" + kubectl -n $KUBE_NAME_SPACE create secret tls baca-ingress-secret --key $PWD/tls.key --cert $PWD/tls.crt \ + --dry-run -o yaml | kubectl apply -f - + +#TODO: Place holder for DB2 cert. Upstream process MUST put cert in the parent dir. +# echo "kubectl -n $KUBE_NAME_SPACE create secret tls spdb2secret --key $PWD/rabbitmq.key --cert $PWD/rabbitmq.crt" +# kubectl -n $KUBE_NAME_SPACE create secret tls spdb2secret$KUBE_NAME_SPACE --key $PWD/rabbitmq.key --cert $PWD/rabbitmq.crt +# END OF DB2 + if [[ $LDAP_URL =~ ^'ldaps' && ! -z $LDAP_CRT_NAME ]]; then + echo "kubectl -n $KUBE_NAME_SPACE create secret generic with LDAP certs " + kubectl -n $KUBE_NAME_SPACE create secret generic baca-secrets$KUBE_NAME_SPACE \ + --from-file=$PWD/celery.pem --from-file=$PWD/celery.crt --from-file=$PWD/celery.key \ + --from-file=$PWD/mongo.pem --from-file=$PWD/mongo.crt --from-file=$PWD/mongo.key \ + --from-file=$PWD/public.crt --from-file=$PWD/private.key \ + --from-file=$PWD/redis.pem --from-file=$PWD/redis.key --from-file=$PWD/redis.crt \ + --from-file=$PWD/rabbitmq.pem --from-file=$PWD/rabbitmq.key --from-file=$PWD/rabbitmq.crt \ + --from-file=$PWD/$LDAP_CRT_NAME \ + --dry-run -o yaml | kubectl apply -f - + else + echo "kubectl -n $KUBE_NAME_SPACE create secret generic " + kubectl -n $KUBE_NAME_SPACE create secret generic baca-secrets$KUBE_NAME_SPACE \ + --from-file=$PWD/celery.pem --from-file=$PWD/celery.crt --from-file=$PWD/celery.key \ + --from-file=$PWD/mongo.pem --from-file=$PWD/mongo.crt --from-file=$PWD/mongo.key \ + --from-file=$PWD/public.crt --from-file=$PWD/private.key \ + --from-file=$PWD/redis.pem --from-file=$PWD/redis.key --from-file=$PWD/redis.crt \ + --from-file=$PWD/rabbitmq.pem --from-file=$PWD/rabbitmq.key --from-file=$PWD/rabbitmq.crt \ + --dry-run -o yaml | kubectl apply -f - + fi + + + + +} +function createMongoSecrets (){ +echo -e "\x1B[1;32mAbout to create mongo Secrets....\x1B[0m" +if [[ -z "$MONGOADMINENTRYPASSWORD" && -z "$MONGOADMINUSER" && -z "$MONGOADMINPASSWORD" ]]; then + echo -e "\x1B[1;32mCreating mongo admin Secrets using random values....\x1B[0m" + export MONGOADMINENTRYPASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) + export MONGOADMINUSER=$(openssl rand -base64 12 | tr -d "=+/" | cut -c1-29) + export MONGOADMINPASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) + + kubectl -n $KUBE_NAME_SPACE create secret generic baca-mongo-admin \ + --from-literal=MONGOADMINENTRYPASSWORD="$MONGOADMINENTRYPASSWORD" \ + --from-literal=MONGOADMINUSER="$MONGOADMINUSER" \ + --from-literal=MONGOADMINPASSWORD="$MONGOADMINPASSWORD" \ + --dry-run -o yaml | kubectl apply -f - +else + echo -e "\x1B[1;32mCreating mongo admin Secret based on custom values for MONGOADMINENTRYPASSWORD, MONGOADMINUSER, MONGOADMINPASSWORD\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create secret generic mongo-admin \ + --from-literal=MONGOADMINENTRYPASSWORD="$MONGOADMINENTRYPASSWORD" \ + --from-literal=MONGOADMINUSER="$MONGOADMINUSER" \ + --from-literal=MONGOADMINPASSWORD="$MONGOADMINPASSWORD" \ + --dry-run -o yaml | kubectl apply -f - +fi + +if [[ -z "$MONGOENTRYPASSWORD" && -z "$MONGOUSER" && -z "$MONGOPASSWORD" ]] ; then + echo -e "\x1B[1;32mCreating mongo Secrets using random values....\x1B[0m" + export MONGOENTRYPASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) + export MONGOUSER=$(openssl rand -base64 12 | tr -d "=+/" | cut -c1-29) + export MONGOPASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) + kubectl -n $KUBE_NAME_SPACE create secret generic baca-mongo \ + --from-literal=MONGOENTRYPASSWORD="$MONGOENTRYPASSWORD" \ + --from-literal=MONGOUSER="$MONGOUSER" \ + --from-literal=MONGOPASSWORD="$MONGOPASSWORD" \ + --dry-run -o yaml | kubectl apply -f - +else + echo -e "\x1B[1;32mCreating mongo Secret based on custom values for MONGOENTRYPASSWORD, MONGOUSER, MONGOPASSWORD\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create secret generic mongo \ + --from-literal=MONGOENTRYPASSWORD="$MONGOENTRYPASSWORD" \ + --from-literal=MONGOUSER="$MONGOUSER" \ + --from-literal=MONGOPASSWORD="$MONGOPASSWORD" \ + --dry-run -o yaml | kubectl apply -f - +fi + +} +function createLDAPSecret(){ + +if [[ $LDAP == "y" && $LDAP_PASSWORD != "" ]]; then + echo -e "\x1B[1;32mAbout to create LDAP Secret....\x1B[0m" + echo -e "\x1B[1;32mCreating LDAP Secret....\x1B[0m" + export LDAP_PASSWORD_DECODE=$(echo $LDAP_PASSWORD | base64 --decode) + kubectl -n $KUBE_NAME_SPACE create secret generic baca-ldap \ + --from-literal=LDAP_PASSWORD="$LDAP_PASSWORD_DECODE" \ + --dry-run -o yaml | kubectl apply -f - +fi + +} +function createBaseDbSecret(){ +echo -e "\x1B[1;32mAbout to create secret for Base DB....\x1B[0m" +if [[ -z $BASE_DB_PWD ]]; then + echo -e "\x1B[1;32m Cannot find BASED_DB_PWD from common.sh..Exiting !!\x1B[0m" + exit 1 +else + echo -e "\x1B[1;32mCreating Base DB secret....\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create secret generic baca-basedb \ + --from-literal=BASE_DB_PWD="$BASE_DB_PWD" \ + --dry-run -o yaml | kubectl apply -f - +fi +} +function createMinioSecret(){ +echo -e "\x1B[1;32mAbout to create secret for Minio....\x1B[0m" + export accesskey=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) + export secretkey=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) + echo -e "\x1B[1;32mCreating minio secret....\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create secret generic baca-minio \ + --from-literal=accesskey="$accesskey" \ + --from-literal=secretkey="$secretkey" \ + --dry-run -o yaml | kubectl apply -f - +} + +function createRabbitmaSecret(){ +echo -e "\x1B[1;32mAbout to create secret for RabbitMQ....\x1B[0m" + +export rabbitmq_admin_password=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) +export rabbitmq_erlang_cookie=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) +export rabbitmq_password=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) +export rabbitmq_user=$(openssl rand -base64 6 | tr -d "=+/" | cut -c1-29) +export rabbitmq_management_password=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) +export rabbitmq_management_user=$(openssl rand -base64 6 | tr -d "=+/" | cut -c1-29) + +kubectl -n $KUBE_NAME_SPACE create secret generic baca-rabbitmq \ +--from-literal=rabbitmq-admin-password="$rabbitmq_admin_password" \ +--from-literal=rabbitmq-erlang-cookie="$rabbitmq_erlang_cookie" \ +--from-literal=rabbitmq-password="$rabbitmq_password" \ +--from-literal=rabbitmq-user="$rabbitmq_user" \ +--from-literal=rabbitmq-management-password="$rabbitmq_management_password" \ +--from-literal=rabbitmq-management-user="$rabbitmq_management_user" \ +--dry-run -o yaml | kubectl apply -f - + + +} + +function createRedisSecret(){ +echo -e "\x1B[1;32mAbout to create secret for Redis....\x1B[0m" +export redis_password=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) +kubectl -n $KUBE_NAME_SPACE create secret generic baca-redis \ +--from-literal=redis-password="$redis_password" \ +--dry-run -o yaml | kubectl apply -f - +} \ No newline at end of file diff --git a/BACA/configuration-ha/delete_ContentAnalyzer.sh b/BACA/configuration-ha/delete_ContentAnalyzer.sh new file mode 100755 index 00000000..273f6ff4 --- /dev/null +++ b/BACA/configuration-ha/delete_ContentAnalyzer.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +. ./common.sh +. ./bashfunctions.sh + +today=`date +%Y-%m-%d.%H:%M:%S` +echo $today + +if [ -z "$KUBE_NAME_SPACE" ] +then + echo -e "\x1B[1;31mThe KUBE_NAME_SPACE is not set. The script will exit. To delete everything in the IBM Business Automation Content Analyzer namespace, set the KUBE_NAME_SPACE variable to the name of the namespace where IBM Business Automation Content Analyzer is deployed and rerun. :\x1B[0m" + exit +fi + +if [ $KUBE_NAME_SPACE == "default" ] +then + echo -e "\x1B[1;31mThe KUBE_NAME_SPACE is set to default. The script will exit. We cannot delete all resources from the default namespace. To delete everything in the IBM Business Automation Content Analyzer namespace, set the KUBE_NAME_SPACE variable to the name of the namespace where IBM Business Automation Content Analyzer is deployed and rerun. :\x1B[0m" + exit +fi + +# confirm they want to delete +echo +echo -e "\x1B[1;31mThis script will DELETE all the resources, including services, deployments, and pvc, in the namespace : $KUBE_NAME_SPACE . And then delete the namespace $KUBE_NAME_SPACE \x1B[0m" +echo +echo -e "\x1B[1;31mPlease only execute if you are SURE you want to DELETE everything from your namespace $KUBE_NAME_SPACE . \x1B[0m" +echo +echo -e "\x1B[1;31mWARNING: Please note that on ICP this script may not be able to successfully remove all the pods. The pods and the namespace might be left in 'terminating' state . \x1B[0m" +echo + +while [[ $deleteconfirm != "y" && $deleteconfirm != "n" && $deleteconfirm != "yes" && $deleteconfirm != "no" ]] # While deleteconfirm is not y or n... +do + echo -e "\x1B[1;31mWould you like to continue (Y/N):\x1B[0m" + read deleteconfirm + deleteconfirm=$(echo "$deleteconfirm" | tr '[:upper:]' '[:lower:]') +done + + +if [[ $deleteconfirm == "n" || $deleteconfirm == "no" ]] +then + exit +fi + +#Logon to kubectl +loginToCluster + + +echo "----- Deleting Celery ..." +cwd=$(pwd) + +#export HELM="./helm-chart/baca-celery" +#export HELM1="./helm-chart/baca-userportal" +#echo +#echo "cd ${HELM}" +#cd ${HELM} + +echo +if [[ $ICP_VERSION == "3.1.2" ]]; then +echo "helm delete celery${KUBE_NAME_SPACE} --purge --tls" +helm delete celery${KUBE_NAME_SPACE} --purge --tls +fi +if [[ $OCP_VERSION == "3.11" ]]; then +echo "helm delete celery${KUBE_NAME_SPACE} --purge " +helm delete celery${KUBE_NAME_SPACE} --purge +fi + +echo +echo "sleep for 120 secs to wait for celery pods to complete termination...." + +sleep 120 +# +#echo +#echo "return to previous directory: ${cwd}" +#cd ${cwd} + +echo ----- Deleting all BACA resources from namespace : $KUBE_NAME_SPACE +set +e +kubectl delete -n $KUBE_NAME_SPACE --all deploy,svc,pvc,pods --force --grace-period=0 +kubectl delete -n $KUBE_NAME_SPACE secret baca-ingress-secret baca-secrets$KUBE_NAME_SPACE baca-userportal-ingress-secret baca-mongo baca-mongo-admin baca-ldap baca-basedb baca-minio baca-rabbitmq baca-redis +if [[ $ICP_VERSION == "3.1.2" ]]; then + kubectl delete -n $KUBE_NAME_SPACE rolebinding baca-clusterrole-rolebinding + kubectl delete -n $KUBE_NAME_SPACE clusterrole baca-anyuid-clusterrole + kubectl delete -n $KUBE_NAME_SPACE psp baca-anyuid-psp +fi +set -e + + + + +# only delete PVC for internal/dev env. +if [[ $PVCCHOICE == "1" ]]; then + echo ---- Deleting persistent volumes. + count=`kubectl -n $KUBE_NAME_SPACE get pv | awk {'print $1'}| grep ^sp-.*${KUBE_NAME_SPACE}$|wc | awk {'print $1'}` + if [[ $count != "0" ]]; then + kubectl -n $KUBE_NAME_SPACE delete pv `kubectl -n $KUBE_NAME_SPACE get pv | awk {'print $1'}| grep ^sp-.*${KUBE_NAME_SPACE}$` + fi + echo ---Clean up all pvc subdirectories. You need to run setup.sh or init_deployment.sh again to have these directories re-created. +# ssh root@$NFS_IP rm -rf /exports/smartpages/$KUBE_NAME_SPACE/* + if [ -z "$SSH_USER" ]; then + export SSH_USER="root" + fi + + if [ "$SSH_USER" == "root" ]; then + export SUDO_CMD="" + else + export SUDO_CMD="sudo " + fi + ssh $SSH_USER@$NFS_IP "$SUDO_CMD rm -rf /exports/smartpages/$KUBE_NAME_SPACE/*" + + +fi + diff --git a/BACA/configuration-ha/generateMemoryValues.sh b/BACA/configuration-ha/generateMemoryValues.sh new file mode 100755 index 00000000..0e6cf3ea --- /dev/null +++ b/BACA/configuration-ha/generateMemoryValues.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# +. ./bashfunctions.sh +. ./common.sh + +echo -e "\x1B[1;32mThis will generate recommended values for setting memory resources in Business Automation Content Analyzer (CA) product.\x1B[0m" +echo -e "\x1B[1;32mUse \"distributed\" flag when you have an distribute environment where mongo DB, mongo-admin DB, and CA processing components are their own nodes. Otherwise, use \"limited\" flag \x1B[0m" +echo -e "\x1B[1;32mThese values may need to be adjusted depending on your workload\x1B[0m" + + +if [[ -z $1 ]]; then + echo -e "\x1B[1;31mYou need to pass in either \"distributed\" or \"limited\" to use this script\x1B[0m" + exit 1 +fi + + +if [[ $1 == "distributed" ]]; then + calMemoryLimitedDist + calNumOfContainers +elif [[ $1 == "limited" ]]; then + calMemoryLimitedShared + calNumOfContainers +fi \ No newline at end of file diff --git a/BACA/configuration-ha/init_deployments.sh b/BACA/configuration-ha/init_deployments.sh new file mode 100755 index 00000000..42ac9fb6 --- /dev/null +++ b/BACA/configuration-ha/init_deployments.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env bash +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +. ./common.sh +. ./bashfunctions.sh +. ./createSSLCert.sh + +# Login (if necessary) +loginToCluster + +#Creating psp and clusterrole for BACA +export HA_ENABLE=true + + +# Create Kube namespace +echo "\x1B[1;32mCreating $KUBE_NAME_SPACE namespace \x1B[0m" +if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + kubectl create namespace $KUBE_NAME_SPACE +fi + +if [[ $OCP_VERSION == "3.11" ]]; then + oc new-project $KUBE_NAME_SPACE + oc project $KUBE_NAME_SPACE +fi + +if [[ $ICP_VERSION == "3.1.2" ]]; then + checkPsp=$(kubectl get psp |grep baca |wc -l) + + if [[ $checkPsp == "0" ]]; then + + echo -e "\x1B[1;32mCreating psp and clusterrole for BACA\x1B[0m" + kubectl -n $KUBE_NAME_SPACE apply -f ./baca-psp.yaml + echo -e "\x1B[1;32mCreating rolebinding for BACA\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create rolebinding baca-clusterrole-rolebinding --clusterrole=baca-anyuid-clusterrole --group=system:serviceaccounts:$KUBE_NAME_SPACE + + fi +fi + +if [[ $OCP_VERSION == "3.11" ]]; then + # Allows images to run as the root UID if no USER in specified in the Dockerfile. + oc adm policy add-scc-to-group anyuid system:authenticated +fi + +#label nodes +if [[ ($LABEL_NODE == "y" || $LABEL_NODE == "Y") ]]; then + customLabelNodes +else + echo -e "\x1B[1;32mLABEL_NODE and LABEL_NODE_BY_PARAM parameters are not defined. Therefore, you must label your nodes accordingly\x1B[0m" +fi + + +# Create nfs, and pv/pvc +getNFSServer + + +#Create SSL cert and secret +createSSLCert +createSecret +createMongoSecrets +createLDAPSecret +createBaseDbSecret +createMinioSecret +createRabbitmaSecret +createRedisSecret +if [[ $PVCCHOICE == "1" ]]; then + echo -e "\x1B[1;32mSetting up PV/PVC storage\x1B[0m" + ./init_persistent.sh +fi + + +#Helm client download and initialization +if [[ $USING_HELM == "y" || $USING_HELM == "yes" ]]; then + if [[ -z $HELM_INIT_BEFORE || $HELM_INIT_BEFORE == "n" || $HELM_INIT_BEFORE == "no" ]]; then + + # setup helm client + downloadHelmClient + + # setup helm on cluster + helmSetup + + # ensure tiller-deploy is successful on cluster + checkHelm + fi +fi + diff --git a/BACA/configuration-ha/init_persistent.sh b/BACA/configuration-ha/init_persistent.sh new file mode 100755 index 00000000..a731d486 --- /dev/null +++ b/BACA/configuration-ha/init_persistent.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +. ./common.sh + + +cat sppersistent.yaml | sed s/\$NFS_IP/"$NFS_IP"/ | sed s/\$KUBE_NAME_SPACE/"$KUBE_NAME_SPACE"/ | sed s/\$DATAPVC/"$DATAPVC"/ | sed s/\$LOGPVC/"$LOGPVC"/ | sed s/\$CONFIGPVC/"$CONFIGPVC"/ |kubectl apply -f - + diff --git a/BACA/configuration-ha/mongo/post-setup.sh b/BACA/configuration-ha/mongo/post-setup.sh new file mode 100644 index 00000000..839bd8b9 --- /dev/null +++ b/BACA/configuration-ha/mongo/post-setup.sh @@ -0,0 +1,121 @@ +. ../../common.sh + +NUMOFSHARDS=2 +# NFS_IP=172.16.243.23 +#KUBE_NAME_SPACE=sp +# ENTRYPASSWORD='bacauser' +LOG_LEVEL=info +ROUTER_REPLICA=3 +SHARD_REPLICA=3 +CONFIG_REPLICA=3 + +echo +echo "Waiting for all the shards and configdb containers up running" +sleep 30 +echo -n " " +until kubectl exec mongodb-configdb-$((CONFIG_REPLICA-1)) --namespace=${KUBE_NAME_SPACE} -c mongodb-configdb-container -- mongo --host 127.0.0.1 --port 27019 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'db.getMongo()'; do + sleep 5 + echo -n " " +done + +echo -n " " +until kubectl exec mongodb-shard0-$((SHARD_REPLICA-1)) --namespace=${KUBE_NAME_SPACE} -c mongod-shard0-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'db.getMongo()'; do + sleep 5 + echo -n " " +done +echo -n " " +until kubectl exec mongodb-shard1-$((SHARD_REPLICA-1)) --namespace=${KUBE_NAME_SPACE} -c mongod-shard1-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'db.getMongo()'; do + sleep 5 + echo -n " " +done +echo "...shards & configdb containers are now running" +echo + +sleep 90 + +echo "Configuring Config Server Replica Sets" +# !!!Replicas if your mongodb-configdb has more than x>=3 replicas, please add {_id: [x-1], host: "mongodb-configdb-[x-1].mongodb-configdb-service.{KUBE_NAME_SPACE}.svc.cluster.local:27019"} after _id: 2 +# !!!Namespace: if you have different namespace {NAME_SPACE}, please add {_id: 2, host: "mongodb-shard0-2.mongodb-shard0-service.{NAME_SPACE}.svc.cluster.local:27018"} +kubectl exec mongodb-configdb-0 --namespace=${KUBE_NAME_SPACE} -c mongodb-configdb-container -- mongo --host 127.0.0.1 --port 27019 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'rs.initiate({_id: "configReplSet", version: 1, members: [ {_id: 0, host: "mongodb-configdb-0.mongodb-configdb-service.sp.svc.cluster.local:27019"}, {_id: 1, host: "mongodb-configdb-1.mongodb-configdb-service.sp.svc.cluster.local:27019"}, {_id: 2, host: "mongodb-configdb-2.mongodb-configdb-service.sp.svc.cluster.local:27019"} ]});' + +echo "Configuring shardX Replica Sets" +# !!!Replicas: if your mongodb-configdb has more than x>=3 replicas, please add {_id: 2, host: "mongodb-shard0-{x-1}.mongodb-shard0-service.{KUBE_NAME_SPACE}.svc.cluster.local:27018"} after _id: 2 +# !!!Namespace: if you have different namespace {s}, please add {_id: 2, host: "mongodb-shard0-2.mongodb-shard0-service.{s}.svc.cluster.local:27018"} +kubectl exec mongodb-shard0-0 --namespace=${KUBE_NAME_SPACE} -c mongod-shard0-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'rs.initiate({_id: "rs-shard0", version: 1, members: [ {_id: 0, host: "mongodb-shard0-0.mongodb-shard0-service.sp.svc.cluster.local:27018"}, {_id: 1, host: "mongodb-shard0-1.mongodb-shard0-service.sp.svc.cluster.local:27018"}, {_id: 2, host: "mongodb-shard0-2.mongodb-shard0-service.sp.svc.cluster.local:27018"} ]});' +kubectl exec mongodb-shard1-0 --namespace=${KUBE_NAME_SPACE} -c mongod-shard1-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'rs.initiate({_id: "rs-shard1", version: 1, members: [ {_id: 0, host: "mongodb-shard1-0.mongodb-shard1-service.sp.svc.cluster.local:27018"}, {_id: 1, host: "mongodb-shard1-1.mongodb-shard1-service.sp.svc.cluster.local:27018"}, {_id: 2, host: "mongodb-shard1-2.mongodb-shard1-service.sp.svc.cluster.local:27018"} ]});' + +echo "Wait for each MongoDB Shard's Replica Set + the ConfigDB Replica Set to each have a primary ready" + +kubectl exec mongodb-configdb-0 --namespace=${KUBE_NAME_SPACE} -c mongodb-configdb-container -- mongo --host 127.0.0.1 --port 27019 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'while (rs.status().hasOwnProperty("myState") && rs.status().myState != 1) { print("."); sleep(1000); };' +kubectl exec mongodb-shard0-0 --namespace=${KUBE_NAME_SPACE} -c mongod-shard0-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'while (rs.status().hasOwnProperty("myState") && rs.status().myState != 1) { print("."); sleep(1000); };' +kubectl exec mongodb-shard1-0 --namespace=${KUBE_NAME_SPACE} -c mongod-shard1-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'while (rs.status().hasOwnProperty("myState") && rs.status().myState != 1) { print("."); sleep(1000); };' + +sleep 2 # Just a little more sleep to ensure everything is ready! +echo "...initialisation of the MongoDB shard Replica Sets completed" +echo + + +# Wait for the mongos to have started properly +echo "Waiting for the first mongos router to up and run" +echo -n " " +until kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -c mongos-router-container -- mongo --host 127.0.0.1 --port 27017 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'db.getMongo()'; do + sleep 2 + echo -n " " +done +echo "...first mongos router is now running (`date`)" +echo +# !!!Namespace: if you have different namespace {NAME_SPACE}, please change rs-shard0/mongodb-shard0-0.mongodb-shard0-service.{NAME_SPACE}.svc.cluster.local:27018 +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -c mongos-router-container \ +-- mongo --host 127.0.0.1 --port 27017 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --authenticationMechanism=MONGODB-X509 --authenticationDatabase='$external' --eval \ +'sh.addShard("rs-shard0/mongodb-shard0-0.mongodb-shard0-service.sp.svc.cluster.local:27018");' + +# !!!Namespace: if you have different namespace {NAME_SPACE}, please change rs-shard1/mongodb-shard1-0.mongodb-shard1-service.{NAME_SPACE}.svc.cluster.local:27018 +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -c mongos-router-container \ +-- mongo --host 127.0.0.1 --port 27017 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --authenticationMechanism=MONGODB-X509 --authenticationDatabase='$external' --eval \ +'sh.addShard("rs-shard1/mongodb-shard1-0.mongodb-shard1-service.sp.svc.cluster.local:27018");' + + +# --------------create admin user start------------------------ +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -- bash -c \ +'echo "db.getSiblingDB(\"admin\").createUser({user:mongo_initdb_root_username,pwd:entrypassword,roles:[{role:\"root\",db:\"admin\"}, {role:\"clusterAdmin\",db:\"admin\"}]});" > mongo_create_admin.js;' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'echo mongo --host 127.0.0.1 --port 27017 --sslAllowInvalidCertificates --ssl --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval \"var mongo_initdb_root_username="'"'MONGO_INITDB_ROOT_USERNAME'"'",entrypassword="'"'ENTRYPASSWORD'"'"\" mongo_create_admin.js > mongo_create_admin_bak.sh' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'cat mongo_create_admin_bak.sh | sed s/MONGO_INITDB_ROOT_USERNAME/$MONGO_INITDB_ROOT_USERNAME/g | sed s/ENTRYPASSWORD/$ENTRYPASSWORD/g > mongo_create_admin.sh' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'sh mongo_create_admin.sh && rm mongo_create_admin.js mongo_create_admin.sh mongo_create_admin_bak.sh' + +# --------------create admin user end------------------------ + +sleep 10 + +# --------------create regular user start------------------------ + + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -- bash -c \ +'echo "db.createUser({user:mongo_user,pwd:mongo_password,roles:[{role:\"readWrite\",db:mongo_initdb}, {role:\"readWrite\",db:mongo_seconddb}, {role:\"readWrite\", db:\"cronjobs\"}, {role:\"readWrite\",db:\"smartpages\"}]});" > mongo_create_user.js;' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'echo mongo --host mongos-service.sp.svc.cluster.local --port 27017 $MONGO_INITDB --sslAllowInvalidCertificates --ssl --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem -u $MONGO_INITDB_ROOT_USERNAME -p $ENTRYPASSWORD --authenticationDatabase admin --eval \"var mongo_user="'"'MONGO_USER'"'", mongo_password="'"'MONGO_PASSWORD'"'", mongo_initdb="'"'MONGO_INITDB'"'", mongo_seconddb="'"'MONGO_SECONDDB'"'"\" mongo_create_user.js > mongo_create_user_bak.sh' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'cat mongo_create_user_bak.sh | sed s/MONGO_USER/$MONGO_USER/g | sed s/MONGO_PASSWORD/$MONGO_PASSWORD/g | sed s/MONGO_INITDB/$MONGO_INITDB/g | sed s/MONGO_SECONDDB/$MONGO_SECONDDB/g > mongo_create_user.sh' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'sh mongo_create_user.sh && rm mongo_create_user.js mongo_create_user.sh mongo_create_user_bak.sh' + +# --------------create regular user end------------------------ + +# echo "expose mongos router" +# kubectl expose deployment mongos-router --type=ClusterIP --name=mongos-service + +# --------------------mongodb shard javascript function-------------------- +# sh.enableSharding("test"); +# sh.shardCollection("test.testcoll", {"myfield": 1}); +# use test; +# db.testcoll.insert({"myfield": "a", "otherfield": "b"}); +# db.testcoll.find(); +# sh.status(); diff --git a/BACA/configuration-ha/mongo/pre-setup.sh b/BACA/configuration-ha/mongo/pre-setup.sh new file mode 100644 index 00000000..f8a894a9 --- /dev/null +++ b/BACA/configuration-ha/mongo/pre-setup.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +. ../common.sh + +NUMOFSHARDS=2 +# NFS_IP=172.16.243.23 +#KUBE_NAME_SPACE=sp +# ENTRYPASSWORD='bacauser' +LOG_LEVEL=info +ROUTER_REPLICA=3 +SHARD_REPLICA=3 +CONFIG_REPLICA=3 +# this value has been defined in single-deployment +SSH_USER="root" + +# ./ssl_generator.sh + +current_templates_path=$(pwd)/templates +mkdir $current_templates_path + +cp templates_base/local-storage-base.yaml templates/local-storage-base.yaml +cp templates_base/mongo-service-base.yaml templates/mongo-service-base.yaml +cp values-base.yaml values.yaml + +echo LOG_LEVEL=$LOG_LEVEL +sed -i.bak s#\$LOG_LEVEL#$LOG_LEVEL# values.yaml +echo "Replacing '' with $KUBE_NAME_SPACE" +sed -i.bak s#\$KUBE_NAME_SPACE#$KUBE_NAME_SPACE# values.yaml +echo "Replacing '' with $NFS_IP" +# sed -i.bak s#\$NFS_IP#$NFS_IP# values.yaml +sed -i.bak s#\$ROUTER_REPLICA#$ROUTER_REPLICA# values.yaml +sed -i.bak s#\$SHARD_REPLICA#$SHARD_REPLICA# values.yaml +sed -i.bak s#\$CONFIG_REPLICA#$CONFIG_REPLICA# values.yaml +sed -i.bak s#\$LOGPVC#$LOGPVC# values.yaml + +if [ "$SSH_USER" = "root" ]; then + export SUDO_CMD="" +else + export SUDO_CMD="sudo" +fi + +echo "Creating necessary folder in $NFS_IP..." +for i in `seq 0 $((CONFIG_REPLICA-1))` +do + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/configdb-${i}" +done + +for i in `seq 0 $((NUMOFSHARDS-1))` +do + for j in `seq 0 $((SHARD_REPLICA-1))` + do + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/mongodb-shard${i}-${j}" + done +done + +ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD chown -R 51000:51001 /exports/smartpages/$KUBE_NAME_SPACE/*" + +echo "-----------------Creating pv and pvc by sp-persistence for shard-------------" +for i in `seq 0 $((NUMOFSHARDS-1))` +do + for j in `seq 0 $((SHARD_REPLICA-1))` + do + sed -e "s/\$KUBE_NAME_SPACE/$KUBE_NAME_SPACE/g; s/\$SHARDX/${i}/g; s/\$COUNTER/${j}/g; s#\$NFS_IP#${NFS_IP}#g" \ + ./templates_base/shard-persistence-base.yaml> ./templates/persistence-shard${i}-${j}.yaml + done +done + +echo "-------------Creating pv and pvc by sp-persistence for mongodb config-----------------" +for i in `seq 0 $((CONFIG_REPLICA-1))` +do + sed -e "s/\$KUBE_NAME_SPACE/$KUBE_NAME_SPACE/g; s/\$COUNTER/${i}/g; s#\$NFS_IP#${NFS_IP}#g" ./templates_base/configdb-persistence-base.yaml> \ + ./templates/configdb-persistence-${i}.yaml +done + +echo "------------cp mongodb configsvr--------------------" +sed -e "s/\$KUBE_NAME_SPACE/$KUBE_NAME_SPACE/g; s/\$PORT_NUMBER/$PORT_NUMBER/g" ./templates_base/configdb-service-base.yaml> ./templates/configdb-service.yaml + +echo "------------Deploying mongodb shardX------------" + +for i in `seq 0 $((NUMOFSHARDS-1))` +do + sed -e "s/\$SHARDX/${i}/g" ./templates_base/shardX-stateful.yaml> ./templates/shard${i}-stateful.yaml +done + +echo "------------cp mongodb router(mongos)------------" +# !!!Replicas if your mongodb-configdb has more than x>=3 replicas, please add mongodb-configdb-{x-1}.mongodb-configdb-service.${KUBE_NAME_SPACE}.svc.cluster.local:27019 in the end +CONFIG_REPLSET_VALUE="configReplSet/mongodb-configdb-0.mongodb-configdb-service.sp.svc.cluster.local:27019,mongodb-configdb-1.mongodb-configdb-service.sp.svc.cluster.local:27019,mongodb-configdb-2.mongodb-configdb-service.sp.svc.cluster.local:27019" +sed -i.bak s#\$CONFIG_REPLSET_VALUE#$CONFIG_REPLSET_VALUE# values.yaml +cp ./templates_base/mongos-router-base.yaml ./templates/mongos-router.yaml diff --git a/BACA/configuration-ha/mongoadmin/post-setup.sh b/BACA/configuration-ha/mongoadmin/post-setup.sh new file mode 100644 index 00000000..b825282f --- /dev/null +++ b/BACA/configuration-ha/mongoadmin/post-setup.sh @@ -0,0 +1,133 @@ +#!/usr/bin/env bash + +. ../../common.sh + +NUMOFSHARDS=2 +# NFS_IP=172.16.243.23 +#KUBE_NAME_SPACE=sp +# ENTRYPASSWORD='bacauser' +LOG_LEVEL=info +ROUTER_REPLICA=3 +SHARD_REPLICA=3 +CONFIG_REPLICA=3 +# this value has been defined in single-deployment +SSH_USER="root" + +# ./ssl_generator.sh + +echo +echo "Waiting for all the shards and configdb containers up running" +sleep 30 +echo -n " " +until kubectl exec mongodb-admin-configdb-$((CONFIG_REPLICA-1)) --namespace=${KUBE_NAME_SPACE} -c mongodb-admin-configdb-container -- mongo --host 127.0.0.1 --port 27019 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'db.getMongo()'; do + sleep 5 + echo -n " " +done + +echo -n " " +until kubectl exec mongodb-admin-shard0-$((SHARD_REPLICA-1)) --namespace=${KUBE_NAME_SPACE} -c mongod-admin-shard0-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'db.getMongo()'; do + sleep 5 + echo -n " " +done +echo -n " " +until kubectl exec mongodb-admin-shard1-$((SHARD_REPLICA-1)) --namespace=${KUBE_NAME_SPACE} -c mongod-admin-shard1-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'db.getMongo()'; do + sleep 5 + echo -n " " +done +echo "...shards & configdb containers are now running" +echo + +sleep 90 + +echo "Configuring Config Server Replica Sets" +# !!!Replicas if your mongodb-admin-configdb has more than x>=3 replicas, please add {_id: [x-1], host: "mongodb-admin-configdb-[x-1].mongodb-admin-configdb-service.{KUBE_NAME_SPACE}.svc.cluster.local:27019"} after _id: 2 +# !!!Namespace: if you have different namespace {NAME_SPACE}, please add {_id: 2, host: "mongodb-admin-shard0-2.mongodb-admin-shard0-service.{NAME_SPACE}.svc.cluster.local:27018"} + +kubectl exec mongodb-admin-configdb-0 --namespace=${KUBE_NAME_SPACE} -c mongodb-admin-configdb-container -- mongo --host 127.0.0.1 --port 27019 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'rs.initiate({_id: "configReplSetAdmin", version: 1, members: [ {_id: 0, host: "mongodb-admin-configdb-0.mongodb-admin-configdb-service.sp.svc.cluster.local:27019"}, {_id: 1, host: "mongodb-admin-configdb-1.mongodb-admin-configdb-service.sp.svc.cluster.local:27019"}, {_id: 2, host: "mongodb-admin-configdb-2.mongodb-admin-configdb-service.sp.svc.cluster.local:27019"} ]});' + +echo "Configuring shardX Replica Sets" +# !!!Replicas: if your mongodb-admin-configdb has more than x>=3 replicas, please add {_id: 2, host: "mongodb-admin-shard0-{x-1}.mongodb-admin-shard0-service.{KUBE_NAME_SPACE}.svc.cluster.local:27018"} after _id: 2 +# !!!Namespace: if you have different namespace {s}, please add {_id: 2, host: "mongodb-admin-shard0-2.mongodb-admin-shard0-service.{s}.svc.cluster.local:27018"} +kubectl exec mongodb-admin-shard0-0 --namespace=${KUBE_NAME_SPACE} -c mongod-admin-shard0-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'rs.initiate({_id: "rs-admin-shard0", version: 1, members: [ {_id: 0, host: "mongodb-admin-shard0-0.mongodb-admin-shard0-service.sp.svc.cluster.local:27018"}, {_id: 1, host: "mongodb-admin-shard0-1.mongodb-admin-shard0-service.sp.svc.cluster.local:27018"}, {_id: 2, host: "mongodb-admin-shard0-2.mongodb-admin-shard0-service.sp.svc.cluster.local:27018"} ]});' +kubectl exec mongodb-admin-shard1-0 --namespace=${KUBE_NAME_SPACE} -c mongod-admin-shard1-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'rs.initiate({_id: "rs-admin-shard1", version: 1, members: [ {_id: 0, host: "mongodb-admin-shard1-0.mongodb-admin-shard1-service.sp.svc.cluster.local:27018"}, {_id: 1, host: "mongodb-admin-shard1-1.mongodb-admin-shard1-service.sp.svc.cluster.local:27018"}, {_id: 2, host: "mongodb-admin-shard1-2.mongodb-admin-shard1-service.sp.svc.cluster.local:27018"} ]});' + +echo "Wait for each MongoDB Shard's Replica Set + the ConfigDB Replica Set to each have a primary ready" + +kubectl exec mongodb-admin-configdb-0 --namespace=${KUBE_NAME_SPACE} -c mongodb-admin-configdb-container -- mongo --host 127.0.0.1 --port 27019 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'while (rs.status().hasOwnProperty("myState") && rs.status().myState != 1) { print("."); sleep(1000); };' +kubectl exec mongodb-admin-shard0-0 --namespace=${KUBE_NAME_SPACE} -c mongod-admin-shard0-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'while (rs.status().hasOwnProperty("myState") && rs.status().myState != 1) { print("."); sleep(1000); };' +kubectl exec mongodb-admin-shard1-0 --namespace=${KUBE_NAME_SPACE} -c mongod-admin-shard1-container -- mongo --host 127.0.0.1 --port 27018 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval 'while (rs.status().hasOwnProperty("myState") && rs.status().myState != 1) { print("."); sleep(1000); };' + +sleep 2 # Just a little more sleep to ensure everything is ready! +echo "...initialisation of the MongoDB shard Replica Sets completed" +echo + + +# Wait for the mongos to have started properly +echo "Waiting for the first mongos router to up and run" +echo -n " " +until kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -c mongos-admin-router-container -- mongo --host 127.0.0.1 --port 27017 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --quiet --eval 'db.getMongo()'; do + sleep 2 + echo -n " " +done +echo "...first mongos router is now running (`date`)" +echo + +# !!!Namespace: if you have different namespace {NAME_SPACE}, please change rs-admin-shard0/mongodb-admin-shard0-0.mongodb-admin-shard0-service.{NAME_SPACE}.svc.cluster.local:27018 +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -c mongos-admin-router-container \ +-- mongo --host 127.0.0.1 --port 27017 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --authenticationMechanism=MONGODB-X509 --authenticationDatabase='$external' --eval \ +'sh.addShard("rs-admin-shard0/mongodb-admin-shard0-0.mongodb-admin-shard0-service.sp.svc.cluster.local:27018");' + +# !!!Namespace: if you have different namespace {NAME_SPACE}, please change rs-admin-shard1/mongodb-admin-shard1-0.mongodb-admin-shard1-service.{NAME_SPACE}.svc.cluster.local:27018 +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -c mongos-admin-router-container \ +-- mongo --host 127.0.0.1 --port 27017 --ssl --sslAllowInvalidCertificates --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --authenticationMechanism=MONGODB-X509 --authenticationDatabase='$external' --eval \ +'sh.addShard("rs-admin-shard1/mongodb-admin-shard1-0.mongodb-admin-shard1-service.sp.svc.cluster.local:27018");' + + +# --------------create admin user start------------------------ + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -- bash -c \ +'echo "db.getSiblingDB(\"admin\").createUser({user:mongo_initdb_root_username,pwd:entrypassword,roles:[{role:\"root\",db:\"admin\"}, {role:\"clusterAdmin\",db:\"admin\"}]});" > mongo_create_admin.js;' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'echo mongo --host 127.0.0.1 --port 27017 --sslAllowInvalidCertificates --ssl --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem --eval \"var mongo_initdb_root_username="'"'MONGO_INITDB_ROOT_USERNAME'"'",entrypassword="'"'ENTRYPASSWORD'"'"\" mongo_create_admin.js > mongo_create_admin_bak.sh' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'cat mongo_create_admin_bak.sh | sed s/MONGO_INITDB_ROOT_USERNAME/$MONGO_INITDB_ROOT_USERNAME/g | sed s/ENTRYPASSWORD/$ENTRYPASSWORD/g > mongo_create_admin.sh' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'sh mongo_create_admin.sh && rm mongo_create_admin.js mongo_create_admin.sh mongo_create_admin_bak.sh' + +# --------------create admin user end------------------------ + +sleep 10 + +# --------------create regular user start------------------------ + + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) -- bash -c \ +'echo "db.createUser({user:mongo_user,pwd:mongo_password,roles:[{role:\"readWrite\",db:mongo_initdb}, {role:\"readWrite\",db:mongo_seconddb}, {role:\"readWrite\", db:\"cronjobs\"}, {role:\"readWrite\",db:\"smartpages\"}]});" > mongo_create_user.js;' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'echo mongo --host mongos-admin-service.sp.svc.cluster.local --port 27017 $MONGO_INITDB --sslAllowInvalidCertificates --ssl --sslPEMKeyFile /etc/certs/mongo.key --sslCAFile /etc/certs/mongo.pem -u $MONGO_INITDB_ROOT_USERNAME -p $ENTRYPASSWORD --authenticationDatabase admin --eval \"var mongo_user="'"'MONGO_USER'"'", mongo_password="'"'MONGO_PASSWORD'"'", mongo_initdb="'"'MONGO_INITDB'"'", mongo_seconddb="'"'MONGO_SECONDDB'"'"\" mongo_create_user.js > mongo_create_user_bak.sh' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'cat mongo_create_user_bak.sh | sed s/MONGO_USER/$MONGO_USER/g | sed s/MONGO_PASSWORD/$MONGO_PASSWORD/g | sed s/MONGO_INITDB/$MONGO_INITDB/g | sed s/MONGO_SECONDDB/$MONGO_SECONDDB/g > mongo_create_user.sh' + +kubectl exec --namespace=${KUBE_NAME_SPACE} $(kubectl get pod -l "tier=routers-admin" -o jsonpath='{.items[0].metadata.name}' --namespace=${KUBE_NAME_SPACE} ) \ +-- bash -c 'sh mongo_create_user.sh && rm mongo_create_user.js mongo_create_user.sh mongo_create_user_bak.sh' + +# --------------create regular user end------------------------ + +# echo "expose mongos router" +# kubectl expose deployment mongos-router --type=ClusterIP --name=mongos-service + +# --------------------mongodb shard javascript function-------------------- +# sh.enableSharding("test"); +# sh.shardCollection("test.testcoll", {"myfield": 1}); +# use test; +# db.testcoll.insert({"myfield": "a", "otherfield": "b"}); +# db.testcoll.find(); +# sh.status(); + + +echo "==================Done============================" \ No newline at end of file diff --git a/BACA/configuration-ha/mongoadmin/pre-setup.sh b/BACA/configuration-ha/mongoadmin/pre-setup.sh new file mode 100644 index 00000000..c640eb57 --- /dev/null +++ b/BACA/configuration-ha/mongoadmin/pre-setup.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +. ../../common.sh + +NUMOFSHARDS=2 +# NFS_IP=172.16.243.23 +#KUBE_NAME_SPACE=sp +# ENTRYPASSWORD='bacauser' +LOG_LEVEL=info +ROUTER_REPLICA=3 +SHARD_REPLICA=3 +CONFIG_REPLICA=3 +# this value has been defined in single-deployment +SSH_USER="root" + +# ./ssl_generator.sh + +current_templates_path=$(pwd)/templates +mkdir $current_templates_path + +cp templates_base/local-storage-base.yaml templates/local-storage-base.yaml +cp templates_base/mongo-service-base.yaml templates/mongo-service-base.yaml +cp values-base.yaml values.yaml + +echo LOG_LEVEL=$LOG_LEVEL +sed -i.bak s#\$LOG_LEVEL#$LOG_LEVEL# values.yaml +echo "Replacing '' with $KUBE_NAME_SPACE" +sed -i.bak s#\$KUBE_NAME_SPACE#$KUBE_NAME_SPACE# values.yaml +echo "Replacing '' with $NFS_IP" +# sed -i.bak s#\$NFS_IP#$NFS_IP# values.yaml +sed -i.bak s#\$ROUTER_REPLICA#$ROUTER_REPLICA# values.yaml +sed -i.bak s#\$SHARD_REPLICA#$SHARD_REPLICA# values.yaml +sed -i.bak s#\$CONFIG_REPLICA#$CONFIG_REPLICA# values.yaml +sed -i.bak s#\$LOGPVC#$LOGPVC# values.yaml + +if [ "$SSH_USER" = "root" ]; then + export SUDO_CMD="" +else + export SUDO_CMD="sudo" +fi + +echo "Creating necessary folder in $NFS_IP..." +for i in `seq 0 $((CONFIG_REPLICA-1))` +do + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/configdb-admin-${i}" +done + +for i in `seq 0 $((NUMOFSHARDS-1))` +do + for j in `seq 0 $((SHARD_REPLICA-1))` + do + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/mongodb-admin-shard${i}-${j}" + done +done + +ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD chown -R 51000:51001 /exports/smartpages/$KUBE_NAME_SPACE/*" + +echo "-----------------Creating pv and pvc by sp-persistence for shard-------------" +for i in `seq 0 $((NUMOFSHARDS-1))` +do + for j in `seq 0 $((SHARD_REPLICA-1))` + do + sed -e "s/\$KUBE_NAME_SPACE/$KUBE_NAME_SPACE/g; s/\$SHARDX/${i}/g; s/\$COUNTER/${j}/g; s#\$NFS_IP#${NFS_IP}#g" \ + ./templates_base/shard-persistence-base.yaml> ./templates/persistence-shard${i}-${j}.yaml + done +done + +echo "-------------Creating pv and pvc by sp-persistence for mongodb config-----------------" +for i in `seq 0 $((CONFIG_REPLICA-1))` +do + sed -e "s/\$KUBE_NAME_SPACE/$KUBE_NAME_SPACE/g; s/\$COUNTER/${i}/g; s#\$NFS_IP#${NFS_IP}#g" ./templates_base/configdb-persistence-base.yaml> \ + ./templates/configdb-persistence-${i}.yaml +done + +echo "------------cp mongodb configsvr--------------------" +sed -e "s/\$KUBE_NAME_SPACE/$KUBE_NAME_SPACE/g; s/\$PORT_NUMBER/$PORT_NUMBER/g" ./templates_base/configdb-service-base.yaml> ./templates/configdb-service.yaml + +echo "------------Deploying mongodb shardX------------" + +for i in `seq 0 $((NUMOFSHARDS-1))` +do + sed -e "s/\$SHARDX/${i}/g" ./templates_base/shardX-stateful.yaml> ./templates/shard${i}-stateful.yaml +done + +echo "------------cp mongodb router(mongos)------------" +# !!!Replicas if your mongodb-admin-configdb has more than x>=3 replicas, please add mongodb-admin-configdb-{x-1}.mongodb-admin-configdb-service.${KUBE_NAME_SPACE}.svc.cluster.local:27019 in the end +CONFIG_REPLSET_VALUE="configReplSetAdmin/mongodb-admin-configdb-0.mongodb-admin-configdb-service.${KUBE_NAME_SPACE}.svc.cluster.local:27019,mongodb-admin-configdb-1.mongodb-admin-configdb-service.${KUBE_NAME_SPACE}.svc.cluster.local:27019,mongodb-admin-configdb-2.mongodb-admin-configdb-service.${KUBE_NAME_SPACE}.svc.cluster.local:27019" +sed -i.bak s#\$CONFIG_REPLSET_VALUE#$CONFIG_REPLSET_VALUE# values.yaml +cp ./templates_base/mongos-router-base.yaml ./templates/mongos-router.yaml diff --git a/BACA/configuration-ha/openssl.cnf b/BACA/configuration-ha/openssl.cnf new file mode 100644 index 00000000..7d3892c9 --- /dev/null +++ b/BACA/configuration-ha/openssl.cnf @@ -0,0 +1,38 @@ +[req] +default_bits = 2048 +utf8 = yes +distinguished_name = req_distinguished_name +req_extensions = v3_req + +[req_distinguished_name] +countryName = Country Name (2 letter code) +countryName_default = CA +countryName_min = 2 +countryName_max = 2 +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = NS +stateOrProvinceName_max = 64 +localityName = Locality Name (eg, city) +localityName_default = Halifax +localityName_max = 64 +organizationName = Organization Name (eg, company) +organizationName_default = IBM +organizationName_max = 64 +organizationalUnitName = Organizational Unit Name (eg, section) +organizationalUnitName_default = baca +organizationalUnitName_max = 64 +commonName = *.svc.cluster.local +commonName_max = 64 + +[v3_req] +basicConstraints = CA:FALSE +subjectKeyIdentifier = hash +keyUsage = digitalSignature, keyEncipherment +extendedKeyUsage = clientAuth, serverAuth +subjectAltName = @alt_names + +[alt_names] +DNS.1 = localhost +IP.1 = 127.0.0.1 + + diff --git a/BACA/configuration-ha/renewCert.sh b/BACA/configuration-ha/renewCert.sh new file mode 100644 index 00000000..dbaf4e47 --- /dev/null +++ b/BACA/configuration-ha/renewCert.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +. ./common.sh +. ./bashfunctions.sh +. ./createSSLCert.sh + + +today=`date +%Y-%m-%d.%H:%M:%S` +echo $today + + +# confirm they want to delete +echo +echo -e "\x1B[1;31mThis script will RENEW all the certificates for IBM Business Automation Content Analyzer in $KUBE_NAME_SPACE \x1B[0m" +echo +echo -e "\x1B[1;31mThe script will delete ALL the IBM Business Automation Content Analyzer pods in $KUBE_NAME_SPACE. Therefore, you must make sure to backup your ontology,etc... and make sure there are no activities on the system \x1B[0m" +echo +ls -al *.pem > /dev/null +if [[ $? == "0" ]]; then + echo -e "\x1B[1;31mBased on the PEM files in the $PWD, the expirations date for them are: \x1B[0m" + + for pem in ./*.pem; do + printf '%s: %s\n' \ + "$pem expries on" \ + "$(date --date="$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" --iso-8601)" + done +else + echo -e "\x1B[1;31mWe could not find any existing PMR files in $PWD \x1B[0m" +fi + +while [[ $renewConfirm != "y" && $renewConfirm != "n" && $renewConfirm != "yes" && $renewConfirm != "no" ]] # While deleteconfirm is not y or n... +do + echo -e "\x1B[1;31mWould you like to continue (Y/N):\x1B[0m" + read renewConfirm + renewConfirm=$(echo "$renewConfirm" | tr '[:upper:]' '[:lower:]') +done + + +if [[ $renewConfirm == "n" || $renewConfirm == "no" ]] +then + exit +else + loginToCluster + createSSLCert + createSecret + echo -e "\x1B[1;31m Deleting all Content Analyzer's pods ... " + kubectl -n sp delete --all pods --force --grace-period=0 +fi \ No newline at end of file diff --git a/BACA/configuration-ha/sppersistent.yaml b/BACA/configuration-ha/sppersistent.yaml new file mode 100644 index 00000000..46d220dd --- /dev/null +++ b/BACA/configuration-ha/sppersistent.yaml @@ -0,0 +1,159 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-data-pv-$KUBE_NAME_SPACE + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 60Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/data + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: $DATAPVC + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 60Gi + volumeName: sp-data-pv-$KUBE_NAME_SPACE +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-log-pv-$KUBE_NAME_SPACE + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 35Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/logs + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: $LOGPVC + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 35Gi + volumeName: sp-log-pv-$KUBE_NAME_SPACE +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-config-pv-$KUBE_NAME_SPACE + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 5Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/config + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: $CONFIGPVC + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 5Gi + volumeName: sp-config-pv-$KUBE_NAME_SPACE +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-minio-pv-$KUBE_NAME_SPACE-0 + namespace: $KUBE_NAME_SPACE + labels: + app: minio + release: celery$KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/data/minio/vol0 + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain + storageClassName: minio-sc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-minio-pv-$KUBE_NAME_SPACE-1 + namespace: $KUBE_NAME_SPACE + labels: + app: minio + release: celery$KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/data/minio/vol1 + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain + storageClassName: minio-sc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-minio-pv-$KUBE_NAME_SPACE-2 + namespace: $KUBE_NAME_SPACE + labels: + app: minio + release: celery$KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/data/minio/vol2 + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain + storageClassName: minio-sc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-minio-pv-$KUBE_NAME_SPACE-3 + namespace: $KUBE_NAME_SPACE + labels: + app: minio + release: celery$KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/data/minio/vol3 + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain + storageClassName: minio-sc \ No newline at end of file diff --git a/BACA/configuration/DB2/AddOntology.sh b/BACA/configuration/DB2/AddOntology.sh new file mode 100644 index 00000000..29f68640 --- /dev/null +++ b/BACA/configuration/DB2/AddOntology.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +echo +echo "-- This script will create a new ontology for an existing tenant and load it with default data." +echo + +./AddTenant.sh 1 \ No newline at end of file diff --git a/BACA/configuration/DB2/AddTenant.sh b/BACA/configuration/DB2/AddTenant.sh new file mode 100755 index 00000000..b08d731b --- /dev/null +++ b/BACA/configuration/DB2/AddTenant.sh @@ -0,0 +1,349 @@ +#!/bin/bash +. ./ScriptFunctions.sh + +INPUT_PROPS_FILENAME="./common_for_DB2.sh" + +if [ -f $INPUT_PROPS_FILENAME ]; then + echo "Found a $INPUT_PROPS_FILENAME. Reading in variables from that script." + . $INPUT_PROPS_FILENAME +fi + +NUMARGS=$# + +# if an argument of '1' is passed, it is assumed that a tenant already exists, +# and the script will add a new ontology to an existing tenant +if [[ "$NUMARGS" -gt 0 ]]; then + use_existing_tenant=$1 +fi + + +if [[ -z "$use_existing_tenant" || $use_existing_tenant -ne 1 ]]; then + echo -e "\n-- This script will create a BACA database and an ontology for a new tenant and load it with default data" + echo +fi + +if [[ -z "$use_existing_tenant" || $use_existing_tenant -ne 1 ]]; then + echo "Enter the tenant ID for the new tenant: (eg. t4900)" +else + echo "Enter the tenant ID for the existing tenant: (eg. t4900)" +fi +while [[ -z "$tenant_id" || $tenant_id == '' ]] +do + echo "Please enter a valid value for the tenant ID:" + read tenant_id +done + +echo +if [[ -z "$use_existing_tenant" || $use_existing_tenant -ne 1 ]]; then + echo "Enter the name of the new BACA tenant database to create: (eg. t4900)" +else + echo "Enter the name of the existing BACA tenant database: (eg. t4900)" +fi +while [[ $tenant_db_name == '' ]] +do + echo "Please enter a valid value for the tenant database name of max length 8 :" + read tenant_db_name + while [ ${#tenant_db_name} -gt 8 ]; + do + echo "Please enter a valid value for the tenant database name of max length 8 :" + read tenant_db_name; + echo ${#tenant_db_name}; + done +done + +default_dbserver='thrown1.fyre.ibm.com' +if [[ -z "$baca_database_server_ip" ]]; then + echo -e "\nEnter the host/IP of the database server. If no value is entered we will use the following default value: " $default_dbserver + read baca_database_server_ip + if [[ -z "$baca_database_server_ip" ]]; then + baca_database_server_ip=$default_dbserver + fi +fi + +default_dbport=50000 +if [[ -z "$baca_database_port" ]]; then + echo -e "\nEnter the port of the database server. If nothing is entered we will use the following default value: " $default_dbport + read baca_database_port + if [[ -z "$baca_database_port" ]]; then + baca_database_port=$default_dbport + fi +fi + +if [[ $use_existing_tenant -eq 1 ]]; then + user_already_defined=1 +fi + +echo +echo "We need a non-admin database user that BACA will use to access your BACA tenant database." +while [[ -z "$tenant_db_user" || $tenant_db_user == "" ]] +do + echo + if [[ -z "$user_already_defined" || $user_already_defined -ne 1 ]]; then + while [[ "$create_new_user" != "y" && "$create_new_user" != "Y" && "$create_new_user" != "n" && "$create_new_user" != "N" ]] + do + echo "Do you want this script to create a database user for you (This will create local OS user)? (Please enter y or n)" + read create_new_user + done + + if [[ "$create_new_user" == "n" && "$create_new_user" == "N" ]]; then + user_already_defined=1 + fi + fi + + while [[ -z "$tenant_db_user" || $tenant_db_user == "" ]] + do + if [[ "$create_new_user" == "y" || "$create_new_user" = "Y" ]]; then + echo "Please enter the name of database user to create: " + else + echo "Please enter the name of an existing database user" + fi + read tenant_db_user + done + + if [[ -z "$user_already_defined" || $user_already_defined -ne 1 ]]; then + getent passwd $tenant_db_user > /dev/null + if [[ $? -eq 0 ]]; then + while [[ "$use_existing_user" != "y" && "$use_existing_user" != "Y" && "$use_existing_user" != "n" && "$use_existing_user" != "N" ]] + do + echo "$tenant_db_user already exists. Do you want to use this user (Please enter y or n)" + read use_existing_user + if [ "$use_existing_user" = "y" ] || [ "$use_existing_user" = "Y" ]; then + user_already_defined=1 + else + unset tenant_db_user + unset user_already_defined + unset create_new_user + fi + done + fi + fi +done + + +while [[ $pwdconfirmed -ne 1 ]] # While pwd is not yet received and confirmed (i.e. entered teh same time twice) +do + while [[ $tenant_db_pwd == '' ]] # While pwd is empty... + do + echo "Enter the password for the user: " + read -s tenant_db_pwd + done + + while [[ $tenant_db_pwd2 == '' ]] # While pwd is empty... + do + echo "Please confirm the password by entering it again:" + read -s tenant_db_pwd2 + done + + if [[ "$tenant_db_pwd" == "$tenant_db_pwd2" ]]; then + pwdconfirmed=1 + else + echo "The passwords do not match. Please enter the password again." + unset tenant_db_pwd + unset tenant_db_pwd2 + fi +done + +if [[ $tenant_db_pwd_b64_encoded -eq 1 ]]; then + tenant_db_pwd=$(echo $tenant_db_pwd | base64 --decode) +fi + +default_ontology='default' +if [[ -z "$tenant_ontology" ]]; then + echo -e "\nEnter the tenant ontology name. If nothing is entered, the default name will be used: " $default_ontology + read tenant_ontology + if [[ -z "$tenant_ontology" ]]; then + tenant_ontology=$default_ontology + fi +fi + +default_basedb='CABASEDB' +if [[ -z "$base_db_name" ]]; then + echo -e "\nEnter the name of the Base BACA database with the TENANTINFO Table. If nothing is entered, we will use the following default value : " $default_basedb + read base_db_name + if [[ -z "$base_db_name" ]]; then + base_db_name=$default_basedb + fi +fi + +default_basedb_user='CABASEUSER' +if [[ -z "$base_db_user" ]]; then + echo -e "\nEnter the name of the database user for the Base BACA database. If nothing is entered, we will use the following default value : " $default_basedb_user + read base_db_user + if [[ -z "$base_db_user" ]]; then + base_db_user=$default_basedb_user + fi +fi + +# FOR NOW, there is no need to collect credentials for Base DB, as we are currently assuming that we are running script as DB2 admin (eg. db2inst1) on the DB2 server. +# If we decide to run from a remote machine, then UNCOMMENT the following to collect the DB2 admin credentials + +# pwdconfirmed=0 +# while [[ $pwdconfirmed -ne 1 ]] # While pwd is not yet received and confirmed (i.e. entered teh same time twice) +# do +# echo "Enter the password for the BACA base database user: " +# read -s base_tenant_db_pwd +# while [[ $base_tenant_db_pwd == '' ]] # While pwd is empty... +# do +# echo "Enter a valid value" +# read -r base_tenant_db_pwd +# done + +# echo "Please confirm the password by entering it again:" +# read -s base_tenant_db_pwd2 +# while [[ $base_tenant_db_pwd2 == '' ]] # While pwd is empty... +# do +# echo "Enter a valid value" +# read -r base_tenant_db_pwd2 +# done + +# if [[ "$base_tenant_db_pwd" == "$base_tenant_db_pwd2" ]]; then +# pwdconfirmed=1 +# else +# echo "The passwords do not match. Please enter the password again." +# unset base_tenant_db_pwd +# unset base_tenant_db_pwd2 +# fi +# done + +echo +echo "Now we will gather information about the initial BACA user that will be defined:" + +while [[ $tenant_company == '' ]] +do + echo -e "\nPlease enter the company name for the initial BACA user:" + read tenant_company +done + + +while [[ $tenant_first_name == '' ]] +do + echo -e "\nPlease enter the first name for the initial BACA user:" + read tenant_first_name +done + + +while [[ $tenant_last_name == '' ]] +do + echo -e "\nPlease enter the last name for the initial BACA user:" + read tenant_last_name +done + + +while [[ $tenant_email == '' || ! $tenant_email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$ ]] +do + echo -e "\nPlease enter a valid email address for the initial BACA user:" + read tenant_email +done + + +while [[ $tenant_user_name == '' ]] +do + echo -e "\nPlease enter the login name for the initial BACA user:" + read tenant_user_name +done + + +echo +if [[ $use_existing_tenant -ne 1 ]]; then + echo "-- Information gathering is completed. Add tenant is about to begin." +else + echo "-- Information gathering is completed. Add ontology is about to begin." +fi +echo "-- Please confirm these are the desired settings:" +echo " - tenant ID: $tenant_id" +echo " - tenant database name: $tenant_db_name" +echo " - database server hostname/IP: $baca_database_server_ip" +echo " - database server port: $baca_database_port" +if [[ $user_already_defined -ne 1 ]]; then + echo " - tenant database user will be created by this script" +else + echo " - tenant database user already exists and will not be created by this script" +fi +echo " - tenant database user: $tenant_db_user" +echo " - ontology name: $tenant_ontology" +echo " - base database: $base_db_name" +echo " - base database user: $base_db_user" +echo " - tenant company name: $tenant_company" +echo " - tenant first name: $tenant_first_name" +echo " - tenant last name: $tenant_last_name" +echo " - tenant email address: $tenant_email" +echo " - tenant login name: $tenant_user_name" +askForConfirmation + + +if [[ $user_already_defined -ne 1 ]]; then + encrypted_pwd=$(perl -e 'print crypt($ARGV[0], "pwsalt")' $tenant_db_pwd) + sudo useradd -m -p $encrypted_pwd $tenant_db_user + if [[ $? -eq 0 ]]; then + echo "User $tenant_db_user has been added to system!" + else + echo "ERROR: Failed to add a user $tenant_db_user! Please try again..." + exit 1 + fi + echo "setting password to not expire" + sudo chage -E -1 -M -1 $tenant_db_user +fi + +# Only create DB for new tenants +if [[ $use_existing_tenant -ne 1 ]]; then + cp sql/CreateDB.sql.template sql/CreateDB.sql + sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/CreateDB.sql + sed -i s/\$tenant_db_user/"$tenant_db_user"/ sql/CreateDB.sql + + echo -e "\nRunning script: sql/CreateDB.sql" + db2 -stvf sql/CreateDB.sql +fi + +cp sql/CreateBacaSchema.sql.template sql/CreateBacaSchema.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/CreateBacaSchema.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/CreateBacaSchema.sql +echo -e "\nRunning script: sql/CreateBacaSchema.sql" +db2 -stvf sql/CreateBacaSchema.sql + +echo -e "\nRunning script: sql/CreateBacaTables.sql" +db2 -tf sql/CreateBacaTables.sql +echo "CONNECT RESET" +db2 "CONNECT RESET" + +cp sql/TablePermissions.sql.template sql/TablePermissions.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/TablePermissions.sql +sed -i s/\$tenant_db_user/"$tenant_db_user"/ sql/TablePermissions.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/TablePermissions.sql +echo -e "\nRunning script: sql/TablePermissions.sql" +db2 -stvf sql/TablePermissions.sql + +cp sql/LoadData.sql.template sql/LoadData.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/LoadData.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/LoadData.sql +echo -e "\nRunning script: sql/LoadData.sql" +db2 -stvf sql/LoadData.sql + +cp sql/InsertTenant.sql.template sql/InsertTenant.sql +sed -i s/\$base_db_name/"$base_db_name"/ sql/InsertTenant.sql +sed -i s/\$base_db_user/"$base_db_user"/ sql/InsertTenant.sql +sed -i s/\$tenant_id/"$tenant_id"/ sql/InsertTenant.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/InsertTenant.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/InsertTenant.sql +sed -i s/\$baca_database_server_ip/"$baca_database_server_ip"/ sql/InsertTenant.sql +sed -i s/\$baca_database_port/"$baca_database_port"/ sql/InsertTenant.sql +sed -i s/\$tenant_db_user/"$tenant_db_user"/ sql/InsertTenant.sql +sed -i s/\$tenant_db_pwd/"$tenant_db_pwd"/ sql/InsertTenant.sql +echo -e "\nRunning script: sql/InsertTenant.sql" +db2 -stvf sql/InsertTenant.sql + + +cp sql/InsertUser.sql.template sql/InsertUser.sql +sed -i s/\$tenant_ontology/"$tenant_ontology"/ sql/InsertUser.sql +sed -i s/\$tenant_db_name/"$tenant_db_name"/ sql/InsertUser.sql +sed -i s/\$tenant_email/"$tenant_email"/ sql/InsertUser.sql +sed -i s/\$tenant_first_name/"$tenant_first_name"/ sql/InsertUser.sql +sed -i s/\$tenant_last_name/"$tenant_last_name"/ sql/InsertUser.sql +sed -i s/\$tenant_user_name/"$tenant_user_name"/ sql/InsertUser.sql +sed -i s/\$tenant_company/"$tenant_company"/ sql/InsertUser.sql +sed -i s/\$tenant_email/"$tenant_email"/ sql/InsertUser.sql +echo -e "\nRunning script: sql/InsertUser.sql" +db2 -stvf sql/InsertUser.sql + +echo -e "\n-- Add completed succesfully. Tenant ID: $tenant_id , Ontology: $tenant_ontology \n" + +echo "-- URL (replace frontend with your frontend host): https://frontend/?tid=$tenant_id&ont=$tenant_ontology" \ No newline at end of file diff --git a/BACA/configuration/DB2/CSVFiles/cword.csv b/BACA/configuration/DB2/CSVFiles/cword.csv new file mode 100644 index 00000000..f7240470 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/cword.csv @@ -0,0 +1,75 @@ +12,inspection +13,vin +14,repair +15,estimates +16,policy +17,qty +18,excluding +19,bank +20,cost +21,credit +22,taxable +23,task +24,shipped +25,ship +26,salesperson +27,handling +28,gst +29,client +30,order +31,receipt +32,draft +33,payment +34,fees +35,offer +36,claim +37,report +38,invoice +39,total +40,settlement +41,services +42,amount +43,brand +44,terms +45,tax +46,purchase +47,due +48,acct +49,account +50,campaign +51,letter +52,invitation +53,attn +54,sincerely +55,insurance +56,patient +57,disability +58,health +59,adjuster +60,division +61,investigating +62,attorney +63,power +64,principal +65,designation +66,authority +67,agreement +68,contract +69,pricing +70,provider +71,schedule +72,branch +73,solution +74,authorized +75,sales +1,statement +2,balance +3,capital +4,shipment +5,flag +6,lading +7,master +8,shipper +9,consignee +10,voyage +11,loading diff --git a/BACA/configuration/DB2/CSVFiles/cword_dc.csv b/BACA/configuration/DB2/CSVFiles/cword_dc.csv new file mode 100644 index 00000000..ce162f91 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/cword_dc.csv @@ -0,0 +1,75 @@ +3,12,0 +3,13,0 +3,14,0 +3,15,0 +3,16,0 +4,17,0 +4,18,0 +4,19,0 +4,20,0 +4,21,0 +4,22,0 +4,23,0 +4,24,0 +4,25,0 +4,26,0 +4,27,0 +4,28,0 +4,29,0 +4,30,0 +4,31,0 +4,32,0 +4,33,0 +4,34,0 +4,35,0 +4,36,0 +4,37,0 +4,38,0 +4,39,0 +4,40,0 +4,41,0 +4,42,0 +4,43,0 +4,44,0 +4,45,0 +4,46,0 +4,47,0 +4,48,0 +4,49,0 +4,50,0 +5,51,0 +5,52,0 +5,53,0 +5,54,0 +6,55,0 +6,56,0 +6,57,0 +6,58,0 +7,59,0 +7,60,0 +7,61,0 +8,62,0 +8,63,0 +8,64,0 +8,65,0 +8,66,0 +9,67,0 +9,68,0 +9,69,0 +9,70,0 +9,71,0 +9,72,0 +9,73,0 +9,74,0 +9,75,0 +1,1,0 +1,2,0 +1,3,0 +2,4,0 +2,5,0 +2,6,0 +2,7,0 +2,8,0 +2,9,0 +2,10,0 +2,11,0 diff --git a/BACA/configuration/DB2/CSVFiles/doc_alias.csv b/BACA/configuration/DB2/CSVFiles/doc_alias.csv new file mode 100644 index 00000000..54990440 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/doc_alias.csv @@ -0,0 +1,10 @@ +1,Capital Balance statement,en +2,valuation report,en +3,Balance statement,en +4,bill of lading,en +5,Tax Invoice,en +6,Invoice,en +7,Letter of Invitation,en +8,Letter of Employment,en +9,Police Report,en +10,Power of Attorney,en diff --git a/BACA/configuration/DB2/CSVFiles/doc_alias_dc.csv b/BACA/configuration/DB2/CSVFiles/doc_alias_dc.csv new file mode 100644 index 00000000..2cc9d633 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/doc_alias_dc.csv @@ -0,0 +1,10 @@ +1,1,0 +2,1,0 +3,1,0 +4,2,0 +5,4,0 +6,4,0 +7,5,0 +8,5,0 +9,7,0 +10,8,0 diff --git a/BACA/configuration/DB2/CSVFiles/doc_class.csv b/BACA/configuration/DB2/CSVFiles/doc_class.csv new file mode 100644 index 00000000..0d53dbd4 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/doc_class.csv @@ -0,0 +1,9 @@ +1,Balance Statement,This is a Sample +2,Bill of Lading,This is a Sample +3,Estimates,This is a Sample +4,Invoice,This is a Sample +5,Letter,This is a Sample +6,Medical Record,This is a Sample +7,Police Report,This is a Sample +8,Power of Attorney,This is a Sample +9,Pricing Schedule,This is a Sample diff --git a/BACA/configuration/DB2/CSVFiles/heading.csv b/BACA/configuration/DB2/CSVFiles/heading.csv new file mode 100644 index 00000000..77896d2f --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/heading.csv @@ -0,0 +1,2 @@ +1,Principal, +2,designation, diff --git a/BACA/configuration/DB2/CSVFiles/heading_alias.csv b/BACA/configuration/DB2/CSVFiles/heading_alias.csv new file mode 100644 index 00000000..c6d1389d --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/heading_alias.csv @@ -0,0 +1,2 @@ +1,caution to the principal +2,designation of agent diff --git a/BACA/configuration/DB2/CSVFiles/heading_alias_dc.csv b/BACA/configuration/DB2/CSVFiles/heading_alias_dc.csv new file mode 100644 index 00000000..2e787c85 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/heading_alias_dc.csv @@ -0,0 +1,2 @@ +1,8 +2,8 diff --git a/BACA/configuration/DB2/CSVFiles/heading_alias_h.csv b/BACA/configuration/DB2/CSVFiles/heading_alias_h.csv new file mode 100644 index 00000000..3bf58f25 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/heading_alias_h.csv @@ -0,0 +1,2 @@ +1,1 +2,2 diff --git a/BACA/configuration/DB2/CSVFiles/heading_dc.csv b/BACA/configuration/DB2/CSVFiles/heading_dc.csv new file mode 100644 index 00000000..2e787c85 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/heading_dc.csv @@ -0,0 +1,2 @@ +1,8 +2,8 diff --git a/BACA/configuration/DB2/CSVFiles/key_alias.csv b/BACA/configuration/DB2/CSVFiles/key_alias.csv new file mode 100644 index 00000000..7981e570 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/key_alias.csv @@ -0,0 +1,238 @@ +20,Adjuster,en +21,Written By,en +22,Claim #,en +23,Grand Total,en +24,Vehicle Out,en +25,Type of Loss,en +26,Insured,en +27,Policy #,en +28,Fax,en +29,Workfile ID,en +30,Phone,en +31,Days to Repair,en +32,CUSTOMER PAY,en +33,Subtotal,en +34,INSURANCE PAY,en +35,Condition,en +36,Job #,en +37,Production Date,en +38,State,en +39,Federal ID,en +40,Mileage Out,en +41,RO Number,en +42,Deductible,en +43,License,en +44,VIN,en +45,Point of Impact,en +46,Date of Loss:,en +47,Date Of Loss,en +48,Inspection Location:,en +49,Owner:,en +50,Mileage In,en +51,Exterior Color,en +52,Interior Color,en +53,Page #:,en +54,Job Description,en +55,SB Cess on Taxable Value [B],en +56,SB Cess levied by Vendor [A],en +57,Service Tax on Taxable Value [B],en +58,Inv No#,en +59,Inv Ni #:,en +60,Inv No #:,en +61,TAX INVOICE NUMBER,en +62,Invoice Number,en +63,Invoice #,en +64,Invoice Number:,en +65,Total Cost,en +66,Total Invoice Value (Rs.),en +67,INVOICE TOTAL INCLUDING GST,en +68,Total,en +69,TOTAL INC GST:,en +70,Office,en +71,Address,en +72,Work Site,en +73,Brand,en +74,Website,en +75,ATTORNEY,en +76,Email,en +77,Matter Number,en +78,Matter Number:,en +79,Regd. Office,en +80,Terms,en +81,Payment Terms,en +82,Est No,en +83,Est Ni:,en +84,Est Date,en +85,Est Date:,en +86,Campaign Name,en +87,Service Tax levied by Vendor [A],en +88,Agency Commission,en +89,Beneficiary Name,en +90,Sub Brand,en +91,PAN NO:,en +92,Credit,en +93,CIN No:,en +94,Swift Code,en +95,To:,en +96,Customer Name,en +97,Client,en +98,Tel,en +99,Telephone,en +100,BANK Name:,en +101,Bank,en +102,Price,en +103,Qty,en +104,Description,en +105,GL Code / Item,en +106,Sold To,en +107,ABN,en +108,Regarding,en +109,RE:,en +110,Requesting Manager,en +111,Inv Date,en +112,INVOICE DATE,en +113,Date,en +114,DUE DATE,en +115,Account No:,en +116,Acct No,en +117,Account,en +118,BSB,en +119,Acct Name,en +120,Account Name,en +121,Sub Total (Rs.),en +122,INVOICE TOTAL EXCLUDING GST,en +123,SUBTOTAL:,en +124,sales tax,en +125,GST,en +126,P.O. Number,en +127,PO Number,en +128,Purchase Nbr,en +129,Order #,en +130,Order Number,en +131,Ship To:,en +132,Branch Office:,en +133,IFSC Code,en +134,Centralised Billing and Accounting Office:,en +135,Service Tax Category:,en +136,Service Tax Regn No:,en +137,Branch,en +138,Branch:,en +139,Attn,en +140,Date of Birth,en +141,Start Date,en +142,Title,en +143,Place of Birth,en +144,Status,en +145,Employee,en +146,Full Name,en +147,Subject,en +148,Annual Salary,en +149,Citizenship,en +150,Expire Date,en +151,Passport no.,en +152,Gender,en +153,Issue Date,en +154,Smoking Status:,en +155,Service Dept,en +156,PCP,en +157,Progress Notes,en +158,Appointment Facility,en +159,Referring,en +160,med primary,en +161,prescription,en +162,primary care provider,en +163,Ph,en +164,Horne:,en +165,Horme:,en +166,NPI,en +167,Follow Up,en +168,llãollow Up,en +169,Division,en +170,Claim,en +171,Name,en +172,Diabetes,en +173,Appt. Date/Time,en +174,DOB,en +175,Marital status,en +176,Alcohol intake,en +177,Hypertension,en +178,Occupation,en +179,Kidney Stones,en +180,CELEBREX:,en +181,CEI.EBRi=X:,en +182,CËLEBREX:,en +183,Employer,en +184,Vitals,en +185,ROS,en +186,Qty:,en +187,Refills:,en +188,BMI,en +189,Wt,en +190,Encounter Date,en +191,Provider,en +192,Insurance,en +193,Client Name,en +194,Investigating Agency,en +195,County,en +196,PARTY 1:,en +197,Transaction #,en +198,TIME OF LOSS:,en +199,Claim No,en +200,Driver License,en +201,Street,en +202,DIVISION:,en +203,Division Code,en +204,ADJUSTER:,en +205,Report Number,en +206,Report Type,en +207,Tag,en +208,City,en +209,Start Date of Minimum payment period per service component,en +210,Zip Code,en +211,Zi. Code:,en +212,Service Components,en +213,existing circuit ids,en +214,State/Province,en +215,Country,en +216,MA Reference No.,en +217,PS/CSA Reference No.,en +218,AT&T PS Reference No.:,en +219,AT&T PA Reference No.:,en +220,pre-existing Contract no (must be included),en +221,account number,en +222,Calculation of early termination charges*,en +223,Customer,en +224,Sales Region,en +225,Pricing Schedule Term,en +226,Sales Strata,en +227,Sales / Branch Manager,en +228,Branch Manager:,en +229,Existing Service,en +230,Street Address,en +231,per Service Component,en +232,Program Code,en +233,scvp name,en +234,Rates following the end of minimum payment,en +235,Branch Transit No.,en +236,Branch Transit No.:,en +237,Rate Stabilization per service component,en +238,Effective Date of this pricing schedule,en +1,Capital Balance,en +2,balance,en +3,capital,en +4,amount,en +5,Fund as of date,en +6,period end date,en +7,Issued Date,en +8,Issued At,en +9,Master,en +10,Shipper,en +11,BL NO:,en +12,Flag,en +13,Consignee,en +14,Consignee:,en +15,Voyage No,en +16,Notify Party,en +17,On board the Tanker,en +18,Loading Port,en +19,To be delivered to the port of,en diff --git a/BACA/configuration/DB2/CSVFiles/key_alias_dc.csv b/BACA/configuration/DB2/CSVFiles/key_alias_dc.csv new file mode 100644 index 00000000..5aa00e02 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/key_alias_dc.csv @@ -0,0 +1,255 @@ +20,3,0 +21,3,0 +22,3,0 +23,3,0 +24,3,0 +25,3,0 +26,3,0 +27,3,0 +28,3,0 +29,3,0 +30,3,0 +31,3,0 +32,3,0 +33,3,0 +34,3,0 +35,3,0 +36,3,0 +37,3,0 +38,3,0 +39,3,0 +40,3,0 +41,3,0 +42,3,0 +43,3,0 +44,3,0 +45,3,0 +46,3,0 +47,3,0 +48,3,0 +49,3,0 +50,3,0 +51,3,0 +52,3,0 +53,4,0 +54,4,0 +55,4,0 +56,4,0 +57,4,0 +58,4,0 +59,4,0 +60,4,0 +61,4,0 +62,4,0 +63,4,0 +64,4,0 +65,4,0 +66,4,0 +67,4,0 +68,4,0 +69,4,0 +70,4,0 +71,4,0 +72,4,0 +73,4,0 +74,4,0 +75,4,0 +76,4,0 +77,4,0 +78,4,0 +79,4,0 +80,4,0 +81,4,0 +82,4,0 +83,4,0 +84,4,0 +85,4,0 +86,4,0 +87,4,0 +88,4,0 +89,4,0 +90,4,0 +91,4,0 +92,4,0 +93,4,0 +94,4,0 +95,4,0 +96,4,0 +97,4,0 +98,4,0 +99,4,0 +100,4,0 +101,4,0 +102,4,0 +103,4,0 +104,4,0 +105,4,0 +106,4,0 +107,4,0 +108,4,0 +109,4,0 +110,4,0 +111,4,0 +112,4,0 +113,4,0 +114,4,0 +115,4,0 +116,4,0 +117,4,0 +118,4,0 +119,4,0 +120,4,0 +121,4,0 +122,4,0 +123,4,0 +124,4,0 +125,4,0 +126,4,0 +127,4,0 +128,4,0 +129,4,0 +130,4,0 +131,4,0 +132,4,0 +133,4,0 +134,4,0 +135,4,0 +136,4,0 +137,4,0 +138,4,0 +28,4,0 +30,4,0 +139,5,0 +140,5,0 +141,5,0 +142,5,0 +143,5,0 +144,5,0 +145,5,0 +146,5,0 +147,5,0 +148,5,0 +149,5,0 +150,5,0 +151,5,0 +152,5,0 +153,5,0 +154,6,0 +155,6,0 +156,6,0 +157,6,0 +158,6,0 +159,6,0 +160,6,0 +161,6,0 +162,6,0 +163,6,0 +164,6,0 +165,6,0 +166,6,0 +167,6,0 +168,6,0 +169,6,0 +170,6,0 +171,6,0 +172,6,0 +173,6,0 +174,6,0 +175,6,0 +176,6,0 +177,6,0 +178,6,0 +179,6,0 +180,6,0 +181,6,0 +182,6,0 +183,6,0 +184,6,0 +185,6,0 +186,6,0 +187,6,0 +188,6,0 +189,6,0 +190,6,0 +191,6,0 +192,6,0 +99,6,0 +28,6,0 +193,7,0 +194,7,0 +195,7,0 +196,7,0 +197,7,0 +198,7,0 +199,7,0 +200,7,0 +201,7,0 +202,7,0 +203,7,0 +204,7,0 +205,7,0 +206,7,0 +207,7,0 +208,7,0 +97,7,0 +113,7,0 +170,7,0 +38,7,0 +47,7,0 +209,9,0 +210,9,0 +211,9,0 +212,9,0 +213,9,0 +214,9,0 +215,9,0 +216,9,0 +217,9,0 +218,9,0 +219,9,0 +220,9,0 +221,9,0 +222,9,0 +223,9,0 +224,9,0 +225,9,0 +226,9,0 +227,9,0 +228,9,0 +229,9,0 +230,9,0 +231,9,0 +232,9,0 +233,9,0 +234,9,0 +235,9,0 +236,9,0 +237,9,0 +238,9,0 +113,9,0 +139,9,0 +208,9,0 +171,9,0 +142,9,0 +76,9,0 +28,9,0 +99,9,0 +1,1,0 +2,1,0 +3,1,0 +4,1,0 +5,1,0 +6,1,0 +7,2,0 +8,2,0 +9,2,0 +10,2,0 +11,2,0 +12,2,0 +13,2,0 +14,2,0 +15,2,0 +16,2,0 +17,2,0 +18,2,0 +19,2,0 diff --git a/BACA/configuration/DB2/CSVFiles/key_alias_kc.csv b/BACA/configuration/DB2/CSVFiles/key_alias_kc.csv new file mode 100644 index 00000000..2f375e78 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/key_alias_kc.csv @@ -0,0 +1,255 @@ +20,17 +21,18 +22,19 +23,20 +24,21 +25,22 +26,23 +27,24 +28,25 +29,26 +30,27 +31,28 +32,29 +33,30 +34,31 +35,32 +36,33 +37,34 +38,35 +39,36 +40,37 +41,38 +42,39 +43,40 +44,41 +45,42 +46,43 +47,43 +48,44 +49,45 +50,46 +51,47 +52,48 +53,49 +54,50 +55,51 +56,51 +57,51 +58,52 +59,52 +60,52 +61,52 +62,52 +63,52 +64,52 +65,54 +66,54 +67,54 +68,54 +69,54 +70,55 +71,55 +72,56 +73,58 +74,59 +75,60 +76,60 +77,61 +78,61 +79,62 +80,63 +81,63 +82,64 +83,64 +84,65 +85,65 +86,66 +87,67 +88,68 +89,69 +90,70 +91,71 +92,72 +93,73 +94,74 +95,75 +96,75 +97,75 +98,76 +99,76 +100,77 +101,77 +102,78 +103,79 +104,80 +105,81 +106,82 +107,83 +108,85 +109,85 +110,86 +111,87 +112,87 +113,87 +114,88 +115,89 +116,89 +117,89 +118,90 +119,91 +120,91 +121,92 +122,92 +123,92 +124,93 +125,93 +126,94 +127,94 +128,94 +129,94 +130,94 +131,95 +132,96 +133,97 +134,98 +135,99 +136,100 +137,101 +138,101 +28,53 +30,84 +139,102 +140,103 +141,104 +142,105 +143,106 +144,107 +145,108 +146,109 +147,110 +148,111 +149,112 +150,113 +151,114 +152,115 +153,116 +154,117 +155,118 +156,119 +157,120 +158,121 +159,122 +160,123 +161,124 +162,125 +163,126 +164,126 +165,126 +166,128 +167,129 +168,129 +169,129 +170,129 +171,130 +172,131 +173,132 +174,133 +175,134 +176,135 +177,136 +178,137 +179,138 +180,139 +181,139 +182,139 +183,140 +184,141 +185,142 +186,143 +187,144 +188,145 +189,146 +190,147 +191,148 +192,149 +99,126 +28,127 +193,150 +194,151 +195,152 +196,153 +197,154 +198,156 +199,157 +200,160 +201,161 +202,162 +203,162 +204,163 +205,164 +206,165 +207,166 +208,167 +97,150 +113,155 +170,157 +38,158 +47,159 +209,168 +210,169 +211,169 +212,170 +213,171 +214,173 +1,3 +2,3 +3,3 +4,3 +5,4 +6,4 +7,5 +8,6 +9,7 +10,8 +11,9 +12,10 +13,11 +14,11 +15,12 +16,13 +17,14 +18,15 +19,16 +215,175 +216,176 +217,176 +218,176 +219,176 +220,177 +221,178 +222,179 +223,180 +224,186 +225,189 +226,190 +227,191 +228,191 +229,193 +230,194 +231,195 +232,196 +233,197 +234,198 +235,199 +236,199 +237,200 +238,201 +113,172 +139,174 +208,185 +171,187 +142,188 +76,192 +28,193 +99,193 diff --git a/BACA/configuration/DB2/CSVFiles/key_class.csv b/BACA/configuration/DB2/CSVFiles/key_class.csv new file mode 100644 index 00000000..af8fdae7 --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/key_class.csv @@ -0,0 +1,201 @@ +47,ExteriorColor,char,0,0,Exterior Color +48,InteriorColor,char,0,0,Interior Color +49,Page Number,number,0,0, +50,JobDescription,char,0,0,Job Description +51,SBCess,number,0,0,Swachh Bharat Cess +52,InvoiceNumber,number,1,0,Invoice Number +53,Fax,number,0,0,FaxNo +54,Total,number,1,0,Grand Total +55,Address,char,0,0, +56,WorkSite,char,0,0,Work Site +57,SalesPerson,char,0,0, +58,Brand,char,0,0,Brand +59,Website,char,0,0,Website Address +60,EmailAddress,char,0,0,Email address +61,MatterNumber,char,0,0,Matter Number +62,RegdOffice,char,0,0,Regd Office +63,Terms,char,0,0,Payment Terms +64,EstNo,number,0,0,Est No +65,EstDate,number,0,0,Est Date +66,CampaignName,char,0,0,Campaign Name +67,ServiceTax,number,0,0,Service Tax +68,AgencyCommission,number,0,0,Agency Commission +69,BeneficiaryName,char,0,0,Beneficiary Name +70,Sub Brand,char,0,0, +71,PANNo,number,0,0,PAN NO +72,Credit,char,0,0,Credit +73,CINNo,number,0,0,CIN No +74,SwiftCode,number,0,1,Swift Code +75,CustName,char,0,1, +76,Telephone,number,0,0,Telephone +77,BankName,char,0,0,Bank Name +78,Price,number,0,0,Price +79,Qty,number,0,0,Quantity +80,Description,char,0,0,Description +81,GLCode,number,0,0,GL Code +82,SoldTo,char,0,0,Sold To +83,ABN,char,0,0,ABN number +84,Phone,number,0,0,Phone no +85,Regarding,char,0,0,Regarding +86,RequestingManager,char,0,0,Requesting Manager +87,InvoiceDate,number,0,0,Invoice Date +88,DueDate,number,0,0,Due Date +89,AccNo,number,0,0,Account Number +90,BSB,number,0,0,BSB No +91,AccName,char,0,0,Account Name +92,SubTotal,number,0,0,Sub Total before tax +93,Tax,number,0,0,Tac amounts +94,PurchaseNo,number,0,0,Purchase number +95,ShipTo,char,0,0, +96,BranchOffice,char,0,0,Branch Office +97,IFSCCode,number,0,0,IFSC Code +98,CentralisedBillingAndAccOffice,char,0,0,Centralised Billing and Accounting Office +99,ServiceTaxCategory,char,0,0,Service Tax Category +100,ServiceTaxRegnNo,number,0,0,Service Tax Regn No +101,Branch,char,0,0,Branch +168,StartDate,char,0,0,Start Date of Minimum payment period per service component +169,ZipCode,number,0,0,Zip Code +170,ServiceComponents,char,0,0,Service Components +171,ExistingCircuitIds,number,0,0,existing circuit ids +172,SignedDate,number,0,0,Signed Date +173,StateProvince,char,0,0,State Province +174,Attention,char,0,0,Attention +175,Country,char,0,0,Country +176,ReferenceNo,number,0,0,Reference No +177,PreExistingContractNo,number,0,0,Pre Existing Contract No +178,AccNo,number,0,0,AccountNumber +179,PercMonthlyFee,char,0,0,Percentage of Monthly Fee +180,Customer,char,0,0,Customer +181,SDAcode,number,0,0,SDA code +182,ContractIDNo,number,0,0,contract id no +183,DS1No,number,0,0,ds1 no +184,PRINo,char,0,0,PRI No +185,City,char,0,0,City +186,SalesRegion,char,0,0,Sales Region +187,Name,char,0,0,Name +188,Title,char,0,0,Title +189,PricingTerm,char,0,0,Pricing Schedule Term +190,SalesStrata,char,0,0,Sales Strata +191,SalesBranchManager,char,0,0,Sales Branch Manager +192,EmailAddress,char,0,0,Email Address +193,TeleFax,number,0,0,Telephone and Fax +194,StreetAddress,char,0,0,Street Address +195,MinPayPeriod,char,0,0,Minimum Payment Period +196,ProgramCode,number,0,0,Program Code +197,SCVPName,char,0,0,SCVP Name +198,RatesForMinPayment,char,0,0,Rates following the end of minimum payment +199,Branch Transit Number,number,0,1, +200,RateStabilization,char,0,0,Rate Stabilization per service component +201,EfffectiveDate,char,0,0,Effective Date of this pricing schedule +46,MileageIn,number,0,0,Mileage In +102,Attention,char,0,0,Attention +103,DOB,number,0,0,Date of Birth +104,StartDate,number,0,0,Start Date +105,Title,char,0,0,Title +106,PlaceOfBirth,char,0,0,Place of Birth +107,Status,char,0,0,Status +108,Employee,char,0,0,Employee +109,FullName,char,0,0,Full Name +110,Subject,char,0,0,Subject +111,AnnualSalary,number,0,0,Annual Salary +112,Citizenship,char,0,0,Citizenship +113,ExpireDate,number,0,0,Expire Date +114,PassportNo,number,0,0,Passport no +115,Gender,char,0,0,Gender +116,IssueDate,number,0,0,Issue Date +117,Smoking Status,char,0,0, +118,ServiceDept,char,0,0,Service Department +119,PCP,char,0,0,PCP +120,ProgressNotes,char,0,0,Progress Notes +121,AppointmentFacility,char,0,0,Appointment Facility +122,Referring,char,0,0,Referring +123,MedPrimary,char,0,0,med primary +124,Prescription,char,0,0,prescription +125,PrimaryCareProvider,char,0,0,primary care provider +126,Telephone,number,0,0,Telephone +127,FaxNo,number,0,0,Fax Number +128,NPI,number,0,0,NPI +129,FollowUp,char,0,0,Follow Up +130,Name,char,0,0,Name +131,Diabetes,char,0,0, +132,AppointmentDateTime,number,0,0,Appt. Date/Time +133,DOB,number,0,0,Date of Birth +134,Marital status,char,0,0, +135,Alcohol intake,char,0,0, +136,Hypertension,char,0,0, +137,Occupation,char,0,0, +138,Kidney Stones,char,0,0, +139,Celebrex,char,0,0, +140,Employer,char,0,0, +141,Vitals,char,0,0, +142,ROS,char,0,0, +143,Quantity,number,0,0, +144,Refills,number,0,0, +145,BodyMassIndex,number,0,0,Body Mass Index (BMI) +146,Weight,number,0,0, +147,EncounterDate,number,0,0,Encounter Date +148,Provider,char,0,0,Provider +149,Insurance,char,0,0,Insurance +150,Client,char,0,0,Client +151,InvestigatingAgency,char,0,0,Investigating Agency +152,County,char,0,0,County +153,Parties,char,0,0,Parties +154,TransactionNo,number,0,0,Transaction Number +155,Date,number,0,0,Date +156,TimeofLoss,number,0,0,Time of Loss +157,ClaimNo,number,0,0,Claim Number +158,State,char,0,0,State +159,DateOfLoss,number,0,0,Date Of Loss +160,DriverLicense,number,0,0,Driver License No +161,Street,char,0,0,Street +162,Division,char,0,0,Division +163,Adjuster,char,0,0,Adjuster +164,ReportNumber,number,0,0,Report Number +165,ReportType,char,0,0,Report Type +166,Tag,char,0,0,Tag +167,City,char,0,0,City +1,InvestmentName,char,1,0, +2,InvestorName,char,1,0, +3,CapBalance,number,1,0, +4,FundAsOfDate,number,1,0, +5,IssuedDate,number,0,0,Issued Date +6,IssuedAt,char,0,0,Issued At +7,Master,char,0,0,Master/Captain +8,Shipper,char,0,0,Shipper +9,BLNo,char,0,0,Bill of Lading number +10,Flag,char,0,0,Flag +11,Consignee,char,0,0,Consignee +12,VoyageNo,number,0,0,Voyage No +13,NotifyParty,char,0,0,Notify Party +14,OnboardTanker,char,0,0,OnboardTanker +15,LoadingPort,char,0,0,Loading Port +16,DeliveryPort,char,0,0,Delivery Port +17,Adjuster,char,0,0,Adjuster +18,WrittenBy,char,0,0,Written By +19,ClaimNo,number,0,0,Claim No +20,GrandTotal,number,0,0,Grand Total +21,VehicleOut,char,0,0,Vehicle Out +22,TypeOfLoss,char,0,0,Type of Loss +23,Insured,char,0,0,Insured +24,PolicyNo,number,0,0,Policy no +25,Fax,number,0,0,Fax +26,WorkfileID,number,0,0,Workfile ID +27,Telephone,number,0,0,Telephone +28,DaysToRepair,number,0,0,Days to Repair +29,CUSTOMERPAY,number,0,0,CUSTOMER PAY +30,Subtotal,number,0,0,Subtotal +31,INSURANCEPAY,number,0,0,INSURANCE PAY +32,Condition,char,0,0,Condition +33,JobNo,number,0,0,Jon no +34,ProductionDate,number,0,0,Production Date +35,State,char,0,0,State +36,FederalID,number,0,0,Federal ID +37,MileageOut,char,0,0,Mileage Out +38,RONumber,number,0,0,RO Number +39,Deductible,number,0,0,Deductible +40,License,char,0,0,License +41,VIN,number,0,0,VIN +42,PointOfImpact,char,0,0,Point of Impact +43,DateOfLoss,number,0,0,Date of Loss +44,InspectionLocation,char,0,0,Inspection Location +45,Owner,char,0,0,Owner diff --git a/BACA/configuration/DB2/CSVFiles/key_class_dc.csv b/BACA/configuration/DB2/CSVFiles/key_class_dc.csv new file mode 100644 index 00000000..bd42f1ae --- /dev/null +++ b/BACA/configuration/DB2/CSVFiles/key_class_dc.csv @@ -0,0 +1,201 @@ +46,3 +47,3 +48,3 +49,4 +50,4 +51,4 +52,4 +53,4 +54,4 +55,4 +56,4 +57,4 +58,4 +59,4 +60,4 +61,4 +62,4 +63,4 +64,4 +65,4 +66,4 +67,4 +68,4 +69,4 +70,4 +71,4 +72,4 +73,4 +74,4 +75,4 +76,4 +77,4 +78,4 +79,4 +80,4 +81,4 +82,4 +83,4 +84,4 +85,4 +86,4 +87,4 +88,4 +89,4 +90,4 +91,4 +92,4 +93,4 +94,4 +95,4 +96,4 +97,4 +98,4 +99,4 +100,4 +101,4 +168,9 +169,9 +170,9 +171,9 +172,9 +173,9 +174,9 +175,9 +176,9 +177,9 +178,9 +179,9 +180,9 +181,9 +182,9 +183,9 +184,9 +185,9 +186,9 +187,9 +188,9 +189,9 +190,9 +191,9 +192,9 +193,9 +194,9 +195,9 +196,9 +197,9 +198,9 +199,9 +200,9 +201,9 +102,5 +103,5 +104,5 +105,5 +106,5 +107,5 +108,5 +109,5 +110,5 +111,5 +112,5 +113,5 +114,5 +115,5 +116,5 +1,1 +2,1 +3,1 +4,1 +5,2 +6,2 +7,2 +8,2 +9,2 +10,2 +11,2 +12,2 +13,2 +14,2 +15,2 +16,2 +17,3 +18,3 +19,3 +20,3 +21,3 +22,3 +23,3 +24,3 +25,3 +26,3 +27,3 +28,3 +29,3 +30,3 +31,3 +32,3 +33,3 +34,3 +35,3 +36,3 +37,3 +38,3 +39,3 +40,3 +41,3 +42,3 +43,3 +44,3 +45,3 +117,6 +118,6 +119,6 +120,6 +121,6 +122,6 +123,6 +124,6 +125,6 +126,6 +127,6 +128,6 +129,6 +130,6 +131,6 +132,6 +133,6 +134,6 +135,6 +136,6 +137,6 +138,6 +139,6 +140,6 +141,6 +142,6 +143,6 +144,6 +145,6 +146,6 +147,6 +148,6 +149,6 +150,7 +151,7 +152,7 +153,7 +154,7 +155,7 +156,7 +157,7 +158,7 +159,7 +160,7 +161,7 +162,7 +163,7 +164,7 +165,7 +166,7 +167,7 diff --git a/BACA/configuration/DB2/CreateBaseDB.sh b/BACA/configuration/DB2/CreateBaseDB.sh new file mode 100755 index 00000000..69f74051 --- /dev/null +++ b/BACA/configuration/DB2/CreateBaseDB.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +. ./ScriptFunctions.sh + +INPUT_PROPS_FILENAME="./common_for_DB2.sh" + +if [ -f $INPUT_PROPS_FILENAME ]; then + echo "Found a $INPUT_PROPS_FILENAME. Reading in variables from that script." + . $INPUT_PROPS_FILENAME +fi + +default_basedb='CABASEDB' +echo -e "\n-- This script will create the BACA Base database." + +if [[ -z "$base_db_name" ]]; then + echo -e "\nEnter the name of the BACA Base database to create. (The name must be 8 chars or less). If nothing is entered, we will use this default value : " $default_basedb + read base_db_name + if [[ -z "$base_db_name" ]]; then + base_db_name=$default_basedb + fi + while [ ${#base_db_name} -gt 8 ]; + do + echo "Please enter a valid value for the tenant database name of max length 8 :" + read base_db_name; + echo ${#base_db_name}; + done +fi + +if [[ -z "$base_valid_user" ]]; then + base_valid_user=0 +fi + +while [[ $base_valid_user -ne 1 ]] +do + echo -e "\nWe need to create a non-admin database user to access BASE database." + echo "Enter the name of database user to create: " + read base_db_user + while [[ $base_db_user == '' ]] + do + echo "Enter a valid value" + read base_db_user + done + + getent passwd $base_db_user > /dev/null + if [[ $? -eq 0 ]]; then + echo "$base_db_user already exists. Do you want to use this user (y/n)" + read use_existing_user + if [ "$use_existing_user" = "y" ] || [ "$use_existing_user" = "Y" ]; then + base_user_already_defined=1 + base_valid_user=1 + fi + else + base_valid_user=1 + fi +done + +if [[ $base_user_already_defined = 1 ]]; then + base_pwdconfirmed=1 +else + base_pwdconfirmed=0 +fi + +while [[ $base_pwdconfirmed -ne 1 ]] # While pwd is not yet received and confirmed (i.e. entered the same time twice) +do + echo "Enter the password for the user: " + read -s db_user_pwd + while [[ $db_user_pwd == '' ]] # While pwd is empty... + do + echo "Enter a valid value" + read -s db_user_pwd + done + + echo "Please confirm the password by entering it again:" + read -s db_user_pwd2 + while [[ $db_user_pwd2 == '' ]] # While pwd is empty... + do + echo "Enter a valid value" + read -s db_user_pwd2 + done + + if [[ "$db_user_pwd" == "$db_user_pwd2" ]]; then + base_pwdconfirmed=1 + else + echo "The passwords do not match. Please enter the password again." + unset db_user_pwd + unset db_user_pwd2 + fi +done + +echo +echo "-- Information gathering is completed. Create base DB is about to begin." +askForConfirmation + +if [[ $db_user_pwd_b64_encoded -eq 1 ]]; then + db_user_pwd=$(echo $db_user_pwd | base64 --decode) +fi + +if [[ $base_user_already_defined -ne 1 ]]; then + echo + echo "Creating user $base_db_user..." + + encrypted_pwd=$(perl -e 'print crypt($ARGV[0], "pwsalt")' $db_user_pwd) + sudo useradd -m -p $encrypted_pwd $base_db_user + if [[ $? -eq 0 ]]; then + echo "User $base_db_user has been added to system!" + else + echo "ERROR: Failed to add a user $base_db_user! Please try again..." + exit 1 + fi + echo "setting password to not expire" + sudo chage -E -1 -M -1 $base_db_user +fi + +cp sql/CreateBaseDB.sql.template sql/CreateBaseDB.sql +sed -i s/\$base_db_name/"$base_db_name"/ sql/CreateBaseDB.sql +sed -i s/\$base_db_user/"$base_db_user"/ sql/CreateBaseDB.sql +# sed -i s/\$db_user_pwd/"$db_user_pwd"/ sql/CreateBaseDB.sql + +echo +echo "Running script: sql/CreateBaseDB.sql" +db2 -stvf sql/CreateBaseDB.sql + diff --git a/BACA/configuration/DB2/ScriptFunctions.sh b/BACA/configuration/DB2/ScriptFunctions.sh new file mode 100644 index 00000000..4d40ce59 --- /dev/null +++ b/BACA/configuration/DB2/ScriptFunctions.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +function askForConfirmation(){ + while [[ $confirmation != "y" && $confirmation != "n" && $confirmation != "yes" && $confirmation != "no" ]] # While confirmation is not y or n... + do + echo + echo -e "Would you like to continue (Y/N):" + read confirmation + confirmation=$(echo "$confirmation" | tr '[:upper:]' '[:lower:]') + done + + if [[ $confirmation == "n" || $confirmation == "no" ]] + then + exit + fi +} \ No newline at end of file diff --git a/BACA/configuration/DB2/common_for_DB2.sh.sample b/BACA/configuration/DB2/common_for_DB2.sh.sample new file mode 100644 index 00000000..50dd65b8 --- /dev/null +++ b/BACA/configuration/DB2/common_for_DB2.sh.sample @@ -0,0 +1,47 @@ +# Sample script for running the DB2 scripts non-interactively by providing the needed env vars +# To use: Make a copy and name it "common_for_DB2.sh", update the needed variables. + + +# --- For Base BACA DB: +# update these variables for the BACA Base database +base_db_name=CABASE3 +base_db_user=baseuser3 + + +# To skip creating base databse user and skip asking for pwd, use these vars below. +# Prereq is that the DB2 user (from var "base_db_user") must already be created. +base_valid_user=1 +base_user_already_defined=1 +base_pwdconfirmed=1 + +# --- For adding tenant: +# update these variables +baca_database_server_ip=10.126.18.120 +baca_database_port=50000 +tenant_id=t4910 +tenant_db_name=t4910 +tenant_db_user=t4910user + +# To skip creating tenant database user and skip asking for pwd, use these vars below. +# Prereq is that the DB2 user (from var "tenant_db_user") must already be created. +user_already_defined=1 +pwdconfirmed=1 + +# update these variables +tenant_db_pwd=xyz123ee +tenant_db_pwd_b64_encoded=1 # set to 1 if "tenant_db_pwd" is base64 encoded +tenant_ontology=ONT1 + +tenant_company=IBM +tenant_first_name=John +tenant_last_name=Smith +tenant_email=johnsmith@ibm.com +tenant_user_name=johnsmith + +# --- For adding ontology to existing tenant +# uncomment this below to add ontology, and comment out "tenant_ontology" line above in this file +#use_existing_tenant=1 +#tenant_ontology=ONT2 + +# skip confirmation prompts: +confirmation=y diff --git a/BACA/configuration/DB2/sql/CreateBacaSchema.sql.template b/BACA/configuration/DB2/sql/CreateBacaSchema.sql.template new file mode 100644 index 00000000..2968a7ac --- /dev/null +++ b/BACA/configuration/DB2/sql/CreateBacaSchema.sql.template @@ -0,0 +1,6 @@ +CONNECT TO $tenant_db_name ; + +CREATE SCHEMA $tenant_ontology ; + +SET SCHEMA $tenant_ontology ; + diff --git a/BACA/configuration/DB2/sql/CreateBacaTables.sql b/BACA/configuration/DB2/sql/CreateBacaTables.sql new file mode 100644 index 00000000..62c4ccf6 --- /dev/null +++ b/BACA/configuration/DB2/sql/CreateBacaTables.sql @@ -0,0 +1,586 @@ +create table doc_class +( + doc_class_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + doc_class_name VARCHAR (512) NOT NULL, + comment varchar(1024), + + CONSTRAINT doc_class_pkey PRIMARY KEY (doc_class_id), + + CONSTRAINT doc_class_doc_class_name_key UNIQUE (doc_class_name) +); + +create table doc_alias +( + doc_alias_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + doc_alias_name VARCHAR (512) NOT NULL, + language CHAR(3) NOT NULL, + + CONSTRAINT doc_alias_pkey PRIMARY KEY (doc_alias_id), + + CONSTRAINT doc_alias_doc_alias_name_key UNIQUE (doc_alias_name) +); + +create table key_class +( + key_class_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + key_class_name VARCHAR (512) NOT NULL, + datatype VARCHAR (256) NOT NULL, + mandatory BOOLEAN, + sensitive BOOLEAN, + comment VARCHAR(1024), + + CONSTRAINT key_class_pkey PRIMARY KEY (key_class_id) +); + +create table key_alias +( + key_alias_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + key_alias_name VARCHAR (512) NOT NULL, + language CHAR(3) NOT NULL, + + CONSTRAINT key_alias_pkey PRIMARY KEY (key_alias_id), + + CONSTRAINT key_alias_key_alias_name_key UNIQUE (key_alias_name) +); + +create table cword +( + cword_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + cword_name VARCHAR (512) NOT NULL, + + CONSTRAINT cword_pkey PRIMARY KEY (cword_id), + + CONSTRAINT cword_cword_name_key UNIQUE (cword_name) +); + +create table doc_alias_dc +( + doc_alias_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + da_count INTEGER NOT NULL, + + CONSTRAINT doc_alias_dc_pkey PRIMARY KEY (doc_alias_id, doc_class_id), + + CONSTRAINT doc_alias_dc_doc_alias_id_fkey FOREIGN KEY (doc_alias_id) REFERENCES doc_alias (doc_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + constraint doc_alias_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE + +); + +create table key_class_dc +( + key_class_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + CONSTRAINT key_class_dc_pkey PRIMARY KEY (key_class_id, doc_class_id), + + CONSTRAINT key_class_dc_key_class_id_fkey FOREIGN KEY (key_class_id) REFERENCES key_class (key_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT key_class_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table key_alias_dc +( + key_alias_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + ka_count INTEGER NOT NULL, + + CONSTRAINT key_alias_dc_pkey PRIMARY KEY (key_alias_id, doc_class_id), + + CONSTRAINT key_alias_dc_key_alias_id_fkey FOREIGN KEY (key_alias_id) REFERENCES key_alias (key_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT key_alias_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table key_alias_kc +( + key_alias_id INTEGER NOT NULL, + + key_class_id INTEGER NOT NULL, + + CONSTRAINT key_alias_kc_pkey PRIMARY KEY (key_alias_id, key_class_id), + + CONSTRAINT key_alias_kc_key_alias_id_fkey FOREIGN KEY (key_alias_id) REFERENCES key_alias (key_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT key_alias_kc_key_class_id_fkey FOREIGN KEY (key_class_id) REFERENCES key_class (key_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table cword_dc +( + doc_class_id INTEGER NOT NULL, + cword_id INTEGER NOT NULL, + cw_count INTEGER NOT NULL, + + CONSTRAINT cword_dc_pkey PRIMARY KEY (cword_id, doc_class_id), + + CONSTRAINT cword_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT cword_dc_cword_id_fkey FOREIGN KEY (cword_id) REFERENCES cword (cword_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table heading +( + heading_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + heading_name VARCHAR (512) NOT NULL, + comment VARCHAR(1024), + CONSTRAINT heading_pkey PRIMARY KEY (heading_id) +); + +create table heading_alias +( + heading_alias_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + heading_alias_name VARCHAR (512) NOT NULL, + + CONSTRAINT heading_alias_pkey PRIMARY KEY (heading_alias_id), + + CONSTRAINT heading_alias_heading_alias_name_key unique (heading_alias_name) +); + +create table heading_dc +( + heading_id INTEGER NOT NULL, + + doc_class_id INTEGER NOT NULL, + + CONSTRAINT heading_dc_pkey PRIMARY KEY (heading_id, doc_class_id), + + CONSTRAINT heading_dc_heading_id_fkey FOREIGN KEY (heading_id) REFERENCES heading (heading_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT heading_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table heading_alias_h +( + heading_alias_id INTEGER NOT NULL, + heading_id INTEGER NOT NULL, + + CONSTRAINT heading_alias_h_pkey PRIMARY KEY (heading_alias_id, heading_id), + + CONSTRAINT heading_alias_h_heading_alias_id_fkey FOREIGN KEY (heading_alias_id) REFERENCES heading_alias (heading_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT heading_alias_h_heading_id_fkey FOREIGN KEY (heading_id) REFERENCES heading (heading_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table heading_alias_dc +( + heading_alias_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + + CONSTRAINT heading_alias_dc_pkey PRIMARY KEY (heading_alias_id, doc_class_id), + + CONSTRAINT heading_alias_dc_heading_alias_id_fkey FOREIGN KEY (heading_alias_id) REFERENCES heading_alias (heading_alias_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT heading_alias_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table user_detail +( + user_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + email VARCHAR(1024) NOT NULL, + first_name VARCHAR(512) NOT NULL, + last_name VARCHAR(512) NOT NULL, + phone VARCHAR(256), + company VARCHAR(512), + expire INTEGER, + expiry_date BIGINT, + token VARCHAR(1024) FOR BIT DATA DEFAULT NULL, + user_name VARCHAR(1024) NOT NULL, + CONSTRAINT user_detail_pkey PRIMARY KEY (user_id), + CONSTRAINT user_detail_email_key UNIQUE (email), + CONSTRAINT user_name UNIQUE (user_name) +); + +create table login_detail +( + user_id INTEGER, + role VARCHAR(32), + status BOOLEAN, + logged_in BOOLEAN DEFAULT 0, + + CONSTRAINT login_detail_user_id_fkey FOREIGN KEY (user_id) REFERENCES user_detail (user_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table integration +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + type VARCHAR(32), + url VARCHAR(1024), + user_name VARCHAR(256) DEFAULT NULL, + password VARCHAR(512) FOR BIT DATA DEFAULT NULL, + label VARCHAR(256), + status BOOLEAN, + model_id VARCHAR(32), + api_key VARCHAR(1024) FOR BIT DATA DEFAULT NULL, + flag VARCHAR(64), + CONSTRAINT integration_pkey PRIMARY KEY (id) +); + +create table integration_dc +( + id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + checked SMALLINT, + + CONSTRAINT integration_dc_id_fkey FOREIGN KEY (id) REFERENCES integration (id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT integration_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT integration_dc_pkey PRIMARY KEY (id, doc_class_id) +); + +create table import_ontology +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + user_id INTEGER, + date BIGINT, + start_time BIGINT, + end_time BIGINT, + complete BOOLEAN, + failure BOOLEAN, + + CONSTRAINT import_ontology_user_id_fkey FOREIGN KEY (user_id) REFERENCES user_detail (user_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT import_ontology_pkey PRIMARY KEY (id) +); + +create table api_integrations_objectsstore +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + user_id INTEGER NOT NULL, + type VARCHAR(64), + bucket_name VARCHAR(128) NOT NULL, + endpoint VARCHAR(1024) NOT NULL, + access_key VARCHAR(1024) NOT NULL FOR BIT DATA, + access_id VARCHAR(1024) NOT NULL FOR BIT DATA, + signatureversion VARCHAR(128) NOT NULL, + forcestylepath boolean, + + CONSTRAINT api_integrations_objectsstore_id_pk PRIMARY KEY (id), + + CONSTRAINT api_integrations_objectsstore_user_detail_user_id_fk FOREIGN KEY (user_id) REFERENCES user_detail (user_id) +); + +create table smartpages_options +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + outputname VARCHAR(6), + company VARCHAR(512), + selections VARCHAR(256), + CONSTRAINT smartpages_options_pkey PRIMARY KEY (id) +); + +create table fonts +( + font_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + font_size VARCHAR(256) NOT NULL, + total_no_of_observations INTEGER, + sum_of_observations_by_no_of_pixels DOUBLE, + sum_of_square_of_observations DOUBLE, + + CONSTRAINT fonts_pkey PRIMARY KEY (font_id) +); + +create table fonts_dc +( + font_id INTEGER NOT NULL, + doc_class_id INTEGER NOT NULL, + + CONSTRAINT fonts_dc_pkey PRIMARY KEY (font_id, doc_class_id), + + CONSTRAINT fonts_dc_font_id_fkey FOREIGN KEY (font_id) REFERENCES fonts (font_id) + ON UPDATE RESTRICT ON DELETE CASCADE, + + CONSTRAINT fonts_dc_doc_class_id_fkey FOREIGN KEY (doc_class_id) REFERENCES doc_class (doc_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table fonts_transid +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + transid VARCHAR(256) NOT NULL, + + CONSTRAINT fonts_transid_pkey PRIMARY KEY (id), + + CONSTRAINT fonts_transid_transid_key UNIQUE (transid) +); + +create table db_backup +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + date BIGINT NOT NULL, + frequency CHAR(15) NOT NULL, + type VARCHAR(1024) NOT NULL, + start_time BIGINT, + end_time BIGINT, + complete BOOLEAN DEFAULT 0, + failure BOOLEAN DEFAULT 0, + obj_cred_id INTEGER NOT NULL, + + CONSTRAINT db_backup_pkey PRIMARY KEY (id) + + --CONSTRAINT db_backup_obj_cred_id_fkey FOREIGN KEY (obj_cred_id) REFERENCES api_integrations_objectsstore (obj_cred_id) + --ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table key_spacing +( + key_class_id INTEGER NOT NULL, + key_class_count INTEGER, + key_class_count_doc INTEGER, + class_total_docs INTEGER, + sum_x INTEGER, + sum_x_sq INTEGER, + sum_y INTEGER, + sum_y_sq INTEGER, + + CONSTRAINT key_spacing_pkey PRIMARY KEY (key_class_id), + + CONSTRAINT key_spacing_key_class_id_fkey FOREIGN KEY (key_class_id) REFERENCES key_class (key_class_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + + +create table processed_file +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + transaction_id VARCHAR(256) NOT NULL, + file_name VARCHAR(1024) NOT NULL, + number_of_page INTEGER, + date BIGINT, + start_time BIGINT, + end_time BIGINT, + failed_ocr_pages INTEGER DEFAULT 0, + failed_pages INTEGER DEFAULT 0, + failed BOOLEAN DEFAULT FALSE, + + CONSTRAINT processed_file_pkey PRIMARY KEY (id), + CONSTRAINT processed_file_transaction_id_key UNIQUE (transaction_id) +); + +create table error_log +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + transaction_id VARCHAR(256), + error_code CHAR(32), + description VARCHAR(1024), + date BIGINT, + + CONSTRAINT error_log_pkey PRIMARY KEY (id), + + CONSTRAINT error_log_transaction_id_fkey FOREIGN KEY (transaction_id) REFERENCES processed_file (transaction_id) + ON UPDATE RESTRICT ON DELETE CASCADE +); + +create table db_restore +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + start_time BIGINT, + end_time BIGINT, + complete BOOLEAN DEFAULT FALSE, + failure BOOLEAN DEFAULT FALSE, + + CONSTRAINT db_restore_pkey PRIMARY KEY (id) +); + +create table audit_ontology +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_ontology_pkey PRIMARY KEY (id) +); + +create table audit_login_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_login_activity_pkey PRIMARY KEY (id) +); + +create table audit_processed_files +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + transaction_id VARCHAR(256), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_processed_files_pkey PRIMARY KEY (id) +); + +create table audit_user_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_user_activity_pkey PRIMARY KEY (id) +); + +create table audit_api_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_api_activity PRIMARY KEY (id) +); + +create table audit_system_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_system_activity_pkey PRIMARY KEY (id) +); + +create table audit_integration_activity +( + id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), + username VARCHAR(1024), + type VARCHAR(256), + action VARCHAR(512), + description VARCHAR(1024), + date BIGINT, + time_elapsed VARCHAR(128), + error BOOLEAN DEFAULT FALSE, + page VARCHAR(32) DEFAULT '', + + CONSTRAINT audit_integration_activity_pkey PRIMARY KEY (id) +); + +CREATE OR REPLACE VIEW audit_sys_report AS SELECT audit_ontology.username, + audit_ontology.type, + audit_ontology.action, + audit_ontology.description, + audit_ontology.date, + audit_ontology.time_elapsed, + audit_ontology.error, + audit_ontology.page, + 'Ontology' AS details + FROM audit_ontology +UNION + SELECT audit_processed_files.username, + audit_processed_files.type, + audit_processed_files.action, + audit_processed_files.description, + audit_processed_files.date, + audit_processed_files.time_elapsed, + audit_processed_files.error, + audit_processed_files.page, + 'Processed files' AS details + FROM audit_processed_files +UNION + SELECT audit_login_activity.username, + audit_login_activity.type, + audit_login_activity.action, + audit_login_activity.description, + audit_login_activity.date, + audit_login_activity.time_elapsed, + audit_login_activity.error, + audit_login_activity.page, + 'Login activity' AS details + FROM audit_login_activity +UNION + SELECT audit_user_activity.username, + audit_user_activity.type, + audit_user_activity.action, + audit_user_activity.description, + audit_user_activity.date, + audit_user_activity.time_elapsed, + audit_user_activity.error, + audit_user_activity.page, + 'User activity' AS details + FROM audit_user_activity +UNION + SELECT audit_system_activity.username, + audit_system_activity.type, + audit_system_activity.action, + audit_system_activity.description, + audit_system_activity.date, + audit_system_activity.time_elapsed, + audit_system_activity.error, + audit_system_activity.page, + 'System activity' AS detailsimport_ontology + FROM audit_system_activity +UNION + SELECT audit_integration_activity.username, + audit_integration_activity.type, + audit_integration_activity.action, + audit_integration_activity.description, + audit_integration_activity.date, + audit_integration_activity.time_elapsed, + audit_integration_activity.error, + audit_integration_activity.page, + 'Integration activity' AS details + FROM audit_integration_activity +UNION + SELECT audit_api_activity.username, + audit_api_activity.type, + audit_api_activity.action, + audit_api_activity.description, + audit_api_activity.date, + audit_api_activity.time_elapsed, + audit_api_activity.error, + audit_api_activity.page, + 'API activity' AS details + FROM audit_api_activity +; diff --git a/BACA/configuration/DB2/sql/CreateBaseDB.sql.template b/BACA/configuration/DB2/sql/CreateBaseDB.sql.template new file mode 100644 index 00000000..15d3298a --- /dev/null +++ b/BACA/configuration/DB2/sql/CreateBaseDB.sql.template @@ -0,0 +1,27 @@ +CREATE DATABASE $base_db_name AUTOMATIC STORAGE YES USING CODESET UTF-8 TERRITORY DEFAULT COLLATE USING SYSTEM PAGESIZE 32768; + +CONNECT TO $base_db_name ; + +GRANT CONNECT,DATAACCESS ON DATABASE TO USER $base_db_user ; + +GRANT USE OF TABLESPACE USERSPACE1 TO USER $base_db_user ; + +CONNECT RESET; + +CONNECT TO $base_db_name ; + +SET SCHEMA $base_db_user ; + +CREATE TABLE TENANTINFO + (tenantid varchar(128) NOT NULL, + ontology varchar(128) not null, + tenanttype smallint not null with default, + rdbmsengine varchar(128) not null, + bacaversion varchar(1024) not null, + rdbmsconnection varchar(1024) for bit data default null, + mongoconnection varchar(1024) for bit data default null, + mongoadminconnection varchar(1024) for bit data default null, + CONSTRAINT tenantinfo_pkey PRIMARY KEY (tenantid, ontology) + ); + +CONNECT RESET; diff --git a/BACA/configuration/DB2/sql/CreateDB.sql.template b/BACA/configuration/DB2/sql/CreateDB.sql.template new file mode 100644 index 00000000..cc8e1636 --- /dev/null +++ b/BACA/configuration/DB2/sql/CreateDB.sql.template @@ -0,0 +1,9 @@ +CREATE DATABASE $tenant_db_name AUTOMATIC STORAGE YES USING CODESET UTF-8 TERRITORY DEFAULT COLLATE USING SYSTEM PAGESIZE 32768; + +CONNECT TO $tenant_db_name ; + +GRANT CONNECT,DATAACCESS ON DATABASE TO USER $tenant_db_user ; + +GRANT USE OF TABLESPACE USERSPACE1 TO USER $tenant_db_user ; + +CONNECT RESET; \ No newline at end of file diff --git a/BACA/configuration/DB2/sql/InsertTenant.sql.template b/BACA/configuration/DB2/sql/InsertTenant.sql.template new file mode 100644 index 00000000..464d18e5 --- /dev/null +++ b/BACA/configuration/DB2/sql/InsertTenant.sql.template @@ -0,0 +1,4 @@ +connect to $base_db_name ; +set schema $base_db_user ; +insert into TENANTINFO (tenantid,ontology,tenanttype,rdbmsengine,bacaversion,rdbmsconnection) values ( '$tenant_id', '$tenant_ontology', 0, 'DB2', '1.1', encrypt('DATABASE=$tenant_db_name;HOSTNAME=$baca_database_server_ip;PORT=$baca_database_port;PROTOCOL=TCPIP;UID=$tenant_db_user;PWD=$tenant_db_pwd;','AES_KEY')) ; +connect reset ; \ No newline at end of file diff --git a/BACA/configuration/DB2/sql/InsertUser.sql.template b/BACA/configuration/DB2/sql/InsertUser.sql.template new file mode 100644 index 00000000..bcc368d7 --- /dev/null +++ b/BACA/configuration/DB2/sql/InsertUser.sql.template @@ -0,0 +1,5 @@ +connect to $tenant_db_name ; +set schema $tenant_ontology ; +insert into user_detail (email,first_name,last_name,user_name,company,expire) values ('$tenant_email','$tenant_first_name','$tenant_last_name','$tenant_user_name','$tenant_company',10080) ; +insert into login_detail (user_id,role,status,logged_in) select user_id,'Admin','1',0 from user_detail where email='$tenant_email' ; +connect reset ; \ No newline at end of file diff --git a/BACA/configuration/DB2/sql/LoadData.sql.template b/BACA/configuration/DB2/sql/LoadData.sql.template new file mode 100644 index 00000000..24c2657e --- /dev/null +++ b/BACA/configuration/DB2/sql/LoadData.sql.template @@ -0,0 +1,37 @@ +CONNECT TO $tenant_db_name ; +SET SCHEMA $tenant_ontology ; + +load from ./CSVFiles/doc_class.csv of del modified by identityoverride insert into doc_class ; +load from ./CSVFiles/key_class.csv of del modified by identityoverride insert into key_class ; +load from ./CSVFiles/doc_alias.csv of del modified by identityoverride insert into doc_alias ; +load from ./CSVFiles/key_alias.csv of del modified by identityoverride insert into key_alias ; +load from ./CSVFiles/cword.csv of del modified by identityoverride insert into cword ; +load from ./CSVFiles/heading.csv of del modified by identityoverride insert into heading ; +load from ./CSVFiles/heading_alias.csv of del modified by identityoverride insert into heading_alias ; +load from ./CSVFiles/key_class_dc.csv of del modified by identityoverride insert into key_class_dc ; +load from ./CSVFiles/doc_alias_dc.csv of del modified by identityoverride insert into doc_alias_dc ; +load from ./CSVFiles/key_alias_dc.csv of del modified by identityoverride insert into key_alias_dc ; +load from ./CSVFiles/key_alias_kc.csv of del modified by identityoverride insert into key_alias_kc ; +load from ./CSVFiles/heading_dc.csv of del modified by identityoverride insert into heading_dc ; +load from ./CSVFiles/heading_alias_dc.csv of del modified by identityoverride insert into heading_alias_dc ; +load from ./CSVFiles/heading_alias_h.csv of del modified by identityoverride insert into heading_alias_h ; +load from ./CSVFiles/cword_dc.csv of del modified by identityoverride insert into cword_dc ; + +set integrity for key_class_dc immediate checked ; +set integrity for doc_alias_dc immediate checked ; +set integrity for key_alias_dc immediate checked ; +set integrity for key_alias_kc immediate checked ; +set integrity for heading_dc immediate checked ; +set integrity for heading_alias_dc immediate checked ; +set integrity for heading_alias_h immediate checked ; +set integrity for cword_dc immediate checked ; + +alter table doc_class alter column doc_class_id restart with 10 ; +alter table doc_alias alter column doc_alias_id restart with 11 ; +alter table key_class alter column key_class_id restart with 202 ; +alter table key_alias alter column key_alias_id restart with 239 ; +alter table cword alter column cword_id restart with 76 ; +alter table heading alter column heading_id restart with 3 ; +alter table heading_alias alter column heading_alias_id restart with 3 ; + +CONNECT RESET; diff --git a/BACA/configuration/DB2/sql/TablePermissions.sql.template b/BACA/configuration/DB2/sql/TablePermissions.sql.template new file mode 100644 index 00000000..08a276d2 --- /dev/null +++ b/BACA/configuration/DB2/sql/TablePermissions.sql.template @@ -0,0 +1,19 @@ +CONNECT TO $tenant_db_name ; + +GRANT ALTER ON TABLE $tenant_ontology.DOC_CLASS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.DOC_ALIAS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.KEY_CLASS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.KEY_ALIAS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.CWORD TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.HEADING TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.HEADING_ALIAS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.USER_DETAIL TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.INTEGRATION TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.IMPORT_ONTOLOGY TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.API_INTEGRATIONS_OBJECTSSTORE TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.SMARTPAGES_OPTIONS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.FONTS TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.FONTS_TRANSID TO USER $tenant_db_user ; +GRANT ALTER ON TABLE $tenant_ontology.DB_BACKUP TO USER $tenant_db_user ; + +CONNECT RESET; \ No newline at end of file diff --git a/BACA/configuration/README.md b/BACA/configuration/README.md new file mode 100644 index 00000000..e667ef6b --- /dev/null +++ b/BACA/configuration/README.md @@ -0,0 +1,4 @@ +# Refer to the IBM Business Automation Content Analyzer Knowledge Center + +Preparing your environment for Content Analyzer +https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/topics/tsk_preparing_baca_deploy.html diff --git a/BACA/configuration/baca-psp.yaml b/BACA/configuration/baca-psp.yaml new file mode 100644 index 00000000..a4fcd95c --- /dev/null +++ b/BACA/configuration/baca-psp.yaml @@ -0,0 +1,65 @@ +apiVersion: extensions/v1beta1 +kind: PodSecurityPolicy +metadata: + annotations: + kubernetes.io/description: "This policy allows pods to run with + any UID and GID, but preventing access to the host." + name: baca-anyuid-psp +spec: + allowPrivilegeEscalation: false + fsGroup: + ranges: + - max: 65535 + min: 1 + rule: MustRunAs + #rule: RunAsAny + requiredDropCapabilities: + - MKNOD + - SETFCAP + - NET_RAW + - NET_BIND_SERVICE + - KILL + allowedCapabilities: + - SETPCAP + - AUDIT_WRITE + - CHOWN + - FOWNER + - FSETID + - SETUID + - SETGID + - SYS_CHROOT + - DAC_OVERRIDE + runAsUser: + rule: RunAsAny #TODO: We need to set this value to "MustRunAsNonRoot" but minio is currently running as root + seLinux: + rule: RunAsAny + supplementalGroups: + ranges: + - max: 65535 + min: 1 + rule: MustRunAs + #rule: RunAsAny + volumes: + - configMap + - emptyDir + - projected + - secret + - downwardAPI + - persistentVolumeClaim + forbiddenSysctls: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + name: baca-anyuid-clusterrole +rules: +- apiGroups: + - extensions + resourceNames: + - baca-anyuid-psp + resources: + - podsecuritypolicies + verbs: + - use diff --git a/BACA/configuration/bashfunctions.sh b/BACA/configuration/bashfunctions.sh new file mode 100755 index 00000000..d41fa366 --- /dev/null +++ b/BACA/configuration/bashfunctions.sh @@ -0,0 +1,402 @@ +#!/usr/bin/env bash + +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +# Function to request user for their domain name + +export ICP_clustername=$(echo $DOCKER_REG_FOR_SERVICES | awk -F'[.]' '{print $1}') +export ICP_account_id="id-"$ICP_clustername"-account" + +# Login to ICP, to ensure bx pr and kubectl commands work in later functions +function loginToCluster() { + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + echo + #echo "\x1B[1;31m Logging into ICP using: bx pr login -a https://$MasterIp:8443 --skip-ssl-validation -u admin + # -p admin -c id-mycluster-account. \x1B[0m" + export ICP_USER_PASSWORD_DECODE=$(echo $ICP_USER_PASSWORD | base64 --decode) + #ICP 3.10 + cloudctl login -a https://$MasterIp:8443 --skip-ssl-validation -u $ICP_USER -p $ICP_USER_PASSWORD_DECODE -c $ICP_account_id -n default + fi + if [[ $OCP_VERSION == "3.11" ]]; then + echo + export OCP_USER_PASSWORD_DECODE=$(echo $OCP_USER_PASSWORD | base64 --decode) + #echo "\x1B[1;31m Logging into OCP using: oc login https://$MasterIp:8443 --insecure-skip-tls-verify=true -u $OCP_USER + # -p $OCP_USER_PASSWORD_DECODE. \x1B[0m" + #OCP 3.11 + oc login https://$MasterIp:8443 --insecure-skip-tls-verify=true -u $OCP_USER -p $OCP_USER_PASSWORD_DECODE + fi +} + +# ------------------- +# HELM Client setup +# ------------------- +function downloadHelmClient() { + + + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + echo + echo "Downloading Helm 2.9.1 from ICp" + curl -kLo helm-linux-amd64-v2.9.1.tar.gz https://$MasterIp:8443/api/cli/helm-linux-amd64.tar.gz + echo + echo "Moving helm to /usr/local/bin and chmod 755 helm" + tar -xvf helm-linux-amd64-v2.9.1.tar.gz + chmod 755 ./linux-amd64/helm && mv ./linux-amd64/helm /usr/local/bin + rm -rf linux-amd64 + # testing Helm + echo Testing Helm CLI using: helm version --tls + helm version --tls + fi + + if [[ $OCP_VERSION == "3.11" ]]; then + echo "Downloading Helm 2.11.0 from Github" + curl -s https://storage.googleapis.com/kubernetes-helm/helm-v2.11.0-linux-amd64.tar.gz | tar xz + echo + echo "Moving helm to /usr/local/bin and chmod 755 helm" + + chmod 755 ./linux-amd64/helm && mv ./linux-amd64/helm /usr/local/bin + rm -rf linux-amd64 + + fi +} + + +function helmSetup(){ + + if [[ $ICP_VERSION == "3.1.2" ]]; then + # ICP specific setup + echo + echo Initializing Helm CLI using: helm init --client-only + helm init --client-only + echo + echo Creating clusterrolebinding tiller-cluster-admin .... + kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default + fi + + if [[ $OCP_VERSION == "3.11" ]]; then + echo Creating clusterrolebinding tiller-cluster-admin .... + export TILLER_NAMESPACE=tiller + oc new-project $TILLER_NAMESPACE + oc project $TILLER_NAMESPACE + oc process -f /~https://github.com/openshift/origin/raw/master/examples/helm/tiller-template.yaml -p TILLER_NAMESPACE="${TILLER_NAMESPACE}" -p HELM_VERSION=v2.11.0 | oc create -f - + oc rollout status deployment tiller + oc project $KUBE_NAME_SPACE + oc policy add-role-to-user $OCP_USER "system:serviceaccount:${TILLER_NAMESPACE}:tiller" + fi + +} + +function checkHelm(){ + + if [[ $ICP_VERSION == "3.1.2" ]]; then + MAX_ITERATIONS=120 + count=0 + while [[ $( kubectl get deployment tiller-deploy --namespace kube-system | sed -n '1!p' | awk '{print $5}' ) == 0 ]] + do + if [ "$count" -eq $MAX_ITERATIONS ]; then + echo "ERROR: Failed to find tiller-deploy after $MAX_ITERATIONS tries. Please check your cluster using kubectl get deployment tiller-deploy --namespace kube-system" + return 1 + fi + echo "Checking that helm tiller is deployed ......................" + sleep 10 + ((count++)) + done + echo "Helm deployed successfully ......................" + fi +} + + + +function getWorkerIPs() { + echo "inside getWorkerIPs" + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + export ICP_USER_PASSWORD_DECODE=$(echo $ICP_USER_PASSWORD | base64 --decode) + echo "About to get all the worker IPs from $ICP_VERSION" + echo "login -a https://$MasterIp:8443 --skip-ssl-validation -u $ICP_USER -p $ICP_USER_PASSWORD_DECODE -c $ICP_account_id" + cloudctl login -a https://$MasterIp:8443 --skip-ssl-validation -u $ICP_USER -p $ICP_USER_PASSWORD_DECODE -c $ICP_account_id -n default + export WORKER_IPs=$(cloudctl cm workers --json | grep "publicIP" | awk '{print $2}' | cut -d ',' -f1 | tr -d '"') + if [ -z "$WORKER_IPs" ]; then + echo "Cannot find public IP for worker nodes. Will try to check for Private IP now" + export WORKER_IPs=$(cloudctl cm workers --json | grep "privateIP" | awk '{print $2}' | cut -d ',' -f1 | tr -d '"') + echo WORKER_IPs=$WORKER_IPs + if [[ -z "$WORKER_IPs" ]]; then exit 1; fi + fi + fi + if [[ $OCP_VERSION == "3.11" ]]; then + echo "About to get all the worker IPs from $OCP_VERSION" + loginToCluster + export WORKER_IPs=$(oc get nodes | grep compute | grep [^Not]Ready | awk '{print $1}' | cut -d ',' -f1 | tr -d '"') + echo WORKER_IPs=$WORKER_IPs + if [[ -z "$WORKER_IPs" ]]; then exit 1; fi + fi + +} +function getWorkerIPBasedOnLabel() { + echo "inside getWorkerIP1s. It will get the worker IPs based on label" + + loginToCluster + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + export WORKER_IP1s=$(kubectl get nodes --show-labels |grep worker.*$KUBE_NAME_SPACE=baca | grep [^Not]Ready | awk {'print $1'}) + fi + if [[ $OCP_VERSION == "3.11" ]]; then + export WORKER_IP1s=$(kubectl get nodes --show-labels |grep compute=true |grep celery$KUBE_NAME_SPACE'='baca | grep [^Not]Ready | awk {'print $1'}) + fi + echo $WORKER_IP1s + if [[ -z "$WORKER_IP1s" ]]; then exit 1; fi + +} +function clearAllLabels(){ + echo "About to clear ALL label nodes with in $KUBE_NAME_SPACE" + getWorkerIPs + for i in $WORKER_IPs + do + echo "Clear out previous labeling" + kubectl label nodes $i {celery$KUBE_NAME_SPACE-,mongo$KUBE_NAME_SPACE-,mongo-admin$KUBE_NAME_SPACE-} + echo + done +} +#function labelNodes() { +# clearAllLabels +# echo "About to label ALL nodes with celery$KUBE_NAME_SPACE=baca." +# getWorkerIPs +# for i in $WORKER_IPs +# do +# echo "Label --overwrite $i with celery$KUBE_NAME_SPACE=baca" +# kubectl label nodes --overwrite $i {celery$KUBE_NAME_SPACE=baca,mongo$KUBE_NAME_SPACE=baca,mongo-admin$KUBE_NAME_SPACE=baca} +# done +#} + +function customLabelNodes() { + loginToCluster + clearAllLabels +# echo "Clear out previous labeling" +# kubectl label nodes $i {celery$KUBE_NAME_SPACE-,mongo$KUBE_NAME_SPACE-,mongo-admin$KUBE_NAME_SPACE-,postgres$KUBE_NAME_SPACE-} + + echo "About to label --overwrite $CA_WORKERS with celery$KUBE_NAME_SPACE=baca." + echo label nodes {$CA_WORKERS} celery$KUBE_NAME_SPACE=baca + for i in $(echo $CA_WORKERS | sed "s/,/ /g") + do + echo "Label $i with celery$KUBE_NAME_SPACE=baca" + kubectl label nodes --overwrite $i celery$KUBE_NAME_SPACE=baca + echo + done + echo + echo "About to label $MONGO_WORKERS with mongo$KUBE_NAME_SPACE=baca." + for i in $(echo $MONGO_WORKERS | sed "s/,/ /g") + do + echo "Label $i with mongo$KUBE_NAME_SPACE=baca" + kubectl label nodes --overwrite $i mongo$KUBE_NAME_SPACE=baca + done + echo + echo "About to label $MONGO_ADMIN_WORKERS with mongo-admin$KUBE_NAME_SPACE=baca." + for i in $(echo $MONGO_ADMIN_WORKERS | sed "s/,/ /g") + do + echo "Label $i with mongo-admin$KUBE_NAME_SPACE=baca" + kubectl label nodes --overwrite $i mongo-admin$KUBE_NAME_SPACE=baca + done + echo +} + + + +function getNFSServer() { + #Get a list of worker IPs + if [[ $PVCCHOICE == "1" ]]; then # This is the option 1 where the script will create everything for Internal usage. + getWorkerIPBasedOnLabel + #Create directories: + echo "Creating required directory for SP by ssh into $NFS_IP" + if [ -z "$SSH_USER" ]; then + export SSH_USER="root" + fi + + if [ "$SSH_USER" == "root" ]; then + export SUDO_CMD="" + else + export SUDO_CMD="sudo " + fi + echo "Creating necessary folder in $NFS_IP..." + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/{logs,data,config}" + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/logs/{backend,frontend,callerapi,processing-extraction,pdfprocess,setup,interprocessing,classifyprocess-classify,ocr-extraction,postprocessing,reanalyze,updatefiledetail,spfrontend,minio,redis,rabbitmq,mongo,mongoadmin,utf8process}" + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/config/backend" + + + + echo "Creating data directory on NFS ..." + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD mkdir -p /exports/smartpages/$KUBE_NAME_SPACE/data/{mongo,mongoadmin}" + + + echo "Setting owner (51000:51001) for BACA's PVC" + ssh $SSH_USER@$NFS_IP -oStrictHostKeyChecking=no "$SUDO_CMD chown -R 51000:51001 /exports/smartpages/" + + + + + echo "Checking to see if NFS server is installed..." + if [[ $ICP_VERSION == "3.1.2" ]]; then + ssh $SSH_USER@$NFS_IP "$SUDO_CMD systemctl status nfs-kernel-server" + if [[ $? != "0" ]]; then + echo "We could not find nfs service. We will try to install nfs server" + ssh $SSH_USER@$NFS_IP "$SUDO_CMD apt install nfs-kernel-server && $SUDO_CMD systemctl enable nfs-kernel-server && $SUDO_CMD systemctl restart nfs-kernel-server" + + fi + fi + if [[ $OCP_VERSION == "3.11" ]]; then + ssh $SSH_USER@$NFS_IP "$SUDO_CMD systemctl status nfs-server" + if [[ $? != "0" ]]; then + echo "We could not find nfs service. We will try to install nfs server" + ssh $SSH_USER@$NFS_IP "$SUDO_CMD yum install nfs-utils && $SUDO_CMD systemctl enable nfs-server && $SUDO_CMD systemctl restart nfs-server" + fi + fi + + + + + #We will backup the existing /etc/exports + #Compare the icp worker ip w/ the existing IP in the /etc/exports file then insert any missing entry (IP) into /etc/exports. + echo "ssh $SSH_USER@$NFS_IP "$SUDO_CMD cp /etc/exports /etc/exports_bak"" + ssh $SSH_USER@$NFS_IP "$SUDO_CMD cp /etc/exports /etc/exports_bak" + export EXPORTS_FILE=`ssh $SSH_USER@$NFS_IP "$SUDO_CMD cat /etc/exports |grep '/exports/smartpages'" | awk '{print $2}' | cut -d'(' -f1` + echo "from exports files: $EXPORTS_FILE" + echo "from k8's : $WORKER_IP1s" + + #if [[ $? == "1" ]]; then + + echo "Inside writting to /etc/exports routine" + echo $WORKER_IP1s + + for i in $WORKER_IP1s + do + + echo $EXPORTS_FILE |grep $i + if [[ $? == "1" ]]; then + echo $i + echo "Cannot find $i in the /etc/exports file....." + echo "Writing '/exports/smartpages "$i"(rw,sync,no_root_squash)' to $NFS_IP/etc/exports file" + + ssh $SSH_USER@$NFS_IP "echo '/exports/smartpages "$i"(rw,sync,no_root_squash)' | $SUDO_CMD tee --append /etc/exports" + else + echo " $i matched" + fi + + done + + + #restart nfs service if available$KUBE_NAME_SPACE/config + if [[ $ICP_VERSION == "3.1.2" ]]; then + ssh $SSH_USER@$NFS_IP "$SUDO_CMD systemctl restart nfs-kernel-server" + fi + if [[ $OCP_VERSION == "3.11" ]]; then + ssh $SSH_USER@$NFS_IP "$SUDO_CMD systemctl restart nfs-server" + fi + + + else + echo -e "\x1B[1;32mPVCCHOICE is not defined. Therefore, you must create the following pvc name: \x1B[0m" + fi # end if of pvc=1 + +} +function calMemoryLimitedDist(){ + + + echo CALLERAPI_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo SETUP_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo OCR_EXTRACTION_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.09 * 1024" | bc)Mi" + echo CLASSIFY_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo PROCESSING_EXTRACTION_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.09 * 1024" | bc)Mi" + echo INTER_PROCESSING_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo POST_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo PDF_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo UTF8_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo REANALYZE_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.045 * 1024" | bc)Mi" + echo UPDATEFILE_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo FRONTEND_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo BACKEND_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + echo MONGO_LIMITED_MEMORY="$(echo "$MONGO_SERVER_MEMORY * 0.6 * 1024" | bc)Mi" + echo MONGO_ADMIN_LIMITED_MEMORY="$(echo "$MONGO_ADMIN_SERVER_MEMORY * 0.6 * 1024" | bc)Mi" + echo RABBITMQ_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo MINIO_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + echo REDIS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + export mongo_memory_value="$(echo "$MONGO_SERVER_MEMORY * 0.6 " | bc)" + export mongo_admin_memory_value="$(echo "$MONGO_ADMIN_SERVER_MEMORY * 0.6 " | bc)" + + + export MONGO_WIREDTIGER_LIMIT="$(echo "($mongo_memory_value -1)*0.5" | bc)" + + if [[ 1 -eq $(echo "$MONGO_WIREDTIGER_LIMIT < 0.25" |bc -l) ]];then + echo MONGO_WIREDTIGER_LIMIT='0.25' + + + else + echo "MONGO_WIREDTIGER_LIMIT=$MONGO_WIREDTIGER_LIMIT" + + fi + +# echo "mongo_admin_memory_value=$mongo_admin_memory_value" + export MONGO_ADMIN_WIREDTIGER_LIMIT="$(echo "($mongo_admin_memory_value -1)*0.5" | bc)" + + if [[ 1 -eq $(echo "$MONGO_ADMIN_WIREDTIGER_LIMIT < 0.25" |bc -l) ]];then + echo MONGO_ADMIN_WIREDTIGER_LIMIT='0.25' + + else + echo "MONGO_ADMIN_WIREDTIGER_LIMIT=$MONGO_ADMIN_WIREDTIGER_LIMIT" + fi + +} + +function calMemoryLimitedShared(){ + echo CALLERAPI_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo SETUP_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo OCR_EXTRACTION_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.09 * 1024" | bc)Mi" + echo CLASSIFY_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo PROCESSING_EXTRACTION_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.09 * 1024" | bc)Mi" + echo INTER_PROCESSING_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo POST_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo PDF_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo UTF8_PROCESS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo REANALYZE_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.045 * 1024" | bc)Mi" + echo UPDATEFILE_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo FRONTEND_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.03 * 1024" | bc)Mi" + echo BACKEND_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + echo MONGO_LIMITED_MEMORY="$(echo "$MONGO_SERVER_MEMORY * 0.1 * 1024" | bc)Mi" + echo MONGO_ADMIN_LIMITED_MEMORY="$(echo "$MONGO_ADMIN_SERVER_MEMORY * 0.1 * 1024" | bc)Mi" + echo RABBITMQ_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.06 * 1024" | bc)Mi" + echo MINIO_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + echo REDIS_LIMITED_MEMORY="$(echo "$SERVER_MEMORY * 0.04 * 1024" | bc)Mi" + export mongo_memory_value="$(echo "$MONGO_SERVER_MEMORY * 0.1" | bc)" + export mongo_admin_memory_value="$(echo "$MONGO_ADMIN_SERVER_MEMORY * 0.1" | bc)" + +# echo "mongo_memory_value=$mongo_memory_value" + export MONGO_WIREDTIGER_LIMIT="$(echo "($mongo_memory_value -1)*0.5" | bc)" + #echo "MONGO_WIREDTIGER_LIMIT=$MONGO_WIREDTIGER_LIMIT" + if [[ 1 -eq $(echo "$MONGO_WIREDTIGER_LIMIT < 0.25" |bc -l) ]];then + echo MONGO_WIREDTIGER_LIMIT='0.25' + + else + echo "MONGO_WIREDTIGER_LIMIT=$MONGO_WIREDTIGER_LIMIT" + fi + +# echo "mongo_admin_memory_value=$mongo_admin_memory_value" + export MONGO_ADMIN_WIREDTIGER_LIMIT="$(echo "($mongo_admin_memory_value -1)*0.5" | bc)" + #echo "MONGO_WIREDTIGER_LIMIT=$MONGO_WIREDTIGER_LIMIT" + if [[ 1 -eq $(echo "$MONGO_WIREDTIGER_LIMIT < 0.25" |bc -l) ]];then + echo MONGO_ADMIN_WIREDTIGER_LIMIT='.25' + else + echo "MONGO_ADMIN_WIREDTIGER_LIMIT=$MONGO_ADMIN_WIREDTIGER_LIMIT" + fi + +} +function calNumOfContainers(){ + if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + export numOfCelery=$(kubectl get nodes --show-labels |grep worker.*celery$KUBE_NAME_SPACE=baca | wc -l) + fi + if [[ $OCP_VERSION == "3.11" ]]; then + export numOfCelery=$(oc get nodes --show-labels |grep compute=true | grep celery$KUBE_NAME_SPACE=baca | wc -l) + fi + echo CELERY_REPLICAS=$numOfCelery + echo NON_CELERY_REPLICAS=$numOfCelery + +} diff --git a/BACA/configuration/common.sh b/BACA/configuration/common.sh new file mode 100644 index 00000000..7cce399e --- /dev/null +++ b/BACA/configuration/common.sh @@ -0,0 +1,27 @@ +SERVER_MEMORY=16 +MONGO_SERVER_MEMORY=16 +MONGO_ADMIN_SERVER_MEMORY=16 +USING_HELM=y +HELM_INIT_BEFORE=n +KUBE_NAME_SPACE=sp +DOCKER_REG_FOR_SERVICES=mycluster.icp:8500/sp +LABEL_NODE=y +CA_WORKERS=172.16.29.200,172.16.29.201 +MONGO_WORKERS=172.16.29.200,172.16.29.201 +MONGO_ADMIN_WORKERS=172.16.29.200,172.16.29.201 +ICP_VERSION=3.1.2 +ICP_USER=admin +ICP_USER_PASSWORD=YWRtaW4K +BXDOMAINNAME=9.30.181.31 +MasterIp=9.30.181.31 +SSH_USER=root +PVCCHOICE=1 +NFS_IP=172.16.29.200 +DATAPVC=sp-data-pvc +LOGPVC=sp-log-pvc +CONFIGPVC=sp-config-pvc +BASE_DB_PWD="cGFzc3cwcmQK" +LDAP=y +LDAP_PASSWORD="R2VuaXVzMQo=" +LDAP_URL=ldap://172.16.194.107 +LDAP_CRT_NAME= \ No newline at end of file diff --git a/BACA/configuration/common_ICP_template.sh b/BACA/configuration/common_ICP_template.sh new file mode 100644 index 00000000..1543328a --- /dev/null +++ b/BACA/configuration/common_ICP_template.sh @@ -0,0 +1,27 @@ +SERVER_MEMORY=16 +MONGO_SERVER_MEMORY=16 +MONGO_ADMIN_SERVER_MEMORY=16 +USING_HELM=y +HELM_INIT_BEFORE=n +KUBE_NAME_SPACE=sp +DOCKER_REG_FOR_SERVICES=mycluster.icp:8500/sp +LABEL_NODE=y +CA_WORKERS= +MONGO_WORKERS= +MONGO_ADMIN_WORKERS= +ICP_VERSION=3.1.2 +ICP_USER=admin +ICP_USER_PASSWORD=YWRtaW4K +BXDOMAINNAME= +MasterIp= +SSH_USER=root +PVCCHOICE=1 +NFS_IP= +DATAPVC=sp-data-pvc +LOGPVC=sp-log-pvc +CONFIGPVC=sp-config-pvc +BASE_DB_PWD= +LDAP= +LDAP_PASSWORD= +LDAP_URL=ldap://172.16.194.107 +LDAP_CRT_NAME= \ No newline at end of file diff --git a/BACA/configuration/common_OCP_template.sh b/BACA/configuration/common_OCP_template.sh new file mode 100644 index 00000000..ec105772 --- /dev/null +++ b/BACA/configuration/common_OCP_template.sh @@ -0,0 +1,27 @@ +SERVER_MEMORY=16 +MONGO_SERVER_MEMORY=16 +MONGO_ADMIN_SERVER_MEMORY=16 +USING_HELM=y +HELM_INIT_BEFORE=n +KUBE_NAME_SPACE=sp +DOCKER_REG_FOR_SERVICES=docker-registry.default.svc:5000/sp +LABEL_NODE=y +CA_WORKERS= +MONGO_WORKERS= +MONGO_ADMIN_WORKERS= +OCP_VERSION=3.11 +OCP_USER=admin +OCP_USER_PASSWORD=YWRtaW4K +BXDOMAINNAME= +MasterIp= +SSH_USER=root +PVCCHOICE=1 +NFS_IP= +DATAPVC=sp-data-pvc +LOGPVC=sp-log-pvc +CONFIGPVC=sp-config-pvc +BASE_DB_PWD= +LDAP=y +LDAP_PASSWORD= +LDAP_URL=ldap://172.16.194.107 +LDAP_CRT_NAME= \ No newline at end of file diff --git a/BACA/configuration/createSSLCert.sh b/BACA/configuration/createSSLCert.sh new file mode 100644 index 00000000..33908af9 --- /dev/null +++ b/BACA/configuration/createSSLCert.sh @@ -0,0 +1,179 @@ +#!/usr/bin/env bash + +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + + +function createSSLCert() { + rm -r *.crt *.pem *.key || true + + echo -e "\x1B[1;32mAbout to create a self-signed SSL cert for ingress, celery, mongo, redis, rabbitmq....\x1B[0m" + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/tls.key -out $PWD/tls.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/tls.key -out $PWD/tls.crt -subj "/CN=127.0.0.1" + cat $PWD/tls.key $PWD/tls.crt > $PWD/tls.pem + + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/celery.key -out $PWD/celery.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/celery.key -out $PWD/celery.crt -subj "/CN=127.0.0.1" + cat $PWD/celery.key $PWD/celery.crt > $PWD/celery.pem + + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/mongo.key -out $PWD/mongo.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/mongo.key -out $PWD/mongo.crt -subj "/CN=127.0.0.1" + cat $PWD/mongo.key $PWD/mongo.crt > $PWD/mongo.pem + + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/public.crt -out $PWD/public.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/private.key -out $PWD/public.crt -subj "/CN=127.0.0.1" + + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/redis.key -out $PWD/redis.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/redis.key -out $PWD/redis.crt -subj "/CN=127.0.0.1" + cat $PWD/redis.key $PWD/redis.crt > $PWD/redis.pem + echo "changing file permissions for redis.key ..." + chmod 600 $PWD/redis.key + + echo "openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/rabbitmq.key -out $PWD/rabbitmq.crt -subj "/CN=127.0.0.1" " + openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $PWD/rabbitmq.key -out $PWD/rabbitmq.crt -subj "/CN=127.0.0.1" + cat $PWD/rabbitmq.key $PWD/rabbitmq.crt > $PWD/rabbitmq.pem + + +} +function createSecret (){ + + echo -e "\x1B[1;32mAbout to create a secrets for ingress, celery, mongo, redis, rabbitmq....\x1B[0m" + echo "kubectl -n $KUBE_NAME_SPACE create secret tls baca-ingress-secret --key $PWD/tls.key --cert $PWD/tls.crt" + kubectl -n $KUBE_NAME_SPACE create secret tls baca-ingress-secret --key $PWD/tls.key --cert $PWD/tls.crt \ + --dry-run -o yaml | kubectl apply -f - + +#TODO: Place holder for DB2 cert. Upstream process MUST put cert in the parent dir. +# echo "kubectl -n $KUBE_NAME_SPACE create secret tls spdb2secret --key $PWD/rabbitmq.key --cert $PWD/rabbitmq.crt" +# kubectl -n $KUBE_NAME_SPACE create secret tls spdb2secret$KUBE_NAME_SPACE --key $PWD/rabbitmq.key --cert $PWD/rabbitmq.crt +# END OF DB2 + if [[ $LDAP_URL =~ ^'ldaps' && ! -z $LDAP_CRT_NAME ]]; then + echo "kubectl -n $KUBE_NAME_SPACE create secret generic with LDAP certs " + kubectl -n $KUBE_NAME_SPACE create secret generic baca-secrets$KUBE_NAME_SPACE \ + --from-file=$PWD/celery.pem --from-file=$PWD/celery.crt --from-file=$PWD/celery.key \ + --from-file=$PWD/mongo.pem --from-file=$PWD/mongo.crt --from-file=$PWD/mongo.key \ + --from-file=$PWD/public.crt --from-file=$PWD/private.key \ + --from-file=$PWD/redis.pem --from-file=$PWD/redis.key --from-file=$PWD/redis.crt \ + --from-file=$PWD/rabbitmq.pem --from-file=$PWD/rabbitmq.key --from-file=$PWD/rabbitmq.crt \ + --from-file=$PWD/$LDAP_CRT_NAME \ + --dry-run -o yaml | kubectl apply -f - + else + echo "kubectl -n $KUBE_NAME_SPACE create secret generic " + kubectl -n $KUBE_NAME_SPACE create secret generic baca-secrets$KUBE_NAME_SPACE \ + --from-file=$PWD/celery.pem --from-file=$PWD/celery.crt --from-file=$PWD/celery.key \ + --from-file=$PWD/mongo.pem --from-file=$PWD/mongo.crt --from-file=$PWD/mongo.key \ + --from-file=$PWD/public.crt --from-file=$PWD/private.key \ + --from-file=$PWD/redis.pem --from-file=$PWD/redis.key --from-file=$PWD/redis.crt \ + --from-file=$PWD/rabbitmq.pem --from-file=$PWD/rabbitmq.key --from-file=$PWD/rabbitmq.crt \ + --dry-run -o yaml | kubectl apply -f - + fi + + + + +} +function createMongoSecrets (){ +echo -e "\x1B[1;32mAbout to create mongo Secrets....\x1B[0m" +if [[ -z "$MONGOADMINENTRYPASSWORD" && -z "$MONGOADMINUSER" && -z "$MONGOADMINPASSWORD" ]]; then + echo -e "\x1B[1;32mCreating mongo admin Secrets using random values....\x1B[0m" + export MONGOADMINENTRYPASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) + export MONGOADMINUSER=$(openssl rand -base64 12 | tr -d "=+/" | cut -c1-29) + export MONGOADMINPASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) + + kubectl -n $KUBE_NAME_SPACE create secret generic baca-mongo-admin \ + --from-literal=MONGOADMINENTRYPASSWORD="$MONGOADMINENTRYPASSWORD" \ + --from-literal=MONGOADMINUSER="$MONGOADMINUSER" \ + --from-literal=MONGOADMINPASSWORD="$MONGOADMINPASSWORD" \ + --dry-run -o yaml | kubectl apply -f - +else + echo -e "\x1B[1;32mCreating mongo admin Secret based on custom values for MONGOADMINENTRYPASSWORD, MONGOADMINUSER, MONGOADMINPASSWORD\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create secret generic mongo-admin \ + --from-literal=MONGOADMINENTRYPASSWORD="$MONGOADMINENTRYPASSWORD" \ + --from-literal=MONGOADMINUSER="$MONGOADMINUSER" \ + --from-literal=MONGOADMINPASSWORD="$MONGOADMINPASSWORD" \ + --dry-run -o yaml | kubectl apply -f - +fi + +if [[ -z "$MONGOENTRYPASSWORD" && -z "$MONGOUSER" && -z "$MONGOPASSWORD" ]] ; then + echo -e "\x1B[1;32mCreating mongo Secrets using random values....\x1B[0m" + export MONGOENTRYPASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) + export MONGOUSER=$(openssl rand -base64 12 | tr -d "=+/" | cut -c1-29) + export MONGOPASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) + kubectl -n $KUBE_NAME_SPACE create secret generic baca-mongo \ + --from-literal=MONGOENTRYPASSWORD="$MONGOENTRYPASSWORD" \ + --from-literal=MONGOUSER="$MONGOUSER" \ + --from-literal=MONGOPASSWORD="$MONGOPASSWORD" \ + --dry-run -o yaml | kubectl apply -f - +else + echo -e "\x1B[1;32mCreating mongo Secret based on custom values for MONGOENTRYPASSWORD, MONGOUSER, MONGOPASSWORD\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create secret generic mongo \ + --from-literal=MONGOENTRYPASSWORD="$MONGOENTRYPASSWORD" \ + --from-literal=MONGOUSER="$MONGOUSER" \ + --from-literal=MONGOPASSWORD="$MONGOPASSWORD" \ + --dry-run -o yaml | kubectl apply -f - +fi + +} +function createLDAPSecret(){ + +if [[ $LDAP == "y" && $LDAP_PASSWORD != "" ]]; then + echo -e "\x1B[1;32mAbout to create LDAP Secret....\x1B[0m" + echo -e "\x1B[1;32mCreating LDAP Secret....\x1B[0m" + export LDAP_PASSWORD_DECODE=$(echo $LDAP_PASSWORD | base64 --decode) + kubectl -n $KUBE_NAME_SPACE create secret generic baca-ldap \ + --from-literal=LDAP_PASSWORD="$LDAP_PASSWORD_DECODE" \ + --dry-run -o yaml | kubectl apply -f - +fi + +} +function createBaseDbSecret(){ +echo -e "\x1B[1;32mAbout to create secret for Base DB....\x1B[0m" +if [[ -z $BASE_DB_PWD ]]; then + echo -e "\x1B[1;32m Cannot find BASED_DB_PWD from common.sh..Exiting !!\x1B[0m" + exit 1 +else + echo -e "\x1B[1;32mCreating Base DB secret....\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create secret generic baca-basedb \ + --from-literal=BASE_DB_PWD="$BASE_DB_PWD" \ + --dry-run -o yaml | kubectl apply -f - +fi +} +function createMinioSecret(){ +echo -e "\x1B[1;32mAbout to create secret for Minio....\x1B[0m" + export accesskey=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) + export secretkey=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) + echo -e "\x1B[1;32mCreating minio secret....\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create secret generic baca-minio \ + --from-literal=accesskey="$accesskey" \ + --from-literal=secretkey="$secretkey" \ + --dry-run -o yaml | kubectl apply -f - +} + +function createRabbitmaSecret(){ +echo -e "\x1B[1;32mAbout to create secret for RabbitMQ....\x1B[0m" + +export rabbitmq_admin_password=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) +export rabbitmq_erlang_cookie=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-29) +export rabbitmq_password=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) +export rabbitmq_user=$(openssl rand -base64 6 | tr -d "=+/" | cut -c1-29) + +kubectl -n $KUBE_NAME_SPACE create secret generic baca-rabbitmq \ +--from-literal=rabbitmq-admin-password="$rabbitmq_admin_password" \ +--from-literal=rabbitmq-erlang-cookie="$rabbitmq_erlang_cookie" \ +--from-literal=rabbitmq-password="$rabbitmq_password" \ +--from-literal=rabbitmq-user="$rabbitmq_user" \ +--dry-run -o yaml | kubectl apply -f - + + +} + +function createRedisSecret(){ +echo -e "\x1B[1;32mAbout to create secret for Redis....\x1B[0m" +export redis_password=$(openssl rand -base64 10 | tr -d "=+/" | cut -c1-29) +kubectl -n $KUBE_NAME_SPACE create secret generic baca-redis \ +--from-literal=redis-password="$redis_password" \ +--dry-run -o yaml | kubectl apply -f - +} \ No newline at end of file diff --git a/BACA/configuration/delete_ContentAnalyzer.sh b/BACA/configuration/delete_ContentAnalyzer.sh new file mode 100755 index 00000000..e5d9ec19 --- /dev/null +++ b/BACA/configuration/delete_ContentAnalyzer.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +. ./common.sh +. ./bashfunctions.sh + +today=`date +%Y-%m-%d.%H:%M:%S` +echo $today + +if [ -z "$KUBE_NAME_SPACE" ] +then + echo -e "\x1B[1;31mThe KUBE_NAME_SPACE is not set. The script will exit. To delete everything in the IBM Business Automation Content Analyzer namespace, set the KUBE_NAME_SPACE variable to the name of the namespace where IBM Business Automation Content Analyzer is deployed and rerun. :\x1B[0m" + exit +fi + +if [ $KUBE_NAME_SPACE == "default" ] +then + echo -e "\x1B[1;31mThe KUBE_NAME_SPACE is set to default. The script will exit. We cannot delete all resources from the default namespace. To delete everything in the IBM Business Automation Content Analyzer namespace, set the KUBE_NAME_SPACE variable to the name of the namespace where IBM Business Automation Content Analyzer is deployed and rerun. :\x1B[0m" + exit +fi + +# confirm they want to delete +echo +echo -e "\x1B[1;31mThis script will DELETE all the resources, including services, deployments, and pvc, in the namespace : $KUBE_NAME_SPACE . And then delete the namespace $KUBE_NAME_SPACE \x1B[0m" +echo +echo -e "\x1B[1;31mPlease only execute if you are SURE you want to DELETE everything from your namespace $KUBE_NAME_SPACE . \x1B[0m" +echo +echo -e "\x1B[1;31mWARNING: Please note that on ICP this script may not be able to successfully remove all the pods. The pods and the namespace might be left in 'terminating' state . \x1B[0m" +echo + +while [[ $deleteconfirm != "y" && $deleteconfirm != "n" && $deleteconfirm != "yes" && $deleteconfirm != "no" ]] # While deleteconfirm is not y or n... +do + echo -e "\x1B[1;31mWould you like to continue (Y/N):\x1B[0m" + read deleteconfirm + deleteconfirm=$(echo "$deleteconfirm" | tr '[:upper:]' '[:lower:]') +done + + +if [[ $deleteconfirm == "n" || $deleteconfirm == "no" ]] +then + exit +fi + +#Logon to kubectl +loginToCluster + + +echo "----- Deleting Celery ..." +cwd=$(pwd) + +#export HELM="./helm-chart/baca-celery" +#export HELM1="./helm-chart/baca-userportal" +#echo +#echo "cd ${HELM}" +#cd ${HELM} + +echo +if [[ $USING_HELM == "y" || $USING_HELM == "yes" ]]; then + if [[ $ICP_VERSION == "3.1.2" ]]; then + echo "helm delete celery${KUBE_NAME_SPACE} --purge --tls" + helm delete celery${KUBE_NAME_SPACE} --purge --tls + fi + if [[ $OCP_VERSION == "3.11" ]]; then + echo "helm delete celery${KUBE_NAME_SPACE} --purge --tiller-namespace tiller" + helm delete celery${KUBE_NAME_SPACE} --purge --tiller-namespace tiller + fi +fi +echo +echo "sleep for 120 secs to wait for celery pods to complete termination...." + +sleep 120 +# +#echo +#echo "return to previous directory: ${cwd}" +#cd ${cwd} + +echo ----- Deleting all BACA resources from namespace : $KUBE_NAME_SPACE +set +e +kubectl delete -n $KUBE_NAME_SPACE --all deploy,svc,pvc,pods --force --grace-period=0 +kubectl delete -n $KUBE_NAME_SPACE secret baca-ingress-secret baca-secrets$KUBE_NAME_SPACE baca-userportal-ingress-secret baca-mongo baca-mongo-admin baca-ldap baca-basedb baca-minio baca-rabbitmq baca-redis +if [[ $ICP_VERSION == "3.1.2" ]]; then + kubectl delete -n $KUBE_NAME_SPACE rolebinding baca-clusterrole-rolebinding + kubectl delete -n $KUBE_NAME_SPACE clusterrole baca-anyuid-clusterrole + kubectl delete -n $KUBE_NAME_SPACE psp baca-anyuid-psp +fi +set -e + + + + +# only delete PVC for internal/dev env. +if [[ $PVCCHOICE == "1" ]]; then + echo ---- Deleting persistent volumes. + count=`kubectl -n $KUBE_NAME_SPACE get pv | awk {'print $1'}| grep ^sp-.*${KUBE_NAME_SPACE}$|wc | awk {'print $1'}` + if [[ $count != "0" ]]; then + kubectl -n $KUBE_NAME_SPACE delete pv `kubectl -n $KUBE_NAME_SPACE get pv | awk {'print $1'}| grep ^sp-.*${KUBE_NAME_SPACE}$` + fi + echo ---Clean up all pvc subdirectories. You need to run setup.sh or init_deployment.sh again to have these directories re-created. +# ssh root@$NFS_IP rm -rf /exports/smartpages/$KUBE_NAME_SPACE/* + if [ -z "$SSH_USER" ]; then + export SSH_USER="root" + fi + + if [ "$SSH_USER" == "root" ]; then + export SUDO_CMD="" + else + export SUDO_CMD="sudo " + fi + ssh $SSH_USER@$NFS_IP "$SUDO_CMD rm -rf /exports/smartpages/$KUBE_NAME_SPACE/*" + + +fi + diff --git a/BACA/configuration/generateMemoryValues.sh b/BACA/configuration/generateMemoryValues.sh new file mode 100755 index 00000000..0e6cf3ea --- /dev/null +++ b/BACA/configuration/generateMemoryValues.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# +. ./bashfunctions.sh +. ./common.sh + +echo -e "\x1B[1;32mThis will generate recommended values for setting memory resources in Business Automation Content Analyzer (CA) product.\x1B[0m" +echo -e "\x1B[1;32mUse \"distributed\" flag when you have an distribute environment where mongo DB, mongo-admin DB, and CA processing components are their own nodes. Otherwise, use \"limited\" flag \x1B[0m" +echo -e "\x1B[1;32mThese values may need to be adjusted depending on your workload\x1B[0m" + + +if [[ -z $1 ]]; then + echo -e "\x1B[1;31mYou need to pass in either \"distributed\" or \"limited\" to use this script\x1B[0m" + exit 1 +fi + + +if [[ $1 == "distributed" ]]; then + calMemoryLimitedDist + calNumOfContainers +elif [[ $1 == "limited" ]]; then + calMemoryLimitedShared + calNumOfContainers +fi \ No newline at end of file diff --git a/BACA/configuration/init_deployments.sh b/BACA/configuration/init_deployments.sh new file mode 100755 index 00000000..720ccbd4 --- /dev/null +++ b/BACA/configuration/init_deployments.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env bash +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +. ./common.sh +. ./bashfunctions.sh +. ./createSSLCert.sh + +# Login (if necessary) +loginToCluster + +#Creating psp and clusterrole for BACA + + + +# Create Kube namespace +echo "\x1B[1;32mCreating $KUBE_NAME_SPACE namespace \x1B[0m" +if [[ $ICP_VERSION == "3.1.0" || $ICP_VERSION == "3.1.2" ]]; then + kubectl create namespace $KUBE_NAME_SPACE +fi + +if [[ $OCP_VERSION == "3.11" ]]; then + oc new-project $KUBE_NAME_SPACE + oc project $KUBE_NAME_SPACE +fi + +if [[ $ICP_VERSION == "3.1.2" ]]; then + checkPsp=$(kubectl get psp |grep baca |wc -l) + + if [[ $checkPsp == "0" ]]; then + + echo -e "\x1B[1;32mCreating psp and clusterrole for BACA\x1B[0m" + kubectl -n $KUBE_NAME_SPACE apply -f ./baca-psp.yaml + echo -e "\x1B[1;32mCreating rolebinding for BACA\x1B[0m" + kubectl -n $KUBE_NAME_SPACE create rolebinding baca-clusterrole-rolebinding --clusterrole=baca-anyuid-clusterrole --group=system:serviceaccounts:$KUBE_NAME_SPACE + + fi +fi + +if [[ $OCP_VERSION == "3.11" ]]; then + # Allows images to run as the root UID if no USER in specified in the Dockerfile. + oc adm policy add-scc-to-group anyuid system:authenticated +fi + +#label nodes +if [[ ($LABEL_NODE == "y" || $LABEL_NODE == "Y") ]]; then + customLabelNodes +else + echo -e "\x1B[1;32mLABEL_NODE and LABEL_NODE_BY_PARAM parameters are not defined. Therefore, you must label your nodes accordingly\x1B[0m" +fi + + +# Create nfs, and pv/pvc +getNFSServer + + +#Create SSL cert and secret +createSSLCert +createSecret +createMongoSecrets +createLDAPSecret +createBaseDbSecret +createMinioSecret +createRabbitmaSecret +createRedisSecret +if [[ $PVCCHOICE == "1" ]]; then + echo -e "\x1B[1;32mSetting up PV/PVC storage\x1B[0m" + ./init_persistent.sh +fi + + +#Helm client download and initialization +if [[ $USING_HELM == "y" || $USING_HELM == "yes" ]]; then + if [[ -z $HELM_INIT_BEFORE || $HELM_INIT_BEFORE == "n" || $HELM_INIT_BEFORE == "no" ]]; then + + # setup helm client + downloadHelmClient + + # setup helm on cluster + helmSetup + + # ensure tiller-deploy is successful on cluster + checkHelm + fi +fi + diff --git a/BACA/configuration/init_persistent.sh b/BACA/configuration/init_persistent.sh new file mode 100755 index 00000000..a731d486 --- /dev/null +++ b/BACA/configuration/init_persistent.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +. ./common.sh + + +cat sppersistent.yaml | sed s/\$NFS_IP/"$NFS_IP"/ | sed s/\$KUBE_NAME_SPACE/"$KUBE_NAME_SPACE"/ | sed s/\$DATAPVC/"$DATAPVC"/ | sed s/\$LOGPVC/"$LOGPVC"/ | sed s/\$CONFIGPVC/"$CONFIGPVC"/ |kubectl apply -f - + diff --git a/BACA/configuration/renewCert.sh b/BACA/configuration/renewCert.sh new file mode 100644 index 00000000..dbaf4e47 --- /dev/null +++ b/BACA/configuration/renewCert.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2018 All Rights Reserved +# + +. ./common.sh +. ./bashfunctions.sh +. ./createSSLCert.sh + + +today=`date +%Y-%m-%d.%H:%M:%S` +echo $today + + +# confirm they want to delete +echo +echo -e "\x1B[1;31mThis script will RENEW all the certificates for IBM Business Automation Content Analyzer in $KUBE_NAME_SPACE \x1B[0m" +echo +echo -e "\x1B[1;31mThe script will delete ALL the IBM Business Automation Content Analyzer pods in $KUBE_NAME_SPACE. Therefore, you must make sure to backup your ontology,etc... and make sure there are no activities on the system \x1B[0m" +echo +ls -al *.pem > /dev/null +if [[ $? == "0" ]]; then + echo -e "\x1B[1;31mBased on the PEM files in the $PWD, the expirations date for them are: \x1B[0m" + + for pem in ./*.pem; do + printf '%s: %s\n' \ + "$pem expries on" \ + "$(date --date="$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" --iso-8601)" + done +else + echo -e "\x1B[1;31mWe could not find any existing PMR files in $PWD \x1B[0m" +fi + +while [[ $renewConfirm != "y" && $renewConfirm != "n" && $renewConfirm != "yes" && $renewConfirm != "no" ]] # While deleteconfirm is not y or n... +do + echo -e "\x1B[1;31mWould you like to continue (Y/N):\x1B[0m" + read renewConfirm + renewConfirm=$(echo "$renewConfirm" | tr '[:upper:]' '[:lower:]') +done + + +if [[ $renewConfirm == "n" || $renewConfirm == "no" ]] +then + exit +else + loginToCluster + createSSLCert + createSecret + echo -e "\x1B[1;31m Deleting all Content Analyzer's pods ... " + kubectl -n sp delete --all pods --force --grace-period=0 +fi \ No newline at end of file diff --git a/BACA/configuration/sppersistent.yaml b/BACA/configuration/sppersistent.yaml new file mode 100644 index 00000000..03bfc6d3 --- /dev/null +++ b/BACA/configuration/sppersistent.yaml @@ -0,0 +1,83 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-data-pv-$KUBE_NAME_SPACE + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 60Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/data + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: $DATAPVC + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 60Gi + volumeName: sp-data-pv-$KUBE_NAME_SPACE +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-log-pv-$KUBE_NAME_SPACE + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 35Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/logs + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: $LOGPVC + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 35Gi + volumeName: sp-log-pv-$KUBE_NAME_SPACE +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: sp-config-pv-$KUBE_NAME_SPACE + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 5Gi + nfs: + path: /exports/smartpages/$KUBE_NAME_SPACE/config + server: $NFS_IP + persistentVolumeReclaimPolicy: Retain +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: $CONFIGPVC + namespace: $KUBE_NAME_SPACE +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 5Gi + volumeName: sp-config-pv-$KUBE_NAME_SPACE \ No newline at end of file diff --git a/BACA/docs/DB2_setup.md b/BACA/docs/DB2_setup.md new file mode 100644 index 00000000..e4a67dba --- /dev/null +++ b/BACA/docs/DB2_setup.md @@ -0,0 +1,40 @@ +## Creating BaseDB and TenantDB on Db2 + +### Create Content Analyzer BaseDB +After the configuration/DB2 directory has been copied to the Db2 server, run the CreateBaseDB.sh script from the command prompt. +>Note: Run the following scripts with a Db2 user such as db2inst1 who has 'su' privilege. + +#### Procedure: +As prompted, enter the following data: + +- Enter the name of the IBM Business Automation Content Analyzer Base database (enter a unique name of 8 characters or less and no special characters. for example, CABASEDB) +- Enter the name of database user – (enter a database user name that will have full permissions to the base database) – this can be a new or existing Db2 user +- Enter the password for the above user – enter a password each time when prompted. If this is an existing user, this prompt will be skipped + +### Create Content Analyzer Tenant DB +Create the Content Analyzer Tenant DB and add it to the basedb by running the AddTenant.sh script on the Db2 server. + +#### Procedure + +As prompted, enter the following: + - Enter the tenant ID – (an alphanumeric value that will be used by the user to reference the database) + - Enter the name of the IBM Business Automation Content Analyzer tenant database to create - (an alphanumeric value for the actual database name in Db2) + - Enter the host/IP of the database server – (the IP address of the database server) + - Enter the port of the database server – Press Enter to accept default of 50000 (or enter the port number if a different port is required) + - Do you want this script to create a database user – y (for yes) + - Enter the name of database user – (this will be the tenant database user - enter an alphanumeric username with no special characters) + - Enter the password for the user – (enter an alphanumeric password each time when prompted) + - Enter the tenant ontology name – Press Enter to accept 'default' (or enter a name to reference the ontology by if desired) + - Enter the name of the IBM Business Automation Content Analyzer base database (enter the database name given when creating the base database) + - Enter the name of the database user for the IBM Business Automation Content Analyzer base database (enter the base username given when creating the base database) +The remaining values will be used to set up the initial user in IBM Business Automation Content Analyzer + - Enter the company name (enter your company name) + - Enter the first name (enter your first name) + - Enter the last name (enter your last name) + - Enter a valid email address (enter your email address) + - Enter the login name (if using LDAP authentication, enter your username as it appears in the LDAP server) + - Would you like to continue (y for yes) + +Save the TenantID and Ontology name for the later steps. + +Back to prerequisite [Overview](../configuration/README.md) diff --git a/BACA/docs/common_sh_values.md b/BACA/docs/common_sh_values.md new file mode 100644 index 00000000..54b0991e --- /dev/null +++ b/BACA/docs/common_sh_values.md @@ -0,0 +1,47 @@ +## Common.sh parameters + +Review common.sh as a reference sample then copy common_ICP_template.sh or common_OCP_template.sh to common.sh based on your platform. + +Note Since the common.sh contains several passwords, you need to protect it by assigning appropriate permission such as read-only. + +#### common.sh parameters +|Description|Possible values| +|-----------|-----------------------| +SERVER_MEMORY| The amount of memory for Content Analyzer worker nodes 16,32, etc. Required: Yes +MONGO_SERVER_MEMORY| The amount of memory for Content Analyzer mongo node 16,32, etc. Required: Yes +MONGO_ADMIN_SERVER_MEMORY| The amount of memory for Content Analyzer mongoadmin node 16,32, etc. Required: Yes +USING_HELM|Indicate if you want to deploy Content Analyzer with Helm Chart. If given value is "n", will deploy Content Analyzer with Kubernates YAML files "y" or "n". Required: Yes +HELM_INIT_BEFORE|This field is used for installing Helm client for Content Analyzer helm install. Set it to "n" if you are not installing Content Analyzer using Helm. "y" or "n". Required: Yes +ICP_VERSION or OCP_VERSION|ICP version is 3.1.2. OCP version is 3.11 "3.1.2" or "3.11". Required: Yes +KUBE_NAME_SPACE| The K8's namespace that Content Analyzer will be installed on. Any valid namespace. Required: Yes +DOCKER_REG_FOR_SERVICES|This is the Content Analyzer domain used in ICP cluster, docker registry port and your namespace. For example: mycluster.icp:8500/sp where mycluster.icp is the Content Analyzer domain, 8500 is the docker registry port and sp is the namespace you want to install Content Analyzer on. Example:mycluster.icp:8500/sp. Required: Yes +LABEL_NODE |-Content Analyzer (CA) processing components will be deployed on node(s) with label celery=baca
-mongodb will be deployed on node with label mongo=baca
-mongoadmindb will be deployed on node with label mongoadmin=baca
Example: The nodes will have these labels where the namespace is "sp":
-celerysp=baca
-mongosp=baca
-mongoadminsp=baca
You must manually label your nodes per the above guideline if the value of LABEL_NODE is "n". "y" or "n". Required: Yes +CA_WORKERS |A list of comma separated IP address (ICP) or host names (Openshift) of worker nodes to be labeled as "celery=baca". NOTE: You can share the nodes/IP if you have a small cluster for development purposes. Required if LABEL_NODE = "y" +MONGO_WORKERS|A list of comma separated IP address (ICP) or host names (Openshift) of worker nodes to be labeled as "mongo=baca". NOTE: You can share the nodes/IP if you have a small cluster for development purposes. Required if LABEL_NODE = "y" +MONGO_ADMIN_WORKERS|A list of comma separated IP address (ICP) or host names (Openshift) of worker nodes to be labeled as "mongoadmin=baca". NOTE: You can share the nodes/IP if you have a small cluster for development purposes. Required if LABEL_NODE = "y" +ICP_USER or OCP_USER|ICP or OCP username with enough permission to deploy Content Analyzer. Required: Yes +ICP_USER_PASSWORD or OCP_USER_PASSWORD|ICP's or OCP's username password. Must be encoded with base 64. Required: Yes +BXDOMAINNAME|IP address of your ICP's proxy node if you are using ICP. IP address of your OCP's infra node if you are using OCP. Required: Yes +MasterIp|IP address of your ICP's or OCP master node. Required: Yes +PVCCHOICE|Whether to have script create PV/PVC for Content Analyzer. PVCCHOICE=1 means script will create directories. See note below table for more information. Default 1. Required: yes +SSH_USER|User for the script to SSH into the NFS server (NFS_IP) to create the necessary folders. This user must have "sudo" privilege. Not required if you create PV/PVC manually. +NFS_IP|NFS Server IP address. Not required if you create PV/PVC manually. +DATAPVC|Name of the data pvc. If you use a different name you must change it in the values.yaml. Default: sp-data-pvc. Required: Yes +LOGPVC|Name of your log pvc. If you use a different name you must change it in the values.yaml sp-log-pvc. Required: Yes +CONFIGPVC|Name of your config pvc. If you use a different name you must change it in the values.yaml sp-log-pvc. Required: Yes +BASE_DB_PWD|This is the base-64 encoded Content Analyzer base database password. Required: Yes +LDAP|Indicate if you want to integrate Content Analyzer with external LDAP "y" or "n". Required: Yes +LDAP_PASSWORD|This is the base-64 encoded Content Analyzer base database password for the LDAP bind user. Required: Yes (if LDAP) +LDAP_URL|LDAP URL such as ldap://192.168.10.10 for non SSL. For ssl, you can use ldaps://192.168.10.10. Required: Yes (if LDAP) +LDAP_CRT_NAME|The name of the LDAP's server client certificate when using 'ldaps' in the LDAP_URL. For more information on how to generate the required certificate, refer to the LDAP vendor documentation. + +If you select PVCCHOICE=1, the script will perform the following tasks: +1) create the following directories on the NFS server: + - /exports/smartpages//{config,data,logs} + - /exports/smartpages//data/{mongo,mongoadmin} + - /exports/smartpages//config/backend + - /exports/smartpages//logs/{backend,frontend,callerapi,processing-extraction,pdfprocess,setup,interprocessing,classifyprocess-classify,ocr-extraction,postprocessing,reanalyze,updatefiledetail,minio,redis,rabbitmq,mongo,mongoadmin,utf8process}" +2) Change the owner on all folders to 51000:51001 +3) Append all the worker's IP to the /etc/exports file on the NFS server. + +Back to [Init_Deployment](init_deployment.md) \ No newline at end of file diff --git a/BACA/docs/init_deployment.md b/BACA/docs/init_deployment.md new file mode 100644 index 00000000..1632159c --- /dev/null +++ b/BACA/docs/init_deployment.md @@ -0,0 +1,38 @@ +## Create PVs, PVCs, certificates and secrets using init_deployment.sh + +To use the init_deployment.sh script to create preqrequisites: +1) Populate the common.sh file with appropriate values based on the instructions in [common.sh values](./common_sh_values.md) +2) Run the init_deployment.sh script to create objects based on common.sh values +3) Verify the objects were created by running the following commands: + Check pvcs + ```console + # kubectl -n sp get pvc + NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE + sp-config-pvc Bound sp-config-pv-sp 5Gi RWX 4d + sp-data-pvc Bound sp-data-pv-sp 60Gi RWX 4d + sp-log-pvc Bound sp-log-pv-sp 35Gi RWX 4d + ``` + and verify that 3 PVCs were created + + Check secrets + ```console + # kubectl -n sp get secrets + NAME TYPE DATA AGE + baca-basedb Opaque 1 4d + baca-ingress-secret kubernetes.io/tls 2 4d + baca-ldap Opaque 1 4d + baca-minio Opaque 2 4d + baca-mongo Opaque 3 4d + baca-mongo-admin Opaque 3 4d + baca-rabbitmq Opaque 4 4d + baca-redis Opaque 1 4d + baca-secretssp Opaque 14 4d + + ``` + and verify that 9 secrets were created (might only be 7 if not using LDAP or ingress) +4) Run `./generateMemoryValues.sh ` or .`/generateMemoryValues.sh ` + >Note For smaller system (5 worker-nodes or less) where the mongo database pods will be on the same worker node as other pods, use limited option. + + Copy these values for replacement in the values.yaml file if you want to deploy CA using Helm chart, or replacing these values in the ca-deploy.yml file if you want to deploy CA using kubernetes YAML files. + + Back to [Overview](../configuration/README.md) diff --git a/BACA/docs/post-deployment.md b/BACA/docs/post-deployment.md new file mode 100644 index 00000000..f9054f71 --- /dev/null +++ b/BACA/docs/post-deployment.md @@ -0,0 +1,79 @@ +## Post Deployment steps for non-ingress setup (Option 1) + +Since OpenShift's router does not support URL rewriting, there are some steps necessary post-deployment to enable accessing +IBM Business Automation Content Analyzer via the node ports exposed by the services. Or if you do not want to use path based ingress on ICP, follow the same steps. + +###### Once deployment is started: + +To find the node port for the backend service, execute: +```console +# kubectl get svc spbackend +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +spbackend NodePort 172.1.1.1 8080:30437/TCP 19h +``` +In the above example, the node port is 30437 +1) Execute: `kubectl edit deploy spfrontend` +2) Look for the BACKEND_PORT environment variable and add the value from the previous step in quotes: + for eaxmple, + `- name: BACKEND_HOST` +   `value: myopenshift1.com` + `- name: BACKEND_PROTOCOL` +   `value: https` + **`- name: BACKEND_PORT` +   `value: "30437"`** +3) Ensure that the BACKEND_PATH and FRONTEND_PATH variables are blank (for example, no values) + for eaxmple, + ` - name: BACKEND_PATH` + `- name: FRONTEND_PATH` + `- name: FRONTEND_HOST` +   `value: myopenshift1.com` + +4) Save the changes. This should cause the spfrontend pods to restart. +5) Look at the service list again and note the node port of spfrontend service (for eaxmple, `kubectl get svc spfrontend`). +6) Access Content Analyzer using the URL: `https://:/?tid=&ont= ` + (tenant id and ontology defined when adding tenant to base Db2 database) + + +## Post Deployment steps for OpenShift route setup (Option 2) + +You can also deploy IBM Business Automation Content Analyzer using an OpenShift route as the ingress point to expose the frontend and backend services via an externally-reachable, unique hostname such www.backend.example.com and www.frontend.example.com. +A defined route and the endpoints identified by its service can be consumed by a router to provide named connectivity that allows external clients to reach your applications. + +Run the command below to create appropriate routes for the services. + +###### Once deployment is started: + +1) To create a route for the frontend service, execute: + ```console + # oc create route passthrough --insecure-policy=Redirect --service=spfrontend --hostname= + ``` + > **Sample**: oc create route passthrough spfrontend-route --insecure-policy=Redirect --service=spfrontend --hostname=www.ca.frontendsp + +2) To create a route for the backend service, execute: + ```console + # oc create route passthrough --insecure-policy=Redirect --service=spbackend --hostname= + ``` + > **Sample**: oc create route passthrough spbackend-route --insecure-policy=Redirect --service=spfrontend --hostname=www.ca.backendsp + > **Note**: A route name is limited to 63 characters, and router hostname given a wildcard DNS entry and must be unique. + +3) Add the frontend router hostname and backend router hostname, that were specified at steps 1 & 2 above, to your client hosts file or DNS server, so that external client can reach endpoint by name. Two DNS entries should point to OpenShift's Infra node IP address.   + +4) Edit the spfrontend deployment + - Execute: `kubectl edit deploy spfrontend` + - Look for the BACKEND_HOST environment variable and change the value to hostname of backend router that specified in the setp 2 in quotes: + for eaxmple, + **`- name: BACKEND_HOST` +   `value: www.ca.backendsp`** + - Ensure that the BACKEND_PATH and FRONTEND_PATH variables are blank (for eaxmple, no values) + for eaxmple, + ` - name: BACKEND_PATH` + `- name: FRONTEND_PATH` + + - Save the changes. This should cause the spfrontend pods to restart. + +5) Access backend endpoint to accept certificate using the URL: `https://` (backend_router_hostname defined when creating route for the backend service) + + **Note**: If the content **WORKS** appears in the page, it means the backend route is working. + +6) Access frontend endpoint to accept certificate using the URL: `https:///?tid=&ont= ` +(frontend_router_hostname defined when creating route for the frontend service. tenant id and ontology defined when adding tenant to base Db2 database) diff --git a/BACA/docs/values_yaml_parameters.md b/BACA/docs/values_yaml_parameters.md new file mode 100644 index 00000000..1b6af90a --- /dev/null +++ b/BACA/docs/values_yaml_parameters.md @@ -0,0 +1,121 @@ +## Populating values.yaml with correct values + +1.      Copy template.yaml to values.yaml +2.      Edit values.yaml and fill in values for the following items. + +Note that anything not documented here typically does not need to be changed. + +##### GLOBAL OPTIONS: +The following variables are used in multiple places. Perform a global search and replace with the correct information (for example, in vi - `:%s/$REGISTRY_NAME/docker-registry.default.svc:5000\/sp/g`): + +|Tag|Description| +|----|----| +$REGISTRY_NAME  |refers to the name of the local registry where IBM Business Automation Content Analyzer images have been loaded, in the format `/` (for example, docker-registry.default.svc:5000/sp or mycluster.icp:8500/baca).  There are 18 occurrences of this tag in the values.yaml that need to be updated.   +$VERSION_TAG |refers to the version tag of the docker images loaded into the registry (for example, 1.0.1-gm).  There are also 18 occurrences of this value in values.yaml that need to be updated. +$CELERY_REPLICAS |determines the number of celery pods to start. Recommended value is 1 per worker node. 11 occurrences of this value +$NON_CELERY_REPLICAS |determines the number of pods for non-celery. Recommended value is 1 per worker node. 2 occurrences of this value. +$KUBE_NAME_SPACE |the kubernetes namespace or Openshift project where Content Analyzer will be deployed. 5 occurrences of this value. + +##### RESOURCE LIMIT OPTIONS: +You can define resource limits for each of the pods based on available memory on the worker/compute nodes to ensure better operating efficiency. +Use the sample configuration script, [generateMemoryValues.sh](../configuration/generateMemoryValues.sh), to determine the appropriate values for each of the following based on your environment: +The following values need to be set: + +$CALLERAPI_LIMITED_MEMORY +$SETUP_LIMITED_MEMORY +$OCR_EXTRACTION_LIMITED_MEMORY +$CLASSIFY_LIMITED_MEMORY +$PROCESSING_EXTRACTION_LIMITED_MEMORY +$POST_PROCESS_LIMITED_MEMORY +$INTER_PROCESSING_LIMITED_MEMORY +$PDF_PROCESS_LIMITED_MEMORY +$UTF8_PROCESS_LIMITED_MEMORY +$REANALYZE_LIMITED_MEMORY +$UPDATEFILE_LIMITED_MEMORY +$FRONTEND_LIMITED_MEMORY +$BACKEND_LIMITED_MEMORY +$MINIO_LIMITED_MEMORY +$REDIS_LIMITED_MEMORY +$RABBITMQ_LIMITED_MEMORY +$MONGO_LIMITED_MEMORY +$MONGO_ADMIN_LIMITED_MEMORY +$MONGO_WIREDTIGER_LIMIT #note this value should just be entered as a number only in GB (for example, .3 and not .3Gi or 300Mi) +  + +##### LDAP INTEGRATION OPTIONS: +If integrating with an LDAP repository for logon, set the following: +>Note that if not using LDAP, then the ldap: setting under spbackend and spfrontend needs to be set to FALSE and the rest of the values left blank) + +###### spfrontend: +- ldap: TRUE OR FALSE depending on whether you are using LDAP + +###### spbackend: +- ldap: TRUE OR FALSE depending on whether you are using LDAP +- ldapFilter: search filter to find user.  Use ‘{{username}}’ as substitution variable for example, (&(cn={{username}})(objectClass=person)) +- ldapDn: dn of bind user (for example, cn=root) +- ldapURL: URL of ldap server (for example, ldap://xx.xx.xx.xx +- ldapPort: ldap port (for example, 389) +- ldapBase: ldap search base   +- userName: username of initial user +- ldapCrtName: if using LDAPS, specify certificate from LDAP server +- ldapSelfSignedCert: Y if using a self-signed certificate. N otherwise + +##### DB2 Parameters: +Set the following parameters on spbackend to tell IBM Business Automation Content Analyzer how to connect to the Base DB on Db2: +###### DB2 Base DB connection info +- baseDB: name of the base database created on Db2 (for example, CABASEDB) +- baseDBServer: host name of the Db2 server +- baseDBPort: listener port for the Db2 server +- baseDBUser: user to log into Db2 and access Base DB + >Note the password for above user is stored in secret baca-basedb created by init_deployment.sh script or manually. + +##### DEPLOYMENT SPECIFIC OPTIONS: + +Some deployments require additional settings as described below: + +###### spbackend: +- backendPath: #leave blank for most deployments +- backendPort: 8080 #leave at default for most deployments +- nodeTLSRejectUnauthorized: 0 or 1 depending on whether self signed certificate if used for SSL. Generally left at 0 + +>Note: Several parameters in spfrontend depend upon whether you wish to use path based ingress (for ICP only) or simply access the app via exposed node ports. If not using ingress in ICP, or using Openshift, be sure there are no values for backendPath & frontendPath, and values for backendPort will need to added post deployment see [Post Deployment Steps](post-deployment.md) +###### spfrontend: +- backendHost: domain used in URL to access backend. Usually the same as BXDOMAINNAME which is usually the name/address of the proxy or infra node.  If using ingress with non-default port (80/443), then include port in hostname (for example, my.domain.com:444)   +- backendPort: for non-ingress solution, enter the node port of the spbackend service, otherwise leave blank +- backendPath: if using path based ingress, specify the path (for example, in http://my.domain.com/backendsp/ path would be 'backendsp'). Note that port and path are mutually exclusive. Only one should be specified. +- frontendHost: domain used in URL to access frontend. Similar to backend_host +- frontendPath: if using path based ingress, specify the path for frontend +- nodeTLSRejectUnauthorized: :0 or 1 depending on whether self signed certificate if used for SSL +- sso:  0 or 1 depending on whether you need to authenticate through another portal (for example, in IBM cloud) +- bxDomainName: domain name used to access frontend/backend +  +###### ingress: +- enabled: TRUE OR FALSE to indicate that path based ingress should be used on ICP (OCP's router does not support url rewriting and consequently will not work with path based ingress) +-  $HOST_NAME – if ingress enabled, specify the host name used to access   +   +###### nodeSelector: +label applied to nodes targeted to run celery workers. Default value created by init_deployment.sh is `celery: baca` + +for example, +nodeSelector: +  celerysp: baca                    + +###### global: +  configs: +   - claimname: enter name of PVC for config files created earlier. Default sp-config-pvc +  logs: +   - claimname: enter name of PVC for log files created earlier. Default sp-logs-pvc +    - logLevel: blank or debug to enable additional logging +  data: +   - claimname: enter name of PVC for data files created earlier. Default sp-data-pvc +  celery: +   - processTimeout: 300 #timeout for OCR processing +  namespace: +   - name: #kubernetes namespace where IBM Business Automation Content Analyzer is to be deployed +  - sslValidate: false #true or false depending on whether you are using a self signed SSL certificate or not (false=self signed) +  mongo: +   nodeSelector: +     - mongosp: baca 'label applied to nodes targeted to run mongo pod. Default value is "mongo: baca" +  mongoadmin: +   nodeSelector: +     - mongo-adminsp: baca 'label applied to nodes targeted to run mongo-admin pod. Default value is "mongo-admin: baca" diff --git a/BACA/helm-charts/README.md b/BACA/helm-charts/README.md new file mode 100644 index 00000000..f0c695e2 --- /dev/null +++ b/BACA/helm-charts/README.md @@ -0,0 +1,55 @@ +# Deploying with Helm charts + +- Extract the helm chart from ibm-dba-prod-1.0.0.tgz and copy to the ibm-dbamc-baca-prod directory. +- Extract the helm chart from ibm-dba-prod-1.0.0-ha.tgz and copy to the ibm-dbamc-baca-prod directory for complete HA deployment. [Refer the README-HA](../README-HA.md) + + +- The Helm commands for deploying the IBM Business Automation Content Analyzer images include a number of required parameters in values.yaml for specific environment and configuration settings. Review the reference topics for these parameters and determine the values for your environment as part of your preparation: +[BACA Helm command parameters](../docs/values_yaml_parameters.md) + +## Initializing the command line interface +1. Check whether the command line can connect to the remote Tiller server: + ```console + $ helm version + Client: &version.Version{SemVer:"v2.9.1", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"} + Server: &version.Version{SemVer:"v2.9.1", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"} + ``` +If this fails, go back to the prerequisties and ensure helm is installed. + +## Deploying images +After the parameter values for your environment have been configured in the [values.yaml file](../docs/values_yaml_parameters.md) you can deploy: + +To deploy Content Analyzer: + +From the ibm-dba-baca-prod directory: + ```console + $ helm install . --name celery -f values.yaml  --namespace --tls + ``` + Note: If helm was installed on OpenShift via the script, do not include `--tls`, instead include `--tiller-namespace tiller` + +Due to the configuration of the readiness probes, after the pods start, it may take up to 10 or more minutes before the pods enter a ready state. + +Run the command: +```console +$ kubectl -n get pods +``` +To see that status of the pods. Wait until all pods are Running and Ready. + +After you deploy, review the [Completing post deployment tasks for IBM Business Automation Content Analyzer](../docs/post-deployment.md) document for further configuration. + +## Uninstalling a Kubernetes release of IBM Business Automation Content Analyzer + +To uninstall and delete a release named `celerysp`, use the following command: + +```console +$ helm delete celery --purge {--tls} {--tiller-namespace tiller} +``` + Note: If helm was installed on OpenShift via the script, do not include `--tls`, instead include `--tiller-namespace tiller` + +The command removes all the Kubernetes components associated with the release, except any Persistent Volume Claims (PVCs) and secrets. This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. To delete the persisted data of the release, you can delete the PVC using the following command: + +```console +$ kubectl delete pvc my-baca-prod-release-baca-pvclaim +``` + +In the configuration folder, the delete_ContentAnalyzer.sh script can be used to clean up PVs, PVCs, secrets and directories created by the init_deployment.sh script. Simply, run delete_ContentAnalyzer.sh from the master node where the configuration directory was copied to. diff --git a/BACA/helm-charts/ibm-dba-baca-prod-1.0.0.tgz b/BACA/helm-charts/ibm-dba-baca-prod-1.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8804c44e8ae00b9419b995a0108e19d59471141d GIT binary patch literal 516313 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℞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

SGCpnp0*B+tSvIuCTp7B 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

IJener8eelAR&3i(S@?Vgs?=K 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%0AA8Othq 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 z zG%hu)&np6KAY6F#xJ7fjKb_S#8dV`W#tpxBYsx%S-^fW-+7-Kw8)rsnwB9K2neQQ0 z%tHBgA}M^8yW4u?Jc^XK6A&G__+ z2v8rtrTwDsa~(+=gh)S!Iy>@7UcdV0O?+ka)tgMk&@=Bu>3?(YdW=6ifr0!qI>QzSXkIq*z1 zuuTq3!&V1)$!Gm(?B^e;PCGtZQ`%Gd!Nn-|3pi_s^L6Pfid<0WqC1u%K?zjF+*JqdXKfmgtH8YsMpsGfs$Rm7+zkPU_qHS(Y9R&?T$?vLq zrBU>S{F{c;Dg=K<^0t;V%zx+7J<(9hsFX=Akk+H-PmTxA7?$dw%NWxb? zD*R)Q`?LLi+St6=R(^jici-1j3MVBk)5e)wv zgIDM9ASU45V8q^If;ijs&4f2OxbA^9-3w-eF}1&{w~`xIYOrE}N&NLhpA)Bwh@{32 zU3%Zvi}go^T}zf?Uki;9sEpV~&Ns8?b@;vDZO4+gBT~YB-or&9ynpqD*tpS?bM))8 z^m#1CG$0O0|QPp76QqUlqr_o?ZUkBc(tgteZw*3Xt3uoSMPW=gmZ2iS5ZcG0N ziC_XZHx&87_urha0Em4{h$tRyxUkzz%(EoEM3oJ{g1t z|Gev5d5fID=>~^iJ#(#56JthNj=`t%8U~w5$XE;LjvR}4P|JG77-kALSSyEE-OD%; z&Y?&)NR!3FMb@nrv37~)6bUmlgZMX0-Y9V$eK51I@l;kGBftXU+)X&#FW6F{i)4-X zb;8hYDG@inCF8{i+oe9qSru!CZL7H%T`9+6o6trNWwxvzIB;B-f9$n^awc^>3fJt^)%yvAFugJ{}D~Ejk_1Gnpnk6+`Ba@F*&Qjff^v_hdOd;EBz); zsaDZv$pFFYILF-K!i&QA);lQI?m-m!sc%`UW*<* zL}#b2IV0zjMz0oYK@~7nlFh`16RW{xBy;I*mEP-ia_K}O2RLKLb}oL0vglK%8kro| z8Y#+OOUgH%APdg1rI;xm_Ih%T%*|P1r@{q_QuI~8;ppt@==~akPR0sCQ*DrrwZEn` z5<0qwP2&^j{+epK8q&e;m53-QSwnRL_oz^)BxT6}STv5aG5W@YjVnWBsx0nXj_VQ% zB;uIyXII>q@T@KdC?~`rCN0zSd(F})*3LS>*TL3Rr3&(+N>+$~y_-esPD8!)FS+{a z^+0pLHivR!Z2Wd4etu}VN1V94F&n6PcY(yqgsLn$CqxC%g*rc1gU_XASR#=q$jS#2 z)LmN?nKrU*c>&5&Qq%+;Cp1xd{a^Inh@G~@~G#r{>`p9a>y}p6P z9<$K{jLS)dEmaJy?)}!|hKm3p-_dOFVPC4u=2+{6iePhk0Y%ruu|_nA`BUm(q;~7H zDd=-z(s7brp=%W$t8R8xFa_{j5`Y(?!K;;rjGN(R%`nGyt8Xb6R@;TtDKb%Lufjb9 z- z|A{s?O*exU@iS(2r^JN%zOd3qn2gFKt>y>kxt_%jw}4tVMWT=fTIiAdDvk@Rug!el zUS(v*+^Db$M3^o}c6+2e0i}Ml?pBG{+H}L9+L{uhsp*8;8Py9Qf}vmnw%cW=M8c=t zP&ECwD6xTOTRX3X*RY^A!X(nK9nZKfL8$no+o+gCC-s**FLX6a5qo{)EfND3<>E{x zxLc@vshQ?Bla(kYH89RZCZ3|^_A5@Aj- zrBbyJeNU2VirtJCsgplNO0*G1vTaIFcmqg;N@C>F-P5eGpKj{I64s%=R^Q`L=p zx*|-nNS>nqxSmKegC8X6Zn^08W?!YLlKB>x(Tv{wb2p7jM zk^8Pt-gor{OvOdXXEgefBC~{lHwQNPHknx>!Sa4uJglA#MHjqc>(@m=LfsCE?Xb^I zFOjtMRc?3ORn4QLz-CK#TV&L8ES~C8XOD)gk7UWH;0)#5I}=*{0v_KpZ9Z()RA0BH zt4F&CyG*eQNIF?Y#f=d_U*q`_luaOcb3gN2x+q;YqtUuJWj z!H2#3ylnu%VU+U%<}jJ${Kr6@RVVg@M>I{=8bVzw$^}lx`M@Lh@r;U z?i+dV**3?-fO?cGqe$>Hd0H3api5C^+gDI{vNen?XEPuFt}uA^Ogcb1>zQtOie!T9 zNG)&zz5S)>2U9M^5dEm~*Hg;Z=6IZsf$IuF5XB{;M}|UaT;dYR9ttEewA&Cl&RBSj ziKNeRRpDx*7R_X~R7AVV2F{VAR&X{wpHRZrX_GwVZ3YjCPmCnu%Amvok2wY69&AKY z{*x~hcHlX0f^2XpsTc?n#xyX;2;kQ4Ee_@6_O_;Cw?Z*3*NcUa42QRzy6>hmV(XgU z@baF9b_|jls8BGYdV-wUZ_#Qo$3-aMo6jR$S+mx{qXuy3j1S!TLTZLUc$IL0N*{yT z)#WAF)nC>RbLnnAw*h<|@Z$@M=+#pvQ0fpkWrk8IqEQu^3=F_S%h|(c@b#huUt+g1 z9O_-%m)Hz}%a%UnXX|)rh8W)du-|EZ_{FoCp;g!pB7s)kD?dXGUKHKVs2#W_=@!uL zLgw|aJg$Tv0ieQ?u>jf^rjwj{=5HB7-{p;<%jh525Wh)!tumE)YnM+YU8_+BJJw{H zUuW*G^j{ksqTUvW`>56^lkMgKxoYDBL&09l7k8^bvS}x< z277;}?>Y?h$FAnLJhqoO+cHh3J(Zi1BL}ET#Lj$BJ^_l zT;@AI3kDbWo`V6!k`V>`n0=6v6LSDOBXikE5U0m6BG$g;Ec6ehlJySaSXF)=DuPAg zk2RK9FhG+|=OX&fpILX$RC`aWNGjbLkHm1cPRniuhK{wRDQV<7zUkgb<{LD#&8npb zuS%G|2AX#qsgEau`eSw_!8i3P<>t%6Yacm5Rr?r%1!&R_{8&Dk3<}Vx!7zCWpYRe#fhcKR2WB3P`D^XeSBAx1m-dnB5tIis` ztY7O@qHYO{o9fI`ZExkt>yf?fhp!FVl?DfkiI5lUX~nc|7fBPX%w~=WhVb+J0$1(# z*Fr66<+`^4o5#ZNw1&@%38lP-EcEkan*O2+^Su*eEF9aDkk zab&m&^N;iyJGAG8U#XV#&_@UEoQzbxtBfQ0E?uceDrC1!u~|fcsLHkIQWe-JmjbM& zS!JR_`#&H?a?fG=?CG1ns(;?pOSke0KwL0<nee&II!w8=e8=YH1en9LGD^h+AAqBiS;FwU)B7}4}hf@J`s zeUlg-hpSNC)L=%pl3J+lRrv;E68g?E9b-ag{Qc}x{^mLT%;^5c_i?>gO$(zBPV1*? zk(b*~$BrhGQ;|mSl40*zzt{f8m2mc5shiqH`_icTejG^HsH`Q2sFhQ#t_4)uIE~s( zChkOY7a%8=67+3Zf{{sa7PfCyDjP>)crOd@q+g8U^%YTy&OoC(FwHCVE3&7vqH1m} zzX$Z1l=gs))>Jk5<&cwly8)q}3-4wBvxCCW<0< zl%#g98BVi_kKkW`SUasVTcJ{W(kk$g2c*JR#-a7f4GG^}z-O`7p7Lak?jDBs4zzy| zmz*>w$hWHXL!9)COS#2}_u@dvx!jkAe#P)#{#zG#6oH@Nrzb`cMY3fE8rEY2S^JI& zB-32Dk+RugS}hvPO4->Dxoz=LbS>ges@FA?AMy0RQyF zIaX1>OI5Ggi`%`GH%ivv!Fz{N7BvtoH-dW}Gw&h5|Fg~??aNyj_=;gAb7er&MAyk_ zbk$1qg)RpD%TEh7J+OSLD)nNlENU{}*$DKPd(~9EDQ`hfVS`@k*g(wFEf(E0taANg zRFO7iGZ>e2io_R1cz7yp{E-6K+_x>~$p?KZA*w>hISs~>gLPR`=-w){SdI^LdaFe< z&}oyo&Il<*?VOuU1Xh}r85Jxq0KJJkNy8(*M%J=a z2GiYH>D=yzwag3BfO-uV>PAgatFv`4`a3fGjAV)KX3IlJvJ z+cu3Xw>O<(YZa({sm+9$G?S&O8Hd1ZDq-O&V@7wxK&m2xF{Z4JbfL38u-V|UHM`SJ zq%}G;NYMX$l+^VYl+p3o-&9)77k zqW>(|)!FBk0Su>s?o7yieatu%TTWwjD1%^>TC;{Ehv#0Hf*?^;oBAad$i9Awl(KME zuQcZguQ}DF2HE~HHEj@1j?Zb~Wwyf%R#o|A3`ky3Pd-g0WG>1&sQl?R!xTKOqR2d> zsAiS?FqjU%yd1EkVd+m03WiEHjoNIsG#CG~!pkaw2Bb3~qM;H~Y^y zPfMc%pVM0X5c1^<9MhDjlnHFZ!BFldA4>$q}V&*ZU5C|7vNzysXEDzc`T z%yU>DR!&(&VV%fS)XMftP7Jy)B%8B=BEiI!Y_ctSo4>)Px#AA*)t93~Jvk0y%~Cc) z>;uc(fTg#bqxl#cU2l%h3aBqOaKEK>{H(dMH3dlA^4Q)r72rhC#o-yqHk4E-zK<`O zgLmofW%)#KHh)$^+on#cnIk{)!2pDam;4*H!)#`neDa$}P}NM)Uq0b=^YQ62vYSg&OZUpEG96U^;MOaldn{AR zV>*S;PP1x#`^#MvrSBk%;%IKvRWtrMFjT}?pO#NHgX#p1KSun?EI{KnxT_6H@owc|Cc$}>5spHI?MJId)5alV*O#xbq1+=We#cGKE$|xnDeu+=BZbj?|=6wizd7t zrO67UA9gHc!7jcgpW4z$m^mwux~CqV5IA*&gBo#bIAa;EP(s8e>(h73$sPc{v`h!#LDE-`}9o@{82F1m z*N7U*o*jNkhc%i^R_8LhlLE#-`~Cx;er<#rH>!XN&q*%#)VU}Evs6plSvs=B#wKaO z6wbrv8SUh{FPLX##mx(gQ)%)!k@OZXW|Yg3yfByO;gk1Ie8_(5J?M+XFId9sf)79_ zCo#=BLr+jm52|#xbJ|i6R*RJd1RgX{ElE^4m8_h#3(AeNb-h!=x@cu*q35#@bGSX^ zggXhOEvI1^H3PML2>eL)%hz%4--fLd5!OFwjVvjL5Wvk5Pp#lNv@Wyv(zI!EH+ApD z&lh(c<7(R_xC_z41L- zIn0f?Yn584g8)>-QUVufTg>v#+;vF8!GL%Ni-GHgXCvHZ^Uqsj)?7cMT@h9sUeUtW zs`=BfLI))NLEo094U3+*%{;t3nC(YwQ;R`dKlbHOpSt&-=LmwnX7EZAfUd9-OIrP1 zN!i{fI(NXY*e8LStCaOKTb-YW^xEqj@jF#k164*auVpHB1q6?O{Uu(48cjqwO$Ue1 zWUi&SH%H3X*Bs#>On{f-GArU$;-Ip*q%uL>H>ffGwEMH-q3NmGi(lsQ0pfE6jNSip z!y{dP;4@6#!oLQr)Qj8@6LoVHnBf(?1Y2>KAyfWhUaw=8wb_oJ?O2=tpX)Gc%dz#Y zLoR(BU5R+Wk8>WT`itMQbRHu;{_S~MSDo@98&D8)zbiyq4=LNh*C;qS>0+3Lkzm0BSg3;l?o=i@ONs4<4OW^K&VCrEK)Xs(?ndb5j<2n%MGcf5!|4EA7&O z%0q5Zukfw%^|<0Ogxw%PJ}ZU%AFo(W+KIM<(i0EdzTw`@&5I`9RO}h~?FcJdLAO;xt3ns73n8M4L)e zIm2RvK8Wlhi5#pugBDCYYrD=tz5^{P^=8)+Tcuoss#Q7kwC;!@ZRv{qq@|Ec2_y0u zY$h`dEowNFDMp{g+{M?gh3i1(L1E+=zYH7&kh3bfz?u?lujeR*S+%^k`m2T;(Mh$* zs2w?nZmd#n4{>mPnuw+!=$zNiN~dUVj8*J5P>i^%EI?;&l#sXyu8K~Eh+5~I#QUt2 zPvI3~PsR-eM2^V@Z=N-*;cAbI2$zumIdT4LC@Qt_!6Ypdu+KXz)S5+FsG7d-XIcq& ze#5DAR@7H|DjJ67C%cL7olujzetOk<=m(uZ`cBu|@mD7lr99Vp#Ww}uprYj{r&N7KBRGw9>{qeywWy$HAfXvwe2I7~X?HR>5W9+FFYYi>P znAv$-OVk3ZiBzhc*w>p(LA$Lsr}M*2HI4=M@(gyDu6q^JBA~D~zK>;^SVs?YWLBJDscfF3r`mPOpi!wnT8BOUDSy@}+A@ zTMHebn7m{Ep>E~aVPV_2r7X$#od2BpP*X(T>Z4e9{3vSloKSy539y8QQrl3hq~1mI zuw&BpozCHDZ7}_v8tFtK2;-^yl(EzSKcxXHQ5jpdj{SRadSa*b&AzHwgT1x-x=M&r zT2BFX@fTT;UT^2C)VlFcQ5v^{RGbyU_9{4?3}LC9jV6wQtkIc1bR=KcLBTA=t~T(b zDD9(HE$!x6Kb3d^0(WVfgPv3F<5^#k2x`HM-dkHCJc)?K8HK#yF~^pEg~c_qQ88Ql zR~%>5+YS0Z>YVZaQ0J~q!xa-O#hc_yWe@lqPg^V&I@hqjJ`BMXDAj~77ZbnjqC`1p z>Oif{%*Q*ZvR|6kcarE!3O zE#XGY-dTs%H2v~NUQX2^m33YT(dXujasUl;%9B-K!h~=#gjbc^CcD4u?T0=(JGQ|z zPZ%rlbv2@d52VwFebDR8RfYs~iH~nPoCbjPg%DkUPg*5o+H*r`a~fBzD3;VnR&uv- z8sNe>pPu^3GI%cUl-wCyeN{j)%4NV;v1X$njZyG)$V{D()WYHUx*%rf?v=)>d(Iq~ zG8G1me2#vdRc_AdYx=vqCUf~uvriVj_9q8#uPrL;)E8H^Q&~*WF#STNNZ=z14DQY>G^#%j`>mr*P z%;yMi&0D71OUqxQxwZ@6nn@zZ;{gbc_$4u}#|$t6l# zY8!w~^1*N|4hCo-S;Z?(=AGiWclX zuK`B2zKVza$akMT9V!(1_zc{gs~(S=)FnkN9qW4v9>%(PtQ6_aIlL{-*T2+wEc#&u za^Zm+GwFw6Y&@iv?FM2wC7~2e&9qMEfaA38!oks$(*hIDnt1-A%B5A}cth$ zi(*X{^y+R@m5lM|k-KIVH_uPrRklz2p$Xy&(z%DPy{-ea5m@+WnJ>8nFkZ$t8c&so zw4stD=%<=hc8(PMt%L-;?SK{9g(eVsY;=B6XbJ^`UQcOPIaw5XX?DU3N?p1pz(&Vi z(s1TY9XxVp8w^Htj83h4Fw==5(13T2v&9cQ0G70xX}g(aDEj1?Q;Na%w-)@CSK-u@ zWTH7it(hkxtg2Wmm}_CoMEODnZ^om+p2t8e%2jr3?5-54@!bN;2d$#*y*XsqfUOgt zhFW6_rY{5v9k5~{YE>que{VjbC~p^fB-MBrIR04Yz*hT@(*nKL%Rkn6>o8~^RrAw7 zNW-01n|U?{H5EW!szm~J#}?3nftOs+n-{1P*tXdlg`~0}u^nxqcbh(3|a-TLOf8ACRt}KHDl&Mnsw2%g##1bXo@5c zv`KyU83Q-;N|SHkGgC|3&DnOw1R`R@niWEn9KvRm7Th}DR2opRh%z=bBr>)V^#$g} zdZm1$v43_#0@IVCgz_WvCyznZ4!>~A?mC8c!ArLDZAfFySiY{6Ob>nv z%OiW8M7`#{?ww3laGH5nYc-i;x-g6PH@e*k`H^Ih5vl!9LDKf5wqc&8O=Thl7264~ zpp+MPhSKoebAdJsdv1gS}q*+Bwh35;IyChzzxw z+LhE>J(3IzI&TF>IhA^AIh(-g_!rDx;RAM+-)IJ~5;jbcqohwrd>i5_kHS<^Rk|wVGeT<DdE<=(-Mjojakid&Ru=+VKsieIcapGs@-S$+U*`Uit zwjbs^I1}Rl4V%(8=--_#@K;lfzXueQ5=Fn8)o68giJ-!JfFQ|W)OP6{hn;UDP2r~Q z@AuAX;n-o(cFbP-nd^-lpW5V}?FO=E2VUgtZ98?LCF_000o!+Qpcurtrj5?5aL&*%KDp^OMOwQ@qt=f zbD$t^Dch^6xeS5CUo;LqLTIzv#$?mHj#~S)#6HN)!YUI-eOMRB6*%==Q^PK`sMy~(@flQ>}}{Hmmw>a#*L~o<}Z|FjaU3|DEoMFWRg@f?sMO9TQL@hrb)>k@g|}i z>Q~B@>Fe!}mr@R;Ts>vD>0Fj`ZW`7$QA}aRQyXvyiE~uA^&FJnPG(2uapYdW^hl3r z!Wn1T9iHz`N0aZlc{({fd#?;Fv^-K?F?Ov{b$6J+yTA1)XPl_ao+mJ>=!S5^r&pRe z9Ri|qws!bu2VY|vFVe@in{z8mF_VL+xg$o~7yc?55eRT4AfO{cX86qh<9I5cfupU!JlEUUf_}OC_b6yA1!^I%;8`ylUehwV3fSARrm9{cr z1Y^tfCismR@QUvXt&2%m{5sEDj`~aKr(38+X0kZ6S7;Yx3i%O-lRA&G$V&=C?63#q zdxXQqb({IT#hTsC-HAB@?g7WjDDbwH)+@f>&AKV;#e%K0@&4mHuVGQzEV8?4A zTFiubOTj?fLDW@tP z_4wyeSMybS+nPzu|1TAq|908xmGUW&6&Q$98wIcD_1MEsK6gGKfD4f4hULe4$mEmE zsYSGy5{qx0wlFxVw2E8B4Fy#Wk*)yNfx*pDb)%|HRF()}6N=W!w!bG?qN5ndKb}tD zZMe~Na;gVOh^R z1#HR?C%Un#X@iwh-WdkLw31F zXj5Gdr+O+rsoT=`X}VDCE8DR$#-+i9AOu*zIS9t2{%l+bum|!C3uF!b#>ZEI_j*xd z@cvEeUwY^C78;QMq{ts}prqCEyPd{w#@{s=D4@tPrGGGoGCNFEfJD+r9(pDk8JQyP zz~xC0UjxjpT%8&EbHut{Y`SQ#S6G!!JlOJ|xXDsn>F4mEO^xVy^ze^y&TF=N0{ioc z_TV>3I(_lO;ja_=N$JK?%({&HarEGcUdi@#_)_|G=EU>=sZN2T_{B&uey(=m$l(_S z_4<|5Fy_G?r9>9cRK4rLZnEDg=<9;SAM%Wx83)P^bxeFl_JP^gtz3sVI6{!lg?4OG%kL6@9oh#}gwP;#edhu*Sv&9!m)mwYf~AKSwl?sPIk3 zIQw{C|9SR-7|+*}>1JrpO>xyAvRYQfDR7cjGD}qzH7)&Ter^2aC3FRj9pCzjDRQrA zgOq=@iLAGr*{0k6h}xnxN2`v?30Tkq_77|hbF}#nqVXc-V{(mBA%{$+Ifs5C?o-|M zs2yyu1Y|Jbq8k zAthR!P7_ZSj?e>EHH`6I3>j&0kr+u?9*-_&xKmu-aFnNS1Z_G9nNVW}Z3FL?B?gl3 zwat7-^jbhE8RZ(IZxIYe*Qi%o8(KIFYj(ySFw0i>1Dm@h1%Fys2MI=SXAeiD-@b*| z1sXuH<~`eQL)dTkm=*kEu^sWR&2jdG#z7k21HTekUeEm(LhnxN=wePeQo1;O^d@1la4s%~GM# z223%|Ipwy+s#XBgDjdiK@9AWk8D7i{ol_pYD%sj4mqO;4pmd&|2YR1g0SOMjE5-g%SNqWQgXdq_WE3%nXU0&PPc?S( zK3bq=@Js%fj6WsND^Dj^7=5-?lHlJ6|Eb5Ra^KO_jDJ7dEnIW%%`kkOzc8y7N&JaH z2qcbP#O+YCpgMX|YfOyBWItdE9$bO`1Rm`<7Jsi+m+EDe(lvJM7R$0N>1WqpRRaF) z{Vv)aJ^sjS0-rwm(<|ln#XfNKWSeOZP03l2J(v^JQ!us3cwciqIP3Fm3HqaBX+2uDG z!6xDeV)m5WbOIeqo?rQ0(utsZTy%qzgtR^#2f|nua52OvT%Spv_-D;@n0QQK;ks+E zt&_elPjvk-wBG(Qntaa@%vQrR>h-~y^j z$u$r-Zkv^dx>GQ6d|Pnvp-H^8`@|-OoDO}qYcKCVQ!~>2rP&TI+0o=>OHAW32JSc? z>#n7Nv)THnxL6<0k??h=gjKIe_xo|?JzU4J@^M#Qnr5hrtY~6oT}oGf2!YBd=&*a~ zDm2-^cFwcfiVPqxG5#I8F1ISvpGNa|jx&=1P!F(+DoHs#801a&be_yT;Sp~I(dXT~2aFB=ckLF8DdRdgrgfl)LaxK^RIHFbLeb6lG zJkI}<8M|Sjl_eP&GmTalG(@Y!A^i8#6kzDj=iGH88#F%_Q^e03l_#%kW|A=Y*c`HBf-=A-` ze~#Y1yI*fFbGNrnws)`XYihqAzWnR`Px~IfD+&%?zrEg{yw}SSul$p~C)rHF_p>^d zc-Dket*?|KDe55xcR}C%Pl8B;Vh54o_P(E;G*ZJ5?YDUO`1HP4Xd2{Rhn#1V#(nKm zF1M>%?yRWhITVc3Zw50%2))7%zU2?LQ<#&~-@mOr(5D6%G+G5VeLtqBH|4`xaKK9j zJb4N70j$`O5n%mdi$~6bYdgX=RX&T|Pl^t7Bl>*rO*T{^ao6}xx0H?2<+KFowgL%x zctnXvSZ*g8=h4EPh7wIZ*Zu=&RAmPB9%65KN}Do#%9Y=G9m*?=^iSOQpZ_FJ8`6#p z@~B0grY=EoL6fNcjPq!0dHZY=f?uhfo=!^%=7zey?ha^n5W}|%d1Z_h)a{9fHbZ9Ql|x9Mfxj*7xq~D#QqSFK;2jJ!DW$KD^)qQHz^)q zD%^?jV*kO+a8Smu)j`P45@g#mWpNJv#VE>*qgmQHPV^i8dqb4q*Pha^0N5p{4mOlX zBjV;DM_OqRz`Fu(dAx3{p1v%<5DA8bijt{X56V|=>D%;{{cYMvMcwK~2_X5YWRGF^<6%@oud_#de_z~G0ux$n`<9codHCIi!lg{>0mVhfiHzytr zk~RD0-m?g?0@1lODJNnm$F>gSQCe_!yAc!#eY@we8iZ|xcBYA5 z5O83&$W}}cbWdc_r?>0+!;b0TIndXp$FQw2$N!qwX?KTVfoE@6|Sab8BJ^`^9#rb*{@Dp_P_A8I4)nBDXaX!DZf81rEWkE_D&4SPLp1#k24dC zKN5UIETKE{_WBqSh4y(1SfrEOgqwR{`mog+%ynqjw1_lgFFmP<)|)pDgVL~=_N|_b z&QiQgs%=k*&A zN`B`3sX-N<_PbH0VA@hY+rMANV;k9B4WN z{(NPa0jDo7mHpvA9rTtS22I41(BV-j#o8IW*fTA}yntrs2RAU{f?CkRuKH==*;Nx3 zbeG*z@^Bng6TU$9Il|dC*+BYiLK)_{rGpP>Ff*R{nC3 zlsm!nzzMqV;9$^^P#Q(4YH&#c{KzGF7BbRXta~oVaucR>LvIT?A3}{voUFoX`Pg=S zVKf?srJfX{t-zoQRJm?iL3rvXbnYYP81s!m=KE*S)hM9|uJ5;p?ZJ!e8y3?OP~`rZ zy4F%kMBNLDi;Fg*i(2fjO+YMlMpQ0i%W-5tY}O=5rfd7&UZ|~?tS>u{>#a9Ra~rG0 z8CtFYkyc6r98^nK{~HKLvpb;w(5|q@v2vk zX}>!{dFh#ZNS$1C4c6&XjAbH9TGfoUyZxdNeK5vXfmuUlsPv^SV?0W?mR(p`FD0BEfYKp|Jfrdyz*kp+gaMbvP&1y{@)SYk?-V!)UTI8H!CC2{$xbme;t ze@ps2ca|s}WSY_=O%@<0V`@^ZQp^m<9J>#Fz-gUY&NApn7s5HQDg}Hx*%~0|r;QieYQAS=k0^2a7CmxdJ!3V6G6(CYkNI@(yC*Sj? z{DIfd%_xJ_PGiq7jnJivnSLSm7_))ud-;rz+KcJnpY63Y;}p&pmBX7k7SS|FR>HyDp$Ih5Q{$Z>8Rfit4N3&x0D?XmY?OYAZc zcBI_EDeo1-pWS3RjQKGSjGrI(?HHsI>|?`)XbOV4-gk%>PW-3t&Da(jkead~KyvaJ z5rst>Va+9tX=LPx$ST_7bPFc;QiPz$F@JG^3MnyEURsh=w3dJ66gUgAS+qHI7ebeY zv}}bx9b|){M^ZMFpId)VuZ8fPb;d)iT-Iy-0fHR;rLygQVZH;pLUO~!_10`b)fv%K zGu-Uoti>U)c~s#mBD^~WwlnB;0G$w$39EPMvX}|a6|oVwi*JX<-~#SZsA19{jTMhR z1xbCkS-hnIYzF@WAj4V>M;n6UATC#(pmV<8QbSa7xK0kd7HyLtJIormZ3M$|UhV$? zZn55mYgi+Qw|E8r`rXHY7Q_6D;Vc1;B24+@NK12vh^=AK>lC=9{X77V(ZDPVT`8Cz zStP|rN{s=kVSm7^0;$ZuGSEzm0=A zWDBoq2G@b{Fb(Q6@Gqv+=z+RfDRN~KIgqsMDHSR*F@b7| z7q!$Kb?|-WGZYEe(+Wl-CB#08fXO@;kJ(Ds^|TeR0?VF><;b{PUsVSRs6m#!c3EbO zca08d3sr%NotXd;{93LB513N=uXfo}fVA!hwa5_t`bPyt1RgPq4~yYum;;(?-5d2W z9mGR5iXC_<(h^7EYi6}YdFk3NyBJ~L^R(J$JLD1#BwKRr1MoAQS%rXMdC{Y%IlDB^X68t1Xki09 zwZcx4MAJtSn0;a;ghqP!Vcvip60ZJJ=1K+!472jK;D#|Slfrkltae-(hayM2GXSHD z=d#eoxT#Srio#GNo}Z~zbEcfV?s%K11oQVz&w&>O@_*YxW!SDV6)A#oxrS3fGI%4z zddXK`J!z~h=Mw_?JCE_XkeCjwo!zx{*1JY&WJ^u!#iaCmOOc9=)L9%&RJL_9`6bTV zysCa#NvBwQpgm(CFbe_IIz&B4R;;RmToJbLp=iOUJU=U!XWffbWJGOw4*qzvLz;_x z5V9Iid8OjA5ejFhrD@y$+;5@ue3MRl`7ej zC8u^}kbjKLY(2?h=aMO+l#!q$q5_Qi5m2%UH9k=9)QFaX!3_sBA>GpNJQp6O&CS}W z*C2j&!0>r>Y09*sgi$wB_9>&9NT8&9B+Dxy59LcHwRh@lyN46=c#h3EmEbrkxp#1pO{xHR+tiQviPuoF>%>r*jp)BZr#GOE7j>lzZ-Ko-ouYm z2hCXX=eyS4DnA~|40>_wvAH%EsREfgu*+jW-r-sxf_zK|8=mt~l>+;Oy0Q8x;ZKk~ zVo871R>%^$szrqmTR@-lt02=rL#Kpbma?gB)7`di0KoVAZx9T1NWdP3bp!y4SA^T| zEGiAUyQIe1{iM1T&`8bPWq!#0eB>)&P%YSnp|UKcrVFfRN&o1vxrtrd&$CscOfkbY zT>Co91upFeaMTwKPd%dJ-e6-g-M)bYd0pt^hR`lUO=`(6J>4ckJcIXTYw)E_sp!?1KJz(e1I&Q7BO=l?2T) zs`^DZyLyR3`F~?ivYrNled?-dHa|NTiFkzKgJxFMHb*m0<`ArNuWF8FW-0fg7A&bj zEJRvDVlGriC2Wg>>ou-u|GOp-Xjac2DJljB>)6wob+rOF#sqHrCPoKc{vW5pD;*l` zKWI^7P;fXs*UIs!4>pJ#}UeO`}a+j|9w>zWwsZ2 z(c6{#q-$8@?a0k|h%wkhVS8RxwJWuLhW-^8G`jGyji8OSeDY~=g;Qwy1~9XwU_jht zXLOZ8xoD--@8qG!Lbk4Was|J3p4!O+e#qd!cDw)$(Qm47Rd%%j5E;?}bRhPQyDCXo zpC9;2U8ttF>YRQ;;1=QW?L(KdYI&vq)pg#%ptECVO=!6gex%lmx$n{uQ7_El@LeJv zZF%5ON<7J)x)9939-ruH&<+G_Y;Ok{XaIkpEv!oU2r{%bmH%Oq^);Gp$MZEHBV4#l za|;1}Jmp&}mg}K2+%jsjKpKHo@tbE@tulDQ4kF+4RHTSO-Di(t?M%(7rFw3XzHfqF zH*}}8U}K}4>c7TC_OlABdQ7VXud{EF6}pwbYtY@_b-nAq!!-U~d)@y2==JCCE(!#s zO0U!T4;H2@JTWyWrE9;_7L}baKPcG5Ow#VC)3rH1SGLkqMfXeXn{)>tLy=KZu`)OF zN9kc*0+t~dGTjnr2b@71ypOl>c*Y7*s=s2WLmTB@@>QqPnvFJv8}8(vzUP9Qep+A_ zT2V_wgNTcFr`g-U+~Ot&Z3Wd`p?4K|-P$+xD>2CWqOjkdep)#9uKK%M4yuO9D|PX8 zw}*w}Ew+xG5-(v4%1`T(5Qw^TLp2nfzAeimmOV2w;U+#{mDL?jx5|izfSLK1GX6C? zG(i*^9RO>cf}Iw+pg)ED<@LA|`NaHa#Vd0~BVEJ^k)7T@zh~ctDQjs9`$I)IIbMn+k-$;90T*48t;~eVl)Zn;zRD!qixN2D{5oRlL%PV= zi7m=K*^ioqQcV0|@KRU#Y)*n(nBxp;g7gobvMSZ`$L{}Cc95dsl5jLiuRk!+^=|W) zxvwC~XV}MTgYq|WvE#Ygw<(#`(c5~^+vz-HX}L>| z>_H|8csStt(%ACi*$2LBQ`Q>OR4!Rnt^hf+fr3fk-sUV<&kDi=;6Iu8U92j~5LEY2 zkIhaG|;@v4WvZ(&Zh3(cl1)8tz1m(KUDLd$SYuY;b9;6!&$ zPJO@HgVXI%xHoZ86T1O>#jFQpHl9B-jl0f(CR6MVa;0s6=}j9T&)@2GAhw-PU%vRC zxBS_s-+$eJ=z>1q)JwK-4L;tckv-tXM#qPFpvB;YoR&`uwF_3dR+}s|W5xhbKx*fE zzwoX}Ks&Fp{h=y-;E=9ht-n@?RH?V%jZnQW^P`7wA{0zPE>$hU5LN(@lSlGQ**|hD z7Q1njTo5(uDi@Ss>q6NIQOGWyQ-3xarjt1En5iN@MU{Bnd#iv4o!alUy;- ze$-XH1|?|43&3T_0+ph*EWWaJu9iDsYf*eHvx8ZgB4A%-R(vhg&0mUTmVI^qW(x?) ztt@#0=qR8L3>Z|wyvjCLP^XxDut^cn&Qw3_d0sNDoR$0_Og}K=MrYxx$ttLn(upJ3 z&(cSc!_l21vpc+;sE>({p2_F=Rcin==!a0>E=C+%%6*& zfA*UC)9F6lm`=UNPF({(pVQd8AN|JOpBtbVVel54dtYzveXVal{`vGU)w{ZPy20zW z^%ie}AOBoy^Gp|=HlZn6iF%_yHX40*Zat_~sFjJ%jvgtYX z^|sGDks68<-7%|roL-hwY1JoIO#S1`bJqGd8n%;*LN`pwzls!RO9L1P4iTpsD3s;u zp7(-YZL|pIz85$N6SeI6C6WRaqOE&6l4=QKUOJb)L*vQ|p+9PMpkSA`dG=JGJ~2ZI zm~^ZE+J(H;Z^#1fsxLRZ;?g_v+aEE$BeKF*Zfe@7k_=2q0j4I`sw*jrdl?^>HYQg zzu>F?HDmoX{M*%(GEV;eU;g}W8!{Yh_w)bWu};GOf*JnX!|-4H)rkX;Rzf~Zd2%dd z0SVK^2R1mSd@on5&sRI4tZ4~CY%U+OL^A*VPf|Q7k>>tReLWH7clFVI(wUrRoBN(` zeilpp#3ZSv!(gw1BLX z0j6u`>UUG6fVsc8tz=>bWS)qOpFvOBG@5lmG0BucXB+SHk|)`go^$^)uF55lyfyz6 zr~Y3;0F~Ob-kNh=X>oovZC-8FFcB+`ph^fCL&87_8T}3uh$c9>ycj&(PcOR2Eu9Fe zK5xiX5RSCZAQs`_{2(WiW_fKJZiH+8`zxH6MfX{i)0uIHL&k(6?ud(oCu}Z?(qxW) zIJte)ANqh1T#=tX-O3d9k@51`Ur}aubK6X-6ez;&U(DNmKznsMi^gOTU9j0)-#oSj z=*`c)0O?URBg)y@&rzT}Lw^#010Q`d8~bIVE^*_pmf>O2etxm@Cd@* z0lxvk&5&e|^0u;+qEN(;YCK&j)j5YZ4d$<)fcu5~>0MOvV{O66h$4bPfJ5w|krwxXE;$W}((|Dat1S*_m14yho5t3gfJ@9EsIl z!liP0BdE=%U9FG-xfeXuWG!2)U-2Pzvz3HOG7cG65~CR>9zb_= zVFX{X;t97EE)bi(7J%6%+%wYdOpxJwWZyFvg)@KTdhkX-Ur?8cTfE;7@H}gi zw{dc@fhf65it}_eExlroEszq?#JIo=%rh`d1S#N5y`xU_*c|R<=n#@Bs#BWk0tmnqoR&>WxiTx&SU)ZFwPTPt zCvP7AUdfQ1s4}-m)sw2{)%BtAhQh9w%U8pV!oOs3=eY4{K@DrFO~@O~OaGd3T?-{;Zv z0cLdmF`nVy)C%=je8;|w7c87c3_nFJ&dfU_b{l;Rhj;32-Fg5oO(V5Q)IzIup@n4g zkKr8t{4x9#vAe}^$il_^<9MnTa6V?Y@n~SXiT%@GGyNHi*=Rh+j@F(DI-UQ}f7erM z<`pMZ&nQjjnYmo3R_*-#!l2^of2e;yOyThvFdjt%+RfAGZZR6* zIz=pe7%xV1HVNYaOpMb}cv+8L9nL{Cn@`7ISU4Q2DNx60?7h+Jbgp}BAT~0Ul&E{* zS8%ytS1x+nlvv?qOU*@JI#cWxEbuDzVQO=Av0zJ-u}45exb+=`djU9zD$7yW(u!bj9Vkd85dHdC~+I#KB!^)$NW~u%^%3g!TMQ#$Z}&n zKqUyQhgnq1LarsxvB=Ry3rF?^ySy027hQJ6xMdKB`_@3S+?;k~pgy`}NQfYJ(eT`- zX1BEC!`RQ>P^;ILeo`bHUmeC^AL?>9UXc#lEZ)Caehl<&Z)%77nHPvdQ;PL6%f2R} zw8VgQCO|b`Mhm&}y_j_fdX~$rR8s-7lO(9N1H6srkfe?%Z77&d&Z(S~?h_Y&`U$QeRB-a!Ii zQqjd$f9x8z7QvU&WDnNt*>JKWMrd)r-{rnq(1dFkSAbX4U%#owiIC!A?=@ ze&RKe$gP{jPNkWT0oznSg@iPR?2u#Lw4vsQ+AjrH3%+ zVQ4XQSs;fctlX(>pG9DhrG^z(DRRg`SJJS&4FiRg3Z4juk-}7y(!b8~wXPN~D6#jF zR9E$xEQiCMivn@Mnr%<1_Ql?S0_PV+}n*jNS zIxQ>cT5Gss;kz0`LQ7f=i%VPf6lvKc;B#?f zT4E2kXwB*G0b5(1I>r7@r1QX0GfCStGiujTXTS(XqF=*Af%6Ky3#Bap?2w1pk`==k zXcD0d*U_GY&3xuU5QK@Fsgo&2@-`DDV>$l#(J3^l}(7L8>jIrB{Fz zYO`cbKC5Q6xim|S$>^8VIz;qGP^ykoVFiS0y;Plg z<(+<=j5HV|*1z`-ZKuO~e)*e(KW(ZcIkp~oD)9)F>x-7WeV^3o7pS#cLVat~2`dD( zUPbjf^m79E2OaOO^XxBBXxDMJp_7rQNh|}ird+lhYl+y3bPb(!m?Tq7xx&fuuiIl# z+wH$}I&PK~L~=~on)H}K$+1k=vT-XRttiq$G8f`G$bTVER#@e*MTs&BRGaohLpZ4kXNTQHyILKtA|Q;lu5@Oo z*o|yF;m*tQ;Dy6zdD$O@k_9g*dgU_;y<{MM*{i$E35e*!7b|n&ViR02&Mun0xWJ4X zDNR~4WE~@)qQSkomvZEO!e5Mr9a}9aK)v3ZEMsyU4`&6 z&VvTGFc2B7N=Ns6PQ7fYZPg_`O?Qk6?}Bx%1$f=bU1#q9Do|^Hoc89ViQ9O&iTAIjwDFbQEddpGBM z2f^xQ+{v)GD{1vR-D>4(=h@XR-6R+oMcpXR+%lYay_f=R4!M`E+kfJd`VCLVQO1Va zd+~;)*)!jC%XN`uR2l~Q`sZX}4lq?j(Ogx|p?ziz?d-Mi6`8dH!eZhKboAo-O2b0l z!0N5RK+uiiUQ&l#(_b_K$6O6gU@hjr)difr`{)O#D5pO<42G)=@Yje*>ESIbNvRVww}#J|{YK zjnOByyrh9qeco5DFgPugtjmtN;DIxs);#(i3)ADN?&I-5hm*`T0W%mxYqk`}EM1$? zxP)4^fn4mBm7*ah`hlU(rik*zE8 zjLEgD4BD@Vq!3tnwRva5j&Zy$#f}Pfq^lg%E7gIzLFMN!DcfS>8kLT>Sl1{e6^Q0Eq;_dcrtK~!5u0M|WcK!mQVG#{0jw#QP(o_EiO zqSVV&fx|*4dmi%a00rwxH68VQ8|%g*7m$0!YmHH&ly9F!&XAm}I5mCdlf<TBEMU6R`KX#sR<5V%OkBNO@)%s zf9kP^EEUHqWp}gtio=J6e@L*HM8Qj0z~VPb-qggba!fKxSlp@J$)&5iQzEnD-Wk@&_ZshU%(D2t-vaCyGo#duyR|AWrfy4pMw&Nxtw0!V zLrX2)C=X-jnwRt|r?A5rwWVbne2dnC#)GB|M#)H{&Fe|4_0IR2HO*{=8wTbVY8=G%B$v^e35hEzp<{{K^DR5LYFx`QJ%_qCZ-l3M<&4HK( zhL0S;IZ#2YUWuX}6Rp>&06)h0&-h&0ggiH~QSa(LS?|b3^f>T8TL|KZw+hk3L=|!e^zlX-jYm-ATj!7YT^7xz5x2i)X zdD|FC)+=d1-OD3^@L%m(1izi}A`yM%)Aqb_ETMO9$yK{f!0M?IZup^S^-ycUOYxu}xT0caX^ zt(6OIP#HN@3;zXviL+Xm)X=KHL};FCO__~32TldX6bccg_2C5cgB~)mVR_ChwY8SV z0~BacCbsXdK=r++^QU1Ts!OJzGM-ed!nkMqXqIEiDx26_$GlUaTZ*aJ8u zPNG<|^~sqv@yJ7-EfZk^EI_zcWXYq}@VxFBzy%#1Z{ll89jX^6H4snJ`sOgSEU5@B zc)ebvC-zvlL9!avznV0A?r!*Rsr~%ayYa3l#F4p}!)au|Xg|zY^tb+SF^fM%bzI^! znhe8!1o$cd;JFWsrw(rM8SeIg-7e+;UW2lL(SXgz!Kt!-Uc)Vb$biklc|5xd`}6Vi z3;XLL#NR%Lkqk6sQVtJmXOGRs4-uQq!#Vcv*TpoR4dOm_QRDW8!|`W8 zpV5S3W6gR02@Jqt(m3HZW> z;cQ-?1pEG(S!mhS_wgsYt=Vi6_2av^&xX-`IAqiK{^NYsvwv4jhr`(z5u3QX@gW@d zr*KNpMHsaDIQ~!@y!wOtZ|s@dFIca5#%2+|@DsZ<<5yeJEc&bqi#M5$KgEM+z-HrN zH2lJDzhLnw)$Aai^@m~n5KWzS7q_PA-VM8S+6&a|N1vi;fMYfD7~ekppx&IQ^_Xgq z>~uho&Hi{0sSl24k@FCB40oJ*q+T$zetKP$bq_l`38&%xG@N{7gK;#2#T_k%!}#tC z^~oN}+hKf9+h{Qwz<%^#yq(U^j_P4*XAJcH)9K7JA_sFcl$6OLOPpeN++h0j)mQgq z1O|0Q1a>tC!nH2;ryc{l9HaMIBXRj(5jKeCQX$-Qlv;IYdQ#KZ!4CL{#is+eBmRsD(MQOlgRUtP8YtY4x%Gw6)FFam(o!6k zFL|%g-)Pib*P3n#r^d))31y*h=n&2I6p^LUyg{=?1D%!U zZWkpfIVGhT6r>#MxV;V$XPXVwk}ojYivdp^^9{V(_3CHHo{|JSDXOJ52vm2SYHBh? zlr0f;p=%Hf0ZViX{WOA%mv+e%&=?RE>(L z%_stAX@##ARP~c};@gKny9f$kAkrq9+#e9qX)F=T??||!w9K=_tq7#utA$uqxh#(X z6Dbs00>ib^XeY4n_p;Ed2%~W3+x0Lf$15E+hd!%ky9P8xKqb;GsU~S{_!`1ol$kOP z)$iL%^1`XN43&7OEFoM!WR-ExSC?R@X++z+GA;iH0sh*;P~F z-8$r!$66Jv*LeD{HH5(1O zCs4l1y0I``2ANJz36{ z*;;}t>$fUDy7ROayxesu3qU=OE9M5)Kw$E83nHQ!cO#6UuJsB#67wTW4=j{b$7U~O z16AR~FP!KGy%6X&o<#B}kgvMk}f{kiu~2BvRxBK&$Cfd;YuJS9^zyU+Y=m+jyoWq^8W01Y_>NKWs!b9`>8o!yY3~ zq(1DZB9F$bA5Z&>huJ(F^_B54Lpd7HXC{qm5Pgb<;|b{fQ%Aoa#^LQSLi>62MW<5T zjg?ggM!d2(S$xOh(cO6Z5b2z)c*-W@*(^r$`~zZ#$I9frgM70=_z>PlVDb;bd5G{| zu+PFFI0@oGG@7fQqrXKDlVLdh0`JA6K|GE6b827)ztp{p`s2~~A?_<{V;22&5sl_? zIMk2+!p2j?1dnHPHSoJw*_pSCSv-Oqxv3hMpd_paS-+{mKn{>)#2#mqjD z<~FH^A4xbj_Z&*1Z6*?>At`&ZXU)=p-5`mm+2{b>l9^2Y`(3C4&_J_ENp|AwIoteT zi%m2hg+ig;b@py}eh!^$8Rm3&)z`A~r2lp}dOguwaMXpwI+y~Pyk*kq)iJH=hO?i$ zIgZHQmN)k!(jH!&_bWpclPhJTU%|W*&;skRVeSo0^b#-axaM?d9GKX>NLhQEnnMik z?p7J;3NB&^e^ia5(w{cyF0XX+HMwUqsAaL&q@T21?(eS0Xs&cO0WZG5h7hZA)^T-o za>-+el7e6*zL381e2aAs3MU8&ip!0?+3=I`^rNQOYmIt2zg+;LpL)>3tW60LxS;Yyb1B@`A6vMHS-S0EK%>Q301yp@`o=1u9ZHbvx8mc98>jGem ztOTQ=s$R{ANGpyZe{EXg{o*We#=p$hWa+U0+2)lr7Qmlp36zMhXQR-=}CX#Q|KhQ_w(FeQ1Z0mVd=5$>pyD&t~=OdjcS_KjYzGl9v0-#_P0-Av1eW$j8 zWMtv*j*Hat2?k|@+fFIHj1u7+KBadWf|{SS^G>WHjf^0nC-0I=C)Q97hC(}*zlRzp zj=RJ!6Krb3Zx#nOL5j7yy$N&h!_c)NCz} zDWi*y-bha4+h@}?_%tZy;ENbJ`U#apcr7Hv$x`0YXc63wS zRNG^zY#bA!jXRg%M=+=UIo~zVMi4MpRbJB~tWlG&S-Du$0!z`~A+Fr4;B3_4)-}9< zO`G7QI`tVrFHRd2Hd|aPDkp@aXI&fO3j)nZ6iail*Ew_G9hK4j(V{GbTw8t=bvUYA zp{ElqJi|IDbQ0$Zf_%EwN_0U=($a;yegoeJ|ETIYS;-w$f4Zr0_g3gDwB&hi*`tJ| z995Ver(EVXirW2Z$dQ|Xf!FZlqLV;sUCiD{rG&WI4M!QE^a=V=yUS{}-iSBof~aPE za|6A5u@PFZWU0+3#j`t_asXhNF@4r!Mj@mS&Eb|8b3HaW+gCCGDDR*XR0zVhcEjk- z<{H(t%J!yMyiso3!u&>g?3KH(WFx3c&sH-k7s6B-wE33&YW_wP08L_8y*{8|3`-;qgj2M(x+_;wE)YvM-Iv?F6u?Za6wgk-MR zLjyDDyeRxT12mhas@j?)!ebqQQ-R#6$e0#Od!CvMLf~*=U2>>N5`l!KDlo##zASl; z9Xf|z2)-OZIcXqNz`&u65bQTz@-x7gDlNp?!>t*cL&4g@svMmoA$Fj-I891ctbpAJ zPIKe!JvAOD7$mIcR1|EL10S~#A|Z1Mq+M92A3*JdtGtAGvxKXv=sG~j%&f{NTMghF z3pTp#MBBzsE)2#AVNiN zjkr|xb}H3C<$zkL-;Fg)3dR0nZ)iu4+54Q=m{G_M4NHtFp4Uvz_%M56JmxA2rfF27 zB&9i|!B}odTW2iIbvb!Xd0I+fJji$z)*KM`9zE*L1fJ-%a zSh)LFKCepfK!jB20-T|YV!~}UqDeL_MT9OW&pZbKKXfPvWuKHYB<`lGOhJjq$ys{eRx2xckOiRff7JVEHt}n+ zx5cO1?Au?gxthJtndA(NXjrFEtX3>b44&I$;g;?}tiBNlo#U${ir(>TQ5VE9mCus1 zJADXmyH1f{D%@7o7H=4PmkYU|nW+x0$X<+@p4*N0X?x$w+M-|)Sy6e*iYQ=|ZMT-w z>o(ua6|>|iOW@u#?jx1W&+|}e@(8BZkx>H6T;;579#_aPkZRSBqG`2Kyy5(S zAuY6kZKd>&k6yqkt7!&nVIRiQRoj5TMcpdLv2qfV72fY_<^ysoTl27$t(>fFqq!Py z>Q?LMxt2flJNc5wWD<)USM*xk*(5yl9@-t%pPhIComDJvv1DOJXcKLsc~fg9s|Ta) zO!VaE16aTeOvUkBS_Cs(c|%kUb$&n_H&sNEvf$P)$KQD0#9HOkFk+cLa8|P@qQDBc z(tM6=3L3GD1>XB6!#?C1(ycY?kz&N7~QgW4`vpLobc^EFtSI(NPl*LDGY}cgt+?Lh~tzR1$ZImFD z`;wQ0kfq|jxm0{pZYYMuSQ+H-#%7vInN(34GPQ?QY5@&ZQ~BP+QmepfW=L6?*+xh$ ztk_4uQfyYwl_j{Su*0dVUaR%zs@$suu{VZ3_AsrevN}B{d%ocWo{xl?5{v zQGE1PgTgQ&dI8wGW*&MQcN?rqe;KiR@`I4KQMg_Wist}|w=82nmn@~5ot%i2-%-hF z768+|@t0PsKNTlt2UPF`XvR3eN%oci>z4oL( zZfmNx_ce?#rTm^|VQ2X4FRj+#dVF~`h{(n8?Cg9%2K~v@1Z=$02c*^7`vzf<&S=H~ z6ITrX_?gKWYn|9GW=AjuEq zLa3D9g$G3+X#qpLW9{nwQK$Zt9JH7(_>UL$_HzLlC};VHQOdB(6= z2u{EduCa0N=+MAx!C=k(ED=&_FtChkP?hqQXOz66O6Y^TVp51q|CNKoO2Q&2I;Cj| z-T)QqN91%#lZc#(m5>4}hAxEn^VyGlCdz_Gix(zr&V*Co%G z-V%N5FZEX-6XxrcNY@zypuMIuJo22Uf{Oi-(2I*1zn3mOHCI-iZ~V#oX%64T9g>^1(OjOvoZty(L`@H zP4yq^c&SAX6_KgXi=37jhnc^nSxJi$x9}ZJQ?5*%o1)BWhx!$0A7LYpU?T^rz>&{s zai{-BPw!$`>dDt$=9$JgcpGnsezp*rpr6pC1n-g)QK);0$3m7_!Xq+Rtn(rw1IY`i zAv!3QT;u@bCA9ob$OI6cWosId@5_72HFWt5QS5@I^d4ZE7H|Z9)_e3*$qcx3o6D8% z;fh)$|0^x@W{mG?mH@>UWGYO0Sd*lT>BnWlNncVtE}Th8$vG4HJWRw&(?orCvY&Ay zuNT;xp`-deGFWkm*PD0aeb2K+qD6{#OcmsWX152g>CZGGKWJ_yBL8KOOwZ=O_-aOH z_bdeUAX@;ak&D_p!b^1`%3^7bO+-d?#i5&XrbMw6<|ezRKXd)=CN=j@ir-bUpfC+t z4#%(LDBJ_T^`rNOF-Vy7u)cmv_q`V|U6Ay-aPE>Q+X&^eGG5X-$JP9CqKj4Iq4BZK zcGc$^sJWk_;q~=fs$8w8Tx0kGGx@Ns2h2>0aw_=Mwo3BqAqLV{EV5 zE8TR=1xXnBj%JMO%WnK##ao^(d1}tfDZk@pFj&KPr7AeGvlE&XoGwJghz;VBCPJE# z;LRV)WPy&Be=T_-unZ6+fz@;#+&eaQf$UM=R}5H@7aI(-fvX9jseUD=;P(E?@Y81; z1HmhH?25?}yD*bOhfF>zGnzUy{;^Cr06H-ppgv@!*$^gUnuv-AyO!mmr0ZVOX)rqj ze8nA4n5Y=58s8eexMGDAxk&XTrw<*i_jpPrjj4JH4~ASu4G~f;3}xgkXPLe%Oe3;4 z%rYiB8kqb4-h2s#$b$cN{7FVNd-AFIlqL#tr3t9VvV3Mbeq*M?<|x4v?y+|tz;C?a zi>28*o{{gwl4coGvr;bpQt>gbC1WwO2i@K}?#TCxCChLgNVtbeQkK@q(3GX5f5-1S z-_iLTg%c#h!-A$8)b2u05*isYD`ZhF=ti&ST+IYFMCv)oDbF@~qlx4dduAljQrtlL-m!tmy96D3v0Dm>yUQ;K~j~}Et6gGx< z>8e{(p5k5vLz%V}x`uu-rYCAF>eZW&+#lP-;5860DVHniICqZ`?UJ`NrdiA@Rd6m8 z;G%o0+MG1?CL@`G!|W7&!~SWPT!Pm9&UM=SvS(n+1g4Eex>KyX7>Z)}WSe9R)7!cv zO{xILge6;(dnU2ElFhh`W3P#b<5Eh@?>o1(qC#(=x%Ek_JbqkeUkBeT0PXIKihj~P z(*Za;MxNTf+SZ_7i&hLWLVLf}vqTn47Q9In0jI-sZN2ewCew8_P8Y@Aybe}BWWkpj zLGtt>w!jqvH$t`}AVfmCQZoK|#7iGSou{|)6r|e4=a>`3B zR<>HhjKmaNwGD}cfsF4oMCRI}vQEyna8c#V+!Tet{%VA85DSgCF{YlDGzkf(=0Q!6 zKY0511TQwFsa)3EZr!sH8j%SywEJck=yH01|H4AR z^J*4d6#j>qzNH0-M7>t)vrFVwm&i}$4jB>tk?xRBae%arcb?e^w}F3zb0p{creUKq zq`!jtWS=m-M>$eD=S%apb*KC&mQyY1qj*kCd}$k7p7T3;OJ#xVF&?~a%%>xMCqmO8 zLj~PynQ?KUY1P1|j(aCGp_zT87#UH8&8v}xB<+*_X!vN}G+g^rnN#=nC*e-rXn!Po zij#PNKQ)bh69(1WA)m>t_o{b&lR@3`@}oIaeE)v{i|XOlC*e`uc)vN5O0(oZNS~}Y zw)HWp=I3a@_-yVE&HcE8+e}uQ*PM4}X};)=i_~(9ekl=2vN8o$Vw>K>a#5_(SNNBL zp602@VxIEA%d}CGkyG+sH%1f$dLfRaQB*G~N16NjSa(a0^nvQ=U{foiq>|!vQPFk(g{-}S}e<1hS ztjc{B>e!u^161KV+Tq!`p$*>|>*EI8@3mSVkc%r{t`(1IN|qGU`adZp7l=qUxepZZ zv5C)&og;{0-U*Rs-K6(PB3+#=0Ufn%bi@MO;l(_3c{GJ$4ArGo8a*e{Hif_L2z`A3 z2E6y1$E58NF@KAAwZ?EY!&Ps|Sx78yKPfz|8C7>jsclEl4-8-n_s_SN*)3f4TCLTt z5}dkCMA}z&vS+lQZ45Io6~C%*;xOH%Z%xzt7N+J*_#ID5nvxYwn3wx>wr&tLBFr!g zbI4d4Chzq6G9sjX{=j90MBlS4R(3u-Xol=TCS3%to*Lp8=4=hX5@v996X~HT&JmV9 zy6@jg4bh@VLG+Z6h}0rQVR8n{+-4m1s0{eRYt97{o#v9?(RkfRX~KCuTe5HxE(VDg!@hB(9W z^?c&p^Qqqhg}_1)8}oEEo*2|wn?bsoP1Ac=e9Bw}dLGF>>2ImIYV#rl0InC~)CbS8 zz=@_v31l|HNgwk#k8#lr=g2Wt?zpc>EU*rbhf-S!z5ypH zq;N2OcdS^JJcQ}~*nBku%TYB}SY6DoLW!xLCE`CSoylmtV1QZgLwuLr{ncl+}AL_sJFNvQ9*zG5y_AkUrELa^A+K!2~>+ z$d$QI&)I^j)XQpWSxf~gWJnc?FV3)M&wttcps+`GLsvaUH4bc}#8vH540)(puA|*t zkf)?+s4L)j-yjRrM)n82+mL_2w%2|MPu)UhULVsvuK*0n9Sbpx;>-Ro-p2t_I`lN8~zhV41D2maUES$aLquR%_q{ zj!H*VL&T@qC!@{!(>#M>$4fP|~T=JX;aHl1=nk*K8E})EhBNb1j&; z#L0dxLzO=p(3!g2@kpjN=V#|(^H)Jtc;`OZ?8k3-wji^Wy#&Bo0z?%NDlSuM49^Wh zYpB`tVap4WiHsFX22?1>WpC43H@WlG%+Y!x`gX>&>N_C#q57Lj(knL6HdNN2D@vVD z>uVsTj2t~X{@Ti7S4@_7pb#}N35n5x?kEkgnd(G2N@Q}iJ0NainyGuj({x^@WCf+f zlQJ&IUON$~XoH}=kU|Bb@?JYG)0`5XvG;MQG<-n7xgJ4{CtH*06)_4lziRXoz-ZR- zg6zS&`*;bs+;1i;9MsWfaUq4~ZqrJr3>7!kz30xh#S2XMK@?3*sD#GVg1)bcL~mAL zhpd&ND(j|s;_YgOJ=R@xBLX!)QOyR|6Yl7~W>-YafirguSG6YHjY$F6pbKlLqya7f z8;kL?eY(WjSbm|F@zbvkq*3{&64TOQoXD)SRL$)Kx<0rpeTY}}jD_3Dz9aL`>UtB% zLWfc9pt`zNOloEp<5gHf#_0dh!JNlQ>6rt9f*z;>ux}YQ=JljchEp<$mncSI12PGUtpXxBOsbH|^zamqmTu^k+^DPW zUr(mv{`qjnNwimcmG+|2M;G_P`(4a8k7m!6gI`p;rBSh=thp;^PWHU~NLc4xKi;ob zi5D9QF14@}7H;H)V(C2cnBpRor_ef$bqi4f#j+JST_fMSrM5gbc6($3Ah)mDtdlKG zr2Om2)a3Z^YA(^_$5J`tf?Tkw;zu|M*j#$cFb|f#F-ofz!%jD<$}{`JjA`(x%8{_U ztq|~zb6DM5`qjPqyLy+ss<2@mm4IYZ<6my1cb8ZTPiv5C3X&#OCfrltJh*SUg;b@a z9~b2K@aWL108=sZsL+rMx!@q5|D(MBy{Qvz25#eo)oHC0S0nM3Mu9VC6Y^gHZnL=5bhhtO{@Kkccqltz}Q!wb3gGLSlNqM^V zYWr#l(A>!pN%T1>c&vL_ic+zqNE4ey8#CkPjz`Ua8?~$V*)Yp(Rkk`S0=>B$y(Zu5 ze$xDDAWKM(w1e+$=QZx74r#l;+g8XnS3{UbCr&|l*{d=F zb&vL)GqKGb(#Ai!?N)0zIvakxVYu+?@?$qgn2FOxV28$HH28+qp`M=Q@v){}t5*%E z2PBi;X#yt4`^HvKnU`$sCY*@p2?2~OFG^cF;7+7>SU@53GccMu?VitxO_!@XxTouS zqS2rfQ>dw_)5peTx_caoKKbdRtw*S5F?&KSsK;2xH_$>eoD1Z?GC@?yi{Of^9FMuO zG5?Wu5=2j>M>#r!7oC;!O|35!?_ptqSvh9(iV%S3K{T$$7)z?kcTalAyb z&htgcIpfxjQCGo2D^;K!E@f2N>h5*#`)%WN;RIif1`~aXpLL%>YB`Mbs65ji(qnbj5&?PIGF4yXsbZmacO|4QFuyJb9{DJEg30K0qvsh_P$BFb42lv?8Gx( za1icY?ROi^P^wyB#16M6mpM_d)vT(JrP4ywMgP42!^9Botp(09ufW;V-Jzy*SQ|r! z^%@Vm$1@FpgryAqTStR;SGvh!z;cnDO}}D0o!==%{R}Q zd2YPOtKtEmluCl~0cd#M*>z1zwMk@<%d0#yY`p=fpWs!CHK<-OhPA2=sP(IorBl5* zbIWT15$i*C{SQ!HJLbJoiI{|s0TcR!+3beerdF^C5o+mNHk!K?Ukxs=&Ieyk$arvd zeR4iLC6}+r>6_uG-)cSYl2bIh?O1$YpHiCLLN=HNBVDmGRzPsa#v7?0!U6 zLTUj;lc)p=h#EGgR@72dwozu?lC|7|dOGenDaiZWYE6ct*Zr%@@!;u%O?i|JSb1CG zu#Mq&NZU+~Ww-v1VPtr()tZE8YiL)kcrWNCUBSvMX{>7Lz2)WEJ~}jhW?OAa5ut|T z1w*4zC(+8^q3MpRH=!v?x*HgY|>IIHEzE* zLVhE>dLCPzcbi7g+w9)sE0)%(iZ^f40!#A9;0r0Qr#H zH|J%;XU&B=_;+}f_5#EblM34QYjrtLM$eYBG#4Az81nN0IM+VK3Q%0v@1z|G?oEi9 zNfD}Pn1b};h6k>ryawdGkZE$y6WrEtPf*kHW?(jRIG7Nq=sJ8g9GsDp!TII8R%;kD z42L=AEM68YQw8H$L`Fj1({)59_q_O-No<43Q%qfcC%L+PvHA_TRF_l{mQjFCDqzj2Pchj-*cTvUdR}v$!#r6r=;`NAlV(uN`|Ob)%f$gyur}qhTlhbtc|%} zId`6p=hD3mK+gG3qs~q^7zIvaI{gR6%DcSIdgj)L#Z#QkhFn zE8k9yubvl?GyPOl(S`9ytg4fVtTVW-5*9_Z>C|nls?3?ZLyeUogLYbCUa8GsS1i+Q z#su!p)i!lm6(xhz1z4^lDg7wPs)`jN1b{=bLKtt!I$-|SBf-)kdwhSxCIXbJZe;OY zn|Wr6lW~oWE6C@#Fg65`##{}J!L`X##qSvT=EcGDmj{DWvS(~~AVFh;zL&=yN&$B=97N3Q9#Z)?s4e{gl|@Z zG09W?n*%Kljb-glF3k0bPT}A)Ydtk~(omzdtriZ^&Ze^D-1kVVf}3g@M%%n9EJw2q zb2v=TW#gNA^b%NZkfGvVoxv}cQVl7!?MAAZz=VeaQ z^dU4r)kftdzD3>nq4$BGRSm2;L6y{v#TZxfX`qqz9WXy)E|IU|GhzM)PWl9KvKslmc14RWCh14%`rAq%5_>OPb>b`~8Z{}<&?4(8{a<11<3k!sQEztuF zu27@l#6QS6?S%V_tuzJ*y$L?pJ%F!Ka}te+4^&*uHrI>6`1DPGH0_@Z&xg|= zA~NYuhm%+R)9K~-2lChJzJB_lTIKME9d4jb>r$C6gL+?cXX*9bKQ}x(%~=SYK|ff7 z6zKX8a=r(7GdxeZjLQ{9Zz#`65h|%hWX3A1!0zpsNx+oI8uv%1gNO{L{qrBtY3BU;Z-a}I%j@y$Cmp0_UGrn23N$KdyuqC*)j3XzBL)ar z0jc?zJSshyrY)GruTqWSDczojZPW1#f(|m}b^{|?!1&X!NOP@#J`OINbnRS6^oldW zSKx15AXjQ|u>lTR-m1X@ghd}1dwgyk^JqbU=z#N#a~#mCHFbHN9@{u~vY))bX=@$R z9R~iZLG;p`zc=OO>7ABrvtp^fw7+^x0Jx-BmLc#x(L9eK{pdjoFf|U% zXc6(^NVZ20)cuM;E!CJz!oKlT-=YUX@t;7du19BsF&SNw)8Y8^`eHKGq-8>e6KH%n zCjHS5~=l$^yy76#yHXIL5r{=8*^k8RX4RYl4ax@wI^?ERx4*Tb}>0f|& z9_SaI!3?H)k*|i+NkmSrC&STTGKt7oFXDO-k=K`(XYYpR=Me&CIy@a-^&z06|8_Wf zJ*k#EeKYuh^vA==fb=J%KO)16i^18jKOIyPIUQJd>9?k2`ldf6uLq;S82Z#dm}%mE zJ|mMxgWj1l?ifQ?g`)uv6vkm`W`Som$l02xz#^Yj5k*?~yhFumm4DPQ6SLCTw;pJV zN`u{|$jDZEpO);bTV{Dzf?Ov}354+R)*GB6YqUsWEBE`HDHWdI3}_Ti58 zd_%p+MBgbrv+VO>;!lzIG~xvVj^$ar-=;FIbCQETD~Lq4GINT+DFK4Qe8?9SeAr{PJdxjV|j-Uac@L5?fa4A;hOiQK44-xIt@vQW=L0!TZ9+olUHHrymy)Ir`@7Lu2TH zKl^df-j9e$&}^pT1)+iDYIzvFFBnc2c}!Z(4MdM2f3zElGzn0NJgU2+X_)`mOFMH zHBr+>JTVRM2L^>clta~c(tD6XA;R64yHvaU(N-vB;;-~<^(L1Pp(Q5tI z(eaDUvuB4#oulVu@9?XG9?4hhM#T0skK!9@hUqeEIUF`x~AgeRcfRv;QC;x3WimN>xz#ABTq@ z+fRLQ|0W-r^S4+{tw-*TS~Sny*Js_Yx<}7i2~)A;kOrYgE_0RJZzk)p1MxsbnQs6YehMvP+$_8XH?G=QUs-< zOj`Keb%H>HmUg-eUM$NQ%+}1@{@+PNe9L6Vy?tjl<$3p6_xK~vy#IOl{NK^EWa?uG z!0z*Z^z!i8SM~G%;@RQn^ZzM6UwlDcr(#A^at0_zI9&FUEx0P=y7k2u42(rKfpq{U zasf|sp?D$m^Li&OLJGQYw6sOY7hgb36gcFSjPN;Gi;~=nGEGRzZyBb(0lrw$AVx%J zrgWjO4_=U>l$jzY{mC0(Zbto!AxYS*Tr7;-z2X^9*bHBQ#qT0LrgaAfRtI0`?mHsu z%&1y+T)!=XWAwIjzDrSN7<#0X{#T8mAzVw!&SJFE;xGiT)W~^YU%f&$=Vs%g|COeCgC+q;x z?%<1DvQA#6DbE%idK+gSajkv}1dDW@^(*4Cw(7gkVps}9^z>Et5mm^4029_W?e;yMs>P_T~0*8^Pb z7r0zAy`KI~NQbP}_@o8LC=pC)l$0b+OI1MC$~#8njK;==HTmC!Dpjr+Su>@@G$U`d zbejP-ap(c)?m`PpvVs_oG&1$>sMtSx2n~0R{lY$aZ#CE&0QUIX^b3~VaVa1%UFVKU z5F#8#*dcoGS8K;)a;lW(7JkRceBlOx?PBjaWa+;$4{_sqW|9M$(riIuA#OR)5u53r zIi*gOH9ZrFiROher!H%{O$_hV3j~G7@3=^aom-s3w0kY`gr$S%_R;aV|iAA4Zw zCo7)SVeMYl)(X&!3m{hy^!dbRAIzbgXR zcBeS9p5jQOXB{&y=zH>tr;MB#hFwVYdrd6tvd)zsm?BvE*5EYjE{j$A#jU1hX-6_- zggYSTSBDP1j>Md&O!df@FJHWP_VP=!#H+MiaP+c33Z&^aKI@Txby@^If45V(spRj- zLGLDKOx`41fl6+DbNjXWN7wXkAd8ypLL-u%SL~klU<4B|I$h_iM|cj;ZogJ%LdyX? z+q?^UBiped)y8+9LkJeQF7ztZoJF(PZ*1;O^xAezmPyC18HU?T++#ry{SAWh1V(F+~5y4=7(=r zJnP^iW!^VIBMYcf0r!!9o(hp`0N-HcDE#%?fFs+5ddONf;M+Cu-RSbA5kgCtas^5iL@*j`Ifvmyf^_?;d{5=HdqUCpSR2xeGm&c ze+C_gS03HYg)DwYO04nYO30!|UcCJ3$bh-O`YHdt2hQt*o^e(D-h(Dw6}Z~t7caj$ z-n?uyiIuXBc51+=;nNmWSbR3C%) z#fCumWQN;T)`3UteF3tfeP~9}7|TMIn2@=G0I(i8Iy^km0%V!>m1b$olUA-}Rs|+i z!;w$Txq3<~N`xh0g7*>jR%SM9)}Cht0?UmVC@a%6g3O4u!9Xw}+^mJ@_7RDfLbzCd8(ri^ zX0l7j-XcHNa(VyVB*Hv{P>DRV{k;Bu5a}Pu{{qeFq@eNbzC~_-5_+4lV$Ov~SdWYu zP2Ndfu*)n)lCD>%uX>Z?84v=bs0bdfz?BA#>cVE3{-@*0H1T~U83Uh{e_D@XEq5yZ zGwYGBUvoGqmUe?H6smb$Q6C7nK(6gcLU=4zc?r^}(SgE2ao^yS0;6jN0+c6&tk?>4 zDlZQYFSvOY=Vgzy54&Ht@d3`KXKqXP%Adyllat}};;%R7!;9f`aCUPsxVRkufFiHy z<*56j4T~N#km)cyKC;MiWCAqrH0M=?msNFN3?I;v_`2$mBS&p=$sv+af8Rl1AiF?b zR5S+e%mYnlY!97WGE;frp!J1)>Kzj&Key~fXb2+M=S0e+v1dc-W062Xqy-S%$I!qn zQ^ZbyBI=9r;0ur^AuWKAzh%Fg*cPfov!vrKrZZy&?aUbkcNE=nV#Wq^@>=%D-~Z8~ zbI4h)oW&;2iLrTM~?933;VPq#lTDuSV~j78lYR|fcvg|r~rWj z2O2@2=FKI#+N`TA_;Z%o3h7?6{7o0NA3LlbAz$`KnsVgZY!2xl`jMY9BYnG5d|GCvVl`KI|I0e=S0yVk7d;*^y`Q;bVeT)7hP87BF zHS+7P@D7WYg0!vG#=iNdJ$-S-MM@UTu{fQMGnqoyW6bH_9l58!{;GelC`;OIRLw%@ zm)oSP8+8QvQHe~mir=<>=_a(GZiXFe9Qw6Q{zYa~v6s(Dr<1T)By7L!O?n{DX|^C} zx%z`AjYhN%8vnM;yyf(FG0pUT+Zx4H4G1UJYK9nCRBsOrKijpcP(3MHJZkdYZA))Z z=(na$a?)I@pOVNljI8f=ElsH^SgvvLmtQ)B&uxtxMcN}X2fDU3yae%zXK^ zy}vPqtIP59rhoC*`b<7#4k~AH7uNdsqkp(f{pSth(rjy3qRPGHo%HMRIq4C)`bkUVe=?ij`%}0D2kouBUQ{l@V2hg5m^BPwME<4$ z0DgJ|joaWM6Cn7xpvehMX%;j2I3)MqAj7L(tEKPv9vNc37^po*$(-Gj70*grHnZVP zqYUt>jUy3%M+;LW3UL~UOpkmS(8#;^kyvp5sD1r1IHZ%o`0ent;ha8t*vHZ3PSxg@ zU)sO?LL}&D_js1D_rxCQ)B{`B3a^Lzfr_WU{@VUkAM}sG&uZPh2I`$7 z<^Jukb@ys7>Dv*c~w6wqr-f zUv&?=hux#!e82t}NQ8U-Fjj0st(|b$f>>~dJ`1jo{5(beyIHan>NFJjlU%_ckpEu3 zczIlt|Bhb1{OYs(_bEQV{BrPTa>rLaP-4z`$~3M0cBR1*FIkWL`QX=ITe?+i@IJT6 zph14~qTq^d%e3nlGq6W4kW_T4pTUmS#keA{zS@(mTV7gcr+<+`mRU?*K7&8`YEsVU z{5@%Rs?PLb*MH*#PtpEe+3GZ*T9cnjnqsb0n&&X}ZtESx-l2V=$I#1AE^1VX74yAO zV8L_FQd49!NLR-dfz$rzKx*4;ZSW|V>zmtt`4h~)_wD1i)tjdS1@;nLL)Bb^r%#?>E_qhW zN&7!l=RZ}u)*Fud6hzzhcYuK2&guhWA`tYh+9V~FW(91uyLK3wwYRRv2RHt0;53e8kB)3IbmXim6FJ6@qtOfUsaPK+zeF4L z{Hmc=P1Kr|1u>m}gL!DWM~C2CpM6=l%UZQ6s^jL07rsq$2@9bf^7^l*7##L2)nUO zZSx8>5B^j206TZRUEf^TxQ;ixJIA{R36bjIUj5VSkML2w@1_fz$H-WIcAg^B=D|bc zz#P2rq|;P?^TAUUzR-BOej{ii1Ya|gw7{x~QMuY}HPapZ)#{W-?t*N(RF#?kSD=B*VgXhI9xYY~&+;4vz} z4q{4+7*|viK$Yj)Uawxo2%9D3hHP$Y1fnjnt&MoyBkj5_ll=NCnroL#@`5hvZA`{E zXl7Sw9C2>^0JA1Dw)vg>i|{Pb{Q7g8j~57+&AkXJXZ8kzVih?`tmq8EJm3EE%T|NA zS*~ra`}p?sO@H)ya4~3{VsKt-6K!h08NE|`>AxB6`uzF$&r|5XbuxTvDv$^0|MBtB z^9}v)XZrtXJ~d9uZn2?)`q29~1SD&NJfR17M>AGXdt(@{;fDL7{g?}*-E>uKc{6;= zT^3tf`?p0qye>9wi+_=yN>Mn+r0UXWx-){tHTT>N2G)YLNR{pVNxs1WL+SCCXlMQt zR3rWqDye+cml?u$<#sQ_TjbYYVRh!+8UVZjRnB6_fKsLmmbhhs)(;=M=zw2-;0D&* z5EGNwet`wI9r(|y#iN(M0XBg&7U=fhFqHnm*Hsbgso(P+5$iuPdNh~Q^fpE+K5XxN z2tNuu2?)Rtryc}l=P~d`*~=}qX(mQEs>w!fkPqttx3KxoKbjW)Py9UP{+A+UACd>` zf&2gP0mMVphK9P92k44G?HbA%P+6t3Z(grRL?v6fGWMo+a zm90CH(FEca{(WReb1QZT%{hd2s~-7#yZw(aoZ|0oyG8{+-7z_X#|u`p|M3SA!l$19 z8HX&hPa*>k>VKZq^*_fijy|9NPx5)}`9HyZ|4asUkO7m*7$^Zk&ivYsA+-ESkZ9@C zHfD3k3}DF04v@D9@rdY3<7Y2E)BjKL z*-if&tphcp_F;tn--@vRUrZ67bp8ukuz8s(_OyKPyU+j8%NHB*pT{r0`kepylYIOW zPV-zHRL9)x_JsY9IOA5s`D8U1j_X-*0^j;ST`1sefSz0VA5!l zG|0EanTNPCn@tD1S>ZSw9()K{P=pL zeKo#39ZV*dK>4GKTX?&pibEwp$33^e1!v>3iya8 z>)kiE!6tcf)6PV~`WsJ)%e{J5N}eqy@scH_KApowCfwt}dlr{i2FzFV`?;p3Os-V; za|aLV08221C}CUNvUQKlSV3#XA1dQztuY}YXOco*t6{eBBc{==k5DrK81Gx%yMJ~d z$yLFd;FC)>XYzvp)FJnbFO~(QG7RRW$1`JTxYZ{O6lM~TJpc0$R2^Jto^Sm002H^w z(LnNXR1QCd$VDm^>+khs+TjM<{8`(mQa!nwXYJa|`{wQNju$shNo`CYovTJcLbV10 z8NBr<8d)3G&r9dp_*vT;2KC>0)R>t39Nu^>Y0R#|Y&}O7KfyM}ihCh%tNc6mhbv9N z>ko%lr{Tkfw4eBa+@2$mjfE(BRSseI6Q=!qadhaN7MCCNg-H-<#wc?W8$eT|WeyIW z-#V^Hbj$u;D@bEs#6&}Z&9LqT9)@sMKHnbl*Xlkr^jGB^s@s_x@WZLiLpH({(b>d~ z>J5h*M~C$h0`%CiYdbcFV2Zyh$?tf|7HptmnwnI{K1P^Ri;a@a-z1~SWtOfrV!Yxh zQ)^YQRYSY&2t-Isb1cfo>(nceBCp>}{quA8*hDL}c=sVWIW?0S&#DIvy_zJdLRUZK+h2JgRy+V8SH+V$vN@caI@7YedQxu< z5!?E+k>kyNcI0+*K(41x^M7nixMn|1>C~!UH&d{^@H>w4iHL7m(W~(%F3q-mw3#n% z_u~HewXydV3vM@dwW4)j7mWuqs_NWkhjikNNA~o^1?FJHr1RuoWFcAZW!k--494zd zmfiKX(RREJpo&nyJz3N|=}+F=oDEK{Uk7sm9!*O!?S^+o{fpt_-f6f7s%|cRxVgGK zyMeUwwO(FHvB9%KK(MjVH2i|(#bp1;MG|yd8*?iD(9VQl zeRDaP>RxXq*RNg;|JFFsPcf&^U+}j9=EKg1R?N zd~wrAlfljT<>>X+^;9mSTY4Cb&u>mIFTWo?^4z1V-}h|Yc=nB-FIW)l!rB|HKsayC zR<~=aSN+N4-R1b~kD6!@sj+=S#(&iOTuqoQbL*d73`c)B6d|~B7c5T)AlcgaAxCG;G{b3<}tleDFN@)R5ixyw$2$e zG~c#LuVu}Sw4v8@5B?4P1fFF7zl$Ba{S*g)hx|W}H~l|f9)7O>{z*Q&JbXUXhto5N z|NGhhW1EJuM@AxJEl(A=p#;oBtzSXqf|;smrp<;DFn^5J&+o{*xuFEy+EHEW=XYk_ z-c$l^?X5xU=XYp(2z?bEzta!w-5-5A{_p=hk^X;3_|Jp!zlYB^;(rg1KGXkC^7$R; z|GyR4uko!muT>x&ZTR=(Qmk09WF^Mz#**ft-X&~+#I^m+;WvkYFR8t9&_k?&_!ds< z_}}6Vs#tZJCBUyYPPj_8zfbnG__+rXZiuWGFBt~$`#V7>oa-;a+$GCQXE z(Hm9c%|^$zSpbC3xA5oB6F(2%|J@}^R~#I_K5&eO;y(`S`9F@ndj9hB{r^cm-32dN zm+wY{@#OP4{~!2y`23#_PY0vPU}FEcIqAQ<8H}DV#?JG9eEik%M*jE1m(M=e|N11K z>5`E`(oAU%At5P`S*94cPAXd^>W;H}mS}F8^~m4PO%u%no{D@e`C?i8W6xAB(M6v5<77z!!xjWX4i)Z*sE3#1be3E^C#c?5u~G z9ueK=agll*vB~qHK7Y>(l^i6@aFl^KJJ)bp3787H;~Wsbgfryrp&&C4C%J8fSFIX)jBuX_Vtf|Zmm{dk%XyO z@)@S!eiA&|!>jXtdmk%gFS%;Mj!5qwSxA}{?srD0%lr@X(397b@~2Ctx<~w(tFTf4 zBPqLMsa|2<1aY&3Tq_n4RmMw9{C_1y%#;$6fV@DiGp^@+_4c~G9}!B%w%~N|^Vt3z zJjI7X5>YIf1TzzsLU8ja_24<>3EcZKVOaq@` zMF4l)6NX_0jNC67;7cLMirzAFf;T4LIO}e!HNnFWBP1L#{!-avVt%o=@LZIcJBP7I zwW!bU7&!wn2zmX1piNo4%y_KP$Ghtk!{bsz`!5ygXPGFo7)j$fD+(sf-LT{{IJ?)1 zDNTe8!1Zouj0RFIE5yd*)3m1%p{dBAHP1Av&P-SaR*pBc$zr;YHr`A{y1gxypm#KL zm8Yv)Wyu#yBDuOHR6_)v;q~pn7g?mQc2&qS##0%KtdJrFq+d~<6)dA!48$NSllinZ*HYsTU8RGV5Gx6qHa?0M4v&4JNTD(}XPa6yRzG+Pk6!lbSpfOUWoe zGhtLiA3(1;5l!+Gpf1mTEake}YF(6R!8=#D9b}lPLKD>CiY{2djsd~66oM)sP*^%+ z1wEJzCEWCYKEMHy3<;!ds4*H4Ohz zL}WNzQ9Z!Z5bfr@Y0!K>N>r&yFNjpZ$qB`^2zko;rAQgDO0l?O(qFGZX6mj^0|1X_Y@{gWP&Xf6 ziUb)cp)0HW07Savm5_wJr>k5~me27OyVdv17jN}s$<^Cykk~dPg?%!kilbQTpa&gz z$9FptH(?qKcyxFOgBs4A?B&a~0yaZPa>r#+(iA1C?FRvSQV{i0@6h9z@fgpTi_-?q zANT&)ytQNFn<=FcXZu$}aw@V+bBqI}O!;#B?QC{T`pF#yfk(@@3n|JRtf5Sj0Wx;j zbm*fFmfw`H_$wOU(uE%Qy3lOI+KKLCE0|8~m2s8QLgNBwv-xB~8$CrqD__O|7P@9 zE0T6I8&Bx-gi&|#I6-hv?PEdCGJ{yqn!srb3BuBnnMQ zL4Bl;mdAy8w~nXcsq@QD^%Dp&poRkpWO#BBg)0Td=E3#Zz1zG*HI>~8adUxGtVbr? zu6A3kS7o8uc*hb!&KQu3=KMWFuEE4>`ts(s;ksl}lT5cxOj9t+{g?&YdY6EAdO$47py%dNEJ! z2zSg}(iKzSngOVSC%=6mGPZ`y`{Z>=0V=F*^(JLnaA}7~VGP;}+2&NmHk?Cbbrf&xJdNTzf^_f6bwXPDsqn`6o1oz3fcZ$Y!|W*%&06(U0^eF4XnycW*9Er zX~R_X4E1hp5>rQ&^v{|`SbKqmtyQJyo}uXVb}nLQxFT1)*3)exy-HX?d8&*Qxb|5N zT#AQ;L07i=^#;GVQ)sT67d4}@ZTdZZ-)05r-!oX|Fg8keen;cAr$!675ufeQjERM! zzTGi)6*Vl9#A8N>Do9I37Yyzut_mLG6#TbP zuZ=KVvNR`rrT5fS`DE{NCOOmhBF&NmH2LUF0o8lKBsFFLI3$?KVas)@*Ls@=O}EAeG_YS^INrf6#5UPFNN%S5)4DNEcjJ30H9{44)*KD$_z)CI8I6Mhd2i z8kYffghCNj&OFg*(?C|~VM4BQufI=nFoUJlER++qQdTgsV#QJGa|R)66Wg2n zdYdJc2}t&O)0}2lv7*eQP}`JC5woN;O~XQM5DUH^k-d|BjW~Mi0|_IXf<_)$W|<*f zK9i(jG;zGoC8R*p%?8;WmjcUMm&(2fKK_MIZH(X%k(?Is(i{gAK`IQWc_!d}qj3kG z+r8lS1X=oH_!6-4kiGU4T3%sGuw!Ql**o1gr&|$A@w8lJfCA`Rlo>Kv32Dz5Tmu@# zW2V|PxCG zr+(#n*y=Xf9mb|<;laa+6m~d}h)}c>bA4*@Ojy)_q)ryk?NJc(roo%9dA$p4A%N#V zu`3fK<}xl;;Q?fMQs1Pobb8i_6?jZ;Q0%R&LdXK0y4l44y7AaftNm%J!ghAsz? z-_YD`xWt)9L+h?Hp((U7zsQg}KFyh@)taD($!SGiHPk0S=g5UIC92Q_s9|NzE^xU~TYTu8v$TX(yF zBM=&If#hv!KsFaIWCH+eQexA4jX<+#EM}>*UC$li1ftxZkm00lM5WPXAjw&IG9rWF z^vz)G|^y5O-CngJkhxhiQ&CPkTWv3Xvs8gI)B zWODXBoS5#0KT+kLWc)1vLt`VzC+v=;BKHb5>Ze;q>9$&f_io3AEBJHl`B>?Bd*&#A z;;~%kg#ab_x=W^#W@-*TF_ATy&(@J)G;3U(F<|DEqeHh09H3ihI%> zTv=;99^6@A7O$A6jmaWUW2dWsq0-$%xYo$5)WJ@KhCqLfO+xZ@chU`<BqbF06XK^;s9!Q;EGDIo6qhJs7nSKfeGA@Y{DFb0k zGGw(26xaBQ)h_Uw;g{)4SzpbfvbcLn{|2ox_gHo6cCR{8hEl>lc6~J$HOOE@NmNlZ zj0u8>{?GbHRu1Iu&{$req9)FKfrMjIalLiG4NXUx8Lnf+sM1m-xZFP0o%&Q{aVf$7 z@mevt@c=YCFor+GY;D}9d>U@h!P*bIq)!?3U6qF0_zvVJ*b^;Mxu zPwgf%625WK$krqSPkMBfS>E1G5CY-`-AfWda(e9cLZ+;M7s1@n}>HySa#^Ae^>IGR8_ zF9w9-J}H(`l#3+}$!KPrR~uaDuijqo@A~ay@Lr=swJ{qWDvqFWMfCLqC{m!;ftgKF zNr!t0n*$f`NgBG#DR36EwI3qDvP8&;oJg7_5rI6Fnmk>Igrz2wV~du~-iQaOC`xsZ zQ>FC9O%qMV>4F{PcjXPPkY|gVxsW$;sS2@TQgxTbDzyO={>t5YwCtSJe6~Z~$;kx} zVV;#p7ID#VAarw!jN1huYz5I+NQN#)@sj77HYFuZJMh?Rwd6St zK~RaGVKk+;A8e2g>xSOjB}7a~gAJ<1>!=Z_#1O_`z3=_9o@5 zW54Zt@1Ta((*<3b?Lt2ny3~I4<}da0xX~{@Dts&Wp_HPMN2j+(aSp+s^2sVmusg%-+W=x1mxRSqz;;mE`6b z*1J4oM(skilncI}D{-d}v;)nyt$GMZ9|xePEuAW2NyY}EY@5F|t(@u`Pq!bJDKcyy zLMv=9H`crD#`=%k02psx#*!^A$cP;@t8#ygd7x6VcO#9u42GkpSI}z?s`>`!&5! z6V$Kaokj%e9sC>D@}Dv0O4^%-xKMu6S@;hFfplY?= zEm`Iws4Ux9F%QiwlkR+**S4=GsYS=`Xt$v-_f^#pAs`A;&|8+F+-bcm5d>tI83n?< zkV)NNsVVAW*Lacd6B;`2&oJgtv8L%+l}Htj_E=bkhp0m?m;$U}*+O^Yjip;VlY!wm z$>~x^h8jOjJ}0OBh@1|Fx~IpvF=M+yobp^T@`j~3nE)BoKlzHeI}p1-aj+-mGaCFYCq{k7a!bDXkIW0+xXqZ1QiZDUBaI<&Qwz-6WR_0;JcIGdx%f4itqY= z>x{2XKgBTbexJp_5%9L>cK|%7GMcUxS7a(gs(Qp^Dki5i zUb=9Eh)nsNNI41Lf6LjuKJ)%FJygnyCrl_U7YpE6{RRdAkM5n#Vqh~+}xZ|EvP*n18>01Lg452oAB??ApXeQDPGZQtFR2^?H(N}}<#c(ck`4g<^Xmo>3xb^ z1ssYNFcx{OAdI z;qcYMKWVaq`!5GG^7;e|isp{mA!qOB(?AVe@}SC0hzq4(VHi>`ngqZvO*1!$88hFfTrhC+V_8ax;gY4+2`~S1|uFZ`bN!sXs=C7zw#Ca`lKzM|i4zbB zso|kW4oP)S?}-xt-asM08%3f>l^X;&xJagd{fWxVx&a_1we8v2_uct0R!cyku333` z^2v9q;o)d#_tm#{pAz`&@w&Vmy#2hu0;L%vCP?% zFFl`>+0pfr7azzw^UGla{|j}nS-n^Px_tYV-O4Rr9UyydV?y_3m3KN%oQkK~dkC6m z=jAbAp=n)p^h*1u-o33J*gk&}1%odSdcCvG7S1qSWw=~`>!lEsl>}|Ir_a+z$U0VE zFxyJEin%^VX#@ONWyy9Jv4d3XQadle(X9W70a9=iNyy48^Ng?3gF~m_c&pUprFKy% zGtil4HfHN(ls5-M@ulNDDBrZ>)48~zt;PJ z6#`-tgtfLK^APH|-|SJhOY`iiyc94Poc*5w7@WeMd+}Y;!sK;Mx6V)D1~8Cs*yW#E z0VXxsmsdZq+iQ$=@08rjGYX;}4Ve6>ajQgAacs$JLsdb#BP=vUHlFFA)x?=Oi!eRO!Ki1muZm?H|qG^tmAht%;@d)X1u7_CA(m^A`=BqG49*zU4LPt>F3FK8e)oNJXtKm@fdy{ zPG?`>hj2KI77P5{I3E60ou280g%ftB{xn;jvFrQgaykjrVVSD4_c>lf?0%uo*=#<& zoriaUPI`=3csq}xg-(lHM)Ny3E6b1Z0{^DY-hjn7?923?h4YBvr>Mn+d1u0|qmSYE zM!l_D58$PFq>jHj!s^7)5oODd;S&D*G5i#Cb2iiKx)g#xp^$_wV}edTPzQ;-u;srRh8|m-nhwJAXf_k*M}(^Xc7eIsU@t(ei#i zfoJX~_ls!6?xIl~25dAP-m57Da?}83U^bslVVa@|$U2a2v;ay1ePK8A=^gw0aeBw% zCHovM*z|fC#*=77a%vvk+)qZhP7w?5ruUO2n}zWRCdTO~ysSsB#O^3sEa%fNkpDZJ z&M0Nrd1KJ)T@KhtY@m2Dh_ExC1@nwuG!nLvrjl1pI>FYxD}E8{8rcPkI`fexOLZEt zCDMLO0Bz-hv;d_Xu$@d(ZC%ryO@O=ev%AGTq$hQOh)N{sEIr0emuJ%%*XjV|u)W?{ ze0`^e?H_Yvpx^EVxo8k{8J7de)ILdB)Dq#_?I7T{tmNFCVM) zG7667Z|WdEMpHd{E2~D2V?PqFR<8?6P^KJT9mfz$*OZ|i(V>&6r3r5Wt;cDqjYbq5 zkzys|Y?bF^UEcEMcctG*Wsgw(%4XRp-ok9U2>>qO=kkBHefNM)_N0n=O=uuA+=p#}%| z4@3{_<+`d1$R|{-e&28Mdn8VtjcM|$I8ZO$^te7vSBn8w?XOuL!3NWmv5ibD|De;B z$s^b)YTb{#CQ`X|G50#zI$#?lNudz-zCe_>p*I7leMLFul#x!%lDnMtbPnnPWTpds zE4l{^YlTi#w7gUR^H<%bd_A2GtW@-Ur6#VTVR;({$Y@KR0_uM)1x{(e1f<#L{pQ8g?!{Uk+ zVxRK0D9KMO)ix+_W9l40pZN3m_ttr~7DeW8n;*gSz)>?0bD9}sR)Nj{t_)M{hLKi!?NU%FK0$Bq#6_kn&1p zWYBV$)HmYi)Y2<}qgv*v+MwNx-C3R)XMlxRTCucHI}AB_wwtGa^PD^zEU*aY4YrL`Zp=UZ89s>6uQn?lgw;n zV`npJfWZrg(ebiB3LwaP0dcUO|M-%D_|(BSxgpZEhc8yoi&bV`{+8ZL%h}>0!=lbvEjpu2OjDVP`4I z2jE(Tw99qn=$_B1mmSXgKIv(Og$V16fOW0~coWpo%zghVP;0nk%YrB3qTZJQyVpD< zH}V&49?g)F1fF%D?)75-3lOUSMF*o9N{qpyK3dc~W2at^1O3;#eU%=ZyhrTj;Ocbm z0PyNug=--n;mRY!MMoR&?aJa{suJtQ(3Hy#WW|f zdrmZ`90nBC@{$HdHBMf+!r-(}vMxVp9&cwrq?|V`q%b=i>pmV2bU4X^WgNT?U=Ss2 zB@TI(n9;cDzqWxw?3CoTwVZGjHg&p@X{t^PIFxi~6wD{eV*bu0gDdN`&aA`yW8eV; zdHMZ-4Ig;1Ra=&RfJ13A4UgFL0l8IW*=gVme18ZOlvo!ck(y0lQ!8y9xDfPL(?am% zz>=CgV={4-LHiYvmIA9+wC`-#F^<;-NtJSC_7|XDsSY#^DnAEH*%lkusC2x=y0%N2 zLS8xJ7DQvVl0B-{*7>!&Fmef$FhyN0=R6L>r zzY!w9__V`TVb%)Cr!sU~<~uI2d;dQ5th z*WmhR4Bv%A`)F9~_C>xIkSMRFqniTEaRIqkyw(^cO8M?tWOzcu#T-1`Q6&H>d<}eIe0A(w3aj# zN<#l>z`Ceu{X-&4B@9bm$r2X7>F92XS;xuM8eSuz#oi3A5C@}O>!c_N3_&=Kz|v;v zT3jdGl8%a0)kRje{2Aa>&0naXN|VR+?k!9B!AN}LlT^(;0g|PxecE%Qd^p!t^Qt!% zfn$om<;>IO9#AvbnkOhwvT2P`i8b&*7J4516!48K%Bnde2&Pehrb%r5l%+XOnhxRL zru@r_sIr`RMxL>U{K=`(fO?i1?4Z~C^T3Q!^8+=QAS*)~)R>X>4c?&G!fmLrBm@G> zt^VN5HLvJbK9Be@wWVVle2dnC#)F0qqhzGf7ERuSX6FZORxmSD9EyXJ#&OyAC0fC* z`V9w3GydWmCc4@3$WDPf72-5b2OfBlI7Xe%a^}a*#<4!c0~YUgB9Z7@;hRdA7%+T1DU*yp=?`e`s#0b6ZwYDP|Wt0q(KB4M4eZUrk|Y z9P;*cb!9kp;!>y+*B^9WcJNjQvnG7dra)pGlS1<3@i*n0U>H%h1;)jcXWN=@MbIvt zU{V`b2XxxL-n9sRJL5$nvK>q7Ol}PAm;%!_1AnaQu5%2lCcTAGovATaXFxGn)O(^k z6Gf317aL{ZOaZ#Su;wqQ9QcHBBu5~7ak7^^Q z8sWddrwwd`Ne%B3OoV3T(ga_sNsq%YV_&oUDQgZVpda**@$~r4EVZ>(hdnP#q%ZLO z6{x-sbRH%Q1kli$o>#-7Kk_VD<@r~bs7+n8PRCIk12!;dxt`4OYbd5VNl&KYLUMFw zO+0d6abzxroHQWJp4cH=F#*3S9xSYUj&8#-o5!~wmy3b@yJ|WdFQ$mt#NCY#;kZAAbAm3ypw-9mhsNO5AKZUq z&)j~&dc_O2i139U*tr?M+KOh;7kyZ~*?jsb9z`Rzn2w|I7k2#xtGcUZb?uXA?zDS< zZJHijv2&-rK+S&iDVhg3Rx^+B_1$;s&6!${xdzG3M+Dg%PDhdY;B*l=4^hW($Eim; zYqm7blE%*uu(Pvp9^THw*+({-MhjTn$^Cd7-+ZAy*+Y3fj&Erj-A_iaA3YdvulE;6 z^)O7IBYpq$ddnPqmZc-{mA+l(DK}}iYi=-o`s!RsD(MN7+Z4(+O-H*9Ne9+W6?1htK;kbOsd)=sF;#$)k;nWzp{h$UY z4jrPoo+7eRnm1^+XrR+lq7RpX>if741+z12c*w;0ds#qd}m$dv5JknK7zay~_*j8U#at2%-f zNF@?NURpy*TjHhOqDjum+~r=vkU?90S9?1n%3G}>YBP$!Stf77532f1Vo>gmTm+?{ ze;>lO%YIubW6-vY7SpRm?_s!{eIw@C{$qyPCddxO<4+Sx}55gXPs-- zFlCslVR_ZM)N_uf7nOK#T}?8bTF$a^AyKF#H_Fe*Y+Vz4g^1n^U9Ec%cS_=X6&{a0 z8DwM&ra5wCQ4y57u>81gL+A}?Gi>V`Q;^ZMX_a5WN>qbh@AB=y$?!yv9@R-gW81}W zsIlAXOGXAQXqR5TW#>oQ>NmRP%g zOOr$w@qDEOE2b^N+$Lc)TMfD=SXn$Agh$F&h2ZOlfMsHv%B{%OB2fFW5PM}il6-OU zB=p?E&Ll2!x$Em9TdE^ahSDvs1#m*Fc1Bhg-)@y$s>G@CX8=ZVe5KZxq+jYP++byf z_+>4~sw5MZ_WotxPETI2Rh~$2W&KJ1X zBqDG}Vt$0_frYZ_*zCD%p(>pCg%jPN7XsbJlSm&0+vQpHP=2TX+CLrOF(DGTW9T!w zo~>H5fk6xHB>9#dzz~7_aPh5A2#OkrqBN8(sT4&C&}#aWPV2MP{FLHC9ddWofm2TcbHtr;)4lLM`9Q#!-|ch}BHQyv1254pzC>CZcS zmspUEJ&9E*E5XjY{FA!L{^{xwbfudPIQa!SIlQb_7lspcU&u9NNkOub+!n6${77`J zQQpsAn-)&S@sIA&E!vP?T~({GKOl^ra>z^pxljlQHR1lb^wwVI^0_qtEmc48F$Am- z6_;6{%^7WKxw3`Vi3A&huh+F_zhQQd(vZ=NtnxfnI@7+c$lRe^ApEnddHKA-`pfVs z*m;lcKs-a(FGX$OwG!^iwLJ#5-d}6~2X0YLtruBUEzsdvl+vyqWofHnzF?=Yf7Cp6 zI;*~LI$CkrM*u(W0t8Vwi3xBEcR_*ZVBv-$Q?5DU_Gkya-u*t$TxA?H6s!davwiRZ zWzRJWWew7lD#+>0sea?c`pOOq671@8gS|ni*0(F^+}$06!J6OR_R!YHI?t5ZO%NeX z(~km2W^xCnX(G#_-fJ2uH_L%iQ|aKNgtATgDG~cZ>?9cBbeJ=>vs2Rud&uj8>Q9-} z{0!>d?nRb>sKsLiN`d1PD4W9z`~q_i5c9N2RoMouHxAk(cT&k1W5C{Uu7FN6 zt?_;_5jet^xt=WbE!b=uYmIsHFSA7b*jeNp!q4h82NJG!IBMzbO-`)SUIqD=AMB2> zt%IuE^Mj=^AtC4Lk;W9YiG&{3%ym`3EYLu}6L8h{OV0X#H(I2!PcSJPU^{i;aE179 zxRTy@2pTwPgHE)WMr25+&Km~ZL=ZQ84zzScM03Y(_SXMNCjO?GsPXxWX=rU$?@l)@I9Yd{iw zz{zB~jFrx7Ywr8uUO!~kC=SThqM%S(V<250?HC%w0+0V0eYQF=qilbMm+b5gLi}(M zxJ?Z6L_jv6raGQWrSq6@+n93+ID!p#&-tkjwUU74an{B} ztm^Hykywg&hqZ-S!P#ie+d!92CE5gsS<_Vnojh%D*c^dYSP;VHyMa#e1%qaiV_npi zgPL*B9ZT~4@u~(oFVaWRhf~%&L^|=x39N%dCoxbE)YG+BVgOc>vM$W^>z7Q-y{o`j z?&$hcj}qLwM6A$*-0!t|l!#QK3)9h*>%GpRHh(2?WI90e6<^<7U`=T7Z>)JyK;CQ% zC*&M7`1i|)jMGGK1pL+6@U zws&4snJCIWob@WFO4W5Kx|BhKqHymF@N8m%Q*mHP?x>ESsTiJ8)STUd(0)J&02dmP z!-*sU1&!$dI>Yk}Qih>H1L%e1ODKeZf(jHkj1fZo1{4BE>$kKJ2WM}s#0H9wRNCce zfP~n9(&CgT*@+5P!#mBLxA&3|C#L)|uPU+IgC4id^Mq|Ui1u8Aeqd`SvfS5@Z5_x zC``3Mgzo4@1j2XpHiXNL3dLlOYrq0ft^1v#VMShwAN37wTf%HL`)HReOlyL;tJOIQgRQa%JYLmP$CZCcqR?MM;hTP`yPAmFABd8zD+ zdR3Zu(BP7tKO2D2<-%X$n9qx*UtY=XGX{qFDPg`aYvZubZN z=wVL=y_m%PiZ0kBa ztZge}YwK*T&YQZ|yZm0+A6WE8uGwOpQ<=rv{85we@F#fgviZAfC!y2k^1{43G}pR< zywXi|n5>zMc9Q7Hgw z6acOAz>5Ozl%7*`C5>ps0`GlPzL0B3J*`xaJyIm3Lf6El>fRIT(=g8-l~s>Eh9PMq zHbv3bs~0?lEABSWlhV4DVVmHpU$LL+LY4`F&9Owq^YbEH=PWH{QT@h+9T3ImFiBpk{Ubz%yIBu=Jv4 zB+BYcKZMdkn|%z+&*SK2sRb@N?6B+QhhFdB*_|%ztEbrchC24pt-wZ|zGvs&X@&2) zE8hPRsuAu)A=kV-(ku!mCuLks1HM>F&So4r6JPT(lE(Zyi)tk$19m5qBo!>;C7tDP zqk8n3HV3`l?>{}=A`dK^hk}=ao&7#i?TmRjkm`m5VGP-CtsXQ9Bm5nXJuBNM1J1*T zUN5|h=J7CG^m^x)eWj!gdBzj|!AfZB?R=DEk503S7c&2`*E_%Js|W7HFLIsZOB;~@ zJ)Juda{=jAYxQq@R=xYKuNx=Hwy2O@B+Rz8OjE9Ys^qrjZ?1W=I9T&7r3a>x%m?)-a{?_?&|JYctlPy-9tZGGSw57>gstYUwa71`hu@hD6E z>v6r7=9xRri%L*L6o2(eO$8|-Y5>@}QXW3E?lu^e`o}~(u`hY?HSou)rs8{;iccaF zzt$qy;2js5!*G#1un zRq#}H^p6@Tlzc9*u7Hi-tu9J+hQ*SuE$@;~Q1 zNL-hVLU?nrg?cGxi*SCXq}urp@P#FpPdxJ*!{7bb>qYnT=`0G^T|63%BNl~=B_(X! zr~}gLo&N>rAYJiH!cN=?{NYzothoG{X92qwDKF|WVApw>Nq+HB6u*kCIyq|7*6CI) zVZeq(&MWo9jhcjleW|y3nes>fpr|9A!zXS! znX7}l6Gfh9>Zd&bRuU0FDIXehcy{{%5X|D5INArmlZw|u4gdCPY&cltg2 z@5Qw&OI`;oepF{*n8PhL7Au~qm+pANx4c~QLj9ad_5XDtD_j=*S*rbW#}9d>tfsrX z$k*#UfYUkTsooM3xfMmg=AzEPf3#4G%~SQmVf~;?k1}A(Tn%zrXA*k;iDxyhYFxt4 zJWVBvzMHzLv&Nym0q-L$^7utZWO z)UWGAvasNIT%;%p&c-5F=V6iWluT4-C;Jr_@_vi0ksMX;v1lg?yxyD}@2@i3Cd#Dv zEXs;q^X%)JTmCB#*cYYE1nfU(ld0bPhup3B>Ph%h9c5dXYSg06FY!`c7w0u7<_E1UCq9FZtmB3cwPTiS?_kdIAHpMAUE8hX3~VQ-Xe7rX4A8?&UbqOSabJ{E^RU_wotT?h`>bE}9&>zXHdL0^J5f3A})0xkbm%PPlu-arBiwM2@pRbc1b z#fpI{^1h`o)4Wm&jr}Vd0_^>U^y!hrL~yH)%|uaS6Vy2bWXe^Y@ziYNpX)@zL?_e$ z`a^a~4H3nfC%M(Z?u&X`^TUU((?BZ&dc~tmL~a$UhTiJGxD!>8@AFh$a_Z3WW{X2! z@HH=Aql2NA(bx#7GKMntNs3He7W5E1kF!h^7iu#5|Go7R4w(i2a{5Wem3s2e)>FD9 z$V>@PM`igRrQ>&2Iy6TKo^VIK`v!gEquf5w(#eedlt1t+6XmKdwm(`u=C%-GE%ZUx zw~jgTVf7#~><0?&xGcCxn__4wQWieS$BUo%W`o8Fis888X-nGOsZPQ}BxduXs<*t= z>R6Vm93MpKx!7}=wOZpzA+35wmS|mk74+d)ZHZN#8lggW6vl?s1*2}`5mf}?RNqg( z6}0p~(7y{IJ7U(j~Q1i++Y{S=;n>uXLEKygWpo%Str2Cr}rTJL(PzZs+ z8qB3DDH{UtYPh^?C6La_<`44yK9^Yq`O>yoDo^p0d!M3b?RNEXGSm{Mh`N0f$o=t| zHJ}F84_p>IZZvmC5go8ke9g19w65TNUcz29Z`s93Q>Qb9DB&<0M_(Kc2MnwEJ(@g)S&p=^D0iyE08>#&Pu3)3NN;OMn#u}*2@m4How29Dd_F00qB-c|w_p`E`qSt6?k;l0UA z2B5?ApwW1HQKSd^odKG?`{uN|DGRRE2$rXlu?0{Fv_Bxs>{*jXILdHGH-F0>MR5d2 z>6cHjdE?Dj2Wa!f6nhZ)J{8}UzNY-3%*tLb&e)m*RGUO3e2B2qkeN$N-PX?5^HSC; zTW}ZJYY4t*ovV$zM(XK;C%)iRIw&Ri1JcJ8cxx(6Ww;mB#C#p^|Ko_YMt1Lm-!DfNaBQ?|tb7n}Pxm^sx5oi&bs z?I&?1zY{MoAc8`#n;xLy^Z@+AHizHaUJTIqk27^k=U@_j==J^w5_uF7`Oktw22B1& zIOJ;pkQ#XBgq?618*ez9)qkNvgEsd@XKqMe$r{a31|*okNKQ+nukQBa)~a+S9*F{-#B5W}3#P@&sfhp^aK15^4FgsIOZV*tLX@6Vb z$wC)Buf%fI1`oSmde6=;`wR>0vp?%k4t0Je+wnu-RPoQsN>+8{PZv-FG`-7S=oS=Q zs(NXxjQ1cQo`FRiIWFJs{*zf-6>ILEk0LE)_EiQNh;d92b6aX)H(F{_%Y-_iM6~u6 zH1@N4-d+dZ?TuNO&TEvdiXd`INYW2Gg}02;oDM96&>%7-+?nvZ?0wiqt=VvTKUvPd zu<$OLjP9bza?$Gz!$~*_pW!}RS?)96$8Jy#P=)XE1hTW`4L_OdV?Nmb(Cd8z7uWvb zP|7t=*#k#f|5s6Rfr+HaeV~AkCO)G$hnK^Aaz@?_k`MosOji?2K%lnHj@SYmKHvC| zM=BIUQkPpAJ!8^#rN5p?eSKyQFnac`=z7turaXvg~B=&$w7pGTs z4fhvvwtCazGq{?Le85ng5iIAt@7_us*`g>xRF_bQG%`h@b2QCTGY&ga2C(o-a{;2$ zeIXzD`p_w9*!kI*Kb2>Fr5LRGCZ*N6FExd;KT=9heIf?IOsqv&^5WnoxK@_4;=JrT zJ6IRmf`&yxK1KgY`YRMK^}Y;sZqP+euFsA;9&TT^Zk(+pL|n^$qnZiPxDe6n>u*hR z?k|W#mo4~4Y-?U5Wou3O`fHXyr6Sq-#l@(cW^=tYy^VIiI0fddCthc3f?iqV`$B@z zEY=TMp5|L6YXU2E05<3(J@V9$|FWInSaaJQ?!L$?v2Lt0ZHwmoV$E)_N)>2Xp z9knKGKT0!!&WI_q$WmdDaE9Tl{;W^;r+E)lITng&_0!aN5>RJt1#~s-(7RuJimn3H zkEGASBQ;kwFM>D0&0?JD;29M-Q4%QuW+OaqYFlLD$uvdrf%{T;Q31E4k3T|a8CY9Z zKvb6KB75qm9nbg{;!AcC0!=Y&9Md$1vgzX4BO4z+_mb28#LJGe^nIU&$m2Z6L3f-Z zqg0vWeqiey>+m>R>Zrh{=|qPVeoWmRJCP;N?R59sa<_uWk^PomUCgaQiPX;p?tgSV zfg@A3OgXZKXuiFl?N>WGiR)P-1>Rc7N3_YDLMNK4+soIINGTu@PSvpA6ddr)37kj*WLa^}1szx%H|(Yw1{;XKkWe z+eDpprA8s9p3E$zwIFkevHc7~mD?NenHuhR6jSZ~>3(SbDyRx?;FH}re$v@IW-EOO zK(qveDsHHCopK61cNnd{XV0BmS+Ok7MD-v*3VB@in%24t&esS>tB$DK8EMr|%;2~B zZ>*(PwYRPBtU)MBQ%?)kB&C8~zPtKC+hQ|O)Q{j0rJRI>e4r;v1GK45N+XGgtKCdu zd#6#|6Pc!)I%PX3C7#slik+V&d77Vrp}j5g(leFM&(?Li=S*hemvvpL`2hpxegZX~ zbWNrkMh-N$YV<3nk;d_!ox{6*yaWvQ8?nMc9c{6$id<>8sWmEn$Bn)B%-Poa0tr7@ z$x}*|PxV*TU zki|>3SU-rQP6hk(TSJ!N5XWBMxkPivT|VmWrLJ!pz#?_2AR8lk@jy(1W2=Hp4x$RN zp@-KXS_VEUxzkr2-Y=H(a2%gFiTY}{v=`PNT|MQ_-}6oTXnru|;J0?Q)K=^$Yi`P! zvvY?Z3G2M8U-z3;;`0{4r81WM!i};jMY;(brMU9#DU42I-9ofLv24YjA5iZ-Qd?e9 z+#Zzx;Px%sb+QY}l)qgpiQ~hmxx|y7>(T@limk8}Km1O>;_|Nod9c)tQERstHrlEx zFZ3T)LQP+3frNu&g@8|-Lwj$jSI?X8s#SKX!umWap2+5eFDL8W5NqLS^|+>hG|7f= zhoE^#H*yP9r7T=m?CS01Tc-kyRp!y5Q3%w6JwE>zq5qwxe!E8C&*Uq@HJ=|uA++~d zW>h`~lobF$NG;e*oie$@a=|pBXD3frl5zCGvN>Ia*mGH+$N@pHb3on@6$y0ZBq$jI zI<(TZA9<>tgh!yZwsshG_Z0EV&17FpG_6vhH8iPVDo zq!tB`T9kpIbg3R7vlp!$Pi#7MhgE}5d6BR)3S^%l&A#}B@Ahhr&#JCWXE0(R1jbXR zk{GvCOO>TNJAX8|3CTEH>s+HmB}`Ny711LO!rF@84$zHSSP{oSC1`w2@6$ zgU_S0PQiFNw~Ro8%f0~&25%{M!S=m0On|o4G_LPLqM{2a7S_>sN<* zJPZhElRg;&W>u-HSoj_O`=h+6qE0%Y0AgWVVZj!iaxpY(HarzM9f}M3+g4&@z%Cb3g;H}uPkR} zEi3Pew7_Fo>YV>Tg9H(&^dg`$py;%nPqn_#yoZ5#VJ&m7>)5by8WIt&2i~1TtP5wO zdRV&+KuPU&Q3#BW?P@rn&g2bxy`RFFy2no2crq(R0V@T&%QcX~?7)(|UR7S1r6XV` znaN6mac^qB>uiR)Y$QgUfHfKBL^W0#RaMlbGNSInark9Hg8OKJv&<=QwlsGrl@2?@ z)L}Kow}Y#dnt(*40`aYr=rj9|C>)2A(d$(6Q(AYkgw$_Qyh&HQtvOufq6D?^@-KgR z*R6BoMQ)1+fKw{*$_HTJ`DD`#FI8K}pq6Km8M@v8)K74##nM){ieaOw1A6@|SvpsX zv(dU12(b{@^}oS+ZIpNG5+TAzPYHcRZ%)rz+bh_$5gK$Zt;fxXXVG*vj=o#4c{IDf z9>+sAyrV1ZbJ&^18xg zhF7+UE~(kacpT4W@g!Qj?x4TyDptq-1JudT+Pb52VIo0F9$c~8r@T05r))o9ySz{a ziV{%?6c8mfrcu-~x3N*7VadvFK|h@|niTLp_j-$XavRR3^XT=0t#l+CsPekR;Tfji zp==|LWi$TYqR7Y(z23s#wj{e6#e2awX$n?mNoQ3{=Pie4`|>T}%#OyC0>(+>g+L>@ zleon@blp-QPcv=IdV-bschBdD;oCT+X{0FoaICA`QWIm{Po=MD(o$_T9=|tyeZ#+c zURs{_m`BiA><=%mSlXy6-n~dKFI)Pe=ANrv+MV42nH}srx{Jbor~edR3n%P;5>F@W zF1ovp<`m~pi^7f&x4*>eeU$dSkAWk|Tmc4Lp0WE32`r=gvwq;z@qx{U+CH6^7G}+) zI=FYZrM&>Ngs7l(yV{onW%P78OS;&w#*oVgV4!`asK9aEypv84+*67fQG_ZPRsy{^ z>A=k`uO{*-FVf^mCb+ErnxLoUV?>J?M+*iOUE`ZL8nNqWJpJ73#cP4-Fk>m!50%Ku zO2{l=le~E1hkz}fWc8~k@EIgep}PFWay9Fs{TpzpKJb!>jKl1t`5FYW0~5qb>lICk zyBek3$&?pb@6%rvBj}AViY{+o>IwI8A|`_5p!J zh8KTGrElE&W*0`gxzP4^SA`sliE=M~U7+8&J^4;4eLv?bbOV-wqdg@_AxfyRScz2Z zAM#A6NK(Lb$7O0CYec!!Rh%D$TiqX}48nFzt_`pP5oM9HH%`t1h)Aj~=a-Y?D|JXb zRmT(~(L#<;$e5%lbuCQeq;tklh)0pt0=Js2@#mntA<$$#-$yuBtM4-d=ecko-Nz=# zfdACiIXMsH?j<}HU}|Re6oe*Dbb+?4`L`%5zDi~JU`0*yWsoH{TspMaPPJbh6p;!2 zSgB~zcnYklljYe(bZ-fZf<||mvDUKQi{cSIRwM>>xAKj3o58ARrJKG9+MTIwYFHHu z0n`Opt|O`4EJ<6%3O58yMmJ=NUmm(#f3J@jEa*B?F+6|Htm~}Q;1XR3!KAa57#wX*Fl>8D zq$!k{n?IW91-L-eQwV8lcIxWw+p9P4e}Haz?uh5V*s<&+={36DF2dSh1caycp+L*I zl>HN1u(1$tAU?vb{medhsua3Gr@||_ zh`T-CsNF8GX83K9*L!yHs#0-~AG*u4uYpT!z6gU>0XYNQlZBfQ-mV5iff0w! zvUb;ZbbTTy95AyQsc}+3O7G0OoJ#OW?ZrD9xYdNu3~x+P3ksoog;F{0#~haE_?g zz)=B3A=OK=ENk}__&2_xtNT`Yzgx4hyOWbiWT4kj3k!^YWzmBSwp*j)#6PP!ot*dg zM`a8MdP+Vx{Q=jbW-J<$@g4&EX`A1{v@Hokj-}EJloowEkV*4+d>dHBPX{ENW*q>J z0dH8x$~W$)0l}f-P+9I*r>%9*#nl~iy^H35g9D4p7$sO`RQVcfdZN?FEe&A~iHRBC8%m1zBbY>iE#>ojH!=O`Rot2QFd)2?fp~25Ra2 z8is)#pFX0Pk6aLKS^sQs+C4mZ-W}fbfOk2rPxz^?qw#Hge;2Tuc{mwH0gIR6_zQw& z#`k}Z?yjfz^V?S)q;6mHOR@^oR#N*0SEf36Sq2@r!W9&HOE{>oDS!I#@*{)C7C+QL zZve9pf|RvlzuhWxsIov`J-JFAqyU-fME9DBcXlHt2x$YU`mRD&LV)yrPm$X}?uoPHr-s6A9q zB7IbrZB{*$-|4?PN&rAow94RNPn6C>q8|~YFsB4)#)ycMM{+!SpouF2w^S#Ygnr|- z*rI1r@n0dT?kA&Y&L&efjOWAqyTww8mIaF!@bGlb!pRply>T@#JPYzl%onNIYk=>0%M1N&snF zPCqr;ihvR@ne~<2F<8b~(JseL)@jMzX>8%B{ zpnIePa%?!AETX^NN0Vh7j`gEIg7AE!UU&yRSgJwZ#LGp%uJ0G|Bw8#2HdlkVj{WB9HHD5KNS*Nz2%}`)t!yyMUdi9Qi}K`IvQ+Eo!u;58RcD?{Fl;L@9Eq6y;AWLphU0a51YdvsZ2ZV{n6pTVS>MAU}40$GCS z;7h?;?66-3pm@eEsfdyad07SqUYaRu4(b(FKsLM=St2W7Yp~-iQwY`jmXQa^7iCFW ztZVc-8zktM?IwLK94%fdQ?~_-ZWtX1foz%_?2oky0wwBn7AI!L>l3;Kej(6+-oJet zynXwYiMq(O8UI`LoXe|k(s3O9#^1vO7CM}%WH)M9S(R@Eu{}c$oW!YtNs+6%5&$VK z>y@%f35SUB@?G;gmdTy?my}G%g#O~7*IWNF8`RlugvX-;zHu=`$4syQI>SiIed0P& zsRpn*k~a;CZ)28$u}c%LqnPIhwYgEA?shsbl}gw+ zev2^X9g+?Co9yZUx9=2+af@Bm>G^O z+ef-cJyWWI_2aIJw8sk>#%i$MfpcL&?yHB7>dyUYgXNF2mvs(Fe(3dnPad=1gR9I; z#QCvYF&{T})L#IRyAMqEpTFHyr)9sHc5#}v%<6{cGSgUlb;kOyA}fpMk%k|i@_V-H z{~RG%aM5+hVoFY51PLH~1k=ULB%16MzwSIBTYvZqWB>y%i**_M4+8qaacqd#} z0lWOm4{s^Z13!lA>Z~6yB50=WI7w(=xoRCotqZ2p1&)%|2ssr3EQ{5_qMe_KabXII z`CKDo@5Pg#$K&j%z+8d+F_(#UcLJu~)-Qke7d_#+iN4(lU>{P}{$JzC?Pz+}>s<{T z*|GrYm%2EL4s`d(B(EMw$!p}sA(=Cv)Zmx_cns92U-bFVsBv_3yKb;e!Rv2_F?Kki z8~mEW$=CdVBmk=S9G-VY@TYy1_4ci_z zoxr4{t)PIonL|5Xk@m$i*Q@4TZ_m&fS}FMSARK-tqY0{Y%!|s`okst3-DzZWr`N;= zM*mu|0XF}gHGgt`{NBtrr`*xm!CeolY@(Wmq6n2Y%H8k-0L`Q&tAPM~ofDVz z>!900Ilt`tR?0b@aVKwCW(0YHJcDd~00-~+Ri9m6z5l;Vvf3YD*K}Gkr!ocEB(K!6 zLYAA>jt!zF=vs(Z(g1&BQs{FWs)VF>W(ti6b6=iv?aCKNp-RfXQoU6_t-X{CKf}T# zVjNAjI1#g250tH>L>2P=fw+L`FX;OKe&7vMSI_{OKqEB+Kv%0X6d>DbCD(Efa)au4&!h(D%p|3x_5g`2$>a~n&{%)3BXD} z<6w@}P-_{Ut*-nHp5>@gl%QGUno&K519l3=;r(^w?A;k$wfUft7}weWI8zQU&wa4x zOjIT@^CKMK1+~=>x3cmPGdh?sR}=NOQB4<3W>lREGwc*&Umj(f6Sy0)?^>T2&LOdb zO|k}Ktdw&SUn1IP%db3$6wq-Rxpx z?LF8%8BYE#D~ z!(6Vkh7o#kj97~^z%a)zv-7~-F&S-ML^Btr`8S@VbGP!EXD_pi6-KyH#`gi<_e49D za+T$}5I%*lU8c%tp)K(x0PFE&Y%3pexN{vp{FoPKl_Ci5Vju*^=n-4G1{3XBE@_s*bXXVUzR zFmgo@Yx)V}2s37uLll4~1q%XrE&+JtmBu)Q+GhBR5;5U2KW_bCtv}qYSccl2zSOm2WY79ov??s}1=lr-CB({CfWC;ciceI&o>GNba!r zA<`m@uHaP|IB557ZuxGOlPMlfpFb_Gx~@><0GZsndk+PKA1jw$tfv@mx82>$x1*J& zX}-_HbL7}nsX7+m!Aq`Bfic~N_4#`D9oXFZjtQ4$g@^iU9doq#?^8<3Wd z)s~taMQlF=9JV^XTz0bEVKf#Q<|0mdi8)l{*LkN%<^h==Q%=d!JX^uz@(NBLM>xWT z_86zIWyx2qv>d51b!F2q(K?-89;rNH?xmfqLsRxa-Q$In?&@X6B9AKT(D|EK)a?_W zAq20)T^86(N2-o15YIO3hDV^!=)1U&29_dfy$Fn+&-oU0K8>!OuAOXOTASj>Q}$C( z?oVq-zdtL|q0uW(p*Y%?eNt3KwjG#87f?@3t{Mj{smkp$1-5x&V^~pA5cGxf)TXuI z$?wUpY%YrP4%s|s55=`2|H3p^V7aqhN|ve(V{R}V|jshuhv41C5{IK=Nliy4z$IL zBAZ5gTle_1KM~MG$M+ZAH{0JendBC`VayObM~qC^IOvwGiaeJ@;>axdU`2({EBbb2 zIe#Z6EsMb0z4qjN%T#JWA_G z&k*p5_{Van*wA>RwR;|Qo@@5MD$~b+f5t z5dJ0~!V&;Z-Y;Wx65DN0wkiMEMM5fkw_}w5us9WsX*u0-0WNHX@N7}Mt)qrHC@8W| zGU`Ai3I?k`2JDr_>2vWAN@aQ`^|9)$fZahEVrbYbhD%M*9?5dd^iJrnRk>!mep+#J zZe1p4Rnx3n9z{y2p<3buTy3wAFuG4bt};{`aTE(rk0kt!a=@4GPV5{#392Lqc%v@* z;}UTObb5CT35z6wl$Fh{+X^T^F^Z_$Z#SX9oaZc8zK%1&!jS|$2&pQ)IwEA@XV4I) zWB1Gq=eYA5r$9>@ktN`5+(wK@&OH~Pd0>OO>>;$WRQ(=)14r0Pl?MrNC zt9;fsg48=;*Cc^ZC^VBmk8IjrhH+$XSd&LPh7c)6JNr;?7M$pyl%YvDd2C^y+-V|V zp!+@>6N7e)kgA;Mkyj!&`zW_X>q|*Dzp+3q=`%F@QWq}z1=E?+rG;7?`&v+;ks%bJ z;hZEd!HD%^2xD4wV*Q}A@hH+xiQsq>tPBVY)McGFZnm`g1VKV@ng`6%Y@YbdwNctt zO&us}aH(dPuIv^L*LN)Ohw#@Erlq9u8jBCx(s~MbDMUFeLCeG%zp71{qOr~n_ZXA` z;7V))wK5iIG$l{u>rp6h(|VjLoA#vLQfGWy3|InOi`o1=8S*R&&c zRzO%-l4$7HAU?kgFsKtFd`kc)Dn4>l_t6!y_&~Uznhy$?2Uh@ZUa0uoXol(fAD9d6 z;xrhGbF{kAkahHnp0CQ8>+#bS0-^WQ>PTQ1WeeLupos*x%CofM#}+b2=@}$;##esN zLfpafg2d)E5`Cl6^_v z(Dd;bTdp~#S`2nLIlFUNt*96E)6(?UY<(3{6;sKW_MNji?w*QMl;aLKZwpCB15C?; z_4Yt6OP}BVc{VU=tSV!1)w(zft$5j7JlJc6E_@a$KNDwVTCbVNr=DNRx{;PO>bqNF_7g|K`)aZgy`bu{dO&YO2m^^C*pZ>!zl+r(iB#n zChVq))HgoJlzdnBtB;>M>ITkdw*{0n+JipPXbnB>iCM1%1--3_hsYkRdBkLO7oFaT zEg6`@?4`yxlCirGsg*d%PxYNvVK7IhnlZG%MNj|5r_&v$U{VO$;PA;%s-uPJpkR_( zjQmLcOGTPXFqm1A)S5k9^ZR(jH${NN8FT8&%PB~k_#aaB4K)@W;|FNpSIU?J?e42RdmV(b` z!YAF2*MLCIE+tX%n;@0k6j!!Iz$td7mmt&*uujWj6qh9N#)2vOO(O_om;=B(V+@Lv z#w|jtjsuW`jSbL}nEC}nelsdM(c9SVn_$WE*mqTmeufvK@wB_c49!m&Cz2OPCO%S}IM=##Qu?Roc`UBZ^!(&`)dUSZ1${yB_Y=EqSzxn;h2h(WwJ5w{Pf8U^@8iw zcR~sHJk~Q6W~+Kkrfvu4&X?i|Sk`eFPyc25M_CqhUzZ`)70*QAfepkV4^QH($AM9v zD_-JmLf)I_PmHcFQyqX+mjh964(R=-UkB)&NgXREipJ4!BL1y?F8PvFy-u^!|A@qnnG4?aLh&UOazwrs(*`n`OoE^?`qQ;eNR`K^F}Sxz_nWyS5RDKknL zcs&67FT}Anb?x!fNS@Y2wGVxfs5(0>wYwV6J2*_>Hq10*tv-d&;z|0hjO6(c-Gj5h ztp*L9(2wNnz6F6p?%5vIWjULuiUGFgIxs++DTgdrGwX7&j z7oO=vLosno(-#q^)Hnvu9Z1B53;vLQDj6QzEGTmjztytlz4)6Oz;skW$vd68`^Mca z@)B3j+7uvZZOr8Wq|IH=w%kkALCHS-fa&d(S6k6cF>2qn43@iZpPmvrQ@oVu;SP0} zLIFUK^@jY|o$TWTW_e<~T8 z)n@y8??ypbXJP#wB_S%|E!}tcz?{{NI#Wtw8>OHc`3ND*LC(&77E_lU@lYo*Z1m&2 z{EAyZA@3SA%vUtH|$moJVI4wH!uEG8|o0yT=*`hhD+v(D+;{KA5 zL=MJoviM@RXN3AfCLTVS*}5A13gAj*OU-Ew?+Y&ql1~I^q2Q^W!Q10#F&60b`gu-0 zML2v};4!W+^8Umlc9T!o^2V`Hr>N+y`8DU(21--0hAnl4^DuMy_z8hCkhG9&^f;sy zx(Y|v8B=)&{A9npy4Z5{-1_%N_Fu8p9#ARlrlLYC7s7 zNp<%@IcXM{HJI=Xi=KuY0Mq$mv2JGL;=Me|U!WvA)(|Wu624vw761&cq!4>t@F5;m zXTt>?-K7d`{NGGph}gfGz7C7dPsm2E&Z`IQVf~r2iTDYx5o*RMat-phs-?EiUg5c^ zxEn?+Kn3sri`U1LxnBF9U>~6P`^l{V;};eUzEjuqGdVfNPug7bkiWS;Pz~vwt1(lr zCSLq^7hmtTFyb-5Fq`G16E3JD_&yoAFsQppe=QN5zMBX)jVA1Fi91u~D3lpP2vLeZ z#&|uQuXjV&3jNlXLk1|DG(6HrH@9J@la8F|E7tm7_e+xA!V1hO)HQh#CV#&BV-H&o z^Qo=_Vhar7bFTW-S4w40pV{)h=HAR%n-ht9G?v&@S4W60hhD$Cf`y^Up+Wxf`k1jO z;TY0nifE-~KxnOf%=18#1MUt`ofxt6DoGGE_ z1~|{Xjl@p$x-e#c7pmF)-PEGEF+eSms1ol^P*Ea>%prG8b2M^Tz&bV$x~T@&&N5!= zNlX;)>qjJj>?(;Fvaeclvw3*w&dNu+fp$C>5PY{u!G7F0o^1gHi*`HFOF8O>^G5nZ za`3citS6a#WXHu92r4Je=Be6+D5cw_(7&5}XZ%(y&X`fy0XE9#iZRZIUDyqdO!l73 zr>N1IUUawfn4YbxaA^)WIL?vLGL{sPf?2K+E-VpNSOX92<{&j`%Y?%^$rK{1A`NVz zEF#gOR(hGkLjL&t!q?2#Ywn*%fC1yDlpSH!_$FiuWYP>h{GjS5OBr6}uDJG8Er3oW ziNKOG7==(-xAR^3-k;pJQ=8Av?n}e?uR$QbuqYwnp_DmwRXnF`il{018Ln`ZN}!k9 zxc40K@4`gX7W-@AO6v-L#HK39zsrMmw?S;1^iy9DMK30LT0XpWj?^)xSTX1IGQKEb z6(`lJ>FV5@wW`PSn0rs${$Nf%{9(>|_u(h4K^&!9RP4xen<{#+2pV_>gao)YZ?0Ls zNph?qOj;{e55nmpq!`feEUJkAH`pic%f5>6>?UhK_Y5>qV8E~s5LVd=bGbck`17X0 z7^lKibu$p~F(l1cFbTo{|W&fegdkoA(*~{A9s;EUIIiCw0mq;z^ z(}k0+ulXopd_una570Nt?w8wz>c8aA18hV#1?%Z>8fBocfszOdfIu{Jdj6PfY{2bV zKV6pPFb$}tZ)Y^ZhBquP+5iK&o-7kkPVRHz@_-TLHB~aAMpv5VP z)*;FCm|kppaI}y_6@aVaoubvWb!a2yR59~x9wOXGLbCO(wc6zRAXzm_Q)g2A&*oEt zg*d;G86N`@9c+K|xUC5Bw(T>^fhC}cn=00&5 zE7JBXw?_inUZD38r(RIC9BrYMrB}8X&3Sj0;xo=Sg6ST&1@pUnZH30D3FWyHGv+25 zWQ`c2U`h8;LBN89JLsLDzjQwL9~f;PBE@Zbes}2EE+PK79Q)mK2^PjcN!+GV$o^u7 zK*02gOMDh|T=xr+z9D4x_40S)T<#P%-E$F@Z8xc)wsVZ*<9mriTs-I38SiTJnC$lS_6b#TS6upNob3>Y@}-4IwkYIgs-5R~ z);?$Wetd|QU3*?gEADhHe$4C>4rV-UDhxyGvO~+R{V0-S*dswI`A*o81l>Z?~}0> z&JVtNRjzE3H+k|0-;&vJMlJLf&^A}mdvk^>OM!+XS^PD>=p^z)-EWkA38)>S+uE4T z8@ZTCv(~5w(N6Aa%xA+dQU~l@_%nAR54~y;F4x~=qsYCZ8T5u(=qlS_Y!HYf zwf)_J=}T$*KI(HpIeMUfBsuBS_@cJ-bYgZ9y8t4e3riFcOzP#m&dOs;x`G-YEWB3O zAVv0Vc;|Q$%vZ=Gk>5Cfe5RYSs^Ph$n3%hY0TaltsZ`RkQpJ~#!KKO#PskpRf?-wv z-vvIl(tiZL{f%ZwMN_p5G+WY>c2wFd(uGG3tv+EYZMCYIgW@?L;|U5QVq5l|OM%nDduY5+*#Lk)e(65o`Re*=6uZWh=Df7B?-IpT8G z=(iwZi?xn?6cB(DSs~uh2eC9$xDJ0)0SQ=nbo1jRNcaok3NG=?DT!2S9p=l=%>ey) zW3v9B(6$IiDDZfq{M`uVq2X%zI!+SO355F{m4>)OB_xhD9B{G;V6`F83BS zEb+%PZXAXcaaI^-m#$pA#yD1RXK3cf3U{iA%O#vflptVL%dbC4bWqGMrLL_#m;xv= z|KtZMc8^KRI-;{ucNep#ziN$UhJ$)Rq3etfu#UKZIa3SZZg30~sIi}*cuhdgE}Bn_w7RBJ zhr)nM4FD%1h*{Qa2#`XLUkMx?*wHJlrj!Q zF9^tt-Y~eD#_ADXS(IXdkkzlU4^IB0FVCd*nnox0Rkc6F`hm`Zk6Ew!)ls%K9fO^! zak{<;FBiHpAnoH`ZUZc9y}nc!8!fQeSy>5PM9T{q0Ql;6IR?9Fem~9XYSjreNJmB} zgY7Lq2-O!{TXFhR!nLvDMH!8tq^*@RvBJIKdwRSs$o0bjsc^o-$-s07DY+5-*+9uT z!{AuNU2`D?!@v=&g;l77M4DO-$CyjFoKKBJnhj^Ng0OE9`L#B zy7`+Cs=Z;%9@jUnX-Yoo$t8g!$Bp3AM8LuyH~t8D<3xTZUW$rG7@4EK12brVosa-7 zm%wu^eS(kBztq3;Fi8N~m_yF8H!f^2J`xpvd*c?(e!GuL7$ui)AVuZj%(fQoH zu4B_t#IdZchgsHlL#-L0*VO;=YRwu7ljH2CHecWTPWM0`Go;E|mUGcf>H;_N7Hhh2 zee8F-pnCNPo7BgBz$Wj`oJU?P5 zt8M_~IXU9aTr_SN_iu}mlxf}*uW_n?z`{vA8mw2Xp#zCci+dIf$EAisj@}YGFee&C zg6Mfaw$(D?MwXWoAye9Ay;09Q_C z!4~2YT8J*3Tc;+X28)FDMjf+YzNeK6AnL~0TnMdTJwK}*Jhyqq{2x$TM_J&>5pHKO z#8(k$9#B9NGky0Ed;YEOX)FJw?~Tqk4FWIyD18Odx_Qvb)&eOYF6IZdEehK*ljyI# zIGHV0iYcNVsdTDJ)Yn3lMbtLz)`AYSsF;z~-MKO>QGplU8E-n%lZHcOw}kano_d5a z4fPSv*Er-gpTX)3q)k$)3>SEK^R>v8?Q#145upP1fP+Spsf$|o)s9*pv*^bcsyRbJ z9@6(tgorjZRPOQh>hWkOP!R&efBV&F8=s|aQ{b}wl2&@cy^QaFA?FI$x{lETrGNbv%;kLpK z**`cxKV4sXF(!Kj9_8LRGQtGeo9lw%oNfm6jkx?qg-K|jgZg^>8F@6LoA3QfktPX` z$eA*+&~1ZnWTMSAo=dksEVZDD-RrX=`B54Gi{%$dDHm&e{donS?4EUx2Q^t1gI{azZU4V8at-x&G|TOOMaX~YaBc40C8 zA{Wi?*oH0W=#)D73B0bwK_CSK%*wrwAyUL+bEBmXgZfB_(mlLkbtiL5>^^m))01G$ zzP*o{-HBXm;L*Cz(WwaJk~Bv2x9X>P^sV~wI#mAL<^~=zGO)s6MIYj66=*V*azkIQ zG`QFG=0)Q&icSIgjfeWvy!XTYvZ7=1z! z;7}|`DZd}!Swz;Z9I&0#PRaL@b9AXhlP@~pNZl*dioZ{cEZ%y|MX&uK56Dy~gv$$B zf4hDbMsil@&}n2un`_vsud2o+^lcFM{f(SbOrCGbg}hrnhRprP6G&F|I#6?EG{B0cP|1tTo1f~i4D z$t$(;pGBy?q$|<~s>wDgxe<(pLh0s;m(I%SnR88VKva9QfLKVfE4FODTWFu;9@fZf z39WWHT=DlVz=}|Hw2a{W+zaHZVSRvtbCOtI7H;X>?C%F?nX{SgDww^h2M`p#ut5Zj3ZA4-Vm^BABb2l5C#zk>?wzyw8?GMj=!O*Ub zH?9w#zP(_h<+^wR84^I8BVSE0v7B~lOPw%j&}(HdS+H|ofAqc_h9TBn zTP;XYVDt($l&-3H=15h8bOS2^RrjY(E~|iq=++0s7eO zE!A7jp!O9oSujGbggEA;1^umImSevX;bqOKD{W?ZC}w9(D*)R~K7!+){zeyXD;XC?S>^+~{#0E@^Q{C&H41!_tHQFUQkJNk zIwpz~WCgNa8n{uCfY*etpgWup#L@K)yhDjEXwAZ}UZ+Kv=q{kYf|+?W@qaEBJo}8V zA%bT+MMk(EYa)&@4cyTqyUzI4Y4f)r=4M&Rfx(3Kb})3;g%nT@WDca{vHvLqa`cg- zqhfjGYykBKu+70^OBcnLolb_$X5f^-GeW~)^wAdW^cTk^E#~#@L&NL0;l;D9_mY6B zaeiFnFVFUoDA9@p6AgwTrIHSbtsvE7YM=9HZf9Rm?Bh--SiaMW~6r}3ZlCD!>y1FSo{dox;i_?y5_Pj$e_8^#xCY)ZtY5>JEuOd^`Oype^PXSCDB5vp3^*+zZI%(DQG`xljBu%}2(!p=ThTgAk<>G%+t9K6Uim$T ziR`cW6<<0O3O~No;i}a_q^UD!c6qI`Wv*q3hL`EPOYN6hTPWlOyl%2p(s=8+VPZ4k zP&6I;6m|eW7RO-;qb#Mc-hRK=qw+UPfWjc5AnpC+soU1SkiWjakw2*Qff4NT@P6eG zd*Ssf2QNQec94&d{Ekiozg02cf}z@CHSueEmVc1HpX6-=fXlPr$Y19Yu6@!k9G_Sa zD@z|`tN3*T!0Km_hRFJ0p1MmwNtTMWDt1jP3w;IHRr)n+(3zk3_Wmh!WRU*=fA-4P zA}N(;e*u4%`7Vk<*AiQ-2*uJm9gKyYV|5-A3NPS}Ic@u5`1($>ZdsZ4^%WTj__`XI z-tb1-WTUNW6(5Y*dL%AEl?FGS@3wV1C3hl8{bS<_$%4$%eI`72k@4mSPGILEAIR*qHrBd&I;eHnR z-?(4Szi_{SH|Zmu6|IDLbLV6-r_G#5E(eNgxgzKCvkYaIs&`j!^?*53)?`Qajk`?w z*+9+%I&T}I`UfX&@mdiQvl080kJS?g8n;t$=UwNP@#~y~VBgHijNlR$Ke-a`@BzfP^aC9r?{;(Y%^pP$q>|@61PB}E-w8ywF-NgQn}(?* zUKb8vb*9~y-~ilL4y{Sk`_VQD5I$(5@Kc?&-aPyUex=_nwBf{0If9nhsTL5C{D0Yg zr48S5b?5s*N(FPNecvR3awSF%$Hh zTf&FJDb=dxYOa)2*E`Gu@Jp&z8NXj24O8#^tQ`;Rgk1sXBh=b?@jm`}jj zM7O((8m_nR@e)TijPfk~v+W3}*!2u8CzPJQrn5Jj8as!iv~ecYuegfd!$+f<5K>C{`8A(coK|tv$tig-@VRxMulrj2M;XJYaX z>xCNk7?ouZM_9m=-*N?<(G~Inf}Q(z#*WoN?dmEXU!50>)1yAx zH>3tJY6GQ(O|Nj)LMbL~lyXVw><;alyU|A;BVkL&y2VEG%>23GIq{zH_)1BjAHj}! zjL0t~spFep)*b!=#ywxGAA|?uTrbXNWL60K+J6gwl@9MC;z5U`J&2dZ&N?|Z9?@qo zR2h;hI<+t|3UZXC9v@{32G;g?iTpSYo@dDfJftl6176wNk)i2f`P6}j_&}{s2lIwKU3v#CXMMj7VM8U>-(|4dwo&{0;nt8bm-y4k$>GxsSC< zbLiy7!2@N71eJ6JKR?81Z`t1SZr$KY5%R<1b_3cO zop;uUs!DnfIjZ3y+^>xxE1WYk&Fl%54Y=5lo|bv&gUy8!@L`_<(kdh~*Io&&c&>F& z2$D)AI)y}1tRaeV@UCm8rJ-PH`H5EEquKhW77w5*aBK_(=%n286L;%^J|!`l#wxAg z7D*=MiTt%xXf+0Ubs72xOEjg6mt(F*Fz)eG7Rxutx zaygjG9f3_*Wj1{5`I2iaag2N_X3M$2Lg>XbJ7F+itv^cdk?AhYO~E}~ZiZ+h4-DWO zjn&${tz5g!O#?#L->I{#PB0O3hie4t8~HP=nsMQXA#s1p__ zGx3{5?CHFTX^vd=LqP}QE}a#Eo3e5NbX8Ao+pmRjV|>Y#TAx5m=00UiI*ab}iSBnn z!J^Z?MA!~50pK!SPeO3)&=3EO{N>>^{=wUTpXYcBz3liQYSx`}UmvL8^^N>lK8HC- z6L!w?d?SB4�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

Tmb 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 literal 0 HcmV?d00001 diff --git a/BACA/helm-charts/ibm-dba-baca-prod-1.0.0_ha.tgz b/BACA/helm-charts/ibm-dba-baca-prod-1.0.0_ha.tgz new file mode 100644 index 0000000000000000000000000000000000000000..30f1ca70a6a12d1f6350a713be48ae2a1cc08740 GIT binary patch literal 77203 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%0A}O?0cCKC)1&GN zqQPW@uJ$WUYm9x-uK|aD{FGIJi%k15)u9B&!Jzg9Qz!OoAuG*R3p2UM<{zdnZ`wS-0rKs)F93M)fQJGiyg_3J3rwC6zk9`=46dWRBOi1I$eLUd z0PE5JPZvBqGLO6&RQ*@7|DUMB6@d3YkK=^;>J4v%H%#)`GRkZN6FBMEir~D-r$Q&YUhG_fM`?1DPdA|;Z zpJ9cAki;BIpx0?~-#*!wZ~`t1mmz=Ruz%Y@C|nG9Er$+8?AIgp#DB}EsG4?y_8zzx zRF;TdhgWHK7Wub#uS8oVU`a^EEk@U9zNXt1mM6W>Y0TeNN7^Ha8=-+V&_6Q_GT}ww z#=}np6Rf)qbq5~nbbn^S%|q%5QL{<63^$Sh55SVDw%QgBX_DroiYNma}O zNyQIVtd1O`5MDzta_={+AT#{#Q#}O5fTcL%asyLAoFEd&310z2@7jRgLg}Ggx!oj; z^qU6?KvkG?ZjqJ{|2cHs~9+p3V z)foi*iL(8QRvqb`^5xn^oM5oi5#;2$$3kAGivlW?RUa6e@tnIpYy+1X=3=X|bBdt% zR-lY49iSIimXeAuotQ|GX8^TtY9AjK!vaC9%BDi{XHy^!++_1psJ6<3P@h4oCk?nA zOrTY5_#RB=g@{lI>c+*OhLA|Y28kKFNXywG?xFDYd1E0DaMi+ohk=6%1;l-&iShs; z4B4?Sda4Itx!1;UUZ8t{tCa>XZM0KY+cDXOCH%@l^42qT*N8{#43YF=LxJ~OQe3fnqXXnEGMBLMi!lwM96D z*mK#v6`pmnvGqQ7jqU$B$F3yZn*VBn_pCHotNyM=(L?*SRg%#mpZRX_I0TgZ#AyJW z3gQN8+*3KLF?B>}YkO8eXp8*Wte>u$Fa$fy6^H1x0t+LBXY%`9&8lx+%7Vz{ATqgQ z^hQ{Vl0J9GGI0mo8w<8+Zwekl4Md89+jPij6|Pfk%uHoI@E-S?f`d8YEy2#^uTu}T z1QK5ie+egfw*qG#Nqd=0VqmaI_=<4RjJ%gK*K`%vJmr+yf0+NKj0N>K8p3SI0pr~9 z=_=j>R+rG4$F>DNAp3%RxjomYfnZwUGG(vm#v$K1F` zEyp@wI?fmxYroD{E;0d4t}dmU8$txynX`jGpaL<=eJ-2~e=Z?ApJOoN-wq2Qye^nS zBFyGd3+|E^UrdP?5x)MmN|TB0U<*tjHBU4|PCJ9)XcmWcR?~$iU0G!Zm%?AkT*AU6 zT+<#mj8QZFue4#6CyAi-|cl8!;RMz%FiDfdQoulL+(eOKl0>hdk=g^jmX zu$9dqSU>cT7oL{JEZV4}b|eYPd4xw00)2Qn(75IXBv6hhRfY? z7G-DzNi!Fi8Bgci#?Nry2NTi=$~_rlbN%b`;@)*Oy1P<6*9FPoxDDMRam6N7 zukJZ21X&-I96krhB+2CZW;^dfviE8T4ft%b+I9e5Ap>fzn7O%!Zc_@ZkYqPq7fhU8 z7};~)5%Uh0+9u_s_4+2KwwFp-tLO4myPnCTDq)cWmL1@Q zO6pT|cgCF9opg8kA{5%m1zb{$cyk`+g`+0ip8#m5$iJ<1PG^ywEy;41^Ou+)q)00- zq~3BvIq%@g+om2)YVgKtVLsH3)Y9`HL1(sCQu_{>~R3 z+i|5X94D9NUf{NblX~@@NUIY#hU1nUPyBQ5;MVYF3begZ#kOqFJGkC4rLH2f{iuf! zxZ*EOWOzf|-*_O3^Fp$vZQ&2;GgUZGx+$=`?l{i_3Z6f?FPOGAoqU+QECFnHO(r#G zOSbDo>OW?byux_!QW-Div+a)~ztb=&tB6{|@`(6drXDBwUK}mMs~&Tim0{dy{T)6m zwFZw-EMw7Hs9P4fqx5FIS@w2Is5q}&KM_cHweNf)Z^cl6nvgqyn`XIUwEYiTsMt{) zqDZyM?q)RxHf(QL)hSx@!C59v0_W8mt!@jMKc}mfBSF3K&&rK8eu@7k;XrM$`n4I; zDWEk;W`N1D4cedz)pCIhza6!;?S>TU>(cRD07NV|ZxE$~AXO-wF4NH6eM0bT1-vN% zE9U^4cqu(5e)c=kAO}&Kejrd{s++m(-m?`QS}rBx>ycVo1omeKd9wDp`nb0?i5oxI z`&Cq}o4D}nXcRtBSLtq{<}{d{97P+{k74hz}5W9FToH`07Nx? zZQ%jgP?9;;n~|KRGlBuF(wO{*yW7rH(S}wxsMx>k_T<(n4KK9KPJ~@YT`+;w5KbNS+w6LJCceA?1<_V=s4y1M`XFr+Gfo*e6Dq0L#8zH@p5h9H2lg%v4_a{ z^TAf^jLjj2+=W^ZT7wAe^f$`&oc(t$-S8X3u$^&GmN8sQp=oD#OvgsaB4ch$mGvlJ zrqI#q=_NE2(+z{fyrGFhEh(aTe9)%BuI=Ta(G>0GVkif#wz>n}hxt_1LxKvR4;sIVtAHUo~oKIDl0 zv^Zi0)~g&1P+A9B0i{gw%TRtr3qyiC8Qi!)x|GoMTHZ{7vCkFL9JZD?bMO<+TJ^N~ zx45z0xx*&#uJ0fp5|qMcW-4QqF#MgbdA)F735x8|-udiiHZX&=PwhEA{cg=RycvFj z_(JC^^V@n~_kDJQvF`!%3*fzc4xVlW4ZB>((uHeMm$vn4df*47?OMJVmH3^Ud{3*u zDUK^>9sLBB({x}=GM(JLf)M38nFEfH9dQTx@@b-db)kJPhdDd|2DfdJz6Y!1sBsVj z`g*^1S@+BMJ=wQbeY=*^E9${HdvGO0;btFrYmt>#qN`zWLj7cps1jmZmC0{7A{lRc z2Uj>aUUt}y%YUwjk^z5=M9DsQR9VXn@Ebk|2*&(ZDxSf;m8V@j;kbHcA2U>YOGSQo zfQ0*sqO(ILqMYxwo%Mhn&J9#_x6vl=&<+h{WLwxBd2YvtBvq@j?_*@lDE)|XzElhehh$ql(zpW@5lSoWin$(@Y2>18I1qz;5iC;A06W@_usTn9N6o1apT~c{Rok;cP4{ri3;* zJ&{e`w-o`SY(?wo4bI4$KSNvua9j^|-NUW;-XDYI&Myhp zoe11c1#N@?k++O<$%4jAt01HbtPpiiy3kHr?y_uG!kPMTw2`QD>~aXmh0GajMf?On z>(r=T(Q*>~m&qy6$+ej$Pp9V~05_8K=!a_stv=z0vtQAx9=>uJnR@ z;zDpCRrwg8XuKwfZ+~Zld^W$h$5D@ZdIoEub7jvi0PTJ4=_F~eU_OVBTZUv6m;q5z zD|^fQTx~uyLHe55d#NG#*lV6Rkx;|YN=JX47i&5WaEI2?!@v{2>Wa%XMq`N{bBA3# z1i27uFP#?SO=-y`&#f~a+PujS218SubHf75te%Kj>%JE&6s?%01XK^?d&G`|;XGL#q88^pw{zn0?I%5iZYr`I2a_IP< zZiLlv9~-$=u#1=8+W`GI)|0xkRkQ$cu8 zr_#5ANL3G&_m#n9&+a3rp(P_%Yq3v)1=;0diuABX623c0KLGua?@6OKOK|X{-7xlW zqxR4!RR0?=zD!OOvxWWosu)E@)+7QqB~BY=|7a|?Gkh#uNI+?$Z=J)DgttTE!(Q>7 z3HG06`bfJ~eW^~ag+a~ zru}M5EsfB?t0sxuyotG|2O%T!Rb7U@>nrp1F?`aUm=Uz5$s7QWiDCRS!iWqWlNYgC zDmgA^)zWvc$Y(TxEI9K*P|x1hU&tC(`=vmNz-|3dE6@1e(sUMN4OQcF&fa2!NiT)w z&wF2xnf*wwYG4?>u_zZ;EcbaK5o4L#*;d}j*jNs;C&@gtztTNXq8#7RGUDehAbX4) zS86p-SJY2vPMfSDK!8$xunJos4ngng&58bH_|7SZ7Fn%j$jz&Rj>m+YbPc#_k4OeV zPejyP*sX$F(CkdgH0LG0SwB*;0@Rxq(-r-8;-|HRH^s#8a`pT$PohTY^oD9;o6CB` z>;I$@Ux={-$d$vwzvV6xxSl2_aU00#Vk%4Iix@6h!zJqao9vu7p zixYwM=R0QJ`A(~1WFadMU`;sB!2bRj#m4-~bga1?!yyjto+kmTt-eHZ0W*s@}fecA7U@Z2-@Deg{v()6Xy0@6(D7n;IK7 z8`mB-yfvFSfA#$UTZ$V?H!Ykyo1jX$GptMBif^eup|D1PQ;+F0pknH&CnDA-*Jkfw z@&%CmQ{0Ydabtq>?y%o~zRvRr`2V3XYru}x%a3AyQM3GOh27%U%&& z2iLVdilW4S{#ws8wfAH5Hs8akAtF7YByMv6YgI>2q zna?+D-zWyFHMHzj*B|=;T^U}F!jYk(a)K^tVzY|1*qorQ{AN7ggfT9M7Y8!_>N-Xa zp7vov2HO0Pl9ntIMgL?NcbEiS%7|6JUzJG==(B~GXwWB;?4w}X%C3f-L7kxUI zo^&?@jzcRU@HpLSN6T56$O`)p@)kBVb|x7*3vqA|O;T7dlCBuzUF0{d7<4guaVC{p zxXdpDZRMTh#f%=>MBjJ*I|k)$6%uJrp)hzOwSt7hVPo6$_| zcLk{%&s`X>d86D5bW5Gi%zZ>0XwRO4;(8sdY|V~cus{&0=Wi?BA#{Npi+MCTL0SyDRrCXW_V$%ISXCz@>-0 z{8ZC7RU;-0d@~>tu7+_G_=@&iP|8HRwehm-_d4v$#t9)7aMvpIElMhq5Yew^tUbf| zXS#bY96XI_A&gZ-_gNl<&GWGe{KP5cosI&|6O%9wCc$Xx?A?FI)*g;o#>Mu4$WtvG zF;sDT`g{IRfF8bymEF4@yAqwRiRRNONT-?5TFwSg!DxZR^d+34wLb?TP%>c^P>4|E z3KI5P;fd4z3BA{Y@!~!u1Gc7P`fa0|>#NzwFF+|)Uee3HOJ0j4lf0gL;pWIX@#4qW z=eC?RrjJGegR^e^EG7~PLd;eMmAJ+h5Eyp@T(>$nAo@?Xog+W5xy9hIx;Eg7JUMqR2*q@ZQ3@l5%gRnR55n{+dY72 z*qMT1DgazIj%rO{fKeKl4!NZZsbF0-fl;iekQp{Fop>6253p31J@FH*wnQ`FaUn7Z zDKJ7NYS8})!*+oo#}seakgUd$y?MbUl_3^4=%HRY_GP{mpcz2lF5CSd~#`oyq~6uS8U`=_ZgR~aBn<%Ti-hv z@qG=x*Z2QEuE;tR+5PX+-Q$D$TQ$SELyJ#wgPIs&oC!e!OWgN>2)V%p9*u4*yy>A4 zOfO7~v`4sUfs>H<Cp^mA)8^Optg*U_`8hk{uyu$O&$;Q5<|=smFcTA&;@0PqdfC^VQ&a$ zM~r3ou!G_J?w`*z=Ntdr&ClD4r#5oxy03}ThhEO87d*ACrL3;4zuG7&h3G2R6iThG zy(%iCPG%}Zay5KY;Um1<_q#=v=2nv^1)Q5o~lz@O8c`IUNcHHs$i* zNs^%oM&PlLD^n21vuIhkbqg(Rbh8T(PO1V5*=Cv!Vq3wK>~Lyh@ombP;aYGRtz)R8}V(Xy;*z5B0z ze8ROy@TlsN0Y6Ym7+aT)DwiQ1*_?T9;vF&pL>i7`PCoeMAMoCOzWy^swTu^apF z$c0mj9Wx?ZO{_yPcB`ndfGG6^s_DBqe@Q%8rSR-5Z0OJ;E>)<6n&EM_n{M{*ldzx~r zuaXRcIztll(0%u9dIiwNumum?X$$(`>8@?0(=AMJ@PMP}W@SGF0>cr!CO)CSa!E&K zsR@i(qS*K}zC#*D1g+>P0iGF+1#X{GVBGQLR3~g&Jl5UILD2FmvXQv5qym??L0`|o z2!6t%1|jUY9yL)aWnP*=E2PnL7WH|Q>1+HHJ*KWV=n`R05gWjH8b{*N6!V0Q z*!1BH*RyotJFs9^aBWuaDog#rIUJI0c<1VJ@(&j~W@r#N`rTG~3ip5r$g?^3QZ9bx zy#q95KXo{g6zMQ(`H|l`_Py4S*+J74ISSdyMf!4QT)K1j`XUlNKr?PQ!756YgGfKITZo3Q%v6qy`;0qBMvs`8$Q8<9pXWyWe=!kB6L9 z+zjx3)oh1|m&#iSH&^_Jdx4kSk*pT+EN$3dM~_j&#_Rnu<|#(BtW{O!gwg>mgzhtSWx?S|~|o9TK$P z^D$%$Fv2S|Pndt?cf)J;qiGHzfZsVDa4)A+(%;VL}NV7k{(|olne{)TE^>aXPR9M()%3JQY%)ewi7n$z!4H`|ZeYYRT zx7lG#u7}Wj7yHCN=EJtG2)}$;7A2t4(N&4oc{*-T8E3#DBhNO2K~(xmSN9WFSaD@V znyonwGFixu9!eKBQ#Y{VC7w7!uPVIVG>1-K{hhFUJb$O6GY1fr6q9~y1#hwukYa;u z{9wNNQP*GxM^SQ1MU_hMmJem%JBR}its$}tO?F2^BL|cptJVfRIRf$0@X1?7$1&Lv zo)s%Vr*fUqPKR@l+Y(rQ1xZn;9dH#j(>)_y5-%_NYe05H{r3}`0c>zDY6-e5QaeBY zy1RlO#a}VedJo8X^J+O|AI)LZ5Dbp;R700EJOU}?)IMtBYJ8V=1s-R=qvge6Ps&Y= zcW?;eg$>oWHSry7qby^j6>lS>4c*~z;YR4Pg1kp%iL{6^O)g?1{#I#o?co@4lOA|X zNF$Qih1GJ6PTg}q@m%S2g+n#IWt2&o5Qyh!w%77i~Q}9??qD5daVKCxZ?{;}cE9 zKS-2C6RM>mT@`FlMiHI9BgNOsXrh2!^cp*}1CyHFngX{|DI-vkJWs4zGB9ab6FX9i z0aYXaJzf^zkvNdQ#|^>nOB7I%6e0~Jps2r4o-llq<)Z;balpvLM^SiAq@GMoyv`2l zn9~dR+NwjQW|>>LAkB6-Nc2k-H>2zaw$y1G7P=jF;Mmx795fRPte%RBjp%=^sH^q- zkTy_cbfUfC;WSoQs`S#ldv(IrW4OiYzyzaR`w{5ULWRvhoF&yTOH^PVkrBG$pGs^w zb2pif3aCu4V4q0jvZ5>#AUUcxt_aF#(m3DN8yUe`pW!+@Gch*s!Z8wq%X_67SZunp z?tUcQY($2)@OR7}<8d?c`kX76L}k7##^+c@=FG3IC8s8on2#lkrXcF-d;pX-Rj8^~ zWl@q&U9XnczAvxJSEEH#be<5g+Zb;G?saJE zihHahB@1}D@8NksO(C{5y*^u=AsVLI>~jtwk$BN1;G&kJ7-~SXA|jO^B`dw~EQb0e zJ%c(j@G2kyb_Zifqi3h&m4Rt<#lq&wg~4dAF@GzHcyp0u&qba?&sJPrMb4OEo`M^w z6w@YPkjUtmyq4L$S();X&5fjTs+cxLH!hf+;7Sut>1EBgPU&SWL?~<5H0n2u{K@lX^3Z{4i!&7JRKh9XH)CuIh$V6U#QnD?LPZOYs;L%S%%} z_hmSQ>%c1-o2aDW4r2Du_ox-Mb!YVonvv1PX@Gf(`-cMuU#rI6`tQ%$0CW6VVKi@1f1^HSjrFs#ri? z^lsm^Nmw8&WvA7u89j8#B-23c5Z8fv1eLk$?~xWmg4r;9=7U%;XU76%9k z_4oPpq<^D9lbGAPuEJ8%X+_KF*v$Skz7ab(YfrE(&&{5ULWU2p5kCPv!j|4{ZkVIN zfK=k)hJ-ADK{ia^w57Le-+wn6M~$;tWLhCk!-%9MrNe?layeFju9~pIR_SZXP7p@} z5(|nqgBBc4cxOmo@;fb8>3SdE^|Yj%t%jG-Jh5)R16J%3005Znn4+Z`a2hN^F?D;w zKK8pqHO`>fuYI?%x>||*)rzh46Y~70l}+?JlL4rcYm)qw9)-HBItbP8^z{1vyY=$w zD>%SpT{U`LR9WNH0D#;2t&&U-t1e`QQO!pxBCpx>w4N@6lUIMs&(3Kc-`o0`kK!lP{OQYq)#bI6?a4U}=;c93!INs@o6U`l_04ba3l&Hyr-C#ssG2Ls36c`P zju&**XBWS?{p;qJ_JDle&y4XO%4hNfm#5@ZKEbp5|8H)*UR(J8KFYK3|9{rcjQf9% z-9K^vSJz%={r@-DHy8f@kMex_gqIk+@0WjLPTCBQCa+m4PFhhJeQj4|K7Y1?45rtq zvLOJ_p$BcrLqYsO7@$HwQ8JLStYoq!QN}*4I~-IRH&pu;TGkc09eHPUK7Dc#HZwG& z?i|<-jywDV%|}I`_kM^PAZ*^1ay?6snBKu>1HP)4S;G@+eqL`VMJv#_gv6KLIsYEd z%={lpdS;9SGdutHisFAQ=>H=;3;yp}KQr$CId=bK{tpO1cK@%vTI~Nvc`{56D*0vl z)GQ-MpDf#e^3`{wht}b9ZKek=)yznObvdnq?)03o~Z0V5GK2>zh*PLsotHzN8sB`SIG1 z&gsLYpTH|)tX~>47tdonGxL9}ES>2Ln4SOISgpQV(Emqy7X06{erDYNbL{>}`@dSn zj~V`Nvszv3|HpXlU;a0)j6|RLM1`qM!SNu&XKJo0E4oT^mUzmX>AuB;Uy!$*il@!< zvR{WJbBaMpbeVlH*@_dzsh7+&6AwKTi(XExoirOxj5v;Xivz=QmD^3c?9lSohb{d!8Ut>rdfVbZO@3y^0f=Ys0TD!h3Z*s17{qtpBv^XQ zI)E1O3~TEvnmV#JJ)^)@ZscmP%F?R&p-bn&;aL7SpDUo{5+<#B zcQf>*g!31aT$4}KO*E))_{0bB30yfrODAaU$aBPFL-Juwh___JI+m8p0UU4@#mEjR z&LxGp6yy<#lGn%zM1P8A@I#?|!qHCHr3{KNy%h>}7{U8i_TIGSFerfJidr*(%tt?V zQC)<4V>#Yn-RFUI=uNBxrhdL?#{kYlxiq@Ptnim`0H*fq-M=i7wy02|UOsZ6p{`-4d+yyA;MZ{QF)#~S31Oz3kAhPh zvHe4EDrKU*Bys_QWNJ2y=r!{swls20d^xcD;SC10u>7q8@of!M`LTXD{;4AB;wy2q zOaGv#UnCx`%j7nw__0ut929WN#YJK7h$xd!ZsTKWEGGU%;p0I-Jr&)(7TM*sUL&*uK;i+)z5 z|23$88T+53H2v=$ZtQ;^bmf6x{RV6R56^y?`05YP``3?06h$3-y28{3DS-;UOYZ%IvPbWco)gQX*7wC23{Ps zZNVfOP(~3sJ_VGE=dzoU3YIVCrb*xl_7ifTMf^R zl#+-+!3JKupiIqW073_=|NWT`traYb01S58|0gFSjA^b}IMU984mJ2_V>PY&DBMt?tEt-!%V;znj+&HfjyhM_xc7menIIw^wLAf_=}B zMH3Tmu&glah_W@AyjX(QWDYKo5+)VZG3eghs)W5tbYG@w70kM|9zZibN}~6 zKP%Gz8q~j-{*Moi)AYYvKits&V?3r|SLA6QCCFIcgsaM!f@tz*wB~w{=ump14LOIh z^HB=0fK%C`?2H9$x9>~`sc{;makNG>tHSkPH~#l3R-miz|A+OXP5kf2c{cn17yYak z|9dqX@CEdLw0oG|{|}B2k2duG7*Fp0uQobk_gDL!=Vug}hC7wmS~iZ*7N%lcBAC$j zHt)y@pRM8;GI=oNZpV2A7X_;M=ws8uhEc}$b~xA7i6~>Z>vB#3j=jB%E+!Sta+w&E zUw|S0gNSb0x*yg1iN#6l{hz4rU726Ru!F(ULL1k#+JF){?M9zbx6iH5rwthyu>?G2 z#*33Vq+-@vHl~xVYhJq%q=+$zclm?M)GM#p8OzMqnASbWc58l}H}t|5=frs>LkJxV ziU|(&nd+JuNH+BPo^v9)r)~W%P1kcSGdQ1BJ6%Hq%!YElp+Hu(IBO=?i@?$Fq0)IB z__E#11rEEJ4_O3=hD=VzgLNQlLcJ9r!*1q776DRlSJ3HRU9{WI^wxIMcPn}gDs6T(6w+@N=iAI-Mh39h`U3m?b9PE-Sa99M_N((UWX4Pali(y*z zwyc1q6ac^C9cjdqk|{`+f_~1eSst@7dx)L*(=LQ7iCYWAr-kCnr#`N1o{#*jtN*k5 zeGD!5VEO;{H~xQ*^KA5gU-Yw{{%;lPU*i66FPr~wZ{z>>C{O+&x}nxLKNCz^PpC?7 zGQWIC=9lEmU#_Zxi@REF{ny?9s{=dedw0^GEoK6%@Bhd3jsO26J)8aii+YJ@cxw|vA-H8v~4@LPeL5#g+v6X8`W88vmL*oFj+ZRXs^rt=UOov1Jy(m}9 zf6^;5eVa9z_8dDHU3%d)E@DGFMXOxAiOZ==&y|mG@9{`C7>{%vvAJ8AGvLkL!sc$_ z4}7<Se}@N08~g9ac{b<2FZx;6|KlUte;>mVr|Ez1 za6|u(@@R83!)8&ww*#QT+sF%~Q2+b!{6zkYr>F<@5m7?V&4eT~5GwvnK>b)U1R83P zMK`0xqgaY5kgm?p8U;ePi1SWhCiolR8t(wG8)slmDn_HRxAt06w9yU9hAX!`S86pH zzn8uBI+$}VF`B27#X7(**E~YMUKfpUv}k3=5(vVzgYgX<7}n|F8<_uP(FYIm#eGC| zfK>#*ngEG!MpiJok?#@4TUp5XX_j`YMO4i$EX$TRR+0dz83Vw-#@usJfE=PS5drJ7Wul^PPd$kM~;Y7s%EE z1|>_n{RT`GM%f(N{kY%dRyOZ+10{GEDJGLQ`Ov#MMd<96O5<}g^!zbFQ%lXLT2moj zsOc=4@@z}+r8e?{5ULv5#DN@IQzu*)maw=@6{+urjF?^s>;gB3f*O=irw`oRola^L znc&WHpjw@?tUeJP8DjXTp``-904jS}w=YyJ%zP#sCj2}jlbNcP_aRm&Yz^#GO` zq~|)b8^^o7xwm{wQwoDsN7T6L1a?RAECkYX2M(9YK`(_aZC(5uUD`mY?g$3Wt18O3 zP#gAL3_FVRgs_N-^v8A>0uG0XK$A>Ax|uuM5|(g0Z-O`%2ayn4vUXd84}HtQwdP1R zx*R6{@`D<63qzn)WXNK!K^EUPhBqY?+>v2_$9QG_UBiGn(eOA=S(TIgymGvIl#@c= zb6^aBha=BnJ>T6J)6zlF8%)l3L)rN-IbSVL7fJ;&W8Pa`tji{O`OA<~-dq7>DFQjP zc&W&hcbf&QCC$_G*$b6gg~gz}u>=75Vo44RM!{9UK#^eyF!Cjfyfugmt^x+^|I30> zDCgurlPtRmKqQSU0ZoC_k^_rba@DC>7Mfx)Dt~g;g^8p61gtJxM`yW61GyA1X{rA- zuhP6ALe}68{aXgAB6XqPDG*Q~GWto?C_J%z>J#qfnfI)$|GgPWXM#IuIC)V2|J{xL z=TV-G{`ZT1R;2$msDB~-A08cL^1mG)ZQ_4D%JbWAJ72*`YJ38Rt56JWM^do+F-{8{ zCr`vzJG7ned{t_`pP&ysB^O0KD4cSm6d|>eDpwVBF3Q!#R^t+M_N$#zRZ^;IsRB!0 z!6DDL2Xe0EP1TSxsw~g|jHhg{Y(;&bws|Iiu{ie727wD04MATky_MWLl@GBG90_JR z>059{6anxX@m-{c;4woR&L9w$FFCU-A5lX*&2RN)G#_V|9W0AyUbLgxu9aFttxe`e zqDZlvU4`D+A!l*zNjwSzoB;;12H+L6bEh{}sq0xWBs={vnpIt-@H<0)q= zd9nP;8gNFl!L1~9?Gdag%kC8cG;F{Af}xQTt#QAr;9Ak&xeJuDI&;B^DwfyBe*>|Q zWbgRq29b)8OJORPq8pV32&OJair_a_oBvjKMF6%hVe9Badw(m7^34Z~Db0739iULY zC`gAexcTGAGqTSinS3vZYV0zq@q7vE!GbnjYaH9{YgA3OURHl(0^sL1l8=utf3KxW zwwP+YRni;MfG(IUEND*BD&tOr!mylCKgip@?Oa{bexn%x=a-6AZm2{>hUk0mF#k>O zU$P$pm;GfbVJ0dbe81=$jF40eA)7|M6F zbcLhIQJQ>DR|hGlpLwuy7juDCMHWJ9AXpY;9C6M9P}|E5C90$EpJ+jAU&W1~k#+jr zy$|wPqCy3YXf8Fc4P7SFLg}IM@~*7^@jXW>Fh5rO*Bt-v-TEf}+v7YN{m&QutVsWB zQ2#>uukY9EY5niv@rM2%O3rZ1|70L)X#JRcqcokf0nm1o`g)4%48ws1FHa16KNnYK2Bmz zS46obmqB2@`-$hm%q`J&qF#j4PtChEqeKEppFS9tKF=InXtI)_K={GEW7-c}XD6b3 zc)WjHZSCz>Up7t~<#Z9onR4spg*bJ*=|HrtcXVCSP?sZ~3+I=Y(*SRZ0`o1}Q6pFl z*K%gRN#Ngdr*n0E^L^v|P4ni>WviPhjdOoX7LIs9 z1#LschU1h~f<%0l^`DEE7ESc0;~i~NY2@@QWJY-NKFp8to+uKJx4vt(lRgu#dw>=K zb^QiHMXRR67WBQztQxf!c}MEU9!Fb~8bNOw%zEDY7Jfhm>IF9JAG2hR)kGm+90t0m zHrv3eb2flP#Yt2~BpLudH?~k_`0-gVdR7t7s(t*oKM^t7?tH~A6nbcX7yejOhhpc> z@^>7&7rRT_+J0ma|X4cDKT*;-W8Skk>D*ms^Y9m@+`CSxIz zi=m)Te1+`<>mXsC7$cn1LY2Fk(~3DYxeb|{GIBZcgZrMEjqCu5n@>-&Q8Ys&W*e5{ zc=v7JzOx;9E1N;za)|1Zgv-xF7aQb##T&{i*O^^=Uib=%1v41IIIm>inpi#Cu|r#? zmPLqx?@iM0s-kgzuHN2)(l^@2B-jOeKDkteJAmd)%LxfO!7^#NwJ(W=~%N!1h4NUw~$Fv zLf=pAFrht`-ZYH9r)mdNa_#MEuUKe5@qK97&eWI2_vGXQPItWiI~k_8g-PBN;3j3S zG}zB+tnz())Y6X@yHl?bhk8~p%6VPw=e*R|*$*8+h#jh8Q5-HZRe zdDCfLn>CH5qt6hD)4n>pX{E9C4hiFx?~Sv-lZm~$K+OHdA}wm7r*vFxwR2(0 z0CCy4Xnq_pQo(TM!l^Y+wJ7Ak9Pm2r#_30bu?Pg#xn`bR$jqg`IlsDmT{MM>bcKbj zTwa|ui(6nc{NGQvjQQBEt*lzC6)BmQ3LsHD1Lv)aRu_iws&(G%*huCvisRgZtO|0%siVT_#7tOfS!CEGS7URX`EfOEmV`k`M^)Agkv2IYCvQ6T<*V^8EMoEy>UWzl}~O{?7m z#&*$$?PlR_lh;A6vZ&w~FjuXb-pW1`#j0U8Kc|gU(4IN4e0D0@omAOi+T)UQVF*Ic z2f`Ik1iJ9@1v2?9@$jfrMOZ!9T8m*Z@q8X))1Be>#$wO8T1*rx#GG6NT{%Z%dQlQu z-)bszBR*O6Z(c78RKUemR#F2OH&b-|lF@n=nx3pi}1qKC(mcOH>Ztu<7Ml-)om4t_lsamb(W=^97WL|QP}z;ZSOek zK6+(|r%KG5O zqfC$DO6J>TM1w>tNy~wP!Kc7dX=Ai?0+%sf<^f^WS*OpSKaztfw2{0OOuSB|r%%-= zFX&1BlC-V}?Z%Kql9?#O&NL_+rZwt=VONu^agxBAU#1vT@@$IXIXes${MEX3z36rG zz3flvS}%pqp*Qgy?{@Yb(o%xAC420ua-Go6a5ZH})kzqwnNN-ZoB6D4c4ZEJp#fIp zTfblp0&f_uy9N_q4yC{LBHT;+b`++S!Q7*sf9dCN(vP!x3)gSq3VzTUF29O%=y&4V z9$kPtumL2iW-2+8P29Hf1b=e_&gDMZ#_x8({C4= zEX9!?5=+Hx*ib7-H(cdSINy=ELz`2!C0G(VU}R#arl&Rk%=Qr{whBEY8c7XujUlcy zz@kIvL*UN*;U$7k=MJX0glZxcj6S!KR2luz5Lj|`Ca3u~rK#ht(PNqn;&)60BwO-} zAgi#CZb&i*_S|!6(P?<`K{#JlnQOe6Rw>Mx7QF2-H>p%r;COawPwC?;o}pk;#roCB zT|W*_Q*g3gUfltB8_v#bAL?!V_CBAd(EkU+zIf>TQ@dgH$qETyQqSuCe|x*foBY3z z^KAV8zUXH${eLL+FQ)(Fz1y<@K(hpt{yyF=fC=BE8{>dRVb_a?3d8|A+j&m zau7K(r96{L%HmKFQ7KaIRr4~%jHENxbQk(k>f|thb0FdIz)E*H>+*GV_n=yT-rcKL z4-Tq_U;od_;?y$xe+}WYNuRM6j;*o(@9%E%e?QK%+5f-jX9@cMK6VbLp*lXMXBcbv#i~EsuMQ>_57|BUYto}RL0fSme<*ic5PT&tf4M(8rgw@1Q zx`HZQE41$<>3xj%mOFq3TzSjByj!R_x8F+)j0)xcW4k8Mg-CcV)kKg`jt~xTgIcL} z*174xPAs8`Q*S(m2EIS-fN^rB{bF>xga7EC!JWGkH-uTC zrW1-q8R6+2l}YxOsoj4^apbGFQIf zn6kENJf#w6Kc#F0JolvPpw5z4kN$&4ld%nTA>0-V+VW#oUU*AD*1i~Ujpnl{?4 zKwoMSM(f-NF!k=ha!`)NiLRBZu$?B_IV@}k=GC9NTA$|T;lh*5if=;~|Ev8y8g|~< zs3O8V0*p=A2F?eds`Q;1PET5g2I~Y6JC2?@Quih&BDrojnQHOim(8^~V+|&W)#*8C zL+MLL`ZKN)m8=PoZfIm7hX9O&F>;6@!^;jaA+W4)DtjNFeJ3 zI4TAgw-I5rJ015h4aYDF+=XBqK&g&L!_>V2XFR|Tp9SJpB_0_hI;X?sSZj=VA^ProM4`t*vmxR{MKkL)M)I%oTSY!U^hqEG4Juz#%L9IGnja4JVky&GGV5 z3KF&KiS*uhxFoBnS)8IM9UA>`yn)X9q4J2(9AK}lA#qyU#YqoT8k_87ZXMuk z5FSG7V_*WRP*g%&`!TagVe~fhbD9GL1Shbsb7A#8-{_A@i`R`GlCr<<(`t>oN z^rsd6PuJpG+qAcGO{q$h76Px0;bhrYIa*6ko|M>~xFg z)|}Dx=M8PIihqB-aA;#w`OJDGyC!RdNebRrm(`a_TiuSeTkJX^$T=gx zO3@(FDsLVGx@j}4JF#{~c@zaZ2*1%C;;Yg!bKF(*ynzR~-m=CP z&<%$lXhmqOtH)Gnx;50&b4KB8BeAQFTwog&AdgIE6p9^KGPi{uPhmy$N1hj5 ziD+UqZV75aY~4=w@Sdgdwo_63#UBXrSEF`bf7j%zzQ2mAiF7-7t+h=b;U5zS7%kIL z&_^dzrko369oNztyv1C!SAYmu&Hhzlbj8;;kp@m9hc>}21qaHk0dE3(K>5yqnS!Me z051}tNv(bLJukWl;1a|R>52jVU*gQzghwM79`6IHCGCqw`s0D;KEt%wXuAZ3^$iLF zK>*=IZaMZlDQ@|`X&CU1V1#A?c0kk)TtI14LzRJ z+_MHREe9>AeO;S+LuBCk!Vb9syi3vwY+e79|7f-2%EYqG#OatugJ>6D(pW>a>p;`B z)fkX!li5y5{X(9@xjG_nNs^YmX{MV%=P^8#`xbWe4B5-G+#>9TD8w_CL3ZM=J7dZU5fs!TSfCz)^Q=??JOJhvBp9j=be#`s za_Ut5TA#_r1q^(jTQGEjs?{Hx!4-K77#WBXQ?mzCIy;s)Mlt28P^QWFoa0MU>i?^{Z=4;Xv!eDuK$ zzsjj^VD1Qs60s+6F3m6yIIPG`A3tJ$r#d-y6i$QgOeALTMl`1oj4N)eXx;!qLN$uF zL9oT)IUAaBk%1M5 zWUWEh){b;<;XnTnNSy5F!2NOqrRf&XxZjc=s+6`M;+V`p;zA1L=t9oJC-l z83EL8PyJg8*r0|&dpoS3gW-E;Bsu#Ss)-@S!M_QVB#(De(6{v~qCgLgQg2~a?yVW$ zjRhlb>J0Q&%#wjAj|CoXtZHWWokhUo&9~3oo&@dIZyp)4Wey!;Q$zis=$-&p|Z>|&NWzsc?KWmZaH(% zG^k1|2&Sb6#L zOq%%;roN*}Vd!U0EKe_p{(X=cfE+pYN3u|t_FMIGAThwVKVvzJ15#teXp7IRad-B3 zEC)7b%Q9XLrhXbM+eN!<%Q4@%-doEK%{SIG^v-~FhbD4>U=?wW|dhetgw}4qO5`9cCCJTaphv4rTkaR*IiZLC0;^JCLIg6TPC4uq6 z3TAHKtTVRWx2L@Z93xxq(BZ%?*pY-q4?(_=mfs&0%>g;g;gF*c1mz4SV8DR)F^1WN z6I#@mInf34_%1>!kYPg+Bc#BgxrGqg~CSkgT*Xk!3%&S%mi-N zqp&gb;+-{oXBEK+6#R}ecj4hlf#FRk2^jvmmpwQpy(_9N-ND4OT@BiJw#IY}g2$N$ z%x^G%8e#y984%(ZFVG~RuzYZmOM4`KB*1Vv<(JZB<;ujEW~TXGGY&fce`>Ag=F!h8 z_rJB9*f?{Q`+(K&{|@)+8~@M8c{cZdU-YvI{jW#;3-ABx`v+JQC>G=-IKKACD*p{7H|9Z@Z*=@FICXSbCsL2!ym2GzXnwyiuk?~LzHlbz=UrYN z8}M12rMUpcW%DyHjXq0Zhyrqx9hr~dMsnb6NL5tte(adGrpg$jre@+D652Q4Pw)(! zTpwM6PQN`s+FDXCj3@V0VIjN;Dx^_8-EuP@*=!~+H&-_5AhvE|+QY<~HKNU?a+fWL zHoHuW-#N1y%`1>^=F@^%ES^U-lS{Ayev$!mldFpdaH^>4e1u%qg=tymWI!#<);bJc z``&cIuj5d`ctz=udyC~zfm9Lzv-Afh#w}-&Rw-PUN{efjt@&ztX>KcrgyNXZdsEebOuLVXAIrdx zopME#tN+A*UpKq>AAM`LTciIwLBdid86#;q;b;e^q+BUitG3JcIOU%b65@(^T)%)B zqs#GmQ?@w27qwTIRs;!vF8_6{6%&S}qFtw=Tqj!AXNA0k4C}SHQdW`TcDY_*CV<@S zaZxn#TweM3!Oii>i4Y%2?rgA8>-%Abp|eR+VFBF$$MLMCIlj?CVTom7IBf(wMxjlN z@nxRX?td^jV$LjY#`$xN*_+O9nZ0>))=w}uBUyu41$NxImKTgyC{_)2D z^HHAcZH77x*T_7)99eFcMHx+g@i0tx9Ll|ijXfia_B-2RQ*tw1nrcwxa71?lJkt+7 z)ViQm>Dgt6B%XvhJ4F{!R#+^c&AlWt-u>C9DI+Jw35X*+rz3H43iP@h+!I7}2< zNCK2vL=VWjq+U~*HHFSo|KjNuY83mSBW`7g`qV&FtC75wxrESwiK-*Y>Z;{KCNxY4D_U{hqjSeo4K%4VmIAX>LLUw> zMlT$z2d5)mW7Q%qA%^Z*(xh4erT=?l0=H8t>2NeI%z9#hls_C`kLo5`EIJU?#4AE5 zW6@x_ClpFZ*`wi~iMHsJFzzd(C%v|3%39g*--ybH>SC)?E}3;G<2Avi*e4D_M~l40 z*I`u}YW}!Id~njxCk} zOu`Iw8{0)>J`o)o-4!m)vgEd>eNe~=m^M^)KEb=lCBy+nju-4WrCmljSX=^6Lv#~l z?+Yy;d{LT%)z1IgcWt#`5UZd64-R*aHuC?YJe%|X7yYb4|LalzLi(>C@1^ZO5B4_s z{~qT_UAgKd*7vPdC4oQ1?Uk%UPF`RvQ)fEJ-Fc((N=8C;0anQsoub03SBe2(6xP5{ zkdSK1_!K2@m+Xyp?&@f+cmRojvTM25JI7_M{)W{Xok0LRt zHjKzjIoi(XtCl=qSbBg?AXih;Yk+h5p&E=y$+%EhSVu7{moxQ}rG*LFavdfFNyA(? z-%NOtwh9i>8zziowE|_auI+oF*Y}(g(LKe*O1ft)NjCF{VOjcLP5#4>5LFdXsLHWq zbdZ&QdA*{IVP*MmAIfj||KmIx`R|Kr1*~*B*LT?kje5NK4Wy`UT|G`Y;3h zL=G?0|BJ)N$&@}Wa*QxvR+Z_%g_ZHMTh)bKH<)L+zj|v~FV5uPDgHP=IgXnuba}D2 zrY?|n(VXX?sq5r>Wg4z6J3ZUo2}bD9vcuE6quh1uUrl$FlxJPiYpr>C*1l?8b`$fc z9IRGZl4PsxtLvf`bH(_7i(jT_iDNWb;i}k+;$Lahp`v-fw8~T5YXVv&mDRD0+#Y6hE5S3YD@fWTB2sXyAcIe2v^Hr(&exkDlQnUt@bCK|+R#N4v zDvM@vo3F;-$b8ETHyYgm!jG#v>H9V*E<%6m_QlaY{b`Ro)8Wv5Pg;ViaR#rle=0zC znoin_QprpJOL6R>Ee9xw5ZtxWTgk0c`4IcSF$AI~`xZLY2Eb{=cTo@n6`R7A&LE&9 zT9mSlQw5Xz=vHq53n}#0Ml+$}SfFkL6+qjyQfsKi6>db`-vvBr{LT)el%|yH7PFWU z@Cw?3iH(J>YF7KAKSuMZ%M=z^YQj;y5;^U-${T3uH8tRj=7C#Dig6LFiMJ~QNFv-& zl>ZV`{}Pl_t#QArU|G@MDeOb1|GDcHnaeH(Cs!)3PY(v7A@Sa^tdB@W$fhutOOe=K z2)L5Ni@-KlpZ`|p3IG@b-(#$U^54p$e6!AIu4Op&IUozrvF}0eG~dzbg+in&k8`%D zsFm{AQPL+ps-B>tK#pOaPQCF2slEJ<7xmgfb+;n^vtB!{?&4UD;Jh_t6snclYg-3d zPtKDlXWi9OXq)Z#|JG~uy>BQ-Ajr{0Y=&tpF;`hSJ+2kadn zE3BXcTK)WYxWCc=KGL%}|9#QVO8#GKQUAjHPrFA)dujTwZ}h*9^Auf34{S{N+?$5c zy+6pz@a2^9_Zm+6QBosRe1_@E|741&jzXZ0{FCR1O8a;(9M=;0qNbGfsk20)s7Ee`QVI=Jv6={{MJycccG*oM)r||DvBY?7vo|{>Ax! z_A~b1$53EH|BvxJ`48onUqbt@suX`0PsBIYofJXewEvj46cI8sik^tW(4Z-T~C_m)jbWQ=4Hs9jCv zt0*Pg-P#tv!4?WUrg_osc3$iP#OJMxR`{D|m)()nlS6VI z43IMppqU4$Q`ndcK|=s!f8>essj30;N-Cd5lxXK^GAP2y(>R<#nSi)By*a(QxM*CS zy(s4-#2C*Qj>XN1r#vg-DUY3-e;T(>zdPMV_YKV4f6=cgaB>I4x~KeFyb!x2wGBKH zfua@s86-p>I#9pG-$eaqYCz4z|0%y>WYY_J5*PkIWmOVZ^hcwO>TM{V5?Y9#{*J4w z)r^GBbyaC-t3L=k#U8Cz9R*-Gh2eD;Ot%cy^XPox1KVq-G;BHL_s#2Uh-=k6BMhUF&ADD z+%m1=K>H{(1HJxC`9^*&W!hHM^zzN=cZkqW#=iE6#o!A z19`XOqM72}KmJnDjug+ViKfHLlhkw7he%*ZWbRQG0JP~c|%b2qY+gpX=uc|*P#kokRCgvc) zvl3vzWD3QZa{;CT@OJ3Th;RLjn#i9^8vD573(`*}&<-sgGpnknGKro<`fW9IH6zbd z(PuTS;4zpBpxHCcrH5>fihLwcCCzp8$D-lL-!pmRyZuXqV_8nt5fdXdpEV28NVuiD&vhmYYn)MX}+$xnv;B=^6KO z<|G*zLXlQy&jgXgP;sGbAm}3h@-qabGv%^C|I1#Vt1D^jFD=DKKshd^m zJZ>i1DWCuiQ5PC!28%n$v!_fRj78?aRXz1RGYLe^U4ItsVdjoRv91u(%;B&@9PJ(z#E45mM?37 zOEn^atC2mV)^IRE9?H$%@KyVLQD^J=5h_@Vmp<^H$VdnE#)q|i>Z zE?-?;Uo^U{tIHAr*7m(y-vU4!REiB$&T;m`CpZUU>JB95z8+F;a@0_rt3k9}?3JzM zc|d44i3)z3Z)0p1??P-Y;8828%hW_ne0gVk)4-Vt3&b(Lv+2#mDQ7IlW?L^WYN9pN zuOjW`2rtxf>nFPaSmbbssi}u5nYRLk)rT#Y(|`l0Af9O`^++4o=otIm`k(sVVRe6h zw_dFuY@-zFpyzO@q^po*xfT7Ij(gJIJ}J$0Kw$p?v87!Zwt0Et8Rw9p{yK zD){6x(x~gO5vp?l>Rg3Wz>hu}tCvcRKnx^aK=$N7Up_89_;Ra#-Y9Pi4pw0Yd8kmq zr4qNe+eF{-vQme3AUF_s1j+}y z+iB#T=>(4>h$<0QLxEu0`Hqg%mj;ymvK`p$z#VJJoV2>pRj)k8zlTZOB zQ*o3E%p+bqzcwUK$0zxSB!r$Z>CU(qUARH*eHn4$(`cw+B3nfdeWBD`YOf{l? zyxsEeaOy`gCij8FA{a2@ek2KB@Uq@|Clv)}fX{^*m|BO4q0ciBabBRIAn`?SuS0L@ zMs(N*o+|0WO`J)#!=RuYP@*gQBNr+=iH$ALrUgl~hu#{l3oZAVHJ(ercwcP`*+xJ{rF-Ht6^0+9KE~ZXsSKI7`24klTD}qu_B*X-wZH>&pE|8Yk zVr5J%C_gr#aBmB51*}ZQ>=prFYC`zkL9`wk4v$$Fatk%tiuo%kOvf;ckcmd9DL%nUtv>tR0s6o+ zp<>1WBv2xV6{b3X#n28fa;rt;;>G}fqp^*0u67PUbqzgrCqTj~=DXz`YYZCHP zMeX@s{DLRFGG7{jF{XMWcAqeLLfaYWOkLzg;#!e_0kU6zN(%}c2(C%z49L#Kt^m8u}Wx%6Dkg7F%ZIN4b8}=Ju0)DPsZSq} z?h(rdKn#5};PNGFJLv2Zs}kmcjbyE;GCLa#f8H$VEnG+Vqmv8n-_+7%>Q4ZA-14%O zA9&Zx8^r@{eA%wzz3)?ROu6FPpL%b~!L&8Er=pe~VTa0Dwvz+{Za){wikeTyo&Bo5 z(jG`Ycmva=Drc7bmnFWp<^9!V6aGsh6&Jv$9p0JRfU1^@*mx}m7IW`IwI404d|~%} z4+Us(g-9)w2COfv2=`zI}(N_zDk;j9dG)Iu&RVxpqQd zBFEX=#oe-QR5kWqy&dVQXD|2QRDNfXCI~m?Ti=^b^v2j!s?mBKikHq%vE)sNz7aq? zdl@Kflitq0broN=qf^Mhs0dUSomP~Rflsf9R~!T&NN!I7P&cvcU;^dro|;xeOOa`S z8629Ba?gQj9&Lb3xEuuNGf6A~M3Hy&GU^Ni3(%2|Su$ls2n8)+G|t+q=FSe%yx!bgOGjTdn=bskI~0qEpcTrSqy#z*yN zP_%o(z(VUC0BgI%RbeIuN{pgCf~o)B^9O->van{k63M*&Du(_(wXyYBFBix>@Mteh z=xmmq%LE%i5>T8(Gy?Rzv;arXtk44LblA#)Nv!YK69DBK=>T;QmX#U>CWttq5u>T5ELCPn@pwDkSBLdNFr^RDTXS%W1$|>+O+qEs ze|ynkzwWu+Js3<~lt0v^6LF$%Uw%&Dd}g!rZR4NS>-OpA2GZM4KS{)5Ot?Oi*=aXE z`P3NT{PW`cQ-K3gD4i?NPYL%|iu;BK0Tjl7E30S+;uM4Tg9Pf@#GSkLo#)u1D$M#Q zuOhED-yv8I`fEK1@Xqx1mhMW-#?-_#;6Gw}8Vh_@dJ~v!iclIqtQUig+ z?MHoOKdTRTGIF!3DctTsRMu9mbDJq_LY-6b$_h^aF$EOp!?xixF>yS;(9?&Kg>|m+ zOqJH>74BiyK4V4E&KEn0Rl@Yqa2>jT+Cm?#VWoY9$T zB%OhBzPDYzn4~*(>5{`JF>d3eX5I4<`xX^$c-cQ9dl-VNCYrDTMHyn^1x(m*L3w?y zgm>kl;g$KqzUZ@vyB#D<2Vz)RX{n$w%o+@Hi|FJTnL2C*+nf^z)_A1V7?)RtW*cwitZIkrB~AsZ2=->KgA^`1C62mUa~%1h5IutDvG+R z!Pzrudr=4&>unNNj5=ix;T?9U^p<%mId>V=IMgr<{gl;z=X&>!gafnEIwfw|DZT`0 znQ-PKHD+c#f+z&yU;(y~iDA@7WMoJ!>E=z84;Em0T7jd@KS(uRv?#F5s1=RwqqQwT zOm!<8>_L0W)=^h!;;rSQ4WDs63ay;M6?{lI{1!)-8p~aUNLK^@WMdL?QVahLqurFt5$Nf&c zW;=Q*%i1z1+Hhc|X`W$@h^xleZ>18jDS5Iqvzj{#l@I1;C#5ZGn?O|eENX`-qYSc8S{EJqhLJoP=jWpN z&-OLOI>Fzqi}rb|d1khRuTQTo&su1s+!3wI)AKiHt;^RH@e;bcyy|j18mQF0f}__r zOt5)|CNAU_;Zisf{y4yN^bKbbd_!jM}4#0r3Bw(cN=4lsTrS3XSDB0*X z&wmh#>tJ7JO_;Mj&zZ7#bnLX%o5owrT;`$PeJI^Qg(4P?U3$g*wH)T84W)-vvD=P{+fBLt3tunKh?*SZ=1aWZUHQijzSYI$j+ggjvpJB7VXZFe8aH9CGL+i-r ziCio?Xwh2b5mS)kWW`3{O4!0ib3j1|aka9HG~!738To^@hShVc4Fs@d%Gp;eL9~=a zq^sD51@6RS-m2S*Loy<`J$!%1pAxsWNg01hBf?42rw^aap9||3nX47$X zLh6p{tp$RXAC7I`2MNDktJn7HrE3_-Hy{_iacxXM2UCjal-YU{dY=3Fd5MmN{h46| zlaRPf(F%nxjV)8UHS*rsEEd9nj03EMXhDl%;cXVil(8*Zga@?Twy|EYl(!b{SrlJI z*^W->@QwQ~o*w%Qf?3PF1I3tm!X6{;N{%Qb-(x6XsZ@A7d^L^8N2b>>dzLchC1!wC zf+CTDG!?FcN&q!WqOHO!#fHf+C$Yay8H*ITH3Z8yhs9| z20)G>TleD7l%I)#TA1a~3(0gLb6m&{9`%Bm2~5dUdG&H9O*=|>JqNXcN~+Xs5UZ3M zAP#lPO0u}TN(eq$`l^T~d~IGwVirn1EaX&TVQLk*iQhe@?1b!Fvk@RUbnKG%S{IZ5 zL2Px~r`y_|D>Bl?HIGv*#guJW>*(_{TK0q_VCWn09OK`bfNl~hk@!Fspx2k$mxJW7 z2Sf%5dx&Ki&nqjzE?t!I7MCPVq7r>lRXB-iTd~DHB$lf{A0$8P^Yu(?&eQW~fXm%+9c&;laQ*fr-)MScs7@uP{2GBezFtNuyVa8qWd@h>{ljDPbrC zt>noRPMOp7X@6(S7c$9kP5Uqyehx?Is@u_J$h}fdAGg*Z_e#_Tot?=2bEUIWE)PH$ z9+C%S_&7Py4uRZo0%M^w6`5kT1GR^PR!Htpsis|v*m$B-my!4yT7%U9>--Ssv3~eJn-+ba(}#4}qp+mRgi$*S5FKF1K*Xoen{cM?E-uarqeZ z5XVBRksT*vYJZyp0vq0T1J6{!MQfEHf>^VRAr?~>cffDT>Na=CJ9yH2undE{wfq6= z^oOzMBVG(?<`X&P-boq^DlkZg(zl`;u)f)WYti7zY!aP{eOB-FFph3gj+h4Egv!2ZDLnE-5LGa7rXt9J3Is8nL8z(YpPJa{PO0JYi)Zmdtv1q}HE z$#|Y`jJ_C|i?v#TresFLKMj;Bg3l@hcaFpQ;#o0v-z;vx4hlH! zAP!6{)WyUYl3ir<7PgfAw70P1?U;+Oa)|UmM3?h<4>{8(P8nJ#<_$6CNrsf1T`jtG z?s<2n_d_x?h?U@-sDd@5ZUDQG+G0kUcMzj+32xPFJAd2INKGfizNI!T9G)*V3@pHz zLmn<(a?5ZzCig5tB!jDf7zWbJ7^c@x@Sr3aN3#V;IWl$w$y~-JA&~`OmXC042a>Ms zP`twtVYmunU?U4zoQ29hTvGg)2yzimeUPh&bT= zeCvq+M2;xP#+g@6IFVL-mIdu!>OnX zO2;&bV>~3otZ+syB^%>kj&&cP=yE%C6y75$pdy*Xk(h0>lcDMk{m`IoO6na5HPA-V z{OLMw(?na--zMp1Go(wl@x-C?Fs&o`lEn8&8DLpx(BLXDF2*MWtD;64&7GI@y)(y{ zC$_w)b!v&YH0a~TO$U5GseZspMNVvS_js)dM=>q@rF$2Y-xoUKz*<2@Q%`4wV22w6 z718B`RnJ@F+Jr)nydQe_&0ro(2^MhFzIR zMvd-N9eHPwp`M;qL~}mo**^KknOn8R$4oR8NnMttd@UtvMcBP7a&k4Sk#fvku;0k< zE?T{qq-fh!>sT}I;4Lj8dhroBuTOTyW6MkmO%w-ei-<<+4|2p9W*k|In!*k<*RXii zPc_CMAfS*#(XN(_WEMF9V&kcwbdsR<&E{c^`CMS~Z-ok4gAXX;ik!AkqwAo@yz`*3|HG1y*K3db_@4hvjOqGu$-ZDGr!R3)ZD$J_axAX-Bu!+N6@y>RT76@ z9XmoL5-w1I^ER%a5!8lM>1Yv}9EL@kP<%KtCqdsikixH6h0iv%bl2c&jvc!I_Pq(> zY-)cruJjV{&_t)fwsPivN-8JjTrh^zpp2kBXchoxc9e@;&*w|ikm-Oycf@yN?K~ z0-cUMw5egOEL7cr(-izCk-}TWGq6I+TRRP9qz8p&sm%cZ&gu`$KE}G)gd^~fBF~ZB zI>wPJISFJ76`7IUziZ+xd1Rn%0P0;Fyj=q6lTSE-8Cy@CQILO5G#;>$9Sw!N8Lly* zIJ23aNtsGzzBM%6|1H%W9T5g3%GR2G6+{5f)1x{ zU+J|8R~5Nh3c~dDhs`GPQf(g*%HS=RKaIi&rn{nv3z*qMD`*9Sv};zQt<3in7^Gh_ zP|AYi4bUMRw<*S+cME@DL36tEhL?Ir!4gu-^LQ(e%e-?rcfpY8J~jbKa!bs)ZcwU_ zq>_5Yn4#&QNKFIeGq&V{{TJaj2b0tH>MbNJ>~x6w=B{ z1gs(dXgXo)V?_`63Ehx`Je;!RMp7r#qRjw%F@aCVJxPdmcxix8N2%)ip3f&M+WIp? zA+$HKxnMkexotSE01ftRH#)``L+y_|+N%ts7otxVL&mAnY(td{HEMvSuctHc7zx4p z6harpJP$(!8grG26+&m#gj`2Qu0-%t_DMlUfda5dErtOuhNjVt7Dx5ooem_2F*7ET zm%&qkHDiHSFBhw82BzJhtmG&*aK}@!4_*D@T`5y7w%_?{hi`2-w#onmdoPNUI@Pud zW>^TGZ07~<~Fh*u-d|b1iF*uhO(r?-fBbpNI~*G_E?v2 zgI#T$A0CVEV-7KI)?;Vq4tcNlV+Yq>k)GVZso zx|A*0A!GJT!V((`X>rCBrRK;&DYnfX0k~VG`%->jN<*;q%zd_<;`cl&h(Cn@vtb~b zm&Be~QH$ecTFluUVA_%snV7pgF#04UI;7WQ2~8$K9vgEP*)^JBxM-(Et0==@F=+*f zmxqR7Bjtdl6Z(98Ikn1?pkcfaqTwODqdc8rU|Y8?$cxmJ>Mk;SpmHFj+|nPvO!?*q zZw-8oe8GUsv=x9F6=e%njX5)A{5H^e9_Z{HqC11KNHZ6L%_G%)I94-4G)%b6IBI@q zk?Oz{N%CXBlSPwZqnn3FnLv=Sp*4#((GBv1FXxaf64s_MuHohG&gF>^$pjl`Iq%vz z?>==dlFjq@Pd5J#67Np!=8p5jEuZDF_*op(@3L1Rx+l)=xLH}#_gpeU$3dBP5!L8%YY8XO8IHm3~bM6uCJm9-Tl zBMfCWI}zg-#ruq|r`%igfQfx#<&qF=f0F>XPe3>>VCm*v9+*WO^dXyR|)?;FKK- z<4mbfqN)d9*K3D+QSG?RgXg>O7M@^&MzPWzn6nnWTz1yX;tw-tPpF-aMDqkS)F+fg zc09Y5w`eK!ot*J!%t}TD(9Y!S<%xLN=rm6o#w%73oPa#+d-ra=Hk`$2=Zs=)N{4%h zglN2lb1PImZD6Z!I?e0+C0%1pjt+L!TQ!|+D;%99UJyXfcc1T;aPXpYb^2Yidjq3; zbKN|FBasux#FzHfbyrouw~XA4b_-4pq1X2uWhq1-F@f@FQ~3zu*>IFMnZ*P~Qs%LN>fhxY|h0(h=*XJh;*3M4- zc&}DJs@1SAp-IFA7G`ioM@<*e2=EGcA?*Y0S#oyx(7phVjmj1#nFGr3+;He3If9Bym17mG^64$2MQVFlX zr(>W*?5C>m7|=G1?KU_GyWfZPvBra=gJp3$rf7**>yaIyE%F(R7C z!BEY>+LM@U;mS8~uNbMNh^|3-$ zdl}9q6jgN~@yv|JR=kGBJ8FG~)_2y1mMBu>C7LzWd#Pq~TS@mN_IK;Md!_~>)x4pQ zSf+iL$lUf}it?TkuxIoc!5&o}wi7y&Vndup3!Qk#_?e6nxj6d9!s^rzC`X|Q#XaOd ztBE6VDZPT(^}BVvp5@>-lQBFINwR$+=F_Y%2eyL1AeSZiFjQ5=)AUk6G3Zq3t=Ah> zU9C4EdQ-qN)`LO2{7VmdX;wpeQGTU|uv*;`YC)XuF%-Rpfk2g(ga7kFpu0mAy=W?g zMK8z-BYLUOI+$2}nN-vv4;^D1%{3dctfBCJ#W(sAjQI2CU+*T)defa2j`Gqj3Dwm)#=V;b+ zA_lTIMX?q=aPw;6d#v`UuM#)U=Gi=(XY*{H&9iwn&*s@Yn`iTEp3Sp)HqYkSJez0p WY@W@tc{a~y@cjQd(8uNgzz6`vUB9^i literal 0 HcmV?d00001 diff --git a/BACA/k8s-yaml/README.md b/BACA/k8s-yaml/README.md new file mode 100644 index 00000000..a7702047 --- /dev/null +++ b/BACA/k8s-yaml/README.md @@ -0,0 +1,36 @@ +# Deploying with Kubernetes YAML + +Use the command line to deploy the IBM Business Automation Content Analyzer images using the parameters in ca-deploy.yml for specific environment and configuration settings. Review the reference topics for these parameters and determine the values for your environment as part of your preparation: +[CA Kubernates YAML parameters](./ca_deploy_yaml_parameters.md) + +## Deploying component images + +After the parameter values for your environment are configured in the ca-deploy.yml file, deploy IBM Business Automation Content Analyzer by following steps: + + 1. Use the deployment file to deploy IBM Business Automation Content Analyzer: + + ```kubectl apply -f ca-deploy.yml``` + + Due to the configuration of the readiness probes, after the pods start, it may take up to 10 or more minutes before the pods enter a ready state. + + 2. Run the following command to see that status of the pods. Wait until all pods are running and ready. + + ```kubectl -n get pods``` + +> **Reminder**: After you deploy, return to the instructions for [Completing post deployment tasks for IBM Business Automation Content Analyzer](../docs/post-deployment.md), to review document for further configuration. + +## Uninstalling a Kubernetes release of IBM Business Automation Content Analyzer + +To uninstall and delete the IBM Business Automation Content Analyzer release, use the following command: + +```console +$ kubectl delete -f +``` + +The command removes all the Kubernetes components associated with the release, except any Persistent Volume Claims (PVCs). This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. To delete the persisted data of the release, you can delete the PVC using the following command: + +```console +$ kubectl delete pvc my-baca-prod-release-baca-pvclaim +``` + +In the configuration folder, the delete_ContentAnalyzer.sh script can also be used to clean up PVs, PVCs, secrets and directories created by the init_deployment.sh script. Simply, run delete_ContentAnalyzer.sh from the master node where the configuration directory was copied to. diff --git a/BACA/k8s-yaml/ca-deploy.yml b/BACA/k8s-yaml/ca-deploy.yml new file mode 100644 index 00000000..f0cbbbac --- /dev/null +++ b/BACA/k8s-yaml/ca-deploy.yml @@ -0,0 +1,2636 @@ +# +# Licensed Materials - Property of IBM +# 6949-68N +# +# © Copyright IBM Corp. 2019 All Rights Reserved +# +# +# Database Deployment +# +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: mongo + namespace: $KUBE_NAME_SPACE + labels: + app: mongo + release: celery$KUBE_NAME_SPACE +spec: + replicas: 1 + template: + metadata: + labels: + app: mongo + release: celery$KUBE_NAME_SPACE + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - mongo-admin + topologyKey: kubernetes.io/hostname + volumes: + - name: spmongo-pv-storage + persistentVolumeClaim: + claimName: $DATAPVC + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: storage + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + containers: + - name: mongo + image: $DOCKER_REG_FOR_SERVICES/mongo:$VERSION + resources: + limits: + memory: $MONGO_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + env: + - name: ENTRYPASSWORD + valueFrom: + secretKeyRef: + name: "baca-mongo" + key: MONGOENTRYPASSWORD + - name: MONGO_USER + valueFrom: + secretKeyRef: + name: "baca-mongo" + key: MONGOUSER + - name: MONGO_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-mongo" + key: MONGOPASSWORD + - name: MONGO_INITDB + value: "bacauser" + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: LOG_PATH + value: "/var/log/mongodb" + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: WIREDTIGERCACHE + value: "$MONGO_WIREDTIGER_LIMIT" + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + imagePullPolicy: Always + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: + - bash + - -c + - source setup_env.sh && echo 'db.runCommand("ping").ok' | mongo 127.0.0.1:27017/$MONGO_INITDB -u $MONGO_USER -p $MONGO_PASSWORD --authenticationDatabase $MONGO_INITDB --ssl --sslPEMKeyFile $PEMFILE --sslCAFile $CERTIFICATE_PATH + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: + - bash + - -c + - source setup_env.sh && echo 'db.runCommand("ping").ok' | mongo 127.0.0.1:27017/$MONGO_INITDB -u $MONGO_USER -p $MONGO_PASSWORD --authenticationDatabase $MONGO_INITDB --ssl --sslPEMKeyFile $PEMFILE --sslCAFile $CERTIFICATE_PATH + ports: + - containerPort: 27017 + volumeMounts: + - mountPath: "/data/db" + name: spmongo-pv-storage + subPath: mongo + - name: log + mountPath: "/var/log/mongodb" + subPath: mongo + - name: storage + mountPath: "/etc/certs" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + mongo$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: mongo-admin + namespace: $KUBE_NAME_SPACE + labels: + app: mongo-admin + release: celery$KUBE_NAME_SPACE +spec: + replicas: 1 + template: + metadata: + labels: + app: mongo-admin + release: celery$KUBE_NAME_SPACE + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - mongo + topologyKey: kubernetes.io/hostname + volumes: + - name: spmongoadmin-pv-storage + persistentVolumeClaim: + claimName: $DATAPVC + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: storage + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + containers: + - name: mongo-admin + image: $DOCKER_REG_FOR_SERVICES/mongo:$VERSION + resources: + limits: + memory: $MONGO_ADMIN_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + env: + - name: ENTRYPASSWORD + valueFrom: + secretKeyRef: + name: "baca-mongo-admin" + key: MONGOADMINENTRYPASSWORD + - name: MONGO_USER + valueFrom: + secretKeyRef: + name: "baca-mongo-admin" + key: MONGOADMINUSER + - name: MONGO_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-mongo-admin" + key: MONGOADMINPASSWORD + - name: MONGO_INITDB + value: "smartpages" + - name: MONGO_SECONDDB + value: "binaryfiles" + - name: LOG_PATH + value: "/var/log/mongodb" + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: WIREDTIGERCACHE + value: "$MONGO_WIREDTIGER_LIMIT" + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + imagePullPolicy: Always + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: + - bash + - -c + - source setup_env.sh && echo 'db.runCommand("ping").ok' | mongo 127.0.0.1:27017/$MONGO_INITDB -u $MONGO_USER -p $MONGO_PASSWORD --authenticationDatabase $MONGO_INITDB --ssl --sslPEMKeyFile $PEMFILE --sslCAFile $CERTIFICATE_PATH + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: + - bash + - -c + - source setup_env.sh && echo 'db.runCommand("ping").ok' | mongo 127.0.0.1:27017/$MONGO_INITDB -u $MONGO_USER -p $MONGO_PASSWORD --authenticationDatabase $MONGO_INITDB --ssl --sslPEMKeyFile $PEMFILE --sslCAFile $CERTIFICATE_PATH + ports: + - containerPort: 27017 + volumeMounts: + - mountPath: "/data/db" + name: spmongoadmin-pv-storage + subPath: mongoadmin + - name: log + mountPath: "/var/log/mongodb" + subPath: mongoadmin + - name: storage + mountPath: "/etc/certs" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + mongo-admin$KUBE_NAME_SPACE: baca +--- +apiVersion: v1 +kind: Service +metadata: + name: mongo + namespace: $KUBE_NAME_SPACE + labels: + app: mongo + release: celery$KUBE_NAME_SPACE +spec: + ports: + - port: 27017 + targetPort: 27017 + type: LoadBalancer + selector: + app: mongo +--- +apiVersion: v1 +kind: Service +metadata: + name: mongo-admin + namespace: $KUBE_NAME_SPACE + labels: + app: mongo-admin + release: celery$KUBE_NAME_SPACE +spec: + ports: + - port: 27017 + targetPort: 27017 + type: LoadBalancer + selector: + app: mongo-admin +--- +apiVersion: v1 +data: + initialize: |- + #!/bin/sh + set -e ; # Have script exit in the event of a failed command. + + # connectToMinio + # Use a check-sleep-check loop to wait for Minio service to be available + connectToMinio() { + ATTEMPTS=0 ; LIMIT=29 ; # Allow 30 attempts + set -e ; # fail if we can't read the keys. + ACCESS=$(cat /config/accesskey) ; SECRET=$(cat /config/secretkey) ; + set +e ; # The connections to minio are allowed to fail. + echo "Connecting to Minio server: http://$MINIO_ENDPOINT:$MINIO_PORT" ; + MC_COMMAND="mc config host add myminio http://$MINIO_ENDPOINT:$MINIO_PORT $ACCESS $SECRET" ; + $MC_COMMAND ; + STATUS=$? ; + until [ $STATUS = 0 ] + do + ATTEMPTS=`expr $ATTEMPTS + 1` ; + echo \"Failed attempts: $ATTEMPTS\" ; + if [ $ATTEMPTS -gt $LIMIT ]; then + exit 1 ; + fi ; + sleep 2 ; # 1 second intervals between attempts + $MC_COMMAND ; + STATUS=$? ; + done ; + set -e ; # reset `e` as active + return 0 + } + + # checkBucketExists ($bucket) + # Check if the bucket exists, by using the exit code of `mc ls` + checkBucketExists() { + BUCKET=$1 + CMD=$(/usr/bin/mc ls myminio/$BUCKET > /dev/null 2>&1) + return $? + } + + # createBucket ($bucket, $policy, $purge) + # Ensure bucket exists, purging if asked to + createBucket() { + BUCKET=$1 + POLICY=$2 + PURGE=$3 + + # Purge the bucket, if set & exists + # Since PURGE is user input, check explicitly for `true` + if [ $PURGE = true ]; then + if checkBucketExists $BUCKET ; then + echo "Purging bucket '$BUCKET'." + set +e ; # don't exit if this fails + /usr/bin/mc rm -r --force myminio/$BUCKET + set -e ; # reset `e` as active + else + echo "Bucket '$BUCKET' does not exist, skipping purge." + fi + fi + + # Create the bucket if it does not exist + if ! checkBucketExists $BUCKET ; then + echo "Creating bucket '$BUCKET'" + /usr/bin/mc mb myminio/$BUCKET + else + echo "Bucket '$BUCKET' already exists." + fi + + # At this point, the bucket should exist, skip checking for existence + # Set policy on the bucket + echo "Setting policy of bucket '$BUCKET' to '$POLICY'." + /usr/bin/mc policy $POLICY myminio/$BUCKET + } + + # Try connecting to Minio instance + connectToMinio + # Create the bucket + createBucket bucket none false +kind: ConfigMap +metadata: + labels: + app: minio + release: celery$KUBE_NAME_SPACE + name: celery$KUBE_NAME_SPACE-minio + namespace: $KUBE_NAME_SPACE +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + labels: + app: minio + release: celery$KUBE_NAME_SPACE + name: celery$KUBE_NAME_SPACE-minio + namespace: $KUBE_NAME_SPACE +spec: + selector: + matchLabels: + app: minio + release: celery$KUBE_NAME_SPACE + template: + metadata: + labels: + app: minio + release: celery$KUBE_NAME_SPACE + name: celery$KUBE_NAME_SPACE-minio + spec: + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: minio + image: $DOCKER_REG_FOR_SERVICES/minio:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $MINIO_LIMITED_MEMORY + securityContext: + runAsNonRoot: true + runAsUser: 51000 + volumeMounts: + - name: storage + mountPath: "/etc/certs" + ports: + - name: service + containerPort: 9000 + env: + - name: MINIO_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: MINIO_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + livenessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["curl", "-X", "GET", "https://0.0.0.0:9000/minio/health/live","--insecure"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["curl", "-X", "GET", "https://0.0.0.0:9000/minio/health/ready","--insecure"] + nodeSelector: + celery$KUBE_NAME_SPACE: baca + volumes: + - name: minio-user + secret: + secretName: "baca-minio" + - name: storage + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + items: + - key: public.crt + path: public.crt + - key: private.key + path: private.key + - key: public.crt + path: CAs/public.crt +--- +apiVersion: v1 +kind: Service +metadata: + name: celery$KUBE_NAME_SPACE-minio + namespace: $KUBE_NAME_SPACE + labels: + app: minio + release: celery$KUBE_NAME_SPACE +spec: + type: NodePort + ports: + - name: service + port: 9000 + targetPort: 9000 + protocol: TCP + selector: + app: minio + release: celery$KUBE_NAME_SPACE +--- +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app: rabbitmq + release: celery$KUBE_NAME_SPACE + name: celery$KUBE_NAME_SPACE-rabbitmq-config + namespace: $KUBE_NAME_SPACE +data: + enabled_plugins: '[rabbitmq_management, rabbitmq_peer_discovery_k8s].' + rabbitmq.conf: |- + ##username and password + default_user=PoC + default_pass=CHANGEME + ## Clustering + cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s + cluster_formation.k8s.host = kubernetes.default.svc.cluster.local + cluster_formation.node_cleanup.interval = 10 + cluster_formation.node_cleanup.only_log_warning = true + cluster_partition_handling = autoheal + ## queue master locator + queue_master_locator=min-masters + ## enable guest user + loopback_users.guest = false + #disk_free_limit.absolute = 50MB +--- +apiVersion: v1 +kind: Service +metadata: + name: celery$KUBE_NAME_SPACE-rabbitmq + namespace: $KUBE_NAME_SPACE + labels: + app: rabbitmq + release: celery$KUBE_NAME_SPACE +spec: + type: ClusterIP + ports: + - name: epmd + port: 4369 + targetPort: epmd + - name: amqp + port: 5671 + targetPort: amqp + - name: dist + port: 25672 + targetPort: dist + - name: stats + port: 15671 + targetPort: stats + selector: + app: rabbitmq + release: celery$KUBE_NAME_SPACE +--- +apiVersion: v1 +kind: Service +metadata: + name: celery$KUBE_NAME_SPACE-rabbitmq-headless + labels: + app: rabbitmq + release: celery$KUBE_NAME_SPACE +spec: + clusterIP: None + ports: + - name: epmd + port: 4369 + targetPort: epmd + - name: amqp + port: 5671 + targetPort: amqp + - name: dist + port: 25672 + targetPort: dist + - name: stats + port: 15671 + targetPort: stats + selector: + app: rabbitmq + release: celery$KUBE_NAME_SPACE +--- +apiVersion: apps/v1beta2 +kind: StatefulSet +metadata: + labels: + app: rabbitmq + release: celery$KUBE_NAME_SPACE + name: celery$KUBE_NAME_SPACE-rabbitmq + namespace: $KUBE_NAME_SPACE +spec: + replicas: 1 + selector: + matchLabels: + app: rabbitmq + release: celery$KUBE_NAME_SPACE + serviceName: celery$KUBE_NAME_SPACE-rabbitmq-headless + template: + metadata: + labels: + app: rabbitmq + release: celery$KUBE_NAME_SPACE + spec: + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - env: + - name: MY_POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: MY_POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: K8S_SERVICE_NAME + value: celery$KUBE_NAME_SPACE-rabbitmq-headless + - name: K8S_ADDRESS_TYPE + value: ip + - name: RABBITMQ_NODENAME + value: rabbit@$(MY_POD_IP) + - name: RABBITMQ_ULIMIT_NOFILES + value: "65536" + - name: RABBITMQ_USE_LONGNAME + value: "true" + - name: RABBITMQ_ERL_COOKIE + valueFrom: + secretKeyRef: + key: rabbitmq-erlang-cookie + name: "baca-rabbitmq" + - name: RABBITMQ_PASSWORD + valueFrom: + secretKeyRef: + key: rabbitmq-password + name: "baca-rabbitmq" + - name: RABBITMQ_USER + valueFrom: + secretKeyRef: + key: rabbitmq-user + name: "baca-rabbitmq" + - name: RABBITMQ_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + key: rabbitmq-admin-password + name: "baca-rabbitmq" + - name: CERTIFICATE_DIR + value: "/etc/certs" + image: $DOCKER_REG_FOR_SERVICES/rabbitmq:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $RABBITMQ_LIMITED_MEMORY + name: rabbitmq + ports: + - containerPort: 4369 + name: epmd + - containerPort: 5671 + name: amqp + - containerPort: 25672 + name: dist + - containerPort: 15671 + name: stats + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: config-volume + mountPath: /opt/bitnami/rabbitmq/conf + - name: data + mountPath: /opt/bitnami/rabbitmq/var/lib/rabbitmq/ + - name: storage + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 120 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + tcpSocket: + port: 5671 + readinessProbe: + initialDelaySeconds: 10 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: + - bash + - -c + - rabbitmqctl list_users | grep $RABBITMQ_USER + nodeSelector: + celery$KUBE_NAME_SPACE: baca + terminationGracePeriodSeconds: 10 + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + volumes: + - configMap: + defaultMode: 420 + items: + - key: rabbitmq.conf + path: rabbitmq.conf + - key: enabled_plugins + path: enabled_plugins + name: celery$KUBE_NAME_SPACE-rabbitmq-config + name: config-volume + - emptyDir: {} + name: data + - name: storage + secret: + secretName: baca-secrets$KUBE_NAME_SPACE +--- +apiVersion: apps/v1beta2 +kind: StatefulSet +metadata: + labels: + app: redis + release: celery$KUBE_NAME_SPACE + name: celery$KUBE_NAME_SPACE-redis-master + namespace: $KUBE_NAME_SPACE +spec: + selector: + matchLabels: + app: redis + release: celery$KUBE_NAME_SPACE + role: master + serviceName: redis-master + template: + metadata: + labels: + app: redis + release: celery$KUBE_NAME_SPACE + role: master + spec: + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - env: + - name: REDIS_REPLICATION_MODE + value: master + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: "baca-redis" + - name: REDIS_DISABLE_COMMANDS + value: FLUSHDB,FLUSHALL + image: $DOCKER_REG_FOR_SERVICES/redis:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $REDIS_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + name: celery$KUBE_NAME_SPACE-redis + ports: + - containerPort: 6379 + name: redis + livenessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + tcpSocket: + port: 6379 + readinessProbe: + initialDelaySeconds: 5 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: + - bash + - -c + - redis-cli -h 127.0.0.1 -p 6380 -a $REDIS_PASSWORD ping + volumeMounts: + - mountPath: /bitnami/redis/data + name: redis-data + - name: storage + mountPath: "/etc/certs" + nodeSelector: + celery$KUBE_NAME_SPACE: baca + schedulerName: default-scheduler + serviceAccount: default + serviceAccountName: default + terminationGracePeriodSeconds: 30 + volumes: + - emptyDir: {} + name: redis-data + - name: storage + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + items: + - key: redis.crt + path: redis.crt + - key: redis.key + path: redis.key + - key: redis.pem + path: redis.pem + updateStrategy: + type: OnDelete +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: redis + release: celery$KUBE_NAME_SPACE + name: celery$KUBE_NAME_SPACE-redis-master + namespace: $KUBE_NAME_SPACE +spec: + ports: + - name: redis + protocol: TCP + port: 6379 + targetPort: redis + selector: + app: redis + release: celery$KUBE_NAME_SPACE + type: ClusterIP +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: callerapi + namespace: $KUBE_NAME_SPACE + labels: + app: callerapi + release: celery$KUBE_NAME_SPACE + component: callerapi +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: callerapi + release: celery$KUBE_NAME_SPACE + component: callerapi + spec: + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + containers: + - name: callerapi + image: $DOCKER_REG_FOR_SERVICES/callerapi:$VERSION + resources: + limits: + memory: $CALLERAPI_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + imagePullPolicy: Always + ports: + - containerPort: 8080 + volumeMounts: + - name: log + mountPath: /var/log/callerapi + subPath: callerapi + readOnly: false + - name: secrets + mountPath: "/etc/certs" + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/callerapi + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + tcpSocket: + port: 8080 + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["curl", "-X", "GET", "https://0.0.0.0:8080","--insecure"] + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: spbackend + namespace: $KUBE_NAME_SPACE + labels: + app: spbackend + release: celery$KUBE_NAME_SPACE + component: spbackend +spec: + replicas: $NON_CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: spbackend + release: celery$KUBE_NAME_SPACE + component: spbackend + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: storage + persistentVolumeClaim: + claimName: $CONFIGPVC + - name: certs + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + - name: ingress-secrets + secret: + secretName: baca-ingress-secret + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: spbackend + image: $DOCKER_REG_FOR_SERVICES/backend:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $BACKEND_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + ports: + - containerPort: 8080 + volumeMounts: + - name: storage + mountPath: /var/storage/backend + subPath: backend + - name: certs + mountPath: "/etc/certs" + - name: ingress-secrets + mountPath: "/etc/certs/backend" + - name: log + mountPath: /var/log/backend + subPath: backend + readOnly: false + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/backend + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: STORAGE_PATH + value: /var/storage/backend + - name: BASE_DB + value: "$BASE_DB" + - name: BASE_DB_SERVER + value: "$BASEDB_SERVER" + - name: BASE_DB_PORT + value: "$BASEDB_PORT" + - name: BASE_DB_USER + value: "$BASEDB_USER" + - name: BASE_DB_PWD + valueFrom: + secretKeyRef: + name: "baca-basedb" + key: BASE_DB_PWD + - name: RDBENGINE + value: "DB2" + - name: MONGOENTRYPASSWORD + valueFrom: + secretKeyRef: + name: "baca-mongo" + key: MONGOPASSWORD + - name: MONGOUSER + valueFrom: + secretKeyRef: + name: "baca-mongo" + key: MONGOUSER + - name: MONGOAUTHDB + value: "bacauser" + - name: MONGOIPADDRESS + value: mongo + - name: MONGOPORT + value: "27017" + - name: MONGOADMINENTRYPASSWORD + valueFrom: + secretKeyRef: + name: "baca-mongo-admin" + key: MONGOADMINPASSWORD + - name: MONGOADMINUSER + valueFrom: + secretKeyRef: + name: "baca-mongo-admin" + key: MONGOADMINUSER + - name: MONGOADMINAUTHDB + value: "smartpages" + - name: MONGOADMINIPADDRESS + value: mongo-admin + - name: MONGOADMINPORT + value: "27017" + - name: BACKEND_PROTOCOL + value: "https" + - name: BACKEND_HOST + value: "spbackend" + - name: BACKEND_PORT + value: "8080" + - name: BACKEND_PATH + value: "" + - name: CALLER_API_PROTOCOL + value: "https" + - name: CALLER_API_HOST + value: callerapi + - name: CALLER_API_PORT + value: "8080" + - name: FULL_CALLER_API_PATH + value: /api/v1/actions + - name: NODE_TLS_REJECT_UNAUTHORIZED + value: "$NODE_TLS_REJECT_UNAUTHORIZED" + - name: LDAP + value: "$USE_LDAP" + - name: LDAP_FILTER + value: "$LDAP_FILTER" + - name: LDAP_DN + value: "$LDAP_DN" + - name: LDAP_URL + value: "$LDAP_URL" + - name: USERNAME + value: "$USERNAME" + - name: LDAP_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-ldap" + key: LDAP_PASSWORD + optional: true + - name: LDAP_PORT + value: "$LDAP_PORT" + - name: LDAP_BASE + value: "$LDAP_BASE" + - name: LDAP_CRT_NAME + value: "$LDAP_CRT_NAME" + - name: LDAP_SELF_SIGNED_CRT + value: "$LDAP_SELF_SIGNED_CRT" + - name: RESULT_HOST + value: celery$KUBE_NAME_SPACE-redis-master + - name: RESULT_PORT + value: "6379" + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: INGRESS_CERTIFICATE_DIR + value: "/etc/certs/backend" + - name: TLS_PREFIX + value: "tls" + livenessProbe: + initialDelaySeconds: 120 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["curl", "-X", "GET", "https://0.0.0.0:8002", "--insecure"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["curl", "-X", "GET", "https://0.0.0.0:8002/health", "--insecure"] + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: spfrontend + namespace: $KUBE_NAME_SPACE + labels: + app: spfrontend + release: celery$KUBE_NAME_SPACE + component: spfrontend +spec: + replicas: $NON_CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: spfrontend + release: celery$KUBE_NAME_SPACE + component: spfrontend + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: ingress-secrets + secret: + secretName: baca-ingress-secret + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: spfrontend + image: $DOCKER_REG_FOR_SERVICES/spfrontend:$VERSION + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + imagePullPolicy: Always + resources: + limits: + memory: $FRONTEND_LIMITED_MEMORY + ports: + - containerPort: 3000 + volumeMounts: + - name: log + mountPath: /var/log/frontend + subPath: frontend + - name: ingress-secrets + mountPath: "/etc/certs/frontend" + env: + - name: BACKEND_HOST + value: "$BACKEND_HOST" + - name: BACKEND_PROTOCOL + value: "https" + - name: BACKEND_PORT + value: "$BACKEND_PORT" + - name: BACKEND_PATH + value: "$BACKEND_PATH" + - name: FRONTEND_HOST + value: "$FRONTEND_HOST" + - name: FRONTEND_PROTOCOL + value: "https" + - name: FRONTEND_PATH + value: "$FRONTEND_PATH" + - name: LDAP + value: "$USE_LDAP" + - name: SSO + value: "$SSO" + - name: NODE_TLS_REJECT_UNAUTHORIZED + value: "$NODE_TLS_REJECT_UNAUTHORIZED" + - name: BXDOMAINNAME + value: "$BXDOMAINNAME" + - name: LOG_PATH + value: /var/log/frontend + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: INGRESS_CERTIFICATE_DIR + value: "/etc/certs/frontend" + - name: TLS_PREFIX + value: "tls" + livenessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + tcpSocket: + port: 3000 + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["curl", "-X", "GET", "https://0.0.0.0:3000/health","--insecure"] + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: v1 +kind: Service +metadata: + name: callerapi + namespace: $KUBE_NAME_SPACE + labels: + app: callerapi + release: celery$KUBE_NAME_SPACE +spec: + type: NodePort + ports: + - port: 8080 + targetPort: 8080 + protocol: TCP + name: callerapi + selector: + app: callerapi + release: celery$KUBE_NAME_SPACE + component: callerapi +--- +apiVersion: v1 +kind: Service +metadata: + name: spbackend + namespace: $KUBE_NAME_SPACE + labels: + app: spbackend + release: celery$KUBE_NAME_SPACE +spec: + type: NodePort + ports: + - port: 8080 + targetPort: 8002 + protocol: TCP + name: spbackend + selector: + app: spbackend + release: celery$KUBE_NAME_SPACE + component: spbackend +--- +apiVersion: v1 +kind: Service +metadata: + name: spfrontend + namespace: $KUBE_NAME_SPACE + labels: + app: spfrontend + release: celery$KUBE_NAME_SPACE +spec: + type: NodePort + ports: + - port: 8080 + targetPort: 3000 + protocol: TCP + name: spfrontend + selector: + app: spfrontend + release: celery$KUBE_NAME_SPACE + component: spfrontend +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: postprocessing + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: postprocessing +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: postprocessing + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: postprocessing + image: $DOCKER_REG_FOR_SERVICES/postprocessing:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $POST_PROCESS_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/postprocessing + subPath: postprocessing + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/postprocessing + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: pdfprocess + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: pdfprocess +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: pdfprocess + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: pdfprocess + image: $DOCKER_REG_FOR_SERVICES/pdfprocess:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $PDF_PROCESS_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/pdfprocess + subPath: pdfprocess + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/pdfprocess + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: utf8process + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: utf8process +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: utf8process + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: utf8process + image: $DOCKER_REG_FOR_SERVICES/utf8process:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $UTF8_PROCESS_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/utf8process + subPath: utf8process + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/utf8process + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: setup + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: setup +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: setup + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: setup + image: $DOCKER_REG_FOR_SERVICES/setup:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $SETUP_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/setup + subPath: setup + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/setup + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: ocr-extraction + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: ocr-extraction +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: ocr-extraction + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: ocr-extraction + image: $DOCKER_REG_FOR_SERVICES/ocrextraction:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $OCR_EXTRACTION_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/ocr-extraction + subPath: ocr-extraction + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/ocr-extraction + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: classifyprocess-classify + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: classifyprocess-classify +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: classifyprocess-classify + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: classifyprocess-classify + image: $DOCKER_REG_FOR_SERVICES/classify:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $CLASSIFY_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/classifyprocess-classify + subPath: classifyprocess-classify + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/classifyprocess-classify + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: processing-extraction + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: processing-extraction +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: processing-extraction + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: processing-extraction + image: $DOCKER_REG_FOR_SERVICES/processingextraction:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $PROCESSING_EXTRACTION_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/processing-extraction + subPath: processing-extraction + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/processing-extraction + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: interprocessing + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: interprocessing +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: interprocessing + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: interprocessing + image: $DOCKER_REG_FOR_SERVICES/interprocessing:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $INTER_PROCESSING_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/interprocessing + subPath: interprocessing + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/interprocessing + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: reanalyze + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: reanalyze +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: reanalyze + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: reanalyze + image: $DOCKER_REG_FOR_SERVICES/reanalyze:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $REANALYZE_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/reanalyze + subPath: reanalyze + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/reanalyze + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: updatefiledetail + namespace: $KUBE_NAME_SPACE + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: updatefiledetail +spec: + replicas: $CELERY_REPLICAS + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: baca-celery + release: celery$KUBE_NAME_SPACE + component: consumer + worker: updatefiledetail + spec: + volumes: + - name: log + persistentVolumeClaim: + claimName: $LOGPVC + - name: secrets + secret: + secretName: baca-secrets$KUBE_NAME_SPACE + securityContext: + runAsNonRoot: true + runAsUser: 51000 + fsGroup: 51001 + supplementalGroups: + - 51001 + containers: + - name: updatefiledetail + image: $DOCKER_REG_FOR_SERVICES/updatefiledetail:$VERSION + imagePullPolicy: Always + resources: + limits: + memory: $UPDATEFILE_LIMITED_MEMORY + securityContext: + runAsUser: 51000 + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + capabilities: + drop: + - ALL + volumeMounts: + - name: log + mountPath: /var/log/updatefiledetail + subPath: updatefiledetail + readOnly: false + - name: secrets + mountPath: "/etc/certs" + livenessProbe: + initialDelaySeconds: 60 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 20 + successThreshold: 1 + failureThreshold: 5 + exec: + command: ["celery", "inspect", "ping", "-A", "tasks"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: LOG_PATH + value: /var/log/updatefiledetail + - name: LOG_LEVEL + value: "$LOG_LEVEL" + - name: NUM_WORKERS + value: "2" + - name: BROKER_URL + value: amqps://celery$KUBE_NAME_SPACE-rabbitmq:5671 + - name: BROKER_USERNAME + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-user + - name: BROKER_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-rabbitmq" + key: rabbitmq-password + - name: RESULTS_URL + value: rediss://celery$KUBE_NAME_SPACE-redis-master:6379 + - name: RESULTS_PASSWORD + valueFrom: + secretKeyRef: + name: "baca-redis" + key: redis-password + - name: S3_URL + value: https://celery$KUBE_NAME_SPACE-minio:9000/mybucket + - name: S3_ENDPOINT + value: https://celery$KUBE_NAME_SPACE-minio:9000 + - name: S3_ACCESS_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: accesskey + - name: S3_SECRET_KEY + valueFrom: + secretKeyRef: + name: "baca-minio" + key: secretkey + - name: CERTIFICATE_DIR + value: "/etc/certs" + - name: SSL_VALIDATE + value: "$SSL_VALIDATE" + - name: PROCESS_TIMEOUT + value: "300" + imagePullSecrets: + - name: $DOCKER_REG_SECRET_NAME + nodeSelector: + celery$KUBE_NAME_SPACE: baca diff --git a/BACA/k8s-yaml/ca_deploy_yaml_parameters.md b/BACA/k8s-yaml/ca_deploy_yaml_parameters.md new file mode 100644 index 00000000..e5c4750f --- /dev/null +++ b/BACA/k8s-yaml/ca_deploy_yaml_parameters.md @@ -0,0 +1,59 @@ +## Populating ca-deploy.yml with correct values + +Modify ca-deploy.yml and replace "$Variable" with the actual value. Anything not documented here typically does not need to be changed. + +#### Summary of the variable + + Variable Name | Description | Occurrence + ---- | ----- | ----- + $KUBE_NAME_SPACE | The K8's namespace or OpenShift project that Content Analyzer will be deployed on. | 179 + $DATAPVC | Name of PVC for data files created earlier. Default sp-data-pvc. | 2 + $LOGPVC | Name of PVC for log files created earlier. Default sp-logs-pvc. | 15 + $CONFIGPVC | Name of PVC for config files created earlier. Default sp-config-pvc. | 1 + $DOCKER_REG_FOR_SERVICES | Name of the local registry where Content Analyzer images have been loaded, in the format / (for example, docker-registry.default.svc:5000/sp or mycluster.icp:8500/baca). | 18 + $VERSION | Version tag of the docker images loaded into the registry (for example, 1.0.1-gm) | 18 + $DOCKER_REG_SECRET_NAME | Docker secret name if you want to use images from a different namespace in your private image registry, otherwise leave blank. | 17 + $LOG_LEVEL | Blank or debug to enable additional logging. | 15 + $CELERY_REPLICAS | Determines the number of celery pods to start. Recommended value is 1 per worker node. | 11 + $NON_CELERY_REPLICAS | Determines the number of pods for non-celery. Recommended value is 1 per worker node. | 2 + $BASE_DB | Name of the base database created on Db2 (for example, BASECA). | 1 + $BASEDB_SERVER | Host name of the Db2 server. | 1 + $BASEDB_PORT | Listener port for the Db2 server. | 1 + $BASEDB_USER | User to log into Db2 and access Base DB. | 1 + $NODE_TLS_REJECT_UNAUTHORIZED | 0 or 1 depending on whether self signed certificate if used for SSL. Generally left at 0. | 2 + $USE_LDAP | true or false depending on whether you are using LDAP. | 2 + $LDAP_FILTER | Search filter to find user. Use ‘{{username}}’ as substitution variable for example. (&(cn={{username}})(objectClass=person)). If not using LDAP leave blank. | 2 + $LDAP_DN | DN of bind user (for example, cn=root). If not using LDAP leave blank. | 1 + $LDAP_PORT | LDAP port (for example, 389). If not using LDAP leave blank. | 1 + $LDAP_URL | URL of LDAP server (for example, ldap://xx.xx.xx.xx). If not using LDAP leave blank. | 1 + $LDAP_BASE | LDAP search base. If not using LDAP leave blank. | 1 + $LDAP_CRT_NAME | If using LDAPS, specify certificate from LDAP server. If not using LDAP leave blank. | 1 + $LDAP_SELF_SIGNED_CRT | y if using a self-signed certificate. n otherwise. If not using LDAP leave blank. | 1 + $USERNAME | Username of initial user to log into the IBM Business Automation Content Analyzer. The value should match the login name where you given in the DB creation script AddTenant.sh. | 1 + $BXDOMAINNAME | Domain name used to access frontend/backend. Generally, fill in host name of proxy node if you are using IBM Cloud Private, fill in host name of infra node if you are using OpenShift. | 1 + $BACKEND_HOST | Domain used in URL to access backend. Usually the same as BXDOMAINNAME. If using ingress with non-default port (80/443), then include port in hostname (for example, my.domain.com:444). | 1 + $BACKEND_PORT | For non-ingress solution, enter the node port of the spbackend service, otherwise leave blank. | 1 + $BACKEND_PATH | If using path based ingress, specify the path for backend (for example, in http://my.domain.com/backendsp/ path would be backendsp). Note that backend port and backend path are mutually exclusive. Only one should be specified. Since OpenShift's router does not support URL rewriting, and therefore leave blank, if you are using OpenShift's router as ingress point. | 1 + $FRONTEND_HOST | Domain used in URL to access frontend. Similar to backend_host. | 1 + $FRONTEND_PATH | If using path based ingress, specify the path for frontend (for example, in http://my.domain.com/frontendsp/ path would be frontendsp). Since OpenShift's router does not support URL rewriting, and therefore leave blank if you are using OpenShift's router as ingress point. | 1 + $SSL_VALIDATE | false if using a self-signed certificate. true otherwise. | 11 + $SSO | true or false depending on whether you need to authenticate through another portal (for example, in IBM cloud). | 1 + $MONGO_LIMITED_MEMORY | You can define resource limits for mongo pods based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $MONGO_ADMIN_LIMITED_MEMORY | You can define resource limits for mongo-admin pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $MINIO_LIMITED_MEMORY | You can define resource limits for minio pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $RABBITMQ_LIMITED_MEMORY | You can define resource limits for rabbitmq pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $REDIS_LIMITED_MEMORY | You can define resource limits for redis pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $CALLERAPI_LIMITED_MEMORY | You can define resource limits for callerapi pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $BACKEND_LIMITED_MEMORY | You can define resource limits for backend pod on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $FRONTEND_LIMITED_MEMORY | You can define resource limits for spfrontend pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $POST_PROCESS_LIMITED_MEMORY | You can define resource limits for postprocessing pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $PDF_PROCESS_LIMITED_MEMORY | You can define resource limits for pdfprocess pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $UTF8_PROCESS_LIMITED_MEMORY | You can define resource limits for utf8process pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $SETUP_LIMITED_MEMORY | You can define resource limits for setup pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $OCR_EXTRACTION_LIMITED_MEMORY | You can define resource limits for ocrextraction pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $CLASSIFY_LIMITED_MEMORY | You can define resource limits for classify pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $PROCESSING_EXTRACTION_LIMITED_MEMORY | You can define resource limits for processingextraction pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $INTER_PROCESSING_LIMITED_MEMORY | You can define resource limits for interprocessing pod based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $REANALYZE_LIMITED_MEMORY | You can define resource limits for each of the pods based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $UPDATEFILE_LIMITED_MEMORY | You can define resource limits for each of the pods based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 + $MONGO_WIREDTIGER_LIMIT | You can define resource limits for each of the pods based on available memory on the worker/compute nodes to ensure better operating efficiency. Use the sample install script, generateMemoryValues.sh, to determine the appropriate values for each of the following values based on your environment. | 1 diff --git a/BAI/README.md b/BAI/README.md new file mode 100644 index 00000000..2e6b4efe --- /dev/null +++ b/BAI/README.md @@ -0,0 +1,642 @@ +# Installing IBM Business Automation Insights on Certified Kubernetes + + +> **NOTE**: This procedure covers the deployment on certified Kubernetes. To deploy on IBM Cloud Private 3.1.2, see [Getting started with IBM Business Automation Insights](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.bai/topics/tut_getting_started.html). + +## Overview + +IBM Business Automation Insights is a platform-level component that provides visualization insights to business owners and feeds a data lake to infuse artificial intelligence into IBM Digital Business Automation. + +Based on state-of-the-art open source technologies, IBM Business Automation Insights captures all events that are generated by the operational systems implemented with the Digital Business Automation products, aggregates these events into business-relevant KPIs, and presents them in meaningful dashboards for lines of business to have a real-time view on their business operations. + +### Entities + +IBM Business Automation Insights processes and produces the following entities: + +- Raw events: Native events that are ingested and processed by IBM Business Automation Insights. + +- Time series: Simplified, flattened versions of raw events. + +- Summaries: Aggregations of time series. For example, each process instance, activity instance, or case instance has a summary entity. Summaries describe the current state of the process, activity, or case instance, and compute their duration. Summaries are complete when the process, activity, or case is completed. + +### Architecture diagram + + + +### Deployed artifacts + +When you install IBM Business Automation Insights, the following main elements are deployed: + +- A `bai-admin` pod in charge of the IBM Business Automation Insights REST API. +- An Apache Flink cluster (`bai-jobmanager` and `bai-taskmanager`) hosting the IBM Business Automation Insights event processing. +- Optionally, an Elasticsearch and Kibana cluster to gather data from the event processing. + +If you want to use an HDFS data lake, you must install it separately. + +## Requirements + +### Kubernetes cluster + +IBM Business Automation Insights requires a certified Kubernetes platform +(see [support statement](../README.md#support-statement)). + +### Helm command line interface + +To install Helm, follow these [instructions](https://docs.helm.sh/using_helm/#installing-helm). + +### Apache Kafka + +An Apache Kafka cluster must be up and running before you deploy IBM Business Automation Insights. +The Apache Kafka connection must be configured in the Helm Chart values. + +For a quick start, try [Confluent Apache Kafka Helm Chart](/~https://github.com/confluentinc/cp-helm-charts). + +## Before you begin + +### Connect to the cluster + +1. Log in to your Kubernetes cluster. + + For example, on OpenShift: + ``` + oc login https://:8443 + ``` + +2. Create a namespace where to deploy IBM Business Automation Insights: + + ```sh + kubectl create namespace + ``` + +### Upload the images + +You need to upload the IBM Business Automation Insights images to the docker registry of the Kubernetes cluster. See: [Download a product package from PPA and load the images](../README.md#download-ppa-and-load-images). + +### Configure the storage + +IBM Business Automation Insights requires a certain number of persistent volumes. + +Apache Flink needs a persistent volume to store its internal state and to support fault tolerance and high availability. + +Choose between dynamic provisioning or creating the persistent volumes manually. + +#### Dynamic provisioning + +If you use dynamic provisioning, make sure to use a `StorageClass` with a `reclaimPolicy` set to `Retain`. Otherwise, you might lose your data when +you upgrade or update IBM Business Automation Insights because a different persistent volume might be allocated. + +Unless you intend to use the default `StorageClass` of your Kubernetes environment, you must set the following configuration properties with the `StorageClass` name to use: `flinkPv.storageClassName`, `ibm-dba-ek.data.storage.storageClass`, and `ibm-dba-ek.elasticsearch.data.snapshotStorage.storageClassName`. + +You then need to set `persistence.useDynamicProvisioning`,`ibm-dba-ek.elasticsearch.data.storage.useDynamicProvisioning`, and `ibm-dba-ek.elasticsearch.data.snapshotStorage.useDynamicProvisioning` to `true` when you deploy IBM Business Automation Insights. + +`ibm-dba-ek` settings are required only if you install embedded Elasticsearch. + +#### Manual provisioning + +In the current section, `` is a path that is NFS-shared by the NFS server with IP equal to ``. +You must ensure that your Kubernetes nodes have a very fast access to the NFS shared folders. +Usually, the NFS share is set up on the master node of your Kubernetes cluster, thus `` equals ``. + +If dynamic provisioning is not enabled on the Kubernetes cluster or if you prefer to control the provisioning, you must create persistent volumes from scratch. + +1. Create a persistent volume for Apache Flink. + + It is recommended to apply the `Retain` reclaim policy to make sure that data is not lost when you install a new release of IBM Business Automation Insights. +Use the following YAML file to create a persistent volume. Replace the placeholders with the values that are appropriate for your environment. + +```yaml +apiVersion: v1 +kind: PersistentVolume +metadata: + name: ibm-bai-pv +spec: + accessModes: + - ReadWriteMany + capacity: + storage: + nfs: + path: /ibm-bai-pv + server: + persistentVolumeReclaimPolicy: Retain + claimRef: + namespace: + name: +``` + +> **Note**: The `claimRef` section is optional. However, you must set it in production mode if you want to make sure that your release always uses the same volume and if you do not want to lose your data. If you add the `claimRef` section, you must also set the namespace and the name of the persistent volume claim, as in step 2. + +2. *Optional*: Create a persistent volume claim for Apache Flink. + + Use the following YAML file to create a persistent volume claim. Replace the placeholders with the appropriate values. +The value of `` must match the name provided in the `claimRef` section of the persistent volume. +The `` value must be smaller than or equal to the value of the persistent volume storage capacity. +The persistent volume claim must provide enough space to fit the capacity set at installation time. The default capacity is `20Gi`. + +```yaml +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: + namespace: +spec: + storageClassName: "" + accessModes: + - ReadWriteMany + resources: + requests: + storage: +``` + +3. If you use embedded Elasticsearch, deployed together with IBM Business Automation Insights, rather than your own Elasticsearch, create the persistent volumes for Elasticsearch. + + It is recommended to apply the `Retain` reclaim policy to make sure that data is not lost when you install a new release of IBM Business Automation Insights. +The following YAML creates persistent volumes and sets the reclaim policy for two data nodes and a master node. + +```yaml +apiVersion: v1 +kind: PersistentVolume +metadata: + name: ibm-bai-ek-pv-0 +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /ibm-bai-ek-pv-0 + server: + persistentVolumeReclaimPolicy: Retain +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: ibm-bai-ek-pv-1 +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /ibm-bai-ek-pv-1 + server: + persistentVolumeReclaimPolicy: Retain +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: ibm-bai-ek-pv-2 +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /ibm-bai-ek-pv-2 + server: + persistentVolumeReclaimPolicy: Retain +``` + +4. *Optional*: If you want to refine the binding of the persistent volumes, provide a `storageClassName` value in the persistent volume .yaml file and then reference it when you configure the IBM Business Automation Insights installation. + + Modify the sample [pv.yaml](./configuration/pv.yaml) and deploy it as follows: + + ```sh + kubectl apply -f pv.yaml + ``` + +#### Persistent volume access rights + +The access rights to the persistent volumes are as follows: +- user `9999` and group `9999` must have read and write access to the Apache Flink persistent volume. + +- user `1000` and group `1000` must have read and write access to the Elasticsearch persistent volumes. + +### Configure the image policy + +- If you use the docker registry of the Kubernetes cluster, the default image policy, `default-dockercfg-*`, is applied. Check it out by running the following command: +```sh +kubectl get secrets -n | grep kubernetes.io/dockercfg +``` + +- If you use a docker registry that is external to the Kubernetes cluster, you must define an image policy to be able to access the docker registry: + +```sh +kubectl create secret docker-registry --docker-server= --docker-username= --docker-password= --docker-email= -n +``` + +## PodSecurityPolicy Requirements + +This chart requires a PodSecurityPolicy resource to be bound to the target namespace before installation. To meet this requirement, you might have to scope a specific cluster and namespace. +The predefined PodSecurityPolicy resource named [`ibm-anyuid-psp`](https://ibm.biz/cpkspec-psp) has been verified for this chart. If your target namespace is bound to it, you can proceed to install the chart. + +However, if you plan to install Elasticsearch and Kibana as part of IBM Business Automation Insights through the ibm-dba-ek sub-chart, it is required that you also set up the proper PodSecurityPolicy, Role, ServiceAccount, and RoleBinding Kubernetes resources to allow the pods running Elasticsearch to run privileged containers. The reason for this requirement is to meet the [production settings stated officially by the Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/6.7/system-config.html). To achieve this, you must set up a Custom PodSecurityPolicy definition: + +1- Adapt the following YAML content to reference your Kubernetes namespace and Business Automation Insights Helm release name, and save it to a file as `bai-psp.yml`, which sets up the Custom PodSecurityPolicy definition: +```yaml +apiVersion: extensions/v1beta1 +kind: PodSecurityPolicy +metadata: + annotations: + kubernetes.io/description: "This policy is required to allow ibm-dba-ek pods running Elasticsearch to use privileged containers." + name: -bai-psp +spec: + privileged: true + runAsUser: + rule: RunAsAny + seLinux: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + fsGroup: + rule: RunAsAny + volumes: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: -bai-role + namespace: +rules: +- apiGroups: + - extensions + resourceNames: + - -bai-psp + resources: + - podsecuritypolicies + verbs: + - use +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: -bai-psp-sa +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: -bai-rolebinding + namespace: +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: -bai-role +subjects: +- kind: ServiceAccount + name: -bai-psp-sa + namespace: +``` +2- Execute: +```bash +kubectl create -f bai-psp.yaml -n +``` + +This allows pods running Elasticsearch to execute `sysctl` commands to set: +- `max_map_count=262144` +- `vm.swappiness=1` + +If you cannot or do not want to allow running privileged containers, you can still install IBM Business Automation Insights but you must configure it to use an external Elasticsearch (in Helm values, set `elasticsearch.install: false`). + +_**If you are upgrading from a previous version of IBM Business Automation Insights, undo the previous security policy changes:**_ + - _If you are upgrading from 18.0.0, roll back the changes that you made through the `kubectl edit clusterrolebinding privileged-psp-users` command when you installed IBM Business Automation Insights 18.0.x. To achieve this, you must call again `kubectl edit clusterrolebinding privileged-psp-users` to edit the `ClusterRoleBinding` and delete the following lines:_ + + ``` + - apiGroup: rbac.authorization.k8s.io + kind: Group + name: system:serviceaccounts: + ``` + + - _If you are upgrading from IBM Business Automation Insights 18.0.1 or 18.0.2 , remove the ClusterRole and ClusterRoleBinding resources._ + + ``` + kubectl delete clusterrole + kubectl delete clusterrolebinding + ``` + +## Red Hat OpenShift SecurityContextConstraints Requirements + +If you are installing the chart on Red Hat OpenShift or OKD, the [ibm-anyuid-scc](https://ibm.biz/cpkscc-spec) SecurityContextConstraint is required to install the chart. + +If you are planning to install Elasticsearch and Kibana as part of IBM Business Automation Insights on Red Hat OpenShift or OKD, you must also create a service account that has the [ibm-privileged-scc](https://ibm.biz/cpkscc-spec) SecurityContextConstraint to allow running privileged containers: +``` +$ oc create serviceaccount -bai-psp-sa +$ oc adm policy add-scc-to-user ibm-privileged-scc -z -bai-psp-sa +``` + +If you cannot or do not want to allow running privileged containers, you can still install IBM Business Automation Insights but you must configure it to use an external Elasticsearch (in Helm values, set `elasticsearch.install: false`). + +## Installing + +There are two ways to deploy IBM Business Automation Insights to the Kubernetes cluster: + +### Install IBM Business Automation Insights by using the Helm chart and Tiller + +Refer to [Helm instructions](./helm-charts/README.md). + +### Install IBM Business Automation Insights by using Kubernetes YAML + +Refer to [Kubernetes instructions](./k8s-yaml/README.md). + +## Post-installation steps + +IBM Business Automation Insights is correctly deployed when all the jobs are completed, all the pods are running and ready, and all the services are reachable. + +- Monitor the status of the jobs and check that all of them are marked as successful by executing the following command: + ```sh +kubectl get jobs -n +``` +- Monitor the status of the pods and check that all of them are in `Running` mode and with all their containers `Ready` (for example, 2/2) by executing the following command: + ```sh +kubectl get pods -n +``` +- Verify that all the services are reachable by accessing the corresponding URLs. +When all the services have the default value for `serviceType`, that is, NodePort, the URLs are as follows: + ```sh +export NODE_IP=$(kubectl cluster-info | grep "master" | awk 'match($0, /([0-9]{1,3}\.){3}[0-9]{1,3}/) { print substr( $0, RSTART, RLENGTH )}') +export ADMIN_NODE_PORT=$(kubectl get svc -n "bai-bai-admin-service" -o 'jsonpath={.spec.ports[?(@.targetPort=="admin-rest")].nodePort}') +export ES_NODE_PORT=$(kubectl get svc -n "bai-ibm-dba-ek-client" -o 'jsonpath={.spec.ports[?(@.targetPort=="es-rest")].nodePort}') +export KIBANA_NODE_PORT=$(kubectl get svc -n "bai-ibm-dba-ek-kibana" -o 'jsonpath={.spec.ports[?(@.targetPort=="kibana-ui")].nodePort}') +echo "Admin REST API: https://$NODE_IP:$ADMIN_NODE_PORT" +echo "Elasticsearch REST API: https://$NODE_IP:$ES_NODE_PORT" +echo "Kibana: https://$NODE_IP:$KIBANA_NODE_PORT" +``` +Use the following default login/passwords to authenticate with Elasticsearch REST API and with Kibana: +- demo/demo +- admin/passw0rd + +> **Note:** To check the Admin REST API status, use `https://$NODE_IP:$ADMIN_NODE_PORT/api/health`. + +## Updating + +Depending on the updates that you plan, you might have to deploy new versions of some batch jobs. Because completed jobs cannot be updated, you must delete them before performing the update. + +### Prerequisites + +* Delete the batch jobs related to processing jobs if you plan to update parameters that affect the execution of processing jobs. These parameters include: Apache Flink settings (including RocksDB settings), Kafka configuration options, Elasticsearch general settings, and Kerberos authentication settings. +That is, properties in the values.yaml file that start with `flink.*`, `bpmn.*`, `ingestion.*`, `icm.*`, `odm.*`, `kafka.*`, `settings.*`, `kerberos.*`, or `elasticsearch.*`. +See the full list of properties in the [Configuration parameters](#configuration-parameters) section below. + + * Retrieve the job names: `kubectl get jobs --selector=release= -n | grep -v setup` + * Delete each job in the list: `kubectl delete job -n ` + +* Delete the bai-setup job if you update the `elasticsearch.url` property to change the Elasticsearch instance used by your Business Automation Insights system. + + `kubectl delete job -bai-setup -n ` + +* Delete all the batch jobs if you plan to update the docker images. + +### Update IBM Business Automation Insights by using Helm + +Refer to [Helm instructions](./helm-charts/README.md#update-the-helm-chart). + +### Update IBM Business Automation Insights by using Kubernetes + +Refer to [Kubernetes instructions](./k8s-yaml/README.md#update-ibm-business-automation-insights). + +## Configuration parameters + +Learn more about IBM Business Automation Insights and its configuration in the [Knowledge Center](https://www.ibm.com/support/knowledgecenter/SSYHZ8_18.0.x/com.ibm.dba.bai/topics/con_bai_overview.html). + +### General configuration + +Parameter | Description | Default value | +-------------------------------------|------------------------------------|-----------------------------------| +`persistence.useDynamicProvisioning` | Use Dynamic Provisioning | `true` | +`settings.egress` | Enable Data Egress to Apache Kafka | `true` | +`settings.ingressTopic` | Apache Kafka ingress topic | `[Release name]-ibm-bai-ingress` | +`settings.egressTopic` | Apache Kafka egress topic | `[Release name]-ibm-bai-egress` | +`settings.serviceTopic` | Apache Kafka service topic | `[Release name]-ibm-bai-service` | +`baiSecret` | Name of a secret that is already deployed to Kubernetes. See [below](#baiSecret) for details. | `None` | + +#### baiSecret + +A secret that contains the following keys: + +- `admin-username`: the username to authenticate against the admin REST API +- `admin-password`: the password to authenticate against the admin REST API +- `admin-key`: the private key in PEM format for secure communications with the administration service +- `admin-cert`: the certificate in PEM format for secure communications with the administration service +- `kafka-username`: the username to authenticate against Kafka +- `kafka-password`: the password to authenticate against Kafka +- `flink-ssl-keystore`: the keystore for secure communications with the Flink REST API +- `flink-ssl-truststore`: the truststore for secure communications with the Flink REST API +- `flink-ssl-internal-keystore`: the keystore for inter-node communications in the Flink cluster +- `flink-ssl-password`: the password of Flink keystore and truststore +- `kafka-server-cert`: the certificate in PEM format for secure communication with Kafka +- `kafka-ca-cert`: the CA certificate in PEM format for secure communication with Kafka +- `flink-security-krb5-keytab`: the Kerberos Keytab +- `elasticsearch-username`: the username for connection to the non-embedded Elasticsearch +- `elasticsearch-password`: the password for connection to the non-embedded Elasticsearch +- `elasticsearch-server-cert`: the certificate in PEM format for secure communication with Elasticsearch + +> **Note**: The secret must hold a value for each of these keys, even if their value is empty (when they are not relevant in your IBM Business Automation Insights configuration). +When you run `kubectl` to create a secret with empty values, you must turn validation off with the ` --validate=false` argument. + +For example: +``` +kubectl create -f bai-prereq-secret.yaml --validate=false +``` + +If `baiSecret` is defined, it overrides the following values: +- `admin.username` +- `admin.password` +- `kafka.username` +- `kafka.password` +- `kafka.serverCertificate` +- `kerberos.keytab` +- `elasticsearch.username` +- `elasticsearch.password` +- `elasticsearch.serverCertificate` + +### Docker registry details + +Parameter | Description | Default value | +----------------------------|--------------------------|----------------| +`imageCredentials.registry` | Docker registry URL | None | +`imageCredentials.username` | Docker registry username | None | +`imageCredentials.password` | Docker registry password | None | +`imageCredentials.imagePullSecret` | The imagePullSecret for Docker images. See [below](#imagecredentials) for details. | None +`imagePullPolicy` | The pull policy for Docker images | None | + +#### imageCredentials.imagePullSecret + +An imagePullSecret for Docker images which overrides: +- `imageCredentials.registry` +- `imageCredentials.userName` +- `imageCredentials.password` + +Here is the command to create such a secret: + +``` +kubectl create secret docker-registry regcred --docker-server= --docker-username= --docker-password= --docker-email= -n +``` + +### Apache Kafka + +Parameter | Description | Default +----------------------------------|---------------------------------|-------- +`kafka.bootstrapServers` | Apache Kafka Bootstrap Servers. | `kafka.bootstrapserver1.hostname:9093,kafka.bootstrapserver2.hostname:9093,kafka.bootstrapserver3.hostname:9093` +`kafka.securityProtocol` | Apache Kafka `security.protocol` property value | `SASL_SSL` +`kafka.saslKerberosServiceName` | Apache Kafka `sasl.kerberos.service.name` property value | +`kafka.serverCertificate` | Apache Kafka server certificate for SSL communications (base64 encoded) | +`kafka.username` | Apache Kafka username | +`kafka.password` | Apache Kafka password | +`kafka.propertiesConfigMap` | Name of a ConfigMap already deployed into Kubernetes and that contains Kafka consumer and producer properties | + +### Elasticsearch settings + +Parameter | Description | Default +----------|-------------|-------- +`elasticsearch.install` | Specifies whether Elasticsearch and Kibana must be deployed by using the ibm-dba-ek subchart | `true` +`elasticsearch.url` | Elasticsearch URL. Only relevant if you do not use the ibm-dba-ek subchart to install Elasticsearch. | +`elasticsearch.username` | Elasticsearch username. Only relevant if you do not use the ibm-dba-ek subchart to install Elasticsearch. | +`elasticsearch.password` | Elasticsearch password. Only relevant if you do not use the ibm-dba-ek subchart to install Elasticsearch. | +`elasticsearch.serverCertificate` | Elasticsearch server certificate for SSL communications (base64 encoded). This attribute is relevant only if you set `Install Elasticsearch` to false. | + +### Setup job + +Parameter | Description | Default +----------|-------------|-------- +`setup.image.repository` | Docker image name for the setup job | `bai-setup` +`setup.image.tag` | Docker image version for the setup job | `19.0.1` + +### Administration service +Parameter | Description | Default +----------|-------------|-------- +`admin.image.repository` | Docker image name for the Administration Service | `bai-admin` +`admin.image.tag` | Docker image version for the Administration Service | `19.0.1` +`admin.replicas` | Number of Administration Service replicas | 2 +`admin.username` | Sets the user name to the Administration Service | `admin` +`admin.password` | Sets the password to the Administration Service API | `passw0rd` +`admin.serviceType` | The way the Administration Service API must be exposed. Can be `NodePort` or `ClusterIP`. If you want to expose the service on Ingress, choose `ClusterIP`. After the Helm chart is deployed, create your own Ingress Kubernetes resource manually. | `NodePort` +`admin.externalPort` | The port to which the Administration Service API is exposed externally. Relevant only if `serviceType` is set to `NodePort`. | + +### Apache Flink persistent volume + +Parameter | Description | Default +----------|-------------|-------- +`flinkPv.capacity` | Persistent volume capacity | `20Gi` +`flinkPv.storageClassName` | Storage class name to be used if `persistence.useDynamicProvisioning` is `true` | +`flinkPv.existingClaimName`| By default, a new persistent volume claim is created. Specify an existing claim here if one is available. | + +### Apache Flink + +Parameter | Description | Default +----------|-------------|-------- +`flink.image.repository` | Docker image name for Apache Flink | `bai-flink` +`flink.image.tag` | Docker image version for Apache Flink | `19.0.1` +`flink.taskManagerHeapMemory` | Apache Flink Task Manager heap memory (in megabytes) | 1024 +`flink.taskManagerMemory` | Apache Flink Task Manager total memory (in megabytes). It has to be greater than `flink.taskManagerHeapMemory`. | 1536 +`flink.jobCheckpointingInterval` | Interval between checkpoints of Apache Flink jobs | `5000` +`flink.batchSize` | Batch size for bucketing sink storage | `268435456` +`flink.checkInterval` | How frequently (in milliseconds) the job checks for inactive buckets | `300000` +`flink.bucketThreshold` | The minimum time (in milliseconds) after which a bucket that does not receive new data is considered inactive | `900000` +`flink.storageBucketUrl` | The HDFS URL for long-term storage (e.g. `hdfs://:/bucket_path`) | +`flink.rocksDbPropertiesConfigMap` | Name of a ConfigMap already deployed to Kubernetes that contains advanced RocksDB properties | +`flink.log4jConfigMap` | Name of a configMap already deployed to Kubernetes that overrides the default bai-flink-log4j configMap | +`flink.hadoopConfigMap` | Name of a ConfigMap already deployed to Kubernetes that contains HDFS configuration (core-site.xml and hdfs-site.xml) | +`flink.zookeeper.image.repository` | Docker image name for Apache Zookeeper | `bai-flink` +`flink.zookeeper.image.tag` | Docker image version for Apache Zookeeper | `19.0.1` +`flink.zookeeper.replicas` | Number of Apache Zookeeper replicas | 1 + +### IBM Business Automation Workflow - BPMN processing + +Parameter | Description | Default +----------|-------------|-------- +`bpmn.install` | Whether to install Business Process Model & Notation (BPMN) event processing or not. | `true` +`bpmn.image.repository` | Docker image name for BPMN event processing. | `bai-bpmn` +`bpmn.image.tag` | Docker image version number for BPMN event processing. | `19.0.1` +`bpmn.recoveryPath` | The path to the savepoint or checkpoint from which a job will recover. You can use this path to restart the job from a previous state in case of failure. To use the default workflow of the job, leave this option empty. | +`bpmn.endAggregationDelay` | The delay in milliseconds before clearing the states used for summary transformation. | `10000` +`bpmn.parallelism` | The number of parallel instances (task managers) to use for running the processing job. | + +### IBM Business Automation Workflow - Advanced Processing + +Parameter | Description | Default +----------|-------------|-------- +`bawadv.install` | Whether to install Business Automation Workflow Advanced (BAW) event processing (for BPEL processes, human tasks, ...) or not. | `true` +`bawadv.image.repository` | Docker image name for BAW Advanced event processing. | `bai-bawadv` +`bawadv.image.tag` | Docker image version for BAW Advanced event processing | `19.0.1` +`bawadv.recoveryPath` | The path to the savepoint or checkpoint from which a job will recover. You can use this path to restart the job from a previous state in case of failure. To use the default workflow of the job, leave this option empty. | +`bawadv.parallelism` | The number of parallel instances (task managers) to use for running the processing job. | + +### IBM Business Automation Workflow - Case processing + +Parameter | Description | Default +----------|-------------|-------- +`icm.install` | Whether to install IBM Case Manager (ICM) event processing or not. | `true` +`icm.image.repository` | Docker image name for ICM events processing. | `bai-icm` +`icm.image.tag` | Docker image version for ICM events processing. | `19.0.1` +`icm.recoveryPath` | The path to the savepoint or checkpoint from which a job will recover. You can use this path to restart the job from a previous state in case of failure. To use the default workflow of the job, leave this option empty. | +`icm.parallelism` | The number of parallel instances (task managers) to use for running the processing job. | + +### IBM Operational Decision Manager processing + +Parameter | Description | Default +----------|-------------|-------- +`odm.install` | Whether to install IBM Operational Decision Manager (ODM) event processing or not. | `true` +`odm.image.repository` | Docker image name for ODM event processing. | `bai-odm` +`odm.image.tag` | Docker image version for ODM event processing | `19.0.1` +`odm.recoveryPath` | The path to the savepoint or checkpoint from which a job will recover. You can use this path to restart the job from a previous state in case of failure. To use the default workflow of the job, leave this option empty. | +`odm.parallelism` | The number of parallel instances (task managers) to use for running the processing job | + +### IBM Content Platform Engine Processing + +Parameter | Description | Default +----------|-------------|-------- +`content.install` | Whether to install IBM Content Platform Engine (Content) event processing or not. | `true` +`content.image.repository` | Docker image name for Content event processing. | `bai-content` +`content.image.tag` | Docker image version for Content event processing | `19.0.1` +`content.recoveryPath` | The path to the savepoint or checkpoint from which a job will recover. You can use this path to restart the job from a previous state in case of failure. To use the default workflow of the job, leave this option empty. | +`content.parallelism` | The number of parallel instances (task managers) to use for running the processing job. | + +### IBM Business Automation Workflow Advanced processing + +Parameter | Description | Default +----------|-------------|-------- +`bawadv.install` | Whether to install Business Automation Workflow Advanced (BAW) event processing (for BPEL processes, human tasks, ...) or not. | `true` +`bawadv.image.repository` | Docker image name for BAW Advanced event processing. | `bai-bawadv` +`bawadv.image.tag` | Docker image version for BAW Advanced event processing | `latest` +`bawadv.recoveryPath` | The path to the savepoint or checkpoint from which a job will recover. You can use this path to restart the job from a previous state in case of failure. To use the default workflow of the job, leave this option empty. | +`bawadv.parallelism` | The number of parallel instances (task managers) to use for running the processing job. | + +### Raw events processing + +Parameter | Description | Default +----------|-------------|-------- +`ingestion.install` | Whether to install raw event processing or not. | true +`ingestion.image.repository` | Docker image name for raw event processing. | `bai-ingestion` +`ingestion.image.tag` | Docker image version for raw event processing | `19.0.1` +`ingestion.recoveryPath` | The path to the savepoint or checkpoint from which a job will recover. You can use this path to restart the job from a previous state in case of failure. To use the default workflow of the job, leave this option empty. | +`ingestion.parallelism` | The number of parallel instances (task managers) to use for running the processing job | + +### Kerberos configuration + +Parameter | Description | Default +----------|-------------|-------- +`kerberos.enabledForKafka` | Set to true to enable Kerberos authentication to the Kafka server | `false` +`kerberos.enabledForHdfs` | Set to true to enable Kerberos authentication to the HDFS server | `false` +`kerberos.realm` | Kerberos default realm name | +`kerberos.kdc` | Kerberos key distribution center host | +`kerberos.principal` | Sets the Kerberos principal to authenticate with | +`kerberos.keytab` | Sets the Kerberos Keytab (base64 encoded) | + +### Init Image configuration + +Parameter | Description | Default +----------|-------------|-------- +`initImage.image.repository` | Docker image name for initialization containers | `bai-init` +`initImage.image.tag` | Docker image version for initialization containers | `19.0.1` + +### Elasticsearch-Kibana subchart +If `elasticsearch.install` is set to `true`, Elasticsearch and Kibana are deployed as the ibm-dba-ek subchart. + +If you use the default setup, you can access Kibana by using the following credentials: +- admin:passw0rd +- demo:demo + +You can set value definitions for the `ibm-dba-ek` subchart under the `ibm-dba-ek:` key. These attributes are relevant only if you use the `ibm-dba-ek` subchart to install Elasticsearch into Kubernetes (see `elasticsearch.install`). You can adapt the values for this subchart if you want to set up your own set of users or to update the deployment topology or persistent storage management. + +For details, regarding the ibm-dba-ek subchart Helm values: +- [Elasticsearch parameters](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.ref/topics/ref_bai_es_params.html) +- [Kibana parameters](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.ref/topics/ref_bai_kibana_params.html) diff --git a/BAI/configuration/.gitkeep b/BAI/configuration/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/BAI/configuration/bai-pod-security-policy.yaml b/BAI/configuration/bai-pod-security-policy.yaml new file mode 100644 index 00000000..126d6fec --- /dev/null +++ b/BAI/configuration/bai-pod-security-policy.yaml @@ -0,0 +1,31 @@ +apiVersion: extensions/v1beta1 +kind: PodSecurityPolicy +metadata: + name: bai-psp +spec: + privileged: true + runAsUser: + rule: RunAsAny + seLinux: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + fsGroup: + rule: RunAsAny + volumes: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + name: bai-clusterrole +rules: +- apiGroups: + - extensions + resourceNames: + - bai-psp + resources: + - podsecuritypolicies + verbs: + - use diff --git a/BAI/configuration/pv.yaml b/BAI/configuration/pv.yaml new file mode 100644 index 00000000..ca700a36 --- /dev/null +++ b/BAI/configuration/pv.yaml @@ -0,0 +1,103 @@ +## persistent volume & claims definition to be run once in the cluster +apiVersion: v1 +kind: PersistentVolume +metadata: + name: bai-pv +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 20Gi + nfs: + path: /export/NFS/bai/bai-pv + server: + persistentVolumeReclaimPolicy: Retain + claimRef: + namespace: bai + name: bai-pvc +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: bai-pvc +spec: + storageClassName: "" + accessModes: + - ReadWriteMany + resources: + requests: + storage: 20Gi +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: bai-ek-data-pv-0 +spec: + storageClassName: "bai-ek-data" + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /export/NFS/bai/ek-data-0 + server: + persistentVolumeReclaimPolicy: Recycle +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: bai-ek-data-pv-1 +spec: + storageClassName: "bai-ek-data" + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /export/NFS/bai/ek-data-1 + server: + persistentVolumeReclaimPolicy: Recycle +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: bai-ek-data-pv-2 +spec: + storageClassName: "bai-ek-data" + accessModes: + - ReadWriteOnce + capacity: + storage: 10Gi + nfs: + path: /export/NFS/bai/ek-data-2 + server: + persistentVolumeReclaimPolicy: Recycle +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: bai-ek-snapshots-pv +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 30Gi + nfs: + path: /export/NFS/bai/ek-snapshots + server: + persistentVolumeReclaimPolicy: Retain + claimRef: + namespace: bai + name: bai-ek-snapshots-pvc +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: bai-ek-snapshots-pvc +spec: + storageClassName: "" + accessModes: + - ReadWriteMany + resources: + requests: + storage: 30Gi diff --git a/BAI/configuration/sample-values.yaml b/BAI/configuration/sample-values.yaml new file mode 100644 index 00000000..9aa567d4 --- /dev/null +++ b/BAI/configuration/sample-values.yaml @@ -0,0 +1,60 @@ +# This is a customized values.yaml sample. +# In this sample, only the BPMN event processing is enabled. + +persistence: + useDynamicProvisioning: true + +imagePullPolicy: IfNotPresent + +kafka: + bootstrapServers: "kafka-release-cp-kafka-headless:9092" + securityProtocol: "PLAINTEXT" + +elasticsearch: + install: true + +settings: + egress: false + ingressTopic: bai-release-ingress + serviceTopic: bai-release-service + + +admin: + replicas: 1 + serviceType: NodePort + externalPort: 31100 + +# don't install ICM event processing +icm: + install: false + +# don't install ODM event processing +odm: + install: false + +# don't install BAWAdv event processing +bawadv: + install: false + +# don't install Content event processing +content: + install: false + +ingestion: + install: false + +# Overall, the event processing is installed only for BPMN. + +ibm-dba-ek: + elasticsearch: + data: + storage: + persistent: true + useDynamicProvisioning: true + storageClass: "bai-ek-data" + client: + serviceType: NodePort + externalPort: 31200 + kibana: + serviceType: NodePort + externalPort: 31501 diff --git a/BAI/helm-charts/.gitkeep b/BAI/helm-charts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/BAI/helm-charts/README.md b/BAI/helm-charts/README.md new file mode 100644 index 00000000..55f28d94 --- /dev/null +++ b/BAI/helm-charts/README.md @@ -0,0 +1,70 @@ +# Install with the Helm chart + +This directory includes the [IBM Business Automation Insights Helm Chart](./ibm-business-automation-insights-3.1.0.tgz) and explains how to install it. + +## Initializing Helm and installing Tiller + +Tiller is a companion to the helm command that runs on your cluster. It receives commands from Helm and communicates directly with the Kubernetes API to create and delete resources. + +To install Tiller on your cluster, run: + +```sh +helm init +``` + +To grant Tiller the required cluster-admin permissions to deploy Business Automation Insights, run: +```sh +kubectl create serviceaccount --namespace kube-system tiller +kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller +kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' +``` + +> **Note:** For clusters where Tiller is already deployed, you only need to initialize the client part: + +```sh +helm init --client-only +``` + +## Installing IBM Business Automation Insights + +### Prerequisites + +First follow the [Requirements](../README.md#requirements) and [Before you begin](../README.md#before-you-begin). + +### Install the Helm chart + +To install the IBM Business Automation Helm chart, you need to decide on a release name and use this name when you run the helm command, as follows: + +```sh +helm install ibm-business-automation-insights-3.1.0.tgz --name -n -f values.yaml +``` + +To override the default Business Automation Insights configuration, you must provide a `values.yaml` file with your custom configuration. + +Configuration properties and default values are described in the [Business Automation Insights README.md](../README.md#configuration-parameters). An example `values.yaml` is provided [here](../configuration/sample-values.yaml). + +### Install the event emitters + +You must install the emitters into your IBM Digital Business Automation products to be able to emit events from the products to Business Automation Insights. + +You must only install emitters for the products that you enabled during Business Automation Insights installation process. In the provided sample, only the BPMN job is installed, and so only the BPMN emitter must be installed. + +Refer to the [Knowledge Center](https://www.ibm.com/support/knowledgecenter/SSYHZ8_18.0.x/com.ibm.dba.bai/topics/con_bai_top_bmpn_events.html) for instructions. + +## Updating the Helm chart + +Check the Business Automation Insights [Updating](../README.md#updating) section for prerequisites to the update. + +After initial installation, you can update the chart configuration as follows: + +```sh +helm upgrade ibm-business-automation-insights-3.1.0.tgz -n --reuse-values --set a.property=newvalue[,other.property2=newvalue2] +``` + +## Uninstalling the Helm chart + +Run the following command to uninstall the Helm chart: + +```sh +helm delete +``` diff --git a/BAI/helm-charts/ibm-business-automation-insights-3.1.0.tgz b/BAI/helm-charts/ibm-business-automation-insights-3.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..584ba5e1d7ba9210a9d0993c82030e91ea7cb809 GIT binary patch literal 86291 zcmV)XK&`(YiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMYKm!itDFnmAPuV8uheR}tGtB7-*)$j8lprWD(IG%G>9flN9 zCK;Ui^nZUBAPS0AR`s~|Ek1OY5E&U685tQF85yYvT1IefMF+N>;a$hjctx`9cYXi-mHbQ2sACUn#@+|AOE* z*Z7LZwH@C2FZiqLx@_E^!( zh^$jk{U|UHdJ-6jJPORi3hcLrCE1S;8Hm@Ua`7Ppkr@4ufiOeUfF&xt`jCkfeaJwe z1X`{NZ11Dat9wTg?Vv2v>SOf7$`!zg)(`*Rr+hY_&%z%bbY26G&`W~+;3%pJtSAB` zTg&D@JZ!>Og={_xKm6<-`LWN7CHE*0L#|Brb7295j< z_Q&>1!Vu^Je@1vPy-{O3Ko`N|0|dD?!1p?@DI#qd8^s$?iY`Awb6&N;`{ig?Rj-hFFKI(n z#C`D62BK>zj$g_K)5!XJr1$UQ)XI8e%OO3*CYG8{uR)JG`AqHOnx zWxM`o-c~!n5`bmcY|!f7xj_L|3|NjbS47@9HPkXp?Wfy&#S76!Z} zE<6tX4cab%4mp+!ARaoh5F(;rkfPfTuZsZMDyj+z01_?0J3#uwtH%MN10-mxI17lE zG)2$(T!t+P;&lmpe<0P6!;gj~K_;(QwkH4{a#elwN$?56!CcV+N()lvP^<}=V{u5aAsaZ5V?h7*1@zxu?_27TAJ5A{G8Z3g;5dpd`=ShF3)uFF zNJaO5bB3viMeqs))S(2<2lu3-O-W7IyK&!(3JL6}|C_ zi@eE;-T;MC2;5YB7C46G=>?Uy?TFZdonm{e#Z+F=PVWO;FSOBzNob?P+bfFKc^OzO zz?&4%{33Z6DaOB^zLW~(_!o>G1}$G2!tqsC*#J*!yZR=}?a>uxYFb1HF!iZk+33?OI$cr$1~s+32l z)Dg%wTuTIYSeL43igWq}LE4eesY=nTKqz9Yq}z8ujRF< zy{#%kdTmvP^v0@0LwA7gyt2Auskc?RIvNN5ET!{;3Z#Z%b$koxXsbm(w4}Lxes2L@ z)sBc)l6bNn6kSwIK2$L)uy=SN94U%JhD~{PWGL4SdhpCqN#HYJ_4p7kZ^o@Xf3(M~ zNgpa=QF>3*stl+&Tb9?hy(btB5Ib5-|v}b>6fWhQnS`a2zt1m|s(W;a2?- zQz+zTqCo^fD@EXS{tnRz0Pmd9uT8r|UqdOsHadMhG01erAa801oioI#$U*?lm_cDq;H=zGO zvIR^iCGrlh8gdHy55#X*&^=@a6nF_YwN+ z+g=W2yMpalze8RThUHL(`vYRSM6b!UppRcZd^}Tx;uP6?^68@c3>TryYrDM>p-je8 z^|r~2;Huk$w_mL!fmGhr#l;^XlDPON0`F_C!e<#CZL&X0OC?SvWrnl;og3eTQ)AdHYWw>%s^O0hITRy(?^1J^VvJ4e`e8@yL zVSe|_Ku@oGf)sR_w;1#x?T=T}LrAJ8Fu?6-06S2~5-?R`uL0eOIyo-gAy)AF56It7cz~eapaoF108LVXOvX`dza|y%mJVr# z1t4B9T<6tw*beWw_A|AdAU!>M8|-KMqTZh$|GdKg`?LV62`oG7n6C>3d@249&X+Fy zzX9^pKl?gwP~6QjT@Sr0aKnvlbov8b0g^eK6e{SB}z&nEegH|^>oR4({`DjMs~ z=gJOBWzNXLnLe@Ji~U@G=7pf+By;oa>u)qI!tkSc8pSR0b zM{)V+5pYreX(ROW=V#5plglS8;VrG!uHk@yuQASEbVEXuy{0Cz%C*!a#K(4qWlpiT zFSO`J9if!nZb7^`FGxx#lP`%&2=|pTbKa=Fx6jTMpTCg67tg>U-WP&3jGs4wp z*(mS|rYx-+!|IkH(LiUxhA%U=bphv@Bj}MTK9*z7C zqU{t5NP%~q6&FBqRYjLcSvO9vi5(E#Fdoi(JUlE=f#?_(2Q2Lrk&}UZ-vY5Sy@jM= z=#enK4739KM@Rq;pIx0+qglnsMdDkIQ8X6s7}g_1>XFw$%*tO zf_T5D;iI849bu_edq zV~q-M9=Y%bv|T9T!kaf`8CVbxS-`V%{3XmeU^R&5_KQHllIWTNXXxw^N6>sfB-M7c zoOq0K`urIZ`LosuBHC{Rq(f)0=W{G_x~UT1i6g=D(CHf9Kij87NqTZh6ItSiHcF1Tse#sHal}fyX0zj&6p& ze0h8Z(Bb8ab#lygay~;ELR}p#jUrDja$L6^e}!{~*I=+a$IrVuYWEDCF^qV~y8mHl z1M3m0)oQgMbXwm8=V}SHOS`Eh+tT<-+PFxfEt#eofko;{Ist*0T={Xs-sx=WrTiY1sHN)gwT-RoR9 z$<19ZBq)@Lqa;|sd8Wnpp}cb2eIurx#Ws%of-`3$;#F-+bVdD$cAN&{ZIL;eh|kCk zjk4^x&)~NuI?jL}AWh#+ZeC(*&@}sNMdWS5@Mhv(?)Q@)G7vgHc;*rM#|L}y;ScCT zM*Q%{ha-Z2`~yn;_W4S`JwloMmlX8r6O_uOpnv@f`al2YS_ytiD)^i7n8|C~j*q`3OMmL`568N;3q=LcZDP}n^6qbgd1&)QsDqPLyjE%Sa0^1an zS@$zghJ#8_CZih}e~Fn9&+F}TeabxO=l>h@DD3s<-yvrKqAtd8d*q+`siE=4g(oMn z|I{OmgCM~I{ObH-u7rO}h7R7!*NYvPBMJP5S5#h5RK?lHdHmbwlaPG*`i3XhuGk>~ zDtH?cluz*A@8^eqn%-lGGKVzYG!$Tz^o?Q}x*r&`;Vs4Ma{Inz0nj%iK3oqR z&D(J5ZTIU>6xu_Z1oOnu*b|E548gKK75>b7dp5Y#1`({Ye!oKyG{L+c-(i&z?FcFk zC7b9|gFv|DLluo>b}0eHu?K$L_I+UTHhb2di8%^CSLDJENNub-m7 zs-f32wclvpoffsr;?0g(V^^HNY}m`Jc$;PNdb=c{jS(9p-o|>r&#@eX(oZbGcq-!i zidjI-$^DrL{LIBngeU6bB z@svC?z5{){t!6@}Yj}Ptb0NBoF4^mx`PX6Ur6;0?*1N=$--ho?XrRbWj9ghlDHC|1 zGkzN)gtBb+uQ9@oZMM~H&f-=L7njI0O36DQYPn?$`UZMG#^w z0_)Iyvd59V<`dcD2xf$S=izah?gG0u%qf&nj(LKjy*i{Ql$kyeJ^Tr6HW{Lca%8{v zgcDtK`b2&2S^qO? zW8#I3pNJ`AD~BjCWDmtSazs4UhggT;p8Q__LA@Okrs%xrC>xLoaz7o{G-01-H2WEP zxfVmPt$z2$$o}4>I$@rwIF+X^4u}k0hu^=81F8a_;hAMk&pdqM`ZS4sUpkIy;WCb4 zDq@5L;)hWHk_iZB&>uiSI9*)cyA1E=S-5o0 z$DK$F;H4myIIl}km_QRUEkn51nH0bVz9cI|M|&^*BzHR?2CYl<@kiWZ5cI*cA>Q4E zPP@z|_&@aFS+4H2H1*+M4}Quq#gI!7PX&F&fvgaJb5227n;#wad$aaMQ z$Bi-<x2p?vh4C;xq2-5-}xVR3zKXO33y1p-ZXa^~iSn7m3tV#49eMN%)H z^iD7^PTD5)%-;&Q&YmJN91smB_m$8Mi3uL_#|YJ}hTVnw`wQJm`Rv7)tCIeL zUFUC99ezDk58W8c=ggPEko8kSCfaw$)Z5vsgP4i-oj~@*_&F%h4;>YV8lK#hI@`J>xeSih9 z6z3Ew8bTZ+@jW2h4D9i9e%pwa3lAg&p8}k=WAP4X!>Hd&`2Of_5yqWP6?cSi1($~=4HRO%8Xi9bTA zQl(JIkVqj@N69OQlgOunyvHGc8tbQ5_0)@fbysiQ-Cs9*41z*A_Ztv9%?UwCXFNmV z-g46Oj5G1PXYf3C>NAA6^XzBv+&BRmJlE$y!#aY~peIoug%*a4n z;7O%_S3-;iufAhl9*-^w^hJ-2sgCHAphlw4s|5A@yeP8g=PuzrKX;39gqT|beSRFn zG*m<0cl_=5n4pALB|UsqhKGx!5oba#KE%!~U#+I@L7Nyu`}JulUPEot1TGok3RuTg z)XfwS0j{L`5aOqzPsx{JC!xc)*=q!mz4p`13b8}dr?+R9MJPSdBPG$MUJKLpk&!ffHA3wzvRZ{Vk58*|;VRd{?}wQkKNoSE)Qm{D?H$ABdk}s{1ny1383OH6 zzYf`cc8cfd?cmt2L+wfupQDv#$R0-0=uaArNfe(ldOXWxV#=ZQ1j{Sf(YAzAu&sSe z0&;DOg-Yo%((i|};4%X6NI)#c;F9>$*biD~NAO;4?ps1B=H-fQkY6G`-hpDP&tOb~ zxeu*BKZN^@H)?QgD`#6`&fyiA50^bJMM5cVz}zHEw485B zSR7w6VP}|A@W7qj9d0<^XWHDe=bUWZyk_4y$-KFWZV#VWGy`%nao3U&-AoidUS2ScCR!vUw_d(Q|OjoKHOxAZ+8CjWXHUm*B;J{ zpK#zP2}xc|^U~dUzDDHAHFq&60`GD39@MK~xX4YA?dhUQL5@ zdC}|HQGfb+x{T!b`90O#uk^e!{wKJ^{gnYgFXaC(REmYm_@7d-_#XfBBc7|7+wb4- z_=le$Ix^e&ry|cGLTy8M#e5gw{zWIca6S`wab?WsT}4xzM+kmf2+VtE%Qp>eISEb} z+Y${iy3T5zh5q9oHqsra44v<7dJhQr-x3fI6_3O;l)p=g=s>BU_SE@I+Ohqq6DOcl zJmFT#lQ&NoGq$T~yrlp;_3=X7LJ@v093djnP+~knsE3~qNQgoGB_b01q?cFy7asA7 zjO=P+N1qZ4y`qOBnI2M?oHZj^AX3qz$5)V641c%%enHzW z5Sw?)@7?nI*_NMa8KO5!ex>Ob3iJ)b&sV@Nn0;rMccbrH8hsvL?=ks2xIe4Gck#T^ z{yU$`euWYEg8f%S@|WlT3P|Do{NE3G68ExB$G%@--v!|v>MwlIEojGuiagz+7v#bU z&_&a(K0>Kr=QsdJUCh=OpsC9nrB4Gp;WEs~=tja5hnLysj;V7lFVpe?SmkhWE#uuu z;t~%3`!M7Y4q1DLQ#b_u zb^XGL^ZzUDznCt#*9v^W{>#Hi`NIAy!U*zi|NV$3;+^>Yo6L_NzwzvK&o|rui|6_NmG!IN9>~AG%cC^N3~uPQp@K+)?nmf986V@{ zpv-HZV>!GJ_4*t{^+!aGA-w+}!-9r1j&cO#EPxH5NPWTT*5Mu3{-o&h;L1~vKcD;z z>{vkIWp3^_lXxsR;#EaD=1lZg^eWf@72+MoQUuolHe}3C>8PQu$1DT_8=yP>HKUJ5 zG$~$HQ-44y$Kplc{UHItmAyZ_rg;Bvc}w^H2bN`6-XC+`;nkFHA*77?JaxpxEfgE# z=W`%Bw%0jwc-^gFI19+Nfdz?%1pIP7WBhWb!oU+Ypi96ClGH0scu{@$-u`s#>~q2J zQ#KR>Zwmf|MZm5g{ElHcyg%fU0aSi(xK4nn&Gvg;|M#=7qM@0*=zKb@i*5n>{3i_c zWk}T!eSJ>qbK}#TSMBG){Uxo#Yi2-q2kd{vMf9Ma@p6Od;rUibaile^Z5P~zgqEs1lvr1Knq?n z4D%1@U>GX^Okn*H?C~A{d-8yvbl^Dq@Qvl_9+6Myz1qt!-gpIxFP|2GH^VQsV*y@M zbU9ui@;X9?_xICWQGva;9iTl0JLLAc?Lq6Z9=(AadVgJg@dxr*lSDs-J;H!_!e}@` z2K#M3e#4Tpyvd6TkUeLsiGd|o7JR#_wxDyastaBx047&>{CHQ5Co#CH^z8#L5KL-Vgqc066D%%Q#ELR;Q@VL(rYuI`__c~F-@py5886k)W&AUfcZ_W4OA z#=w$k4!*raFYB6q;$Cmcf)vY}f;S$qzi%x=mp?+DX7{h1o?C|I1NFQ?*^k|7sl4ZV0*R+?*Pf`#8_|##5>R!WqQHXdR^nSmbt->BVaZHc#aIg48xKXop+KN zl~6^%1h4Pz0>5iWC8)s{ni9Yq`>=mZ>&$vD>%6!Ey7UtIdzukIzO@CuBEPE{K41&@ z>5+i+idFX%zIs>=I<@qNMgzF@p}!FX#W zD5?t39q+%>8-Fypmd~y5Wn^g?EJdDNM^V4dnAZO{7}K#*XJ+5BRD1yMzbvLI4a?tp zO|VBIh@P9-B4DqfGAaPKO{xe?Q#Ax$#iH+CLi;S)G00a?etYE`law=9(%LvXGmOsF zD*3X4=jgwG#T*+n#}NWK3*I@7GDzngWdk5p5iI{?o;TC@R)uPKO@V%oj5Kd*@bCn^ z{_)y<;E&lGo`|gft>;&V84~Dv_^n$wg4P@J`7MCIxa}0bZu5Ot@fUpFwEuS=xp(aW zzOesSLayR}i$(Z7{`ZGG-zb;mQ7%>)+rQWIR}Sz!C4kHvvpFKwYW1{k3KCNLDn0yO zh<{gsr}8s?-pgPH7sCvPk5JF>&80t0R?M*9zGYt1lPrk#pH39Q`;dYb1}4H^qCZVP zC@{Cl3&7#SzNHNbS8U7mQ!UqBNq$vK)v2FNN%+M(`mb;$=c#KUNKt8ah(8eU}H?{R%rI?qq+D%Vu< zU9PG3lUx7WPHu%F^xVm*D~Y;3I(0eyy>Nso8T_wvlx>4*13~M)$$L>D3 zZr72tYkC5#SEw#8#POyjV84~;Vd<~pdWa-}@8u%=P56GQ;)3(}ui<<^Tmt9wcX9sn zXAk>};{W=NPVUmzll}Q~pf)1b&BayD7xy(I(R-h-ydAd+g?_MTp_8}lMxjDdp=%df z@FZL}3_U`#&J#n>T@pjDF8aK0$#c#-m4v%Rp!5?<&aSSsd=~iv@a8f9)=5T7d4x)o z(P(uXiFyBA-=G=D2Yh)|Ur>tdk=#?4q{yV(mh(3XvC|%Qvrs9y424dfur5jTxF@VP z=_PPHRlce&sI7<6PYl7KWbX;<4|_?K77|O+L#9bQkv)!JM%OnndJRmtOnTM{>AZ0V zwI}1rg!-4p-YizFRuhX6T>|6C{>?kD3%3g5D2G1b6Nb`fmR`xS#Odx#>tGJcb=n830X+X1>W@(W=quV``eE^}of z(3>pSDYm2NvJaoM{u9Fw*Lv{f;y3Tljw4N4w3r+564Cpi)bIAZW&iiJ7XUoJ|642+ zi*&V5-Jm^Gw3m?iwr&;g~z~7e5LbI!n(k^t_*%H0t+0dcA>Y zfxzJnK~~fS{s`%=s@}5|@uzYs$NKOMKK_g3CCBWj*<+59i>AJB2z#(>sBSmC?JDT3-V)1T8*SGPP|k=W>xz0MO$U_*xFrcWKFUV0*WXuV53bIT8+S_11y47K ztiayk1^XGYJfVDyvrsHMF=Zwc|UkL;m{!tNLy>f?Kbxh`& znapo|!a_F?f!OEU+U6H#*$Xn8xir34VDG6skiZhtknC*2_bVKZ<=W0IEFzyx{CRMEa)0zcr%o>0aiu?mXmiO;8H{_0g?Ci zHCPNO35)mkRkY|bu>DLZ2^5{ay$0jOWmpk>N!NnJu?4}nU%71_xmEOi-yFJIF}!`> zJgywx&(eMUSvu1Kb6~xR85w8`JlTAN@-Q5qw+$(*%j3}{f$t~qUJ&c^6FY>Ldq?pzkT9RQ*9($N`>+@bCXYNUbHNN1d1L#{A)$}d|e<&^tm@+ zBl^6@X#5bm-(xi1V>I4lG;YRdyhl6!#iJcDdiaF(e_H&_wSQeS-Hd2h2|*|C@j|EP zJznU~5HDo;m*)tVw{YAD9rB?i;kd<`354ny!jAB{i!IrNRl|EQ(|a(}doa^a4rY3@ zhPY2Zye1Oko?5Te$jiZ4;qPzP^-+vpCjv1{??GDcL0aMS9;Edb3)1@PkOD8RjQPB)Xo~X)!S5Fv zKrb@?t`4|c2Pf#^Kx*C-7`=zB-4V8Sk#Nk;dV+zSqS#WVI$Cn6h8yz%O+qbj2Zk6YM2h?E>(^ zVtb9v_GYUs$!>era(lscyM55%-pKY3uI?x*`&zi+RTKKRA;*AxJ1d*b{vEPa089w^J0ux8`1>is{sl8XrlxL*(P@@_ zNsQuv?}q=kH2f1!1>Z9NPr%Vd0F(;OF%oPFN_j0#{bI|47uN-^wEqq12l;JG-e>MN_pV*QPIs^LitXtlV{dZ&k=lXvQNy|8j25j(V|L=L!C7Fc2 z=6&86JcGQOf#1*!yi7E6!vOTa-u=IqF?e?wgD=>B`BEOau>XqXGW>4;{fH+})Vkr^ z5%=g>gn{u#Cxv2OMpoT#9h$#XlT-D&j>E*fwQI;c1Qx!~k9zTZ#iHUf(}l@}g(PoG+C9(_c^cO8p-ggs*e~Jg@&taHUwjT>qCU@9|$hv&PDCzx!dHHW$Xt@gW6$%C%+N;Z}^N0iX`jg@{&fPfuem39aK^8J0^E9bU>iC*lp1pdq7+2mfx8uve;;{TO?XLm2fMF zwCEb$m6FD%UC=`|{mB&AqPE(4lR zH{awbF3(I*APrP@c^GU~gV7K#ud5TH(HB@vt1!cQ0T#vsy)k6yLcu5~@_JMnvNXfg zhV{NtcN^>4Vu03*dz&)sMNS|_-A&Kl!Lyz?;o7-b)5g>xZZrseiI;`iVX-A~bb!_= z6mDYdy2+A40Ur=`Y&%5JB3VZVSZlRTueT;eOnO4D*06gA(Q1wv42(<$?iVYaU9r0_ z3^%LBrnRe*Yt5GHb%bwV$ht5sn?T-_b5q6Kmf7xplABiT5>uY0t&NEj1u{PoI`D8n zmWVo>>tf|my52=9qc%IWY;3OKd$S7I_m&Y6xp;{~mSsikcWWyxu2o2vl5B9Fji zYV-PRqA;8!RT++K+ce;M1Udx^wNPqyrt3OUs1`Rv%eIXEc$f3X^Z+HqW^E;IQ4}2y zbhu$wyaA4K7*?m@EiO+xo$a(e?qO#2rT}>CaO#^8e4P{U7Q-<)@K~QZJK1S zZuF;Rq&~!~wmL;}jd?{cI9y)XH|E4%f#Hc$8Vub!v!C$gi8XfTjy0%D3M|xngLTg# zgl&m}Z8%?T*e*FCM5W0gV#OV&ivqP@xutf;s+83dWtEUF*BPwwGSBuoJWV&v!%QA^ z^EfO_(ulV2yWQykHrhRNX%6TB-z*TPsT2W{jo@Y7D*~n*)iM>WtA_vgxU%%{Q)- z)5k{Dg*m;sGJy_iO=ec)#_5CErE2V6F6IVyjl{6&P+J>fRV7AwfbdS8(?;_lz2qve zec+Z=qcj}$u-Y7Pc~&rbqCMV^<}F5YX7hfpMAjVC&<$g|u29pFiNYJJIG$2g2eXR< ziw0A?lau?ErHY97+*UhH*lrdWQKW3TRZv&+N;|hb=#yCktYMiHh4QXVRmcgkqU9np z+LsZspjtD$yP?Jd11)ybID;riuBkf&niwFjAw7Wa1&b!f`hF(0%Iv}s(nGUl&9_Teoi>}mL5LEE@_BdT6>`>rh!wG;<>~Kw&s>idGjfTh*SWuS-)^ z!%GH*NWB7|PCImM$FS`pHSJkuUL?nGt5}~Ev{^AvPg+1<7ZxZ|uIEdP?mEtAq3Yt3iPa>X{m zs$({Gs?3uGg4~#$&Wy7xvs9Sp3TbPn(<(es#wG(F(hQIF_M^5uhRfJ!i#3^{u&oJj zu9HXhLwg}?oE?(hv=O202qwD}Hf>qcMA4#cqt!|qGeTc+O51gmri^vq{bopWw9yp| zVm_^~Y@tL9ip{Zw%c}{;D34?3c@m=Dx;Z);ba^1N%W+lt;33tG9` zWM)o!+N5g)IajB>{&cEz>ov_;?YAYmrWE(c-a&D=wc`qKv1T$bQ5~#$^;KG7X4arz zDGt&kHEitXc~2uOfv*r9U#!Lyp0uY2H{e zOk+K?Bw>W_v_4Fm%9iacBueQJms14Bf+9StdsYN@3`L^lVahQlLlav`f%eHtF!IZPFf&<|%v@vq{5u zRK2)s;V2*4q{QBE#lmda)q1ux>A|xJ=?cx-ays5_WtmVeZ6R;o^=u)0i+bNXsNvg1 zkjf&BCnN;ysjFF7qw9ObxbmbJ&p>qE;;_2(j8q2m3JRx-CUAnNgE%&el3b zVyeTHjq%K?p~Q^KAEsk@)8pW_sLWX`zF|C(igrUkM@i38F6D~a}Thf;64q+Qx5Vb)%Kb5LfVKHbbeTtn= zYqik`U9$?`U(INKg$n50OglwgCd6ukWw$^oq|Lg<3EgJGNuh9LnNcWoVq1Ren_Di=uK)2+QV5vIluQSo@w(YGmNut&! ziC&!=Y`2)~>zEFX_B=lH5}qd7wCQKla`&y>~?E^ltfD9fe^iOJ34g zKgte`dhHq*SRh9&YIh_8A8eEy7hW>#&q49K4r^TiQLEtR#-~bK}A|t zt8G*<+|in2rlYF80ccHG+2GyTyfP@1(QdzC4cmmQ3>a}?&&;LSn|8*#9-F3=Vm~Lg ztV&~LPWx=9Ey%kHTW_0_1zJ?7hMM1?Vqq;4Fp)lNjoPMhNEcDw&EaeZZYs)--0T<= zk@oDiJK{&Z;(lG!WZX$N%5t7!+a0Z>RcmIWyL6h()j=C>tCLENBWlCZwxti-L!%0J zOGIOYrq`RsuFh$&X}a(Tm1@oWs=XT#T&-5_6^)JxM#K^x&POP>Mui2xnGR7DP!`_l zl5=F&U@HfKlA7G40q^GsW1;2jIi-pckT@7@VA4<5}-`fDII{9v?F6^pvtYcavI*_!*z*##;e?2j}=?y}z#r{gE zsyT%2_J=^D*Ol^M*W33-$lhrXSf4>9dcSqmxy;twJUi4n6;vOnmNtsprQO}C3o&gd{ehYT+nP3(`|IjRzzVC%>>#1d#%O3`+IC^+6HA9# zqdC?}i>(PndP^wHzDTDFX1dszs7SYIBBSDJSeVR-;T{w4!s@`F&6Y8f(u|^YWTuzv zck`V}r;Mxiyfl|;x*}EbSb>-~7eq^2b%xq>&Gqn@%j=v8<;v+*zjk_=1~Pbedc8Zn z-kn~5R;O3L)oixY9No&1^}%jbmA8UwP@4nIqj6vORq~@7`eA_fj|QL1k4x}u(srj~ zZ$;A3rOs-r$|#CW<*h7h1cerxm|{24!JyueNhTO?EQU?$WSwE*v;f#8!#D8lQs6el zS*20S;X)Az0IaP_TUHfauaXCMj`qaidey?}a?#N8J)t{tv<;H4$#e^dNS&iMd&?0^H{8jtpRe}?$+Bm;Wz8<3Q)qV@aKD+K2$YZ$$IX%h@=Jl04^+B3M%#UmX7KI~QAb#H(k!}se?e@z zQ``YgVPtRRkt6SBIdw6_>x>H!b6(;q%$g~fJKQkvx~W=J7a7iFha5<2aoX((v#mTL ztl4lrZ*G@G6jrRMtdP3evz=|P1LJ9MXjK;dt+Ct~M$^Wz+LB0@2Ksg~WHzntj+*E& zom*KTU!Q9xzbdDzPPI5=22&Yfjoz>TH>Nqg-#E0*ZUf&B$)*dZo1<;9mOqRtdXDGa z_MBNTyZw5TZsL>yBXXlx$_?@>r6kfhsw^$av;CT}XA?4?lSeB?8MAahJt+?OwYUR4 zQmdC;lO{QIM{M*#W3}yd`$(TE8iW1>UQweN(aM|MK_SgoN<*5aaiXt{3#~cW@ zLH6pFuHiL;6sdlLK%8xQ!57DPEmxowm@Qi>(%Iwh6q=!vk3v zOv__#rO)czU?F0?IW_Bz+v}1$&rvNw8a56ajp|mGJwOsFEKpr$q1LOddVWZb9FCV; zQ++%hpGZsW?3R{jpmeI6%mW&jG3mZCAGg_ zw7Eh5U?2sI)>;B#&4<0os5U~GB0SFXDuUpGVPUxfwS#*t0mYE&m@^#}Sr-U{(UdkQ z?;XB!P&$~k-`5Wd+^t!rRGz8Ix*}pqWxd{NR;$yj+q7=X=<$T9s zO}*{#NVkBlU^c2g^OblI!EW*k9K0 zvdE5$trl#6vTP_Y-eVL1L^t3p_@pJ+k)AcYD*@y$n_+8JtE4J zqF%6b{JfRRjT?Q#ZZa}Xmis!k;9A{{*(eRBF1pg;KAamcY*x?$`rFM&m4|QJLWLA zZNqjeKVGg&g?6L7+_gJXLP;}2qoH*N8&h6v8}3+^^OY^quEBPpmB$rLt>SH^Ge!$A zj*AUQT1xe`}9T}Z8cQd>y=k|<+!1j2yk-Oy*i%oJBVd@r4*BbSSW*X48Q!UT9d9Ifx zkV(0FSl5~rQgtjerw(A$k_+QDowEyNlBOF(eO)q$?y!P#<%+t_v7Pc%Wt5@e_QAM6 zr)D)!b8>3=bY_g+L&m=9;Sp!*ElKO?zu+DjryrYHMP?qZWG0KG_tea9Wk^{0w&L z2;7(md;Va}XT?K@*ihTW%;-zQm9(V>6C1$JWZm8aWK=TiYb z=8oygZXpvLZa@wS^A<{STDJoF+PFRH4ahy)Ggd0>EMVFd_ItG7%_D2MnNDw42(|2& zxHUx-QCpIcy_#kSt4(U1E=>r8V0w10v19jWZ8kObJ2E}mu;c#LY4fNE%Y?<0 zIxVJWTL(n6oB_Qcbypm<)T0~JN+1|QVoYvt+tJd6Yomo>@ zsl;wt#LC=(WfZuy=kij8uM&s$+!dEF;aX^aGD&w^D{9a{c4Gd}hk-NDd>zUYNdsMhdvHsPvO+A$C0}p&K!Ll#Ev?kr*~9+wQC&E(b31j z;o8xeuBoon9PI_IVN)cD-Slh7zF!0L{TecX=1GHS8VZ`mdB>hkMZRqmdX*Kx#@m(D zD&wRkJn+XTgwX;;R2d*$?ha?!(g-#3AMiwB&v~aV!c&fS;$NB zpf(YHJnp-rUU^enS4xBWq9K)>2Fwm~HKmG;Ku4z*b4Dy!3#X$_gk@SStNT)wMval% zw^f_yEvdmC-E<|^)?IGLbXVOj(kF*~-6HHf5Lk3B&bfAeM{kEfCG|B*NL;N}XsnSY zwJ-473Z)F)I!3WmbILEr2i&Hc1(&R?TH>g;(N<-{($H=|c!>qacWdArsopjb*DgDo*{{4E@Ud_Uwkb`8J_XpPFj}JikfiBe_{EO`3DeW<3qSnyXKV2t$v<7PDeb% zo=KusFgKW@YB<71{Q!>qfbMk8A`A49_H9zUJuOR?|xh1=_F=5n{GZvD)sGaZhm zecbNx+v0KKKd#hHzrVLbdy;z_{fBlG^?(~q;Qf%!#6@02?!=$Ai*Pu&7n-eucGyf5 z=ix9Aiw8NetPnnGcD7OVZr@u0se3;R!sdA0T|CYn=XtNwRl}LS{M=nhVHHG1s;_n* zwnLpIp{CvLLXsuZZqMLCkniQJJN`5Tk1d=8-PEFQ#g=*ZBOYjg`UQ z58B?GDC7AfY=R()=T?&M=TrAV3fIlnc%>``pC+FkqCD#wWY}yqqEDaUXZv9weS(<; zM@mb8RHnQw?NdkG%pLM5(LL(AGGMl$X415aobI|T1*~13*P_uncr#X2YHR8 znK1}9UL<$<{#uuiJbq}J^T~ED4#v^;9yZCyYql1hN7dOZg2B=am&lz*D5jF!4yDaS z@EiNhT7Z*{C=aOisWQa6 zY9%4)jOX^I^$`B>Ba}nW>l$qzt;lrWm||>cM>eAa0HOPE$|&vM_p3*Prhd`NwocSHrR0e~>@*JB?4Xv8%85Yj55? zJUWN`NBl4tMT)AlM~&usVWr}y6|mc?Y0X+-@NjSSN6^`{9soZL4{Jk-?sv_(WT*|$ zjyoy*0jVw3`JC;09lRZG+$MsDk-SyKjfV%lhrC$gPln^@Kj3AuktaWbPu7rMbfe^o zdwFd5ML|7#dsn^fU0l+5R@h&4;h}%3`BQQ2-~Z0J_e~Oe&$>B&aoPIqlm0Iusjon& zkNLms1K}u$--UpE@dUwHD|RUM#NdmGA@qQS6*K7SR!D6f0(m4Avd!M{MK2T-!%Bg} z)1GdDt{EyZYRCx^>2Nytwt6T7U^!hKYJFYM8d$_J65Cyehh5!nD>^R&UF7)*kJql{ zY#kG5wv~)+neK2O&avH=aYH}2vC@EZZ2)*6>(F0mLuF%#*s`Ntq1vsKP~WyJuyUY3 zba=pH)7j%W?z)1+d$D#fEgBknDv*J&0I?Fmh9+Z4ppyga0UJ`2PbUtfjd3G9=pxn4 z7+bbvZ9%9hs;JELmBPaiP8PP0+&K-1EK_#?CkAxPUg(S#b0@KfG?>c30v23&HXa!w z9(#SoL?$lWI7NU@b_P`f&2|!l*K#mafF2YZypr~6>&)MrVvn;J}q7 zSdG!aom(3?>`tIjWYa-wq}f)>lVA&l{#IQnre%ZAi$+Ryu{B4ckXcmDz|gndP&TX; z*xU9_Gke7x=*b?1!paDJjo4H+L_yO8FSGk}gY9e(D55@Z@~|*XXRQu| zF|=u541k4YWn+e6hA1suUOTv!)9kJ2z_lo^%{v>@k^zbeq=tBhMdh;|E(Is@=UAe= zb^tp#@4`h)Rb={mC-ikgDkLz_4mi@9WJOnF-uKbI=$U??=6=^{D1yMTd9H_TB2(yeK=1CV5J;@mG4ax7Puip!=^|Rivcm|Vj;>qU~3xg zhkL8v?dd#?jL6B%6_~@7)3>B{V9tHnv_@k%R}Tv@-FUp$@&+(RLr1nufQ*$dEa>tu zh3N_pnoS@pQ?;-2uB12~kGH_oHfTsKRl;jH#}83!Pg`~vwnz-d(}5~zqBB(+ z>AFY5rfoYTZ}70gl3>E9of@=z@0gn9HQ;A&PzV}L6Z7DUmPq?vti+yxMJwb5Ggh}~ zI1*u`th7+G;mXlGyEQfib*$PgOQrh8ojV6j_R~e2=2&bMkf#k#EF{cpEhsjdWaZn| zFpcqQ*}&qcVGO&`LQoD9v1Jn5rzV7pu^?-3sBCd35v+)A%mEyFp_6J5kEXq1fCiSJ zT43z)8b3aOooXiyS5#W=plE81Zlum(PqW&M2`|g;K~eQNDAYl#??rxV(MUJFm9l_g zv9V0LP{VYs3hKeKY2eD;Tx~$Xi`r`f!9X(?`-PqCTpq;M0f^XK@|M(Y;ej%;Z8$|1 zMebbQFJf;G;b^R_z|1h(D>vLpV?nbQmb3R{Z;MSZa7E29pp5ib^VL31R8a#~q}U|F z$wXKRcp&>o)>@hjb{gNF8FI+G5T{c;g{ma+PT$+029_s$yKmcmxCrrdVFA$-wLV@s z)EK0_F|Sza3a`{b+js5a;8<{E@^b8kI}tbhREKikla#3;cv)}d-`l}Mrc+Ix+UdmH zKQt{KMp#hBmbefNvDMWNAk#x}1k|)YB;HhSX1%eTrEubzsQOHki zer)#T5g3L|BPc$PdFQhiX*<(uYj&UROlx#-_y@rffsXnzh4zSd4)WCHTef=WCYsn< zzyWONVd@w($$+Ret&%>s>1Q)c3ln08to*sNQZrjt9M5i92JhT!Ryy@8fp=nU=!l?+ z2RnHp$|jJtJ+_OnB~y#QG&G|fKQ(FJ5mE|GC+tyW;SQmLg{}!>f2u}w;h6rx2o=o~ z+ZMFjDH*0?i(<)*m!dXTdZwi1u-6vUq1Uu6p{K{r9ES1^HJ0KOf(%ty@B1+w@+yrS+EXpJMGJc zZqmL5yEE8_k|lw)YB^IR?N+Yo+#|m2SiF9KrayqOGllbRXoL#yz=Z$=scB2V_d4m? zjI5n2)0Sp0c0i0*0VR`ZBV@(S}&sLASKh zmYQjnJn;_B!3*V$VJTh90-7170S&lL?EzO4~k zi_C*2+tN-Z)Zapp>A#H`?jp_9MkWM?Z5LAuj(B2rb1PC0W+xRLUV%{7x<=?XG;6n0 zZ5Ts{fkC^57N!d~Ohh1$4ypuOjxFr;mA0_L2XS(seQU54;k?_j!=iwLMN5xiI)xDQ z!gQ?8;Re`_GCnv1GN%YytpYU`JdC!@>3~KsT(+z}n5j`Q(=EJn4;r=SpjgCS1MtZ~ z7yP~z7Cek-WSCydTS;RFcIWD#0E-y3Ts{}DOj{6QS+g{#iqu}jz%+U}Z<~$+LOONj zZnlU4)WjllcwvNAbnedaOb=zrB@k$WqV=L;YX}NNvXrSb zY^YYXuE1(3j+7222W9PuI|^huw54`n@E%VjB}bAnF~mYtWw>`^Su}+1#*|^#gHCS6 z;TW1ggQ347QG06kLDv$(h8rs_hi?^XD2a=(g)G6^J5g!rYMNs@yegyvXV4T-Kg>uZ z_?p;mIlOOR0UMgw8tB_pHtizDVi9PAcDk5T86WV(qKnKpfQc7(c)cN0)gEQg$hYcY zw6Xf#P>-4oFlhORAMx5jNyfa_#0PDo4kaE9RlXN#1u}u9$9Qe8z`$H}_E=0B$SCGo zNMmgUw8cvKj6{idZMa%AI$O2xC$3cVR7==MkrNKP{csg$DU+0rxKi! zaJx6;w7~LGFl=q=44jw@6bgBH0b!aFTip};p=k-}Ko6y+XF3pCx_}2t=0)0cI#5QY zw4312$}~OMn+<hFOl&&b@#>>%H%kvsu|mh4(|Wkc{; z7c>(_Qp+-Nfp{VFR`O7j72t%0Vy-~X>}!2Zunu0_g{s^c8==r#tiVb&!PJoo=r$a~ zookuJgV<{<1+A|{Dvvjo^>DBTqvir)Y7GHe*#5+ZeguW?(222S$<)TQJ8&eg1@%-h zVwjoxLQsWpH|FJ*b5IsYYNxi{UYXF(txy5#5XXyybFYikbOi8Oix(}2=XpY*gI7R; z_O4-5ZEnUe@oYu!Q9!i@;O#yrG&${gP!80?vWbMSMTSml@lw+oC|f56x+%e)+0gdJ z9Q(vlT1eI`D9Xqc{1ne+s?Jjx&~y*`;n;|M=!TMDh{bAZEjNag`Z}d6c#zGpSoAd6 zm&jlwstu|E8SjxmQ&ZYCys#xBR{BR|sxhd27&o+CNUDU^$`sEl2! zXuvt%Euz*GL~w;{AK4N=CKl~4g7(;y9H`mYn9h}+2JwD;P^LhZ151_{lY`WRQo9E& z>9An-c41nBHqr$3;DpxBh@Bas)HdcC(uRs}>FLCZ;GBe-1p1CL;g#8a)Jf0HsWsA5`|$e_Pa3d#?HVA z$-vLSN&~o0sTwN2+MqtN(v2fQ-l7mJAkZ~PZQCw3<{a!yY1{CiHuGXS(xI<7F%_JZ zKi6bwY*=vML2!?42dEZon0zsFWLd|QreFXLD9S}B;l|A5$90@THbZ@B$%+C)*#bs) z0$|8u91}hH`4kzcqCw9>BYglB%di|p=gX$&p%F)hlGfMfPT}x!qZIcJPsh5|9ss*7 zxgjuhu~1D*+5%oPJqw$LJvsncmi16;Kugy2mESaE&|QQ|Y|_P84`t1?oFN%Hjv6|L zh2^zK1o}ko>d@Zxp{zB5+=VvPG<^jYKnAjA36eGUH7LQRIZszaYTK^hOHc|0(*gi* z(-}B_*T5qZ!qBvo1K_0{v|txEFkFOQ3sE{JgLa_u&8=CAU8q4LY^lKFTUNAFu!v*B zrkZYchrRImoMZqkxvNRE4~DqQzO{ z1`3}0g)KRIhvEa61I;lW1bvyxjtyrbgNP=)kI-UXgV}j^4N+- zf)n`@UEE0?m3w2cEvn{dk3$FPp%!USHb~f>dxMa-;X=@$wpT?#m^xDVk;r4G%&E!K8tBr!|HCYB87P1uyVZQ_)pP=^M5)cA{dc z$=KFHO*chFBNEhf3Jq0I%|P7s^@coh zZF%6#yFMMtZh2M*t|vH$n_b0H#_h{$ww(^PyfTJXsB8~WT6fS_6G zT%JP9pSYnivtT#DRM~k0z3G{L*Xx6pF-*p`1c52aGh@IXycjn$k>9A6yilcft{uR} zvvMAWttL271VyD#C9twYJcqn6(0DMK9F*;}SNQ6XmTr)^FdhVBnWh@--Y={+1g2t= zzLaScY@OBUurMC>st9&il<#2#$BRf%O+gb}F+Es)94rLb)NH3|T0($Du%6mfP*+|y zm7IAm-124!2Hqgt5V@O8=Tx*Q*pes_QRGZi6A!dry9Ey5faY*ss&a48k_@A`UqCr? zS6bml+Dsj$DVqB}?mL=3UyO~F#jAGGfTE(9eP@RTP76sb+Z-q}Z=h$B1|F-zqNO$z zX)I_%Ye0b-?z(D3^+oKDRnwO|5k{zy?$p@d;1IUFPO>vZyaR()O6Fj+*cUs?rqqt* zdu!j07xQJqkhPiFz%mxY3`OmGN7_ZUwL92zNkBu*v4&8>1DRJ>v}aO3@*>&kg()=$ z>Bb&nlf-atMvE3Sv5CWWV$5;hqtJI?cdtkOl-O1ahT38}a3a*ez8V4GnNDDs+LTyD z&*8&^ZL1A)9*$K>Ss09wV?&`liLb+AoCCj^g34|J zR!bU5nru-}y6k-&0=crc`0>^AOT8~oyg8m7{EvTJU2$(;_WLdN8*DNA&BVhq`)#O0 zta_2UGY<;0b96!50YOt1D^0R2*wY&r>Xx7Yp{rS;&;U?&3|>Qq&5sdGbz<#?mZc0W zN+sJIwXh@@iv}K8kWO?VRa~1QYe-cf$UPt^jv=QDH1GpkQVuo+vKntBKVb=8e6!4pup`wVQqv?GVQDMMgs4J^?2zE5?k1?no?_ChL~ zp`uwlY#2lA0NDYS1tdN42abgYc%Ti*V5b19B`&DeGa{uh=THG*DlS$Ua0F=!=6Hk# z+SG&~#(YaM=Hb}1fTl{qy=7{1_Rdb(J77W$Nc`5Er$80(XFYy~C2w*X$hyyu&Ye+;pW~Va86t=mcsC z<^iy+bm9uBf`-n@WGPUkXIZl3h*-8HS<-oRtV4ODi#P_B(lsI}b5?poiyc)DiZ14J zK^2wMwv-l}R7T~pkmO7GelMn(m^0v0!wmmA(@v3V$HZUg*+MMuU zf`)3dN4pKxdT6L7+>|c4W@_8XK}k`l3t&Ja5HEI)RYXYi2S%^RvDj)&8jfc1t)^q| za&NE|&DbBq0Ug7r1*VqonEZC^h>Jb$hYi)DmJ#}EeGUa8!-3ZKM~eoWx(#Qp4V45B ziiKk@nn;wp<_fQXsj1K?x>Kn0+5tdQYV{4VkOA!~ZYM>$RZLZpj?K^sVXQSh3gDR6 zpdR}7=-?f|;9Sp?oQ6CHqBDds?N06OUKil57eU1i zTaji$-K1R}G}4(DJEF@i+@eF zobkpo{q+~=$^z;bFUZ}*ta(b4nNxGeORg1}@ zkrhJO9Hd=Oq+K|d#`+us5GsxVwZJuLW>a;G`CS25z<~$3u_$E^4ENJHh#hfvSge#O z8Ysh3#;Afe(!*s_x8yFEW66SaY=~`S=xKr@ZK^|AHYEk<7Kj}l_H>KRj0SAkLv7%M zSX6Canee;J8|WMDpaC0-vJToDlF2c5^S<7v2Wo@RGJTqV-7*sw$ z0jg$LOtk~{jX|nf@rZXDc&A3`a1nP`6Cn{1FNb3hri(eq7LD$D5rY6Ul*DLsXL!(- z?Km7yr9$w;T?2_QCByE$DS@d0HFFUa)EssfWCfZ=814WBni;fhaPW~$JG(`c-n){2 zk1T%#hSt^yTS%i|ZN}-uTc!&VYQu8vk>o^<%{Ot>nwU{*0__$xp{!x*hiXH)hql~x z8V>KQ@Mv*RR46IAvjUMFrwFWM88vWd34XG$gl=yo=SXx$XfDt6*ykM)O6Jh-8xl0_ zl@fV2w!OJFw|fPzHsq0IJ1LGd9UdH>41q-E%D|G9&LWfLRA)=g5DeU%<|`-ubv(F z{*H-sR%Uc*WW8JXbbj~8)4$(7|M8p8|18$&x84Bq{`sFmOMH3$XS4ao{U865->-JV z2cwMN`65a$BU~4U%OcF0;qrT zVnLGMx=B*xMTXLME|ICMvoFx_`A7dFE|R&V*$ayO8hU+$TE9T6-%6=ppwl-1H6);Q zROxkSzcvzkTGvu>?w&5lDNO?GqFWMPbJrxSw8u4fDQmd;`1dbh;p@77sdBFWIn(OQ59b@v>u>`sjm>LY*qn`BFw;A(a1U+K6kyM)=Z)=b4 z_8pcPgKq1ulGf=?q_1F`-vaR0c5;#!xs=?pIlTuskUA6f_XBoD5RKl0ciiv&exMDp z_a3Y>Fw%OXS?AxxjjutRWjo8;h$g!Pjr} zHPQw^GK{~P)7j|Xv}i%R%t)T!7D*bswN%o-9ZK?LAdk}V-w5SV6kdXPeg)`Dr}QL8 zD@w`F`i;saGgSCLaVN4mcYX=N)0pm`dBw+$nTLOy=k%Q(U;F0OZtHtVpGPF#1imsh zzSiiezJ76G;a8YF&s%=0;gh6Aki>|-h%5vJiSo;!*V{6VP5y!)QikJm5peaT)%hKx zjQi(sc5#NoTWGrV&|ON7itW{lZvWj`vj4fiZ^-`^BrmEgaJ3Vo{QK9q|Fy!pwm3d9Ft3Po#$UU0m>x?j2Q#W$=+`#B?o&Jn7JfGk-C0s9wiwt>1b=U0) zyb^|A8*5z8CtjFyg^vpE#9~LYg3H!1m#^97wvTH{_Z)gGNX88bjkr42#%B1d1NQ3W zp0fmhLt(&^u=t%;2XHTw(ibqlr~foSYs@JL0WNV4u`+ z*_S~m@roofNfuq$q7f=QU)rUmm3>+0aMI!~DbQWGc1aeKg5-BW^66PhwKNS#hKeNn zi5tZiFPIUYUmDrB9E$LL^Eb%ezn%;Ky=Cpc4COzQt^eI*>YwK`&nEa4g(<&Pn*M8( zoWCf=`P|buW}nX(?mG9+g96vL-o>9RkNmw!*xmbFXEx$|f@tA$sNnpfNb{dQeJW6} zM75Br7wf0{hqn0rsiXh(zv^sueroi-d_M2y6H0?m^{BU{C0G(hNdwD_q}=!ad7T%i zSm*zF{S$vN;!DtjoU0puEA&OO_I&O!pyaOD73cH0opZCPVRE-J_n+702S5Km$It%r zn!8zrgir6~W!Q%4>X_OHy{iqX38lPow8{Qk^+l$W9}z?^p`AI`Aw^)S7(&v@m<8Fars*1nemN>0~@2QjA@Q;mB}vIrG--(O$-;q?9ce!s~7OS7c3 zb%J<#yGq>rOP=5t>VF$z>v{d}eM`Lm!~gqN{C;hR;aBtjZp#0*|3B;nJ~0_rG8u<5 za_IwR>o_jozUd2I{fQIqSS=)16}YVuH$pL5lC0Fs89{i@eelXLxqF@~f{5fd++*ox zkhqk?tx|h`yt(=lv+y&H?1F+zVvb~4lHFbXi4*UtQa9xJ$FT`6hxv)Mx#gvgoAG^xQXJ(cqNm~2m-a79wpY@~=_8{P6MgER>%f z_y^%rIn1Y|?ufhnJiX;^O|He=-p0u-Q^PE^SZ{8EXD<4%joG|Mv3hzy0MRTVJfRxR+q^^Pm6!=P!as?tgRFfByT^2miR{e&(+E zYwo}PQd$I;64lKJ3eVd=1{Xk`ru;XuOEd1ze?LC>2loRf{Oz@oPhYTc|NQq$l>Xy& zI8OMI0GI;q!^H$Xa<|-?Rc)0POvVgOxulpgoA&Pda$5#73x#)Pb{cVewr!)dn9l6v z%3eYn6wq??auq+EP4Lr;$$h+lqT1>4=fA%sx_>-<#&&_c!ho-s>vvzE)688;Ju}a*MH-EmyE@B@4g|OhbAXgH1bTs&X{aK7U@DT(7>1g1AIxFJYmr zBG?e4`ntsU#h0%O1J-|OXaD@S_dvbPxbMHe```b?{Wn+rH)nR%2d2(`{`vdw|MU9K zH4^^w`up!cmfx{%zyJPk&)_&N!)ZMB9UF)R(4iqD}2aUzhK`w#~`ozW(|)m1E9^ z;r{F86yLzviML1BR(6n(ul_~zfm7@uQJnDY02vMO(xP&wZ1;~KVH#?To5lw&ccKj4nY0zY-7`3 zUTN&6(M7xR?=Lk$TZA{4g?#0cFEk6h=mJ15`a**QUo=SYml~Ab7Kw}VM)jkMhA*v_ z4yBihy9!-CkD{GZE2Ghq#%23qU(E>pkrMjVe_zc1-1&q?0SgKJ(lNeJ|Hrq)AD`ua zcwT7!k^lKu{QktvP*IR9&P%~wtuwdvNzA$HfZ|dIq{s`=lH_++f8tC($hmx-rb$-h zT<#M}xg|~9D()A=%Ns5u6qV){EAc&hj$(ZECoU$-Dhu-=&B$Z0Be=?|{Qo}QanqRY zxg=&SOOUvfWE>4*a(8vtH~wlANk*>z#PyOWN@5Q73=Ribes#ADicjpn75GOby^D82fR|8w;x4x%hb z);TxoOZnAZnk6gZ6<2owCg@Z3U6!n_yv=QuB>lffP<@gAC!?OE8PY#9#{2w#FA9xk z{4d;>(AfoWmsdvcM&{#LhQi;d(Tibgn@Sk6gY6$JZB6tA|O(C52Bic7#>%7!dpf$GRLmMFD1O>h90xnsa0mU=n*z zD4u0W@>n*L;vy(0!{^=eHH^@nLo{c8*xB^a+3*o6wJxbZE7dBSxlt+Zl3Y&Yon&0T zc1v|u_EAmaSP@aO=^fWOTOS`)e07>o=?By_RXT4;6nIsR?ir=saPhJCatc9SD)%TT zirN53)&=`KMSDg=$>T{lAj&-wlHYNoCxLPE1XAq;KNaS^LNw*0G)qcsvm6S^yZ}*d zWFE6y%=$s`z9iQSb1BM-{mmP#{G=-LD+NUmk=#caGjI|XEzZ|&Em}%bC@$D@mhQL! zXdP3M=NzdrrF4HBsKRPZ4NQJ`Eb5Jp+?Cftck2h9|Ad9aEl?2WCp1(E=2!Wr^Mu!| zDv~J)>O9JQE;r7p3g56KW>${5bGR5<1gzIjKt^FG>IVoa@AKvW~q%AX(^Quu8@oh|AuoD9MC-%#H)3-XM~!b zsXSa}tq97ZhnSwg6;X%XDcsv`-xI>67d4Cyo5f${l~uu;zVict<1u|Dc! z4Uh4HDoJ{G!P}R7ef+Ro1csMVww=%OL-{5sa<03MF(tU1$V;)8-&DEx{YS=b6)&N> zV3$0J-V%U{vr715d|Hzu97!e4O36_pyjBFsW3jEm9_%c`6H&1l9=ZQQtRk-}$KZ03 zq6`(}9FV-WOHlD_0Jb2LnC z1#}mN)lF>!Bu@`2#NWJcp`haVXiWSwHM6P3kC()cH1LYbL_67WZy6jMPP{c+)O?+i zEGPKYsehjzWmHAS^^pLlNtg2}m-_|A%GEB>dZh6S<;T?T)=wy5{bnq}d8Wiz)mcSp zT)uvM3_NDXUQocLjeOoG(^OuvA=x=H&x-+{80PU@Wj~+9&5<%+r@?ZHCw4Bi_Sc~M zj+0s89*WWu(%`Xba>VDBoI4aHq}&Wz%tC%)rG4aFln0d~aY7yI;Eb$`SC_36pf3oR zjVACs8?iQ-xDTnn&zWpbGHw%O#TwC%^|DvI_i8s)?D~0cXG^?g64)iDx+`XHRZA|` zt=?JhR~fzb8(uqQ)=skUv2@s^(rQn$ASaa@!GBwuQtoI;d=&TPXVQ~mxae}qinc1{ z+$Ua;mmjNj2HRj~^l%S%0)Hod{r6uO{=7RmphP1DE7&dH9eZlsweA}4fAWP<>K?wk zdPS3byR3bslUKy;*Z0ZnqSrdDlw)#?*S+ZqKIfIAS0Ch0PF*DqQ$H&W+3Pnuy{^fe z4ShVvw-W#BoYa-gr5K4x$=#(zcyyk&CAHxoBVIxGRTS~)*F41=-UGX2@tQ+lVxxlp zH7p%fy30VUy_!;=v!2p*mL@qV)!)m;zp(~J>`+ zg{tbUp8h4;>Xn82=~52Q9!gOhvr^)+2cuD+&4oEkD!;sS*Q(m|5m_M)24p+cBo0=y z<)tKDc^>!_Q)*jf#|EGeyOZdy_{d1`u87E-({k=|X?kQ+rz z_?byUpCGKmcUiD0DN-(d$%@1pcS7}r#Mss-GEzz&w!wuL&KsX8_&tkfyy&13cR_I+IWMK?nr(f#;6X;& zdA^QF&ICjjC>d(3KWu< z3t}c`<2=B%dBwCwB@ebqhVyg31MOe6QQjNx<}B?0Ox3wn6fY;QfycD#MTF;Tad|0N zN?xc%3)ji>ATLl{aD7xDu2+R@lB{Moj|OQ@xFMk_XE0j(?y7^!mCTE*%2M`{xTIL_ zL$xoBvx#e@YzI!~iCT|LR)6!Aw)4jqgBev6DPI0Y!%28q&gg`CW9^>(`4eXZ1>uf+ zH*PqU6j|Waqup@5bzUS$?_Y9n>8(1i2k<$xcqu(nzLgEzuhROsD1~dw5V-< zMK!AQ^Sk5yc0ie>Wm4y?m`qZ-zbkltZ}?F<^II_M{qA70e+Ot{qUId1-wS?boqs=a z&fuA=lYbjLGm*bPVTF!f`QTy8r`Fd}^`H)r9a=tG?@U zN^`WNh8xc4b#AzxG&&9X^+fPn4Sa0yESma@1n9Zb`o6FFz8n1ARfp2^DSjI?RaN4; zioVc&6{lM-OS)sHAjBNm1uQdv!v;YG^F3dq&g;H90M{S6G)o=>T8ZNPDOkbs(IiR= z!l5(!y$(>tq}V1|$l<4sYbWg+CR4>n>fjaKKOLFTOYkX)%0gKAQ${&p2~@j&KjDtGKsVDjgxPBDxLU{ zf8=t)tboEl20OH=_SaEY{p+z1t|W-^!zxmJ3hd^WH56J>lr{t_x~iz}lmI@9!JZXG z-EbFSv`1EIE!N;FN~8dC3tyET3qDnGlHsm0EYWh@bkrre*nVGEsPXF2U-O~MoBeRC0Dl6`fXIt|C!D9cb>oTXSlT#qIl ztu84%k2bQBi!4|MWzY0f4fQO#7QBsH#%&C{--6C+Yw~67P0Xk)!^{$Y>b73ADi3r@ zMv${&y&{MR_n4uG~CGly!=xRy1!4fO8FCkIdoJGC8{gKu0r2lEF=7 zuA?ou@ks0c<-4m7Zq;{xWb`JTk!rA)9j(uGCKFDY&wykY?C+5}n~bFXc~|A*-c;+4 z%+XXcxRKVISbcV8P}ed!ZEA9pkvcM^K4(sEICCf+8!t*I%#k^fZb}Bf9ceNcX#+`> zG?SYGZlswKkRNH+{k9FUBe)H6AA%7!zfSqF4XX|mvI*;9_ymrA6071HWbN*X*b zr#liarR)Pt9!ZRE*o|CK96VOFV}3&MxtPo%rc;jjRF9&7mB|Dwu>Y7PEZcRK=zUK% z{iTH9yQ>fQHAs&`RM}$&*Xds#ORXb%Q!!lm53*y&g=G61E?vg~i_9h&vs~CgPDOC4 zcgyP}HnS?-by1Icthv46Xp$EkMg^+>nWIe*FYBx?d%}#&Qh+cH$VdrB@ule=`SyZi zE3r>@9$ho5u$&$@U|Fwy6;4>^MHV1dTK#>_Z7VTay(>{wWk-$?_4mxL%8WRg+U~x# zi5cuAx}J*6Ys0JT^c7G_2+Q?)DNxTOQ~5zDCyuqYNBka349dRqBzgy1rSfF<(XmNz zRu_6xC$$O`(EL=tb!K{0lQ|>Ai>?^eyX2+i_--=!Wr2Qavb;5cpT4`ArX*JSWA5R* zD>aFiNx#cA@A$j+cUJ>H$&0G~lxyGdcRzl2l^5$cCX{R5weG*W>eOjA@$Sbvf&cER z&VpdBb@y;5e0N1sLT~FMuDBn+yP|=+^s;?g+_HQdCsgGvIjQ=&T^BUx_&fei5Wl<1 z_c=|LxABr|+_moRzq{J6quZ24MsAlVFGyBIL6#+3PPh~98p3y1fM9Nj3eJjy4assu zxo$Zys}C)QfA{^vcUR1F^!68pH5c~Sx#3lsW=Hy2v%FIh2KCuz8LEzvD2V6B2~Czk zWvbPMy*w(kYK6TBU^inqm>?S?d|9PwPOsY?4$^}tL&8(y( zK6B{+E8b6+=^y0V^`qV%bH_*5vu zxW3+;aAv15X>{^6kAkc&K7XxL>gK6SKiQHE$)0%-M|&L6f@G!Usg883wB+eH%yaTe zva$iIhj`&oyqtWJy@J4J2G?utUPan*b4KFQpx(O4oY6`+mQAiZ1~)RUYpX+>UKmA3 z)9i+mM&?igCljo+iYf!>=E>0d7MrSi_OG<7DxrQ9CVOs{5q2!qDQ5HfEAE3i>wP@d zik%9=%XJS*CF!n@n_w>di6lFD*+s$y1v5X6x%5|xjPE#e*1HIuJUMOb$jDk}=a;S# z*?A-_SaJT5YU>I_lO@_J<#)-Rj8l&OY)zN!jOP#4-W7J3C1%?6;`PxB-yfrF^#niO zaYiXkF833a*WoDWuhc(!ArsyDoteK{8~KeEh6b&tnR|s-t1W9r1bXnK|pdA{ER!yZSXOe{=oZANvI? ze{<@C`BrQP>NojTugZZEhTm2WypZNahT{B@WDJFDHR}pe=1D)X8G8Ei1wUM{@1X_#7mML%X2SrkMh#&Vq-87Kb>^7XPl_a$cz?lvpsM|@_ruo(y+nOJ`2$iAfvN{GadPiTAMzNFg4Y^6zD zJ8wcwn*ii&;6I9(~+N5RhL+2$f-m{Wv*Oop*#Zmm}F#`FbDTEOua4lh*mC6 z;@jHq+>jeC$TG4?yvn&+$4>`n-*DR`qj($C6HQToZ`WzPyRULX>w>X_LmyAJWR3Qt zxn25ubsDpL9AJWOxY7Z*^^@&Q$rL3s-BgBs@OfQ=6qhW(c8200XJy8$w7j;%E4%Et zqp&ikxD*v6E{-nZxrO#@QNDI<-H+9F-w4I)N93`Hd9`aS3rWG|!dBzuJS$4|K9(e$ zY|nQ1;p99}cUr4wZ15C?&Pc5&&K%F2yRI|Ak3oHe?77o=&1GbXGF)W<9-sDI`s7If zowfvT2%An2FLM@W@z5z}=A91^BQ||jikUpJ_z>C<&Lt#%W=*^Y8<%E5LZ9CMVnI+pl|Na_(As%$3lqVT++<1PuR-ez{sKN9`t?^ZgZ8To{-ZIJtC`hZk& zCSaywWd>I^Qn|XAuoPcu;*~RU3CDC?;iFQ>p**Qh6fR$09J29*{QT9Z{ks!p!TTyVjWh^r!?H>W*WHz&ru7y~`eO}^k2R>#AlrR-vi{Y&P^z9HfG zOjumN5}cn$!vuD@3iYXHb)`*St!R}IsWPOck@dXr=gqY$XDRJYu5-O}2%H_U@?vYw zx#!0M^;OB&{*E(`u4Ac8>nMb~zo}!!&(3_PBTnhl855U>y^sp3%1SQ(MbS1dO_=4H z*3@4TL_!0PnI%u+yV}lJ4`;=!Z=+zbs(PxO%fcz})aNA>$~e6MwlW@$;MV5c6HS$1-PAL^x!7Lwg!%J1zGl8ycgEet={W4#nO$`n9!qA{ zf825AX}jFh@SI0Wr|j``6VbChh8d}r_NUVwY?twS<~8J>s?LIV`KeAbl`J`9EXj7k zusCjguFY!^{3B`6AP$-EPfqSN6Z5s9cgE?=T|XX`bHo00QC|LYOWd;;$E{*#MfA&Wy`SJ{9%x8z-~)ix4!*YNZ514Pk#yB6s-PfMN#pyj2K^!CdcU&jtUg;|j z;w2^AX;*L_6y#ED6E0t8S+cH_t%ss?UGKz11)(%3?SHoYHRovJq2g)(bc^T0fF=GV0i+ev(hWILT?_h&;SBr&2$Zi2F{T-KU* zINzV|_2x;wg~Em4O`>Gk>2zDOrguz&g+ifFC=}{KY!1^Ng@hYLh8S!rY_jx_<1S>w z16_8=MlQ6b5LqH^B#${a(R+yU2(dMw%c$dGn;_zeQxDbi{fTo6lca&<1#W&PL&k<| zo`KD|!0G6#Qy9~ix_a6HEV_eZ14FOxLAB22eDhO=ql5H4X zc?{Yed6uwu1FwoDiv@=1ixG#r+7q#nD3)AAld$Q9tZ(z{?ta95kaB)v7} zTto;HNz!;db2ig-awaXHA8m6VFxZJ1_WF=gI|5q^{~kG4*oBA+Uj*oby*rsEK;-=p zM^)g3qU2gQkuC?qu;Jt>j~X36>cbs6cHNXmI9u?*V6ZK)UUcNsSyvLO9(MUwjyfc| zCU6`N`DqK3fXq;U`E{Ny7!SYx*1}*cf7o$6b+pljYW02CwKUflSfyMc8KzouZ>wYy zR1GzGft|re*@(!E1zCQX+UG~uotUWv&aVkA4~}7pw5&Y3#dT;@fEF0cD6&accg>ON zsocfWDeZWkj)3rq@I}(kSOu07#!Wf4?sZ6(b4(s==M#DmTn_h%Csr?m-~MNt-|6t& zF1C-TuX4DKq<@2+go297q^y5MuHB?3R>T^EO6Pjpg0YNHdIE#z4Y)sjK$j^?Jlmk~vggr(7t72q%wTW5`0&1Z1 zldT$RoS$snqK}DPtms`pA!Y=*rU800m2eFYJ03~ZM_0Qh=uIgB&m#}mzLxGwM4kz|!qOA( z$b#3V9L^j>uU06Npjq;*%VhI~J~Vwk%u$=k$XIiR=fVUYc@Lde%hUvNN!8=Ox`ORacOw!8Od7G<2>MlCqmwaqtB)nH+ZsXU) zwWB6NZ;g%i#s_0_bMWUQgBkdC^#_Kh*!ZkKd!htQAW8-zV-6ZS`>&RVt4jp#v{cGNZ!pt)Yd*T8Qm~ zPK9bt@0Z(@T^upNZ}5UD%FM|(Gv(fOP|Y~=$CA8K9;nx*8&`}5E zu34!d*w;=%0=H?@i3qJ!o}mq-5yEmujP;k%6$ybC8fK#bS3Ec(VdWV*b=X+Ziuuw^ zJU?OWDR9D-?}EEi7jA~Uo)M97h-l=8xJN3_(1A_Z$d==qr&WZ9_WE-j5zn^?tvo9p z`?|TRVIcPjIO4^`>kzF*FPt6~JyMY6%@XqXei`x;a!42yEOMcb{ZW{Ve%tj!2!!sA zlHt{n503Br^sJ&))b-UePp!k=ezI_YEp|3z9{_*!MvhHlM%107M08qBg^63>(o!Q{ zt=-;iufMriH5+EV#%0{a5HjD=n(X63_F?v;q5ITi)33H*zJzi(pl;qQL)iNb+zGF+ z2bE{&SkZYIVYH8J-w)8X7V8PlxjY{+TH4>(QmK54LxNNK%QsQ3kR3up0>@g4zM-v? zvl`O^c#}i8%ZCR`htAV)m2b$%`$6NJ$J)c3CWyhy+0aGjtIwXLm9B57k^F1rm%9Ey z!P9oYye}1i*sCP{mjL(C_us&Vp2Z}C9r}jqW<&dH{dpaw&`Y~g3W-<*Zz_Im5{&}% z+V4!HR9SeH3OG$s5=9Ub1hGycoEduvGDJ9ZfR>&;mHs2(g4-K~#5OCHrDxBcqEk!< za&uLj1$Sz;2$c@W(7ysNh}3mi?Aj9xG)-IP^~d?$nFGO?tcmN;p;_T#-?!Vu8ih_Y z=7|*Kk^(zOLPJ-p2TFksL8d#vm|x$x1g6 zTqZW_eV$SQa(b~(_-+!nE!-D1d*;-mXVee)xlBMrb~89CtU6T48d z6D30j>T*&Np-~_l%6%pYGK617EvShi{B$=g%OA0+W(c!4n-1r4ZRd}DJcMQYn)je< zP|49V#eW1bbXSf`dfeL|ZY)Dl-;75=#FM769oV=POA_=+GZm`UF4C2O&!EFK3+}0! zL_|iY0-2K=IN=RV%df%q&US2)P*K%&d~Mx)QR5{ecub4jt=ZDSR^K64;Gs&ziW$*J zP6d|9?XxQY)&^L1o0Uq#;Q8TG8|8S+Z+ajSh)$ zqcU(jyO{-58IlOIg91AsV$bvWbPCf$>QoRH%xt16$k2e}lUOy9kF_;6nVm2ld z6@(~x>v*G^qPKB@Q+F@)M*%Hp*ro8g;H@|vaQn}bXHP1IVI*cM>|o1G)OR%pzW}wb z5;Bs zvUY5e1#iiC4MqVHc0_{_C7JQ7Q6^<(x$y=xFepZ7UaAUtT%Ncc@j)?-eV4RI7Z#JC z@&s%u2x(J1ZDNHN4NPG!&8AYS81Ku=%gTx&Jt{${bTI8#m;kUMSDfsT(M3vT;h~ER zF9U_^Rv-cBlyxt9Lzi?+t;oGpPQIWFk%$fSa)@s(hB&x@A--B!Uuisle#u^34NZED zg8*dltHx!e!nG2nZ+JeqoQrhI*O&`@+7XL`s3L!R^Ck;y~DlS923FKz~&sG^wzMORBJqreR~JO|=&K)iO}=|)KET3|N5iMD)?o%kIuqNxL^MpnVJD*pzY zQX$$h4c!mX@tbY#;POd3;!(@WKjB%H!4#&a#dxJPx$I#LC6HBCyhR_@CJtDwNjR8^ zy$Q$ZWjH4%gDQYP+Pb_Ak;?5Qu!~k6Bj1uJCRf^oeHuQ(_D~94Yy-kZi##9Mq7afQfx-Ap8Jjr5COU{Xy=3BG;(=bk&)<=cx_k$%Ty|Z@8=PF3 z(%gTUG<10Al5-5Gs+VYKrM~B|859O}#w2-XXLUk|FL};kL^;O`I+P`J5g4 zwmcTK2)5scPDBnd90?`5{KP0I*hCCF2Dd8?nv4aTD8ryNtxNbGc&&*vrenw96zVMk ziMsibzlmCet!IV{dn(Q=$+N+5Y^XnftHe43dl6h&@KP!KBxm|z3Bg42I7pi(v1RI6 z=tMHdBWQaa>|FAky6iPCfXaRE54O?EmoHxeQvg3P6_0p!GHcHzAJ1haljF~KS?MZefzc~)tN{}SVn95x9geI%p~#66W;Lp;H+@-R zSF5F5ka<#ceJLm5QdIzOsJhlmN>0d63B0Y@?S>+semquK-qHvK5w_U9#$%dD2vZT` zlKC$o#Rz-}_r|CIHyN^`mY*!pv&EVo;UT#c_R(m}k&c);9vjziMYC_S*^(h}mi<5wxpTvkNzG=_U*wNJgqs>06=J@~`4w7u5M8 zR|ylWZEj&@ayheL_ziN(!ipm-x9uNd66e7~rGbLwi^fZ{Zr;=^e+XaL z9W3>Z8u!GgMRafxge1VB#m&()uU2GqS#xdEkM}2O8jzlhm(zepilmk5Wwk&L8ZQ*p^AMzhYPLn$4KghTNKFvvLxo$ffvA8oOG z^_c58kL|uT^H{`V4+9ry4oQQ6oA`C4C2m$fh?5AM0i`K1X*iLy4wpMoD6Be3B!ut1 zes7b@mo&oBh-&=EnQLC6E6i<&1}+|F@al}wl|!y26=PFY;)aQ%i2qytAS z_6M|U@pe?q%$YLT_#s&3AVNbL=H$R&uhKoIP^GfTFSkc!0BCI0bwV1cRQN(RqrfuqMix7V&9DvgV^JZ8-TD%e#)wSRf)7MvMydnPT`~TRZ0m z?StbZZvTn;@xUYvxQ%8q39fA-RgtndcPgRB?L$xTFa1fu=`k4!yaI zFFw>i)Y6U+e;CpPCfZ--4lu93bcZCbzX=_Z-2Q}Bzr+CL1x48biuRY# zUk5vFVud8S^R)?R9Qhu(MBiX# zK0>O)N@YWKBK*#EeIORC12U$~O2t5z;O`Gt6>LD4O)gT!pCGeGQJ;7bB;Mhds@zb- zBL$Q@Yz#~07#FbQpL4+)kg)_K>RAuSm}zMzJBNsSweuixVvRzgW!H{#2j>Jeh{=k( zu}Bz+e%L?x(Si7=J!1W!2|k05m9d89~_|C^3+KmKhv()7IxG1{;MV z8cD$1=T<$rEo>PGJ`s0lWWc3Kst=*k^B#m%AlX3?S^ci~O7+Cc+R1^%6C*78w_+ns z3@&|84BEmv*sYD*LDmK?u1t+V*jZzwjc`YF@`i*R68aRqfv4=7#2sEC8}p>Wo+s=i z!YBj9ONJc+uH*?DUlwxFRNNl&;-)CsQRRXc(d16}AbH_94b@mNh%1$?O_h#j47CiA zXvl$Qyk5LY&ISE=zEFc44_TOB2aM4*5hch}E?P&#|4g(>CM;QI<$a%c;3mU11L-3J zZZFyuJ>NzcDr6W$V|CC|CIhI!40Y{g(y?y5q%ZjqjJ+eT_+@W=0s@1vNV?d(0Ohv8 ze+_IK21iDCvZcVPD|3C{byPAiuyo54YkD8#Luw+m6_|>*<41}q)v8Rk;*WA#ah}_X z`Ha64%gYptF2k!y=*d@!UXrhJdIPelNI*~`g%r7pRAHkP_i?x zzEv)rA?}f_kcd?7)RcHL9Xmagv({UQ6Z&i>l3{dg0QY)unTd8b#(@_Tv9NzV$2 zjSNG);cM;Hul&yo+3>fxg=8qzMn2HmNW4`W`9Nz!hS+gm{mLUe*}s1SSKd4Wqke!X zb1a{JCRaICY{fH^c0Z$*MpLA2lu}#@hWEulTPeb98(lGlzjo?=K zW&P#qa&DuQGL2S~jV>!ntc$RW(2sn}cZ<=MEzLkQjqlsJ?EHo<+Z*k-7wz`j7(Aw~ zRKbMXIKQjUg2&V~)pjCI8zzXcbU&5CEossTn1l%}i7oAR`)yjoUg}^<)}JHdS-wr| zr*Utw#LZ!?L~pVDt)%zUso%yDSAEMz?-0t3RfjmZRNuzOarH8L5{FD9nn?}H!}%(k zqzFm&Jvtf+XBh70K|&OF&cid=(o9`#3wwmVNRx{(Z{d9_T1>ePc6mmhZ|J?KEm!E0 z5PQWaQgp^5saDqYK=_$TJ5w5!QRv2GPj-3MdTSyce-MedZ0?RAlv+rK=IA#P(jg`X zgF`HTnLY@JpkY=KC~y^8F7&PuT5a>@Ggp1nP|n#~{BeoW}pSNMSBM z{XvN5NWL^_=NEaU#{?d+2YEQd=?e}tCW-|I4;KIIcNQcoz|)57ab`#YpE{AxbnC>P zuW4^c9qc0>WzMl-OP-rOqfu~~1RLSr1bFh^Cl{oPBSIso&g2`@7D5Jou$z|*Da^zs zEolO3zyKk&NO`iU0U?VK?-qp*ty1FD~=0kOaLBleB>tZp}NKv_vX1g@@;bB zhtVbSLv$&kT@Fqz)s?xtQs-X^w&tM01_O5y%RCD^(IN06J4xRfF4-KaHsED>IDs>O zf2|`cZ%EHl!`&IOZl2uN7b>Ypk6#nD!DVjDqdz!Y(GV`?9bU4) z(F$OgMa0U^@*?MSqEw$C*b`hQL^%MwOad-1%F_^)@aEv6IO)nh!2wU)bBXlx4gd5M z(}Bu;#+r&GKM-#-Bt6_2M}$6QE51=*d7cBmBK2VO+NE9|lbBL5v%%1|vquS{SLE@I!%s+U8_BsK^--)dSxhxJ1SRCci+oeL|Un z424Ut2rOn9I-wUJlK6Z>moJle2oh`p(6i8$i0p6gw!yZVn<)(~5wmBa%f8*E&06hO z&$r11ShkwKvK{2N8prY?z)}D5sgg)$=vxE2-8soSoR>V7ClBS^=T_cuW0{h$1^sL$ z58?s`*Y7?5T+pvIQ@_b81tCWK4N$BM_%v{Kc`3JBevDo4ppD_87fDB431cdq`cLfOJgizSi%eE_U2eNFZ5(G-OCoaV=R) z__crbJIlx=SmZMhab^7O)daU9HhALM8@*mgcwwAv;$n5TW3xY4??cCR9ZD?Uv#HE= zX1N5b4D^)O3I@HC*H{=1q2M%>H;&6(v!x<-4Cq`--zGba^S{ZLD*GozONk_bPh}(^ z>r&4-n#>ocodim(PL+su@hcQxWBY3UH99eE?$YMQ`@|(+q2SQZLCh&O7+qu5v#7KjBh?EY1sGW{x$S zd5vXqN-rI39hTblptm^|$-&m4Ov9bCI2>!3fL(rBE9@fS4U=^tOjpr?@P`6FK<&02Wc~7lghXMo0BMoOpUO~}7FpoU zqovK@S@8t)gd?FAaUOeeL&|G==y*-(=ut6{O@@Ax{U;7IXXD|Ht#NwwxGL*qjPhmd zD<(^XC*C(N*}8#bFO6&`HHZ={VurgK;={>*#jF#a^7S(I*RGic8yXz3whET>#)h)-f$&IK^;zI2vA7Mm&!{Rw;E{2eJ zyGIeZ30$8^o(rMb@Q*CaSlS;&hTk=Y{O+HGp)YDR+D^CYSg^L8Xe8VpLDKva?DGT4Bj54qNn94D{h(B-dP2ZIS+WSRA^ zacEP%fS`_!iFUMHpM0H#psC6HU0Ti?2>P^(ha*ye$XN&pw)%WosO~Zac}vuPg+#GO z$EQ2(Ijg`c8H{?-5e@1bnD__vjIN-^bAtiac^{nr5Y9 zpbZFc)sJsoX*4Fop%bw+q!N1WANR_elz=hNE^2_7(TTRbs- zBEfc?a7*`*E0LjBB>x1NJfegq0$Jm|6EX+$Z27`j6|%d@!$vaUpq?v@Yf7LS$ZkAx z4ME6&xaVK9&4E~vOcN&q;bKJ(=pJV_TfnR@qks=wri%>qg&+rzuYG1yGqwpqs#G>K z*mZ8$1ReQ|_wTU4WFnz*`=OZR&tFWku$H7J{H$iG6)E!GqJ5rx3JN@eR{RZZGd291 z&JePkB>Kir#Y^-lYIAD9!?XZ`<1pyqNL6}7$^R|*pUO7`L`2`v>yby$O1<$CeM7&! zVtfyel`B^hblk?W=G>+{uoCasNi6XIj)SQt!bFvL+6jiK2XG0V{L&gG{`T$U-@@vf zc*f6?`jf;A8#K@-DDZHcmWa_`@k4@MG$72Sd1{gOd?DX`)coW!Zb33$ujUS zX$Jl!#jU?&II-|aGFgdFX%j^MGUBAtpX5<%bJXJ-9?+#B=+Y*^M7r>jKe=RyUrDOO zPXtlo2O3S{hnyr@BSsMoEFV69aLdsja4VY9AiiaeS%2E!)bpRy8D3bfKe8_ZJYYMX z(=P% z1GaKA>U|N}?xmUA;ECS29oj%?D|m%x=xA2Nt7c}?hgA9^hqOR5{yeuif*d1;-l{*g zj0ihDER$NezJ*;Ahmq687HebD>z-kgD?gy10oomW;XCYqYQ@9nnHYAWrz=WTV}Ff85&UeT)5Gw)bfhxsErw5r4xp zM#PFnA!%}*KZm{<6{;+y;}7qW*tHz=esZ$w%4i86mYJL~= z&F|tTqHmJG>9bP_BIkT^7lbbE=BFjLb|fu9=Va@r^BnBsP>80WL5C zJgCZMnqPDiRkvhoy^tMm?NB-*+c;uC>+7|ZdgCQ~YzuGeCaN}84%w54ghSdy)pP7R z!bJvrMg1;^VX9K==xXG8B*Y!ZWq-x)q2Rtiygv3UUT{}<6}!$A9|BxS$~k@f7;(v`LCC*p6S*v{!Nkp^_7hLZ>+4pc#!}1@p~j) zez>TFn2>3e4#BC9*PXLTKs=jxmP52_zPRE&cb!wx=1SJ!hWkSG*z!Hw;Tu72M8bpo zxU=8X_0Pj53|TRK9uY8c{Wt2**PpMZ*Z=y;!}`CM-y?J$2lmXe^0icaO;pXMGVQs32fN8+aa@716Y6A}hpKk-%gOuQoW!AV4&4zYw#lI8XEEhCrg4t3 zKBFYJ+p1`n!W3!*^DqmD;qCZ0q9C?^&DBcou_*!?fvgs|&MM&G5iMh#l$$JM{pZPd zV?v(u!Sb*ZYD%1A@5Ou;~{@&F|sbs(Q3`z~+d z4zv#)s)|Z2ql1WtF{|>u*mafRfk*pDqk^iQgd9%~-x8x0W2I53CM6yyS2-)`DlL-+ zoUWl$mPb!St>LrQTRB&kB+Vls>cNN{(QAB-d?Z~5f zBA#BAoQZ22I?)&iB{H*bSP&z5R6-QVEby3rf{NvlTxxnoeEF3~G0{;8$xXBo1g=A< z*t=2S+p>5VmPHRmGKwH{t{j*2h^>d^m*jHTiTT66W81`&n==#-nndqZfh11S+&x%} zl93&klP8fc3tgtmIm7VMC9|f@RRUx6u}Df$Ag{Lk;Sd{?1UQ87T-TwImQr^Lta8Lp z*U*}29P(o%%W4(NT^{=;Sa4cVuG#q~Aw0B&UOjocad33H^ZRKvK78|ao_!U6)o#Dd zw$~nNEjQY4FD7)7|33A7es|iNf>LBNO%{U}X9ST_V6qOAH*3>toz1A%u%D2BiMl{D zvSPYqQ1Pgyl~+^gcuN!FCK~I$73Ou$C?ckX8tD2Qa$|KOO&RYJ4T>moQ-y&ab7HYr>F9 zPe@$Y$s#`)5DRx>+{QU=Ipo&t$|ukaMfT#jU7nF`da=Ek%neG&jl!t|%+%-0AKd(9 z{3waglUy=BiA$f&C&SAgqVo&=l^N*FMFH<{v}F(E`E>)!jCST4gY%4b`oVtQ9eP?- zzcM7a<^F79UeY>>IaTBUF7pnW60%{k6Z#PC$D|UNhIab+L;Y2GCxwXXj>Vqq*0(O zS~RbHIr9_`o0@1AiAI6yVG>_6T_)LDW#khUsH9W?##0CS5_zj&F>^mfVS!Q(hGKYG zk`@hwTfAZj@!4&%Q9AOu(Jc=er0;5Nl0Wh z6DB_oVT}qVI>kNiWYqVsRsJqfdp^~e`y%nwJR^tpWgZ}ctv>RZ);2RSDm=<;lGP}; zkm<~tYfe2z0qRyfR)F1YnQbE2yXLxrvXy^D_KT%7Yd+0%!RW%vol5aL4hqzv4c<^> z*W(rEph1UF7;1dMmcyB?o%ShwFUx~=#_1-3Z_i`0Ei}2wQleRtR{Bl+jVi^O{V4HD zubWzm$XU*pAUJ6P4V|3hb*2z2Rx>wK-Br!-&iF%_%CvNfk~rz9;AtF-l>=E%ZBBB? z&x?r==aE#U+k{0B7fQhr_@@rWB~Ok8qnLbzEH0j$KLR$tGp>lTXTbveCm#w6i!@I_ zA00&el*kT9#1jenMwBo?h&|gMx?`h9Ji_l5)Je1S;gD~-qQ-5B%bJ2R!lHQXJe#oQ zQzLvqpu#RcA2K%gorUXY5QV<(Wp9Dwte6#F?ry-=;M4YzHo$ex>YEo3x~om(pS~ z)6B=7-|e|7f$yy~-7K&>*Kf03{?)YF+-lM@tvbD=1?m$VAfDZNqH$vKr|F{DGpbCP zirn*$r}R+D7x+FL(I`{fyQuc~Erz~zayI|Cw@%JxoxcbMy>)VCq782>?v@jSY$&B# ztDB7}YRouDl=dh==(FDu!+z^r5hl$%;N_g@~j*&gLUsZl(B{sb%R6h^K1db4XKWVE#(` zGY%_Nh5uFqizJld>B|4}u_H&f@T&M!mOwgdy=4sP`d-h7NH|mwpxiOJ z!Nb5M%TS)aS*!i(`8K&=O7d^bUjsjkeyj1GY5|V=vwFTDe$J26*}*eSbIj8n^R=%G zIpX5-#X97ST4WkzN|P+qp9(A-nm#$_m=b#BpIWn=jW$X1RVj5lCQaISRlLjUrmHlV zj8dFjwFOfO?2JGwjW?1R@duSw-$x3xsrU;`^+T*%v?TqxrTg+)W99J4(|Ha(D7*Kg zIE%azMb6OCBd3R&20e+tCy+rX^#Hk=_#{Vsi|RJ=iLk{fo~@7}JoXtifJOmGKzYCw19lv=; z1OQ!v-VN($(b-dpBliE~m-dXD#LG+KpO1m&pj48L6v3uY;V#%H^sNEi?wri;MT;l< z(JBwx7WA}vXP&g6TPj!DOt*9U&$@o^`R7Gb#TwDbA39%%&Ed~R6>ADr1}UoeD*j5Z zXc*^R)=@ab0q|KL+rA$xdfdFq$h~ktwkxz``5`f=6A|-f=z=U_nz?$CF?&smCR52_ zCs>eMvbrzT4Z-u=&V+f8saPXbcUk!16Z)QukaQDtTk!bF1 ze1NyMfTtnNZT?15yDe!4Pj~!RGlDCM=oPI?xGf5z$gkou*EOxiH9JjDa6!0jmF)S> z>006H^5bM(Yaf^bb5l?o(tp5&){a(J{LahMNk4tZD%s8~3v8$3}DA07HO zanV1~kuU1hEitf9^Tt{zLT8kqb6*k`Ou}u2PufW~-m4m>i`r2pf}Ce(nF?^i4x@j&w0W}g zb{X|YL+rsFFkMEbY5qyKm&r48>ushC_&eWj${_K#-gYJv=x5q~W)Z)WNBz@@VaFOy zlEGV;k_E|L$n49&Ntc{O$lrYYCd=KTG5v6{T7cMX#py(_cP&OIcK&x3p9O^Zi;B&H z(f)Me(zhpy%j50C1xQOKDUSofZQ9sH+r;9D9;M`5I^I5fnlatZAwKi*oh&{J#`wdf zXFguH6`qrz-nHzU)c4<6bmr6LFDg0n2m8|rPFaa+lCCL=(l17UmMw8VkJ4F)=oH1X zcz{1#dKTk$YxQ#q+M?oFr0J?!xIQ({seA`Wlb= z#EV42peoqwamOY0t{=XUc}Gj99aK;SkbFwFd4xCPY4E(u$)uy97p3r0F zRF#vsE+?VoEX% zD7Oqq*+L*w0VaxrsKzF|G_|ELvjoT#)hwz8F)hnqwjxBV4HOCeEP;Mdy@*=?!$3U0 z2dgo);y554uh_|*@ylukh<(VFZ$GYVkn8=QiTCEG8gQoqTa2V!9uPR3$2PJ!dki7$ zB(r_E1H3r&L!}6236wfV$q(7%|xRT zYc7-P{MHf4$(jdVE`D`#f{4T}VJc2MzYb*AYYU0~@ zn4$=BmQUu1!b@<=q6VF2qCYts%}O`Rb;R`$%878FZP9U9Ig#$=Q#IxSOl18;#j)=b z!ZXD`GkH(v9AaK7)Ew5BEgfoJ{?nQ0QBtU)yyM&Ctf**0W>hpSJ1Q#5kjj49EU9x& zNpY^!eE!SkOU(s)=c!Xm^0U$d5E^1e!o@6E4r_r+RsdYYlI2z&Z5X#3s>s8>sDT2w z1xhBK-X^UNer+NOP+VhvloEjQ=l}u3nY@#r1xKn#1?a(^ z?-{)G5>MwCq9}B*YrqoXCb=Q;qWnEAbCj4sS*j&ESs3L~2~hI6N9H2XlWJvYqt3d? zj<<8!Y94J!Pq4apLS!?q=8O9K*ISN!K$Xb5&Q4a^S z??>&lP!l({x6slB07QIF@ zH2GUC&Z5-YlPM{ZL!>{g&O`2d**oByGE4i`TS!5o?^5*4d^;CGCnO8cqwKw>44;{_ z6@&(G3A+$Or?}6}*s#i3u=KC*(Vm&;_OEKloF${8Ajq^lipA$Q0U)I}&XGqkeJ5K2 zYgNr-BHEh7gAYLah19oTabSwDfR}b(!aeMGG|I7KNUPFZH&^MK+!7;Ibw7$msxEQw zYNVNgW-ozrhMHpi zS$xf_Om^}_sO)`=f9SF@&|xMA<%s0`EX-CnRa)@<>p$-D=X8cfM`Xz{u&Q%mIHJx) z4erZnExtsrZ9yI2F&?@l`>5CJ^%rYv@W1tXJ^jD+)s^~xG*;K@_2;YWtE=n(QD0ek zv9|IbsD7s-7rzmWaQGkfTlbY7+)whuL2%CWHMTC+%{B9RC9zZr{n_@3J4C<r$u zfk>Mb1L2{){=8zKgRPT_fwuhNkc5_l-HL%WJnW7cEdIK+f4p^48H_qa_5b9zR}Hh# zFzZh$T%(Pdt`a$}OG3TriuuxPJgHpCN2_MTtl#Zo`3wH$SpOif=?ns3%KBfeuQyWb ze|4p?_OSl%+EEzUzw`|3~IpND#bdgHtH+SMYKlQ#N?>DvggEFg%ykdPQ5-Mt{z6^l@nONllv9wHrhISWsX+ zO&GDj#*7;EJx4y!FORrzDKzU#qkh_Nxn!@a`MnAm6Z;9Ijcn{)Y$Tc>D0rhB36Y$B zB^`OGO1)4f|5qKzUbK?Z>nKNjG*;@B3_B&6DUX#hjFe`hJSNgv=tpl@55I-}=FtBl zG7MZC5n4MsKHX`X(M>eDk16`!^Ys_$^WXF5FX|8a-+la!J=AqV8X*^tJgdJf&v)Re z6yX6ulw6SzyJ+Zmqli1ZTmCR`NkkC#z)Uohp=CiIQ(~g+k;t@(BVKL_u1gt2*BKCZ zjQaQrYTbE+UwD!*^h0V^zJ4{3(?#Up$UNt#3@&d?-MA8)n7)6nRHSK}PBYq^`lu%& zAJ1BEGj_6N6plQ2+x1=7zlIwLe>lWY9}i?Qn2e5&w|6cMPF_7;VrN$?a^>}$;dosi zeM7yF1gL7^2)ll-ioPLyJwQ)}II{XnkL$~*w)ClPy!_*9V|n%azs#p!SHH)9*Pf!U z5LX%@I_l6UTte)VR{M0Lb-IjNZ+DLNPWRE%?@yk_7`-{z+&J2}0K`s?Tc;XoY{2x& zLWaRMBN||fps!z%*&;4sGj*h%e*ccD={M;6cOzc+V(Y6S!$(g(Q{M}4)PMEWqye!^ zh6w%if0q8Q8R4);B1ZaGud4hLW8_qy{$YAzN(Ay&-$(r@3TU%ddn~Bhe4HLk1$csZ zHv0a(Bzwe$#0mVN8pRCq!5<+Dd!8Rj&Tt~+k0R>WU`f|%7+}u^o)+N@;*u46=)miR z?8`0Ri$dRZ`K>MQnSs+i{!R-xk>Q%)LtsBis#25GTwAZNOd(z3$Yb(z$b@y4ZyvwR zy32?7^RC04_T8^RK20;NK|+m?&`4i_PrgrBf%-6R%|gkwSdxeSlxws2iU{3m!3qPw z%awX#3bmyP#muvhaL=UpyUa)Vb`$nRMG!Y7g%}+t3>tDAfOkr4C*nIkBR+Vh*dm0{ z3r0|((jWEsCztuiT=KghQ_#VsB!S+Dl9XI<{hs610xgg;_ja$;fWUgq&T2JzK0{0J zHwt~1JgpeWCPTl*{)3i6f^F>b+B96^!o?$NNuOq>QI6zPMuFKSqrezrF|7=HJz|?W z*o7U#Zl(WU5PH!kZa_k6MnR!9c#8htSZTaS>Hq8X=MVQk_wxJtwe}2MIm0I0Q+6Gf zMB{+G8Zxq2ebPkFYQV*{XO#mzs|GM{(rPMNvW3!hJc6pp?ID$v0~z1HSCY@z668h` zI;K|SDoYIPm$`cm10ceXH6N4j-ylHG5=U)hoq=`ONYaPd{ z(SCIqRSk>%mm`miYjia>9^je`JI`>RFQzU046mg1aGQ z*Nw0V$HCCTw)pj{lxshFIsEN@x0C-Rg#T3e-&k8+P0Rna)%Dc}`F|fjCa-JHDphLr zO>vc8O~$Q@r-&V^L}3)JO6fQ9P!c=}vExM*?nUcR^`-F5YWHzSY*8w36!H{mf`KZ} zYOo>b+eZQ=_EKH-R~zPvS+Ay@0;<2gS}|X+7gAGVUsWnI>~T9cfm9Q92Rc{;W_E|u za$$f!o<0W1x?^%@8PNOXj>1~XbQq-5&age|cAXnkHDX|DBn4fkE?f^f z!|e{<8C3aJB@P5^Sjjz2SKJHVn97A!AOol3E~bp?6fkC#! zaZ=52cjUTb^zRXNovuUdky&|9_$0;DuYAWwG;p2B=rAoFT@&OHQS4sa-pD}C zI3PyL&%hckC6x^!TU69c4Xr#y|A`tV)3S*bL6Al;ijeUe@<&lH0`q`@>g+)s{@Gyv zY`{NP*gsd`pR4gdU$TF$Eh7?Hl>?!xW7it-w4Gp1Mh-=Nr`IR!RD$`{(jz^bXIWX6 z#S>|Uo}x^N@d>gV`8J^%v#DV>Um?ef(30f3MuA}}MXskYsG;LADA=|eXvuc2G~g?7 zGpCDs5pNv7Hv*FZk=KgCg_nk;q&YE;gK4myPFcqxu}79jI6Gh)f%`xI z{r{sVBA!h=3t}c21UR{h%RJAIkV~*F-?7O=BhLnX3I=L9p*0$cO#aK2N9elmxCGJ2 zaa|r#EeUnq_gx}0b;-UQ50N1Wdw_uDd$t2XPz>j`zsx8It}ART$pNyF@kmC06ebf; zo0Uf$-;Zb%;=ttYbr-I04TSOY5i+L#&C@OMSE5e;jUE%;i3&ui>; z0s+_W@g#-{g6sF_1PJUkgCKsW9pRAYs4UE#*p^D)HW~V{eF>OY!l^t$?>AaU2S=P#*Rojf*dL*uFEY`nybKjTARfQFyHNM4l)7fTh66IRNEltP zA+ymol}1`46jpRVhUMT4$ha7cF(BjeprVjTRNKNd4`S&1kzwJI;E31tLyKH6(aEIK z#T5yiuBdt-U2==S^rI*+m5VR1|HP)ZBc}v$J4#9@w<98mo{N!3ahF`!WazVTak{as zqmUH*JE1#VFu9`MIi5{!CVe`J`qmc{F0n6ck1JPON3RA>I9NVDd&SKO%g6E`Z(l`( zM$2gHl}#!I5N#(idDxQcX@zYJJBAxxWIuU-~FK!lF%P9Wd`Pi^Sfy~bYMpPkkG#G z+7~JBb>Pq;zG31XyBESEU8)PKv5?#G>;;Ip?4d0Q1WXQCxc)2E%tXhYJ62h2AcAkI z?#n<)NL*`^e=#;=Z#T5RFn#@sEF2Z6|6t-u1w}|vS?)u;>{&u*e^HKi3j>jLCk5aJOB!NgOqeum~(Yv4H(_#VWS zCBDquo|y8Bkek_>8LwH@z;{Vg+y(JI7|-(dnu$-e?vv1olvk02Co2d*BYx^GfgTMA zl){RGzY6`1l-LzQ6FQ<|bK~TMJ?*VV-`OZE#y1a%b7)wKP$i~^9eX3v6M6vG9a}z> zlQ|1)91%H%@e>t_hHu)VkRi~BpPYHhF2SD<9j`^OJ#G_rUZ+j8#slWS*>{^@o1O2} z%a`?f1u2>cx~GzgfS)l=Wk31)6*->ej_jN*RHGx3=S2}#2vtm7e`KQ*JOIURLkU@A zpiLoq^`{3y^j6a#54M}Ay7prAg>kU5YKSsIi59Ud1dmIU4cr7%&B<2tF;*^XOAjRL%A|Tp zy+|B$m6kFUmhSJgP=~Ntkem<$!)r|$ymU^X0~QCFmpmj7dJD9tM*LYGTS|eT*j-hc!cEfyNcpSHIug%` z(k^dVr9o7HC`on>iSyZr4x~1&Xxo>8VSuIvm^1% zFuzS9uPkV!8Mu=NA_PN{$r7WOz>FFk*Y7?5ykd%Es}7+B;Ii%Rlx=CE-lYEQD6O%V z=r`u&JF)-X+WrsdPEH0nCH{A1wVsLpT6@U$NPna?E#!c_p$BE|E^>JBP_*%>G2i>};_c{82N*x(9!0T+%9coa zi)x~8+;|<~XhhK~o+3*wA>!F2WcX0uCE$>QUa?in{>*O!*XOU0HK~n@$Nngi;7)K9 zkp}bYm-Tw%`yZeFVXOu0zbk9j*M|B15A=^A4hJOs$M7E> zFUS}Ae)QJw^+;&C2`2N2wCbdl#;{Y&at4)RY&3gL}j>n787IL(lJk;dP z|NY+J7ZIrhnKFbbMU4?$$hS+};e%7P<9quKjr?%@))_ic6RlR@{^<~VxJQP>i=^%O z1c%sli5n-uJt{}|QqC4OcgE9QEpB<`pXcQFcfa;8=EfXmE5)LV@(Z~8D}NaK!-fB? zFKs9BkVdX7H|ex2!B_FG6a$sI?9btWhpT@5_qXJlx@ zfCS4ucmyP0&g2pBgD$cEx|ixgGhW=4dOpAfU#O=#S;TdE5y*SGOo#4EU!|v8-}^=S zpYrNEwX>JGE{0ETZDH1tkWCE{-B*B6!VI0=!Tv1w`Dttdchqw{qciesw`gcZNF~0# z<2%;}R{@FaU&~cMUOg3!VQvN{!yp=OJ7IbwvYpWoszC{M_58^Jn?gWnHP3VSHYKP^ z^_}l7d}p#M9>6&)04R->L~ssN(sj17XDcf%!8LjJn;CZUfHR@b^eKT*BTXnHxU#aq zGpCWC(ygRYhQ|un{3_;^Q+X@I^9-a7teJ(dDBI*Td*M7Lghj_5CDso+V=tAUb$-#i zr)Y`%n-_by1q^Kn^F(zJ* zLgv`gfmd?YY*81vgONb1)!UCNg9A@8aR?b9G-1#p*nS^65jplODW-D{fqBO%S;(>M zJg^gmhNp(%kG`9H_}%^Q*7yH1FPb51^~@UoUvJc(uV>@`AMXF}<(KRKCw96;T>DSC z_0LbXS88kJ)_o43GF26r@8&-rJ-Mm#i*Qw~D&q~XK<|hNbV`yzS#peAD^1E!85au6 zG)x$Bel(Xp{O;;^Tlue95ej|4r^x@cwe__8Ute2$@c+J--yQmYCyZKuaUbx6F-`jJ zqDTK*-S}~TS4bRc5b+1pQZfjt{>%IHc*({QdHM%x^R#SQ+DRiM*dC)1zgiKd|3|96 z;Pv&j)bCBpuk}WbO=`qT89%|-fOrFbkpKRZX;S}zO9x~TdPmDCt%9;0x9Gf)MX zwZ~r*)cRgq)*kH~ZGW$!ulD!q9K1VeW)FRvr}v*3EVsxkkPH=xs5PRIKfK`IKr&YP z>hY3GXY1^#f(MJ{e~60#a?kr?T<{PkM}U0mgua1KXLvD}pR4%Pa>L zf6iEzfkcj%+Y|aPWc#|sm<{z4dJNyZdWD|x6`mPi;TXX+jjeMIBjIF7WPHmMGWo%n zL3k_?pK@%L+?7Yt`q-d`=0hr^zvf%UMeZr zU8fRnE5x&T;1lduEs;B3xGC`r;Y|AGcnUm10j6Mr#jeYXH&9+8&7oWcLZAa7u2k^q z9Rxh0z?+Lh9tGmP1bTFQy3;HK;!vmvjwwV0{TJ$tB1FI`QsjN9FsZKG5DV3W^IAeHMAgUtSF-Mp z*81b$ZO?z)@Gv<7Xj=SFV=Z<5Tdg(nI_Z|NTVq zLve1tqEYC98U0KR-3|<8pY!8~zyy06=kcu8@)!3YSM}6Kl!TOLqdpjK zp5Zvd;Pw( z((Bp7U24BS>*3!Idmq}H&WF|4Yu5g|9^Tvig10vNo#DIQhn3yY!QN~4V9$0t!}IZn z-&^j-t<6>Zd&@uA-=y|?JLots>z$RC)Ed9^Km2~=zx9s%t)Bnc+S~nNt=d=C@Ez-8 z{a}ByZ>=7!9`3&$Yz=n@o%inOxaao-KI;ct@5ZG4?&i>Gy>Fj>eA9M69-Vr@@%!D6 zdmnc`I`3BOv(w#8_iZCs!`mBc9|wa*d(~Y%-05E*?w|YT`A}kR&hGQGy?*=r z+V36gzrO11oqvITwl;ci+nfE5dySw2{qEN7{nx<<@4Wu;_rvuqXM?r*+!_AT`?&YA zZjCqloxPhYd*ys^u;-2v?c1B95APeUb^_`OxPhOT4(-f|C5eM#FJ4s)|_@3+SI z{p*IkcQ!tDHdj8pziE6tJ$S>uO~5^6bo$uu?4P@b*Z!M>RZg?c>T8C>mt$v>c2?{! zHk+f3ApZBZ|K?z86X<{JYzz*EJA=d1gModzdy01t>YeRY<^1;#jpOsp{-HN$ zy#2h}IQ#t^zw=&Wd#`c)(c9fRTyc-yj@SNuy1n_K)A+Dvt=RtA7l!BNxU+KOT3>vQ z^H#mr*?Z|(t1UKnZ?>GH>kq#leX&xBb_RkMEK^@d0?^UH#qrBk$es@4k?I`{aCOcku4? z{L9h%*YtGzqicUYTsv*_cTR`>=yc`$OY8m1tHUox?t8B_woYFkAMU#2^V6e)x4m4N zhWP#KerLEl?pz1)zrW}ch~s!h*!UZ2`K2RAKe?Wlcf4-a?G*4}?^?X>ELxipnDvl)$Io&_3xcz;84*VSIj z?Y#fx&Bwj-D1);%;CxVDJ3bvW=;6-M$Fu#`?(w<1cD&=hJzR-ipVnW0`1pBu=bg8C zcDDa|_rvcWS3d5w_Uyf2wKY6)$fhzW!ermZ$J?*lo%imp{eErh!@zxq&vv6$BN*6cuQ%}^IzHTO zefYRs$Lr zerL5c{`mV*y|en-Es%3N*1jEm{JnM1UbVgV@7J!Z;cM^X{>PKE!I9hXKGaVKyKj&8 zj^3TWx1PT{8?0FS{lj;w=f8h+UT&W59bUinKCBkVxm?_4RJRwV|4j%4oTC4|c(J~c z_Wyj|SbNa_?&Eid@qan2@l&gDDV5at?01R-veWwO#6UqkP7wY^r+pGfA8`vb9K#7k zPDF(wZ-p+D;N5f&y# z6!mc=?+qyrpJ8)_BVr4$d(mqyR6(NzVNA3k{Q3uEOx2yFjU10h8;G8-9oI!2f-FC9 zh>fu9-SI?^ms9SjXf20IDkg*Dbct*y1Q)3>8;*ZP!qBlforFC|^p+R{pTqeOhI`nZ_Y0{&zNY}57E#M8PXAUTtrEBuDgDUoowG4 z4T;BnYMY|RB^gf|cW3sTs6XnMj$iBgVKN5Huzicx;6E7>8!))qQw~|c-`Yh>T|Y$8 zDDp!GyHA@cf>m^5`9rPqqAnduM}*eac!bAJ`(o?uS^IRSb#c~u`$|Hb?swKym*5OU zYiGOt>haFojrQrmR(ofowY7h7*4}9yZ5-}2Q_oK}+U@tpt!-}qB@y~hz7%r9t4>3R zu8MpV5^VKT6QSLX02xLXJN#1Yy6?CIeL~g8|EG!! zkD%(>FAy82Ld*c6YK%)k-^j&d62iq84{aWk7#|p;OGtp?>&o&tLI9PblQDr#GK6>( zq(u{;B51R~K*JfM3>On(c$@gb*@6qpMi$;OCa}D~O~eUW!R%4dQ{n_?z(hwxL=LX4 zEd+8hnlKfCdH3O$_Y-@WN55M~UaGK5E#~r;0hcn$GMDZrAqg;q&JyXZjr=Z3@6JjN zR$_$y^JYF?$>0Au;GzAhxBpR{zRzs0)b;Ej7;znCs&C zMz@Ym{n5c-fA&zYc>=-G(lFZ&eT)6L#6PNf96p4F%OI&Ea;3t%CI*5Pd29ZyBElvG zgcZeuWZGA8koBV#Q82rqpY&qp%=LzhTcn%vKF=(pe7Fb+Z~KJJaYRX& zin7gjKo-F{S~mlygFS3Y2+8Jg>YvF}N?05Jv{VW(rPqFF&rc-@VH%Yt2Os4Ig~Z_I zjw?y`Gh>ibDhj0(wrO|pIa3g7u#`BR2T1;OrU1|FO_rGLxQhwo&JAE$%$=zGO^DaY z334eBtCJV0lk^X`{rRsb>wEm0mj8Y2dAk1l+Kcsv`~Q3S-F5!=Qm3&Z-P&>;;zfDj z7IA*dS-bfi$`e`UtehOR_*krn({Vsh^~kr$i62VMkf$+{4>`zK#%1%#v)58Q-C1t= zVk+|k3xA)NTRyoZGnLnX`%w5;#J8{Hq?#ub8ds*oiU`EW4fl*?-)58XXe2H@Edq!q zzMP;PPeDOVPHH3hd9vq=5VgKfWjvgb4&a+8+spi>$p4kbN+ad}wOVid?D^ksv#~B_ zWTk#wra=VR7-xvUoV=gKvtrJ& zkxjKEP2IQRy{24fUy81`3h^rmD=C6!0GN)26Z_h%;eOMgrb6VB=ZM)u{*a|&{<0!p z!M#nK-%JBa;E;*+)8hONu{W+{V*JwaePv_&(l}}{eh(pjKk@HY=f5J0Yf597cK)l^ zSJVFAt1A!pfA{jsNm4Q4{$PQY{+R;@XG#6$PD#F7yuDAoS1NH?G zWco~fPkD@+={Ln=NzK_oXSm(LI|DVm{ELtu&4LfVANaeK{O6YRNul5Hn|A(NU2UZO zKc3eg;=k|Zcf0r>ag|b(qv=Q340BOhkj+q1Li7PK+TRR*gHOUM5}KSw)#(^j^{@Iq zjhd)hPdw!Iv$gelgFBEt+7_pYHvlggCIZeJv3sR(Yt!jF3f(5E=7uZe8UULwSLyAQn=QNjha$0kF9hui$9A@?j zwn<3e_nnBi4kP6!<(3f<4|`E{xw!&09+PL{cu3WoZWJKboWT&FX!We<|L!OO}7( z02bo;Sys{cLFHeHNi{?H7mZw{Xp&pZMPQOF-$F|iZUHRfCz4DQlkB$RFwY`cy})XSG}|9H!KFKVCmK)}Z(F&U|<0D&vsjwT8Zbzm;2W?5Lrh>dqNR z~sHw_Ma@HCx-Q8`AGuyr%$N*_-lqwo5*N| z`OhpfzsmdYvC}jf-~TJoNuOXh>Ys&fCSgSDZS6wDv(|X4MsGSc2HRzFn-`C1CS(5Y2Rj;W!P%B~$G#|3L4t10jyt`r51m@WP@< z=y;CHq_SyN|0@NPr+}c4?tv$QFotNgjvg!GAY+6crqX!C>q~NsLIjK?Wi_{otwZrGCol`PkC21>;uRnCfP!@&Bc`JL1 zTv|3nCS#q}7VZ3Xt>Sb1EhvYardCD$tax=J+?M98j+0;=f=n;Z>r9O3BEuSj445 zhd117Jf?SbpS6hlpJ_2*)BOLQKhNa@n1j5FIWDb_;!xxUtVo=BRToiO3r0!wNKok zN&B_F?+>a?1fS3mgsx;87&dW9M2rB`pK24qLugKHVlQkbs%EyLYMD)=bY*wFC_SM- zr>fdXaH7;d6I1Ep|Dm{joVD&hgC%S6pOSExP{P48Vdo|Y3C{BueMYV%KXt(mkEPa0)X4ggW^ z>q=AEFC>1|o%Y54ar;y{L&&1q({Bi?88|1$tqh#lGghnSUEb7@bHpz?-j_Vu&t}?~ z!>pl=a~5+(t}&z7lu_D{F`F4<4iko!ZHuSbGA#CAxY&9uxC{OBpGZAmY{DMEHI=-P zmMxpAg)xHGTB7%upvYiK7hAyu9AI-Zh%J2ozn%W)()@_O&7% zfA{gbtNMN1ob~gj@GMocPk7ol(c5-CdfRSnwa)C-_au`|RWEclF(~7QCxR zTZ6{y_SyLw9vp4I`~CInclD!IYv-tcw0E?9x)p78+}6L}ovm$sT#0V*UKF&xxT}Xd zuQ$(rKiYeD*4pe08ZB$p-ab2bch242R;zx#+8$VM&ff>Sr)Q1LPTk%-JU`!kw_>lh zc8|{6ga1E!Z@!zjmN$z2k5uolZtYLEtG0k(NUAG!dbbq7W=Jr>Be?acvanaM@mRJQ zwRLsg;ob*0&vG8+JjvA>JON3i_R#&Eqpp^A2e8-hTfcc)H=?TFc4jTXkOV_gRf(Ue z+FnsdEuEKCNzp`!*RB;m5)jX+vw0*+{_R2%q_H@Q=x_7NZyh;^1cm3iFq_M_#ThqF z0yeFgi1T9IEPKC(mtB)ir6UN(0f=0)rphitAoWt|86Zsd~?e zo~TG7@{9rMd%|)sx>nS5AZgZO(bDc^|K?NA-w)K*t*y3iriMQ|Oy|PL^v3~G7h5%m zX8OS8AkWQZ{dTQt_EG0=cA_A0VyAnJ`hu*w+`w+Tp&F?ifbcLJ!v!@iUad#+&^$#*;0gieJ((` z?H={Pu03(ht#KFaXZm<&4ew(4aO-J<{lW;exj0Dn=GyK_z0^Z}YqxMxO&^XQl$Igg zcgB;YzaK3;`ydJ4KvRuCQw>kkg~>u6iw|vc-wVW!=y}^&N0=FN;U221t=cwsY9QXL z15Gj4hB4`PKS8d$kle9q3EEK`Tpz6Y=%9Pn!k9;nBnYy)_EdQ|Yiru#sQRsYdBCY~ z;Hk2nc4nLiXPn*F=hji}OC1zgeTAEJ6v0}U{VpeaW^@PWsL43v*HD zZWiw3s1LZ2+WLI0%_4mg*q`*k*v(w+W+8vxiON`ot#Pc+C0;!WW20r=FS#*+r5Mq6cIY(zQPLQd0{o;Edk zd#d;CjiRQqsoMuxkqphfO_jDb*Vf`UD9mC*)p~|*_ZOTngKe#|JW4lct|im{-97U7 zqvUx#OB?r>9pO=KYkfnACffXNCkmcy&7(+B#AqrkI%+H0$VW|@3=CUW7Dt1>5f#Od zl=WDbI_9;ZO2K`5uZnk(Zt%DMRK4jTA?nL>_gd{NI#V^=OM~&;I*QIxvlcVm5@)W^ zmF5<&YTmuvzJ;=Gw->FOuBvL2nJ09mffdN=xGQP=uIDYT?~iseYgt323%;?|M1>ba zeIA9Ad6Yi1xS7&X4@;eIYwk^d>3`m-nl_c4a#TJ){!^u(Bg`UhyQ<1YrrWOgB zW_B!J>{>%BP}N&u>1rEe7hW%0#IV z+M=ot_}1(w$@fP)TKb%~XiKg&??$j~#fmTOpsICDKI-*6%aI2+TSMqNvdaaUYHufs z9cX<~wA$i568Mf4-0ddnUVh*rX!(0y8$`U^(yq;;dabp&wb-(z$WP%!F z_cK>p%kt+Nqc3cid>U%JaBa2ijwD1g)wA2?x~qx2^l8d#oZP+<;k?@w+nT;S-nGn* zJyQM1SSa0z6sSA7;~tS`&%{;K*A(@r_HAF+qn$b!Z9g9bGYwvaii%fwx$+H69Lx)bNwG!QZ;FJDy8@D^++e)Q-ZpSx1^d-qxud#>hM4-@%zX9z~3>f?i^Ylf^D5mN27 z<+>fKV{Np7y@oy)ELwa^4ZJy=cPB>sW~%73YcwBkl%Xj1JZlEqX=rMergauaHL#SK z&!wVb9-${ZXujYZ%GiOLc7%#;KeR`CW^NXW- zFZIQq8jR=CK+{Aoa;Cf%n3}ziU0a3g#X)Wv?!!^-7;Ua+DRx`-q6NGQiO%w%YE!BA zfokfx4q!(JVcQ!{=jLuk50-tghhD?9%f5J=1m;fCG+&#qI)=U<82!6@-CuF=C>gNh-7BgP zFEt^t+MKBHvsh7E*E2net+~5j_6=7Vc-lgfRO85V%2DK&9e%q!8m<;-&}?%Z39*9C*MqtsXq;y+TQ`r^9P5&k7E5ctDnE>0(FEm;n&vBV3~OvN^U*Pp3kYPI*W z%HMo5d#MZsv1Rqg>xGk_o>7jM&F5K}5wxhu^7zdhXg)_w(BKKBZ z&b=F}FMd*n5mf!CD+T;v%8#9;d)u~JwxX$Cy!3B*vG;ku9DKf4dbeGRU&PD6xL>x? zaM{+>>5z}7y8WoT)?Qyrf+{C5Y-8DSV_WLyow61<7>stt(fB6wi@h-rwOK22HKFV4 z?&lcpqP^J`9CaXc48d+|s@7Zb+z}1LfjIP3aUk3*^_#8Sn#J%qew=l>J5>;mnrj|J z&wJE-gEusBsyS(D`L|;@7h-8GNj+~oo$3-)bt_!9Ze`t1eQ{u1OKW?swzc_kF0~b| zyO^lAiq^N~na?HaK(p1kJrX%%1pD^Z>a31x-{YmBC?Pl1<<{=r)Vh+ch6h6xyXH}Q zkbSOisKQ}6xBHSRXh_}NsH&G3$Hh@PYTRTkeG=PyN#weZ#&NNm@RF=~lB@{k&eFUX zy3y8}gV`j#E!}Iw z!|hblCr8O250D=ThHgI?Ui2u*X@BY722$%b5|yriglPZ38Nx*0-5ahbNv)gE=xc)P zTMrX1^7KI6YlC!X4D5q6w1&&!s3UbWV{+_X-?zErtR+qtt)#8^+y?q0C(Wb1s&rE; z7|-sHmVUpBW)E#I)P`P98GMeV{v5_{d#Sxw%+Bb51Sye+19U;dp2cyE97{*NPCfWIr83ee9Y} zvNhJTtv-v4g}?7ZPHe%!?O0X~QB(wRq1d}+`$p6RQ8(4uwb-%OrWy@ZA>5gqeUOe; zOY?U(hMqbLugf9VHm15Z)mnC>3R3d_Sn@7u+3{{yOpl+?jp}Dj4 z^dPsdj}N;jULHqnT_4}89eXIx#b}`j`$t*|vGmhhdJQtvP#CD^4?0M=A>3b3C`xvfAH|qRud*A7L_nq-v^6bZl z&RrX}_P#ie7G~RR!GYVJ@}g)dwjvLV2g4P%*uGL#slRluZ={aYpAJ{|rl&nBoUyl# zi|dC@H&y1Aw`hqIO)z9Q_k6W2YO1$rS=_3vt;LZpXyUBXm5q*hRD2CxcFiR@dBuG;rTAlzHt_^7o; zN6opNDy|h6z1#Ifum$AY-eA7J@V&V?)D}J067;ne>I2RbkCJS5#lR)}p1mhO;qpdO5 z`cpwzn|iBdt)jjf*a=)q$H_drv4m(W_h;?pfZxe$QD3yY`-Lh6%5ie7v_{v`Tuhg3 zZD@9^h1nLj)4`&nt;POC(Zb1GOyNM9!MPXp{3zAc83&KvjnT5ka(=E8PWL6r6g*vV z(}(HMb|$U;W-*r%G~gbr`D{ONg;eElc1Y;<^r6)kkCvzm#6Xrm--~L*D+6O;wnWKt zlHJ7RX4Ap!+Tdr`P!+%3w~WKW6XRLi?ifSCR=MsL4N})sTb9*ID~orLWVX2nY2KYJ)j_Sm?s!M&-m{$&0S# zq+6rSx0i#xztG1w#!>7*{-!H=(rl*RCOtn=3@`GPKEeSih@^+sSQOjVH)$;;qOT3jp{-5l+8FxQH<`Du;Xu8Y2CEhdEOFr{ zH?wv+R|hu_QtNgKed93k#%<`1I}=6Yk)r8_VofFkd%f&S3T%5SQf~*wzz{TL5<`8l zv({3_^2e#Qin#luW*Y;J7l+*hcKGXuc4V0T4VL$spltjz^x`#PSrjiIIR9WyXOT?qGx=NxMw-Rpkz zO$kIzY2CVz7k64m^b9}QDt&7{YmJSWn%+Q7jjgsP8!h87>D=8zKWxiu>6_+C#?o)? z6+!$at<|03+m9%i>@+u$t)n;6^qYg??%EHXNR@bjv(&Jo4fcjPvYU8Ew#(v(iOBeq%{L*w@%zlbH>TFb6@G(4%l^lubHwd0B4*;e0slm+QwGWUjZ zE9{tF_j3vHYHQw?)3$5nH#?%ok;q=X#o_?i6*u7X2}2 z%{5Kq#(}6>9dj-{n1Y}y{0&srV^{ZPJF|CtFkQZ54ZX49-@=8u=b^ygBSmb%R*Qpc zYa=ORV-a+9bHLwB6)#b>@mSFXXQH@AMbY;1ake+t!er91?p4mb(T3{op(7=;ws)f~E^sC~4My0*dV`q%{1z&n62AaCL&fe6LGa{|q04oaFBqS;F%`Q$_XiL_++_~l*g)xJ@*xfA%1^@94ColybyB!z(m zV=IGo6nO`{Pqs+(mjrAQ1j6U??#Rl>4YT+#69i&R^!UrW1Xw6BV`qsh44of>!u!$V z!`=Ij+{D8AN|}lKgpwK_1#75AQN7 z{6-c~6I2Ju# z6qC+V&a;E8VjUYic?2EWM{0Q}?KJ^t>sTl-3lKlXVfc(+=^6U)0HBwI zV2R4xho$L#h@~!~OT%K7>|CaT8>35(-eC-q%@T_mT50pDK3GK&-bf-tGpLj&}e~u-?Q6f~Zj(Mkr1X_-_(A@-gXt^HulEMM3(A0@H~~>JHuyKJGJ!;nT)o z&2YRT{D}D7*`bHXxG{PTV^k7i{w7Horh#Ph{Op)SkF8)pRYxw5NhFmSZc$tYCOc=C zb1eqllE^;YL_NdI%Q%R)n3FS>+HV1O69|}@?4cjwl{(M#l?4(r7HrRNqwMVg&AZkXm ze(W90cf>Hr*gbxXF9btn$SJ7{q{6w6OmeFln7{z8P)vFXpcs5^a;;|j?azN_`tops z;~^2HfOH27(tMcNz-kpN-p#u{N}Jnb;HSx$`1 z)H_fwVrJJA{)X3KY9Vz|efvLJPF=vX-zchH8tI=Rtu7qgmnt8A{ES&~K&sX82y&;9-79M$ zYM0+MZ|FOHh}IBj4%$sc9%yv8U=mszk4mXW6#Fp17%3qOQZ9az$)@kVJ#ox9#9B3& zV$4RxtC_IigB1pPcjLKW7v|Ctu za^;sx!Z?#n`OE!o8{Ao2Nc=@uRIlQ26J>&uXP#7!!_U8~_0bl2VMJ&hFOynkC4_c} zhtF9BjLSN?jbfEv4WA2JhPflCjf=4?IV35num~psN$4TMz>_Ep5@*TaTk>a|4M5qQ zlV&p~n2XYDS}Qb2Fgr;$K1v9Kh@HeGU*?mM{;_y2qG1y(>}3^x2@t~+o7t4d^GOPq zo|D*kn!MS2$?rx)yKbW(_eszNAwV1HV%StjATD=|e~HI2i}BPzAhzMl&lP^&!l2K$ zMdWFif)u(a08T*oY>+q>Q?H2Bp!{GL##U0cJK*7>j`G@k^^)8FMAR**7cW7VmPe#( z#l!PfSXLPerUk}Yz+I9!NeY7$^kE7?kGgEan30?5IZ=YZ5P1=h39h}X-C6h~$t@Mm z7Gdhf7z;jx&%`UGqoo{S`~i0bwq``eo_VA0{PAounR=0e)t@vSZ>{i-a?s10W$EJ= zAUi1nS$mK=n4mOvOg38`^fpNv`k2Q!Nf;+}0-KGO5*PiSvta!6P*EPU0sg#Ma9O};ZcX}s0Wc9(Q(oAA z75F^f{p*2KTF-p)@Go1>BZ`UP5txXG+q(dI2W%-|4K4Ws*nRt;2TdD+NfIt<@d2Ji@A3BJG?FrrGM7yz0GPxA}!_77-;{TDKC%qr%y>=#rt)FKTGswW`zj1 z&I)1!NInE+KH2%t><4T+1?N62BK@5->)rYKI4_UE%vsQF>-z6`*t%#x5vsz08cXAJ`1_k1*$zmnVf-pch(s5S6&Fk|Lt)kN_$q#}BNKrafdn zMB)|P6Dmt>bRbrjjXatwg>6e3+$1r26g-Eqi3lq%*>Z444e?dDr3s-n$*&fAy$&ZoFunAkp@JQ zN%?qo_K14XS+~G)j>bz9Hi3MS&GF*WsDFn>1K5@mmW4<#4^POvotMt?)q`aFVB0A9 zv7qS&;m$+WDhpavV)ZeCG#`M#K6ieeok)^*P_({-ZzOv$pCiv-BqL?RmytgC4z8a% zd9p+j;!uC-P{=`taVe&qtA_FK(0DYtkr>X+;$@k99!(w}Mtr|K6#lw575gJ)G!J9Hi<*qw=7%6lo!blPEE`+HB?!e=nq>Os%!<_^k zRq1gm^K}9yAo21e-&24xCDY0L5@c$+f9|;5^gZF+23EGMkKjB2%(>s_8+8q{%qMvHu*0B-&L9^uETM{u^GwyV?iq z(n_-_X!Mw@EC0(Rp>^ohDZ$}C(4MsUiw|`WZ32gQX2Y0hF6i5a_Wfn~ZV3xw6RmQ& zN!hGf&TSodVUm*D-PoTA+&aOEMSaOPM9IVqgit_?@G{cxZ8xLa3dK^kkM^dwAzC5c z9vG0Q*MYhdHc1*gkfc`sB>_9iM(J-DR5Uu0dDLH1zo;6KsoKi}(}~I2F}R8(bEbIV zK`$%?uMnTtIYTXRCj0>A6Irfp2Hz~j0FRx7{wvVJ!jtGn*(**dFSO2rS}AnAB+uU} zsUCDQB}A+YMX-K}&NatZgURO!`dDRoX#-#0)us^&#{GNn`CV-i2CJ~&1=r11^Y&eB zV24Rc^H0HTv(^0TyIPWNf&h8ox_R^IUG0vA+1ky&Ho4Zj8jFHh;HLSx$-S$g2zd?G z2^0MFUCncrD>FVsX@kVu07uhX5=6&oY*H@)t!Asqwcpi}L*j+2Mz8{%=1ud{yV_yn zHzML0X{=z9qB!-PI1YD!YjVvF_pT-(3k+cj)WF%IIDsDM;)zLqD4zb+-#@>r5zEm$ zR1#|{`dC@m-6ek1$oYDz80a!sS z%}D7R%TL`9BOS|ThjaxcYDWXTY80>C0HCT1e!p6n0r&*ot|990d;o9T49l#i*M1b)!+D|zp?X%FP}0-r?QWT>lrb`ve10ia zs$L9fhdZ=I@rebI>EqB#QH&)Iz4Cxc$uK&w+LjV}g)x4C zcM)h=aYnfG99FtXj8V!Q@hk7|WH6H7Gp$3MR+OSlHLC-Dqzri}SHZAWL=~WVp=kYx zPDQ`_XX;gysb|dO03KtsbHAG2JsJRuyPyMu+~a+4LoRP2c`&aLb; z1WroSk1UpcA<4K2l*eAhby65@3G{QBom5RDv^Pfsq5PsW0Wr)&;=(M=iee|UsA?0|F;6EhKFm9rvUB$ENvfVn1U}89A;}#|Njr3X873h2-n+PwlbaK=So`3}Rc63e+F6tuFEbyoNuQ51euHG=@R)jA8;pa+)lI zlvvUQnZe@8GkU0ya>b>Fc?Dd0_(7T(M`a43&nTwppiWAyswKjY5l=aMP8kb0M-~)V zWx<+TcPaEE6lV;{NzSKc1_Z&NqE5^vDT66=NyV)RH+cyf+=dR-y1g(VqLkc+O?KcD zVHcxh|uh{E;0vU0UoOgs{@isRA+ixiei+c;6rZ9 zfp8a~II*3G=Fl>k`;juQ12gE7&1!{`l$u&$40bW*A3;fLAv@qc61IF|$i5^D@QT_W z3$PW`7t$(bH3|b}z_E*4>nDeV_guDLGNU6YWmRLS6W~x*LDiK?31zm>=P*XAkQli6 zG^{K)11ku^puz0UEvf@2j?p$Wsd2RlvT{*m)xj=|J!|K%jYiP18k>k!_fa#HC5(jt ze#~`A2KG$d#`YcyW8$wJ3&A?T20+6OcXdn@n3(ERv3I_0@R9;d0;Dq3auSkeOj664 z9!~YLtfG*rQy_vV3ewC(ENf^dhw|35U4EqHzCH{#&(I_ub6PbPyC@}lA*XS^Pl~DL zM~uSZu2kV?g=I%wepV-BPEjQ~6sb(c0O z7*JjkyhUU?POwUdpT&fE%*-rL5J0khl8PBV6aNt0BCtd#IMF6vTN{XChnh?HRJ}0S z#OMq706)HV4t4Nh`H^ByWhAEFl>LcJcVMoW6{(+p{fxik56Up5;1OBjd9~uS4k8cY z|4U=chwFgE7!fv6>tKlj)5cK7kCoCpOdDcT5yjLBWpU2fNwR!e=7voYlq7x@V|^V` z<~gKF*j@@FL2_Z+?*vbF8=NH3XVq*+7ID3AS;;KN(+7=76WM$un9Zc|62h8a^|p*a>mOKM-&{VHTCOIOTpcgkj@TU|r8x zrcFXmltx5ogcK`Tr-?r=o)z9Dzt2r)RyibW#lc_@>ENBo=HH?k33=Dn-QUY_U{%$d=30xdNx~vg&N7 z^-6h70r~PCFR3qTQ*Kteo=p3V+pM344MeuZGw ze^0E2uYn#gP)<6=L9Zc{$Xxj6E@Ejy%MDpb3JR7 zQzsvnFu{NB(6aPHRw`C%iBulOWNDxupy$=Wd-n1D$0oQdDVLN#rL6r%uC~9wlN)bw zGyiYwU(Ue5y3x=wDWb3D5m*mxAxZJepo&qQntV=7YVXQI8&ab)b$oOZLOH4IL_vyT zS~`}O)RwZCE+om|dGory{PYU4A_AD5W3wEyhncz<76$R9Icc#U&Fdshl8WAOIpJj9 zgbNA{Wgh2wI4@3kA!NG=Smeh?kSIK)^VZuttK}tzc!IMph;2dUC{M9GFiWA*y@w)1 z=Gkw8y8v7mD{+FAhd^ExoH!|}vTX#CO&o_CDr`;YM;lg&2~*^G4%Yuk`D+5a(1dAG zKYh~zuH%J1N>QBD@rq0P#}ff)S@@VY1*SZb_8ToWA2HhEQR|j>mh(XT{gS``wekJQT_$f(@m8c2Q3juY#3ub zDF|a4P)#W{Qhyz?a>fZuhGbsbjP*O>!F;~3T#RE`ZF5nW-V0;&@-M#&4YR~@GDePf znD#bl7WX9l+$U+zL%rn>5;_z=RRaT5(wPg$#&D>Oac; zqsXFTTALVAr-%=UPX!-Vx#aknbi*UMtdDojw5AxCtZgK%Id1};RC&bEbdx$*deA}u z1{nSr{+p;pISlMZb5_1bNS-cEmr5eS{xL+0 zWO*9-KWWBR!icQ?Af|MgkARP^`V3yzB?Num1Sa!$6I^8^3)u=!10xPiwMR^lBE%t?Zfn2evJsVIAqHpUbhlT!PrS{AEk~-`u>G0$0QGy!F_3a zC*P4K4JXI*&pUyO4E!SZeql=_R$E!gsc5_qh+r;~s`L7XyP2LgXDSu+gFejxBa#@e zzPzOqiGXS0+s4^Kk5p8ItU#amyQ^&iSlu_MG~24$1hurZEP#Esp4>--_9p4_i`Bj`h2E>3 zN{Ibh(ej8HR%y#ht6MxLNncnNahN5*LeJ&YoJ>8c!*B|F=wII<&Wo6@nzpd$?}0{DyK93JPvIe-198 z>f25-%x4NeUO|y5jwxpASeQjzY?zmMPx3D--9}+b7F`TVp>R^{RCW_Ox$`cwWr=(w z!#rQ=0apSe)@~A*I?3~aby_TZurNoP3M%EjAxn8+83$P&fDfIZ41J0R<%TAuwt$2y zonaPbY3DU%Bi5fCe8>~HPFUDS@UGT4$JH-D!Xp3?jh_Hv^=_LA?6^PN_2-``J?&-2zDy|Ew z+aKQU@9!4)NAL8~0TgA{zmqWWI>1Y_WJpc=2OQDwp6oR)@B?%Gaom9H{5^d!xboj) z*&MLo?hDeiVB|!xqKQYD>Qh#`UeTLQ7(A^!z;f+$E>?NQ{0blb68z=kiDaOV!N~OD zf@zu|iVvk)uzW=SEhAo#BLr|&U{;`aX(1+2DLvv9r21U7U2~HwhzB86{~s z0kWD^8H7QjlqdkPj0^C405NHX0_r62AcO z(72QD7L9JVGnU%#YW+)JK3@6~|L057|7q!|?KY>w@=1inU z1KH#Wf;mi{B-N3K#Gs>{#wVr`3P9gU(wG{j)%Ox)Zeq-@X$4x7EPyN}bMCMeylryK zUhg+c6bC3p35YzHVkwg}Yqjbtq**2tjHw-mo0a{g1{wf@f0W)QA@JvoC!_Q~KV%_X zH~+oqgjZH*CRZ$hHM!b_vFnA;a&1C1UuX3TL53U z{C*GIi%~9toke8MppEtqsE<<-aRh@8M7scJ`7RP|#rjd)lY8r1>8<~I&Na@$t_`QfK9LL@sijl;%sh>xrE zd?S0FCWfv)Hfx~9O_IoiiAt8c@~8W+ohH|8UHQaK_SGl-ev_+g zj<4Aqlz&le>M=%yPb5x?l3ML&a9385OmBl3Kpku`2MGhfH94-?BEe3WqPX@mP#k>5 zpxwM}a^>$IPk9dYV|Zb(YNROkiIjvZRQnk~-}-c2o)(Lxge*_WBb`~#?pm#T02U(N zfI9WBm-NqE%c;f{eJ61IjbEI>ms;)Dq8J+d%C2U_k|{>SgipY)p!cX=MWF=%_!Ue@ z)&lwXVc>lHwe~A$WdA_v?~7laJpl0g6T)2q8J_zYoc{Y2w3^x1XAj`_S!2xK{60w^ zy!`W<-e(m08{e5+aqw6lbAd>Ed8;BK-xJDokiIS1QW<@UlknHkOFjhyQc+Q!!}+ zPfECU6k3g}+&@k-@(eAR@o(DrA)^E0x2ae^B?bTdt(?Qry)VhlcUhw`7_U$Y0_dY8 zf+hk>a$i*?Hb^pDeS}ywb6hNm*@GtN@!~go+y~&5V!GlIm=pCTn|$vN-B1 z%f>HR;2%%U(r>`vuyL$LltfR(31A+%bdFbM%{-(Sjtp0;-FZn^2M*Euii}IFvETuS@sOYtY$BF_9!4lW z-*+8Id6KB~^r zqKN`#rBf#^@f;%%_(#dJm{TNICUFFRsnxg!Z6|*sTo!kehdhTFLp56xMXj=2%h3y; zueRJ0rI4$+PGEgGAFAe~6k?Y9r3L^Df{-3(fw8WtN%4%u=l#cj&2g`D9$Pr$I*>@rJ^17d%o@(tzmVZfj z$`U4a4b#7wdMv3CG@e1uvY_vQMsPL?)ocg@NWMe%Y&P(e91=72p7NAnqKcptZ}iEB z`>#HXzLG8e(*D%uuCJf)4_m*P>|hiTR{RV1#LN!bv<%yuvh6&lAmerTF(a5Mq0brp(f z0=}=V{9BE9iyBe<|B=X(K-<16D43jgURATu98?Wdo9x)}G!oCqd;<|n`h ztT|2Tr^`VTY9anyXb(SwWV571=tCDJ81JJnq1_Z&No^i|KlAGoZ*S%!{X$ene2h;O zJZj=6n#{A&ECzXEx8$cGczT9jf}WZrC5F&L80B3AAo#X%Oc#&7iNF$>kTjl3i)7c_ zse5UWO)#V_=<1}SH*1ESfFxu|jpsy@dwmIECMk?bW0wn0ISJ`-O1jGUVL}^Bo3t*F zcB?0i4b99QY=#>Q1&cC)^bnDx^YTNKJ--=*72AE=}}f{>4kqMP|`ovH$;?9T*LbWa-O)ln;fC zepP_I!H($aV}47jxrt+P*J+k$|Ma)uIcd-WtVRS=`|nSzbP19&L0YXO3Nm{plPjVi z6V{lu#Tq>V^ld}hjfCLoZ}g{z6aD?E2^JaaM?pe6;85WipZPPh-VY=N?3q-WRC=tC zS?M~SL(ighcX?}$3y}>IdLAoRe};}nVm6MC!cB^q%LYrzdUfOizp4QqilgE4*}~cB zHo*|F(v=`9UTW4ZT8z13T=;)Aa#9zxW0H*mod$9n(YC?mRv3lL1Ots~{1Sqe9y=+T zVnF~v=Fz6s5<`wJfNKpLJoqy+vhXo~0cS{XRhgHgV~{ib0!oLA&B2pBNQktxrWWrP zAR#PSU$#Yl7zFKq4G7x58w5;aM;G`ap*2DwwCvHMJ!=Dt^oz(^I-ZNtC)!LGKS*yr zrAharKHyrdRuhbv(u$RR6j;@EJx_F9PxyDd+)Qu5x+azzgj6%B=AwwG<;>gCd}$}y zCg|DFx{s&IxjbbgO+3j=!t_`*Oxfd?>$X{H=WDu8E{^EJh-YX^3sFuQ9F<;S81X_r ziAg*(q`a1O?krjdvT){w8*efIVS!F=Tt#&}1Yu}c5|M0_F=!QjJ~^ z3#;C_auhY&*RvBRDPhN~6a078Rlu%7rY!q%;!8GBhD{enDJdQ_QHcD;RGFei?*hzd ze@2+HDqs^Mb?m^RhKrRs(SxOidlrykeXvMV*o-sPa~vdnFqjiFVb_r+bn?_t!uWML)&j1oH}VKfpI%c@tg6d^e-*%Ktw=#*;zm`s;^5ma-g z@CjIiDa&TKm}izZgw2|{EJ^WaM*V~Z7P*597Qdogrr23VqvsNY&9ls+1PrQ-uTyD! zk$tnFnQi~n1mGo!>d?LuSRiC|?_t0aLr$YCq_l(RS5H@dkY440d#csGx4AGVUl>=V z!wSlj8P1c9AKOH$7+NTIDmH7ipMU;JZnF6L^Upve4c}S00)Su%O?MMzlIf`#l5)=^ zjl-{*Q~QZ#0kY)3>L!`#@}D1mVnaH?ssS5x)JFK+NNv<8r~8~F_b^WUk%>#Rk37to zfF14#KE1Hca$3zvdJ!9uMx%cyF^RpIMfurpStE;+^gkLN&c!Iv2=mCclK^UU<`x=F zk+NP`NkN$f_?s&ywKq#_TArs!5o7b?X=)bOwwkxi7SjiRD65O6fF{79cY>8<-gE;iEZkVLGNkVH)=(DsTfra*&&2|}fA1))?$0l*I6&K3ns%Lp*59=0G zRfEB*^iWn(!dyeSE4viWN1j9b7O^6!jCXm^L>Cl-o+<|tPoox=ZS#q zwJJcqfLbH-f|23K1(eM4$(pAUrvv%WimfO5LhfRIvXCFL7d~Wfe4*cFTp;r}Ke+@f z_*v>gdm`qT=RHxtV1b`kL6N0Za={X0#wZ05G+jvVWdToF)znu4FcN>JS|FX7DP2j? z@PUGd79E|e6B|u#-iR9*pHf$#t;eXNH9_ zN(((C-UP|(D@nu9OY-%QQ*0(Saapov7B)I#s3gL5vVF|+SmO^;qUSI{k`3L&JTt zl;ot`)&eFa*n}r=k;!{y6l#KLKw$7n)UT8y9)(u^P=->hDNi*o`Z54WVa=WAu}!h= z7=$vPC=JsnMvN*OCh9>(sHBxo_ zc9SINJY_D5F1yN#rSE)SJ*#3Kxj&Moe5KL*CY>>Pg+vm^Yo)V}^@^r6uW=19)M zl9{=N_Q(Vc=PVpqh}s4z8ft+?1CZ2{@J#zUM zW60S67JE0B*q8^UA!VDyqAVxsSKLbQf=a{GltM?Qqr?1?)WSf^gCBU?1>T{(lh(+8 z{sZ`~<-{PgD0?j-wi$gFj~cBn-#LY^?G|_2n7~7W`}DPS+u%MmI)5eLY+hw^vPbc^ zf86v$MSRojRGIt}Cih92&f7pxdE<{=OjXZ((`wFD(?4!G^ftk-BuMh|YX0Z{D6gmT z&gpWp+z>(=gyb9(gqHcd0*wYHxdu^}i{WbQ+4tn3_n8Kpvj+C_6Z!dx-So4g@t|Bu zDXuU3F z9*R@iIT|IkT6q%U_%%yEf1xHJx#R3X&ITv9PO&!M2NYj?hD4D|KbMN6nE$m9~P z)#XSMj#xY4JOMBBM&;c9++?QuJK4qSE){IURyImHh8)U@PUauYb?oxv%x`n9E0;{X zs*?Pp$VXK{+6%Fy3+~_npUH30Y0;ml($;Hl)@Xlt9WN@hpjI*&v2ys-T)W8=Cafo{ zKRjKwy-8Qo-#%^LwyuId#I9s0L+fBt=%Ro&!p@T5mWMK4)~mUF_*`j`i;esf>?!+> z84yq0i zP1eWu?S(d;m4#kLqSGdy?V>IS1!?TC9Txdf0SIFv48k1P)p^d3?MtnORoGuazo;z$ zzt-~7JMe4msi2X@g>(7!vWY|k_M{_mPAfi&=_VNrE*&$$YEleB9igPenmJ-#lo`$1 z2@7o`b_2$%1TRlci5Iu3tma)R3v^%!xfN!1dYH9ZmeBL2b&*Vm^G#CA?E>p*CW+U~ zB@iZae0*OqOlU$%POvB;ZeVOkylEU49bO(Lw@KbKR2pNm%Q9hdX~dFM^@ib4@Epb_ z`f7(s8bBX?r3GhM#ESTvUL1xLyR+y&D?54h(ccHoY>3|n$!wJ02SlPneBA^Id`4ff zyszjrFN1=<$I$jGRdELQn7MkHqRHBX~{WfP{2O!xd%;x{h_ zcnyLio)bAuY9{5#_mB6`^S;s~ruTL5K6{=_@fAi+_S=8fvedvhB<;AHtoa`1VwRJ* z&D4%jVuzkpj84gbV5krGUx}ffC60b2Ig(#Mhvt&?SW9!t=3q7RAj|S9L`qdUF!qfu zDZ-=}gkUX!8C6CcdQWTiC7qF|s87@f?4(b$Lmmsskn}auHU5d=c*C?w!Wr}&m=u8z z2=MQqcUN8_7WhvtI-IT``|7RpS3)eXJOjI(DZfbMd<})hRRRWH7nM7e)%}LWk%wMb z8_|O;8jIi1wt1LmKJ~<3$UQ=s47+!u`t+AkcT#`&Wq@rG&pXt6zX;M(6VRIH(tu7< z+-CEt2}9##J39nfZBf;LsmRO=8qnFyMbXFdH^aQfHNhj%5ty4RLEwoXMeZPjAV52o z70gPZpEBe7iP||qJy$yOU)USYqd@j^omqv>gxCc zPJ)?#tTX-J-t-^$rhonUXL<=I4AL(@|NOP~6$3H9YKqi^kXph#p_HHnV{Ao}X_^w2 z-Gx{OG=$QiA(TpL8U7Qn$P=lnWOa2^H+-p=f8P0nyKT0bToZIRn0CnQCU=97{nEo2btlcQwc5+&j72`@%b|eF6@x#N-N^zgG;N0^ zB$pEuSUwL^=IMppIW}E(4boK4lRk|QSSY(Us7Pxfg+~Egu~v-k?zVsUW}O_%mJUh04p1u!u4!^3Ary8TvK z7_c_L%7u0U+11IVI)*3z&|qIYeIez7W*8))hid-;NOE;HNTWfXFCH)Td?^?o%fQat z{8o}L!!s9nmR3Q{&2kPLs~M@niwPCtP-T@BFoyI3L}t#OHX#GnCZ^5ZOO3L~;fP_1 z@UfJdL1cIq2ImF5>U}Mx5bk%o-?EXJZ*dWr1)J zVUiT4o1}y&6gw_Md>4`%0bYT4zH-Y+A`c$U*0nqU%;z!~GAJOcT0%gD?F0oI(D*yK zl!f$r!ym|V5`8XV=b{o3Sls1CH-e9*EF5#W_$pNEnH#E9mGxB3yDirXp1IO6x`i>x zx{VzRWew4Q6$XDv=~H3MK4qERC-0OesAqYUd6*3=5{(9%zOu*+yT8=Hg_F)eagis0 zMuSv9W#e9&An!3Dg_M606|@5J40+=a>lWG1m7}G%>Sc9P`2Q1@ynBMpIWDku+fG8| z@THE$+HPc>SU=ztTbYg9ek0Cu$NBZTb3~~^22Q@ zAG$18in}*ql7yy{-4ehI_BP9Hwu35BFCZS%$2x6*}? z__7hDq{Y@b8VL;j-R6@#|VCkF}CzdORNr^a#@Sl`KvWr(} z0!4A8Km7!H)siQyX%2`f>D6kFnI3T(o(6rYmDGy9u)kKi#O9xBPmWL8p=>;lmfk;s zUjfx&Nnv|d09e9PawCsVN;Q7X-Zx`pVH*N^Ni#+(tQwM$`l0EPEzz%lDm`3&2`iw) zS%2ZB?6=ErX5P_DZ|0$c{7v%T$BpM@Mk?JcvwiW_Feos+;J?{;bhk|~Ws(W2h%axu ze(6`d2NCa&nsTr0qiBkemKaA-oWpJ&r*472ZM?t#&2#?#^z?MuHDHk~G;)x{XoY75 zjRyOLc4heGZ}j8W?7_bmPh{}VpUJ)`J(I0IerR!|j{QN1{~a#`0KbAe&<#Tm!JsJdAU(sdFr$}ihvlmB z7cyYh;qp5*nLpHLJ$EvdZ&v`nG7m}Z`)(P$Gk|fCq<3U^l69@gDsGDY?UlPth?!s3 z0xuPiWX%eGuwnfjlZh@m~+yPl9Gx1>TGse#DL$Fv;5^eE9kyLC6A_=jMW0~YtVE^TAd|{Fh8P; z2tcc-H1!1T?5j1T9Z&AAT_7s3d!52hL=oQg%gF7D2tGTw#^NenqYJazT^biP1IHe1 zJq|mHH<=&s1YsHj9;<4;sn7B_J$>?!TlHNt+G(B*qH}atzmJk|-Y@lRfOe7)5pk0E zJ_5fm9zntpdWoSWS%r;(U9}MXpL-3fnTiCY*(ln{LdHC)fU73h)0yg;3OrOq8YH+j zB#hm3)sJFrg{#yZAy?kar%_)$`H=t)un?o&K0O(TGj!keFSAi}mE{HIAfI9P=U090 z``|-}Rab_QJi$+Ymq$|W6RMHj0!&-Uai$RrSitKTqE1?;7JX>$`UC?DO;cXOl;|7A zDsXgW9>5vTc~hB&oijYr)s*y+KAROX9z~#CmrsDDU^R__RqDat#5fA4*MRY4Nd4{a z7ealH08e&JS2ZEwa9mqBN-vq-@ta8GE##k zOwBQb>`(%TVK^K|d+kVFi2m`f@ybLFr?U!$ApoYRy>)i=sdev1ylxG=zwJ5d{WuWb#rK^JaYstxLH8zRS`tJxx_uE)oe zI2NTf5~q&HZAcuqcfZ7`^#3Rl$EDOSaq21Eio~fftCm+=mpC?B;A2W0s7AFjc>~a7 zuC#Hj@n)%msG03#4s_{C9JkB1l852knoS)V>EnqVO=gYI@e{ZWkz@Dl7dWN9A4S~Q zRQiQY9hF-VH6T2X5DTqZVcl54uuW$=^d8~F6-_`X6fffbXh|rB^?d3iAC?> zFq=$fifxC3BpV!}c*Sy<@nBYDP!AJn&a-JI!$cm+;W!%2k~qCPG}AsAz2JWi{yhuf zB4;G`^yaVIT6&21_bdq|ULdR#w%aZe`wRLF;9euS2WQr9x0y&A;9mfdg$>bkn<*O< zSjBZgvRo8-93}_g{xzZAz$2HNKgJo~K;TS9?-4=&$^y{uTcn~-na&hpURQ2DYpXLsfnJ+AXTK4kX|K7Z2$0b`3Ems6>QZaqMfy zgfJ9nm)W36TEQuF}&)!rId9X8-n8REhA?qFB+#dMQR_WtG4r(Q0_-s~B%v$HM>X0W|tDKcn z_=~Z1<%O^~CQvbLJ6UCET%4PPD^ENc7qJs01!)V}WiDZM-M@wCj|SnP6_zb`Rf@(g z{DD~V$~5+-I!nSLlErgTxhGvzuI9<-!g7s;<)%@-QB65r1pT?PTab06jqoP+dGLD52w`^hN(S4MHoaoAF5*G)9T-hBmE@rUyWf!4MW)A)V2@wq! z<+xv_rp+*&i_g%mfOgl{NOWUfYb8JhQwr&YMfRSdn=dDGNh(uC@uQ7YfNaiY$%q6U zR5ns%qnpmFMR42n_g8q-t8i9%5gf29Jvh-#dQK^xCkFker4;%Df&e78DR4$9m%B&F~%;VqAJ>~R_MC?AR34F zah79k!6-!R3*lYbAPBOPGbJ1cE9O(!pN$%h9+u{ep{;2&1fVLZX%#`JI0W~q zCIqT=%bwAiHf~C-<>TUC*w#;jvL%VB8?}7_P4AIoRys}!4<4WeFVE^6oHgo13TGK= z2vj!uwhk&ca;g_{{Qec@Avfa-8ylRcPDlIwP2iS>HwowBHjK&fF^QxEoB_D<4k3Y9 z8AZ`)r*k0sAM!lQPsOLJU;lXb{)71C-TChy-k*wVT1#ExsX74KD;156F4h3O50iLw z3WWoLX_goAbMK!)O7YoK@k^Eu;?XEdPk}V9ZLii5sGNRZt=N~Ut(Q79{Zjn+<5DV+ zN86#|rH_a{lvTiLw_pld(!wcKg>jJOva|o=HNjdxTc5MV%aB)ao;|t*_I(i5I{;gBCnBf2XxAE2=+~~by$!EQzfP3 zD+)TDOC8p->6uxqvFqlNwF*My_BI--JtCMQZU$3vzEIh`mit z``WJB6P?Zv&z~pof%pgM?1ND2?1Pwe_93iBd1wUSAz2ca|9kV{I+%=>_tES1dVhKQ z7XJ2nz4G6aqod;=j!xe8dT&mCIyw32hu-nY@tflxMDHOOFjKbR550~1Di7{E`Mh8( zItb-UkVyX+hs8^&EaM=cAW+%IBLQJHnhc_mT!PiPCORij^0zz+0kQ843-2N^A8&51 zu0fU#LKzRsIH<~ag>$R+at!7oH0dGwz2E)%T@+; zEt|sH^$qE{UYY~u{We80DKPN#DnMGRm$8Nma;#NX5^xXe<>)Dc&di6LWH zyszEz;gm42uak$4f}^9Lr_?5dCOWUhO`IfAE{=nrgCqNUC+~vuhhB?tGWzL_-32IH z2G@i>J|fm#r_)&=Mx9uQ_sSqy*zf(pc^V4=IZ&_Up19Viz>CVthb%5s=8Fy#u;M~i z`ftsj&O$&og;O99ulwbKm7>4f_v$7YCff12OQ%KAP>n zlfS&_y(!s$Z+pFyXZ!CVKH!x-?FjL&f7wY{LL}iJN=`-BK~n6(Pa~6DTz)_wiq(?_ zn-ZI>^kH>#j<2g%C`YNwkGS34SoI>Tr$sEq`R!#^T;-8ea+!)@nWMQ@V7Mg1+OTXH=S`Wka>r5@!0kMrfbKzfOLnc*WN?@8~mfYin+~pV=HF-SxK2XpVFGNjff-a>?H#EV@kBuF^ z-nNRuE{zbZM$^KoCJo{PH|^6#s~g-Mkay)<2`X!k#m-!+m47K_7!CdpOaMp-pfZ#ala(CsT%D4{DNBQS zn}M$&=7q<(V9x$s#wW111|9r8znS-R@`>-o(vLQn!rIK&Fblx4sY6zENike89yO|I zOw=e}2Vm}VC&@g3DCa#Cuc8tG)`>?gBhI^;ThPVKu{KN8cmg=}WNjX4AiyTpFs_0h zHBetG@^mx&NI9^T!+ttdjQX!Y};$Z-)pUeVTgEbp~VsA8T8(4B}VW}E9 z2&t7if$4#&oP=}nN@lkOz*I6yrFb; zisZ|z*o_u8GqAo6hO3v`(!k~(=fmn>=(m;jHM?nLJq#I3Pf`oR@Slnf<~8uBVit(l zx&GbGP`9sr?e*{!bnnwz61&#B+ZgR;T9;sqcBpfk3NQR=HLkEw;^-lh&An7)Fv%6O%Eirz0523~YJRsdB^lxz{LQV3B6#9yrKFSE*_D=FU!O%K_1?5?m%y9N zyfK#djQ@4vbtSZovD$?NwlH{u0#?rgCo8M+9w%mTsPRD=W2d?L@%OjDBOi=t)5c0L zIu}bZ97n@1gX|mY{jXHi5)tJQUma51@kX!i0AV1gdwr4F!eJ{zSW-;T%fHpOQwg|( zSw!%6>v6G+{j`=eB4}0|IaI=Cuqppp;d_%s6@aWQ$s@ETvOHSKu=Rz}Hn&`b5C0L{ z&K2mFR!aGX+ --output-dir yaml-files -f values.yaml +``` + +To override the default configuration, you must provide a `values.yaml` file that contains your custom configuration. + +Configuration properties and default values are described in the [Business Automation Insights README.md](../README.md#configuration-parameters). An example `values.yaml` is provided [here](../configuration/sample-values.yaml). + +### Install the Kubernetes YAML + +```sh +kubectl apply -f ./yaml-files/ibm-business-automation-insights/templates -n bai && \ +kubectl apply -f ./yaml-files/ibm-business-automation-insights/charts/ibm-dba-ek/templates -n bai +``` + +### Install the event emitters + +You must install the emitters into your IBM Digital Business Automation products to be able to emit events from the products to Business Automation Insights. + +You must only install emitters for the products that you enabled during Business Automation Insights installation process. In the provided sample, only the BPMN job is installed, and so only the BPMN emitter must be installed. + +Refer to the [Knowledge Center](https://www.ibm.com/support/knowledgecenter/SSYHZ8_18.0.x/com.ibm.dba.bai/topics/con_bai_top_bmpn_events.html) for instructions. + + +## Updating IBM Business Automation Insights + +Check the Business Automation Insights [Updating](../README.md#updating) section for prerequisites to the update. + +After initial installation, you can update the deployment by following the same steps but passing a different `values.yaml` + +## Uninstalling IBM Business Automation Insights + +```sh +kubectl delete -f ./yaml-files/ibm-business-automation-insights/templates -n bai && \ +kubectl delete -f ./yaml-files/ibm-business-automation-insights/charts/ibm-dba-ek/templates -n bai +``` diff --git a/BAI/platform/minikube/Monitoring.md b/BAI/platform/minikube/Monitoring.md new file mode 100644 index 00000000..0d9d8cde --- /dev/null +++ b/BAI/platform/minikube/Monitoring.md @@ -0,0 +1,251 @@ +# Monitoring an IBM Business Automation Insights installation on Minikube + +After Business Automation Insights is installed on Minikube, you can use the following procedure to monitor the health of you installation and troubleshoot issues. + +Table of contents: +- [Retrieving all the logs](#retrieving-all-the-logs) +- [Monitoring Kafka](#monitoring-kafka) +- [Monitoring Elasticsearch](#monitoring-elasticsearch) +- [Monitoring Flink](#monitoring-flink) + +## Retrieving all the logs + +In order to retrieve the logs of all the main BAI runtime components, run the following command: + +``` bash +./get-logs.sh +``` + +This command creates a `logs` directory under which the following log files are created: + +``` +elasticsearch-client.log (last log file for the elasticsearch client pod) +elasticsearch-client.previous.log (previous log file for the elasticsearch client pod) +elasticsearch-data.log (last log file for the elasticsearch data pod) +elasticsearch-data.previous.log (previous log file for the elasticsearch data pod) +elasticsearch-master.log (last log file for the elasticsearch master pod) +elasticsearch-master.previous.log (previous log file for the elasticsearch master pod) +flink-jobmanager.log (last log file for the flink job manager pod) +flink-jobmanager.previous.log (previous log file for the flink job manager pod) +flink-taskmanager-n.log (last log file for the flink task manager pod(s)) +flink-taskmanager-n.previous.log (previous log file for the flink task manager pod(s)) +flink-zookeeper.log (last log file for the flink zookeeper pod) +flink-zookeeper.previous.log (previous log file for the flink zookeeper pod) +kafka-zookeeper.log (last log file for the kafka zookeeper pod) +kafka-zookeeper.previous.log (previous log file for the kafka zookeeper pod) +kafka.log (last log file for the kafka pod) +kafka.previous.log (previous log file for the kafka pod) +``` + +## Monitoring Kafka + +### Checking that Kafka is running + +Run the following command: + +``` bash +kubectl get pods -n kakfa +``` + +The expected output should be similar to the following result, indicating two pods running and ready. + +``` +NAME READY STATUS RESTARTS AGE +kafka-release-cp-kafka-0 2/2 Running 0 60m +kafka-release-cp-zookeeper-0 2/2 Running 12 41h +``` + +After you ensured that your two pods are ready and running, you can check that the Kafka service is correctly exposed by running the following command: + +``` bash +kubectl get services -n kafka +``` + +The expected output should be similar to the following result: a service named `kafka-release-_x_-nodeport` of type `NodePort` should be mapped to TCP port 31090). + +``` +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +kafka-release-0-nodeport NodePort 10.103.253.72 19092:31090/TCP 41h +kafka-release-cp-kafka ClusterIP 10.103.115.114 9092/TCP 41h +kafka-release-cp-kafka-headless ClusterIP None 9092/TCP 41h +kafka-release-cp-zookeeper ClusterIP 10.107.231.119 2181/TCP 41h +kafka-release-cp-zookeeper-headless ClusterIP None 2888/TCP,3888/TCP 41h +``` + +### Checking that the Kafka topics for Business Automation Insights exist + +_Note: Before this verification, make sure to install the [kafka binaries](https://kafka.apache.org/downloads) on your laptop. In the following command, ${KAFKA_HOME} refers to the home directory of your Kafka installation._ + +Run the following Kafka command: + +``` bash +${KAFKA_HOME}/bin/kafka-topics.sh --list --bootstrap-server $(minikube ip):31090 +``` + +The returned list must include the three following Kafka topics: + +``` +bai-release-ibm-bai-egress +bai-release-ingress +bai-release-service +``` + +### Checking that messages are sent by the emitter + +_Note: Before this verification, make sure to install the [kafka binaries](https://kafka.apache.org/downloads) on your laptop. In the following command, ${KAFKA_HOME} refers to the home directory of your Kafka installation._ + +Run the following Kafka command to display all messages in the `bai-release-ibm-bai-egress` Kafka topic: + +``` bash +${KAFKA_HOME}/bin/kafka-console-consumer.sh --bootstrap-server $(minikube ip):31090 --topic bai-release-ingress --from-beginning +``` + +Then, interact with your emitter application (the ODM emitter for IBM Operational Decision Manager, or the BPMN or Case emitter for IBM Business Automation Workflow) and check that you can see messages added to the `bai-release-ingress` topic in your console. + +### Getting the Kafka logs + +Run the following command to get the logs: + +``` bash +kubectl logs $(kubectl get pods -n kafka | grep kafka-release-cp-kafka- | awk '{print $1}') cp-kafka-broker -n kafka +``` + +## Monitoring Elasticsearch + +### Checking that Elasticsearch is running + +Run the following command to display the list of Elasticsearch and Kibana pods: + +``` bash +kubectl get pods -n bai | grep -e 'RESTARTS\|-ek-' +``` + +The expected output should be similar to the following result, indicating four pods running and ready. + +``` +NAME READY STATUS RESTARTS AGE +bai-release-ibm-dba-ek-client-58bc6bf75c-9dwvc 1/1 Running 2 18h +bai-release-ibm-dba-ek-data-0 1/1 Running 2 18h +bai-release-ibm-dba-ek-kibana-7bcfc6ddf9-ff69f 1/1 Running 2 18h +bai-release-ibm-dba-ek-master-0 1/1 Running 2 18h +``` + +After you ensured that your two pods are ready and running, you can check that the Elasticsearch and Kibana services are correctly exposed by running the following command: + +``` bash +kubectl get services -n bai | grep 'EXTERNAL-IP\|-ek-' +``` + +The expected output should be similar to the following result. + +``` +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +bai-release-ibm-dba-ek-client NodePort 10.110.241.254 9200:31200/TCP 18h +bai-release-ibm-dba-ek-kibana NodePort 10.97.123.220 5601:31501/TCP 18h +bai-release-ibm-dba-ek-master ClusterIP 10.111.170.123 9300/TCP 18h +``` + +### Checking that the Elasticsearch cluster is healthy + +Run the following command to check the health of your Elasticsearch cluster: + +``` bash +curl https://$(minikube ip):31200/_cluster/health?pretty=true --insecure -u admin:passw0rd +``` + +In the returned JSON code, check that the status is `green` or `yellow`, as in the following example: + +``` json +{ + "cluster_name" : "bai-release-ibm-dba-ek-elasticsearch", + "status" : "yellow", + "timed_out" : false, + "number_of_nodes" : 3, + "number_of_data_nodes" : 1, + "active_primary_shards" : 42, + "active_shards" : 42, + "relocating_shards" : 0, + "initializing_shards" : 0, + "unassigned_shards" : 40, + "delayed_unassigned_shards" : 0, + "number_of_pending_tasks" : 0, + "number_of_in_flight_fetch" : 0, + "task_max_waiting_in_queue_millis" : 0, + "active_shards_percent_as_number" : 51.21951219512195 +} +``` + +### Checking that the Elasticsearch indexes exist + +Run the following command to retrieve the list of indexes in the Elasticsearch cluster: + +``` bash +curl https://$(minikube ip):31200/_cat/indices?v --insecure -u admin:passw0rd +``` + +In the returned list, check that all expected indexes exist, are open, and have a `green` or `yellow` health status, as in the following example: + +``` +health status index uuid pri rep docs.count docs.deleted store.size pri.store.size +yellow open security-auditlog-2019.04.25 P7LQybcvTySRYpDUCoUftw 5 1 159 0 671.2kb 671.2kb +yellow open process-summaries-active-idx-ibm-bai-2019.04.25-000001 81GfwYOOTJOK4LD551uVTw 5 1 4 0 96.5kb 96.5kb +green open .kibana_1 HyuwkYF8QvKJyONgyECFtw 1 0 135 9 191.5kb 191.5kb +green open .opendistro_security SOGNgWczThqAT26vcyg71g 1 0 5 0 32kb 32kb +yellow open process-summaries-completed-idx-ibm-bai-2019.04.25-000001 qlwuQ1AqTca3FcQ2LB-9xg 5 1 1 0 25.2kb 25.2kb +yellow open odm-timeseries-idx-ibm-bai-2019.04.25-000001 _SGUSxhfSi-3yfWQ4qdNYQ 5 1 0 0 1.2kb 1.2kb +yellow open case-summaries-active-idx-ibm-bai-2019.04.25-000001 nwwlbYUZRzmtUPisVusJUw 5 1 0 0 1.2kb 1.2kb +yellow open security-auditlog-2019.04.26 -Xqc9GqiQSmLTfVwgzjk9A 5 1 21 0 268.6kb 268.6kb +yellow open content-timeseries-idx-ibm-bai-2019.04.25-000001 gMs6ZjIfQ8O1eyoK7V02eQ 5 1 0 0 1.2kb 1.2kb +yellow open case-summaries-completed-idx-ibm-bai-2019.04.25-000001 AS7uaqCYRAOuvPY1S2g2gw 5 1 0 0 1.2kb 1.2kb +``` + +### Getting the Elasticsearch logs + +Run the following command to get the logs of the Elasticsearch master node: + +``` bash +kubectl logs $(kubectl get pods -n bai | grep bai-release-ibm-dba-ek-master- | awk '{print $1}') -n bai +``` + +Run the following command to get the logs of the Elasticsearch data node: + +``` bash +kubectl logs $(kubectl get pods -n bai | grep bai-release-ibm-dba-ek-data- | awk '{print $1}') -n bai +``` + +Run the following command to get the logs of the Elasticsearch client node: + +``` bash +kubectl logs $(kubectl get pods -n bai | grep bai-release-ibm-dba-ek-client- | awk '{print $1}') -n bai +``` + +### Using Elasticsearch head to introspect your cluster + +To introspect and monitor your Elasticsearch cluster with a user interface, you can install the [Elasticsearch head chrome plugin](https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm). + +To connect the plugin to your Elasticsearch cluster, go through the following steps: + +1. Retrieve the URL to the Elasticsearch cluster by running the `echo https://$(minikube ip):31200` command. +1. Enter this URL in your Chrome browser, accept the self-signed certificate if requested, and then use the `admin / passw0rd` credentials to authenticate. +1. After you access the URL, open the Elasticsearch head plugin in the same browser, enter the same URL in the text box at the top of the user interface, and click the `Connect` button. + +## Monitoring Flink + +### Checking that Flink is running + +Run the following command to display the list of Flink pods: + +``` bash +kubectl get pods -n bai | grep -e 'RESTARTS\|-flink-' +``` + +The expected output should be similar to the following result, with all pods running and ready. Note that you might have more or fewer `bai-release-bai-flink-taskmanager-_x_` pods. + +``` +NAME READY STATUS RESTARTS AGE +bai-release-bai-flink-jobmanager-5d8f74f947-zv6wm 1/1 Running 3 19h +bai-release-bai-flink-taskmanager-0 1/1 Running 3 19h +bai-release-bai-flink-taskmanager-1 1/1 Running 3 19h +bai-release-bai-flink-zk-0 1/1 Running 2 19h +``` + diff --git a/BAI/platform/minikube/README.md b/BAI/platform/minikube/README.md new file mode 100644 index 00000000..03f59a99 --- /dev/null +++ b/BAI/platform/minikube/README.md @@ -0,0 +1,287 @@ +# Install IBM Business Automation Insights on Minikube + +This procedure guides you to install and run IBM Business Automation Insights Developer Edition on a local Minikube cluster. + +### Disclaimer + +The deployment of IBM Business Automation Insights Developer Edition on Minikube is **not going to provide any high performance, scalability, high availability or allow any long term storage of the data**. Use with care. In order to get high performance, high availability and features not available in the Developer Edition you must install the commercial release of IBM Business Automation Insights on a scalable Kubernetes cluster. +As a consequence, and not limited to the following, machine hibernation or shutdown without having properly shutdown the Minikube virtual machine may have unpredictable effects on Kubernetes persistent storage. This may also prevent Minikube from restarting properly. +*** + +- [Prerequisites](#prerequisites) +- [Automated installation](#automated-installation-fast-path) +- [Step by step installation](#step-by-step-installation) + - [1. Initialize minikube](#1-initialize-minikube) + - [2. Initialize minikube persistent volumes](#2-initialize-minikube-persistent-volumes) + - [3. Initialize Helm](#3-initialize-helm) + - [4. Install Apache Kafka](#4-install-apache-kafka) + - [5. Install IBM Business Automation Insights Developer Edition](#5-install-ibm-business-automation-insights-developer-edition) + - [1. Load images into Minikube docker registry](#1-load-images-into-minikube-docker-registry) + - [2. Create a security policy and a service account for elasticsearch](#2-create-a-security-policy-and-a-service-account-for-elasticsearch) + - [3. Choose the type of event processing you want to deploy](#3-choose-the-type-of-event-processing-you-want-to-deploy) + - [4. Deploy BAI release](#4-deploy-the-bai-release) + - [5. Verify](#5-verify) +- [Starting/stopping minikube](#starting-or-stopping-minikube) +- [Next step: configure your Event Emitter](#next-step-configure-your-event-emitter) +- [Troubleshooting](#troubleshooting) +*** + +## Prerequisites + +- Resources: + - Mac OSx Mojave or Windows 7 or Windows 10 + - 2CPUs + 6Gb RAM free space + - In addition to the space for Docker, Minikube, and Helm, 15Gb disk space for images and persisted data + - There are [known networking issues](/~https://github.com/kubernetes/minikube/issues/1099) when using Minikube while Cisco AnyConnect is running on the same machine. Before running Minikube, make sure that your Cisco AnyConnect VPN is NOT running. + +- Tools that must be installed: + - **[Docker](https://docs.docker.com/install)**, tested with [Docker Desktop](https://www.docker.com/products/docker-desktop) on MacOS and [Docker Toolbox](https://docs.docker.com/toolbox/overview/) on Windows + - **[VirtualBox latest](https://www.virtualbox.org/wiki/Downloads)** + - **[Minikube](https://kubernetes.io/docs/setup/minikube)**, tested with [v1.0.1](/~https://github.com/kubernetes/minikube/releases/tag/v1.0.1) (MacOS and Windows) + - **[Helm](https://docs.helm.sh/using_helm/#installing-helm)**, tested with [v2.12.3](/~https://github.com/helm/helm/releases/tag/v2.12.3) (MacOS) and [v2.13.1](/~https://github.com/helm/helm/releases/tag/v2.13.1) (Windows) + - **[kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl)**, tested with latest version + - **[jq](https://stedolan.github.io/jq/)**, tested with latest version (MacOS and Windows) + +- IBM Business Automation Insights Developer Edition: + - Choose a destination directory where the installation artifacts below will be downloaded. + - On Windows, this must be on the drive where your ```MINIKUBE_HOME``` environment variable points to. If this is not set, it defaults to the ```C:``` drive (current [restriction of ```minikube```](/~https://github.com/kubernetes/minikube/issues/1574)) + - Download the catalog archive (~4Gb, takes some time to download)from the public PPA site: [ibm-bai-developer-edition-19.0.1.zip](http://www.ibm.com/support/docview.wss?uid=ibm10878709) + - Unzip the file and rename `ibm-bai-developer-edition-19.0.3.tar.gz` to `ibm-bai-dev-3.1.0-dev.tar.gz`. + - Download the following files: + - [configuration/easy-install-kafka.yaml](configuration/easy-install-kafka.yaml?raw=true) + - [configuration/easy-install.yaml](configuration/easy-install.yaml?raw=true) + - [configuration/bai-configmap.yaml](configuration/bai-configmap.yaml?raw=true) + - [configuration/pv.yaml](configuration/pv.yaml?raw=true) + - [configuration/bai-psp.yaml](configuration/bai-psp.yaml?raw=true) + - [install-bai-minikube.sh](./install-bai-minikube.sh?raw=true) + - [install-bai.sh](./install-bai.sh?raw=true) + - [utilities.sh](./utilities.sh?raw=true) + - [Mac/Linux only] Ensure proper execution permissions of downloaded scripts: `chmod +x *.sh` + +## Automated installation ("fast path") + + - See [installation prerequisites](#prerequisites) + - Choose an \ to deal with. The valid values are "odm", "icm", "bpmn", "bawadv", or "content". + - If your event emitter is not hosted by the local host, you must use the ```-i ``` option to specify the local machine IP address that is reachable by the event emitter. + - To bypass the check of the Minikube version used, pass the ``` -f ``` option. + - Make sure that the VirtualBox ```VBoxManage``` command is on the ```PATH```. + - Example: ```./install-bai-minikube.sh -e -i 9.128.37.112 -f``` + - On Windows, you must run this command from the Git [```bash```](https://gitforwindows.org/) command tool, which comes with Docker Toolbox. + - Processed data is stored locally in the ```minikube virtual machine /data``` directory and subdirectories. + + +## Step-by-step installation + +Run the following commands from the destination folder where you downloaded the IBM Business Automation Insights Developer Edition files (archive + YAML files). Your working directory structure should be: + +``` +. +|____./ibm-bai-dev-3.1.0-dev.tar.gz +|____./configuration/easy-install.yaml +|____./configuration/easy-install-kafka.yaml +|____./configuration/bai-configmap.yaml +|____./configuration/bai-psp.yaml +|____./configuration/pv.yaml +``` + +### 1. Initialize Minikube + +``` +minikube start --cpus 2 --memory 6144 +minikube docker-env +eval $(minikube docker-env) +``` +### 2. Initialize minikube persistent volumes + +``` +kubectl create ns bai +kubectl apply -f configuration/pv.yaml -n bai +minikube ssh "sudo mkdir /data/bai" +minikube ssh "sudo mkdir /data/bai-elasticsearch-data-1" +minikube ssh "sudo mkdir /data/bai-elasticsearch-master-1" +minikube ssh "sudo chmod -R 777 /data" +``` + +### 3. Initialize Helm + +``` +helm init --wait +``` + +### 4. Install Apache Kafka + +#### Scenario 1: Your event emitter (BPMN, BAW Advanced, Case, ODM, or Content) is running on your local machine. + +If you plan to feed your Business Automation Insights instance with events from a Business Automation Worfklow server or from an Operational Decision Manager server running on your local machine, use the following procedure to install Apache Kafka: + +``` +helm repo add confluent https://confluentinc.github.io/cp-helm-charts +helm repo update +kubectl create ns kafka +helm install --wait --name kafka-release --namespace kafka -f configuration/easy-install-kafka.yaml --set cp-kafka.customEnv.ADVERTISED_LISTENER_HOST=$(minikube ip) confluent/cp-helm-charts +``` + +After the command completes, check the deployment status of Kafka pods with `kubectl get pods -n kafka` until all pods are running.

+ +#### Scenario 2: Your event emitter (BPMN, BAW Advanced, Case, ODM, or Content) is running on an external machine. + +If you plan to feed your Business Automation Insights instance with events from a Business Automation Worfklow server or from an Operational Decision Manager server running on an external machine (for example, on IBM Cloud), you need to through the following steps: + +1. Retrieve the IP address of your local machine (addressable from an external machine). +1. Set up Kafka so that it informs its listener of this IP address. +1. Set up VirtualBox to redirect the connection to your local machine IP to the Minikube VM. +1. Disable your local firewall. This is particularly important on Mac OSx where the firewall is enabled by default. Or add a rule to allow remote connection to port `31090`. + +In the following procedure, replace `1.2.3.4` with the actual IP address of your local machine: + +``` +VBoxManage controlvm "minikube" natpf1 "kafka service,tcp,,31090,,31090" +helm repo add confluent https://confluentinc.github.io/cp-helm-charts +helm repo update +kubectl create ns kafka +helm install --wait --name kafka-release --namespace kafka -f configuration/easy-install-kafka.yaml --set cp-kafka.customEnv.ADVERTISED_LISTENER_HOST=1.2.3.4 confluent/cp-helm-charts +``` + +After the command completes, check the deployment status of Kafka pods with `kubectl get pods -n kafka` until all pods are running.
Click to show an example of successful completed deployment. +

+ +``` +NAME READY STATUS RESTARTS AGE +kafka-release-cp-kafka-0 2/2 Running 0 108s +kafka-release-cp-zookeeper-0 2/2 Running 0 108s +``` + +

+
+ +--- +**Re-installing Kafka when the external IP address changes** + +If your external IP address changes when you restart your computer, update the Kafka settings so that it correctly sends the new IP address to Kafka listeners. + +To update Kafla settings, run the following commands (replacing 2.3.4.5 with the actual new IP address of your local machine): + +``` +./ip-upgrade.sh -i 2.3.4.5 +``` + +--- +### 5. Install IBM Business Automation Insights Developer Edition + +#### 1. Load images into Minikube docker registry. + +``` +tar xvf ibm-bai-dev-3.1.0-dev.tar.gz +cd images +for f in *.tar.gz; do cat $f | docker load; done +cd .. +``` + +#### 2. Create a security policy and a service account for Elasticsearch. + +``` +kubectl create -f configuration/bai-psp.yaml -n bai +kubectl create rolebinding bai-rolebinding --role=bai-role --serviceaccount=bai:bai-release-bai-psp-sa -n bai +``` + +#### 3. Choose the type of event processing you want to deploy. + +You can choose: `bpmn`, `bawadv`, `icm`, `odm`, or `content`. + +``` +EVENT_PROCESSING_TYPE= +``` + +#### 4. Deploy the bai release. + +``` +cd charts +tar xvf ibm-business-automation-insights-dev-3.1.0-dev.tgz +cp ../configuration/bai-configmap.yaml ibm-business-automation-insights-dev/templates +cd .. +helm install --wait --name bai-release --namespace bai charts/ibm-business-automation-insights-dev -f configuration/easy-install.yaml --set kafka.bootstrapServers=$(minikube ip):31090 --set ${EVENT_PROCESSING_TYPE}.install=true +``` + +#### 5. Verify + +- Run `kubectl get pods -n bai -w` to monitor the deployment status of bai pods. + +
    Click to show an example of successful completed deployment. +

    + +``` +$ kubectl get pods -n bai +NAME READY STATUS RESTARTS AGE +bai-release-bai-admin-6bc755fc5f-mwvl7 1/1 Running 0 36m +bai-release-bai-bpmn-bxknx 0/1 Completed 0 36m +bai-release-bai-flink-jobmanager-5bff88579b-vkhmn 1/1 Running 0 36m +bai-release-bai-flink-taskmanager-0 1/1 Running 0 36m +bai-release-bai-flink-zk-0 1/1 Running 0 36m +bai-release-bai-setup-5vrvd 0/1 Completed 0 36m +bai-release-ibm-dba-ek-client-6ccf856d5d-f7xk6 2/2 Running 0 36m +bai-release-ibm-dba-ek-data-0 1/1 Running 0 36m +bai-release-ibm-dba-ek-kibana-6f9c464574-zhxnq 2/2 Running 0 36m +bai-release-ibm-dba-ek-master-0 1/1 Running 0 36m +``` + +

    +
+ +- Run `echo "https://$(minikube ip):31501"` to obtain the URL of Kibana. +- Kibana credentials are admin / passw0rd + +Note: +- Elasticsearch REST endpoint is available on port `31200`. +- The Business Automation Insights administration service is available on port `31100`. + +## Starting or stopping Minikube + +- To start Minikube: ```minikube start --cpus 2 --memory 6144``` +- To stop Minikube: ```minikube stop``` + +## Next step: configure your event emitter + +To configure your event emitter, you need the following information: + +- The **Kafka bootstrap URL**. By default, you can connect to Kafka from your host by using the bootstrap URL that is returned by this command: + - `echo $(minikube ip):31090` +- The **name of the Kafka topic** that Event Processing Jobs use to consume messages sent by event emitters: + - `bai-release-ingress` + +## Troubleshooting + +- After Minikube is restarted, the task manager is not running properly (READY: 0/1). Solution: Restart the job manager: `kubectl delete pod -n bai` + +- If your Minikube is not responsive anymore, you probably undersized it and deployed too many elements on it. It is safer to call `minikube delete` and start all over again than to try to fix separate issues. + +- If you get errors such as `Error: error validating "": error validating data: field` when you install Kafka or the Helm Chart for Business Automation Insights, use the exact Minikube and Helm versions this procedure was tested with (see [Prerequisites](#prerequisites)). + +- If, when Minikube starts, you get an error such as : ```💣 Error starting cluster: timed out waiting to elevate kube-system RBAC privileges: creating clusterrolebinding: Post https://192.168.99.110:8443/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings?timeout=1m0s: dial tcp 192.168.99.110:8443: connect: network is unreachable```, try the following actions: + - Delete the VirtualBox "vboxnet0" network adapter and try restarting. + - Turn ```off``` your VPN. + - Restart your computer + - See [Can't use Minikube on VPN](/~https://github.com/kubernetes/minikube/issues/1099) + +- If you get errors such as `Error: release kafka-release failed: namespaces "kafka" is forbidden: User "system:serviceaccount:kube-system:default" cannot get resource "namespaces" in API group "" in the namespace "kafka"`, run the following commands to fix the issue: + - `kubectl --namespace kube-system create serviceaccount tiller` + - `kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller` + - `kubectl --namespace kube-system patch deploy tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}` + +- In case the minikube VM is stopped suddently (aborted, power off...), checkpoints might be corrupted. In this case jobmanager will keep crashing, and a `kubectl logs bai-release-bai-flink-jobmanager --namespace bai | egrep -i error.*Could not read any of the . checkpoints from storage"` will show an error. + - run [recover-minikube-bai.sh](./recover-minikube-bai.sh?raw=true) + - monitor proper pod recovery using `kubectl --namespace bai get pods -w` + - Elasticsearch data will be recovered, but the Flink state will be reset, therefore the result of the processing is likely to be lost for the last events. + +- Troubleshooting Apache Flink jobs: [Knowledge Center - Troubleshooting Apache Flink jobs](http://engtest01w.fr.eurolabs.ibm.com:9190/support/knowledgecenter/SSYHZ8_18.0.x/com.ibm.dba.bai/topics/con_bai_troubleshoot_jobs.html) + +*** diff --git a/BAI/platform/minikube/configuration/bai-configmap.yaml b/BAI/platform/minikube/configuration/bai-configmap.yaml new file mode 100755 index 00000000..85c1f8c3 --- /dev/null +++ b/BAI/platform/minikube/configuration/bai-configmap.yaml @@ -0,0 +1,49 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-bai-env + labels: + app: {{ template "ibm-bai.name" . }} + chart: {{ .Chart.Name }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +data: + {{- if .Values.settings.egress }} +bai-features: "kafka-egress" + {{- else }} +bai-features: "" + {{- end }} + {{- include "elasticsearch.cfg" . | indent 2 }} +storage-batch-size: {{ int .Values.flink.batchSize | quote }} +storage-inactive-bucket-check-interval-ms: {{ .Values.flink.checkInterval | quote }} +storage-inactive-bucket-threshold-ms: {{ .Values.flink.bucketThreshold | quote}} + +storage-bucket-url: "" + {{- if .Values.flink.taskManagerHeapMemory }} +flink-heap-memory: {{ min 1024 .Values.flink.taskManagerHeapMemory | quote }} + {{- else }} +flink-heap-memory: "1024" + {{- end }} +flink-taskmanager-cpu-cores: "1" + +flink-job-checkpointing-interval: {{ .Values.flink.jobCheckpointingInterval | quote }} +flink-job-elasticsearch-max-actions: "10" + +flink-security-krb5-enable-kafka: "false" +flink-security-krb5-enable-hdfs: "false" + +flink-security-krb5-realm: {{ .Values.kerberos.realm | quote }} +flink-security-krb5-kdc: {{ .Values.kerberos.kdc | quote }} +flink-security-krb5-principal: {{ .Values.kerberos.principal | quote }} + {{- if not .Values.baiSecret }} +admin-username: {{ .Values.admin.username }} +kafka-username: {{ .Values.kafka.username | quote }} + {{- end }} +kafka-bootstrap-servers: {{ .Values.kafka.bootstrapServers | quote }} +kafka-security-protocol: {{ .Values.kafka.securityProtocol }} +kafka-sasl-kerberos-service-name: {{ .Values.kafka.saslKerberosServiceName | quote }} +ingress-topic: {{ .Values.settings.ingressTopic | default (printf "%s-%s" .Release.Name "ibm-bai-ingress") }} +egress-topic: {{ .Values.settings.egressTopic | default (printf "%s-%s" .Release.Name "ibm-bai-egress") }} +service-topic: {{ .Values.settings.serviceTopic | default (printf "%s-%s" .Release.Name "ibm-bai-service") }} +bpmn-end-aggregation-delay: {{ .Values.bpmn.endAggregationDelay | quote }} +es-config-version: 1.2.8 diff --git a/BAI/platform/minikube/configuration/bai-psp.yaml b/BAI/platform/minikube/configuration/bai-psp.yaml new file mode 100644 index 00000000..21c23b19 --- /dev/null +++ b/BAI/platform/minikube/configuration/bai-psp.yaml @@ -0,0 +1,38 @@ +apiVersion: extensions/v1beta1 +kind: PodSecurityPolicy +metadata: + annotations: + kubernetes.io/description: "This policy is required to allow ibm-dba-ek pods running elasticsearch to use privileged containers" + name: bai-psp +spec: + privileged: true + runAsUser: + rule: RunAsAny + seLinux: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + fsGroup: + rule: RunAsAny + volumes: + - '*' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: bai-role + namespace: bai +rules: + - apiGroups: + - extensions + resourceNames: + - bai-psp + resources: + - podsecuritypolicies + verbs: + - use +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: bai-release-bai-psp-sa \ No newline at end of file diff --git a/BAI/platform/minikube/configuration/easy-install-kafka.yaml b/BAI/platform/minikube/configuration/easy-install-kafka.yaml new file mode 100644 index 00000000..0503d898 --- /dev/null +++ b/BAI/platform/minikube/configuration/easy-install-kafka.yaml @@ -0,0 +1,33 @@ +# +# BAI on Minikube (easy install) - kafka values definition +# +cp-kafka: + brokers: 1 + customEnv: + ADVERTISED_LISTENER_HOST: "" + configurationOverrides: + "advertised.listeners": |- + EXTERNAL://$(ADVERTISED_LISTENER_HOST):31090 + "offsets.topic.replication.factor": 1 + nodeport: + enabled: true + heapOptions: "-Xms256M -Xmx256M" + persistence: + enabled: false + disksPerBroker: 0 + +cp-zookeeper: + servers: 1 + heapOptions: "-Xms256M -Xmx256M" + persistence: + enabled: false + +cp-schema-registry: + enabled: false +cp-kafka-rest: + enabled: false +cp-kafka-connect: + enabled: false +cp-ksql-server: + enabled: false + diff --git a/BAI/platform/minikube/configuration/easy-install.yaml b/BAI/platform/minikube/configuration/easy-install.yaml new file mode 100644 index 00000000..a7028ce7 --- /dev/null +++ b/BAI/platform/minikube/configuration/easy-install.yaml @@ -0,0 +1,110 @@ +# +# BAI on Minikube (easy install) - BAI values definition (18.0.3) +# +persistence: + useDynamicProvisioning: true + +imagePullPolicy: Never + +kafka: + bootstrapServers: "kafka-release-cp-kafka-headless:9092" + securityProtocol: "PLAINTEXT" + +elasticsearch: + install: true + +settings: + egress: false + ingressTopic: bai-release-ingress + serviceTopic: bai-release-service + +flink: + taskManagerHeapMemory: 400 + taskManagerMemory: 500 + taskManagerCPU: 0.5 + zookeeper: + replicas: 1 + resources: + requests: + memory: "100Mi" + cpu: "50m" + limits: + memory: "200Mi" + cpu: "200m" + +admin: + username: "admin" + password: "passw0rd" + serviceType: NodePort + externalPort: 31100 + +flinkPv: + existingClaimName: "minikube-bai-pvc" + capacity: "2Gi" + +bpmn: + install: false + +icm: + install: false + +odm: + install: false + +content: + install: false + +bawadv: + install: false + +ibm-dba-ek: + image: + pullPolicy: Never + elasticsearch: + probeInitialDelay: 120 + data: + snapshotStorage: + enabled: false + storage: + persistent: true + useDynamicProvisioning: false + storageClass: "bai-elasticsearch-pv" + size: "1Gi" + heapSize: "392m" + resources: + limits: + memory: "640Mi" + cpu: "200m" + requests: + memory: "392Mi" + cpu: "100m" + client: + serviceType: NodePort + externalPort: 31200 + heapSize: "392m" + resources: + limits: + memory: "1000Mi" + cpu: "200m" + requests: + memory: "392Mi" + cpu: "100m" + master: + heapSize: "392m" + resources: + limits: + memory: "1000Mi" + cpu: "200m" + requests: + memory: "256Mi" + cpu: "100m" + kibana: + serviceType: NodePort + externalPort: 31501 + resources: + limits: + memory: "512Mi" + cpu: "150m" + requests: + memory: "256Mi" + cpu: "100m" diff --git a/BAI/platform/minikube/configuration/pv.yaml b/BAI/platform/minikube/configuration/pv.yaml new file mode 100644 index 00000000..9698509e --- /dev/null +++ b/BAI/platform/minikube/configuration/pv.yaml @@ -0,0 +1,55 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: bai-elasticsearch-data-1 +spec: + storageClassName: "bai-elasticsearch-pv" + accessModes: + - ReadWriteOnce + capacity: + storage: 1Gi + hostPath: + path: /data/bai-elasticsearch-data-1 + persistentVolumeReclaimPolicy: Recycle +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: bai-elasticsearch-master-1 +spec: + storageClassName: "bai-elasticsearch-pv" + accessModes: + - ReadWriteOnce + capacity: + storage: 1Gi + hostPath: + path: /data/bai-elasticsearch-master-1 + persistentVolumeReclaimPolicy: Recycle +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: minikube-bai-pv +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 2Gi + hostPath: + path: /data/bai + persistentVolumeReclaimPolicy: Retain + claimRef: + namespace: bai + name: minikube-bai-pvc +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: minikube-bai-pvc +spec: + storageClassName: "" + accessModes: + - ReadWriteMany + resources: + requests: + storage: 2Gi diff --git a/BAI/platform/minikube/get-logs.sh b/BAI/platform/minikube/get-logs.sh new file mode 100755 index 00000000..d7697c4f --- /dev/null +++ b/BAI/platform/minikube/get-logs.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +BAI_NAMESPACE="bai" +KAFKA_NAMESPACE="kafka" +LOG_DIR="./logs" + +echo "Creating logs directory" + +mkdir -p ${LOG_DIR} + +echo "Retrieving logs for Kafka components" +kubectl logs $(kubectl get pods -n ${KAFKA_NAMESPACE} | grep kafka-release-cp-kafka- | awk '{print $1}') cp-kafka-broker -n ${KAFKA_NAMESPACE} > ${LOG_DIR}/kafka.log +kubectl logs -p $(kubectl get pods -n ${KAFKA_NAMESPACE} | grep kafka-release-cp-kafka- | awk '{print $1}') cp-kafka-broker -n ${KAFKA_NAMESPACE} > ${LOG_DIR}/kafka.previous.log +kubectl logs $(kubectl get pods -n ${KAFKA_NAMESPACE} | grep kafka-release-cp-zookeeper- | awk '{print $1}') cp-zookeeper-server -n ${KAFKA_NAMESPACE} > ${LOG_DIR}/kafka-zookeeper.log +kubectl logs -p $(kubectl get pods -n ${KAFKA_NAMESPACE} | grep kafka-release-cp-zookeeper- | awk '{print $1}') cp-zookeeper-server -n ${KAFKA_NAMESPACE} > ${LOG_DIR}/kafka-zookeeper.previous.log + +echo "Retrieving logs for Elasticsearch components" +kubectl logs $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-ibm-dba-ek-master- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/elasticsearch-master.log +kubectl logs -p $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-ibm-dba-ek-master- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/elasticsearch-master.previous.log +kubectl logs $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-ibm-dba-ek-data- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/elasticsearch-data.log +kubectl logs -p $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-ibm-dba-ek-data- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/elasticsearch-data.previous.log +kubectl logs $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-ibm-dba-ek-client- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/elasticsearch-client.log +kubectl logs -p $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-ibm-dba-ek-client- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/elasticsearch-client.previous.log + +echo "Retrieving logs for Flink components" +kubectl logs $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-bai-flink-jobmanager- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/flink-jobmanager.log +kubectl logs -p $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-bai-flink-jobmanager- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/flink-jobmanager.previous.log +for pod in $(kubectl get pods -n bai | grep bai-release-bai-flink-taskmanager- | awk '{print $1}'); do `kubectl logs $pod -n ${BAI_NAMESPACE} > ${LOG_DIR}/${pod#bai-release-bai-}.log`; done +for pod in $(kubectl get pods -n bai | grep bai-release-bai-flink-taskmanager- | awk '{print $1}'); do `kubectl logs -p $pod -n ${BAI_NAMESPACE} > ${LOG_DIR}/${pod#bai-release-bai-}.previous.log`; done +kubectl logs $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-bai-flink-zk- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/flink-zookeeper.log +kubectl logs -p $(kubectl get pods -n ${BAI_NAMESPACE} | grep bai-release-bai-flink-zk- | awk '{print $1}') -n ${BAI_NAMESPACE} > ${LOG_DIR}/flink-zookeeper.previous.log diff --git a/BAI/platform/minikube/install-bai-minikube.sh b/BAI/platform/minikube/install-bai-minikube.sh new file mode 100755 index 00000000..beca7f03 --- /dev/null +++ b/BAI/platform/minikube/install-bai-minikube.sh @@ -0,0 +1,188 @@ +#!/bin/bash + +LVAR_SCRIPT_NAME="$(basename $0)" +LVAR_BAI_VERSION="3.1.0" +LVAR_MINIKUBE_VERSION="1.0.1" +LVAR_LOCALHOST_IP="" +LVAR_FORCE_MINIKUBE_VERSION="false" +LVAR_VM_DRIVER="" +LVAR_VBOX_NETWORKS="" + +set -e + +# Common script utilities +source ./utilities.sh + +showHelp() { + echo + echo "--------------------------------------------------------------------------" + echo "Installs a Business Automation Insights release on minikube." + echo "--------------------------------------------------------------------------" + echo "Prerequisites" + echo "These files must be present in the same directory:" + echo " - configuration/pv.yaml" + echo " - configuration/bai-configmap.yaml" + echo " - configuration/bai-psp.yaml" + echo " - configuration/easy-install-kafka.yaml" + echo " - configuration/easy-install.yaml" + echo " - install-bai-minikube.sh" + echo " - $LVAR_BAI_IMAGES" + echo + echo "--------------------------------------------------------------------------" + echo "Arguments:" + echo " -e " + echo " Mandatory. The argument must have one of the following values:" + echo " - bpmn " + echo " - bawadv " + echo " - icm " + echo " - odm " + echo " - content " + echo " -i " + echo " Optional. Needed only if the event emitter is not present on the local machine." + echo " Defaults to the value of \"minikube ip\"." + echo " -f" + echo " Optional. Bypasses the minikube version validation." + echo + echo " -h: Displays this help." + echo + echo "Examples:" + echo + echo " ./${LVAR_SCRIPT_NAME} -e odm" + echo + echo "---------------------------------------------------------------" + exit 1 +} +echo + +purgeOldImages() { + images=$(docker images | grep "bai-" | tr -s " " | cut -d " " -f 3) + if [ ! -z "$images" ]; then + echo "removing docker images $images" + docker rmi -f $images + else + echo "No Docker images to remove." + fi +} + +installNewImages() { + echo "Loading Business Automation Insights images" + purgeOldImages + tar xvf "$LVAR_BAI_IMAGES" + cd images + for f in *.tar.gz; do cat $f | docker load ; done + cd .. +} + +disableVirtualBoxDHCP() { + # this is supposed to work on both Win10/GitBash and OSx Mojave platforms. + VBoxManage list dhcpservers > dhcpList.txt + IP_MASK=$(minikube ip | cut -d "." -f -3) + + cat dhcpList.txt | grep NetworkName > names.txt + cat dhcpList.txt | grep lowerIPAddress > ips.txt + + LVAR_MINIKUBE_NETWORK_NAME=$(awk 'BEGIN {OFS=" "}{ + getline line < "names.txt" + print $0,line + } ' ips.txt | grep "$IP_MASK" | cut -d ":" -f 3 | tr -s " " | xargs) + + rm dhcpList.txt names.txt ips.txt + VBoxManage dhcpserver modify --netname "$LVAR_MINIKUBE_NETWORK_NAME" --disable + echo "Disabled DHCP server on VirtualBox network name: "$LVAR_MINIKUBE_NETWORK_NAME"" +} + +while getopts :e:d:h:i:f option; +do + case ${option} in + e) + EVENT_PROCESSING_TYPE=$OPTARG + echo "Event processing is for ${EVENT_PROCESSING_TYPE}" + ;; + h) + showHelp + ;; + i) + LVAR_LOCALHOST_IP=$OPTARG + checkValidIP $LVAR_LOCALHOST_IP + echo "Local machine IP address: $LVAR_LOCALHOST_IP" + ;; + f) + LVAR_FORCE_MINIKUBE_VERSION="true" + ;; + d) + LVAR_VM_DRIVER=$OPTARG + echo "Use vm driver: ${LVAR_VM_DRIVER}" + ;; + \?) + echo "Invalid option: -${OPTARG}" + exit 1 + ;; + esac +done +echo + +if [ -z "${EVENT_PROCESSING_TYPE}" ]; then + echo "ERROR: You must provide an event type to process...." + showHelp +fi + +if [ "${EVENT_PROCESSING_TYPE}" != "odm" -a "${EVENT_PROCESSING_TYPE}" != "icm" -a "${EVENT_PROCESSING_TYPE}" != "bpmn" -a "${EVENT_PROCESSING_TYPE}" != "bawadv" -a "${EVENT_PROCESSING_TYPE}" != "content" ]; then + echo "ERROR: This event type is invalid and cannot be processed: ${EVENT_PROCESSING_TYPE}" + showHelp +fi + +checkFileExist "./configuration/pv.yaml" +checkFileExist "./configuration/bai-configmap.yaml" +checkFileExist "./configuration/bai-psp.yaml" +checkFileExist "./configuration/easy-install-kafka.yaml" +checkFileExist "./configuration/easy-install.yaml" +checkFileExist "./install-bai-minikube.sh" +checkFileExist "./install-bai.sh" +checkFileExist "./$LVAR_BAI_IMAGES" + +if [ "$LVAR_FORCE_MINIKUBE_VERSION" == "false" ]; then + echo "Checking the minikube version." + if echo "$(minikube version)" | grep "$LVAR_MINIKUBE_VERSION" > /dev/null; then + echo "The minikube version is correct." + else + echo "The minikube version is NOT correct. Only version $LVAR_MINIKUBE_VERSION is supported. Exiting." + echo "If you wish to skip this check, use the -f option." + exit 1 + fi +else + echo "You have chosen to use an unchecked version of minikube." +fi + +echo "Creating the minikube machine" + +if [ ! -z "$LVAR_VM_DRIVER" ]; then + MINIKUBE_OPTS=" --vm-driver $LVAR_VM_DRIVER" +fi +minikube $MINIKUBE_OPTS start --cpus 2 --memory 6144 + +minikube docker-env --shell bash +eval $(minikube docker-env --shell bash) + +# setting kafka communication address +if [ -z "$LVAR_LOCALHOST_IP" ]; then + LVAR_LOCALHOST_IP="$(minikube ip)" +fi + + +minikube ssh "sudo mkdir -p /data/bai" +minikube ssh "sudo mkdir -p /data/bai-elasticsearch-data-1" +minikube ssh "sudo mkdir -p /data/bai-elasticsearch-master-1" +minikube ssh "sudo chmod -R 777 /data" + +if command -v VBoxManage; then + echo "Opening the Kafka communication port" + VBoxManage controlvm "minikube" natpf1 "kafka service,tcp,,31090,,31090" + disableVirtualBoxDHCP +else + echo "Warning: VirtualBox does not exist. The Kafka communication port cannot be opened." + echo "The event emitter must be hosted locally." +fi + +installNewImages + +./install-bai.sh -e "$EVENT_PROCESSING_TYPE" -i "$(minikube ip)" -j "$LVAR_LOCALHOST_IP" -p ./configuration/pv.yaml -c ./configuration/bai-configmap.yaml -s ./configuration/bai-psp.yaml -k ./configuration/easy-install-kafka.yaml -b ./configuration/easy-install.yaml diff --git a/BAI/platform/minikube/install-bai.sh b/BAI/platform/minikube/install-bai.sh new file mode 100755 index 00000000..fc065b96 --- /dev/null +++ b/BAI/platform/minikube/install-bai.sh @@ -0,0 +1,172 @@ +#!/bin/bash + + +LVAR_SCRIPT_NAME="$(basename $0)" +LVAR_EMITTER_IP="" +LVAR_KAFKA_IP="" +LVAR_PV_YAML="" +LVAR_KAFKA_YAML="" +LVAR_BAI_YAML="" +LVAR_PSP_YAML="" +LVAR_CONFIG_MAP_YAML="" + +set -e + +# Common script utilities +source ./utilities.sh + +showHelp() { + echo + echo "--------------------------------------------------------------------------" + echo "Installs a Business Automation Insights release." + echo "--------------------------------------------------------------------------" + echo "Prerequisites" + echo "These files must be present in the same directory:" + echo " - A YAML file that defines the persistent volumes" + echo " - Optionally, a YAML file for Business Automation Insights ConfigMaps" + echo " - A YAML file that defines the pod security policy" + echo " - A YAML file for the Kafka installation" + echo " - A YAML file for the Business Automation Insights installation" + echo " - $LVAR_BAI_IMAGES that contains the Business Automation Insights release" + echo + echo "--------------------------------------------------------------------------" + echo "Arguments:" + echo " -e " + echo " Mandatory. The argument must have one of the following values:" + echo " - bpmn " + echo " - bawadv " + echo " - icm " + echo " - odm " + echo " -p Mandatory. " + echo " -s Mandatory. " + echo " -k Mandatory. " + echo " -b Mandatory. " + echo " -i Mandatory. " + echo " -j Mandatory. " + echo " -c Optional. " + echo + echo " -h" + echo " Displays this help." + echo + echo "Example:" + echo + echo " ./${LVAR_SCRIPT_NAME} -e odm -i 9.x.x.x -j 9.x.x.x -p ./pv.yaml -c ./bai-configmap.yaml -s ./bai-psp.yaml -k ./easy-install-kafka.yaml -b ./easy-install.yaml" + echo + echo "---------------------------------------------------------------" + exit 1 +} +echo + +while getopts :e:p:k:b:c:s:i:j:h option; +do + case ${option} in + e) + EVENT_PROCESSING_TYPE=$OPTARG + echo "Event processing is for ${EVENT_PROCESSING_TYPE}" + ;; + p) + LVAR_PV_YAML=$OPTARG + checkFileExist "$LVAR_PV_YAML" + ;; + k) + LVAR_KAFKA_YAML=$OPTARG + checkFileExist "$LVAR_KAFKA_YAML" + ;; + b) + LVAR_BAI_YAML=$OPTARG + checkFileExist "$LVAR_BAI_YAML" + ;; + c) + LVAR_CONFIG_MAP_YAML=$OPTARG + checkFileExist "$LVAR_CONFIG_MAP_YAML" + ;; + s) + LVAR_PSP_YAML=$OPTARG + checkFileExist "$LVAR_PSP_YAML" + ;; + i) + LVAR_EMITTER_IP=$OPTARG + checkValidIP $LVAR_EMITTER_IP + echo "Event emitter IP address: $LVAR_EMITTER_IP" + ;; + j) + LVAR_KAFKA_IP=$OPTARG + checkValidIP $LVAR_KAFKA_IP + echo "Kafka bootstrap server IP address: $LVAR_KAFKA_IP" + ;; + h) + showHelp + ;; + \?) + echo "Invalid option: -${OPTARG}" + exit 1 + ;; + esac +done +echo + +if [ -z "${EVENT_PROCESSING_TYPE}" ]; then + echo "ERROR: You must provide an event type to process...." + showHelp +fi +if [ -z "${LVAR_PV_YAML}" ]; then + echo "ERROR: You must provide a configuration file for persistent volumes ...." + showHelp +fi +if [ -z "${LVAR_KAFKA_YAML}" ]; then + echo "ERROR: You must provide a Kafka configuration file...." + showHelp +fi +if [ -z "${LVAR_BAI_YAML}" ]; then + echo "ERROR: You must provide a configuration file for Business Automation Insights...." + showHelp +fi +if [ -z "${LVAR_PSP_YAML}" ]; then + echo "ERROR: You must provide a configuration file for the pod security policy...." + showHelp +fi +if [ -z "${LVAR_EMITTER_IP}" ]; then + echo "ERROR: You must provide the IP address of the event emitter host...." + showHelp +fi +if [ -z "${LVAR_KAFKA_IP}" ]; then + echo "ERROR: You must provide the IP address of the Kafka host...." + showHelp +fi +if [ ! -z "${LVAR_CONFIG_MAP_YAML}" ] && [ ! -f "${LVAR_CONFIG_MAP_YAML}" ]; then + echo "ERROR: The ConfigMap file ${LVAR_CONFIG_MAP_YAML} cannot be found...." + showHelp +fi + +echo "Creating the Business Automation Insights namespace" +kubectl create ns bai + +echo "Creating persistent volumes" +kubectl apply -f "$LVAR_PV_YAML" -n bai + +echo "Initializing helm " +helm init --wait +helm repo add confluent https://confluentinc.github.io/cp-helm-charts +helm repo update + +echo "Creating the Kafka namespace" +kubectl create ns kafka + +echo "Tiller is $(which tiller)" +echo "Installing Kafka" +# due to /~https://github.com/helm/helm/issues/3173 and others, adding a timeout argument... +helm install --wait --timeout 999999 --name kafka-release --namespace kafka -f "$LVAR_KAFKA_YAML" --set cp-kafka.customEnv.ADVERTISED_LISTENER_HOST=$(echo $LVAR_EMITTER_IP) confluent/cp-helm-charts + +expand-BAI-Charts + +if [ ! -z "$LVAR_CONFIG_MAP_YAML" ]; then + cp "$LVAR_CONFIG_MAP_YAML" charts/ibm-business-automation-insights-dev/templates +fi + + +echo "Creating a security policy and a service account for Elasticsearch" +kubectl create -f "$LVAR_PSP_YAML" -n bai +kubectl create rolebinding bai-rolebinding --role=bai-role --serviceaccount=bai:bai-release-bai-psp-sa -n bai + +echo "Installing Business Automation Insights" +helm install --wait --timeout 999999 --name bai-release --namespace bai charts/ibm-business-automation-insights-dev -f "$LVAR_BAI_YAML" --set kafka.bootstrapServers=$(echo $LVAR_KAFKA_IP):31090 --set ${EVENT_PROCESSING_TYPE}.install=true diff --git a/BAI/platform/minikube/ip-update.sh b/BAI/platform/minikube/ip-update.sh new file mode 100755 index 00000000..d19ccf28 --- /dev/null +++ b/BAI/platform/minikube/ip-update.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +LVAR_SCRIPT_NAME="$(basename $0)" +LVAR_BAI_VERSION="3.1.0" +LVAR_LOCALHOST_IP="" + +set -e + +# Common script utilities +source ./utilities.sh + +showHelp() { + echo + echo "--------------------------------------------------------------------------" + echo "Update a Kafka release on minikube to advertise a new IP address." + echo "--------------------------------------------------------------------------" + echo "Prerequisites" + echo "These files must be present in the same directory:" + echo " - configuration/easy-install-kafka.yaml" + echo " - ibm-bai-dev-${LVAR_BAI_VERSION}-dev.tar.gz" + echo + echo "--------------------------------------------------------------------------" + echo "Arguments:" + echo " -i " + echo " Mandatory. The remote IP address of your computer" + echo + echo " -h" + echo " Displays this help." + echo + echo "Examples:" + echo + echo " ./${LVAR_SCRIPT_NAME} -i 1.2.3.4" + echo + echo "---------------------------------------------------------------" + exit 1 +} +echo + +while getopts hi: option; +do + case ${option} in + i) + LVAR_LOCALHOST_IP=$OPTARG + checkValidIP $LVAR_LOCALHOST_IP + echo "Local machine IP address: $LVAR_LOCALHOST_IP" + ;; + h) + showHelp + ;; + \?) + echo "Invalid option: -${OPTARG}" + exit 1 + ;; + esac +done +echo + +if [ -z "${LVAR_LOCALHOST_IP}" ]; then + echo "ERROR: You must provide the external IP address of your computer...." + showHelp +fi + +checkFileExist "./configuration/easy-install-kafka.yaml" +checkFileExist "$LVAR_BAI_IMAGES" + +echo "Initializing helm " +helm init --wait + +echo "Tiller is $(which tiller)" + +echo "Upgrading the Kafka installation with new IP address ${LVAR_LOCALHOST_IP}" +helm upgrade --wait --timeout 999999 --namespace kafka -f configuration/easy-install-kafka.yaml --set cp-kafka.customEnv.ADVERTISED_LISTENER_HOST=${LVAR_LOCALHOST_IP} kafka-release confluent/cp-helm-charts diff --git a/BAI/platform/minikube/recover-minikube-bai.sh b/BAI/platform/minikube/recover-minikube-bai.sh new file mode 100755 index 00000000..eebee431 --- /dev/null +++ b/BAI/platform/minikube/recover-minikube-bai.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +echo This script is designed to recover an IBM Business Automation Insights cluster on minikube if persisted checkpoints are corrupted, typically in case of virtual machine sudden stop. +echo WARNING: Elasticsearch data will be recovered, but the Flink state will be reset, therefore the result of the processing is likely to be lost for the last events. + +if [ `which jq | wc -l` == "0" ] + then + echo ERROR: jq is required to run this script, please install it on your system: https://stedolan.github.io/jq/ + exit 1 +fi + +echo "Backing up previous flink data in /data/bai.saved..." +minikube ssh "sudo cp -r /data/bai/ /data/bai.saved" + +echo "Removing flink related content..." +minikube ssh "sudo rm -rf /data/bai/checkpoints/*" +minikube ssh "sudo rm -rf /data/bai/recovery/*" +minikube ssh "sudo rm -rf /data/bai/savepoints/*" +minikube ssh "sudo rm -rf /data/bai/flink-zookeeper/*" + +echo "Restarting jobmanager and zookeeper pods..." +JOB_MANAGER_POD=`kubectl get pods -n bai | egrep jobmanager | awk '{print $1}'` +ZK_POD=`kubectl get pods -n bai | egrep flink-zk | awk '{print $1}'` +kubectl delete pod $JOB_MANAGER_POD -n bai +kubectl delete pod $ZK_POD -n bai + +PILLAR_LIST=`kubectl get pods -n bai | grep -v "dba" | grep -v flink | grep -v admin | grep -v setup | grep bai | cut -d " " -f 1 | cut -d "-" -f -4 | sort -u` + +for p in $PILLAR_LIST +do + echo "Restarting pillar job $p..." + kubectl get job $p -o json -n bai | jq 'del(.spec.selector)' | jq 'del(.spec.template.metadata.labels)' | kubectl replace --force -f - +done diff --git a/BAI/platform/minikube/utilities.sh b/BAI/platform/minikube/utilities.sh new file mode 100644 index 00000000..dacdb44f --- /dev/null +++ b/BAI/platform/minikube/utilities.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +checkFileExist() { + if [ ! -f "$1" ]; then + echo "ERROR: The $1 file must be present." + exit 1 + fi +} + +checkValidIP() { + +# first testing IPV4 format + test='([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])' + + if [[ $1 =~ ^$test\.$test\.$test\.$test$ ]] + then + echo "IP v4 is $1" + ret=0 + else + echo "$1 is not a valid IP v4, checking for IP v6." + checkValidIPV6 $1 + fi + return $ret +} + +checkValidIPV6() { + ipv6reg='^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$' + var="$1" + + if [[ $var =~ $ipv6reg ]]; then + echo "IP v6 is $1" + ret=0 + else + echo "$1 is not a valid IP v6, exiting." + ret=1 + fi + return $ret +} + +check-es-config-versions() { + MINIKUBE_CONFIF_MAP="configuration/bai-configmap.yaml" + BAI_CONFIG_MAP="charts/ibm-business-automation-insights-dev/templates/bai-configmap.yaml" + checkFileExist "$BAI_CONFIG_MAP" + checkFileExist "$MINIKUBE_CONFIF_MAP" + es_version_BAI=$(cat $BAI_CONFIG_MAP | grep es-config-version | cut -d ":" -f 2 | tr -s " " | xargs) + es_version_MINIKUBE=$(cat $MINIKUBE_CONFIF_MAP | grep es-config-version | cut -d ":" -f 2 | tr -s " " | xargs) + if [ ! "$es_version_BAI" == "$es_version_MINIKUBE" ]; then + echo "Error: The check for the es-config version failed. The value of \"es-config-version\" in $MINIKUBE_CONFIF_MAP should be $es_version_BAI. Exiting..." + minikube delete + return 1 + else + echo "The check for the es-config version passed." + fi +} + +LVAR_BAI_VERSION="3.1.0" +LVAR_SPRINT_VERSION="dev" +LVAR_BAI_IMAGES_SPRINT="ibm-bai-dev-$LVAR_BAI_VERSION-$LVAR_SPRINT_VERSION.tar.gz" +LVAR_BAI_IMAGES="ibm-bai-dev-$LVAR_BAI_VERSION-dev.tar.gz" +LVAR_BAI_CHARTS_SPRINT="charts/ibm-business-automation-insights-dev-$LVAR_BAI_VERSION-$LVAR_SPRINT_VERSION.tgz" +LVAR_BAI_CHARTS="charts/ibm-business-automation-insights-dev-$LVAR_BAI_VERSION-dev.tgz" + +expand-BAI-Charts() { + # moving sprint charts into regular charts + if [ -f "$LVAR_BAI_CHARTS_SPRINT" ]; then + mv "$LVAR_BAI_CHARTS_SPRINT" "$LVAR_BAI_CHARTS" + fi + tar xvf "$LVAR_BAI_CHARTS" -C charts/ + check-es-config-versions +} + + +# moving sprint images into regular images +if [ -f "$LVAR_BAI_IMAGES_SPRINT" ]; then + mv "$LVAR_BAI_IMAGES_SPRINT" "$LVAR_BAI_IMAGES" +fi + diff --git a/CONTENT/README.md b/CONTENT/README.md new file mode 100644 index 00000000..8745611e --- /dev/null +++ b/CONTENT/README.md @@ -0,0 +1,32 @@ +# Deploy FileNet Content Manager + +IBM® FileNet® Content Manager V5.5 digitizes content and manages the content lifecycle by enabling users to focus on their work and collaborate within the enterprise and with external business partners. + +IBM FileNet Content Manager offers enterprise-level scalability and flexibility to handle the most demanding content challenges, the most complex business processes, and integration to all your existing systems. FileNet P8 is a reliable, scalable, and highly available enterprise platform that enables you to capture, store, manage, secure, and process information to increase operational efficiency and lower total cost of ownership. FileNet P8 enables you to streamline and automate business processes, access and manage all forms of content, and automate records management to help meet compliance needs. + +For more information see [FileNet Content Manager in the Knowledge Center](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.offerings/topics/con_cm.html) + +## Requirements and Prerequisites + +Perform the following tasks to prepare to deploy your FileNet Content Manager images on Kubernetes: + +- Prepare your Kubernetes environment. See [Preparing to install automation containers on Kubernetes](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_env_k8s.html) + +- Download the PPA. Refer to the top repository [readme](../README.md) to find instructions on how to push and tag the product container images to your Docker registry. + +- Prepare your FileNet Content Manager environment. These procedures include setting up databases, LDAP, storage, and configuration files that are required for use and operation. If you plan to use the YAML file method, you also create YAML files that include the applicable parameter values for your deployment. You must complete all of the [preparation steps for FileNet Content Manager](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_ecmk8s.html) before you are ready to deploy the container images. + +- If you want to deploy additional optional containers, prepare the requirements that are specific to those containers. For details see the following information: + - [Configuring external share for containers](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_ecmexternalsharek8s.html) + - [Technology Preview: Getting started with the Content Services GraphQL API](http://www.ibm.com/support/docview.wss?uid=ibm10883630) + +## Deploying + +You can deploy your container images with the following methods: + +- [Using Helm charts](helm-charts/README.md) +- [Using Kubernetes YAML](k8s-yaml/README.md) + +## Completing post deployment configuration + +After you deploy your container images, you perform some required and some optional steps to get your FileNet Content Manager environment up and running. For detailed instructions, see [Completing post deployment tasks for IBM FileNet Content Manager](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_deploy_postecmdeployk8s.html) diff --git a/CONTENT/configuration/CMIS/configDropins/overrides/ldap_AD.xml b/CONTENT/configuration/CMIS/configDropins/overrides/ldap_AD.xml new file mode 100644 index 00000000..c8fa5155 --- /dev/null +++ b/CONTENT/configuration/CMIS/configDropins/overrides/ldap_AD.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/CONTENT/configuration/CMIS/configDropins/overrides/ldap_TDS.xml b/CONTENT/configuration/CMIS/configDropins/overrides/ldap_TDS.xml new file mode 100644 index 00000000..6c9610d4 --- /dev/null +++ b/CONTENT/configuration/CMIS/configDropins/overrides/ldap_TDS.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/DB2JCCDriver.xml b/CONTENT/configuration/CPE/configDropins/overrides/DB2JCCDriver.xml new file mode 100644 index 00000000..937c2ce0 --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/DB2JCCDriver.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/GCD.xml b/CONTENT/configuration/CPE/configDropins/overrides/GCD.xml new file mode 100644 index 00000000..b51f5026 --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/GCD.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/GCD_HADR.xml b/CONTENT/configuration/CPE/configDropins/overrides/GCD_HADR.xml new file mode 100644 index 00000000..30365e42 --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/GCD_HADR.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/GCD_Oracle.xml b/CONTENT/configuration/CPE/configDropins/overrides/GCD_Oracle.xml new file mode 100644 index 00000000..d8488a5f --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/GCD_Oracle.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE.xml b/CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE.xml new file mode 100644 index 00000000..f7601e9c --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE_HADR.xml b/CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE_HADR.xml new file mode 100644 index 00000000..2b746053 --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE_HADR.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE_Oracle.xml b/CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE_Oracle.xml new file mode 100644 index 00000000..a5ce87c9 --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/OBJSTORE_Oracle.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/OraJDBCDriver.xml b/CONTENT/configuration/CPE/configDropins/overrides/OraJDBCDriver.xml new file mode 100644 index 00000000..aa2cffb9 --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/OraJDBCDriver.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/ldap_AD.xml b/CONTENT/configuration/CPE/configDropins/overrides/ldap_AD.xml new file mode 100644 index 00000000..c8fa5155 --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/ldap_AD.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/CONTENT/configuration/CPE/configDropins/overrides/ldap_TDS.xml b/CONTENT/configuration/CPE/configDropins/overrides/ldap_TDS.xml new file mode 100644 index 00000000..e5725463 --- /dev/null +++ b/CONTENT/configuration/CPE/configDropins/overrides/ldap_TDS.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/CONTENT/configuration/CSS/CSS_Server_data/sslkeystore/cssSelfsignedServerStore b/CONTENT/configuration/CSS/CSS_Server_data/sslkeystore/cssSelfsignedServerStore new file mode 100644 index 0000000000000000000000000000000000000000..caa84df6b2f52eb016b94d225da6324cc9984b9c GIT binary patch literal 2231 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 D1 + + + diff --git a/CONTENT/configuration/ContentGraphQL/configDropins/overrides/UMS.xml b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/UMS.xml new file mode 100644 index 00000000..41c0dd42 --- /dev/null +++ b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/UMS.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/CONTENT/configuration/ContentGraphQL/configDropins/overrides/UMS_clientRegistration.json b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/UMS_clientRegistration.json new file mode 100644 index 00000000..792f8a5c --- /dev/null +++ b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/UMS_clientRegistration.json @@ -0,0 +1,33 @@ +{ +��� "token_endpoint_auth_method": "client_secret_basic", +��� "scope": "openid profile email", +��� "grant_types": [ +������� "authorization_code", +������� "client_credentials", +������� "implicit", +������� "refresh_token", +������� "urn:ietf:params:oauth:grant-type:jwt-bearer" +��� ], +��� "response_types": [ +������� "code", +������� "token", +������� "id_token token" +��� ], +��� "application_type": "web", +��� "subject_type": "public", +��� "post_logout_redirect_uris": [], +��� "preauthorized_scope": "openid profile email", +��� "introspect_tokens": true, +��� "trusted_uri_prefixes": [ +������� "https://:/" +��� ], +��� "resource_ids": [], +��� "functional_user_groupIds": [], +��� "client_id": "contentServicesUms", +��� "client_secret": "password", +��� "client_name": "Content Services UMS", +��� "redirect_uris": [ +������� "https://:/oidcclient/redirect/ContentServicesUms" +��� ], +��� "allow_regexp_redirects": true +} \ No newline at end of file diff --git a/CONTENT/configuration/ContentGraphQL/configDropins/overrides/crs-ssl.xml b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/crs-ssl.xml new file mode 100644 index 00000000..5ef20c2b --- /dev/null +++ b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/crs-ssl.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CONTENT/configuration/ContentGraphQL/configDropins/overrides/ldap_AD.xml b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/ldap_AD.xml new file mode 100644 index 00000000..7b589dab --- /dev/null +++ b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/ldap_AD.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/CONTENT/configuration/ContentGraphQL/configDropins/overrides/ldap_TDS.xml b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/ldap_TDS.xml new file mode 100644 index 00000000..cb1a51e4 --- /dev/null +++ b/CONTENT/configuration/ContentGraphQL/configDropins/overrides/ldap_TDS.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/CONTENT/configuration/README.md b/CONTENT/configuration/README.md new file mode 100644 index 00000000..1e35831a --- /dev/null +++ b/CONTENT/configuration/README.md @@ -0,0 +1,16 @@ +# Configuration + +The configuration directory provides sample files for deployment settings and application configuration settings. + +Follow the instructions in [Preparing for FileNet Content Manager](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_ecmk8s.html) to set up the following environment elements: + +- LDAP +- Databases +- Configuration files for LDAP and Databases +- YAML files (for YAML deployments) + +The configuration directories also include samples for additional containers. For details, see the following information: + - [Configuring external share for containers](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_ecmexternalsharek8s.html) + - [Technology Preview: Getting started with the Content Services GraphQL API](http://www.ibm.com/support/docview.wss?uid=ibm10883630) + + diff --git a/CONTENT/configuration/extShare/configDropins/overrides/CORS.xml b/CONTENT/configuration/extShare/configDropins/overrides/CORS.xml new file mode 100644 index 00000000..94aa074f --- /dev/null +++ b/CONTENT/configuration/extShare/configDropins/overrides/CORS.xml @@ -0,0 +1,10 @@ + + + + diff --git a/CONTENT/configuration/extShare/configDropins/overrides/DB2JCCDriver.xml b/CONTENT/configuration/extShare/configDropins/overrides/DB2JCCDriver.xml new file mode 100644 index 00000000..937c2ce0 --- /dev/null +++ b/CONTENT/configuration/extShare/configDropins/overrides/DB2JCCDriver.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/CONTENT/configuration/extShare/configDropins/overrides/ICNDS.xml b/CONTENT/configuration/extShare/configDropins/overrides/ICNDS.xml new file mode 100644 index 00000000..643fa38d --- /dev/null +++ b/CONTENT/configuration/extShare/configDropins/overrides/ICNDS.xml @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/CONTENT/configuration/extShare/configDropins/overrides/ICNDS_HADR.xml b/CONTENT/configuration/extShare/configDropins/overrides/ICNDS_HADR.xml new file mode 100644 index 00000000..202977b0 --- /dev/null +++ b/CONTENT/configuration/extShare/configDropins/overrides/ICNDS_HADR.xml @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/CONTENT/configuration/extShare/configDropins/overrides/ICNDS_Oracle.xml b/CONTENT/configuration/extShare/configDropins/overrides/ICNDS_Oracle.xml new file mode 100644 index 00000000..bb125c06 --- /dev/null +++ b/CONTENT/configuration/extShare/configDropins/overrides/ICNDS_Oracle.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/CONTENT/configuration/extShare/configDropins/overrides/OraJDBCDriver.xml b/CONTENT/configuration/extShare/configDropins/overrides/OraJDBCDriver.xml new file mode 100644 index 00000000..aa2cffb9 --- /dev/null +++ b/CONTENT/configuration/extShare/configDropins/overrides/OraJDBCDriver.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CONTENT/configuration/extShare/configDropins/overrides/ldapExt.xml b/CONTENT/configuration/extShare/configDropins/overrides/ldapExt.xml new file mode 100644 index 00000000..65ed740c --- /dev/null +++ b/CONTENT/configuration/extShare/configDropins/overrides/ldapExt.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CONTENT/configuration/extShare/configDropins/overrides/ldap_AD.xml b/CONTENT/configuration/extShare/configDropins/overrides/ldap_AD.xml new file mode 100644 index 00000000..0326dc4d --- /dev/null +++ b/CONTENT/configuration/extShare/configDropins/overrides/ldap_AD.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/CONTENT/configuration/extShare/configDropins/overrides/ldap_TDS.xml b/CONTENT/configuration/extShare/configDropins/overrides/ldap_TDS.xml new file mode 100644 index 00000000..6c9610d4 --- /dev/null +++ b/CONTENT/configuration/extShare/configDropins/overrides/ldap_TDS.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/CONTENT/helm-charts/README.md b/CONTENT/helm-charts/README.md new file mode 100644 index 00000000..4892c8da --- /dev/null +++ b/CONTENT/helm-charts/README.md @@ -0,0 +1,154 @@ +# Deploying with Helm charts + +> **NOTE**: This procedure covers a Helm chart deployment on certified Kubernetes. To deploy the Enterprise Content Management products on IBM Cloud Private 3.1.2, you must use the Business Automation Configuration Container. + +## Requirements and Prerequisites + +Ensure that you have completed the following tasks: + +- [Preparing FileNet environment](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_ecmk8s.html) + +- [Preparing your Kubernetes server with Kubernetes, Helm Tiller, and the Kubernetes command line](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_env_k8s.html) + +- [Downloading the PPA archive](../../README.md) + +The Helm commands for deploying the FileNet Content Manager images include a number of required command parameters for specific environment and configuration settings. Review the reference topics for these parameters and determine the values for your environment as part of your preparation: + +- [Content Platform Engine Helm command parameters](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.ref/k8s_topics/ref_cm_cpeparamsk8s_helm.html) + +- [Content Search Services Helm command parameters](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.ref/k8s_topics/ref_cm_cssparamsk8s_helm.html) + +- [Content Management Interoperability Services Helm command parameters](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.ref/k8s_topics/ref_cm_cmisparamsk8s_helm.html) + +## Tips: + +- On Openshift, an expired Docker secret can cause errors during deployment. If an admin.registry key already exists and has expired, delete the key with the following command: + ```console + kubectl delete secret admin.registrykey -n + ``` + Then generate a new Docker secret with the following command: + ```console + kubectl create secret docker-registry admin.registrykey --docker-server= --docker-username= --docker-password=$(oc whoami -t) --docker-email=ecmtest@ibm.com -n + ``` + +- On Openshift, the security context constraint can cause deployment errors. To prevent this, update the namespace to include the constraints for the components that you want to deploy. For example, the following update accommodates the Content Manager components (50000,50001): + + ```console + oc edit namespace dbamc-project + openshift.io/sa.scc.supplemental-groups: 500/50000 + ``` + +## Initializing the command line interface +Use the following commands to initialize the command line interface: +1. Run the init command: + ```$ helm init --client-only ``` +2. Check whether the command line can connect to the remote Tiller server: + ```console + $ helm version + Client: &version.Version{SemVer:"v2.9.1", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"} + Server: &version.Version{SemVer:"v2.9.1", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"} + ``` + +## Deploying images +Provide the parameter values for your environment and run the command to deploy the image. + > **Tip**: Copy the sample command to a file, edit the parameter values, and use the updated command for deployment. + > **Tip**: The values that are provided for 'resources' inside helm commands are exampless only. Each deployment must take into account the demands that their particular workload will place on the system and adjust values accordingly. + +To deploy Content Platform Engine: + + ```console + $ helm install ibm-dba-contentservices-3.0.0.tgz --name dbamc-cpe --namespace dbamc --set cpeProductionSetting.license=accept,cpeProductionSetting.jvmHeapXms=512,cpeProductionSetting.jvmHeapXmx=1024,cpeProductionSetting.licenseModel=FNCM.CU,dataVolume.existingPVCforCPECfgstore=cpe-cfgstore,dataVolume.existingPVCforCPELogstore=cpe-logstore,dataVolume.existingPVCforFilestore=cpe-filestore,dataVolume.existingPVCforICMrulestore=cpe-icmrulesstore,dataVolume.existingPVCforTextextstore=cpe-textextstore,dataVolume.existingPVCforBootstrapstore=cpe-bootstrapstore,dataVolume.existingPVCforFNLogstore=cpe-fnlogstore,autoscaling.enabled=False,resources.requests.cpu=1,replicaCount=1,image.repository=/dbamc/cpe,image.tag=ga-553-p8cpe,cpeProductionSetting.gcdJNDIName=FNGCDDS,cpeProductionSetting.gcdJNDIXAName=FNGCDDSXA + ``` + +To deploy Content Search Services: + + ```console + $ helm install ibm-dba-contentsearch-3.0.0.tgz --name dbamc-css --namespace dbamc --set cssProductionSetting.license=accept,service.name=csssvc,service.externalSSLPort=8199,cssProductionSetting.jvmHeapXmx=3072,dataVolume.existingPVCforCSSCfgstore=css-cfgstore,dataVolume.existingPVCforCSSLogstore=css-logstore,dataVolume.existingPVCforCSSTmpstore=css-tempstore,dataVolume.existingPVCforIndex=css-indexstore,dataVolume.existingPVCforCSSCustomstore=css-customstore,resources.limits.memory=7Gi,cssProductionSetting.jvmHeapXmx=4096,image.repository=:5000/dbamc/css,image.tag=ga-553-p8css,imagePullSecrets.name=admin.registrykey + ``` + Replace with the correct registry URL, for example, docker-registry.default.svc. + +Some environments require multiple Content Search Services deployments. To deploy multiple Content Search Services instances, specify a unique release name and service name, and a new set of persistent volumes and persistent volume claims (PVs and PVCs). The example below shows a deployment using a new release name `dbamc-css2`, a new service name `csssvc2`, and a new set of persistent volumes `css2-cfgstore`, `css2-logstore`, `css2-tempstore`, `css2-indexstore`, and `css2-customstore`. You can reuse the same persistent volume for the indexstore if you want to have multiple Content Search Services deployments that access the same set of index collections. However, it is recommended that the other persistent volumes be unique. + + ```console + $ helm install ibm-dba-contentsearch-3.0.0.tgz --name dbamc-css2 --namespace dbamc --set cssProductionSetting.license=accept,service.externalSSLPort=8199,service.name=csssvc2,cssProductionSetting.jvmHeapXmx=3072,dataVolume.existingPVCforCSSCfgstore=css2-cfgstore,dataVolume.existingPVCforCSSLogstore=css2-logstore,dataVolume.existingPVCforCSSTmpstore=css2-tempstore,dataVolume.existingPVCforIndex=css2-indexstore,dataVolume.existingPVCforCSSCustomstore=css2-customstore,resources.limits.memory=7Gi,cssProductionSetting.jvmHeapXmx=4096,image.repository=:5000/dbamc/css,image.tag=ga-553-p8css,imagePullSecrets.name=admin.registrykey + ``` + + Replace with correct registry URL, for example, docker-registry.default.svc. + + + To deploy Content Management Interoperability Services: + + ```console + $ helm install ibm-dba-cscmis-1.7.0.tgz --name dbamc-cmis --namespace dbamc --set cmisProductionSetting.license=accept,cmisProductionSetting.jvmHeapXms=512,cmisProductionSetting.jvmHeapXmx=1024,dataVolume.existingPVCforCMISCfgstore=cmis-cfgstore,dataVolume.existingPVCforCMISLogstore=cmis-logstore,autoscaling.enabled=False,replicaCount=1,imagePullSecrets.name=admin.registrykey,image.repository=:5000/dbamc/cmis,image.tag=ga-304-cmis-if007,cmisProductionSetting.cpeUrl=http://10.0.0.110:9080/wsi/FNCEWS40MTOM + ``` +Replace with correct registry URL, for example, docker-registry.default.svc. + +> **Reminder**: After you deploy, return to the instructions in the Knowledge Center, [Completing post deployment tasks for IBM FileNet Content Manager](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_deploy_postecmdeployk8s.html), to get your FileNet Content Manager environment up and running + +## Deploying the External Share container + +If you want to optionally include the external share capability in your environment, you also configure and deploy the External Share container. + +Ensure that you have completed the all of the preparation steps for deploying the External Share container: [Configuring external share for containers](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_ecmexternalsharek8s.html) + +To deploy the External Share container: + + ``` + $ helm install ibm-dba-extshare-prod-3.0.0.tgz --name dbamc-es --namespace dbamc --set esProductionSetting.license=accept,esProductionSetting.jvmHeapXms=512,esProductionSetting.jvmHeapXmx=1024,dataVolume.existingPVCforESCfgstore=es-cfgstore,dataVolume.existingPVCforESLogstore=es-logstore,autoscaling.enabled=False,replicaCount=1,imagePullSecrets.name=admin.registrykey,image.repository=:5000/dbamc/extshare,image.tag=ga-306-es,esProductionSetting.esDBType=db2,esProductionSetting.esJNDIDSName=ECMClientDS,esProductionSetting.esSChema=ICNDB,esProductionSetting.esTableSpace=ICNDBTS,esProductionSetting.esAdmin=ceadmin + ``` + + Replace with correct registry URL, for example, docker-registry.default.svc. + +## Deploying the Technology Preview: Content Services GraphQL API container +If you want to use the Content Services GraphQL API container, follow the instructions in the Getting Started technical notice: [Technology Preview: Getting started with Content Services GraphQL API](http://www.ibm.com/support/docview.wss?uid=ibm10883630) + +To deploy the ContentGraphQL Container: + + ``` + $ helm install ibm-dba-contentrestservice-dev-3.0.0.tgz --name dbamc-crs --namespace dbamc --set crsProductionSetting.license=accept,crsProductionSetting.jvmHeapXms=512,crsProductionSetting.jvmHeapXmx=1024,dataVolume.existingPVCforCfgstore=crs-icp-cfgstore,dataVolume.existingPVCforCfglogs=crs-icp-logs,autoscaling.enabled=False,replicaCount=1,imagePullSecrets.name=admin.registrykey,image.repository=:5000/dbamc/crs,image.tag=5.5.3,crsProductionSetting.cpeUri=https://:/wsi/FNCEWS40MTOM + ``` + Replace with correct registry URL, for example, docker-registry.default.svc. + Replace : with the FileNet Content Engine application host and Port. + + + +## Upgrading deployments + > **Tip**: You can discover the necessary resource values for the deployment from corresponding product deployments in IBM Cloud Private Console and Openshift Container Platform. + +Before you run the upgrade commands, you must prepare the environment for upgrades to Content Search Services and Content Management Interoperability Services. If you plan to upgrade those containers, complete the preparation steps in the following topic before you start the upgrade: [Upgrading Content Manager releases](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/com.ibm.dba.upgrading/topics/tsk_cm_upgrade.htm) + +To upgrade Content Platform Engine: + +``` + helm upgrade dbamc-cpe /helm-charts/ibm-dba-contentservices-3.0.0.tgz --reuse-values --set image.repository=:5000/dbamc/cpe,image.tag=ga-553-p8cpe,imagePullSecrets.name=admin.registrykey,resources.requests.cpu=500m,resources.requests.memory=512Mi,resources.limits.cpu=1,resources.limits.memory=2048Mi,log.format=json +``` +Replace with correct registry URL, for example, docker-registry.default.svc + +To upgrade Content Search Services: + +``` + $ helm upgrade dbamc-css /helm-charts/ibm-dba-contentsearch-3.0.0.tgz --reuse-values --set image.repository=:5000/dbamc/css,image.tag=ga-553-p8css,imagePullSecrets.name=admin.registrykey,resources.requests.cpu=500m,resources.requests.memory=512Mi,resources.limits.cpu=8,resources.limits.memory=8192Mi,log.format=json,dataVolume.nameforCSSCustomstore=custom-stor,dataVolume.existingPVCforCSSCustomstore=css-icp-customstore +``` + +Replace with correct registry URL, for example, docker-registry.default.svc. + +To upgrade Content Management Interoperability Services: + +``` + $ helm upgrade dbamc-cmis /helm-charts/ibm-dba-cscmis-1.7.0.tgz --reuse-values --set image.repository=:5000/dbamc/cmis,image.tag=ga-304-cmis-if007,imagePullSecrets.name=admin.registrykey,resources.requests.cpu=500m,resources.requests.memory=512Mi,resources.limits.cpu=1,resources.limits.memory=1024Mi,log.format=json +``` + +Replace with correct registry URL, for example, docker-registry.default.svc. + +## Uninstalling a Kubernetes release of FileNet Content Manager + +To uninstall and delete a release named `my-cpe-prod-release`, use the following command: + +```console +$ helm delete my-cpe-prod-release --purge --tls +``` + +The command removes all the Kubernetes components associated with the release, except any Persistent Volume Claims (PVCs). This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. To delete the persisted data of the release, you can delete the PVC using the following command: + +```console +$ kubectl delete pvc my-cpe-prod-release-cpe-pvclaim diff --git a/CONTENT/helm-charts/ibm-dba-contentrestservice-dev-3.0.0.tgz b/CONTENT/helm-charts/ibm-dba-contentrestservice-dev-3.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4f5f11991c72d4da6eadb7d78b6ad35ac8a5a3dc GIT binary patch literal 58039 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 literal 0 HcmV?d00001 diff --git a/CONTENT/helm-charts/ibm-dba-contentsearch-3.0.0.tgz b/CONTENT/helm-charts/ibm-dba-contentsearch-3.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..077b7074e0911d9398ba83eb03e913a847cc3fe2 GIT binary patch literal 62185 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
Twr!XB|>5n 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 literal 0 HcmV?d00001 diff --git a/CONTENT/helm-charts/ibm-dba-extshare-prod-3.0.0.tgz b/CONTENT/helm-charts/ibm-dba-extshare-prod-3.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..cf7bf0623e6e20ae2e7e552e6cfcf1383ff8697c GIT binary patch literal 63132 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 d8~L9/default/cmis:latest + imagePullPolicy: Always + name: ecm-cmis + securityContext: + runAsUser: 50001 + allowPrivilegeEscalation: false + resources: + requests: + memory: 256Mi + cpu: 500m + limits: + memory: 512Mi + cpu: 1 + ports: + - containerPort: 9080 + name: http + - containerPort: 9443 + name: https + env: + - name: LICENSE + value: "accept" + - name: PRODUCT + value: "DBAMC" + - name: CMIS_VERSION + value: "1.1" + - name: CE_URL + value: "http://cpeurl:30540/wsi/FNCEWS40MTOM" + - name: TZ + value: "Etc/UTC" + - name: JVM_HEAP_XMS + value: "512m" + - name: JVM_HEAP_XMX + value: "1024m" + - name: CMC_TIME_TO_LIVE + value: "3600000" + - name: CRC_TIME_TO_LIVE + value: "3600000" + - name: USER_CACHE_TIME_TO_LIVE + value: "28800000" + - name: CHECKOUT_COPYCONTENT + value: "True" + - name: DEFAULTMAXITEMS + value: "25" + - name: CVL_CACHE + value: "True" + - name: SECUREMETADATACACHE + value: "False" + - name: FILTERHIDDENPROPERTIES + value: "True" + - name: QUERYTIMELIMIT + value: "180" + - name: RESUMABLEQUERIESFORREST + value: "True" + - name: ESCAPEUNSAFESTRINGCHARACTERS + value: "False" + - name: MAXSOAPSIZE + value: "180" + - name: PRINTFULLSTACKTRACE + value: "False" + - name: FOLDERFIRSTSEARCH + value: "False" + - name: IGNOREROOTDOCUMENTS + value: "False" + - name: SUPPORTINGTYPEMUTABILITY + value: "False" + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + readinessProbe: + tcpSocket: + port: 9080 + initialDelaySeconds: 90 + periodSeconds: 5 + livenessProbe: + tcpSocket: + port: 9080 + initialDelaySeconds: 180 + periodSeconds: 5 + volumeMounts: + - name: cmiscfgstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/configDropins/overrides" + subPath: configDropins/overrides + - name: cmislogstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/logs" + subPath: logs + + volumes: + - name: cmiscfgstore-pvc + persistentVolumeClaim: + claimName: "cmis-cfgstore" + - name: cmislogstore-pvc + persistentVolumeClaim: + claimName: "cmis-logstore" diff --git a/CONTENT/k8s-yaml/CPE/cpe-deploy.yml b/CONTENT/k8s-yaml/CPE/cpe-deploy.yml new file mode 100644 index 00000000..dd1e6b8e --- /dev/null +++ b/CONTENT/k8s-yaml/CPE/cpe-deploy.yml @@ -0,0 +1,162 @@ +apiVersion: v1 +kind: Service +metadata: + name: ecm-cpe-svc +spec: + ports: + - name: http + protocol: TCP + port: 9080 + targetPort: 9080 + - name: https + protocol: TCP + port: 9443 + targetPort: 9443 + selector: + app: cpeserver-cluster1 + type: NodePort + sessionAffinity: ClientIP +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: ecm-cpe +spec: + replicas: 1 + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: cpeserver-cluster1 + spec: + imagePullSecrets: + - name: admin.registrykey + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - cpeserver-cluster1 + topologyKey: "kubernetes.io/hostname" + containers: + - image: /default/cpe:latest + imagePullPolicy: Always + name: ecm-cpe + securityContext: + runAsUser: 50001 + allowPrivilegeEscalation: false + resources: + requests: + memory: 512Mi + cpu: 500m + limits: + memory: 1024Mi + cpu: 1 + ports: + - containerPort: 9080 + name: http + - containerPort: 9443 + name: https + env: + - name: LICENSE + value: "accept" + - name: PRODUCT + value: "DBAMC" + - name: CPESTATICPORT + value: "false" + - name: CONTAINERTYPE + value: "1" + - name: TZ + value: "Etc/UTC" + - name: JVM_HEAP_XMS + value: "512m" + - name: JVM_HEAP_XMX + value: "1024m" + - name: GCDJNDINAME + value: "FNGDDS" + - name: GCDJNDIXANAME + value: "FNGDDSXA" + - name: LICENSEMODEL + value: "FNCM.CU" + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + readinessProbe: + httpGet: + path: /P8CE/Health + port: 9080 + httpHeaders: + - name: Content-Encoding + value: gzip + initialDelaySeconds: 180 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /P8CE/Health + port: 9080 + httpHeaders: + - name: Content-Encoding + value: gzip + initialDelaySeconds: 600 + periodSeconds: 5 + volumeMounts: + - name: cpecfgstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/configDropins/overrides" + subPath: configDropins/overrides + - name: cpelogstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/logs" + subPath: logs + - name: cpefilestore-pvc + mountPath: "/opt/ibm/asa" + subPath: asa + - name: cpeicmrulesstore-pvc + mountPath: "/opt/ibm/icmrules" + subPath: icmrules + - name: cpetextextstore-pvc + mountPath: /opt/ibm/textext + subPath: textext + - name: cpebootstrapstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/lib/bootstrap" + subPath: bootstrap + - name: cpefnlogstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/FileNet" + subPath: FileNet + + volumes: + - name: cpecfgstore-pvc + persistentVolumeClaim: + claimName: "cpe-cfgstore" + - name: cpelogstore-pvc + persistentVolumeClaim: + claimName: "cpe-logstore" + - name: cpefilestore-pvc + persistentVolumeClaim: + claimName: "cpe-filestore" + - name: cpeicmrulesstore-pvc + persistentVolumeClaim: + claimName: "cpe-icmrulesstore" + - name: cpetextextstore-pvc + persistentVolumeClaim: + claimName: "cpe-textextstore" + - name: cpebootstrapstore-pvc + persistentVolumeClaim: + claimName: "cpe-bootstrapstore" + - name: cpefnlogstore-pvc + persistentVolumeClaim: + claimName: "cpe-fnlogstore" diff --git a/CONTENT/k8s-yaml/CSS/css-deploy.yml b/CONTENT/k8s-yaml/CSS/css-deploy.yml new file mode 100644 index 00000000..ae6c5b4d --- /dev/null +++ b/CONTENT/k8s-yaml/CSS/css-deploy.yml @@ -0,0 +1,142 @@ +apiVersion: v1 +kind: Service +metadata: + name: csssearch-cluster +spec: + ports: + - name: cssdefault + protocol: TCP + port: 8191 + targetPort: 8191 + - name: ccsssl + protocol: TCP + port: 8199 + targetPort: 8199 + selector: + app: csssearch-cluster + type: ClusterIP + sessionAffinity: ClientIP +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: csssearch-cluster +spec: + replicas: 1 + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: csssearch-cluster + spec: + imagePullSecrets: + - name: admin.registrykey + annotations: + scheduler.alpha.kubernetes.io/affinity: | + { + "podAntiAffinity": { + "preferredDuringSchedulingIgnoredDuringExecution": [ + { + "weight":100, + "podAffinityTerm":{ + "labelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": ["csssearch-cluster"] + } + ] + }, + "topologyKey": "kubernetes.io/hostname" + } + } + ] + } + } + + spec: + containers: + - image: /default/css:latest + imagePullPolicy: Always + name: csssearch-cluster + securityContext: + runAsUser: 50001 + allowPrivilegeEscalation: false + resources: + requests: + memory: 512Mi + cpu: 500m + limits: + memory: 1024Mi + cpu: 1 + ports: + - containerPort: 8191 + name: cssdefault + - containerPort: 8199 + name: cssssl + readinessProbe: + tcpSocket: + port: 8199 + initialDelaySeconds: 60 + periodSeconds: 5 + livenessProbe: + tcpSocket: + port: 8199 + initialDelaySeconds: 120 + periodSeconds: 5 + env: + - name: LICENSE + value: "accept" + - name: PRODUCT + value: "DBAMC" + - name: JVM_HEAP_XMX + value: "4096" + - name: TZ + value: "Etc/UTC" + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + volumeMounts: + - name: csscfgstore-pvc + mountPath: "/opt/IBM/ContentSearchServices/CSS_Server/data" + subPath: CSS_Server_data/sslkeystore + - name: csslogstore-pvc + mountPath: "/opt/IBM/ContentSearchServices/CSS_Server/log" + subPath: CSS_Server_log + - name: csstempstore-pvc + mountPath: "/opt/IBM/ContentSearchServices/CSS_Server/temp" + subPath: CSS_Server_temp + - name: cssindexstore-pvc + mountPath: "/opt/ibm/indexareas" + subPath: CSS_Indexes + - name: csscustomstore-pvc + mountPath: "/opt/IBM/ContentSearchServices/CSS_Server/config" + subPath: css/CSS_Server_Config + + volumes: + - name: csscfgstore-pvc + persistentVolumeClaim: + claimName: "css-cfgstore" + - name: csslogstore-pvc + persistentVolumeClaim: + claimName: "css-logstore" + - name: csstempstore-pvc + persistentVolumeClaim: + claimName: "css-tempstore" + - name: cssindexstore-pvc + persistentVolumeClaim: + claimName: "css-indexstore" + - name: csscustomstore-pvc + persistentVolumeClaim: + claimName: "css-customstore" diff --git a/CONTENT/k8s-yaml/ContentGraphQL/crs-deploy.yml b/CONTENT/k8s-yaml/ContentGraphQL/crs-deploy.yml new file mode 100755 index 00000000..fdc0e028 --- /dev/null +++ b/CONTENT/k8s-yaml/ContentGraphQL/crs-deploy.yml @@ -0,0 +1,110 @@ +apiVersion: v1 +kind: Service +metadata: + name: ecm-crs-svc +spec: + ports: + - name: http + protocol: TCP + port: 9080 + targetPort: 9080 + - name: https + protocol: TCP + port: 9443 + targetPort: 9443 + selector: + app: crsserver-cluster1 + type: NodePort + sessionAffinity: ClientIP +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: ecm-crs +spec: + replicas: 1 + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: crsserver-cluster1 + spec: + imagePullSecrets: + - name: admin.registrykey + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - crsserver-cluster1 + topologyKey: "kubernetes.io/hostname" + containers: + - image: /default/crs:553 + imagePullPolicy: Always + securityContext: + runAsUser: 50001 + allowPrivilegeEscalation: false + name: ecm-crs + resources: + requests: + memory: 512Mi + cpu: 500m + limits: + memory: 1024Mi + cpu: 1 + ports: + - containerPort: 9080 + name: http + - containerPort: 9443 + name: https + env: + - name: LICENSE + value: "accept" + - name: PRODUCT + value: "DBAMC" + - name: JVM_HEAP_XMS + value: "512m" + - name: JVM_HEAP_XMX + value: "1024m" + - name: TZ + value: "Etc/UTC" + - name: CPE_URI + value: "http://cpeurl:30540/wsi/FNCEWS40MTOM" + - name: CPESTATICPORT + value: "false" + - name: CONTAINERTYPE + value: "1" + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + volumeMounts: + - name: crscfgstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/configDropins/overrides" + subPath: configDropins/overrides + - name: crslogstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/logs" + subPath: logs + + volumes: + - name: crscfgstore-pvc + persistentVolumeClaim: + claimName: "crs-cfgstore" + - name: crslogstore-pvc + persistentVolumeClaim: + claimName: "crs-logstore" diff --git a/CONTENT/k8s-yaml/README.md b/CONTENT/k8s-yaml/README.md new file mode 100644 index 00000000..f1a0131e --- /dev/null +++ b/CONTENT/k8s-yaml/README.md @@ -0,0 +1,78 @@ +# Deploying with YAML files + +## Requirements and Prerequisites + +Ensure that you have completed the following tasks: + +- [Preparing your Kubernetes server](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_env_k8s.html) +- [Downloading the PPA archive](../../README.md) +- [Preparing FileNet environment](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_ecmk8s.html) + +## Deploying component images + +Use the command line to deploy the image using the parameters in the appropriate YAML file. You also use the command line to determine access information for your deployed images. + +To deploy Content Platform Engine: + 1. Use the deployment file to deploy Content Platform Engine: + + ```kubectl apply -f cpe-deploy.yml``` + 2. Run following command to get the Public IP and port to access Content Platform Engine: + + ```kubectl get svc | grep ecm-cpe``` + +To deploy Content Search Services: + 1. Use the deployment file to deploy Content Search Services: + + ```kubectl apply -f css-deploy.yml``` + 2. Run the following command to get the Public IP and port to access Content Search Services: + + ```kubectl get svc | grep ecm-css``` + +To deploy Content Management Interoperability Services: + 1. Use the deployment file to deploy Content Management Interoperability Services: + + ```kubectl apply -f cmis-deploy.yml``` + 2. Run the following command to get the Public IP and port to access Content Management Interoperability Services: + + ```kubectl get svc | ecm-cmis``` + +> **Reminder**: After you deploy, return to the instructions in the Knowledge Center, [Completing post deployment tasks for IBM FileNet Content Manager](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_deploy_postecmdeployk8s.html), to get your FileNet Content Manager environment up and running + +## Deploying the External Share container + +If you want to optionally include the external share capability in your environment, you also configure and deploy the External Share container. + +Ensure that you have completed the all of the preparation steps for deploying the External Share container: [Configuring external share for containers](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_ecmexternalsharek8s.html) + + 1. Use the deployment file to deploy the External Share container: + + ```kubectl apply -f es-deploy.yml``` + 2. Run the following command to get the Public IP and port to access External Share: + + ```kubectl get svc | ecm-es``` + +## Deploying the Technology Preview: Content Services GraphQL API container +If you want to use the Content Services GraphQL API container, follow the instructions in the Getting Started technical notice: [Technology Preview: Getting started with Content Services GraphQL API](http://www.ibm.com/support/docview.wss?uid=ibm10883630) + + 1. Use the deployment file to deploy the Content Services GraphQL API container: + + ```kubectl apply -f crs-deploy.yml``` + 2. Run the following command to get the Public IP and port to access the Content Services GraphQL API: + + ```kubectl get svc | ecm-crs``` + + +## Uninstalling a Kubernetes release of FileNet Content Manager + +To uninstall and delete the Content Platform Engine release, use the following command: + +```console +$ kubectl delete -f +``` + +The command removes all the Kubernetes components associated with the release, except any Persistent Volume Claims (PVCs). This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. To delete the persisted data of the release, you can delete the PVC using the following command: + +```console +$ kubectl delete pvc my-cpe-prod-release-cpe-pvclaim +``` +Repeat the process for any other deployments that you want to delete. diff --git a/CONTENT/k8s-yaml/extShare/es-deploy.yml b/CONTENT/k8s-yaml/extShare/es-deploy.yml new file mode 100755 index 00000000..7c1f50df --- /dev/null +++ b/CONTENT/k8s-yaml/extShare/es-deploy.yml @@ -0,0 +1,128 @@ +apiVersion: v1 +kind: Service +metadata: + name: ecm-es-svc +spec: + ports: + - name: http + protocol: TCP + port: 9080 + targetPort: 9080 + - name: https + protocol: TCP + port: 9443 + targetPort: 9443 + selector: + app: esserver-cluster1 + type: NodePort + sessionAffinity: ClientIP +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: ecm-es +spec: + replicas: 1 + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: esserver-cluster1 + spec: + imagePullSecrets: + - name: admin.registrykey + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - esserver-cluster1 + topologyKey: "kubernetes.io/hostname" + containers: + - image: /default/extshare:latest + imagePullPolicy: Always + name: ecm-es + securityContext: + runAsUser: 50001 + allowPrivilegeEscalation: false + resources: + requests: + memory: 512Mi + cpu: 500m + limits: + memory: 1024Mi + cpu: 1 + ports: + - containerPort: 9080 + name: http + - containerPort: 9443 + name: https + env: + - name: LICENSE + value: "accept" + - name: JVM_HEAP_XMS + value: "512m" + - name: JVM_HEAP_XMX + value: "1024m" + - name: TZ + value: "Etc/UTC" + - name: ICNDBTYPE + value: "db2" + - name: ICNJNDIDS + value: "ECMClientDS" + - name: ICNSCHEMA + value: "ICNDB" + - name: ICNTS + value: "ICNDB" + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + readinessProbe: + httpGet: + path: /contentapi/rest/share/v1/info + port: 9080 + httpHeaders: + - name: Content-Encoding + value: gzip + initialDelaySeconds: 180 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /contentapi/rest/share/v1/info + port: 9080 + httpHeaders: + - name: Content-Encoding + value: gzip + initialDelaySeconds: 600 + periodSeconds: 5 + volumeMounts: + - name: escfgstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/configDropins/overrides" + subPath: es/configDropins/overrides + - name: eslogstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/logs" + subPath: es/logs + + volumes: + - name: escfgstore-pvc + persistentVolumeClaim: + claimName: "es-icp-cfgstore" + - name: eslogstore-pvc + persistentVolumeClaim: + claimName: "es-icp-logstore" diff --git a/LICENSE b/LICENSE new file mode 100755 index 00000000..94c22135 --- /dev/null +++ b/LICENSE @@ -0,0 +1,221 @@ +The translated license terms can be viewed here: [License and Copyright]( http://www14.software.ibm.com/cgi-bin/weblap/lap.pl?li_formnum=L-VSAY-B3UVCV ) + +LICENSE INFORMATION + +The Programs listed below are licensed under the following License Information terms and conditions in addition to the Program license terms previously agreed to by Client and IBM. If Client does not have previously agreed to license terms in effect for the Program, the International Program License Agreement (Z125-3301-14) applies. + +Program Name (Program Number): +IBM Cloud Pak for Automation 19.0.1 (5737-I23) + +The following standard terms apply to Licensee's use of the Program. + +Limited use right + +As described in the International Program License Agreement ("IPLA") and this License Information, IBM grants Licensee a limited right to use the Program. This right is limited to the level of Authorized Use, such as a Processor Value Unit ("PVU"), a Resource Value Unit ("RVU"), a Value Unit ("VU"), or other specified level of use, paid for by Licensee as evidenced in the Proof of Entitlement. Licensee's use may also be limited to a specified machine, or only as a Supporting Program, or subject to other restrictions. As Licensee has not paid for all of the economic value of the Program, no other use is permitted without the payment of additional fees. In addition, Licensee is not authorized to use the Program to provide commercial IT services to any third party, to provide commercial hosting or timesharing, or to sublicense, rent, or lease the Program unless expressly provided for in the applicable agreements under which Licensee obtains authorizations to use the Program. Additional rights may be available to Licensee subject to the payment of additional fees or under different or supplementary terms. IBM reserves the right to determine whether to make such additional rights available to Licensee. + +Specifications + +Program's specifications can be found in the collective Description and Technical Information sections of the Program's Announcement Letters. + +Prohibited Uses + +Licensee may not use or authorize others to use the Program if failure of the Program could lead to death, bodily injury, or property or environmental damage. + +Multi-Product Install Image + +The Program is provided as part of a multi-product install image. Licensee is authorized to install and use only the Program (and its Bundled or Supporting Programs, if any) for which a valid entitlement is obtained and may not install or use any of the other software included in the image unless Licensee has acquired separate entitlements for that other software. + +Bundled Programs + +Licensee is authorized to install and use the Bundled Programs identified below. A Bundled Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Bundled Program. In the event of conflict, the terms in this License Information document supersede the Bundled Program's terms. The Principal Program and any Bundled Programs are all part of the Program, as a whole. Therefore, Licensee must obtain sufficient entitlements to the Program, as a whole, to cover Licensee's installation and use of all of the Bundled Programs, unless separate entitlements are provided within this License Information document. For example, if this Program were licensed on a PVU (Processor Value Unit) basis and Licensee were to install the Principal Program or a Bundled Program on a 100 PVU machine (physical or virtual) and another Bundled Program on a second 100 PVU machine, Licensee would be required to obtain 200 PVU entitlements to the Program. + +Bundled Programs: +IBM Business Automation Workflow Enterprise 19.0.0 +IBM Business Automation Workflow Enterprise for Non-Production Environment 19.0.0 +IBM Operational Decision Manager Server 8.10.2 +IBM Operational Decision Manager Server for Non-Production Environment 8.10.2 +IBM FileNet Content Manager 5.5.3 +IBM FileNet Content Manager for Non-Production Environment 5.5.3 + +Supporting Programs + +Licensee is authorized to install and use the Supporting Programs identified below. Licensee is authorized to install and use such Supporting Programs only to support Licensee's use of the Principal Program under this Agreement. The phrase "to support Licensee's use" would only include those uses that are necessary or otherwise directly related to a licensed use of the Principal Program or another Supporting Program. The Supporting Programs may not be used for any other purpose. A Supporting Program may be accompanied by license terms, and those terms, if any, apply to Licensee's use of that Supporting Program. In the event of conflict, the terms in this License Information document supersede the Supporting Program's terms. Licensee must obtain sufficient entitlements to the Program, as a whole, to cover Licensee's installation and use of all of the Supporting Programs, unless separate entitlements are provided within this License Information document. For example, if this Program were licensed on a PVU (Processor Value Unit) basis and Licensee were to install the Principal Program or a Supporting Program on a 100 PVU machine (physical or virtual) and another Supporting Program on a second 100 PVU machine, Licensee would be required to obtain 200 PVU entitlements to the Program. + +Supporting Programs: +IBM FileNet P8 Connector to S3-enabled devices 5.5 +IBM Daeja ViewONE Virtual Module for Permanent Redaction 5.0 +IBM Daeja ViewONE Virtual Module for Microsoft Office 5.0 +IBM Content Engine Bulk Import Tool 5.5 +IBM Cloud Private Foundation 3.1 +IBM Event Streams 2019.01 +IBM Cloud Automation Manager 3.1 +IBM DB2 Advanced Workgroup Server Edition 11.1 + +Development Tool + +This Program is designed to aid in the development of software applications and systems. Licensee is solely responsible for the applications and systems that it develops by using this Program and assumes all risk and responsibility therefor. + +Components Not Used for Establishing Required Entitlements + +When determining the number of entitlements required for Licensee's installation or use of the Program, the installation or use of the following Program components are not taken into consideration. In other words, Licensee may install and use the following Program components, under the license terms, but these components are not used to determine the number of entitlements required for the Program. +IBM Support Assistant Data Collector +IBM Eclipse Help System +Administrative Console (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +Administrative Scripting (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +Edge Components Sub Components: Site Selector, Metric Server, Custom Advisors, Consultants (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +IBM HTTP Server (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +IBM Resource Adapter for JMS with WebSphere Application Server (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +IBM Thin Client for EJB with WebSphere Application Server (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +IBM Thin Client for JMS with WebSphere Application Server (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +IBM Thin Client for JAX-RPC with WebSphere Application Server (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +IBM Thin Client for JAX-WS with WebSphere Application Server (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +IBM Thin Admin Client for WebSphere Application Server (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +IBM Thin Client for JPA with WebSphere Application Server (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +IBM Thin Client for XML with WebSphere Application Server (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +Performance and Analysis Tools: Dynamic Cache Monitor, Tivoli - Performance Viewer, Performance Servlet (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +Pluggable Application Client (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +WebSphere Application Client (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +WebServer Plugins (of IBM WebSphere Application Server of IBM Business Automation Workflow Enterprise) +Content Navigator Sync (of IBM Content Navigator of IBM Filenet Content Manager) +Edit Service (of IBM Content Navigator of Filenet Content Manager) +Process Designer (of IBM FileNet Content Manager) +Deployment Manager (of IBM FileNet Content Manager) +Rule Designer (of IBM Operational Decision Manager Server) +Rule Execution Server (RES) console (of IBM Operational Decision Manager Server) +Message engine components for Business Process Choreographer, SCA, CEI (of IBM Business Automation Workflow Enterprise) +Message engine components for Business Process Choreographer, SCA, CEI (of IBM Business Process Manager Server of IBM Business Automation Workflow Enterprise) +IBM Event Stream +IBM Cloud Automation Manager +IBM Cloud Private Foundation +All components of IBM Business Automation Workflow Enterprise when used only for augmenting an existing, compatible Deployment Manager ("DMGR") profile and supporting the remote administration and network deployment of the IBM Business Automation Workflow Enterprise. + +Separately Licensed Code + +The provisions of this paragraph do not apply to the extent they are held to be invalid or unenforceable under the law that governs this license. Each of the components listed below is considered "Separately Licensed Code". IBM Separately Licensed Code is licensed to Licensee under the terms of the applicable third party license agreement(s) set forth in the NON_IBM_LICENSE file(s) that accompanies the Program. Notwithstanding any of the terms in the Agreement, or any other agreement Licensee may have with IBM, the terms of such third party license agreement(s) governs Licensee's use of all Separately Licensed Code unless otherwise noted below. + +Future Program updates or fixes may contain additional Separately Licensed Code. Such additional Separately Licensed Code and related licenses are listed in another NON_IBM_LICENSE file that accompanies the Program update or fix. Licensee acknowledges that Licensee has read and agrees to the license agreements contained in the NON_IBM_LICENSE file(s). If Licensee does not agree to the terms of these third party license agreements, Licensee may not use the Separately Licensed Code. + +For Programs acquired under the International Program License Agreement ("IPLA") or International Program License Agreement for Non Warranted Program ("ILAN") and Licensee is the original licensee of the Program, if Licensee does not agree with the third party license agreements, Licensee may return the Program in accordance with the terms of, and within the specified time frames stated in, the "Money-back Guarantee" section of the IPLA or ILAN IBM Agreement. + +Note: Notwithstanding any of the terms in the third party license agreement, the Agreement, or any other agreement Licensee may have with IBM: +(a) IBM provides this Separately Licensed Code to Licensee WITHOUT WARRANTIES OF ANY KIND; +(b) IBM DISCLAIMS ANY AND ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS INCLUDING, BUT NOT LIMITED TO, THE WARRANTY OF TITLE, NON-INFRINGEMENT OR INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, WITH RESPECT TO THE SEPARATELY LICENSED CODE; +(c) IBM is not liable to Licensee, and will not defend, indemnify, or hold Licensee harmless for any claims arising from or related to the Separately Licensed Code; and +(d) IBM is not liable for any direct, indirect, incidental, special, exemplary, punitive or consequential damages including, but not limited to, lost data, lost savings, and lost profits, with respect to the Separately Licensed Code. + +Notwithstanding these exclusions, in Germany and Austria, IBM's warranty and liability for the Separately Licensed Code is governed only by the respective terms applicable for Germany and Austria in IBM license agreements. + +Note: IBM may provide limited support for some Separately Licensed Code. If such support is available, the details and any additional terms related to such support will be set forth in the License Information document. + +The following are Separately Licensed Code: +OpenJDK 8 +MongoDB 4.0.9 +Ghostscript 9.0.7 +stunnel 4.56 +Ansible 2.7.10 +Collectd 5.8.1 +epel-release 7 +libgcrypt-devel 1.5.3 +sensible-utls 0.0.12 +syslog-ng 3.5.6 +yum-plugin-gastertmirrow 1.1.31 +Red Hat Universal Base Image 7 +Red Hat Universal Base Image 8 +Privacy + +Licensee acknowledges and agrees that IBM may use cookie and tracking technologies to collect personal information in gathering product usage statistics and information designed to help improve user experience and/or to tailor interactions with users in accordance with the IBM Online Privacy Policy, available at http://www.ibm.com/privacy/. + +Source Components and Sample Materials + +The Program may include some components in source code form ("Source Components") and other materials identified as Sample Materials. Licensee may copy and modify Source Components and Sample Materials for internal use only provided such use is within the limits of the license rights under this Agreement, provided however that Licensee may not alter or delete any copyright information or notices contained in the Source Components or Sample Materials. IBM provides the Source Components and Sample Materials without obligation of support and "AS IS", WITH NO WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +Technology Preview Code + +Technology Preview Code (TPC) may be included or distributed with the Program or updates to it but are not part of the Program. TPC is licensed under the same terms as the Program, except as provided below. TPC will be identified as such in the Notices File (or in an updated Notices File accompanying the updates). Some or all of the TPC may not be made generally available by IBM as or in a product. Licensee is permitted to use TPC only for internal use for evaluation purposes and not for use in a production environment. The Notices File may limit this evaluation use to an evaluation period. If so, at the end of such evaluation period Licensee must cease using and uninstall the TPC. IBM provides the TPC without obligation of support and "AS IS," WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND ANY IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +Licensee may not transfer TPC to another party except as a transfer accompanying the Program. TPC may contain a disabling device that will prevent it from being used after the evaluation period ends. Licensee will not tamper with this disabling device or the TPC. Licensee should take precautions to avoid any loss of data that might result when the TPC can no longer be used. + +Licensee assigns to IBM all right, title, and interest (including ownership of copyright) in any data, suggestions, or written materials that 1) are related to the Technology Preview Code and 2) Licensee provides to IBM. Upon IBM's request, Licensee will sign additional documents necessary to assign such rights. In addition to the foregoing, Licensee grants to IBM a non-exclusive, irrevocable, unrestricted, worldwide and paid-up right and license to a) include in any product or service any idea, know-how, concept, technique, invention, discovery or improvement, whether or not patentable, that Licensee provides to IBM related to the Technology Preview Code b) use, manufacture and market any such product or service, and c) allow others to do any of the foregoing. + +Licensee agrees to treat the following as "IBM Confidential Information" regardless of whether they contain restrictive markings indicating the confidential nature thereof or have been identified as IBM Confidential Information prior to disclosure: (a) the Technology Preview Code, (b) any information provided to Licensee by IBM with regard to the Technology Preview Code including, but not limited to, related materials such as specifications, plans, trends, strategies, benchmarks, performance characteristics, comparisons and other assessments of the Technology Preview Code, (c) any information related to Licensee's access to the Technology Preview Code including, but not limited to, passwords or other access codes, and (d) all data, feedback, suggestions and/or written materials that Licensee provides to IBM related to the Technology Preview Code. Licensee is authorized to use the IBM Confidential Information for the purpose for which it was disclosed or otherwise for the benefit of IBM. Notwithstanding any other terms of this Agreement, Licensee agrees not to communicate, publish, disseminate or otherwise discuss with or disclose to any third party the IBM Confidential Information (including but not limited to articles, papers or other written materials pertaining to the IBM Confidential Information) prior to IBM making such IBM Confidential Information publicly available without a non-disclosure obligation. Notwithstanding the above, Licensee does not have a confidentiality obligation to Technology Preview Code identified in the Notices File as non-confidential. + +Licensee agrees to use the same care and discretion to avoid disclosure of the IBM Confidential Information as Licensee uses with Licensee's own similar information that Licensee does not wish to disclose, but in no event will such degree of care be less than reasonable care. Licensee's obligations with respect to the IBM Confidential Information will continue for a period of two years from Licensee's receipt of the IBM Confidential Information. Licensee agrees not to disclose to IBM any information that is considered confidential or proprietary to Licensee or any third party except under a signed, separate, written confidential agreement. + +Notwithstanding the existence of any confidentiality or other agreement Licensee may have with IBM pertaining to confidential information, the preceding paragraphs will govern the treatment of the IBM Confidential Information. + +Export and Import Restrictions + +This Program may contain cryptography. Transfer to, or use by, users of the Program may be prohibited or subject to export or import laws, regulations or policies, including those of the United States Export Administration Regulations. Licensee assumes all responsibility for complying with all applicable laws, regulations, and policies regarding the export, import, or use of this Program, including but not limited to, U.S. restrictions on exports or reexports. To obtain the export classification of this Program refer to: https://www.ibm.com/products/exporting/. + +Third Party Data and Services + +The Program may contain links to or be used to access third party data services, databases, web services, software, or other third party content (all, "content"). Access to this content is provided "AS-IS", WITH NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING THE WARRANTY OF TITLE, NON-INFRINGEMENT OR NON-INTERFERENCE AND THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Access can be terminated by the relevant third parties at their sole discretion at any time. Licensee may be required to enter into separate agreements with the third parties for the access to or use of such content. IBM is not a party to any such separate agreements and as an express condition of this license Licensee agrees to comply with the terms of such separate agreements. + +The following units of measure may apply to Licensee's use of the Program. + +Establishment + +Establishment is a unit of measure by which the Program can be licensed. An Establishment is a single physical site, including the surrounding campus and satellite offices located within 50 kilometers, of Licensee's site address. Licensee must obtain an entitlement for each Establishment at or for which the Program will be used. Licensee is permitted to deploy an unlimited number of copies of the Program within the Establishment. An entitlement for an Establishment is unique to that Establishment and may not be shared, nor may it be reassigned other than for the permanent closing of the Establishment. + +Virtual Processor Core + +Virtual Processor Core is a unit of measure by which the Program can be licensed. A Server is a physical computer that is comprised of processing units, memory, and input/output capabilities and that executes requested procedures, commands, or applications for one or more users or client devices. Where racks, blade enclosures, or other similar equipment is being employed, each separable physical device (for example, a blade or a rack-mounted device) that has the required components is considered itself a separate Server. A Virtual Server is either a virtual computer created by partitioning the resources available to a physical Server or an unpartitioned physical Server. A Processor Core is a functional unit within a computing device that interprets and executes instructions. A Processor Core consists of at least an instruction control unit and one or more arithmetic or logic unit. A Virtual Processor Core is a Processor Core on a Virtual Server created by partitioning the resources available to a physical Server or an unpartitioned physical Server. Licensee must obtain entitlement for each Virtual Processor Core made available to the Program. + +In addition to the above, the following terms apply to Licensee's use of the Program. + +Bundled Program Entitlement Details + +Each entitlement of the Program is equivalent to the indicated Entitlement Value of any one of the Bundled Programs, at Licensee's election, but not both (or all). If Licensee has more than one entitlement to the Program, Licensee may allocate between corresponding Entitlement Values of one or more of the Bundled Programs in a deployment combination of Licensee's choosing, provided that the sum of Licensee's usage of Entitlement Values of all the Bundled Programs does not exceed the total entitlements to the Program. Units of measure referenced in the below list of Entitlement Values are as defined in the license for the Bundled Program. + +Depending on the agreements between IBM and the Licensee, Licensee may have committed that when obtaining S&S they would do so for all uses and installations of an IBM Program. For the purposes of any such commitment, the individual Bundled Programs are the IBM Programs subject to that S&S commitment and to the extent that Licensee is obligated to acquire S&S for a Bundled Program, Licensee can satisfy that obligation as to the entitlements obtained under this Program by maintaining S&S for this Program as a whole. + +Entitlement Values + +Business Automation Insights (Component of the Program) +- Entitlement Value: Ratio 1 VPC/ 1VPC + +Business Automation Insights (Component of the Program) +- Entitlement Value: Ratio 2 VPC/ 1VPC +- Use Limitation: Non-Production + +IBM FileNet Content Manager +- Entitlement Value: Ratio 1 VPC/ 5VPCs + +IBM FileNet Content Manager for Non-Production Environment +- Entitlement Value: Ratio 2 VPCs/ 5VPCs +- Use Limitation: Non-Production + +IBM Business Automation Workflow Enterprise +- Entitlement Value: Ratio 1 VPC/ 5VPCs + +IBM Business Automation Workflow Enterprise for Non-Production Environment +- Entitlement Value: Ratio 2 VPCs/ 5VPCs +- Use Limitation: Non-Production + +IBM Operational Decision Manager Server +- Entitlement Value: Ratio 1 VPC/ 5VPCs + +IBM Operational Decision Manager Server for Non-Production Environment +- Entitlement Value: Ratio 2 VPCs/ 5VPCs +- Use Limitation: Non-Production + +Business Automation Navigator (Component of the Program) +- Entitlement Value: Ratio 1 VPC/ 5VPC + +Business Automation Content Analyzer (Component of the Program) +- Entitlement Value: Ratio 1 VPC/ 1VPC + +Business Automation Content Analyzer (Component of the Program) +- Entitlement Value: Ratio 2 VPC/ 1VPC +- Use Limitation: Non-Production + +"Ratio n/m" means that for the Bundled Program Licensee elects to allocate Licensee's entitlement to the Program, the entitlement for such Bundled Program is the number ('n') entitlements of the VPCs for the Bundled Program for every specified number ('m') entitlements of the VPCs for the Program as a whole. + +"Non-Production" means that the Bundled Program can only be deployed as part of Licensee's internal development and test environment for internal non-production activities, including but not limited to testing, performance tuning, fault diagnosis, internal benchmarking, staging, quality assurance activity and/or developing internally used additions or extensions to the Program using published application programming interfaces. Licensee is not authorized to use any part of the Bundled Program for any other purposes without acquiring the appropriate production entitlements. + +L/N: L-ASAY-BB3JR2 +D/N: L-ASAY-BB3JR2 +P/N: L-ASAY-BB3JR2 + + + diff --git a/NAVIGATOR/README.md b/NAVIGATOR/README.md new file mode 100644 index 00000000..139f1cdf --- /dev/null +++ b/NAVIGATOR/README.md @@ -0,0 +1,37 @@ +# Deploy Business Automation Navigator + +IBM® Business Automation Navigator provides a console to work with content from multiple content servers. The console enables teams to view their documents, folders, and searches in ways that help them to complete their tasks. + +You can use IBM Business Automation Navigator with IBM FileNet Content Manager to accomplish a wide range of business needs: +- Browse for content that is stored in a repository. +- Search for content by running a text search. +- Save document, folders, and other content as favorites. +- Edit documents. +- Add documents to content servers. +- Organize documents by creating folders and adding content to the folders. +- Use the version control rules that are set on the repository. +- Create teamspaces to provide a focused view of the content and objects in the repository. + +For more information see [Business Automation Navigator in the Knowledge Center](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.offerings/topics/con_ban.html) + +## Requirements and Prerequisites + +Perform the following tasks to prepare to deploy your Business Automation Navigator images on Kubernetes: + +- Prepare your Kubernetes environment. See [Preparing to install automation containers on Kubernetes](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_env_k8s.html) + +- Download the PPA. Refer to the top repository [readme](../README.md) to find instructions on how to push and tag the product container images to your Docker registry. + +- Prepare your Business Automation Navigator environment. These procedures include setting up databases, LDAP, storage, and configuration files that are required for use and operation. If you plan to use the YAML file method, you also create YAML files that include the applicable parameter values for your deployment. You must complete all of the [preparation steps for Business Automation Navigator](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_bank8s.html) before you are ready to deploy the container images. + + +## Deploying + +You can deploy your container images with the following methods: + +- [Using Helm charts](helm-charts/README.md) +- [Using Kubernetes YAML](k8s-yaml/README.md) + +## Completing post deployment configuration + +After you deploy your container images, you perform some required and some optional steps to get your Business Automation Navigator environment up and running. For detailed instructions, see [Configuring IBM Business Automation Navigator in a container environment](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_ecmconfigbank8s.html). diff --git a/NAVIGATOR/configuration/.gitkeep b/NAVIGATOR/configuration/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/NAVIGATOR/configuration/ICN/configDropins/overrides/DB2JCCDriver.xml b/NAVIGATOR/configuration/ICN/configDropins/overrides/DB2JCCDriver.xml new file mode 100644 index 00000000..937c2ce0 --- /dev/null +++ b/NAVIGATOR/configuration/ICN/configDropins/overrides/DB2JCCDriver.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS.xml b/NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS.xml new file mode 100644 index 00000000..643fa38d --- /dev/null +++ b/NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS.xml @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS_HADR.xml b/NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS_HADR.xml new file mode 100644 index 00000000..a8dd0e82 --- /dev/null +++ b/NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS_HADR.xml @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS_Oracle.xml b/NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS_Oracle.xml new file mode 100644 index 00000000..bb125c06 --- /dev/null +++ b/NAVIGATOR/configuration/ICN/configDropins/overrides/ICNDS_Oracle.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/NAVIGATOR/configuration/ICN/configDropins/overrides/OraJDBCDriver.xml b/NAVIGATOR/configuration/ICN/configDropins/overrides/OraJDBCDriver.xml new file mode 100644 index 00000000..aa2cffb9 --- /dev/null +++ b/NAVIGATOR/configuration/ICN/configDropins/overrides/OraJDBCDriver.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/NAVIGATOR/configuration/ICN/configDropins/overrides/ldap_AD.xml b/NAVIGATOR/configuration/ICN/configDropins/overrides/ldap_AD.xml new file mode 100644 index 00000000..c8fa5155 --- /dev/null +++ b/NAVIGATOR/configuration/ICN/configDropins/overrides/ldap_AD.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/NAVIGATOR/configuration/ICN/configDropins/overrides/ldap_TDS.xml b/NAVIGATOR/configuration/ICN/configDropins/overrides/ldap_TDS.xml new file mode 100644 index 00000000..e5725463 --- /dev/null +++ b/NAVIGATOR/configuration/ICN/configDropins/overrides/ldap_TDS.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/NAVIGATOR/configuration/README.md b/NAVIGATOR/configuration/README.md new file mode 100644 index 00000000..519acfd2 --- /dev/null +++ b/NAVIGATOR/configuration/README.md @@ -0,0 +1,8 @@ +# Configuration + +Follow the instructions in [Preparing to install Business Automation Navigator](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_bank8s.html) to set up the following environment elements: + +- LDAP +- Databases +- Configuration files for LDAP and Databases +- YAML files (for YAML deployments) diff --git a/NAVIGATOR/helm-charts/.gitkeep b/NAVIGATOR/helm-charts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/NAVIGATOR/helm-charts/README.md b/NAVIGATOR/helm-charts/README.md new file mode 100644 index 00000000..70b79e4c --- /dev/null +++ b/NAVIGATOR/helm-charts/README.md @@ -0,0 +1,99 @@ + +# Deploying with Helm charts + +> **NOTE**: To deploy Enterprise Content Management products (FNCM , CSS & CMIS) on IBM Cloud Private 3.1.2 you must use Business Automation Configuration Container (BACC). + +## Requirements and Prerequisites + +Ensure that you have completed the following tasks: + +- [Preparing to install Business Automation Navigator](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_bank8s.html) + +- [Preparing your Kubernetes server, including Kubernetes, Helm Tiller, and Kubernetes command line](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_env_k8s.html) + +- [Downloading the PPA archive](../../README.md) + +The Helm command for deploying the Business Automation Navigator image include a number of required command parameters for specific environment and configuration settings. Review the reference topic for these parameters and determine the values for your environment as part of your preparation: + +- [Business Automation Navigator Helm command parameters](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.ref/k8s_topics/ref_cm_banparamsk8s_helm.html) + +## Tips: + +- On Openshift, an expired docker secret can cause errors during deployment. If an admin.registry key already exists and has expired, delete the key with the following command: + ```console + kubectl delete secret admin.registrykey -n + ``` + + Then generate a new docker secret with the following command: + + ```console + kubectl create secret docker-registry admin.registrykey --docker-server= --docker-username= --docker-password=$(oc whoami -t) --docker-email=ecmtest@ibm.com -n + ``` + +- On Openshift, the security context constraint can cause deployment errors. To prevent this, update the namespace to include the constraints for the components that you want to deploy. For example, the following update accommodates Business Automation Navigator (50000,50001): + + ```console + oc edit namespace dbamc-project + openshift.io/sa.scc.supplemental-groups: 50000 + openshift.io/sa.scc.uid-range: 50001 + ``` + +## Initializing the command line interface +Use the following commands to initialize the command line interface: +1. Run the init command: + ```console + $ helm init --client-only + ``` +2. Check whether the command line can connect to the remote Tiller server: + ```console + $ helm version + Client: &version.Version{SemVer:"v2.9.1", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"} + Server: &version.Version{SemVer:"v2.9.1", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"} + ``` + +## Deploying images +Provide the parameter values for your environment and run the command to deploy the image. + > **Tip**: Copy the sample command to a file, edit the parameter values, and use the updated command for deployment. + > **Tip**: The values which are include for 'resources' inside helm install / upgrade commands just suggestions only. Each deployment must take into account the demands their particular workload will place on the system. + +To deploy Business Automation Navigator: + + ```console + $ helm install ibm-dba-navigator-3.0.0.tgz --name dbamc-navigator --namespace dbamc --set icnProductionSetting.license=accept,icnProductionSetting.jvmHeapXms=512,icnProductionSetting.jvmHeapXmx=1024,icnProductionSetting.icnDBType=db2,icnProductionSetting.icnJNDIDSName=ECMClientDS,icnProductionSetting.icnSChema=ICNDB,icnProductionSetting.icnTableSpace=ICNDBTS,icnProductionSetting.icnAdmin=ceadmin,icnProductionSetting.navigatorMode=3,dataVolume.existingPVCforICNCfgstore=icn-cfgstore,dataVolume.existingPVCforICNLogstore=icn-logstore,dataVolume.existingPVCforICNPluginstore=icn-pluginstore,dataVolume.existingPVCforICNVWCachestore=icn-vw-cachestore,dataVolume.existingPVCforICNVWLogstore=icn-vw-logstore,dataVolume.existingPVCforICNAsperastore=icn-asperastore,autoscaling.enabled=False,replicaCount=1,imagePullSecrets.name=admin.registrykey,image.repository=:5000/dbamc/navigator,image.tag=ga-306-icn + ``` +Replace with correct registry url. For example --> docker-registry.default.svc + +> **Reminder**: After you deploy, return to the instructions in the Knowledge Center, [Configuring IBM Business Automation Navigator in a container environment](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_ecmconfigbank8s.html), to get your Business Automation Navigator environment up and running. + +## Upgrade images + +To deploy Business Automation Navigator: + + IBM Cloud Private 3.1.2 + +``` + $ export HELM_HOME=/root/.helm + + Modify **HELM_HOME** directory to match with your respective directory. + + $ helm repo add local-charts https://mycluster.icp:8443/helm-repo/charts --ca-file $HELM_HOME/ca.pem --cert-file $HELM_HOME/cert.pem --key-file $HELM_HOME/key.pem + + $ helm upgrade dbamc-icn local-charts/ibm-dba-navigator --version=3.0.0 --tls --reuse-values --set image.repository=mycluster.icp:8500/apprentice/navigator,image.tag=stable-ubi,resources.requests.cpu=500m,resources.requests.memory=512Mi,imagePullSecrets.name=admin.registrykey,resources.limits.cpu=1,resources.limits.memory=1024Mi,log.format=json +``` + Certified Kubernetes platform +``` + $ helm upgrade dbamc-icn /helm-charts/ibm-dba-navigator-3.0.0.tgz --reuse-values --set image.repository=mycluster.icp:8500/apprentice/navigator,image.tag=stable-ubi,resources.requests.cpu=500m,resources.requests.memory=512Mi,imagePullSecrets.name=admin.registrykey,resources.limits.cpu=1,resources.limits.memory=1024Mi,log.format=json +``` +## Uninstalling a Kubernetes release of Business Automation Navigator + +To uninstall and delete a release named `my-icn-prod-release`, use the following command: + +```console +$ helm delete my-icn-prod-release --purge +``` + +The command removes all the Kubernetes components associated with the release, except any Persistent Volume Claims (PVCs). This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. To delete the persisted data of the release, you can delete the PVC using the following command: + +```console +$ kubectl delete pvc my-icn-prod-release-icn-pvclaim +``` diff --git a/NAVIGATOR/helm-charts/ibm-dba-navigator-3.0.0.tgz b/NAVIGATOR/helm-charts/ibm-dba-navigator-3.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f1e5c93e0062b739cd23f06a218f28eaaa69dc4a GIT binary patch literal 63308 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

v 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 LLK9^C0LB9Vfo` **Reminder**: After you deploy, return to the instructions in the Knowledge Center, [Configuring IBM Business Automation Navigator in a container environment](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_18.0.x/com.ibm.dba.install/k8s_topics/tsk_ecmconfigbank8s.html), to get your Business Automation Navigator environment up and running. + +## Uninstalling a Kubernetes release of Business Automation Navigator + +To uninstall and delete the Business Automation Navigator release, use the following command: + +```console +$ kubectl delete -f +``` + +The command removes all the Kubernetes components associated with the release, except any Persistent Volume Claims (PVCs). This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. To delete the persisted data of the release, you can delete the PVC using the following command: + +```console +$ kubectl delete pvc my-icn-prod-release-icn-pvclaim +``` diff --git a/NAVIGATOR/k8s-yaml/icn-deploy.yml b/NAVIGATOR/k8s-yaml/icn-deploy.yml new file mode 100644 index 00000000..1b624be6 --- /dev/null +++ b/NAVIGATOR/k8s-yaml/icn-deploy.yml @@ -0,0 +1,156 @@ +apiVersion: v1 +kind: Service +metadata: + name: ecm-icn-svc +spec: + ports: + - name: http + protocol: TCP + port: 9080 + targetPort: 9080 + - name: https + protocol: TCP + port: 9443 + targetPort: 9443 + selector: + app: icnserver-cluster1 + type: NodePort + sessionAffinity: ClientIP +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: ecm-icn +spec: + replicas: 1 + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: icnserver-cluster1 + spec: + imagePullSecrets: + - name: admin.registrykey + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app + operator: In + values: + - icnserver-cluster1 + topologyKey: "kubernetes.io/hostname" + containers: + - image: /default/navigator:latest + imagePullPolicy: Always + name: ecm-icn + securityContext: + runAsUser: 50001 + allowPrivilegeEscalation: false + resources: + requests: + memory: 512Mi + cpu: 500m + limits: + memory: 1024Mi + cpu: 1 + ports: + - containerPort: 9080 + name: http + - containerPort: 9443 + name: https + env: + - name: LICENSE + value: "accept" + - name: PRODUCT + value: "DBAMC" + - name: JVM_HEAP_XMS + value: "512m" + - name: JVM_HEAP_XMX + value: "1024m" + - name: TZ + value: "Etc/UTC" + - name: ICNDBTYPE + value: "db2" + - name: ICNJNDIDS + value: "ECMClientDS" + - name: ICNSCHEMA + value: "ICNDB" + - name: ICNTS + value: "ICNDB" + - name: ICNADMIN + value: "ceadmin" + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + readinessProbe: + httpGet: + path: /navigator + port: 9080 + httpHeaders: + - name: Content-Encoding + value: gzip + initialDelaySeconds: 180 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /navigator + port: 9080 + httpHeaders: + - name: Content-Encoding + value: gzip + initialDelaySeconds: 600 + periodSeconds: 5 + volumeMounts: + - name: icncfgstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/configDropins/overrides" + subPath: configDropins/overrides + - name: icnlogstore-pvc + mountPath: "/opt/ibm/wlp/usr/servers/defaultServer/logs" + subPath: logs + - name: icnpluginstore-pvc + mountPath: "/opt/ibm/plugins" + subPath: plugins + - name: icnvwcachestore-pvc + mountPath: "/opt/ibm/viewerconfig/cache" + subPath: viewercache + - name: icnvwlogstore-pvc + mountPath: "/opt/ibm/viewerconfig/logs" + subPath: viewerlogs + - name: icnasperastore-pvc + mountPath: "/opt/ibm/Aspera" + subPath: Aspera + + volumes: + - name: icncfgstore-pvc + persistentVolumeClaim: + claimName: "icn-cfgstore" + - name: icnlogstore-pvc + persistentVolumeClaim: + claimName: "icn-logstore" + - name: icnpluginstore-pvc + persistentVolumeClaim: + claimName: "icn-pluginstore" + - name: icnvwcachestore-pvc + persistentVolumeClaim: + claimName: "icn-vwcachestore" + - name: icnvwlogstore-pvc + persistentVolumeClaim: + claimName: "icn-vwlogstore" + - name: icnasperastore-pvc + persistentVolumeClaim: + claimName: "icn-asperastore" diff --git a/ODM/README.md b/ODM/README.md new file mode 100644 index 00000000..a24aba48 --- /dev/null +++ b/ODM/README.md @@ -0,0 +1,125 @@ +# Install IBM Operational Decision Manager 8.10.2 on Certified Kubernetes + +The following architectures are supported for Operational Decision Manager 8.10.2 on Certified Kubernetes: +- AMD64 (or x86_64), which is the 64-bit edition for Linux x86. + +> **Note**: Rule Designer is installed as an update site from the [Eclipse Marketplace](https://marketplace.eclipse.org/content/ibm-operational-decision-manager-developers-v-8102-rule-designer) into an existing version of Eclipse. + +## Option 1: Install a release for evaluation purposes on Minikube or OpenShift + +The following instructions are to install the Operational Decision Manager for developers Helm chart: + + * [Installing Operational Decision Manager for developers on MiniKube](platform/README_Eval_Minikube.md) + * [Installing Operational Decision Manager for developers on Openshift](platform/README_Eval_Openshift.md) + +## Option 2: Install a production ready release + +The installation of Operational Decision Manager 8.10.2 uses a `ibm-odm-prod` Helm chart, also known as the ODM for production Helm chart. The chart is a package of preconfigured Kubernetes resources that bootstraps an ODM for production deployment on a Kubernetes cluster. You customize the deployment by changing and adding configuration parameters. The default values are appropriate to a production environment, but it is likely that you want to configure at least the security of your kubernetes deployment. + +The `ibm-odm-prod` Helm chart includes five containers corresponding to the following services. +- Decision Center Business Console and Enterprise Console +- Decision Server Console +- Decision Server Runtime +- Decision Server Runner +- (Optional) Internal PostgreSQL DB + +The services require CPU and memory resources. The following table lists the minimum requirements that are used as default values. + +| Service | CPU Minimum (m) | Memory Minimum (Mi) | +| ---------- | ----------- | ------------------- | +| Decision Center | 500 | 512 | +| Decision Runner | 500 | 512 | +| Decision Server Console | 500 | 512 | +| Decision Server Runtime | 500 | 512 | +| **Total** | **2000** (2CPU) | **2048** (2Gb) | +| (Optional) Internal DB | 500 | 512 | + +### Optional: Before you install a production ready release with customizations + +If you want to customize your Operational Decision Manager installation, go to the [IBM Cloud Pak for Automation 19.0.x](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_install_odm.html) Knowledge Center and choose which customizations you want to apply. + * [Configuring PVUs](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_config_pvu.html) + * [Defining the security certificate](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_replace_security_certificate.html) + * [Configuring the LDAP and user registry](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/con_config_user_registry.html) + * [Configuring a custom external database](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_custom_external_db.html) + * [Configuring the ODM event emitter](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_custom_emitters.html) + * [Configuring Decision Center customization](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_custom_dc.html) + +> **Note**: The [configuration](configuration) folder provides sample configuration files that you might find useful. Download the files and edit them for your own customizations. + +After you noted the values of the configuration parameters that are needed to customize Operational Decision Manager, choose one of the following deployment options to complete the installation. + +### Option 2a: Install a production ready release on Minikube or OpenShift + +The following instructions are to install the ODM for production Helm chart: + * [Install Operational Decision Manager on MiniKube](platform/README_Minikube.md) + * [Install Operational Decision Manager on Openshift](platform/README_Openshift.md) + +### Option 2b: Install a production ready release on other Kubernetes by using Helm and Tiller + +A [Helm chart](https://helm.sh/) is a Package Manager for Kubernetes to help you manage (install/upgrade/update) your Kubernetes deployment. If you are using Helm on a cluster that you completely control, like Minikube or a cluster on a private network in which sharing is not a concern, the default installation that applies no security configuration is the easiest option. + +However, if your cluster is exposed to a larger network or if you share your cluster with others – production clusters fall into this category – you must secure your installation to prevent careless or malicious actors from damaging the cluster or its data. To secure Helm for use in a production environment and other multi-tenant scenarios, see [Securing a Helm installation](https://helm.sh/docs/using_helm/#securing-your-helm-installation). + +Refer to [helm-charts/README.md](helm-charts/README.md) + +### Option 2c: Install a production ready release on other Kubernetes by using Kubernetes YAML + +If you prefer to use a simpler deployment process that uses a native Kubernetes authorization mechanism (RBAC) instead of Helm and Tiller, use the Helm command line interface (CLI) to generate a Kubernetes manifest. If you choose to use Kubernetes YAML you cannot use certain capabilities of Helm to manage your deployment. + +Refer to [k8s-yaml/README.md](k8s-yaml/README.md) + +## Post-installation steps + +### Step 1: Verify a deployment + +You can check the status of the pods by using the following command: +```console +$ kubectl get pods +``` + +When all of the pods are *Running* and *Ready*, retrieve the cluster-info-ip name and port numbers with the following commands: + +

+$ kubectl cluster-info
+Kubernetes master is running at https://cluster-info-ip:8443
+CoreDNS is running at https://cluster-info-ip:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
+
+$ kubectl get services
+NAME                                                  TYPE        CLUSTER-IP  EXTERNAL-IP   PORT(S)                    AGE
+kubernetes                                            ClusterIP   ****        none          443/TCP                    9m
+my-odm-prod-release-dbserver                          ClusterIP   ****        none          5432/TCP                   3m
+my-odm-prod-release-odm-decisioncenter                NodePort    ****        none          9453:dcs-port/TCP   3m
+my-odm-prod-release-odm-decisionrunner                NodePort    ****        none          9443:dr-port/TCP    3m
+my-odm-prod-release-odm-decisionserverconsole         NodePort    ****        none          9443:dsc-port/TCP   3m
+my-odm-prod-release-odm-decisionserverruntime         NodePort    ****        none          9443:dsr-port/TCP   3m
+
+ +With the cluster-info-ip name and port numbers, you have access to the applications with the following URLs: + +|Component|URL|Username|Password| +|:-----:|:-----:|:-----:|:-----:| +| Decision Server Console | https://*cluster-info-ip*:*dsc-port*/res |resAdmin/odmAdmin|resAdmin/odmAdmin| +| Decision Server Runtime |https://*cluster-info-ip*:*dsr-port*/DecisionService |N/A|N/A| +| Decision Center Business Console | https://*cluster-info-ip*:*dcs-port*/decisioncenter |rtsAdmin/odmAdmin|rtsAdmin/odmAdmin| +| Decision Center Enterprise Console | https://*cluster-info-ip*:*dcs-port*/teamserver |rtsAdmin/odmAdmin|rtsAdmin/odmAdmin| +| Decision Runner | https://*cluster-info-ip*:*dr-port*/DecisionRunner |resDeployer/odmAdmin|resDeployer/odmAdmin| + +To further debug and diagnose deployment problems in the Kubernetes cluster, use the `kubectl cluster-info dump` command. + +For more information about how to check the state and recent events of your pods, see +[Troubleshooting](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_troubleshooting.html). + +### Step 2: Synchronize users and groups + +If you customized the default user registry, you must synchronize the registry with the Decision Center database. For more information, see +[Synchronizing users and groups in Decision Center](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_synchronize_users.html). + +### Step 3: Manage your Operational Decision Manager deployment + +It is possible to update a deployment after it is installed. Use the following tasks in IBM Knowledge Center to update a deployment whenever you need, and as many times as you need. + * [Scaling deployments](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.managing/k8s_topics/tsk_odm_scaling.html?view=kc) + * [Customizing log levels](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.managing/k8s_topics/tsk_odm_custom_logging.html?view=kc) + +## Upgrade a release + +Refer to the [Upgrade section](helm-charts/README.md#upgrade-a-release) in the helm-charts folder for instructions using Tiller, or the [Upgrade section](k8s-yaml/README.md#upgrade-a-release) in the k8s-yaml folder for instructions on how to use Kubernetes YAML. diff --git a/ODM/configuration/.gitkeep b/ODM/configuration/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/ODM/configuration/custom-external-database/sample-datasource-dc-oracle.xml b/ODM/configuration/custom-external-database/sample-datasource-dc-oracle.xml new file mode 100644 index 00000000..9ed54535 --- /dev/null +++ b/ODM/configuration/custom-external-database/sample-datasource-dc-oracle.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + diff --git a/ODM/configuration/custom-external-database/sample-datasource-ds-oracle.xml b/ODM/configuration/custom-external-database/sample-datasource-ds-oracle.xml new file mode 100644 index 00000000..8840f7f2 --- /dev/null +++ b/ODM/configuration/custom-external-database/sample-datasource-ds-oracle.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/ODM/configuration/custom-external-database/sample-driver-pvc.yaml b/ODM/configuration/custom-external-database/sample-driver-pvc.yaml new file mode 100644 index 00000000..e1cc1703 --- /dev/null +++ b/ODM/configuration/custom-external-database/sample-driver-pvc.yaml @@ -0,0 +1,11 @@ +# Sample of Persistent Volume Claim configuration file +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: customdatasource-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi diff --git a/ODM/configuration/odm-eval.yaml b/ODM/configuration/odm-eval.yaml new file mode 100644 index 00000000..07036076 --- /dev/null +++ b/ODM/configuration/odm-eval.yaml @@ -0,0 +1,159 @@ +--- +# Source: ibm-odm-dev/templates/pvclaim.yaml +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: odm-eval-odm-pvclaim + labels: + app: odm-eval-ibm-odm-dev + chart: "ibm-odm-dev-2.2.0" + release: "odm-eval" + heritage: "Tiller" +spec: + ## if present, use the storageClassName from the values.yaml, else use the + ## default storageClass setup by kube Administrator + ## + ## setting storageClassName to nil means use the default storage class + storageClassName: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi + + +--- +# Source: ibm-odm-dev/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: odm-eval-ibm-odm-dev + labels: + app: ibm-odm-dev + chart: ibm-odm-dev-2.2.0 + release: odm-eval + heritage: Tiller +spec: + type: NodePort + ports: + - port: 9060 + targetPort: 9060 + protocol: TCP + selector: + run: ibm-odm-dev + app: ibm-odm-dev + release: odm-eval + +--- +# Source: ibm-odm-dev/templates/deployment.yaml + +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: odm-eval-ibm-odm-dev + labels: + app: ibm-odm-dev + chart: ibm-odm-dev-2.2.0 + release: odm-eval + heritage: Tiller +spec: + replicas: 1 + selector: + matchLabels: + release: odm-eval + run: ibm-odm-dev + template: + metadata: + labels: + run: ibm-odm-dev + app: ibm-odm-dev + chart: ibm-odm-dev-2.2.0 + release: odm-eval + heritage: Tiller + annotations: + productName: "IBM Operational Decision Manager for Developers" + productID: "OperationalDecisionManagerForDevelopers" + productVersion: 8.10.2.0 + spec: + hostNetwork: false + hostPID: false + hostIPC: false + securityContext: + runAsNonRoot: true + runAsUser: 1001 + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + #If you specify multiple nodeSelectorTerms associated with nodeAffinity types, + #then the pod can be scheduled onto a node if one of the nodeSelectorTerms is satisfied. + # + #If you specify multiple matchExpressions associated with nodeSelectorTerms, + #then the pod can be scheduled onto a node only if all matchExpressions can be satisfied. + # + #valid operators: In, NotIn, Exists, DoesNotExist, Gt, Lt + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - amd64 + volumes: + - name: odm-eval-ibm-odm-dev-volume + persistentVolumeClaim: + claimName: odm-eval-odm-pvclaim + containers: + - name: ibm-odm-dev + image: ibmcom/odm:8.10.2-SNAPSHOT_2.2.0-amd64 + securityContext: + runAsUser: 1001 + runAsNonRoot: true + privileged: false + readOnlyRootFilesystem: false + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + imagePullPolicy: IfNotPresent + env: + - name: LICENSE + value: "view" + - name: DB_TYPE + value: "h2" + - name: SAMPLE + value: "true" + - name: DC_PERSISTENCE_LOCALE + value: "en_US" + - name: "RELEASE_NAME" + value: odm-eval + ports: + - containerPort: 9060 + # + volumeMounts: + - name: odm-eval-ibm-odm-dev-volume + mountPath: /config/dbdata/ + # + readinessProbe: + httpGet: + scheme: HTTP + path: /decisioncenter/healthCheck + port: 9060 + initialDelaySeconds: 10 + periodSeconds: 5 + failureThreshold: 45 + livenessProbe: + httpGet: + scheme: HTTP + path: /decisioncenter/healthCheck + port: 9060 + initialDelaySeconds: 300 + periodSeconds: 10 + failureThreshold: 10 + resources: + limits: + cpu: 2 + memory: 2048Mi + requests: + cpu: 1 + memory: 1024Mi + + diff --git a/ODM/configuration/sample-values.yaml b/ODM/configuration/sample-values.yaml new file mode 100755 index 00000000..2f9b15e9 --- /dev/null +++ b/ODM/configuration/sample-values.yaml @@ -0,0 +1,117 @@ +# Default values for odmcharts. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. +image: + repository: "" + pullPolicy: IfNotPresent +## Optionally specify an array of imagePullSecrets. +## Secrets must be manually created in the namespace. +## ref: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod +## - name: admin.registrykey + pullSecrets: + +## Architecture - e.g. amd64, ppc64le. If left empty, the architecture will be determined automatically. +## You can use kubectl version command to determine the architecture on the desired worker node. + arch: "" + +service: + enableTLS: true + type: NodePort + +decisionServerRuntime: + enabled: true + replicaCount: 1 + resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: 2 + memory: 4096Mi + +decisionServerConsole: + resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: 2 + memory: 1024Mi + +decisionCenter: + enabled: true + persistenceLocale: en_US + replicaCount: 1 + resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: 2 + memory: 4096Mi + +decisionRunner: + enabled: true + replicaCount: 1 + resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: 2 + memory: 4096Mi + +internalDatabase: + databaseName: odmdb + user: odmusr + password: "odmpwd" + persistence: + enabled: true + useDynamicProvisioning: false + storageClassName: "" + resources: + requests: + storage: 5Gi + securityContext: + runAsUser: 0 + resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: 2 + memory: 4096Mi + +externalDatabase: + type: "" + serverName: "" + databaseName: "" + user: "" + password: "" + port: "" + +externalCustomDatabase: + datasourceRef: + driverPvc: + +readinessProbe: + initialDelaySeconds: 5 + periodSeconds: 5 + failureThreshold: 45 + timeoutSeconds: 5 + +livenessProbe: + initialDelaySeconds: 300 + periodSeconds: 10 + failureThreshold: 10 + timeoutSeconds: 5 + +customization: + securitySecretRef: + baiEmitterSecretRef: + authSecretRef: + dedicatedNodeLabel: + + productName: IBM Cloud Pak for Automation + productID: 5737-I23 + kubeVersion: DBAMC diff --git a/ODM/configuration/sample-webSecurity-LDAP.xml b/ODM/configuration/sample-webSecurity-LDAP.xml new file mode 100644 index 00000000..751c1b54 --- /dev/null +++ b/ODM/configuration/sample-webSecurity-LDAP.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ODM/configuration/sample-webSecurity-basic-registry.xml b/ODM/configuration/sample-webSecurity-basic-registry.xml new file mode 100644 index 00000000..66157812 --- /dev/null +++ b/ODM/configuration/sample-webSecurity-basic-registry.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ODM/configuration/template-plugin-configuration.properties b/ODM/configuration/template-plugin-configuration.properties new file mode 100644 index 00000000..0b4b2ec7 --- /dev/null +++ b/ODM/configuration/template-plugin-configuration.properties @@ -0,0 +1,27 @@ +# ODM event emitter configuration template + +com.ibm.rules.bai.plugin.topic= +com.ibm.rules.bai.plugin.kafka.bootstrap.servers=: + +# Performance enhancement for integration with ODM +com.ibm.rules.bai.plugin.kafka.acks=0 +com.ibm.rules.bai.plugin.kafka.max.block.ms=1 +com.ibm.rules.bai.plugin.kafka.max.in.flight.requests.per.connection=1 + +# Configure event emission without security +com.ibm.rules.bai.plugin.topic= +com.ibm.rules.bai.plugin.kafka.bootstrap.servers=192.168.1.15:9092 + +# Configure event emission with security +# com.ibm.rules.bai.plugin.topic= +# com.ibm.rules.bai.plugin.kafka.bootstrap.servers=192.168.1.15:9092 +# com.ibm.rules.bai.plugin.kafka.security.protocol=SASL_SSL +# com.ibm.rules.bai.plugin.kafka.ssl.truststore.location=/config/baiemitterconfig/ +# com.ibm.rules.bai.plugin.kafka.ssl.truststore.password= +# com.ibm.rules.bai.plugin.kafka.sasl.mechanism=PLAIN +# com.ibm.rules.bai.plugin.kafka.ssl.protocol=TLSv1.2 +# com.ibm.rules.bai.plugin.kafka.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="token" password=""; + +# Truststore file configuration +com.ibm.rules.bai.plugin.kafka.ssl.truststore.location=/config/baiemitterconfig/ +com.ibm.rules.bai.plugin.kafka.ssl.truststore.password= diff --git a/ODM/helm-charts/.gitkeep b/ODM/helm-charts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/ODM/helm-charts/README.md b/ODM/helm-charts/README.md new file mode 100644 index 00000000..2e20794b --- /dev/null +++ b/ODM/helm-charts/README.md @@ -0,0 +1,100 @@ +# Install IBM Operational Decision Manager with the Helm CLI + +Before you install make sure that you have prepared your environment. For more information, see [Preparing to install ODM for production](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_preparing_odmk8s.html) as well as [Customizing ODM for production](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_install_odm.html). + +Refer to the top repository [readme](../../README.md#step-2-download-a-product-package-from-ppa-and-load-the-images) to find instructions on how to push and tag the product container images to your Docker registry. + +1. If Helm is not installed in your Kubernetes cluster, install [Helm 2.9.1](https:/github.com/helm/helm/releases/tag/v2.9.1). +2. When Helm is ready, initialize the local CLI and install Tiller. + + ```console + $ helm init + ``` + Tiller is now installed in the Kubernetes cluster with the current-context configuration. By default, Tiller does not have authentication enabled. For more inforamtion about configuring strong TLS authentication, see the [Tiller TLS guide](https://helm.sh/docs/using_helm/#using-ssl-between-helm-and-tiller). + +3. Download the `ibm-odm-prod-2.2.0.tgz` Helm chart from the GitHub repository. + - [ibm-odm-prod-2.2.0.tgz](ibm-odm-prod-2.2.0.tgz) for Operational Decision Manager 8.10.2 + +4. Install a Kubernetes release with the default configuration and a name of `my-odm-prod-release` by using the following command: + + ```console + $ helm install --name my-odm-prod-release \ + /path/to/ibm-odm-prod-2.2.0.tgz + ``` + The package is deployed asynchronously in a matter of minutes, and is composed of several services. + + > **Note**: You can check the status of the pods that have been created: + ```console + $ kubectl get pods + NAME READY STATUS RESTARTS AGE + my-odm-prod-release-dbserver-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisioncenter-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionrunner-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionserverconsole-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionserverruntime-*** 1/1 Running 0 44m + ``` + +5. List the helm releases in your cluster. + + ```console + $ helm ls + ``` + The release is an instance of the `ibm-odm-prod` chart. All the Operational Decision Manager components are now running in a Kubernetes cluster. + + To verify a deployment, go back to the [Post installation steps](../README.md#post-installation-steps). + +## Customize a Kubernetes release of Operational Decision Manager + +Refer to the [ODM for production Certified Kubernetes parameters](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.ref/k8s_topics/ref_parameters_prod.html) for a complete list of values that you can configure. + +### To customize the helm install with --set key=value arguments + +Using the `helm install` command, you can specify each parameter with a `--set key=value` argument. For example, the following command sets 3 parameters for the internal database. + +```console +$ helm install --name my-odm-prod-release \ + --set internalDatabase.databaseName=my-db \ + --set internalDatabase.user=my-user \ + --set internalDatabase.password=my-password \ + /path/to/ibm-odm-prod-2.2.0.tgz +``` + +> **New in 19.0.1**: Use the new `customlibPvc` parameter to customize Decision Center in your release. Use the name of the persistent volume claim (PVC) you set up when you prepared the release as the parameter value. For more information, see [Preparing to install Operational Decision Manager](https://www.ibm.com/support/knowledgecenter/en/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_preparing_odmk8s.html). +```console +--set decisionCenter.customlibPvc=custom-dc-libs-pvc +``` + +### To customize the helm install with a YAML file + +You can use a custom-made .yaml file to specify the values of the parameters when you install the chart. For example, the following command uses the `myvalues.yaml` file. + +```console +$ helm install --name my-odm-prod-release -f myvalues.yaml /path/to/ibm-odm-prod-2.2.0.tgz +``` + +> **Tip**: Refer to the [`sample-values.yaml`](../configuration/sample-values.yaml) file to find the default values used by the `ibm-odm-prod` chart. + +## Upgrade a release + +1. [Download the latest PPA file from IBM Passport Advantage and load the new images.](../../README.md#step-2-download-a-product-package-from-ppa-and-load-the-images) + +2. Run the helm upgrade command on the release that you want to upgrade. The following example command upgrades a release `my-odm-prod-release` with the new Helm chart. + ```console + $ helm upgrade my-odm-prod-release /path/to/ibm-odm-prod-2.2.0.tgz --reuse-values + ``` + +3. Verify that the version of Decision Center and the Decision Server console is the new version and they are running on the same URL and port as before. + +## Uninstall a Kubernetes release of Operational Decision Manager + +To uninstall and delete a release named `my-odm-prod-release`, use the following command: + +```console +$ helm delete my-odm-prod-release --purge +``` + +The command removes all the Kubernetes components associated with the release, except any Persistent Volume Claims (PVCs). This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. To delete the persisted data of the release, you can delete the PVC using the following command: + +```console +$ kubectl delete pvc my-odm-prod-release-odm-pvclaim +``` diff --git a/ODM/helm-charts/ibm-odm-prod-2.2.0.tgz b/ODM/helm-charts/ibm-odm-prod-2.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..6a4920b36a4843dc93f9063931ea516e90effdfd GIT binary patch literal 26720 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 generated-k8s-templates.yaml + ``` + +4. Install `my-odm-prod-release` with the default configuration by using the following command. + + ```console + $ kubectl apply -f generated-k8s-templates.yaml + ``` + The package is deployed asynchronously in a matter of minutes, and is composed of several services. + + > **Note**: You can check the status of the pods that you created: + ```console + $ kubectl get pods + NAME READY STATUS RESTARTS AGE + my-odm-prod-release-dbserver-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisioncenter-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionrunner-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionserverconsole-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionserverruntime-*** 1/1 Running 0 44m + ``` + + The release is an instance of the `ibm-odm-prod` chart. All of the Operational Decision Manager components are now running in a Kubernetes cluster. + + To verify a deployment, go back to the [Post installation steps](../README.md#post-installation-steps). + +## Customize a Kubernetes release of Operational Decision Manager + +Refer to the [ODM for production Certified Kubernetes parameters](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.ref/k8s_topics/ref_parameters_prod.html) for a complete list of values that you can configure. + +### To customize the install with --set key=value arguments + +Using Helm, you can specify each parameter with a `--set key=value` argument in the `helm template` command. + +For example: +```console +$ helm template --name my-odm-prod-release \ + --set internalDatabase.databaseName=my-db \ + --set internalDatabase.user=my-user \ + --set internalDatabase.password=my-password \ + /path/to/ibm-odm-prod-2.2.0.tgz +``` + +### To customize the helm install with a YAML file + +It is also possible to use a custom-made .yaml file to specify the values of the parameters when you install the chart. +For example: + +```console +$ helm template --name my-odm-prod-release -f myvalues.yaml /path/to/ibm-odm-prod-2.2.0.tgz +``` + +> **Tip**: Refer to the [`sample-values.yaml`](../configuration/sample-values.yaml) file to find the default values used by the `ibm-odm-prod` chart. + +## Upgrade a release + +1. [Download the latest PPA file from IBM Passport Advantage and load the new images.](../README.md#step-2-download-a-product-package-from-ppa-and-load-the-images) + +3. Delete the odm-test pod + + ```console + $ kubectl delete pod my-prod-release-odm-test + ``` + +2. Create a new chart YAML template file. + + > **WARNING**: You must reuse the same `--set key=value` arguments and/or values.yaml file that were specified during the previous installation or the configuration will be reset to its default values. + + ```console + $ helm template \ + --name my-odm-prod-release \ + --set key=value \ + -f myvalues.yaml \ + /path/to/ibm-odm-prod-2.2.0.tgz > generated-k8s-templates-upgrade.yaml + ``` + +4. Apply this new template in Kubernetes. + + ```console + $ kubectl apply -f generated-k8s-templates-upgrade.yaml + ``` + + > **Note**: The Persistent Volume Claim is not recreated. You can ignore the message: `The PersistentVolumeClaim "my-odm-prod-release-pvclaim" is invalid: spec: Forbidden: is immutable after creation except resources.requests for bound claims` + +5. Verify that the version of Decision Center and the Decision Server console is the new version and they are running on the same URL and port as before. + +## Uninstall a Kubernetes release of Operational Decision Manager + +To uninstall and delete a template along with all of the associated releases, use the following command: + +```console +$ kubectl delete -f generated-k8s-templates.yaml +``` + +> **Note**: The command removes all the Kubernetes components associated with the chart, even Persistent Volume Claims (PVCs), which might contain valuable data. diff --git a/ODM/platform/README_Eval_Minikube.md b/ODM/platform/README_Eval_Minikube.md new file mode 100644 index 00000000..300b71ca --- /dev/null +++ b/ODM/platform/README_Eval_Minikube.md @@ -0,0 +1,72 @@ +# Install IBM Operational Decision Manager for developers on Minikube + +IBM Operational Decision Manager for developers can be used on a personal computer to run and evaluate Operational Decision Manager in a single container. + +## Step 1: Install Minikube + +1. Refer to the Kubernetes [documentation](https://kubernetes.io/docs/setup/minikube/#installation) to install Minikube. + +2. Start Minikube with the minimum required CPU and memory. + + ```console + $ minikube start --cpus 4 --memory 4096 + ``` + + > **Note**: If you started a Minikube cluster without these parameters, stop and delete it before restarting it again. + ```console + $ minikube stop + $ minikube delete + $ minikube start --cpus 4 --memory 4096 + ``` + +3. Verify your installation. + + ```console + $ kubectl get nodes + ``` + +## Step 2: Install an Operational Decision Manager for developers release + +Install a release with the default configuration. The name defined in the configuration is `odm-eval-ibm-odm-dev`. + +1. Download the [odm-eval.yaml](../configuration/odm-eval.yaml) descriptor to your computer. + +2. Accept the license and deploy the release by using the following command: + + ```console + $ sed 's/view/accept/' odm-eval.yaml | kubectl create --validate=false -f - + ``` + + The package is deployed in a matter of minutes. + +## Step 3: Verify that the deployment is running + +1. Monitor the pod until it shows a STATUS of *Running* or *Completed*: + + ```console + $ while kubectl get pods | grep -v -E "(Running|Completed|STATUS)"; do sleep 5; done + ``` + +2. When the pod is *Running*, you can access the application with the URL returned by the `minikube service` command. + + ```console + $ minikube service list + + |-------------|----------------------|-----------------------------| + | NAMESPACE | NAME | URL | + |-------------|----------------------|-----------------------------| + | default | kubernetes | No node port | + | default | odm-eval-ibm-odm-dev | http://xxx.xxx.xx.xxx:31074 | + | kube-system | kube-dns | No node port | + |-------------|----------------------|-----------------------------| + ``` + +3. Open the URL named `odm-eval-ibm-odm-dev`. Use odmAdmin/odmAdmin for the user/password. + +## To uninstall the release + +To uninstall and delete the release from the Kubernetes CLI, use the following command: + +```console +$ kubectl delete -f odm-eval.yaml +``` diff --git a/ODM/platform/README_Eval_Openshift.md b/ODM/platform/README_Eval_Openshift.md new file mode 100644 index 00000000..fd7bd2c6 --- /dev/null +++ b/ODM/platform/README_Eval_Openshift.md @@ -0,0 +1,62 @@ +# Install IBM Operational Decision Manager for developers on Red Hat OpenShift + +IBM Operational Decision Manager for developers can be used on a personal computer to run and evaluate Operational Decision Manager in Red Hat OpenShift. + +## Step 1: Install the OpenShift command line interface (CLI) and Helm + +The OpenShift Container Platform CLI exposes commands for managing your applications, as well as lower level tools to interact with each component of your system. Refer to the OpenShift [documentation](https://docs.openshift.com/container-platform/3.11/cli_reference/get_started_cli.html). + +## Step 2: Install an Operational Decision Manager for developers release + +> **Tip**: Storage Persistent Volume (PV) is required to install this evaluation. PV represents an underlying storage capacity in the infrastructure. PV must be created with accessMode ReadWriteOnce and storage capacity of 5Gi or more, before you install ODM. You create a PV in the Admin console or with a .yaml file. + +1. As a developer with a user name of *ODMUSER*, create a project to contain your release by running the following commands: + + ```console + $ oc login --username= + $ oc new-project odmeval + $ oc project odmeval + ``` + + > **Note**: As a privileged user, you must grant access to the privileged SCC to *ODMUSER* and the default Service Account for project odmeval. + ```console + $ oc adm policy add-scc-to-user privileged -z default -n odmeval + $ oc adm policy add-scc-to-user privileged --serviceaccount=default -n odmeval + ``` + +2. As *ODMUSER*, run the following command to accept the license and install the release: + + ```console + $ sed 's/view/accept/' ./configuration/odm-eval.yaml | oc create -f - + ``` + +## Step 3: Verify that the deployment is running + +1. Monitor the pod until it shows a STATUS of *Running* or *Completed*: + + ```console + $ while oc get pods | grep -E "(Running|Completed|STATUS)"; do sleep 5; done + ``` + +2. When the pod is in *Running* state, you can access the status of your application with the following command: + + ```console + $ oc status + In project odmeval on server https://x.xx.xxx.xx:8443 + + svc/odmeval-ibm-odm-dev (all nodes):30341 -> 9060 + deployment/odmeval-ibm-odm-dev deploys ibmcom/odm:8.10.x.x_2.x.x-amd64 + deployment #1 running for 34 minutes - 1 pod + + 1 info identified, use 'oc status --suggest' to see details. + ``` + +3. You can now expose the service to your users. You can use odmAdmin/odmAdmin for the user/password. + +## To uninstall the release + +To uninstall and delete the release from the Kubernetes CLI, use the following command: + +```console +$ oc delete -f odm-eval.yaml +``` diff --git a/ODM/platform/README_Minikube.md b/ODM/platform/README_Minikube.md new file mode 100644 index 00000000..fbfdd91b --- /dev/null +++ b/ODM/platform/README_Minikube.md @@ -0,0 +1,103 @@ +# Install IBM Operational Decision Manager on Minikube + +Before you install make sure that you have prepared your environment. For more information, see [Preparing to install ODM for production](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_preparing_odmk8s.html) as well as [Customizing ODM for production](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_install_odm.html). + +## Step 1: Install Minikube and Tiller + +1. Refer to the Kubernetes [documentation](https://kubernetes.io/docs/setup/minikube/#installation) to install Minikube. + +2. Start Minikube with the minimum required CPU and memory. + + ```console + $ minikube start --cpus 6 --memory 4096 + ``` + + > **Note**: If you started a Minikube cluster without these parameters, stop and delete it before restarting it again. + ```console + $ minikube stop + $ minikube delete + $ minikube start --cpus 6 --memory 4096 + ``` + +3. Verify your installation. + + ```console + $ kubectl get nodes + ``` + +4. Install [Helm 2.9.1](/~https://github.com/helm/helm/releases/tag/v2.9.1). + + > **Note**: Version 2.9.1 is required to use Minikube. + +5. Install Tiller in the Minikube cluster. + + ```console + $ helm init + ``` + +## Step 2: Push and tag the downloaded images in Minikube + +1. Follow the instructions to download the IBM Operational Decision Manager images and the loadimages.sh file in [Download PPA and load images](../../README.md#step-2-download-a-product-package-from-ppa-and-load-the-images). + + > **Note**: **DO NOT** run the loadimages.sh script at this point. + +2. Configure your shell to use the Minikube built-in [Docker daemon](https://kubernetes.io/docs/setup/minikube/#use-local-images-by-re-using-the-docker-daemon). + + ```console + $ eval $(minikube docker-env) + ``` + +3. Use the following command to load and tag the images in the Minikube local repository. + + ```console + $ scripts/loadimages.sh -l -p .tgz -r ibmcom + ``` + +## Step 3: Install a Kubernetes release of Operational Decision Manager + +1. Download the `ibm-odm-prod-.tgz` file. The archive contains the `ODM for production (ibm-odm-prod)` Helm chart. + - [ibm-odm-prod-2.2.0.tgz](../helm-chartsibm-odm-prod-2.2.0.tgz) for Operational Decision Manager 8.10.2 + +2. Install a release with the default configuration and a name of `my-odm-prod-release` by using the following command: + + ```console + $ helm install --name my-odm-prod-release \ + --set internalDatabase.persistence.useDynamicProvisioning=true \ + /path/to/ibm-odm-prod-.tgz + ``` + + > **Note**: You can also install on Minikube by using Kubernetes YAML. Refer to the [k8s-yaml/README.md](../k8s-yaml/README.md). + +3. The package is deployed asynchronously in a matter of minutes, and is composed of several services. + + > **Note**: You can check the status of the pods that you created: + ```console + $ kubectl get pods + NAME READY STATUS RESTARTS AGE + my-odm-prod-release-dbserver-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisioncenter-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionrunner-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionserverconsole-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionserverruntime-*** 1/1 Running 0 44m + ``` + +The release is an instance of the `ibm-odm-prod` chart. All of the components are now running in a Kubernetes cluster. + +> **Tip**: List all existing releases with the `helm list` command. + + +## Step 4: Verify that the deployment is running + +When all of the pods are *Running*, you can access the application with the URLs returned by the `minikube service` command. + +```console +$ minikube service list +``` + +## To customize a release + +Refer to the customizing instructions in [helm-charts/README.md](../helm-charts/README.md#customize-a-kubernetes-release-of-operational-decision-manager). + +## To uninstall a release + +Refer to the uninstalling instructions in [helm-charts/README.md](../helm-charts/README.md#uninstall-a-kubernetes-release-of-operational-decision-manager). diff --git a/ODM/platform/README_Openshift.md b/ODM/platform/README_Openshift.md new file mode 100644 index 00000000..955881f0 --- /dev/null +++ b/ODM/platform/README_Openshift.md @@ -0,0 +1,165 @@ +# Install IBM Operational Decision Manager on Red Hat OpenShift + +Before you install make sure that you have prepared your environment. For more information, see [Preparing to install ODM for production](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_preparing_odmk8s.html) as well as [Customizing ODM for production](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_install_odm.html). + +## Step 1: Prepare your environment + +As an administrator of the cluster you must be able to interact with your environment. Run the following commands to connect and check your access. + +1. Login to the cluster: + ```console + $ oc login https://:8443 -u + ``` +2. Create a project where you want to install Operational Decision Manager. + ```console + $ oc new-project odmproject + $ oc project odmproject + ``` +3. If you use the internal database you must add privileges to the project. + ```console + $ oc adm policy add-scc-to-user privileged -z default + ``` + +4. Generate a permanent token and copy it to the clipboard. + ```console + $ oc whoami -t  + ``` +5. Login to the docker registry with the token and check you can run docker. + ```console + $ docker login docker-registry.default.svc:5000 -u -p + $ docker ps + ``` + > **Note**: You can connect to a node in the cluster to resolve the docker-registry.default.svc parameter. + +6. Run a kubectl command to make sure you have access to Kubernetes. + ```console + $ kubectl cluster-info + ``` + + +## Step 2: Push and tag the downloaded images in the OpenShift registry + +1. If you have not already done so, follow the instructions to download the IBM Operational Decision Manager images and the loadimages.sh file in [Download PPA and load images](../../README.md#step-2-download-a-product-package-from-ppa-and-load-the-images). + + > **Note**: Change the permissions so that you can execute the script. + ```console + $ chmod +x loadimages.sh + ``` + +2. Use the loadimages.sh script to push the docker images into your registry. + ```console + $ ./loadimages.sh -p .tgz -r docker-registry.default.svc:5000/odmproject + ``` + + > **Note**: The project must have pull request privileges to the registry where the Operational Decision Manager images are loaded. The project must also have pull request privileges to push the images into another namespace/project. + +## Step 3: Install a Kubernetes release of Operational Decision Manager + +You can do this step without administrator rights. + +1. Download the [ibm-odm-prod-2.2.0.tgz](../helm-charts/ibm-odm-prod-2.2.0.tgz) file. The archive contains the `ODM for production (ibm-odm-prod)` Helm chart. + +2. Install a release with the default configuration and a name of `my-odm-prod-release`. You have 2 options to install Operation Decision Manager on Openshift depending on your security policy. + + * Option 1: Use the helm CLI to generate a template and then the OpenShift CLI to create a release from the YAML file. + + ```console + $ helm template \ + --name my-odm-prod-release \ + /path/to/ibm-odm-prod-.tgz \ + --set image.repository=docker-registry.default.svc:5000/odmproject/ > odm-k8s.yaml + $ oc create --save-config=true -f odm-k8s.yaml + ``` + + > **Note**: For more information, see [k8s-yaml/README.md](../k8s-yaml/README.md). + + * Option 2: If you installed Tiller on your cluster, you can use a single command from the helm CLI. + + ```console + $ helm install \ + --name my-odm-prod-release \ + /path/to/ibm-odm-prod-.tgz \ + --set image.repository=docker-registry.default.svc:5000/odmproject/ + ``` + + > **Note**: For more information, see [helm-charts/README.md](../helm-charts/README.md). Go here to [initialize Helm and install Tiller](https://helm.sh/docs/using_helm/#initialize-helm-and-install-tiller). + +3. The package is deployed asynchronously in a matter of minutes, and is composed of several services. + + > **Note**: You can check the status of the pods that you created: + ```console + $ kubectl get pods + NAME READY STATUS RESTARTS AGE + my-odm-prod-release-dbserver-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisioncenter-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionrunner-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionserverconsole-*** 1/1 Running 0 44m + my-odm-prod-release-odm-decisionserverruntime-*** 1/1 Running 0 44m + ``` + + The release is an instance of the `ibm-odm-prod` chart. All of the components are now running in a Kubernetes cluster. + +## Step 4: Verify that the deployment is running + +When all of the pods are *Running*, you can access the status of your application with the following command. +```console +$ oc status +In project odm on server https://localhost:8443 + +svc/odm-release-dbserver - xxx.xx.xx.xx:5432 + deployment/odm-release-dbserver deploys docker-registry.default.svc:5000/odmproject/dbserver:8.10.x-amd64 + deployment #1 running for 27 minutes - 1 pod + +svc/odm-release-odm-decisioncenter (all nodes):31070 -> 9453 + deployment/odm-release-odm-decisioncenter deploys docker-registry.default.svc:5000/odmproject/odm-decisioncenter:8.10.x-amd64 + deployment #1 running for 27 minutes - 1 pod + +svc/odm-release-odm-decisionrunner (all nodes):31705 -> 9443 + deployment/odm-release-odm-decisionrunner deploys docker-registry.default.svc:5000/odmproject/odm-decisionrunner:8.10.x-amd64 + deployment #1 running for 27 minutes - 1 pod + +svc/odm-release-odm-decisionserverconsole-notif - xxx.xx.xx:1883 +http://odm-release-odm-decisionserverconsole-odm.xxx.xx.xx.nip.io to pod port decisionserverconsole-https (svc/odm-release-odm-decisionserverconsole) + deployment/odm-release-odm-decisionserverconsole deploys docker-registry.default.svc:5000/odmproject/odm-decisionserverconsole:8.10.x-amd64 + deployment #1 running for 27 minutes - 1 pod + +http://myserver to pod port decisionserverruntime-https (svc/odm-release-odm-decisionserverruntime) + deployment/odm-release-odm-decisionserverruntime deploys docker-registry.default.svc:5000/odmproject/odm-decisionserverruntime:8.10.x-amd64 + deployment #1 running for 27 minutes - 1 pod + +1 info identified, use 'oc status --suggest' to see details. +``` + +You can now expose the service to your users. + +> **Tip**: Refer to [Verify a deployment](../README.md#step-1-verify-a-deployment) post installation step to get the URLs of the services. + +## To customize a release + +Refer to the customizing instructions in [k8s-yaml/README.md](../k8s-yaml/README.md#customize-a-kubernetes-release-of-operational-decision-manager). + +## To uninstall the Helm chart + + * Option 1: To uninstall and delete a release named `my-odm-prod-release` from the OpenShift CLI, use the following command: + + ```console + $ oc delete -f odm-k8s.yaml + ``` + + The `odm-k8s.yaml` is the file you created in step 3: [Install an Operational Decision Manager release](README_Openshift.md#step-3-install-a-kubernetes-release-of-operational-decision-manager). + + * Option 2: To uninstall and delete a release named `my-odm-prod-release` with Helm Tiller, use the following command: + + ```console + $ helm delete my-odm-prod-release --purge + ``` + + The command removes all the Kubernetes components associated with the chart, except Persistent Volume Claims (PVCs). This is the default behavior of Kubernetes, and ensures that valuable data is not deleted. + + * Optional: To delete the data, you can delete the PVC by using the following command: + + ```console + $ kubectl delete pvc -odm-pvclaim -n + ``` + + diff --git a/README.md b/README.md index a6218cbe..2f8ebb3b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,74 @@ + # IBM Cloud Pak for Automation 19.0.1 on Certified Kubernetes -TODO + +## Introduction + +For information about IBM Cloud Pak for Automation 19.0.x, see [IBM Knowledge Center](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/welcome/kc_welcome_dba_distrib.html). + +The installation of IBM Cloud Pak for Automation products uses Helm charts and Tiller or Kubernetes YAML files. The charts are packages of preconfigured Kubernetes resources that bootstrap a deployment on a Kubernetes cluster. You customize the deployment by changing and adding configuration parameters. + +The repository includes one folder for each product. + +| Folder | Product name | Version in 19.0.1 | +|------------ |---------------------------------- |------------- | +| BACA | IBM Business Automation Content Analyzer | 19.0.1 | +| BAI | IBM Business Automation Insights | 19.0.1 | +| CONTENT | IBM FileNet Content Manager | 5.5.3 | +| NAVIGATOR | IBM Digital Business Navigator | 3.0.6 | +| ODM | IBM Operational Decision Manager | 8.10.2 | + +Each product folder contains subfolders, which contain instructions and resources to install the Helm charts. The following diagram shows the structure of the repository. + + + +Installation is supported only on a Certified Kubernetes platform. There are dozens of Certified Kubernetes offerings and more coming to market each year. Cloud Native Computing Foundation (CNCF) has created a Certified Kubernetes Conformance Program, in which most of the leading vendors and cloud computing providers have Certified Kubernetes offerings. Use the following link to determine whether the vendor and/or platform is certified by CNCF https://landscape.cncf.io/category=platform. For more information about nonqualified platforms, see the [support statement for Certified Kubernetes](http://www.ibm.com/support/docview.wss?uid=ibm10876926). + +> **Note**: Do not use these instructions to install the products on IBM Cloud Private. For more information, see [Installing products on IBM Cloud Private](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/topics/tsk_install_icp.html). + +## Legal Notice + +Legal notice for users of this repository [legal-notice.md](legal-notice.md). + +## Step 1: Prepare your environment + +Before you install any of the containerized products: + +1. Go to the prerequisites page in the [IBM Cloud Pak for Automation 19.0.x](https://www.ibm.com/support/knowledgecenter/SSYHZ8_19.0.x/com.ibm.dba.install/k8s_topics/tsk_prepare_env_k8s.html) Knowledge Center. +2. Follow the instructions on preparing your environment for the products as explained in the Knowledge Center. + + How much preparation you need to do depends on your environment and how familiar you are with your environment. + +## Step 2: Download a product package from PPA and load the images + +[IBM Passport Advantage (PPA)](https://www-01.ibm.com/software/passportadvantage/pao_customer.html) provides a separate archive (.tgz) for each product. To view the list of Passport Advantage eAssembly installation images, refer to the [19.0.1 download document](http://www.ibm.com/support/docview.wss?uid=ibm10878709). + +1. Download one or more PPA packages to a server that is connected to your Docker registry. +2. Download the [`loadimages.sh`](scripts/loadimages.sh) script from GitHub. +3. Login to the specified Docker registry with the docker login command. + This command depends on the environment that you have. + > **Note**: If your platform is OpenShift, do NOT run the .sh script to load the images without preparing your environment beforehand. Select the product that you want to install in Step 3 and use the instructions in the product folders. You can then load the images to the Docker registry with the right privileges. +4. Run the `loadimages.sh` script to load the images into your Docker registry. Specify the two mandatory parameters in the command line. + + > **Note**: The *docker-registry* value depends on the platform that you are using. + + ``` + -p PPA archive files location or archive filename + -r Target Docker registry and namespace + -l Optional: Target a local registry + ``` + + > The following example shows the input values in the command line. + + ``` + # scripts/loadimages.sh -p /Downloads/PPA/ImageArchive.tgz -r /demo-project + ``` + +## Step 3: Go to a product folder and follow the instructions + +You can install the products on a certified Kubernetes platform with the Helm command line interface (CLI) or the kubectl command line interface (CLI). Use the following links to go to the instructions for the product that you want to install. + +- [Install IBM Business Automation Content Analyzer](BACA/README.md) +- [Install IBM Business Automation Insights](BAI/README.md) +- [Install IBM FileNet Content Manager](CONTENT/README.md) +- [Install IBM Digital Business Navigator](NAVIGATOR/README.md) +- [Install IBM Operational Decision Manager](ODM/README.md) diff --git a/images/bai-architecture.jpg b/images/bai-architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d009081022b73516077e18974df7f6edccc2078b GIT binary patch literal 182269 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�LK+{Hd5zCJxcMlD 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

q*O++u5(wU}z`=PJ< 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 Ac>n+a literal 0 HcmV?d00001 diff --git a/legal-notice.md b/legal-notice.md new file mode 100644 index 00000000..d8e67a52 --- /dev/null +++ b/legal-notice.md @@ -0,0 +1,112 @@ +IBM + +This information was developed for products and services that are offered in the USA. + +IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. +IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to: + +IBM Director of Licensing +IBM Corporation +North Castle Drive, MD-NC119 +Armonk, NY 10504-1785 +United States of America +For license inquiries regarding double-byte character set (DBCS) information, contact the IBM Intellectual Property Department in your country or send inquiries, in writing, to: + +Intellectual Property Licensing +Legal and Intellectual Property Law +IBM Japan Ltd. +19-21, Nihonbashi-Hakozakicho, Chuo-ku +Tokyo 103-8510, Japan + +The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. + +This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. + +Any references in this information to non-IBM websites are provided for convenience only and do not in any manner serve as an endorsement of those websites. The materials at those websites are not part of the materials for this IBM product and use of those websites is at your own risk. + +IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. +Licensees of this program who wish to have information about it for the purpose of enabling: (i) the exchange of information between independently created programs and other programs (including this one) and (ii) the mutual use of the information which has been exchanged, should contact: + +IBM Director of Licensing +IBM Corporation +North Castle Drive, MD-NC119 +Armonk, NY 10504-1785 +United States of America + +Such information may be available, subject to appropriate terms and conditions, including in some cases, payment of a fee. + +The licensed program described in this document and all licensed material available for it are provided by IBM under terms of the IBM Customer Agreement, IBM International Program License Agreement or any equivalent agreement between us. + +The performance data discussed herein is presented as derived under specific operating conditions. Actual results may vary. + +The client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions. + +The performance data and client examples cited are presented for illustrative purposes only. Actual performance results may vary depending on specific configurations and operating conditions. + +Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. + +All statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only. + +This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. + +COPYRIGHT LICENSE: + +This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. The sample programs are provided "AS IS", without warranty of any kind. IBM shall not be liable for any damages arising out of your use of the sample programs. + +Each copy or any portion of these sample programs or any derivative work, must include a copyright notice as follows: + +© Copyright IBM Corp. 2016 +Portions of this code are derived from IBM Corp. Sample Programs. +Additional license terms + +The Oracle Outside In Technology included herein is subject to a restricted use license and can only be used in conjunction with this application. +Trademarks + +IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the web at www.ibm.com/legal/copytrade.shtml. + +Adobe, the Adobe logo, PostScript, and the PostScript logo are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States, and/or other countries. + +Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. + +Microsoft, Windows, Windows NT, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. + +Java™ and all Java-based trademarks and logos are trademarks or registered trademarks of Oracle and/or its affiliates. + +UNIX is a registered trademark of The Open Group in the United States and other countries. + +Other company, product, and service names may be trademarks or service marks of others. +Terms and conditions for product documentation + +Permissions for the use of these publications are granted subject to the following terms and conditions. +Applicability + +These terms and conditions are in addition to any terms of use for the IBM website. +Personal use + +You may reproduce these publications for your personal, noncommercial use provided that all proprietary notices are preserved. You may not distribute, display or make derivative work of these publications, or any portion thereof, without the express consent of IBM. +Commercial use + +You may reproduce, distribute and display these publications solely within your enterprise provided that all proprietary notices are preserved. You may not make derivative works of these publications, or reproduce, distribute or display these publications or any portion thereof outside your enterprise, without the express consent of IBM. +Rights + +Except as expressly granted in this permission, no other permissions, licenses or rights are granted, either express or implied, to the publications or any information, data, software or other intellectual property contained therein. + +IBM reserves the right to withdraw the permissions granted herein whenever, in its discretion, the use of the publications is detrimental to its interest or, as determined by IBM, the above instructions are not being properly followed. + +You may not download, export or re-export this information except in full compliance with all applicable laws and regulations, including all United States export laws and regulations. + +IBM MAKES NO GUARANTEE ABOUT THE CONTENT OF THESE PUBLICATIONS. THE PUBLICATIONS ARE PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. +IBM Online Privacy Statement + +IBM Software products, including software as a service solutions, (“Software Offerings”) may use cookies or other technologies to collect product usage information, to help improve the end user experience, to tailor interactions with the end user or for other purposes. In many cases no personally identifiable information is collected by the Software Offerings. Some of our Software Offerings can help enable you to collect personally identifiable information. If this Software Offering uses cookies to collect personally identifiable information, specific information about this offering’s use of cookies is set forth below. + +This Software Offering does not use cookies or other technologies to collect personally identifiable information. + +If the configurations deployed for this Software Offering provide you as customer the ability to collect personally identifiable information from end users via cookies and other technologies, you should seek your own legal advice about any laws applicable to such data collection, including any requirements for notice and consent. + +For more information about the use of various technologies, including cookies, for these purposes, see IBM’s Privacy Policy at www.ibm.com/privacy and IBM’s Online Privacy Statement at www.ibm.com/privacy/details the section entitled “Cookies, Web Beacons and Other Technologies” and the “IBM Software Products and Software-as-a-Service Privacy Statement” at www.ibm.com/software/info/product-privacy. + +Last updated: June 2017 +legal_notices.htm + +© Copyright IBM Corporation 2017. \ No newline at end of file diff --git a/scripts/loadimages.sh b/scripts/loadimages.sh new file mode 100755 index 00000000..6bec2e46 --- /dev/null +++ b/scripts/loadimages.sh @@ -0,0 +1,149 @@ +#!/bin/bash + +echo -e "\033[1;31mImportant! Please ensure that you had login to the target Docker registry in advance. \033[0m" +echo -e "\033[1;31mImportant! The load image sample script is for x86_64, amd64, or i386 platforms only.\n \033[0m" + +ARCH=$(arch) +case ${ARCH} in + amd64|x86_64|i386) + echo "Supported arch: ${ARCH}" + ;; + *) + echo "Unsupported arch: ${ARCH}" + exit -1 + ;; +esac + + +function showHelp { + echo -e "\nUsage: loadimages.sh -p path/to/ppa_archive.tgz -r docker_registry [-l]\n" + echo "Options:" + echo " -h Display help" + echo " -p PPA archive files location or archive filename" + echo " For example: /Downloads/PPA or /Downloads/PPA/ImageArchive.tgz or /Downloads/PPA/ImageArchive.tar.gz" + echo " -r Target Docker registry and namespace" + echo " For example: mycorp-docker-local.mycorp.com/image-space" + echo " -l Optional: Target a local registry" +} + +# initialize variables +unset ppa_path +unset target_docker_repo +local_registry=false + +OPTIND=1 # Reset in case getopts has been used previously in the shell. + +if [[ $1 == "" ]] +then + showHelp + exit -1 +else + while getopts ":hlp:r:" opt; do + case "$opt" in + h|\?) + showHelp + exit 0 + ;; + p) ppa_path=${OPTARG} + ;; + r) target_docker_repo=${OPTARG} + ;; + l) local_registry=true + ;; + :) echo "Invalid option: -$OPTARG requires an argument" + showHelp + exit -1 + ;; + esac + done + +fi + +shift $((OPTIND-1)) + +echo "ppa_path: $ppa_path" + +# check required parameters +if [ -z "$ppa_path" ] +then + echo "Need to input PPA archive files location or name value." + showHelp + exit -1 +elif `test -f $ppa_path` || `test -d $ppa_path` +then + arr_ppa_archive=( $(find ${ppa_path} -name "*.tgz" -o -name "*.tar.gz") ) + echo "arr_ppa_archive: $arr_ppa_archive" +else + echo "Input PPA archive files location or name invalid! ($ppa_path) Exit and try again." + showHelp + exit -1 +fi + +echo "target_docker_repo: $target_docker_repo" +if [ -z "$target_docker_repo" ] +then + echo "Need to input target Docker registry and namespace value." + showHelp + exit -1 +fi + +# reset counter +_ind=0 + +for ppa_file in ${arr_ppa_archive[@]} +do + echo -e "\nCheck image archives in the PPA package: "$ppa_file + # check manifest.json + tar -zxvf $ppa_file manifest.json + # get image archive files list in current PPA + arr_img_gz=( $(grep archive manifest.json | awk '{print $2}' | sed 's/\"//g') ) + echo "Image archives list in ${ppa_file}:" + echo ${arr_img_gz[@]} + echo "Image archives in "$ppa_file" count: "${#arr_img_gz[@]} + + echo -e "\nLoad docker images from image archives into local registry." + if [ ${#arr_img_gz[@]} -gt 0 ] + then + for img_gz_file in ${arr_img_gz[@]} + do + if [[ $img_gz_file == images/* ]] + then + echo "Loading image file: "$img_gz_file + # echo "tar -zxf ${ppa_file} ${img_gz_file} -O | docker load -q" + load_cmd_output=`tar -zOxf ${ppa_file} ${img_gz_file} | docker load -q` + echo $load_cmd_output + arr_img_load[$_ind]=${load_cmd_output#*Loaded image: } + + docker tag ${arr_img_load[$_ind]} ${target_docker_repo}/${arr_img_load[$_ind]} + if ! $local_registry + then + docker push ${target_docker_repo}/${arr_img_load[$_ind]} | grep -e repository -e digest -e unauthorized + docker rmi -f ${arr_img_load[$_ind]} ${target_docker_repo}/${arr_img_load[$_ind]} | grep -e unauthorized + echo "Pushed image: "${target_docker_repo}/${arr_img_load[$_ind]} + fi + let _ind++ + fi + done + echo "PPA package "$ppa_file" was processed completely." + else + echo "No image archive found in "$ppa_file + continue + fi + +done + +# summary list +if $local_registry +then + status="load" +else + status="push" +fi +echo -e "\nDocker images ${status} to ${target_docker_repo} completed, and check the following images in the Docker registry:" +for img_load in ${arr_img_load[@]} +do + echo " - ${target_docker_repo}/${img_load}" +done + +# +rm -rf manifest.json