การใช้งานที่มีความสุข

ใช้แฟล็ก -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 สำหรับ การทดสอบ รวมถึงใช้เพื่อเรียนรู้คําสั่งในการสร้างโทโปโลยีที่ซับซ้อน

โทโพโลยีอยู่ในรูปแบบ 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()