Avevo una domanda leggermente più specifica dell'OP, ma mi ci è voluto un po 'per capire cosa stavo facendo di sbagliato. Ho pensato di pubblicarlo qui per aiutare chiunque altro a rimanere perplesso in modo simile.
Volevo impostazioni di rete statiche per un contenitore Ubuntu 16.04 LXC / LXD ospitato su Ubuntu 16.04. Ho iniziato provando quello che Stéphane ha scritto ma non ha funzionato. Tutto quello che ho scoperto è stato il contenitore di tentativi DHCP predefinito con un collegamento IPv6 locale, poiché nella mia configurazione non è presente alcun DHCP.
Il mio YAML iniziale sembrava (qualcosa) simile al seguente (tratto dai documenti cloud-init ).
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 lo stavo caricando user.user-data
come descritto sopra.
lxc config set CONTAINER user.user-data - < CONTAINER.cloud-init-config.yml
Fu solo quando trovai la documentazione di Stéphane nella fonte LXC / LXD che mi resi conto che dovevo caricare quel valore user.network-config
.
Quindi il mio ultimo YAML sembrava (qualcosa) simile a questo.
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
Quindi ho caricato questo in user.network-config
invece.
lxc config set CONTAINER user.network-config - < CONTAINER.network-config.yaml
Sembra che dovrò conservare due file diversi per container: uno per caricare le impostazioni di rete user.network-config
; e una per le altre configurazioni da caricare a user.user-data
meno che non riesca a trovare un modo per utilizzare un singolo file per tutto.
Un altro problema che ho riscontrato e che per me non era affatto ovvio era il tentativo di configurare automaticamente i componenti non di rete.
lxc config set CONTAINER user.user-data - < CONTAINER.user-data.yaml
Il seguente YAML applicato con il comando sopra (nonostante abbia un uso corretto lxc config show CONTAINER
) non ha creato nulla all'interno del mio contenitore.
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar
L'indizio sepolto nei formati di input dei dati utente, elemento 5: Cloud Config Data recita:
inizia con "#cloud-config"
o "Content-Type: text/cloud-config"
Questo contenuto è un dato "config cloud". Vedi gli esempi per un esempio commentato di formati di configurazione supportati.
Non credo che questa documentazione sia molto chiara. Non sono riuscito a far funzionare nulla utilizzando il modulo "Content-Type: text / cloud-config" ma ho trovato che se si inserisce #cloud-config
la prima riga, viene analizzato lo YAML. Posso solo supporre che qualcosa non sia del tutto corretto, né la mia comprensione, né la programmazione di qualcuno. Non ha senso per me che YAML hai esplicitamente caricato come valore della chiave user.user-data
dovrebbe essere usato come qualcosa di diverso dai dati di configurazione del cloud. Perché altrimenti qualcuno dovrebbe farlo se non è stato concepito per essere la configurazione nuvola, e quindi perché mai un commento (che non ha nemmeno utilizzare la sintassi baracca normale) è necessario ?
Quindi, a parte le sciocchezze, la sintassi per cui ha funzionato user.user-data
è:
#cloud-config
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar