sima-cli 2.1.17__tar.gz → 2.1.18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sima_cli-2.1.17/sima_cli.egg-info → sima_cli-2.1.18}/PKG-INFO +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.18}/pyproject.toml +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/__version__.py +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/cli.py +119 -12
- sima_cli-2.1.18/sima_cli/cloudex/__init__.py +5 -0
- sima_cli-2.1.18/sima_cli/cloudex/client.py +886 -0
- sima_cli-2.1.18/sima_cli/cloudex/commands.py +422 -0
- sima_cli-2.1.18/sima_cli/cloudex/installer.py +164 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/device/commands.py +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/discover/discover.py +91 -9
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/models/client.py +246 -18
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/models/commands.py +114 -17
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/models/rendering.py +213 -32
- sima_cli-2.1.18/sima_cli/network/network.py +636 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/install.py +3 -1
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/neat.py +11 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/network_doctor.py +37 -2
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/preinstall.py +123 -5
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/utils.py +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/ab_state.py +32 -12
- sima_cli-2.1.18/sima_cli/update/host.py +231 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/netboot.py +675 -27
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/netboot_artifacts.py +103 -14
- sima_cli-2.1.18/sima_cli/update/netboot_device.py +483 -0
- sima_cli-2.1.18/sima_cli/update/overlay.py +348 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/rootfs.py +5 -11
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/swu.py +240 -11
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/swu_artifacts.py +5 -5
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/uboot_environment.py +54 -24
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/updater.py +71 -16
- {sima_cli-2.1.17 → sima_cli-2.1.18/sima_cli.egg-info}/PKG-INFO +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/SOURCES.txt +16 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_ab_overlay.py +7 -8
- sima_cli-2.1.18/tests/unit/test_cli_update.py +150 -0
- sima_cli-2.1.18/tests/unit/test_cloudex_client.py +647 -0
- sima_cli-2.1.18/tests/unit/test_cloudex_commands.py +370 -0
- sima_cli-2.1.18/tests/unit/test_cloudex_installer.py +110 -0
- sima_cli-2.1.18/tests/unit/test_device_discovery_cloudex.py +113 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_emmc.py +18 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_generate_cli_markdown_docs.py +10 -8
- sima_cli-2.1.18/tests/unit/test_host_update.py +254 -0
- sima_cli-2.1.18/tests/unit/test_localized_docs_links.py +23 -0
- sima_cli-2.1.18/tests/unit/test_models.py +1187 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot.py +1 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot_autoflash.py +2 -1
- sima_cli-2.1.18/tests/unit/test_netboot_device.py +658 -0
- sima_cli-2.1.18/tests/unit/test_netboot_images.py +344 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot_mirror.py +11 -6
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot_trootctl.py +2 -1
- sima_cli-2.1.18/tests/unit/test_network_custom_static.py +271 -0
- sima_cli-2.1.18/tests/unit/test_network_safety.py +152 -0
- sima_cli-2.1.18/tests/unit/test_overlay.py +309 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_image_detection.py +56 -5
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_model_compiler.py +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_network_doctor.py +36 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_preinstall.py +146 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu.py +391 -9
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu_mirror.py +18 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_uboot_environment.py +31 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_vscode_extension_pins.py +2 -1
- sima_cli-2.1.17/sima_cli/network/network.py +0 -307
- sima_cli-2.1.17/sima_cli/update/netboot_device.py +0 -177
- sima_cli-2.1.17/tests/unit/test_cli_update.py +0 -76
- sima_cli-2.1.17/tests/unit/test_models.py +0 -632
- sima_cli-2.1.17/tests/unit/test_netboot_device.py +0 -292
- {sima_cli-2.1.17 → sima_cli-2.1.18}/LICENSE +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/MANIFEST.in +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/README.md +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/requirements.txt +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/setup.cfg +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/setup.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/__main__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/app_zoo/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/app_zoo/app.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/app_zoo/commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/auth/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/auth/auth0.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/auth/devportal.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/auth/login.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/data/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/data/resources_internal.yaml +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/data/resources_public.yaml +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/device/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/mpk/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/deploy_only/mpk/commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/discover/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/discover/linuxll.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/download/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/download/downloader.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/compatibility.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/github_assets.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/hostdriver.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/metadata_info.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/metadata_installer.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/metadata_validator.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/optiview.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/package_builder.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/palette.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/install/registry.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/mla/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/mla/meminfo.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/model_zoo/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/model_zoo/model.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/models/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/network/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/playbooks/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/playbooks/commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/playbooks/manager.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/cmdexec.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/config.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/docker_staging.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/linux_devkit_network.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/linux_shared_network.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/model_compiler.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/requirements.json +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/script.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/stop.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/uninstall.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/sdk/vscode_extensions.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/serial/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/serial/serial.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/storage/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/storage/nvme.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/storage/sdcard.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/bmaptool.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/bootimg.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/cleanlog.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/elxr.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/emmc.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/fast_upload.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/local.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/query.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/remote.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/staging.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/swu_certificate.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/update/swu_target.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/upgrade/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/upgrade/selfupdate.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/api_common.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/artifactory.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/common.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/config.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/config_loader.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/container_registries.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/deprecation.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/device_api.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/disk.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/docker.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/env.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/errors.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/mpk_api.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/net.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/network.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/pcie.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/pkg_update_check.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/serializers.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/services.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/utils/tag.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/vulcan/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/vulcan/artifacts.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli/vulcan/commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/dependency_links.txt +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/entry_points.txt +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/requires.txt +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/sima_cli.egg-info/top_level.txt +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/e2e/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_app_zoo.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_appzoo_commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_auth.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_auth0.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_bootimg_defaults.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_bootimg_recovery.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_cli.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_cli_stdio.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_cli_update_rerun.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_container_registries.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_deprecation.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_docker_utils.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_download.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_elxr_update.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_fast_upload.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_firmware.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_firmware_creation_order.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_firmware_layout.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_firmware_selector.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_install_stub.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_metadata_installer.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_metadata_validator.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_model_zoo.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_modelzoo_commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_netboot_ip_recovery.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_package_builder.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_palette_image_discovery.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_pcie.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_pkg_update_check.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_linux_shared_network.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_sdk_uninstall.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_selfupdate.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_skills_commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_skills_manager.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu_certificate.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu_errors.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_swu_target.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_update_staging.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_utils.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.18}/tests/unit/test_vulcan.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# sima_cli/__version__.py
|
|
2
|
-
__version__ = "2.1.
|
|
2
|
+
__version__ = "2.1.18"
|
|
@@ -2,12 +2,14 @@ import os
|
|
|
2
2
|
import shutil
|
|
3
3
|
import sys
|
|
4
4
|
from contextlib import nullcontext, redirect_stdout
|
|
5
|
+
from pathlib import Path
|
|
5
6
|
import click
|
|
6
7
|
from rich.console import Console
|
|
7
8
|
from rich.panel import Panel
|
|
8
9
|
from rich.text import Text
|
|
9
10
|
from sima_cli.utils.env import get_environment_type
|
|
10
11
|
from sima_cli.update.updater import perform_update
|
|
12
|
+
from sima_cli.update.host import install_host_package
|
|
11
13
|
from sima_cli.update.swu import handle_update
|
|
12
14
|
from sima_cli.model_zoo.model import list_models, download_model, describe_model
|
|
13
15
|
from sima_cli.app_zoo.app import list_apps, download_app, describe_app
|
|
@@ -40,6 +42,7 @@ from sima_cli.upgrade.selfupdate import register_selfupdate_command
|
|
|
40
42
|
from sima_cli.playbooks import register_playbook_commands
|
|
41
43
|
from sima_cli.vulcan import register_vulcan_commands
|
|
42
44
|
from sima_cli.models import register_models_commands
|
|
45
|
+
from sima_cli.cloudex import register_cloudex_commands
|
|
43
46
|
from sima_cli.vulcan.commands import (
|
|
44
47
|
ENV_METAVAR,
|
|
45
48
|
_environment_shortcut_options,
|
|
@@ -188,8 +191,8 @@ def main(ctx, internal, yes):
|
|
|
188
191
|
internal = internal or os.getenv("SIMA_CLI_INTERNAL", "0") in ("1", "true", "yes")
|
|
189
192
|
if internal:
|
|
190
193
|
Console(stderr=True).print(Panel(
|
|
191
|
-
"Pre-release software may be unstable. Use at your own risk.",
|
|
192
|
-
title="Pre-release software", border_style="yellow",
|
|
194
|
+
Text("Pre-release software may be unstable. Use at your own risk.", style="yellow"),
|
|
195
|
+
title="Pre-release software", border_style="yellow", width=72,
|
|
193
196
|
))
|
|
194
197
|
if ctx.meta.get('update_inspect'):
|
|
195
198
|
ctx.ensure_object(dict)
|
|
@@ -213,6 +216,7 @@ register_sdk_commands(main)
|
|
|
213
216
|
register_playbook_commands(main)
|
|
214
217
|
register_vulcan_commands(main)
|
|
215
218
|
register_models_commands(main)
|
|
219
|
+
register_cloudex_commands(main)
|
|
216
220
|
|
|
217
221
|
|
|
218
222
|
# ----------------------
|
|
@@ -314,7 +318,7 @@ def download(ctx, url, dest):
|
|
|
314
318
|
@click.option(
|
|
315
319
|
"-y", "--yes",
|
|
316
320
|
is_flag=True,
|
|
317
|
-
help="Assume yes for update confirmation prompts."
|
|
321
|
+
help="Assume yes for update confirmation prompts and select the newest matching full-system build."
|
|
318
322
|
)
|
|
319
323
|
@click.option(
|
|
320
324
|
"-p", "--passwd",
|
|
@@ -350,13 +354,14 @@ def download(ctx, url, dest):
|
|
|
350
354
|
default=False,
|
|
351
355
|
help="For eLxr updates, validate the update path and show the command without installing."
|
|
352
356
|
)
|
|
353
|
-
@click.option("--inspect", "inspect_state", is_flag=True, help="Show eLxr 3.0+ A/B
|
|
357
|
+
@click.option("--inspect", "inspect_state", is_flag=True, help="Show eLxr 3.0+ A/B slots and overlay customizations without updating (local or --ip).")
|
|
358
|
+
@click.option("--verbose", is_flag=True, help="Show detailed overlay file categories during eLxr 3.0+ inspection or update.")
|
|
354
359
|
@click.option("--signing-cert", metavar="URL_OR_FILE", help="SWUpdate PEM verification certificate: HTTP(S) URL or local file. Defaults to the certificate for the selected channel when configured (eLxr 3.0+).")
|
|
355
360
|
@click.option("--reboot", is_flag=True, help="Reboot after successful eLxr 3.0+ installation; verify remote boot health.")
|
|
356
361
|
@click.pass_context
|
|
357
|
-
def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force, troot_only, dryrun, inspect_state, reboot, signing_cert):
|
|
362
|
+
def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force, troot_only, dryrun, inspect_state, verbose, reboot, signing_cert):
|
|
358
363
|
"""
|
|
359
|
-
Update
|
|
364
|
+
Update a SiMa DevKit, remote device, or Linux PCIe host.
|
|
360
365
|
|
|
361
366
|
This command downloads and applies system software updates across
|
|
362
367
|
different SiMa environments (Modalix, MLSoC/Davinci, headless images,
|
|
@@ -397,6 +402,9 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
397
402
|
|
|
398
403
|
• Remote updates require an accessible IP address (``--ip``)
|
|
399
404
|
|
|
405
|
+
• PCIe host updates require Linux and ``-i/--internal``; omit the
|
|
406
|
+
version to choose from the available daily platform builds
|
|
407
|
+
|
|
400
408
|
Typical Use Cases:
|
|
401
409
|
|
|
402
410
|
• Updating a SiMa DevKit to the latest GA release
|
|
@@ -407,6 +415,8 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
407
415
|
|
|
408
416
|
• Running updates from both the device itself or a host PC
|
|
409
417
|
|
|
418
|
+
• Installing a daily PCIe host package on a Linux development host
|
|
419
|
+
|
|
410
420
|
\b
|
|
411
421
|
Examples:
|
|
412
422
|
|
|
@@ -438,6 +448,14 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
438
448
|
|
|
439
449
|
sima-cli -i update -y
|
|
440
450
|
|
|
451
|
+
# Select and install a PCIe host package from the daily build catalog (Linux only)
|
|
452
|
+
|
|
453
|
+
sima-cli -i update
|
|
454
|
+
|
|
455
|
+
# Or install a specific indexed daily platform build
|
|
456
|
+
|
|
457
|
+
sima-cli -i update -v 3.0.0_daily_develop_B1774
|
|
458
|
+
|
|
441
459
|
# Update legacy eLxr (<3.0) from the public pre-release mirror without prompts
|
|
442
460
|
|
|
443
461
|
sima-cli -y update -f -y
|
|
@@ -453,6 +471,30 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
453
471
|
"""
|
|
454
472
|
# Prioritize explicit --version option over positional argument
|
|
455
473
|
version_or_url = version_option or version_or_url
|
|
474
|
+
env_type, env_subtype = get_environment_type()
|
|
475
|
+
internal = ctx.obj.get("internal", False)
|
|
476
|
+
auto_confirm = yes or ctx.obj.get("yes", False)
|
|
477
|
+
|
|
478
|
+
device_update_options = (
|
|
479
|
+
dryrun
|
|
480
|
+
or troot_only
|
|
481
|
+
or inspect_state
|
|
482
|
+
or verbose
|
|
483
|
+
or reboot
|
|
484
|
+
or force
|
|
485
|
+
or signing_cert is not None
|
|
486
|
+
or flavor != "auto"
|
|
487
|
+
)
|
|
488
|
+
# A plain update with no remote target means installing the PCIe host
|
|
489
|
+
# package. Device-specific operations continue to the existing dispatcher.
|
|
490
|
+
if env_type == "host" and not ip and not device_update_options:
|
|
491
|
+
if env_subtype != "linux":
|
|
492
|
+
raise click.UsageError("PCIe host updates are only supported on Linux hosts.")
|
|
493
|
+
if not internal:
|
|
494
|
+
raise click.UsageError("Linux PCIe host updates require -i/--internal.")
|
|
495
|
+
install_host_package(version_or_url, auto_confirm=auto_confirm)
|
|
496
|
+
return
|
|
497
|
+
|
|
456
498
|
is_elxr = is_devkit_running_elxr()
|
|
457
499
|
if inspect_state and (version_or_url or dryrun or force or troot_only or reboot or signing_cert is not None or flavor != 'auto'):
|
|
458
500
|
raise click.UsageError("--inspect cannot be combined with installation options.")
|
|
@@ -461,7 +503,7 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
461
503
|
internal=ctx.obj.get("internal", False),
|
|
462
504
|
auto_confirm=yes or ctx.obj.get("yes", False), dryrun=dryrun,
|
|
463
505
|
signing_cert=signing_cert, reboot=reboot, inspect=inspect_state, force=force,
|
|
464
|
-
troot_only=troot_only, flavor=flavor, local_elxr=is_elxr):
|
|
506
|
+
troot_only=troot_only, flavor=flavor, local_elxr=is_elxr, verbose=verbose):
|
|
465
507
|
return
|
|
466
508
|
except (click.ClickException, click.Abort):
|
|
467
509
|
raise
|
|
@@ -598,17 +640,24 @@ def show_mla_memory_usage(ctx):
|
|
|
598
640
|
# bootimg Command
|
|
599
641
|
# ----------------------
|
|
600
642
|
@main.command(name="bootimg")
|
|
601
|
-
@click.option("-v", "--version", required=
|
|
643
|
+
@click.option("-v", "--version", required=False, help="Firmware version to download and write (e.g., 1.6.0)")
|
|
602
644
|
@click.option("-b", "--boardtype", type=click.Choice(["modalix", "mlsoc"], case_sensitive=False), default="modalix", show_default=True, help="Target board type.")
|
|
603
645
|
@click.option("-t", "--fwtype", type=click.Choice(["yocto", "elxr"], case_sensitive=False), default="elxr", show_default=True, help="Target firmware type.")
|
|
604
646
|
@click.option("-n", "--netboot", is_flag=True, default=False, show_default=True, help="Prepare image for network boot and launch TFTP server.")
|
|
647
|
+
@click.option(
|
|
648
|
+
"--images",
|
|
649
|
+
type=click.Path(exists=True, file_okay=False, dir_okay=True, readable=True, path_type=Path),
|
|
650
|
+
help="Directory containing local netboot source images.",
|
|
651
|
+
)
|
|
652
|
+
@click.option("--delete-cache", is_flag=True, help="Delete the managed netboot cache after the session exits.")
|
|
605
653
|
@click.option("-f", "--force", is_flag=True, help="Allow daily mirror fallback if Artifactory is unavailable (internal Modalix eLxr netboot only).")
|
|
606
654
|
@click.option("--recovery", is_flag=True, help="Write eLxr Modalix recovery media for automatic eMMC recovery.")
|
|
607
655
|
@click.option("--devkit", "--devkit-ip", "devkit_ip", required=False, help="DevKit IP for remote netboot; discover and select a DevKit when omitted.")
|
|
608
656
|
@click.option("-r", "--rootfs", required=False, help="Custom root fs folders (internal use only)")
|
|
609
657
|
@click.option("-a", "--autoflash", is_flag=True, default=False, show_default=True, help="Network boot the selected DevKit, then automatically flash its internal storage once SSH is ready.")
|
|
610
658
|
@click.pass_context
|
|
611
|
-
def bootimg_cmd(ctx, version, boardtype, netboot,
|
|
659
|
+
def bootimg_cmd(ctx, version, boardtype, netboot, images, delete_cache, devkit_ip,
|
|
660
|
+
autoflash, fwtype, rootfs, recovery=False, force=False):
|
|
612
661
|
"""
|
|
613
662
|
Prepare a bootable image for the SiMa DevKit.
|
|
614
663
|
|
|
@@ -641,6 +690,17 @@ def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype,
|
|
|
641
690
|
|
|
642
691
|
• Automating eMMC flashing over the network
|
|
643
692
|
|
|
693
|
+
Local Images and Cache:
|
|
694
|
+
|
|
695
|
+
• Use ``--images DIRECTORY`` to recursively discover local netboot
|
|
696
|
+
artifacts. eLxr requires a minimal TFTP archive and an eMMC
|
|
697
|
+
``.img.gz``; Yocto requires a release archive.
|
|
698
|
+
|
|
699
|
+
• The supplied directory remains read-only. Prepared content is cached
|
|
700
|
+
under the platform temporary directory in ``sima-cli/netboot`` and is
|
|
701
|
+
reused by default. ``--delete-cache`` removes only the managed cache
|
|
702
|
+
entry after the session exits.
|
|
703
|
+
|
|
644
704
|
\b
|
|
645
705
|
Examples:
|
|
646
706
|
|
|
@@ -664,12 +724,28 @@ def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype,
|
|
|
664
724
|
|
|
665
725
|
sima-cli bootimg -v 2.0.0 --netboot
|
|
666
726
|
|
|
727
|
+
# Prepare netboot from images already downloaded to a local directory
|
|
728
|
+
|
|
729
|
+
sima-cli bootimg --netboot --boardtype modalix --fwtype elxr --images /path/to/images
|
|
730
|
+
|
|
667
731
|
# Prepare USB/SD recovery media that automatically recovers eMMC
|
|
668
732
|
|
|
669
733
|
sima-cli bootimg -v 3.0.0 --recovery
|
|
670
734
|
|
|
671
735
|
"""
|
|
672
736
|
|
|
737
|
+
uses_netboot = netboot or autoflash
|
|
738
|
+
if images and not uses_netboot:
|
|
739
|
+
raise click.UsageError("--images requires --netboot or --autoflash.")
|
|
740
|
+
if delete_cache and not uses_netboot:
|
|
741
|
+
raise click.UsageError("--delete-cache requires --netboot or --autoflash.")
|
|
742
|
+
if images and version:
|
|
743
|
+
raise click.UsageError("--images and --version cannot be used together.")
|
|
744
|
+
if images and rootfs:
|
|
745
|
+
raise click.UsageError("--images and --rootfs cannot be used together.")
|
|
746
|
+
if not version and not images:
|
|
747
|
+
raise click.UsageError("Provide --version, or use --images for netboot.")
|
|
748
|
+
|
|
673
749
|
if recovery:
|
|
674
750
|
if netboot or autoflash or rootfs or devkit_ip:
|
|
675
751
|
raise click.UsageError("--recovery cannot be combined with --netboot, --autoflash, --rootfs, or --devkit-ip.")
|
|
@@ -693,13 +769,23 @@ def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype,
|
|
|
693
769
|
click.echo(f" 🔹 F/W Type : {fwtype}")
|
|
694
770
|
click.echo(f" 🔹 F/W Flavor: headless")
|
|
695
771
|
click.echo(f" 🔹 Custom RootFS: {rootfs}")
|
|
772
|
+
click.echo(f" 🔹 Local Images: {images}")
|
|
696
773
|
click.echo(f" 🔹 DevKit IP : {devkit_ip}")
|
|
697
774
|
|
|
698
775
|
try:
|
|
699
776
|
boardtype = boardtype if boardtype != 'mlsoc' else 'davinci'
|
|
700
777
|
if netboot or autoflash:
|
|
701
|
-
|
|
702
|
-
|
|
778
|
+
netboot_options = {}
|
|
779
|
+
if images:
|
|
780
|
+
netboot_options["images"] = str(images)
|
|
781
|
+
if delete_cache:
|
|
782
|
+
netboot_options["delete_cache"] = True
|
|
783
|
+
setup_netboot(
|
|
784
|
+
version, boardtype, internal, autoflash, flavor='headless',
|
|
785
|
+
rootfs=rootfs, swtype=fwtype, allow_daily_fallback=force,
|
|
786
|
+
devkit=devkit_ip, **netboot_options,
|
|
787
|
+
)
|
|
788
|
+
click.echo("✅ Netboot session ended and the TFTP server is stopped.")
|
|
703
789
|
else:
|
|
704
790
|
write_image(version, boardtype, fwtype, internal, flavor='headless', recovery=recovery)
|
|
705
791
|
click.echo("✅ Boot image successfully written.")
|
|
@@ -982,7 +1068,28 @@ def network_cmd(ctx):
|
|
|
982
1068
|
"""
|
|
983
1069
|
Setup Network IP address on the DevKit
|
|
984
1070
|
|
|
985
|
-
This command only works on the DevKit.
|
|
1071
|
+
This command only works on the DevKit. Select an interface, then choose DHCP,
|
|
1072
|
+
Default Static IP, or Custom Static IP.
|
|
1073
|
+
|
|
1074
|
+
Custom Static IP prompts for an IPv4 address, such as 192.168.1.50, or an
|
|
1075
|
+
address with a subnet prefix, such as 192.168.1.50/24. A bare address uses
|
|
1076
|
+
the default static profile's prefix. Invalid addresses are rejected;
|
|
1077
|
+
leave the prompt blank to cancel.
|
|
1078
|
+
|
|
1079
|
+
Custom addresses are activated without changing the existing boot
|
|
1080
|
+
configuration. The default static settings are copied into a temporary
|
|
1081
|
+
custom profile with autoconnect disabled on NetworkManager, or a runtime
|
|
1082
|
+
configuration on systemd-networkd. After reboot, the board uses its
|
|
1083
|
+
existing startup configuration. Selecting DHCP or
|
|
1084
|
+
Default Static IP disables the custom configuration.
|
|
1085
|
+
DNS and other default static settings are inherited. If an inherited IPv4
|
|
1086
|
+
gateway is incompatible with the new address, enter a replacement gateway
|
|
1087
|
+
or leave it blank for no gateway. The default profile is not modified.
|
|
1088
|
+
|
|
1089
|
+
Network changes must be made from the DevKit serial console. SSH sessions,
|
|
1090
|
+
including commands launched through sudo, are rejected before configuration
|
|
1091
|
+
changes. A replacement custom profile is activated before the old one is
|
|
1092
|
+
removed.
|
|
986
1093
|
|
|
987
1094
|
"""
|
|
988
1095
|
network_menu()
|