Miałem nieco bardziej szczegółowe pytanie niż OP, ale zajęło mi trochę czasu, aby zorientować się, co robię źle. Pomyślałem, że opublikuję go tutaj, aby pomóc każdemu, kto dostanie podobne zaklęcie.
Chciałem statycznych ustawień sieciowych dla kontenera LXC / LXD Ubuntu 16.04 hostowanego na Ubuntu 16.04. Zacząłem od wypróbowania tego, co napisał Stéphane, ale to nie działało. Skończyło się na domyślnym kontenerze próbującym DHCP z lokalnym łączem IPv6, ponieważ w mojej konfiguracji nie jest obsługiwany DHCP.
Mój początkowy YAML wyglądał (coś) w następujący sposób (wzięty z dokumentów inicjujących chmurę ).
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
I ładowałem to user.user-data
tak, jak opisano powyżej.
lxc config set CONTAINER user.user-data - < CONTAINER.cloud-init-config.yml
Dopiero gdy znalazłem dokumentację Stéphane'a w źródle LXC / LXD , zdałem sobie sprawę, że muszę załadować tę wartość user.network-config
.
Więc moja ostatnia YAML wyglądała (coś) tak.
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
Potem załadowałem to do user.network-config
.
lxc config set CONTAINER user.network-config - < CONTAINER.network-config.yaml
Wygląda na to, że będę musiał zachować dwa różne pliki na kontener: jeden do załadowania ustawień sieciowych user.network-config
; i jedną inną konfigurację do załadowania, user.user-data
chyba że znajdę sposób na użycie jednego pliku do wszystkiego.
Innym znalezionym przeze mnie problemem, który nie był dla mnie oczywisty, była próba automatycznej konfiguracji składników niesieciowych.
lxc config set CONTAINER user.user-data - < CONTAINER.user-data.yaml
Następujące YAML zastosowane z powyższym poleceniem (pomimo poprawnego użycia lxc config show CONTAINER
) nie utworzyło niczego w moim kontenerze.
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar
Wskazówka ukryta w formatach wprowadzania danych użytkownika, pozycja 5: Dane konfiguracji w chmurze brzmi:
zaczyna się od "#cloud-config"
lub "Content-Type: text/cloud-config"
Ta treść to dane „w chmurze”. Zobacz przykłady skomentowanych przykładów obsługiwanych formatów konfiguracji.
Nie sądzę, aby ta dokumentacja była bardzo przejrzysta. Nie mogłem dostać niczego do pracy za pomocą formularza „Content-Type: text / cloud-config”, ale znalazłem, że jeśli umieścisz #cloud-config
w pierwszym wierszu, YAML zostanie przeanalizowany. Mogę tylko założyć, że coś jest nie tak, albo moje zrozumienie, albo czyjeś programowanie. Nie ma dla mnie sensu, że YAML został jawnie załadowany, ponieważ wartość klucza user.user-data
powinna być używana jako cokolwiek innego niż dane konfiguracyjne w chmurze. Dlaczego ktoś miałby to zrobić, gdyby nie była to konfiguracja w chmurze, a zatem dlaczego wymagany byłby komentarz (który nawet nie używa normalnej składni shebang) ?
Poza tym, nonsensem, składnia, która działała, user.user-data
to:
#cloud-config
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar