ใช้แฟล็ก -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
ตัวอย่างเช่น มี 2 สถานะ ได้แก่ 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
โดยค่าเริ่มต้น ระบบจะส่งการสำรองข้อมูลบันทึกครั้งที่ 2 ไปยัง /tmp/${HAPPY_STATE_ID}_debug_log.txt
หากต้องการดูบันทึก Happy ให้เรียกใช้ happy-state -l
ในหน้าต่างเทอร์มินัลแยกต่างหาก เมื่อคุณป้อนคําสั่ง Happy บันทึกจะแสดงปัญหาเกี่ยวกับคําสั่ง Shell 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()
ทั้งหมดเป็นคำสั่ง Shell ที่การเรียก 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 และ 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
weave-state-load three_nodes_on_thread_weave.json
หากต้องการบันทึกโทโปโลยีปัจจุบันเป็นไฟล์ JSON แยกต่างหากเพื่อใช้ภายหลัง (เช่น สคริปต์กรณีทดสอบ) ให้ใช้ happy-shell -s
ดังนี้
happy-shell -s my_topology.json
ซึ่งจะบันทึกไฟล์สถานะโทโพโลยีไว้ในไดเรกทอรี $HOME
สคริปต์ Shell
ไฟล์โทโปโลยีสคริปต์ Shell มีชุดคำสั่ง Happy และ Weave เพื่อสร้างโทโปโลยีในไฟล์ JSON ที่เกี่ยวข้อง โดยค่าเริ่มต้น สคริปต์เหล่านี้จะไม่มีสิทธิ์เรียกใช้ได้ ซึ่งจะทําได้ 2 วิธีดังนี้
เมื่อใช้คำสั่ง 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 | ตัวแปรการกําหนดค่า Happy หลัก |
<path-to-happy>/happy/conf/log_config.json | การกําหนดค่าบันทึก |
เพิ่มตัวแปรการกําหนดค่า
ขอแนะนำให้ใช้คำสั่ง happy-configuration
เพื่อตั้งค่าตัวแปรส่วนตัวหรือตัวแปรปลั๊กอินใดๆ นอกเหนือจากค่าเริ่มต้นที่การติดตั้งใช้งาน Happy ต้องการ
เช่น หากต้องการให้ Happy รู้ว่าจะค้นหาไดเรกทอรี Weave test-apps
สำหรับสคริปต์การทดสอบได้จากที่ใด ให้ตั้งค่าตัวแปร weave_path
ดังนี้
happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps
ตัวแปรการกําหนดค่า Happy Stores ใน ~/.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 ใช้จัดการกระบวนการ ใช้ happy-process-wait
เพื่อระงับการดําเนินการของกระบวนการ และ happy-process-stop
เพื่อหยุดกระบวนการ
เอาต์พุตของกระบวนการอยู่ใน /tmp
เช่น หลังจากเริ่มกระบวนการ ContinuousPing ให้ตรวจสอบไดเรกทอรี /tmp
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
ไฟล์ .out
นี้มีเอาต์พุตสำหรับกระบวนการ ContinuousPing
การใช้งาน sudo
Happy เปลี่ยนการกำหนดค่าเครือข่ายที่ควบคุมโดยเคอร์เนลของ Linux
เนื่องจากมีเพียง root
เท่านั้นที่เปลี่ยนการกำหนดค่าเคอร์เนลได้ Happy จะแจ้งให้คุณป้อนรหัสผ่าน sudo
ในระหว่างดำเนินการ
Happy ใช้ตัวแปรสภาพแวดล้อมระบบ $SUDO
เพื่อเรียกใช้ sudo
หากไม่ได้กําหนด $SUDO
ระบบจะเรียกใช้ sudo
ตามปกติ
การเขียนสคริปต์ Python
หลังจากการติดตั้ง คุณจะนําเข้าแพ็กเกจ Happy Python ไปยังสภาพแวดล้อม Python ได้โดยใช้คำสั่ง import
ต่อไปนี้
import happy
ระบบจะนำเข้าโมดูลคำสั่งแต่ละรายการที่พบใน /happy
ดังนี้
import happy.HappyNodeAdd
หากต้องการดึงตัวเลือกโมดูล ให้เรียกฟังก์ชัน option()
ตัวอย่างเช่น หากต้องการเรียกข้อมูลตัวเลือกโมดูล HappyNodeAdd
ให้ทำดังนี้
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()