go-getter เป็นไลบรารีสำหรับ Go (golang) สำหรับการดาวน์โหลดไฟล์หรือไดเร็กทอรีจากแหล่งต่าง ๆ โดยใช้ URL เป็นรูปแบบอินพุตหลัก
ประสิทธิภาพของไลบรารีนี้มีความยืดหยุ่นในการดาวน์โหลดจากแหล่งต่างๆ มากมาย (เส้นทางไฟล์, Git, HTTP, Mercurial ฯลฯ) โดยใช้สตริงเดียวเป็นอินพุต ซึ่งจะช่วยขจัดภาระในการทราบวิธีการดาวน์โหลดจากแหล่งต่างๆ จากผู้ดำเนินการ
แนวคิดของ เครื่องมือตรวจจับ จะเปลี่ยน URL ที่ไม่ถูกต้องให้เป็น URL ที่เหมาะสมโดยอัตโนมัติ ตัวอย่างเช่น: "github.com/hashicorp/go-getter" จะเปลี่ยนเป็น URL ของ Git หรือ "./foo" จะกลายเป็น URL ของไฟล์ สิ่งเหล่านี้สามารถขยายได้
Terraform ใช้ไลบรารีนี้เพื่อดาวน์โหลดโมดูลและ Nomad สำหรับดาวน์โหลดไบนารี
เอกสารแพ็คเกจสามารถพบได้ใน GoDoc
การติดตั้งสามารถทำได้ตามปกติ go get
:
$ go get github.com/hashicorp/go-getter
go-getter ยังมีคำสั่งที่คุณสามารถใช้เพื่อทดสอบสตริง URL:
$ go install github.com/hashicorp/go-getter/cmd/go-getter ... $ go-getter github.com/foo/bar ./foo ...
คำสั่งนี้มีประโยชน์สำหรับการตรวจสอบโครงสร้าง URL
การดึงทรัพยากรจาก URL ที่ผู้ใช้ระบุเป็นการดำเนินการที่เป็นอันตรายโดยธรรมชาติ และอาจทำให้แอปพลิเคชันของคุณเสี่ยงต่อการปลอมแปลงคำขอฝั่งเซิร์ฟเวอร์ การสำรวจเส้นทาง การปฏิเสธบริการ หรือข้อบกพร่องด้านความปลอดภัยอื่นๆ
go-getter มีการบรรเทาปัญหาด้านความปลอดภัยบางส่วน แต่ควรใช้ด้วยความระมัดระวังในบริบทที่มีความสำคัญต่อความปลอดภัย ดูตัวเลือกความปลอดภัยที่มีอยู่ซึ่งสามารถกำหนดค่าเพื่อลดความเสี่ยงเหล่านี้ได้
go-getter อาจส่งคืนค่าที่มีพารามิเตอร์การสืบค้นที่ผู้โทรระบุซึ่งสามารถมีข้อมูลที่ละเอียดอ่อนได้ บริบทเกี่ยวกับพารามิเตอร์ที่เป็นและไม่ละเอียดอ่อนนั้นมีเพียงผู้เรียกของ go-getter เท่านั้นที่ทราบ และเฉพาะเจาะจงสำหรับแต่ละกรณีการใช้งาน เราขอแนะนำให้ผู้เรียกตรวจสอบให้แน่ใจว่าค่าที่ส่งคืนของ go-getter (เช่น ข้อความแสดงข้อผิดพลาด) ได้รับการจัดการอย่างเหมาะสมและถูกสุขลักษณะ เพื่อให้แน่ใจว่าข้อมูลที่ละเอียดอ่อนจะไม่คงอยู่ในบันทึก
go-getter ใช้ URL สตริงเดียวเป็นอินพุตเพื่อดาวน์โหลดจากโปรโตคอลที่หลากหลาย go-getter มี "เคล็ดลับ" มากมายพร้อม URL นี้เพื่อทำบางสิ่ง ส่วนนี้จะบันทึกรูปแบบ URL
โปรโตคอล ใช้ในการดาวน์โหลดไฟล์/ไดเร็กทอรีโดยใช้กลไกเฉพาะ โปรโตคอลตัวอย่าง ได้แก่ Git และ HTTP
ตัวตรวจจับ ใช้ในการแปลง URL ที่ถูกต้องหรือไม่ถูกต้องให้เป็น URL อื่นหากตรงกับรูปแบบใดรูปแบบหนึ่ง ตัวอย่าง: "github.com/user/repo" จะถูกแปลงเป็น URL Git ที่ถูกต้องโดยสมบูรณ์โดยอัตโนมัติ สิ่งนี้ทำให้ go-getter เป็นมิตรกับผู้ใช้มาก
go-getter out of the box รองรับโปรโตคอลต่อไปนี้ สามารถเพิ่มโปรโตคอลเพิ่มเติมได้ที่รันไทม์โดยการใช้อินเทอร์เฟซ Getter
ไฟล์ในเครื่อง
คอมไพล์
เมอร์คิวเรียล
HTTP
อเมซอน S3
Google GCP
นอกเหนือจากโปรโตคอลข้างต้น go-getter ยังมีสิ่งที่เรียกว่า "เครื่องตรวจจับ" สิ่งเหล่านี้ใช้ URL และพยายามเลือกโปรโตคอลที่ดีที่สุดโดยอัตโนมัติ ซึ่งอาจเกี่ยวข้องกับการเปลี่ยนโปรโตคอลด้วยซ้ำ การตรวจหาต่อไปนี้มีอยู่แล้วภายในตามค่าเริ่มต้น:
เส้นทางของไฟล์ เช่น "./foo" จะถูกเปลี่ยนเป็น URL ของไฟล์ที่สมบูรณ์โดยอัตโนมัติ
URL ของ GitHub เช่น "github.com/mitchellh/vagrant" จะถูกเปลี่ยนเป็นโปรโตคอล Git ผ่าน HTTP โดยอัตโนมัติ
URL ของ GitLab เช่น "gitlab.com/inkscape/inkscape" จะถูกเปลี่ยนเป็นโปรโตคอล Git ผ่าน HTTP โดยอัตโนมัติ
URL ของ BitBucket เช่น "bitbucket.org/mitchellh/vagrant" จะถูกเปลี่ยนเป็น Git หรือโปรโตคอล mercurial โดยอัตโนมัติโดยใช้ BitBucket API
ในบางกรณี โปรโตคอลที่ใช้มีความคลุมเครือ ขึ้นอยู่กับ URL แหล่งที่มา ตัวอย่างเช่น "http://github.com/mitchellh/vagrant.git" อาจอ้างอิง HTTP URL หรือ Git URL ไวยากรณ์ของโปรโตคอลบังคับใช้เพื่อแยกความกำกวมของ URL นี้
โปรโตคอลบังคับสามารถทำได้โดยนำหน้า URL ด้วยโปรโตคอลตามด้วยทวิภาคคู่ ตัวอย่างเช่น: git::http://github.com/mitchellh/vagrant.git
จะดาวน์โหลด HTTP URL ที่กำหนดโดยใช้โปรโตคอล Git
โปรโตคอลที่บังคับใช้จะแทนที่ตัวตรวจจับใดๆ ด้วย
ในกรณีที่ไม่มีโปรโตคอลบังคับ ตัวตรวจจับอาจทำงานบน URL โดยจะเปลี่ยนโปรโตคอลต่อไป ตัวอย่างข้างต้นจะใช้โปรโตคอล Git ไม่ว่าจะด้วยวิธีใด เนื่องจากตัวตรวจจับ Git จะตรวจพบว่าเป็น URL ของ GitHub
แต่ละโปรโตคอลสามารถรองรับตัวเลือกเฉพาะโปรโตคอลเพื่อกำหนดค่าโปรโตคอลนั้น ตัวอย่างเช่น โปรโตคอล git
รองรับการระบุพารามิเตอร์การสืบค้น ref
ที่บอกว่าการอ้างอิงใดที่ต้องชำระเงินสำหรับที่เก็บ Git นั้น
ตัวเลือกถูกระบุเป็นพารามิเตอร์การค้นหาใน URL (หรือสตริงที่มีลักษณะคล้าย URL) ที่มอบให้กับ go-getter จากตัวอย่าง Git ด้านบน URL ด้านล่างเป็นอินพุตที่ถูกต้องสำหรับผู้เริ่ม:
github.com/hashicorp/go-getter?ref=abcd1234
ตัวเลือกเฉพาะโปรโตคอลได้รับการบันทึกไว้ด้านล่างส่วนรูปแบบ URL แต่เนื่องจากเป็นส่วนหนึ่งของ URL เราจึงชี้ให้เห็นที่นี่เพื่อให้คุณรู้ว่ามีอยู่จริง
หากคุณต้องการดาวน์โหลดเฉพาะไดเรกทอรีย่อยจากไดเรกทอรีที่ดาวน์โหลด คุณสามารถระบุไดเรกทอรีย่อยหลังเครื่องหมายทับคู่ //
go-getter จะดาวน์โหลด URL ที่ระบุ ก่อน เครื่องหมายทับคู่ (ราวกับว่าคุณไม่ได้ระบุเครื่องหมายทับคู่) แต่จะคัดลอกเส้นทางหลังเครื่องหมายทับคู่ลงในไดเร็กทอรีเป้าหมาย
ตัวอย่างเช่น หากคุณกำลังดาวน์โหลดพื้นที่เก็บข้อมูล GitHub นี้ แต่คุณต้องการดาวน์โหลดเฉพาะไดเร็กทอรี testdata
เท่านั้น คุณสามารถดำเนินการดังต่อไปนี้:
https://github.com/hashicorp/go-getter.git//testdata
หากคุณดาวน์โหลดไฟล์นี้ลงในไดเร็กทอรี /tmp
ไฟล์ /tmp/archive.gz
ก็จะยังคงอยู่ โปรดสังเกตว่าไฟล์นี้อยู่ในไดเร็กทอรี testdata
ในพื้นที่เก็บข้อมูลนี้ แต่เนื่องจากเราระบุไดเร็กทอรีย่อย go-getter จึงคัดลอกเฉพาะเนื้อหาไดเร็กทอรีนั้นโดยอัตโนมัติ
เส้นทางไดเรกทอรีย่อยอาจใช้รูปแบบ glob ของระบบไฟล์ เส้นทางต้องตรงกับรายการ เดียว ไม่เช่นนั้น go-getter จะส่งกลับข้อผิดพลาด สิ่งนี้มีประโยชน์หากคุณไม่แน่ใจชื่อไดเร็กทอรีที่แน่นอน แต่เป็นไปตามโครงสร้างการตั้งชื่อที่คาดเดาได้
ตัวอย่างเช่น URL ต่อไปนี้ก็ใช้งานได้:
https://github.com/hashicorp/go-getter.git//test-*
สำหรับการดาวน์โหลดไฟล์ของโปรโตคอลใดๆ go-getter สามารถตรวจสอบผลรวมตรวจสอบสำหรับคุณได้โดยอัตโนมัติ โปรดทราบว่าการตรวจสอบจะใช้กับการดาวน์โหลดไฟล์เท่านั้น ไม่ใช่ไดเร็กทอรี แต่การตรวจสอบจะใช้ได้กับทุกโปรโตคอล
หากต้องการตรวจสอบไฟล์ ให้เพิ่มพารามิเตอร์ข้อความค้นหา checksum
ต่อท้าย URL go-getter จะแยกวิเคราะห์พารามิเตอร์การค้นหานี้โดยอัตโนมัติ และใช้เพื่อตรวจสอบการตรวจสอบ ค่าพารามิเตอร์สามารถอยู่ในรูปแบบ type:value
หรือเพียง value
โดยที่ type คือ "md5", "sha1", "sha256", "sha512" หรือ "file" "ค่า" ควรเป็นค่าตรวจสอบจริงหรือ URL ดาวน์โหลดสำหรับ "ไฟล์" เมื่อละเว้นส่วนของ type
ระบบจะเดาประเภทตามความยาวของสตริงตรวจสอบ ตัวอย่าง:
./foo.txt?checksum=md5:b7d96c89d09d9e204f5fedc4d5d55b21
./foo.txt?checksum=b7d96c89d09d9e204f5fedc4d5d55b21
./foo.txt?checksum=file:./foo.txt.sha256sum
เมื่อตรวจสอบจากไฟล์ - เช่น: ด้วย checksum=file:url
- go-getter จะได้รับไฟล์ที่เชื่อมโยงใน URL หลัง file:
โดยใช้การกำหนดค่าเดียวกัน ตัวอย่างเช่น ใน file:http://releases.ubuntu.com/cosmic/MD5SUMS
go-getter จะดาวน์โหลดไฟล์เช็คซัมภายใต้ URL ดังกล่าวโดยใช้โปรโตคอล http สามารถใช้โปรโตคอลทั้งหมดที่รองรับโดย go-getter ได้ ไฟล์เช็คซัมจะถูกดาวน์โหลดเป็นไฟล์ชั่วคราว จากนั้นจึงแยกวิเคราะห์ ปลายทางของไฟล์ชั่วคราวสามารถเปลี่ยนแปลงได้โดยการตั้งค่าตัวแปรสภาพแวดล้อมเฉพาะระบบ: TMPDIR
สำหรับ unix; TMP
, TEMP
หรือ USERPROFILE
บน windows อ่าน godoc ของ os.TempDir เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการเลือกไดเร็กทอรีชั่วคราว เนื้อหาของไฟล์คาดว่าจะเป็นรูปแบบ BSD หรือ GNU เมื่อ go-getter เสร็จสิ้นด้วยไฟล์เช็คซัม มันถูกลบไปแล้ว
พารามิเตอร์การค้นหาเช็คซัมจะไม่ถูกส่งไปยังการใช้งานโปรโตคอลแบ็กเอนด์ มันถูกใช้ในระดับที่สูงกว่าโดย go-getter เอง
หากมีไฟล์ปลายทางและเช็คซัมตรงกัน การดาวน์โหลดจะถูกข้ามไป
go-getter จะยกเลิกการเก็บถาวรไฟล์ลงในไฟล์หรือไดเร็กทอรีโดยอัตโนมัติตามนามสกุลของไฟล์ที่ถูกร้องขอ (ผ่านโปรโตคอลใด ๆ ) ใช้งานได้ทั้งการดาวน์โหลดไฟล์และไดเร็กทอรี
go-getter ค้นหาพารามิเตอร์การสืบค้น archive
เพื่อระบุรูปแบบของไฟล์เก็บถาวร หากไม่ได้ระบุ go-getter จะใช้ส่วนขยายของเส้นทางเพื่อดูว่าปรากฏว่าเก็บถาวรหรือไม่ การยกเลิกการเก็บถาวรสามารถปิดใช้งานได้อย่างชัดเจนโดยการตั้งค่าพารามิเตอร์การค้นหา archive
เป็น false
รองรับรูปแบบไฟล์เก็บถาวรต่อไปนี้:
tar.gz
และ tgz
tar.bz2
และ tbz2
tar.xz
และ txz
zip
gz
bz2
xz
ตัวอย่างเช่น URL ตัวอย่างแสดงอยู่ด้านล่าง:
./foo.zip
สิ่งนี้จะถูกอนุมานว่าเป็นไฟล์ ZIP โดยอัตโนมัติและจะถูกแตกออกมา คุณสามารถระบุประเภทไฟล์เก็บถาวรได้อย่างชัดเจน:
./some/other/path?archive=zip
และสุดท้าย คุณสามารถปิดใช้งานการเก็บถาวรได้อย่างสมบูรณ์:
./some/path?archive=false
คุณสามารถรวมการยกเลิกการเก็บถาวรเข้ากับคุณสมบัติอื่นๆ ของ go-getter เช่น การตรวจสอบ พารามิเตอร์การค้นหา archive
พิเศษจะถูกลบออกจาก URL ก่อนที่จะไปที่ตัวดาวน์โหลดโปรโตคอลขั้นสุดท้าย
ส่วนนี้บันทึกตัวเลือกเฉพาะโปรโตคอลที่สามารถระบุได้สำหรับ go-getter ควรเพิ่มตัวเลือกเหล่านี้ต่อท้ายอินพุตเป็นพารามิเตอร์การสืบค้นปกติ (อย่างไรก็ตาม ส่วนหัว HTTP เป็นข้อยกเว้น) ขึ้นอยู่กับการใช้งาน go-getter แอปพลิเคชันอาจมีวิธีอื่นในการป้อนตัวเลือก ตัวอย่างเช่น Nomad มีบล็อกตัวเลือกที่ดีสำหรับการระบุตัวเลือกมากกว่าใน URL
ตัวเลือกด้านล่างนี้ใช้ได้กับโปรโตคอลทั้งหมด:
archive
- รูปแบบไฟล์เก็บถาวรที่จะใช้ในการยกเลิกการเก็บถาวรไฟล์นี้ หรือ "" (สตริงว่าง) เพื่อปิดการยกเลิกการเก็บถาวร สำหรับรายละเอียดเพิ่มเติม โปรดดูส่วนทั้งหมดเกี่ยวกับการสนับสนุนการเก็บถาวรด้านบน
checksum
- เช็คซัมเพื่อตรวจสอบไฟล์ที่ดาวน์โหลดหรือไฟล์เก็บถาวร ดูส่วนทั้งหมดในการตรวจสอบด้านบนเพื่อดูรูปแบบและรายละเอียดเพิ่มเติม
filename
- เมื่ออยู่ในโหมดดาวน์โหลดไฟล์ อนุญาตให้ระบุชื่อของไฟล์ที่ดาวน์โหลดบนดิสก์ ไม่มีผลกระทบในโหมดไดเร็กทอรี
file
)ไม่มี
git
) ref
- Git อ้างอิงเพื่อชำระเงิน นี่คือการอ้างอิง ดังนั้นจึงสามารถชี้ไปที่ Commit SHA ชื่อสาขา ฯลฯ หากเป็นการอ้างอิงที่มีชื่อ เช่น ชื่อสาขา Go-getter จะอัปเดตให้เป็นข้อมูลล่าสุดในแต่ละครั้ง
sshkey
- รหัสส่วนตัว SSH ที่จะใช้ระหว่างการโคลน คีย์ที่ระบุต้องเป็นสตริงที่เข้ารหัส base64 ตัวอย่างเช่น หากต้องการสร้าง sshkey
ที่เหมาะสมจากไฟล์คีย์ส่วนตัวบนดิสก์ คุณจะต้องเรียกใช้ base64 -w0
หมายเหตุ : ต้องใช้ Git 2.3+ เพื่อใช้ฟีเจอร์นี้
depth
- ความลึกของโคลน Git หมายเลขที่ระบุระบุการแก้ไข n
ครั้งล่าสุดที่จะโคลนจากที่เก็บ
git
getter ยอมรับทั้งที่อยู่ SSH สไตล์ URL เช่น git::ssh://[email protected]/foo/bar
และที่อยู่ "scp-style" เช่น git::[email protected]/foo/bar
ในกรณีหลังนี้ อนุญาตให้ละเว้นคำนำหน้า git::
force หากคำนำหน้าชื่อผู้ใช้คือ git@
ทุกประการ
ที่อยู่ "สไตล์ scp" ไม่สามารถ ใช้ร่วมกับคำนำหน้าแบบแผน ssh://
ได้ เนื่องจากในกรณีนั้น เครื่องหมายทวิภาคจะถูกนำมาใช้เพื่อทำเครื่องหมายหมายเลขพอร์ตเสริมที่จะเชื่อมต่อ แทนที่จะกำหนดเส้นทางจากโฮสต์
hg
) rev
- การแก้ไข Mercurial เพื่อชำระเงิน
http
) หากต้องการใช้การตรวจสอบสิทธิ์ขั้นพื้นฐานของ HTTP กับ go-getter เพียงเพิ่ม username:password@
ชื่อโฮสต์ใน URL เช่น https://Aladdin:[email protected]/index.html
อักขระพิเศษทั้งหมด รวมถึงชื่อผู้ใช้และรหัสผ่าน จะต้องมีการเข้ารหัส URL
คุณสามารถเพิ่มส่วนหัวคำขอเพิ่มเติมได้โดยระบุใน HttpGetter
ที่กำหนดเอง ( ไม่ใช่ เป็นพารามิเตอร์การสืบค้นเหมือนตัวเลือกอื่นๆ ส่วนใหญ่) ส่วนหัวเหล่านี้จะถูกส่งไปในทุกคำขอของ getter ที่มีปัญหา
s3
)S3 รับการกำหนดค่าการเข้าถึงที่หลากหลายใน URL โปรดทราบว่าระบบจะอ่านสิ่งเหล่านี้จากตัวแปรสภาพแวดล้อม AWS มาตรฐานด้วยหากตั้งค่าไว้ รองรับเซิร์ฟเวอร์ที่รองรับ S3 เช่น Minio หากมีพารามิเตอร์การสืบค้น พารามิเตอร์เหล่านี้จะมีความสำคัญ
aws_access_key_id
- รหัสการเข้าถึง AWS
aws_access_key_secret
- รหัสลับการเข้าถึง AWS
aws_access_token
- โทเค็นการเข้าถึง AWS หากมีการใช้งาน
aws_profile
- ใช้โปรไฟล์นี้จาก ~/.aws/ config ในเครื่อง มีลำดับความสำคัญมากกว่าอีกสามคน
หากคุณใช้ go-getter และต้องการใช้โปรไฟล์อินสแตนซ์ EC2 IAM เพื่อหลีกเลี่ยงการใช้ข้อมูลประจำตัว ให้ละเว้นสิ่งเหล่านี้และโปรไฟล์ หากมี ระบบจะใช้โดยอัตโนมัติ
หากคุณใช้ go-gitter เพื่อรองรับ Minio คุณต้องพิจารณาสิ่งต่อไปนี้:
aws_access_key_id
(จำเป็น) - รหัสการเข้าถึง Minio
aws_access_key_secret
(จำเป็น) - รหัสลับการเข้าถึง Minio
region
(ไม่บังคับ - ค่าเริ่มต้นคือ us-east-1) - ตัวระบุภูมิภาคที่จะใช้
version
(ไม่บังคับ - ค่าเริ่มต้นเป็นค่าเริ่มต้นของ Minio) - รูปแบบไฟล์การกำหนดค่า
S3 มีรูปแบบการกำหนดที่อยู่หลายรูปแบบที่ใช้อ้างอิงบัคเก็ตของคุณ รายการเหล่านี้แสดงอยู่ที่นี่: https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html
ตัวอย่างบางส่วนของรูปแบบการกำหนดที่อยู่เหล่านี้:
s3::https://s3.amazonaws.com/bucket/foo
s3::https://s3-eu-west-1.amazonaws.com/bucket/foo
bucket.s3.amazonaws.com/foo
bucket.s3-eu-west-1.amazonaws.com/foo/bar
"s3::http://127.0.0.1:9000/test-bucket/hello.txt?aws_access_key_id=KEYID&aws_access_key_secret=SECRETKEY®ion=us-east-2"
gcs
เอส (GCS)หากต้องการเข้าถึง GCS ควรระบุข้อมูลรับรองการตรวจสอบสิทธิ์ ข้อมูลเพิ่มเติมสามารถพบได้ที่นี่
gcs::https://www.googleapis.com/storage/v1/bucket
gcs::https://www.googleapis.com/storage/v1/bucket/foo.zip
www.googleapis.com/storage/v1/bucket/foo
ในการทดสอบ get_gcs.go
คุณต้องตั้งค่าข้อมูลรับรอง GCP ในสภาพแวดล้อมของคุณ ข้อมูลรับรองเหล่านี้สามารถมีสิทธิ์ระดับใดก็ได้สำหรับโปรเจ็กต์ใดๆ เพียงแต่ต้องมีอยู่ ซึ่งหมายความว่าการตั้งค่า GOOGLE_APPLICATION_CREDENTIALS="~/path/to/credentials.json"
หรือ GOOGLE_CREDENTIALS="{stringified-credentials-json}"
เนื่องจากการกำหนดค่านี้ get_gcs_test.go
จะล้มเหลวสำหรับผู้มีส่วนร่วมภายนอกใน CircleCI
ปิดการใช้งาน Symlinks
ในการกำหนดค่าไคลเอ็นต์ getter ของคุณ เราขอแนะนำให้ใช้ตัวเลือก DisableSymlinks
ซึ่งป้องกันการเขียนหรือคัดลอกจาก Symlink (ซึ่งอาจชี้ไปนอกไดเร็กทอรี)
ลูกค้า := getter.Client{ // ซึ่งจะป้องกันการคัดลอกหรือเขียนไฟล์ผ่าน symlink DisableSymlinks: true, -
ปิดการใช้งานหรือจำกัด X-Terraform-Get
Go-Getter รองรับการเปลี่ยนเส้นทางโดยพลการผ่านส่วนหัว X-Terraform-Get
ฟังก์ชันนี้มีไว้เพื่อรองรับกรณีการใช้งาน Terraform แต่อาจไม่จำเป็นในแอปพลิเคชันส่วนใหญ่
สำหรับโค้ดที่ใช้ HttpGetter
ให้เพิ่มตัวเลือกการกำหนดค่าต่อไปนี้:
var httpGetter = &getter.HttpGetter{ // ลูกค้าส่วนใหญ่ควรปิดการใช้งาน X-Terraform-Get // ดูหมายเหตุด้านล่าง XterraformGetDisabled: true, // ซอฟต์แวร์ของคุณอาจจะไม่พึ่งพา X-Terraform-Get แต่ // ถ้าเป็นเช่นนั้น คุณควรตั้งค่าฟิลด์ด้านบนเป็นเท็จ บวก // ตั้งค่า XterraformGet Limit เพื่อป้องกันการเปลี่ยนเส้นทางไม่รู้จบ // XterraformGetLimit: 10,}
บังคับใช้การหมดเวลา
HttpGetter
รองรับการหมดเวลาและตัวเลือกการกำหนดค่าที่จำกัดทรัพยากรอื่นๆ GitGetter
และ HgGetter
รองรับการหมดเวลาเท่านั้น
การกำหนดค่าสำหรับ HttpGetter
:
var httpGetter = &getter.HttpGetter{ // ปิดการใช้งานคำขอ HEAD ล่วงหน้าที่ดึงข้อมูล DoNotCheckHeadFirst: จริง, // เป็นทางเลือกแทนการตั้งค่าข้างต้น คุณสามารถ // ตั้งค่าการหมดเวลาที่เหมาะสมสำหรับคำขอ HEAD // HeadFirstTimeout: 10 * time.Second, // อ่านการหมดเวลาสำหรับการดำเนินการ HTTP ReadTimeout: 30 * time.Second, // ตั้งค่า จำนวนไบต์สูงสุด // ที่ getter MaxBytes สามารถอ่านได้: 500000000, // 500 MB}
สำหรับโค้ดที่ใช้ GitGetter
หรือ HgGetter
ให้ตั้งค่าตัวเลือก Timeout
:
var gitGetter = &getter.GitGetter{ // ตั้งค่าการหมดเวลาที่เหมาะสมสำหรับการดำเนินการ git หมดเวลา: 5 * time.Minute, -
var hgGetter = &getter.HgGetter{ // ตั้งค่าการหมดเวลาที่เหมาะสมสำหรับการดำเนินการ hg หมดเวลา: 5 * time.Minute, -