Puncte:1

rulați un script prin cloud-init

drapel gb

Știu cloud-init permite rularea comenzilor ca parte a cloud-init yml

runcmd:
 - [pwd]

dar caut o modalitate de a executa un script shell complet.

Unii oameni doar conductează ieșirea unui răsuci într-o coajă - dar asta pare o abordare foarte neplăcută. Poate că scriptul ar putea fi integrat în yml prin intermediul unor șabloane, dar nici asta nu sună prea grozav.

Mult mai bine ar fi să expediați scriptul alături de yml către gazdă și să faceți referire la acesta. Dar nu am găsit nicio documentație despre cum să fac asta.

Este posibil?

eu folosesc terraforma pentru a configura serverul, dar mă întreb dacă acest lucru se poate face și cu pure cloud-init.

Puncte:1
drapel vn
rvs

Încercați să o combinați cu scrie_fișiere.

Puteți scrie script undeva (de exemplu, ca /usr/local/bin/myscript.sh) și apoi faceți runcmd: /usr/local/bin/myscript.sh

Asigurați-vă că setați permisiunea pentru executabil.

drapel gb
Pare promițător! Dar documentele nu specifică clar ciclul de viață. Va fi rulat cu siguranță `write_files` înainte de `runcmd`?
rvs avatar
drapel vn
rvs
Nici @tcurdt nu sunt sigur. incearca sa vezi daca merge?
Xerkus avatar
drapel sg
@tcurdt Aș spune că depinde de ceea ce este în /etc/cloud/cloud.cfg Din ceea ce am văzut, modulul write-files se întâmplă în timpul etapei de inițializare, în timp ce runcmd se întâmplă în etapa de configurare.
Puncte:0
drapel sa

daca tu numai doriți să rulați un script, puteți transmite scriptul direct ca userdata, în loc să utilizați un cloud-config. Atâta timp cât scenariul începe cu #!, cloud-init va încerca să-l ruleze direct, mai degrabă decât să-l interpreteze ca un cloud-config.

Dacă doriți să rulați atât cloud-config, cât și un script separat, în timp ce celălalt a postat scrie_fișiere soluția va funcționa, puteți trece și o arhivă mime cu mai multe părți. Cloud-init conține un script de ajutor pentru a face acest lucru puțin mai ușor. Să presupunem că aveți date utilizator într-un fișier numit datele-meu-utilizator:

#cloud-config
runcmd:
  - echo 'test-from-cloud-config' > /var/tmp/test_from_cloud_config

Și un script pe care ai vrea să-l rulezi, numită test.sh:

#!/bin/bash

echo 'test_from_script' > /var/tmp/test_from_script

Ai putea suna:

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

Puteți lua fișierul cu mai multe părți rezultat și îl puteți transmite către cloud-init ca date utilizator (de exemplu, folosind LXD):

lxc lansează ubuntu:focal multi -c user.user-data="$(cat /tmp/userdata)"

Puteți vedea că atât cloud-config, cât și scriptul au rulat:

root@multi:~# cat /var/tmp/test_from_cloud_config 
test-din-cloud-config
root@multi:~# cat /var/tmp/test_from_script 
test_din_script

Vedea documentele cloud-init pentru trimitere.

drapel ph
Deoarece această întrebare este etichetată „terraform”, vreau să remarc și că [sursa de date `cloudinit_config` aparținând furnizorului Terraform `hashicorp/cloudinit`](https://registry.terraform.io/providers/hashicorp/cloudinit/latest /docs/data-sources/cloudinit_config) este efectiv un echivalent Terraform integrat al lui „cloud-init devel make-mime”, care poate evita pasul de a crea un fișier temporar separat dacă se întâmplă să configurați lucrurile cu Terraform.
drapel gb
Detalii super interesante. Nu mi-am dat seama că poți transmite un scenariu de la sine. Bine de știut că shebang-ul este suficient de bun.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.