portacode 1.4.15.dev17__py3-none-any.whl → 1.4.15.dev19__py3-none-any.whl
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.
- portacode/_version.py +2 -2
- portacode/connection/handlers/proxmox_infra.py +28 -3
- {portacode-1.4.15.dev17.dist-info → portacode-1.4.15.dev19.dist-info}/METADATA +1 -1
- {portacode-1.4.15.dev17.dist-info → portacode-1.4.15.dev19.dist-info}/RECORD +8 -8
- {portacode-1.4.15.dev17.dist-info → portacode-1.4.15.dev19.dist-info}/WHEEL +0 -0
- {portacode-1.4.15.dev17.dist-info → portacode-1.4.15.dev19.dist-info}/entry_points.txt +0 -0
- {portacode-1.4.15.dev17.dist-info → portacode-1.4.15.dev19.dist-info}/licenses/LICENSE +0 -0
- {portacode-1.4.15.dev17.dist-info → portacode-1.4.15.dev19.dist-info}/top_level.txt +0 -0
portacode/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.4.15.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 4, 15, '
|
|
31
|
+
__version__ = version = '1.4.15.dev19'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 4, 15, 'dev19')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -496,6 +496,16 @@ def _friendly_step_label(step_name: str) -> str:
|
|
|
496
496
|
return normalized.capitalize()
|
|
497
497
|
|
|
498
498
|
|
|
499
|
+
_NETWORK_WAIT_CMD = (
|
|
500
|
+
"count=0; "
|
|
501
|
+
"while [ \"$count\" -lt 20 ]; do "
|
|
502
|
+
" if command -v ip >/dev/null 2>&1 && ip route get 1.1.1.1 >/dev/null 2>&1; then break; fi; "
|
|
503
|
+
" if [ -f /proc/net/route ] && grep -q '^00000000' /proc/net/route >/dev/null 2>&1; then break; fi; "
|
|
504
|
+
" sleep 1; "
|
|
505
|
+
" count=$((count+1)); "
|
|
506
|
+
"done"
|
|
507
|
+
)
|
|
508
|
+
|
|
499
509
|
_PACKAGE_MANAGER_PROFILES: Dict[str, Dict[str, Any]] = {
|
|
500
510
|
"apt": {
|
|
501
511
|
"update_cmd": "apt-get update -y",
|
|
@@ -524,7 +534,7 @@ _PACKAGE_MANAGER_PROFILES: Dict[str, Dict[str, Any]] = {
|
|
|
524
534
|
"apk": {
|
|
525
535
|
"update_cmd": "apk update",
|
|
526
536
|
"update_step_name": "apk_update",
|
|
527
|
-
"install_cmd": "apk add --no-cache python3 py3-pip sudo",
|
|
537
|
+
"install_cmd": "apk add --no-cache python3 py3-pip sudo shadow",
|
|
528
538
|
"install_step_name": "install_deps",
|
|
529
539
|
"update_retries": 3,
|
|
530
540
|
"install_retries": 5,
|
|
@@ -570,7 +580,9 @@ def _build_bootstrap_steps(
|
|
|
570
580
|
package_manager: str = "apt",
|
|
571
581
|
) -> List[Dict[str, Any]]:
|
|
572
582
|
profile = _PACKAGE_MANAGER_PROFILES.get(package_manager, _PACKAGE_MANAGER_PROFILES["apt"])
|
|
573
|
-
steps: List[Dict[str, Any]] = [
|
|
583
|
+
steps: List[Dict[str, Any]] = [
|
|
584
|
+
{"name": "wait_for_network", "cmd": _NETWORK_WAIT_CMD, "retries": 0},
|
|
585
|
+
]
|
|
574
586
|
update_cmd = profile.get("update_cmd")
|
|
575
587
|
if update_cmd:
|
|
576
588
|
steps.append(
|
|
@@ -596,7 +608,20 @@ def _build_bootstrap_steps(
|
|
|
596
608
|
steps.extend(
|
|
597
609
|
[
|
|
598
610
|
{"name": "user_exists", "cmd": f"id -u {user} >/dev/null 2>&1 || adduser --disabled-password --gecos '' {user}", "retries": 0},
|
|
599
|
-
{
|
|
611
|
+
{
|
|
612
|
+
"name": "add_sudo",
|
|
613
|
+
"cmd": (
|
|
614
|
+
f"if command -v usermod >/dev/null 2>&1; then "
|
|
615
|
+
f"usermod -aG sudo {user}; "
|
|
616
|
+
"else "
|
|
617
|
+
" addgroup wheel >/dev/null 2>&1 || true; "
|
|
618
|
+
" addgroup sudo >/dev/null 2>&1 || true; "
|
|
619
|
+
f" addgroup {user} wheel >/dev/null 2>&1 || true; "
|
|
620
|
+
f" addgroup {user} sudo >/dev/null 2>&1 || true; "
|
|
621
|
+
"fi"
|
|
622
|
+
),
|
|
623
|
+
"retries": 0,
|
|
624
|
+
},
|
|
600
625
|
]
|
|
601
626
|
)
|
|
602
627
|
if password:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
portacode/README.md,sha256=4dKtpvR8LNgZPVz37GmkQCMWIr_u25Ao63iW56s7Ke4,775
|
|
2
2
|
portacode/__init__.py,sha256=oB3sV1wXr-um-RXio73UG8E5Xx6cF2ZVJveqjNmC-vQ,1086
|
|
3
3
|
portacode/__main__.py,sha256=jmHTGC1hzmo9iKJLv-SSYe9BSIbPPZ2IOpecI03PlTs,296
|
|
4
|
-
portacode/_version.py,sha256=
|
|
4
|
+
portacode/_version.py,sha256=SHpiSRJiC6Gyo_LZbcMuMheGquhQYp8kpipHfjZ1VCs,721
|
|
5
5
|
portacode/cli.py,sha256=mGLKoZ-T2FBF7IA9wUq0zyG0X9__-A1ao7gajjcVRH8,21828
|
|
6
6
|
portacode/data.py,sha256=5-s291bv8J354myaHm1Y7CQZTZyRzMU3TGe5U4hb-FA,1591
|
|
7
7
|
portacode/keypair.py,sha256=0OO4vHDcF1XMxCDqce61xFTlFwlTcmqe5HyGsXFEt7s,5838
|
|
@@ -22,7 +22,7 @@ portacode/connection/handlers/diff_handlers.py,sha256=iYTIRCcpEQ03vIPKZCsMTE5aZb
|
|
|
22
22
|
portacode/connection/handlers/file_handlers.py,sha256=nAJH8nXnX07xxD28ngLpgIUzcTuRwZBNpEGEKdRqohw,39507
|
|
23
23
|
portacode/connection/handlers/project_aware_file_handlers.py,sha256=AqgMnDqX2893T2NsrvUSCwjN5VKj4Pb2TN0S_SuboOE,9803
|
|
24
24
|
portacode/connection/handlers/project_state_handlers.py,sha256=v6ZefGW9i7n1aZLq2jOGumJIjYb6aHlPI4m1jkYewm8,1686
|
|
25
|
-
portacode/connection/handlers/proxmox_infra.py,sha256=
|
|
25
|
+
portacode/connection/handlers/proxmox_infra.py,sha256=6ILb0nSisU44UziVkONaVsYJSHjkvIMNP8x0oxAUgYo,70249
|
|
26
26
|
portacode/connection/handlers/registry.py,sha256=qXGE60sYEWg6ZtVQzFcZ5YI2XWR6lMgw4hAL9x5qR1I,6181
|
|
27
27
|
portacode/connection/handlers/session.py,sha256=uNGfiO_1B9-_yjJKkpvmbiJhIl6b-UXlT86UTfd6WYE,42219
|
|
28
28
|
portacode/connection/handlers/system_handlers.py,sha256=fr12QpOr_Z8KYGUU-AYrTQwRPAcrLK85hvj3SEq1Kw8,14757
|
|
@@ -65,7 +65,7 @@ portacode/utils/__init__.py,sha256=NgBlWTuNJESfIYJzP_3adI1yJQJR0XJLRpSdVNaBAN0,3
|
|
|
65
65
|
portacode/utils/diff_apply.py,sha256=4Oi7ft3VUCKmiUE4VM-OeqO7Gk6H7PF3WnN4WHXtjxI,15157
|
|
66
66
|
portacode/utils/diff_renderer.py,sha256=S76StnQ2DLfsz4Gg0m07UwPfRp8270PuzbNaQq-rmYk,13850
|
|
67
67
|
portacode/utils/ntp_clock.py,sha256=VqCnWCTehCufE43W23oB-WUdAZGeCcLxkmIOPwInYHc,2499
|
|
68
|
-
portacode-1.4.15.
|
|
68
|
+
portacode-1.4.15.dev19.dist-info/licenses/LICENSE,sha256=2FGbCnUDgRYuQTkB1O1dUUpu5CVAjK1j4_p6ack9Z54,1066
|
|
69
69
|
test_modules/README.md,sha256=Do_agkm9WhSzueXjRAkV_xEj6Emy5zB3N3VKY5Roce8,9274
|
|
70
70
|
test_modules/__init__.py,sha256=1LcbHodIHsB0g-g4NGjSn6AMuCoGbymvXPYLOb6Z7F0,53
|
|
71
71
|
test_modules/test_device_online.py,sha256=QtYq0Dq9vME8Gp2O4fGSheqVf8LUtpsSKosXXk56gGM,1654
|
|
@@ -91,8 +91,8 @@ testing_framework/core/playwright_manager.py,sha256=Tw46qwxIhOFkS48C2IWIQHHNpEe-
|
|
|
91
91
|
testing_framework/core/runner.py,sha256=j2QwNJmAxVBmJvcbVS7DgPJUKPNzqfLmt_4NNdaKmZU,19297
|
|
92
92
|
testing_framework/core/shared_cli_manager.py,sha256=BESSNtyQb7BOlaOvZmm04T8Uezjms4KCBs2MzTxvzYQ,8790
|
|
93
93
|
testing_framework/core/test_discovery.py,sha256=2FZ9fJ8Dp5dloA-fkgXoJ_gCMC_nYPBnA3Hs2xlagzM,4928
|
|
94
|
-
portacode-1.4.15.
|
|
95
|
-
portacode-1.4.15.
|
|
96
|
-
portacode-1.4.15.
|
|
97
|
-
portacode-1.4.15.
|
|
98
|
-
portacode-1.4.15.
|
|
94
|
+
portacode-1.4.15.dev19.dist-info/METADATA,sha256=JJoI5trJDjoXJyfMRfg2wL9S0EqmMalHzgYahQnyehc,13052
|
|
95
|
+
portacode-1.4.15.dev19.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
96
|
+
portacode-1.4.15.dev19.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
|
|
97
|
+
portacode-1.4.15.dev19.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
|
|
98
|
+
portacode-1.4.15.dev19.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|