Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create "ceph-nvmeof" CLI command to use nvmeof-cli #752

Merged
merged 4 commits into from
Jul 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Publishes official python package at https://pypi.org/project/ceph-nvmeof/
# This is official release, and will be pushed to pypi when a new tag is pushed in repo.
# Usage: pip install ceph-nvmeof==1.2.15

# Also publishes dev python package at https://test.pypi.org/p/ceph-nvmeof
# This is for dev releases, and will be pushed to test pypi on all merges to "devel" branch.
# Usage: `pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple ceph-nvmeof==1.2.15`

name: Publish release to PyPI
on:
push:
tags:
- '*'
branches:
- 'devel'
release:
types:
- published
workflow_dispatch:
inputs:
python_version:
description: 'Python Version'
required: false
type: string
pdm_version:
description: 'PDM Version'
required: false
type: string
pypi_env:
description: 'Push to test.pypi (dev) or pypi (prod). And `dev-debug-version` pushes to test.pypi with a test package version.'
required: true
default: 'dev'
type: choice
options:
- dev
- prod
- dev-debug-version
ref:
description: 'Build using this branch, tag or SHA'
required: false
type: string

env:
DEFAULT_PYTHON: ${{ inputs.python_version || '3.9' }}
DEFAULT_PDM: ${{ inputs.pdm_version || '2.7.4' }}
REF: ${{ inputs.ref || 'devel' }}

jobs:
pypi-publish:
name: Upload release to PyPI
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/checkout@v3
with:
ref: ${{env.REF}}
- uses: pdm-project/setup-pdm@v3
with:
python-version: ${{env.DEFAULT_PYTHON}}
version: ${{env.DEFAULT_PDM}}

- name: Sync Dependencies
run: pdm sync -v --no-isolation --no-self --no-editable
- name: Compile Protocol Buffers
run: pdm run protoc

- name: Set current date as env variable
run: echo "NOW=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV
- name: (DEBUG) Set dev version number
# For debug-release, set version "<current_release>dev<timestamp>" (eg 1.2.15.dev20240710183756)
# (to avoid messing current releases versions like 1.2.15).
run: |
NEW_VERSION="$(pdm show --version).dev$NOW"
sed -i "s/^version = \".*\"/version = \"${NEW_VERSION}\"/" pyproject.toml
if: (inputs.pypi_env && inputs.pypi_env == 'dev-debug-version')
- name: Build package
run: pdm build --config-setting="--build-number=$NOW" --no-sdist

- name: Publish package distributions to PyPI
run: pdm publish --no-build
if: ( github.event_name == 'release' && github.event.action == 'published' ) || (github.event_name == 'workflow_dispatch' && inputs.pypi_env == 'prod')

- name: Publish package distributions to Test PyPI
run: pdm publish --no-build -r testpypi
if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && (inputs.pypi_env == 'dev' || inputs.pypi_env == 'dev-debug-version'))
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,16 @@ The same configuration can also be manually run:
cephnvmf host add --subsystem nqn.2016-06.io.spdk:cnode1 --host "*"
```

These can also be run by setting environment variables `CEPH_NVMEOF_SERVER_ADDRESS` and `CEPH_NVMEOF_SERVER_PORT` before running nvmeof-cli commands, example:
```
export CEPH_NVMEOF_SERVER_ADDRESS=x.x.x.x
export CEPH_NVMEOF_SERVER_PORT=5500

// using containers
docker-compose run --it <container_image> subsystem add --subsystem nqn.2016-06.io.spdk:cnode1
// using pypi package
ceph-nvmeof subsystem add --subsystem nqn.2016-06.io.spdk:cnode1
```

### Mounting the NVMe-oF volume

Expand Down Expand Up @@ -357,6 +367,15 @@ Python wheel exported to:
/tmp/ceph_nvmeof-0.0.1-py3-none-any.whl
```

To install nvmeof-cli as a CLI tool from the above Python wheel package, (or alternatively only build the cli package):
```
make export-python
pip install /tmp/ceph_nvmeof-0.0.1-py3-none-any.whl
ceph-nvmeof // use nvmeof-cli tool!
```

This can also be installed from https://pypi.org/project/ceph-nvmeof/, by running `pip3 install ceph-nvmeof`.

### Development containers

To avoid having to re-build container on every code change, developer friendly containers are provided:
Expand Down
4 changes: 2 additions & 2 deletions control/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,13 +108,13 @@ def __init__(self):
required=False)
self.parser.add_argument(
"--server-address",
default="localhost",
default=(os.getenv('CEPH_NVMEOF_SERVER_ADDRESS') or "localhost"),
type=str,
help="Server address",
)
self.parser.add_argument(
"--server-port",
default=5500,
default=int(os.getenv('CEPH_NVMEOF_SERVER_PORT') or "5500"),
type=int,
help="Server port",
)
Expand Down
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,6 @@ test = [
# documentation = ""
repository = "https://github.com/ceph/ceph-nvmeof.git"
# changelog = ""

[project.scripts]
ceph-nvmeof = "control.cli:main"
Loading