[feature] Emit a signal when a device operating system changes
メンテナーはふだん 1 日以内に返信
@kimpasha23-beep がすでに取り組んでいます。
2026年10月11日 から。
評価
- 難易度
- 3/5
- 見積もり時間
- 半日
- 初心者へのやさしさ
- 65/100
調査の方向性
Start with the device_name_changed and management_ip_changed signals in openwisp_controller.config.signals and how AbstractDevice detects those field changes. Add device_os_changed alongside them, track the previous os value the same way, and emit it only after saving an existing device whose os changed. Done means tests show it fires with instance, os and old_os on an OS change and stays silent on create or unchanged saves.
索引モデルが issue の本文から書いたものです。
説明
Is your feature request related to a problem? Please describe.
Applications that need to react when a device reports a new operating system version have no dedicated, public integration point.
For example, after a device is upgraded outside OpenWISP, it reconnects and updates its Device.os field through the controller. Downstream applications may need to synchronize derived state based on the newly reported operating system, but listening to the generic post_save signal requires each application to implement its own old-value detection and executes for unrelated device changes.
Describe the solution you'd like
Add a public device_os_changed signal in openwisp_controller.config.signals.
The signal should be emitted only after an existing device has been saved with a changed os value. It should provide:
instance: the updated device.os: the new operating system value.old_os: the previous operating system value.
The signal should follow the existing device-change signal pattern, such as device_name_changed and management_ip_changed, by extending AbstractDevice's change detection. It must not be emitted when a device is created or when its operating-system value is unchanged.
This would allow optional applications, including openwisp-firmware-upgrader, to subscribe without creating a controller-to-integration dependency. The firmware upgrader can then asynchronously synchronize its DeviceFirmware association after a device reports a different operating system.
Describe alternatives you've considered
Listening to the generic post_save signal from downstream applications is possible, but it forces each consumer to detect OS changes independently and causes handlers to run for every device save.
Additional context
AbstractDevice already provides field-change detection for device name, group, and management IP. A dedicated OS-change signal would use the same established extension pattern and be reusable by integrations beyond firmware management.
- 主要言語
- Python
- スター
- 779
- フォーク
- 328
- 平均マージ
- 2日 19時間
- マージ済み PR(30日)
- 7
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
openwisp/openwisp-controller のほかの issue
-
[fix] Recent Commands row uses "created" timestamp for the "Modified" field対応中かも @xovishnukosuri が 215 日前に担当しました。 オープンbug
難易度 1/5 1時間未満 初心者へのやさしさ 78/100
openwisp/openwisp-controller#1263 · コメント 4 件 ·
メンテナーはふだん 1 日以内に返信
-
[feature] Add board_name field to Device model for DTB board identification対応中かも @atif09 が 27 日前に担当しました。 オープンenhancement gsoc
openwisp/openwisp-controller#1491 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
[bug:gsoc26] Mass command wizards started in two browser tabs overwrite each other対応中かも @dee077 が 30 日前に担当しました。 オープンbug
openwisp/openwisp-controller#1489 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
openwisp/openwisp-controller#1484 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
[bug] Template.clean() corrections land one write late over the REST API再び着手できるかも @krrishnaik が 41 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンbug
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
openwisp/openwisp-controller#1478 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
openwisp/openwisp-controller の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
jbacalso24/mimry#291 ·
メンテナーはふだん 1 日以内に返信
-
good first issue
難易度 2/5 1時間未満 初心者へのやさしさ 82/100
eli-alvarado/us-watchlist-alerts#14 ·
メンテナーはふだん 1 日以内に返信
-
from-review-extraction python severity:nit
難易度 2/5 1〜3時間 初心者へのやさしさ 80/100
LearningCircuit/local-deep-research#7462 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
cathrynlavery/diagram-design#441 ·
メンテナーはふだん 2 日以内に返信
-
[Cleanup] Include the public header in work_split.cpp対応中かも @blozano-tt が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
tenstorrent/tt-metal#60850 ·
メンテナーはふだん 1 日以内に返信