J'avais une question un peu plus précise que l'OP, mais il m'a fallu un certain temps pour comprendre ce que je faisais mal. Je pensais que je le posterais ici pour aider quelqu'un d'autre à être pareillement perplexe.
Je voulais des paramètres de mise en réseau statique pour un conteneur LXC / LXD Ubuntu 16.04 hébergé sur Ubuntu 16.04. J'ai commencé par essayer ce que Stéphane a écrit mais ça n'a pas marché. Tout ce que je me suis retrouvé était le conteneur par défaut de tentative de DHCP avec une liaison IPv6 locale, car aucun DHCP n'est servi dans ma configuration.
Mon YAML initial ressemblait (quelque chose) au suivant (tiré des documents 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
Et je chargeais cela user.user-data
comme décrit ci-dessus.
lxc config set CONTAINER user.user-data - < CONTAINER.cloud-init-config.yml
Ce n'est que lorsque j'ai trouvé la documentation de Stéphane dans la source LXC / LXD que j'ai réalisé que je devais charger cette valeur user.network-config
.
Donc mon YAML final ressemblait à quelque chose comme ça.
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
Ensuite, je l'ai chargé à la user.network-config
place.
lxc config set CONTAINER user.network-config - < CONTAINER.network-config.yaml
Il semble que j'aurai besoin de conserver deux fichiers différents par conteneur: un pour les paramètres réseau à charger user.network-config
; et un pour d'autres config à charger, user.user-data
sauf si je peux trouver un moyen d'utiliser un seul fichier pour tout.
Un autre problème que j'ai trouvé et qui n'était pas du tout évident pour moi était d'essayer de configurer automatiquement les composants non réseau.
lxc config set CONTAINER user.user-data - < CONTAINER.user-data.yaml
Le YAML suivant appliqué avec la commande ci-dessus (malgré son apparence correcte lxc config show CONTAINER
) n'a rien créé à l'intérieur de mon conteneur.
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar
L'indice enfoui dans les formats de saisie de données utilisateur, élément 5: Cloud Config Data se lit comme suit:
commence par "#cloud-config"
ou "Content-Type: text/cloud-config"
Ce contenu est des données "cloud-config". Voir les exemples pour un exemple commenté de formats de configuration pris en charge.
Je ne pense pas que cette documentation soit très claire. Je n'ai rien pu faire fonctionner en utilisant le formulaire "Content-Type: text / cloud-config" mais j'ai trouvé que si vous mettez #cloud-config
sur la première ligne, le YAML est analysé. Je peux seulement supposer que quelque chose ne va pas, que ce soit ma compréhension ou la programmation de quelqu'un. Cela n'a aucun sens pour moi que YAML que vous avez explicitement chargé car la valeur de la clé user.user-data
doit être utilisée comme autre chose que les données de configuration du cloud. Sinon, pourquoi quelqu'un ferait-il cela si ce n'était pas censé être une configuration cloud, et pourquoi un commentaire (qui n'utilise même pas la syntaxe shebang normale) serait-il nécessaire ?
Donc, non-sens, la syntaxe qui a fonctionné user.user-data
est:
#cloud-config
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar