כדאי להשתמש בדגל -h
עם כל פקודת happy-*
כדי לראות את העזרה ואת הרשימה של
אפשרויות לפקודה הזו.
קבצים של המדינה
אפליקציית Happy מאחסנת ושומרת בקפידה על מצב הטופולוגיה בקובץ JSON באמצעות רשומה אחת. באמצעות קובץ המצב הזה, Happy יכול להריץ את הפקודות המתאימות כדי ליצור או להסיר טופולוגיה.
קובץ המצב שמוגדר כברירת מחדל נמצא ב-~/.happy_state.json
. מצב ברירת המחדל
השם הוא happy
, כפי שמופיע בפלט happy-state
:
happy-state
State Name: happy
מצבים מקבילים
קוד ה-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
כשכל המצבים פעילים. כך אפשר לוודא שכל הרשתות
מרחבי שמות שנוצרו על ידי Happy יוסרו מהמערכת שלך בלי להשפיע על
הגדרת הרשת של המארח של 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
יוצר צומת Happy. הפלט של הפקודה ביומן הוא:
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 לצורך בדיקה. אפשר גם להשתמש בהם כדי ללמוד את הפקודות ליצירת תצורות מורכבות.
- שמח:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
הטופולוגיות הן בפורמט JSON ובפורמט של סקריפט מעטפת.
JSON
קובצי טופוגרפיה של JSON נטענים באמצעות הפקודות happy-state-load
או weave-state-load
. אם הטופולוגיה כוללת את Weave, צריך להשתמש ב-weave-state-load
כדי לטעון את הטופולוגיה, אחרת הפקודות הספציפיות ל-Weave יועברו.
לדוגמה, טופולוגיה ללא 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 יש שלושה קובצי תצורה:
קובץ תצורה | תיאור |
---|---|
~/.happy_conf.json | משתני תצורה לשימוש אישי או לשימוש בפלאגין. מגדירים את הערכים האלה באמצעות הפקודה happy-configuration . |
<path-to-happy>/happy/conf/main_config.json | משתני תצורה ראשיים של Happy. |
<path-to-happy>/happy/conf/log_config.json | הגדרת יומן. |
הוספת משתני תצורה
מומלץ להשתמש בפקודה happy-configuration
כדי להגדיר
יישומי פלאגין מעבר לברירות המחדל של הפריסה הספציפית של Happy
לצרכים שלכם.
לדוגמה, כדי ליידע את 'שמח' איפה למצוא את הספרייה test-apps
של Weave
סקריפטים לבדיקה, מגדירים את המשתנה weave_path
:
happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps
משתני ההגדרה של חנויות ב-Gemini ב-~/.happy_conf.json
.
תהליכים בצמתים
Happy מספק פקודות להפעלה ולעצירה של תהליכים בצמתים מדומים.
כדי להתחיל תהליך:
happy-process-start <node-name> <custom-process-name> <command>
לדוגמה, כדי להריץ ping באופן רציף בצומת בשם ThreadNode:
happy-process-start ThreadNode ContinuousPing ping 8.8.8.8
בדוגמה שלמעלה, ContinuousPing הוא השם של התהליך שהוגדר על ידי המשתמש
ש-שמח משתמש בו לניהול התהליך. משתמשים ב-happy-process-wait
כדי להשעות את ביצוע התהליך וב-happy-process-stop
כדי להרוג את התהליך.
פלט התהליך נמצא ב-/tmp
. לדוגמה, אחרי שמתחילים את התהליך של ContinuousPing, בודקים את הספרייה /tmp
:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
קובץ ה-.out
הזה מכיל את הפלט של תהליך הפינג הרציף.
שימוש ב-sudo
שינויים בתצורת הרשת הנשלטת על ידי הליבה של Linux.
מכיוון שרק root
יכול לשנות את הגדרות הליבה, Happy יבקש מכם להזין את הסיסמה של sudo
במהלך הפעולה.
שמח משתמש במשתנה הסביבה של המערכת $SUDO
כדי לקרוא ל-sudo
. אם $SUDO
הוא
לא מוגדר, Happy מבצע שיחת sudo
רגילה.
כתיבת סקריפטים ב-Python
לאחר ההתקנה, ניתן לייבא חבילות Python של Happy Python ל-Python.
באמצעות הצהרת import
הבאה:
import happy
מודולים של פקודות בודדות שנמצאו ב-/happy
מיובאים באופן הבא:
import happy.HappyNodeAdd
כדי לאחזר את אפשרויות המודול, צריך להפעיל את הפונקציה option()
. לדוגמה, כדי לאחזר את האפשרויות של המודול HappyNodeAdd
:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()