edge-containers-cli 3.5.3__tar.gz → 3.5.5__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.
Files changed (107) hide show
  1. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/PKG-INFO +1 -1
  2. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/_version.py +2 -2
  3. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/cmds/k8s_commands.py +4 -2
  4. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/cmds/local_commands.py +33 -10
  5. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/globals.py +2 -0
  6. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli.egg-info/PKG-INFO +1 -1
  7. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/local.yaml +10 -2
  8. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.copier-answers.yml +0 -0
  9. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.devcontainer/devcontainer.json +0 -0
  10. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/CONTRIBUTING.md +0 -0
  11. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/actions/install_requirements/action.yml +0 -0
  12. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/dependabot.yml +0 -0
  13. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/pages/index.html +0 -0
  14. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/pages/make_switcher.py +0 -0
  15. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/workflows/_check.yml +0 -0
  16. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/workflows/_dist.yml +0 -0
  17. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/workflows/_pypi.yml +0 -0
  18. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/workflows/_release.yml +0 -0
  19. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/workflows/_sys_test.yml +0 -0
  20. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/workflows/_test.yml +0 -0
  21. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/workflows/_tox.yml +0 -0
  22. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.github/workflows/ci.yml +0 -0
  23. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.gitignore +0 -0
  24. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.pre-commit-config.yaml +0 -0
  25. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.vscode/extensions.json +0 -0
  26. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.vscode/launch.json +0 -0
  27. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.vscode/settings.json +0 -0
  28. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/.vscode/tasks.json +0 -0
  29. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/Dockerfile +0 -0
  30. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/LICENSE +0 -0
  31. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/README.md +0 -0
  32. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/catalog-info.yaml +0 -0
  33. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/conf.py +0 -0
  34. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/explanations/decisions/0001-record-architecture-decisions.rst +0 -0
  35. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/explanations/decisions/0002-switched-to-pip-skeleton.rst +0 -0
  36. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/explanations/decisions.rst +0 -0
  37. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/how-to/build-docs.rst +0 -0
  38. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/how-to/contribute.rst +0 -0
  39. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/how-to/lint.rst +0 -0
  40. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/how-to/make-release.rst +0 -0
  41. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/how-to/pin-requirements.rst +0 -0
  42. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/how-to/run-tests.rst +0 -0
  43. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/how-to/static-analysis.rst +0 -0
  44. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/how-to/test-container.rst +0 -0
  45. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/how-to/update-tools.rst +0 -0
  46. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/index.rst +0 -0
  47. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/reference/standards.rst +0 -0
  48. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/developer/tutorials/dev-install.rst +0 -0
  49. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/genindex.rst +0 -0
  50. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/images/dls-favicon.ico +0 -0
  51. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/images/dls-logo.svg +0 -0
  52. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/index.rst +0 -0
  53. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/user/explanations/docs-structure.rst +0 -0
  54. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/user/how-to/run-container.rst +0 -0
  55. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/user/index.rst +0 -0
  56. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/user/reference/api.rst +0 -0
  57. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/docs/user/tutorials/installation.rst +0 -0
  58. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/pyproject.toml +0 -0
  59. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/setup.cfg +0 -0
  60. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/__init__.py +0 -0
  61. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/__main__.py +0 -0
  62. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/autocomplete.py +0 -0
  63. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/cmds/__init__.py +0 -0
  64. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/cmds/cli.py +0 -0
  65. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/cmds/commands.py +0 -0
  66. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/cmds/helm.py +0 -0
  67. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/cmds/kubectl.py +0 -0
  68. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/cmds/monitor.py +0 -0
  69. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/cmds/monitor.tcss +0 -0
  70. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/docker.py +0 -0
  71. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/git.py +0 -0
  72. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/logging.py +0 -0
  73. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/shell.py +0 -0
  74. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli/utils.py +0 -0
  75. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli.egg-info/SOURCES.txt +0 -0
  76. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli.egg-info/dependency_links.txt +0 -0
  77. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli.egg-info/entry_points.txt +0 -0
  78. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli.egg-info/requires.txt +0 -0
  79. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/src/edge_containers_cli.egg-info/top_level.txt +0 -0
  80. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/__init__.py +0 -0
  81. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/conftest.py +0 -0
  82. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/autocomplete.yaml +0 -0
  83. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/.copier-answers.yml +0 -0
  84. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/.github/dependabot.yml +0 -0
  85. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/.github/workflows/ci_verify.sh +0 -0
  86. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/.github/workflows/verify.yml +0 -0
  87. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/.gitignore +0 -0
  88. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/LICENSE +0 -0
  89. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/README.md +0 -0
  90. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/environment.sh +0 -0
  91. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/helm/shared/Chart.yaml +0 -0
  92. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/helm/shared/README.md +0 -0
  93. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/helm/shared/values.yaml +0 -0
  94. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/include/iocs/Chart.yaml +0 -0
  95. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/include/iocs/templates/configmap.yaml +0 -0
  96. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/services/bl01t-ea-test-01/Chart.yaml +0 -0
  97. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/services/bl01t-ea-test-01/config/ioc.db +0 -0
  98. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/services/bl01t-ea-test-01/config/ioc.yaml +0 -0
  99. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/services/bl01t-ea-test-01/pretend_helm.tgz +0 -0
  100. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/services/bl01t-ea-test-01/values.yaml +0 -0
  101. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/bl01t/update-helm +0 -0
  102. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/data/ioc.yaml +0 -0
  103. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/test_autocomplete.py +0 -0
  104. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/test_cli.py +0 -0
  105. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/test_ioc.py +0 -0
  106. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/test_local.py +0 -0
  107. {edge_containers_cli-3.5.3 → edge_containers_cli-3.5.5}/tests/test_system.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edge-containers-cli
3
- Version: 3.5.3
3
+ Version: 3.5.5
4
4
  Summary: CLI for deploying and managing epics containers IOCs and services
5
5
  Author-email: Giles Knap <giles.knap@gmail.com>
6
6
  License: Apache License
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '3.5.3'
16
- __version_tuple__ = version_tuple = (3, 5, 3)
15
+ __version__ = version = '3.5.5'
16
+ __version_tuple__ = version_tuple = (3, 5, 5)
@@ -194,7 +194,9 @@ class K8sCommands(Commands):
194
194
  has_header=False,
195
195
  new_columns=["name", "running", "restarts"],
196
196
  )
197
- services_df = services_df.join(gtpo_df, on="name", how="left")
197
+ services_df = services_df.join(
198
+ gtpo_df, on="name", how="left", coalesce=True
199
+ )
198
200
  services_df = services_df.with_columns(
199
201
  polars.col("running").replace({"Running": True}, default=False),
200
202
  polars.col("restarts").fill_null(0),
@@ -214,7 +216,7 @@ class K8sCommands(Commands):
214
216
  helm_df = polars.read_json(StringIO(str(helm_out)))
215
217
  helm_df = helm_df.rename({"app_version": "version", "updated": "deployed"})
216
218
  helm_df = helm_df.with_columns(polars.col("deployed").str.slice(0, 19))
217
- services_df = services_df.join(helm_df, on="name", how="left")
219
+ services_df = services_df.join(helm_df, on="name", how="left", coalesce=True)
218
220
  log.debug(services_df)
219
221
 
220
222
  # Arrange columns
@@ -10,6 +10,7 @@ tool like Portainer is a decent workflow.
10
10
  """
11
11
 
12
12
  import json
13
+ import os
13
14
  import re
14
15
  import tempfile
15
16
  from datetime import datetime
@@ -65,6 +66,14 @@ class LocalCommands(Commands):
65
66
  raise typer.Abort()
66
67
  self.docker.remove(service_name)
67
68
 
69
+ def make_volume(self, volume: str):
70
+ shell.run_command(
71
+ f"{self.docker.docker} volume rm -f {volume}", interactive=False
72
+ )
73
+ shell.run_command(
74
+ f"{self.docker.docker} volume create {volume}", interactive=False
75
+ )
76
+
68
77
  def _do_deploy(self, ioc_instance: Path, version: str, args: str):
69
78
  service_name, _ = check_instance_path(ioc_instance)
70
79
 
@@ -72,26 +81,40 @@ class LocalCommands(Commands):
72
81
  log.debug(f"deploying {ioc_instance} with image {image}")
73
82
  config = ioc_instance / globals.CONFIG_FOLDER
74
83
  service_name = ioc_instance.name
75
- volume = f"{service_name}_config"
84
+ config_volume = f"{service_name}_config"
85
+ runtime_volume = f"{service_name}_runtime"
76
86
 
77
87
  self.docker.remove(service_name)
78
- shell.run_command(
79
- f"{self.docker.docker} volume rm -f {volume}", interactive=False
80
- )
81
- shell.run_command(
82
- f"{self.docker.docker} volume create {volume}", interactive=False
83
- )
88
+ self.make_volume(config_volume)
89
+ self.make_volume(runtime_volume)
84
90
 
85
- vol = f"-v {volume}:{globals.IOC_CONFIG_FOLDER}"
91
+ vol = f"-v {config_volume}:{globals.IOC_CONFIG_FOLDER}"
92
+ vol = vol + f" -v {runtime_volume}:{globals.IOC_RUNTIME_FOLDER}"
86
93
  label = f"-l is_IOC=true -l version={version}"
87
- cmd = f"run -dit --net host --restart unless-stopped {label} {vol} {args}"
88
94
  dest = "busybox:copyto"
89
95
 
96
+ # use environment to configure volumes and user id
97
+ data_folder = os.getenv("EC_LOCAL_DATA_FOLDER")
98
+ if data_folder:
99
+ vol = vol + f" -v {data_folder}:{data_folder}"
100
+ opi_folder = os.getenv("EC_LOCAL_OPI_FOLDER")
101
+ if opi_folder:
102
+ vol = vol + f" -v {opi_folder}:/epics/opi"
103
+
104
+ user_id = os.getenv("EC_LOCAL_USER_ID")
105
+ ids = f"-u {user_id}" if user_id else ""
106
+ group_id = os.getenv("EC_LOCAL_GROUP_ID")
107
+ if group_id:
108
+ cmd = f"{ids} -g {group_id}"
109
+
110
+ cmd = f"run -dit --net host --restart unless-stopped {label} {vol} {args} {ids}"
111
+ cmd = cmd.strip()
112
+
90
113
  # get the config into the volume before launching the IOC container
91
114
  shell.run_command(f"{self.docker.docker} rm -f busybox", interactive=False)
92
115
  shell.run_command(
93
116
  f"{self.docker.docker} container create --name busybox "
94
- f"-v {volume}:/copyto busybox",
117
+ f"-v {config_volume}:/copyto busybox",
95
118
  interactive=False,
96
119
  )
97
120
  for file in config.glob("*"):
@@ -21,6 +21,8 @@ SHARED_CHARTS_FOLDER = "../../helm"
21
21
  CONFIG_FOLDER = "config"
22
22
  # location of IOC Instance configuration inside a Generic IOC container
23
23
  IOC_CONFIG_FOLDER = "/epics/ioc/config/"
24
+ # location of IOC Instance configuration inside a Generic IOC container
25
+ IOC_RUNTIME_FOLDER = "/epics/runtime/"
24
26
  # file name of IOC Instance ibek configuration inside a Generic IOC container
25
27
  CONFIG_FILE_GLOB = "*.yaml"
26
28
  # namespace name for deploying IOC instances into the local podman/docker
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edge-containers-cli
3
- Version: 3.5.3
3
+ Version: 3.5.5
4
4
  Summary: CLI for deploying and managing epics containers IOCs and services
5
5
  Author-email: Giles Knap <giles.knap@gmail.com>
6
6
  License: Apache License
@@ -26,6 +26,10 @@ deploy_local:
26
26
  rsp: bl01t-ea-test-01-config
27
27
  - cmd: docker volume create bl01t-ea-test-01_config
28
28
  rsp: bl01t-ea-test-01-config
29
+ - cmd: docker volume rm -f bl01t-ea-test-01_runtime
30
+ rsp: bl01t-ea-test-01-config
31
+ - cmd: docker volume create bl01t-ea-test-01_runtime
32
+ rsp: bl01t-ea-test-01-config
29
33
  - cmd: docker rm -f busybox
30
34
  rsp: ""
31
35
  - cmd: docker container create --name busybox -v bl01t-ea-test-01_config:/copyto busybox
@@ -37,7 +41,7 @@ deploy_local:
37
41
  rsp: ""
38
42
  - cmd: docker rm -f busybox
39
43
  rsp: ""
40
- - cmd: docker run -dit --net host --restart unless-stopped -l is_IOC=true -l version=.* -v bl01t-ea-test-01_config:\/epics\/ioc\/config\/ --name bl01t-ea-test-01 ghcr.io\/epics-containers\/ioc-adsimdetector-runtime:2024.4.1
44
+ - cmd: docker run -dit --net host --restart unless-stopped -l is_IOC=true -l version=.* -v bl01t-ea-test-01_config:\/epics\/ioc\/config\/ -v bl01t-ea-test-01_runtime:/epics/runtime/ --name bl01t-ea-test-01 ghcr.io\/epics-containers\/ioc-adsimdetector-runtime:2024.4.1
41
45
  rsp: True
42
46
  - cmd: docker ps -f name=bl01t-ea-test-01 --format .*
43
47
  rsp: bl01t-ea-test-01
@@ -53,6 +57,10 @@ deploy:
53
57
  rsp: bl01t-ea-test-01-config
54
58
  - cmd: docker volume create bl01t-ea-test-01_config
55
59
  rsp: bl01t-ea-test-01-config
60
+ - cmd: docker volume rm -f bl01t-ea-test-01_runtime
61
+ rsp: bl01t-ea-test-01-config
62
+ - cmd: docker volume create bl01t-ea-test-01_runtime
63
+ rsp: bl01t-ea-test-01-config
56
64
  - cmd: docker rm -f busybox
57
65
  rsp: ""
58
66
  - cmd: docker container create --name busybox -v bl01t-ea-test-01_config:/copyto busybox
@@ -64,7 +72,7 @@ deploy:
64
72
  rsp: ""
65
73
  - cmd: docker rm -f busybox
66
74
  rsp: ""
67
- - cmd: docker run -dit --net host --restart unless-stopped -l is_IOC=true -l version=2.0 -v bl01t-ea-test-01_config:/epics/ioc/config/ --name bl01t-ea-test-01 ghcr.io/epics-containers/ioc-adsimdetector-runtime:2024.4.1
75
+ - cmd: docker run -dit --net host --restart unless-stopped -l is_IOC=true -l version=2.0 -v bl01t-ea-test-01_config:/epics/ioc/config/ -v bl01t-ea-test-01_runtime:/epics/runtime/ --name bl01t-ea-test-01 ghcr.io/epics-containers/ioc-adsimdetector-runtime:2024.4.1
68
76
  rsp: True
69
77
  - cmd: docker ps -f name=bl01t-ea-test-01 --format .*
70
78
  rsp: bl01t-ea-test-01