विषय पर बढ़ें

हुक का उपयोग करना

आप विशिष्ट घटनाओं के घटित होने से पहले या बाद में कस्टम स्क्रिप्ट को स्वचालित रूप से चलाने के लिए SolusVM 2 में हुक का उपयोग कर सकते हैं।

संक्षेप में, यहां बताया गया है कि SolusVM 2 में हुक कैसे काम करते हैं:

  • आप प्रबंधन नोड और/या किसी भी कंप्यूट संसाधनों पर एक विशेष निर्देशिका बना सकते हैं। आप किसी विशिष्ट घटना से जुड़े हुक को गणना संसाधन ए और बी पर अलग-अलग व्यवहार कर सकते हैं, और गणना संसाधन सी से पूरी तरह से अनुपस्थित हो सकते हैं।

  • निर्देशिका में, आपको कस्टम स्क्रिप्ट वाली एक या अधिक निष्पादन योग्य फ़ाइलें रखनी होंगी। कस्टम स्क्रिप्ट को बैश, PHP, पायथन, गोलांग, जावा, या किसी अन्य प्रोग्रामिंग भाषा में लिखा जा सकता है जो पास की गई JSON फ़ाइल को पार्स करने में सक्षम है।

  • हर बार समर्थित घटनाओं में से एक, जैसे कि वर्चुअल सर्वर को रीबूट किया जाना, वर्चुअल सर्वर के लिए होता है, SolusVM 2 प्रबंधन नोड पर पाए गए सभी कस्टम स्क्रिप्ट को निष्पादित करता है या उस वर्चुअल सर्वर को होस्ट करने वाले संसाधन की गणना करता है। आप इस विषय में आगे समर्थित घटनाओं की पूरी सूची पा सकते हैं। आप असमर्थित ईवेंट के लिए हुक नहीं बना सकते. प्रत्येक कॉन्फ़िगर किया गया हुक प्रति इवेंट दो बार ट्रिगर होता है: इवेंट होने से पहले और बाद में। चाहे कोई समर्थित ईवेंट GUI, CLI, या API के माध्यम से शुरू किया गया हो, हुक ट्रिगर हो जाते हैं।

  • जब एक हुक ट्रिगर होता है, तो SolusVM 2 उसे एक JSON ऑब्जेक्ट भेजता है जिसमें निम्नलिखित जानकारी होती है: ईवेंट का प्रकार, क्या हुक ईवेंट से पहले या बाद में ट्रिगर किया गया था, और कुछ प्रासंगिक डेटा, जैसे वर्चुअल सर्वर की आईडी प्रश्न में।

उदाहरण के लिए, जब एक नया वर्चुअल सर्वर बनाया जा रहा है, तो "वर्चुअल सर्वर बनाया गया" इवेंट ट्रिगर हो जाता है। यह अन्य डेटा के अलावा, नव निर्मित वर्चुअल सर्वर का आईपी पता पास करता है। आप एक कस्टम स्क्रिप्ट बना सकते हैं जो आने वाले JSON ऑब्जेक्ट को पार्स करेगी, उस डेटा को लेगी, और इसे होस्ट करने वाले कंप्यूट संसाधन पर आवश्यक फ़ायरवॉल नियम बनाने के लिए इसका उपयोग करेगी।

एक हुक बनाना

हम प्रारंभिक बिंदु के रूप में एकल फ़ाइल का उपयोग करने की अनुशंसा करते हैं, जो यह निर्धारित करेगी कि कौन सी अन्य स्क्रिप्ट या कमांड निष्पादित करनी हैं।

प्रबंधन नोड पर हुक बनाने या संसाधन की गणना करने के लिए:

  1. प्रबंधन नोड में लॉग इन करें या "रूट" उपयोगकर्ता के रूप में एसएसएच के माध्यम से संसाधन की गणना करें।

  2. यदि यह मौजूद नहीं है तो /usr/local/solus/hooks/ नाम से एक निर्देशिका बनाएं।

mkdir /usr/local/solus/hooks/

  1. एक फ़ाइल बनाएं और अपनी कस्टम स्क्रिप्ट को फ़ाइल में पेस्ट करें। आप फ़ाइल को अपनी इच्छानुसार कोई भी नाम दे सकते हैं, उदाहरण के लिए, "hook.sh"।

touch /usr/local/solus/hooks/hook.sh

  1. फ़ाइल को निष्पादन योग्य बनाएं.

chmod +x /usr/local/solus/hooks/hook.sh

अब आपका हुक बन गया है. हर बार समर्थित ईवेंट होने पर निष्पादन योग्य चलाया जाएगा। आप केवल विशिष्ट घटनाओं के लिए विशिष्ट निष्पादन योग्य चलाने के लिए SolusVM 2 को कॉन्फ़िगर नहीं कर सकते। कस्टम स्क्रिप्ट को JSON ऑब्जेक्ट को पार्स करने और उसकी सामग्री के आधार पर कुछ क्रियाएं करने में सक्षम होना चाहिए।

जब कोई समर्थित ईवेंट होता है, तो सभी कॉन्फ़िगर हुक (यदि कोई हो) ट्रिगर हो जाते हैं। SolusVM 2 की ओर से कार्रवाई तब तक रोकी जाती है जब तक कि सभी कस्टम स्क्रिप्ट समाप्त नहीं हो जाती, या एक मिनट बीत जाने तक, जो भी पहले हो। इसलिए, उदाहरण के लिए, यहां बताया गया है कि जब वर्चुअल सर्वर को पुनरारंभ किया जाता है, और उस वर्चुअल सर्वर को होस्ट करने वाले प्रबंधन नोड या कंप्यूट संसाधन पर एक या अधिक हुक कॉन्फ़िगर किए जाते हैं:

  1. वर्चुअल सर्वर को पुनरारंभ करने का आदेश GUI, CLI या API के माध्यम से दिया जाता है।
  2. SolusVM 2 सभी निष्पादनयोग्यों को /usr/local/solus/hooks/ निर्देशिका में चलाता है, प्रत्येक JSON ऑब्जेक्ट को पास करता है जिसमें समर्थित ईवेंट आईडी और "प्री" चरण संकेतक सहित सभी प्रासंगिक जानकारी होती है।
  3. सभी निष्पादनयोग्य बाहर निकल जाते हैं या एक मिनट बीत जाता है।
  4. वर्चुअल सर्वर पुनः प्रारंभ हो गया है.
  5. SolusVM 2 सभी निष्पादनयोग्यों को /usr/local/solus/hooks/ निर्देशिका में चलाता है, प्रत्येक JSON ऑब्जेक्ट को पास करता है जिसमें समर्थित ईवेंट आईडी और "पोस्ट" चरण संकेतक सहित सभी प्रासंगिक जानकारी होती है।

Note

/usr/local/solus/hooks/ निर्देशिका में हुक के अलावा कोई भी फ़ाइल न रखें।

JSON ऑब्जेक्ट एनाटॉमी

आपके हुक को वैध JSON प्रारूप में stdin (मानक इनपुट) पर डेटा की अपेक्षा करनी चाहिए। हर बार जब कोई ट्रिगरिंग घटना होती है, तो सभी प्रासंगिक डेटा वाला एक JSON ऑब्जेक्ट /usr/local/solus/hooks/ निर्देशिका में प्रत्येक बाइनरी को पास कर दिया जाता है। यह वस्तु इस प्रकार दिख सकती है:

{
    "action": "server-restart",
    "stage": "pre",
    "data": {
      "uuid": "c7ee19aa-2722-4139-9223-60ed4baf09e2",
      "virtualization_type": "kvm"
    }
  }

यहां, "एक्शन" निर्दिष्ट करता है कि किस प्रकार की घटना ने हुक को ट्रिगर किया (इस मामले में, एक वर्चुअल सर्वर को पुनरारंभ किया जा रहा है), "स्टेज" निर्दिष्ट करता है कि क्या घटना होने वाली है या अभी हुई है (इस मामले में, पूर्व), और "डेटा" घटना से संबंधित जानकारी निर्दिष्ट करता है (इस मामले में, वर्चुअल सर्वर आईडी और इसका वर्चुअलाइजेशन प्रकार)। तो, विचाराधीन वस्तु हमें बताती है कि "c7ee19aa-2722-4139-9223-60ed4baf09e2" आईडी वाला KVM आधारित वर्चुअल सर्वर पुनः आरंभ होने वाला है, और उदाहरण के लिए, हुक द्वारा कॉल की गई कस्टम स्क्रिप्ट का उपयोग किया जा सकता है वर्चुअल सर्वर के मालिक को सूचित करें.

"एक्शन", "स्टेज" और "डेटा" कुंजियाँ हमेशा मौजूद रहती हैं।

  • "स्टेज" कुंजी में केवल "पूर्व" और "पोस्ट" मान हो सकते हैं।

  • "कार्रवाई" कुंजी में समर्थित घटनाओं के अनुरूप कई मान हो सकते हैं।

  • "server-create"

  • "server-delete"
  • "server-migrate"
  • "server-reinstall"
  • "server-restart"
  • "server-start"
  • "server-stop"
  • "server-network-create"
  • "server-network-delete"
  • "server-network-update"

  • "डेटा" ऑब्जेक्ट में कई कुंजियाँ शामिल होती हैं जिनके अलग-अलग मान हो सकते हैं। एक या अधिक विशिष्ट कुंजियाँ प्रत्येक विशिष्ट "क्रिया" कुंजी से मेल खाती हैं। उदाहरण के लिए, एक वर्चुअल सर्वर को पुनरारंभ करने से संबंधित JSON ऑब्जेक्ट ("सर्वर-रीस्टार्ट" क्रिया) में हमेशा "डेटा" ऑब्जेक्ट के भीतर "uuid" और "वर्चुअलाइजेशन_टाइप" कुंजियाँ शामिल होंगी, और कभी भी कोई अन्य नहीं।

Note

एक ही घटना कई हुक्स को ट्रिगर कर सकती है। उदाहरण के लिए, एक नया वर्चुअल सर्वर बनाने से "सर्वर-क्रिएट" और "सर्वर-नेटवर्क-क्रिएट" हुक दोनों ट्रिगर हो जाते हैं।

Note

यदि कोई ईवेंट निष्पादन के दौरान विफल हो जाता है (उदाहरण के लिए, वर्चुअल सर्वर नहीं बनाया जा सकता है), तो केवल "प्री" हुक ट्रिगर होंगे, लेकिन "पोस्ट" हुक नहीं।

हुक उदाहरण

बैश उदाहरण

  1. प्रबंधन नोड में लॉग इन करें या "रूट" उपयोगकर्ता के रूप में एसएसएच के माध्यम से संसाधन की गणना करें।

  2. यदि यह मौजूद नहीं है तो /usr/local/solus/hooks/ नाम से एक निर्देशिका बनाएं।

mkdir /usr/local/solus/hooks/

  1. एक फ़ाइल बनाएं.

touch /usr/local/solus/hooks/hook.sh

  1. इसे निष्पादन योग्य बनाएं.

chmod +x /usr/local/solus/hooks/hook.sh

  1. निम्नलिखित सामग्री को फ़ाइल में चिपकाएँ।

    #!/bin/bash
    set -xEeuo pipefail
    
    tfile=$(mktemp /tmp/hook_test_$(date "+%Y-%m-%d-%H-%M-%S-%N")_XXX)
    
    cat /dev/stdin | jq > $tfile
    
  2. सर्वर पर "jq" प्रोग्राम इंस्टॉल करें।

apt install jq या dnf install jq

पायथन उदाहरण

  1. प्रबंधन नोड में लॉग इन करें या "रूट" उपयोगकर्ता के रूप में एसएसएच के माध्यम से संसाधन की गणना करें।

  2. यदि यह मौजूद नहीं है तो /usr/local/solus/hooks/ नाम से एक निर्देशिका बनाएं।

mkdir /usr/local/solus/hooks/

  1. एक फ़ाइल बनाएं.

touch /usr/local/solus/hooks/hook.py

  1. इसे निष्पादन योग्य बनाएं.

chmod +x /usr/local/solus/hooks/hook.py

  1. निम्नलिखित सामग्री को फ़ाइल में चिपकाएँ।

    #!/usr/bin/env python3
    import sys
    import json
    
    ACTION_SERVER_RESTART = "server-restart"
    STAGE_PRE = "pre"
    STAGE_POST = "post"
    
    event = json.loads(sys.stdin.read())
    
    
    def handle_server_restart_pre(event_data):
        print(f'Server going restart: {event_data["uuid"]}')
    
    
    def handle_server_restart_post(event_data):
        print(f'Server was restarted: {event_data["uuid"]}')
    
    
    action = event["action"]
    stage = event["stage"]
    data = event["data"]
    
    if ACTION_SERVER_RESTART == action:
        if STAGE_PRE == stage:
            handle_server_restart_pre(data)
            sys.exit(0)
        if STAGE_POST == stage:
            handle_server_restart_post(data)
            sys.exit(0)
    
  2. सर्वर पर "json" मॉड्यूल स्थापित करें।

python -c "help('modules')"

अपने हुक का परीक्षण

  1. प्रबंधन नोड में लॉग इन करें या "रूट" उपयोगकर्ता के रूप में एसएसएच के माध्यम से संसाधन की गणना करें।
  2. अपने हुक पर एक JSON ऑब्जेक्ट पास करें, उदाहरण के लिए:

    echo '{
    "action": "server-restart",
    "stage": "pre",
    "data":
    
    { "uuid": "c7ee19aa-2722-4139-9223-60ed4baf09e2", "virtualization_type": "kvm" }
    }' | /usr/local/solus/hooks/hook.sh