Score:1

เรียกใช้สคริปต์ผ่าน cloud-init

ธง gb

ฉันรู้ cloud-init อนุญาตให้เรียกใช้คำสั่งเป็นส่วนหนึ่งของ cloud-init มล

เรียกใช้ cmd:
 - [ รหัสผ่าน ]

แต่ฉันกำลังมองหาวิธีรันเชลล์สคริปต์แบบเต็ม

บางคนเพียงแค่ท่อผลลัพธ์ของ ขด เป็นเปลือก - แต่นั่นให้ความรู้สึกเหมือนเป็นวิธีการที่ว่องไวมาก บางทีสคริปต์อาจรวมเข้ากับ yml ผ่านเทมเพลตบางส่วน แต่นั่นก็ไม่ได้ฟังดูดีเกินไป

จะดีกว่ามากที่จะส่งสคริปต์พร้อมกับ yml ไปยังโฮสต์และอ้างถึง แต่ฉันไม่พบเอกสารใด ๆ เกี่ยวกับวิธีการทำเช่นนี้

เป็นไปได้ไหม

ฉันใช้ ดิน เพื่อตั้งค่าเซิร์ฟเวอร์ แต่ฉันสงสัยว่าสิ่งนี้สามารถทำได้ด้วยบริสุทธิ์หรือไม่ cloud-init.

Score:1
ธง vn
rvs

ลองผสมผสานกับ Write_files.

คุณสามารถเขียนสคริปต์ที่ไหนสักแห่ง (เช่น /usr/local/bin/myscript.sh) แล้วทำ runcmd: /usr/local/bin/myscript.sh

ตรวจสอบให้แน่ใจว่าได้ตั้งค่าการอนุญาตปฏิบัติการ

gb flag
ที่มีแนวโน้ม! แต่เอกสารไม่ได้ระบุวงจรชีวิตอย่างชัดเจน `write_files` จะทำงานก่อน `runcmd` หรือไม่
rvs avatar
vn flag
rvs
@tcurdt ไม่แน่ใจเหมือนกัน ลองดูว่ามันใช้ได้หรือไม่
Xerkus avatar
sg flag
@tcurdt ฉันจะบอกว่ามันขึ้นอยู่กับสิ่งที่อยู่ใน /etc/cloud/cloud.cfg จากสิ่งที่ฉันเห็นโมดูลการเขียนไฟล์กำลังเกิดขึ้นในช่วงเริ่มต้นในขณะที่ runcmd เกิดขึ้นระหว่างขั้นตอนการกำหนดค่า
Score:0
ธง sa

ถ้าคุณ เท่านั้น ต้องการเรียกใช้สคริปต์ คุณสามารถส่งสคริปต์โดยตรงเป็นข้อมูลผู้ใช้ แทนที่จะใช้ cloud-config ตราบใดที่สคริปต์เริ่มต้นด้วย #!, cloud-init จะพยายามเรียกใช้โดยตรง แทนที่จะตีความว่าเป็น cloud-config

หากคุณต้องการเรียกใช้ทั้ง cloud-config และสคริปต์แยกต่างหาก ในขณะที่อีกสคริปต์หนึ่งถูกโพสต์ Write_files โซลูชันจะใช้งานได้ คุณยังสามารถส่งไฟล์เก็บถาวรหลายส่วนแบบ mime Cloud-init มีสคริปต์ตัวช่วยเพื่อทำให้ง่ายขึ้นเล็กน้อย สมมติว่าคุณมีข้อมูลผู้ใช้ในไฟล์ชื่อ ข้อมูลผู้ใช้ของฉัน:

#cloud-config
เรียกใช้ cmd:
  - echo 'ทดสอบจาก cloud-config' > /var/tmp/test_from_cloud_config

และสคริปต์ที่คุณต้องการเรียกใช้ callecd ทดสอบ.sh:

#!/bin/bash

echo 'test_from_script' > /var/tmp/test_from_script

คุณสามารถโทร:

cloud-init devel make-mime -a test.sh:x-shellscript -a my-user-data:cloud-config > /tmp/userdata

คุณสามารถใช้ไฟล์หลายส่วนที่เป็นผลลัพธ์และส่งต่อไปยัง cloud-init เป็น userdata (เช่น ใช้ LXD):

lxc เปิดตัว ubuntu:focal multi -c user.user-data="$(cat /tmp/userdata)"

คุณจะเห็นว่าทั้ง Cloud-config และสคริปต์ทำงานแล้ว:

root@multi:~# cat /var/tmp/test_from_cloud_config 
ทดสอบจาก cloud-config
root@multi:~# cat /var/tmp/test_from_script 
test_from_script

ดู เอกสาร cloud-init สำหรับการอ้างอิง

ph flag
เนื่องจากคำถามนี้ติดแท็ก "terraform" ฉันจึงต้องการทราบว่า [แหล่งข้อมูล `cloudinit_config` ที่เป็นของผู้ให้บริการ Terraform `hashicorp/cloudinit`](https://registry.terraform.io/providers/hashicorp/cloudinit/latest /docs/data-sources/cloudinit_config) มีประสิทธิภาพเทียบเท่า Terraform ที่รวมเข้ากับ `cloud-init devel make-mime` ซึ่งสามารถหลีกเลี่ยงขั้นตอนในการสร้างไฟล์ชั่วคราวแยกต่างหากหากคุณบังเอิญตั้งค่าสิ่งต่าง ๆ ด้วย Terraform
gb flag
รายละเอียดที่น่าสนใจมาก ฉันไม่รู้ว่าคุณสามารถส่งสคริปต์ได้ด้วยตัวเอง ดีใจที่รู้ว่า shebang ดีพอ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา