เครื่องมือบรรทัดคำสั่ง cmp
Where in the portal: ชุดคำสั่งการติดตั้งจะอยู่บนคู่มือ API reference (
https://<your-domain>/apidoc, ส่วน Command-line interface) การอนุมัติการเข้าสู่ระบบ:https://<your-domain>/linkอุปกรณ์ที่เชื่อมต่อ: API keys (/api-keys) › Connected apps & devices.
What it does
cmp คือโปรแกรมบรรทัดคำสั่งขนาดเล็กสำหรับลูกค้าของคุณ (และสำหรับคุณ) ที่เปลี่ยนทุกการทำงานของ API ให้เป็นคำสั่ง: cmp vm list, cmp vm start <id>, cmp billing invoice list. โปรแกรมนี้สร้างขึ้นจากเอกสาร OpenAPI ของการติดตั้งของคุณ ณ เวลาที่ออก릴ีส ดังนั้นคำสั่งจึงตรงกับฟีเจอร์ที่คุณเปิดใช้งาน โดยเป็นไบนารีแบบสแตติกเดียวสำหรับ Linux, macOS และ Windows (amd64 และ arm64) โดยไม่ต้องติดตั้งสิ่งอื่นเพิ่ม.
ข้อกำหนด
| Item | Requirement |
|---|---|
| Server | ไม่มีอะไรเพิ่มเติม แพ็กเกจรีลีสอยู่ภายในรีลีสของ NexCMP และให้บริการโดยแผงควบคุมที่ https://<your-domain>/cli/. |
| เครื่องของลูกค้า | Linux, macOS หรือ Windows (PowerShell 5.1+). จำเป็นต้องมี ssh-keygen (OpenSSH 8.0+) เฉพาะสำหรับการตรวจสอบลายเซ็นเท่านั้น. |
| ข้อมูลประจำตัว | เข้าสู่ระบบผ่านเบราว์เซอร์ด้วยรหัสใช้ครั้งเดียว หรือ API key |
| Network | HTTPS ไปยังพาเนลของคุณ CLI จะปฏิเสธการส่งคีย์ผ่าน http:// ธรรมดา ยกเว้นไปยัง localhost |
เตรียมโครงสร้างพื้นฐาน
ไม่มีเลย พาเนลจะให้บริการไฟล์เหล่านี้จาก /cli/ (ไม่ต้องคอมไพล์หรืออัปโหลด):
| ไฟล์ | Purpose |
|---|---|
install.sh, install.ps1 | ตัวติดตั้งสำหรับ Linux/macOS และ Windows โดยจะระบุที่อยู่ของพาเนลของคุณ |
latest.json | เวอร์ชันปัจจุบัน, รายการไฟล์, ขนาด, sha256 |
v<version>/cmp_<version>_<os>_<arch>.tar.gz หรือ .zip | โปรแกรมสำหรับ: linux amd64/arm64, darwin amd64/arm64/universal, windows amd64/arm64 |
v<version>/SHA256SUMS, SHA256SUMS.sig | ค่าตรวจสอบความถูกต้องและลายเซ็น ed25519 |
cmp-cli.pub | คีย์สาธารณะสำหรับเผยแพร่ |
การติดตั้ง (สำหรับลูกค้า)
macOS และ Linux:
bash
curl -fsSL https://cloud.example.com/cli/install.sh | shWindows PowerShell:
powershell
irm https://cloud.example.com/cli/install.ps1 | iexตัวติดตั้งจะเลือกแพ็กเกจที่ตรงกับ OS และ CPU, ดาวน์โหลด SHA256SUMS และลายเซ็น, ตรวจสอบลายเซ็นด้วยคีย์ที่ฝังอยู่ในสคริปต์, ตรวจสอบแฮชของแพ็กเกจ และติดตั้ง cmp ลงใน /usr/local/bin (ในฐานะ root) หรือ ~/.local/bin; สำหรับบน Windows จะติดตั้งลงใน %LOCALAPPDATA%\cmp\bin (เพิ่มลงใน PATH ของผู้ใช้) หากการตรวจสอบล้มเหลว จะไม่มีการติดตั้งใด ๆ
| ตัวแปร | ความหมาย |
|---|---|
CMP_VERSION | ติดตั้งเวอร์ชันนี้แทนเวอร์ชันล่าสุด |
CMP_INSTALL_DIR | โฟลเดอร์สำหรับติดตั้ง |
CMP_REQUIRE_SIGNATURE | 1 = ยกเลิกเมื่อไม่สามารถตรวจสอบความถูกต้องของลายเซ็นได้ |
CMP_BASE_URL | ฐานการดาวน์โหลด (สำหรับมิเรอร์) |
การดาวน์โหลดและตรวจสอบความถูกต้องด้วยตนเอง:
bash
curl -fsSLO https://cloud.example.com/cli/latest.json
sha256sum --check --ignore-missing SHA256SUMS
เข้าสู่ระบบ
bash
cmp login- CLI จะแสดง รหัส ใช้ครั้งเดียวและลิงก์ (
https://cloud.example.com/link?code=WDJB-MJHT) จากนั้นจะเปิดเบราว์เซอร์และรอ - ในเบราว์เซอร์ ให้ลงชื่อเข้าใช้พอร์ทัล ตรวจสอบชื่อลูกค้า, อุปกรณ์, IP และประเทศ, ทำเครื่องหมายเลือกสิทธิ์ (scopes) และเลือกอายุของคีย์ (ค่าเริ่มต้น 90 วัน) สิทธิ์ที่มีค่าใช้จ่ายหรือลบข้อมูลจะถูกเว้นว่างไว้โดยค่าเริ่มต้น คลิกอนุมัติ
- CLI จะได้รับ คีย์ของตัวเอง ซึ่งแยกต่างหากจากคีย์ที่ลูกค้าสร้างขึ้นเอง และจัดเก็บไว้ใน
~/.config/cmp/config.json(โหมด0600;%APPDATA%\cmpบน Windows) คีย์นี้จะปรากฏภายใต้ API keys › Connected apps & devices และสามารถเพิกถอนได้ที่นั่น
รหัสจะหมดอายุหลังจาก 10 นาที การอนุมัติต้องใช้เซสชันพอร์ทัลที่เข้าสู่ระบบจริงและมีการยืนยันอีเมลแล้ว — ไม่ใช่คีย์อื่นและไม่ใช่เซสชันที่มีการสวมรอย
แฟล็กที่มีประโยชน์: --scopes vm:read,billing:read, --name "build server", --no-browser, --profile, --api-url
สำหรับ CI หรือเซิร์ฟเวอร์ที่ไม่มีเบราว์เซอร์ ให้ใช้คีย์จากพอร์ทัล:
bash
printf %s "$KEY" | cmp login --with-token
export CMP_TOKEN=vk_XXXX # nothing is written to disk
cmp whoamiการใช้งานคำสั่ง
text
cmp <group> [subgroup] <action> [<id> ...] [flags]- พารามิเตอร์เส้นทางคืออาร์กิวเมนต์ตามตำแหน่ง ส่วนพารามิเตอร์คิวรีและฟิลด์ในบอดี้จะกลายเป็นแฟล็กแบบ kebab-case (
--start-port 443) --data '{"a":1}',--data @file.jsonหรือ--data -จะส่งบอดี้ JSON ทั้งชุด โดยแฟล็กจะทับฟิลด์เหล่านั้นcmp help vm firewall add(หรือ--help) แสดงรายละเอียดของคำสั่งใด ๆ
bash
cmp catalog plans
cmp vm list --state active --per-page 50
cmp vm get 3f2a1c9e-0000-4000-8000-000000000000
cmp vm start 3f2a1c9e-0000-4000-8000-000000000000
cmp vm firewall add 3f2a1c9e-... --protocol tcp --start-port 22 --cidr-list 203.0.113.0/24
cmp billing wallet
cmp api GET /v1/vm --query page=2 # raw call to any endpointคำสั่งที่มีมาให้ในตัว: login, logout, whoami, config, api, completion, version, update, help นอกเหนือจากนี้ทั้งหมดมาจากเอกสาร API
แฟล็กส่วนกลาง:
| แฟล็ก | ความหมาย |
|---|---|
-o, --output json|table|yaml | รูปแบบ ค่าเริ่มต้นคือ table บนเทอร์มินัลและ json เมื่อส่งออกผ่านไปป์ |
--profile, --api-url | ข้อมูลการเข้าสู่ระบบที่บันทึกไว้และเว็บไซต์ที่ใช้งาน |
-y, --yes | ข้ามการยืนยันสำหรับคำสั่งที่มีการทำลายล้างข้อมูลหรือมีค่าใช้จ่าย |
--idempotency-key <k> | เลือกคีย์สำหรับคำสั่งที่มีค่าใช้จ่าย |
--retry <n> | เมื่อเจอ HTTP 429 ให้รอ Retry-After และลองใหม่สูงสุด n ครั้ง |
--timeout <s> | จำนวนวินาทีที่รอส่วนหัวการตอบกลับ (ค่าเริ่มต้น 60) |
--debug | แสดงการรับส่งข้อมูล HTTP บน stderr โดยมีการซ่อนคีย์ไว้ |
คำสั่งที่ตัดเงินในกระเป๋าเงินหรือลบข้อมูลจะขอการยืนยัน และหากมีค่าใช้จ่าย ระบบจะส่ง Idempotency-Key ที่สร้างขึ้นโดยอัตโนมัติ (พิมพ์ออกทาง stderr เพื่อให้คุณลองใหม่ได้อย่างปลอดภัยด้วย --idempotency-key) หากไม่มีเทอร์มินัล ระบบจะปฏิเสธเว้นแต่จะระบุ --yes
รหัสการออก (Exit codes)
| รหัส | ความหมาย |
|---|---|
| 0 | สำเร็จ |
| 1 | ข้อผิดพลาดอื่น (เครือข่าย, HTTP 4xx/5xx ที่ไม่ได้ระบุ) |
| 2 | ข้อผิดพลาดในการใช้งาน |
| 3 | ไม่ได้รับอนุญาต (401/403) |
| 4 | ไม่พบข้อมูล (404) |
| 5 | เกินขีดจำกัดอัตราคำขอ (429) |
| 6 | ต้องมีการยืนยันหรือถูกปฏิเสธ |
| 130 | ถูกขัดจังหวะ |
โปรไฟล์และสภาพแวดล้อม
cmp config แสดงรายการโปรไฟล์; cmp config use <name> สลับโปรไฟล์; ลูกค้าของผู้ให้บริการตัวแทนจำหน่ายใช้โดเมนของตนเอง: cmp login --api-url https://shop.example.net --profile shop ลำดับความสำคัญ: แฟล็ก, สภาพแวดล้อม, ไฟล์กำหนดค่า ตัวแปร: CMP_TOKEN, CMP_PROFILE, CMP_API_URL, CMP_OUTPUT, CMP_CONFIG_DIR, CMP_ALLOW_HTTP, CMP_UPDATE_URL
GitHub Actions:
yaml
- name: Install cmp
run: |
curl -fsSL https://cloud.example.com/cli/install.sh | CMP_INSTALL_DIR="$RUNNER_TEMP/bin" sh
echo "$RUNNER_TEMP/bin" >> "$GITHUB_PATH"
- name: List running VMs
env:
CMP_TOKEN: ${{ secrets.CMP_TOKEN }} # a read-only key
run: cmp vm list -o json | jq -r '.items[] | select(.cs_state=="Running") | .hostname'การเติมคำสั่งในเชลล์: cmp completion bash|zsh|fish|powershell
การอัปเดตและการถอนการติดตั้ง
bash
cmp version
cmp update --check
cmp updatecmp update จะดาวน์โหลด latest.json, SHA256SUMS และลายเซ็น ตรวจสอบความถูกต้องของลายเซ็นด้วยคีย์สาธารณะที่ฝังอยู่ในไบนารีที่กำลังทำงาน ตรวจสอบแฮชของแพ็กเกจ แล้วจึงแทนที่ตัวเอง การดาวน์เกรดต้องใช้ --force เมื่อคุณอัปเดต NexCMP พาเนลจะให้บริการรีลีส CLI ที่มาพร้อมกับเวอร์ชันใหม่
หากต้องการถอนการติดตั้ง ให้ลบไบนารี cmp และไดเรกทอรีการกำหนดค่า (cmp config path แสดงตำแหน่ง) เพิกถอนคีย์ภายใต้ API keys หากเครื่องสูญหาย
ตรวจสอบ
cmp versionแสดงเวอร์ชันและเวอร์ชันเอกสาร APIcmp login,อนุมัติในเบราว์เซอร์ จากนั้นcmp whoamiแสดงโปรไฟล์และ URL ของพาเนลของคุณcmp vm listแสดงรายการ VM ของคุณ;cmp vm list -o json | jq .แสดง JSON ดิบ
ขีดจำกัดและหมายเหตุ
- รายการคำสั่งขึ้นอยู่กับบิวด์ของคุณ: แพ็กเกจถูกสร้างขึ้นจากเอกสาร OpenAPI ของการติดตั้งของคุณเมื่อสร้างรีลีส ดังนั้นผลิตภัณฑ์ที่ถูกปิดใช้งานในรีลีสของคุณจะไม่มีคำสั่ง ใช้
cmp apiสำหรับเส้นทางที่ CLI ไม่รู้จัก - CLI อยู่ภายใต้สัญญาอนุญาต MIT
- แต่ละแพ็กเกจลงนามด้วยคีย์ ed25519; คีย์ลายเซ็นจะถูกพินไว้ภายในตัวติดตั้งและไบนารี ไม่ได้ดึงข้อมูลในเวลาที่อัปเดต
- คีย์มีขีดจำกัดต่อคีย์และต่อบัญชี (ดู REST API)
การแก้ Problme
| อาการ | สาเหตุ | วิธีแก้ปัญหา |
|---|---|---|
curl .../cli/install.shคืนค่า 404 | รีลีสบนเซิร์ฟเวอร์ไม่มีโฟลเดอร์ CLI หรือโฮสต์ไม่อยู่ในไลเซนส์ | ตรวจสอบ https://<domain>/cli/latest.json และโดเมน; อัปเดต NexCMP |
| "ไม่สามารถตรวจสอบลายเซ็นได้" | ssh-keygen หายไปหรือเก่าเกินไป | ติดตั้ง OpenSSH 8.0+ หรือตั้งค่า CMP_REQUIRE_SIGNATURE=0 เฉพาะเมื่อคุณยอมรับความเสี่ยงได้ |
cmp login แจ้งว่าโค้ดหมดอายุแล้ว | ผ่านไป 10 นาทีแล้ว | เรียกใช้ cmp login อีกครั้ง |
| รหัสออก 3 | คีย์ไม่มีสโคป, หมดอายุ หรือถูกเพิกถอน | cmp whoami; สร้างหรืออนุมัติใหม่ด้วยสโคปที่มากขึ้น |
| รหัสออก 6 ในสคริปต์ | คำสั่งที่มีค่าใช้จ่ายหรือทำลายล้างโดยไม่มีเทอร์มินัล | เพิ่ม --yes (และ --idempotency-key ของคุณเอง) |
| "ปฏิเสธการส่งคีย์ผ่าน http" | URL API แบบ http ธรรมดา | ใช้ https:// หรือใช้ CMP_ALLOW_HTTP=1 เฉพาะสำหรับห้องทดลอง |
| เบราว์เซอร์เปิดเว็บไซต์ผิด | ไม่ได้ตั้งค่า --api-url สำหรับผู้ให้บริการตัวแทนจำหน่าย | cmp login --api-url https://<reseller-domain>. |