אפשר להשתמש בסימון -h
עם כל פקודת happy-*
כדי להציג את העזרה ואת רשימת האפשרויות של הפקודה הזו.
קובצי מדינה
חנויות מאושרות ששומרות בקפידה על מצב הטופולוגיה שלהן בקובץ JSON עם רשומה אחת. באמצעות קובץ המדינה הזה, Happy יכולה להריץ את הפקודות המתאימות כדי ליצור או להסיר טופולוגיה.
קובץ מצב ברירת המחדל נמצא ב-~/.happy_state.json
. שם מצב ברירת המחדל
happy
, כפי שהוא מופיע בפלט happy-state
:
happy-state
State Name: happy
מדינות מקבילות
Happy Hour תומכת בכמה מדינות מקבילות. המצב הנוכחי נקבע על ידי משתנה הסביבה HAPPY_STATE_ID
. אם הערך HAPPY_STATE_ID
לא קיים בסביבה, ייעשה שימוש בערך ברירת המחדל של המדינה: happy
.
האפליקציה HAPPY_STATE_ID
לא נוצרה במהלך ההתקנה של שמח. יש ליצור ערך עם ערך אחר
שאינו 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-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
יומנים
היומן שולח יומנים אל syslog
כברירת מחדל. גיבוי שני של היומן נשלח אל
/tmp/${HAPPY_STATE_ID}_debug_log.txt
.
כדי להציג את היומנים המאושרים, יש להריץ את happy-state -l
בחלון טרמינל נפרד. כשמזינים פקודות בשמחה, היומנים מציגים את פקודות המעטפת ברקע. זו דרך טובה להבין איך פועל שמח, אם
אתם מתעניינים במרחבי השמות של רשת 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 Hour".
יש לשים לב לכל שורה ביומן:
# 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 Hour וגם במאגרים של OpenWeave לבדיקה. השתמש בהן גם כדי ללמוד את הפקודות ליצירת טופולוגיה מורכבת.
- שמח:
/topologies
- OpenWeave :
/src/test-apps/happy/topologies/standalone
הטופולוגיה היא בפורמט JSON ו-Shell Script.
JSON
קובצי טופולוגיה של JSON נטענים באמצעות הפקודות happy-state-load
או weave-state-load
. אם הטופולוגיה כוללת את Weave, צריך להשתמש ב-weave-state-load
כדי לטעון את הטופולוגיה, אחרת הפקודות הספציפיות ל-Weave יורדו.
לדוגמה, לטופולוגיה ללא Weave:
happy-state-load thread_wifi_ap_internet.json
טופולוגיה עם אריגה:
weave-state-load three_nodes_on_thread_weave.json
כדי לשמור את הטופולוגיה הנוכחית כקובץ JSON נפרד לשימוש במועד מאוחר יותר (לדוגמה, סקריפט של מקרה בדיקה), משתמשים ב-happy-shell -s
:
happy-shell -s my_topology.json
פעולה זו תשמור את קובץ מצב הטופולוגיה בספרייה $HOME
.
סקריפטים של מעטפת
קובצי טופולוגיה של מעטפת מכילים את קבוצת הפקודות ב-Happy and Weave כדי ליצור את הטופולוגיה של קובצי ה-JSON התואמים. לסקריפטים האלה כברירת מחדל אין הרשאות הפעלה. ניתן להפעיל אותם בשתי דרכים:
באמצעות הפקודה bash
:
bash thread_wifi_ap_internet.sh
על ידי החלת הרשאות הפעלה:
chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh
הגדרה
ל-Happy 3 יש שלושה קובצי תצורה:
קובץ התצורה | תיאור |
---|---|
~/.happy_conf.json | משתני תצורה לשימוש אישי או פלאגין. מגדירים את הערכים האלה באמצעות הפקודה happy-configuration . |
<path-to-happy>/happy/conf/main_config.json | משתני תצורה ראשיים מאושרים. |
<path-to-happy>/happy/conf/log_config.json | הגדרת היומן. |
הוספת משתני תצורה
מומלץ להשתמש בפקודה happy-configuration
כדי להגדיר משתנים אישיים
או משתני פלאגין שאינם מוגדרים כברירת מחדל לפריסה הספציפית
של שמחה בשמחה.
לדוגמה, כדי לדעת איפה למצוא את הספרייה ב-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 Hour מנהל את התהליך. יש להשתמש בכלי happy-process-wait
כדי להשעות את
התהליך וב-happy-process-stop
כדי לבטל את התהליך.
הפלט של העיבוד הוא ב/tmp
. לדוגמה, אחרי שמתחילים בתהליך
ContinuousPing, בודקים בספרייה /tmp
:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
קובץ .out
זה מכיל את הפלט של תהליך המשכיות.
שימוש ב-sudo
שמחה לשנות את תצורת הרשת שנשלטת על ידי ליבה של Linux.
מאחר שרק root
יכול לשנות את תצורת הליבה, אנו מבקשים ממך להזין את הסיסמה של sudo
במהלך הפעולה.
Happy משתמשת במשתנה סביבת המערכת של $SUDO
כדי להתקשר ל-sudo
. אם הערך $SUDO
לא מוגדר, Happy ביצוע שיחה רגילה ב-sudo
.
כתיבת סקריפטים ב-Python
אחרי ההתקנה, אפשר לייבא חבילות Python ב-Python לסביבה אחת, באמצעות ההצהרה import
הבאה:
import happy
מודולים ספציפיים של פקודות שנמצאו ב-/happy
מיובאים באופן הבא:
import happy.HappyNodeAdd
כדי לאחזר את אפשרויות המודול, יש לקרוא לפונקציה option()
. לדוגמה, כדי
לאחזר אפשרויות של HappyNodeAdd
:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()