{"library":"oslo-upgradecheck","title":"OpenStack Oslo Upgrade Check","description":"oslo-upgradecheck is a Python library providing common code for writing upgrade checks within OpenStack projects. It assists with implementing `$SERVICE-status upgrade check` commands by offering a framework to define and execute various pre-upgrade validation functions. Currently at version 2.7.1, its release cadence is generally aligned with the OpenStack coordinated release cycle, typically every six months, though individual Oslo libraries may have more frequent patch releases.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install oslo-upgradecheck"],"cli":{"name":"oslo-upgradecheck","version":"sh: 1: oslo-upgradecheck: not found"}},"imports":["from oslo_upgradecheck.upgradecheck import UpgradeCommands","from oslo_upgradecheck.upgradecheck import check_func"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import sys\nfrom oslo_upgradecheck.upgradecheck import UpgradeCommands, check_func\n\n\n@check_func(group='required_pre_upgrade')\ndef my_first_check():\n    \"\"\"This is my first upgrade check.\n\n    :returns: a tuple of (status, details).\n    \"\"\"\n    # Simulate a successful check\n    return (True, \"My service is ready for upgrade.\")\n\n\n@check_func(group='required_pre_upgrade')\ndef my_second_check():\n    \"\"\"This is my second, more complex check.\n\n    :returns: a tuple of (status, details).\n    \"\"\n    # Simulate a failed check based on some condition\n    is_database_migrated = False # In a real scenario, check DB status\n    if not is_database_migrated:\n        return (False, \"Database migration is incomplete. Please run 'db sync'.\")\n    return (True, \"Database is migrated.\")\n\n\ndef main():\n    # In a real OpenStack project, oslo_config would be initialized here\n    # to handle command-line arguments and configuration.\n    # For this quickstart, we'll manually invoke the checks.\n\n    commands = UpgradeCommands()\n\n    # You can specify which group of checks to run\n    # e.g., 'required_pre_upgrade', 'pre_upgrade', 'post_upgrade'\n    print(\"\\n--- Running required_pre_upgrade checks ---\")\n    results = commands.run_checks(group='required_pre_upgrade')\n    for check, status, details in results:\n        print(f\"Check: {check.__name__}, Status: {status}, Details: {details}\")\n\n    if any(not s for _, s, _ in results):\n        print(\"\\nSome required checks failed. Upgrade is not recommended.\")\n        sys.exit(1)\n    else:\n        print(\"\\nAll required checks passed. Proceed with upgrade.\")\n        sys.exit(0)\n\n\nif __name__ == '__main__':\n    main()","lang":"python","description":"This quickstart demonstrates how to define custom upgrade checks using the `oslo_upgradecheck.check_func` decorator and run them using `UpgradeCommands`. Each check function should return a tuple of `(status, details)`, where `status` is a boolean indicating success/failure and `details` is a string message. The `group` argument in `check_func` allows organizing checks into different phases (e.g., pre-upgrade, post-upgrade).","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"2.6.0","pypi_latest":"2.7.1","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":4.9,"avg_import_s":0.48,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.41,"mem_mb":8,"disk_size":"44.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.7,"import_time_s":0.36,"mem_mb":8,"disk_size":"46M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.67,"mem_mb":8.9,"disk_size":"49.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.6,"import_time_s":0.61,"mem_mb":8.9,"disk_size":"51M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.56,"mem_mb":8.6,"disk_size":"49.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.8,"import_time_s":0.62,"mem_mb":8.6,"disk_size":"51M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.47,"mem_mb":8.3,"disk_size":"49.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.8,"import_time_s":0.5,"mem_mb":8.3,"disk_size":"51M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.31,"mem_mb":6.9,"disk_size":"46.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"oslo-upgradecheck","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.6,"import_time_s":0.31,"mem_mb":6.9,"disk_size":"48M"}]}}