Ubuntu 12.04 cloud-init não suporta “write_files”, o que fazer?

2

Estou usando o cloud-init para configurar o Ubuntu VMs no EC2. Recentemente tive necessidade de apoiar a implantação usando imagens Ubuntu 12.04 (antigas LTS), mas o antigo cloud-init 0.6.3 que está no Ubuntu 12.04 não suporta o módulo write_files que eu preciso.

Atualmente, estou hackeando-o usando runcmd e bash, mas essa não é a maneira correta de lidar com a adição de arquivos em um sistema.

Alguma idéia para uma melhor solução alternativa?

    
por Guss 17.06.2014 / 10:28

1 resposta

1

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>     

por 18.06.2014 / 10:05