Eu tinha uma pergunta um pouco mais específica do que o OP, mas levei um tempo para entender o que estava fazendo de errado. Eu pensei em publicá-lo aqui para ajudar alguém a ficar igualmente perplexo.
Eu queria configurações de rede estáticas para um contêiner LXC / LXD Ubuntu 16.04 hospedado no Ubuntu 16.04. Comecei tentando o que Stéphane escreveu, mas não estava funcionando. Acabei com o contêiner de tentativa de DHCP padrão com um link IPv6 local, pois não há DHCP sendo servido na minha configuração.
Meu YAML inicial parecia (algo) o seguinte (extraído dos documentos de inicialização em nuvem ).
network:
version: 1
config:
- type: physical
name: eth0
subnets:
- type: static
address: 192.168.23.14/27
gateway: 192.168.23.1
dns_nameservers:
- 192.168.23.2
- 8.8.8.8
dns_search:
- exemplary.maas
E eu estava carregando isso user.user-data
como descrito acima.
lxc config set CONTAINER user.user-data - < CONTAINER.cloud-init-config.yml
Não foi até encontrar a documentação de Stéphane na fonte LXC / LXD que percebi que precisava carregar esse valor user.network-config
.
Então meu YAML final ficou assim (algo).
version: 1
config:
- type: physical
name: eth0
subnets:
- type: static
address: 192.168.23.14/27
gateway: 192.168.23.1
dns_nameservers:
- 192.168.23.2
- 8.8.8.8
dns_search:
- exemplary.maas
Então eu carreguei isso no user.network-config
lugar.
lxc config set CONTAINER user.network-config - < CONTAINER.network-config.yaml
Parece que vou precisar manter dois arquivos diferentes por contêiner: um para carregar as configurações de rede user.network-config
; e um para outra configuração carregar, a user.user-data
menos que eu possa encontrar uma maneira de usar um único arquivo para tudo.
Outro problema que achei que não era óbvio para mim foi tentar configurar componentes não pertencentes à rede automaticamente.
lxc config set CONTAINER user.user-data - < CONTAINER.user-data.yaml
O YAML a seguir aplicado com o comando acima (apesar de parecer correto lxc config show CONTAINER
) não criou nada dentro do meu contêiner.
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar
A pista escondida em Formatos de entrada de dados do usuário, item 5: Dados de configuração da nuvem, lê:
começa com "#cloud-config"
ou "Content-Type: text/cloud-config"
Este conteúdo são dados de "configuração em nuvem". Veja os exemplos para um exemplo comentado dos formatos de configuração suportados.
Não acredito que esta documentação seja muito clara. Não consegui que nada funcionasse usando o formulário "Tipo de conteúdo: texto / configuração da nuvem", mas descobri que, se você colocar #cloud-config
na primeira linha, o YAML é analisado. Só posso supor que algo não está certo, tanto no meu entendimento quanto na programação de alguém. Não faz sentido para mim que o YAML que você carregou explicitamente como o valor da chave user.user-data
deva ser usado como algo diferente de dados de configuração da nuvem. Por que outra razão que alguém faria isso se não era para ser configuração de nuvem, e, portanto, por que um comentário (que nem sequer usar a sintaxe shebang normal) ser necessário ?
Portanto, sem sentido, a sintaxe para a qual trabalhou user.user-data
é:
#cloud-config
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar