Cloud-init nepřijímá prosté bash skripty, jen tak. Je to bestie, která žere YAML soubor, který definuje vaši instanci (balíčky, ssh klíče a další věci).
Pomocí MIME můžete také posílat libovolné skripty shellu, ale musíte je zakódovat pomocí MIME.
$ cat my-boothook.txt
#!/bin/sh
echo "Hello World!"
echo "This will run as soon as possible in the boot sequence"
$ cat my-user-script.txt
#!/usr/bin/perl
print "This is a user script (rc.local)\n"
$ cat my-include.txt
# these urls will be read pulled in if they were part of user-data
# comments are allowed. The format is one url per line
http://www.ubuntu.com/robots.txt
http://www.w3schools.com/html/lastpage.htm
$ cat my-upstart-job.txt
description "a test upstart job"
start on stopped rc RUNLEVEL=[2345]
console output
task
script
echo "====BEGIN======="
echo "HELLO From an Upstart Job"
echo "=====END========"
end script
$ cat my-cloudconfig.txt
#cloud-config
ssh_import_id: [smoser]
apt_sources:
- source: "ppa:smoser/ppa"
$ ls
my-boothook.txt my-include.txt my-user-script.txt
my-cloudconfig.txt my-upstart-job.txt
$ write-mime-multipart --output=combined-userdata.txt \
my-boothook.txt:text/cloud-boothook \
my-include.txt:text/x-include-url \
my-upstart-job.txt:text/upstart-job \
my-user-script.txt:text/x-shellscript \
my-cloudconfig.txt
$ ls -l combined-userdata.txt
-rw-r--r-- 1 smoser smoser 1782 2010-07-01 16:08 combined-userdata.txt
Combined-userdata.txt je soubor, který tam chcete vložit.
Více informací zde:
https://help.ubuntu.com/community/CloudInit
Všimněte si také, že to velmi závisí na obrázku, který používáte. Ale říkáte, že je to skutečně cloud-init image, takže to platí. Existují další iniciátory cloudu, které se nejmenují cloud-init – pak to může být jiné.
Toto je již několik let staré, ale pro ostatní jsem měl stejný problém a ukázalo se, že cloud-init běžel dvakrát, zevnitř /etc/rc3.d
. Odstranění těchto souborů ve složce umožnilo správný chod uživatelských dat:
lrwxrwxrwx 1 root root 22 Jun 5 02:49 S-1cloud-config -> ../init.d/cloud-config
lrwxrwxrwx 1 root root 20 Jun 5 02:49 S-1cloud-init -> ../init.d/cloud-init
lrwxrwxrwx 1 root root 26 Jun 5 02:49 S-1cloud-init-local -> ../init.d/cloud-init-local
Ve skutečnosti cloud-init umožňuje jako vstup jediný skript shell (i když možná budete chtít použít archiv MIME pro složitější nastavení).
Problém se skriptem OP je, že první řádek je nesprávný. Měli byste použít něco takového:
#!/bin/sh
Důvodem je to, že zatímco cloud-init používá #!
k rozpoznání uživatelského skriptu potřebuje operační systém úplný řádek Shebang, aby mohl skript spustit.
Takže to, co se děje v případě OP, je, že cloud-init se chová správně (tj. stáhne a pokusí se spustit skript), ale operační systém jej nemůže ve skutečnosti spustit.
Viz:Shebang (Unix) na Wikipedii