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_host、read_db_port、read_db_name、read_db_user、read_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_username、super_passwordの指定が必須になりました。
セキュリティの観点からデフォルト値を使用するのではなく、ユーザ側での指定を必須としました。
指定しない場合、下記のようなログを出力しSDKを起動できません。
[C 250911 04:47:48 boot:124] super_username/super_password parameters must be specified
- セキュリティ対応として、callout実行時にcredentialを全てつけてしまう挙動を改善しました。
calloutの引数innerにTrueを指定することで内部通信扱いになり認証トークンが使用可能です。
引数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.37、pysnmplib -> 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仕様に基づいて操作してください。