diff mbox series

[ovs-dev,v3,1/2] CI: Add a couple of periodic jobs using ovn-fake-multinode.

Message ID 20230329140157.839278-1-numans@ovn.org
State Accepted
Headers show
Series [ovs-dev,v3,1/2] CI: Add a couple of periodic jobs using ovn-fake-multinode. | expand

Checks

Context Check Description
ovsrobot/apply-robot warning apply and check: warning
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes success github build: passed

Commit Message

Numan Siddique March 29, 2023, 2:01 p.m. UTC
From: Numan Siddique <numans@ovn.org>

This patch adds a couple of jobs using ovn-fake-multinode.
It first builds 2 ovn-fake-multinode container images
  - one with OVN 22.03
  - one with present main.

The first job deploys ovn-fake-multinode with the main
OVN and runs simple tests provided by ovn-fake-multinode [1].

The second job deploys ovn-fake-multinode setup with the
central image using OVN 22.03 and chassis image using main OVN.
This job tests the scenario
  - ovn-northd and OVN dbs are running the most recent LTS.
  - ovn-controller is running the latest commit from the branch.

The workflow is right now scheduled to trigger on midnight everyday.
Once we cache the built image or reduce the overall run time of
this workflow we can enable for every push.

[1] - https://github.com/ovn-org/ovn-fake-multinode/blob/main/.ci/test_basic.sh

Signed-off-by: Numan Siddique <numans@ovn.org>
---
 .../workflows/ovn-fake-multinode-tests.yml    | 151 ++++++++++++++++++
 Makefile.am                                   |   1 +
 2 files changed, 152 insertions(+)
 create mode 100644 .github/workflows/ovn-fake-multinode-tests.yml

Comments

0-day Robot March 29, 2023, 2:18 p.m. UTC | #1
Bleep bloop.  Greetings Numan Siddique, I am a robot and I have tried out your patch.
Thanks for your contribution.

I encountered some error that I wasn't expecting.  See the details below.


checkpatch:
WARNING: Line is 88 characters long (recommended limit is 79)
#47 FILE: .github/workflows/ovn-fake-multinode-tests.yml:9:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}

WARNING: Line is 84 characters long (recommended limit is 79)
#91 FILE: .github/workflows/ovn-fake-multinode-tests.yml:53:
        sudo podman save ovn/ovn-multi-node:latest > /tmp/_output/ovn_main_image.tar

WARNING: Line is 84 characters long (recommended limit is 79)
#107 FILE: .github/workflows/ovn-fake-multinode-tests.yml:69:
        sudo podman save ovn/ovn-multi-node:22.03 > /tmp/_output/ovn_22_03_image.tar

WARNING: Line is 129 characters long (recommended limit is 79)
#144 FILE: .github/workflows/ovn-fake-multinode-tests.yml:106:
      run: sudo eatmydata apt-get remove --auto-remove -y aspnetcore-* dotnet-* libmono-* mono-* msbuild php-* php7* ghc-* zulu-*

Lines checked: 205, Warnings: 4, Errors: 0


Please check this out.  If you feel there has been an error, please email aconole@redhat.com

Thanks,
0-day Robot
Simon Horman March 30, 2023, 9:54 a.m. UTC | #2
On Wed, Mar 29, 2023 at 10:01:57AM -0400, numans@ovn.org wrote:
> From: Numan Siddique <numans@ovn.org>
> 
> This patch adds a couple of jobs using ovn-fake-multinode.
> It first builds 2 ovn-fake-multinode container images
>   - one with OVN 22.03
>   - one with present main.
> 
> The first job deploys ovn-fake-multinode with the main
> OVN and runs simple tests provided by ovn-fake-multinode [1].
> 
> The second job deploys ovn-fake-multinode setup with the
> central image using OVN 22.03 and chassis image using main OVN.
> This job tests the scenario
>   - ovn-northd and OVN dbs are running the most recent LTS.
>   - ovn-controller is running the latest commit from the branch.
> 
> The workflow is right now scheduled to trigger on midnight everyday.
> Once we cache the built image or reduce the overall run time of
> this workflow we can enable for every push.
> 
> [1] - https://github.com/ovn-org/ovn-fake-multinode/blob/main/.ci/test_basic.sh
> 
> Signed-off-by: Numan Siddique <numans@ovn.org>

Reviewed-by: Simon Horman <simon.horman@corigine.com>
Dumitru Ceara March 30, 2023, 12:53 p.m. UTC | #3
On 3/29/23 16:01, numans@ovn.org wrote:
> From: Numan Siddique <numans@ovn.org>
> 
> This patch adds a couple of jobs using ovn-fake-multinode.
> It first builds 2 ovn-fake-multinode container images
>   - one with OVN 22.03
>   - one with present main.
> 
> The first job deploys ovn-fake-multinode with the main
> OVN and runs simple tests provided by ovn-fake-multinode [1].
> 
> The second job deploys ovn-fake-multinode setup with the
> central image using OVN 22.03 and chassis image using main OVN.
> This job tests the scenario
>   - ovn-northd and OVN dbs are running the most recent LTS.
>   - ovn-controller is running the latest commit from the branch.
> 
> The workflow is right now scheduled to trigger on midnight everyday.
> Once we cache the built image or reduce the overall run time of
> this workflow we can enable for every push.
> 
> [1] - https://github.com/ovn-org/ovn-fake-multinode/blob/main/.ci/test_basic.sh
> 
> Signed-off-by: Numan Siddique <numans@ovn.org>
> ---

I have a few minor comments, feel free to add my ack when you apply the
patch if you address them:

Acked-by: Dumitru Ceara <dceara@redhat.com>

Thanks,
Dumitru

>  .../workflows/ovn-fake-multinode-tests.yml    | 151 ++++++++++++++++++
>  Makefile.am                                   |   1 +
>  2 files changed, 152 insertions(+)
>  create mode 100644 .github/workflows/ovn-fake-multinode-tests.yml
> 
> diff --git a/.github/workflows/ovn-fake-multinode-tests.yml b/.github/workflows/ovn-fake-multinode-tests.yml
> new file mode 100644
> index 0000000000..fa768f235c
> --- /dev/null
> +++ b/.github/workflows/ovn-fake-multinode-tests.yml
> @@ -0,0 +1,151 @@
> +name: System tests using ovn-fake-multinode
> +
> +on:

It might be good also add:

  workflow_dispatch:

So we can run the workflow on demand as well.

> +  schedule:
> +    # Run everyday at midnight
> +    - cron: '0 0 * * *'
> +
> +concurrency:
> +  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
> +  cancel-in-progress: true
> +
> +jobs:
> +  build:
> +    env:
> +      RUNC_CMD: podman
> +      OS_IMAGE: "fedora:37"
> +      # https://github.com/actions/runner-images/issues/6282
> +      XDG_RUNTIME_DIR: ''
> +
> +    name: Build ovn-fake-multinode image
> +    runs-on: ubuntu-20.04
> +    steps:
> +    - name: Check out ovn-fake-multi-node
> +      uses: actions/checkout@v3
> +      with:
> +        repository: 'ovn-org/ovn-fake-multinode'
> +        path: 'ovn-fake-multinode'
> +        ref: 'v0.1'
> +
> +    - name: Check out ovn
> +      uses: actions/checkout@v3
> +      with:
> +        path: 'ovn-fake-multinode/ovn'
> +        submodules: recursive
> +
> +    - name: Check out ovs master
> +      uses: actions/checkout@v3
> +      with:
> +        path: 'ovn-fake-multinode/ovs'
> +        repository: 'openvswitch/ovs'
> +        ref: 'master'

This works fine because ovn-fake-multinode builds OVN against the
version checked out in the submodule.  But it might not be obvious.
Shall we add a comment before these two steps?

> +
> +    - name: Install dependencies
> +      run: |
> +        sudo apt update
> +        sudo apt-get install -y podman
> +
> +    - name: Build ovn-fake-multi-node main image
> +      run: |
> +        set -x
> +        sudo -E ./ovn_cluster.sh build
> +        mkdir -p /tmp/_output
> +        sudo podman save ovn/ovn-multi-node:latest > /tmp/_output/ovn_main_image.tar
> +      working-directory: ovn-fake-multinode
> +
> +    - name: Checkout ovn branch-22.03
> +      uses: actions/checkout@v3
> +      with:
> +        path: 'ovn-fake-multinode/ovn'
> +        submodules: recursive
> +        ref: 'branch-22.03'
> +
> +    - name: Build ovn-fake-multi-node 22.03 image
> +      run: |
> +        set -x
> +        sudo -E ./ovn_cluster.sh build
> +        mkdir -p /tmp/_output
> +        sudo podman tag ovn/ovn-multi-node:latest ovn/ovn-multi-node:22.03
> +        sudo podman save ovn/ovn-multi-node:22.03 > /tmp/_output/ovn_22_03_image.tar
> +      working-directory: ovn-fake-multinode
> +
> +    - uses: actions/upload-artifact@v3
> +      with:
> +        name: test-main-image
> +        path: /tmp/_output/ovn_main_image.tar
> +
> +    - uses: actions/upload-artifact@v3
> +      with:
> +        name: test-22-03-image
> +        path: /tmp/_output/ovn_22_03_image.tar
> +
> +  multinode-tests:
> +    runs-on: ubuntu-20.04
> +    timeout-minutes: 15
> +    env:
> +      RUNC_CMD: podman
> +      OS_IMAGE: "fedora:37"
> +      CENTRAL_IMAGE: ${{ matrix.cfg.central_image }}
> +      # Disable SSL for now. Revisit this if required.
> +      ENABLE_SSL: no
> +      # https://github.com/actions/runner-images/issues/6282
> +      XDG_RUNTIME_DIR: ''
> +
> +    name: multinode tests ${{ join(matrix.cfg.*, ' ') }}
> +    needs: [build]
> +    strategy:
> +      fail-fast: false
> +      matrix:
> +        cfg:
> +        - { central_image: "ovn/ovn-multi-node:latest" }
> +        - { central_image: "ovn/ovn-multi-node:22.03" }
> +
> +    steps:
> +
> +    - name: Free up disk space
> +      run: sudo eatmydata apt-get remove --auto-remove -y aspnetcore-* dotnet-* libmono-* mono-* msbuild php-* php7* ghc-* zulu-*
> +
> +    - uses: actions/download-artifact@v3
> +      with:
> +        name: test-main-image
> +
> +    - uses: actions/download-artifact@v3
> +      with:
> +        name: test-22-03-image
> +
> +    - name: Load podman image
> +      run: |
> +        sudo podman load --input ovn_main_image.tar
> +        sudo podman load --input ovn_22_03_image.tar
> +
> +    - name: Check out ovn-fake-multi-node
> +      uses: actions/checkout@v3
> +      with:
> +        repository: 'ovn-org/ovn-fake-multinode'
> +        path: 'ovn-fake-multinode'
> +        ref: 'v0.1'
> +
> +    - name: Install dependencies
> +      run: |
> +        sudo apt update
> +        sudo apt-get install -y podman openvswitch-switch
> +        sudo systemctl start openvswitch-switch
> +        sudo ovs-vsctl show
> +
> +    - name: Start basic cluster
> +      run: |
> +        sudo -E ./ovn_cluster.sh start
> +        sudo podman exec -it ovn-central ovn-nbctl show
> +        sudo podman exec -it ovn-central ovn-appctl -t ovn-northd version
> +        sudo podman exec -it ovn-chassis-1 ovn-appctl -t ovn-controller version
> +      working-directory: ovn-fake-multinode
> +
> +    - name: Run basic test script
> +      run: |
> +        sudo ./.ci/test_basic.sh
> +      working-directory: ovn-fake-multinode
> +
> +    - name: Stop cluster
> +      run: |
> +        sudo -E ./ovn_cluster.sh stop
> +      working-directory: ovn-fake-multinode

Do we really need to stop the cluster? :)

> diff --git a/Makefile.am b/Makefile.am
> index 8c60d4a719..6d84888a29 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -95,6 +95,7 @@ EXTRA_DIST = \
>  	.ci/ovn-kubernetes/custom.patch \
>  	.github/workflows/test.yml \
>  	.github/workflows/ovn-kubernetes.yml \
> +	.github/workflows/ovn-fake-multinode-tests.yml \
>  	boot.sh \
>  	$(MAN_FRAGMENTS) \
>  	$(MAN_ROOTS) \
Numan Siddique May 3, 2023, 3:17 p.m. UTC | #4
On Thu, Mar 30, 2023 at 8:54 AM Dumitru Ceara <dceara@redhat.com> wrote:
>
> On 3/29/23 16:01, numans@ovn.org wrote:
> > From: Numan Siddique <numans@ovn.org>
> >
> > This patch adds a couple of jobs using ovn-fake-multinode.
> > It first builds 2 ovn-fake-multinode container images
> >   - one with OVN 22.03
> >   - one with present main.
> >
> > The first job deploys ovn-fake-multinode with the main
> > OVN and runs simple tests provided by ovn-fake-multinode [1].
> >
> > The second job deploys ovn-fake-multinode setup with the
> > central image using OVN 22.03 and chassis image using main OVN.
> > This job tests the scenario
> >   - ovn-northd and OVN dbs are running the most recent LTS.
> >   - ovn-controller is running the latest commit from the branch.
> >
> > The workflow is right now scheduled to trigger on midnight everyday.
> > Once we cache the built image or reduce the overall run time of
> > this workflow we can enable for every push.
> >
> > [1] - https://github.com/ovn-org/ovn-fake-multinode/blob/main/.ci/test_basic.sh
> >
> > Signed-off-by: Numan Siddique <numans@ovn.org>
> > ---
>
> I have a few minor comments, feel free to add my ack when you apply the
> patch if you address them:
>
> Acked-by: Dumitru Ceara <dceara@redhat.com>

Thanks Dumitru and Simon for the reviews.

It took a while for me to address the comments and apply.

I applied both the patches to the main branch with the below changes.

Also I had to add back the file .ci/linux-prepare.sh as the fake multi
node system tests would need to compile ovn.

I could have avoided that and instead  installed the
'linux-prepare.sh'  stuff in the workflow yaml file itself.
But I felt it easier to just add back the file.

Thanks
Numan



Patch 1
------------------

diff --git a/.github/workflows/ovn-fake-multinode-tests.yml
b/.github/workflows/ovn-fake-multinode-tests.yml
index fa768f235c..c5be7125e6 100644
--- a/.github/workflows/ovn-fake-multinode-tests.yml
+++ b/.github/workflows/ovn-fake-multinode-tests.yml
@@ -4,6 +4,7 @@ on:
   schedule:
     # Run everyday at midnight
     - cron: '0 0 * * *'
+  workflow_dispatch:

 concurrency:
   group: ${{ github.workflow }}-${{ github.event.pull_request.number
|| github.run_id }}
@@ -27,6 +28,9 @@ jobs:
         path: 'ovn-fake-multinode'
         ref: 'v0.1'

+    # Check out ovn and ovs separately inside ovn-fake-multinode/ovn
and ovn-fake-multinode/ovs
+    # ovn-fake-multinode builds and installs ovs from ovn-fake-multinode/ovs
+    # and it builds and installs ovn from ovn-fake-multinode/ovn. It
uses the ovs submodule for ovn compilation.
     - name: Check out ovn
       uses: actions/checkout@v3
       with:


Patch 2
------------------

diff --git a/.github/workflows/ovn-fake-multinode-tests.yml
b/.github/workflows/ovn-fake-multinode-tests.yml
index e79f68c226..015e5ac507 100644
--- a/.github/workflows/ovn-fake-multinode-tests.yml
+++ b/.github/workflows/ovn-fake-multinode-tests.yml
@@ -194,12 +194,7 @@ jobs:
         # files and we could have some socket files in testsuite.dir.
         # Also, upload-artifact@v3 doesn't work well enough with wildcards.
         # So, we're just archiving everything here to avoid any issues.
-        pwd
-        ls -l
         mkdir logs
-        ls -l ovn/
-        ls -l ovn/tests/
-
         cp ovn/config.log ./logs/
         # multinode tests are run as root, need to adjust permissions.
         sudo chmod -R +r ovn/tests/multinode-testsuite.dir.* || true
diff --git a/tests/multinode-macros.at b/tests/multinode-macros.at
index 1525442804..c04506a52a 100644
--- a/tests/multinode-macros.at
+++ b/tests/multinode-macros.at
@@ -50,7 +50,7 @@ multinode_nbctl () {
     m_as ovn-central ovn-nbctl "$@"
 }

-# count_rows TABLE [CONDITION...]
+# m_count_rows TABLE [CONDITION...]
 #
 # Prints the number of rows in TABLE (that satisfy CONDITION).
 # Uses the southbound db by default; set DB=nb for the northbound database.
@@ -59,7 +59,7 @@ m_count_rows() {
     m_central_as ovn-${db}ctl --format=table --no-headings find
$table "$@" | wc -l
 }

-# check_row_count [DATABASE:]TABLE COUNT [CONDITION...]
+# m_check_row_count [DATABASE:]TABLE COUNT [CONDITION...]
 #
 # Checks that TABLE contains COUNT rows (that satisfy CONDITION).
 # The default DATABASE is "sb".
@@ -75,7 +75,7 @@ m_check_row_count() {
     fi
 }

-# wait_row_count [DATABASE:]TABLE COUNT [CONDITION...]
+# m_wait_row_count [DATABASE:]TABLE COUNT [CONDITION...]
 #
 # Waits until TABLE contains COUNT rows (that satisfy CONDITION).
 # The default DATABASE is "sb".
@@ -89,7 +89,7 @@ m_wait_row_count() {
       m_central_as ovn-${db}ctl list $table])
 }

-# multinode_wait_column EXPECTED [DATABASE:]TABLE [COLUMN [CONDITION...]]
+# m_wait_column EXPECTED [DATABASE:]TABLE [COLUMN [CONDITION...]]
 #
 # Wait until all of the values of COLUMN in the rows of TABLE (that
 # satisfy CONDITION) equal EXPECTED (ignoring order).
@@ -113,7 +113,7 @@ m_wait_column() {
       m_central_as ovn-${db}ctl list $table])
 }

-# fetch_column [DATABASE:]TABLE COLUMN [CONDITION...]
+# m_fetch_column [DATABASE:]TABLE COLUMN [CONDITION...]
 #
 # Fetches and prints all the values of COLUMN in the rows of TABLE
 # (that satisfy CONDITION), sorting the results lexicographically.
@@ -124,7 +124,7 @@ m_fetch_column() {
     echo $(m_central_as ovn-${db}ctl --bare --columns $column find
$table "$@" | sort)
 }

-# check_column EXPECTED [DATABASE:]TABLE COLUMN [CONDITION...]
+# m_check_column EXPECTED [DATABASE:]TABLE COLUMN [CONDITION...]
 #
 # Fetches all of the values of COLUMN in the rows of TABLE (that
 # satisfy CONDITION), and compares them against EXPECTED (ignoring
@@ -147,31 +147,7 @@ m_check_column() {
     fi
 }

-# wait_column EXPECTED [DATABASE:]TABLE [COLUMN [CONDITION...]]
-#
-# Wait until all of the values of COLUMN in the rows of TABLE (that
-# satisfy CONDITION) equal EXPECTED (ignoring order).
-#
-# The default DATABASE is "sb".
-#
-# COLUMN defaults to _uuid if unspecified.
-m_wait_column() {
-    local expected=$(for d in $1; do echo $d; done | sort)
-    local db=$(parse_db $2) table=$(parse_table $2)
column=${3-_uuid}; shift; shift; shift
-    local a=$1 b=$2 c=$3 d=$4 e=$5
-
-    echo
-    echo "Waiting until $column in $db $table${1+ with $*} is $expected..."
-    OVS_WAIT_UNTIL([
-      found=$(m_central_as ovn-${db}ctl --bare --columns $column find
$table $a $b $c $d $e)
-      found=$(for d in $found; do echo $d; done | sort)
-      test "$expected" = "$found"
-    ], [
-      echo "$column in $db table $table has value $found, from the
following rows:"
-      m_central_as ovn-${db}ctl list $table])
-}
-
-# wait_for_ports_up [PORT...]
+# m_wait_for_ports_up [PORT...]
 #
 # With arguments, waits for specified Logical_Switch_Ports to come up.
 # Without arguments, waits for all "plain" and router



>
> Thanks,
> Dumitru
>
> >  .../workflows/ovn-fake-multinode-tests.yml    | 151 ++++++++++++++++++
> >  Makefile.am                                   |   1 +
> >  2 files changed, 152 insertions(+)
> >  create mode 100644 .github/workflows/ovn-fake-multinode-tests.yml
> >
> > diff --git a/.github/workflows/ovn-fake-multinode-tests.yml b/.github/workflows/ovn-fake-multinode-tests.yml
> > new file mode 100644
> > index 0000000000..fa768f235c
> > --- /dev/null
> > +++ b/.github/workflows/ovn-fake-multinode-tests.yml
> > @@ -0,0 +1,151 @@
> > +name: System tests using ovn-fake-multinode
> > +
> > +on:
>
> It might be good also add:
>
>   workflow_dispatch:
>
> So we can run the workflow on demand as well.
>
> > +  schedule:
> > +    # Run everyday at midnight
> > +    - cron: '0 0 * * *'
> > +
> > +concurrency:
> > +  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
> > +  cancel-in-progress: true
> > +
> > +jobs:
> > +  build:
> > +    env:
> > +      RUNC_CMD: podman
> > +      OS_IMAGE: "fedora:37"
> > +      # https://github.com/actions/runner-images/issues/6282
> > +      XDG_RUNTIME_DIR: ''
> > +
> > +    name: Build ovn-fake-multinode image
> > +    runs-on: ubuntu-20.04
> > +    steps:
> > +    - name: Check out ovn-fake-multi-node
> > +      uses: actions/checkout@v3
> > +      with:
> > +        repository: 'ovn-org/ovn-fake-multinode'
> > +        path: 'ovn-fake-multinode'
> > +        ref: 'v0.1'
> > +
> > +    - name: Check out ovn
> > +      uses: actions/checkout@v3
> > +      with:
> > +        path: 'ovn-fake-multinode/ovn'
> > +        submodules: recursive
> > +
> > +    - name: Check out ovs master
> > +      uses: actions/checkout@v3
> > +      with:
> > +        path: 'ovn-fake-multinode/ovs'
> > +        repository: 'openvswitch/ovs'
> > +        ref: 'master'
>
> This works fine because ovn-fake-multinode builds OVN against the
> version checked out in the submodule.  But it might not be obvious.
> Shall we add a comment before these two steps?
>
> > +
> > +    - name: Install dependencies
> > +      run: |
> > +        sudo apt update
> > +        sudo apt-get install -y podman
> > +
> > +    - name: Build ovn-fake-multi-node main image
> > +      run: |
> > +        set -x
> > +        sudo -E ./ovn_cluster.sh build
> > +        mkdir -p /tmp/_output
> > +        sudo podman save ovn/ovn-multi-node:latest > /tmp/_output/ovn_main_image.tar
> > +      working-directory: ovn-fake-multinode
> > +
> > +    - name: Checkout ovn branch-22.03
> > +      uses: actions/checkout@v3
> > +      with:
> > +        path: 'ovn-fake-multinode/ovn'
> > +        submodules: recursive
> > +        ref: 'branch-22.03'
> > +
> > +    - name: Build ovn-fake-multi-node 22.03 image
> > +      run: |
> > +        set -x
> > +        sudo -E ./ovn_cluster.sh build
> > +        mkdir -p /tmp/_output
> > +        sudo podman tag ovn/ovn-multi-node:latest ovn/ovn-multi-node:22.03
> > +        sudo podman save ovn/ovn-multi-node:22.03 > /tmp/_output/ovn_22_03_image.tar
> > +      working-directory: ovn-fake-multinode
> > +
> > +    - uses: actions/upload-artifact@v3
> > +      with:
> > +        name: test-main-image
> > +        path: /tmp/_output/ovn_main_image.tar
> > +
> > +    - uses: actions/upload-artifact@v3
> > +      with:
> > +        name: test-22-03-image
> > +        path: /tmp/_output/ovn_22_03_image.tar
> > +
> > +  multinode-tests:
> > +    runs-on: ubuntu-20.04
> > +    timeout-minutes: 15
> > +    env:
> > +      RUNC_CMD: podman
> > +      OS_IMAGE: "fedora:37"
> > +      CENTRAL_IMAGE: ${{ matrix.cfg.central_image }}
> > +      # Disable SSL for now. Revisit this if required.
> > +      ENABLE_SSL: no
> > +      # https://github.com/actions/runner-images/issues/6282
> > +      XDG_RUNTIME_DIR: ''
> > +
> > +    name: multinode tests ${{ join(matrix.cfg.*, ' ') }}
> > +    needs: [build]
> > +    strategy:
> > +      fail-fast: false
> > +      matrix:
> > +        cfg:
> > +        - { central_image: "ovn/ovn-multi-node:latest" }
> > +        - { central_image: "ovn/ovn-multi-node:22.03" }
> > +
> > +    steps:
> > +
> > +    - name: Free up disk space
> > +      run: sudo eatmydata apt-get remove --auto-remove -y aspnetcore-* dotnet-* libmono-* mono-* msbuild php-* php7* ghc-* zulu-*
> > +
> > +    - uses: actions/download-artifact@v3
> > +      with:
> > +        name: test-main-image
> > +
> > +    - uses: actions/download-artifact@v3
> > +      with:
> > +        name: test-22-03-image
> > +
> > +    - name: Load podman image
> > +      run: |
> > +        sudo podman load --input ovn_main_image.tar
> > +        sudo podman load --input ovn_22_03_image.tar
> > +
> > +    - name: Check out ovn-fake-multi-node
> > +      uses: actions/checkout@v3
> > +      with:
> > +        repository: 'ovn-org/ovn-fake-multinode'
> > +        path: 'ovn-fake-multinode'
> > +        ref: 'v0.1'
> > +
> > +    - name: Install dependencies
> > +      run: |
> > +        sudo apt update
> > +        sudo apt-get install -y podman openvswitch-switch
> > +        sudo systemctl start openvswitch-switch
> > +        sudo ovs-vsctl show
> > +
> > +    - name: Start basic cluster
> > +      run: |
> > +        sudo -E ./ovn_cluster.sh start
> > +        sudo podman exec -it ovn-central ovn-nbctl show
> > +        sudo podman exec -it ovn-central ovn-appctl -t ovn-northd version
> > +        sudo podman exec -it ovn-chassis-1 ovn-appctl -t ovn-controller version
> > +      working-directory: ovn-fake-multinode
> > +
> > +    - name: Run basic test script
> > +      run: |
> > +        sudo ./.ci/test_basic.sh
> > +      working-directory: ovn-fake-multinode
> > +
> > +    - name: Stop cluster
> > +      run: |
> > +        sudo -E ./ovn_cluster.sh stop
> > +      working-directory: ovn-fake-multinode
>
> Do we really need to stop the cluster? :)
>
> > diff --git a/Makefile.am b/Makefile.am
> > index 8c60d4a719..6d84888a29 100644
> > --- a/Makefile.am
> > +++ b/Makefile.am
> > @@ -95,6 +95,7 @@ EXTRA_DIST = \
> >       .ci/ovn-kubernetes/custom.patch \
> >       .github/workflows/test.yml \
> >       .github/workflows/ovn-kubernetes.yml \
> > +     .github/workflows/ovn-fake-multinode-tests.yml \
> >       boot.sh \
> >       $(MAN_FRAGMENTS) \
> >       $(MAN_ROOTS) \
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
Dumitru Ceara May 5, 2023, 9:26 a.m. UTC | #5
On 5/3/23 17:17, Numan Siddique wrote:
> On Thu, Mar 30, 2023 at 8:54 AM Dumitru Ceara <dceara@redhat.com> wrote:
>>
>> On 3/29/23 16:01, numans@ovn.org wrote:
>>> From: Numan Siddique <numans@ovn.org>
>>>
>>> This patch adds a couple of jobs using ovn-fake-multinode.
>>> It first builds 2 ovn-fake-multinode container images
>>>   - one with OVN 22.03
>>>   - one with present main.
>>>
>>> The first job deploys ovn-fake-multinode with the main
>>> OVN and runs simple tests provided by ovn-fake-multinode [1].
>>>
>>> The second job deploys ovn-fake-multinode setup with the
>>> central image using OVN 22.03 and chassis image using main OVN.
>>> This job tests the scenario
>>>   - ovn-northd and OVN dbs are running the most recent LTS.
>>>   - ovn-controller is running the latest commit from the branch.
>>>
>>> The workflow is right now scheduled to trigger on midnight everyday.
>>> Once we cache the built image or reduce the overall run time of
>>> this workflow we can enable for every push.
>>>
>>> [1] - https://github.com/ovn-org/ovn-fake-multinode/blob/main/.ci/test_basic.sh
>>>
>>> Signed-off-by: Numan Siddique <numans@ovn.org>
>>> ---
>>
>> I have a few minor comments, feel free to add my ack when you apply the
>> patch if you address them:
>>
>> Acked-by: Dumitru Ceara <dceara@redhat.com>
> 
> Thanks Dumitru and Simon for the reviews.
> 
> It took a while for me to address the comments and apply.
> 
> I applied both the patches to the main branch with the below changes.

Hi Numan,

Thanks for applying the patch but I have a comment regarding re-adding
.ci/linux-prepare.sh.

> 
> Also I had to add back the file .ci/linux-prepare.sh as the fake multi
> node system tests would need to compile ovn.
> 
> I could have avoided that and instead  installed the
> 'linux-prepare.sh'  stuff in the workflow yaml file itself.
> But I felt it easier to just add back the file.
> 

I don't really think we need this.  The "proper" way IMO is to run this
from a container that uses the pre-built
ghcr.io/ovn-org/ovn-tests:ubuntu image.  We build this one weekly and it
should have all required dependencies.  But I failed while trying to do
that so instead I went for skipping sparse for the build that's used for
running the tests.  We don't care about sparse in that case anyway.

In the process, I also spotted a few bugs and some improvement
opportunities.  I posted a patch series here:

https://patchwork.ozlabs.org/project/ovn/list/?series=353636&state=*

Please let me know what you think!

Regards,
Dumitru
diff mbox series

Patch

diff --git a/.github/workflows/ovn-fake-multinode-tests.yml b/.github/workflows/ovn-fake-multinode-tests.yml
new file mode 100644
index 0000000000..fa768f235c
--- /dev/null
+++ b/.github/workflows/ovn-fake-multinode-tests.yml
@@ -0,0 +1,151 @@ 
+name: System tests using ovn-fake-multinode
+
+on:
+  schedule:
+    # Run everyday at midnight
+    - cron: '0 0 * * *'
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
+  cancel-in-progress: true
+
+jobs:
+  build:
+    env:
+      RUNC_CMD: podman
+      OS_IMAGE: "fedora:37"
+      # https://github.com/actions/runner-images/issues/6282
+      XDG_RUNTIME_DIR: ''
+
+    name: Build ovn-fake-multinode image
+    runs-on: ubuntu-20.04
+    steps:
+    - name: Check out ovn-fake-multi-node
+      uses: actions/checkout@v3
+      with:
+        repository: 'ovn-org/ovn-fake-multinode'
+        path: 'ovn-fake-multinode'
+        ref: 'v0.1'
+
+    - name: Check out ovn
+      uses: actions/checkout@v3
+      with:
+        path: 'ovn-fake-multinode/ovn'
+        submodules: recursive
+
+    - name: Check out ovs master
+      uses: actions/checkout@v3
+      with:
+        path: 'ovn-fake-multinode/ovs'
+        repository: 'openvswitch/ovs'
+        ref: 'master'
+
+    - name: Install dependencies
+      run: |
+        sudo apt update
+        sudo apt-get install -y podman
+
+    - name: Build ovn-fake-multi-node main image
+      run: |
+        set -x
+        sudo -E ./ovn_cluster.sh build
+        mkdir -p /tmp/_output
+        sudo podman save ovn/ovn-multi-node:latest > /tmp/_output/ovn_main_image.tar
+      working-directory: ovn-fake-multinode
+
+    - name: Checkout ovn branch-22.03
+      uses: actions/checkout@v3
+      with:
+        path: 'ovn-fake-multinode/ovn'
+        submodules: recursive
+        ref: 'branch-22.03'
+
+    - name: Build ovn-fake-multi-node 22.03 image
+      run: |
+        set -x
+        sudo -E ./ovn_cluster.sh build
+        mkdir -p /tmp/_output
+        sudo podman tag ovn/ovn-multi-node:latest ovn/ovn-multi-node:22.03
+        sudo podman save ovn/ovn-multi-node:22.03 > /tmp/_output/ovn_22_03_image.tar
+      working-directory: ovn-fake-multinode
+
+    - uses: actions/upload-artifact@v3
+      with:
+        name: test-main-image
+        path: /tmp/_output/ovn_main_image.tar
+
+    - uses: actions/upload-artifact@v3
+      with:
+        name: test-22-03-image
+        path: /tmp/_output/ovn_22_03_image.tar
+
+  multinode-tests:
+    runs-on: ubuntu-20.04
+    timeout-minutes: 15
+    env:
+      RUNC_CMD: podman
+      OS_IMAGE: "fedora:37"
+      CENTRAL_IMAGE: ${{ matrix.cfg.central_image }}
+      # Disable SSL for now. Revisit this if required.
+      ENABLE_SSL: no
+      # https://github.com/actions/runner-images/issues/6282
+      XDG_RUNTIME_DIR: ''
+
+    name: multinode tests ${{ join(matrix.cfg.*, ' ') }}
+    needs: [build]
+    strategy:
+      fail-fast: false
+      matrix:
+        cfg:
+        - { central_image: "ovn/ovn-multi-node:latest" }
+        - { central_image: "ovn/ovn-multi-node:22.03" }
+
+    steps:
+
+    - name: Free up disk space
+      run: sudo eatmydata apt-get remove --auto-remove -y aspnetcore-* dotnet-* libmono-* mono-* msbuild php-* php7* ghc-* zulu-*
+
+    - uses: actions/download-artifact@v3
+      with:
+        name: test-main-image
+
+    - uses: actions/download-artifact@v3
+      with:
+        name: test-22-03-image
+
+    - name: Load podman image
+      run: |
+        sudo podman load --input ovn_main_image.tar
+        sudo podman load --input ovn_22_03_image.tar
+
+    - name: Check out ovn-fake-multi-node
+      uses: actions/checkout@v3
+      with:
+        repository: 'ovn-org/ovn-fake-multinode'
+        path: 'ovn-fake-multinode'
+        ref: 'v0.1'
+
+    - name: Install dependencies
+      run: |
+        sudo apt update
+        sudo apt-get install -y podman openvswitch-switch
+        sudo systemctl start openvswitch-switch
+        sudo ovs-vsctl show
+
+    - name: Start basic cluster
+      run: |
+        sudo -E ./ovn_cluster.sh start
+        sudo podman exec -it ovn-central ovn-nbctl show
+        sudo podman exec -it ovn-central ovn-appctl -t ovn-northd version
+        sudo podman exec -it ovn-chassis-1 ovn-appctl -t ovn-controller version
+      working-directory: ovn-fake-multinode
+
+    - name: Run basic test script
+      run: |
+        sudo ./.ci/test_basic.sh
+      working-directory: ovn-fake-multinode
+
+    - name: Stop cluster
+      run: |
+        sudo -E ./ovn_cluster.sh stop
+      working-directory: ovn-fake-multinode
diff --git a/Makefile.am b/Makefile.am
index 8c60d4a719..6d84888a29 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -95,6 +95,7 @@  EXTRA_DIST = \
 	.ci/ovn-kubernetes/custom.patch \
 	.github/workflows/test.yml \
 	.github/workflows/ovn-kubernetes.yml \
+	.github/workflows/ovn-fake-multinode-tests.yml \
 	boot.sh \
 	$(MAN_FRAGMENTS) \
 	$(MAN_ROOTS) \