ขอให้สนุกกับการใช้งาน

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

ใช้แฟล็ก -h กับคําสั่ง 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 สร้าง 1 ค่าที่ไม่ใช่ state เพื่อเปลี่ยนไปใช้สถานะ Happy อื่นทันที

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 จะมี 2 สถานะ ดังนี้

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 บันทึกจะแสดงคําสั่ง Shell 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() บรรทัดคือคําสั่ง Shell ที่การโทรมีความสุข โปรดพิจารณาแต่ละบรรทัดในบันทึก

# 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_conf.json

กระบวนการในโหนด

Happy มีคําสั่งให้เริ่มและหยุดกระบวนการภายในโหนดที่จําลอง

วิธีเริ่มต้นกระบวนการ

happy-process-start <node-name> <custom-process-name> <command>

ตัวอย่างเช่น ในการเรียกใช้คําสั่ง ping ในโหนดที่ชื่อ ThreadNode อย่างต่อเนื่อง ให้ทําดังนี้

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

ในตัวอย่างข้างต้น ContinversaPing เป็นชื่อที่ผู้ใช้กําหนดสําหรับกระบวนการที่ Happy ใช้ในการจัดการกระบวนการ ใช้ happy-process-wait เพื่อระงับการดําเนินการของกระบวนการ และ happy-process-stop เพื่อยุติกระบวนการ

เอาต์พุตการประมวลผลจะอยู่ใน /tmp ตัวอย่างเช่น หลังจากเริ่มต้นกระบวนการ ContinciesPing แล้ว ให้ตรวจสอบไดเรกทอรี /tmp ดังนี้

ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out

ไฟล์ .out นี้มีเอาต์พุตสําหรับกระบวนการแบบต่อเนื่อง

การใช้ 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()