From 5d604700dd160fb1e7d206159df415dae0f0df1c Mon Sep 17 00:00:00 2001 From: "Ketelsen, Sven" Date: Tue, 22 Feb 2022 13:50:15 +0000 Subject: [PATCH] DEV-319: feat: split dev/qa into own hetzner projects --- .gitmodules | 2 +- README.md | 7 - create-database.yml | 5 +- create-realm.yml | 5 +- create-server.yml | 5 +- create-service.yml | 5 +- evil-remove-server.yml | 4 +- external_monitoring.yml | 2 +- group_vars/all/plain.yml | 5 +- group_vars/k8s_cluster/plain.yml | 8 +- group_vars/keycloak/plain.yml | 45 - group_vars/management/plain.yml | 25 +- group_vars/stage_dev/plain.yml | 9 +- group_vars/stage_prodnso/plain.yml | 9 +- group_vars/stage_prodnso/vault.yml | 550 ++++---- group_vars/stage_qa/plain.yml | 11 +- group_vars/stage_qa/vault.yml | 1234 ++++++++--------- import-database.yml | 5 +- info.yml | 7 +- kubernetes.yml | 15 +- kubespray | 2 +- patchday.yml | 21 +- remove-database.yml | 5 +- remove-realm.yml | 5 +- remove-service.yml | 5 +- roles/common/tasks/main.yml | 12 +- roles/connect_realm/defaults/main.yml | 9 +- roles/gitea_realm/defaults/main.yml | 9 +- roles/harbor/defaults/main.yml | 6 +- roles/harbor/tasks/configure.yml | 8 + roles/harbor/tasks/configure_base_config.yml | 2 +- roles/harbor/tasks/configure_robot_tokens.yml | 7 + .../tasks/configure_robot_tokens_crud.yml | 32 +- roles/harbor/tasks/main.yml | 20 +- roles/harbor_realm/defaults/main.yml | 59 + roles/harbor_realm/tasks/main.yml | 39 + roles/harbor_realm/vars/main.yml | 1 + roles/keycloak/tasks/_authenticate.yml | 1 - roles/keycloak/tasks/_configure_client.yml | 1 - .../keycloak/tasks/_configure_client_crud.yml | 2 +- roles/keycloak/tasks/_configure_realm.yml | 188 +-- .../tasks/_configure_realm_admin_users.yml | 1 - .../_configure_user_groupmembership_crud.yml | 8 +- roles/keycloak/tasks/_create_realm_admin.yml | 9 +- ...lm_groups.yml => _create_realm_groups.yml} | 1 - roles/keycloak/tasks/_create_realm_users.yml | 1 - roles/keycloak/tasks/configure_client.yml | 23 - roles/keycloak/tasks/configure_realm.yml | 90 -- roles/keycloak/tasks/create_realm_users.yml | 63 - roles/keycloak/tasks/main.yml | 42 +- .../keycloak-realm-create-client.json.j2 | 76 - .../keycloak-realm-create-user.json.j2 | 6 +- .../templates/keycloak-realm-create.json.j2 | 135 -- roles/kubernetes/apps/tasks/argocd.yml | 34 +- .../kubernetes/cert-manager/defaults/main.yml | 1 - roles/kubernetes/cert-manager/tasks/main.yml | 1 - .../defaults/main.yml | 2 +- ....5.1.yaml.j2 => hcloud-csi.v1.6.0.yaml.j2} | 77 +- .../kubernetes/external-dns/defaults/main.yml | 1 - roles/kubernetes/external-dns/tasks/main.yml | 1 - .../ingress-controller/tasks/main.yml | 1 - roles/workflow_proxy_realm/defaults/main.yml | 9 +- setup.yml | 3 +- smardigo.yml | 3 +- stage-dev | 6 +- stage-prodnso | 36 + stage-qa | 4 +- stage-qa-netgo-hcloud.yml | 16 +- tasks/autodiscover_pre_tasks.yml | 16 - update-monitoring.yml | 5 +- update-service-state.yml | 5 +- upload-database-dumb.yml | 5 +- users/friedrich.goerz/ssh.pub | 2 +- 73 files changed, 1404 insertions(+), 1671 deletions(-) create mode 100644 roles/harbor_realm/defaults/main.yml create mode 100644 roles/harbor_realm/tasks/main.yml create mode 100644 roles/harbor_realm/vars/main.yml rename roles/keycloak/tasks/{create_realm_groups.yml => _create_realm_groups.yml} (99%) delete mode 100644 roles/keycloak/tasks/configure_client.yml delete mode 100644 roles/keycloak/tasks/configure_realm.yml delete mode 100644 roles/keycloak/tasks/create_realm_users.yml delete mode 100644 roles/keycloak/templates/keycloak-realm-create-client.json.j2 delete mode 100644 roles/keycloak/templates/keycloak-realm-create.json.j2 rename roles/kubernetes/container-storage-interface/templates/{hcloud-csi.v1.5.1.yaml.j2 => hcloud-csi.v1.6.0.yaml.j2} (83%) diff --git a/.gitmodules b/.gitmodules index 54d5e4e..6fcd6ce 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "kubespray"] path = kubespray url = https://github.com/kubernetes-sigs/kubespray.git - branch = v2.17.1 + branch = v2.18.0 diff --git a/README.md b/README.md index 24ce475..2bee625 100644 --- a/README.md +++ b/README.md @@ -98,10 +98,3 @@ IPFire Prometheus (Grafana) docker exec -i dev-prometheus-01-grafana sh -c 'grafana-cli plugins install grafana-piechart-panel' docker restart dev-prometheus-01-grafana - -AWX - -> /etc/kubernetes/k9s - wget https://github.com/derailed/k9s/releases/download/v0.24.14/k9s_Linux_x86_64.tar.gz - tar -xzf k9s_*.tar.gz -C . - ln -s /etc/kubernetes/k9s/k9s /usr/bin/k9s - kubectl taint nodes --all node-role.kubernetes.io/master- diff --git a/create-database.yml b/create-database.yml index 735ed89..907639d 100644 --- a/create-database.yml +++ b/create-database.yml @@ -82,7 +82,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always roles: - role: connect_postgres diff --git a/create-realm.yml b/create-realm.yml index 51fe8da..32057ab 100644 --- a/create-realm.yml +++ b/create-realm.yml @@ -65,7 +65,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always roles: - role: connect_realm diff --git a/create-server.yml b/create-server.yml index 11d2bc3..652479e 100644 --- a/create-server.yml +++ b/create-server.yml @@ -118,7 +118,10 @@ when: ansible_distribution == "Ubuntu" - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always roles: - role: ansible-role-docker diff --git a/create-service.yml b/create-service.yml index 92717c7..ec8c37a 100644 --- a/create-service.yml +++ b/create-service.yml @@ -57,7 +57,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always roles: - role: connect diff --git a/evil-remove-server.yml b/evil-remove-server.yml index 646b3d3..0c4d51d 100644 --- a/evil-remove-server.yml +++ b/evil-remove-server.yml @@ -26,8 +26,10 @@ delegate_to: 127.0.0.1 become: false + pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false tags: - always diff --git a/external_monitoring.yml b/external_monitoring.yml index bdfe19d..ff29acc 100644 --- a/external_monitoring.yml +++ b/external_monitoring.yml @@ -29,7 +29,7 @@ port: 9115 proto: tcp src: "{{ item }}" - loop: "{{ promethues_endpoints_all_stages }}" + loop: "{{ promethues_endpoints_all_stages + ip_whitelist_admins}}" - name: "Set firewall default policy" ufw: diff --git a/group_vars/all/plain.yml b/group_vars/all/plain.yml index 5d060bd..6d68df5 100644 --- a/group_vars/all/plain.yml +++ b/group_vars/all/plain.yml @@ -106,7 +106,7 @@ smardigo_plattform_users: - 'friedrich.goerz' ip_whitelist_admins: - - "87.150.38.134/32" # sven + - "79.215.10.239/32" # sven - "212.86.56.112/32" # peter ip_whitelist: @@ -123,13 +123,12 @@ docker_compose_path: "/usr/bin/docker-compose" service_base_path: '/etc/smardigo' -# TODO we need a company email addresses gitea_admin_email: "nso.devops@netgo.de" lets_encrypt_email: "nso.devops@netgo.de" -docker_admin_email: "nso.devops@netgo.de" connect_admin_email: "nso.devops@netgo.de" keycloak_admin_email: "nso.devops@netgo.de" pgadmin4_admin_email: "nso.devops@netgo.de" +harbor_oidc_admin_email: "nso.devops@netgo.de" http_port: "80" https_port: "443" diff --git a/group_vars/k8s_cluster/plain.yml b/group_vars/k8s_cluster/plain.yml index 0c3a2fb..2833a5d 100644 --- a/group_vars/k8s_cluster/plain.yml +++ b/group_vars/k8s_cluster/plain.yml @@ -9,9 +9,15 @@ kube_network_plugin: calico kube_proxy_metrics_bind_address: 0.0.0.0:10249 kubelet_preferred_address_types: InternalIP,ExternalIP,Hostname docker_log_opts: "--log-opt max-size=100m --log-opt max-file=5 --log-opt compress=true" +#TODO https://github.com/kubernetes/kubernetes/pull/59898 +containerd_max_container_log_line_size: 51200 helm_enabled: true #TODO configuration migration needed #cert_manager_enabled: true #TODO configuration migration needed -#ingress_nginx_enabled: true \ No newline at end of file +#ingress_nginx_enabled: true +#TODO configuration migration needed +#argocd_enabled: true +#TODO configuration migration needed +#krew_enabled: true diff --git a/group_vars/keycloak/plain.yml b/group_vars/keycloak/plain.yml index 0eeba68..cbdcca9 100644 --- a/group_vars/keycloak/plain.yml +++ b/group_vars/keycloak/plain.yml @@ -7,48 +7,3 @@ keycloak_postgres_host: "{{ shared_service_postgres_01_hostname }}" keycloak_postgres_database: "{{ stage }}_keycloak" keycloak_postgres_username: "{{ keycloak_postgres_database }}" keycloak_postgres_password: "keycloak-postgres-admin" - -# TODO shouldn't be declared in a static way -> must be stage specific -keycloak: { - realms: [ - { - name: 'docker', - display_name: 'docker', - users: [ - { - "username": "{{ docker_admin_username }}", - "password": "{{ docker_admin_password }}", - "email": "{{ docker_admin_email }}", - } - ], - groups: [ - { - "name": "awx", - }, - { - "name": "admin", - }, - { - "name": "smardigo", - }, - ], - clients: [ - { - clientId: '{{ harbor_oidc_client_id }}', - name: '{{ harbor_oidc_client_id }}', - admin_url: '', - root_url: '', - redirect_uris: ' - [ - "{{ http_s }}://{{ shared_service_harbor_hostname }}/*", - ]', - secret: '{{ harbor_oidc_client_secret }}', - web_origins: ' - [ - "{{ http_s }}://{{ shared_service_harbor_hostname }}", - ]', - } - ] - } - ] -} \ No newline at end of file diff --git a/group_vars/management/plain.yml b/group_vars/management/plain.yml index 14fb21e..2d95738 100644 --- a/group_vars/management/plain.yml +++ b/group_vars/management/plain.yml @@ -28,15 +28,13 @@ current_realm_clients: [ clientId: "{{ management_oidc_client_id }}", admin_url: '', root_url: '', - redirect_uris: ' - [ + redirect_uris: [ "{{ http_s }}://{{ connect_base_url }}/*" - ]', + ], secret: '{{ management_oidc_client_secret }}', - web_origins: ' - [ - "{{ http_s }}://{{ connect_base_url }}" - ]', + web_origins: [ + "{{ http_s }}://{{ connect_base_url }}" + ], } ] @@ -45,12 +43,11 @@ current_realm_users: [ "username": "{{ management_admin_username }}", "password": "{{ management_admin_password }}", "email": "{{ connect_admin_email }}", + "requiredActions": [] } ] -current_realm_admin_users: [ - { - "username": "{{ management_realm_admin_username }}", - "password": "{{ management_realm_admin_password }}", - "email": "{{ connect_admin_email }}", - } -] \ No newline at end of file +current_realm_admin_user: + username: "{{ management_realm_admin_username }}" + password: "{{ management_realm_admin_password }}" + email: "{{ connect_admin_email }}" + requiredActions: [] diff --git a/group_vars/stage_dev/plain.yml b/group_vars/stage_dev/plain.yml index 12e8d68..44d7fe5 100644 --- a/group_vars/stage_dev/plain.yml +++ b/group_vars/stage_dev/plain.yml @@ -260,8 +260,11 @@ elastic_stack_network: { dev-elastic-stack-elastic-03: "{{ shared_service_elastic_03 }}", } -harbor_oidc_realm: "docker" +harbor_oidc_realm: "harbor" harbor_oidc_client_id: "harbor" +harbor_oidc_client_secret: "{{ docker_registry_oidc_client_secret_vault }}" +harbor_oidc_admin_username: "harbor-admin" +harbor_oidc_admin_password: "harbor-admin" postgres_listen_addresses: "listen_addresses = 'localhost,{{ stage_server_ip }},{{ stage_private_server_ip }}'" @@ -302,9 +305,6 @@ pgadmin4_admin_password: "pgadmin-admin" awx_admin_username: "awx-admin" awx_admin_password: "awx-admin" -docker_admin_username: "docker-admin" -docker_admin_password: "docker-admin" - management_admin_username: "management-admin" management_admin_password: "management-admin" management_realm_admin_username: "management-realm-admin" @@ -338,7 +338,6 @@ argocd_server_admin_password: "{{ argocd_server_admin_password_vault }}" netgo_msteams_hook_cd: "{{ netgo_msteams_hook_cd_vault }}" netgo_msteams_hook_alerting: "{{ netgo_msteams_hook_alerting_vault }}" -harbor_oidc_client_secret: "{{ docker_registry_oidc_client_secret_vault }}" management_oidc_client_secret: "{{ management_oidc_client_secret_vault }}" # smardigo automation DEV gpg key diff --git a/group_vars/stage_prodnso/plain.yml b/group_vars/stage_prodnso/plain.yml index e6f1363..ae97db4 100644 --- a/group_vars/stage_prodnso/plain.yml +++ b/group_vars/stage_prodnso/plain.yml @@ -262,8 +262,11 @@ elastic_stack_network: { prodnso-elastic-stack-elastic-03: "{{ shared_service_elastic_03 }}", } -harbor_oidc_realm: "docker" +harbor_oidc_realm: "harbor" harbor_oidc_client_id: "harbor" +harbor_oidc_client_secret: "{{ docker_registry_oidc_client_secret_vault }}" +harbor_oidc_admin_username: "harbor-admin" +harbor_oidc_admin_password: "{{ harbor_oidc_admin_password_vault }}" postgres_listen_addresses: "listen_addresses = 'localhost,{{ stage_server_ip }},{{ stage_private_server_ip }}'" @@ -304,9 +307,6 @@ pgadmin4_admin_password: "{{ pgadmin4_admin_password_vault }}" awx_admin_username: "awx-admin" awx_admin_password: "{{ awx_admin_password_vault }}" -docker_admin_username: "docker-admin" -docker_admin_password: "{{ docker_admin_password_vault }}" - management_admin_username: "management-admin" management_admin_password: "{{ management_admin_password_vault }}" management_realm_admin_username: "management-realm-admin" @@ -340,5 +340,4 @@ argocd_server_admin_password: "{{ argocd_server_admin_password_vault }}" netgo_msteams_hook_cd: "{{ netgo_msteams_hook_cd_vault }}" netgo_msteams_hook_alerting: "{{ netgo_msteams_hook_alerting_vault }}" -harbor_oidc_client_secret: "{{ docker_registry_oidc_client_secret_vault }}" management_oidc_client_secret: "{{ management_oidc_client_secret_vault }}" diff --git a/group_vars/stage_prodnso/vault.yml b/group_vars/stage_prodnso/vault.yml index 0c12a50..71d9b7a 100644 --- a/group_vars/stage_prodnso/vault.yml +++ b/group_vars/stage_prodnso/vault.yml @@ -1,276 +1,276 @@ $ANSIBLE_VAULT;1.1;AES256 -30353361303861653361316264663262363466643065323837313631363961616439353137323062 -3964666238393265383133646462663038653335623462390a313062323831353630343362656639 -30356237646361626564363534393335626564653062316639353839613739396131363338343334 -6265313839613337660a326263313838326363613535316233373338306430396166313861306333 -34636239626435356438316434663832393066373939633239373230306534306362346635323232 -37363939666261663634303765653836613737396534646339356230316234303937653063306665 -31363637306638386564613562383332366532396237393663636262323937306630616663643835 -33336431653365323632393536356639383763323839376662653134313966623066336530323232 -35633363323430386436373765316333396632303264653163363635353538653933306431363664 -61383035663765306536396464326265353663363131626164613963386434613530656532316664 -63623631666636343131366364383434316331636334616231363231623166343832396136376634 -36623162623531623538306665393732363766393662616366636566393434393463343439666330 -34636663613034313937356263343766633065333837313436626236333565303138373238373065 -64323763343432363636383535626461323531316338663139323338653834646566643131346165 -33383462613739326231393036616132303530316464333639643633343365373763653562343266 -61316138633138356662626634313335363864343566346566306365323766323435626435343636 -66353034663833323733656362323733306332613966396633623833323334623666306362643433 -36626362336232653539666431383633316364303433343139613063616664333939323635303861 -30626538626265363161336336363364663765666565356565663964393830626539623932653833 -61393465343563383762336638393861646538616238663362633966633433353264316136356334 -33633739346434313964396166633839636462303861303735343735656331643537616131353737 -33636134663366623061356432386463373064366163313764313335303434303833333138396236 -37353635356361616563646537353632383862393830333362636431383037376661346461343731 -34626430636636373038353435316434613730623135636136373032643161613836303765386431 -35653931386335663366363839656562336536376235373936623465636466333039656135613339 -35376536323738323439336431363864663465663739623831303463306631323066353763323931 -37306633613739376139663337366331353939323962336461656363366434313536616465383965 -34303262613165316635666165653135313136663035376664363435376362383563616535376661 -61633365303565373030376563653463616338616265313238383331636162333163383930643761 -39373037356564663234383532396636616162623438373633663537386562346363323235366438 -62393462316337646337383732636235613738376466326330346166616164623361363964313635 -64326338323336323266353463613062663932616536646639353065366534623961303762363931 -61363635656631383538343337363531663131653365633965313961383131393063663865383962 -65613132306233643836353636646362663331643839383932346136393739316638656266346163 -30393938646263383338366335613838613537333663656139303630303234303165346666616430 -39393861333838646332666234383133363837326639633036306563363063336633623634656136 -33663864336461363733623531353565326632663236373563616162373566666633633237346363 -66616263383833333034663630373464373630386636636331386465633130633735653332376163 -38336634363232336331376161333837653335343064333565626164316661646663613365363933 -61323438656333326434393032313361363264303635353236353939633262313833613663323639 -38356638663362633137613533656432666430373631616537656330383030303733366230386338 -65316536393432666663373266646237353839396365373261386663636634333232303334343864 -65346336666334623139396533303462663435623365613835323734383863386261346139386230 -36383735313832343638343738656334383437653234626532653031663132346130666563653465 -38643538666534613439316432366165393464623562333034353234323863393039353634626238 -32383035393730663466663866393931363163306231326138383231643239643165323263636431 -65653837653531346266336331363563633137323738653531623762393433373831643162313539 -37626534313662376631663535356265343166363539653564303931633566356633626166383364 -31613638303930346330336634303165663438666634333637636537626436653937666664646138 -66353732346566303565623261613536366538623830623430616364386662336130366633346165 -34303530636331353633626664383064376532653733636636633039643836386239363366396662 -37373436313930356131613131303431326666343434326465336430306563363735363036623936 -31613530393130373633303337393161633565326565393966386430613466383737316634303762 -38636638326130363131653233333234333431643064333136616131613936336335656237366466 -61376433343039323431393865663031623863326463353137346633356238396436343237386263 -64336431323835643763313764333233343535643534616465383266353136656538633630323462 -32353033386537666635306330626465323630343936633733396262666339396331346136353062 -38623336653732653338333435343333313237313031363439363737346263663862373462373132 -38316564393738396530663862613235643035646530306131303039366538613238336638346566 -62346130393266626537393332656232343164646366373666616466313636323865616632656463 -32623264346136633234336435303761653063316634336262383366313632373733366536323439 -33373332616639393130336430326237356538616132366536343461353033326633646331366138 -37656136303763353735323330376436613035373866656231343830653432393230653935343232 -62346435616466653138363961303038313061396530316466643336376337363162623135656334 -31666461613638303761353236666563326564376164633438313132343163386138646463376335 -63303931646337653664633565366166306237656561306433303735386163316633333030626266 -65386131623538663037616164333435336435613564356331663430333665393732633438386535 -61633535343931656239353731346637383361306162636463346665663231633738386434386531 -38633335616530333632326635393361396166313265653763363065666133393735376239383039 -31383831646537333531376631313637306634663864653261313437373939376165613830376236 -63623336663131333932643933333962363062646332343262383365376563646139323066346631 -61323765393035366532336365396335333466326461313836386437616263336133346130333535 -32306664393362366663646536306263376164623130323030326563646231616561613464653565 -65626531633966363433363439346564663232353366666632373333343335633534363033663938 -36646632663236626164663530356463363436343865663938613232613331393266656638396538 -63646533306537616635323365303837373861656339333761653438396664323330396432613530 -33333361653735336564623832326334313265356633373332343934623436346361633635383064 -64313763303431666262316431626564313561636430616631376237623732663236663132336537 -36656133393431333537633263326636313163663732633263396339616134393264383132343636 -63383939326563616434626664376337633235366166626432396165323931386539363262343034 -66316164376664623166313261373633633430343332636638343133336435336337656564636430 -31363736313135353831313938653736623036316633363562333539663862363534613238323761 -38613962633734326562643934303761313762353130636566343765306438626135313961653631 -30653331333632326461343730613433376366373535663763356664383537613262356664313030 -32346464633830303466623337613561313134323637623861653333643333626462626163343761 -39323530366266343464366133613238366230363035373833343332333439353032326233653737 -64643238613062373938353939363736633239353537663633646334396563343565336335323938 -63393465383962363039336163333138376162373537356530393035386233333439663333316436 -63363961646437363037333839396163323639363234343031336233323132393362306439336232 -38363237346134343466613262396536626234623938356134316366333138306333366237626534 -39636634306535313934636261333266626362353030633735643061666136323732653733373835 -33303131623236303237653636323365653963363064343633316537653036313634346664373565 -35386462376233383335623263666461356637613161616662343934663266616164643561616466 -30306531323265383032663636646534383538643436343237393261303930386136613433363335 -32343536306331306165393837663136623639303633353038323938353631643136386462303230 -35333835343738626237396365306365316265653463653866663237616561353630613161306162 -31393334333539373533383339343666376233336363333537363731323738353731303465336462 -65613066323431646564623235323532343530316363656231356465366163343838646261393336 -33353930663233313338346230353964326361376432343032613865323538313537623161623863 -38333334666262656530393932663161303732383461613561393039373765333839323036643237 -62653265343939656666313133396137353935333563643930383066326563396530306339626335 -38383436666163643639353562646232353138666363323832646230343366346636376261626139 -62613063363737366634383065363964613864633638613763373165373833613130313262303864 -31633533613531316462623038323464313530646635623461653165663162363036353135633833 -38383035333732646531653832373531663238376434653337616237373131663733626663613562 -33653234323430343433643632343361633732623661663265343432323763323330353064646436 -37303164313633313863643865666463623365653761396336356630346437363866326131623434 -39366263303630663364323563343830326534376437373239653561313037653661333532653238 -34663536383132373032363733616536663161303033613235343534623664343531386535656664 -62346662373366633964613963333962363763626366663138363235366436633637653661633836 -61383437633737303331373638396534336139303363356662353538366163623333653637373838 -30363262656136396436646165623538326631383862643030366262303234653831626433656166 -37643762303037333766326233346239613938343738626137646432333732383161356536366265 -37336338313166636162366535623332366631653530626334323234333536373837663933363165 -32393132636239306430343031323766306366343534333965346263616432623030646535383136 -30653538363965623063303432633332666662663431633464646566623261376465633333613032 -39623963633133346161313638623663343130626331373039383362383534353338373565366533 -39653530633537643163386632313537616535646431353332326535633835323331396336613764 -65336138636332626266346137303566376336313032636431333730396130303533316534373538 -32363333313232623335383632336564316138346634646563623932656339393135373266663830 -39353733623265653030646232653831613835343262613764316531666339643235653735383838 -61353939383563353334316437613136373164663236633036383633373265653434363231363265 -31336261303234343861383063386233626232363638313535313137376239303031336139663832 -34333365373961313535343664386464613362653361346266616130633632333832663433623930 -66616561346337306464353635636666646537666330313161336333306335333162646636323239 -65333062333032333938353666386639663261353033663261323761393764653232653838616665 -35343138356139393764666637306666623937343539393338373833303165306561373861373433 -35313630386661383331336633396333313136323365366163376330623237666164356438653136 -65616264343730343261316266316633356262653063636266306637643864353333366330376336 -38303333623439646634386536616362376263363738316134653366613564396263363036643862 -64383438663361643937356530613034363131303232316338663064383631663336366364303063 -62343438353035633763646365343838653835633663386163613136313230636162353330633932 -36653465393032343937653964646133376663386264653634616563313363633339653531386136 -39316665363537376339316338363335343231653030333864366538303235323736616266616465 -65316165643034653837613565363966316233366234636539333430306562633266363562303063 -65336530616361363130343233653736356238386233363736623331326466383132336236303539 -33613538383438363332326436633361616437373533393738656461633633333661323863653137 -33366637643830633939633334613932343936356531373835393930616232623033343861663737 -30646634383234653938353062396662323566303962393565323639363365383034306633633738 -66633438616536623737343635323564343538363537346130326239376335386266643465383163 -65333737643538636439363037626163323733393538313561333738393661373066666538633337 -37663161393264356265303035376262336665333433376239333830626132353161386665643963 -31653138613139643264353634636639376666336439643064303131373861373666313464623764 -39636334383963626137373839633435643132306638316565343134623165333464643032653032 -30366432326364376337623363313964396331633833316433666239343639313363616335376532 -30366365316632376662376435636332386464663462333938373235323661663662306531373236 -35646635363962343635623366336466313435396639393336303761306631663939663362643735 -32366663626333663163393830356531366161643064316233393832343238613865646564666335 -37323934373361663862316430363735343336343432323561363033643235653638316335353134 -39643165346265343564366261366139626166353466313832646336643634623665383862663635 -31626633613134616439383366656130396230643764656462363763396663353130373464303532 -35646261633936323662373636313933633563313338656334353665323633623331393665333566 -39653463353661366362666530373830663938643861386633303137343938646263656636363037 -32626231623938656532323466656162666636343738363730663866623963333433393831373636 -32343561613162333361626632343130316137353666623336663139373761393262393934373030 -37306237623632343233663536363836616431636433356539616534363939623331303165333361 -61326264343233356539633435386531623437656462623537303935323633383435633663386333 -65666635373564623137656635663636323338643930356133383539333762656664386364356263 -37313463303430666338326634366664386561633563376464393738643235303062346564316662 -61656666663537366166303737316566313530353030343237373366346563363333363838323263 -37313234643437613637623039333366643233323431376534653463646238613133326161663639 -64626665346638636239353136386538313336336332613762376337626438636166396431643066 -66636532633038643230326334393262366564643063613961353866306531303535646231303335 -32366230656231633832333630616562363934303332376562333034353030333537393237656566 -33333161326430393930356634383364336665393665616334613438326365356166653561643436 -30353737393535353635396131626661653531623863313866653337373434613039323033636630 -33303231353566383138383264623736626532313535323963353863613161356238393835316166 -63303932643939373465386130643061393638313037623966396562663333336164336339326331 -62383233323766383435396164666436356561313937343630646365333239646639343731333330 -36343363633130656236336466306638343666343031353437636631343630303937643037636233 -66346162356634646363623161386236643265366331363732386165366561393336313039323336 -38316332653232643134333430343363653537323965633064313066623635653130613432613931 -61363238316434336664653461636432363931333933613038306335353463396136626666313163 -33323565383930363632316135353262663864373935646535313838353561376134323130383937 -34363736626235613233386634363536323563353363313736346231646131643062636536363032 -33636234333935646634363338393166383139363039613164636332353938373436663566343663 -37316664386162383862366136313764663232353435373265643435333935343634386536356535 -38633937633939653764313065613034316439343837326332316634323634336433316465616538 -34616566616334656136303837663138353165623332313230633234616161313962306661333566 -36613135343835316361653964383630336161633965396334663632353432666162306166313566 -35316630346561313336353166316138396330336637653532383032663432346462663636356632 -36383061666134376133616463333965383062383934663763616336303561306461626164633136 -61636364323439353531373937333364326432653866303530383636366636396364646537663566 -32656330376334363433353734333135373735363739303039623164623064386137623930626466 -38663533373662333034373962653661323766653966383336383566363864376233303965393465 -63343535646534666234633366323832633830376132613839383264306337323036326261663363 -64653035653433343531633230363762313536303232666632643535316539623330383738626432 -35343836386533313961666639643930326236343262616462383863396336393161633435633065 -30333262363636613931666630623134396363366337633739363963363462363862656132386265 -31373862376164343134666235396366313538323837373763663162623634313338373232383030 -35376331616439653031666334363639336633306432316334303061373432393439333234613664 -64653162633535623931393665333464656530656630363432383533393033313036373062393365 -32356331336636383037653630396333623262653232376565643135316162656632346235616665 -66336430363837386337316464373263373436666338643661666334313363323638656532356437 -61666432356466666634376666373932643939376430643564353835613432346264373138656336 -61323834343438363962386432363032333261356665373765383864636466366131386234376437 -62306633363435386233303534313034346438393465333963323035363030346430343035393162 -31376138343035313666616333646161396464663261366363323165366265343566653362303361 -34356636393532396436373466306339316232343933663239623331633534383334336261396464 -36346330643261396636383337343038656363386163336533643037313862396435623333313232 -37333736303637393465343130306663336165663430313961373438336138393533613034636463 -63643966366161313538653063383130303335306439636637306465363030346463373064313630 -66303037363538366138363037376365646664626532306237326636636665303862313234363532 -65653039343266626438393961626631323032346238356564303431303737623334383032373930 -30376263316634343936626134306634616438666264336234376261363237653337613934636532 -32613464383265343230643537626334643361336264613232643963386237636130613836363037 -32623037373562323031653632363832346235366133663530303439343232353831616461633933 -37303565343463623663643565616238636239363764333234303438366262376563343033643465 -38363432366135333334646461626163386235666461383861656333376331643838373631653563 -35326536366562336332366430613435666164366666313230363431653739393664373565326162 -63393433616232356539386566353665643538323434323563393436646437666531623361623762 -38393534653537313764613139353761363432643234333164386561323065656132316161666163 -34626131376437336562363036396432653637663361373538313334633666376430393562633164 -64363931343734323733343639386334353935323139383037323532396637653333663531613465 -63316331653930353165633034326638383161326334633066363763363531353833663736636137 -35386232353833326132313762613866343836346339376131643430663735363535613734663633 -65643035303736316463656663663736666566383534363739623737396530323564326365373432 -63643863313362393138376232626434366563316431613135626534633130636264346562656532 -36393939323336313235313632386539646133386434623232653332366537396266343462363564 -64643438323032656461616365346164343039316264616565313430653930666461656430663438 -34626530343163306433313561393435393266346134663865373464356630633166323066346637 -36306563666461623563633764316364666332376132376330313766653033616261666331363134 -33363630353835346237396639383132353738323534333764306462346462373531326138396632 -66653762326231326665323438316536386166326231393838313161396632336135616431346434 -31623361373637366133393364383233376436623266386562363237343039663236363066656566 -65346563323037643563356538623461663864343662326237366439356161306538303131643862 -39633232326165383334353735643364333365316264376661313438396635646630303462646164 -37616261326461653935363265356465343063393464373331663066326163333533643130343033 -61363639623736643031323165303764323762353137663364393831636163303430333632663932 -64313933346538383764373937366464363562366339663832656263616164616634363961626536 -37353738643039653332636634373038326130373836306562623466396138316265616531343331 -64346535346661323864646535383061356561333932333935393563346534666263626561323434 -32366161623631343733623861336539653439333931623439303061326564383263386339623832 -33383039666363646165383736323130316563623938306231353238356631656131313739623663 -64623365313563343632656166366638663435616633656534383339303938313562333238343330 -34306231363438393833613634373738326461306437323331313432663135323037333231393366 -34653864376536633337383834383935343761626338303165376336393138363961353039656430 -66303266613164393163366632663666373166393335396139353031633865343438636331623137 -62636533366431393435323135383332333439346131666235376332653763353833373238386264 -36373136663266373733613365313836383937666131313732363963366133363063313533643237 -39366462646134333166613465626261653761303131653361323838343966626633313763303632 -62353639663030326666643266313262333336333261316333343663653238373662356231383866 -30613961346561333062363363636635646162393534616133336463396232346435333538393332 -31663230636262636137346131306366626666663161386533303639353639643332303961633735 -34316137616238376261393932656134313333616438643533336530383835303961333866376330 -66613964343031303362386163393763393837313536383463393265626661363532343932386333 -32663761373465643338366165663337356530373536396135346539353632326166633139643038 -37303232326332613264396134663865323633306162333266306665343765346564316239306161 -64656265346162643034303462323864366666353537376434626135623461663564396632663361 -62643635303539353830343035636430646166633535326338316463366538666639613766643033 -39346631353435623163633539656331363533303737366438346234376662373331373636613636 -36646166633833396437353630643735376166393030356666653962616130623536336536633936 -34653137316430333961383737633239323565356137666534333861356238616331616635663761 -37393363333833353334656132613961316137663261633834306332363735623439623237616331 -64393539646466663238396361333439663633336162386462656566646237333235383833386132 -37323661633762333464336464616237353138666333346565313636353038346630333632626231 -66626261663961333531336137313066313039363537373364313363326166626361383832363637 -33393963313138373934366638656635316664346534316239373634396161306363623736303034 -66386163313039623137386665363936646166396661306665623062383263343737336632303039 -38363930353536326238363134306533363164386562346231363837633939343635366636663436 -63326135396665333539646130386434313036386437346264396534303762613832666134646435 -31396364396461303865643064643035666565366331663836663436643164626333353338393335 -32666339666431656464373263353332613861646637346230643637376234333762313262376537 -66646536393861626365376635336436386235646238326237363834306633323036326666326161 -61666663303562363636663065316262333833373432626435646431313866653236643132303639 -39303336313061363131346131656439623264636664383962623832313531346562356231356631 -34313862613631333438656362613861613239346630373234616334613834343835646565316334 -37303332643138396330323337613665353664623166386361316635653164643438343466326634 -33343634626634386435636161633534666361623366343237646433633866333031376238383933 -64336331383762626638656339306263646363376465326462303431353039646532643136616632 -30653333306565623462383235356266643532653565346164373864366537653838636263326436 -34353232643836313064306133376434323530613566303032386636363966646138316232313364 -33386266316536363330313566623664313738646565363563303231386533386337633462623238 -35306162646130613238653437643833396234633066303833363330346564386531393735373864 -373837666536633866393537393332316531 +35613439643036366262653161636232346233336339346132326466613161343263393632323037 +3765626461663264316537306566383338636230613236370a393239616432343131353237646261 +39633237333735313464613064373763326266313139366238656637386362376539643438336264 +3063633030643630370a643761373766363036363165666139396362323135383332323833393865 +34353530353261323338303863313131333362336466356638366635623865366564346164633334 +32393830363935336232313466646535623233313939313235656532373239386262323363636337 +34643032316666326630373561613865643834623737333263303965613733366430303230303536 +32653839666433626363313035646266616362383366656666636137643635313331306431396335 +61633238303136363665646533353065373238643863303337663437616666346265326331633038 +32613630656264643261616535616534303339646333316537353262366463663663393434333330 +61316134353536336266613939353932613532643135383536343539353535393663653139373164 +32356237316237646638373863313665306365316361336536653730653631313839633030343735 +37633661336432333037656636633530643631396131643364343938316336346665636530366662 +36653137353062326434623033383639356630623764653336356139343038313934316436396332 +32653633613335333937663233316639623438373633313837646463636363623439666330383232 +38313535663832383564363236376664303534393335666562373563376564346233306230613635 +66623639323561353831383631363863616233336234666132613939316264303231636537633161 +37323064313664393161663339656466616333363533353230646131636139633838366537373637 +31303637623462326236303335323562666462616239383239306636356663636337313135376332 +30363036306164656433353735333131383336633335323833393966306130613164323931316237 +36313362373535616535303161623166323134613662383862656265303632613261356563366630 +64303436303038346238666430626335313830396635393631383661323265663966626635356337 +33623361333066393232303061313361386634353733386238383266323836373564623239356566 +31653834386530353066636233653039663339303432303364313630323231623533313839393666 +32626364636538393734623133346430626265346536643431306639386639373036306234623065 +65353338303739643561386266356432303362326436373864646330313039643763356634353462 +37643764386563393736383633323431323765666562663965366531333735393931653032653730 +37353536653832376237303765393862316335656534336466396461626530646163613431376534 +36333536373062346662666664646563316162313835343431373165633766386663666464333564 +30303136646131313430666330383964623837656534323939666631656234386564626562353232 +37616439303761613434623361323534393737653439353565646365616231306565353066656430 +38346332363461383864303163656335323237376461353934363930353032343163316661396532 +37346430336564323237366261313330316131363166626366643463373830303935333339303239 +31353332383361643563623765646236396335656236323131346362373332376438376362656435 +64623735333330323930366462306631386466643537363063623865323161313262316235333835 +36396636666263616330626565373732323238336465333934396432653661653031333835303939 +36333636363564363638353734643439626632623962333037656131613937643062336338316163 +33373131653338343835343930613263353035666137393065613061613931303533366435643638 +38663431323034383933303166323635656465333935383066353538316332653436393234336433 +65376331306365363762643164316439326135393865643438653565616266616534373162376661 +32346431333130323533333831613538373533353738306238623064396235343234346531623862 +30623162373035363734316130393230646439353461323062303461393232373037373736353337 +30656463653837363139636536633735663030333465306565303636323036383566636537633033 +62373365643262363661383936353136613032323632323161396161303336333263613735313938 +38653733633535646637653337386363316331326135346535333838323331373738333366333738 +35343965616236333231646631353536633062323533663134623531303736323864353334373766 +63376635346137323632373034656339663530663637323230633361366164366361653735373963 +61306633373330376663613236346636323837366161633032336634646239326561643430633334 +61643839363530663139623332383832623561633836333264386264626432306333323935663561 +32303463663838366434646264623230383239353639613335653261383161383730646334613162 +65363430356338343462653131333666346536353264333237303363643737393230646236626363 +37346261636165656166313464323931643561323863663064323435363064393866393564393632 +32356439316333653230333431383764336565306362326339393332653734383533356633326366 +31363237666330363734303261376536336632613664333630386137383830646539666137336664 +34653231346639313833623530613531376165343035326539326530386338366138363462613430 +63656539626637303932313339323566623332396465343233353261393234393537633631396665 +34363964353261303734343530353930326230333166633135653437626666376238613062666339 +62386663646231663563323861616564633862326164323638383637333739636434633038653235 +33313564393965646333343336343762643362326165323166393066626334646537306438656164 +63373834366438326433366236333836386236623937303434643762333532613764663039383235 +36323034353064623338663239346431393965646462636633646163623337383865373063333737 +30646237366635326532626238313864623732336664323061646435653466643765323064303134 +36386266313865366266396166366134383130663536313334383631356132353335303130366366 +38363865646337383330316464353439386232393033393034303732373466336237613038356236 +31386263643031303265366661306163393161643634353638633535656530333633613363646635 +65333439613030393235366437653361303066613035333966313635316234386266366430376664 +62343664646661376435633334396261616230303466373934633766343132333966383033306337 +32366431653032643531616365663839623432623132643362376538663462656536653530323832 +34373936643038616266373932323734396338306364626637366131353861616433656135303963 +33626538336438383233646635383164386365616638663565336232376133306434343538663563 +64326366626631636231623636653662306365626432326665353037616239616630306137633538 +31316133643964366666326465303337343466663064616431376161623133356465366263613337 +34643334393534313235363531663066336137306533323630653533353834313466323332363735 +62336134373031666135663966646630326431663534386435383536306133353931346361383834 +65313339396461643164353639373135333733623334366664396236336531383637646336643935 +66353934353063663935313937373230353135363766656134346463623032373733336465303635 +35643965653539336230323435396462626437353238393064363934643866306264306231373266 +61623537326531383664323830386265613034313632303664633461333137353936363664636264 +61336433393134326237636136613766333938323736323831613863313538623137363330353037 +63363437393736623261396165373233316163386364613733386632306362376535343937323937 +32656431396435393663383063356162646534353831643161373130633135366365313965376131 +38323830303133346139636338313837303030376364333034643466336436396432343136303862 +33363333346139613636316662353363376433373931356264643734316138323835323430343831 +32343438336266323763333432653865366333626533393034376665393032623331316139366464 +35636562383962363131356130386139323364346662393434323861633136393534643534663434 +39343833616438343233656365646331363863336366396431346161623662646465623363633036 +64653439396232616164383538333763636366623463666561636262666562393831373036663333 +61336163353133316233353134383830633032386534303533393437333136616563613131643261 +36356538633733656631363637656362343732626461383237303664323130646634666562303465 +65313337383265316636333837623263643138626237373563383765356563316466383165343435 +38316432373433323036363230396231383565616632663737333965313034613136656562383966 +65363639346161333738373038323065313638383261626161323738326431643131323064376664 +65353964326434313438666536393431393034333537623366656364343534616439396430316562 +66313465306563373236396539623931373166306662616565653636303632393435663638626664 +37326566353863383230323733313164646561326666353837356235393130363337626361323833 +33393639393930653666393862636235353035306238643463643231366434366232396366383665 +61323234336534363534306431613331613232626533663736633063313462306666336236666365 +36613737623534353162376264626266313730663962663961393061346163656531643362373864 +61373032613861656330303964623330376332353463663066613865623931336138306336643437 +36616361663461653639616463623462376433303433656361356565356135376362366563373039 +64333633653563323039343932353136633664633735613363613834353131386239393133653932 +35396437396566656138363339613230353263623330343430346530313330646632613834656233 +33646531333536336436343234343235363064386363643837333062623331336439616330333461 +35383335396365643037356362346231313737663632306436303136623763346666613735656439 +32626261303635653165356236366631616637626165343135336238633164376364303861313033 +31646435613639313464323338336237633435393130353466366265306462326632316466643462 +64646438353064326161353538626239646463623139626130326438623265623935313035313338 +62656431636135636535393133636563353266373336656335373337386435303338326666383862 +61353930633632306564373239656330373566363935303663633530616238316139373865616339 +39346431383238356434316231633033343937323031656665653738636465643436323335386434 +64376165653537383633356237313965646237363435666238336664303139303933363865333630 +63636434656661336432643639386664356437653131383830353236313239623965356139633166 +63306364663831646365383964663263626265303331373733626466306335333264373438316333 +31613963623562336131666537336665306662343331336164623037326633663532656333303235 +66366134393431303062356135376339363035333762333965643336363130313433393530393462 +64366266363264626161613830643966613461666565306362623033303432323532366438326639 +36656461613165383733363761376662313261613632333336323232333932316534613234653230 +39646265376364396361376630623763626337386236646463393030356161373163306333386630 +63616433306130313065613065366339373863386638363338323337303138626338663861343530 +65663631316563306666396335353164343830613635646465663037366238373666303537303338 +33333931353362363834303666343932333965646363643061393434646635623637353936343931 +35393035623331366230316564353433316463366165643864633334626439643265323432313131 +37316161613036333963636538623739666463353466316463653430313938353438613533663464 +66616535316437316130613931323332386666306530396361616235343963333065353436633461 +32363839336435313639346265663762383530383335313066633865323366393734343638316238 +61623038613966613330356132663330376636613837313264613030393832646339373630353637 +61326266303733393531383966333765336637333866636433636436653836643334343963383364 +39343931663534336363663363313262666264643839326334343261343834663938363038373132 +35346564393366383562653862393938343537333162656131623762353830636330323336626363 +32376536633539306262386530313464313834303964643230613162393335656565346638373933 +61376666343039623965656335663066623136623061306234666664333335306465383834303764 +37656164373164653261333236323530653865373831303932323532623234613039623532653963 +39363630336262626433313862386464363138643937353433656634323762383336323662333266 +62306435316531633962333736376532356435353935356635353665303762393138646261383363 +33353062303739363231396232343830623666376462663564346432343439653764386234656337 +33373038363462613234356131666165383837396661396461353163383435366133313062623138 +39316664376363303335653138656638383133383364336661316166376564346363356462626463 +66343135306166323064653562663737656635376639636334393863643432646233376466386238 +39333233646231633633623033323139313461366436373362343731376466346664366439316132 +32323866383138356261313533666535373038376632303139396266333537336135663064303331 +38663731366366313965313362366532383232336333336139646431373739386361626333376464 +65353139653661313365396237343233363865333030326361373336326532366334343832373764 +37316266356536653862383862646539316436336163623537663163373032633931336566643166 +35363134663634383735626135663664303764633338326133613036353830393134323439306565 +34333531356335656639393737663366616166313430303637306464353138356437333133626234 +63613637656463333437396363376638356530636665646262386637613030613637613534396138 +30306364386266616566616565306533343233333663383836613332366136623735623134623338 +61316137333761373130383230663039623434316637613161383465346264393762643038646638 +62643439323339656265353063343334613462346434306462313339393965336563656662373961 +62623163626335626363626562653437616330616130393637353033323865343533386337343933 +39636438376266333233343265623330303164666566363666363736326236373231363662613632 +63626566396566303839623637303931373139356638633161396239633431333863396639616231 +33383161366363356139656463616532383233653763303836636365306436633735353932363861 +31633730626461313733393964653433356330323262366434323833383732653065326232393962 +61396634616138623135626138623566313531346562663830356635306663363163333537333766 +36303264386235653034313934333736383239666431623730323432666432313834633264653631 +37646461306462623664303134316633303632636162333938373634636331353336643033623938 +66646266393262623062636365366261386565656136323432336636613838656531353964666563 +36316262393564313034373261623132333234646164323235316531663638373337613130376364 +62616662333365376565383837626566356438653631313235356536643034373434393463303935 +31363231626431363465333964323139323830663363653431366334303036373833386333363264 +37613134353732313061623734616161316537366162343938313963323735313864663166326237 +38663436646535323166643130393966386332323062366333613862613939353733653862616665 +65346332363962636536313937313938613335366132613464646162653361323361643766646439 +66373137336531306363353532383865613064613333373435616264323635373631363734343166 +31623363646566396139313966353539656265353636316133663635633839336333313232313639 +33336131623865663764653638663237623831363034396661303534373838376166623836326538 +64646236376337313039663335366163353437386333373161383164613666343233373731326164 +37316464316139316166663132393466396237366632343263363962613235393137666365303961 +64633735646335323438623835353564313334313464306462616436343765333335306365663733 +65393530643633373662663762663563376163316562376435396661383739363331663062373166 +64663030636561366562363437663438353031393931303563326338643361336338393630316534 +35316335646465326464386630663262616335343766633930346466623465366238356365663063 +32653931386630336166383431626664343538663565396536646136633935356338386665393230 +38333933623237366337336365353935623030623666393837353232616433666632396636316133 +33316237393531643131333261313630373338336437306335353932663462353133333235353435 +35653432626239633565666365623139636230323263663435343165623634633938376133323039 +35663231323563343366306564363830623934646334386461623134623532393534346237323538 +35333936333166373037613036346233666239633236393265663065313265636534376561666436 +35343035376430663466663535393962313739313763303230653961346566356134633361636532 +65353839653435376261626161343531396636333361633431363236616137323863646232376465 +31666137653534313439313737376162393765326537643632363338366139313763356363613838 +38633932363063643662383930663833346432313135666134633933363466633965316431623539 +65626261636666623866633930386537666338313664636264666363333736636437346463323539 +65383464346634306230626139303739646566356131333830333865343661666564366131646230 +37306665656562653138316333396530393263386166623534393333363565646664656162633161 +66303863373236353738383034656531363532666132356166383139666561383464396163353334 +66316566383136343230393437323731663761636533643738616463613432656663636430323932 +33366432663337316537383735663735316232376335393563306330653535623138346166363763 +37326632363162383463353462336663363333613831353466313433366339343635356437653532 +31363065393066303433313264656339316265663533316434363233326131326431376263643432 +33626133393735313466323465363534376338343162636632656334623964316236613432343066 +37663331653935663930623738383131353363393462396130623131326133623934326535656532 +33643839626233663361643337393131343438333538396431303766336634303466353037646335 +36343536393138303135346662636233313766373961386239393636313838356334643432303935 +38333662396333643861396233313332386662376464653337623935663337393762363331303833 +31663765633533613561386233356532363031366462333663376139323665336231653533613737 +66633765633361323732336330613634643064363731366661303231393631636435616633323538 +34393037373064373062643466616561656661356365663336623364366531366234613865336530 +31666534636263343761353364306638636230353734346334396435653866613764366362613661 +64373962373335356166373165386230323734386133373238306635646637353765633434653538 +62333339613132663634656430656564633465353339333063633466376534636339333930616162 +32623337393666626334313037336163633332633330643766633031653331646631343566363865 +39643537323563366239626130376263623631333935623565316232623335663234636262323761 +62323637623064323663393163383562363262303332353738363133623665303535316165383238 +62653338316232336663386463396633666663663363653333663239616332656438613664396463 +38323762313435346263636437323833656531333765663636363833633636303837396166393539 +36303832623436323637373064316535313734643034643033356135303663383264303730313936 +32363362386131656536316363663535333133653137373564633939386435633631663032336662 +66316565636639343030326263643930326631343033333564636562623532363639653366333139 +32333064636666313663643638663765326263666538373765636131346232336637323938656364 +30303735613466333434386330626435353833636139613035356639373939633265313833356162 +31363764633937653936643136303136343039383830666334623461373335326638346236303536 +34643836633032663539613635323433363565326138393930646434653064653339626332396139 +30353936316263396461376530333061626635363765373036646265356366343266323961393236 +31623334643233623062323633653864343531396461643637333561386534633066393435383766 +33633465646530393333656264383639366637623139386361666535323334373866383836303035 +65333833333838346363333531643134343865383061333865646435326631653130633333383663 +39623634623335363537646531386566666434303533663437643637633466363035663566393665 +31643065303263356533343335613161666533303536383762313663323463313332343564623231 +39373536336363343938386237633334616533323835363031373436383631356331626238373662 +39313564656634663836313936636237643831376433663861366535383364333365623134323662 +64363964656137313365333165393935643465326535653537363237643034356535333866646231 +33393965393761396336653437623037643833653162626335653832376238363336633430623032 +33636335626662663663323034333035373939373665613138323939663766363962303233393636 +36306564383961653833626561383361346662313936663336656666326366313530613637613438 +31636332656134386531663730326162666436333133653766353861646434633433306138396365 +65623032656435663233633239663835323938613533366666393634393831623233613363386536 +32623637363363363237383465396430396462343135346135396465303439303033356331353863 +63636463343062333437643330373462346466356334366565323466313531343666383338366138 +65373838653261316364316664616464626466343937613339363735626531326136376134313362 +31666666303139313433353335333263633033363437356563653334366330366632663535363861 +31623934666430646663303636323434383263653632396666646532383138346430396332633337 +33613862393533313337383931353130313135303833633935376664643265353536366638613561 +33626637376639313661643732336662633134353536313432333232333762336165326263323934 +30316362613730633730393832663365633164653035326536343163346333653432653663633134 +65613832356535376337356331343037373933383232626133373538666538653363313838333065 +34356464353662313136316331333034343738323934326638613230336233613637313162633166 +66343336383331316335386166323930326565303766376539353462336236353638656133353632 +62363432323863306163353866343663353839373935396339373861363831373166376262653934 +34376166663262303166303437383937366230366538643666303663303032376666393737623166 +38323731346665303536663333656331336662386639346661376462633864656632383338376335 +39623964376361396338643037636464313032626363386662303234616437373965303532643639 +39396135326239633031386331383463306438666362336636616161623933626233316131353730 +33393461386666656565633731303530343338636238666531306263383030653533613931343534 +30393032623333666465616330623932383232653033663939636239383566316362353963663763 +37633134316164613730316630633864303664626465306566353934636364323539663339636632 +64623839313932323239353264643130363764376234656639373366323730313833396561336132 +39386462313037376466343031653535343965653631343030323138363535653537336464616264 +38346535656365373734363232656530653832383961376530653734336666653339383661613031 +31633039393664373931323061636533363433356535623732396339356630353537373362313337 +31333935363739303035613038373563303061643863343831663166336635663832356265373239 +39653938366434656234613863313533643665336131613735333732323233353431333934353938 +37323430623730313239376565373766383662316133646638633830346334353732616366326662 +65323363613234376364393838356637643664333563393663656537323162303362323933663666 +31333831616631646561363438653534656532326638656364333334306633656665626433343137 +65663132373434313432303139393961356237323765656661336462613439356331393032353035 +39303231303635353634333937633038626633616634633965623666646232333137623261636139 +30646537633933373261633739633333346362346430616161663362343066306161313464343635 +31616561643261356633393931626137613034646161336634313435346364373131316234333838 +34616637316462346131333439343434646331336637313362346661373835396135333530643337 +38393232663734353235363230626262653930393664383362613937396430353130653235383631 +34663963663733306333663361653332363036333365646665643165353864643766393930653234 +36666462333364363063393831373435363631336565653132366561386137343034666632313162 +30646566313133313438396233313532326439366331363432376461366534663062383835373839 +65626430306430303039623063353530306262666565373163366236616339353764633639323235 +37346336636134326132613836383562323164316666373032363733383063356262376165373637 +63626130663335343237303138313261356235323065303637623464613737303533656339313031 +66373362353764313834386437306533653665363731623635633665376232656462653361643064 +62616363393936643061393039636564356437356136613337653532656337666337316134376333 +30336162303833393036623266346161653665356534636634396335663562626231613336313537 +33323735636235326362373239643537346630343938366665633837663266393861353030353737 +34666436393039663730346638363935316163393562333532666331646130376236666139366333 +35363531366665353134303031343632643034363836306135336262306630353763393165303764 +323530613234336162356635353634373264 diff --git a/group_vars/stage_qa/plain.yml b/group_vars/stage_qa/plain.yml index 82b1fe9..49d55d0 100644 --- a/group_vars/stage_qa/plain.yml +++ b/group_vars/stage_qa/plain.yml @@ -260,8 +260,11 @@ elastic_stack_network: { qa-elastic-stack-elastic-03: "{{ shared_service_elastic_03 }}", } -harbor_oidc_realm: "docker" +harbor_oidc_realm: "harbor" harbor_oidc_client_id: "harbor" +harbor_oidc_client_secret: "{{ docker_registry_oidc_client_secret_vault }}" +harbor_oidc_admin_username: "harbor-admin" +harbor_oidc_admin_password: "{{ harbor_oidc_admin_password_vault }}" postgres_listen_addresses: "listen_addresses = 'localhost,{{ stage_server_ip }},{{ stage_private_server_ip }}'" @@ -302,9 +305,6 @@ pgadmin4_admin_password: "{{ pgadmin4_admin_password_vault }}" awx_admin_username: "awx-admin" awx_admin_password: "{{ awx_admin_password_vault }}" -docker_admin_username: "docker-admin" -docker_admin_password: "{{ docker_admin_password_vault }}" - management_admin_username: "management-admin" management_admin_password: "{{ management_admin_password_vault }}" management_realm_admin_username: "management-realm-admin" @@ -338,9 +338,10 @@ argocd_server_admin_password: "{{ argocd_server_admin_password_vault }}" netgo_msteams_hook_cd: "{{ netgo_msteams_hook_cd_vault }}" netgo_msteams_hook_alerting: "{{ netgo_msteams_hook_alerting_vault }}" -harbor_oidc_client_secret: "{{ docker_registry_oidc_client_secret_vault }}" management_oidc_client_secret: "{{ management_oidc_client_secret_vault }}" # smardigo automation QA gpg key # pub part => https://dev-gitea-01.smardigo.digital/gitea-admin/communication-keys/ gpg_key_smardigo_automation__private: '{{ gpg_key_smardigo_automation__private__vault }}' + +hetzner_server_type_kube_node: cpx31 diff --git a/group_vars/stage_qa/vault.yml b/group_vars/stage_qa/vault.yml index 0a5c07c..a1705f7 100644 --- a/group_vars/stage_qa/vault.yml +++ b/group_vars/stage_qa/vault.yml @@ -1,618 +1,618 @@ $ANSIBLE_VAULT;1.1;AES256 -66303561396538373166663562353763636265313539643562366464633037393663303637613263 -6130356137393961316330336365396339323233356334370a613231383533343735623934656165 -37616361343964656633333631353261393239363637636334303739646132386137343833616461 -3435646439373631320a663634663137326465396434386663373261303162373238653464653936 -63663633363661386164393666366366353862613036633831666631613236386361333232613031 -37646136353834653465613166383739383262633736376633633361396634646332643638613365 -35363964373932623739663761306638333261336635376465396433623161356134353130303030 -66646631346464316638623236623934363031646138653466313939623634353830376537663931 -61313562316435363435303437356630333134636133336462376164373663626461393233313735 -37333131613936323736303238656335653731646562333239343736393238633233666239346534 -35306363353065333363353133353965333937383937323164343834613464653163636135643564 -38613634373938633661353561356165663138383837666230646531643732363537366461383261 -36303933303633643265366139623734616564653439666232333166303064633433653365663933 -39356535343264313961353037306363356436633064323937363133396463613962333238653432 -38633635613438653032306362383061613961333532346538396362623064633762356537396538 -36643434653163313537323862643265633435313933326439626639323864656533623530323332 -66363335653964393262383139393263613265333663656437653066363239663937366264623337 -39656535666264313938663061643966663134366130613736646166333665363431386161376338 -32316564323865363936633366303930613661306134356331366637393032343436653330366538 -63653338356135336432636139623632306535373539313231613531333861643939383031393435 -64373235656430663837356332306131353132613235636261353966653935326431313538316334 -30313737353934383934373461336538313361633862656132336262366163396431396638326362 -64326533646235613961323732616337363731343265643530616131323137326533633130666637 -62353131653063376138643733623735343033383832613431643736336661366235633837386436 -32613032343130616163366133666532376463373465643035333733306537386237353839346533 -36646532653130653330346365313730333437663162336563633536396435366533393736373138 -65333533306366663939393039346462303061393939356464366633653338653532343834623231 -35653432303133353338366632333633636431643536343865373164306134643734393064633263 -66393339366534333533656266333561633437653638343966343835643337326634663532326132 -38653065653230623639613761656635376461666532636134626532613331646562663363303563 -37333437613237613434633933306362663533363061373833323432643833363863613464313731 -36646363346637656238306636313733626461383934363066396136353338626239633761316635 -38323736646434656631306332356662396533396338613338643965616339383763656436636561 -33373633303362653164366530646563636532336334393334363238643638316634326437643766 -35303962656333623065663330373765373063643432326336326636613465316466363565643362 -65656436663462623065653364393264353261343766613231316164633731356362653334346665 -65326432373365336235363464333633303037633062626135663437353837646665303266346334 -61336262316133373832343235653830306336623637663338343565316436353733656564663731 -66363563363437663466363064333866333633303134383064636232646264383936626663326361 -65326266373861623064326134343231333732373830363661633433393933386430643937636635 -33333362616132313034363439626563633934393637356464333630353366663533386661376635 -65353634343538386630643438393538343231393433386239656164613765626665633239643935 -38393465643537323835346237373065396535346130646561363632373138333039653638373039 -36373232393936663937643136396136363962316638316137303438393333656563656134366238 -62623838636361306665346235656139366265646332326665306466643832336562396464666238 -30356539656165633434346235326536656262343138633539383338646363316231663564653430 -37663164326535666137633132346430363433306536326362636535626430383034383236663133 -33626365653931343035373963363238366336653266316431306439303465333835343663346666 -35646630623333353965336366343030373966326239316264373735343833333633646266313730 -61366138303430306630386362336666326664643330616336323166313535643337376534333763 -35373332346331383062346133616332666532306533336464653533353135383533346561643765 -36336265356435386638613231633139316335376232326562376639383033323634333664626364 -31646462303439663138393638363536646561306431643635663766323038336236623162353732 -31383331656363393962323863386262646563633638663863363235346134373138623338326239 -30323161653835323462343162383837323239663538363530343437326361666265346163373938 -33366465623766326264383863313839333831373530336561623437663931313539353366666638 -65636130336363353332623836323236316162666464633934613032663033373332666234653432 -64363832616538326566663635343238313132323035636430643837306336613063643066313436 -33373264613931363036656532393634376262323061366564623134653731386365346534656162 -66343632666365343434373437326139613038326636663361343639336235393830623038623965 -34626434633230333130376264396630653831646137346333306331303462353036373531313236 -33666536323966636133643732343264636534333166303037346165376264373437306236653764 -65613330613137623363613064313531376465666230316461376536636232376533376434356132 -38393034663530386363373535373937613333346265366563643163366536396433663462343431 -61376666383534663064363465356138616461636565353731643064643139633234636464333035 -61366136653865323836373530383336316264346163336365643236316461356461626431363839 -66306264346135343834343261363135653065353565633166643739343037343663376535366164 -37346363383535613062386266343362363438363430316364386632656333396437303737376464 -62326632303033353461316232636639343137326662643932303038353437313331623138396438 -63653932393739663133373132643837346136643664303039663766353636313731313864623263 -66393165646464323438346230316437346161656336626334306336346535383866353136393230 -64313530386438343136376366633434353933633131616431633764373937663539636661383965 -64363536343137623763623334386465323833343936633436633465633631303365326561623331 -64633836353533363363353337663463386262316662396330396434393061356236336630623163 -37366432643461386633376636336362623333316466636338353535623664383230653365653239 -33646237643232646363613539313062646265343738663965303432656639636134363562303438 -37623438363364656237376161666431623736646635636232363134326539643230326230303062 -35663837333563373661333331636463343437373333643431653830396165663834393866366634 -36643834653233643537306432636137386136316631663362393334666236323762633963396638 -30373661373266383230343561356131323365636632363761353231613936386438303835356137 -62633564336662643135316630643966303435616565313533353037646638646338313933336437 -38363734313034356132303733333562363763396533306233623865396231323039373665616366 -39383237633866323330313635336235636639396163373066663363343535393233373739356666 -30663465653463653561393665353663626264363232343932663663323764346464386434323833 -37396231373331383466666132383934323337646636393432346135663937636365373165616361 -36663066613336393435633239303865653137333130343762356136633466393463346132326264 -33613733623761393831303032313431633135613762626666363662333861353037373766653936 -39346536613964396465316239656365646664316462346430303037353765616334666565663432 -34373333643365393633306437613330616261346236333536323964303738633762623963363736 -39663761396466306264333230376430393065376535303736323333363261663036663031623336 -37393864396530363138653862333435373162323936653466643662663939376364376437396538 -64353538623862303135346666323134636635303333623334623662326630393562346631373061 -36663032383064653334396330313739646136306636623264633438643131333464386131376535 -63353963363166393237653534386465386662323761666663323934643133663563353464383764 -33613930653732613163616336306231386130626238373136376635656636333730383234316335 -62663834366638663064346431363162386365353562313662353536373862306139616431663631 -38626436393037656565643065313966636166376234663830303262356233656531323632396637 -63376238613431396537373063623631623032646331376534623334373833646664633462613636 -34616262396366313661303634336161333635373334346637663130636337383566633339636537 -63363263326166353536333934303337333130383430363963623165616537363631386266613762 -61323038613862396563353832373330653733643931643466376232616239396563386536353634 -31623738656435383832313139376262346231633433396566396231636262643330616461373366 -63363464626536383237313261663035653964613066616361316334323737363132353238653937 -34306631343261626639366438623736323166326130646164336636616631333433386331356638 -32373635303730346535386539306365653630633136323038323861643231306537383430393565 -37663439656536363739306461386161396538373230333034343839393433363933386432346366 -37646661646238373632346463643232313134333536373666616661613664343237316661333566 -66303364366461613330393236636366333564623263316437343663636363623065626562636363 -36613939636435626635396539356139303865616563313734303964393331666262326565386431 -64623566333930613131626166326237633365626262316530393966623864626664663161383530 -61363232656236343763666431326630656230316232636130346332323538666433306534316636 -36396161653561326364643933633737396564306561633036363739383638373136633532393864 -62623334353861616363373030646531353433326366393935393463396539366635386435373934 -61363936396361633231346437316438646565386637303762396636363066626164626265323335 -63376336333064356634353861343764396463613233636638323436373335343561643862653031 -33346138333566376361316664633831366530313734616638666564626230613666353262346235 -65373834373933306233336334396531663234623434333764313632653261363762363630313865 -62396537353831633435383066643932663536623532343064313738386138666136363566333661 -61623265356236616231346462653663663066613132303934613132363963663830356432656165 -37313535333661333463383534363465336666333961623930626162383762613836613130363365 -66306333346666303065323139613836353565616362386262323163366535643030623837613633 -30373366373631643136336538633462666463303861393662343062326265646535643134363736 -64653336343866386361363463356233376533303466626164623032393361346233376337363634 -34623534326361323734633263366465396563396631633939386264313438373536396235323334 -33353962313161306633333331376464636637353365643735653666663164346430643939616630 -66643163323732656530613463343364666165623064663464323234343562396366666330666533 -62333963396661396237333366373665653933303832333032333635303735626262666262623539 -36376266393137396436346439323463346261393932643666363834396435356432353266633035 -64666162376563396636616636316536383664626565333735363535396237643933623263643836 -32643161656335396362633961396465393665323838383266373830353366653530313065653032 -35363539643565323831623761323537323732386333653863633564343630383437653863316631 -34626233633763363937353033636530383162313866613466323562396561666133373939623965 -35633965363861346331663062623461386664373133323862626135623132323766613133323433 -62643730646663383164323734376531666236386361636330363635616230323136343238326566 -37323261386463393933313931343363313865323532656663363261366234613934623732383265 -37303136626333356666363537356132396462636635326563373230623538333832626265303232 -62656135646431313964383736623833343132653364306635303165366462623134303434323730 -31363138633166386330356439333362663730333461656436633534313963623832643966353138 -37646638633461303734373062636364646539306133363266666330306164373536636138306161 -33663034643364393061626235363833623865366535626632656265346262383536663539356130 -30396139356332353531633236396164393762646232646363396665313834343039653461663136 -62336235646364393231663066643830383331386364663634346133613833626138626237646339 -64306230373236313730383132666235653938363231356238393163663331373137616331363930 -33643964366133326639363966353164323233623965623366393132643537646265613431346532 -31393833306136353930323330653239326266643039313766353264613263383066303462336631 -64366365363862386532346534376566623031623332616135353730643931666434396236303761 -38383734333839653332343939623939303064353461383737373032306265626631636632326466 -35616563363530396336383838356533623034333137666536616636653062656362643637316139 -37653436376464353061353064633430353838663763373036346433376264623461643538666336 -64633837336162336135653033616464313533356663353336626339363964383966393233313035 -64383430643564356564346462313761646139386530346433646637313363306530613733343930 -39623762343834613162333338313333643233323761393534353830353637663230646539346663 -62373063366633636338336661633337333437383466626238316634373064656134616138366432 -66323132653964316335656639333138336664353938393531303861613031623638343330313761 -64353166623561363766626563653331303430666261633063323663343339336236346363373634 -39653232353562386533663561383066306139373231316237383163376430333733343066353332 -35383836643336386637306437346665326263393934323636656238613736333463386664373735 -36326438313932326433623531323634393566316234646661626535633839386365653938666632 -35303663626166643435303766363363303735373139613434326431313138666263373665666465 -31373036306430646433613766343064343937323332613134666431383138663762333837396331 -30333861383235333963313161346538323335636464323766663566623032646233643261643764 -39613033323035633935333963353130643962613666663739633562386632656365396334646262 -34303233383832333533633836656436383633343162313933333464396466383937353466613565 -65363531383636663630653963313363633438393633313564383362646330353065643236613732 -38313638633562393631333030643161396236343137366136316564356632633232316632626464 -38666438343635396238396666303132333434316137653165333837353134633233353037643236 -64353666386661386165636162666465366466383366363864656161393731313231393637383865 -34343666636437626236356165313532366632633232386235386639326132346364613033363138 -31323537303833626564356431643133346430366438366166313131373833323338306666623966 -31313934306562373561663461663964626131393363383830613366303661316161363164336637 -61316661386234613761613430383361306636306638393035613239623736303137653439323763 -64386466363032633065346334373438623863326537326361343562356637326538626465393032 -33396432666631393961633134666634393033316638333833366231363133336638653134343339 -32333834383761653161623632373731343064303766333332316635393233326635663865366334 -32333334313839613239616238656137323966636534633834336466333461636230366639313938 -35316533316263376633343032643832643061346339623935616132396131396462356331636133 -36313465393262336363623430636236333266316633313532613533356632363538396262663332 -35663233663030393633663766313736303964396633656363633366346433633836636130383038 -64313337363961363239633933306362343232323837616633313130613663393365666564366639 -35663537396430323030396136663261636332613936383366396233366161613731336130383731 -37396163376437303535356438366133353663303063623136616139663831306166353066623333 -64303163386664366666386638353530386261316630303835373664303766633339376636636536 -32343637626437653566323636633937343839343134366537633934333133333735373634316135 -64343062656136393035316137363761656133346638353330316432353732666130643762303437 -61383735353065623236643534656465383763303732386262313335353732393666333034333365 -32623563643164313334613261623365653238366565636438663238626365666665623564653039 -33616333346263666331343164333332633261366263643333623064663632363733316434323834 -32383831633538393365643065343732323932636330343264383264356139336365613939633966 -39626664363565396135303262396336663433326632313263613965383533613532396135636163 -35376631613265613665373031633431653738666635316466633366333063646665383438363361 -34633034346439393433393137356363323431313865663265313363626564643961323265376261 -66663864343565303538333266613130373562633766613934643331333736623330616239653733 -37313933356263623462393931383863326264393737313965643436633237623966643762343963 -35373833333733373536616330663165646631633832383565613562333761396566366162623135 -34363932323739653764393635386235316439663461663366353032653963363466656337613865 -38643965343830306235326661616131306233666333303638383561396639623362303239336135 -63303964653433643037616364636465386335653631353461366439303162383166646461343738 -35653536636535663537663738633836663030643734303838323839303834373461646563353538 -37393338333931663734633565333466626263663530343566383934316662313137633535663435 -66666133363737633935656237393533396636653736333735346639623531626661653064383337 -62623961316136313139323761656265306434643464396133653030393465323731636165616434 -32396436323832393630616262626666373565306264623035633664616665376131616236373939 -64303439663632623131663061656330323534376631313461323566646538306162303531343832 -65323235336462316664343662336563613435343636316534343838396634613765343231613732 -65363766383336663738323933616334633662373131643264393035356664643831643832623537 -62636466383431643636373337636536376633353339363464313763323864663365363035333234 -66323531316262366239336464356530363730643239613737336136383436396437646663373032 -36373964373861313161386163323933343764633464396138656339646431326661306636316336 -66303338376538393538633262303163356133616631666137393832326330613438343962613330 -30316333386332623765396266393839626438646536333539383732613061653430663535393761 -33316664653164353763393730383730383832643035623563353331613965623434643235343565 -36306366643764353930373336373732646238646335316465306664643566303661633336616531 -35643263343335643762653933643332353933373866636266346630663438653832666239356334 -35343163613265666433666334636363393861656336666563653738353934313635653336393836 -32393730343435633035333430656237653534343666333634393964323064666634393135663038 -34396337326638356331393062373664373436323432633565333166313735666366373332626561 -34313561336661313233613832396138303965303862633765623438376465393839316363346564 -64353130663537623331353765646464666537623137353665393762316336366161303934396133 -35336631616632376535323033343361623636373632383032663735323137356261313365626664 -32323832313863666263383735656166666432303438633062356665656134636533616435386238 -36363062656530623736393461663830356231383761356564666235613463323631616262356638 -36336539663062623036343664323939333566613163336637366337386236626263613636326331 -63316435653433393634636565323937366562393938623463356535666631383230326431393763 -37616261373532626434623333393237366165623264636632346264353135633837393238646534 -36366337643333346337326332393130373136663564323032653333393965316132636535616166 -36306338326362333962393530343332336231343930646465316565386537646139616236633961 -36346237656533623465346438376434373734376539656136646632356436383134326534323534 -37396566373936323232326433383164333565346562363939616133356535356538336564343231 -39386136366366376261626561646533636634383766343031303132393964646639303032643735 -39363961626565346462313537633365623536613332666239323230306635343036353538646437 -35396336313963383536393631393864373837393532333937313931323363326634323837393132 -62303739313837336662323231333263666536333537636430653863373666626639656166663033 -66633762623337633461653362623032653739636532313934383364393963313763636261613931 -64323134653963616630616163666436613036613237353462663138633030323761366636623432 -66363434356139386537643061623866396263636364343439666133633339376230346236623766 -37353934373439643563303565323830303835303961386362333763303937616233666565663937 -64373338396461633334393831326563333834326439346234366437316634353339646234356139 -66346231636266376333636239346535646436393435646533653666343532343461376238616464 -36353531653263663966346331303134623562303265313366663666306331613938633565616238 -64326231316437376136343235336432373765306266303037363564386365616237313432336663 -37303835383563373162663535623763646365616663653664373931366338613766323238623736 -62356466666631323165663033306436353564306261383365303036336430376232373735623130 -63343538616332373636353062313236646466626234643237393434303537623463373838386232 -32613933356534313833363561623231666462373363336164343165656261393638636536376363 -65343938316666316639366162336337353261353233613662616533383563633934633431653864 -34316238613536653432316362313231323136643333663239666130623834303637656363633866 -37643131616337346464376238343238393532393164626564663762393563626430656562376339 -62653431313366623833396337633063653538383662326434363738353037633564343561646135 -30303364303561633664396131343732383433636235646163376433353461643736396561346366 -36666631356335323336363430313265363433616139323262383639373438646436663364616635 -36656434313234656138373237396235336331336463323961316366626636346530356238346636 -62326165643730343338393439623462386337323135383036356531613235663033393531613538 -61366335323564326266333336323838373336346337396638363230376566636162656138313462 -36306365393063616366386537373566336366346339356237316237316133353465333866343738 -38356165336231363830323066623864373161383032663839326337653835363037393362323937 -38633364633131396633376266633464306261636530363832336233306165646565386533636139 -64663436313662363265343833336266616365663233616132393239373065613834366438376338 -66383930626564646466306233376333356239633532303534303164313436653264613235666465 -33646537623765376162363336346461316166353130313366373962323435376365383063373665 -33353064303532646631353538313332373538386434353231343830623738353563333963356635 -38383833363531353962333736646361386436623164643866313236386137626366633938656333 -39386265613637643733613163303966353231333437323031346437373263343565653739313732 -64313561393235633737653835613830316434643635383164383361356135353530626163626333 -64366665633939356136623831303830376165643532613638353239333738333739313836346637 -39333635363562306461633839313334646361656232393537303032656263383165626139383464 -35653733316263343735383038373636376633393139626234376662613234323163323064336661 -30366165343237326462616162626232653161646530363164616165653061646539366436353339 -64633633653830613431303933333665376363323261626538326332653530363337313864313963 -35653837336131623137303838303139333238353466326338303433656438383565333462353438 -64336564333330343437373438323535386437613037666464383734316533306635393430396532 -37653830386263356333363864376239386235306139623062346138613063623537373539666539 -35306566343364643064393564316465613164366461653164663039383333396230306363353565 -38336363613465656534616337383963373238613837363261383537386239396265373338636263 -37333139373465633234376665396562663937383437613634666637366665633433373163376530 -38353262366535333133623235376361616334313936303535346261363032393835373366653833 -66366166383337663736373531356565306231386634613465353939373835303330303835666639 -31643366363734366232386336363135326665643531326532396362376434306334313937346131 -31316535373934653232323130366365656266626664643466323433323732666134353730313065 -30333630613831386666363533353465633961353430656231303535333937373738343033316434 -61623362323934366231373233346336373965656165623136636336313062623032333139313062 -37336433653532663661356435643532323939306238313363623034383038336465323638383065 -64626361373463623266333166393439303465643135363532643561366434346262303834646537 -37373564623837353935333339313532366235306633313961303532343231656634646463343464 -30636261376665373938303130306263363463333231383639356461616138376634306435663534 -63326461333966656461393035643564656439323236653936313564663232306137313463663637 -65373932623266346438326364323230343964633534653139303461633530356638636439646235 -64643765663036356639373062313063383734303333306137613237343261626666383337656530 -31356439326139396466366664346634383834616165383635376333653039376530396134613865 -35386634356531336330646662393830666564313331656661383835343834633333656436643430 -31316633663162616530373832633533616661323333343239333133323537633061633661306636 -63626665336139333263333966323961653063336638666133653664313234306334623930383165 -37376239623836633237386362326132383330363563643962366435613265633335383564636233 -32396663373834396637316331316436306236303561383563616264666436353662356265353862 -34383536366363363830323835316161653433363230373332613466626334383939656134396463 -62383239623335363233356536303939613537626432666135363935343038633531336438396338 -35613463383961386235313936663863373733616164613465383464613532356339393933363238 -36656362653363613134393261326439636463373163393761623664336564313336643766363631 -36343361633130323232636630363236333666633434313565376339396662396535393764376363 -31303565653337323863613134386332623931323663326239346363336165303564393261363439 -65383164636436336466323431393461623565316665613262306436333433343933613866643036 -31316664386262363065306639653137666564663539646232613037393763663965643161663662 -38386665303437313233326533383130623561353866326232663566636635373761306337666366 -35646161626530343935613231376664383465346637313138323132323734666165316164643536 -34653438336331626564323532626365303931633261613264623837323263376237623737636463 -63353734356262656261363736343430373462303661653564393437366666626161333566393938 -64336232303639666230663732373232383063396565373436373634373863386638383831626563 -65356335323233613630646464386138633135306638663562333031643534306334663362653063 -32626530396163626239623164333666333337313234666636323662313135646538666466313130 -66323966373433373732393166636366376137613235343534323134646432653438643137653134 -62386465613964343263663830356363663331383866393364663163653335613938613535653532 -61306139393662653936333966326630656366303136346166623233396465653434383236393363 -36653130323762316563663963623631383461653661616533313433643662353766316537363037 -63383261333066663665356331653963643134373261306237313033303238336165396366343966 -39303762663664353537636438346637363066396231316638343638663061363936616366633739 -66316534396439336539346239386132326564393031346236333463343463303437343136346233 -30616664653838663939636461346633313566653362376265373231333333373164313237323864 -33383338336639623133636666666439303137356164646332316561323331656662646466323635 -65323466643133643939366130386261306437623130356666623062643438393337313035633364 -62313365326536653430303564356338393662353666353232393434366337623438383738653966 -37303236356231363966663938643037666637613932363734663735396364393334376131326165 -39393638356235623932326433393732393465326235646562316135343033333638633766396531 -65653161353038646138366563373230353437363439386237383538626631626132316662303135 -63333966613737626661646535613666663932643736323533306336393466366432616233303733 -39663739353033346164306564313634363034393537363738643930653334316265343365313064 -64333737366634393834653036323938396166656337393166383334363232613730343334653564 -61383061646662393363303933373731623230326633383637326537633963653436643665326235 -64346164373533366261616239323464363335336533636232333132383733373637646237653866 -36336663653163343732616162376465616431343239376536363566633464396439313961653833 -64303662396538353561393862336163623437346666666563363639646537633164613635356330 -37616137343463353738363430303466336331646464626639646132336437663838613461393333 -63326164336464633565386130643466653035366535313030383532633033396239636537643738 -64303838363763623964623637646637663063356438353565643734643364653435643235656238 -37376136333834663935333835653365343431666563343766663166633638393665373534393335 -34643935633237316538373863343765663865383136663835613965636239393361623966383632 -38663766626537323234333732323964323936616533336463326236353730383533373766336537 -31326637373932383264666366333263633466363861326334666164363134316462396164626462 -62633336613932313036393533363164636434376564303165626564396138333736353335646463 -32663731313630326638313431623436363336643934363464333738663932386438653364383734 -37306531663433346661643038653233663735623833373638656339353134396138326632303766 -62626335373366353234373230616166623930333638356539343263376631393466643933363961 -37393362346363336530396264303166613433393961386639353933663462643761343466313335 -30613939313362393830353664633338383764633563323966373161633139373734643339623464 -30313133326531306363343933633135626661613365363061353162646238623638353262396334 -62646235663134616661303233653662326536343764383761636238306434353039323933316330 -31313062306639323239306330643435653331646362326561656137616330663364316431653664 -37316564393430376461393430373838633761333635663933323733393061383231333437336439 -34383239326139323138333865306238393765323538616262633535663630643035643831633866 -36323062386435393665383766633539393531393463666338366136363463323631376264386663 -63393130623839383336336662373461653261353966333863303632313336396664636632653830 -30353838303330333736343534383431653437663966366237353264343030323733666362356132 -34636231366363306161666635343030616638626265613733363731333938366233393334376461 -63643165623163346436323332616238396238653563633233336561353163353064313863343139 -65363735643134623834616132653832383362643663353532663063396335646261346430306663 -65613733333733643536616466626435363435653138343134346638623230333966343232616534 -65333463633963656131383061656261366434643736663964363564333838666235346564393230 -63626566346537346238383962363935653261323332653834623862336163616538656133313862 -66656362306361656135343132656239323565613137626137626563653666323365303931613131 -64633533656632666665616337633434643864323835313064636262363563366563343036363533 -33306435356366363839306632616536306438346231363331386364356336333639313636633162 -66396562653531626136623962396638616366616366643232393365353439613363653932353161 -62363161353934643438386466383439303835333938623534666563643935633735623736303436 -66323562326435643131386636326263393566626633346437616566613335636333343736366264 -66393062363862386335333261613239353838393337346436383966666463343666313565666331 -37616165313037376530336237373461363931316337623634386135303163646537613332366436 -32373633623865613561663836373364363461363635653361303731376563616334393339663362 -65636530623330343336323138633566346331376264383331323164303830613230313835313137 -65383931363539326134383138653539313366363737376533643063333762626639333231306137 -37323631346539666162356164303338393366356536613831353931313236353831356532326637 -39383565653835646162306264383439343638303231363933306530666366653032636239366266 -34643538346264336235646638366133333065323063386561323030383035313330323439373033 -62356230353636316434336335336431663436643438383662636338653866343362343665323334 -66636339613939663633383364396535636532663335373763633733383638333462656666643933 -36353637626432663263383031366633666433323863663739356139363339613337636330623237 -61323266373762363265616661646138313462643665663062353439633431343438396630373732 -31626630353865626230393966356362333934303236303034376332396239613166663761363664 -32363434623837303563386266636135616137356130353332626432663539353931393235373135 -34373266613132393134646566313134663437613964616663313031613162313966663236343038 -33326531663861303164623962623636383366663631303639303936656530386633363234613636 -30396166313239616665313735306265376262393132346165636335383139323631366338623631 -35636630643566646432643631316635643830626563643362323264663065363463663339653762 -32343462333231333037393336656561383761613631666563363866303364613430386461316439 -37663532623639613433366439646361616231386165396636383433616236666432613266373833 -34646661346462326535333865346461336434643263633738373235633334613431363862653530 -61666266353635346662386536323265363731383833656638633936386361333138363036653961 -34663763313364633535326664316430376136623263626565346438643136303334353836613062 -33613764363038626131306135396262333434316337333238343864373631326337336232373365 -37383138653963623633306563366130356138363838616364316533363237326263366464643466 -66383933333039613865316662353336356462313066626632376361633531353566353536306664 -38303262396132353361393830616365353939313935616262303132306265393961333861396263 -33373462333561353333616335633734623139663965613130353561336337386666646163363535 -62373334373632633630646434643763666261313530653535393038383633326139383534653138 -64616230393961323331626435316661363663373832373138363235313463623237366261616331 -35386433353234643138653939376663633935306665646134616233636139326463346562363232 -38643634303838636263356366383936323138663736666635626337646134306534396435393461 -31643161626433646533663364363734653439366137323630363439346136373565653666646166 -30633861633334613161646662393031393338313265663362333963613536376133326539373238 -64643730303664386531623965303434646562356336313864313036663439316463373430336263 -64326436643137386337306333623734303534303337353461323530363038336633613731636431 -64353032613961613832326232623765366133376561656230626663636362653364623834353435 -31656461393835643430356531363461323238353662313962356161333433353535616266356233 -65393562636533306166633637306661616563376233363132353965643436343037333462386434 -66323231663337653262353430333362643263323363643864623561313732393838383264323163 -32653739326365306434636130316565343938636238336563353631396462303335353237346233 -66306233626265663237346165326364313836326434646165623561623363643632636462393833 -36386363353864386139653965393962383337313362303631623065333130396662343132616161 -61623730333730393330376563326531303039613632636233613332343166366565353135663566 -30633065326433643137353335373331333763646234353262353133316464666634633837613335 -31303033373836313563336262343061653438383135633430613634356463323161383836343939 -36633461623032633935353830396663356162656637376637333762353933373565633465633935 -63366166303538613434323939353463313338623864333364656165646432373063303263643562 -33353038656364336236363439363635316132333139653664376238363261616139353037333436 -36316434363962646132656465313836616230326338346536393265366233636531356134353162 -32626364373737663439373761353630343436333336643234343036616566323435393237353338 -38343537373834346232376537646663303034376566333131303330396630363432623131303937 -64373132313635353537303130373034373963343162346532333132316532386662633362633539 -62336237616635376134646462333135333265396262633131373431616232356237613234373937 -33363135353639383465383763323735633730613864316161363232623333376638333637366334 -39396238396537663035336161363966623633306431636462363663376463643239333735663134 -63613436303836663533343839363837646363666161656462353466393663386161306363353138 -31303965623066316633346430373431666661333935613639356535386663633961653838373830 -32363762303133333765333130663236633336643430353565373537646132616561633566613439 -66633937626661303439383935656461346537653339643866613632313636346266303738313731 -32323866396330303738323837663133396561613564616231376237383436616439383661386630 -62363337663138656139333261313932666130383237386666643037376561323935313761656162 -61323832363935633264373239656261393737353737653838666437316630333539613734366536 -31633635393363333465326461386261666361313461356266366665663234363332363637333831 -31643562633632306664663164363637643265363330376338366239623065653332353363393430 -65363066326432343034636239653830353061333330316432306362346363623639313838656434 -36373364653335363831626236626537303665393035626435373038616231373932643135303030 -33356366336263343930633539316337323161373130303435343362616130613332366664646261 -39343934616130373761653866343962626634363336303861393832613263396336393261646261 -66633136346138623530643833356331656361616536316135326634633932346237646436333237 -61356465323766633835646262393930633165326635326262666632613237313538663862316137 -36353962343437636230623332643861306464386138613032643235336466363766383532386564 -34366264616165373937623566303534333930623063633362346163393232666331306635373430 -32383565373039613562613735636633613835343964393432353361623766616235666435363638 -32623063386632333638623436643430396535303639333764663135333063616264356437363162 -30323062353664373761613038336461353435353966346465646163623363386266376565333334 -38666564343632363663336138666235666265353131396366363465626533303138613465343561 -62666638626662636431363861343430626132373335383263633534613139333034363433633332 -33343636373236363630663063666333653563303930643536663333383439396138373064316164 -65653834356137333134333438336232353034613731646239666435303737383936313165393733 -33643239353630353234646134316365383335616535663438333532336263626334373738616164 -33363762653833316639646438643935383430626432666461333334316135373437346639666235 -36323637326434366234623661646163613364613062326132323362666236643337653462393639 -30633261616165616336643438636639353034303332356264616564386539336538616135663765 -61363863633263393236333837393432363336626334363232616562383933336131386363363832 -63333836306565383034343031653962663266323134616530373635623564336138366332663565 -34346139313033306638323164356634323138626465373166613130636339323264373234366430 -37626437656435633733323936656631626561643562376438303532663362346465636238393266 -32646233313164353566326533353634666533333164656131613965653635326164626564323361 -62363430353233393064363735333437326338613661393434613832333266386532646238313332 -33633832393138396564663662616563623631653966633333376230613564373839613766303932 -38313835393839343461613936316138653530613135656631626263356130646566343338323533 -31376266656532366439393333333837643135386539396539363530313332306635386362356632 -61313361383332373939396163666466303238333838373939303763623630613838313933373735 -65363338643130656635346537613239666462306636646435373631333135383434303030613232 -38333565306634383639393233356531343764643934373630346230356664316336666566363538 -65306261633061383537303162326566323931333562626638626535396134353930616631663631 -63356138633638323233393638653730613533636565616266616564643861363065383733616537 -33666137633738383132353166386465353266363063393463376631663662623561653061313564 -34303863353338353735316565626439353032396230663434303033613232353162306135373738 -30323934646464643565613436343633343431313838303564613162306436356430613832616364 -32623665643966393936663163636234653931643163643936373730396139653263616338306533 -31333631393862383435653836343764616665666338383634316435373866356433336361666236 -63373833636130353763666532626630383666636638346334303733393434316263336636666335 -39316236656637353265613263333534313761383132323663666661663833313538333833353365 -61626433656565333263633631343362353230373339383431646233306639363964383636373064 -35366166633461366634633566303536393231336264333564633634643130613630636566356264 -30393331663730633865333634616634373639386236396434626365353564663566336131616439 -39343831643839653631633036336137646230346162376233393063373738366265363632363263 -63363630353435356636626461633765666164356132363736316430656532333662366530353766 -31336231663732353365633734396231613634393930396236653632633362613835393238353932 -66333263336536363035333565633739306632393330343365656232323236633661326234326363 -31633635666162383733353362343932303433643937643430346631353439326636646332633839 -32343163386534656638323537396338353635343963633064373762626437363737636531383133 -34343237313935626438353238643164313839346562313133616537623935663131393264336538 -65373739393938353461356334636466356334393135666531326132663565623437343632626336 -36663539366261383833343330396166626563346431613039643432343961356338313434363532 -64343733653234343565643265303137343331643765376431363566316463356636323933656430 -39306232376539663033663730356438373564303939666231323934333032653430633664626432 -62623134366566613436306333363238373563626564333863373634663138313161376666663633 -36613065646433356466643863393031373235323533336139313732313766633566626363663064 -66343839303530656531656561393137336561646237306134663762343631333963383261336434 -30323763616465383861323337393537393365336565653133376162376432623566323965613266 -38383739386439653131653533646663663465353534336531613333643635386361383838653632 -30393637343531366237326361346438336332616666386162346333653332336462616134326337 -34666237663466656463373033346231343136336261356139346562383561616264633433623034 -32386136373266626462326364303866636564353866666365383834633064643336666237306332 -30383938666236336639306366326432306639386165333266313562383432626530366361613337 -37366366633832653163313037323432653636396235373763333132313066616364383936313362 -36376238386233366239333138313963363339613566663363633430386332653161343132326338 -63383538306638306234356161623631353564396564336135316130313538386564393935303239 -38333537653130376133393161646238383266336561306332626434393230373231373039646432 -38663663306161646562623131383531363266363065376236636630323261373637613235633633 -64626539306435623735663530636233626531326635336665646266323336643739343237363331 -38393561333461626238646331623138393061356564383263653035666237343565653033303734 -65316132393634343230613931346163356239386231326133396636393534656436373162366137 -33396536373436386537623465366338353466343633386134666535653437356332313532623265 -66646139363363306265353830633837343661363331313938373832393836363161326236643738 -64653031366336656634656134336133646633353763633061313063633139356334336639636432 -36613331313930313861623337353166356261363364393039313661383765376330666165373761 -36326561393262363766636436303931323461336135343130363135616131366164303863373533 -37353437393466353666643061613236373534333661323339346432636137303862383835613361 -36613832313164323966636466346634323563313464633063363066323862343966626230343163 -33303164336335646166306238663066343233396333383936333766643930383237393933306262 -64663437653537386230326166656232303035623231656132663766393133386466363863386132 -61333832346630313438353838386136646238666162353032636532353639636662383133656530 -30663932616563306433653934646362613731373334396634336136376634383966666365653431 -33663639316539636435613336366334386138386435656261633735396464613635663139353862 -37623737616332616436333364393937653733663030303864653336363434363661373462313531 -34366363623061333265336161303737356335383037363531646337363336383738383766346239 -30623961666339663961343936353432353935353036613464343835323766633665666532343239 -32366665333033386436343233666433303937306166646532636434663537306462313561636666 -30663339386264363634623863313131343664356432393833343834613134346563613234353831 -64626234383763613662666434313838636634313365333265663232373439353163393161316334 -39363262313761326337336330313335633561383461363235343832353439663431363735626438 -30393762373931366538653838623738373937353439646538316662353232353261633661343231 -32323334653164643466393064376165336337393163363033616230383236613535306430363838 -34633162313739386433336565303231653934393763323436633831336235653237346632663637 -39316530323031643037623334636338636164383065646234656131666666623836306464316534 -65363337633231303233643339653661653638383266323763626230316164656231333561336139 -39333039383430653663363430333735653634303534613032393033373339636363626161326536 -32383130623561656535633964313766323333323138626235616236653436613338333136373537 -32363033373064663839316138613038623166326366323835373037323639376462663666636234 -34383463363966643964623730303838636264393962623132373330363565636633353231383261 -61393434363264633038633431373762633261326262356533653638316262306633333637396634 -34383330653737306263633133343963343938346633363266383261393466386432366130646563 -33663563356431613039616535353931386138326134653535356265646632326631613966323537 -36373431646461323833316137636163323032656336633935373636353766326164376238616337 -63616339303733646230356465373832613134343134626362636663383961313635653932646434 -65623135656631653333383866396438356666336162633434616138333637616231393938386366 -64653430333762323633343039623266336434613635336161633133613364316363336533303937 -38313134653862633031666339663862376433343438356134623535363163383432396139653734 -62303534643535643632633565643164326539656439663238636338643964346536323261333935 -31373539633431653837386565303332323135373234363230373463643763353131376631653863 -65366138393764326230633562653865303836303365626262613038336233333165613739613864 -64623663623139373936363136643166346338633964346564633931353337343235323061666338 -61643936316130326361303335313630313765313539623730303936396165323564396561666136 -33633533313965613266646339306165646632666565613364663963306664343961383762353538 -34366538353032323561366334613439353630313039383366613065333239616137373636303936 -38613235633366616536326334336163396436623062643939353165633663353864346335343463 -64376137343438636664313734326538393965613065356631363735613539386633363131346433 -37383833663465393461356662623966346462326339626134663032646139323635336433633162 -38386361393535316536316663623238306233396337303065643535393266316639623136313438 -65316665303337613830626161343365343666326436616365316139633333653864643131336432 -37613065396133646464393866303833613463313164316630383030343766363466333739653737 -61626463656163303938366434656531353263306261383736363631326261663364373135373366 -66643461376136383063653737663739326461313134373536626531373534333139383839383630 -38613331636465343836633935623337326661336530313734306139623366386464326138656139 -39343662656638313734393266616334643265643066666239656163666632613739346561656464 -33373661383434623735356532303236323437656639346563653331326539646639346333323139 -33336666353465636231353964383435323164656133383335346433363133323534366464626330 -62646162316632313731316330366238393063636333363637623730623630656161316435343533 -62383338393938356433356263336538316339626434323162323661366338653561386263623434 -37376233356361323162316536323263633938353866336163346263643839613861343333376531 -61373633306339633365333135396465383532636361653466613333643634353764633634303637 -61396335646562326466373234356435633530386132383839306663303463336465363733376563 -35386364393365636232333438633139633062306233643365353732373037393537366232623437 -36643166646230663934393066653630373536323130363931636264343434626463363362383630 -38373335666437613366656334383534326439373765343463373533316466303236636434386134 -32613564366564646334666339656563333262656462323961346237636133623937356161386564 -62353963653637396232656538633061626262376361356430303235613432353235616364623861 -36343330343462623761306166376161303465306164366432656466363539666534383734326435 -66383163353239633462363337393636393862656264393961636430373965383735356435636535 -32386563373939653961306662623239663236386233653263363833313334613864323534393439 -64656662316561346437366635366264396361636235323939643964386430333939656238316530 -39303736346562653864656434336331316330613537616139373066666265333464346134666263 -63623763326566663138336232633331393934393334616538616339393238303165326638316535 -30363235386439326530653063613131393764313233376638623634323031633639373533366639 -34363730383734393538653730306137663232323862313635646164313232633334376539303035 -33323139356336643162356134646666623932653335353464326663323166613862333832653439 -63326563396636366532343033313861323531656238343066336564346437323430353630636532 -38623462626137353562666461393762613364353437616165333536353363343635393062316633 -32613366373832396435373564306638376531383939646430363463363562363033373265663061 -39383633653562623162623832376131333066316630633733336139616261346638303738613631 -32363131343132383636303137303438333665396237646164653761363837373035383730653365 -65633831663436373031363631626135323538393738656638363561346135373736306462636264 -39313161346265366638353932643638613430393466616466643134623035396466653439666237 -39323030656263303936656236313062306336613962623930366636656432633061396333366662 -38646461323334653031666432363830353738363337396337323837626262333939313738653139 -38646230666463386265656232373633643462343632333761336236333266613730363330363264 -64343764616461653762653835613731333439383933393231393561356531376435323964656366 -61656465616233663935356334393532343533626334336630366639396236303433353334373264 -38663661656336663036333339616631383434353961636164303934616333666436376431363938 -37373334373366623537323365653433666165323063323565666364393332646534313437633730 -63306362316463646638306133373439343465616466323466616631623331653663643439313133 -63396566663764646362656335643835643034643835356361363934396434336263346538323037 -65666130353961383831636464303362346665623531646331313139386533646636383565643065 -62626232323039396363356263666535626332343439653837373464306565343761353737623433 -33663131393035393433626336623030656537656435333934663534616432353134333963616664 -37616165383935386662313133666633373734336136663766326233323737353138616563633830 -63613134656632666134393436663737313964666562393163353636636230643665646133316365 -39383636326632646535346163653034396562313432306330633765643962353733383665643266 -37616131633063323332303537643136356134386433646363663937373866373864666633313966 -32346438343665323762306535646639376632623737353330653930643231336532656136663066 -36653034313363373531336632303764313131346362303931356561303430656537303431353763 -63383734633934643463663333633264393032393234653861623036636132376135613633313233 -37333838343564343231646338633637656235386366643239393134633034633164396263376666 -66613866643239613433643635373664376262323634356332623837346331613662643766376330 -34353335363565646265363262373464323433626234383063656634303131323332363234646531 -32303633303962646263316533396336623637393333316437653030613362623566353435303536 -64333733646130646564303563643231336637373835386333653935643534343435313737306330 -38616161323332663439303339626362633532323863313564373831366238663461363238333138 -30303764646466303063623166333038666434353664653261663232396635323937666332346333 -35643465343035636165633838633538396438323461653666666361346435303333343264653039 -37633732646666633737646131393666393635303736656336613961643066333435343862313165 -63656638656133343432633561326234623261663736363438663335386130316563653761386564 -32646536303934343734363332313862306666663035383235633037386131316262623833653662 -64336332346263386338376565353334623463653532623163393863333632373731393464376236 -32666436386330383265303635643439336137643966393032346163313863383337333266333339 -30333235386239393037666334323635343330333635316433356232336461303034353961313131 -39323464666433616631363061333131336562313561313438323561646333343464623839313735 -30633238373436363463356262646436396437306134376137333633326263656635336131343536 -31303966356364313961306331633439663934646663613065663733623731316665303938333663 -34613239613266376633356532613835383733653761363639323362386632353863663562373936 -6236 +38663461636263393762653362643562633932656131363539653664346463643861623532636536 +3762326638633931613833343534383937353765326532340a666634356132353732303564316166 +31633962333734353031393462663263386663646236333738626335373936306334366136643631 +3637623333333931370a656434373734626238376361353763346562346538376637653436346362 +62393566646130336338373263623537346430366334396639626433376466356663316234646466 +64306166376332653264373730353635393939313864306465613134316666386561613038646138 +61386236643862336135396335613838373866663261646561306366363534646530353734316533 +36626661353035653337663639386666336532386530636666656439646437366664336435306262 +65303734633766303161386630383966316634663730383266643330646236333565616361306232 +36383637356131623562366131333166656232303661343963346437363265663633363830653666 +31386464353632666138306132333334623932633230336463646164613864313035373565623134 +31326538386462363031643962363835353034306630316637373730653539323564623465336330 +33643865653333353134356265663361333566633864396231303935383866636539636265353038 +36616432306661653131383430333034356430303233333562393166623737376130343238336363 +37626362396566383431306131346430306262333835306662393337343261646435306637646565 +35653061383735333731346639343632626532326536663335396463333031616433356330326136 +31323930666266646233373231333132646337303031393235333864346537303466346161373965 +62653532616334306665373031626263666233656562393664333134613861386335323066663132 +32616361383961336239626166396439373831613562313033623665313466353639306261613864 +65336334333735313339666263396236656463376230396235656663373834363630623961643732 +31353230613664323065343539643035373339633732303239316362343062633462653262666336 +66633662623163623364326633373831356330633063363537333931346266383530373238326165 +31386432376136316566333866663264663736616337613265366331373764383831313064653663 +31363331373236633639306131353735303138613130383634343934663662363836363664643435 +64656434386233383533633132373261323439613336333164343838636166643066343561343832 +62633836643166666530373935633165666534356362306564373438643766326232346435636431 +61663561333363653739326634643332633335616164346530636130663434333661643335306666 +35316362663132636461343864356336353961373235353463303833643437393536636461303236 +32313865373764303434346636346166636632343334386166303862343566343465633631323339 +62353763666564663734383363333131393666623038366237303539313439306139613863326261 +30326366356265383339646464363362313439396538663466663633636662656165333161616531 +64326232363065393036656630643531303434633933383337643366313265306535613464646637 +61656537323934376331353436323339666430613433373464316263336362653730333332613734 +31353932663537353939353762363030336364313163333463306139626436663666396335363466 +66653931366131643131373532623035333336623365666537313461333138333464353739316663 +32666130346562393466663561303634333961323866633765656561343336643765386638353832 +64626334303035646664313233376439323561636131666663653466656133613833653061396633 +38626135383936333464373864316239303737643464613266613662613233333765366639313534 +66636563333439636133623132646636636135393865643730316537313438393139373362396539 +62383937613530313933303437623032396336363264616330356263636464333266383730383861 +37666263636361386335646163633537626435376332643932393465633436376136373936636362 +31616636636535623935643266666561326461653461346130306336393338626361323439633564 +32333765356566633330616231393563623031393536653366393262336461376265643131393163 +64616334643062353639326564303739363062383137616534333164653038353139663061613761 +33326431396566653237343432396437363332363065383238353937313235626634323739663166 +38663733656466343630373761656430346631653161343563666234613562313138346464383434 +38353438613966366662373139356266383134663936306133626166656564313466353039326333 +38666438613932326437646132666630663735663762366530646262383031373632626363383738 +63333734623066373831313664343338396635653264646331343565623832326334396636623037 +65626461663431663939643833623130313265613337383333326631326363393562306162623562 +39356462363861666664623039643136653266643566323063333134663163643031333565613230 +64386634323132626263656232613431613839313037623233333036646364333834643838633762 +32646133393461333834643463353762623432326130393361643436636431373938666561326436 +34306437636566653532373265373030326434616262626532336562636161646261663961386337 +36663666313833363539343135373263343139356432643539643436616565623962383963666539 +35626530303664333434386163613730636666616233316634646563666337356631323164613438 +61356431626632393739386137393563626264363663656364663934363436306363353336393664 +31353361373430386165366264333333396163636565353134363562663737616665663163366630 +62653965383835396533396131633330666635386437373835653166313930313266643265376130 +64386234636538633835356436383237303333306161306632626562653537336564383030656231 +66373466663032363939373163646437353532306633663636303066363836313939653833306134 +39393265653131663264653232643063313435643631643836623365646232613835633831663137 +37303239633336663363343039353034343162393732653362396365306563616636623731323536 +61356664633633623731646465323333353135386564623765363830333932646666313639386233 +39616535343535313034613432363234326661346334666166353838343938373462393338613563 +33393033636463373339313866323538393165386337386364343665323839643366373034653931 +62343337633666663530663165646637643933646236333136653566333933373334636333373030 +39366665306532363636336439343861666435353063353565333136346330636434356133323261 +65316237623030653136353265646661313531653238383236363565646634303233643935363137 +66333033373562346138373533626563393533373866303932613266613533343233376463613234 +32306634393930663537626235323838356433333266656563646462653233386466613066646466 +66663931376330643930363434643163666665353231373561623537613165616165326234623931 +38383934333931626336376531336166636265366331323239353866653635663532366536616637 +38643561643065643131626363303138613865323336316139313263383833326662373963346334 +61636539323730356435643665663063646539363038393736353235653862616665663535333735 +33356635396564326466306339336562376235346639366632383664663138666636393335326638 +31333263623765363565313964646537343164383261353263626661343166643563313031383561 +61666464353264653633616162633835653665663332666636346165336166316461353836633930 +65323266653066666632326361336138353564346263396632303734313738336136373630363334 +66343265356531653138326666336537363237346462316338343764333164613835343039613339 +64623934663239363766326332393136306565613038373235333931303631333436616466316232 +63633566636138386666353239383034366334326630343932613438646134373236616333636563 +63636133336132386232616266373731636139656166383134396637363161623037333337653935 +61313030386563636461366233303366383865303935366664333937633638613030386631656535 +31356234376232643132356139636361653161623561303931346633366334643264343134376162 +64323862383633353761636630663631386134316566303737636261316562333865393761623839 +36623863643066366263626336666234653234383664636334646435363234346238656337346438 +33336432366639393633393338633930343732386562356136326636306339306165663735363935 +30633233393337313930336637373535303561633630633066343337653032373638373838613933 +61366630343438653038653864393739333437353330383232396433363830643163313632353563 +36343966373431316264353561613332643135616335316563626265383362363365643739326665 +32666666303234613439363263373532313930633733316535363162333031373039343331366232 +37633164653032356237303164323731353962353565646232393264393665303662306537376130 +65326162653034386165393639366635303666373336343562393632633866316139353665356261 +31393461366238646563336438646262613834353431316631333362366230306338323132356562 +62383534363033333735316337643834663934636234396162383937306434313039623833346331 +33656263313463653636383535393436316564643031613539363835653962646165636266643065 +35313536643935343266326434613565363339363865366565643630653232336565386630353435 +34363438343436346233633866373935626661316262623234656536623566336461376333666361 +65333934646135326637323439633066313163663132343961623265316235363461313638326234 +66303566376338363636376630393837626263396563303863336662356232653730306134633762 +35316233656531373262623434393531366661373961643838376434336131326633323561323835 +31656566393263356464626237653864653865656463323031626563373330646162343866353534 +31663734663661343631393263643338643634386266623138313837306461613361616534323633 +32376332316236646464383137663836356134353930396633643766613162306362376333613866 +65303062663765616664386132636533316361333737383465386335613864383338393163386366 +61343736346134633666346663303232316130303130323466663131346633313939363966343464 +63343062626361656338656563623335363636383838303039653665633238616266366665643333 +62363333396463376362653765343739613030356337646130333264653438643836623833343733 +66326565353236356661313563366662343935346435626535616139363562323532626530313039 +32383162393936626632326364643039376633333835383766363337663333653562323231326530 +30306338346438323964636165386435613062626666393662613334613633663338336163353637 +31623033326639343261646365333734343437383165313765616463373335616464323237353137 +31636435373134376333363465663730396339643833363036623530333230303932653064313137 +66613431366334323534393637386566326362366261326131633133306632323532393534393761 +37333266343231396134333537616133303664633532643035303761616563613566383234343561 +31316233343937626635613938636462656333656235666331653139396635393533313539636665 +65653733316261353064376332333830663765663733326462313863363037336434353235623132 +33353836303730323534396336653262353130326665653763323734393137333862663363616464 +64393866656464646231643533366465633530326537343631363534313464376432356432346463 +62316439356436346265393063616137346432373766653966343265643931653736353962306465 +63646632616364326131313566323031326131646563303164306134626633616239326566626364 +65643034396136376564653639383465303138643239666563326131306664613463306366363565 +64623538626465316262393064646330343162313638323763306232323434643737323837613738 +38636563346466363765666633323133303434646163346666626264633936376335393665626137 +32623633656462653738353164306137313535393263613233613834663530323932616433356265 +63313832333731353232333834343338633066326432613332643731613133356462643839633338 +32616539623662356631373438623532356464656263383235363336386430373261363165636630 +31336536613365643430386366633561323439373764393839376562623933313533656431363035 +33386264626530373233663736323834306637393035616630353562303061393962386137343331 +63343139633339363530666262383265646263376539303261396462306330306135323233303130 +37303937623430303839613865313432393839333239366334393865616338653964323434623366 +30666263383935626530353538623161393632356163333739323561636533366662326532363065 +30366665656637326134353838646338643163303364643934346166366432633737396666363838 +38656364623964656632336164396139643333643538313065376139303733306339383234633431 +63663731393837376335343563643133363664313030333766363431313436353636623737313736 +66326331373435356166616637353233643732393638323862666365303437646332356538326634 +35623736303565613136346133663237333736323734626365353665313531313637306138313536 +30383731316533656635613363343065306564353038383165363939373037303463313363316666 +36346462653866343132333731373261646636396463346562336131333939626361306532363133 +34336465376432623063346533633666343464353039626434316332323464313465643566326535 +61616162323236646464373862643862626232306138343163303064613133333831396532343466 +33643534393566316138313934386637393236323365323730386562386365386438363234626362 +63623033323264373532663365306161363337303633346533303437313961633737383563663138 +33653333306162363663663337346265393930386631306637653831623965353534313662333964 +32343234653163343063613132663263383765646664623631663062373130316434356332613739 +31643137343864303733343332663135323733303264343430353362626335343965633336363334 +64356235646163663336313537346635613237313639623661373462376364336266636363346465 +62343632356634346162316535363239386462366466383531663964643436613334343830633836 +62396465336539303737366637366262623732343338396564626239353233326262616338613865 +38316634346334633533373038353936336135333065666538616163313331623032613236613636 +33383231613436306231316332383065363061656630383634346335386434343031333363643434 +31393131336466373337636662346535616165653031653637323065303962383261373734363066 +36316431363237373738366536663766653066383236333138653932646132313030373739333534 +65623865353733653434373532336665386139393537393661343233356465363232643363336361 +34353530353362313736623665306438303530363832313636633231326365633031636537383564 +37363931373638333066613532323165346466326564383862633965336331636136363438363763 +31643632396633303161653039643439313738656636353461636462346134623065313336376531 +66666466353764313436386332333063316363373638636164356234363636643931333265636164 +64646333376131363663313963343234626230323762666432613161326332346637313065636536 +66366430313536343030313030626564316137306364623765303063616234303264366266333266 +32336638333962373238393263656234633230393430323564383930613737633965393234356532 +63323638333233623037393761393931306465306238663364386262663634663738633734376262 +61623462633464396638346332653962633961656238373739386663333737363239643932613530 +61383863653865343836376539303038393532643630323731383336356261313666656666373734 +36333165653834353832366434333966623263373430333166316237623064313735616431373465 +32393135383134663039396235623939613633653961326561663365376430656531343334616132 +64376335353132333961323762363363633830313835633364393465613437363165653861363732 +66633861316632306363383061633937656231613066326237613464363037643933633035626461 +66636434613834633230316661383162646563633462303832613164303965346631643238393131 +36346433396231613436313166313839326236353336303834646161653364656264616234623733 +37616331656632343035343732383931353939366432366235346163613330306465636232353139 +62653765613536633365333365356132636633623761376134393432323839613131313364636535 +38336338383833323632653264376164396364656333633864313963356161633233643338306133 +34633164383463633436386538363364626630383033333362396432633836346335336266306332 +61623763353561336139386261326564656338663962656263616337353537666134366464653232 +35336561633231333362656465633032326663633163633635646339666666633964623430666636 +36666164353664356636373337633131613238393066623332616531316266323830386165646565 +38323862326161633930343137333963616364313763313162393765323130343563313666373962 +65343834326263383631396265653938326434363737386136653632333435316465623332343734 +38383765363239636639393564383163383731366561353439633766366361313734626231323165 +33643663613335376337356437666663303166316464343231616339333733343930333866336434 +66633730653336373031653561616333613361613339323837306362333035333164353339303063 +61613930303162313834313637383434363432663537353862626339343432643834623366366631 +38613131373439633533333562383834373434623564343761386433373631313666323963383235 +34313035663562373066353963303363306534383465623465323266383230346564353366623066 +61343039303339383536333363663234666538366263643638333431373130626364666364626233 +61356233663139313036663032643139313936646632373162333962396265393164363462396139 +30623234386235393837313036306438383635623236313938633931646636633134323833393938 +37303433333463303461323238303233623439636666343937356464313834366364663138323634 +65373037653131663963326661653364643963356439333163333636353034623032393434326365 +30643865353538323830643038303066346330633632633739383065306266613634313064306434 +37653335303434666536343133616137336261666237643663306533666534396365306539613638 +62333137616631393630323861303330656331616233306561643635326231376264326162373133 +36356433613861393138363536346161336661643035383661313532356563303335353763326230 +63393039343165313466616237353964333432666138633738613961663435653862373437623534 +36383430663932363636363361396436306264313734366438316634303364633566393138343632 +32353463613831303430383739356130646434393635306662326565663565343033623534636366 +36326464383766393338643064376161316638623838313031313536633130306466393830316263 +31376133623066653363633365336339366665636532343837353966353562353439373835623634 +39313539343736663562616439336562366432386437316436303830316638353535373264396537 +66663837633334313962343435353635396534303065663834653263613535376630613964373461 +32326230393061383738623966663534623861356336366131656433626262333239383765663763 +62353137306133336339353862393730303665386661333532336631623565313437303363633137 +37393734643164383666343830333536326361396531633631666339346234663534623766373537 +35653831613431643037663630396133306235306437393538316366386436633462356430393735 +35666539343137396665383732656238383937323933653836393166373061386162303039333265 +30333462663165396135366665306236383134613862306236316536336561323434373732396165 +62336632653363396533346233376235393930656630663365613765636336663334643431386637 +66353637613838623230626136346433373566336363343237303265666638373764353461386534 +32663461656538353234346434396137336164613932303238363962333364376432376334656562 +65643039636661386439373636306564616565373937646337373764386162626532656530323264 +32323132636331393532396666386133353239323461396462383066366230376461396130383038 +62303732346437613565303035336531656239313534353136613361333139366534313336663137 +61646630373237313831373936623364303238663063616537633863663734663266353566373561 +37316435323038333463383066636539323230363761316461313166363832303736393433376634 +34306237323665336339303666393065316235333135306161306662613133633665393238636236 +61383732353662623765343437366532666462333366313932393962366262323164616131353062 +33326537363539343835383064343138656233343264313239613361656234356163663562343362 +39666235633432623335303834353464343362346563643931653530656631383034353265396630 +61376331353431313265363337343736386233636233383466616632623239376264313632383435 +34303137656139386334346335303566633037383934333464653938323439306135356231356630 +33393637333833323730313131633161343037626634353663346432333261303237373036393530 +62313963343965663439343763393663316234666134316366313032353032393230373965386361 +36386632646466613763323039373331396563376235646135663837353534333964643131393732 +37373237303131353363353632393564356635353134396532363664396236303736306334653862 +36336664626330356337666435376339613637636230623834643637616365383966333938393432 +65383034653164383835333766366566383538393538613762313362356535636264303138666663 +36366366313939613435613465306462663263643637313465626233376430356561323833653834 +65313632623065643063333963323033656463323764643066386461326535643936313638663365 +32663131356132363836613734653663386166303533376639396331623662633862353464366138 +32316662333337306465336662336662666535656233623831616266313233376633666635346433 +31323339656433323530653134323934616132613030623664343937353339633665353738306266 +64623264653536363838323261663536646463343539396462336334306233363437313138373737 +39396265613663353964323339336535373033666435626137346637373331616234363061326663 +61663063383333636665666465353630376233633633653137306665646438333661346261633266 +36323837613038333162343936656134346539613165663532313634366332343966373263663361 +39613332393865323735336438636533393238656132303733616538313734633863343632633231 +66326534363366343266623061663830316635333766663864396363613037353130373439333538 +31393831643535383966356535643962343439343263303165313965393930633739323561646636 +34623730353566646462333436333733626637356136343966333037376230383430643762313232 +64383738333436616263353562303462336265356536316365636663373630656264353637363932 +30326266633233363466313434663366623334636463396161383765643966663662303664333861 +37306536363934343562396362313137343639396433386364393631353539613231643562633535 +33663836646337333563613139633237323966333538333933363832363836356430353534356661 +31633265313133363238303933393265663237326165643063633438313630636266646534633938 +30663866633263626338313238643931313866386538636238366635366562333730656238383865 +35313535386435393830623836646337623639616661613931623538356536323065333138383838 +65663033373065613034396538323835626565343430333263643934356561373739353630336666 +34643135613539356230396161356230623030633136313535313338663936356336383630643834 +35366439333338353833383632616464373939616663393735636563376432343330373333323463 +62333962373862646436346230306664623162616164633961353532353139663464393730383035 +35343437376463303163646239636436303463303834656133336433303162326266643162316231 +65623035386330373334623161326631323439303830333439616137396630393533613235346236 +35396362613633626661336434666361303037393238663835643462356539326534633036643566 +66383663646362333932336462313962333838623162336464373866656633336161366364376532 +63376366333638663835626138313037303337326531636563666339306538353765623262353235 +38353139303265666561353137636639633364353235353037626362633038323230363139313236 +37396230613237386166303636346531623830306463393431373630613661613062316138303230 +33666230356262396366306432323864383839383537343765383930623637626232376536626436 +35613764346161393935346261633931623231396438616565626161636338336630626435326161 +30663631363731303038326364343061333735346661343265653634363362653236346364356235 +65646164353538653337633735626138633038316337316133303062316238646665303762613431 +34666630323136616434386266613131656235303236393336336662306664323362393365653266 +61663633643035383437306265646361346562336639376538646135353436643033356566303735 +62366463643166343738636234306335613037666633336338623635656239633962643231356564 +33623861343761356234653339363761346663316138383533646561306666326231343339636234 +39616238656162366233336165386233313235653766356337613934343036303663346534616331 +63306562383431396562643666623362326261353231616361616133616139383836663238383639 +34663932653664393836396465393333306330626239623731366561306539333038323464383537 +35633264323761336466373037663530313734633232323565663431663531366166633136323166 +37363238326664333434383233616138333434333233636435336232336438626132393363663338 +62356639313232373133333033373164616339376334383065613763323633313538346465326538 +66323338333533646565393430323465373763393365373164303733313531626338373463656234 +31336334653362323063306162313636356161343335373363656263396164326535643333393466 +35383737323230306134613036643134633630633336303435333732393636333530363136346532 +34653437336432633934353861303062336564303034383964613062376266353438326339386231 +65636663633231613763353465303732343438333333323737623632393139303139646164306566 +33333661333135343266303362616461393431633933656134393066386134626638376162643438 +32613937666439356635663131363064313335666465383164653563653836326262393231353464 +37643461386564303135376234393532336635343431353334383665343835653837306461366637 +66373565653034343831623731303466363466313238333232333334353933653938626236643439 +32393834356337333437316266633666666530653031353334333764323731613238333062393964 +63343263393462313061393431643137343838613636396364643932653133633564666134313134 +62643635643263363534633963626130356535363134666136373862353037656365326537356331 +38653234646465613532363630656537336361336163336236333431323038323764636664303537 +36383030316633313636343563353234653061313864373039393666373462356330653238643161 +39343537356164353765343164656134303735656336616432313531303433616264376139653735 +35313237313137613364303561643237393135313230386364306132363965623866613166326538 +34373963363136613632643536313630623166303131306431336162633366633133626630306533 +62613334623534623930613034636262316437346365323932343432646139663832356330313736 +33653239663030343261306262346339663538633065333830316437393139656239643232306536 +38373536333438646234333135653233353862336363353663366531353931646539393932386663 +35633834356163666165316434663631626531313637363731653866643836343531613364353766 +30613965306434396432613961326235363663383035393531656236383166396537356565353565 +30613139366635313065636565623938656637356336396663666434643632306139303130626261 +33323165646163613763623738613730393838663066303461643462303262393330643961643966 +64356331333736333761336262353531633837343634303632663433393561616361323232313632 +32383665366434366162383361616637643136323835663633626464323432613033643535396637 +38396537383533316532313835663939393638333034623934303034633134623439393832346637 +33323536616365396134613639323737306138353432323534373035663733663364313335653639 +39663638323936643865646564613962663136616432643433373337316466353666396237343431 +38306332343435366562643566326430633935643038333761373234306466346333323235643333 +33356364323763316364393731653739333930323063363531363133326339393732396162393362 +65393337313635343332306131353136336563316337333233613239303066306535643538303735 +33646138306534363637616531303335316237373332353464343262666666306534633934326463 +30303339643437663836643635353337656634306630316138386462393237363932613834326230 +36373665616664356462663736316631363031633832393032313965373435613266383839316335 +31366338343539313033323266336433663661623761383730373935343265333566373966356231 +33623237316638346237313232346362643336663763313735646237396536336261356165376161 +66373962316162333033353130333636333637313136646234656338383363623033373561626166 +63313066363664383366393261303664633466306635313061333661643965613033373761393435 +61313338303863393066323565656639656630656138323931643239653331353831663139646437 +31343539323635333062383063353265666464336439653564393237666334613333653366333939 +37616535343563353838663730623439633833383334663965646632333734333732333266613864 +61346337373263646534383638643133303338663136336134386162303032623163383831336665 +66636533353132383963636365376431313235323237333732663962333162653761656366313332 +32326465643665303365333933653938316633316339343964656366623662323634636337663034 +62396332643632316464653539333264626532666433376230326135643466633264616236373631 +64343930643832633363393361353831323163663935336336303633306336333039383035356465 +33633235336362373737643362353864376366356632666365363735396239303233616630643139 +64336132313161353334663162616465636361646464343963623536313134383366663731643338 +65656231643637393466343761383465373039656439613637326235323839346332613032363335 +30376261666433616333613931373231643337393230323762393666343766323233613833656463 +64633735613165303037376266643064333131383565363432383963303632663336633462323330 +63646431613665613361363062376165643930306635343830663033316565656232303732656366 +62353936386436333632343164376433363465316632613136363436653762303832393762633362 +63376433326237616663636633663366396535373834363263383735333066623065636461383961 +38346339336632643738623237663438323731366361323436396563633737326434333237303133 +30636264663765653839626235626138626366363438626366376666376435656533383132613866 +35303363663966373765343164356539363536326465646164323536343766393063386230303063 +36353063613736666134326136393561386435326135376432393564623666613930333037363236 +35363164666437333037326333666638636538613530333633373032393431353332333935373366 +32356632646434616234663939653839316662386335636538353637656364316264373364653239 +38313866366330393961363964383031313934663736346362323938306133633035666662323662 +33666332383032313962386464303866626435666263386532383334366666353237343932363965 +39623532353932646166653366383536346530383032653237396564326163353730386461613462 +63363665653862383362343932326265326335653534613361386231623366366238643433336166 +66313938383762656365303865643438303861303061646232613136663536303262643038616565 +32653761636463353066633736323335653035323663663333663666363839646261663761666439 +38623931646139623738663135353163636130656633383132343139666332336261623265653235 +35623038303966623063333533393437336432343036386133376437316638656566613137363961 +61653063663365366261623734333631626662623531323232313961633132386463333233376264 +64393262613163343337316263393533666365373435643236653637313534316665303963333862 +37653530643265646463633930303532323433636465303439333166366530333765333234323364 +62616563363835346134303934633436656662663838343861336335303939303637633833376165 +31663433636231626634333933653134346335653234653539366133333637303466373839326638 +66643637363465346238323038343431376362313136653030353034306336343063666565643062 +63393364333439383737666231356633396630313038343532306337376461653665323666613665 +37386137613662346266303034336131396238383139383061346531666131633139623733666534 +33356665376337373663326466623530613935306231636532346564386438346136356362376137 +66303733346465616331303334653731323535663332323963393865393865336365346330333539 +62386435336531623137663264636539353432626465636365306465326536663531363437313661 +63343836366134316139323933613761633331343934643432373837323630393764363433633530 +37626534343063636236393939313938643963623430363538396262623232343661656132316563 +39646130623661633535656562666630323336303334333636316432343833646363333564643766 +64343936346665353630393463656366343464643431336663353334616166323164653832323036 +62646439386433633937626663323632373236383533353266633564316330623664363564666165 +37323539663363613133353733356233383430363563343565353566396432386265376166323363 +66393162353037636230616436653163633761383961316439353665393863373938653038323531 +62613433366139636266393265646334653730366631663031333832306231336463363131373432 +64393630336561333938393531383936373066336665316536373965633962396563383263623138 +62376161623466646563623236353662336337313538363934393064623865326232303339343931 +63373439633963313234663534636631623139613239346430616339323436346131356534666264 +37616535643238333439383063363231323039396433656533386135303733343039323662396233 +65323435643933336131636263636565373763323465373261323062666234373463373238316631 +62396562353437343839346638333666633232663437616362363030333433643933643266326537 +39383036333034346466326563376164356262356436353066616433663061633862616132633961 +65333432333238346235376434336639353934373231366262623830346362616466363530636564 +62386337366339343433636535383231656631643335643166643638346538366262646537313966 +30653838623631326162366234323030643232333830633962643230653939616239633437323333 +39333861333261666363663931626634386336386535373835383034656165663535383666383262 +65373030633265623461396430663064313937363637646434366561323137313630376561613632 +33303362346635356565346231363439343765333330376562343866383932333137373064633230 +61383737623234653163363137663033323234376365653734346266323661646534663633306637 +63663537363532313434633662323330306565386633633938313630633366376665343262653561 +62356437653464356236363464366166313030343738636232666430323162333462316331653535 +38333862336439643064323833643136326361323335623831343864653236616564313764636164 +35663566613130623261643034326262666565393335636162363664626236366465363337373337 +30363135366139303432373233353437323933343330323738666637653434383063316231346539 +30623766626439353566646132666431376564636334366335306537353236393630386265653539 +34343536356432336362363365613165613330333662613362323732663062313431646562303839 +30316664373163373232316264353661666635633233323637326530626166306635373933393265 +30376234663132303935373165323662333165666462366430666234386564383361643365646336 +36646339613066666364646130663966346538633636373366636162343434313966646463646438 +35333234326533343833383938636662616163356163633338383336396132303730623264333237 +65623435663062303363313834646630333735376463306161643064383461653861303530376131 +62393035666332303665336239646638633331306464663832646561663638383630616632663837 +36626461643931373338336638333461363333396136646362656564326630363133303933356463 +36306135396365343964333262653463303932323634383234333361346637663630636232633633 +63393663626232646432343964316538663334663138643864366434633862656132303833633963 +37303363343066323338383839393835616464623563666631616337633137366565636431653663 +32356135653236356631326438333533363435353835396333623963323234616430393339343934 +32336437616337346231313532363466316637326637366338383233656265326237373238336634 +34356362353838336239366531306163663134363939363237666163643962656361663635646361 +65373665343131636635353939643632396134343162613464383235666263373463353161373234 +65386131616366313332316264626162373865626662313564656438326437373830303463303738 +30343964353539336533313262373062393066623836333465373762323166313762313136363732 +63363161646265383236306534393734663732316437623361393738663562326632363533643036 +33653435356239313536316334646532646331633434646632343165626536323231303962623930 +33356136343563633030623537363337393936643061373331383737376336646565396632326236 +62316439373062623535663433383463343532376531373939326336343034353536303338363161 +39333530303531323938633930656630663964653263396664316535666665313965663862356166 +37636130633235636634616163303932643237623639663033663064346139373538306536306163 +30646634393165393333346530636663373362343063303763313434616434636563376665376635 +37376665623036333866313436393362396134333933646639623636653835303837643363393433 +62316162393061633537633361636264643632343534393562326237333837363862653130306466 +34363338356164376330636134366161343165313337303331303064306534386232313034303465 +34626435343732616434316562383437333661343365383838353361333261383435383533653062 +31313637376437343464656565373937343662393031366336663462623338356233663632333436 +63616430303438626335353437663739616362346331343363373438333636343935613265383932 +63386361373562396437376531333862393033653664376639633633356337396637366232353236 +64613738626264353134613963373435633062383665313933366564323233663630333761383965 +35636530633361653363333436323363353835313330616431643964626461326432663166666538 +39336435366539373262353435643834353537323164643331633539646432646462303833373564 +39303265633366316139386334623863333233376161356636636466623539313565313732316264 +32313064323266313536363861363437306434383735663262653034346263373466653030376465 +32323132623034613632353362623139373330346366343832386139616662633135366362653263 +62653436386565333832353335613038326534376136353865333638643366376636656264623764 +66376562636137396337386637353564633932646365363537353136326466373738633064616362 +63653563323962366637376461373536366336663232386161333163386433653063383431326161 +33343838313261313937653861306237363361313638613136336337653037653337343063323933 +37623831623339663438356665383465636236663865363539303265323630393133623736616566 +63323533383039663834353763326136333066623963386362643338313165613461626635323936 +39323565363462363465333836356139366264653733383238643131333165353933643063316663 +32366439323235666534663165346266343365336261346165326266316139353735393435626233 +62313362666665613464333962343132623836643066653933633635633833383232376236666561 +61626336313837323930613864393435343833366630373465376437313466653065353965393238 +63666335323436383431666436343661303635363935333062356663313462613430333162613036 +30613336326439333466353932383638356266663464356235376534663832353463366435333663 +30616366616161306336346436633766643565393039623139306232333736363062303430643261 +65336663333638623639393035656364363139386131393232643032313339613137656431333338 +66373933363362633337336637663361633037333063326634366264623739333932383762373434 +32623432366263613036333037393337663930333634373232366465623232336435656338323964 +63333532363835383162306134646335363037353563373931303631613262366236383734376230 +65383334383030363464633037616134366463613332636437666437366532353236626437356164 +65666630316434323931396562613166653734616136353231373332613432323632626363666261 +31343764663335306330376661633131376266626530373236623530383064356331613764653362 +34386233396233646239616630643835666435383139336135633861326538666536396461373361 +37326531616631376536396461646234303763663261653937326464663532626335643237646634 +30643162373564396636313261396636363032326162366537663739303437613331303130326564 +37646239653434343133343533373839646532393564623238653430663166393566346564633765 +36656436303438353166313133333464626638653237646638366237396239303761643664396561 +34386331353364396337343062643733623231303435366630363034333937636136623966643165 +32643565636636646633323366653666646437656337376130363238313836363266653362363364 +66616165633030316562313330393334626165613863356263613761303462646632396534653537 +32653463633531613532363731613331303738383966363936333834303364363334646466623764 +36306264353234383933363734633131356163363737383063333061613661363563643235383837 +33333030333166306435373866383231386364383363343737626666333263396230313439326639 +31633763643537316362663263343638646135353965363032626662346635636432383866383333 +39393764356235376463633061666566616661303462646434656362303037656366643864343932 +30353365353966636639333937383637623535656365666632656264323538396163633030343737 +66343533663061663065376238306231386334343034313663303038646265333631346535303634 +66383333323935326566653930663539323232646432313434636338643537326563306430313662 +35303337323662303530666333666233396430393231306362376564653364303662613732346638 +62613330363665353337393437356362346163346239373730373039393565656436343139336538 +30626136356238653337646239623037353437663461306462366637356636383936643438653665 +34623233623338396237643961356130363366356537346566376561663963666366653861336162 +36643061373633636638363939616664653764313238323534313330343065326161633833386261 +64616535613363653062623433633731326130343736323761376138633834363130393633306563 +66613133393937393038326234333033663136613834623435373237336263656663393966623835 +64653430306465663765316436356639336134336462613732616636383164663931383566356132 +62356363386230393366366535633762373630313366646133623132623835333766363762326563 +37313463323033656334316566666438376261633663656439363737356532663037656432323131 +30333136323430363430636338316632666331613839623561393061656530613635316465336466 +33346331636464303434303936393566353637333563613238353061646466646363363835363530 +34643735626437656535663235663933663261303233363032363530643862356563623664363832 +34623231373963323437666165636638393639336363343137616437326438623338333637613230 +63636233323037323137353837396133313535393063333164336438393432643063333132623431 +35616234356334373239353533646461316461616465393531643862633133333235663439623339 +32353936633236666530363264346637626263343461333339386463303535303530653866663832 +38653335306530666262393666626136326531383761346161373131626464326538356631633132 +65323935623531333237613763326137333933373839383838306432313534613066653561393862 +64313130366335353536643366643861383834393065323665366439326134333131373431303664 +66643734306230393461336235663938666339663165346561653635393162313032323365613363 +37666637626263666132393764313934386134343335313131303166626365663533303937633931 +33333164633739613839333464613164613065396138383834623965326233613531326138373438 +37666361336334616462646362356233303961393039646361333166633133323436626665313330 +33326635303462323862633162393838666662303138303038336235393530396264363239663662 +38306361343166323465386538663663366463386533616131346137616137626363323832363936 +34323734616462363334373535353035653839306636383136363762326666393361346638313565 +32373139363663376539653165656430303236666430306461636136613739353235323866393866 +31616466306265323633373764643136643265613834663936333631306435346633626639653563 +62353432663962346538623961313338626630343266666665386362303933373465316636613462 +36383662366239363062376637383264343234666631663162393263336561323330623764396662 +66353831353831323264636631643738353366333735626231313932666561333566653635343035 +31343934626564383461356337383830346533666431386661643038356535363338633532613836 +32363663643161396638616530333437663063366665623536633633613139653461303830303536 +38393335333536373364343239633662333565613264386362616639316334376231396266336461 +64613038353734303131336662356537386464643432336461376361653839623562333665643965 +39653530366134633238643632653535653566303233323335303732626430376665623237343736 +33356439666564326638353862613964333766353332343061633130613365316334613364336662 +65616563353130626637623664643565316337633966323662653037613365613032323934346565 +61633239626639653038656633323134373034613132663739626465383366343362643665373631 +63376433346666636537306365396434383463346539623338316332633061393765343935666162 +30313338313632663839366563643337656264656462383335323231353235386133616337353330 +31346462386364633461383163356437333431353466366530646562386264363564333361633463 +35653433353038376332613762613738623362613135303230326161343634333031653333383038 +39323365626137363231356363393930393035363436343934633632656162366337663535333636 +62303536313233656564653962333131303263323038613162323733653636666465326565313733 +62353362343462333237316434333636366139613037653534313135336563643430386234323361 +65636264316466373363396466323035333230396334356366366132663336663036616463343638 +34613462616262313839306137656565653466653634613536663533336664376132373135623835 +30663030353533383733306363343161663564616464343838343030363739636139373739366462 +34636264303630313362303639306531393365356638333233323365303733393534646635633238 +32376439343832393566373265303437376630613838373437316433313339376666343536386136 +62313332643539343761373832613139396635616439343432313437333337666463643462623339 +32643039376166303032646164623935333266356439643333313565393565363831626561386139 +64386332303035323536356337373335653664313366343333333335623762343832643132383537 +32343438656535323536663238333661396663353834633863313230323163353037313433346431 +31366131353637303032643863336166346232653162643463306239623361386565633662383966 +61653432323035623965323265343862653834323439323762336337303965656166666336376234 +34653133653339346562303666623631386261653334643161653737336539323639383731633662 +35356661356639636331396161323435613538646631343265326330333531333733383334323336 +63633236386663316466663534326231343730383365666562346666336666336431366166343162 +30653662323866633038656434346665363965363262323163363637353533656433633632323261 +66363334663962313565656333643831316531653231656632636163623566313364363338383330 +61393437386534633231366433366161663639333365363064333737663533656431626433326433 +37623963313131336363373764313438353765643230323230353634613931356365326165633237 +36623235313232616136393566313762636166636661653435373437303838343863663832663637 +63363932363839393333613265396231346639626365303335396165383564366435366465323038 +65326535323135336335353239343462633136366361313735376233616338343433666430666264 +64653932613533343166353830373334353435313863326166313134336365613163376238316466 +31623939336139343833623237393532393562303964346237626130363562333462363130653361 +31383336666633636230353661663262626564633266303262333530356430373735643637383337 +64383861656539656335623063663335636335613236363734666630373938353738393833653562 +62383462353734356338363730393033383261663536653964363937346232323032393561373165 +64333033386561333462363363313963616535343366656439376332376464396562633436343735 +36353936383763333264313830363762656632313134623237613665393538396430396137626130 +62626436363934393539663162633563396634663537626233393436303461313031646634306261 +62613761343331353336666166653239373462613861613234393231353364346464316238623431 +36316662313236633464306339386337316637393664346565636636313261316630646636376135 +33343732623666643732333730353161626337353931353239333135613936366262333466336539 +35633764623862303636383332626337616466313939326338646138623637616335643665643038 +35346633633361653764373163316135613031306561366237303834366539616161663064313866 +30346131626137623438376566376565363039373266636337333537383666643637353931386338 +62643661636630393931646133373866663063396633383130376439393637663434323734353336 +36663864356136613966363162303239313032333262613962333331623238356630323164656332 +32343261336631323338626265373466353339383634343764363634343934306261313936663165 +62366664306561333766663133353064346234623833343935343965633532383930633730656632 +33613237633363663739323035646230663238646364666665633966393566336262383934616532 +31386531663163616664333063653263626333666334623931353362613265656239643561643332 +34316565353039383962333934303935663633356463656435653235323937323134363661643365 +64653663343236396363303930656162623563306336323835356533316465336437343734326163 +36333266393730383231653730623433323064623336623832393161336235303934326363646530 +65613238663563306461373661616165353962393336343230653739326433663064376363356430 +37316638313731613562323564333461633333353739396232373332653035346464383561343038 +66613930356437353838386435653665616333383465643235616539333637623232356661653537 +34323238666136656632316630373131633663366261336264316633646236623633663936303336 +64376265336365396134373438653832353436613230343732653134373063316432303834363237 +32366138386163646130626439376361313066653431383962663638386631326166393337376264 +32316462346331393536393431396564373933393332386339633134366663306639653534663631 +34313165663436333837383339343334633536613431323862623666366164353539616462383865 +37386135346338336236303761323131656365623766636261646161623764633064336139326633 +33336361383331346633383537323534613734303233346130633738316239323635373131326634 +31393566666233353532623338303335623137326232316561323662663063303539633366646131 +65326231616565326338653661393039353835313963336130663464353063323137663935666563 +62653439323161306337643263636436393739663637366465323564336663383438623533353732 +32383532353065393031626330363763613232613330353438396139613034643632336531656330 +61656535383238383632373264643537363861386330323035646338623433613330643833373737 +61636261626662626262666363653235396336626166616132666337353636636637393136653363 +35656363633962663730653835313162313037376635313061396265386331623463646563396136 +62343530633532386335616365626438633039643437373031353561393362656535353537356461 +36383863366534373337663630396336643366313965373466303762643636646665306538666430 +63363962373538333231353730346361396635343732326538323730313564303636613065306538 +39643435393064303361303432353661326662383365343634313537373532313033356163663664 +30356163613766353636326465613731383237663066663562366339653332363463653061323363 +61323931313464353962316664346662336532633332313131326530363630653838306138643635 +33623833333463646665356661643037663237373361346237313335373861393839333833343831 +33643837656436656235313166636534336235373738623532643439656461373261623261636139 +30663763346539366161626337623565623566656439633137306264643731313864386464663736 +65353331383631326137656236363636313931363335323434303061333035333536306561333962 +30643139616630616633656638643130333137653337383665313666663130383966346164643232 +62653239366462393233343338613065363165373832343439343063353964353264343339666236 +36393064313633393937386439346364633430646662306362656636363737616331626334353265 +38313863616539306138363336306137343931326133616230323137396637643033623535353833 +62656533656632306435383062323030396164663433353733383033646663316364373533636239 +34366133343464313732306232383138383564613664616163333136666631343834653334666664 +33333537333434343765383363303365613830613339653666303338353465306665346435656337 +63623137656633323430643432656339663266376338393436336530633761373935326632623636 +63613535313936303266343137633038363365643761343334316135633066303939313262333036 +30613162613430386633386439393964366466633661636637333935303365646364346466323863 +63366161633930333236306234613530376336653366656562643234643233623638393064373836 +31333038373731646361613361366531323737306633343866316439663963383566336265393637 +38313261353733373562333533383765336166666436343966646538623366663538376336313165 +66376433366133313335653233653638663864303162633364303235316363393834623462336163 +34646537643631363138666536643133306138616639396465653438663062643333326639363061 +63376161396563373336373838633334393065363831396439363739346363323437343638363832 +38386337313561333561613664303462376434633530376661343736613033336463383339376565 +31653330643763616465306563653161333063626331333662323738303630633037376262636336 +37396330303036616662316239663636653862666330656164313931636330343930383737383066 +38313664326339323534336435306266373830383930646364386563313735383531333462373033 +34616136623063333731326363303263633633396232363337303032326438353232323766303136 +33666465626461363136613562386430613463396330613766326633656437633965376532396633 +33373539653132643733313066343530383536306266323330653161333633643530363263643566 +30313931303365643430333839363937616366343637623530633565643966623538373963353337 +37353566326465336164353438666630326237643736363635653435346131343437663765613236 +35366639313632363965633265353538303039343764336338376466393833346234643461653361 +32623865353263646233373164626166366461356339666439643839386531623130643063363930 +65326661643465396662663663326531626634333162366533643966613664616333396363643961 +64623636306439613463363334663264633632646632333432386634393231313033323035373361 +63663936333236313330623663313732613737363564633830303964323462663663383930613063 +39633665313431396337653232386462646238343538353362636666336163643634343431323933 +63343666313231383336386332336430346333643033323332366534313266663063343437646239 +31363166386137356136366537333138663137623663386335623433636563396237643337343866 +62316366666662643162636535663966306162613638373264323537646438316638616434666138 +31303234633161353235363265393064383662313530623265343030303839343436363162316266 +36366263613433383338346534386164306338366566636439316465346232333839323964373138 +33313735623532613265643833653231646631383065616433643063313861626665666563663634 +66656463386636613331623133363131366532636637643664313665303534326466383733383263 +65393564356461653730346264333337386236643137346633366537633835383365643035643131 +32623032316239383930323063303334303137633065663830323238386263613337613465333232 +64393535366234366335313932656464313937376562326435326133613337643830646233346666 +61636462613364616133633738363562323339326335383566393537653732663930383564356562 +32393033643139646561633134353665626534656262323730626639633937376434356431393766 +65636163376464373132333533303633646362316663346564616537623138663031373738323763 +6433 diff --git a/import-database.yml b/import-database.yml index 2f20933..4ad8146 100644 --- a/import-database.yml +++ b/import-database.yml @@ -62,7 +62,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always roles: - role: import_maria_database diff --git a/info.yml b/info.yml index 20bb814..c04d566 100644 --- a/info.yml +++ b/info.yml @@ -12,8 +12,10 @@ - ansible_version.major >= 2 - ansible_version.minor >= 10 msg: "The ansible version has to be at least ({{ ansible_version.full }})" + - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false tags: - always @@ -21,14 +23,17 @@ debug: msg: "{{ ansible_distribution }}" delegate_to: 127.0.0.1 + - name: "Variable " debug: msg: "{{ group_names }}" delegate_to: 127.0.0.1 + - name: "Printing ip addresses for {{ inventory_hostname }}" debug: msg: "{{ stage_server_ip }} / {{ stage_private_server_ip }}" delegate_to: 127.0.0.1 + - name: "Printing stage_server_infos" debug: msg: "{{ stage_server_infos }}" diff --git a/kubernetes.yml b/kubernetes.yml index eeac896..c3c5062 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -13,19 +13,20 @@ msg: "The ansible version has to be at least ({{ ansible_version.full }})" delegate_to: 127.0.0.1 become: false -# TODO run only once (> argo-cd uses stage_server_infos) + - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false tags: - always roles: - { role: kubernetes/base } - { role: kubernetes/namespace } -# DEV-243 is waiting for hetzner support << Ticket#2021110303010972 RE: Anderes Problem (Server: #15275628) >> - { role: kubernetes/cloud-controller-manager } - { role: kubernetes/container-storage-interface } - - { role: kubernetes/cert-manager } - - { role: kubernetes/external-dns } - - { role: kubernetes/ingress-controller } - - { role: kubernetes/apps } +# TODO setup prometheus operator here + - { role: kubernetes/cert-manager } # TODO depends on prometheus + - { role: kubernetes/external-dns } # TODO depends on prometheus + - { role: kubernetes/ingress-controller } # TODO depends on prometheus + - { role: kubernetes/apps } # TODO depends on prometheus (argo-cd) diff --git a/kubespray b/kubespray index eeeca4a..92f25bf 160000 --- a/kubespray +++ b/kubespray @@ -1 +1 @@ -Subproject commit eeeca4a1d0334efebcf732d08bffc7e10240fc9c +Subproject commit 92f25bf267ffd3393f6caffa588169d3a44a799c diff --git a/patchday.yml b/patchday.yml index abbab15..84cd78d 100644 --- a/patchday.yml +++ b/patchday.yml @@ -29,7 +29,7 @@ - name: "Smardigo Patchday: rebooting <{{ inventory_hostname }}>" ansible.builtin.reboot: post_reboot_delay: 30 - reboot_timeout: 60 + reboot_timeout: 300 - name: "Smardigo Patchday: wait_for host after reboot" delegate_to: localhost @@ -82,7 +82,7 @@ - name: "Smardigo Patchday: rebooting <{{ inventory_hostname }}>" ansible.builtin.reboot: post_reboot_delay: 30 - reboot_timeout: 60 + reboot_timeout: 300 - name: "Smardigo Patchday: wait_for host after reboot" delegate_to: localhost @@ -124,7 +124,7 @@ - name: "Smardigo Patchday: rebooting <{{ inventory_hostname }}>" ansible.builtin.reboot: post_reboot_delay: 30 - reboot_timeout: 60 + reboot_timeout: 300 - name: "Smardigo Patchday: wait_for host after reboot" delegate_to: localhost @@ -146,7 +146,10 @@ vars: k8s_basic_services: - kubelet +# TODO check if docker or containerd is used - docker + - containerd + tasks: # draining the hard way # due to force( delete static pods) + relative short terminate_grace_period + @@ -169,18 +172,19 @@ name: '{{ item }}' state: stopped loop: '{{ k8s_basic_services }}' + ignore_errors: true - name: "Smardigo Patchday: update pkgs" ansible.builtin.apt: - upgrade: yes - update_cache: yes - autoremove: yes autoclean: yes + autoremove: yes + update_cache: yes + upgrade: yes - name: "Smardigo Patchday: rebooting <{{ inventory_hostname }}>" ansible.builtin.reboot: post_reboot_delay: 30 - reboot_timeout: 60 + reboot_timeout: 300 - name: "Smardigo Patchday: wait_for host after reboot" delegate_to: localhost @@ -196,13 +200,14 @@ name: '{{ item }}' state: started loop: '{{ k8s_basic_services }}' + ignore_errors: true - name: "Smardigo Patchday: wait for node readiness" delegate_to: "{{ groups['kube_control_plane'][0] }}" kubernetes.core.k8s: kind: Node state: present - name: '{{ stage_server_ip }}' + name: '{{ inventory_hostname | lower }}' wait_condition: reason: KubeletReady type: Ready diff --git a/remove-database.yml b/remove-database.yml index 1bdd92c..41b327e 100644 --- a/remove-database.yml +++ b/remove-database.yml @@ -75,7 +75,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always roles: - role: connect_postgres diff --git a/remove-realm.yml b/remove-realm.yml index de6ad30..9c4b74f 100644 --- a/remove-realm.yml +++ b/remove-realm.yml @@ -65,7 +65,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always tasks: - name: "Delete client in realm <{{ current_realm_name }}>" diff --git a/remove-service.yml b/remove-service.yml index 7a453ff..3b709aa 100644 --- a/remove-service.yml +++ b/remove-service.yml @@ -55,7 +55,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always tasks: - name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>" diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml index 51aad4d..52ae7bd 100644 --- a/roles/common/tasks/main.yml +++ b/roles/common/tasks/main.yml @@ -64,7 +64,7 @@ - users - name: "Create users" - user: + ansible.builtin.user: name: '{{ item }}' groups: '{{ sudo_group }}' shell: '/bin/bash' @@ -76,6 +76,16 @@ tags: - users +- name: "Enable passwordless sudo" + ansible.builtin.lineinfile: + path: /etc/sudoers + state: present + regexp: '^%sudo' + line: '%sudo ALL=(ALL) NOPASSWD: ALL' + validate: 'visudo -cf %s' + tags: + - users + # TODO check usage of key_options "no-agent-forwarding, no-agent-forwarding, no-X11-forwarding" - name: "Set up authorized users" ansible.posix.authorized_key: diff --git a/roles/connect_realm/defaults/main.yml b/roles/connect_realm/defaults/main.yml index 32a567e..b3948f2 100644 --- a/roles/connect_realm/defaults/main.yml +++ b/roles/connect_realm/defaults/main.yml @@ -46,9 +46,6 @@ current_realm_users: >- [{{ current_realm_users_base }}] {%- endif -%} -current_realm_admin_users: [ - { - "username": "{{ connect_realm_admin_username }}", - "password": "{{ connect_realm_admin_password }}", - } -] +current_realm_admin_user: + username: "{{ connect_realm_admin_username }}" + password: "{{ connect_realm_admin_password }}" diff --git a/roles/gitea_realm/defaults/main.yml b/roles/gitea_realm/defaults/main.yml index f3f4d49..2e2e897 100644 --- a/roles/gitea_realm/defaults/main.yml +++ b/roles/gitea_realm/defaults/main.yml @@ -24,9 +24,6 @@ current_realm_users: [ "password": "{{ gitea_admin_password }}", } ] -current_realm_admin_users: [ - { - "username": "{{ gitea_realm_admin_username }}", - "password": "{{ gitea_realm_admin_password }}", - } -] +current_realm_admin_user: + username: "{{ gitea_realm_admin_username }}" + password: "{{ gitea_realm_admin_password }}" diff --git a/roles/harbor/defaults/main.yml b/roles/harbor/defaults/main.yml index e886157..fdda10c 100644 --- a/roles/harbor/defaults/main.yml +++ b/roles/harbor/defaults/main.yml @@ -47,13 +47,15 @@ harbor_base_configuration: email_insecure: true auth_mode: oidc_auth oidc_name: "{{ harbor_oidc_realm }}" - oidc_endpoint: 'https://{{ shared_service_keycloak_hostname }}/auth/realms/docker' + oidc_endpoint: 'https://{{ shared_service_keycloak_hostname }}/auth/realms/{{ harbor_oidc_realm }}' oidc_client_id: "{{ harbor_oidc_client_id }}" + oidc_client_secret: "{{ harbor_oidc_client_secret }}" oidc_groups_claim: groups oidc_scope: openid oidc_verify_cert: true oidc_auto_onboard: true oidc_admin_group: 'admin' + oidc_user_claim: 'sub' scan_all_policy: parameter: daily_time: 0 @@ -79,7 +81,7 @@ harbor_projects: [] harbor_robot_tokens: - -# secret_refresh: True + secret_refresh: true # token_state: present name: ansible level: system diff --git a/roles/harbor/tasks/configure.yml b/roles/harbor/tasks/configure.yml index 526813d..f2934cc 100644 --- a/roles/harbor/tasks/configure.yml +++ b/roles/harbor/tasks/configure.yml @@ -1,5 +1,9 @@ --- +### tags: +### harbor-configure-base +### harbor-configure-robots + - name: "Check if harbor is up and running" delegate_to: 127.0.0.1 become: false @@ -20,6 +24,8 @@ include_tasks: configure_base_config.yml vars: base_configuration: '{{ harbor_base_configuration }}' + tags: + - harbor-configure-base args: apply: tags: @@ -45,6 +51,8 @@ loop: '{{ harbor_robot_tokens }}' loop_control: loop_var: robot_token + tags: + - harbor-configure-robots - name: "CRUD - scanall schedule" include_tasks: configure_scanall_schedule.yml diff --git a/roles/harbor/tasks/configure_base_config.yml b/roles/harbor/tasks/configure_base_config.yml index a12f8bb..f112e00 100644 --- a/roles/harbor/tasks/configure_base_config.yml +++ b/roles/harbor/tasks/configure_base_config.yml @@ -1,5 +1,4 @@ --- - - name: "Add harbor base configuration via API" delegate_to: 127.0.0.1 become: false @@ -18,3 +17,4 @@ delay: 10 retries: 10 until: base_setting.status in [200] + no_log: true diff --git a/roles/harbor/tasks/configure_robot_tokens.yml b/roles/harbor/tasks/configure_robot_tokens.yml index db0bd14..f14e27d 100644 --- a/roles/harbor/tasks/configure_robot_tokens.yml +++ b/roles/harbor/tasks/configure_robot_tokens.yml @@ -2,21 +2,28 @@ - name: "Initialze VARs" set_fact: tok_obj: {} + tags: + - harbor-configure-robots - name: "DEBUG" debug: msg: "DEBUGGING - robot_token: {{ robot_token }}" when: - debug + - harbor-configure-robots - name: "Drop token_state from dict to avoid rejecting object by harbor API due to unknown field" set_fact: tok_obj: "{{ tok_obj | combine( { item.key: item.value } ) }}" when: item.key not in ['token_state'] with_dict: "{{ robot_token }}" + tags: + - harbor-configure-robots - name: include_tasks: configure_robot_tokens_crud.yml vars: token_state: "{{ robot_token.token_state | default('present') }}" token_object: "{{ tok_obj }}" + tags: + - harbor-configure-robots diff --git a/roles/harbor/tasks/configure_robot_tokens_crud.yml b/roles/harbor/tasks/configure_robot_tokens_crud.yml index b251fe5..13d8050 100644 --- a/roles/harbor/tasks/configure_robot_tokens_crud.yml +++ b/roles/harbor/tasks/configure_robot_tokens_crud.yml @@ -1,7 +1,13 @@ --- + +### tags: +### harbor-configure-base + - name: "Initialze VARs" set_fact: token_object_combined: {} + tags: + - harbor-configure-robots - name: "Get all robot tokens" delegate_to: 127.0.0.1 @@ -19,6 +25,9 @@ register: all_robot_tokens delay: 10 retries: 3 + no_log: true + tags: + - harbor-configure-robots - name: "Create robot token" delegate_to: 127.0.0.1 @@ -41,6 +50,8 @@ when: - all_robot_tokens.json | selectattr('name','contains',token_object.name) | list | length == 0 - token_state == 'present' + tags: + - harbor-configure-robots - name: "Set VARs if current robot token object already exists" set_fact: @@ -50,6 +61,8 @@ token_object_dropped: {} when: - all_robot_tokens.json | selectattr('name','contains',token_object.name) | list | length == 1 + tags: + - harbor-configure-robots - name: "Refresh the robot secret" delegate_to: 127.0.0.1 @@ -81,6 +94,9 @@ - token_state == 'present' - token_object.secret_refresh is defined - token_object.secret_refresh + no_log: true + tags: + - harbor-configure-robots - name: "Block to Update robot token data" block: @@ -89,6 +105,8 @@ msg: "DEBUGGING before dropping - combined token_object_combined: {{ token_object_combined }}" when: - debug + tags: + - harbor-configure-robots # unknown param/key in object robot-token will result in errors with harbor API # therefore we drop $keys from dict @@ -98,6 +116,8 @@ with_dict: "{{ token_object_combined }}" when: - item.key not in ['secret','secret_refresh'] + tags: + - harbor-configure-robots # harbor API behaviour: # in case of initial creation for robot token objects, harbor creates a name for this @@ -113,10 +133,15 @@ set_fact: robot_token_name_cleaned: name: 'robot${{ token_object_dropped.name }}' + tags: + - harbor-configure-robots + # part 2: override name with new defined name of object - name: "Set fact" set_fact: token_object_finished: '{{ token_object_dropped | combine(robot_token_name_cleaned, recursive=True) }}' + tags: + - harbor-configure-robots - name: "DEBUG" debug: @@ -152,11 +177,16 @@ delay: 10 retries: 3 until: update.status in [200] + no_log: true + tags: + - harbor-configure-robots + # when - part of BLOCK-statement when: - all_robot_tokens.json | selectattr('name','contains',token_object.name) | list | length == 1 - token_state == 'present' - + tags: + - harbor-configure-robots # end of BLOCK to Update robot token data - name: "Delete robot token" diff --git a/roles/harbor/tasks/main.yml b/roles/harbor/tasks/main.yml index e51178c..1a2fcc2 100644 --- a/roles/harbor/tasks/main.yml +++ b/roles/harbor/tasks/main.yml @@ -1,15 +1,19 @@ --- +- name: "Create realm for <{{ inventory_hostname }}> if necessary" + include_role: + name: harbor_realm + vars: + current_realm_name: "harbor" + current_realm_display_name: "harbor" + tags: + - always + - name: "Install harbor" include_tasks: install.yml - args: - apply: - tags: - - harbor-install - name: "Configure harbor" include_tasks: configure.yml - args: - apply: - tags: - - harbor-configure + tags: + - harbor-configure-base + - harbor-configure-robots diff --git a/roles/harbor_realm/defaults/main.yml b/roles/harbor_realm/defaults/main.yml new file mode 100644 index 0000000..7a5ae97 --- /dev/null +++ b/roles/harbor_realm/defaults/main.yml @@ -0,0 +1,59 @@ +--- + +current_realm_clients: [ + { + name: "{{ harbor_oidc_client_id }}", + clientId: "{{ harbor_oidc_client_id }}", + admin_url: "{{ http_s }}://{{ shared_service_harbor_hostname }}", + root_url: "{{ http_s }}://{{ shared_service_harbor_hostname }}", + redirect_uris: [ + "{{ http_s }}://{{ shared_service_harbor_hostname }}/*" + ], + secret: "{{ harbor_oidc_client_secret }}", + web_origins: [ + "{{ http_s }}://{{ shared_service_harbor_hostname }}" + ] + } +] + +current_realm_groups: [ + { + "name": "awx", + }, + { + "name": "admin", + }, + { + "name": "smardigo", + }, +] + +current_realm_users: [ + { + "username": "{{ harbor_oidc_admin_username }}", + "password": "{{ harbor_oidc_admin_password }}", + "email": "{{ harbor_oidc_admin_email }}", + "requiredActions": [] + } +] + +current_realm_admin_user: + username: "{{ harbor_oidc_admin_username }}" + password: "{{ harbor_oidc_admin_password }}" + email: "{{ harbor_oidc_admin_email }}" + requiredActions: [] + +current_user_groupmembership: [ + { + "username": "{{ harbor_oidc_admin_username }}", + "destination_group": "awx", + }, + { + "username": "{{ harbor_oidc_admin_username }}", + "destination_group": "admin", + }, + { + "username": "{{ harbor_oidc_admin_username }}", + "destination_group": "smardigo", + } +] diff --git a/roles/harbor_realm/tasks/main.yml b/roles/harbor_realm/tasks/main.yml new file mode 100644 index 0000000..a17fd68 --- /dev/null +++ b/roles/harbor_realm/tasks/main.yml @@ -0,0 +1,39 @@ +--- + +- name: "Setup realm for {{ inventory_hostname }}" + include_role: + name: keycloak + tasks_from: _authenticate + +- name: "Setup realm for {{ inventory_hostname }}" + include_role: + name: keycloak + tasks_from: _configure_realm + +- name: "Create realm users" + include_role: + name: keycloak + tasks_from: _create_realm_groups + +- name: "Create realm users" + include_role: + name: keycloak + tasks_from: _create_realm_users + +- name: "Create realm admin" + include_role: + name: keycloak + tasks_from: _create_realm_admin + +- name: "Create user group mappings" + include_role: + name: keycloak + tasks_from: _configure_user_groupmembership_crud + vars: + realm_name: '{{ current_realm_name }}' + bearer_token: '{{ access_token }}' + username: '{{ item.username }}' + destination_group: '{{ item.destination_group }}' + loop: "{{ current_user_groupmembership }}" + loop_control: + label: "{{ item.username }} >> {{ item.destination_group }}" \ No newline at end of file diff --git a/roles/harbor_realm/vars/main.yml b/roles/harbor_realm/vars/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/harbor_realm/vars/main.yml @@ -0,0 +1 @@ +--- diff --git a/roles/keycloak/tasks/_authenticate.yml b/roles/keycloak/tasks/_authenticate.yml index 52b0ecf..ab677e5 100644 --- a/roles/keycloak/tasks/_authenticate.yml +++ b/roles/keycloak/tasks/_authenticate.yml @@ -1,5 +1,4 @@ --- - - name: "Authenticating with keycloak server" uri: url: "{{ keycloak_server_url }}/auth/realms/master/protocol/openid-connect/token" diff --git a/roles/keycloak/tasks/_configure_client.yml b/roles/keycloak/tasks/_configure_client.yml index 3ad2bdd..d8f6c52 100644 --- a/roles/keycloak/tasks/_configure_client.yml +++ b/roles/keycloak/tasks/_configure_client.yml @@ -1,5 +1,4 @@ --- - - name: Print client {{ client_id }} for realm {{ realm_name }} debug: msg: "{{ lookup('template','keycloak-realm-create-client.json.j2') }}" diff --git a/roles/keycloak/tasks/_configure_client_crud.yml b/roles/keycloak/tasks/_configure_client_crud.yml index d1d8110..306c29b 100644 --- a/roles/keycloak/tasks/_configure_client_crud.yml +++ b/roles/keycloak/tasks/_configure_client_crud.yml @@ -1,5 +1,5 @@ --- -- name: "GETTING all clients for realm <<{{ realm_name }}>>" +- name: "GETTING all clients for realm <{{ realm_name }}>" delegate_to: 127.0.0.1 become: false uri: diff --git a/roles/keycloak/tasks/_configure_realm.yml b/roles/keycloak/tasks/_configure_realm.yml index ccd2202..5446f46 100644 --- a/roles/keycloak/tasks/_configure_realm.yml +++ b/roles/keycloak/tasks/_configure_realm.yml @@ -1,96 +1,100 @@ --- +- name: "Creating realm <{{ current_realm_name }}>" + community.general.keycloak_realm: + enabled: true + id: "{{ current_realm_name }}" + realm: "{{ current_realm_name }}" + display_name: "{{ current_realm_display_name }}" + auth_realm: "master" + auth_client_id: "admin-cli" + auth_username: "{{ keycloak_admin_username }}" + auth_password: "{{ keycloak_admin_password }}" + auth_keycloak_url: "{{ keycloak_server_url }}/auth" + account_theme: "smardigo-theme" + admin_theme: "smardigo-theme" + login_theme: "smardigo-theme" + registration_allowed: no + reset_password_allowed: yes + login_with_email_allowed: no + duplicate_emails_allowed: yes + internationalization_enabled: yes + default_locale: "de" + supported_locales: + - "de" + - "en" + events_enabled: yes + events_expiration: 604800 + admin_events_enabled: yes + smtp_server: + host: "{{ shared_service_mail_hostname }}" + from: "{{ keycloak_id }}@smardigo.digital" + events_listeners: + - "jboss-logging" + - "metrics-listener" + state: present + tags: + - update_realms -- name: Read realms - uri: - url: "{{ keycloak_server_url }}/auth/admin/realms" - method: GET - headers: - Authorization: "Bearer {{ access_token }}" - status_code: [200] - register: realms - delegate_to: 127.0.0.1 - become: false - -- name: Save realms as variable (fact) - set_fact: - realms_json: "{{ realms.json }}" - delegate_to: 127.0.0.1 - become: false - -- name: Read realm ids - set_fact: - realm_ids: "{{ realms_json | json_query(jmesquery) }}" - vars: - jmesquery: '[*].id' - delegate_to: 127.0.0.1 - become: false - -- name: "Printing realm ids" - debug: - msg: "{{ realm_ids }}" - delegate_to: 127.0.0.1 - become: false - when: - - debug - -- name: Create realm {{ current_realm_name }} - uri: - url: "{{ keycloak_server_url }}/auth/admin/realms" - method: POST - body_format: json - body: "{{ lookup('template','keycloak-realm-create.json.j2') }}" - headers: - Authorization: "Bearer {{ access_token }}" - status_code: [201] - when: current_realm_name not in realm_ids - delegate_to: 127.0.0.1 - become: false - -- name: Read clients from realm {{ current_realm_name }} - uri: - url: "{{ keycloak_server_url }}/auth/admin/realms/{{ current_realm_name }}/clients" - method: GET - headers: - Authorization: "Bearer {{ access_token }}" - status_code: [200] - register: realm_clients - delegate_to: 127.0.0.1 - become: false - -- name: Save clients from realm as variable (fact) - set_fact: - realm_clients_json: "{{ realm_clients.json }}" - delegate_to: 127.0.0.1 - become: false - -- name: "Save client ids from realm {{ current_realm_name }}" - set_fact: - realm_client_ids: "{{ realm_clients_json | json_query(jmesquery) }}" - vars: - jmesquery: '[*].{id: id, clientId: clientId}' - delegate_to: 127.0.0.1 - become: false - -- name: "Printing client ids from realm {{ current_realm_name }}" - debug: - msg: "{{ realm_client_ids }}" - delegate_to: 127.0.0.1 - become: false - when: - - debug - -- name: "Create clients from realm {{ current_realm_name }}" - include_tasks: _configure_client.yml - vars: - realm_name: '{{ current_realm_name }}' - client_id: '{{ client.clientId }}' - client_name: '{{ client.name }}' - admin_url: '{{ client.admin_url }}' - root_url: '{{ client.root_url }}' - redirect_uris: '{{ client.redirect_uris }}' - secret: '{{ client.secret }}' - web_origins: '{{ client.web_origins }}' - with_items: "{{ current_realm_clients }}" +- name: "Creating client <{{ client.clientId }}> in realm <{{ current_realm_name }}>" + community.general.keycloak_client: + auth_realm: "master" + auth_client_id: "admin-cli" + auth_username: "{{ keycloak_admin_username }}" + auth_password: "{{ keycloak_admin_password }}" + auth_keycloak_url: "{{ keycloak_server_url }}/auth" + state: present + realm: "{{ current_realm_name }}" + client_id: "{{ client.clientId }}" + id: "{{ client.clientId }}" + name: "{{ client.name }}" + root_url: "{{ client.root_url }}" + admin_url: "{{ client.admin_url }}" + secret: "{{ client.secret }}" + redirect_uris: "{{ client.redirect_uris }}" + web_origins: "{{ client.web_origins }}" + bearer_only: false + consent_required: false + standard_flow_enabled: true + implicit_flow_enabled: false + service_accounts_enabled: true + authorization_services_enabled: true + public_client: false + frontchannel_logout: false + protocol: openid-connect + full_scope_allowed: true + node_re_registration_timeout: -1 + surrogate_auth_required: false + attributes: + saml.authnstatement: false + saml.client.signature: false + saml.force.post.binding: false + saml.server.signature: false + saml_force_name_id_format: false + user.info.response.signature.alg: unsigned + request.object.signature.alg: none + protocol_mappers: + - name: "username" + consentRequired: false + protocol: openid-connect + protocolMapper: oidc-usermodel-property-mapper + config: + claim.name: "sub" + user.attribute: "username" + id.token.claim: true + access.token.claim: true + userinfo.token.claim: true + jsonType.label: String + - name: "groups" + protocol: openid-connect + protocolMapper: oidc-group-membership-mapper + consentRequired: false + config: + claim.name: "groups" + full.path: false + id.token.claim: true + access.token.claim: true + userinfo.token.claim: true + jsonType.label: String + with_items: "{{ current_realm_clients | default([]) }}" loop_control: loop_var: client - when: create_client | default('True') | bool diff --git a/roles/keycloak/tasks/_configure_realm_admin_users.yml b/roles/keycloak/tasks/_configure_realm_admin_users.yml index f736a1e..94a4391 100644 --- a/roles/keycloak/tasks/_configure_realm_admin_users.yml +++ b/roles/keycloak/tasks/_configure_realm_admin_users.yml @@ -1,5 +1,4 @@ --- - - name: "Reading users of realm {{ current_realm_name }}" uri: url: "{{ keycloak_server_url }}/auth/admin/realms/{{ current_realm_name }}/users" diff --git a/roles/keycloak/tasks/_configure_user_groupmembership_crud.yml b/roles/keycloak/tasks/_configure_user_groupmembership_crud.yml index 5125209..8acfa1f 100644 --- a/roles/keycloak/tasks/_configure_user_groupmembership_crud.yml +++ b/roles/keycloak/tasks/_configure_user_groupmembership_crud.yml @@ -1,5 +1,5 @@ --- -- name: "GETTING all groups for realm <<{{ realm_name }}>>" +- name: "GETTING all groups for realm <{{ realm_name }}>" delegate_to: 127.0.0.1 become: false uri: @@ -10,7 +10,7 @@ status_code: [200] register: get_all_groups -- name: "GETTING all users for realm <<{{ realm_name }}>>" +- name: "GETTING all users for realm <{{ realm_name }}>" delegate_to: 127.0.0.1 become: false uri: @@ -26,7 +26,7 @@ group_id: '{{ ( get_all_groups.json | selectattr("name","equalto",destination_group) | first ).id }}' user_id: '{{ ( get_all_users.json | selectattr("username","equalto",username) | first ).id }}' -- name: "GETTING all group for user <<{{ username }}>> in realm<<{{ realm_name }}>>" +- name: "GETTING all group for user <{{ username }}> in realm <{{ realm_name }}>" delegate_to: 127.0.0.1 become: false uri: @@ -37,7 +37,7 @@ status_code: [200] register: get_all_groups_for_current_user -- name: "ADDING USER <{{ client_id }}> for realm <{{ realm_name }}> to Group <<{{ destination_group }}>>" +- name: "ADDING USER <{{ username }}> for realm <{{ realm_name }}> to Group <{{ destination_group }}>" delegate_to: 127.0.0.1 become: false uri: diff --git a/roles/keycloak/tasks/_create_realm_admin.yml b/roles/keycloak/tasks/_create_realm_admin.yml index 6586f67..5a0f00b 100644 --- a/roles/keycloak/tasks/_create_realm_admin.yml +++ b/roles/keycloak/tasks/_create_realm_admin.yml @@ -58,16 +58,13 @@ Content-Type: "application/json" Authorization: "Bearer {{ access_token }}" status_code: [201] - with_items: "{{ current_realm_admin_users }}" - when: current_realm_user.username not in realm_user_usernames - changed_when: True + loop: "[{{ current_realm_admin_user }}]" loop_control: loop_var: current_realm_user + when: current_realm_user.username not in realm_user_usernames + changed_when: True delegate_to: 127.0.0.1 become: false - name: "Adding admin users from realm {{ current_realm_name }}" include_tasks: _configure_realm_admin_users.yml - with_items: "{{ current_realm_admin_users }}" - loop_control: - loop_var: current_realm_admin_user diff --git a/roles/keycloak/tasks/create_realm_groups.yml b/roles/keycloak/tasks/_create_realm_groups.yml similarity index 99% rename from roles/keycloak/tasks/create_realm_groups.yml rename to roles/keycloak/tasks/_create_realm_groups.yml index 5e3c79d..5661162 100644 --- a/roles/keycloak/tasks/create_realm_groups.yml +++ b/roles/keycloak/tasks/_create_realm_groups.yml @@ -1,5 +1,4 @@ --- - - name: Read groups of realm {{ current_realm_name }} uri: url: "{{ keycloak_server_url }}/auth/admin/realms/{{ current_realm_name }}/groups" diff --git a/roles/keycloak/tasks/_create_realm_users.yml b/roles/keycloak/tasks/_create_realm_users.yml index c0420c9..83b471c 100644 --- a/roles/keycloak/tasks/_create_realm_users.yml +++ b/roles/keycloak/tasks/_create_realm_users.yml @@ -1,5 +1,4 @@ --- - - name: "Reading users of realm {{ current_realm_name }}" uri: url: "{{ keycloak_server_url }}/auth/admin/realms/{{ current_realm_name }}/users" diff --git a/roles/keycloak/tasks/configure_client.yml b/roles/keycloak/tasks/configure_client.yml deleted file mode 100644 index 2b5566a..0000000 --- a/roles/keycloak/tasks/configure_client.yml +++ /dev/null @@ -1,23 +0,0 @@ ---- - -- name: Print client {{ client_id }} for realm {{ realm_name }} - debug: - msg: "{{ lookup('template','keycloak-realm-create-client.json.j2') }}" - tags: - - always - when: - - debug - - realm_client_ids | selectattr('clientId', 'equalto', client_id) | list | length == 0 - -- name: Create client {{ client_id }} for realm {{ realm_name }} - uri: - url: "{{ keycloak_server_url }}/auth/admin/realms/{{ realm_name }}/clients" - method: POST - body_format: json - body: "{{ lookup('template','keycloak-realm-create-client.json.j2') }}" - headers: - Authorization: "Bearer {{ access_token }} " - status_code: [201] - when: realm_client_ids | selectattr('clientId', 'equalto', client_id) | list | length == 0 - tags: - - update_realms diff --git a/roles/keycloak/tasks/configure_realm.yml b/roles/keycloak/tasks/configure_realm.yml deleted file mode 100644 index 3dbab86..0000000 --- a/roles/keycloak/tasks/configure_realm.yml +++ /dev/null @@ -1,90 +0,0 @@ ---- - -- name: Read realms - uri: - url: "{{ keycloak_server_url }}/auth/admin/realms" - method: GET - headers: - Authorization: "Bearer {{ access_token }}" - status_code: [200] - register: realms - tags: - - update_realms - -- name: Save realms as variable (fact) - set_fact: - realms_json: "{{ realms.json }}" - tags: - - update_realms - -- name: Read realm ids - set_fact: - realm_ids: "{{ realms_json | json_query(jmesquery) }}" - vars: - jmesquery: '[*].id' - tags: - - update_realms - -- name: Create realm {{ current_realm_name }} - uri: - url: "{{ keycloak_server_url }}/auth/admin/realms" - method: POST - body_format: json - body: "{{ lookup('template','keycloak-realm-create.json.j2') }}" - headers: - Authorization: "Bearer {{ access_token }}" - status_code: [201] - when: current_realm_name not in realm_ids - tags: - - update_realms - -- name: Read clients from realm {{ current_realm_name }} - uri: - url: "{{ keycloak_server_url }}/auth/admin/realms/{{ current_realm_name }}/clients" - method: GET - headers: - Authorization: "Bearer {{ access_token }}" - status_code: [200] - register: realm_clients - tags: - - update_realms - -- name: Save clients from realm as variable (fact) - set_fact: - realm_clients_json: "{{ realm_clients.json }}" - tags: - - update_realms - -- name: Save client ids from realm {{ current_realm_name }} - set_fact: - realm_client_ids: "{{ realm_clients_json | json_query(jmesquery) }}" - vars: - jmesquery: '[*].{id: id, clientId: clientId}' - tags: - - update_realms - -- name: Print client ids - debug: - msg: "{{ realm_client_ids }}" - tags: - - always - when: - - debug - -- name: Create clients from realm {{ current_realm_name }} - include_tasks: configure_client.yml - vars: - realm_name: '{{ current_realm_name }}' - client_id: '{{ client.clientId }}' - client_name: '{{ client.name }}' - admin_url: '{{ client.admin_url }}' - root_url: '{{ client.root_url }}' - redirect_uris: '{{ client.redirect_uris }}' - secret: '{{ client.secret }}' - web_origins: '{{ client.web_origins }}' - access_token: '{{ keycloak_authentication.json.access_token }}' - with_items: "{{ current_realm_clients }}" - loop_control: - loop_var: client - tags: - - update_realms diff --git a/roles/keycloak/tasks/create_realm_users.yml b/roles/keycloak/tasks/create_realm_users.yml deleted file mode 100644 index 9161e17..0000000 --- a/roles/keycloak/tasks/create_realm_users.yml +++ /dev/null @@ -1,63 +0,0 @@ ---- - -- name: Read users of realm {{ current_realm_name }} - uri: - url: "{{ keycloak_server_url }}/auth/admin/realms/{{ current_realm_name }}/users" - method: GET - headers: - Authorization: "Bearer {{ access_token }} " - status_code: [200] - register: realm_users - tags: - - create_users - - update_realms - -- name: Print realm users - debug: - msg: "{{ realm_users }}" - tags: - - always - when: - - debug - -- name: Save realm users as variable (fact) - set_fact: - realm_users_json: "{{ realm_users.json }}" - tags: - - create_users - - update_realms - -- name: Read realm user ids - set_fact: - realm_user_usernames: "{{ realm_users_json | json_query(jmesquery) }}" - vars: - jmesquery: '[*].username' - tags: - - create_users - - update_realms - -- name: Print realm usernames - debug: - msg: "{{ realm_user_usernames }}" - tags: - - always - when: - - debug - -- name: "Create users for realm {{ current_realm_name }}" - uri: - url: "{{ keycloak_server_url }}/auth/admin/realms/{{ current_realm_name }}/users" - method: POST - body_format: json - body: "{{ lookup('template','keycloak-realm-create-user.json.j2') }}" - headers: - Content-Type: "application/json" - Authorization: "Bearer {{ access_token }}" - status_code: [201] - with_items: "{{ current_realm_users }}" - when: current_realm_user.username not in realm_user_usernames - loop_control: - loop_var: current_realm_user - tags: - - create_users - - update_realms diff --git a/roles/keycloak/tasks/main.yml b/roles/keycloak/tasks/main.yml index 4e1b664..9201285 100644 --- a/roles/keycloak/tasks/main.yml +++ b/roles/keycloak/tasks/main.yml @@ -1,11 +1,8 @@ --- ### tags: -### create_users -### create_groups -### update_realms ### update_deployment -### configure_container +### update_realms - name: "Setup DNS configuration for {{ inventory_hostname }}" include_role: @@ -82,8 +79,6 @@ delay: 5 register: keycloak_authentication tags: - - create_users - - create_groups - update_realms - name: "Printing master realm access_token" @@ -127,38 +122,3 @@ state: present tags: - update_realms - -- name: "Setup realms" - include_tasks: configure_realm.yml - vars: - current_realm_name: '{{ current_realm.name }}' - current_realm_display_name: '{{ current_realm.display_name }}' - current_realm_clients: '{{ current_realm.clients | default([]) }}' - access_token: "{{ keycloak_authentication.json.access_token }}" - with_items: "{{ keycloak.realms }}" - loop_control: - loop_var: current_realm - tags: - - update_realms - -- name: "Create realm users" - include_tasks: create_realm_users.yml - vars: - current_realm_name: "{{ item.name }}" - current_realm_users: "{{ item.users | default([]) }}" - access_token: "{{ keycloak_authentication.json.access_token }}" - with_items: "{{ keycloak.realms }}" - tags: - - create_users - - update_realms - -- name: "Create realm groups" - include_tasks: create_realm_groups.yml - vars: - current_realm_name: "{{ item.name }}" - current_realm_groups: "{{ item.groups | default([]) }}" - access_token: "{{ keycloak_authentication.json.access_token }}" - with_items: "{{ keycloak.realms }}" - tags: - - create_groups - - update_realms diff --git a/roles/keycloak/templates/keycloak-realm-create-client.json.j2 b/roles/keycloak/templates/keycloak-realm-create-client.json.j2 deleted file mode 100644 index a3e7803..0000000 --- a/roles/keycloak/templates/keycloak-realm-create-client.json.j2 +++ /dev/null @@ -1,76 +0,0 @@ -{ - "adminUrl": "{{ admin_url }}", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "authorizationServicesEnabled": true, - "bearerOnly": false, - "clientAuthenticatorType": "client-secret", - "clientId": "{{ client_id }}", - "consentRequired": false, - "defaultClientScopes": [ - "role_list", - "profile", - "roles", - "email" - ], - "directAccessGrantsEnabled": true, - "enabled": true, - "frontchannelLogout": false, - "fullScopeAllowed": true, - "implicitFlowEnabled": false, - "name": "{{ client_name }}", - "nodeReRegistrationTimeout": -1, - "notBefore": 0, - "optionalClientScopes": [], - "protocol" : "{{ protocol | default('openid-connect') }}", - "protocolMappers": [ - { - "name": "username", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "user.attribute": "username", - "claim.name": "sub", - "id.token.claim": "true", - "access.token.claim": "true", - "userinfo.token.claim": "true" - } - }, - { - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-group-membership-mapper", - "consentRequired": false, - "config": { - "full.path": "false", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "userinfo.token.claim": "true" - } - } - ], - "publicClient": false, - "redirectUris": {{ redirect_uris }}, - "rootUrl": "{{ root_url }}", - "secret": "{{ secret }}", - "serviceAccountsEnabled": true, - "standardFlowEnabled": true, - "surrogateAuthRequired": false, - "webOrigins": {{ web_origins }} -} \ No newline at end of file diff --git a/roles/keycloak/templates/keycloak-realm-create-user.json.j2 b/roles/keycloak/templates/keycloak-realm-create-user.json.j2 index 8f5dc11..91d2767 100644 --- a/roles/keycloak/templates/keycloak-realm-create-user.json.j2 +++ b/roles/keycloak/templates/keycloak-realm-create-user.json.j2 @@ -4,11 +4,7 @@ "lastName": "{{ current_realm_user.lastName | default('') }}", "email": "{{ current_realm_user.email | default('') }}", "enabled": true, - "requiredActions": [ - "UPDATE_PASSWORD", - "UPDATE_PROFILE", - "VERIFY_EMAIL" - ], + "requiredActions": {{ current_realm_user.requiredActions | default(["UPDATE_PASSWORD","UPDATE_PROFILE","VERIFY_EMAIL"]) }}, "credentials" : [{ "type": "password", "value": "{{ current_realm_user.password }}", diff --git a/roles/keycloak/templates/keycloak-realm-create.json.j2 b/roles/keycloak/templates/keycloak-realm-create.json.j2 deleted file mode 100644 index 38ec367..0000000 --- a/roles/keycloak/templates/keycloak-realm-create.json.j2 +++ /dev/null @@ -1,135 +0,0 @@ -{ - "id": "{{ current_realm_name }}", - "realm": "{{ current_realm_name }}", - "displayName": "{{ current_realm_display_name }}", - "displayNameHtml": "", - "notBefore": 0, - "revokeRefreshToken": false, - "refreshTokenMaxReuse": 0, - "accessTokenLifespan": 60, - "accessTokenLifespanForImplicitFlow": 900, - "ssoSessionIdleTimeout": 1800, - "ssoSessionMaxLifespan": 36000, - "ssoSessionIdleTimeoutRememberMe": 0, - "ssoSessionMaxLifespanRememberMe": 0, - "offlineSessionIdleTimeout": 2592000, - "offlineSessionMaxLifespanEnabled": false, - "offlineSessionMaxLifespan": 5184000, - "clientSessionIdleTimeout": 0, - "clientSessionMaxLifespan": 0, - "clientOfflineSessionIdleTimeout": 0, - "clientOfflineSessionMaxLifespan": 0, - "accessCodeLifespan": 60, - "accessCodeLifespanUserAction": 300, - "accessCodeLifespanLogin": 1800, - "actionTokenGeneratedByAdminLifespan": 43200, - "actionTokenGeneratedByUserLifespan": 300, - "enabled": true, - "sslRequired": "none", - "registrationAllowed": true, - "registrationEmailAsUsername": false, - "rememberMe": true, - "verifyEmail": true, - "loginWithEmailAllowed": false, - "duplicateEmailsAllowed": true, - "resetPasswordAllowed": true, - "editUsernameAllowed": false, - "bruteForceProtected": false, - "permanentLockout": false, - "maxFailureWaitSeconds": 900, - "minimumQuickLoginWaitSeconds": 60, - "waitIncrementSeconds": 60, - "quickLoginCheckMilliSeconds": 1000, - "maxDeltaTimeSeconds": 43200, - "failureFactor": 30, - "defaultRoles": [ - "offline_access", - "uma_authorization" - ], - "requiredCredentials": [ - "password" - ], - "otpPolicyType": "totp", - "otpPolicyAlgorithm": "HmacSHA1", - "otpPolicyInitialCounter": 0, - "otpPolicyDigits": 6, - "otpPolicyLookAheadWindow": 1, - "otpPolicyPeriod": 30, - "otpSupportedApplications": [ - "FreeOTP", - "Google Authenticator" - ], - "webAuthnPolicyRpEntityName": "keycloak", - "webAuthnPolicySignatureAlgorithms": [ - "ES256" - ], - "webAuthnPolicyRpId": "", - "webAuthnPolicyAttestationConveyancePreference": "not specified", - "webAuthnPolicyAuthenticatorAttachment": "not specified", - "webAuthnPolicyRequireResidentKey": "not specified", - "webAuthnPolicyUserVerificationRequirement": "not specified", - "webAuthnPolicyCreateTimeout": 0, - "webAuthnPolicyAvoidSameAuthenticatorRegister": false, - "webAuthnPolicyAcceptableAaguids": [ - ], - "webAuthnPolicyPasswordlessRpEntityName": "keycloak", - "webAuthnPolicyPasswordlessSignatureAlgorithms": [ - "ES256" - ], - "webAuthnPolicyPasswordlessRpId": "", - "webAuthnPolicyPasswordlessAttestationConveyancePreference": "not specified", - "webAuthnPolicyPasswordlessAuthenticatorAttachment": "not specified", - "webAuthnPolicyPasswordlessRequireResidentKey": "not specified", - "webAuthnPolicyPasswordlessUserVerificationRequirement": "not specified", - "webAuthnPolicyPasswordlessCreateTimeout": 0, - "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister": false, - "webAuthnPolicyPasswordlessAcceptableAaguids": [ - ], - "browserSecurityHeaders": { - "contentSecurityPolicyReportOnly": "", - "xContentTypeOptions": "nosniff", - "xRobotsTag": "none", - "xFrameOptions": "SAMEORIGIN", - "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "xXSSProtection": "1; mode=block", - "strictTransportSecurity": "max-age=31536000; includeSubDomains" - }, - "smtpServer": { - "host": "{{ shared_service_mail_hostname }}", - "from": "{{ current_realm_name }}.{{ inventory_hostname }}@{{ domain }}" - }, - "loginTheme": "smardigo-theme", - "accountTheme": "smardigo-theme", - "adminTheme": "smardigo-theme", - "eventsEnabled": false, - "eventsListeners": [ - "jboss-logging" - ], - "enabledEventTypes": [ - ], - "adminEventsEnabled": false, - "adminEventsDetailsEnabled": false, - "identityProviders": [ - ], - "identityProviderMappers": [ - ], - "internationalizationEnabled": true, - "supportedLocales": [ - "de", - "en" - ], - "defaultLocale": "de", - "browserFlow": "browser", - "registrationFlow": "registration", - "directGrantFlow": "direct grant", - "resetCredentialsFlow": "reset credentials", - "clientAuthenticationFlow": "clients", - "dockerAuthenticationFlow": "docker auth", - "attributes": { - "clientOfflineSessionMaxLifespan": "0", - "clientSessionIdleTimeout": "0", - "clientSessionMaxLifespan": "0", - "clientOfflineSessionIdleTimeout": "0" - }, - "userManagedAccessAllowed": false -} diff --git a/roles/kubernetes/apps/tasks/argocd.yml b/roles/kubernetes/apps/tasks/argocd.yml index 73b5f8b..8ddceee 100644 --- a/roles/kubernetes/apps/tasks/argocd.yml +++ b/roles/kubernetes/apps/tasks/argocd.yml @@ -1,10 +1,4 @@ --- -# I tried to create a realm via community.general.keycloak_realm -# but every request failed with HTTP 500 -# but creating a group via community.general.keycloak_group -# was successfully -# ¯\_(ツ)_/¯ -# - name: "Login with keycloak-admin" include_role: name: keycloak @@ -22,17 +16,14 @@ - inventory_hostname == groups['kube_control_plane'][0] - name: "Create a Keycloak group, authentication with credentials" - delegate_to: localhost - become: False - community.general.keycloak_group: - auth_keycloak_url: "{{ keycloak_server_url }}/auth" - auth_client_id: admin-cli - auth_realm: 'master' - auth_username: "{{ keycloak_admin_username }}" - auth_password: "{{ keycloak_admin_password }}" - name: '{{ argo_realm_group }}' - realm: '{{ argo_realm_name }}' - state: present + include_role: + name: keycloak + tasks_from: _create_realm_groups + vars: + current_realm_name: '{{ argo_realm_name }}' + current_realm_display_name: '{{ argo_realm_display_name }}' + current_realm_groups: + - name: "{{ argo_realm_group }}" when: - inventory_hostname == groups['kube_control_plane'][0] @@ -157,6 +148,13 @@ - debug - inventory_hostname == groups['kube_control_plane'][0] +- name: "Create namespace <{{ k8s_argocd_helm__release_namespace }}>" + kubernetes.core.k8s: + name: "{{ k8s_argocd_helm__release_namespace }}" + api_version: v1 + kind: Namespace + state: present + - name: "Create a k8s Secret containing GPG key" kubernetes.core.k8s: state: present @@ -196,8 +194,8 @@ - name: Deploy argo-cd inside argo-cd namespace kubernetes.core.helm: name: "{{ k8s_argocd_helm__name }}" - chart_repo_url: "{{ k8s_argocd_helm__chart_repo_url | default('https://argoproj.github.io/argo-helm') }}" chart_ref: "{{ k8s_argocd_helm__chart_ref | default('argo-cd') }}" + chart_repo_url: "{{ k8s_argocd_helm__chart_repo_url | default('https://argoproj.github.io/argo-helm') }}" release_namespace: "{{ k8s_argocd_helm__release_namespace }}" create_namespace: yes release_values: "{{ combined_helm__release_values }}" diff --git a/roles/kubernetes/cert-manager/defaults/main.yml b/roles/kubernetes/cert-manager/defaults/main.yml index 5eb814b..c5478ef 100644 --- a/roles/kubernetes/cert-manager/defaults/main.yml +++ b/roles/kubernetes/cert-manager/defaults/main.yml @@ -4,7 +4,6 @@ k8s_prometheus_helm__name: "prometheus" k8s_certmanager_helm__chart_ref: cert-manager k8s_certmanager_helm__chart_repo_url: https://charts.jetstack.io -k8s_certmanager_helm__chart_version: v1.5.4 k8s_certmanager_helm__release_namespace: cert-manager k8s_certmanager_helm__release_values: diff --git a/roles/kubernetes/cert-manager/tasks/main.yml b/roles/kubernetes/cert-manager/tasks/main.yml index 94c2dd8..d8edce8 100644 --- a/roles/kubernetes/cert-manager/tasks/main.yml +++ b/roles/kubernetes/cert-manager/tasks/main.yml @@ -8,7 +8,6 @@ name: cert-manager chart_ref: "{{ k8s_certmanager_helm__chart_ref }}" chart_repo_url: "{{ k8s_certmanager_helm__chart_repo_url }}" - chart_version: "{{ k8s_certmanager_helm__chart_version }}" release_namespace: "{{ k8s_certmanager_helm__release_namespace }}" create_namespace: yes release_values: "{{ k8s_certmanager_helm__release_values }}" diff --git a/roles/kubernetes/container-storage-interface/defaults/main.yml b/roles/kubernetes/container-storage-interface/defaults/main.yml index fb25202..75952a5 100644 --- a/roles/kubernetes/container-storage-interface/defaults/main.yml +++ b/roles/kubernetes/container-storage-interface/defaults/main.yml @@ -1,3 +1,3 @@ --- -k8s_csi__template: "hcloud-csi.v1.5.1.yaml.j2" +k8s_csi__template: "hcloud-csi.v1.6.0.yaml.j2" diff --git a/roles/kubernetes/container-storage-interface/templates/hcloud-csi.v1.5.1.yaml.j2 b/roles/kubernetes/container-storage-interface/templates/hcloud-csi.v1.6.0.yaml.j2 similarity index 83% rename from roles/kubernetes/container-storage-interface/templates/hcloud-csi.v1.5.1.yaml.j2 rename to roles/kubernetes/container-storage-interface/templates/hcloud-csi.v1.6.0.yaml.j2 index 0193768..a8a8449 100644 --- a/roles/kubernetes/container-storage-interface/templates/hcloud-csi.v1.5.1.yaml.j2 +++ b/roles/kubernetes/container-storage-interface/templates/hcloud-csi.v1.6.0.yaml.j2 @@ -1,5 +1,5 @@ --- -apiVersion: storage.k8s.io/v1beta1 +apiVersion: storage.k8s.io/v1 kind: CSIDriver metadata: name: csi.hetzner.cloud @@ -47,6 +47,9 @@ rules: - apiGroups: ["storage.k8s.io"] resources: ["volumeattachments"] verbs: ["get", "list", "watch", "update", "patch"] + - apiGroups: ["storage.k8s.io"] + resources: ["volumeattachments/status"] + verbs: ["patch"] # provisioner - apiGroups: [""] resources: ["secrets"] @@ -69,6 +72,10 @@ rules: - apiGroups: ["snapshot.storage.k8s.io"] resources: ["volumesnapshotcontents"] verbs: ["get", "list"] + # resizer + - apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list", "watch"] # node - apiGroups: [""] resources: ["events"] @@ -106,54 +113,48 @@ spec: serviceAccount: hcloud-csi containers: - name: csi-attacher - image: quay.io/k8scsi/csi-attacher:v2.2.0 - args: - - --csi-address=/var/lib/csi/sockets/pluginproxy/csi.sock - - --v=5 + image: k8s.gcr.io/sig-storage/csi-attacher:v3.2.1 volumeMounts: - name: socket-dir - mountPath: /var/lib/csi/sockets/pluginproxy/ + mountPath: /run/csi securityContext: privileged: true capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true - name: csi-resizer - image: quay.io/k8scsi/csi-resizer:v0.3.0 - args: - - --csi-address=/var/lib/csi/sockets/pluginproxy/csi.sock - - --v=5 + image: k8s.gcr.io/sig-storage/csi-resizer:v1.2.0 volumeMounts: - name: socket-dir - mountPath: /var/lib/csi/sockets/pluginproxy/ + mountPath: /run/csi securityContext: privileged: true capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true - name: csi-provisioner - image: quay.io/k8scsi/csi-provisioner:v1.6.0 + image: k8s.gcr.io/sig-storage/csi-provisioner:v2.2.2 args: - - --provisioner=csi.hetzner.cloud - - --csi-address=/var/lib/csi/sockets/pluginproxy/csi.sock - --feature-gates=Topology=true - - --v=5 + - --default-fstype=ext4 volumeMounts: - name: socket-dir - mountPath: /var/lib/csi/sockets/pluginproxy/ + mountPath: /run/csi securityContext: privileged: true capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true - name: hcloud-csi-driver - image: hetznercloud/hcloud-csi-driver:1.5.1 + image: hetznercloud/hcloud-csi-driver:1.6.0 imagePullPolicy: Always env: - name: CSI_ENDPOINT - value: unix:///var/lib/csi/sockets/pluginproxy/csi.sock + value: unix:///run/csi/socket - name: METRICS_ENDPOINT value: 0.0.0.0:9189 + - name: ENABLE_METRICS + value: "true" - name: KUBE_NODE_NAME valueFrom: fieldRef: @@ -166,7 +167,7 @@ spec: key: token volumeMounts: - name: socket-dir - mountPath: /var/lib/csi/sockets/pluginproxy/ + mountPath: /run/csi ports: - containerPort: 9189 name: metrics @@ -188,11 +189,9 @@ spec: allowPrivilegeEscalation: true - name: liveness-probe imagePullPolicy: Always - image: quay.io/k8scsi/livenessprobe:v1.1.0 - args: - - --csi-address=/var/lib/csi/sockets/pluginproxy/csi.sock + image: k8s.gcr.io/sig-storage/livenessprobe:v2.3.0 volumeMounts: - - mountPath: /var/lib/csi/sockets/pluginproxy/ + - mountPath: /run/csi name: socket-dir volumes: - name: socket-dir @@ -221,14 +220,21 @@ spec: operator: Exists - key: CriticalAddonsOnly operator: Exists + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: "instance.hetzner.cloud/is-root-server" + operator: NotIn + values: + - "true" serviceAccount: hcloud-csi containers: - name: csi-node-driver-registrar - image: quay.io/k8scsi/csi-node-driver-registrar:v1.3.0 + image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.2.0 args: - - --v=5 - - --csi-address=/csi/csi.sock - - --kubelet-registration-path=/var/lib/kubelet/plugins/csi.hetzner.cloud/csi.sock + - --kubelet-registration-path=/var/lib/kubelet/plugins/csi.hetzner.cloud/socket env: - name: KUBE_NODE_NAME valueFrom: @@ -237,19 +243,21 @@ spec: fieldPath: spec.nodeName volumeMounts: - name: plugin-dir - mountPath: /csi + mountPath: /run/csi - name: registration-dir mountPath: /registration securityContext: privileged: true - name: hcloud-csi-driver - image: hetznercloud/hcloud-csi-driver:1.5.1 + image: hetznercloud/hcloud-csi-driver:1.6.0 imagePullPolicy: Always env: - name: CSI_ENDPOINT - value: unix:///csi/csi.sock + value: unix:///run/csi/socket - name: METRICS_ENDPOINT value: 0.0.0.0:9189 + - name: ENABLE_METRICS + value: "true" - name: HCLOUD_TOKEN valueFrom: secretKeyRef: @@ -265,7 +273,7 @@ spec: mountPath: /var/lib/kubelet mountPropagation: "Bidirectional" - name: plugin-dir - mountPath: /csi + mountPath: /run/csi - name: device-dir mountPath: /dev securityContext: @@ -286,11 +294,9 @@ spec: periodSeconds: 2 - name: liveness-probe imagePullPolicy: Always - image: quay.io/k8scsi/livenessprobe:v1.1.0 - args: - - --csi-address=/csi/csi.sock + image: k8s.gcr.io/sig-storage/livenessprobe:v2.3.0 volumeMounts: - - mountPath: /csi + - mountPath: /run/csi name: plugin-dir volumes: - name: kubelet-dir @@ -324,6 +330,7 @@ spec: - port: 9189 name: metrics targetPort: metrics + --- apiVersion: v1 kind: Service diff --git a/roles/kubernetes/external-dns/defaults/main.yml b/roles/kubernetes/external-dns/defaults/main.yml index cbb63a9..f9fafc5 100644 --- a/roles/kubernetes/external-dns/defaults/main.yml +++ b/roles/kubernetes/external-dns/defaults/main.yml @@ -4,7 +4,6 @@ k8s_prometheus_helm__name: "prometheus" k8s_externaldns_helm__chart_ref: external-dns k8s_externaldns_helm__chart_repo_url: https://kubernetes-sigs.github.io/external-dns/ -k8s_externaldns_helm__chart_version: v1.6.0 k8s_externaldns_helm__release_namespace: external-dns k8s_externaldns_helm__release_values: diff --git a/roles/kubernetes/external-dns/tasks/main.yml b/roles/kubernetes/external-dns/tasks/main.yml index cce6c83..0b472a3 100644 --- a/roles/kubernetes/external-dns/tasks/main.yml +++ b/roles/kubernetes/external-dns/tasks/main.yml @@ -8,7 +8,6 @@ name: external-dns chart_ref: "{{ k8s_externaldns_helm__chart_ref }}" chart_repo_url: "{{ k8s_externaldns_helm__chart_repo_url }}" - chart_version: "{{ k8s_externaldns_helm__chart_version }}" release_namespace: "{{ k8s_externaldns_helm__release_namespace }}" create_namespace: yes release_values: "{{ k8s_externaldns_helm__release_values }}" diff --git a/roles/kubernetes/ingress-controller/tasks/main.yml b/roles/kubernetes/ingress-controller/tasks/main.yml index a8471f2..0731a1e 100644 --- a/roles/kubernetes/ingress-controller/tasks/main.yml +++ b/roles/kubernetes/ingress-controller/tasks/main.yml @@ -8,7 +8,6 @@ name: ingress chart_repo_url: "{{ k8s_ingress_helm__chart_repo_url | default('https://kubernetes.github.io/ingress-nginx') }}" chart_ref: "{{ k8s_ingress_helm__chart_ref | default('ingress-nginx') }}" - chart_version: "{{ k8s_ingress_helm__chart_version | default('4.0.6') }}" release_namespace: "{{ k8s_ingress_helm__release_namespace }}" create_namespace: yes release_values: "{{ k8s_ingress_helm__release_values }}" diff --git a/roles/workflow_proxy_realm/defaults/main.yml b/roles/workflow_proxy_realm/defaults/main.yml index a1c7ed8..4b4ea52 100644 --- a/roles/workflow_proxy_realm/defaults/main.yml +++ b/roles/workflow_proxy_realm/defaults/main.yml @@ -30,9 +30,6 @@ current_realm_users: [ "password": "{{ connect_client_admin_password }}", } ] -current_realm_admin_users: [ - { - "username": "{{ connect_realm_admin_username }}", - "password": "{{ connect_realm_admin_password }}", - } -] +current_realm_admin_user: + username: "{{ connect_realm_admin_username }}" + password: "{{ connect_realm_admin_password }}" diff --git a/setup.yml b/setup.yml index f5fe63b..52d3542 100644 --- a/setup.yml +++ b/setup.yml @@ -49,7 +49,8 @@ - install - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false tags: - always diff --git a/smardigo.yml b/smardigo.yml index 1452ad8..1dacbe4 100644 --- a/smardigo.yml +++ b/smardigo.yml @@ -18,7 +18,8 @@ become: false - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false tags: - always diff --git a/stage-dev b/stage-dev index 6b15323..d94e000 100644 --- a/stage-dev +++ b/stage-dev @@ -20,7 +20,7 @@ dev-harbor-01 [iam] dev-iam-01 -dev-iam-02 # sensw / workflow cats +dev-iam-02 # sensw/workflow cats [keycloak] dev-keycloak-01 @@ -51,10 +51,10 @@ dev-postgres-02 dev-prometheus-01 [redis] -dev-redis-01 +#dev-redis-01 [webdav] -dev-webdav-01 +#dev-webdav-01 [kube_control_plane] dev-kube-master-01 diff --git a/stage-prodnso b/stage-prodnso index 3ea0ca6..d4051dc 100644 --- a/stage-prodnso +++ b/stage-prodnso @@ -4,11 +4,17 @@ prodnso-awx-01 [connect] prodnso-management-01 +[pdns] +#prodnso-pdns-01 + [elastic] prodnso-elastic-stack-elastic-01 prodnso-elastic-stack-elastic-02 prodnso-elastic-stack-elastic-03 +[gitea] +#prodnso-gitea-01 + [harbor] prodnso-harbor-01 @@ -43,12 +49,40 @@ prodnso-postgres-02 [prometheus] prodnso-prometheus-01 +[redis] +#prodnso-redis-01 + +[webdav] +#prodnso-webdav-01 + +[kube_control_plane] +#prodnso-kube-master-01 +#prodnso-kube-master-02 +#prodnso-kube-master-03 + +[etcd] +#prodnso-kube-master-01 +#prodnso-kube-master-02 +#prodnso-kube-master-03 + +[kube_node] +#prodnso-kube-node-01 +#prodnso-kube-node-02 +#prodnso-kube-node-03 + +[k8s_cluster:children] +kube_control_plane +kube_node + [stage_prodnso:children] awx connect elastic +pdns +gitea harbor iam +k8s_cluster keycloak kibana logstash @@ -58,6 +92,8 @@ pgadmin4 postfix postgres prometheus +redis +webdav [all:children] stage_prodnso diff --git a/stage-qa b/stage-qa index 3cd85b8..57c43a8 100644 --- a/stage-qa +++ b/stage-qa @@ -50,10 +50,10 @@ qa-postgres-02 qa-prometheus-01 [redis] -qa-redis-01 +#qa-redis-01 [webdav] -qa-webdav-01 +#qa-webdav-01 [kube_control_plane] qa-kube-master-01 diff --git a/stage-qa-netgo-hcloud.yml b/stage-qa-netgo-hcloud.yml index 64168db..584cbe2 100644 --- a/stage-qa-netgo-hcloud.yml +++ b/stage-qa-netgo-hcloud.yml @@ -15,11 +15,11 @@ label_selector: "stage=qa" api_token: !vault | $ANSIBLE_VAULT;1.1;AES256 - 36326436363431623035633730393332623665663439613835373436636637393838333865646564 - 6461343366393765383332323662326339623836336566660a666462633333613236663362643835 - 39313166323139616162353366303839346664386237306562306363333731626338316134396561 - 3435316335343534620a396432353430396138343933663866613730333564646639323935366134 - 37653935313437313263366462643033316662363366353866663664633835376661623737336363 - 32393431666138303538356138663163303965623339343063353234643664363933663330356237 - 32386139363033656538646236323237333631626161383966663839303666373266633039363337 - 64313830353765633865 + 38623731356563643239636338623835356561616237386164396637313063386366323734383163 + 3661333761616165636238316165633934313835643063650a326434656336333165366464383237 + 32306538643733643635346132306630393562643632356135353937396566636563613963323137 + 6564626233323139330a396661656364653562666461316666616531336631363965636130313232 + 32366263623739313538323336613434653338396236303439663432363735623362396161666536 + 30323735326133626633646333366166613238303465313833396137313839623561313632346366 + 30616636613964643832383534323561633761653839643637373331363239353363346462643632 + 35346162656666366438 diff --git a/tasks/autodiscover_pre_tasks.yml b/tasks/autodiscover_pre_tasks.yml index 1134155..ab5233d 100644 --- a/tasks/autodiscover_pre_tasks.yml +++ b/tasks/autodiscover_pre_tasks.yml @@ -8,21 +8,18 @@ authorization: Bearer {{ hetzner_authentication_ansible }} register: hetzner_servers_result delegate_to: 127.0.0.1 - become: false tags: - always - name: "Setting hetzner server pagination count: <{{ hetzner_servers_result.json.meta.pagination.last_page }}>" set_fact: total_server_pages: "{{ hetzner_servers_result.json.meta.pagination.last_page }}" - become: false tags: - always - name: "Reading hetzner server infos for stage <{{ stage }}> without pagination" set_fact: hetzner_servers: "{{ hetzner_servers_result.json.servers }}" - become: false tags: - always when: @@ -39,7 +36,6 @@ register: hetzner_servers_results with_sequence: start=1 end={{ total_server_pages }} delegate_to: 127.0.0.1 - become: false - name: "Reading hetzner server infos for stage <{{ stage }}> with pagination" set_fact: @@ -48,7 +44,6 @@ querystr1: "[[*].json.servers]" querystr2: "[]" delegate_to: 127.0.0.1 - become: false when: - total_server_pages != '1' tags: @@ -58,7 +53,6 @@ debug: msg: "{{ hetzner_servers }}" delegate_to: 127.0.0.1 - become: false tags: - always when: @@ -72,7 +66,6 @@ authorization: Bearer {{ hetzner_authentication_ansible }} register: hetzner_networks delegate_to: 127.0.0.1 - become: false tags: - always @@ -80,7 +73,6 @@ debug: msg: "{{ hetzner_networks.json.networks }}" delegate_to: 127.0.0.1 - become: false tags: - always when: @@ -90,7 +82,6 @@ set_fact: stage_private_network_id: "{{ hetzner_networks.json.networks | map(attribute='id') | first }}" delegate_to: 127.0.0.1 - become: false tags: - always @@ -98,7 +89,6 @@ debug: msg: "{{ stage_private_network_id }}" delegate_to: 127.0.0.1 - become: false tags: - always when: @@ -117,7 +107,6 @@ {% endfor %}\ {{ list|list }}" delegate_to: 127.0.0.1 - become: false tags: - always @@ -125,7 +114,6 @@ debug: msg: "{{ stage_server_infos }}" delegate_to: 127.0.0.1 - become: false tags: - always when: @@ -143,7 +131,6 @@ {% endif %}\ {% endfor %}" delegate_to: 127.0.0.1 - become: false tags: - always @@ -153,7 +140,6 @@ vars: querystr: "[?name=='{{ inventory_hostname }}'].public_net.ipv4.ip" delegate_to: 127.0.0.1 - become: false tags: - always @@ -161,7 +147,6 @@ debug: msg: "{{ stage_server_ip }} / {{ stage_private_server_ip }}" delegate_to: 127.0.0.1 - become: false tags: - always # when: @@ -171,7 +156,6 @@ debug: msg: "{{ group_names }}" delegate_to: 127.0.0.1 - become: false tags: - always # when: diff --git a/update-monitoring.yml b/update-monitoring.yml index a6fa79d..a3dfaab 100644 --- a/update-monitoring.yml +++ b/update-monitoring.yml @@ -45,7 +45,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always tasks: - name: "Add all servers for stage {{ stage }} to inventory" diff --git a/update-service-state.yml b/update-service-state.yml index ad215b0..49a07f3 100644 --- a/update-service-state.yml +++ b/update-service-state.yml @@ -57,7 +57,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always roles: - role: service_state diff --git a/upload-database-dumb.yml b/upload-database-dumb.yml index 01f484a..4b1c54b 100644 --- a/upload-database-dumb.yml +++ b/upload-database-dumb.yml @@ -53,7 +53,10 @@ pre_tasks: - name: "Import autodiscover pre-tasks" - include_tasks: tasks/autodiscover_pre_tasks.yml + import_tasks: tasks/autodiscover_pre_tasks.yml + become: false + tags: + - always roles: - role: upload_local_file diff --git a/users/friedrich.goerz/ssh.pub b/users/friedrich.goerz/ssh.pub index 70139a1..dffa95e 100644 --- a/users/friedrich.goerz/ssh.pub +++ b/users/friedrich.goerz/ssh.pub @@ -1 +1 @@ -ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFRlmqgkIJxBC45cbVX25P1Uam/+Ct7XFvgMm60TDOWkQiTuVp5vd1sHq2HCRRfGxPrsKmwSQS5wMYIjeiclTag= friedrich@friedrich-HP-ZBook +ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFRlmqgkIJxBC45cbVX25P1Uam/+Ct7XFvgMm60TDOWkQiTuVp5vd1sHq2HCRRfGxPrsKmwSQS5wMYIjeiclTag= friedrich.goerz@netgo.de