hcs-cli 0.1.340__tar.gz → 0.1.342__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.
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/PKG-INFO +2 -2
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/__init__.py +1 -1
- hcs_cli-0.1.342/hcs_cli/cmds/edge/log.py +145 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hoc/stats.py +6 -6
- hcs_cli-0.1.342/hcs_cli/cmds/log.py +214 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/admin/edge.py +3 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/edge.py +16 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/log/message_parser.py +20 -4
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/log/query_builder.py +11 -3
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/pyproject.toml +1 -1
- hcs_cli-0.1.340/hcs_cli/cmds/log.py +0 -145
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/.gitignore +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/README.md +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/__main__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ad/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ad/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ad/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ad/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ad/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/admin/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/admin/azure_infra/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/admin/azure_infra/main.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/advisor/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/advisor/advisor_utils.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/advisor/config/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/advisor/config/advisor_config.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/advisor/html_utils.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/advisor/org.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/advisor/pdf_utils.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/advisor/pool.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/advisor/recommendation_engine.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/api.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/app/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/app/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/app/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/app/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/app/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/app/update.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/app/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/auth/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/auth/admin/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/auth/admin/get_org_idp_map.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/auth/admin/network/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/auth/admin/network/add.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/auth/user/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/auth/user/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/clouddriver/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/clouddriver/provider.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/clouddriver/service.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/clouddriver/task.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/credential/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/credential/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/cs/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/cs/base.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/infra/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/infra/basic.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/infra/plan.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/order/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/order/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/order/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/order/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/order/update.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/tenant/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/tenant/consumption.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/tenant/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/daas/tenant/plan.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/debug/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/debug/prepare.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/debug/reset.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/debug/start.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/emqx.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/auth.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/clear.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/config.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/credential_helper.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/init_steps.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/jenkins_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/k8s_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/license_info.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/mqtt_certs.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/required_fields.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/step_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/subscription_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/helper/util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/init.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/profiler.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/provided_files/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/provided_files/akka.plan.yml +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/provided_files/azsim.plan.yml +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/provided_files/azure.plan.yml +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/provided_files/mqtt-secret.yaml +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/provided_files/mqtt-server-external.yaml +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/provided_files/patch-mqtt-hostname.yml +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/provided_files/patch-vernemq-ssl-depth.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/fs/tailor.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/mqtt.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/onboard.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/test.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/util/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/util/github_helper.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/util/log.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/dev/util/mqtt_helper.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/diagnostics/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/diagnostics/diagnose.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/edge/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/edge/connection_string.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/edge/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/edge/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/edge/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/edge/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/edge/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/edge/wait.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/entitlement/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/entitlement/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/entitlement/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/entitlement/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hoc/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hoc/search.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hoc/util/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hoc/util/inv_cache.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/clean.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/cloud/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/cloud/health.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/cloud/perf.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/cloud/scale.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/installer.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/key.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/outpost.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/probe.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/report.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/hst/test.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/gold_pattern/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/gold_pattern/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/gold_pattern/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/gold_pattern/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/gold_pattern/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/list_copies.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/version/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/version/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/version/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/ims/version/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inspect.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/assign.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/count.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/deassign.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/logoff.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/session.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/inventory/update.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/iss/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/iss/mqtt.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/health.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/provider/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/provider/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/provider/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/provider/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/provider/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/register.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/cancel.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/expand.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/health.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/provision.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/retry.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/update.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/template/wait.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/test.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/vm/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/vm/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/vm/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/vm/pair.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/vm/pairing_info.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/vm/power.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/vm/put.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/lcm/vm/wait.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/login.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/logout.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/datacenter/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/datacenter/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/datacenter/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/details/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/ff.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/location.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/org/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pki/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pki/ca.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pki/cert/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pki/cert/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pki/cert/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pki/sign.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pki/test.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/plan/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/plan/apply.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/plan/clear.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/plan/destroy.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/plan/graph.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/plan/input.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/plan/output.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/plan/resolve.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/plan/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pool/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pool/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pool/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pool/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pool/update.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/pool/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/profile/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/profile/init.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/provider/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/provider/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/provider/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/provider/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/provider/golden_images.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/provider/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/provider/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/provider/vsphere_dcs.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/query.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/scm/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/scm/health.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/scm/operator.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/scm/plan.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/scm/recommend.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/scm/template.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/site/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/site/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/site/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/site/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/site/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/site/set-edge.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/site/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/outpost/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/outpost/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/outpost/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/outpost/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/outpost/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/outpost/update.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/probe/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/probe/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/probe/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/probe/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/probe/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/probe/run.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/probe/update.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/report/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/report/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/report/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/synt/report/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/task.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/create.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/expand.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/fix.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/list_usage.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/update.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/usage.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/template/wait.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/test.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/uag/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/uag/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/uag/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/uag/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/upgrade.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/actions.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/delete.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/get.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/list.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/log.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/pairing_info.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/put.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/use.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vm/wait.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmhub/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmhub/info.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmhub/otp/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmhub/otp/redeem.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmhub/otp/request.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmm/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmm/restart_vms.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmm/rootca_edge_migration_stats.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmm/rootca_edge_rotate_certs.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmm/rootca_migrate.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmm/rootca_migrate_edge.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/vmm/rootca_template_migration_stats.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/workflows/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/cmds/workflows/mqtt-endpoints.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/config/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/config/hcs-deployments.yaml +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/main.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/akka.blueprint.yml +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/app/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/app/manual.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/edge/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/edge/akka.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/edge/vsphere.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/hoc/lcm-capcalc.json.template +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/hoc/no-spare.json.template +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/inventory/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/inventory/assign.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/inventory/deassign.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/iss/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/akka.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/azure-dummy.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/azure-real.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/edge-proxy.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-dedicated.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-delay-1m-per-vm.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-fail-delete-template.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-fail-destroy-onthread.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-fail-destroy.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-fail-prepare-onthread.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-fail-prepare.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-fail-vm-onthread.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-fail-vm.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-floating.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-legacy.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-manual.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-multisession.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-nanw.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-new-5k-delay.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-new-5k.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-new-snapshot.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-reuse-vm-id.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero-with-max-id-offset.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/lcm/zero.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/provider/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/provider/ad-stes-vsphere.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/provider/akka.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/provider/azure.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/provider/edgeproxy.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/provider/vsphere.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/scm/starter.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/core/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/core/p01-dummy-success.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/core/p02-dummy-fail.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/core/p03-dummy-exception.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/core/p04-dummy-success-repeat.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/core/p05-dummy-fail-repeat.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/core/p06-dummy-exception-repeat.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/core/p07-dummy-delay.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/core/p08-dummy-property.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext/p20-connect-success.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext/p21-connect-fail.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext/p30-ssl-success.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext/p31-ssl-fail.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext/p40-http-success.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext/p41-http-fail.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext/p42-http-status-code.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext1/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext1/p10-ping-success.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext1/p11-ping-fail.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/synt/ext1/p12-ping-success-repeat.json +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/payload/template/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/_prepare.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/ad.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/av_entitlement.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/av_fs.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/cert.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/edge.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/entitlement.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/gold_pattern.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/identity_provider.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/image.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/import_av_app.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/manual_app.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/pool_group.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/pool_template.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/provider.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/runtime/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/runtime/password.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/runtime/wait_for.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/site.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/provider/hcs/uag.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/admin/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/admin/ad.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/admin/azure_infra.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/admin/helper.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/admin/provider.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/admin/template.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/admin/uag.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/admin/vm.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/api.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/app_management/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/app_management/manual_app.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/auth/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/auth/admin.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/av/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/av/app.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/av/avimport.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/av/entitlements.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/av/fileshare.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/clouddriver/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/clouddriver/provider.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/clouddriver/service.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/credential/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/credential/credential.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/credential/nls.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/cs/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/cs/base.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/csp.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/diagnostics/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/diagnostics/edge.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/edgehub/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/edgehub/edgecontroller.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/edgehub/edgetwin.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/graphql.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/hoc/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/hoc/diagnostic.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/hoc/es.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/ims/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/ims/gold_pattern.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/ims/helper.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/ims/image_copies.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/ims/images.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/ims/version.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/inventory/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/inventory/session.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/inventory/vm.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/iss/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/iss/mqtt.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/lcm/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/lcm/health.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/lcm/provider.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/lcm/template.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/lcm/vm.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/org_service/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/org_service/datacenter.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/org_service/details.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/org_service/orglocationmapping.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/pki/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/pki/certificate.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/pool.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/portal/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/portal/entitlement.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/portal/pool.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/portal/site.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/scm/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/scm/base.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/scm/operator.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/scm/plan.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/site.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/synt/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/synt/outpost.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/synt/probe.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/synt/report.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/task.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/template.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/tsctl/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/tsctl/base.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/tsctl/task.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/uag.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/vm.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/vmhub/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/vmhub/credentials.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/vmhub/mqtt.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/vmm/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/vmm/dct.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/service/vmm/hoc_event.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/__init__.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/constant.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/debug_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/exec_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/inspect_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/param_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/patch_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/plan_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/predefined_payload.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/profile.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/scm/html_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/scm/plan-editor.html.template +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/scm/plan_editor.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/template_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/test_utils.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/test_utils2.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/use_util.py +0 -0
- {hcs_cli-0.1.340 → hcs_cli-0.1.342}/hcs_cli/support/vm_table.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hcs-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.342
|
|
4
4
|
Summary: Horizon Cloud Service CLI.
|
|
5
5
|
Project-URL: Homepage, https://github.com/euc-eng/hcs-cli
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/euc-eng/hcs-cli/issues
|
|
@@ -14,7 +14,7 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
14
14
|
Classifier: Operating System :: OS Independent
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
16
|
Requires-Python: >=3.9
|
|
17
|
-
Requires-Dist: hcs-core>=0.1.
|
|
17
|
+
Requires-Dist: hcs-core>=0.1.342
|
|
18
18
|
Requires-Dist: inquirerpy>=0.3.4
|
|
19
19
|
Requires-Dist: matplotlib>=3.8.0
|
|
20
20
|
Requires-Dist: paho-mqtt>=2.1.0
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Copyright © 2025-2026 Omnissa, LLC.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
import time
|
|
8
|
+
from datetime import datetime, timezone
|
|
9
|
+
|
|
10
|
+
import click
|
|
11
|
+
import httpx
|
|
12
|
+
import hcs_core.sglib.cli_options as cli
|
|
13
|
+
from hcs_core.ctxp import recent
|
|
14
|
+
from hcs_core.util import duration
|
|
15
|
+
|
|
16
|
+
from hcs_cli.service import edge
|
|
17
|
+
|
|
18
|
+
# Confirmed non-terminal value seen in practice; treat anything else that
|
|
19
|
+
# isn't AVAILABLE/FAILED as non-terminal too, since the API may add more.
|
|
20
|
+
_TERMINAL = frozenset({"AVAILABLE", "FAILED"})
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@click.command()
|
|
24
|
+
@click.option(
|
|
25
|
+
"--recreate",
|
|
26
|
+
is_flag=True,
|
|
27
|
+
default=False,
|
|
28
|
+
help="Force a new log collection even if a recent one already exists.",
|
|
29
|
+
)
|
|
30
|
+
@click.option(
|
|
31
|
+
"--max-age",
|
|
32
|
+
default="1D",
|
|
33
|
+
show_default=True,
|
|
34
|
+
help="Reuse the latest AVAILABLE log if it's newer than this (e.g. 1D, 12H). Ignored with --recreate.",
|
|
35
|
+
)
|
|
36
|
+
@click.option(
|
|
37
|
+
"--wait/--no-wait",
|
|
38
|
+
default=True,
|
|
39
|
+
help="Wait for log collection to finish. Collection can take 10+ minutes; --no-wait triggers/checks and returns immediately.",
|
|
40
|
+
)
|
|
41
|
+
@click.option(
|
|
42
|
+
"--wait-timeout",
|
|
43
|
+
default="20M",
|
|
44
|
+
show_default=True,
|
|
45
|
+
help="Max time to wait for log collection to complete.",
|
|
46
|
+
)
|
|
47
|
+
@click.option(
|
|
48
|
+
"--verbose", is_flag=True, default=False, help="Whether to print progress messages. By default, it will print progress messages."
|
|
49
|
+
)
|
|
50
|
+
@click.option(
|
|
51
|
+
"--save-as",
|
|
52
|
+
"save_path",
|
|
53
|
+
type=click.Path(),
|
|
54
|
+
default=None,
|
|
55
|
+
help="Path to save the edge log archive. Defaults to <org_id>_<edge_id>_edge_logs.tgz in the current directory.",
|
|
56
|
+
)
|
|
57
|
+
@click.argument("id", type=str, required=False)
|
|
58
|
+
@cli.org_id
|
|
59
|
+
def log(recreate: bool, max_age: str, wait: bool, wait_timeout: str, verbose: bool, save_path, id: str, org: str):
|
|
60
|
+
"""Download edge log"""
|
|
61
|
+
org_id = cli.get_org_id(org)
|
|
62
|
+
id = recent.require("edge", id)
|
|
63
|
+
|
|
64
|
+
latest = edge.latest_log(id, org_id)
|
|
65
|
+
|
|
66
|
+
need_new = True
|
|
67
|
+
if latest and not recreate:
|
|
68
|
+
status = latest.get("logStatus")
|
|
69
|
+
if status == "AVAILABLE" and _is_fresh(latest.get("createdAt"), max_age):
|
|
70
|
+
need_new = False
|
|
71
|
+
elif status not in _TERMINAL:
|
|
72
|
+
need_new = False # already in flight, just wait on it below
|
|
73
|
+
|
|
74
|
+
if need_new:
|
|
75
|
+
if verbose:
|
|
76
|
+
click.secho(f"Requesting new edge log for {id}...", fg="bright_black")
|
|
77
|
+
info = edge.request_log(id, org_id)
|
|
78
|
+
if verbose:
|
|
79
|
+
click.secho(f"Edge log requested: {json.dumps(info)}", fg="bright_black")
|
|
80
|
+
latest = edge.latest_log(id, org_id)
|
|
81
|
+
|
|
82
|
+
status = latest.get("logStatus") if latest else None
|
|
83
|
+
|
|
84
|
+
if status != "AVAILABLE":
|
|
85
|
+
if not wait:
|
|
86
|
+
return latest
|
|
87
|
+
latest, error = _wait_for_log(id, org_id, wait_timeout, verbose)
|
|
88
|
+
if error:
|
|
89
|
+
return error, 1
|
|
90
|
+
|
|
91
|
+
uri = latest.get("readAccessUri")
|
|
92
|
+
if not uri:
|
|
93
|
+
return "No readAccessUri found on the log entry.", 1
|
|
94
|
+
|
|
95
|
+
if save_path:
|
|
96
|
+
file_path = os.path.abspath(os.path.expanduser(save_path))
|
|
97
|
+
else:
|
|
98
|
+
file_path = os.path.abspath(f"{org_id}_{id}_edge_logs.tgz")
|
|
99
|
+
|
|
100
|
+
if verbose:
|
|
101
|
+
click.secho(f"Downloading edge log from {uri} to {file_path}", fg="bright_black")
|
|
102
|
+
try:
|
|
103
|
+
with httpx.stream("GET", uri, timeout=60) as r:
|
|
104
|
+
r.raise_for_status()
|
|
105
|
+
with open(file_path, "wb") as f:
|
|
106
|
+
for chunk in r.iter_bytes(chunk_size=8192):
|
|
107
|
+
f.write(chunk)
|
|
108
|
+
except Exception as e:
|
|
109
|
+
return f"Failed to download archive: {e}", 1
|
|
110
|
+
|
|
111
|
+
latest["file_path"] = file_path
|
|
112
|
+
|
|
113
|
+
if verbose:
|
|
114
|
+
click.secho("----- Edge log downloaded -----", fg="bright_black")
|
|
115
|
+
return latest
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _is_fresh(created_at: str, max_age: str) -> bool:
|
|
119
|
+
if not created_at:
|
|
120
|
+
return False
|
|
121
|
+
try:
|
|
122
|
+
# createdAt example: "Mon Jul 20 23:51:44 UTC 2026"
|
|
123
|
+
dt = datetime.strptime(created_at.replace(" UTC ", " "), "%a %b %d %H:%M:%S %Y").replace(tzinfo=timezone.utc)
|
|
124
|
+
except ValueError:
|
|
125
|
+
return False
|
|
126
|
+
age_seconds = (datetime.now(timezone.utc) - dt).total_seconds()
|
|
127
|
+
return age_seconds <= duration.to_seconds(max_age)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def _wait_for_log(id: str, org_id: str, timeout: str, verbose: bool):
|
|
131
|
+
deadline = time.time() + duration.to_seconds(timeout)
|
|
132
|
+
while time.time() < deadline:
|
|
133
|
+
info = edge.latest_log(id, org_id)
|
|
134
|
+
if not info:
|
|
135
|
+
return None, "No edge log entry found."
|
|
136
|
+
status = info.get("logStatus")
|
|
137
|
+
if status == "AVAILABLE":
|
|
138
|
+
return info, None
|
|
139
|
+
if status == "FAILED":
|
|
140
|
+
msg = info.get("errorDetail") or "Unknown error"
|
|
141
|
+
return info, f"Edge log collection failed: {msg}"
|
|
142
|
+
if verbose:
|
|
143
|
+
click.secho(f"Edge log status: {status}, waiting...", fg="bright_black")
|
|
144
|
+
time.sleep(20)
|
|
145
|
+
return None, "Timed out waiting for edge log to be ready."
|
|
@@ -8,13 +8,13 @@ from hcs_cli.service import tsctl
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
@click.command(name="stats-aggregate-connects")
|
|
11
|
-
@click.argument("from_", type=
|
|
12
|
-
@click.argument("to", type=
|
|
11
|
+
@click.argument("from_", type=str)
|
|
12
|
+
@click.argument("to", type=str)
|
|
13
13
|
@click.option("--wait", type=bool, required=False, is_flag=True, default=False)
|
|
14
14
|
@click.option("--verbose", type=bool, required=False, is_flag=True, default=False)
|
|
15
|
-
def aggregate_connects(from_:
|
|
15
|
+
def aggregate_connects(from_: str, to: str, wait: bool, verbose: bool):
|
|
16
16
|
"""
|
|
17
|
-
Aggregate connect events between FROM_ and TO unix timestamps.
|
|
17
|
+
Aggregate connect events between FROM_ and TO unix timestamps in milliseconds.
|
|
18
18
|
"""
|
|
19
19
|
payload = {"from": from_, "to": to}
|
|
20
20
|
result = diagnostic.aggregateConnects(payload, verbose=verbose)
|
|
@@ -36,8 +36,8 @@ def aggregate_connects_day_before(wait: bool, verbose: bool):
|
|
|
36
36
|
dt_1_day_ago = dt - datetime.timedelta(days=1)
|
|
37
37
|
|
|
38
38
|
print(f"Aggregating connect events from {dt_2_days_ago} to {dt_1_day_ago}")
|
|
39
|
-
from_ = int(dt_2_days_ago.timestamp())
|
|
40
|
-
to = int(dt_1_day_ago.timestamp())
|
|
39
|
+
from_ = str(int(dt_2_days_ago.timestamp() * 1000))
|
|
40
|
+
to = str(int(dt_1_day_ago.timestamp() * 1000))
|
|
41
41
|
payload = {"from": from_, "to": to}
|
|
42
42
|
result = diagnostic.aggregateConnects(payload, verbose=verbose)
|
|
43
43
|
click.echo(result)
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Copyright © 2025 Omnissa, LLC.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import sys
|
|
7
|
+
from datetime import timezone
|
|
8
|
+
|
|
9
|
+
import click
|
|
10
|
+
import yumako
|
|
11
|
+
from hcs_core.ctxp import util
|
|
12
|
+
from hcs_core.sglib import cli_options as cli
|
|
13
|
+
|
|
14
|
+
from hcs_cli.service import hoc
|
|
15
|
+
from hcs_cli.support import predefined_payload
|
|
16
|
+
from hcs_cli.support.log.message_parser import parse_message
|
|
17
|
+
from hcs_cli.support.log.query_builder import update_query
|
|
18
|
+
|
|
19
|
+
_hdcs = ["US", "EU", "JP", "JP2"]
|
|
20
|
+
|
|
21
|
+
_regions = [
|
|
22
|
+
"any", # magic flag. Search log of all regional clusters related to the selected HDC. [default]
|
|
23
|
+
"all", # Alias of 'any'
|
|
24
|
+
"eastus2",
|
|
25
|
+
"westus2",
|
|
26
|
+
"centralus",
|
|
27
|
+
"westcentralus",
|
|
28
|
+
"germanynorth",
|
|
29
|
+
"germanywestcentral",
|
|
30
|
+
"northeurope",
|
|
31
|
+
"uksouth",
|
|
32
|
+
"westeurope",
|
|
33
|
+
"japaneast",
|
|
34
|
+
"japanwest",
|
|
35
|
+
"australiaeast",
|
|
36
|
+
"aussoutheast",
|
|
37
|
+
"centralindia",
|
|
38
|
+
"southindia",
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# US
|
|
43
|
+
|
|
44
|
+
PROD_US_R_WESTUS2 = "prod110-r-westus2-cp102-*" # primary
|
|
45
|
+
PROD_US_R_EASTUS2 = "prod110-r-eastus2-cp102-*" # primary
|
|
46
|
+
PROD_US_R_CENTRALUS = "prod110-r-centralus-cp102-*" # standby
|
|
47
|
+
PROD_US_R_WESTCENTRALUS = "prod110-r-westcentralus-cp102-*" # standby
|
|
48
|
+
|
|
49
|
+
# EU
|
|
50
|
+
|
|
51
|
+
PROD_EU_R_GERMANYNORTH = "prod110-r-germanynorth-cp102-*" # primary
|
|
52
|
+
PROD_EU_R_GERMANYWESTCENTRAL = "prod110-r-germanywestcentral-cp102-*"
|
|
53
|
+
PROD_EU_R_NORTHEUROPE = "prod110-r-northeurope-cp102-*" # primary
|
|
54
|
+
PROD_EU_R_UKSOUTH = "prod110-r-uksouth-cp102-*" # primary
|
|
55
|
+
PROD_EU_R_WESTEUROPE = "prod110-r-westeurope-cp102-*"
|
|
56
|
+
|
|
57
|
+
# JP
|
|
58
|
+
PROD_JP_HDC_JAPANEAST = "prod110-hdc-japaneast-cp102-*" # primary
|
|
59
|
+
# PROD_JP_HDC_JAPANWEST = "prod110-hdc-japanwest-cp102-*" # DR. no longer in use
|
|
60
|
+
|
|
61
|
+
PROD_JP_HDC_JAPANEAST_CP103 = "prod110-hdc-japaneast-cp103-*" # JP2
|
|
62
|
+
|
|
63
|
+
PROD_JP_R_JAPANEAST = "prod110-r-japaneast-cp102-*"
|
|
64
|
+
PROD_JP_R_JAPANWEST = "prod110-r-japanwest-cp102-*"
|
|
65
|
+
PROD_AUS_R_AUSTRALIAEAST = "prod110-r-australiaeast-cp102-*"
|
|
66
|
+
PROD_AUS_R_AUSSOUTHEAST = "prod110-r-aussoutheast-cp102-*"
|
|
67
|
+
PROD_IND_R_CENTRALINDIA = "prod110-r-centralindia-cp102-*"
|
|
68
|
+
PROD_IND_R_SOUTHINDIA = "prod110-r-southindia-cp102-*"
|
|
69
|
+
|
|
70
|
+
HDC_INDEX_MAPPING = {
|
|
71
|
+
"US": "prod110-hdc-westus2-cp102-*", # primary
|
|
72
|
+
# "US_DR": "prod110-hdc-centralus-cp102-*",
|
|
73
|
+
"EU": "prod110-hdc-northeurope-cp102-*", # primary
|
|
74
|
+
# "EU_DR": "prod110-hdc-westeurope-cp102-*",
|
|
75
|
+
"JP": PROD_JP_HDC_JAPANEAST,
|
|
76
|
+
"JP2": PROD_JP_HDC_JAPANEAST_CP103,
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
ANY_HDC_AND_REGION = "prod110-*-*-cp102-*"
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
@click.command()
|
|
83
|
+
@click.option(
|
|
84
|
+
"--from",
|
|
85
|
+
"from_param",
|
|
86
|
+
type=str,
|
|
87
|
+
required=False,
|
|
88
|
+
default="-24h",
|
|
89
|
+
help="Sepcify the from date. E.g. '-1d', or '-1h35m', or '-1w', or '2023-12-04T00:19:22.854Z'.",
|
|
90
|
+
)
|
|
91
|
+
@click.option(
|
|
92
|
+
"--to",
|
|
93
|
+
type=str,
|
|
94
|
+
required=False,
|
|
95
|
+
default="now",
|
|
96
|
+
help="Sepcify the to date. E.g. 'now', or '-1d', or '-1h35m', or '-1w', or '2023-12-04T00:19:22.854Z'.",
|
|
97
|
+
)
|
|
98
|
+
@click.option("--hdc", required=False, type=click.Choice(_hdcs, case_sensitive=False), help="The HDC location.")
|
|
99
|
+
@click.option("--region", required=False, type=click.Choice(_regions, case_sensitive=False), help="Search log of regional cluster.")
|
|
100
|
+
@click.option(
|
|
101
|
+
"--service",
|
|
102
|
+
required=False,
|
|
103
|
+
help="Filter by kubernetes.pod_labels.app. If multiple apps, use comma to separate, e.g. --service inventory,lcm",
|
|
104
|
+
)
|
|
105
|
+
@click.option(
|
|
106
|
+
"--pod",
|
|
107
|
+
required=False,
|
|
108
|
+
help="Filter by kubernetes.pod_name. If multiple pods, use comma to separate, e.g. --pod clouddriver-statefulset-0,clouddriver-statefulset-1",
|
|
109
|
+
)
|
|
110
|
+
@click.option(
|
|
111
|
+
"--index",
|
|
112
|
+
required=False,
|
|
113
|
+
type=str,
|
|
114
|
+
help="Explicit ES index/index-pattern to query, overriding the --hdc-derived lookup. "
|
|
115
|
+
"E.g. --index 'prod110-r-japaneast-cp102-*' to search precisely for a single regional cluster.",
|
|
116
|
+
)
|
|
117
|
+
@cli.limit(default=500)
|
|
118
|
+
@click.option("--raw", is_flag=True, default=False, help="If raw, output the raw result.")
|
|
119
|
+
@click.argument("query", type=str, required=False)
|
|
120
|
+
def log(
|
|
121
|
+
from_param: str,
|
|
122
|
+
to: str,
|
|
123
|
+
hdc: str,
|
|
124
|
+
region: str,
|
|
125
|
+
service: str,
|
|
126
|
+
pod: str,
|
|
127
|
+
index: str,
|
|
128
|
+
limit: int,
|
|
129
|
+
raw: bool,
|
|
130
|
+
query: str,
|
|
131
|
+
):
|
|
132
|
+
"""Search Kibana Log."""
|
|
133
|
+
|
|
134
|
+
if region and index:
|
|
135
|
+
return util.error_details(ValueError("--region and --index must not be used together.")), 1
|
|
136
|
+
|
|
137
|
+
# ES index pick (orthogonal to profile URL). Global --hdc fills in when command omits --hdc.
|
|
138
|
+
if not hdc:
|
|
139
|
+
from hcs_core.sglib import hdc as hdc_session
|
|
140
|
+
|
|
141
|
+
hdc = hdc_session.active() or "US"
|
|
142
|
+
else:
|
|
143
|
+
hdc = hdc.upper()
|
|
144
|
+
|
|
145
|
+
if index:
|
|
146
|
+
es_logs_search_index = index
|
|
147
|
+
elif region:
|
|
148
|
+
if region == "any" or region == "all":
|
|
149
|
+
# search any HDC and region. still scoped to datasource so only limited HDC indexes are searched.
|
|
150
|
+
es_logs_search_index = ANY_HDC_AND_REGION
|
|
151
|
+
else:
|
|
152
|
+
# search only specific region
|
|
153
|
+
es_logs_search_index = f"prod110-r-{region.lower()}-cp102-*"
|
|
154
|
+
else:
|
|
155
|
+
# hdc only
|
|
156
|
+
es_logs_search_index = HDC_INDEX_MAPPING.get(hdc)
|
|
157
|
+
if not es_logs_search_index:
|
|
158
|
+
raise ValueError("Unknown HDC")
|
|
159
|
+
|
|
160
|
+
text = predefined_payload.load("hoc/logs.jsont")
|
|
161
|
+
replacements = {
|
|
162
|
+
"from": int(yumako.time.of(from_param, tz=timezone.utc).timestamp() * 1000),
|
|
163
|
+
"to": int(yumako.time.of(to, tz=timezone.utc).timestamp() * 1000),
|
|
164
|
+
"query": query or "*",
|
|
165
|
+
"es_logs_search_index": es_logs_search_index,
|
|
166
|
+
}
|
|
167
|
+
try:
|
|
168
|
+
text = yumako.template.replace(
|
|
169
|
+
text=text,
|
|
170
|
+
mapping=replacements,
|
|
171
|
+
raise_on_unresolved_vars=True,
|
|
172
|
+
raise_on_unused_vars=True,
|
|
173
|
+
)
|
|
174
|
+
except ValueError as e:
|
|
175
|
+
return util.error_details(e), 1
|
|
176
|
+
|
|
177
|
+
parts = text.split("///", 2)
|
|
178
|
+
try:
|
|
179
|
+
first_line = json.loads(parts[0])
|
|
180
|
+
except Exception as e:
|
|
181
|
+
print(text, file=sys.stderr)
|
|
182
|
+
print(e, file=sys.stderr)
|
|
183
|
+
return
|
|
184
|
+
try:
|
|
185
|
+
second_line = json.loads(parts[1])
|
|
186
|
+
except Exception as e:
|
|
187
|
+
print(text, file=sys.stderr)
|
|
188
|
+
print(e, file=sys.stderr)
|
|
189
|
+
return
|
|
190
|
+
|
|
191
|
+
second_line["size"] = limit
|
|
192
|
+
|
|
193
|
+
update_query(second_line, app_names=service, pod_names=pod)
|
|
194
|
+
|
|
195
|
+
payload_jsonp = json.dumps(first_line) + "\n" + json.dumps(second_line) + "\n"
|
|
196
|
+
|
|
197
|
+
# This will restrict to the specific data source.
|
|
198
|
+
hdc_location_mapping = {
|
|
199
|
+
"US": "US_APM",
|
|
200
|
+
"EU": "EU_APM",
|
|
201
|
+
"JP": "JP_APM",
|
|
202
|
+
"JP2": "JP_APM",
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
# print(payload_jsonp)
|
|
206
|
+
result = hoc.es.raw_query(payload_jsonp, hdc_location=hdc_location_mapping[hdc])
|
|
207
|
+
if raw:
|
|
208
|
+
return result
|
|
209
|
+
|
|
210
|
+
# format the result to pure message array
|
|
211
|
+
ret = []
|
|
212
|
+
for item in result:
|
|
213
|
+
ret.append(parse_message(item))
|
|
214
|
+
return ret
|
|
@@ -10,7 +10,10 @@ from ..edge import delete as delete
|
|
|
10
10
|
from ..edge import get as get
|
|
11
11
|
from ..edge import get_connection_string as get_connection_string
|
|
12
12
|
from ..edge import items as items
|
|
13
|
+
from ..edge import latest_log as latest_log
|
|
13
14
|
from ..edge import list as list
|
|
15
|
+
from ..edge import list_logs as list_logs
|
|
16
|
+
from ..edge import request_log as request_log
|
|
14
17
|
from ..edge import safe_delete as safe_delete
|
|
15
18
|
from ..edge import wait_for as wait_for
|
|
16
19
|
from ..edge import wait_for_deleted as wait_for_deleted
|
|
@@ -155,3 +155,19 @@ def _wait_for_terminal_state(id, org_id, timeout):
|
|
|
155
155
|
def get_connection_string(id: str, org_id: str):
|
|
156
156
|
url = f"{base_context}/{id}/device-connection-string?org_id={org_id}"
|
|
157
157
|
return _client.get(url)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def request_log(id: str, org_id: str):
|
|
161
|
+
url = f"{base_context}/{id}/logs?org_id={org_id}"
|
|
162
|
+
return _client.post(url, {})
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def list_logs(id: str, org_id: str, page: int = 0, size: int = 10):
|
|
166
|
+
url = f"{base_context}/{id}/logs?page={page}&size={size}&sort=createdAt,desc&org_id={org_id}&edgeDeploymentId={id}"
|
|
167
|
+
return _client.get(url)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def latest_log(id: str, org_id: str):
|
|
171
|
+
content = list_logs(id, org_id, page=0, size=1).get("content") or []
|
|
172
|
+
return content[0] if content else None
|
|
173
|
+
# logStatus: ACCEPTED -> AVAILABLE (readAccessUri present) | FAILED (errorDetail present)
|
|
@@ -93,20 +93,36 @@ _PATTERN_SPRING = re.compile(
|
|
|
93
93
|
_PATTERNS = [_PATTERN_LCM, _PATTERN_CLOUDDRIVER, _PATTERN_TASK, _PATTERN_ELASTIC, _PATTERN_ENVOY, _PATTERN_PORTAL, _PATTERN_SPRING]
|
|
94
94
|
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
_PASSTHROUGH_FIELDS = {
|
|
97
|
+
"kubernetes.pod_labels.app": "service",
|
|
98
|
+
"kubernetes.pod_name": "pod",
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def parse_message(item: dict) -> dict:
|
|
103
|
+
message = item["message"]
|
|
104
|
+
|
|
97
105
|
if _PATTERN_JSON_LOG.match(message):
|
|
98
106
|
try:
|
|
99
107
|
obj = json.loads(message)
|
|
100
|
-
|
|
108
|
+
parsed = {
|
|
101
109
|
"timestamp": obj.get("@timestamp", ""),
|
|
102
110
|
"level": obj.get("log.level", ""),
|
|
103
111
|
"logger": obj.get("log.logger", ""),
|
|
104
112
|
"body": obj.get("message", ""),
|
|
105
113
|
}
|
|
114
|
+
return _with_passthrough_fields(parsed, item)
|
|
106
115
|
except json.JSONDecodeError:
|
|
107
116
|
pass
|
|
108
117
|
for pattern in _PATTERNS:
|
|
109
118
|
m = pattern.match(message)
|
|
110
119
|
if m:
|
|
111
|
-
return m.groupdict()
|
|
112
|
-
return {"body": message}
|
|
120
|
+
return _with_passthrough_fields(m.groupdict(), item)
|
|
121
|
+
return _with_passthrough_fields({"body": message}, item)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _with_passthrough_fields(parsed: dict, item: dict) -> dict:
|
|
125
|
+
for source_key, dest_key in _PASSTHROUGH_FIELDS.items():
|
|
126
|
+
if source_key in item:
|
|
127
|
+
parsed[dest_key] = item[source_key]
|
|
128
|
+
return parsed
|
|
@@ -5,7 +5,7 @@ Copyright © 2025 Omnissa, LLC.
|
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
def update_query(query_object: dict,
|
|
8
|
+
def update_query(query_object: dict, app_names: Optional[str], pod_names: Optional[str]) -> dict:
|
|
9
9
|
# Example query object: query string "KOP" and "V1-CUSFP0101I", time range, and kubernetes.pod_labels.app=lcm
|
|
10
10
|
# {
|
|
11
11
|
# "query": {
|
|
@@ -74,8 +74,8 @@ def update_query(query_object: dict, any_apps: Optional[str]) -> dict:
|
|
|
74
74
|
|
|
75
75
|
filter_array = query_object["query"]["bool"]["filter"]
|
|
76
76
|
|
|
77
|
-
if
|
|
78
|
-
apps = [a.strip() for a in
|
|
77
|
+
if app_names:
|
|
78
|
+
apps = [a.strip() for a in app_names.split(",") if a.strip()]
|
|
79
79
|
if len(apps) == 1:
|
|
80
80
|
filter_array.append({"match_phrase": {"kubernetes.pod_labels.app": apps[0]}})
|
|
81
81
|
elif len(apps) > 1:
|
|
@@ -83,4 +83,12 @@ def update_query(query_object: dict, any_apps: Optional[str]) -> dict:
|
|
|
83
83
|
{"bool": {"minimum_should_match": 1, "should": [{"match_phrase": {"kubernetes.pod_labels.app": app}} for app in apps]}}
|
|
84
84
|
)
|
|
85
85
|
|
|
86
|
+
if pod_names:
|
|
87
|
+
pods = [p.strip() for p in pod_names.split(",") if p.strip()]
|
|
88
|
+
if len(pods) == 1:
|
|
89
|
+
filter_array.append({"match_phrase": {"kubernetes.pod_name": pods[0]}})
|
|
90
|
+
elif len(pods) > 1:
|
|
91
|
+
filter_array.append(
|
|
92
|
+
{"bool": {"minimum_should_match": 1, "should": [{"match_phrase": {"kubernetes.pod_name": p}} for p in pods]}}
|
|
93
|
+
)
|
|
86
94
|
return query_object
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Copyright © 2025 Omnissa, LLC.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import json
|
|
6
|
-
import sys
|
|
7
|
-
from datetime import timezone
|
|
8
|
-
|
|
9
|
-
import click
|
|
10
|
-
import yumako
|
|
11
|
-
from hcs_core.ctxp import util
|
|
12
|
-
from hcs_core.sglib import cli_options as cli
|
|
13
|
-
|
|
14
|
-
from hcs_cli.service import hoc
|
|
15
|
-
from hcs_cli.support import predefined_payload
|
|
16
|
-
from hcs_cli.support.log.message_parser import parse_message
|
|
17
|
-
from hcs_cli.support.log.query_builder import update_query
|
|
18
|
-
|
|
19
|
-
_hdcs = ["US", "EU", "JP"]
|
|
20
|
-
|
|
21
|
-
_regions = [
|
|
22
|
-
"eastus2",
|
|
23
|
-
"westus2",
|
|
24
|
-
"northcentralus",
|
|
25
|
-
"northeurope",
|
|
26
|
-
"germanywestcentral",
|
|
27
|
-
"uksouth",
|
|
28
|
-
"japaneast",
|
|
29
|
-
"australiaeast",
|
|
30
|
-
"centralindia",
|
|
31
|
-
]
|
|
32
|
-
_stacks = ["prod", "staging", "stress"]
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@click.command()
|
|
36
|
-
@cli.org_id
|
|
37
|
-
@click.option(
|
|
38
|
-
"--from",
|
|
39
|
-
"from_param",
|
|
40
|
-
type=str,
|
|
41
|
-
required=False,
|
|
42
|
-
default="-24h",
|
|
43
|
-
help="Sepcify the from date. E.g. '-1d', or '-1h35m', or '-1w', or '2023-12-04T00:19:22.854Z'.",
|
|
44
|
-
)
|
|
45
|
-
@click.option(
|
|
46
|
-
"--to",
|
|
47
|
-
type=str,
|
|
48
|
-
required=False,
|
|
49
|
-
default="now",
|
|
50
|
-
help="Sepcify the to date. E.g. 'now', or '-1d', or '-1h35m', or '-1w', or '2023-12-04T00:19:22.854Z'.",
|
|
51
|
-
)
|
|
52
|
-
@click.option("--hdc", required=False, type=click.Choice(_hdcs, case_sensitive=False), help="The HDC location")
|
|
53
|
-
@click.option("--region", required=False, type=click.Choice(_regions, case_sensitive=False), help="The region")
|
|
54
|
-
@click.option("--stack", required=False, type=click.Choice(_stacks, case_sensitive=False), help="The stack")
|
|
55
|
-
@click.option(
|
|
56
|
-
"--service",
|
|
57
|
-
required=False,
|
|
58
|
-
help="Filter by kubernetes.pod_labels.app. If multiple apps, use comma to separate, e.g. --service inventory,lcm",
|
|
59
|
-
)
|
|
60
|
-
@cli.limit(default=500)
|
|
61
|
-
@click.option("--raw", is_flag=True, default=False, help="If raw, output the raw result.")
|
|
62
|
-
@click.argument("query", type=str, required=False)
|
|
63
|
-
def log(org: str, from_param: str, to: str, hdc: str, region: str, stack: str, service: str, limit: int, raw: bool, query: str):
|
|
64
|
-
"""Search Kibana Log."""
|
|
65
|
-
|
|
66
|
-
# org_id = cli.get_org_id(org)
|
|
67
|
-
|
|
68
|
-
# ES index pick (orthogonal to profile URL). Global --hdc fills in when command omits --hdc.
|
|
69
|
-
if not hdc:
|
|
70
|
-
from hcs_core.sglib import hdc as hdc_session
|
|
71
|
-
|
|
72
|
-
hdc = hdc_session.active() or "US"
|
|
73
|
-
else:
|
|
74
|
-
hdc = hdc.upper()
|
|
75
|
-
index_map = {
|
|
76
|
-
"US": "prod110-hdc-westus2-cp102-*",
|
|
77
|
-
# "US": "prod110-hdc-centralus-cp102-*",
|
|
78
|
-
"EU": "prod110-hdc-northeurope-cp102-*",
|
|
79
|
-
"JP": "prod110-hdc-japaneast-cp102-*",
|
|
80
|
-
"AUS": "",
|
|
81
|
-
"IND": "",
|
|
82
|
-
"GER": "",
|
|
83
|
-
"UK": "",
|
|
84
|
-
"US_APM": "prod110-hdc-westus2-cp102-*",
|
|
85
|
-
"EU_APM": "prod110-hdc-northeurope-cp102-*",
|
|
86
|
-
"JP_APM": "prod110-hdc-japaneast-cp102-*",
|
|
87
|
-
}
|
|
88
|
-
es_logs_search_index = index_map[hdc]
|
|
89
|
-
|
|
90
|
-
text = predefined_payload.load("hoc/logs.jsont")
|
|
91
|
-
replacements = {
|
|
92
|
-
"from": int(yumako.time.of(from_param, tz=timezone.utc).timestamp() * 1000),
|
|
93
|
-
"to": int(yumako.time.of(to, tz=timezone.utc).timestamp() * 1000),
|
|
94
|
-
"query": query or "",
|
|
95
|
-
"es_logs_search_index": es_logs_search_index,
|
|
96
|
-
}
|
|
97
|
-
try:
|
|
98
|
-
text = yumako.template.replace(
|
|
99
|
-
text=text,
|
|
100
|
-
mapping=replacements,
|
|
101
|
-
raise_on_unresolved_vars=True,
|
|
102
|
-
raise_on_unused_vars=True,
|
|
103
|
-
)
|
|
104
|
-
except ValueError as e:
|
|
105
|
-
return util.error_details(e), 1
|
|
106
|
-
|
|
107
|
-
parts = text.split("///", 2)
|
|
108
|
-
try:
|
|
109
|
-
first_line = json.loads(parts[0])
|
|
110
|
-
except Exception as e:
|
|
111
|
-
print(text, file=sys.stderr)
|
|
112
|
-
print(e, file=sys.stderr)
|
|
113
|
-
return
|
|
114
|
-
try:
|
|
115
|
-
second_line = json.loads(parts[1])
|
|
116
|
-
except Exception as e:
|
|
117
|
-
print(text, file=sys.stderr)
|
|
118
|
-
print(e, file=sys.stderr)
|
|
119
|
-
return
|
|
120
|
-
|
|
121
|
-
second_line["size"] = limit
|
|
122
|
-
|
|
123
|
-
update_query(second_line, any_apps=service)
|
|
124
|
-
|
|
125
|
-
payload_jsonp = json.dumps(first_line) + "\n" + json.dumps(second_line) + "\n"
|
|
126
|
-
|
|
127
|
-
hdc_location_mapping = {
|
|
128
|
-
# "US", "EU", "JP", "AUS", "IND", "GER", "UK", "US_APM", "EU_APM", "JP_APM"
|
|
129
|
-
"US": "US_APM",
|
|
130
|
-
"EU": "EU_APM",
|
|
131
|
-
"JP": "JP_APM",
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
# print(payload_jsonp)
|
|
135
|
-
result = hoc.es.raw_query(payload_jsonp, hdc_location=hdc_location_mapping[hdc])
|
|
136
|
-
if raw:
|
|
137
|
-
return result
|
|
138
|
-
|
|
139
|
-
# format the result to pure message array
|
|
140
|
-
ret = []
|
|
141
|
-
for item in result:
|
|
142
|
-
message = item["message"]
|
|
143
|
-
parsed = parse_message(message)
|
|
144
|
-
ret.append(parsed)
|
|
145
|
-
return ret
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|