שימוש שמח

אפשר להשתמש בסימון -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 לבדיקה. השתמש בהן גם כדי ללמוד את הפקודות ליצירת טופולוגיה מורכבת.

הטופולוגיה היא בפורמט 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()