วิธีการกำหนดและทำซ้ำกำหนดหมายเลขพอร์ตที่เพิ่มขึ้นใน Ansible ได้อย่างไร


12

ฉันยังใหม่กับ Ansible แต่ฉันต้องบำรุงรักษา playbooks ซึ่งสอดคล้องกับบริการที่จะติดตั้งในสภาพแวดล้อมที่กำหนด พวกเขาจำเป็นต้องได้รับมอบหมายพอร์ตใบรับรอง ฯลฯ ซึ่งส่งผลให้หลาย ๆ ไฟล์ที่มีรายการของชื่อเดียวกันและการกำหนดให้กับพวกเขา

ในหลายกรณีฉันคิดว่าฉันสามารถนำ service_name กลับมาใช้ใหม่ได้อย่างง่ายดายเป็นตัวแปร แต่เมื่อทำการแมปกับ IP พอร์ตหรือตัวระบุตัวเลขอื่น ๆ ฉันยังไม่ได้คิดหาวิธีกำหนดหมายเลขที่แตกต่างกันในลักษณะที่สามารถทำซ้ำได้ เหมือนกันแม้ว่าจะมีการเพิ่มบริการใหม่ ฉันได้พิจารณาการใช้ฐานข้อมูล SQLite เพื่อจัดเก็บบริการจากและเพื่อสร้างค่าจากรหัสของพวกเขา แต่ฉันไม่มีความคิดว่าจะรวมเข้ากับ Ansible ได้อย่างไร

ฉันสมมติว่าการกำหนดหมายเลขพอร์ตที่เพิ่มขึ้นไม่ใช่สิ่งใหม่ทั้งหมด มันเป็นสิ่งที่ sysadmins มากมายในแต่ละวันดังนั้นจะต้องมีวิธีที่จะทำอย่างนั้น

แก้ไข : เราเพิ่มหมายเลขพอร์ตโดยตรงในgroup_vars/all.ymlลักษณะนี้:

ports:
    service1:1024
    service2:1025
    service3:1026

สินค้าคงคลังจะถูกสร้างขึ้นโดยอัตโนมัติเนื่องจากเราสร้างคุกเพิ่มเติม (BSD) และขึ้นอยู่กับบทบาทที่จะดำเนินการ


2
เนื่องจากคุณอาจต้องเพิ่มบริการลงในสินค้าคงคลังคุณจะหยุดการเพิ่มหมายเลขพอร์ตเฉพาะที่นั่นด้วยตนเองได้อย่างไร หรือหากสินค้าคงคลังของคุณถูกสร้างขึ้นโดยอัตโนมัติคุณควรแก้ไขปัญหาในระดับการสร้างสินค้าคงคลัง
SztupY

คุณช่วยกรุณารวมข้อมูลตัวอย่าง Ansible ได้ไหม? ไม่ชัดเจนหากคุณใช้group_varsหรือเพิ่มตัวแปรลงในไฟล์คลังข้อมูล ยังไม่ชัดเจนว่าวิธีการสร้างสินค้าคงคลังของคุณ
Woodland Hunter

คุณได้พิจารณาใช้เครื่องมือค้นหาบริการเช่นกงสุลของ HashiCorp หรือไม่?
Foghorn CTO

คำตอบ:


5

ข้อจำกัดความรับผิดชอบ: ฉันไม่ได้ใช้ Ansible

สิ่งที่ฉันจะทำคือใช้หมายเลข "คาดเดาได้" แบบสุ่ม ตามเอกสาร Ansible คุณสามารถสร้างตัวสร้างตัวเลขสุ่ม:

ในฐานะของ Ansible เวอร์ชั่น 2.3, มันเป็นไปได้ที่จะเริ่มต้นตัวสร้างตัวเลขสุ่มจากเมล็ด ด้วยวิธีนี้คุณสามารถสร้างตัวเลขแบบสุ่ม แต่ idempotent:

"{{59 | random (seed = inventory_hostname)}} * * * * root / script / จาก / cron"

ดังนั้นในกรณีของคุณสำหรับหมายเลขพอร์ต (ฉันถือว่าไม่มีสิทธิ์) ฉันจะไปหาตัวแปรที่มีสิ่งต่อไปนี้:

port="{{ 32767 |random(start=1024,seed=service_name) }}"

สูงสุดที่ 32767 เพื่อหลีกเลี่ยงการปะทะกับพอร์ตที่ไคลเอ็นต์เริ่มต้น (ดูที่พอร์ตชั่วคราวสำหรับเหตุผล)


นั่นเป็นความคิดที่ดีที่ฉันพิจารณา แต่มันทำให้ส่วนที่เพิ่มขึ้นเป็นไปไม่ได้ มีบริการบางอย่างที่เกี่ยวข้องกับเหตุผลในช่วงพอร์ตที่แน่นอนอาจเป็นที่ต้องการมาก
midor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.