Puncte:0

Cum se transmite o configurație cloud către LXD?

drapel it

Am fost pe nenumărate site-uri, inclusiv pe acesta, încercând să-mi dau seama cum să fac ca LXD să ruleze o configurație cloud când îmi lansez containerul LXD. Unele locuri recomandă configurarea unui profil (nu a funcționat). Alții recomandă redirecționarea unui fișier YAML în comanda lxc (nu a funcționat), iar alții recomandă utilizarea --config opțiunea și trecerea fișierului în acest fel (nu a funcționat). Unele locuri spun că trebuie să adaug #cloud-config la configurația mea, alții nu se deranjează. Unii chiar recomandă utilizarea unui fișier XML. Evident, îmi lipsește o informație critică pe care toți ceilalți o fac implicit, dar nu îmi pot da seama ce este.

„Exemplul simplu” actualizat care încearcă să instaleze arborele și încearcă să atingă /run/cloud-config-did-run:

lxc șterge -f x

cat << EOF >config.yml
#cloud-config
ieșire: {all: '| tee -a /var/log/my-cloud-init-output.log'}
package_update: adevărat
package_upgrade: adevărat
package_reboot_if_required: adevărat
pachete:
  - copac
runcmd:
  - atingeți /run/cloud-config-did-run
EOF

lxc lansează ubuntu: x --config=user.user-data="$(cat config.yml)"
somn 5
lxc exec x -- bash -c "ls /run"
lxc exec x -- bash -c "arborele /etc"

Ieșirea este direcționată către /var/log/my-cloud-init-output.log, deci este în curs de procesare, dar nimic altceva decât ieșire directiva rulează (jurnalele nici măcar nu menționează alte lucruri care rulează sau erori - doar chestiile standard SSH keygen).

Poate indentarea este greșită? Sau configurația este în subarborele greșit? Sau lipsește o valoare magică? O versiune de LXD unde aceasta este stricata? (Am versiunea 4.20). Am fost la asta timp de 10 ore până acum și indiferent de ceea ce fac, configurația mea cloud este complet ignorată (fără erori, fără jurnal, nicio înregistrare despre ceva care rulează, nicio înregistrare că l-am instruit vreodată să facă ceva - în afară de chestia standard ssh keygen care aparent este coaptă). Poate cineva să transforme cele de mai sus într-un exemplu de lucru care să ruleze garantat dacă îl lipesc într-un shell?

djdomi avatar
drapel za
Nu sunt sigur, dar ce încerci să faci sau să repari?
drapel it
Încerc să-l fac să ruleze automat o comandă în interiorul unui container LXD când îl lansez. De obicei, vreau să instaleze automat unele pachete, dar deocamdată vreau doar ceva, orice să funcționeze.
drapel jp
Ați verificat `/var/log/cloud-init.log`?
drapel it
Da. De aici provine intrarea de jurnal de mai sus. Nu există intrări de eroare sau orice ar sugera ceva care merge prost.
drapel jp
Există o notă în documentele modulului `cloud-init` `runcmd`: „când scrieți fișiere, nu utilizați /tmp dir, deoarece rulează cu systemd-tmpfiles-clean LP: #1707222. Folosiți /run/somedir în schimb.”
drapel it
Instalarea pachetelor și afișarea textului de stare, de asemenea, nu funcționează. Am folosit asta doar ca exemplu, pentru că literalmente nimic nu funcționează.
drapel jp
Puteți încerca să adăugați `output: {all: '| tee -a /var/log/cloud-init-output.log'}` la `config.yml`. Ar trebui să ajute puțin la depanare.
drapel it
Actualizat pentru a utiliza /run și, de asemenea, pentru a încerca să instaleze ceva. În mod ciudat, directiva `output` este onorată, dar nimic altceva nu este și nimic ieșit din comun nu apare în jurnale.
drapel jp
Probabil doriți să verificați dacă `cloud-init` recunoaște că este rulat la etapa `first-boot`. Dacă îmi amintesc bine, omite majoritatea modulelor după prima pornire.
drapel it
Cum aș face asta? Vin la asta cu totul nou, așa că am urmărit bloguri și tutoriale, dar niciunul dintre ele nu a funcționat și niciunul dintre ele nu spune cum să depanezi, deoarece se presupune că acesta este un lucru atât de banal... Chiar nu Nu înțeleg cum ar putea eșua atât de spectaculos chiar și pe două sisteme separate (unul rulează ubuntu, celălalt rulează nixos)
drapel it
Acesta este motivul pentru care sper că cineva ar rula ceva banal care funcționează pe sistemul său și apoi îl va posta aici, astfel încât să am ceva verificat care rulează în altă parte.
Puncte:0
drapel in

Informațiile disponibile (non-) despre cloud-config sunt într-adevăr dureroase. Și documentele sunt încă proaste. Dar mai întâi lucrurile:
Am încercat exact codul tău și am reușit (actualizări de pachet + /run/cloud-config-did-run a lucrat). Testat cu Ubuntu 20.04 precum și 22.04.

DAR, lucrez la LXD 5.1. Deci aceasta ar putea fi diferența cheie importantă.


Câteva observații care ar putea fi utile:

  • Configurez o ieșire simplă pentru a face diferența între etapele init, config, final și în acestea între jurnalul standard și erori. Asta face depanarea mai ușoară.

    ieșire:
      init: ["> /tmp/cloud-init.log", "> /tmp/cloud-init.err"]
      config: [ "> /tmp/cloud-init-config.log", "> /tmp/cloud-init-config.err" ]
      final: [ "> /tmp/cloud-init-final.log", "> /tmp/cloud-init-final.err" ]
    
  • De îndată ce l-am concediat lansare lxc comanda
    Mă schimb în container cu lxc coajă x.
    Cu stare cloud-init --wait Mă uit dacă totul funcționează ("terminat") sau nu reușește.
    Dacă eșuează /tmp/*.err este prietenul tau

  • Până acum nu am avut nicio problemă să scriu /tmp. Cloud-init a schimbat ordinea de execuție undeva în trecut. Asta ar fi putut rezolva.

  • cunoștințe inutile: pachet_actualizare este inclus în upgrade_pachet

  • #cloud-config Este nevoie. Am incercat fara si nu a mers. YAML a fost ignorat cu totul

  • Despre format cloud-config: este YAML (extensia fișierului nu contează).Nu cred că altceva funcționează pentru LXD - în afară de o arhivă MIME cu mai multe părți

  • Arhivele MIME din mai multe părți funcționează cu LXD și este o modalitate bună de a reutiliza codul pentru diferite configurații. Este ușor de utilizat, dar documentele par rudimentare.
    Un mic exemplu cu dvs config.yml împreună cu un script shell:

    cat << EOF >test.sh
    #!/usr/bin/env bash
    atingeți /run/here-we-go-with-a-shellscript
    EOF
    
    cloud-init devel make-mime -a config.yml:cloud-config -a test.sh:x-shellscript-per-once > newconfig
    lxc lansează ubuntu:j f --config=user.user-data="$(cat /root/newconfig)"
    lxc coajă f
    stare cloud-init --wait
    ls /run
    

    Un bun punct de plecare pentru lucrul cu arhivele MIME cu mai multe părți este probabil acesta pagina de documente cloudinit

  • Profilurile LXD cu cloud-config au funcționat când l-am testat, dar nu îl folosim

Sper că te ajută cumva. Dacă sunteți interesat, aș putea adăuga un yaml cloud-init mai mare pe care l-am testat pentru configurarea unui container web tipic în spatele unui proxy invers.

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.