उपयोग का आनंद

किसी happy-* निर्देश के लिए सहायता और विकल्पों की सूची देखने के लिए, -h फ़्लैग का इस्तेमाल करें.

स्टेट फ़ाइलें

Happy, एक रिकॉर्ड वाली JSON फ़ाइल में अपनी टोपोलॉजी की स्थिति को ध्यान से सेव और मैनेज करता है. इस स्टेटस फ़ाइल का इस्तेमाल करके, हैप्पी कोई टोपोलॉजी बनाने या हटाने के लिए सही निर्देश चला सकता है.

डिफ़ॉल्ट स्टेटस वाली फ़ाइल ~/.happy_state.json पर मौजूद है. डिफ़ॉल्ट तौर पर, राज्य का नाम happy होता है, जैसा कि happy-state आउटपुट में दिखता है:

happy-state

State Name:  happy

पैरलल स्टेट

हैप्पी एक साथ कई समानांतर स्थितियों का समर्थन करता है. मौजूदा स्थिति, HAPPY_STATE_ID एनवायरमेंट वैरिएबल से तय होती है. अगर HAPPY_STATE_ID, एनवायरमेंट में मौजूद नहीं है, तो happy की डिफ़ॉल्ट स्थिति वैल्यू का इस्तेमाल किया जाता है.

HAPPY_STATE_ID, Happy इंस्टॉलेशन के दौरान नहीं बनाया जाता. state के अलावा किसी दूसरी वैल्यू के साथ एक स्टेटस बनाएं, ताकि तुरंत खुशी की किसी दूसरी स्थिति पर स्विच किया जा सके.

export HAPPY_STATE_ID="sunny"

अब happy-state के नतीजे अलग स्थिति में देखे जा रहे हैं:

happy-state

State Name:  sunny

हर राज्य की जानकारी, अपनी ~/.${HAPPY_STATE_ID}_state.json फ़ाइल में सेव की जाती है. एक से दूसरी स्टेट पर जाने के लिए, export HAPPY_STATE_ID="<state-name>" कमांड फिर से चलाएं.

समानांतर स्थितियों के साथ अनइंस्टॉल करें

अगर आपने Happy के पैरलल स्टेटस का इस्तेमाल किया है और आपको Happy को अनइंस्टॉल करना है, तो हर स्टेटस के चालू होने पर happy-state-delete को रन करना न भूलें. इससे यह पक्का होता है कि हैप्पी के बनाए गए सभी नेटवर्क नेमस्पेस को आपके सिस्टम से हटा दिया जाएगा. इससे, Linux होस्ट नेटवर्क कॉन्फ़िगरेशन पर कोई असर नहीं पड़ेगा.

उदाहरण के लिए, happy और sunny की दो स्थितियों के साथ:

export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete

ज़रूरत के हिसाब से, हर पैरलल स्टेटस फ़ाइल को मैन्युअल तरीके से हटाएं:

rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock

लॉग

Happy, डिफ़ॉल्ट रूप से syslog को लॉग भेजता है. /tmp/${HAPPY_STATE_ID}_debug_log.txt पर दूसरा लॉग बैकअप भेजा जाता है.

Happy लॉग देखने के लिए, किसी अलग टर्मिनल विंडो में happy-state -l चलाएं. Happy कमांड डालने पर, लॉग में बैकग्राउंड में Happy से जुड़ी समस्याओं के बारे में शेल कमांड दिखते हैं. अगर आपको Linux नेटवर्क नेमस्पेस में दिलचस्पी है, तो यह हैप्पी के काम करने के तरीके को समझने का एक अच्छा तरीका है.

उदाहरण के लिए, happy-node-add node00 से 'खुश' नोड बनता है. इस कमांड का लॉग आउटपुट यह है:

DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist
DEBUG [Driver:writeState():365] Happy: writing Happy state to file
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up

सभी Driver:CallCmd() लाइनें, शेल कमांड हैं जिन्हें Happy कॉल करता है. लॉग में मौजूद हर लाइन पर ध्यान दें:

# Check to see if the target namespace (happy000) exists
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist

# Write the link between node00 and happy000 in ~/.happy_state.json
DEBUG [Driver:writeState():365] Happy: writing Happy state to file

# Create the network namespace for the node
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000

# Check to see if the target namespace (happy000) exists
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists

# Bring up the loopback interface within the happy000 namespace
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up

टोपोलॉजी के सैंपल

जांच के लिए, सैंपल टॉपोलॉजी, Happy और OpenWeave, दोनों रिपॉज़िटरी में शामिल की गई हैं. इनका इस्तेमाल, जटिल टोपोलॉजी बनाने के लिए निर्देशों को सीखने के लिए भी किया जा सकता है.

टोपोलॉजी, JSON और शेल स्क्रिप्ट फ़ॉर्मैट में होती हैं.

JSON

JSON टोपोलॉजी फ़ाइलें, happy-state-load या weave-state-load कमांड का इस्तेमाल करके लोड की जाती हैं. अगर टोपोलॉजी में Weave शामिल है, तो टोपोलॉजी को लोड करने के लिए, आपको weave-state-load का इस्तेमाल करना होगा. ऐसा न करने पर, Weave के लिए खास तौर पर बने निर्देशों को छोड़ दिया जाएगा.

उदाहरण के लिए, वेव के बिना टोपोलॉजी:

happy-state-load thread_wifi_ap_internet.json

Weave वाली टोपोलॉजी:

weave-state-load three_nodes_on_thread_weave.json

अपनी मौजूदा टोपोलॉजी को बाद में इस्तेमाल करने के लिए, अलग JSON फ़ाइल के तौर पर सेव करने के लिए happy-shell -s का इस्तेमाल करें. उदाहरण के लिए, टेस्ट केस स्क्रिप्ट:

happy-shell -s my_topology.json

इससे टोपोलॉजी स्टेट फ़ाइल को $HOME डायरेक्ट्री में सेव किया जाता है.

शेल स्क्रिप्ट

शेल स्क्रिप्ट टोपोलॉजी फ़ाइलों में, Happy और Weave कमांड का सेट होता है. इनका इस्तेमाल, संबंधित JSON फ़ाइलों में टोपोलॉजी बनाने के लिए किया जाता है. डिफ़ॉल्ट रूप से, इन स्क्रिप्ट के पास एक्ज़ीक्यूटेबल अनुमतियां नहीं होती हैं. इन्हें दो तरीकों से चलाया जा सकता है:

bash कमांड का इस्तेमाल करके:

bash thread_wifi_ap_internet.sh

एक्ज़ीक्यूटेबल अनुमतियां लागू करके:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

कॉन्फ़िगरेशन

हैप्पी के पास तीन कॉन्फ़िगरेशन फ़ाइलें हैं:

कॉन्फ़िगरेशन फ़ाइलब्यौरा
~/.happy_conf.jsonनिजी या प्लग-इन के इस्तेमाल के लिए कॉन्फ़िगरेशन वैरिएबल. happy-configuration कमांड का इस्तेमाल करके, ये वैल्यू सेट करें.
<path-to-happy>/happy/conf/main_config.jsonहैप्पी मुख्य कॉन्फ़िगरेशन वैरिएबल.
<path-to-happy>/happy/conf/log_config.jsonलॉग कॉन्फ़िगरेशन.

कॉन्फ़िगरेशन वैरिएबल जोड़ना

हमारा सुझाव है कि आप किसी भी निजी या प्लग-इन वैरिएबल को डिफ़ॉल्ट वैल्यू से अलग सेट करने के लिए, happy-configuration कमांड का इस्तेमाल करें. यह वैरिएबल, Happy की ज़रूरत के हिसाब से डिप्लॉय करने के लिए तय की गई डिफ़ॉल्ट वैल्यू से अलग है.

उदाहरण के लिए, हैप्पी को यह बताने के लिए कि टेस्ट स्क्रिप्ट के लिए Weave test-apps डायरेक्ट्री कहां मिलेगी, weave_path वैरिएबल सेट करें:

happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps

~/.happy_conf.json में स्टोर के कॉन्फ़िगरेशन वैरिएबल की शुभकामनाएं.

नोड में प्रोसेस

हैप्पी, सिम्युलेटेड नोड में प्रोसेस शुरू और बंद करने के निर्देश देता है.

कोई प्रोसेस शुरू करने के लिए:

happy-process-start <node-name> <custom-process-name> <command>

उदाहरण के लिए, ThreadNode नाम के किसी नोड में लगातार पिंग चलाने के लिए:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

ऊपर दिए गए उदाहरण में, ContinuousPing उस प्रोसेस का नाम है जिसे उपयोगकर्ता ने तय किया है और जिसका इस्तेमाल Happy, प्रोसेस को मैनेज करने के लिए करता है. प्रोसेस को निलंबित करने के लिए happy-process-wait और प्रोसेस को बंद करने के लिए happy-process-stop का इस्तेमाल करें.

प्रोसेस का आउटपुट /tmp में है. उदाहरण के लिए, ContinuousPing प्रोसेस शुरू करने के बाद, /tmp डायरेक्ट्री देखें:

ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out

इस .out फ़ाइल में, ContinuousPing प्रोसेस का आउटपुट होता है.

sudo का इस्तेमाल

उस नेटवर्क कॉन्फ़िगरेशन को बदल देता है, जिसे Linux कर्नेल के ज़रिए कंट्रोल किया जाता है. सिर्फ़ root ही कर्नेल कॉन्फ़िगरेशन में बदलाव कर सकता है. इसलिए, Happy आपको ऑपरेशन के दौरान sudo पासवर्ड डालने के लिए कहता है.

हैप्पी, sudo को कॉल करने के लिए $SUDO सिस्टम एनवायरमेंट वैरिएबल का इस्तेमाल करता है. अगर $SUDO को तय नहीं किया गया है, तो हैप्पी सामान्य sudo कॉल करता है.

Python स्क्रिप्टिंग

इंस्टॉल करने के बाद, हैप्पी Python पैकेज को Python एनवायरमेंट में इंपोर्ट करने के लिए, इस import स्टेटमेंट का इस्तेमाल करें:

import happy

/happy में मिले अलग-अलग कमांड मॉड्यूल, इस तरह इंपोर्ट किए जाते हैं:

import happy.HappyNodeAdd

मॉड्यूल के विकल्प वापस पाने के लिए, option() फ़ंक्शन को कॉल करें. उदाहरण के लिए, HappyNodeAdd मॉड्यूल के विकल्पों को वापस पाने के लिए:

module options
import happy.HappyNodeAdd
options = happy.HappyNodeAdd.option()