From 5a96855385ed2fe197daea2d3f128d7fbd534998 Mon Sep 17 00:00:00 2001 From: arvindpatel Date: Thu, 5 Nov 2020 03:50:27 +0530 Subject: [PATCH] Edge gallery roles added Signed-off-by: arvindpatel Change-Id: I039d4394b609c7b336d7156b9014b720259e80b4 --- ocd/infra/playbooks/config.yml | 112 +++++- .../playbooks/roles/eg_appstore/tasks/install.yml | 6 +- .../playbooks/roles/eg_certs/tasks/install.yml | 73 +--- ocd/infra/playbooks/roles/eg_certs/tasks/main.yml | 5 +- .../playbooks/roles/eg_certs/tasks/uninstall.yml | 22 ++ .../playbooks/roles/eg_developer/tasks/install.yml | 4 +- .../helm/helm-charts/edgegallery/appstore-0.9.tgz | Bin 0 -> 7213 bytes .../helm/helm-charts/edgegallery/developer-0.9.tgz | Bin 0 -> 9643 bytes .../helm/helm-charts/edgegallery/mecm-fe-0.9.tgz | Bin 0 -> 5905 bytes .../helm/helm-charts/edgegallery/mecm-meo-0.9.tgz | Bin 0 -> 8468 bytes .../helm/helm-charts/edgegallery/mecm-mepm-0.9.tgz | Bin 0 -> 8135 bytes .../helm/helm-charts/edgegallery/mep-0.9.tgz | Bin 0 -> 10948 bytes .../helm-charts/edgegallery/servicecenter-0.9.tgz | Bin 0 -> 5615 bytes .../helm/helm-charts/edgegallery/usermgmt-0.9.tgz | Bin 0 -> 7743 bytes .../helm/helm-charts/stable/grafana-5.5.5.tgz | Bin 0 -> 21051 bytes .../stable/nfs-client-provisioner-1.2.8.tgz | Bin 0 -> 5049 bytes .../helm-charts/stable/nginx-ingress-1.41.2.tgz | Bin 0 -> 24348 bytes .../helm/helm-charts/stable/prometheus-9.3.1.tgz | Bin 0 -> 24108 bytes .../playbooks/roles/eg_helm-repo/tasks/install.yml | 22 +- .../playbooks/roles/eg_helm-repo/tasks/main.yml | 3 +- .../roles/eg_helm-repo/tasks/uninstall.yml | 22 ++ .../playbooks/roles/eg_mecm-fe/tasks/install.yml | 4 +- .../files/deploy/conf/keys/postgres_init.sql | 29 ++ .../playbooks/roles/eg_mecm-meo/tasks/install.yml | 29 +- .../playbooks/roles/eg_mecm-meo/tasks/main.yml | 1 + .../files/deploy/conf/keys/postgres_init.sql | 20 + .../conf/manifest/mepm/mepm-service-account.yaml | 30 ++ .../playbooks/roles/eg_mecm-mepm/tasks/install.yml | 33 +- .../playbooks/roles/eg_mecm-mepm/tasks/main.yml | 2 - .../roles/eg_mecm-mepm/tasks/uninstall.yml | 6 +- .../files/deploy/conf/edge/metallb/config-map.yaml | 27 ++ .../files/deploy/conf/edge/metallb/metallb.yaml | 406 +++++++++++++++++++++ .../files/deploy/conf/edge/metallb/namespace.yaml | 21 ++ .../edge/network-isolation/eg-sp-controller.yaml | 28 ++ .../conf/edge/network-isolation/eg-sp-rbac.yaml | 49 +++ .../deploy/conf/edge/network-isolation/multus.yaml | 358 ++++++++++++++++++ ocd/infra/playbooks/roles/eg_mep/tasks/install.yml | 112 +++++- .../playbooks/roles/eg_mep/tasks/uninstall.yml | 8 +- .../roles/eg_pre_require/tasks/install.yml | 17 +- .../playbooks/roles/eg_secret/tasks/install.yml | 27 ++ ocd/infra/playbooks/roles/eg_secret/tasks/main.yml | 26 ++ .../playbooks/roles/eg_secret/tasks/uninstall.yml | 20 + .../roles/eg_set-helm-repo/tasks/install.yml | 13 +- .../playbooks/roles/eg_user-mgmt/tasks/install.yml | 29 +- 44 files changed, 1384 insertions(+), 180 deletions(-) create mode 100644 ocd/infra/playbooks/roles/eg_certs/tasks/uninstall.yml create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/appstore-0.9.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/developer-0.9.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/mecm-fe-0.9.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/mecm-meo-0.9.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/mecm-mepm-0.9.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/mep-0.9.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/servicecenter-0.9.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/usermgmt-0.9.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/grafana-5.5.5.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/nfs-client-provisioner-1.2.8.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/nginx-ingress-1.41.2.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/prometheus-9.3.1.tgz create mode 100644 ocd/infra/playbooks/roles/eg_helm-repo/tasks/uninstall.yml create mode 100644 ocd/infra/playbooks/roles/eg_mecm-meo/files/deploy/conf/keys/postgres_init.sql create mode 100644 ocd/infra/playbooks/roles/eg_mecm-mepm/files/deploy/conf/keys/postgres_init.sql create mode 100644 ocd/infra/playbooks/roles/eg_mecm-mepm/files/deploy/conf/manifest/mepm/mepm-service-account.yaml create mode 100644 ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/config-map.yaml create mode 100644 ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/metallb.yaml create mode 100644 ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/namespace.yaml create mode 100644 ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/eg-sp-controller.yaml create mode 100644 ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/eg-sp-rbac.yaml create mode 100644 ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/multus.yaml create mode 100644 ocd/infra/playbooks/roles/eg_secret/tasks/install.yml create mode 100644 ocd/infra/playbooks/roles/eg_secret/tasks/main.yml create mode 100644 ocd/infra/playbooks/roles/eg_secret/tasks/uninstall.yml diff --git a/ocd/infra/playbooks/config.yml b/ocd/infra/playbooks/config.yml index 020d1d4..a91c99e 100644 --- a/ocd/infra/playbooks/config.yml +++ b/ocd/infra/playbooks/config.yml @@ -13,29 +13,117 @@ # limitations under the License. --- -firstvar: - name: swrusr: name: swrpass: name: -sUserName: +cert_validity_in_days: + name: 365 +mecm_meo_db_password: + name: +mecm_mepm_db_password: + name: +dockerusr: + name: +dockerpass: + name: +secret_keystorepass: + name: +secret_cert_pass: + name: +private_repo_ip: + name: +mep_pg_admin_pwd: + name: +mep_kong_pg_pwd: + name: +mep_cert_pwd: + name: +system_interfaceeth1: + name: +system_interfaceeth2: + name: +mep_ip_addr_macvlan_eg_mep1: + name: +mep_ip_addr_mm5_eg_mm5: + name: +mep_image_tag: + name: +mep_mepauth_image_tag: + name: +mep_dns_image_tag: + name: +generate_cert_pass: + name: +mecm_mepm_postgresPassword: + name: +mecm_mepm_postgresLcmCntlrPassword: + name: +mecm_mepm_postgresk8sPluginPassword: + name: +mecm_mepm_lcmcontroller_image_tag: + name: +mecm_mepm_k8splugin_image_tag: + name: +mecm_mepm_postgres_image_tag: + name: +user_mgmt_encryptpass: + name: +user_mgmt_oauth_appstore_client_ip: + name: +user_mgmt_oauth_developer_client_ip: + name: +user_mgmt_oauth_mecm_client_ip: + name: +user_mgmt_image_tag: + name: +mecm_meo_keystorePassword: + name: +mecm_meo_truststorePassword: + name: +mecm_meo_postgresPassword: + name: +mecm_meo_postgresApmPassword: + name: +mecm_meo_postgresAppoPassword: + name: +mecm_meo_postgresInventoryPassword: + name: +mecm_meo_edgeRepoUserName: + name: +mecm_meo_edgeRepoPassword: + name: +mecm_meo_image_tag: + name: +mecm_meo_appo_image_tag: + name: +mecm_meo_apm_image_tag: name: -sPass: +mecm_meo_postgres_tag: name: -authServer: +mecm_fe_centernodeip: name: -authServerMecm: +mecm_fe_image_tag: name: -adminpwd: +appstore_centernodeip: name: -kongpgpwd: +appstore_fe_image_tag: name: -interface1: +appstore_be_image_tag: name: -interface2: +developer_centernodeip: name: -ipaddregmep1: +developer_fe_image_tag: name: -ipaddregmep5: +developer_be_image_tag: name: +developer_centernode_port: + name: 30067 +mecm_fe_centernodeport: + name: 30067 +user_mgmt_oauth_appstore_client_port: + name: 30091 +user_mgmt_oauth_developer_client_port: + name: 30092 +user_mgmt_oauth_mecm_client_port: + name: 30093 diff --git a/ocd/infra/playbooks/roles/eg_appstore/tasks/install.yml b/ocd/infra/playbooks/roles/eg_appstore/tasks/install.yml index 57c21af..3d981fa 100644 --- a/ocd/infra/playbooks/roles/eg_appstore/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_appstore/tasks/install.yml @@ -18,11 +18,9 @@ - name: Import vars include_vars: - # yamllint disable rule:line-length file: ../../../config.yml - # yamllint disable rule:line-length name: vardata -- name: Pull helm chart appstore +- name: Helm install appstore # yamllint disable rule:line-length - command: helm install -- wait appstore-edgegallery edgegallery/appstore --set global.oauth2.authServerAddress=https://{{vardata.centernodeip.name}}:30067 --set images.appstoreFe.tag={{vardata.appstorefeimagetag.name}} --set images.appstoreBe.tag={{vardata.appstorebeimagetag.name}} --set global.ssl.enabled=true --set global.ssl.secretName=edgegallery-ssl-secret + command: helm install --wait appstore-edgegallery edgegallery/appstore --set global.oauth2.authServerAddress=https://{{vardata.appstore_centernodeip.name}}:30067 --set images.appstoreFe.tag={{vardata.appstore_fe_image_tag.name}} --set images.appstoreBe.tag={{vardata.appstore_be_image_tag.name}} --set global.ssl.enabled=true --set global.ssl.secretName=edgegallery-ssl-secret diff --git a/ocd/infra/playbooks/roles/eg_certs/tasks/install.yml b/ocd/infra/playbooks/roles/eg_certs/tasks/install.yml index 3dc7f8f..1e15a02 100644 --- a/ocd/infra/playbooks/roles/eg_certs/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_certs/tasks/install.yml @@ -16,73 +16,22 @@ --- -- name: Remove old dir - command: rm -rf /tmp/.mep_tmp_cer - args: - chdir: /tmp/ +- name: Import config file + include_vars: + file: ../../../config.yml + name: vardata -- name: Make dir - command: mkdir -p /tmp/.mep_tmp_cer +- name: Remove old ssl key dir + command: rm -rf /tmp/ssl-eg-keys-certs args: chdir: /tmp/ -- name: Openssl genrsa - command: openssl genrsa -out ca.key 2048 - args: - chdir: /tmp/.mep_tmp_cer/ - -- name: Opnessl req - # yamllint disable rule:line-length - command: openssl req -new -key ca.key -subj /C=CN/ST=Peking/L=Beijing/O=edgegallery/CN=edgegallery -out ca.csr - # yamllint disable rule:line-length - args: - chdir: /tmp/.mep_tmp_cer/ - -- name: Sing key with ca key and ca crt - command: openssl x509 -req -days 365 -in ca.csr -extensions v3_ca -signkey ca.key -out ca.crt - args: - chdir: /tmp/.mep_tmp_cer/ - -- name: Openssl genrsa - command: openssl genrsa -out server_tls.key 2048 - args: - chdir: /tmp/.mep_tmp_cer/ - -- name: Openssl rsa mep tls - command: openssl rsa -in server_tls.key -aes256 -passout pass:{{ vardata.certspass.name}} -out server_encryptedtls.key - args: - chdir: /tmp/.mep_tmp_cer/ - -- name: Openssl req new key mepserver tls key - # yamllint disable rule:line-length - command: openssl req -new -key server_tls.key -subj /C=CN/ST=Beijing/L=Beijing/O=edgegallery/CN=edgegallery -out server_tls.csr - # yamllint disable rule:line-length +- name: Make new ssl key dir + command: mkdir -p /tmp/ssl-eg-keys-certs args: - chdir: /tmp/.mep_tmp_cer/ + chdir: /tmp/ -- name: Openssl mepserver tls csr +- name: generate cert # yamllint disable rule:line-length - command: openssl x509 -req -in server_tls.csr -extensions v3_req -CA ca.crt -CAkey ca.key -CAcreateserial -out server_tls.crt + command: docker run -e CERT_VALIDITY_IN_DAYS={{ vardata.cert_validity_in_days.name}} -v /tmp/ssl-eg-keys-certs:/certs swr.ap-southeast-1.myhuaweicloud.com/edgegallery/deploy-tool:latest # yamllint disable rule:line-length - args: - chdir: /tmp/.mep_tmp_cer/ - -- name: Openssl genrsa out - command: openssl genrsa -out jwt_privatekey 2048 - args: - chdir: /tmp/.mep_tmp_cer/ - -- name: Openssl rsa jwt privatekey - command: openssl rsa -in jwt_privatekey -pubout -out jwt_publickey - args: - chdir: /tmp/.mep_tmp_cer/ - -- name: Openssl rsa jwt privatekey - command: openssl rsa -in jwt_privatekey -pubout -out jwt_publickey - args: - chdir: /tmp/.mep_tmp_cer/ - -- name: Openssl rsa in jwt - command: openssl rsa -in jwt_privatekey -aes256 -passout pass:{{ vardata.certspass.name}} -out jwt_encrypted_privatekey - args: - chdir: /tmp/.mep_tmp_cer/ diff --git a/ocd/infra/playbooks/roles/eg_certs/tasks/main.yml b/ocd/infra/playbooks/roles/eg_certs/tasks/main.yml index b635196..02f073c 100644 --- a/ocd/infra/playbooks/roles/eg_certs/tasks/main.yml +++ b/ocd/infra/playbooks/roles/eg_certs/tasks/main.yml @@ -15,8 +15,9 @@ # --- - # tasks file for eg_certs - include: "install.yml" - static: false when: operation == 'install' + +- include: "uninstall.yml" + when: operation == 'uninstall' diff --git a/ocd/infra/playbooks/roles/eg_certs/tasks/uninstall.yml b/ocd/infra/playbooks/roles/eg_certs/tasks/uninstall.yml new file mode 100644 index 0000000..c6d92b3 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_certs/tasks/uninstall.yml @@ -0,0 +1,22 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +--- + +- name: Remove generated certificates + command: rm -rf /tmp/ssl-eg-keys-certs + args: + chdir: /tmp/ diff --git a/ocd/infra/playbooks/roles/eg_developer/tasks/install.yml b/ocd/infra/playbooks/roles/eg_developer/tasks/install.yml index 7ddadd9..f72ab08 100644 --- a/ocd/infra/playbooks/roles/eg_developer/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_developer/tasks/install.yml @@ -18,11 +18,9 @@ - name: Import config file include_vars: - # yamllint disable rule:line-length file: ../../../config.yml - # yamllint disable rule:line-length name: vardata - name: Developer chart installing # yamllint disable rule:line-length - command: helm install --wait developer-edgegallery edgegallery/developer --set global.oauth2.authServerAddress=https://{{vardata.centernodeip.name}}:30067 --set images.developerFe.tag={{vardata.developerfeimagetag.name}} --set images.developerBe.tag={{vardata.developerbeimagetag.name}} --set images.toolChain.tag={{vardata.toolchainimagetag.name}} --set global.ssl.enabled=true --set global.ssl.secretName=edgegallery-ssl-secret + command: helm install --wait developer-edgegallery edgegallery/developer --set global.oauth2.authServerAddress=https://{{vardata.developer_centernodeip.name}}:{{ vardata.developer_centernode_port.name}} --set images.developerFe.tag={{vardata.developer_fe_image_tag.name}} --set images.developerBe.tag={{vardata.developer_be_image_tag.name}} --set global.ssl.enabled=true --set global.ssl.secretName=edgegallery-ssl-secret diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/appstore-0.9.tgz b/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/appstore-0.9.tgz new file mode 100644 index 0000000000000000000000000000000000000000..53de058bbdfa34df48eb0d87fd59198eac8adcca GIT binary patch literal 7213 zcmV+|9Ma<-iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PKD3bK5qTZ@*T5#aU-|YCj{(^4rs``$>`IMmLV6k>q4^I~@;1 zf)dss!2qBgZEo)0zJoUsq-e=@oTS-D{Loqw0UVsy-#G_lP?`$KI6mku5SOhbis?_! zeYM-|_OGX>`v2{AyZZn3;c5G)!{c91PEJn`PmkL_wGWTm$0t8Q``Ia}xiTRU|Ec}O zYgIS*gIp*jZ!s5yC1-GZ*g$ETf81%ee%on;SOlD;Qh(KfSD3~SC|!Ywad@50Fi)_= zqLH8&pMle-#%+0;@4e6MRe$C7e~V~_#aD3v8|?r1_~fK&|Htj4t^I$C>%}u(jTg{m z>5`NALc&q|s12_&bcYE{aj-}jWpjcBbXltjmojWMUce;@a3XLBSrTFna)F_fqF{mD zFHNxS2##89*i|>|*q?Uxes8>hCCea2OGuc6Okj`;A|N6Z1O6D`R02sLU~x(bN&*ab zL@x9)b`nLzdpiZ2NkkGr5U_L!Eb{LIBpWXP7E-2X2M2d|cP*spY%xARpynQNaM|zn z29w_YQLEi}0appdLIB4fGQx2Pv!(Kmlmuu-F;H{|j02i;j6;x25qigoB+0x9f<^KU zaol(TArX?3Std(da%2%vx`8Et64>cXpg-Axmz_y}(rmndcm3(B;nfu0b;je)VA}6Z zU^s^EaB$wA_J@NB3@@NFcn`1pgYza}A{Uqg{+Mz_KjT0Y|FD+W1mh9`DhR00BEfD?)NGf)y_oIZ{bJ{vNDc?H@5q)3Q6#>0|Y0fe*io#Cv3 zKc-CJI$cW{muK)FCnv}HW5Pl_(qA37+rJ&wD1{x+{_VG#0l%$C&)j}`a(wi?W9;Ag z%JHAXajJF0w;%uS{eUGAna3!7EJ)md|NeP=Qpx|0j!xRgTm1Jeu4fIkTl}}he}6;# zSE+H_kR&{VuJ&ecP}+#GL?Mz$g^hCjQeMvmm3?h9d){|JAd>#=jY?zWU^ssF|6Mm4pzr(95(6y-(Ho*(y+tYVHf?&-efwy z>Q1l5rSa3=e@-hidBY3?r~Nn8HPu&>Y3I$TcG%?Aa6CQlO}alrb*-O&uDQQ68Vx!t zYi!(<725s7j`C5J)h_$pje4W`v?{ajt;;-Ww3 zPv1XsPyNC9)nqz;>@Y=Cr(2ce#$lb&XjSDm54)Q5#f{w6H%|QOY09NWQVQKh5R78J_nq z-amF2z@$4I*9Mfq)tlb9-`zcG9CHrSnX#@9B0UK>(&^U6tg_~uP- zFkNN6z?>l3%x`>}fZWK(%Sc^McNX5(CM%=YhGTfLyu3A6Rb+#PsF8&O7KrEGR|JgL zNj(=_F8S}BU;W*$N96ye1p0&y(T4p0@YloRO8$TN>(RFV`%SKAO|`c9|2F^sQSyJ& z7uk^f8<*DrplF7vEi9unt-VVwQ+x))6n)5WL&+qWpI1r*S9vl0(&CcBJbeEAB>R7q|JQwq#|MB7{{QIs_@r9@ZU6e~*8hKt>sd{0>;Jd@ z|HtwF+M8_(0JlNK`-|IP^%k{zE1{2pom}ha^Upj_~=O-$jSQN zzV%1A9uxm1k~qq!cx)25KK>t`9vxNlzvK3{|NCvOXLYsP_`i++fAjdS9NIw<60J*{ zY|I4n<6JJx*=)$1?Ay67D(bKX`57*>pilj$Gh-sJjf(i=C*wQPNU{(`gktn!09JNg5Q6i}4$l zB~`h9`m_%u%4adhf?M8M-j+SaTb@wS7^~?9&kyuKSz%)nlXAb1 zYGhre3nv>^4Owu5`94l0U#5&C(jG`@g%4lYjA;0LdZ59Vhk|h#=KM^V$B#Kc^Js|} zlDiaeag3Cd|NKQPerdul`@t_w*vS$} zC%EfJCZ2n@K84wS@$3r_pI2Ukb%^hB_{a5mzZUDA z!9gbY0ZP*Y%I5W>`;%#JaNQq09D79s)9@bLrGGPUKu9Dr1%$%Nmer#8^l?UV+YXl^z~FXx6Wz0;{4>8!jH5tnS%dS|{8N*6Kug7t{BnXE(ZM*uiv})?1*X zzH`~{)avs0BfLWi5}R|<$EMb6)!k2SJzd_I%{o3mB!&KhjDL0EJH~HBiUPcnz(Z*> z3lMB-RfHF3Xe1S^h6U8&|z?JYI(dy?$x zSW-r33nq-98mpw4(hi%ieVllO+;3dOs8hrLRaK1d-4gqky4Ll7BkcdZAL5j zaO4-!A5|ldp0`FGJ+VfSI_8e@%9@Q-nzr#>;5_!bw(py>zVW>=BeuXX)gP{!SuTS^-7x2rjn+66W2QW zCcW;sS6jgTmNZUQ@A;Z_P&apfqV|6^?p?p^bYJ%d+e+*Au2XI+t>1(2AEwe8J+#vL z%r(sVb^oPnn9=jqFr&H}=J&2aY_IQkJ)-{i^`8Gf{dMK}|C86y1{=Li5LU> zBJ)Nig?!Y@1TNOTOrWT_S0APKvebuC4W*Z_uO-RdRtzldaNTqK5&qt;@n7P~<9};` zX-wt`P*4D9$V~QlX#kwBleQ!K}g6G=r!*0rPL_Xrs#N>b5Yr!y~ zOJIo}sYp_R11L#wtI;~2Tu*dOP+^QXW(mCQP9P*)G+J{a5A=Tx`Hj}>zxjdwulr&# zKT!X1AH{8QP)syK!A+KG&>$NBXosACT#0NjZ%O`XDx7g)ttg+tykN$bMV*f{nN89&* zeUqzN-(I=Oc)X^wkzXECZ^HjUNrw0mj@s>$dk1ZR)B3f&)86>a1UiFrAFo~v$8a_2 zHDTNv<*$iu>buVSlj*qs@=AT9Cpc`uIgUs|G~8@8EH!x=0b+qDg&3nmqfm)?tZ^y? zED6mh4RbS(fgIERmeiCLoU82dar~>RgCpn+*io zGkd3HIHN9iL((qTf(x5`q#0MpQxsgy1@2_DV`tgXTM@8J_RLUrhj~*45*$dK>m=sy zrizCFGC8Hwd-Id#0EZYQXpWWe)Vd-I7M8H43ZQ!Xv!$UP>A8K*+!3WsjKeM=dqzBB zK~gnSL?XFVu`f_l@1C~*eNQi^BC}z4;G7OGU!YK@bWq{BncJS8 z$epCuH#D97M`WIH16VXZC`cd9RP0|R9VJWi9mgW0=2RGGF~m4npo9d-8HnU45$aCl z6iR^A2(!5pbuN*ngQSHKec@3m?eXlyse zAwfDv^|t+v@tYN=aL4$KrdazSrD=r;ki=~xHvq#ryR8_77|<;uRF_3ossT;qO_c%$ z$f^>`{etsu36mtixqCC5!l7DQxfLl@Y|$KY)Y>U_Q3CiQic_jfDJf^S#11sIs1zq5 z`3N&i+1*~jg>%fwtwFhpA!4Vh0cwqU9@yR6nG6pc;WH#m5l5L~sMb*0&sl7Im0C)R zOWDHRf&>fC8Q_pe#+A8qd`q+_l@=$=)>)c>DVj0vJ~8gZ>|2waOhq~UPr+&KBe+{I zs*M5^7A6UzH8NlI$IeehCG&4Wm3@|bN}H|h^z=4ra2z9&+b2#D*P5dEqPG!aj_Fb* z3OAZ@Gm>aMNl=XUoX|-kF^^E7gGAGdkvUUWh*I3aEGnelRj%B|_*#iqZ6G&UZ@rv> z*5F($&FN5+m1LrIIJ8K_&BP3E^eD#fCBEqyg;ZXjC5Tezwna9JiL}nc;SQ}`nsQB^ zH3hwp_TwwC!bw?&yS3562P(=d>*bZc&+r1#2v~GKczIZ~hn;*+?s0Gv?{l}zBG6SQ z&Jq$dl@w-(YCXE+YMd??$5~>z5B48s%$bf0Mkzi?Q5cKnzi6%vMY-?t*I0ZT+mf{bN?E+IzzM!7y-pd$ylupsk9`~IRr zevc+9XSFk65)k;d+S*w);R?Rax9u!&BjoWJsQhDGSrisXzzpLAI1aG(B8`?nfNs zCJ@f?Ez_Nlm1u7BKeeFCws2Fy!Bpw-il-~wd78~A3FuNOYD&?vS$vaXZbGfl-&kPb z=WRaB&wa55%PT9^gmdj%jDU_k0gaGyy8jELvunF)Na)k+4k8f&!X!j{kea=E(u>gz zZo&fHVvX_~K{}6SQKWDl1A!@R+W(R`Wn3D;cWs3^6n{hi+EHE;1tLg@u3JnQe z8ZIl}Wl0MtBC)XddYhXq%_Kf|bHAD301JUQ(bgGplFVI3gNciMzTxkRJwTKt*ha*F z#WRxRs9q1N4saWC-AS#0l39>fCeAK#r$pgmT?_h=l7F5H2}z{V>0Bt1*t#p4BlWX( zayD__Edo}KtvM57Uo%W?BVd`rPv*1kky3OgG9uMhDW01kfMia5fe9*Jah-$HF~JZn zY^q(%6BNQ(x@|dm#2Tr}1vXHutceaXxn$H@ic2&K8?zzLp(+y{l!+?oIbA`*0k#my zT={bD+U9d;T){~T#@Me6wen_j?%AqdC}1gZ*rw!<)}TBs5(OJ^NV2$T^hhBZA{Q)= z$mO)zgz$SjS+humG(!s2iZM1)ju@rv&ct`;yUrSUUbSa-nh6PWMXw^y zO3;`2?_pcnsNa+?B=)-wqi)Tax27rF6i`~_Q7V5oMIEkGh_jd^N>5Do=pV{fE-qJT zHK$75=b9PV%u`-D@K)wnB9b&6ZuU}mogF00mCbnz=L;4J(Nq>zM8~Gp?xu2!Ay&Al z>46EYqOveIyEjvUsG+CoQp?EAcuzNnCN5+e(59H{!xEBNi{r8gTwoD=b)#jbg?q|r z(sPoFdNZZXg-9m-Zb?buH~y%HY9;!Bvd-(SLyAL!dg?RlHfB(CUP_u zy!H;1_*x~_((t?Q%u7n<+jY4B1tco`j0&0aA_A_?&v&+*g}i=CVl`k5$5~fCWap1=EGe!j%77WwR%54IWG?ofr8K^^#YGP|D<3 z+tMCuS*p$FVFQJs`kSkK$Ja=27Du|}&_gVtX}B*)SW+FGPoYFDijy#l9c(RWjB_j| z|8wH3`ZUd8SHwWH-k5Z?3TD{g0G?I#&oJh`zC|sIimXDzR$Z(&0H9L%@RfJ0dOo$ZSIsL3Sm{=k zqHvD7&7nD~N2Rh%o~cwafs#N@b+ThS0VY>1P@rhJ!*NPz_+v^*KvepxXY?8*d3|G9 zMUh@H%PV8uTe>QczFM(b$T3iF=2xE|lbTtWrOEUZ#!O+LYv{U9JJ;!*3L}~{k)@am9AeW5QfAS9iTbT=8Yude8|`X9Bh7M00^z+ZP3?yNXtff<-k& z_3tK9l!d!je}vRb@rB1oU2}bL5npw&EP`o&df98jU^v+C z4=%?2!5_Uhy}`5zZ+heItIlBBdD*}0Pv2`5y68^_y@@$K(6MujI^$`-dv)0v!{}-} z8cup9+L~@5#Z={LB4vpny6d1jGbSr6s|!j~&QeYkJl7kJAk(!{t$&5b_3EXj+9*U8 z>s-aTYa+B~7c3xonrxi9?X&7?tlwx|O=gYm{YMKfbC#+>mjulS)y?z1ioAetmF_A! z%p3^=s*9a+ff-+Vr54x8l8j5gWRT!FC3Bnvc(0jvyPKs_ZeID>sPDT5C>p@RidEW#WRH$8I|#q(G#GAgTyuI6Tz`9qqto)K;N1ZaGkHM?nPjBL4fBHmALcMNCj=61HL>F=G*UFI=ZdB8&kxtP?DLi^nDe~07)`V5g zL?Yv#mBAZ(*Sv{x-h?>9NoYna7!7Mm=ZMGJ6FG35bFnbzjPs&fW-G@?2+WoF*dl6k zwQf9HTCh=UXsI|*@H7YWcb+zSura5_C~$9ZuHtIlF*yBuXEf>!&ins)rbMW#1!+o` zHILG$-!v(Ac`pe7rVkv@w8tpQ)dUBt8KIc#$H#0o*DNx5{o)$|I0+~d#_7*E3U06z zu=D3%J4KR0QQ)H8(kYYnsy6HMGU*oVp0nha{Jel?qi*tl+XJ1g>oip?SVlty@pC$C zcHo6=uQ#h~MJyAEKIV;3ozxowTJR17qJja(=5AXjbzWTGYxG74jaW_ErD103g0X9@ z&Tw&LMR!OYB|;6{NjcGlYvqG?RIDg>KJDQbMJ7gqDc zVQyr3R8em|NM&qo0PKC;Z|g{w-#qKDsMW=y?SUv$5+zISCtq8)TWMe0uzb6>F&G#{ z@=&TZ$zoR(?W^f@kOaH)vDn$n!#->hATt3r$soY)Lx2F;!OrHNncF@2FM_J#r$oz= zE%|oOm}uO#r205@K7Z#_k#yk(d>R4UJDOr9nll{u-`ntInx?tm?W+HqraAwAv(;^V zuhrSNtZui}?X=9 z>t=IMuerb-Mk1lUIz%6XA0S7n3i2pJpTst>5CrgAhyyr4nLgES%HzE6g+5=ES8o3| z*pGp4!vWl5|DE=}HE;h`r~7RGPjS82;8lBpj%YMvWHJ?~ZMIGHag1+)pi6M3A@%8m z07pl(*+3`4ZPs3(6XHO~!9{WC0z+a7=rF?06w+TBC~-%q-89jTY*0^rs_%YSdx2&& zMgg9okO~xYKw?Tb@`w)z-Z~HoL_*}yAo2+g9YD84Ow}~WAd-mBlOd=rFbNSx4vl7r zdc}4Ki`ol>rb0vqdwaLHw@s|*Y*IGa^K~1(cQQH}o{on`yJ^;5pf{lpoFfKb#Dsy1 z>>0vQ{XBfq;l9Fa&QSCh4aP5y?ML5*q`Q2#`TQe&!K4#3K&!aX5+b1ki-u01HVt zK@qTka4AKOaOl=vAfE(8V4=QQSX8sNQKhWaCO);Xe^5h+gcG?Y`6ogUN$iqH| z8bX}=cl?472Zw<;l`*b{h4M7E{1n7_DY7n<|@jd>Xq=hX#A#PGEw4AJ}YffeL{q2gt_) zxKN*?*!Rz=Pn_8S8hNKwoHO8>Az9y-o2A5Fo05ofA@yVfWTZpoB(&Pi_I(79kO&U! zhB)9rC{l?(iV`Pg{(6ikvLWWc<^di;5$61sGPk5#2)XuLQ`fG++lX?g)VPQ;ae(@k z)lnZq>cYADs$-gi_JTZg^RCrtzwg-jhj8WiPe2eUwJ6z6>4V|W&?A!oM{B{v<@nF) z?YDbn{MYW79rGFgJ;k-rQ2UJkp7Gze5dY29IIc7d`8I+Mw`XSwtSR7-W z!7r16SnPrkL%tyWL%Mbarwg$E!z^D+deg(@DKqcfrH4FY0Ra(>Et4=y>?* z@Xd+-aBv{|V@Cj!gUzI+6ep6hdxB|P;Let(!LBPvX)%_y@mY?}PRExQhojTW1p!_~ z*D$N2^NZ2z!;8<+C&SOtPEnS-Y6$)BhqZN7@&X*nT&}$912u7UIv!qJqS5K)S%vDM zPY+Mt4995agKo!jEE5K}<(XC=EZgd|Oz2~$WA?i}yYoQJ-~YuozxeV0 z`?tS*_nZGNKex@+z-XC9yMxTmL3{t8)B9le!?kAbSRL1De*9&}8%v+tSReM?UB z8Uo5@=$P)-wJ-@W_GpXOAw46}_|=7H5e=ycYlqTlN6dyZ-KoVII$ z)gBD?onEW$xt{IrCp#Hvgn>#=K zdF!rEhmfsLlde)`f=@cx6S#HmPzH76`4kJQx_h~;m_<-WB)qqEx)ANo<-c6uAQC^? zF?W}DUGUFkHLG;dnZ`ZbLEmLNTFW+OGkUl>+IeCv*3&$JN|8`7>c)vnOsDFa=Dky` zth87V?%`yHm2}skE~NPUNf^Ddog|xuPvlk{8i!&fx_mmJGMijagb(D_6HN3Z-aC$} zU0&}Vmsfuxcdxn4$&XgkO&pOYkc^5eD=X%FaL`Mt3<{ZN-F#5su`Mva<^qeDZ!9*H zMlFO0cnePakZf{Q5y)A$Ha2kKU=DKp6?86L{5D95Fv9@|V7!h5ycO$=dzb!|WLBw$ zMd@u`6D50(aI*8Z2_;MiEa+b%y8gWY5kkxe-IDYqVLT>cO((f>h|G`sJX|~KDfdp- zcIGRWNMbRiY&&C&dx6?&!lZ_Vm)6m8V# zaTFD79!JsE;S!Fb^+C@XgO|a}c9!6IBqU-@ZGAve<;GmBYZMO=NV&+n$+Yb*aC~1q z;Ax=yV!pF24nHX4TRBLoymOmNsB(TdiYk4db|Q1`Z)JxhaaF-1Jp`n#Egv~aNVi>e zdjQ5=dlDNaBz!w=sJB|>#ckegeQg+QF?7#}! zllN)0vJ*!C92_wRuXBgHc}*zC*w$9cIE>y97udF^@v-nI3${E>5^V|aEl*VT*4vQ% zX0n*^kM|84>{c5e*>+444b$jMgQ3RazHt!Uo57 zaD;8*6QOkc!FrMSva7Nlx7MRGH#>)hR}zCghNF2Z8bNrKt#h`CF)I!Zr0#sh)NiFI zAt?_aDiB`?786F}Xd`xVM|@Zpjot-4A1JnsIIMX=EpoI{UKwvI6880lcIAS=#4pHB zf3aENC8wp=3skG^L_K(<%>;;w95xZ>w|*>5(=0A%SA_BxLURK!aiM5-!>U7 zGYlf3m_DLfEE+rjpe=W}n-qNRRwfYU)IZo|YUV!3Ki#(z99>nqzK8nJ`HbSht{poL zaDEjtzlc2^I2bTS*_CYha2dD|`E+)Fijj4gQZ62`Wmb|A3Aw@QsegAxd?O;(99lzJ z)j}gIrkhuYlC-K1VkdHYfGSME53bT1y{=|B@V_(qurXmjFml~-pe_^;ibwd#MD?W7 zT`8@rBb!V}C{|LIMR{&oW0J(`O1kHQuE>vD2Yu^<7$B!lB!D>XeX_{G}KLo4J1?A1}YSZcJn)D9MiQs`#syh&@~OK?>UA& z@b-;vANR}wbO2iI4;tu$ONKp}P0)*b;9=Z$4D1dDhSh0%#=tVW2DJMyFg?riT3t!mSVt3dOt?dDfX(J8U;KSb z1Y2gWJLuS!;q3R@hGh;MqwiTg1NS_)3oWnLZnqRGsiSUFoul*jKlz{U{_#Kk?w@}4 zyZ`fZ&D?i?{hN2c{N=l!{`l+v@(aoIuYdKEcR%^@*T4G9uYdK=^S^!bvwxDkfAgDf z{^jq#{@?%Z-CzAW|LyR6lr;aFU%vZ?Uwr*n|LynxHTk*m?yvvvyI=hL-QWE9-GBIB zzx(aazxnMy{{FYW-WG@U+qh+QEZ6XC+cd21z%~Z-O6F z1KU={@=DtC1vqpPk_z!I{G8o^c0a*MtrG2Ig~c9J^;3Fz`IX>h(PXckPzZ>Y3o-u48#-w`u_?1t{`kE*sn^?M^0EH(z_Q3oCSy zO;K@&OdY$!QKSaYclOJ_R^|D=>stH!Zr`vS$22TxV*^`#*J#__{yy%QX1j-1*Nd&P zx#zXJrstT3Iq0ugKvIGS@Y|zK6T}M%%L-!)o>0 zh7FyLVdAdYAM`BOw7xCOZCM@Y_sqVr-!U!28g$ymKt&DP?b)qX*Tqi%&RDU?)l{?H zwAm_bT{T{HEfdUsYv1sCfDNk+U8C=GZNstKF7^h4b{ALP75g683b60ljwH3SZyJ_k zwhcVMw$baG*lIbh+3t2r{(8Bx+F7#|*tu$~*mt^?H848{#+GMD-Ws;scMQktL2KXX z>`S})cCfQ$^*qb#?;Doc-Zw1l_6;d;0~`zYyq@hi9j6EomUGijTdly%RiR0*-}lC8Yn4dHc*m6HBh1Cn6!+rm=^KZD&g|JP~ZG>uE33YDxLIuZa_kPn|<3f z%$8xckZB&M|C;*2Me^6ZvTp1>CUkFyJ1fPzCEVE%V;&QBx5Jo~B34y&-4I6}6EU}B zNUH>$s=&A@<9S5T+YU!oiX0WOZ9@!sOyJrMLss(ti}7hg{8%~qtW=SL&^3(JpZ~Vr z^Z)cyP}hA%^gYjiZtb_abI<>4cRKse&;NUhYom`^dw%}k^Yj0{E6@MaPes1(;eXoU z)e!Qr4SwRIh<0^&S-;(79Q zdPw5{T^^m+5aQs2BPhEoJf)*o*#DaTUtj@V?DMsffaU(b)wTB9^Uwdb+U;lm{}k6o zP3_tLKl}f0x&Oye#P{+bkodFl{h2`aCXdvwCs^%b`l&(cy4h^OL11oelmU04Rm%8Jk6xZ|{X7ad} zzqJQ z*O*y%sTDc3s@0eKBJDWzn-t1yUh7o~YfD8FedJ>jT&BP^1=;gXaaAc4y&*#Sma5m( z1%7~jfa({3-Om^ia27gHM?cIOF23mN%P-LvF%__EHS@iSQfI(v%p52wuEY_*=ao4b z<^Z)mBDInV8HTZu$hS(sdvKiFba-2cYEsjVmP9uBds@~q^vkwZiE9gQ=(;z+E%taw zq+1;2u8`-@Aiz@6Klp&FvzdnTK?Bv}P!JzEG4qjejSNpg+AqJXFg?!wg30kOzf2VC zU~jL?uY-=+GR?gkYcDxrzsF!ALFsI73fLFZ50Og|I8%ylu>!aXHKykj^dKK1?gK=q zEgOeW|6#SHVh${r1mcfNMuj;N;pn#qHWywTh`#!&n%lCaV)@;yUKIeY!u!I@{O;v? zvF$_nUF`oD05~xFD*?chvyZNhN0rd;0PV$`?cpfe^Xa6z_h@`MJiQv7ua3k#0=|0( z3RAynXrS*3YDUzZ8$6wQd~|hqe0(t+kE?0llq;y5{P6sIe0g>;+&l>~unEc_2}B2d zb1+zrEvuQoyz;kXxbw4%%jyB^GO4KF2XwDa4_^--hj#BsPwpD{IYn7c@X{3J@Xh7N zSL5Nur^Aco%Dk4_uD00m$<^@m@a4&{k}G#3&9b?ykp3*`P$cG);pbP{jL#1*KfcEW za_;Y4!%P`xGitS08g)B5uqX<-;QXb&^J~_Z(us5hOLd~Wip$T>H*R(tSi$8isy4xt z`oojaVWlp=Kf(`vg8BVf^19jnQgtt;+XY>|Kfg{Hy-HU9h$=+I%-NZ+g`xr~EoVvt z*bBfh@_io(sh1PHP#{=~rrbb+NiS73SHJ9nG8mhb<1Q2Jo# zr}_jCu5||Vp8a35W47k^f7_kb^ZxHsTpQhLd*1(j-v9kh?f)KU{%mOx+=Jvx70~1_ zs?NFmSg2R5oUd0G_cmM?_a0amf3CK^?`o^JUbXer8r9ZUkF2)7dR(=&Z&{tkS6fpo zdFBt6oRiV; z^zv%7#bTm&Uop|~34~%)T`)=r91o8!hLy$RCna*c*k+q0$aL({STf+v#qjFo;n63< z)8``R`z{ea7dhVt;oqGir}y59oE{kSTdHXBJk~NOu=ToTHFN&B>zWH*zq`-(e>};x(NfEE{qMQ{_bspgt#kjkx7z*R-YWNhr^(=w zBw05pR9Kp6CmmvosoDdE(H-X_=DPlW3-^Dw+m^X_|F`w*|DWR8sHr{s|7ZXI-SPkT z-~a8w{kMH5ZPLA!ByE!FIOm>8IFbA;r%gIyoKhFgDHFB1Ol+lF$4dqIJMSJZl-uX; z9xr5jtCB6RFd_Orn$mW8&(a!~-n;I>`}U82=vN;9n^W)uG6^Z$G}G^i|7N!{_xzVu z$1}M2Q*fdly@gl4UI zJiZ#M!kWYwK|n+F>CqUugz;K)Ld2f>SCe0B+CO4@>fiK>>10p-lYZnk;a)zFjh*W_ zQlNp?zTf1xQSJLp8(-JH-xPuTn=&$~egEIoUZ77gBQ)k{bUfs>X7VPXT9ded_jGec z|Gd_`;SP0SulBx$yTX;*e*#{%FvoKHZ}(aY_TO&z%xC+5ifg_|yl|EAc*Q10b`_9% z1N|!;#+c1e+cd2^JKY1P)e|o-hZnEM=-du zXnc7wdih3vqXuX-(J^>LKmV6EYY8=38iDu}`#uT)hx+-_zygI+kwZgQ_fjx7mgxwC zh*39o)FZId(>tM?qj1Rq%#kan)S!P1jvl0i#FWu^GDQQOUP$y#omicxoTH1f1;U&x zx1zTpFbT{d6hzF_aTChOkJNlA_^aq4rdY_7VZv~z&Z?A9cSZnAu#bjn=mjF;P%bb@ zjzp#x zd;OE*07C%|@dTvs$Y?U|+?tFeomxg}DYC__7h>}v7wDT(Ar9`VFX z#y&?5z0)=SbXQF$BeQ0FI#4XQz@ZA#e2N+HbVRa?YzV<44#9qT^a7o^$UmoX9qmx2 z{$lmrqSSGycydGBSdPU|Q9qIa;4LtR@cCp<>6tbHC6)zM8>>^;b!lF~yrxNf08A#% z>Q_&3{8~;CP*C8m>`ZV3vcGmg&$SBGRC!A}(3x1VUg~HYqK*=)D{oCeQd+Fi_iW04~8QLoF=( zGs>M=uSzM&YX($DU5kn!bje#}gHLaF zb1obMBR3l5N`~Y`l(?iV+)jxz zEjR;kiJ(lHJA)gdL@Bj6q)DBnfxyQ$W$7o%QZW~;DH%*gIp7cq#eIx!r_@(Qfg~0t zA@(a|zUYrrKjoFozk%l2mvB#Nb0RzakZa8t1_36SeL{qp(iF)TwTu85_%oR(Tr0-e zBvg75;sAD2p_5Pm^RT0WM57QRGo~&OCAkCC%cXuKU3n7YDZzB)(BF3L(8d4YBX1Zkxw;Kt$p^Qrw}mOHr=KOH4sc zr2O~-tVpG-!rjtnQ3NW|E34_HzS}UxzK5uHH+Wes+M{~5ru4RJ9q%)@Og*G3PK<`c zQLi?!v9I*#mdSpqTpYw9$)0^5iXzh?XO!fV;JL9V{`1DtP?Y(u;v6(A(1Zd^eA(G2 zT<}IQWMxo@&$xhq7hO2vJXSA9aa4>x(8lhp)3`rxtiGklz*{gs?TFe<^pS*Ba@u^iB}GBc}{NBN5h$7Hj#-Fonc?h437ac z5Mc~%sM-lxh~`QDCnrp^EoewM7)d=|@N~I5k7C;=jz5!%8u@tE$iInz=}^nnHwmyP z=50lopZQ`1mKSEM2HYyoXD8WB!(5$JPazWFi0g!C7e#ul1?dI& z8X9PdZ$P2ElpvKyQ_qt)k0K7f-$?!?K}4C*g30_q0+bU}sN77tGRXohqjXla!6rjP z=+88lrSD2eb9_t!p0q72&YtN(irmfoW(W>&ju}zb=`j*c(u@X38vBZdzr%MC_Gt)7 zM099ilQ2W|s@r^rbV2Fvq*6dZ6OdOXE}7z1iXx45O*HbP{Igt$3nHXWXF?Gqsk`C{ zmOm>emn7~xdBDoBHKUvxieYjY4vi&#(x25HsgG}YOoUvj4-*{(u*itdF~OWyT;||Z zOwfe$B-PHxadP3z(q*Oc2ozEkQ_xVXtcfXPN|VvVQqn{tx3MJTrKn0r2Wg^Gda15p zo&q)(i%j`4?k1bhu66}h6J0>DGStjAn={Wg?}Z#1krdmM{LvDWr$i!QBe*0E8d{Ge zq9I~Rvxr}gR7f!-SFHd*OWC8oPj7X6Pkq-xEz7HR^-5zd&_vQJ$PEY$V#< zkZ#chiJKY)Fridb_M!?iz2|*K!V9IoW6QZ_7*517kzs#v8@y5!ax z`7#MUNXf)0jXAFi2TF=s#h23XVbPhFl&omiS#1567`ObK%hxyV^2n~<_VCd?980A@{eIn`O1^k0i?F34Mf2c1f1 zMLz5ol2?gP%H$-rr99TGRGZJj26kQfH+6b|L2 z5V~=Y!q$?;q>e@Bf2la?At@I#Kn6p6j>-{70Ot5macN7FK3)Di(xx$WGbrjfyWe)k&E&+lfl=WEfGT@i+p;!3Dh$B+Z~8l4K%{E_8uZK%Np! z7-+>$&q}I{4BmoMaPi9VW(;94!A$Qf&F3D;UO=yjE>i%)oBCWxilbesJg3l*yRai9 z8J}#ZY50&Te5dt))_M7S@t1@*0CR=@mndHl?xzY*I)C4Ne ziDm*zY@g?(?nqhzJJb0Twb+^nUKZ|d^$}7%#3PT9rpc*3Oj;b!GaWFw(NTnTLTR)PdDx~5C8pAMROXlIHgi+~}_ z^q#ql;#sWbu`lKmUB%5f^D(jhhJ@*xUvs}&tQhPp-4jo#lFRm~R@e!p?k(|)wZm(~ z1&ty+fri2au_WBX#E+SdM%ee_Fb6j(2v(c~acB@oIDPf{=*J9<$wBKcyW} z+fS-c3b*V@wo3a&FQ=H?tTmhYA&m1E2~FljzX5w)>cH@0U9*vJ<&lN`u-nt}P-f;JXl zV@8Ws;Nj`9jH^}0;MDJj=jX%IwODc zVQyr3R8em|NM&qo0PK8Ua~n6ZZ=U%n`p9)ER*Ir1`QM51q)7CJH;SYZ<@lyjDHk}? zB(cH_CICh>*X8@!Z*>Eh!H|?}C*FAXtmeTcIRl{4e}CPLQGr>pH^cptg)nZg5{3He zvtPsEaQNccGyZ=#9IpRAJb3!ztAi&mo<4o{?BLmx!>@)1htCd&U%~M6ld^f$)(P{~ z@K3L`zPW#sOH}e_G*;^J2yPF0qN>(OVt zdXL~lS1Tju3kQe8!y)`oizQ09#%xh)rRNeYoajLx&Rjm|J%TftVQDdky3EmlTOb@) zB3od*(}&=W;BYX6$MnEXxV5wUUGEXBbPa`AL8%?o7Qro~g_%?c_%_4Jfh-}@MWv)D zGlZpd3tlEnLPY!$rqEL-WC;Q?U9CXR(&s?9-Xnm8bJfxQ{&Kk-2&QwO&3s?^XYBsj z_+)fG8SNbohP_Ads#It#82r7K26LFMKvb2InV2dBC6=HKh`B+`!D%9NX{3|oybo5- z+)^0qJ%U_XXXLbY9WF((r0qPQOAsaO98X|8*@5qmC*w)K_Xu8(uYb6Bbq%kNuda^I zug9YaTwKA)#rf&@dVFy{fs2=LeEtjkI6gn^14_3*1NgQwM87s5iGRovn;>=wpddis zZH1Yf$qbYz=e3w4%=ImrQkHY5&=k^=6fKA{?>zz~3+aU8Up6*1=zUhD?DghKPlY<_ z0myPrd!mm3Sdt*}BbW(gu?JwSy5kOj#mt~Prx@1*+L4vkVVU9GBb+v3jwec3%j2M& z*}Y6jEL{&ki`p#?{b>3)L34}dIL})G{j=c0%%AInISr zXjc2_+D^=mKnaJ|@%O4$>QXD2t&U(kJJ;^gpvBSwuq33jXl`YO8I}&sXCNl4jrt@? zdH^)$i!6$2k(-27FE?gPpqJyEh@~M4w0=8E?b-> zW7bA-03zkEM{v*shz>c7PN<_xbtc-F3Lp|e7sc8WU6OXAu}7rH{@M#Wr3dzEi>8jK5xyvMCe#|s&gk760(?uaj z%D;YX7hm_`>%HvjKJ3(`lZxX$?A^fLEM3GS#ev6WgAG^)@85q1xdzM@8kT~Ml`Vjt z1j~Y+KlQ+kwr&puN zWINduYTmsAIa^mwYtmz;r*(%b?)(m z_WtT>^yd5HlOIRtpKpbC@Af{Z{daEn$I&luCf65Nqc@kw*FW6hU}|gjMOE!vtM+ej zMF~3&s)NIinsqXHeR1{KHFDG5Xv1ysVSUg3Vl{|6xD?hdwb`z&-CbP&a=Fzgzwi#O zSJifR9jQM)8y|0VSYM9tV(3stf!{*X4Q;{R8S=&@?{Wq`KVOw!7#` zB9A{z>RluywXY9ZVq8?|`5I9v>G#F?4az(N6W)Ci-_{A+!VNF*u56Ox-zTeybXeGR zt=sD={D#w^t77il`$(a4Jc8l#r%!wLi1H7K@qQ65wDr>KZBpFG^R7B!m&`9+0QnEU zK3xCvs{Lm=gCFSs9lUt5-v58`?8QU>|1Y^dYpLa-{`XM-`xmeOHKo6hFWp)8Ym=_K z3Vrbjx2o_6E-LYRjXjb@IX?|EwoSS_6Y0?85Yjce03C(In(Mh(6)+UZQIBe*_^ z#pq9@7&?a$?j$EZ(hlnEtlJSwW9gT6ga5HtjP`>CszT07Z9cy&K6L*3*^_4*=RXgh zKg9pP;(7#^!Z|dh7V%3-j@6AL{pL7)D?pU+xuo< zmsRhZ!BpJzz8ScJK5HZAy>I?s?-BegjMTM-@#)C+29?o&$ISHxGDorRA2<5%y}_-` zbdLM~4yWFu{RimsPg&!B`#*esuwnlP&xa4^zy6YIy`;Qxb@BL?4oGt)NWBmLN0hZN zD>xhupWZp>18}-W1FuI{KTY8H{4~X@FE6g()nwF%tI_4v#p$aP`nk_fosK8hSL5$r z(Jwr~!2nKiCQHe1bI=RaG-(9bg-{9#6eXijho)eh3Yji*KZ;>)P3efi%ILh#=;wYs z$5ZAl3MUQ-3pp+6LH`6ZKgj{Oh0*nV0pI%cg3!CpYCc=JMwd1lgk?=`rI#fd0_Ipc z=~jIFL>u`JUN2(7EhF4QI7%7jMwEPZrGvT~0&p%AjCkq|BI=Sh7?LBA@hp*wG6$hz z`$_vGf^JdP$4h6rbVjQ_2!rv9Vxs$;3mFXAK*pXqIXPprin*I`VZi~s49Q1T8$zMB z|b|DPfIHTN!DV8{snG~u!dqQU`@?Uhl1CO=gPiAK~mAWXIC$}=MX)Xh) zeuN3|Et*W)^<y9n$9{9j zEmJkKVp==SYdFdDxpmB^!SaGY;kn<~9#0ge@elN){mQuD}O@F=zvuQUq-33KX1b^(8I)$? z!Zznvq7n2+XTz!Y%5)iC*kc&zZMVQ&3eHuNZNJv$X2U5gwYg!6*$89o>Q39+T>Q8qu9b6iqwWF z9*Yw2ttcwRrIgC(TNwuWT2zH)F5kiwm0s?)TsTD|Z#~K-hS;5T4WKo)^C0X#%;b3x z37-n@Wwz&+CDAUmEuL=A(5 zkd1v}B@Al{@rAchph2~wMB#=RH&S$4I1fl9&ZIqWc$7AG65mgZ!jae4rBEum zZCg(Z>4Ni!xP!HeDQEJ6Deyw<$2VX_lro3Ad!t1PRLCpy@}%!mTnIG-J-Zvcd|b4L zon}uvVJ;u<8@H@yz*Q)tOPTda3R9t2kCukUak;pt%fNjI?+G*YdSSw|E zKXD@+El9Xce9NWHYRgfcS1j0H1{nF8Jzg7{@NHy5cdt<&GhNzBX0@)ZT0tSq4Y@wk zqN518(8_tqzQ3)I-=T@*tai?|0|BY64t6$8cnx1S+m06aLCBLbko;q@wkRxwg(+eQ z1~X(&K3#RzX^qh0?=_ZA(XyE~mGS`-Vq%R;BN%0XxX;g5|I^5Y9CyKu5L|c z5;IG^GKy>g34?%K$aLjV9OHstbPa+KUWKj}DyrX78bJjC zXnd%({7V29Y2KE?{KgkESl(E1OE_oW;sx|15zwU|r~AJ^I*&s)O;|qJ9wCynV0}Wg z3zgq%BE3S~U>_FZ78&J5f;f-Xvl-z$4HlK^hks>JY2&1ztvR zRc^3RXeianbD4ZsAT3iu7B)PaY;L;plcd~j{AP(6S}TlX>zo-`&SOS{GRD5t@E_Y< z5K5OAB4VbCsVo~*&%@RS#0|ynBrBlP0pxXw3rj3X6fxEfU_2xFH@T2?(veO#LUA(G zUBz6`ZFX`Yaev$ftOi>fZS5X2jJA>Kn(&kV&OK5kmbR9TwyJRMgMe@i@hv7;^NRO5 zIF1RPa2rzXcAl&i&MIyz%A;VU>K5psSXUDxWQxgXu#}i+v^Ew(UPM(sI*^Hy^rEf^ z8v$D`T%&vqcSG|z_padS0Io2t3=NuQbK}|8y-=nr8L>^rAKioUSR@1+F_(4G_j*K# zM!JP=B62rv_96TZPu6c!A!bOcS_Pt)@=PnGmp;Bn-*wb$@~U0G)7mNa zvf>jf9q8L+hjeXhG;PYa68nzBXk2retmz9kEtIA_it=|~)G?$&Mi;UqJ@MINdU%^$ zT%*!7C#CLlW(N9sx+`bN$_AZ~Wk2HPB!%bfpj>TiE?Kx)uvLgYSy&q#`$4<=!j9|xPUE|vcXxFS29&hJp~vPIp>(^ zNsw)9jqkms><>t`rr&f5sMIlngjO)iUw^^z)A$PKn|X|`r5 z3?OdNcwxDPH2EHFa@EMD)TW?>nSccfGl1)b&%(%mZL&F$H-iVCN;gG5p_1g45K5Pv zU|a05R-M{>6E;Mi(`Q5ZPO6c~ERpoUp^veIzURJ`c}I0PpAsc4ie+9G5w>Re+=JRdEcRP$N_Ho8@v zDBPfKe`qe~QKu}^WGZW!Kt~|YIN1rE0H3S2D9{e#;W!c+zO9tZB&EMRW6~gL>Km(d z6qyvWk}}qvrK=X{(~9eb91r!TY4!P2QnLWFn9M|B{1hI#=CS+e$DeCQgPQIQ$Cs)0 zNg0{#oYOlBBTSmDD>N2!^o<}ggG3}@A&)M6fz)A}63q>I#gAttIU~cjm?bWr9dE-B zgL7egUuiw}2)%&k1GtU=#18zqkcgvm&7RYF$enbAi1DGJ=HW|hV~7H6f@o|X!l`2j zU$udt!~Ws!@ys?fv}tN{>~hBY5mxhgHZRiJI$a2}Vrpaw{*N3^gD9G$L(b)9eKuNC zlv{`fTS9>6)QbU}O3SGe8hYxrFvOSD;G<56Mibb2PP7qNuzlN-`j}`%kuBC!)bwfT zY*)Cu+mDd?DgNX!(wLn3!=y=>w6&o2Txj1H)jg{?Au^jTR?pyie0?_R!}-Pe-uV3G z)%g5xqn}3S*M0bDbanE>@%i=f_v5qi^)IYKFUQyCqlrI0a2)2iJifXfpS(IdzJkkF zSC{e&8Nt3-(4}Dgy#-@$d&1BZ=-v12XtYIk)I+J256*tev6nOz}Nq313 zKS!xSak0}aP@7d!YKfgJr;STX1|`mwoMV~cZolbv_dBKBrt>di&>jxp^UiIN zO_rI=3E28p0s$Cb)0INSNu!6(7J^uW288iFbBf|kthTjs>xnLNvu=D$?SGMF5N6_6 z(~804dwb%MD%!TvUSa22=S!*5+TjgYr>jcLvCo*GCcmdR3^+H^jqba6~{8n<4bQX?pSSte);^Brcy|;jG2XLHGOdu{q z&r2&Gw}Cn_iq{K*?pC5w$mml zN@OwGt)eoqR}EQTl1UHX@u@DqZq5rNHX0}YuU+75ozqmi(6!15;x}}J>>vr-NpF^H z#jZ*x-ZqU;PU<}Y19*)fl+|F+KOO3%(Tnr5UT>^r#Ol+o_HSu(1P`s%DYi#exI-E# zu{3a}GLj3|suSrY&*^lP%RAwfYTy zWxDljz03L=KmKQ5-2(XY?`|bo|A$`Qij{;w(ubQLu7~U4dbl30JFovA009604W9O>0A>IHv3Dc zVQyr3R8em|NM&qo0PKDLbKADEZ-3TbvB!CL66Z;>Y{yCK-kdj%t)@D4Y>%Zhuannt zAQF;LlLQNZc68dlzx~cG01}kwZ;9*Xbi|oB5(!`zi^c9|7a)}KDD9+NZtTyPGTk{# zldtak>h*fP7dt!jf3MeD{J*!k)B9?3`^B?oJ3E^@+nZnYHn*O?c<~kV?wyl{tI&q2 zuX>+NYq4|xAs5TVk6dXXvt78@Y_U8qzpnMV->kJ_t|KLKL$~(ed!D2ap{~G0D)^xo zbCq$!bt_{j-vzHvt&4gye|0}sSMycQ{|lBBT>mKs;D-6Xz5V?8!u;Rf+}T{s|A)99 z-Q(4I1p6|dD>0oJ*y?Td;QNAIaseYA%`%zDso)y+Ww#B7ChoQ#!J&wFrg;oS7IOt= z#$hjK(Tw{iZE)rYwz@rdf(6#xqqX&KTaREa3rN`QcX7! zTSjjj4)*&;!+vM0+iN|7w^_oq2E~6ZgyJ!b=fLtj5fK|F91?a3QURMP&SNkV8NF1( zh-}&hEhpxZDc*VnvCu||abapw@@xrRD>nQ;3`T?FqahrB2YW|9!4HF@gEnwsW?TXPm@DL8DiA0?P9rwt zyv6`J0sO9W9*K#FAYs|GU{elLdBIgCvMJu!a zwWf(2vt+jgAhId;2|ohx3IF&iS9&+;F)OwNLHBHmaUB+hg@B7wHL<~H@2+%0^~>iXa8^zTmQOndq~{w zLQAA<%C+t11<#CBbK8XCxzvKbgT7Q&3?@g?oG7ks&sm!{>Z0y zrJhS|P~+}_1>aP~!sb?Y`+5czG`G}SqYB>QA9JaBgSO;SnO*q0_l<2mlQBP`Tid;@ z-ga$F%c7eNMK?q7mnF9vN^UKQ$`;>ww!PJAxoH_pN@)4%QM-wf(6a%~f@*HYGCJqV zwmQ*MC5wD_g+|M(#D9jTIVtr9%TxTT9HcFjF!Ozx8UE2!)h7Bi`9%2bH|YLolK|LC*E-Iw^O^9+AFhhXguzyr$hZpV zcbwRw8IR68@wlTni|6HI0AU?-K*s{su6O<23LwEBf9zgU(6DL65FufirVK~){bN0Q z+=j=U2>%wD5eekeGogta=*%p%?)avllM~GN7GeoJnn}21Gzm$wQQl*w`M01G&U2t* z8UOb2&(QLOnMH~3l&nAjkQnS4!=JeyxDu*Z*JhX-{99m8eUhq628G7e?T)=gW;%u zbT&9?YW6!N)7^y!029HJ_>@nUpSWiy%*=K{8)gbrv3PKTj~dAjhlgiB^nW@Vj*d_J zXD55Z;k)D0gWL0B;pz{3eg!|4N-(rqC*2C;*2mOe=X}14e=r8+Crs;0sp2cyADzA( zj=m_?jViRc9rKm!M?al3s@7j6_t8A(*Rs8LIM^G0Asp`|g6T$X_fFoN9lUx7^`HrV zD~7$P-pkW#6{LUgx_@@sKRN!g*vBCLl;`r6yuTgxPmlKA{F%yqci!J>uCQoO4kL8E z=sHSocv27d?WMSug^IY|h2KJw7cwbQ{zev*|5|7=#oN|ImtIHfq}9|%j9UGKTquC< z|2RwLF8Of{kqf3aRFQ2s{G(-b-blcx{nX z#(Wog&!0WJq5WUZ^-b+J6{*@^d{W8rlScXK5uQnH2e-A%E9q+@r?q5Zi1C79Un144 z!#9#!oF0F55@U6J@^wxAPjhu4BL4YH!Z)n{Zob&rT*&`Df4==}mH&H)>t0hWtNh<8 z|M!LG|H{tT zum8}VlRGT{3fQZt4EdjZ$GT|D~YUSp$R&H{6i=~@fe&X6qE^oJZXU&x$ZU8TE+jX`2P!!|8JlF zC2M}?5PvBI|I`#P#)H@8fH!ZI1J30QN#F+iU%n1fefqpi@J;#O=Q~?<`@gldxwU%# z^FgkAooXxlzq0>dxc$Ft{x^K_@eWDgs@f-Hfio9{x$ZU8TE+jX z`2P!!|8JZB4UO@qh4{_U_ot7+px7Z!Ly8iB0ga7x~zWngH`@nDT z|Ic2$*j)7gJI}UP{{JDado{Hy|G)D8U%3CT=l_R>89phJA-{3~AUJpL4*CDGR)q}+ zZrDJ3tyX63ZmRYqEipvXR%C%69UL=&B^(Vis_5 z9Ix*59WsD7=+<>9Ku`Y+>38+7i#b`J1-rRi?W~2?okzt=Xg^^h9eH@`L#;*oc+)6^ zh7o{85!d>Sj8T){!`dll@jE39Kh7e)20xbtmk$PBI{K=i7mKw*=~q*zHm`myxL%w) zu9;ofc`aJa>BL*%|Ige9dei>T=P$Mw@qcf%|L0+@dxcsn{J+BgUpW51ZT>HSj<-hm z&Dp=Q;BAwA6~etT*GH)8Ugm#k|GP7uq+*&$#qXuz;JU&7_ja}y&wt+D++5{<9^`ri zC(IbGGEFv!#vd+cJcDr|l9;A1i_R(ZYCVDxnpa)qq{yIWJV^lYiw#-Hb}61PBQ7|B zyx_i_`5B+myoV>b;uGE&&fq(p0eUWWc4UJiJUgYF7bn9tXU*@f+-7!0F zJ?)wlKT9R1t*8IL^$31sO2|UP;GnNt-CW6Ecw|~#5p%X-i!1p{t9zj%8S{<*gsgfw z|DEspGiY2t|F@oRF3tbV7caI}^Zy~P#fWR^s^hVS{6cvJNUaV3Vp+k|9JYGB#f==* zbpxEDKzGzXeKUl;qk|Bye0O{bZ-@Ohoc2#nj}PAN z!4MPSM%PErC5!|;V@U!jXBnXo!&OQ+1tOWnwidyh0^z9Qxsq`a;qA81&1G?g!cYQC zLyROX=o|9LHnIt3reral!8aCOB6^ciK?^Gjd`Y#$SX5$bd6{vAz>H@`m^uBVj8x*^ zM9;&8h8kwZ3_`}KVj1m}I`Gip1O%%wnWk_w&(v2KS)&qR(bO~k~^(f38z^pl<5f2|Wa^vqW9zM;Zs!!mNx zdd3vjzD2PPW1jJehy+XOtp|KoL;jO2*5HX$^hvF)hojCilF5aL3v5e4s2{EY{*kLl z=tZzkdS)j94a<_M4JnhchSMuu)HK8gTw&luPbVbtb0m?<7()#kKllL_S(Fqcig95m z9Hbz_##TO_0-HJkbkFT_?omTN%|iv+e*RCyv``kX5I(3_KOUp+UuKWpq;xZj|HO*3qiNvNp-$t6fUJYCyvPup{7++KxDofdW<`^iPliJn2Z9WE!;sPCgG zcRs#x#24p4Ib{QSr2yT8^S-p?0~@Q23F&a`kce+dTG>!7sjg(c9ZU*?R$pc;Nxa$C z#W)ql84r&;NV|x0V$V$lB1Cq430C+~CUT4f@S`ab3}mP|lSt_Cl+^Y*Y- z_G!(vW&M3=mgNK}QKMugqBf4gm?fk~mkR4qx-cy=Cw*|gruSAs%08C^{llD}?W z>xxR-71EGdz!RiQBv?5S+UR!ZvPvkV=i2a8hbCNTU2t?E5&1}0!VW)rK8sdLtQ88q z9hi}t76j5pxy3?9g(fdg6jQR74o1Esi&wcO{?QAe-dC@Wk<4^1qCyrrnM2CdIhsCI zp(78uxE9llY=4y@y+RYwSgjpN0}R5s+Fe_o!VCDi?6#kQH$t9JfM_4n1)?xx8pfPw zpm@Z|l8@&#I@Ki9{MUkKCPA{1RJpY78Ub%G{j4F{>cVS;RYl*@ zOfbzttISz6gFrxlCS*LfD2{N!PqF}p2ruWRV2M}1OR19hQXtmIWY(dP*W!Y{cA^Ji*X{NWR8lOCv4uX z?&MrqSF7oc0~TT27Q+0}786)rqS)Zh$+p-5+71TjgrU*>8;s5qx0=ELVI1yzdJq z{u8|pERh*^9x;;XSY#!tr)rB8e24t%6e*yQ4&>FDb0jWtD7>%h!eD~qU&cb(2!lFZ z4vG;j@5-hOACr-Df%}unVU^fgNv%61FziMo3&c{1uPU{@19wN8MUlKBb~ zELg?s3>^6c%eZ!-cGXT)4bI$m%a2D&NY%`^g<^G0^pMF1qi&}7K%<&t&gFSjWxWGV zQ5-$5D@=R97Bf>SUnyO;_!wJL@T?1`Jj@Jr%f-ghvMpMnNan(0o0>hk2IbL^AZ+BZ zDAKmoBSbX9%w*}2>tVBX;a6C)b`=VdKq}QrIk%%ckx3#it$+8nt9&8t30t>4Ewq6t z@{8=*cti0>+WyK8>S=;00AcUvrAe%3BE+AYItQ4Y+GpzEC zZKvIBG>b7u+|&-h1gWU0rkm@VO+hs9vuIN5$jw?$-v%)kO9HexSF~7eq?>WdRE`TA zf?w=tU1;$-8m)5tUEqg9y>@gw8tnJi!0?a8F6J}sX&~ed=!CN?FaZrSWl6F$UO`hn z^klRzjAG1iCqR=}{bsjN{LZM6Ww0HgF0^kW*Kl)Pql6pfO3KCzB%Emsr@}0~t5VI@ zJYlr`&aufnkCm*04F#cA>1%oTHZDJ2@}MCX*_~fEj@WXQ~UMnT^8Gel3eR7;gd(Hk2-t zd@KoqS41dvcHG<|i#4z1=1aH1;ut?GjCVqf3|jH5I|LkSNdM zBK5GfrZL{I*!a&6=b}v`0sABdOPVJWWvgJ!Ee=q{qW)RIT(xe|D55H=AlORDdJ6y+ z5?{ekU?Z*{AW#zf^IbwS2eXLHKw)eX7P`iM_0iTp zk_Ic4t2g9d#?l65IBlmC-k}>I)^w3`rFqQlLJ&@aU`QMxi!N+})bJ`KnksG;-|v;9 zh>U;aQDEZ9@RkBme9DwvS6Ylc+*-i%E{r??(OtVQ#N+5#lI1iOatA9yD0sJ^X5oup z#$YMe0iw}u|GoscuTp{2VOzMqJ+E>NRhU|CyPHsdn3l9N*bZr-jZB%E6E`A*nCnQ1 zu^Wmq=nzw}oS*fx$&Z`!1`RI2O6o-y4uq!Ai7PDijwzJOynCx1f_@4#?h`Br%*}mW zvHApgh zG#DNB+i-Mz)EOLocRDzF-G9?R8nxj~|8)QRy`$0ItHI%5^b@JjcZ1PUe`vQ4?722h z_D)BG{kMmEr*QK2^yGNhx8ByS7A8EwSWV|L(}GqVXl2Gmg>`jdd9Gxx1j2Lb@B|9V zm6HBd7B|S3+H9lNMM|-XH`hXwW!EwiWteP@x?5+ZY;3sDx*W_}-TS%=howld(xG5u zkpJlbBfhj1%6@caqJdlugVhJd16OnM~q_)HzcrSt1XvODR^%z-PqDWx19F0Ha%0XuE9`^=yKN)lwu}(d$Dlnrl~)Je}&N zfoD-7wKe)<#iDa=G_1Y|?nQN z39;I+i(qE%ov~k99rJ3-3ayZOPBd0r%ax$SHQL}c^cD4$Pq+C6+2l-%ay{Nj&ab6t3Y!BjL87v54J*O&s6+#U)=%t{C9VPsQ;#ycYG${4sY;a zmHT*yC(KfQ@=H9Q55KFocmVF@H68*`*S^Q|S8r}!T{m9k{{Ped-ocxGH;wO~#`XLE zH@BZZU;O>&t*vLP-+z9P>k;hb`QiQ>_?{;z?9Z4ot@rAPP=+W zuDmPc#+b!ZzTrxBtl|H!t=?9**BK`T@9K-`dR1BGJhR)F>eklQLu0$%YT2{6E6<-3 z#OCm(zyGG&YCU>H0Ovr$0QxqSgSMt$9iRxO)wvUB&!|UR|EGlzC$?*MbStbv9kw`- z2q!XP2}FsYB{o%L@L`5^6wj%Z54)|_hYufG{|jojAvnhoe6NFh-Kj9MVvLf*dbI7r z=+;_LWG#$wV(U(brSdcl!8OrFQJg4FK1mD1b?YhoP>i|CxZxT$yU+i3>nS{aYWx56 zY3nJxA56f#8UHh66HVzgZg)GKzH@K0lLIpir8`z09ZDOa{pWUjSUk^IDk3QFBO*i& zNj3v#A-N8<#??tHk4`vDe&;C!ANdixn zY$hMRDVUS6(UW6M7J&=qM3EIWrB*g^^GP zDLs8k!k|M45Y4=HJAi<}>2ME==S-;bom&b*bkcJF!<1)AGw8^|K*YM(`d07R*X47? ze}zuQFQJ2vT#1e@#=pSE{>%NNjp69!2|pLvbmQ>lD=vP)PscAqkGX#oel1BwT9s5j z?)1Ka4$+F)T*LPB9q5S66@w1{Xec9ge9}J}4iC@vkG?xQ*&BUNPk3gtF&Eos5rd8v z(=6oGlT*ej49=^%!r&c$VwN8vbn)$S^vjJfi!*ZfD%qFiyx`CI+(?W? z62WvWbozfSfKE)4Z>=u8_VL^L*V?zk+PC4T_7w+f%{EPpnR(9Pg`}|D z>@Vkfi9AJp`-(5f*p5XRq(ruWGh(zQPDG)EJ2b*tCmmOY#L}54nG%~X!@kwNTwU^) zb6xuqmP~}e-P)Tm1#rC<=>yVx@`D!FE8DQHW#DcSP8YlM$!IfqeLbQ=wFjo z{Z2eC-wu7UbXeVbYyY&rH|oRNVgJ-xB~sjXgVFck4}XNm#QbBhWe;9`>uVkCjrLyc z4f_y}sU9V$sV;pwes|PAg_pq_cKxIMOLlxj~@MbWAm(bb#w#+`1 zdg$$i*EmYiFGA3bVmalxe5<)aSaWm9dYd$k0}CpwFR0}&tV{O8+u7{)x|>}y{kJ24(4`LN zUfyhEu+jn;Yp7)n8fjWnMkRISQ0bb2(+6b`ooe412|7;_YF!N?;e}3?kl+jMZCSn{ps#fp-e#@`L29fGEZmz^_#!q>=63J6rR5;ldQ0RR7yB_=)qx&Q!a C`O2;U literal 0 HcmV?d00001 diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/mecm-mepm-0.9.tgz b/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/mecm-mepm-0.9.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4f5c572f2d250002b82e96ec2787078fa85b3b85 GIT binary patch literal 8135 zcmV;&A2{G2iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PKBjciXn|XJ6}6%(eHP#92v}oj6I|zwaK$R$JXVwvXl9Y)`kx zfk;R~O%e&{2_FjAiz58Zl*->c2 z)K|UVOshG#|B!>_;$K{8A+vqB*=eynFTZZ|x?gX!Vy+`4azm#M;d`E>5TUBTSSt9T z7;%+x!*wfTDc^@upISHde*WlzJ{(Jr%KmRyQgHoyIDlL1|LM-N7ft(ry1Vya|6k(R zyvL)p2}d%YD>0cG*zN81;QNBjxPVI@O*5IuiQpQJWVa0`ChoR2;Y36{(>#VEi@5?b z<#3p@Xv+PSHaK?#yWJi<#s(Yi(#F;|txcHA0#Y`IOd2RO2Qw8K#v&DQzGL!K_-55UC5DPA_E4I%;zA-VLM=^wFxjaCg0!Qp3P=mMtpXqnrtVw zjov;P9Q99!{myQ;*V=?PS;Dmj#ore~@fb#PV0oU1h>a2s37dgbz$S|G7>qO4*vy#Xtxbr9HcE^NQ zUR)fWUJm+0IJ2ge2xs5I;pva?!{GF|4P2NhSHM5y3i+1`1j>)oj14)j zF@Qk;zw4YwVk{y^ST-rxgu_JMaFvN{0y$Ty&^U`4SQfW7ArYxC%+Q&IL3LaAs+6tP zB#|SQ?6&|!Ho-CBM*yDTM8x|rW{Ku40Id^yMe|5;bBY121<1Y@+VCvmD{chPMk+Sp zM+wuK?t^TsJ5eHdW?BG}6=u3?@5YZqu5P$GjN^(M+tz&nilhFszc`3(d~KW_61V$c z_}Aa2H-CT6-nT@`CY<_8qBN43Q8G!mvK=a(OD&94^L@}W)n$1{%fd`K)26f2P3Kdx z+9;7l+>KQWFHb{xHj}XFOuY3CL)^e!(e+PGJ*0spueK;jw_>nRuk9!ag! zwcP@E=I{`iFh?>&Yv3yApyLD+O?hpk^8W=F!j4@`RU3V&zavvEDk?s^!99sl|B! z9M|1l0nB$KP(JiFNszE*R5a`xTT@!+C%4S;Gy`>a{0}dOSLY{hz8jog9lyFd zKO7F66C&aAij0b0MiED)Th#Z&g(gdJrvinP!ZSr@M}ox zMkYndU(14W;zpM#p0@f>s-o6OYuO+x2pe%_bfXRWjI%76?}JeVuhaSU*A9qrDI!}% z=muF^*QIPtDRmY|H|+$L4x!l!8Q@vay%kC*k3~|=QCd}~PfD1#1xlcGvPOx8;i+ya zQ^zVp#JZ6(3#yXS_*Ps@Wz6@X_x#zj<$Y?ZkzAQXuj%`iMxQ|Ax~9o1Xe?{AgvMuS z&TU#VmD(yyYmvq68>UcwYBh;Pe;+7R%cbOZ&HqpcBI2L5Ja9|?x7*u&-pK!U9_s&J z=(ty?{gD4X$>u-u)9CnD?J=v>R1;4YwHd5Z=Y2Mz9s%Y@9ph1;{VeZ&vqW- z|Cc!K)zv=4|A+YhCy)Q1RsXHIz|W`w*YE$_I&hPVd#nXFyMCw#-&;MnCfZxaTW|e2 zb>VsscdZRCDu6xyn)Tt6qt{nQr%7a`EyIu%u-CaQuaiPtE^7XC2_y`u|>Y|JT#qo!y80 z|4SVAnrc1d{}1{9pFIEnr22m|B>u(}|CXft^VR|y`QEzqfM<7D52$zduqNLJpcQJj(c^r5ApvY{{PA2f4%-cbRKQU zmoESWW#dmM`-gW`NPysmEu?JJ+H8EnT0otldsqRecUZ6ce`2Nk9*X*RsBf1y-&Wdg zj?5lByV(y5B1@}s=V!yq?=Jeot2e{`iW0Yy(yYJtPgz%9TTd=oKYn$mLEojIOV1Ei z*Y8%)t@jw#Kw}wQbJgLQQS)4i%ydL1Og!qw%geid+^*UB(r$R^H&k{*eyPwVM&7^t<|fb7QtIL*Cx5DwtYR z{lrW*UdiceJ5JWYq@vC|D`~Fhx*^n^M&U>pZ19$Gt+W2mJql|NrFp|4#M4I&{10a~wPrEN3)_=apu?gqQ7_Kr+K8U6tW>cQQs1Qj^=F6gMO1)Z} zaEb0!7ddG%=qXPUK>T7;R`OknC(MW&P9QHhZ!JIL6S8}FoGU&SA9!qi^53?)fKVJ{ zMt34h=r|w|8Sl2b$HS|kk>nANWSYth{&h5jSSa1m&{>7A#g@(a#U$?rs zlE3iCw7MeZY}+y~!Ink1@qWxY705a|t6sPg#;c%2`Gz#Bh}oPJu{f zvAv66PJwV#@m$Hci12jV*XFXgLSZNYrXfa>7W55yWINdbGgY#fOyO$_FA=@TsGz4Q z8hlB$z*tmbYdOofLSV)-Bg~v$DJGTpZ=&b%!je18lo^DK6U8#x@mfP&B?ElI66jOc z3rrLl4$y&P7Ev#ri!26~_#|Fh5Q&!%^%H5gve*WuIF!qb$aI^qu;LC4M&y};GNh7; z$L`EHf?fF5fzP~92%U5#)pEl99BsH>HfSgs9*Zq|tDJGw#z4X&Ls&PnpW7G@BW807 zulM#6NkBo$GB)8jc}Q0m(bO^4#sEsgAI&ZIjQS2GGZUyyQo&;(w(RuismQUXu^5{< z#=Z!N>GiQQMOWC|&drYsW?^9EuR%QUuRUZLnr;=Yc7ffWyR z*RBt+T*m?XyZ8znyV6-bC81`GKt{0rb zOsZ?*nEViGT4e$v^TQ|&z>3ZdD`hbUcEdzMY4Jif*hX)P3K%h`O04t?-n(Veh=`Z& z%}R>LNE_XXF&JA&LY`aK#bcHM|G?5bp;S6o@6jz6wdvbfGQGrXrdK&Va|lNQLIE z_>G{cL@myw%d^|S6E>2{f0N2jb7)PjGmLWdl0uR`gV|IjWE6l{SY#|&GUto_*!!t* z&HUTY6rYnGYO|X=>fS{S#Zy+k#6a_$Dbf^_3k@UXiYIeS6s}2dBaxAwU^c(yCtYNQ zt1*ixNVJ0(SqgQ5DU=SE<7(EA(3QIwzjVf%Hc*;uK(7>_GdLehOFpo(+MJLM#}0}3 zo}`rx-6hpZ=G%c$81(uwV@cxOwk}4gFwS{++(Ft!oD+M_6o?S{@da4nXPLs?+Gr61 z74*tP9`$|1rz{zR9Ipm1cZ>G0QI2WD^=0FI>6Yafs8FM1CZaaZ!iXiLM>B=@QMoWJ zGADg-?+Pu2&MQHooQ$rFh2*c>YeP}#yFwZ=3wVN*i3D#>gf_YzhO80_>A5yM)u9U) zS{EEcNJKHxwXoBVkUX_iGT1y zsE^g_VQ!=PUes@b&al1Rp`h=F0RESBi~$^ za@gJiZ-qRe0MS3D4Wck*8b+LFpm@Z|laJ;#I+YP>{=VRuNsw$LRW5C~M!*}GpLImL zUHA@R6_Ty0?H*adu&}|^>FUyCCNQ(mD{~f2ArKIt3mMHViX&X`qbz_S!ppfSSmM=h zCRGy81Y(U$W*wS&EpF&*Cz>)f!Nf_^r&0YS71bw!}+Xx49 z)Z+zDSGjZh&`~l+Ma>g7Z&zn>u575)bjAUTFmDTCe(8$|EH6-863)rD*a>IUXaS{U}(saxs@{dF2`DwFp+B4HW=J!ZaWF3Tl&q6 zM_g;B1X<@;iEQFC8ZLb73l0CV-U61$jJt>!$#f*L64ldf%^UoH{OS}bppg#b)tPf7 zW;hi-)^%Yp#`!OEA#H>~oh~QE2v>Jy6NZ<`$+^V+aTTyiY^|i$9TFH0Ba#K;C;Oe& z$PzZwg)lhOgimY`V5Vfg!UPSkxX!^*Ot6e=mugr2MAhWX{jmIeq=Zz>lv^lP*F+DQ zd@|}R#U~n-jk%ELQI(AjXrefKURRj*fGuXGRK8NWZt*d;uHac0E_hfO>XwU*rDtn; zp-AS!W1E^kT7&XvN)R^kSQKg7>JcIuVWzT-$n~_@hVT`htX-u-B#=tAQqJuxk7bg` znT_w>ca={ZK4x2Xq=hyxL4J`vn{Ox{iJabbUxU6feC&8(py8ryHDljU81*zq0Zm)D zsh~9GQJBBmqK-lpQZf}8>WR%BYY##ql=CW$ePZf9Az^UaPn~iUP*&V9k+nT;4pMl^ z4zl^e-~z%W!Ac?8Xkk@!Y&-34qg#wQ;-+>0CP+n1Wo~Y4wgj<+pQcN#BRA_keILYJ zED6x&T+w2=kWVWIXLQXfZ-pEUCd|N(?G}_ z&|=3IT{4uIyx)sZenT2RSe2CX*_~gc*SaXQ~UA zQ=5gM|5_AtFy90oY${zA`B)MpuZU3U>^R#Zk2SB==F70b;ut?G%y&YK40`dbI|<#z z653Y!TEsQgp?r#ENR(%Bk$Tu#(-`kqZ2sq`v+2`Fz`lsVlI6xk)hZZqivv{A)ITej zRqGZ@MO0-K1Y49aQrw1{PMUYEigE-FDNI)1z8hrp#0tnLuqq_9)qLD*-lF ztx%xu`pr=|Y5YT;h)7`iOFae)BxQYL-b9f>F)Juztt?$tNFOOS3pp0*jl$~lr=(^M zW)Yi#!q_e>bdCM$qrLxB8oa4oy`lIrk~S$rvz<_ShhcUA0Eoo=4 zozg-ZnKCseZbSz5M-E4BD$1loOvGY+)?1UGHx~_-ga9k47hO0Ono=jOu+>|pP%iWC zopuO%6Ii-Wu$(Yw`?_NFG4je;G;OA+VQXP@eR8*!Zy~f@{KjpBJ~_3U34=0eWkJ=x zz_u-_TTxL$q!wMQ9K+?{@}%E})3ejg;Pl&z!RdGX*ZtGWHoWd%9DRRydU^P2a5A|3 zkyPm0!R2XxXtxg>x<1YiFD?g1Z%z&`;QY*~VtT*+Jsgy%HiF%(oQCH<>BZcs0^)kdw0lyVjCu7xJgu4N?3G}$_Jx6Vq{*l?kB zF`2cx_p%EorAYCn6TwCzp~dq7Mqc1IsJqCA?IV+rP_ffYxm5F@)Z$mNj8rBp8DxBt zhzZXkzSS;QyW6!=Zdv)cRo@?5pr9e0sHzdddeuQ;p5$YOF*?bfcCpqMK+N|B1T|qml6=b*qW|jiSN{V=xEAN zL|g$=cFi24cp0m8k(g$pOVTV#A5+*fB6E`&_|>pt@ObT-xaSIook**&6Di}FNW$9T zHE1LAoK1L}FhPNgkC{jcWup;G#zj_v8w!F;c7jAQO;LG6d04_+Z?#De5ui5cA-8P7%7-&9%8$xOTbC zqtIw7rLBTerL(r!PBm9xFy`b>+VnI@ZfJu#4I;N?Q0M*Tq<1{cgemQ@T)j;^?;uBs zt3nZO*+#d6$k#5l(32&`=T}14mV0;?zLzu1glsBV3XJ3#bX<*(cC=(kuo_ZgZnrE# zMO=3p9ckr8iC;oG)hbHm(W^>Ppa!lcj5(7STmOs(Z|$9AGcIKl^D)n2d&g8J@siRx zQz>~O53WloR_0tNRjrn}$}!WLD>NThL~SqDjYo3_HmU*5Q391rOE5nRv@w8;!T;XJDWqyao+tAqk5b?@Vr5pYB>}+Y9dBs6Z4~utf``>o zBwW$cLoS`03}3DoIILN_oBRKt?L7Sc%NIE|;V{onj$Xs}JW1hb%9LsS^tYd! z3IF^U{iWXD-WKVktEUvoyFzY{SUlm|u2si6{=e_`cDudKC@FYX-%Pfun`O>3yN#*t zZS8&NY`0o1`!4P(^5+DxIlS&4z3#SJo0|l1jwKABZ%aAoYx>n2Ea9Sh?*#fY8qx0m zY9Yjl?b;ok3U8qSTO3G)6B)6@{jPQ!RFT2EDc+-aPQAR_Z?)dNd)N9OP&*C5i!{NH zIyl#z2s154C^@{3wp|$A+6bC#ggH)Z!wIoezD+}LO|(%I=ZaHI(!y}vdICQbBd#)T zxQ3nX^Z(g;0#BaU@jrRedICQU#{T!Ee}-(V-HS>Ilw7=ZPqR}1GfP^#-!bn{*$DkV zx7)+wdB#!^L3th#A#zBvL4b_ecc()*Vnsilj^+k0b}dT>|CNpPmBw7;O630tuIJ25 z{Z)F)s!heEn*Rf|L2kEK&>)_g!PstxX~S9AYb8;it9Nns}3&RnV*moF(W{^bH)tCN?tMMh)ck|mKeecyFtcta$}#3CBWi7&smz-%q>ZRo#Qh1<>`-b?)!)J z$4590Ao=YFwzqsOUTS^p-1WG7%Uj!jY<+}x^lF^owL9-taX-L@!7tt4HrjU!zqyZ4 z;T?_ElQnFzf?k8HVUs(En8^0JyG#2F$X2iaxn;D$dxCBwdzj4FTrc)VWS6{UWEtg; z@YdBzT~Th)WSV5@2mhD!MP$pT!j)Mk=8w>)hV)qZ`hj|~FMD4mKf*uXUb?-kaLwoLl|Adot{ef9t-ri| zrJO&)aCn0BP;I#1I)nfQYAbhKJZZXF`<^!BSSB zla~7r6P_u}pd$+dO0z3Bva4%8@8&#(-QKg8Wn*e7vZW0>c`?FHs-B2nf4%G@zmD`v z=opz_zr@aHztVaC_3DmgVX8(s(;6w@|NSR;Sc*K0)I2vlzFN{pi{Sf_;#MxG7>kBo z&JmhSi9jQJlWRl!okSG8PxzOa>DazHuFd~x0dzWJCDYDWB>bTCH3v(iQt30AeO;gN zjL;rE*ZFIg3R-TO@##gxm8(GVwm;|fR!M2X2K&oZCt_ivrMeQaE_Pa15B?rH8J|H1 zFS!;SU5tK#?W2RE)9vBq!8yMc*<}0V;1w6Y;HR^L5bhkEhF?okkya&@4|~0@p+mG{ zHrMd<`5x(xZ3Z3w!B9E#?7V+E9G+Yqoql_Det7vkUE!H6rQJNeiWqdXm}DWZo}4nR z&2n=am_*+ykNS^LEH|4*n-1f8cklUXop$X@)%L$|u|nX@?(2g0^8OUbhriyjdH z`Xu?&{YQsR-uN+`iK9bnd79JXl?&`BQ@3g4%NpRFO;_t=mCe>g+4#Dyb)-z=>q2Wg zUiS}dVZr}OmdJzw{XS{c&%~qhf!W6k@9*1c9bNPfFZ=Lj*uSuGf#Ubu!R7bh--ij0 zNUt7&ZF~Ic8-LgF;pO40!(kud5#2{Md%BlCoxMHnU%)}|&|&}d=LIDvII{aNAf zn^YIig!d%EaK)-d{$-&D))A~}+5EYx+wZu3sn6+mXB)TJ_&Bg2%Lboig_RTs?ghOx zNp-{#+pU1v2e*e#yt|H;57rnhwr+sjgB4R%1>3%}rXam+1m7|){uKog+_5CVuBuh2 z6>l;(_@GqP1{UrWDtr@Lw{p8_+){6liQ6}Ww(J8H%oA?t$(_2u?fJT(JDt2x h6U*5jUBQ1i9*&3O;rP7c{{;X5|NlQc`PTrT000CkIuZZ? literal 0 HcmV?d00001 diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/mep-0.9.tgz b/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/mep-0.9.tgz new file mode 100644 index 0000000000000000000000000000000000000000..490d9efaf138e4ab1991b1881529cabe6aeae149 GIT binary patch literal 10948 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 literal 0 HcmV?d00001 diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/servicecenter-0.9.tgz b/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/edgegallery/servicecenter-0.9.tgz new file mode 100644 index 0000000000000000000000000000000000000000..72aed5a97f229500c45340db64935e5baebc9145 GIT binary patch literal 5615 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 F000KLM9csH literal 0 HcmV?d00001 diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/grafana-5.5.5.tgz b/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/grafana-5.5.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2c67c809fd9de065bc2d0fc2ad19f3f877058259 GIT binary patch literal 21051 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 G*Z}~EZ+Dc zVQyr3R8em|NM&qo0PKBxbK5wQ`2IWm6#bKTe~G;jCE1BHr@d^Q*G_hPmpCpvlc}v# zE`rFGgbfLB08oxL_I>s%Jopr4J?wMlAxzaoCL2Jb(Juha1{=wC5K&~Rod`aql5&Qk zb37qJ`7;tnf4F<;cDvo@&z_loyWMX6-|q9Lz5KU%-h1}+`Qabn9=cv$QmKgeL$`a^ zcIt!sl@yZD_bBwN_hH)eNRs4#9{4@K>xC!-K@(*j72E<;0%1T>#bcsq0444LH6aR8 zi6P8*DqxR90!cW7fU^-Drvk%058&+8B}f!g6is8iNTvIG&!aR( z>3b6%V;?3;C9>b?jH#NWLqFhg=W{wl!BC-WQx>E{qPXbb7lne6s4W#2WQ-jp5IZrE z3PqM%UpOPp=c~1&piToez_ny_||M|heR{kHN z?7#_*NE#`yQw}387BH>v?ZCSUl}7a8A4hLqw?|yWL@5kmL?hGyCm2LTAWVs%WEi0Y z#bJn$5UKS6Wr|y+pfFA%qO?SN0+Waa0b#^lRk9lNR~v^1Bmqi-Wpvg`<}N0ued0bnVKM6THKB!B4t(S z^*vd7r+cxZ?t>C3dLFDMR1XFV#HL z+No%@ikCFFhK@1H?@Wc$G2=o{<_O9-`xar%9wQP-trA@mc1Z4NX(W|iHR5YFUstiV z?V~8-S1>j9!f_vdNeBxugmA`4YzgiG5DjS!%S#Pm^=3iuH>f5&w3bY95Sq7XtnD5j zN*%3B;i8!JuxIf-%de-0Uc44a5X_S zK?f<&*(Q(^o<^ZY%u+s_CaO<(%2dW2_HUs9vO`&qiSYee`{m-J1h(QzuY=^ zK20!6P)J`To4SI_{J+EJHUDqF+w1Oc{lAAOU%z(tU`pe@Q8n6&Q?mqL#F{L@1pBbp zxw-K)lxIw2XcSCYi3Mh>z;keIZSyHZXf1Feb=4NM3t;18_;$lV>tXQU+r@{5d^<%U zXozsF6(0-W@WA|}@nt$1(J#%n`mpOqmn1ui<&4Bi8 zvOoT4M$><>`Xra|%n4&#@h>dZY~>u+%G0$GOax_W1g$^G_Mc>{)|%~i9kyHayTXp8 zdDg<@7VCPB&0IUiu}~2iVzl~vn@X*Pqbn2N{&qV(aIM!<5eX1le{MnRQ)^vmTZ&q3 z;nB#E6<@zrp+2a!>g01CM5$CL{D=o6>U{m0yGJXCkiYsA*A=95DS=enyp^Z5>X9xc zUj-~%ENMUhfUjS3DSS*>5T)TtgWg@#ycu7ezO{~8?ni5-Mix@_0#z!Qp(IHX!4pA^ zp3XNe&6dU7lAu9u=3$CPDm0ZCPf;B6IMLd@_170Yzt?SdwGfen3~59aMd@pc;Hvw7 zrz%6I!mGMhvuK(2hNwvIHdO>I{G!mTLS+N|JcaJT{x9|aoX`j!;ilVxOZ>n6ZnszW z|DGQ{+xmYGQEFO53`vmbj+-0rGi6~Pjx7sZ@Cd!~d4T~YshV&>|78|+{^#$_QhwU= zVpJp~is*%+F=S@R2wH~wu!`=@^sZAZ#=5Om(;33N>I4NKoUGMp_{6j0rPd)7Bl5{{*6hi|r zM%8)(t%yqV?-fzOME|f8r+=B9A~f|j=+JCrt=wyxgrvDIXPzBbH1+Ht0&T!o9OsH- z!YMK}*J42-hxHR^C9c_;D9l?6x5H!^qJn}cA08Fz`_UXm4kY1Www+}R1H}y1;h2{X zk5Y-Xb~Ha~m=EhS;>X-@lx)b&cF*N^Ue>YyL&`$R#%sF)OYDDdzjs)(|N95~&$ssf zA-2VSzZyW#dAf>Fx zNs>sdv#lyP$tS*|#5dImzXkm-6AWDVNkju8EmUSYOF=BQwJeOqj#!ysmQsasl#8p7 zot2sjv0j(FF41grsx7r^S%a?U(tMk48RN>G+PX*1Zy+p$$Ju~Nhr7G*xVDM*?>+x; z)h)E$0&f5rOfXC%6h4WP3Gu5z1C;~iN18PJKP6|-fD_!@JSt)DOpbjJRmgl7LN6sX zK*mPq_nZm82h*QVPkzc$I*2cTD#!Dlq1``795vUv2FgNY3cj!QQXyll+w5?^0LYK~ z8@kJ(H|c6FoTGqji1a8);e5qw_&MbYSMS?|rJbiybcumLB@4j%o2FsU)m~}%?tIJy zrDlxRE|hcmw5PJ_N)#}U{34_dZf^Q>uN4`?%}uM`(s?OpZmv!dQCG#mZZf^m zj9bFKJc1I_3(i#q#)a9P+ZepLy|NN4vT1Yk=NE6^pI)B6J$rfa>Fnsu%Ub&;5^^;$ zoIBX^t3xgNJbQKd>GI{p`dlI_ZZ zzAA9V_Enj03kL1&&$nCQQa2~_ELxx7nnVp#8ij9oSYuv{6E!=bHkK$qLn-UIk@U+! znAPe9uh^Ks${}Xw)9Q$18f>!2%h9TI?LtV4;(|$6n|2#-x?oxtX{Xgq^M7w< zn#-oQL9dl9Z_Y7?jVkS1JHfx>vUL4dSFjtb0+;Xq)z^Rf-NWv7{r3>%>(^WLXZz;H zt9>G5SBK{{UD~ilOs1RY&)gRW&neD^N*gUeGq*b+2?>l3Y80_Of$BrAYeHNz=On~F zyrL1xnN%2i03--dO8vsA@-|!`34an);ae7r?P~y zE2`r2iFxbu4OHQB`L6{m%+_}Rm-&AOhjZt@`v<+P{69olC+MXt>=j|SJ+RU*PLj{- zfWOS6h3f8EyLgg?c;5SoLL%stMmR3MUvpn4o@Xy!%78?~eukexXl+6Th9`n2<+XdJ zDvw^j_G+6jZFnTjKI5b8Pd1YJ_k>GzhU$uo&qW9N;pzEt^}+e+NeP9N9myXhI&~`2 z2>bBpLO(rXvqwhXzNRewviN%y-U}q*TNceOI9G)!$dKJ` zI5d={`u{G0zpgCR|8@Vb_x#{+8~^hlWtI4!ZQw6NNJ13thzFl38*k##t`h)^EKE3U z2wz!C%1Ziw)4)$xmhS)VAIyFKvA>P~d62TI{@(_E-j5mh6~us6feX6=xyi#F7yAMJ+1qHz25%z{O3VRP5vA5t<^&SsvmV0@#2*FRo7O(7YK~oO&WX2Z=uObZ zsoXH~At8dqs9adCm>68j#*mQUGZ~}I^S`=ek`m+uqX@&JHT*kbRIlT1diwz3~eOx|J(K9EsJKrnW?E!f&>Lb zl%enWCzqeJfkAHvj(Hq&2JeqAA*4cj{+Ozc`M*Wq^N0Tu9rOR}!DQUg|I7ZAQ`RXO z8j|31nwZ>Y(%bXpRpRaWL-N_%^HrR9d;jC@z>E*}A_k3x=?yc8JjJPOg-^^~8kc)4Z*z|4*Z)XSIz5dI|#a}#cFc<`! zNgkp1N6_vtP$m_LB51cIDk#F7UwrY+f29}N_j%F5FWOJSuwz^ysmL%|n3jGp7bf2TLl9^1h7S%3Fp&8+xsBI1D={wY&}hiRalG|dFmm#0cTb2w%dzJIO(dA43Z>_@%fiz0|LxCS8(w~)(r~@5da0|r$u@Mz=xBo6Jnvmj zpi(kYMb%3TMU z4zXubnqLCKicGvCg+g8t5t`Lf-f_cx`6k)>he~@NAMaHD-UW$9&LE;vSsaTE5Ub~0 z_l0hQFco^f9APb@p7&SS+j~coy}drXrc$$cl+BcMk}@z8qPwz^{v)G{ra#SIb!;Lz z^SV6OCGFHW?XFr;V}51?#(atrGBztQZNTG%Go$&4lsup&zkSYumLcuzM$RPUd}&4E zxJ+l;?}$eczcORB7n2l3&u3*ARc62>aLp7Txa8MV4;)L=Ak z;pZ?qFH=T?-_|A!)^q~~P53A>UNnGf$ReWalh%aVH4Lh^?yNC^C47ps0uA&zH63dZ zu%9d3PM`8cKWnj*e@tbn~+jE`<}gfa|Z}2QF1P zsd}-%Yl1dZc}x@F!hEuzYwoUxk9IZ}%HTEpjYu^9sKdvc5rK)?b$3n~ZgS9r+FfC* z3wMrB`4Fl>@0n~Wz}+F$WAw+q`Ltt-LcTb7wA({86F_Wor+Ko{1y#C82fZ>-c>5xG_H4?f+kAS+M^f(2hc>+V^q~ z?DF%!r}gi@_P6&xKTN6KZ3?~p=YH4k`n@H0ESftF^DJHN?{7VpZP}J>*_Lftz5H(g P00960P(_ht0D=Gj*EaE4 literal 0 HcmV?d00001 diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/nginx-ingress-1.41.2.tgz b/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/nginx-ingress-1.41.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..00bd24a18749c8f6c5c6522563251debedfbfe5c GIT binary patch literal 24348 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 YwrtC`tfBmW0RRC1|FY^Ob^z=G07?Pq)&Kwi literal 0 HcmV?d00001 diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/prometheus-9.3.1.tgz b/ocd/infra/playbooks/roles/eg_helm-repo/files/deploy/helm/helm-charts/stable/prometheus-9.3.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3b1090b56333c0d9bfc3fe96a75026729802c25b GIT binary patch literal 24108 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 literal 0 HcmV?d00001 diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/tasks/install.yml b/ocd/infra/playbooks/roles/eg_helm-repo/tasks/install.yml index d64cc10..32697ed 100644 --- a/ocd/infra/playbooks/roles/eg_helm-repo/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_helm-repo/tasks/install.yml @@ -21,37 +21,37 @@ src: deploy dest: /tmp/eg_helm-repo/ -- name: Import vars +- name: Import config file include_vars: file: ../../../config.yml name: vardata -- name: Adding helm repo edgegallery +- name: Helm repo index edgegallery command: helm repo index edgegallery/ args: chdir: /tmp/eg_helm-repo/deploy/helm/helm-charts/ -- name: Adding helm repo stable +- name: Helm repo index stable command: helm repo index stable/ args: chdir: /tmp/eg_helm-repo/deploy/helm/helm-charts/ -- name: Adding helm repo - # yamllint disable rule:line-length - command: docker run --name helm-repo -v /tmp/eg_helm-repo/deploy/helm/helm-charts/:/usr/share/nginx/html:ro -d -p 8080:80 nginx:stable +- name: Creating helm repo # yamllint disable rule:line-length + command: docker run --name helm-repo -v /tmp/eg_helm-repo/deploy/helm/helm-charts/:/usr/share/nginx/html:ro -d -p 8080:80 nginx:stable args: chdir: /tmp/eg_helm-repo/deploy/helm/helm-charts/ -- name: Add repo in adgegallery private IP - command: helm repo add edgegallery http://{{ vardata.helmrepoip.name}}:8080/edgegallery +- name: Helm repo add edgegallery + # yamllint disable rule:line-length + command: helm repo add edgegallery http://{{ vardata.private_repo_ip.name}}:8080/edgegallery args: chdir: /tmp/eg_helm-repo/deploy/helm/helm-charts/ -- name: Add stable repo in given IP - command: helm repo add stable http://{{ vardata.helmrepoip.name}}:8080/stable +- name: Helm repo add stable + command: helm repo add stable http://{{ vardata.private_repo_ip.name}}:8080/stable args: chdir: /tmp/eg_helm-repo/deploy/helm/helm-charts/ - debug: - msg: "Helm repo added successfully" + msg: "Helm repo created" diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/tasks/main.yml b/ocd/infra/playbooks/roles/eg_helm-repo/tasks/main.yml index 52584d1..858c198 100644 --- a/ocd/infra/playbooks/roles/eg_helm-repo/tasks/main.yml +++ b/ocd/infra/playbooks/roles/eg_helm-repo/tasks/main.yml @@ -1,4 +1,3 @@ -# # Copyright 2020 Huawei Technologies Co., Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,7 +15,7 @@ --- -# tasks file for eg_addrepo +# tasks file for eg_helm_repo_add - include: "install.yml" static: false when: operation == 'install' diff --git a/ocd/infra/playbooks/roles/eg_helm-repo/tasks/uninstall.yml b/ocd/infra/playbooks/roles/eg_helm-repo/tasks/uninstall.yml new file mode 100644 index 0000000..6cd47d5 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_helm-repo/tasks/uninstall.yml @@ -0,0 +1,22 @@ +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +--- + +- name: Docker stop helm repo + command: docker stop helm-repo + +- name: Docker rm helm repo + command: docker rm helm-repo diff --git a/ocd/infra/playbooks/roles/eg_mecm-fe/tasks/install.yml b/ocd/infra/playbooks/roles/eg_mecm-fe/tasks/install.yml index 9a62619..6dbe665 100644 --- a/ocd/infra/playbooks/roles/eg_mecm-fe/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_mecm-fe/tasks/install.yml @@ -21,6 +21,6 @@ file: ../../../config.yml name: vardata -- name: Mecm-fe chart install and image pull +- name: Install mecm-fe # yamllint disable rule:line-length - command: helm install --wait mecm-fe-edgegallery edgegallery/mecm-fe --set global.oauth2.authServerAddress=https://{{vardata.centernodeip.name}}:30067 --set images.mecmFe.tag={{vardata.imagetag.name}} --set global.ssl.enabled=true --set global.ssl.secretName=edgegallery-ssl-secret + command: helm install --wait mecm-fe-edgegallery edgegallery/mecm-fe --set global.oauth2.authServerAddress=https://{{vardata.mecm_fe_centernodeip.name}}:{{vardata.mecm_fe_centernodeport.name}} --set images.mecmFe.tag={{vardata.mecm_fe_image_tag.name}} --set global.ssl.enabled=true --set global.ssl.secretName=edgegallery-ssl-secret diff --git a/ocd/infra/playbooks/roles/eg_mecm-meo/files/deploy/conf/keys/postgres_init.sql b/ocd/infra/playbooks/roles/eg_mecm-meo/files/deploy/conf/keys/postgres_init.sql new file mode 100644 index 0000000..76e94d6 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_mecm-meo/files/deploy/conf/keys/postgres_init.sql @@ -0,0 +1,29 @@ +CREATE USER inventory WITH PASSWORD 'PASSWORD_VALUE' CREATEDB; +CREATE DATABASE inventorydb + WITH + OWNER = inventory + ENCODING = 'UTF8' + LC_COLLATE = 'en_US.utf8' + LC_CTYPE = 'en_US.utf8' + TABLESPACE = pg_default + CONNECTION LIMIT = -1; + +CREATE USER appo WITH PASSWORD 'PASSWORD_VALUE' CREATEDB; +CREATE DATABASE appodb + WITH + OWNER = appo + ENCODING = 'UTF8' + LC_COLLATE = 'en_US.utf8' + LC_CTYPE = 'en_US.utf8' + TABLESPACE = pg_default + CONNECTION LIMIT = -1; + +CREATE USER apm WITH PASSWORD 'PASSWORD_VALUE' CREATEDB; +CREATE DATABASE apmdb + WITH + OWNER = apm + ENCODING = 'UTF8' + LC_COLLATE = 'en_US.utf8' + LC_CTYPE = 'en_US.utf8' + TABLESPACE = pg_default + CONNECTION LIMIT = -1; diff --git a/ocd/infra/playbooks/roles/eg_mecm-meo/tasks/install.yml b/ocd/infra/playbooks/roles/eg_mecm-meo/tasks/install.yml index e4de10f..523f07d 100644 --- a/ocd/infra/playbooks/roles/eg_mecm-meo/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_mecm-meo/tasks/install.yml @@ -22,24 +22,33 @@ dest: /tmp/eg_mecm-meo/ - name: Import config file - # yamllint disable rule:line-length include_vars: file: ../../../config.yml name: vardata + +- name: Replacing pwd sql + replace: + path: /tmp/eg_mecm-meo/deploy/conf/keys/postgres_init.sql + regexp: 'PASSWORD_VALUE' + replace: "{{ vardata.mecm_meo_db_password.name }}" + +- name: Generates certificate mecm-ssl-secret # yamllint disable rule:line-length -- name: Generates certificate one eg_mecm-meo - # yamllint disable rule:line-length - command: kubectl create secret generic mecm-ssl-secret --from-file=keystore.p12=/tmp/eg_mecm-meo/deploy/conf/keys/keystore.p12 --from-file=keystore.jks=/tmp/eg_mecm-meo/deploy/conf/keys/keystore.jks --from-literal=keystorePassword={{ vardata.firstvar.name}} --from-literal=keystoreType=PKCS12 --from-literal=keyAlias=edgegallery --from-literal=truststorePassword={{ vardata.firstvar.name}} + command: kubectl create secret generic mecm-ssl-secret --from-file=keystore.p12=/tmp/ssl-eg-keys-certs/keystore.p12 --from-file=keystore.jks=/tmp/ssl-eg-keys-certs/keystore.jks --from-literal=keystorePassword={{ vardata.mecm_meo_keystorePassword.name}} --from-literal=keystoreType=PKCS12 --from-literal=keyAlias=edgegallery --from-literal=truststorePassword={{ vardata.mecm_meo_truststorePassword.name}} # yamllint disable rule:line-length - args: - chdir: /tmp/eg_mecm-meo/deploy/ -- name: Generates sql certificate one eg_mecm-meo +- name: Generates certificate edgegallery-mecm-secret # yamllint disable rule:line-length - command: kubectl create secret generic edgegallery-mecm-secret --from-file=postgres_init.sql=/tmp/eg_mecm-meo/deploy/conf/keys/postgres_init.sql --from-literal=postgresPassword={{ vardata.firstvar.name}} --from-literal=postgresApmPassword={{ vardata.firstvar.name}} --from-literal=postgresAppoPassword={{ vardata.firstvar.name}} --from-literal=postgresInventoryPassword={{ vardata.firstvar.name}} --from-literal=edgeRepoUserName={{ vardata.sUserName.name}} --from-literal=edgeRepoPassword={{ vardata.sPass.name}} + command: kubectl create secret generic edgegallery-mecm-secret --from-file=postgres_init.sql=/tmp/eg_mecm-meo/deploy/conf/keys/postgres_init.sql --from-literal=postgresPassword={{ vardata.mecm_meo_postgresPassword.name}} --from-literal=postgresApmPassword={{ vardata.mecm_meo_postgresApmPassword.name}} --from-literal=postgresAppoPassword={{ vardata.mecm_meo_postgresAppoPassword.name}} --from-literal=postgresInventoryPassword={{ vardata.mecm_meo_postgresInventoryPassword.name}} --from-literal=edgeRepoUserName={{ vardata.mecm_meo_edgeRepoUserName.name}} --from-literal=edgeRepoPassword={{ vardata.mecm_meo_edgeRepoPassword.name}} # yamllint disable rule:line-length args: chdir: /tmp/eg_mecm-meo/deploy/ -- name: Repo pulling for mecm-meo - command: helm install mecm-meo-edgegallery edgegallery/mecm-meo --set ssl.secretName=mecm-ssl-secret --set mecm.secretName=edgegallery-mecm-secret +- name: Fs group value + shell: 'getent group docker | cut -d: -f3' + register: result + +- name: Helm install + # yamllint disable rule:line-length + command: helm install --wait mecm-meo-edgegallery edgegallery/mecm-meo --set ssl.secretName=mecm-ssl-secret --set mecm.secretName=edgegallery-mecm-secret --set images.inventory.tag={{ vardata.mecm_meo_image_tag.name}} --set images.appo.tag={{ vardata.mecm_meo_appo_image_tag.name}} --set images.apm.tag={{ vardata.mecm_meo_apm_image_tag.name}} --set images.postgres.tag={{ vardata.mecm_meo_postgres_tag.name}} --set mecm.docker.fsgroup=result.stdout + # yamllint disable rule:line-length diff --git a/ocd/infra/playbooks/roles/eg_mecm-meo/tasks/main.yml b/ocd/infra/playbooks/roles/eg_mecm-meo/tasks/main.yml index 77d70db..06e1be4 100644 --- a/ocd/infra/playbooks/roles/eg_mecm-meo/tasks/main.yml +++ b/ocd/infra/playbooks/roles/eg_mecm-meo/tasks/main.yml @@ -15,6 +15,7 @@ # --- + # tasks file for eg_mecm-meo - include: "install.yml" static: false diff --git a/ocd/infra/playbooks/roles/eg_mecm-mepm/files/deploy/conf/keys/postgres_init.sql b/ocd/infra/playbooks/roles/eg_mecm-mepm/files/deploy/conf/keys/postgres_init.sql new file mode 100644 index 0000000..0fcc8fc --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_mecm-mepm/files/deploy/conf/keys/postgres_init.sql @@ -0,0 +1,20 @@ +CREATE USER lcmcontroller WITH PASSWORD 'PASSWORD_VALUE' CREATEDB; +CREATE DATABASE lcmcontrollerdb + WITH + OWNER = lcmcontroller + ENCODING = 'UTF8' + LC_COLLATE = 'en_US.utf8' + LC_CTYPE = 'en_US.utf8' + TABLESPACE = pg_default + CONNECTION LIMIT = -1; + +CREATE USER k8splugin WITH PASSWORD 'PASSWORD_VALUE' CREATEDB; +CREATE DATABASE k8splugindb + WITH + OWNER = k8splugin + ENCODING = 'UTF8' + LC_COLLATE = 'en_US.utf8' + LC_CTYPE = 'en_US.utf8' + TABLESPACE = pg_default + CONNECTION LIMIT = -1; + diff --git a/ocd/infra/playbooks/roles/eg_mecm-mepm/files/deploy/conf/manifest/mepm/mepm-service-account.yaml b/ocd/infra/playbooks/roles/eg_mecm-mepm/files/deploy/conf/manifest/mepm/mepm-service-account.yaml new file mode 100644 index 0000000..9bf8e91 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_mecm-mepm/files/deploy/conf/manifest/mepm/mepm-service-account.yaml @@ -0,0 +1,30 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: fabric8-rbac +subjects: + - kind: ServiceAccount + # Reference to upper's `metadata.name` + name: default + # Reference to upper's `metadata.namespace` + namespace: default +roleRef: + kind: ClusterRole + name: cluster-admin + apiGroup: rbac.authorization.k8s.io diff --git a/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/install.yml b/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/install.yml index a84f9e0..2ad97c0 100644 --- a/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/install.yml @@ -21,37 +21,42 @@ src: deploy dest: /tmp/eg_mecm-mepm/ -- name: Import vars +- name: Import config file include_vars: file: ../../../config.yml name: vardata -- name: Generates certificate one eg_mecm-mepm +- name: Replacing password + replace: + path: /tmp/eg_mecm-mepm/deploy/conf/keys/postgres_init.sql + regexp: 'PASSWORD_VALUE' + replace: "{{ vardata.mecm_mepm_db_password.name }}" + +- name: Create mecm-mepm-ssl-secret secret # yamllint disable rule:line-length - command: kubectl create secret generic mecm-mepm-jwt-public-secret --from-file=publicKey=/tmp/.mep_tmp_cer/server_encryptedtls.key + command: kubectl create secret generic mecm-mepm-jwt-public-secret --from-file=publicKey=/tmp/ssl-eg-keys-certs/encryptedtls.key # yamllint disable rule:line-length args: - chdir: /tmp/.mep_tmp_cer/ + chdir: /tmp/ssl-eg-keys-certs/ -- name: Generates certificate one eg_mecm-mepm +- name: Create mecm-mepm-ssl-secret secret # yamllint disable rule:line-length - command: kubectl create secret generic mecm-mepm-ssl-secret --from-file=server_tls.key=/tmp/.mep_tmp_cer/server_tls.key --from-file=server_tls.crt=/tmp/.mep_tmp_cer/server_tls.crt --from-file=ca.crt=/tmp/.mep_tmp_cer/ca.crt + command: kubectl create secret generic mecm-mepm-ssl-secret --from-file=server_tls.key=/tmp/ssl-eg-keys-certs/tls.key --from-file=server_tls.crt=/tmp/ssl-eg-keys-certs/tls.crt --from-file=ca.crt=/tmp/ssl-eg-keys-certs/ca.crt # yamllint disable rule:line-length args: - chdir: /tmp/.mep_tmp_cer/ + chdir: /tmp/ssl-eg-keys-certs/ -- name: Generates certificate one eg_mecm-mepm +- name: Create edgegallery-mepm-secret secret # yamllint disable rule:line-length - command: kubectl create secret generic edgegallery-mepm-secret --from-file=postgres_init.sql=/tmp/eg_mecm-mepm/deploy/conf/keys/postgres_init.sql --from-literal=postgresPassword={{ vardata.mepmpostgrespass.name}} --from-literal=postgresLcmCntlrPassword={{ vardata.mepmpostgreslcmpass.name}} --from-literal=postgresk8sPluginPassword={{ vardata.mepmpostgresk8spluginpass.name}} + command: kubectl create secret generic edgegallery-mepm-secret --from-file=postgres_init.sql=/tmp/eg_mecm-mepm/deploy/conf/keys/postgres_init.sql --from-literal=postgresPassword={{ vardata.mecm_mepm_postgresPassword.name}} --from-literal=postgresLcmCntlrPassword={{ vardata.mecm_mepm_postgresLcmCntlrPassword.name}} --from-literal=postgresk8sPluginPassword={{ vardata.mecm_mepm_postgresk8sPluginPassword.name}} # yamllint disable rule:line-length - args: - chdir: /tmp/.mep_tmp_cer/ -- name: Generates certificate one eg_mecm-mepm +- name: Create mepm service account command: kubectl apply -f /tmp/eg_mecm-mepm/deploy/conf/manifest/mepm/mepm-service-account.yaml args: chdir: /tmp/eg_mecm-mepm/deploy/ -- name: Repo pulling for mecm-mepm +- name: Install mecm-mepm + # yamllint disable rule:line-length + command: helm install mecm-mepm-edgegallery edgegallery/mecm-mepm --set jwt.publicKeySecretName=mecm-mepm-jwt-public-secret --set mepm.secretName=edgegallery-mepm-secret --set ssl.secretName=mecm-mepm-ssl-secret --set images.lcmcontroller.tag={{ vardata.mecm_mepm_lcmcontroller_image_tag.name}} --set images.k8splugin.tag={{ vardata.mecm_mepm_k8splugin_image_tag.name}} --set images.postgres.tag={{ vardata.mecm_mepm_postgres_image_tag.name}} # yamllint disable rule:line-length - command: helm install --wait mecm-mepm-edgegallery edgegallery/mecm-mepm --set jwt.publicKeySecretName=mecm-mepm-jwt-public-secret --set mepm.secretName=edgegallery-mepm-secret --set ssl.secretName=mecm-mepm-ssl-secret --set images.lcmcontroller.tag={{ vardata.mepmlcmcontrollerimagetag.name}} --set images.k8splugin.tag={{ vardata.mepmk8spluginimagetag.name}} --set images.postgres.tag={{ vardata.mepmpostgresimagetag.name}} diff --git a/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/main.yml b/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/main.yml index 7faf1bd..39ca99a 100644 --- a/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/main.yml +++ b/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/main.yml @@ -18,9 +18,7 @@ # tasks file for eg_mecm-mepm - include: "install.yml" - static: false when: operation == 'install' - include: "uninstall.yml" - static: false when: operation == 'uninstall' diff --git a/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/uninstall.yml b/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/uninstall.yml index 8524b68..409b69a 100644 --- a/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/uninstall.yml +++ b/ocd/infra/playbooks/roles/eg_mecm-mepm/tasks/uninstall.yml @@ -16,7 +16,7 @@ --- -- name: Helm chart uninstallation mecm mepm +- name: Delete mecm-mepm secret command: helm uninstall mecm-mepm-edgegallery - name: Mecm mepm jwt delete @@ -24,9 +24,7 @@ command: kubectl delete secret mecm-mepm-jwt-public-secret mecm-mepm-ssl-secret edgegallery-mepm-secret # yamllint disable rule:line-length -- name: Delete mepm service +- name: Delete mep-service-account # yamllint disable rule:line-length command: kubectl delete -f /tmp/eg_mecm-mepm/deploy/conf/manifest/mepm/mepm-service-account.yaml # yamllint disable rule:line-length - args: - chdir: /tmp/eg_mecm-mepm/deploy/ diff --git a/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/config-map.yaml b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/config-map.yaml new file mode 100644 index 0000000..f913463 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/config-map.yaml @@ -0,0 +1,27 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +apiVersion: v1 +kind: ConfigMap +metadata: + namespace: metallb-system + name: config +data: + config: | + address-pools: + - name: address-pool-1 + protocol: layer2 + addresses: + - 192.168.100.120/32 diff --git a/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/metallb.yaml b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/metallb.yaml new file mode 100644 index 0000000..8594115 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/metallb.yaml @@ -0,0 +1,406 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +apiVersion: policy/v1beta1 +kind: PodSecurityPolicy +metadata: + labels: + app: metallb + name: controller + namespace: metallb-system +spec: + allowPrivilegeEscalation: false + allowedCapabilities: [] + allowedHostPaths: [] + defaultAddCapabilities: [] + defaultAllowPrivilegeEscalation: false + fsGroup: + ranges: + - max: 65535 + min: 1 + rule: MustRunAs + hostIPC: false + hostNetwork: false + hostPID: false + privileged: false + readOnlyRootFilesystem: true + requiredDropCapabilities: + - ALL + runAsUser: + ranges: + - max: 65535 + min: 1 + rule: MustRunAs + seLinux: + rule: RunAsAny + supplementalGroups: + ranges: + - max: 65535 + min: 1 + rule: MustRunAs + volumes: + - configMap + - secret + - emptyDir +--- +apiVersion: policy/v1beta1 +kind: PodSecurityPolicy +metadata: + labels: + app: metallb + name: speaker + namespace: metallb-system +spec: + allowPrivilegeEscalation: false + allowedCapabilities: + - NET_ADMIN + - NET_RAW + - SYS_ADMIN + allowedHostPaths: [] + defaultAddCapabilities: [] + defaultAllowPrivilegeEscalation: false + fsGroup: + rule: RunAsAny + hostIPC: false + hostNetwork: true + hostPID: false + hostPorts: + - max: 7472 + min: 7472 + privileged: true + readOnlyRootFilesystem: true + requiredDropCapabilities: + - ALL + runAsUser: + rule: RunAsAny + seLinux: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + volumes: + - configMap + - secret + - emptyDir +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: metallb + name: controller + namespace: metallb-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: metallb + name: speaker + namespace: metallb-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: metallb + name: metallb-system:controller +rules: + - apiGroups: + - '' + resources: + - services + verbs: + - get + - list + - watch + - update + - apiGroups: + - '' + resources: + - services/status + verbs: + - update + - apiGroups: + - '' + resources: + - events + verbs: + - create + - patch + - apiGroups: + - policy + resourceNames: + - controller + resources: + - podsecuritypolicies + verbs: + - use +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: metallb + name: metallb-system:speaker +rules: + - apiGroups: + - '' + resources: + - services + - endpoints + - nodes + verbs: + - get + - list + - watch + - apiGroups: + - '' + resources: + - events + verbs: + - create + - patch + - apiGroups: + - policy + resourceNames: + - speaker + resources: + - podsecuritypolicies + verbs: + - use +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: metallb + name: config-watcher + namespace: metallb-system +rules: + - apiGroups: + - '' + resources: + - configmaps + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app: metallb + name: pod-lister + namespace: metallb-system +rules: + - apiGroups: + - '' + resources: + - pods + verbs: + - list +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: metallb + name: metallb-system:controller +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: metallb-system:controller +subjects: + - kind: ServiceAccount + name: controller + namespace: metallb-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: metallb + name: metallb-system:speaker +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: metallb-system:speaker +subjects: + - kind: ServiceAccount + name: speaker + namespace: metallb-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: metallb + name: config-watcher + namespace: metallb-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: config-watcher +subjects: + - kind: ServiceAccount + name: controller + - kind: ServiceAccount + name: speaker +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app: metallb + name: pod-lister + namespace: metallb-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: pod-lister +subjects: + - kind: ServiceAccount + name: speaker +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + labels: + app: metallb + component: speaker + name: speaker + namespace: metallb-system +spec: + selector: + matchLabels: + app: metallb + component: speaker + template: + metadata: + annotations: + prometheus.io/port: '7472' + prometheus.io/scrape: 'true' + labels: + app: metallb + component: speaker + spec: + containers: + - args: + - --port=7472 + - --config=config + env: + - name: METALLB_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: METALLB_HOST + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: METALLB_ML_BIND_ADDR + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: METALLB_ML_LABELS + value: "app=metallb,component=speaker" + - name: METALLB_ML_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: METALLB_ML_SECRET_KEY + valueFrom: + secretKeyRef: + name: memberlist + key: secretkey + image: metallb/speaker:v0.9.3 + imagePullPolicy: IfNotPresent + name: speaker + ports: + - containerPort: 7472 + name: monitoring + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - NET_ADMIN + - NET_RAW + - SYS_ADMIN + drop: + - ALL + readOnlyRootFilesystem: true + hostNetwork: true + nodeSelector: + beta.kubernetes.io/os: linux + serviceAccountName: speaker + terminationGracePeriodSeconds: 2 + tolerations: + - effect: NoSchedule + key: node-role.kubernetes.io/master +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: metallb + component: controller + name: controller + namespace: metallb-system +spec: + revisionHistoryLimit: 3 + selector: + matchLabels: + app: metallb + component: controller + template: + metadata: + annotations: + prometheus.io/port: '7472' + prometheus.io/scrape: 'true' + labels: + app: metallb + component: controller + spec: + containers: + - args: + - --port=7472 + - --config=config + image: metallb/controller:v0.9.3 + imagePullPolicy: IfNotPresent + name: controller + ports: + - containerPort: 7472 + name: monitoring + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - all + readOnlyRootFilesystem: true + nodeSelector: + beta.kubernetes.io/os: linux + securityContext: + runAsNonRoot: true + runAsUser: 65534 + serviceAccountName: controller + terminationGracePeriodSeconds: 0 diff --git a/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/namespace.yaml b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/namespace.yaml new file mode 100644 index 0000000..d090488 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/metallb/namespace.yaml @@ -0,0 +1,21 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +apiVersion: v1 +kind: Namespace +metadata: + name: metallb-system + labels: + app: metallb diff --git a/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/eg-sp-controller.yaml b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/eg-sp-controller.yaml new file mode 100644 index 0000000..95fd455 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/eg-sp-controller.yaml @@ -0,0 +1,28 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +kind: Pod +apiVersion: v1 +metadata: + name: edgegallery-secondary-ep-controller + namespace: kube-system +spec: + serviceAccount: edgegallery-secondary-ep-controller + containers: + - name: edgegallery-secondary-ep-controller + image: edgegallery/edgegallery-secondary-ep-controller:latest + imagePullPolicy: IfNotPresent + command: ["/bin/sh", "-c", "--"] + args: ["edgegallery-secondary-ep-controller"] diff --git a/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/eg-sp-rbac.yaml b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/eg-sp-rbac.yaml new file mode 100644 index 0000000..aa0fa63 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/eg-sp-rbac.yaml @@ -0,0 +1,49 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +kind: ServiceAccount +apiVersion: v1 +metadata: + name: edgegallery-secondary-ep-controller + namespace: kube-system +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: multi-ip-controller +rules: + - apiGroups: [""] + resources: ["services", "pods"] + verbs: ["get", "watch", "list"] + - apiGroups: [""] + resources: ["endpoints", "events"] + verbs: ["*"] + - apiGroups: ["k8s.cni.cncf.io"] + resources: ["network-attachment-definitions"] + verbs: ["*"] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: watch-update-secondary-endpoints +subjects: + - kind: ServiceAccount + name: edgegallery-secondary-ep-controller + namespace: kube-system +roleRef: + kind: ClusterRole + name: multi-ip-controller + apiGroup: rbac.authorization.k8s.io diff --git a/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/multus.yaml b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/multus.yaml new file mode 100644 index 0000000..bb21616 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_mep/files/deploy/conf/edge/network-isolation/multus.yaml @@ -0,0 +1,358 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: network-attachment-definitions.k8s.cni.cncf.io +spec: + group: k8s.cni.cncf.io + scope: Namespaced + names: + plural: network-attachment-definitions + singular: network-attachment-definition + kind: NetworkAttachmentDefinition + shortNames: + - net-attach-def + versions: + - name: v1 + served: true + storage: true + schema: + openAPIV3Schema: + # yamllint disable rule:line-length + description: 'NetworkAttachmentDefinition is a CRD schema specified by the Network Plumbing + Working Group to express the intent for attaching pods to one or more logical or physical + networks. More information available at: https://github.com/k8snetworkplumbingwg/multi-net-spec' + # yamllint disable rule:line-length + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this represen + tation of an object. Servers should convert recognized schemas to the + latest internal value, and may reject unrecognized values. More info: + https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: 'NetworkAttachmentDefinition spec defines the desired state of a network attachment' + type: object + properties: + config: + description: 'NetworkAttachmentDefinition config is a JSON-formatted CNI configuration' + type: string +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: multus +rules: + - apiGroups: ["k8s.cni.cncf.io"] + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - pods + - pods/status + verbs: + - get + - update + - apiGroups: + - "" + - events.k8s.io + resources: + - events + verbs: + - create + - patch + - update +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: multus +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: multus +subjects: + - kind: ServiceAccount + name: multus + namespace: kube-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: multus + namespace: kube-system +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: multus-cni-config + namespace: kube-system + labels: + tier: node + app: multus +data: + # NOTE: If you'd prefer to manually apply a configuration file, you may create one here. + # In the case you'd like to customize the Multus installation, you should change the arguments to the Multus pod + # change the "args" line below from + # - "--multus-conf-file=auto" + # to: + # "--multus-conf-file=/tmp/multus-conf/70-multus.conf" + # Additionally -- you should ensure that the name "70-multus.conf" is the alphabetically first name in the + # /etc/cni/net.d/ directory on each node, otherwise, it will not be used by the Kubelet. + cni-conf.json: | + { + "name": "multus-cni-network", + "type": "multus", + "capabilities": { + "portMappings": true + }, + "delegates": [ + { + "cniVersion": "0.3.1", + "name": "default-cni-network", + "plugins": [ + { + "type": "flannel", + "name": "flannel.1", + "delegate": { + "isDefaultGateway": true, + "hairpinMode": true + } + }, + { + "type": "portmap", + "capabilities": { + "portMappings": true + } + } + ] + } + ], + "kubeconfig": "/etc/cni/net.d/multus.d/multus.kubeconfig" + } +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kube-multus-ds-amd64 + namespace: kube-system + labels: + tier: node + app: multus + name: multus +spec: + selector: + matchLabels: + name: multus + updateStrategy: + type: RollingUpdate + template: + metadata: + labels: + tier: node + app: multus + name: multus + spec: + hostNetwork: true + nodeSelector: + kubernetes.io/arch: amd64 + tolerations: + - operator: Exists + effect: NoSchedule + serviceAccountName: multus + containers: + - name: kube-multus + image: docker.io/nfvpe/multus:stable + command: ["/entrypoint.sh"] + args: + - "--multus-conf-file=auto" + - "--cni-version=0.3.1" + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: true + volumeMounts: + - name: cni + mountPath: /host/etc/cni/net.d + - name: cnibin + mountPath: /host/opt/cni/bin + - name: multus-cfg + mountPath: /tmp/multus-conf + volumes: + - name: cni + hostPath: + path: /etc/cni/net.d + - name: cnibin + hostPath: + path: /opt/cni/bin + - name: multus-cfg + configMap: + name: multus-cni-config + items: + - key: cni-conf.json + path: 70-multus.conf +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kube-multus-ds-ppc64le + namespace: kube-system + labels: + tier: node + app: multus + name: multus +spec: + selector: + matchLabels: + name: multus + updateStrategy: + type: RollingUpdate + template: + metadata: + labels: + tier: node + app: multus + name: multus + spec: + hostNetwork: true + nodeSelector: + kubernetes.io/arch: ppc64le + tolerations: + - operator: Exists + effect: NoSchedule + serviceAccountName: multus + containers: + - name: kube-multus + # ppc64le support requires multus:latest for now. support 3.3 or later. + image: docker.io/nfvpe/multus:stable-ppc64le + command: ["/entrypoint.sh"] + args: + - "--multus-conf-file=auto" + - "--cni-version=0.3.1" + resources: + requests: + cpu: "100m" + memory: "90Mi" + limits: + cpu: "100m" + memory: "90Mi" + securityContext: + privileged: true + volumeMounts: + - name: cni + mountPath: /host/etc/cni/net.d + - name: cnibin + mountPath: /host/opt/cni/bin + - name: multus-cfg + mountPath: /tmp/multus-conf + volumes: + - name: cni + hostPath: + path: /etc/cni/net.d + - name: cnibin + hostPath: + path: /opt/cni/bin + - name: multus-cfg + configMap: + name: multus-cni-config + items: + - key: cni-conf.json + path: 70-multus.conf +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: kube-multus-ds-arm64v8 + namespace: kube-system + labels: + tier: node + app: multus + name: multus +spec: + selector: + matchLabels: + name: multus + updateStrategy: + type: RollingUpdate + template: + metadata: + labels: + tier: node + app: multus + name: multus + spec: + hostNetwork: true + nodeSelector: + kubernetes.io/arch: arm64 + tolerations: + - operator: Exists + effect: NoSchedule + serviceAccountName: multus + containers: + - name: kube-multus + image: docker.io/nfvpe/multus:stable-arm64v8 + command: ["/entrypoint.sh"] + args: + - "--multus-conf-file=auto" + - "--cni-version=0.3.1" + resources: + requests: + cpu: "100m" + memory: "90Mi" + limits: + cpu: "100m" + memory: "90Mi" + securityContext: + privileged: true + volumeMounts: + - name: cni + mountPath: /host/etc/cni/net.d + - name: cnibin + mountPath: /host/opt/cni/bin + - name: multus-cfg + mountPath: /tmp/multus-conf + volumes: + - name: cni + hostPath: + path: /etc/cni/net.d + - name: cnibin + hostPath: + path: /opt/cni/bin + - name: multus-cfg + configMap: + name: multus-cni-config + items: + - key: cni-conf.json + path: 70-multus.conf diff --git a/ocd/infra/playbooks/roles/eg_mep/tasks/install.yml b/ocd/infra/playbooks/roles/eg_mep/tasks/install.yml index 0033928..8733101 100644 --- a/ocd/infra/playbooks/roles/eg_mep/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_mep/tasks/install.yml @@ -1,4 +1,3 @@ -# # Copyright 2020 Huawei Technologies Co., Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,6 +25,78 @@ file: ../../../config.yml name: vardata +- name: Remove old dir + command: rm -rf /tmp/.mep_tmp_cer + args: + chdir: /tmp/ + +- name: Make dir + command: mkdir -p /tmp/.mep_tmp_cer + args: + chdir: /tmp/ + +- name: Openssl genrsa + command: openssl genrsa -out ca.key 2048 + args: + chdir: /tmp/.mep_tmp_cer/ + +- name: Opnessl req + # yamllint disable rule:line-length + command: openssl req -new -key ca.key -subj /C=CN/ST=Peking/L=Beijing/O=edgegallery/CN=edgegallery -out ca.csr + # yamllint disable rule:line-length + args: + chdir: /tmp/.mep_tmp_cer/ + +- name: Sing key with ca key and ca crt + # yamllint disable rule:line-length + command: openssl x509 -req -days 365 -in ca.csr -extensions v3_ca -signkey ca.key -out ca.crt + # yamllint disable rule:line-length + args: + chdir: /tmp/.mep_tmp_cer/ + +- name: Openssl genrsa + command: openssl genrsa -out mepserver_tls.key 2048 + args: + chdir: /tmp/.mep_tmp_cer/ + +- name: Openssl rsa mep tls + # yamllint disable rule:line-length + command: openssl rsa -in mepserver_tls.key -aes256 -passout pass:{{ vardata.generate_cert_pass.name}} -out mepserver_encryptedtls.key + # yamllint disable rule:line-length + args: + chdir: /tmp/.mep_tmp_cer/ + +- name: Openssl req new key mepserver tls key + # yamllint disable rule:line-length + command: openssl req -new -key mepserver_tls.key -subj /C=CN/ST=Beijing/L=Beijing/O=edgegallery/CN=edgegallery -out mepserver_tls.csr + # yamllint disable rule:line-length + args: + chdir: /tmp/.mep_tmp_cer/ + +- name: Openssl mepserver tls csr + # yamllint disable rule:line-length + command: openssl x509 -req -in mepserver_tls.csr -extensions v3_req -CA ca.crt -CAkey ca.key -CAcreateserial -out mepserver_tls.crt + # yamllint disable rule:line-length + args: + chdir: /tmp/.mep_tmp_cer/ + +- name: Openssl genrsa out + command: openssl genrsa -out jwt_privatekey 2048 + args: + chdir: /tmp/.mep_tmp_cer/ + +- name: Openssl rsa jwt privatekey + command: openssl rsa -in jwt_privatekey -pubout -out jwt_publickey + args: + chdir: /tmp/.mep_tmp_cer/ + +- name: Openssl rsa in jwt + # yamllint disable rule:line-length + command: openssl rsa -in jwt_privatekey -aes256 -passout pass:{{ vardata.generate_cert_pass.name}} -out jwt_encrypted_privatekey + # yamllint disable rule:line-length + args: + chdir: /tmp/.mep_tmp_cer/ + - name: Create mep namespace command: kubectl create ns mep args: @@ -33,25 +104,33 @@ - name: Create generic pg secret # yamllint disable rule:line-length - command: kubectl -n mep create secret generic pg-secret --from-literal=pg_admin_pwd={{ vardata.mepadminpwd.name}} --from-literal=kong_pg_pwd={{ vardata.mepkongpgpwd.name}} --from-file=server.key=/tmp/.mep_tmp_cer/server_tls.key --from-file=server.crt=/tmp/.mep_tmp_cer/server_tls.crt + command: kubectl -n mep create secret generic pg-secret --from-literal=pg_admin_pwd={{ vardata.mep_pg_admin_pwd.name}} --from-literal=kong_pg_pwd={{ vardata.mep_kong_pg_pwd.name}} + --from-file=server.key=/tmp/.mep_tmp_cer/mepserver_tls.key --from-file=server.crt=/tmp/.mep_tmp_cer/mepserver_tls.crt # yamllint disable rule:line-length args: chdir: /tmp/ - name: Create mep generic for mep ssl # yamllint disable rule:line-length - command: kubectl -n mep create secret generic mep-ssl --from-literal=cert_pwd={{ vardata.mepcertpwd.name}} --from-file=server.cer=/tmp/.mep_tmp_cer/server_tls.crt --from-file=server_key.pem=/tmp/.mep_tmp_cer/server_encryptedtls.key --from-file=trust.cer=/tmp/.mep_tmp_cer/ca.crt + command: kubectl -n mep create secret generic mep-ssl --from-literal=cert_pwd={{ vardata.mep_cert_pwd.name}} --from-file=server.cer=/tmp/.mep_tmp_cer/mepserver_tls.crt + --from-file=server_key.pem=/tmp/.mep_tmp_cer/mepserver_encryptedtls.key --from-file=trust.cer=/tmp/.mep_tmp_cer/ca.crt # yamllint disable rule:line-length args: chdir: /tmp/ - name: Create mep seret generic # yamllint disable rule:line-length - command: kubectl -n mep create secret generic mepauth-secret --from-file=server.crt=/tmp/.mep_tmp_cer/server_tls.crt --from-file=server.key=/tmp/.mep_tmp_cer/server_tls.key --from-file=ca.crt=/tmp/.mep_tmp_cer/ca.crt --from-file=jwt_publickey=/tmp/.mep_tmp_cer/jwt_publickey --from-file=jwt_encrypted_privatekey=/tmp/.mep_tmp_cer/jwt_encrypted_privatekey + command: kubectl -n mep create secret generic mepauth-secret --from-file=server.crt=/tmp/.mep_tmp_cer/mepserver_tls.crt --from-file=server.key=/tmp/.mep_tmp_cer/mepserver_tls.key + --from-file=ca.crt=/tmp/.mep_tmp_cer/ca.crt --from-file=jwt_publickey=/tmp/.mep_tmp_cer/jwt_publickey --from-file=jwt_encrypted_privatekey=/tmp/.mep_tmp_cer/jwt_encrypted_privatekey # yamllint disable rule:line-length args: chdir: /tmp/ +- name: Remove directory + command: rm -rf /tmp/.mep_tmp_cer + args: + chdir: /tmp/ + - debug: msg: Deploy_dns_metallb execution start @@ -66,7 +145,9 @@ chdir: /tmp/eg_mep/deploy/ - name: Eg_Mep deployment create secret + # yamllint disable rule:line-length command: kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)" + # yamllint disable rule:line-length args: chdir: /tmp/eg_mep/deploy/ @@ -91,10 +172,11 @@ - name: Replacing image replace: path: /tmp/eg_mep/deploy/conf/edge/network-isolation/eg-sp-controller.yaml - regexp: 'edgegallery/edgegallery-secondary-ep-controller:{{ vardata.egepcontroller.name}}' - replace: "swr.ap-southeast-1.myhuaweicloud.com/edgegallery/edgegallery-secondary-ep-controller:{{ vardata.cloudegepcontroller.name}}" + regexp: 'edgegallery/edgegallery-secondary-ep-controller:latest' + replace: "swr.ap-southeast-1.myhuaweicloud.com/edgegallery/edgegallery-secondary-ep-controller:latest" - name: Running eg-sp-controller yaml files + # yamllint disable rule:line-length command: kubectl apply -f /tmp/eg_mep/deploy/conf/edge/network-isolation/eg-sp-controller.yaml args: chdir: /tmp/eg_mep/deploy/ @@ -103,14 +185,15 @@ msg: Setup_interfaces execution start - name: Link eg mep macvlan - command: ip link add eg-mp1 link {{ vardata.systeminterface1.name}} type macvlan mode bridge + # yamllint disable rule:line-length + command: ip link add eg-mp1 link {{ vardata.system_interfaceeth1.name}} type macvlan mode bridge args: chdir: /tmp/eg_mep/deploy/ ignore_errors: yes no_log: True - name: Link eg mep macvlan - command: ip addr add {{ vardata.ipaddregmepmacvlan.name}} dev eg-mp1 + command: ip addr add {{ vardata.mep_ip_addr_macvlan_eg_mep1.name}} dev eg-mp1 args: chdir: /tmp/eg_mep/deploy/ ignore_errors: yes @@ -124,14 +207,15 @@ no_log: True - name: Link eg eg mm5 with eth1 - command: ip link add eg-mm5 link {{ vardata.systeminterface2.name}} type macvlan mode bridge + # yamllint disable rule:line-length + command: ip link add eg-mm5 link {{ vardata.system_interfaceeth2.name}} type macvlan mode bridge args: chdir: /tmp/eg_mep/deploy/ ignore_errors: yes no_log: True - name: Link eg eg mm5 ip addr - command: ip addr add {{ vardata.ipaddregmep5.name}} dev eg-mm5 + command: ip addr add {{ vardata.mep_ip_addr_mm5_eg_mm5.name}} dev eg-mm5 args: chdir: /tmp/eg_mep/deploy/ ignore_errors: yes @@ -147,11 +231,7 @@ - debug: msg: Pull helm repo start -- name: Edge gallery mep installation pull chart +- name: Edge gallery mep installation pull chart and image # yamllint disable rule:line-length - command: helm install --wait mep-edgegallery edgegallery/mep --set networkIsolation.phyInterface.mp1={{ vardata.systeminterface1.name}} --set networkIsolation.phyInterface.mm5={{ vardata.systeminterface2.name}} --set images.mep.tag={{ vardata.mepimagetag.name}} --set images.mepauth.tag={{ vardata.mepauthimagetag.name}} --set images.dns.tag={{ vardata.mepdnsimagetag.name}} --set ssl.secretName=mep-ssl + command: helm install mep-edgegallery edgegallery/mep --set networkIsolation.phyInterface.mp1={{ vardata.system_interfaceeth1.name}} --set networkIsolation.phyInterface.mm5={{ vardata.system_interfaceeth2.name}} --set images.mep.tag={{ vardata.mep_image_tag.name}} --set images.mepauth.tag={{ vardata.mep_mepauth_image_tag.name}} --set images.dns.tag={{ vardata.mep_dns_image_tag.name}} --set ssl.secretName=mep-ssl # yamllint disable rule:line-length - args: - chdir: /tmp/eg_mep/deploy/ - ignore_errors: yes - no_log: True diff --git a/ocd/infra/playbooks/roles/eg_mep/tasks/uninstall.yml b/ocd/infra/playbooks/roles/eg_mep/tasks/uninstall.yml index d64aa0d..99203f6 100644 --- a/ocd/infra/playbooks/roles/eg_mep/tasks/uninstall.yml +++ b/ocd/infra/playbooks/roles/eg_mep/tasks/uninstall.yml @@ -1,4 +1,3 @@ -# # Copyright 2020 Huawei Technologies Co., Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,7 +43,6 @@ - name: Delete network isolation multus eg sp controller # yamllint disable rule:line-length command: kubectl delete -f /tmp/eg_mep/deploy/edge/network-isolation/eg-sp-controller.yaml - # yamllint disable rule:line-length args: chdir: /tmp/eg_mep/deploy/ ignore_errors: yes @@ -53,13 +51,13 @@ - name: Delete network isolation multus eg sp rbac # yamllint disable rule:line-length command: kubectl delete -f /tmp/eg_mep/deploy/conf/edge/network-isolation/eg-sp-rbac.yaml - # yamllint disable rule:line-length args: chdir: /tmp/eg_mep/deploy/ ignore_errors: yes no_log: True - name: Delete network isolation multus + # yamllint disable rule:line-length command: kubectl delete -f /tmp/eg_mep/deploy/conf/edge/network-isolation/multus.yaml args: chdir: /tmp/eg_mep/deploy/ @@ -67,6 +65,7 @@ no_log: True - name: Delete network isolation rm host local + # yamllint disable rule:line-length command: rm /opt/cni/bin/macvlan /opt/cni/bin/host-local args: chdir: /tmp/remote-platform/ @@ -109,6 +108,7 @@ no_log: True - name: Uninstall dns metallb config mep + # yamllint disable rule:line-length command: kubectl delete -f /tmp/eg_mep/deploy/conf/edge/metallb/config-map.yaml args: chdir: /tmp/eg_mep/deploy/ @@ -116,6 +116,7 @@ no_log: True - name: Delete dns metallb + # yamllint disable rule:line-length command: kubectl delete -f /tmp/eg_mep/deploy/conf/edge/metallb/metallb.yaml args: chdir: /tmp/eg_mep/deploy/ @@ -125,7 +126,6 @@ - name: Delete dns metallb namespace # yamllint disable rule:line-length command: kubectl delete -f /tmp/eg_mep/deploy/conf/edge/metallb/namespace.yaml - # yamllint disable rule:line-length args: chdir: /tmp/eg_mep/deploy/ ignore_errors: yes diff --git a/ocd/infra/playbooks/roles/eg_pre_require/tasks/install.yml b/ocd/infra/playbooks/roles/eg_pre_require/tasks/install.yml index 0871f84..009ea92 100644 --- a/ocd/infra/playbooks/roles/eg_pre_require/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_pre_require/tasks/install.yml @@ -18,18 +18,21 @@ - name: Import config file include_vars: - file: ../../../config.yml - name: vardata + file: ../../../config.yml + name: vardata + +- name: Certificate copy + debug: + msg: Copy certificate from ocd to center and edge - synchronize: - src: /tmp/.mep_tmp_cer - dest: /tmp/ + src: /tmp/ssl-eg-keys-certs + dest: /tmp/ - name: Docker login # yamllint disable rule:line-length - command: docker login -u {{ vardata.dockerusername.name}} -p {{ vardata.dockerpass.name}} swr.ap-southeast-1.myhuaweicloud.com - # yamllint disable rule:line-length + command: docker login -u {{ vardata.dockerusr.name}} -p {{ vardata.dockerpass.name}} swr.ap-southeast-1.myhuaweicloud.com -- name: Setting pull image swr path +- name: Create docker-registry secret # yamllint disable rule:line-length command: kubectl create secret docker-registry swrregcred --docker-server=https://swr.ap-southeast-1.myhuaweicloud.com/v2/ --docker-username={{ vardata.swrusr.name}} --docker-password={{ vardata.swrpass.name}} diff --git a/ocd/infra/playbooks/roles/eg_secret/tasks/install.yml b/ocd/infra/playbooks/roles/eg_secret/tasks/install.yml new file mode 100644 index 0000000..53892cd --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_secret/tasks/install.yml @@ -0,0 +1,27 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +--- + +- name: Import config file + include_vars: + file: ../../../config.yml + name: vardata + +- name: Generate secret + # yamllint disable rule:line-length + command: kubectl create secret generic edgegallery-ssl-secret --from-file=keystore.p12=/tmp/ssl-eg-keys-certs/keystore.p12 --from-literal=keystorePassword={{ vardata.secret_keystorepass.name}} --from-literal=keystoreType=PKCS12 --from-literal=keyAlias=edgegallery --from-file=trust.cer=/tmp/ssl-eg-keys-certs/ca.crt --from-file=server.cer=/tmp/ssl-eg-keys-certs/tls.crt --from-file=server_key.pem=/tmp/ssl-eg-keys-certs/encryptedtls.key --from-literal=cert_pwd={{ vardata.secret_cert_pass.name}} + # yamllint disable rule:line-length diff --git a/ocd/infra/playbooks/roles/eg_secret/tasks/main.yml b/ocd/infra/playbooks/roles/eg_secret/tasks/main.yml new file mode 100644 index 0000000..bd61315 --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_secret/tasks/main.yml @@ -0,0 +1,26 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +--- + +# tasks file for eg_secret +- include: "install.yml" + static: false + when: operation == 'install' + +- include: "uninstall.yml" + static: false + when: operation == 'uninstall' diff --git a/ocd/infra/playbooks/roles/eg_secret/tasks/uninstall.yml b/ocd/infra/playbooks/roles/eg_secret/tasks/uninstall.yml new file mode 100644 index 0000000..c180f5e --- /dev/null +++ b/ocd/infra/playbooks/roles/eg_secret/tasks/uninstall.yml @@ -0,0 +1,20 @@ +# +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +--- + +- name: Delete edgegallery ssl secret + command: kubectl delete secret edgegallery-ssl-secret diff --git a/ocd/infra/playbooks/roles/eg_set-helm-repo/tasks/install.yml b/ocd/infra/playbooks/roles/eg_set-helm-repo/tasks/install.yml index bc779fc..6e517b1 100644 --- a/ocd/infra/playbooks/roles/eg_set-helm-repo/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_set-helm-repo/tasks/install.yml @@ -18,12 +18,13 @@ - name: Import config file include_vars: - file: ../../../config.yml - name: vardata + file: ../../../config.yml + name: vardata -- name: Add adgegallery repo in private IP +- name: Helm repo add edgegallery # yamllint disable rule:line-length - command: helm repo add edgegallery http://{{ vardata.helmrepoip.name}}:8080/edgegallery + command: helm repo add edgegallery http://{{ vardata.private_repo_ip.name}}:8080/edgegallery -- name: Add stable repo in private IP - command: helm repo add stable http://{{ vardata.helmrepoip.name}}:8080/stable +- name: Helm repo add stable + # yamllint disable rule:line-length + command: helm repo add stable http://{{ vardata.private_repo_ip.name}}:8080/stable diff --git a/ocd/infra/playbooks/roles/eg_user-mgmt/tasks/install.yml b/ocd/infra/playbooks/roles/eg_user-mgmt/tasks/install.yml index 24d17b4..2d128ee 100644 --- a/ocd/infra/playbooks/roles/eg_user-mgmt/tasks/install.yml +++ b/ocd/infra/playbooks/roles/eg_user-mgmt/tasks/install.yml @@ -16,26 +16,17 @@ --- -- name: Doing deployment setup eg_user-mgm for edge gallery - copy: - src: deploy - dest: /tmp/eg_user-mgmt/ - -- name: Import vars -# yamllint disable rule:line-length +- name: Import config file include_vars: - file: ../../../config.yml - name: vardata -# yamllint disable rule:line-length + file: ../../../config.yml + name: vardata - name: Generating certificates for usermanagment -# yamllint disable rule:line-length - command: kubectl create secret generic user-mgmt-jwt-secret --from-file=publicKey=/tmp/.mep_tmp_cer/mepserver_encryptedtls.key --from-file=encryptedPrivateKey=/tmp/eg_user-mgmt/deploy/conf/keys/encrypted_rsa_private_key.pem --from-literal=encryptPassword={{ vardata.firstvar.name}} -# yamllint disable rule:line-length - args: - chdir: /tmp/.mep_tmp_cer/ + # yamllint disable rule:line-length + command: kubectl create secret generic user-mgmt-jwt-secret --from-file=publicKey=/tmp/ssl-eg-keys-certs/rsa_public_key.pem --from-file=encryptedPrivateKey=/tmp/ssl-eg-keys-certs/encrypted_rsa_private_key.pem --from-literal=encryptPassword={{ vardata.user_mgmt_encryptpass.name}} + # yamllint disable rule:line-length -- name: Pull helm chart eg_user-mgm -# yamllint disable rule:line-length - command: helm install user-mgmt-edgegallery edgegallery/usermgmt --set global.oauth2.clients.appstore.clientUrl=https://{{ vardata.authServer.name}}:30091,global.oauth2.clients.developer.clientUrl=https://{{ vardata.authServer.name}}:30092,global.oauth2.clients.mecm.clientUrl=https://{{ vardata.authServer.name}}:30093, --set jwt.secretName=user-mgmt-jwt-secret --set global.ssl.enabled=true --set global.ssl.secretName=edgegallery-ssl-secret -# yamllint disable rule:line-length +- name: Install user-mgmt + # yamllint disable rule:line-length + command: helm install --wait user-mgmt-edgegallery edgegallery/usermgmt --set global.oauth2.clients.appstore.clientUrl=https://{{ vardata.user_mgmt_oauth_appstore_client_ip.name}}:{{vardata.user_mgmt_oauth_appstore_client_port.name}},global.oauth2.clients.developer.clientUrl=https://{{ vardata.user_mgmt_oauth_developer_client_ip.name}}:{{vardata.user_mgmt_oauth_developer_client_port.name}},global.oauth2.clients.mecm.clientUrl=https://{{ vardata.user_mgmt_oauth_mecm_client_ip.name}}:{{vardata.user_mgmt_oauth_mecm_client_port.name}}, --set jwt.secretName=user-mgmt-jwt-secret --set images.usermgmt.tag={{ vardata.user_mgmt_image_tag.name}} --set global.ssl.enabled=true --set global.ssl.secretName=edgegallery-ssl-secret + # yamllint disable rule:line-length -- 2.16.6