Eu ainda não tenho uma solução elegante, mas meu hack usando runcmd
e Ruby (que pode ou não estar instalado na sua imagem de base, então você pode precisar listá-la em packages
) se parece com isso :
runcmd:
- - ruby
- -ryaml
- -rfileutils
- -rzlib
- -rstringio
- -e
- |
ud=%x{curl -s http://169.254.169.254/2009-04-04/user-data}
ud = Zlib::GzipReader.new(StringIO.new(ud)).read unless ud[0] = "#"
YAML.load(ud)["write_files"].each { |f|
FileUtils.mkdir_p(File.dirname(f["path"]))
File.open(f["path"], "w") { |io| io.write(f["content"]) }
File.chmod(f["permissions"].to_i(8), f["path"])
}
Este hack também funciona a partir de instâncias do Amazon Linux relativamente recentes que têm um cloud-init recente, mas, por algum motivo, o módulo write_files
foi desativado.
O código assume que os dados do usuário são o texto simples #cloud-config
ou uma compactação gzip. Se estiver usando algo mais complicado, como várias partes ou inclusões, você pode querer ler os dados analisados de /var/lib/cloud/instance/user-data.txt.i
, mas isso requer análise de MIME - que deixarei como um exercício para o leitor: -). / p>