2014-11-21 5 views
11

Vedo che a differenza del file standard cloud-config, non esiste l'opzione runcmd in un file CoreOS cloud-config. Attualmente, io consentire di swap su una macchina CoreOS aggiungendo la seguente al mio cloud-config:esegue i comandi in una configurazione cloud CoreOS (ad esempio per aggiungere swap)

units: 
    - name: swap.service 
     command: start 
     content: | 
     [Unit] 
     Description=Turn on swap 

     [Service] 
     Type=oneshot 
     Environment="SWAPFILE=/1GiB.swap" 
     RemainAfterExit=true 
     ExecStartPre=/usr/sbin/losetup -f ${SWAPFILE} 
     ExecStart=/usr/bin/sh -c "/sbin/swapon $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)" 
     ExecStop=/usr/bin/sh -c "/sbin/swapoff $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)" 
     ExecStopPost=/usr/bin/sh -c "/usr/sbin/losetup -d $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)" 

     [Install] 
     WantedBy=local.target 

Poi, dopo l'inizializzazione la mia immagine CoreOS devo ssh nella macchina ed eseguire:

sudo fallocate -l 1024m /1GiB.swap && sudo chmod 600 /1GiB.swap \ 
&& sudo chattr +C /1GiB.swap && sudo mkswap /1GiB.swap 

sudo reboot 

prima swap essere abilitato (ad es. come evidenziato da top).

Sembra come dovrei essere in grado di realizzare questi ultimi comandi nel file cloud-config in sé, ma non sono chiare su come posso eseguire tali comandi senza un campo runmcd in cloud-config. Forse questo può essere fatto modificando la mia unità swap.service o magari aggiungendo un altro unit, ma non ho capito bene come.

Quindi, questo mi lascia con due domande: (1) Questo può essere fatto o sarà sempre necessario eseguire gli ultimi comandi manualmente? (2) Se il primo, allora come?

risposta

3

@cboettig - grazie al vostro esempio file di unità e la nota @philibaker, ho ottenuto questo corso - in fondo l'unica cosa che ho dovuto fare è stato quello di cambiare la ExecStartPre a:

ExecStartPre=/bin/bash -c "\ 
    fallocate -l 2g $SWAPFILE && \ 
    chmod 600 $SWAPFILE && \ 
    chattr +C $SWAPFILE && \ 
    mkswap $SWAPFILE && \ 
    losetup -f $SWAPFILE" 

e che include l'intera impostazione nella fase preexec.

7

Come indicato in this answer to an issue on Github, si finisce per scrivere un'unità per richiamare il comando di propria scelta. This answer, dà un buon esempio di utilizzo di un comando arbitrario:

#cloud-config 
.... 
coreos: 
    units: 
    - name: runcmd.service 
     command: start 
     content: | 
     [Unit] 
     Description=Creates a tmp foo file 

     [Service] 
     Type=oneshot 
     ExecStart=/bin/sh -c "touch /tmp/foo;" 
Problemi correlati