From d677a2be370eb667cadb961dcb2ce77f26e6a72e Mon Sep 17 00:00:00 2001 From: Daniel Lawton Date: Mon, 25 May 2026 09:58:38 +0100 Subject: [PATCH] Add EgressIP test role for shiftstack-qa Port EgressIP testing from Jenkins/infrared to shiftstack-qa. - Creates egressip_tests role that runs openshift-tests-private suite - Dynamically detects OCP version (4.12-4.22) and network backend (OpenShiftSDN/OVNKubernetes/Kuryr) - Filters tests using per-version, per-backend allowlist - Integrated into osp_verification.yaml for OSP candidate release validation Allowlist ported from rhos-infrared egressip-whitelist.yaml covering: - 4.12-4.14: OpenShiftSDN, OVNKubernetes, Kuryr support - 4.15+: OVNKubernetes only (SDN deprecated) Change-Id: I222491ea7ed254e12ea5935564c1ce026d9bc105 Signed-off-by: Daniel Lawton --- .../roles/egressip_tests/defaults/main.yml | 8 + .../files/egressip-allowlist.yaml | 149 +++++ .../stages/roles/egressip_tests/meta/main.yml | 3 + .../roles/egressip_tests/tasks/main.yml | 25 + .../tasks/prepare_private_tests.yml | 33 ++ .../tasks/run_egressip_tests.yml | 97 ++++ configs/secret.yaml | 536 +++++++++--------- jobs_definitions/osp_verification.yaml | 1 + playbooks/ocp_testing.yaml | 4 + playbooks/plays/egressip_tests.yaml | 17 + 10 files changed, 617 insertions(+), 256 deletions(-) create mode 100644 collection/stages/roles/egressip_tests/defaults/main.yml create mode 100644 collection/stages/roles/egressip_tests/files/egressip-allowlist.yaml create mode 100644 collection/stages/roles/egressip_tests/meta/main.yml create mode 100644 collection/stages/roles/egressip_tests/tasks/main.yml create mode 100644 collection/stages/roles/egressip_tests/tasks/prepare_private_tests.yml create mode 100644 collection/stages/roles/egressip_tests/tasks/run_egressip_tests.yml create mode 100644 playbooks/plays/egressip_tests.yaml diff --git a/collection/stages/roles/egressip_tests/defaults/main.yml b/collection/stages/roles/egressip_tests/defaults/main.yml new file mode 100644 index 00000000..90f57f4b --- /dev/null +++ b/collection/stages/roles/egressip_tests/defaults/main.yml @@ -0,0 +1,8 @@ +--- +# defaults file for egressip_tests +egressip_test_name: "openshift-tests-private" +egressip_test_dir: "{{ artifacts_dir }}/{{ egressip_test_name }}" +egressip_test_executable: "{{ egressip_test_dir }}/bin/extended-platform-tests" +egressip_test_results_dir: "{{ artifacts_dir }}/egressip_tests" +egressip_allowlist_file: "{{ role_path }}/files/egressip-allowlist.yaml" +egressip_tests_go_version: "{{ tests.default_go_version_target }}" diff --git a/collection/stages/roles/egressip_tests/files/egressip-allowlist.yaml b/collection/stages/roles/egressip_tests/files/egressip-allowlist.yaml new file mode 100644 index 00000000..aee6800d --- /dev/null +++ b/collection/stages/roles/egressip_tests/files/egressip-allowlist.yaml @@ -0,0 +1,149 @@ +--- +all_allow_list: &all_allow_list + {} + +sdn_list: &sdn_tests + <<: *all_allow_list + ".*Author:jechen-High-46555-Medium-46962-[Automatic EgressIP] Random egressIP is used on a pod that is not on a node hosting an egressIP, and random outages with egressIP . [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-46556-[Automatic EgressIP] A pod that is on a node hosting egressIP, it will always use the egressIP of the node . [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-46557-[Manual EgressIP] Random egressIP is used on a pod that is not on a node hosting an egressIP . [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-46558-[Manual EgressIP] A pod that is on a node hosting egressIP, it will always use the egressIP of the node . [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-47462-EgressNetworkPolicy should work well with egressIP [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-Medium-47461-Should not be able to access the node via the egressIP [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-46559-[Automatic EgressIP] If some egress node is unavailable, pods continue use other available egressIPs after a short delay. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-46561-[Manual EgressIP] If some egress node is unavailable, pods continue use other available egressIPs after a short delay. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-46701-High-47470-Pods will lose external access if same egressIP is assigned to different netnamespace, error should be logged on master node. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-46705-The egressIP should still work fine after the node or network service restarted. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-46960- EgressIP can failover if the node is NotReady. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-47455-The egressIP could be assigned to project automatically once it is defined in hostsubnet egressCIDR. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-47464-The egressIP will be unavailable if it is set to multiple hostsubnets. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-47468-High-47469-Pod access external through egressIP if egress node hosts the egressIP that assigned to netns, or it lose access to external if no node hosts the egressIP that assigned to netns. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-47054-The egressIP can be HA if netnamespace has single egressIP . [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-47456-High-47457-Can change egressIP of project when there are multiple egressIP, can access outside with nodeIP after egressIP is removed. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-47458-High-47459-EgressIP works when reusing the egressIP that was held by a deleted project, EgressIP works well after removed egressIP is added back. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + ".*Author:jechen-High-47463-Pod will not be affected by the egressIP set on other netnamespace. [.*": + description: "https://issues.redhat.com/browse/KURYRQE-1007" + +ovnk_list: &ovnk_tests + <<: *all_allow_list + ".*Author:huirwang.*47019.*EgressIP works well with networkpolicy and egressFirewall.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47018.*47017.*Multiple projects use same EgressIP.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47028.*After remove EgressIP node tag.*failover.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47030.*EgressIP object can not have multiple egress IP assignments on the same node.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47031.*After reboot egress node EgressIP still work.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47032.*47034.*Traffic is load balanced between egress nodes.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47164.*47025.*update egressip object.*pods removed matched labels.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47272.*Pods will not be affected by the egressIP set on other netnamespace.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*55632.*egress node shouldn't generate broadcast ARP for service IPs.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47029.*47024.*egress IP can only be assigned to one node only.*Warning event.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47163.*47026.*Deleting EgressIP object and recreating it works.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*47021.*lr-policy-list and snat should be updated correctly after remove pods.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*55030.*After reboot egress node.*lr-policy-list and snat should keep correct.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + ".*Author:huirwang.*53069.*EgressIP should work for recreated same name pod.*": + description: "https://issues.redhat.com/browse/KURYRQE-1016" + +########## +# This feature is supported since OpenShift 4.12 + +# OpenShift 4.12 +"4.12": + "OpenShiftSDN": + <<: *sdn_tests + + "OVNKubernetes": + <<: *ovnk_tests + + "Kuryr": + <<: *all_allow_list + +# OpenShift 4.13 +"4.13": + "OpenShiftSDN": + <<: *sdn_tests + + "OVNKubernetes": + <<: *ovnk_tests + + "Kuryr": + <<: *all_allow_list + +# OpenShift 4.14 +"4.14": + "OpenShiftSDN": + <<: *sdn_tests + + "OVNKubernetes": + <<: *ovnk_tests + + "Kuryr": + <<: *all_allow_list + +# OpenShift 4.15 +"4.15": + "OVNKubernetes": + <<: *ovnk_tests + +# OpenShift 4.16 +"4.16": + "OVNKubernetes": + <<: *ovnk_tests + +# OpenShift 4.17 +"4.17": + "OVNKubernetes": + <<: *ovnk_tests + +# OpenShift 4.18 +"4.18": + "OVNKubernetes": + <<: *ovnk_tests + +# OpenShift 4.19 +"4.19": + "OVNKubernetes": + <<: *ovnk_tests + +# OpenShift 4.20 +"4.20": + "OVNKubernetes": + <<: *ovnk_tests + +# OpenShift 4.21 +"4.21": + "OVNKubernetes": + <<: *ovnk_tests + +# OpenShift 4.22 +"4.22": + "OVNKubernetes": + <<: *ovnk_tests diff --git a/collection/stages/roles/egressip_tests/meta/main.yml b/collection/stages/roles/egressip_tests/meta/main.yml new file mode 100644 index 00000000..ce0638dc --- /dev/null +++ b/collection/stages/roles/egressip_tests/meta/main.yml @@ -0,0 +1,3 @@ +--- +collections: + - shiftstack.tools diff --git a/collection/stages/roles/egressip_tests/tasks/main.yml b/collection/stages/roles/egressip_tests/tasks/main.yml new file mode 100644 index 00000000..6eed752d --- /dev/null +++ b/collection/stages/roles/egressip_tests/tasks/main.yml @@ -0,0 +1,25 @@ +--- +# tasks file for egressip_tests +- name: Prepare EgressIP test + ansible.builtin.include_tasks: prepare_private_tests.yml + vars: + results_dir: "{{ egressip_test_results_dir }}" + go_version_target: "{{ egressip_tests_go_version }}" + +- name: Run egressip tests + ansible.builtin.include_tasks: run_egressip_tests.yml + +- name: Post EgressIP test + ansible.builtin.include_role: + name: tools_openshift_tests + tasks_from: post_openshift_tests.yml + vars: + testsuite_name: "egressip_tests" + key_for_filtering_results: "egressip" + test_name: "{{ egressip_test_name }}" + results_dir: "{{ egressip_test_results_dir }}" + +- name: Remove the source directory after tests complete + ansible.builtin.file: + path: "{{ egressip_test_dir }}" + state: absent diff --git a/collection/stages/roles/egressip_tests/tasks/prepare_private_tests.yml b/collection/stages/roles/egressip_tests/tasks/prepare_private_tests.yml new file mode 100644 index 00000000..d9e19ead --- /dev/null +++ b/collection/stages/roles/egressip_tests/tasks/prepare_private_tests.yml @@ -0,0 +1,33 @@ +--- +- name: Create results directory + ansible.builtin.file: + path: "{{ results_dir }}" + state: directory + mode: '0755' + +- name: Write SSH deploy key temporarily + ansible.builtin.copy: + content: "{{ openshift_tests_private_ssh_key }}" + dest: "{{ ansible_env.HOME }}/.ssh/openshift_tests_private_deploy_key" + mode: '0600' + no_log: true + +- name: Clone openshift-tests-private via SSH + ansible.builtin.git: + repo: "git@github.com:openshift/openshift-tests-private.git" + version: "release-{{ discovered_openshift_release }}" + dest: "{{ egressip_test_dir }}" + key_file: "{{ ansible_env.HOME }}/.ssh/openshift_tests_private_deploy_key" + accept_hostkey: yes + +- name: Remove SSH deploy key + ansible.builtin.file: + path: "{{ ansible_env.HOME }}/.ssh/openshift_tests_private_deploy_key" + state: absent + +- name: Setup Go version + ansible.builtin.include_role: + name: shiftstack.tools.tools_openshift_tests + tasks_from: setup_go_version.yml + vars: + go_version_target: "{{ go_version_target }}" diff --git a/collection/stages/roles/egressip_tests/tasks/run_egressip_tests.yml b/collection/stages/roles/egressip_tests/tasks/run_egressip_tests.yml new file mode 100644 index 00000000..16e738af --- /dev/null +++ b/collection/stages/roles/egressip_tests/tasks/run_egressip_tests.yml @@ -0,0 +1,97 @@ +--- +- name: Load the full allowlist file + ansible.builtin.set_fact: + egressip_full_allowlist: "{{ lookup('file', egressip_allowlist_file) | from_yaml }}" + +- name: Detect network backend + ansible.builtin.shell: | + oc get network.config cluster -o jsonpath='{.status.networkType}' + environment: + KUBECONFIG: "{{ kubeconfig }}" + register: network_backend_result + changed_when: false + +- name: Set network backend fact + ansible.builtin.set_fact: + network_backend: "{{ network_backend_result.stdout }}" + +- name: Extract allowlist for current version and network backend + ansible.builtin.set_fact: + egressip_version_allowlist: "{{ egressip_full_allowlist[discovered_openshift_release][network_backend] | default({}) }}" + +- name: Fail if no allowlist found for this version/backend combination + ansible.builtin.fail: + msg: "No allowlist found for OCP {{ discovered_openshift_release }} with {{ network_backend }}" + when: egressip_version_allowlist | length == 0 + +- name: Write filtered allowlist to temporary file + ansible.builtin.copy: + content: "{{ egressip_version_allowlist | to_nice_yaml }}" + dest: "{{ egressip_test_results_dir }}/allowlist.yaml" + mode: '0644' + +- name: Set artifact paths + ansible.builtin.set_fact: + all_tests_path: "{{ egressip_test_results_dir }}/egressip_tests.txt" + allowlist_path: "{{ egressip_test_results_dir }}/allowlist.txt" + tests_to_run_path: "{{ egressip_test_results_dir }}/list_of_tests_to_run.txt" + +- name: Build extended-platform-tests executable + ansible.builtin.shell: | + source {{ home_dir }}/.bashrc + make build + args: + chdir: "{{ egressip_test_dir }}" + changed_when: true + +- name: Get full list of tests + ansible.builtin.shell: > + {{ egressip_test_executable }} run all --dry-run > {{ all_tests_path }} + environment: + KUBECONFIG: "{{ kubeconfig }}" + OS_CLOUD: "{{ user_cloud }}" + changed_when: true + +- name: Convert the allowlist YAML to TXT + ansible.builtin.include_role: + name: tools_openshift_tests + tasks_from: convert_yaml_tests_file_to_txt.yml + vars: + input_tests_list: "{{ egressip_test_results_dir }}/allowlist.yaml" + output_tests_list: "{{ allowlist_path }}" + yaml_format_based_on_ocp_version: true + +- name: Prepare the tests list to run + shiftstack.tools.filter_tests_list: + input_tests_file: "{{ all_tests_path }}" + allowlist_file: "{{ allowlist_path }}" + blocklist_file: "" + output_file: "{{ tests_to_run_path }}" + +- name: Run the egressip tests + block: + - name: Run egressIP tests + ansible.builtin.shell: > + {{ egressip_test_executable }} run + -f {{ tests_to_run_path }} + --output-file {{ egressip_test_results_dir }}/{{ egressip_test_name }}.log + --junit-dir={{ egressip_test_results_dir }} > /dev/null + environment: + KUBECONFIG: "{{ kubeconfig }}" + OS_CLOUD: "{{ user_cloud }}" + changed_when: true + + rescue: + - name: Mark the egressip tests as UNSTABLE + ansible.builtin.include_role: + name: tools_stage_results + tasks_from: mark_stage_unstable.yml + vars: + unstable_msg: >- + The EgressIP test suite failed. + + - name: Run must-gather + ansible.builtin.include_role: + name: tools_must-gather + vars: + must_gather_suffix: "egressip-tests" diff --git a/configs/secret.yaml b/configs/secret.yaml index 0fc7fb50..2821df02 100644 --- a/configs/secret.yaml +++ b/configs/secret.yaml @@ -1,257 +1,281 @@ $ANSIBLE_VAULT;1.1;AES256 -37363436633936393634313465353436343433653936646463633139333836346634616166646366 -6434633639653066363865373231636363653366326531310a316632663936616236636536646236 -30633764323436643237366439633334636237306339376564366365393365633931613033363735 -6561356661353962300a626164383963316437646536376432336632646164333764356430353761 -63393939303637353030313363336139373061366330343636613933383163613333323865646361 -33373633643231373635376466363831353034393131306663646161353938393334656264313863 -66333939626461346531363035383038663635346231353031636332383064626264613432343033 -39613630646266666434326261303637626334613630613031336334383337323633376335393361 -38306535346664376233643661363239613430393638386366633561303564333761386561313564 -31383266346436366362343963626231653631633431316562326564653638343633313635323663 -38323565363663646330623734613139313834396564363739623961376532303135313663663736 -31653535313662303462326333323039393632646362353162323261633861376562356165303136 -61313539393761313565383430663933383031373263326134346539323963303065323938393438 -63373634656134616538316333316539636165313265343335656265323639363938636463616639 -31633065656131616563333362343339303638336432636465623834623864626666633839636136 -37616139346631336264383036643762346330636433616365623666376166336532323837376164 -34343464373033353735303761363365303731623736353164383034303563616464323739366461 -34653934623935363465333364376135343635393037353438313630356531353931613661383564 -64353061353764303831366635646630386565633033393463353031376534383135343263343438 -37316663613430616238646438633330353037643633333165616435336634323865353235303638 -61653231326539653361623066656266646566313661353732656264636463343266393562353834 -39653066366130636330346361363536366132303039303632316237303630623632393262393832 -63323161623533356231303866383933363264356262376331613930373131653463313830323666 -36383932616532343565393862633033373030646335653462383837373935343762653561363634 -64613265346634326164613932343431653132663239313764363234313264633062636633333265 -31323238646432663033613461333638663765303333656165333637356238336261633630396533 -38343863366261383064356230353037636461643937363837303734373931363438643463306238 -30316331636565626436393333393262336237383061333735613765393230326134376637373736 -30306333653566663961306565383738636662653030363862336538316438656563613865396136 -37383738336465646333323639646161653631643032363338393265626637613236643239663631 -31383663316561346566643333623866356533623336313461643665363832636532343238333330 -36633634663366633637383964343139323938643438613639343330636138376138346338323131 -65303462386464663965656635383335393635333239636131356166373031323563666538306238 -62613434306332373731656435653366306636616135363634393862646462316630383764663566 -37653433326134636236383264623333336131333833623236303662313236643665363435376334 -39353363356337623534626466666530373132386536643037346137616531623131353238323766 -30623137363163353235363330363165656161613363386636663932613133623133656261306332 -64383239353761643566616338313966666631633532613832356237343636386534353563323732 -65356462643864303333633961323065303839396561373465653437653364656233356564663334 -34393631633262663563346137623039373466316636313666373238633136613232306663616534 -62373136333532373034643563653836393834303161633361626438313363656236386637323564 -33613131636336343762623034646634636633663863323034333531333061313430656336616130 -33643635383539643461366534393536363938313165366466633263653363386136303563383239 -39646436323932303835386536623631326231663735666463623466626433313530613036393630 -35666462386461636235316530383032643664326430343234356536643230613062636132633938 -33303634383536346366376631303965323433376638646363303431653932663734383037363562 -36343238623462376639313166646431626532373661626336636362383766633532616539363331 -34613337336635326535653064383464613562343530623263633935306539336638393137363237 -62373762616331346230616232646137623230303635323763376332373533386331383266613339 -63666262326161353363366130366363623661663338306261383262623538383566656665323637 -32623238353566333133303335353939386637613761333261333161663933623565643666623939 -37633333376234333866666438383434323331623861323236663862353732343264373235626265 -31333665373339393131333634306262313233363436663662363965623630343334323835306237 -38353034633835303863333361313434646365393566393030636166663738383665343263326164 -30356431366131333537373838353666353531663031306265643962306535653963623162633732 -31636636653535373862633230393966613563623233326264666264356534346235653665316437 -61366664343064633961383536393638316263396264316637303834656438346136393438323366 -34356239373164386365343038356366616339386532663531343533616464386661316532366431 -34636561393665653734323562353537353464303339666438323135633865653434383466323466 -64636639356561616638663261666136663835343136633866626639323935663632613731613930 -35373532623863313336613539386465633038393938313231613466383334323461366232376262 -62613064623936663263373834396332376465623732376132663131393937343066633236663338 -37666661313431383963623434643139393337316466373932346262333966386463323337323065 -31343365633465396239303365333538626537396337663236386561333431326165643465316636 -65333438616139376532376431336465366336643065323338356533386131326464396231623732 -61313763646164663133643161623761343739303132313033623932383461353138623464343533 -37353731383366303866633161643663643866383239333030636465343566323732333339313135 -62336137303431663131346663363361313366323433356265383630386166666532356165393861 -39303938313334336665643236383166323166313830623330353336376362313636323431396337 -30326137383534613439336630646464316532626465366437663431306337666236373264336639 -66336330353338626664393535376431373762633330396161396266313039356135653964316633 -36333234633130373835643763613936373962626439623537336431343730376334663634386264 -37316434373765363764646432336563316238303362343362346134373436666535343863353335 -38356264336664396164323431356466336162316665666563386130376563366261663964396130 -37346661363330643761313162383437663031303531646366343562626534363738343364653135 -38653365613961313035373465386236316533636339343338633830646264653265653532303736 -39633363313864363933646337336439653763396637393133306463613362363763386232313066 -65313562363838623632303134653133393961333130663262656463343732663733633962616666 -38383165303637383466636333643464386531383232613633643838316138636238643236316264 -32343135336666303362363261363066656636386433336334626533306165356634316138383865 -39333538366437363765393732323135343937613637333862663262656434623433613961656561 -35646233316262303139346332346664623963613066376637373763343764316632353431393334 -33383832333636313035653836336636663361396164663231633438393765306530383962663034 -38623765643062383866326363623637663130326537313765643731616435316564346161366365 -66663464383535303961346336633561373435373630623234313365636333643036663632343062 -37323737613866643437353239343462343936303531633664623561353637313632633662613365 -39383135366263623537613065643161623764363133393962616438303562663230386361346365 -64303235306531656563343064356365383564343638646466303232633835636638333039653133 -66333437346134383435623132666230313535306431363062616637353961323437343764363763 -33653262656562366533343038353266343834643039663162303135313065333433613465356133 -33313465396261623563333430363634306438336332356630366562393235313166393366343434 -35303563373061613766643538633930353264653661363134393530663664623163333061323835 -63343335303063323162623034343539396135383866653133626464336331616236373136356662 -62323831343062343634323039653832373330313135346230653431373463306532356264653538 -35653735386461653234306238303162623331353931363331653561376337373663653663386336 -64636464313635336335303363646166363766383730373138353830343637636466366336646639 -39666462323961376536383038386266373437663366343963626333306335656238313464653537 -31303764333931643866313035393636306637666531303139303134613238396233303162383661 -65303430336636633135326636356536653431346165343138373036643931376533306631306130 -33363364323233623165303238303833646635623363366164633764323638396334303135656562 -63643364363231303736316264643666646262646530336231383962373439386436323963616261 -34353865303663626431633039316435373239383537636261393933346135366132633239333134 -37313262356135633564653134626438613336623639643935616633373761663330343030666337 -36346563363334356230363133633833623031646564623363313532626236353430653638373939 -33323636616439366362376631623232303330303239663338396539386330306466653163336230 -35316661326663656235303035313135373836663262653838396434393335366332643533323566 -39316563366633643565623234626239613134646634326435643439306162626634333665363836 -62323639306364316264396337353639616262353236333632626662393937343439663839646361 -62616530396639666437663733373137356664623939343636303534386130333865393038363135 -65333062623232333135663733626139633930383265666231313663303965383738343837353539 -34373264333537636536346231666535353931373964316262343832323836613138373265326161 -35336232643932326464663264386165313666323164313635343137323361633766346561383938 -36303365616462626236326333373037623463386463623838323230363531383035643530333831 -31393632623464616463646533393664356530636538363339633431613930366535326237646237 -62643662393934393731636565333330663963353362666531633237323765313164313239343533 -36366434303861396566306261383630303564613265393734313465396631636462623036383438 -33663439343565646339663335653634663461636534353361663030646466326138643935373064 -39326331653963336662636333323237373361643233643963306638663037373334623565653533 -61323561666663373930306662613561616463613734333665633262386230613866336639653163 -37333961376338656234313965346132643531366663633637613431636634313838353265626662 -65336564346632656439613832363165656530656233363230363661643466616531613834643739 -32313733323031663562646366393638353665666163343736353733383934626365613864633463 -61363235633363323639313463343432393363666163653832343461346532643038353135303637 -37303837623238303332303865323437666437343265336665663639623463323534363531326637 -31643335393131303039623565626437343531386361326635643733663361343464646261316466 -36353731363132336431353639393130363864636364393466656666326331376665393162623063 -32653032353336376562366536326631613533626233386638613862386566313639653563333231 -61363034666130393265666166616236373635613839316361656238363035376633353064343532 -39666233613032373138386239343732343861333964306265356336343565653061326366333435 -38643030363032323230353833383239653466356338306330656666393766663663393565353036 -62366234613237623234333830616263356533383939653763383863663931376437633733613833 -38633166393138343766613832366134383966383932363963313937393164393461396134363765 -30386339303066333433336139353037626433626362323261353263663265393531373538333730 -66613664646266383633626164363433383539353166626265623939363234616434646133303762 -36323439323536383035353530336433393539346462633637306435376136613138343662373864 -38323139396464633630306365613562363132303737663736383034336431616436373238656130 -31356362643631303766393232653834613834633230336230666165636439636263353538373962 -65373662356238383039326361626265663132363362653566353735376638343035643433393538 -66393035393466316432366538646662656535396564623937383564356664643764636638353739 -65396161366430316131323966333630333063613866303765656130333332316531663164666138 -64616436373032333638333332343330383038663366373361353033323866646366336139393361 -36343934353838623761353066636630363134643962346232393464356436393132363237613431 -39353932393032663636383537323865663163346566393232326166396266626333323361376633 -38616233623033396666323839626566333761366661343935373839623037376230376133323963 -39313461336439643237646538613065363534366663613665663436316465653563386337303162 -33643736613065613733363366393131656331336431326365333338623036666638656664653462 -64616465666131643235383363326332333139626533316563636566616534626335306137393963 -32346636653931613431336533326430656235363033353762626537316538333330383531663463 -61323163323833393437393338366335613333323436363230306236346535353732363738306232 -39356437653761623532363033633662643131386236336537636366396236313465613735643334 -37383735613834393864326563623232323535633866646138303431643561633665633037373534 -62363736383764383439303666656630343036363639313432343661313533383836656134356263 -30373138366263666362383662386232353534373839383136376439323732313039376431336531 -38333733323664386363336538386134636662363936346538316533306432376539663434326536 -32333034626437383730383733323232366434343335636138323436316165386639613833666565 -64383561316630393431373231393938646666653332396564326362356638386561626261356536 -30353131363636356439363134343063393135353239333530323238383035613132333865663435 -38306333393133636365656163623461366132386337343766346161653133663534613339383034 -61616636633830383538653362653865633364386661386534636331636564343332333533613035 -30336466613439616431336234383464393837303263393136643038643633636461323765323336 -62633964313461633339386331646631653230636566373762356531376466376137663365633837 -38626631656337316235343937363861643763393439353564396631633639663964343464376631 -66336566343336303735633639653033653366626562633439343731356166633030363834386535 -34323932363335343231343535643864363766663733643132303461623437316637376639393033 -61323937386661613765346338376363323732326263663339393638623033326131633639316330 -33616237653062333633303063666366306362363138363265353466383134323334333934303934 -39363533643439356434356236383462633133636230343339636362353932353130636230613564 -31386135653437646137646465633666316430623361346430316435623339643266366134323363 -65316564326534366166323963303265336130666333613136333866363435343063626136396332 -38373865343837343364336232656164343764336435343839343332306633326664313865636163 -35613630316231356639323738383435363462386564343939663930353439396330636462636634 -62326638376364626535353333313635376135393766373663633031353738326463616664356366 -30386137623435643532313837366466653135616463333236663137646433336338663864666130 -61313233383262363366326137633439383161663636303434653862663066363265623765316231 -31303663373936396662363661653733616537633736333064353963383031663437646163323963 -33656362383634396530306238393433353434336539343163343134626263313863366630336461 -32646432373461323138663332383134396266316436643138663233343531653938616432623266 -36363530326535623965326435623135323234383331663133313036363139376237316338353966 -39336139326465306262643437323561336231646466393338363063633338353262366136316335 -30663731353762623232653964393834373338376361353239383065363333363263363661316337 -34313764623166666436316639343532363639636235383064343261326664343134633763333138 -31613038373639316462343961386333376264396231383766663631366136373262343462346239 -30336630643165383632353631656532323330306436313964653566633539653766313837333536 -32343036353433353361646631396262306535373266306532643832363834653938343135626164 -32653239323035636538353661346438373030343064613433303239306337653338646533636334 -34616134326332303630366333343866313963643233666461623764353163306562633739346332 -31616237643030303534343665336663333831306632666635393562366466363730333036343732 -36646662326533313737636163393336666133386233373363633862353131386536383966326264 -35663565396134643136393064303539663361366530653734366432633863653932633266343538 -37303233613432616666363733643432616633316635323438633561323363393061326264313265 -62636565323832633937353462663262333939633337666562626437343161326161303962346564 -38353237613931383734633438303965663334393132323338623033653836643463626135373161 -64316362613763646136643933653139333562313637323037613737363632356263356132386432 -62326464316633333566613061313031393430666538353563616331363863363631343431373462 -66643434633330656266643761376436373664313361333239303663323631343236386533336161 -66623761653561343362343163653362633733643366633233663133353032663362663232383435 -38373432386464316464663735336537316132306430373663623933623131623066656664303836 -33363166343930336436363538373731343366366336373032643663663230346435306465333263 -37393862646432623463363563356235643934616565373263316639626538386230313733373166 -33636661323532636162643534366630666461313965653862613930396234666337386461616130 -34393661326430316661633732346562663062373864653862303234663436386431306330663939 -63633533383266386133616233636565373665353262333338623364633131646331613931626638 -63343863343564326238336236343162343439363361383730613930343631393264626631333638 -39393337663738323735333130613534636335373435656366616333323239666236333231373061 -62653065643035393462306365316137353538376434636536613431316561653131373432623830 -62366466313538663235656235316632626234323432616234373831326633666666376135376561 -38333536613763653661613239633361386365366131323862663336666537356364326565353737 -32353863303030366464326636646232633066343936393565663630363934613438633264363839 -63373834633231636166313131343931353537386563636661663863373938646235393464626366 -38633535666335306537626636616632313165633531643231383661666363316261646334353863 -63383865306662663131343538663836323039373264393763386163633332346564393964616638 -37326566646331353339346163666639333263623731336539633135386535316236366335656464 -38663137626561313664643639343033663337336131383831353239353661353330303631656464 -61663162636662633064653964663162376134366630336533373062396665616431643761363336 -33373733343837646266383832346539336133613831353564636565336132373163316434313133 -34396161316433373337323363663133363961396461343161393665353836356564646131636537 -37323438336531373830383530623165396532313431633536396531653264396137333832643939 -39313864663434313532393761396564346431666435326463353030663435393432643462653663 -36383630323665313732633364373137663665343065613463343532346234376236626235336232 -65316637646461313765316330346461323739396535316330646163366363626235383037306236 -66376339313336303630383536393433623933666534633061353465323432646332653564363639 -38616565306363303037653666396662336538656534313631343838386639353065343535303132 -33626130383136303934646536613036363534363632633133323830376330646532393562376639 -32633436333764353339383135343837663461643639663965643564393461643138363163626638 -33356533633431353066616537323236343563643764393764316236663037363463393265313832 -38623961313166346238353063623937396165313265373834643434623137313964376337386462 -61346334333530333134646562633062343663666161353963353533313865376138366134353238 -37333831383662613536323565636139383963663064353035316465353630376437646364663535 -39616366633765633131303133373130653666633533376464643961333066653565643430313936 -65623264616435323437373236663438313963353762653138626362626666616138666461393530 -39393465326136623863346366613732613738393337313464333636373933643765653536643062 -32613334326532626261376235353839356461343733633438313465633166653835663539656663 -31316637306237346230373961323166386361313664666233303639633766383636653037366266 -33653530623835663330326337626232623237636130623739633364353366303332623362313234 -35336339616430663335383639306132636362326330333233303361663437303661383739323963 -33303761393639633564383234373133633236333930306533326238396338373331636632353264 -66323764363334303164333339626430633432316561373164336239613764333832336337666437 -64353730363831393230363330613438383662363234613533336338623637633236653564626333 -39353134313466373430353864303031326161326539333231363137363238616535653661393461 -36353338316330636435303663393936643361303433643935306465356562333763646365623831 -65613434613339623266666266346130396462636666363466666339393632333138373666356432 -32353563373734356539643739376337356435343338383139393731326531663435313666633038 -32363263303566303430356131393265356333653333636635373934303733653661346631626263 -61633862383864313464386337346433643633323033643263633938393665313365626366323064 -30633262656535366234646635343039623933386631323839303163393736336665386637343238 -62653336306461613232333161613434343335646333313065363830363936326138363431376265 -66336638323435643234306566613635383439353938303530323536333236343965613431373863 -35626431653333346337623962643935316161326632323661663535633638323133393366306163 -64396639393034313533626161643732636138373934653337663534623838646436646635346136 -35653837356533373732623434353733393538393433306639353937383139376161303435636464 -35343665323632386661623934383632656366346665646330626635316661393031623764343232 -31613136646165336561306166643031663335653761306336376136643639656635653233323936 -31326662613037626137373431376130633066376665386566386562626261396130653762623930 -64613366616365336431376565373166646132383963653663313434613861333163343034383433 -32393139326431616637643536313939643862366630643334393638343766393066653739356539 -33353464623237386132 +31613534323961343235363535393964393937666666383962626262316635666335656135646464 +3633626337366439333037396263646665666132363830380a353438616165353031363033616165 +32633539393530653231613362373731623130376533616331306563643165353036633932363438 +6561346662343138380a663537333437656539663465626164353332356234363134343765616239 +38343964613431323430373861623033313566653036346338316462653161396362383833373534 +62393661336632343536396661616666636632663136303334353531633939626239643936323034 +30383931333934623030633062623161376330333435326565323564306535336134393230396639 +65343865633530663535323862366535313564303431373437636532396432343233643230663161 +37383130663562346335356430643030323664643836623331623431373965373661643331353132 +37633834353762626337333939393531336564363566363862363538353461363838306639363733 +31623235333961316239353834386263353036316237393631323531356466373464666266373139 +37613335396361363438313335393163376566376265633333373663373366623730663837386531 +31306434303139396663633463636435653839323438623531636333623964656533346334336266 +30656635663138313464373631613062363134306133323131356564323662613865353733623839 +30356261343936623236376135303531636433626437343664383834333233616136386337613764 +33666234613162646534393432373763313430633762316639616662643032396463663366303235 +63316336386136346366336635663434346665393366636665626539663337656636326638613162 +65343337383032643665373032346137633533393164343033663764663936306536646436343335 +37636435646361623535656231623835383866643862373236663530326165313733396464346165 +39353666643164663662386130653334626231333037336432333238373939353134323636363231 +32383133323632646135323437623336643537333564376237623337643966643662386338363663 +32333564386339386634643133626565383831313339623362636538353632383032666164323762 +37303065343662356161383239343761313731363334643965656533656261656532343133396538 +37626163323537303834313262393031386539373133323564666565353738383066346165653731 +31336239356436323135316538636632623662663533363365363338306261633238323235373532 +38323433656662393564613764316536616434663735656164646239366237643164353062323663 +35356564396532336663336239343634616363333766623137353135373835633764333461643135 +61353739306465303733303265346337663738616434633566663236386430346365643661633265 +65383033353063633033323331363832323562383333356133663765353065386639313832396361 +39343339336435396630353931333931353763636237353630643964653965363130313037666631 +62366366633835656637653362656164626631313563323062383665356536326463383061613338 +34323832393965613862373335323361313735643339636437323438393364316633626163626231 +65313935373932356562626237366461343663623565313835623037393836323838663135393035 +34666465623762613132303137393434333462316461353136353930653838383061396630326533 +39636166636231323861313233666536656138656236653338643534656537656562643565383837 +37353361303033633738353039663730386666313364316364326333393265393038653030616164 +37313236343330633432643138626234633235363131336334663733656438306261316162376238 +35376339366138316338336233333332363933616637626538636662376663656165623435376139 +64623233313737313262363031376539653130393634613736663931333738376165333237323836 +63313836303837366337623833633765613332326265633834393635323731393136393465613866 +39366135356130356536336238656335306630653863363033313935663963353031633833323465 +62616530636531386433663335666530333533613461656434623033383164323466383530363833 +35656339663966653465336361653263303437636438343035313564356132656563633439333366 +65353164353935346333363561323633316632326437306434303732363237383663393237306531 +65653038666334353735313666303932326663613232613935343661653263363866353766303264 +36333166653930356632376530383631393764303931646162653435623161336562613833653263 +30396132396335393330323964353661613834353438333731376530343136333930366635643130 +65623065363935393835646338336535336264616662353330633165646261303938383531633665 +31313264363061373436653837316331616530666261383532613063366237346366636235613537 +66383566383737393762623538356137386566346134396364336233333435383039646536306631 +33363066316638396434313137613637346431363534316533343963373564623565666363646637 +38313065333233396237336261383464376266656463376234336539613962336665663766663339 +39643965356337336230653639303939353532383034346163373031643036613034636661303637 +39636362326162663237376438666434383436616130326332336563623833396134323736633431 +35303431313961323631363832316462666234613338333930663565636439306135306666396536 +30363062636437316636656337306333323363383632663133396331376534313635323139663437 +61323231316339653461613862313230396561363436323661626566376635326663646466366366 +65643139333661363233386662363436386539653334623762633764343732633236633231653065 +30656630343133666162636463353138633131313337613835393361303936346361313966333362 +65336133663131303339353331346139643461333165663164623364373930393933626531666630 +39643434633666313731376235633536323033663464346434363865633563616665653338373861 +36613536356138636334623135333838616462636432313663323539376332643737646462313566 +65333939626331353138316161643031663162366631626361626365336635306462633862393739 +33343232303465646439353066613935623339623130326630393039353133396632373438643661 +36366465656636346639316536613864343738333937646532343561646361616231646566626138 +37666666663865313732653664626135393263373937396564636366313836623162313562336436 +38643334363130316132363734363232653837663431663133333663336166663633663139303761 +32373662373531663534643966323931633632313133303733326362333639633735393735643434 +63633330356233386362653566353536656130303366646131653261623861353230633565623364 +35353930386332333935396439313764356161643530613331346435333361633566656461316133 +36396231663132653165623037306430633630343965326463333938623834663337376663333236 +63663332393263343436363565393364383337613937396533313639303562666162313566326239 +62646337326264653966636163316639646464353334393762343437353061353264333864363738 +36373564383765623965373430323139346635316665653135333336343533663563323061306264 +61373339613830613365663736626234616133663239653462393432316537663534666334383136 +34383738626561363336333963336130646230653330303962336330326331633764643731613964 +36336665326161643237316330666430366265313736646265383664323764323630303231616437 +38626666363762363136663463616433643132376266313535626161386330333431353537343938 +63616265323830306230386566633732653963653430653338663331336361356633616666646132 +36643065343665323636316161616666373031383634323431316532373764346633643163613833 +62366134313264626332353961613862653536623737326462323162613835313938366335363134 +32303030386537316531626661653462343566383739653938323438373462663439323162326634 +35323465393665643432303362373730303262313833363162373932386665353063333532383534 +32303334323732393732623064396334383066336566343766303038383338663363353735376563 +64373632313966396164636432623361383538393465383737653132303636336234383630356630 +36366339656565653738323736366531303063643739393538636232326230313632363436626463 +66363533646561633439383135353530343032626261366264303065393664316438633262303062 +63363963646630663365633966663366393831663365633737366663616339346331393134353961 +33343933383038336436666536373164383839643461313865653131633233616635353461393936 +65393064616633303839306465366332363966373530396436623462306664356631306530323965 +32303530313034323034643830616432356262373063643638306362393764613833353630303162 +63336236643466666337373565393239396434663839646165623663323939333362373434323163 +34616561616634616137333065333536336337626162353239636436333134616632653830323231 +30353164656664666666333532353563633439373134376231373662303634313562616663613931 +62363262376435363230613961623863383030666561323062373537313635383132633639313436 +66613463646639343861666464626537663533333730333131346130313165336635323038303038 +32623139653233306262643035343361666437626133383763653535333866666633633732323237 +31653639396161386631333063643162396566643365623830643264313861353131653832303137 +66336561363533363638393730303235623936326331316334386635373635323035393530393461 +36663566346639663662383435646462356132633765623831633232623863323634643333363765 +64616263303332353237346337323634326436373763303465306362633632363638366531613738 +38613733366531656536363465323036366336646566363038366665613938306637343536346466 +61333034326162393365313663323730396535333461643932616566333533393363323965366538 +39663132386361653064303630316339663666373230383963353738396239643532353534333736 +34333064363537643634623131313761376666353133623235663063353833326630646231393838 +62353832346666323338303231613234626161383331363238366336383937393933636335323034 +64323536333736366365373235353738386232333438646632656637626332626235323937383330 +31663836616530633063366639356238623430353564316334633066313938643130336565313663 +33366635373461623265656465316238353432386261653966376630613237326134323539343731 +39636234613736623665306633333135383332343165316336356563393938653963666164396364 +30613930396135386136343061616231636133653032316165643961313363633561353737653765 +65656662323831653765366264333762373439386536633863336539366432323330643538623938 +37306662333331356639306336353336666638373362366236626438663838343038333933613136 +39653439313139303730643166316166326639656630336564363031623665393238316664303632 +38303566333634373839613531666431623636363739383335353161393439313231303865326333 +37313264313661623564653465653366656664323838306431396466393130396263653635643161 +65306565353536613465626261383530663964633433356332626265336466356665376637633862 +30323762373034343539383462366266653336343837616536383430623361363662646432373033 +31323165356361633065373431336633633330326532353332656133636239346436623265363966 +35383432643036663465356236643763353265313766323063616636643065616632376561303661 +65343863663432616235323039313835356364306661363534303333396636643966303137626238 +38373765616431386439346263373465383635376463613961366266653237313464313862346263 +35303965653764656534313463643130646333653166643131633035636665623330623233626162 +36623633656162613030306331343739616561396262336261346130313330633431366663636133 +38343631663435376133386466326534323835353965363765343839666233633062663561353265 +32313735666432323234303135653131646562313763336230323634383639663633366335383832 +65653737303536366639383035653464626266306535396464646230383865323338623666613061 +34386530383761633666666565396239303330366263303666613963653662303935643765666262 +30356338316463663466623339613339386335353465663837336462626236633534306535326232 +64373763313964303636383930353866646431633733623262343962363532333138326362616537 +65313030646532373130663066663062393037303765316439303739393237336135383630646133 +32633862343862356633663336376564646235343234343134396335383035663031383631356336 +61616539656463393665613362316465623037646336386336326233663131623562303533336638 +62383737373436303765373738386339363835623931666333376261643839666333633861376131 +33663239313438616334646332346663613730306163633736316232303766623938366565326564 +63613765653336326163303330323430343531393837653138303035323562653739353632323630 +30353338396235343431666331313432356231626434653462616134316338643932333635643164 +64323732643839636263623163323634363639343636313237626335393631366531366562363166 +34643862303038656661653439626566653538316437303939646661343138643333366436393731 +33333864323433633066303533653762363462336431653730353735356130356266333532373332 +62323634303930623936663333333837363664613430656339353534373334633731303162333661 +30633733303139353733666464643665613966666265623766363431613835663230333162653863 +34643037353831663331353730626537663064303130666236326630373166373531336337383731 +37663765313563313530393561353531333662346233333732353035333137633661356266663666 +36313161633362376563333938663434393334613664333365636430633563666333633536666630 +37303465643036396338643038353430353964623734363964303363343562336166326433663631 +34663033346436306634313930336539313134346432366335623661666435313038623163356539 +35303437623036663437303061363765623732396162613362303966393334376532303638343938 +39363137353337663330653631376366356134396633313433376364663430323464616332633766 +35613230353561616537393239383066626333363661643438613039353666643533636364306436 +38313563663762663735373134663132383936323765663665393465303035623737326133643038 +37393263326337303465633862643034666166353930363935366333393934303665346239663938 +31343538326162646433653138323235383066303837373730323735643431303233383231373732 +61313936666233373364366265636439346533383765363131356233303863633966393362396331 +38613832363430326665396532373735366236326362636230383336636666323934346433343165 +30343364643035643762393563643363613236653363313230623033363032353161393937633031 +38393235343538643535353430663562303839306431613130623764666465663466333235656436 +30373761343235396435613963333730623636616639316361643662396361323039613236346633 +33653231643738653565653662303061376664303761646664316535663962636131383233313839 +37386532373039373037643435626434393963626133363866643932393563343831343564393635 +63616534653831663366346334363939303263316338663330366462316461303832613839616165 +37656534623232343937336138353234643736643365366134623433303734366233643436363161 +37336239613434333663666234396262346330393064623937303736383637623536626235343431 +39383935666262663966373238396261373161653934353433396130343334306135383430613362 +64666339363135376365626639353166313632323962323032333137643561633066636439666366 +37376435633038663233333632633431363432386366383534353932353037623662326265623331 +33666330393164306232643933346135376466363564343161653465653464613961343334353336 +63353939316666643832383936656465616364303762663666393364616233646234656530643761 +64336631653663356663383331346532343138383161616636353034316539623330626362333531 +37336162623662306161393365363534373064336661326638646630343433636164313534393265 +37636463636232656434346330666230613931633939383461623439613661313630636564653231 +63626261616435316266366565306434626461653163653136666164356538386166386138323732 +39663030656139306635666135323331653333373934623130383931623337333733636538313361 +63643364626137336533373139316662616463313761323230643432616462346533653862393266 +30666534306530653534343631646135353632663230323537303530666632386332633537363431 +35373539383932303537643363343133313261363061653561346635303131626261373165623539 +36306261663635623065626332623436666666633039356436623135353865376336643134656632 +36316463633062633434333932636461306131323962663033343462373937633864646439323131 +38316263366635313731373962363038643838643466646266323133383737383036623766373233 +36363061373333323361393639626463363139303732316162313930336339623661643564646333 +34623132313435306664323263376261363137656639353961653532366461396331343666326161 +37373131353134356530653237663262613036396630393261323436396234656431303935626336 +64373230653035656263303961303336343035336164303034646563653633663636653839646138 +30393163653465343737323133643137643937646664306332613162323134376264323330323936 +35316230373038363032313636333363326663306530646638356163343661313439323639353564 +30626366346230386235336130383262313437663763623466653063376638323337343239356330 +31373766363734366338326164396135663830306362623437376661346563626334393465373431 +37653862363537383636666463656334613137303062366434336636616538643039646231363564 +64363933383436623030656161336534316330666139656166356364366330373832323963316563 +65626162376438386666346530663134356436623139396538613234616230653033306366353861 +66626563343031663461653432326133396333336634346132666633353864663631383863306433 +38383037346533626233373761326537343238623461323333323466393438313365303839616633 +64386163323961366337656166373965613837386435353365346366616265386633663061356536 +39363062353738313065646235356438633039393933613033626530643236613261356566363132 +36383634383030323764616434313931643334343063356161396639333034386138333539643261 +36313537373565643136663734646264323735303433626338393636393636353031643934303364 +30643636623830303832613965366563643439666530333238636565646466646132333539313430 +63626633363230393265313263376363613737343735353834656562396363653936343836643132 +34383633353334323162316334323164366437306637303730666566373935303464343538396563 +39616362383333303765333030346635313165326464623631333365623133386438393361306133 +61313162333336653164376330383539353362353236316631383337616266613739643363306463 +33323062393339666438613132346535366433393234313263353661356133376366356262326634 +62393332346638336538643737613865373432383062646138626330333566346262646538303134 +30323965346134663735613034643031343836653730343865303465653963383035646365396163 +36363766656539396365373439663631613330643762666164383535336136353264303261333862 +61343035366262663835396533326332353333666539303733373836653863303933383164356262 +63393164303762653131613637656462643766616433623037333062666266633861323332303463 +33616664346530383935303238376462336330666430353063366234363163663933343434626464 +37636633366637373937373361313862393432386334303664663132663965393036373964396631 +39623564316362623330303736373466363763393137616664663761663265396166353264636432 +63623735663934393839623766313864373539623363623531396134343837306665393461666138 +62373837316666656431656638383931643765326335353832633462623237643636613931366531 +39323938306531343239336432353638653164393162373135376130316231633231383635326437 +63383437626535343665653863333966646630346330303465396439353937386366353865633936 +63613830616433636364333932373032306632323735613230386564393235323531363633363661 +32633738666432386236653037373636663664626164313961316566333130373164323164363762 +62656335343465373562393538316164656463396430343466626337333465383834373165373035 +34316330643262376432393763373132326661363535646631376565393237663764623963666266 +36666138376463643533623539343937663833336636653936323333623330303763646261353135 +63383863313730613764636339616132613633313164316230666266656536376337303339643265 +66666332626136613036616430623061353537616231343434613261626330653430343131353931 +34396438663066653962343038363232323036656534313166626632356333653261633037663437 +35333738383665393935363334396161396562666233623132643364623862356365643537353733 +65626131326538633664643364396162656463643339313261303839333231316433343437396534 +65646331393238646639306339346231346138303130646561666361646565656233336435393233 +63653865663165623232356165373663363662343637313033663231353239363134353335626432 +38383836376563636366663164656634383833316461666234313561366539366337396638383665 +36393363303364636365373966366662356530393663313966646536623434386636383431626530 +37336635313165663239393834346338363134363037623634383239373563343636303731393430 +33396566666432616461386534333262636630356637656230626265383335396639643639643165 +61393538306333636132663731663731393334663963663836633232636363316262666262383064 +36643935626332633833653364633461333764383766353562376663396362346265356238366665 +64666130303638666431643865376337623034323737323564643761623964346534396237616434 +37366363343739336638333532363665306436623234356639613930353731396439373135356130 +62363933666535333065376564613536323635363264383139636138336461636332363139323563 +61316334333931303162383430646333313936323733353439386136643631646335633766653431 +39356630336635323230626134643432363335616539353333346136613866323238316263373036 +65366265623039373739353831666639646265333266626430313931346237333738376133363066 +36376366633762363662653033653266323261366634663738626661303466356139366236353763 +35346562646136666461636135343238326661356635623139313433373636333861366130376563 +64346439303231393031616137346530373764643265623435643065303061633732363764356432 +63383361373338313262336536303030333536393839636437636538323861393730636639653465 +64306135646238396561646538623866383531666634396434356666373864623663316565353030 +62616265373064616134333430383832633861653933336530613862336231356233643133393166 +65663438643534623561386237663666353766623631626432383131383938626434666331643461 +65343637323137346532343261623736363666363533313633643938643264316336356632393764 +64613938613166643233653132633635396539626632353361626666666236633662323338373838 +31303466323837383630363439366334636337386232653164323830623266626161363332383964 +34663261303437373465386662383364626130316661386238383965626435626130616238333736 +39333065616364353863616231613339663534643933353436656235616437353561336339663832 +33356435333061656261643730613633316263656262373662366139376366663261383561373038 +34303737663962636565343763343666343866323834313466613363616362306334626136663463 +31333130643661343663363533333230326131663233323737366336353263323164313830653364 +32633938646135623934653234653838623532373166653361303935313465373635336138343538 +34396162333661653033616637383662326364336664613631353533663738326364373533623035 +39393937323861653036613336333835616337306134396331323066323536666438353531306630 +30653331303633363831313535373164643365326234336635343765393835363032303634646139 +38646264373463333530386134636537333238653133353863396132366161386435643030366434 +65353664636537323564356664353339336332346332626461643132653637646130656133653736 +64623635353336383638323231373836373634316233393433376234373339316664616238616162 +65663838336633326662366139653163383162333763313165613730333361643638613833303333 +37396434333263353634356266663632613861633135346236626665383763643363653939616664 +34383965386264623164646330376633386330633466346332313635353136656535316138336263 +36616661636238663638326536656164653561336339346238363031343132336637383638303338 +30313538383339643639346666386664636131333332373364666166376135363035356636663035 +36323931396137386536633562323966313131643938383264613130313465336539333863616532 +34316339616235373963326634313637303363336135623932343531376462383037366332363437 +37343762323030363564616134316234313536393362373237333136313061633734346265656430 +32346666356162633034316233306434346431393634653635313364333530343033633836613766 +38373233383836316233616237626362633831366634316136323938656664383165623363346434 +64653966333962363164303161343135616636613862633438323336653864356535386637333839 +65666437333337336666316432626636323133346363616564396363343635636365656266623533 +35326264366337323236636562393131623137613866643938306636383239343635313931393832 +30343332333137363532633063643064616237393161366438396632386364613537646231636135 +65386138616439613639643663383932356634316661633839633638346635633266326134303164 +62626139336435626362663735643932623464336334366639306562346637393534386231303965 +63313934343162666230623231326238633036653733356666373233663235303333326565663038 +61656664636334616263376166656331343235383261343538633563376433633461306266653135 +37316433323261653839326534663331313534643336393438343564633663346432626663363561 +36333934363132366262 diff --git a/jobs_definitions/osp_verification.yaml b/jobs_definitions/osp_verification.yaml index 98d341b6..d65dca5c 100644 --- a/jobs_definitions/osp_verification.yaml +++ b/jobs_definitions/osp_verification.yaml @@ -21,6 +21,7 @@ stages: - verification - openstack_test - lb_tests + - egressip_tests ocp_deployment_topology: network_type: OVNKubernetes diff --git a/playbooks/ocp_testing.yaml b/playbooks/ocp_testing.yaml index ac386333..1235a4b1 100644 --- a/playbooks/ocp_testing.yaml +++ b/playbooks/ocp_testing.yaml @@ -103,3 +103,7 @@ - name: Run Openshift Manila CSI Tests on OpenShift ansible.builtin.import_playbook: plays/manila_csi.yaml when: "'manila_csi_tests' in stages" + +- name: Run EgressIP tests on OpenShift + ansible.builtin.import_playbook: plays/egressip_tests.yaml + when: "'egressip_tests' in stages" diff --git a/playbooks/plays/egressip_tests.yaml b/playbooks/plays/egressip_tests.yaml new file mode 100644 index 00000000..0cbed7a9 --- /dev/null +++ b/playbooks/plays/egressip_tests.yaml @@ -0,0 +1,17 @@ +--- +- name: Run EgressIP tests on OpenShift + hosts: installer + gather_facts: no + vars_files: + - "../../configs/global.yml" + tasks: + - name: Main block + block: + - name: Run EgressIP tests on OpenShift + ansible.builtin.include_role: + name: shiftstack.stages.egressip_tests + always: + - name: Synchronize artifacts from the Ansible Managed Node to Ansible Controller + ansible.builtin.include_role: + name: shiftstack.tools.tools_ansible_inventory + tasks_from: sync_artifacts.yml