aws-bootstrap-g4dn 0.6.0__py3-none-any.whl → 0.8.0__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-bootstrap-g4dn
3
- Version: 0.6.0
3
+ Version: 0.8.0
4
4
  Summary: Bootstrap AWS EC2 GPU instances for hybrid local-remote development
5
5
  Author: Adam Ever-Hadani
6
6
  License-Expression: MIT
@@ -15,6 +15,8 @@ Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
16
  Requires-Dist: boto3>=1.35
17
17
  Requires-Dist: click>=8.1
18
+ Requires-Dist: pyyaml>=6.0.3
19
+ Requires-Dist: tabulate>=0.9.0
18
20
  Dynamic: license-file
19
21
 
20
22
  # aws-bootstrap-g4dn
@@ -232,6 +234,30 @@ Then install the [Nsight VSCE extension](https://marketplace.visualstudio.com/it
232
234
 
233
235
  See [Nsight remote profiling guide](docs/nsight-remote-profiling.md) for more details on CUDA debugging and profiling workflows.
234
236
 
237
+ ### 📤 Structured Output
238
+
239
+ All commands support `--output` / `-o` for machine-readable output — useful for scripting, piping to `jq`, or LLM tool-use:
240
+
241
+ ```bash
242
+ # JSON output (pipe to jq)
243
+ aws-bootstrap -o json status
244
+ aws-bootstrap -o json status | jq '.instances[0].instance_id'
245
+
246
+ # YAML output
247
+ aws-bootstrap -o yaml status
248
+
249
+ # Table output
250
+ aws-bootstrap -o table status
251
+
252
+ # Works with all commands
253
+ aws-bootstrap -o json list instance-types | jq '.[].instance_type'
254
+ aws-bootstrap -o json launch --dry-run
255
+ aws-bootstrap -o json terminate --yes
256
+ aws-bootstrap -o json cleanup --dry-run
257
+ ```
258
+
259
+ Supported formats: `text` (default, human-readable with color), `json`, `yaml`, `table`. Commands that require confirmation (`terminate`, `cleanup`) require `--yes` in structured output modes.
260
+
235
261
  ### 📋 Listing Resources
236
262
 
237
263
  ```bash
@@ -291,6 +317,12 @@ aws-bootstrap cleanup
291
317
  # Preview what would be removed without modifying config
292
318
  aws-bootstrap cleanup --dry-run
293
319
 
320
+ # Also find and delete orphan EBS data volumes
321
+ aws-bootstrap cleanup --include-ebs
322
+
323
+ # Preview orphan volumes without deleting
324
+ aws-bootstrap cleanup --include-ebs --dry-run
325
+
294
326
  # Skip confirmation prompt
295
327
  aws-bootstrap cleanup --yes
296
328
  ```
@@ -324,6 +356,7 @@ Key behaviors:
324
356
  - New volumes are formatted as ext4; existing volumes are mounted as-is
325
357
  - Volumes are tagged for automatic discovery by `status` and `terminate`
326
358
  - `terminate` deletes data volumes by default; use `--keep-ebs` to preserve them
359
+ - **Orphan cleanup** — use `aws-bootstrap cleanup --include-ebs` to find and delete orphan volumes (e.g. from spot interruptions or forgotten `--keep-ebs` volumes). Use `--dry-run` to preview
327
360
  - **Spot-safe** — data volumes survive spot interruptions. If AWS reclaims your instance, the volume detaches automatically and can be reattached to a new instance with `--ebs-volume-id`
328
361
  - EBS volumes must be in the same availability zone as the instance
329
362
  - Mount failures are non-fatal — the instance remains usable
@@ -1,9 +1,10 @@
1
1
  aws_bootstrap/__init__.py,sha256=kl_jvrunGyIyizdRqAP6ROb5P1BBrXX5PTq5gq1ipU0,82
2
- aws_bootstrap/cli.py,sha256=n3Ep_7zhBiRSU4ZUeGVqTRb81nzo98mxzQSKdAuiopY,27788
2
+ aws_bootstrap/cli.py,sha256=Dcxz5r300gu9H61MaL6KpCkEIMRFmQ_3cDXPQOstRNU,38882
3
3
  aws_bootstrap/config.py,sha256=p770XgjfuK1-wVkAEeBdtJSVkc58DKFHgaJlZ-zbGmk,967
4
- aws_bootstrap/ec2.py,sha256=uNqxWWfPfGCbujQ3eonvqjjxLE76fsEyNchPS6byR6c,16719
4
+ aws_bootstrap/ec2.py,sha256=Ygbl1u0zM8yuvUOlCs_wmB30sVQAvcDbYWarKc_JagI,18110
5
5
  aws_bootstrap/gpu.py,sha256=WTnHR0s3mQHDlnzqRgqAC6omWz7nT5YtGpcs0Bf88jk,692
6
- aws_bootstrap/ssh.py,sha256=xY0Yn5q4aA0Xb3ejNY-KCbooZArXRGpimSnbJiBLI_w,24059
6
+ aws_bootstrap/output.py,sha256=3NKIcRiYbS66ZWllpj7tkB_UlnFMHqtgE9ixY8Vhmrc,3753
7
+ aws_bootstrap/ssh.py,sha256=0R1o3aUXxdYWqJ-uvYZZY8rnZO7mfc30PwjCJs_0Qow,23971
7
8
  aws_bootstrap/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
9
  aws_bootstrap/resources/gpu_benchmark.py,sha256=1eFt_3MXvoLhs9HahrRPhbxvtdjFaXG2Ty3GEg7Gud0,29366
9
10
  aws_bootstrap/resources/gpu_smoke_test.ipynb,sha256=XvAOEIPa5H9ri5mRZqOdknmwOwKNvCME6DzBGuhRYfg,10698
@@ -13,17 +14,18 @@ aws_bootstrap/resources/requirements.txt,sha256=gpYl1MFCfWXiAhbIUgAjuTHONz3MKci2
13
14
  aws_bootstrap/resources/saxpy.cu,sha256=1BSESEwGGCx3KWx9ZJ8jiPHQ42KzQN6i2aP0I28bPsA,1178
14
15
  aws_bootstrap/resources/tasks.json,sha256=6U8pB1N8YIWgUCfFet4ne3nYnI92tWv5D5kPiQG3Zlg,1576
15
16
  aws_bootstrap/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- aws_bootstrap/tests/test_cli.py,sha256=OOYzopo8gkp6fO1MT10fsqAhIs5pN9cCpJyOzWNXHCg,48638
17
+ aws_bootstrap/tests/test_cli.py,sha256=OQYjUNuJV4uFmjOgcHMJwIYUwj3MnrIQTZAchsn3rrg,63938
17
18
  aws_bootstrap/tests/test_config.py,sha256=vspSGoben_i7m4Fh6UGSes6Fkr789Y1eaOLe54fRSGc,1524
18
- aws_bootstrap/tests/test_ebs.py,sha256=B2HrgSmS7yroz6zzRuPxKIXmQGlWesuGqOtybyZmHJQ,7582
19
+ aws_bootstrap/tests/test_ebs.py,sha256=9Ds7B_f3WPBlCLiOnKkcUvz3kst5Y3xL_95bQNRljuo,10780
19
20
  aws_bootstrap/tests/test_ec2.py,sha256=Jmqsjv973hxXbZWfGgECtm6aa2156Lzji227sYMBuMg,10547
20
21
  aws_bootstrap/tests/test_gpu.py,sha256=rbMuda_sIVbaCzkWXoLv9YIfnWztgRoP7NuVL8XHrUY,3871
22
+ aws_bootstrap/tests/test_output.py,sha256=RRSbxtGqi7jfC9i4CR4EZXP56SmdsYUZDpT5uj8DWKQ,5250
21
23
  aws_bootstrap/tests/test_ssh_config.py,sha256=qy3UDdvkTfrALiF-W3m8aKvnQj3BeCrZdLjG75tcVJU,17131
22
24
  aws_bootstrap/tests/test_ssh_ebs.py,sha256=ipt0xOzdf3kfkVt42Dgr_z7D6JDIMuRi3DqX0OP8sm0,2342
23
25
  aws_bootstrap/tests/test_ssh_gpu.py,sha256=dRp86Og-8GqiATSff3rxhu83mBZdGgqI4UOnoC00Ln0,1454
24
- aws_bootstrap_g4dn-0.6.0.dist-info/licenses/LICENSE,sha256=Hen77Mt8sazSQJ9DgrmZuAvDwo2vc5JAkR_avuFV-CM,1067
25
- aws_bootstrap_g4dn-0.6.0.dist-info/METADATA,sha256=Ot9yCJfJup1ZzW-0cq99zT9bbswHnRJ4SWxEsJ-pK58,15859
26
- aws_bootstrap_g4dn-0.6.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
27
- aws_bootstrap_g4dn-0.6.0.dist-info/entry_points.txt,sha256=T8FXfOgmLEvFi8DHaFJ3tCzId9J3_d2Y6qT98OXxCjA,57
28
- aws_bootstrap_g4dn-0.6.0.dist-info/top_level.txt,sha256=mix9gZRs8JUv0OMSB_rwdGcRnTKzsKgHrE5fyAn5zJw,14
29
- aws_bootstrap_g4dn-0.6.0.dist-info/RECORD,,
26
+ aws_bootstrap_g4dn-0.8.0.dist-info/licenses/LICENSE,sha256=Hen77Mt8sazSQJ9DgrmZuAvDwo2vc5JAkR_avuFV-CM,1067
27
+ aws_bootstrap_g4dn-0.8.0.dist-info/METADATA,sha256=TXm4SGbTxvbkrySCL0RTWUfW7thyHz-ul6BkL7yX1SM,17067
28
+ aws_bootstrap_g4dn-0.8.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
29
+ aws_bootstrap_g4dn-0.8.0.dist-info/entry_points.txt,sha256=T8FXfOgmLEvFi8DHaFJ3tCzId9J3_d2Y6qT98OXxCjA,57
30
+ aws_bootstrap_g4dn-0.8.0.dist-info/top_level.txt,sha256=mix9gZRs8JUv0OMSB_rwdGcRnTKzsKgHrE5fyAn5zJw,14
31
+ aws_bootstrap_g4dn-0.8.0.dist-info/RECORD,,