summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/add-pr-labels.yml (renamed from .github/workflows/pull-request-labels.yml)9
-rw-r--r--.github/workflows/auto-author-assign.yml9
-rw-r--r--.github/workflows/chceck-pr-message.yml14
-rw-r--r--.github/workflows/check-pr-conflicts.yml13
-rw-r--r--.github/workflows/check-stale.yml9
-rw-r--r--.github/workflows/check-unused-imports.yml11
-rw-r--r--.github/workflows/codeql.yml13
-rw-r--r--.github/workflows/label-backport.yml8
-rw-r--r--.github/workflows/linit-j2.yml14
-rw-r--r--.github/workflows/mergifyio_backport.yml22
-rw-r--r--.github/workflows/pr-conflicts.yml18
-rw-r--r--.github/workflows/pull-request-management.yml25
-rw-r--r--.github/workflows/pull-request-message-check.yml23
-rw-r--r--.github/workflows/stale.yml22
-rw-r--r--.github/workflows/unused-imports.yml22
-rw-r--r--interface-definitions/container.xml.in8
-rw-r--r--python/vyos/system/image.py10
-rw-r--r--python/vyos/version.py4
-rwxr-xr-xscripts/check-pr-title-and-commit-messages.py51
-rw-r--r--smoketest/config-tests/container-simple1
-rw-r--r--smoketest/configs/container-simple1
-rwxr-xr-xsrc/conf_mode/container.py11
-rwxr-xr-xsrc/op_mode/nat.py2
23 files changed, 98 insertions, 222 deletions
diff --git a/.github/workflows/pull-request-labels.yml b/.github/workflows/add-pr-labels.yml
index 43856beaa..78d619f4a 100644
--- a/.github/workflows/pull-request-labels.yml
+++ b/.github/workflows/add-pr-labels.yml
@@ -11,10 +11,5 @@ on:
jobs:
add-pr-label:
- name: Add PR Labels
- runs-on: ubuntu-latest
- permissions:
- contents: read
- pull-requests: write
- steps:
- - uses: actions/labeler@v5
+ uses: vyos/.github/.github/workflows/add-pr-labels.yml@feature/T6349-reusable-workflows
+ secrets: inherit
diff --git a/.github/workflows/auto-author-assign.yml b/.github/workflows/auto-author-assign.yml
index 0bfe972c0..1f69f4807 100644
--- a/.github/workflows/auto-author-assign.yml
+++ b/.github/workflows/auto-author-assign.yml
@@ -7,11 +7,6 @@ permissions:
pull-requests: write
jobs:
- # https://github.com/marketplace/actions/auto-author-assign
assign-author:
- runs-on: ubuntu-latest
- steps:
- - name: "Assign Author to PR"
- uses: toshimaru/auto-author-assign@v1.6.2
- with:
- repo-token: ${{ secrets.GITHUB_TOKEN }}
+ uses: vyos/.github/.github/workflows/assign-author.yml@feature/T6349-reusable-workflows
+ secrets: inherit
diff --git a/.github/workflows/chceck-pr-message.yml b/.github/workflows/chceck-pr-message.yml
new file mode 100644
index 000000000..95c5b69ce
--- /dev/null
+++ b/.github/workflows/chceck-pr-message.yml
@@ -0,0 +1,14 @@
+---
+name: Check pull request message format
+
+on:
+ pull_request:
+ branches:
+ - current
+ - crux
+ - equuleus
+
+jobs:
+ check-pr-title:
+ uses: vyos/.github/.github/workflows/check-pr-message.yml@feature/T6349-reusable-workflows
+ secrets: inherit
diff --git a/.github/workflows/check-pr-conflicts.yml b/.github/workflows/check-pr-conflicts.yml
new file mode 100644
index 000000000..62a37a7fa
--- /dev/null
+++ b/.github/workflows/check-pr-conflicts.yml
@@ -0,0 +1,13 @@
+
+name: "PR Conflicts checker"
+on:
+ pull_request_target:
+ types: [synchronize]
+
+permissions:
+ pull-requests: write
+
+jobs:
+ check-pr-conflict-call:
+ uses: vyos/.github/.github/workflows/check-pr-merge-conflict.yml@feature/T6349-reusable-workflows
+ secrets: inherit
diff --git a/.github/workflows/check-stale.yml b/.github/workflows/check-stale.yml
new file mode 100644
index 000000000..0b88acdb7
--- /dev/null
+++ b/.github/workflows/check-stale.yml
@@ -0,0 +1,9 @@
+name: "Issue and PR stale management"
+on:
+ schedule:
+ - cron: "0 0 * * *"
+
+jobs:
+ stale:
+ uses: vyos/.github/.github/workflows/check-stale.yml@feature/T6349-reusable-workflows
+ secrets: inherit
diff --git a/.github/workflows/check-unused-imports.yml b/.github/workflows/check-unused-imports.yml
new file mode 100644
index 000000000..468543d6e
--- /dev/null
+++ b/.github/workflows/check-unused-imports.yml
@@ -0,0 +1,11 @@
+name: Check for unused imports using Pylint
+on:
+ pull_request_target:
+ branches:
+ - current
+ - sagitta
+
+jobs:
+ Check-Unused-Imports:
+ uses: vyos/.github/.github/workflows/check-unused-imports.yml@feature/T6349-reusable-workflows
+ secrets: inherit
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 9e2e4bf0f..f6472784d 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -1,14 +1,3 @@
-# For most projects, this workflow file will not need changing; you simply need
-# to commit it to your repository.
-#
-# You may wish to alter this file to override the set of languages analyzed,
-# or to provide custom queries or build logic.
-#
-# ******** NOTE ********
-# We have attempted to detect the languages in your repository. Please check
-# the `language` matrix defined below to confirm you have the correct set of
-# supported CodeQL languages.
-#
name: "Perform CodeQL Analysis"
on:
@@ -27,7 +16,7 @@ permissions:
jobs:
codeql-analysis-call:
- uses: vyos/vyos-github-actions/.github/workflows/codeql-analysis.yml@current
+ uses: vyos/.github/.github/workflows/codeql-analysis.yml@feature/T6349-reusable-workflows
secrets: inherit
with:
languages: "['python']"
diff --git a/.github/workflows/label-backport.yml b/.github/workflows/label-backport.yml
new file mode 100644
index 000000000..581363eb1
--- /dev/null
+++ b/.github/workflows/label-backport.yml
@@ -0,0 +1,8 @@
+name: Mergifyio backport
+
+on: [issue_comment]
+
+jobs:
+ mergifyio_backport:
+ uses: vyos/.github/.github/workflows/label-backport.yml@feature/T6349-reusable-workflows
+ secrets: inherit
diff --git a/.github/workflows/linit-j2.yml b/.github/workflows/linit-j2.yml
new file mode 100644
index 000000000..093fe7ffe
--- /dev/null
+++ b/.github/workflows/linit-j2.yml
@@ -0,0 +1,14 @@
+---
+name: J2 Lint
+
+on:
+ pull_request:
+ branches:
+ - current
+ - crux
+ - equuleus
+
+jobs:
+ j2lint:
+ uses: vyos/.github/.github/workflows/lint-j2.yml@feature/T6349-reusable-workflows
+ secrets: inherit
diff --git a/.github/workflows/mergifyio_backport.yml b/.github/workflows/mergifyio_backport.yml
deleted file mode 100644
index d9f863d9a..000000000
--- a/.github/workflows/mergifyio_backport.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-name: Mergifyio backport
-
-on: [issue_comment]
-
-jobs:
- mergifyio_backport:
- if: github.repository == 'vyos/vyos-1x'
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
-
- - uses: actions-ecosystem/action-regex-match@v2
- id: regex-match
- with:
- text: ${{ github.event.comment.body }}
- regex: '@[Mm][Ee][Rr][Gg][Ii][Ff][Yy][Ii][Oo] backport '
-
- - uses: actions-ecosystem/action-add-labels@v1
- if: ${{ steps.regex-match.outputs.match != '' }}
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- labels: backport
diff --git a/.github/workflows/pr-conflicts.yml b/.github/workflows/pr-conflicts.yml
deleted file mode 100644
index 2fd0bb42d..000000000
--- a/.github/workflows/pr-conflicts.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-name: "PR Conflicts checker"
-on:
- pull_request_target:
- types: [synchronize]
-
-jobs:
- Conflict_Check:
- name: 'Check PR status: conflicts and resolution'
- runs-on: ubuntu-latest
- steps:
- - name: check if PRs are dirty
- uses: eps1lon/actions-label-merge-conflict@v3
- with:
- dirtyLabel: "state: conflict"
- removeOnDirtyLabel: "state: conflict resolved"
- repoToken: "${{ secrets.GITHUB_TOKEN }}"
- commentOnDirty: "This pull request has conflicts, please resolve those before we can evaluate the pull request."
- commentOnClean: "Conflicts have been resolved. A maintainer will review the pull request shortly."
diff --git a/.github/workflows/pull-request-management.yml b/.github/workflows/pull-request-management.yml
deleted file mode 100644
index 3a855c107..000000000
--- a/.github/workflows/pull-request-management.yml
+++ /dev/null
@@ -1,25 +0,0 @@
----
-name: Build Pull Request Package
-
-on:
- pull_request:
- branches:
- - current
- - crux
- - equuleus
-
-jobs:
- j2lint:
- name: Validate j2 files
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v2
- timeout-minutes: 2
- - name: Setup J2Lint
- timeout-minutes: 2
- run: |
- sudo pip install git+https://github.com/aristanetworks/j2lint.git@341b5d5db86e095b622f09770cb6367a1583620e
- - name: Run J2lint
- timeout-minutes: 2
- run: |
- j2lint $GITHUB_WORKSPACE/data
diff --git a/.github/workflows/pull-request-message-check.yml b/.github/workflows/pull-request-message-check.yml
deleted file mode 100644
index 8c206a5ab..000000000
--- a/.github/workflows/pull-request-message-check.yml
+++ /dev/null
@@ -1,23 +0,0 @@
----
-name: Check pull request message format
-
-on:
- pull_request:
- branches:
- - current
- - crux
- - equuleus
-
-jobs:
- check-pr-title:
- name: Check pull request title
- runs-on: ubuntu-20.04
- steps:
- - uses: actions/checkout@v2
- timeout-minutes: 2
- - name: Install the requests library
- run: pip3 install requests
- - name: Check the PR title
- timeout-minutes: 2
- run: |
- ./scripts/check-pr-title-and-commit-messages.py '${{ github.event.pull_request.url }}'
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
deleted file mode 100644
index d21d151f7..000000000
--- a/.github/workflows/stale.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-name: "Issue and PR stale management"
-on:
- schedule:
- - cron: "0 0 * * *"
-
-jobs:
- stale:
- runs-on: ubuntu-latest
- if: github.repository == 'vyos/vyos-1x'
- steps:
- # Issue stale management
- - uses: actions/stale@v6
- with:
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- days-before-stale: 90
- days-before-close: -1
- stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. The issue will be reviewed by a maintainer and may be closed'
- stale-issue-label: 'state: stale'
- exempt-issue-labels: 'state: accepted, state: in-progress'
- stale-pr-message: 'This PR is stale because it has been open 30 days with no activity. The PR will be reviewed by a maintainer and may be closed'
- stale-pr-label: 'state: stale'
- exempt-pr-labels: 'state: accepted, state: in-progress'
diff --git a/.github/workflows/unused-imports.yml b/.github/workflows/unused-imports.yml
deleted file mode 100644
index da57bd270..000000000
--- a/.github/workflows/unused-imports.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-name: Check for unused imports using Pylint
-on:
- pull_request_target:
- branches:
- - current
- - sagitta
-
-jobs:
- Check-Unused-Imports:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - name: Set up Python
- uses: actions/setup-python@v3
- with:
- python-version: 3.11
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install pylint
- - name: Analysing the code with pylint
- run: make unused-imports
diff --git a/interface-definitions/container.xml.in b/interface-definitions/container.xml.in
index e7dacea36..2296a3e9e 100644
--- a/interface-definitions/container.xml.in
+++ b/interface-definitions/container.xml.in
@@ -15,9 +15,15 @@
<constraintErrorMessage>Container name must be alphanumeric and can contain hyphens</constraintErrorMessage>
</properties>
<children>
+ <leafNode name="allow-host-pid">
+ <properties>
+ <help>Allow sharing host process namespace with container</help>
+ <valueless/>
+ </properties>
+ </leafNode>
<leafNode name="allow-host-networks">
<properties>
- <help>Allow host networks in container</help>
+ <help>Allow sharing host networking with container</help>
<valueless/>
</properties>
</leafNode>
diff --git a/python/vyos/system/image.py b/python/vyos/system/image.py
index ba9a6dfa7..aae52e770 100644
--- a/python/vyos/system/image.py
+++ b/python/vyos/system/image.py
@@ -18,8 +18,9 @@ from re import compile as re_compile
from functools import wraps
from tempfile import TemporaryDirectory
from typing import TypedDict
+from json import loads
-from vyos import version
+from vyos.defaults import directories
from vyos.system import disk, grub
# Define variables
@@ -201,9 +202,12 @@ def get_running_image() -> str:
if running_image_result:
running_image: str = running_image_result.groupdict().get(
'image_version', '')
- # we need to have a fallback for live systems
+ # we need to have a fallback for live systems:
+ # explicit read from version file
if not running_image:
- running_image: str = version.get_version()
+ json_data: str = Path(directories['data']).joinpath('version.json').read_text()
+ dict_data: dict = loads(json_data)
+ running_image: str = dict_data['version']
return running_image
diff --git a/python/vyos/version.py b/python/vyos/version.py
index 47a10e201..86e96d0ec 100644
--- a/python/vyos/version.py
+++ b/python/vyos/version.py
@@ -33,11 +33,11 @@ import os
import requests
import vyos.defaults
+from vyos.system.image import is_live_boot
from vyos.utils.file import read_file
from vyos.utils.file import read_json
from vyos.utils.process import popen
-from vyos.utils.process import run
from vyos.utils.process import DEVNULL
version_file = os.path.join(vyos.defaults.directories['data'], 'version.json')
@@ -85,7 +85,7 @@ def get_full_version_data(fname=version_file):
# In installed images, the squashfs image file is named after its image version,
# while on livecd it's just "filesystem.squashfs", that's how we tell a livecd boot
# from an installed image
- if run(""" grep -e '^overlay.*/filesystem.squashfs' /proc/mounts >/dev/null """) == 0:
+ if is_live_boot():
boot_via = "livecd"
else:
boot_via = "installed image"
diff --git a/scripts/check-pr-title-and-commit-messages.py b/scripts/check-pr-title-and-commit-messages.py
deleted file mode 100755
index 001f6cf82..000000000
--- a/scripts/check-pr-title-and-commit-messages.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python3
-
-import re
-import sys
-import time
-
-import requests
-
-# Use the same regex for PR title and commit messages for now
-title_regex = r'^(([a-zA-Z\-_.]+:\s)?)T\d+:\s+[^\s]+.*'
-commit_regex = title_regex
-
-def check_pr_title(title):
- if not re.match(title_regex, title):
- print("PR title '{}' does not match the required format!".format(title))
- print("Valid title example: T99999: make IPsec secure")
- sys.exit(1)
-
-def check_commit_message(title):
- if not re.match(commit_regex, title):
- print("Commit title '{}' does not match the required format!".format(title))
- print("Valid title example: T99999: make IPsec secure")
- sys.exit(1)
-
-if __name__ == '__main__':
- if len(sys.argv) < 2:
- print("Please specify pull request URL!")
- sys.exit(1)
-
- # There seems to be a race condition that causes this scripts to receive
- # an incomplete PR object that is missing certain fields,
- # which causes temporary CI failures that require re-running the script
- #
- # It's probably better to add a small delay to prevent that
- time.sleep(5)
-
- # Get the pull request object
- pr = requests.get(sys.argv[1]).json()
- if "title" not in pr:
- print("The PR object does not have a title field!")
- print("Did not receive a valid pull request object, please check the URL!")
- sys.exit(1)
-
- check_pr_title(pr["title"])
-
- # Get the list of commits
- commits = requests.get(pr["commits_url"]).json()
- for c in commits:
- # Retrieve every individual commit and check its title
- co = requests.get(c["url"]).json()
- check_commit_message(co["commit"]["message"])
diff --git a/smoketest/config-tests/container-simple b/smoketest/config-tests/container-simple
index 299af64cb..cc80ef4cf 100644
--- a/smoketest/config-tests/container-simple
+++ b/smoketest/config-tests/container-simple
@@ -8,5 +8,6 @@ set container name c01 capability 'net-bind-service'
set container name c01 capability 'net-raw'
set container name c01 image 'busybox:stable'
set container name c02 allow-host-networks
+set container name c02 allow-host-pid
set container name c02 capability 'sys-time'
set container name c02 image 'busybox:stable'
diff --git a/smoketest/configs/container-simple b/smoketest/configs/container-simple
index 05efe05e9..82983afb7 100644
--- a/smoketest/configs/container-simple
+++ b/smoketest/configs/container-simple
@@ -7,6 +7,7 @@ container {
}
name c02 {
allow-host-networks
+ allow-host-pid
cap-add sys-time
image busybox:stable
}
diff --git a/src/conf_mode/container.py b/src/conf_mode/container.py
index a73a18ffa..91a10e891 100755
--- a/src/conf_mode/container.py
+++ b/src/conf_mode/container.py
@@ -329,9 +329,13 @@ def generate_run_arguments(name, container_config):
prop = vol_config['propagation']
volume += f' --volume {svol}:{dvol}:{mode},{prop}'
+ host_pid = ''
+ if 'allow_host_pid' in container_config:
+ host_pid = '--pid host'
+
container_base_cmd = f'--detach --interactive --tty --replace {capabilities} ' \
f'--memory {memory}m --shm-size {shared_memory}m --memory-swap 0 --restart {restart} ' \
- f'--name {name} {hostname} {device} {port} {volume} {env_opt} {label} {uid}'
+ f'--name {name} {hostname} {device} {port} {volume} {env_opt} {label} {uid} {host_pid}'
entrypoint = ''
if 'entrypoint' in container_config:
@@ -339,11 +343,6 @@ def generate_run_arguments(name, container_config):
entrypoint = json_write(container_config['entrypoint'].split()).replace('"', "&quot;")
entrypoint = f'--entrypoint &apos;{entrypoint}&apos;'
- hostname = ''
- if 'host_name' in container_config:
- hostname = container_config['host_name']
- hostname = f'--hostname {hostname}'
-
command = ''
if 'command' in container_config:
command = container_config['command'].strip()
diff --git a/src/op_mode/nat.py b/src/op_mode/nat.py
index 2bc7e24fe..4ab524fb7 100755
--- a/src/op_mode/nat.py
+++ b/src/op_mode/nat.py
@@ -263,7 +263,7 @@ def _get_formatted_translation(dict_data, nat_direction, family, verbose):
proto = meta['layer4']['protoname']
if direction == 'independent':
conn_id = meta['id']
- timeout = meta['timeout']
+ timeout = meta.get('timeout', 'n/a')
orig_src = f'{orig_src}:{orig_sport}' if orig_sport else orig_src
orig_dst = f'{orig_dst}:{orig_dport}' if orig_dport else orig_dst
reply_src = f'{reply_src}:{reply_sport}' if reply_sport else reply_src