What’s new in v25.1LTS


New service

  • POST /tokens APIが実装されました。
    usernameクエリで指定されたユーザーのtokenを発行して返却します。
POST /tokens?username={user_name}

Note

POST /tokensはsuperuser専用のAPIとなります。

  • 起動パラメータplugin_auto_install=Falseを指定した場合のplugin installの挙動を変更します。
    PUT /pluginsもしくはPOST /controlsのAPI Callによりplugin isntallを実施する場合、従来からの挙動の変更はありません。
    内部での異常等によりmodelの再読み込みが発生した場合に、DDLを発行しschemaを上書きするケースが起こらないように変更しました。これにより、B/Gデプロイ中などにおいて意図せず旧系のDB schemaで上書きされてしまう問題を解消しました。

Caution

Beta版では本更新に関して起動パラメータを追加しておりましたが、GA版では追加しませんでした。

  • 各CloudService用のカスタムロガーが使用可能な起動パラメータlog_formatが追加されました。
    デフォルトは、"default"です。
log_format 説明
"default" tornadoのロガーを使用します。(v23.2LTSまでと同じ)
"google" google cloud用のカスタムロガーを使用します。
"amazon" AWS用のカスタムロガーを使用します。
  • 起動パラメータextention_plugin_base_dirsを追加しました。 extension_base_dir起動パラメータとは読み込むディレクトリ位置が異なります。指定したディレクトリ配下の持ち込みpackageを読み込むことができます。
起動パラメータ 説明
extention_plugin_base_dir 指定したpathの上位ディレクトリをpackageとみなし、そのパッケージ内のmoduleを読み込みます。packageを1つしか読み込めません。
extention_plugin_base_dirs 指定したpath配下のpackageを全て読み込みます。

下記構成例においてextention_plugin_base_dirs={base_path}/hoge_plugins/extensionsを指定すると、配下の持ち込みpackage(package1, package2)を読み込みSDK内で使用できるようになります。

hoge_plugins
├── axis
│   ├── workspace1
│   │   ├── classes
│   │   │   └── testClass.yml
│   │   └── scenarios
│   │       └── testScenario.yml
│   └── workspace2
│       ├── classes
│       │   └── class.yml
│       └── scenarios
│           └── scenario.yml
├── build
│   └── Dockerfile
├── extension
│   ├── package1
│   │   ├── __init__.py
│   │   ├── hoge.py
│   │   └── fuga.py
│   └── package2
│       ├── __init__.py
│       ├── fuga2.py
│       └── hoge2.py
└── requirements.txt

SDKのスクリプト内で使用したい場合、下記のようにimportが可能です。

from package1 import hoge, fuga
from package2 import hoge2, fuga2
  • reload_modules組み込み関数を追加しました。 持ち込みpackageを開発中に更新し再読み込みしたい場合、インタラクティブシェルでmodule cacheをクリアすることで新しい内容でホットアップグレードでき、すぐに新しい内容の持ち込みpackageをご利用いただけます。
>>> from package1 import hoge↵
... print(hoge.hogefunc())↵
... ↵
↵
1
## ここでhogefuncの戻り値を2に変更します
>>> reload_modules()↵
... print(hoge.hogefunc())↵
... ↵
↵
2

ただし、関数レベルでimportした場合のホットアップグレードには対応していません。これを更新する場合はreload_moduleを実行し、かつmoduleをimportし直してください。

>>> from package1.hoge import hogefunc↵
... print(hogefunc())↵
... ↵
↵
1
## 関数の戻り値を変更する
>>> reload_modules()↵
... print(hogefunc())↵
... ↵
↵
1 # 戻り値が更新されません
>>> reload_modules()↵
... from package1.hoge import hogefunc↵
... print(hogefunc())↵
... ↵
↵
2 # 戻り値が更新されます

Note

持ち込みpackageの機能追加の意図として、Pure pythonおよびpythonファイル上で実装したいケースへの対応および、AIコーディングツール等のインテグレーションを想定しています。 ビジネスロジックを積極的に持ち込みpackage側に移行していくことで、開発速度の将来的な向上を期待しています。 今後の更新で関連機能を拡張していく予定です。

  • リードレプリカに対応しました。
    aiodb()read_only=Trueを指定することで読み取り専用のデータベースに接続することが可能です。
    本機能を利用するためにはリードレプリカ用のエンジン作成に使用する起動パラメータread_db_hostread_db_portread_db_nameread_db_userread_db_passの設定が必要になります。
# 使用例
async with model.aiodb(read_only=True) as conn:
  r = await conn.execute(model.Test.select())

General changes

  • core moduleをpoetry管理へ移行しました。
    従来通り、pipをご利用いただくことができます。
    labの場合はinit.shをプラグインルートディレクトリに配置し、下記のようなファイルを作成することで追加の依存moduleをインストールします。
#!/bin/bash

# 下記が追加でインストールされます。
## AMQP(RabbitMQ)モードを使用する場合(aio-pika)
/root/.local/bin/poetry install -E amqp
## gRPC機能を使用する場合(grpcio, grpcio-tools, protobuf)
/root/.local/bin/poetry install -E grpcio
## 全部インストールする場合
/root/.local/bin/poetry install --all-extras
  • Portal/ApiFrontの認証方式変更に伴いqmonus_account.originカラムを削除しました。
    v23.2LTS系以前から移行してv25.1LTSで継続利用する場合、originカラムの削除が必要です。
    実行しない場合SDKは起動しますがスキーマ不一致のためアカウントの操作ができません。
## 実行が必要なクエリ
ALTER TABLE qmonus_account DROP COLUMN origin;
  • 起動パラメータsuper_usernamesuper_passwordの指定が必須になりました。
    セキュリティの観点からデフォルト値を使用するのではなく、ユーザ側での指定を必須としました。
    指定しない場合、下記のようなログを出力しSDKを起動できません。
[C 250911 04:47:48 boot:124] super_username/super_password parameters must be specified
  • セキュリティ対応として、callout実行時にcredentialを全てつけてしまう挙動を改善しました。
    calloutの引数innerTrueを指定することで内部通信扱いになり認証トークンが使用可能です。
    引数innerのデフォルトはFalseです。
await callout("/controls", method="POST", body=body, inner=True)
  • undefienedな変数参照がないように修正しました。

  • 内部で参照のないmoduleのimport文を削除しました。

  • modelのロジックをリファクタリングしました。

サポートを停止する機能について

  • SNMPv2組み込みオブジェクト
  • TOSCA組み込みオブジェクト
  • インメモリcollector
  • インメモリreflector
  • disable_ddl_execution起動パラメータ
  • X-Xaas-Callback-Email特殊ヘッダ
  • X-Xaas-Direct-Routing特殊ヘッダ
  • X-Xaas-Callback-URL特殊ヘッダ

Bug fixes

  • kubenetesv1 APIで指定したアカウントの権限スコープではなく、system:anonymousでリクエストしてしまう不具合を修正しました。

Caution

Beta版にて下記の既知の不具合を確認しております。
・kubenetesv1 APIで指定したアカウントの権限スコープではなく、system:anonymousでリクエストしてしまう不具合
こちらの不具合はv23.2LTS以前から既知の不具合として確認しております。

Modules

脆弱性対応

  • Pythonのバージョンを3.10から3.12にバージョンアップしました。

依存moduleの更新

Caution

SQLAlchemy 1.4.46 -> SQLAlchemy 2.0.37pysnmplib -> pysnmpの変更に伴い、
plugin側で使用している場合についても変更対応が必要となります。
詳しくはマイグレーションガイドをご確認ください。
https://developer.qmonus.net/document/migration/top

  • 以下の依存moduleのバージョンが変更となります。
aiohttp 3.8.3 -> 3.11.11
asyncssh 2.13.0 -> 2.19.0
psycopg2-binary 2.9.4 -> 2.9.10
cryptography 3.4.8 -> 44.0.1
cffi 1.15.1 -> 1.17.1
idna 3.2 -> 3.10
graphene-sqlalchemy 2.3.0 -> 3.0.0rc2
Jinja2 3.1.2 -> 3.1.6
hiredis 2.0.0 -> 3.1.0
paramiko 2.12.0 -> 3.5.0
pycryptodome 3.16.0 -> 3.21.0
pycryptodomex 3.16.0 -> 3.21.0
PyYAML 6.0 -> 6.0.2
redis 4.4.0 -> 5.2.1
requests 2.28.1 -> 2.32.3
SQLAlchemy 1.4.46 -> 2.0.37
tornado 6.2 -> 6.5.1
uvloop 0.17.0 -> 0.21.0
gcloud-aio-auth 4.0.1 -> 5.3.2
gcloud-aio-pubsub 5.1.1 -> 6.0.1
pydantic 1.10.4 -> 2.10.6
yarl 1.7.2 -> 1.18.3
line-profiler 4.0.2 -> 4.1.2
  • 以下のmoduleを新規に依存moduleとして追加します。
asyncpg 0.30.0
pysnmp 7.1.16
  • 以下のmoduleをpoetry管理で追加することが可能になりました。
aio-pika 9.5.4
grpcio 1.62.0
grpcio-tools 1.62.0
protobuf 4.21.9
  • 以下のmoduleを依存moduleから削除します。
aioredis
pysnmplib

kubernetesサポートについて

  • v25.1LTSではk8s v1.33までの対応を仕様確認済みです。
  • Core 内部で使用しているバージョンは下記の通りです。
    異なるAPIバージョンを使用しているk8sバージョンでは一部機能(SDKRunner, closedloop)が使用できません。
kind version group
Affinity v1 core
ConfigMap v1 core
ConfigMapVolumeSource v1 core
Container v1 core
DeleteOptions v1 meta
Job v1 batch
JobSpec v1 batch
NodeAffinity v1 core
NodeSelector v1 core
NodeSelectorRequirement v1 core
NodeSelectorTerm v1 core
ObjectMeta v1 meta
Pod v1 core
PodFailurePolicy v1 batch
PodFailurePolicyOnPodConditionsPattern v1 batch
PodFailurePolicyRule v1 batch
PodSpec v1 core
PodTemplateSpec v1 core
ResourceRequirements v1 core
Secret v1 core
SecretVolumeSource v1 core
Toleration v1 core
Volume v1 core
VolumeMount v1 core
  • kubernetesリソースをKube組み込みオブジェクトを利用してユーザー側でCRUDする場合は対象kubernetesクラスタのkubernetesバージョンに依存します。
    kubernetesバージョンに紐づくAPI仕様に基づいて操作してください。