From 3c9360bd5f92fdd30bb2ceb40923df12549bc49c Mon Sep 17 00:00:00 2001 From: ChocoLZS Date: Tue, 13 May 2025 06:16:52 +0000 Subject: [PATCH 1/4] feat: os-ken docker build --- .github/.workflow.yaml | 79 +++++++++++++++++++++++++++++++++++++++++ docker/Dockerfile.osken | 41 +++++++++++++++++++++ docker/osken-bgp.patch | 19 ++++++++++ 3 files changed, 139 insertions(+) create mode 100644 .github/.workflow.yaml create mode 100644 docker/Dockerfile.osken create mode 100644 docker/osken-bgp.patch diff --git a/.github/.workflow.yaml b/.github/.workflow.yaml new file mode 100644 index 0000000..d96e18b --- /dev/null +++ b/.github/.workflow.yaml @@ -0,0 +1,79 @@ +name: Create and publish Docker images + +on: + push: + branches: ["main", "dev"] + workflow_dispatch: + pull_request: + types: [opened, synchronize, reopened] + +# Defines custom environment variables for the workflow +env: + REGISTRY: ghcr.io + REPO_NAME: ${{ github.repository }} + CURRENT_BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + +jobs: + build-and-push-images: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + docker_config: + - dockerfile: docker/Dockerfile.osken + image_suffix: osken + platform: + - linux/amd64 + + permissions: + contents: read + packages: write + attestations: write + id-token: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Determine Tag or Branch Type + id: tag_or_branch_check + run: | + BRANCH_NAME=$(echo "$CURRENT_BRANCH_NAME" | sed 's|/|_|g') + if [[ ${BRANCH_NAME} == main ]]; then + echo "TAG_NAME=latest" >> $GITHUB_ENV + elif [[ ${BRANCH_NAME} == dev ]]; then + echo "TAG_NAME=canary" >> $GITHUB_ENV + else + echo "TAG_NAME=canary-${BRANCH_NAME}" >> $GITHUB_ENV + fi + + - name: Set image name with suffix + id: image_name + run: | + IMAGE_NAME="${REPO_NAME}-${{ matrix.docker_config.image_suffix }}" + echo "FULL_IMAGE_NAME=${IMAGE_NAME}" >> $GITHUB_ENV + echo "Image name set to: ${IMAGE_NAME}" + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.FULL_IMAGE_NAME }} + tags: ${{ env.TAG_NAME }} + + - name: Build and push Docker image + id: push + uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 + with: + context: docker/. + file: ${{ matrix.docker_config.dockerfile }} + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/docker/Dockerfile.osken b/docker/Dockerfile.osken new file mode 100644 index 0000000..ad6a887 --- /dev/null +++ b/docker/Dockerfile.osken @@ -0,0 +1,41 @@ +FROM python:3.11-slim as prepare + +RUN apt update && \ + apt install -y --no-install-recommends \ + git + +WORKDIR /app + +RUN git clone https://github.com/openstack/os-ken.git && \ + cd os-ken && \ + git checkout 3.0.1 + +FROM python:3.11-slim as runner + +WORKDIR /app + +COPY --from=prepare /app/os-ken /app/os-ken + +ADD ./osken-bgp.patch . + +# 安装构建依赖 +RUN apt update && \ + apt install -y --no-install-recommends \ + git patch && \ + pip install --upgrade pip && \ + pip install pbr paramiko && \ + cd /app/os-ken && \ + patch -p1 < /app/osken-bgp.patch && \ + pip install . + +# 清理 +RUN rm -rf /app/os-ken && \ + apt remove -y git patch && \ + apt autoremove -y && \ + apt clean + +RUN apt update \ + && apt install -y --no-install-recommends \ + iproute2 iputils-ping openssh-client + +CMD ["bash"] diff --git a/docker/osken-bgp.patch b/docker/osken-bgp.patch new file mode 100644 index 0000000..0019931 --- /dev/null +++ b/docker/osken-bgp.patch @@ -0,0 +1,19 @@ +--- a/os_ken/services/protocols/bgp/operator/ssh.py ++++ b/os_ken/services/protocols/bgp/operator/ssh.py +@@ -25,7 +25,6 @@ + + import paramiko + +-from os_ken import version + from os_ken.lib import hub + from os_ken.services.protocols.bgp.base import Activity + from os_ken.services.protocols.bgp.operator.command import Command +@@ -59,7 +58,7 @@ + class SshServer(paramiko.ServerInterface): + TERM = "ansi" + PROMPT = "bgpd> " +- WELCOME = "\n\rHello, this is OSKen BGP speaker (version %s).\n\r" % version ++ WELCOME = "\n\rHello, this is OSKen BGP speaker.\n\r" + + class HelpCmd(Command): + help_msg = 'show this help' \ No newline at end of file From c25512a800b5c466df929d44aee85de8c99aecc8 Mon Sep 17 00:00:00 2001 From: ChocoLZS Date: Tue, 13 May 2025 06:19:37 +0000 Subject: [PATCH 2/4] chore: rename --- .github/{.workflow.yaml => workflows/docker.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{.workflow.yaml => workflows/docker.yaml} (100%) diff --git a/.github/.workflow.yaml b/.github/workflows/docker.yaml similarity index 100% rename from .github/.workflow.yaml rename to .github/workflows/docker.yaml From 155dcfc2df41629f7a1ffd0a534c768cffd74522 Mon Sep 17 00:00:00 2001 From: ChocoLZS Date: Tue, 13 May 2025 06:34:56 +0000 Subject: [PATCH 3/4] doc: readme --- .github/workflows/docker.yaml | 2 +- README.md | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index d96e18b..ff13334 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -10,7 +10,7 @@ on: # Defines custom environment variables for the workflow env: REGISTRY: ghcr.io - REPO_NAME: ${{ github.repository }} + REPO_NAME: bgp-infra CURRENT_BRANCH_NAME: ${{ github.head_ref || github.ref_name }} jobs: diff --git a/README.md b/README.md index 17a5f5e..9a24c3c 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ | containerlab | https://containerlab.dev/ | 为docker搭建网络拓扑的工具(yaml配置文件) | | containernet | https://containernet.github.io/ | 支持sdn/docker的网络拓扑搭建工具(python代码实现) | | ryu | https://ryu-sdn.org/ | python实现的sdn控制器,支持bgp | +| os-ken | https://github.com/openstack/os-ken/ | python实现的sdn控制器,支持bgp, 为ryu的后续维护版本 | @@ -65,6 +66,21 @@
+## os-ken 容器 + +### 1. 拉取镜像 + +```bash +docker pull ghcr.io/code-with-bgp-xd/bgp-infra-osken:latest +``` + +### 2. 与containerlab配合使用 + +在本机安装好containerlab的情况下 + +参考 https://github.com/code-with-bgp-XD/frr-utilities/blob/main/ryu-bgpspeaker/os-ken/p2p/osken.clab.yaml + + ## sdn+ovs ### 1. clone 本仓库 From a17013fbee4dacfef4676b07d605a3c4ea6dc8a7 Mon Sep 17 00:00:00 2001 From: ChocoLZS Date: Tue, 13 May 2025 06:40:49 +0000 Subject: [PATCH 4/4] fix: image name --- .github/workflows/docker.yaml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index ff13334..d96e18b 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -10,7 +10,7 @@ on: # Defines custom environment variables for the workflow env: REGISTRY: ghcr.io - REPO_NAME: bgp-infra + REPO_NAME: ${{ github.repository }} CURRENT_BRANCH_NAME: ${{ github.head_ref || github.ref_name }} jobs: diff --git a/README.md b/README.md index 9a24c3c..59bc691 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ ### 1. 拉取镜像 ```bash -docker pull ghcr.io/code-with-bgp-xd/bgp-infra-osken:latest +docker pull ghcr.io/code-with-bgp-xd/infrastructure-osken:latest ``` ### 2. 与containerlab配合使用