cmp कमांड-लाइन टूल
पोर्टल में कहाँ: इंस्टॉल कमांड API संदर्भ पर हैं (
https://<your-domain>/apidoc, कमांड-लाइन इंटरफ़ेस अनुभाग)। लॉगिन स्वीकृत करना:https://<your-domain>/link। कनेक्टेड डिवाइस: API keys (/api-keys) › Connected apps & devices।
यह क्या करता है
cmp आपके ग्राहकों (और आपके) के लिए एक छोटा कमांड-लाइन प्रोग्राम है जो हर API ऑपरेशन को एक कमांड में बदल देता है: cmp vm list, cmp vm start <id>, cmp billing invoice list। यह रिलीज़ के समय आपके इंस्टॉलेशन के OpenAPI दस्तावेज़ से बनाया जाता है, इसलिए कमांड आपके द्वारा सक्षम की गई सुविधाओं से मेल खाते हैं। यह Linux, macOS और Windows (amd64 और arm64) के लिए एक स्थिर बाइनरी है जिसमें इंस्टॉल करने के लिए और कुछ नहीं चाहिए।
आवश्यकताएं
| आइटम | आवश्यकता |
|---|---|
| सर्वर | कुछ भी अतिरिक्त नहीं। रिलीज़ पैकेज NexCMP रिलीज़ के भीतर हैं और https://<your-domain>/cli/ पर पैनल द्वारा परोसे जाते हैं। |
| ग्राहक मशीन | Linux, macOS या Windows (PowerShell 5.1+)। हस्ताक्षर सत्यापित करने के लिए केवल ssh-keygen (OpenSSH 8.0+) की आवश्यकता है। |
| क्रेडेंशियल्स | वन-टाइम कोड के साथ ब्राउज़र लॉगिन, या API key। |
| नेटवर्क | आपके पैनल के लिए HTTPS। CLI सादे http:// पर कुंजियाँ भेजने से इनकार करता है, सिवाय localhost के। |
बुनियादी ढांचा तैयार करें
कुछ नहीं। पैनल इन फ़ाइलों को /cli/ से सर्व करता है (किसी बिल्ड या अपलोड की आवश्यकता नहीं है):
| फ़ाइल | उद्देश्य |
|---|---|
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 दिन)। जो अनुमतियाँ पैसे खर्च करती हैं या डेटा हटाती हैं, वे बिना टिक के शुरू होती हैं। approve पर क्लिक करें।
- CLI अपनी खुद की कुंजी प्राप्त करता है, जो ग्राहक द्वारा हाथ से बनाई गई कुंजियों से अलग होती है, और इसे
~/.config/cmp/config.jsonमें संग्रहीत करता है (मोड0600; Windows पर%APPDATA%\cmp)। यह API keys › Connected apps & devices के तहत दिखाई देता है और वहाँ इसे निरस्त किया जा सकता है।
कोड 10 मिनट के बाद समाप्त हो जाता है। अनुमोदन के लिए एक सत्यापित ई-मेल के साथ एक वास्तविक साइन-इन पोर्टल सत्र की आवश्यकता होती है — न कि किसी अन्य कुंजी और न ही किसी छद्म सत्र (impersonated session) की।
उपयोगी फ़्लैग: --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 | कुंजियों को मास्क करके, stderr पर HTTP एक्सचेंज दिखाएं। |
जो कमांड वॉलेट से शुल्क लेती हैं या डेटा हटाती हैं, वे पुष्टि मांगती हैं और यदि भुगतान किया गया है, तो एक स्वतः जनरेटेड Idempotency-Key भेजती हैं (जिसे stderr पर प्रिंट किया जाता है, ताकि आप --idempotency-key के साथ सुरक्षित रूप से पुनः प्रयास कर सकें)। टर्मिनल के बिना वे मना कर देती हैं जब तक कि --yes न दिया गया हो।
निकास कोड
| कोड | अर्थ |
|---|---|
| 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संस्करण और API दस्तावेज़ संस्करण प्रिंट करता है।cmp login, ब्राउज़र में स्वीकृत करें, फिरcmp whoamiप्रोफ़ाइल और आपके पैनल का URL दिखाता है।cmp vm listआपके VM लौटाता है;cmp vm list -o json | jq .कच्चा JSON दिखाता है।
Limits & notes
- कमांड सूची आपके बिल्ड पर निर्भर करती है: रिलीज़ बनने पर पैकेज आपके इंस्टॉलेशन के OpenAPI दस्तावेज़ से जनरेट होते हैं, इसलिए आपके रिलीज़ में अक्षम उत्पाद की कोई कमांड नहीं होती है। ऐसे पथ के लिए
cmp apiका उपयोग करें जिसे CLI नहीं जानता है। - CLI MIT लाइसेंस के अंतर्गत है।
- प्रत्येक पैकेज एक ed25519 कुंजी के साथ हस्ताक्षरित होता है; हस्ताक्षर कुंजी इंस्टॉलर और बाइनरी के अंदर पिन की जाती है, न कि अपडेट के समय लाई जाती है।
- कुंजियाँ प्रति कुंजी और प्रति खाता सीमित हैं (देखें REST API)।
ट्रबलशूटिंग
| लक्षण | कारण | सुधार |
|---|---|---|
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 पर कुंजी भेजने से मना करता है" | सादा http API URL | https:// का उपयोग करें, या किसी लैब के लिए ही CMP_ALLOW_HTTP=1 का उपयोग करें। |
| ब्राउज़र गलत साइट खोलता है | पुनर्विक्रेता के लिए --api-url सेट नहीं है | cmp login --api-url https://<reseller-domain>. |