proxctl 0.2.7__tar.gz → 0.2.8__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 (60) hide show
  1. {proxctl-0.2.7 → proxctl-0.2.8}/.github/workflows/release.yml +89 -12
  2. {proxctl-0.2.7 → proxctl-0.2.8}/CHANGELOG.md +12 -0
  3. {proxctl-0.2.7 → proxctl-0.2.8}/Cargo.lock +315 -1
  4. {proxctl-0.2.7 → proxctl-0.2.8}/Cargo.toml +2 -1
  5. {proxctl-0.2.7 → proxctl-0.2.8}/PKG-INFO +1 -1
  6. {proxctl-0.2.7 → proxctl-0.2.8}/src/api/error.rs +27 -0
  7. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/access.rs +12 -6
  8. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/apply/mod.rs +4 -4
  9. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/backup.rs +8 -2
  10. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/ceph.rs +4 -4
  11. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/cluster.rs +7 -7
  12. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/container/config.rs +4 -4
  13. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/container/firewall.rs +1 -1
  14. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/container/lifecycle.rs +3 -3
  15. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/container/snapshot.rs +4 -4
  16. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/firewall.rs +13 -7
  17. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/node.rs +16 -10
  18. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/pool.rs +8 -2
  19. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/storage.rs +9 -3
  20. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/task.rs +3 -3
  21. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/vm/agent.rs +4 -4
  22. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/vm/cloudinit.rs +1 -1
  23. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/vm/config.rs +4 -4
  24. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/vm/firewall.rs +1 -1
  25. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/vm/lifecycle.rs +3 -3
  26. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/vm/snapshot.rs +4 -4
  27. {proxctl-0.2.7 → proxctl-0.2.8}/src/main.rs +170 -34
  28. proxctl-0.2.8/src/output.rs +97 -0
  29. {proxctl-0.2.7 → proxctl-0.2.8}/src/schema.rs +167 -106
  30. proxctl-0.2.8/tests/fixtures/clispec-v0.2.json +135 -0
  31. proxctl-0.2.8/tests/schema_compliance.rs +99 -0
  32. proxctl-0.2.7/src/output.rs +0 -49
  33. {proxctl-0.2.7 → proxctl-0.2.8}/.github/workflows/ci.yml +0 -0
  34. {proxctl-0.2.7 → proxctl-0.2.8}/.gitignore +0 -0
  35. {proxctl-0.2.7 → proxctl-0.2.8}/LICENSE +0 -0
  36. {proxctl-0.2.7 → proxctl-0.2.8}/Makefile +0 -0
  37. {proxctl-0.2.7 → proxctl-0.2.8}/README.md +0 -0
  38. {proxctl-0.2.7 → proxctl-0.2.8}/prek.toml +0 -0
  39. {proxctl-0.2.7 → proxctl-0.2.8}/proxctl_py/__init__.py +0 -0
  40. {proxctl-0.2.7 → proxctl-0.2.8}/proxctl_py/__main__.py +0 -0
  41. {proxctl-0.2.7 → proxctl-0.2.8}/pyproject.toml +0 -0
  42. {proxctl-0.2.7 → proxctl-0.2.8}/src/api/client.rs +0 -0
  43. {proxctl-0.2.7 → proxctl-0.2.8}/src/api/mod.rs +0 -0
  44. {proxctl-0.2.7 → proxctl-0.2.8}/src/api/token.rs +0 -0
  45. {proxctl-0.2.7 → proxctl-0.2.8}/src/api/types.rs +0 -0
  46. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/api.rs +0 -0
  47. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/apply/container.rs +0 -0
  48. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/apply/diff.rs +0 -0
  49. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/apply/firewall.rs +0 -0
  50. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/apply/manifest.rs +0 -0
  51. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/apply/reconciler.rs +0 -0
  52. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/apply/vm.rs +0 -0
  53. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/container/migrate.rs +0 -0
  54. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/container/mod.rs +0 -0
  55. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/export.rs +0 -0
  56. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/list_args.rs +0 -0
  57. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/mod.rs +0 -0
  58. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/vm/migrate.rs +0 -0
  59. {proxctl-0.2.7 → proxctl-0.2.8}/src/commands/vm/mod.rs +0 -0
  60. {proxctl-0.2.7 → proxctl-0.2.8}/src/lib.rs +0 -0
@@ -46,48 +46,114 @@ jobs:
46
46
  build:
47
47
  name: Build ${{ matrix.target }}
48
48
  needs: test
49
+ timeout-minutes: 30
50
+ # Guard: self-hosted runners only execute on trusted events (tag push,
51
+ # workflow_dispatch). Fork PRs must never dispatch jobs to self-hosted.
52
+ if: github.event_name != 'pull_request'
49
53
  strategy:
50
54
  matrix:
51
55
  include:
52
56
  - os: ubuntu-latest
53
57
  target: x86_64-unknown-linux-gnu
54
- - os: ubuntu-latest
58
+ - os: [self-hosted, Linux, ARM64]
55
59
  target: aarch64-unknown-linux-gnu
56
60
  - os: windows-latest
57
61
  target: x86_64-pc-windows-msvc
58
- - os: macos-latest
62
+ - os: [self-hosted, macOS, ARM64]
59
63
  target: x86_64-apple-darwin
60
- - os: macos-latest
64
+ - os: [self-hosted, macOS, ARM64]
61
65
  target: aarch64-apple-darwin
62
66
  runs-on: ${{ matrix.os }}
63
67
  steps:
64
68
  - uses: actions/checkout@v4
69
+ with:
70
+ # Preserve target/ between runs on self-hosted runners for cargo
71
+ # incremental rebuild. GitHub-hosted runners start clean each job
72
+ # regardless of this setting, so this only affects self-hosted.
73
+ clean: false
65
74
 
66
75
  - uses: dtolnay/rust-toolchain@stable
67
76
  with:
68
77
  targets: ${{ matrix.target }}
69
78
 
70
- - name: Install cross-compilation tools
79
+ - name: Prepare cargo cache dirs (arm64 linux)
71
80
  if: matrix.target == 'aarch64-unknown-linux-gnu'
81
+ run: mkdir -p "${RUNNER_TOOL_CACHE}/cargo-cache/registry" "${RUNNER_TOOL_CACHE}/cargo-cache/git"
82
+
83
+ - name: Clean stale dist
84
+ # Keep dist/ fresh each run so previous builds cannot leak artifacts
85
+ # into the upload. Self-hosted runners do not clean automatically.
86
+ # On the arm64 linux runner, maturin-action runs as root inside the
87
+ # manylinux container and leaves root-owned files in dist/; clean
88
+ # via docker so the unprivileged runner user can proceed.
89
+ shell: bash
90
+ run: |
91
+ if [[ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]]; then
92
+ docker run --rm -v "${GITHUB_WORKSPACE}:/io" alpine rm -rf /io/dist /io/target/wheels
93
+ else
94
+ rm -rf dist target/wheels
95
+ fi
96
+
97
+ - name: Install cross-compilation tools
98
+ # Only needed on GitHub-hosted linux where the arm64 toolchain must
99
+ # be cross-installed. The self-hosted arm64 runner is native.
100
+ if: matrix.target == 'aarch64-unknown-linux-gnu' && runner.arch != 'ARM64'
72
101
  run: sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu
73
102
 
74
- - name: Install maturin
75
- run: pip install maturin
103
+ - name: Install uv
104
+ if: matrix.target != 'aarch64-unknown-linux-gnu'
105
+ uses: astral-sh/setup-uv@v6
106
+
107
+ - name: Install maturin and zig
108
+ # maturin-action provides its own maturin inside the manylinux
109
+ # container for the arm64 linux build, so skip the host install
110
+ # on the self-hosted runner.
111
+ if: matrix.target != 'aarch64-unknown-linux-gnu'
112
+ shell: bash
113
+ run: |
114
+ uv venv "${RUNNER_TEMP}/build-venv"
115
+ VENV_BIN="${RUNNER_TEMP}/build-venv/bin"
116
+ [ -d "$VENV_BIN" ] || VENV_BIN="${RUNNER_TEMP}/build-venv/Scripts"
117
+ uv pip install --python "${RUNNER_TEMP}/build-venv" maturin ziglang
118
+ echo "$VENV_BIN" >> "$GITHUB_PATH"
119
+
120
+ - name: Build wheel (arm64 linux via maturin-action)
121
+ if: matrix.target == 'aarch64-unknown-linux-gnu'
122
+ uses: PyO3/maturin-action@v1
123
+ with:
124
+ target: aarch64-unknown-linux-gnu
125
+ args: --release --out dist
126
+ manylinux: manylinux_2_28
127
+ # Mount persistent cargo cache into the manylinux container so
128
+ # dependency downloads survive between jobs on the self-hosted
129
+ # runner.
130
+ docker-options: -v ${{ runner.tool_cache }}/cargo-cache/registry:/root/.cargo/registry -v ${{ runner.tool_cache }}/cargo-cache/git:/root/.cargo/git
76
131
 
77
132
  - name: Build wheel
133
+ if: matrix.target != 'aarch64-unknown-linux-gnu'
78
134
  shell: bash
79
135
  run: |
80
136
  case "${{ matrix.target }}" in
81
137
  *-gnu)
82
- pip install ziglang
83
- maturin build --release --target ${{ matrix.target }} --compatibility manylinux_2_28 --zig
138
+ maturin build --release --target ${{ matrix.target }} --compatibility manylinux_2_28 --zig --out dist
84
139
  ;;
85
140
  *)
86
- maturin build --release --target ${{ matrix.target }}
141
+ maturin build --release --target ${{ matrix.target }} --out dist
87
142
  ;;
88
143
  esac
89
144
 
145
+ - name: Build binary (arm64 linux via cargo-zigbuild)
146
+ # On the Pi runner build natively with cargo-zigbuild targeting
147
+ # glibc 2.28 for wide distro compatibility. Use a separate target
148
+ # directory so host cargo does not conflict with root-owned files
149
+ # left behind by the maturin-action container build in target/.
150
+ if: matrix.target == 'aarch64-unknown-linux-gnu'
151
+ env:
152
+ CARGO_TARGET_DIR: target-host
153
+ run: cargo zigbuild --release --target aarch64-unknown-linux-gnu.2.28
154
+
90
155
  - name: Build binary
156
+ if: matrix.target != 'aarch64-unknown-linux-gnu'
91
157
  env:
92
158
  CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
93
159
  run: cargo build --release --target ${{ matrix.target }}
@@ -117,7 +183,12 @@ jobs:
117
183
  cd ..
118
184
  powershell -command "Get-FileHash -Path '${ARCHIVE_NAME}.zip' -Algorithm SHA256 | Select-Object -ExpandProperty Hash" > "${ARCHIVE_NAME}.zip.sha256"
119
185
  else
120
- cp "target/${{ matrix.target }}/release/proxctl" release-package/proxctl
186
+ if [[ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]]; then
187
+ BIN_PATH="target-host/aarch64-unknown-linux-gnu/release/proxctl"
188
+ else
189
+ BIN_PATH="target/${{ matrix.target }}/release/proxctl"
190
+ fi
191
+ cp "$BIN_PATH" release-package/proxctl
121
192
  tar -czf "${ARCHIVE_NAME}.tar.gz" -C release-package proxctl
122
193
 
123
194
  if [[ "${{ runner.os }}" == "macOS" ]]; then
@@ -132,7 +203,7 @@ jobs:
132
203
  - name: Upload wheel
133
204
  uses: actions/upload-artifact@v4
134
205
  with:
135
- path: target/wheels/*
206
+ path: dist/*.whl
136
207
  name: wheel-${{ matrix.target }}
137
208
 
138
209
  - name: Upload release archives
@@ -150,8 +221,14 @@ jobs:
150
221
  steps:
151
222
  - uses: actions/checkout@v4
152
223
 
224
+ - uses: astral-sh/setup-uv@v6
225
+
153
226
  - name: Install maturin
154
- run: pip install maturin
227
+ shell: bash
228
+ run: |
229
+ uv venv "${RUNNER_TEMP}/build-venv"
230
+ uv pip install --python "${RUNNER_TEMP}/build-venv/bin/python" maturin
231
+ echo "${RUNNER_TEMP}/build-venv/bin" >> "$GITHUB_PATH"
155
232
 
156
233
  - name: Build sdist
157
234
  run: maturin sdist
@@ -9,6 +9,18 @@ All notable changes to this project will be documented in this file.
9
9
 
10
10
 
11
11
 
12
+
13
+ ## [0.2.8](https://github.com/rvben/proxctl/compare/v0.2.7...v0.2.8) - 2026-06-11
14
+
15
+ ### Added
16
+
17
+ - comply with clispec v0.2 schema shape and runtime requirements ([0c8d392](https://github.com/rvben/proxctl/commit/0c8d392b55e87afbf906dc03299be7b67e93fcdb))
18
+
19
+ ### Fixed
20
+
21
+ - restore --json compat flag as hidden alias for --output json ([ba0ec45](https://github.com/rvben/proxctl/commit/ba0ec457ca11d453b52e137c340eb22b997dd26c))
22
+ - complete clispec v0.2 conformance to 100% ([a204e63](https://github.com/rvben/proxctl/commit/a204e63572463497ecbb49bc67b217ec16d2b2f7))
23
+
12
24
  ## [0.2.7](https://github.com/rvben/proxctl/compare/v0.2.6...v0.2.7) - 2026-04-03
13
25
 
14
26
  ## [0.2.6](https://github.com/rvben/proxctl/compare/v0.2.5...v0.2.6) - 2026-04-03
@@ -2,6 +2,20 @@
2
2
  # It is not intended for manual editing.
3
3
  version = 4
4
4
 
5
+ [[package]]
6
+ name = "ahash"
7
+ version = "0.8.12"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
10
+ dependencies = [
11
+ "cfg-if",
12
+ "getrandom 0.3.4",
13
+ "once_cell",
14
+ "serde",
15
+ "version_check",
16
+ "zerocopy",
17
+ ]
18
+
5
19
  [[package]]
6
20
  name = "aho-corasick"
7
21
  version = "1.1.4"
@@ -83,24 +97,57 @@ version = "1.1.2"
83
97
  source = "registry+https://github.com/rust-lang/crates.io-index"
84
98
  checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
85
99
 
100
+ [[package]]
101
+ name = "autocfg"
102
+ version = "1.5.1"
103
+ source = "registry+https://github.com/rust-lang/crates.io-index"
104
+ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
105
+
86
106
  [[package]]
87
107
  name = "base64"
88
108
  version = "0.22.1"
89
109
  source = "registry+https://github.com/rust-lang/crates.io-index"
90
110
  checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
91
111
 
112
+ [[package]]
113
+ name = "bit-set"
114
+ version = "0.8.0"
115
+ source = "registry+https://github.com/rust-lang/crates.io-index"
116
+ checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
117
+ dependencies = [
118
+ "bit-vec",
119
+ ]
120
+
121
+ [[package]]
122
+ name = "bit-vec"
123
+ version = "0.8.0"
124
+ source = "registry+https://github.com/rust-lang/crates.io-index"
125
+ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
126
+
92
127
  [[package]]
93
128
  name = "bitflags"
94
129
  version = "2.11.0"
95
130
  source = "registry+https://github.com/rust-lang/crates.io-index"
96
131
  checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
97
132
 
133
+ [[package]]
134
+ name = "borrow-or-share"
135
+ version = "0.2.4"
136
+ source = "registry+https://github.com/rust-lang/crates.io-index"
137
+ checksum = "dc0b364ead1874514c8c2855ab558056ebfeb775653e7ae45ff72f28f8f3166c"
138
+
98
139
  [[package]]
99
140
  name = "bumpalo"
100
141
  version = "3.20.2"
101
142
  source = "registry+https://github.com/rust-lang/crates.io-index"
102
143
  checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
103
144
 
145
+ [[package]]
146
+ name = "bytecount"
147
+ version = "0.6.9"
148
+ source = "registry+https://github.com/rust-lang/crates.io-index"
149
+ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
150
+
104
151
  [[package]]
105
152
  name = "bytes"
106
153
  version = "1.11.1"
@@ -260,6 +307,15 @@ dependencies = [
260
307
  "syn",
261
308
  ]
262
309
 
310
+ [[package]]
311
+ name = "email_address"
312
+ version = "0.2.9"
313
+ source = "registry+https://github.com/rust-lang/crates.io-index"
314
+ checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449"
315
+ dependencies = [
316
+ "serde",
317
+ ]
318
+
263
319
  [[package]]
264
320
  name = "encode_unicode"
265
321
  version = "1.0.0"
@@ -282,6 +338,17 @@ dependencies = [
282
338
  "windows-sys 0.61.2",
283
339
  ]
284
340
 
341
+ [[package]]
342
+ name = "fancy-regex"
343
+ version = "0.14.0"
344
+ source = "registry+https://github.com/rust-lang/crates.io-index"
345
+ checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298"
346
+ dependencies = [
347
+ "bit-set",
348
+ "regex-automata",
349
+ "regex-syntax",
350
+ ]
351
+
285
352
  [[package]]
286
353
  name = "fastrand"
287
354
  version = "2.3.0"
@@ -294,6 +361,17 @@ version = "0.1.9"
294
361
  source = "registry+https://github.com/rust-lang/crates.io-index"
295
362
  checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
296
363
 
364
+ [[package]]
365
+ name = "fluent-uri"
366
+ version = "0.3.2"
367
+ source = "registry+https://github.com/rust-lang/crates.io-index"
368
+ checksum = "1918b65d96df47d3591bed19c5cca17e3fa5d0707318e4b5ef2eae01764df7e5"
369
+ dependencies = [
370
+ "borrow-or-share",
371
+ "ref-cast",
372
+ "serde",
373
+ ]
374
+
297
375
  [[package]]
298
376
  name = "fnv"
299
377
  version = "1.0.7"
@@ -315,6 +393,16 @@ dependencies = [
315
393
  "percent-encoding",
316
394
  ]
317
395
 
396
+ [[package]]
397
+ name = "fraction"
398
+ version = "0.15.4"
399
+ source = "registry+https://github.com/rust-lang/crates.io-index"
400
+ checksum = "e076045bb43dac435333ed5f04caf35c7463631d0dae2deb2638d94dd0a5b872"
401
+ dependencies = [
402
+ "lazy_static",
403
+ "num",
404
+ ]
405
+
318
406
  [[package]]
319
407
  name = "futures"
320
408
  version = "0.3.32"
@@ -768,6 +856,31 @@ dependencies = [
768
856
  "wasm-bindgen",
769
857
  ]
770
858
 
859
+ [[package]]
860
+ name = "jsonschema"
861
+ version = "0.29.1"
862
+ source = "registry+https://github.com/rust-lang/crates.io-index"
863
+ checksum = "161c33c3ec738cfea3288c5c53dfcdb32fd4fc2954de86ea06f71b5a1a40bfcd"
864
+ dependencies = [
865
+ "ahash",
866
+ "base64",
867
+ "bytecount",
868
+ "email_address",
869
+ "fancy-regex",
870
+ "fraction",
871
+ "idna",
872
+ "itoa",
873
+ "num-cmp",
874
+ "once_cell",
875
+ "percent-encoding",
876
+ "referencing",
877
+ "regex-syntax",
878
+ "reqwest",
879
+ "serde",
880
+ "serde_json",
881
+ "uuid-simd",
882
+ ]
883
+
771
884
  [[package]]
772
885
  name = "lazy_static"
773
886
  version = "1.5.0"
@@ -807,6 +920,15 @@ version = "0.8.1"
807
920
  source = "registry+https://github.com/rust-lang/crates.io-index"
808
921
  checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
809
922
 
923
+ [[package]]
924
+ name = "lock_api"
925
+ version = "0.4.14"
926
+ source = "registry+https://github.com/rust-lang/crates.io-index"
927
+ checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
928
+ dependencies = [
929
+ "scopeguard",
930
+ ]
931
+
810
932
  [[package]]
811
933
  name = "log"
812
934
  version = "0.4.29"
@@ -852,6 +974,85 @@ dependencies = [
852
974
  "windows-sys 0.61.2",
853
975
  ]
854
976
 
977
+ [[package]]
978
+ name = "num"
979
+ version = "0.4.3"
980
+ source = "registry+https://github.com/rust-lang/crates.io-index"
981
+ checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
982
+ dependencies = [
983
+ "num-bigint",
984
+ "num-complex",
985
+ "num-integer",
986
+ "num-iter",
987
+ "num-rational",
988
+ "num-traits",
989
+ ]
990
+
991
+ [[package]]
992
+ name = "num-bigint"
993
+ version = "0.4.6"
994
+ source = "registry+https://github.com/rust-lang/crates.io-index"
995
+ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
996
+ dependencies = [
997
+ "num-integer",
998
+ "num-traits",
999
+ ]
1000
+
1001
+ [[package]]
1002
+ name = "num-cmp"
1003
+ version = "0.1.0"
1004
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1005
+ checksum = "63335b2e2c34fae2fb0aa2cecfd9f0832a1e24b3b32ecec612c3426d46dc8aaa"
1006
+
1007
+ [[package]]
1008
+ name = "num-complex"
1009
+ version = "0.4.6"
1010
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1011
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
1012
+ dependencies = [
1013
+ "num-traits",
1014
+ ]
1015
+
1016
+ [[package]]
1017
+ name = "num-integer"
1018
+ version = "0.1.46"
1019
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1020
+ checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
1021
+ dependencies = [
1022
+ "num-traits",
1023
+ ]
1024
+
1025
+ [[package]]
1026
+ name = "num-iter"
1027
+ version = "0.1.45"
1028
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1029
+ checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
1030
+ dependencies = [
1031
+ "autocfg",
1032
+ "num-integer",
1033
+ "num-traits",
1034
+ ]
1035
+
1036
+ [[package]]
1037
+ name = "num-rational"
1038
+ version = "0.4.2"
1039
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1040
+ checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
1041
+ dependencies = [
1042
+ "num-bigint",
1043
+ "num-integer",
1044
+ "num-traits",
1045
+ ]
1046
+
1047
+ [[package]]
1048
+ name = "num-traits"
1049
+ version = "0.2.19"
1050
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1051
+ checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
1052
+ dependencies = [
1053
+ "autocfg",
1054
+ ]
1055
+
855
1056
  [[package]]
856
1057
  name = "num_cpus"
857
1058
  version = "1.17.0"
@@ -886,12 +1087,41 @@ version = "0.2.0"
886
1087
  source = "registry+https://github.com/rust-lang/crates.io-index"
887
1088
  checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
888
1089
 
1090
+ [[package]]
1091
+ name = "outref"
1092
+ version = "0.5.2"
1093
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1094
+ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
1095
+
889
1096
  [[package]]
890
1097
  name = "owo-colors"
891
1098
  version = "4.3.0"
892
1099
  source = "registry+https://github.com/rust-lang/crates.io-index"
893
1100
  checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d"
894
1101
 
1102
+ [[package]]
1103
+ name = "parking_lot"
1104
+ version = "0.12.5"
1105
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1106
+ checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
1107
+ dependencies = [
1108
+ "lock_api",
1109
+ "parking_lot_core",
1110
+ ]
1111
+
1112
+ [[package]]
1113
+ name = "parking_lot_core"
1114
+ version = "0.9.12"
1115
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1116
+ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
1117
+ dependencies = [
1118
+ "cfg-if",
1119
+ "libc",
1120
+ "redox_syscall",
1121
+ "smallvec",
1122
+ "windows-link",
1123
+ ]
1124
+
895
1125
  [[package]]
896
1126
  name = "percent-encoding"
897
1127
  version = "2.3.2"
@@ -955,13 +1185,14 @@ dependencies = [
955
1185
 
956
1186
  [[package]]
957
1187
  name = "proxctl"
958
- version = "0.2.7"
1188
+ version = "0.2.8"
959
1189
  dependencies = [
960
1190
  "clap",
961
1191
  "clap_complete",
962
1192
  "dialoguer",
963
1193
  "dirs",
964
1194
  "indicatif",
1195
+ "jsonschema",
965
1196
  "owo-colors",
966
1197
  "reqwest",
967
1198
  "rpassword",
@@ -1080,6 +1311,15 @@ dependencies = [
1080
1311
  "getrandom 0.3.4",
1081
1312
  ]
1082
1313
 
1314
+ [[package]]
1315
+ name = "redox_syscall"
1316
+ version = "0.5.18"
1317
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1318
+ checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
1319
+ dependencies = [
1320
+ "bitflags",
1321
+ ]
1322
+
1083
1323
  [[package]]
1084
1324
  name = "redox_users"
1085
1325
  version = "0.5.2"
@@ -1091,6 +1331,40 @@ dependencies = [
1091
1331
  "thiserror 2.0.18",
1092
1332
  ]
1093
1333
 
1334
+ [[package]]
1335
+ name = "ref-cast"
1336
+ version = "1.0.25"
1337
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1338
+ checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
1339
+ dependencies = [
1340
+ "ref-cast-impl",
1341
+ ]
1342
+
1343
+ [[package]]
1344
+ name = "ref-cast-impl"
1345
+ version = "1.0.25"
1346
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1347
+ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
1348
+ dependencies = [
1349
+ "proc-macro2",
1350
+ "quote",
1351
+ "syn",
1352
+ ]
1353
+
1354
+ [[package]]
1355
+ name = "referencing"
1356
+ version = "0.29.1"
1357
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1358
+ checksum = "40a64b3a635fad9000648b4d8a59c8710c523ab61a23d392a7d91d47683f5adc"
1359
+ dependencies = [
1360
+ "ahash",
1361
+ "fluent-uri",
1362
+ "once_cell",
1363
+ "parking_lot",
1364
+ "percent-encoding",
1365
+ "serde_json",
1366
+ ]
1367
+
1094
1368
  [[package]]
1095
1369
  name = "regex"
1096
1370
  version = "1.12.3"
@@ -1128,6 +1402,7 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147"
1128
1402
  dependencies = [
1129
1403
  "base64",
1130
1404
  "bytes",
1405
+ "futures-channel",
1131
1406
  "futures-core",
1132
1407
  "futures-util",
1133
1408
  "http",
@@ -1261,6 +1536,12 @@ version = "1.0.23"
1261
1536
  source = "registry+https://github.com/rust-lang/crates.io-index"
1262
1537
  checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
1263
1538
 
1539
+ [[package]]
1540
+ name = "scopeguard"
1541
+ version = "1.2.0"
1542
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1543
+ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1544
+
1264
1545
  [[package]]
1265
1546
  name = "semver"
1266
1547
  version = "1.0.27"
@@ -1725,6 +2006,39 @@ version = "0.2.2"
1725
2006
  source = "registry+https://github.com/rust-lang/crates.io-index"
1726
2007
  checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
1727
2008
 
2009
+ [[package]]
2010
+ name = "uuid"
2011
+ version = "1.23.3"
2012
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2013
+ checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
2014
+ dependencies = [
2015
+ "js-sys",
2016
+ "wasm-bindgen",
2017
+ ]
2018
+
2019
+ [[package]]
2020
+ name = "uuid-simd"
2021
+ version = "0.8.0"
2022
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2023
+ checksum = "23b082222b4f6619906941c17eb2297fff4c2fb96cb60164170522942a200bd8"
2024
+ dependencies = [
2025
+ "outref",
2026
+ "uuid",
2027
+ "vsimd",
2028
+ ]
2029
+
2030
+ [[package]]
2031
+ name = "version_check"
2032
+ version = "0.9.5"
2033
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2034
+ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
2035
+
2036
+ [[package]]
2037
+ name = "vsimd"
2038
+ version = "0.8.0"
2039
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2040
+ checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
2041
+
1728
2042
  [[package]]
1729
2043
  name = "want"
1730
2044
  version = "0.3.1"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "proxctl"
3
- version = "0.2.7"
3
+ version = "0.2.8"
4
4
  edition = "2024"
5
5
  rust-version = "1.90"
6
6
  description = "CLI for Proxmox VE"
@@ -36,3 +36,4 @@ dialoguer = "0.11"
36
36
  [dev-dependencies]
37
37
  tempfile = "3"
38
38
  wiremock = "0.6"
39
+ jsonschema = "0.29"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proxctl
3
- Version: 0.2.7
3
+ Version: 0.2.8
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: System Administrators