У меня был немного более конкретный вопрос, чем у ОП, но мне потребовалось время, чтобы понять, что я делаю неправильно. Я думал, что выложу это здесь, чтобы помочь кому-то еще стать таким же тупым.
Я хотел статические сетевые настройки для контейнера LXC / LXD Ubuntu 16.04, размещенного в Ubuntu 16.04. Я начал с того, что попробовал то, что написал Стефан, но это не сработало. Все, что я закончил, это контейнер по умолчанию для попыток DHCP с локальной ссылкой IPv6, так как в моей конфигурации не обслуживается DHCP.
Мой первоначальный YAML выглядел (как-то) примерно так (взято из документа 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
И я загружал это user.user-data
как описано выше.
lxc config set CONTAINER user.user-data - < CONTAINER.cloud-init-config.yml
Только когда я нашел документацию Стефана в источнике LXC / LXD , я понял, что мне нужно загрузить это значение user.network-config
.
Так что мой последний YAML выглядел (как-то) так.
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
Затем я загрузил это user.network-config
вместо.
lxc config set CONTAINER user.network-config - < CONTAINER.network-config.yaml
Похоже, мне нужно будет хранить два разных файла для каждого контейнера: один для загрузки сетевых настроек user.network-config
; и один для другой конфигурации, чтобы загрузить в, user.user-data
если я не могу найти способ использовать единственный файл для всего.
Еще одна проблема, которую я обнаружил и которая была для меня совсем не очевидна, - это попытка автоматически настроить не сетевые компоненты.
lxc config set CONTAINER user.user-data - < CONTAINER.user-data.yaml
Следующий YAML, примененный с помощью приведенной выше команды (несмотря на то, что он выглядел корректно lxc config show CONTAINER
), ничего не создал внутри моего контейнера.
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar
Подсказка скрыта в Форматах ввода пользовательских данных, пункт 5: Данные конфигурации облака гласят:
начинается с "#cloud-config"
или "Content-Type: text/cloud-config"
Это содержимое "данные конфигурации облака". См. Примеры для закомментированного примера поддерживаемых форматов конфигурации.
Я не верю, что эта документация очень ясна. Я не смог заставить что-либо работать, используя форму «Content-Type: text / cloud-config», но я обнаружил, что если вы поместите #cloud-config
в первую строку, YAML анализируется. Я могу только предположить, что что-то не так, или мое понимание, или чье-то программирование. Для меня нет смысла, что YAML, который вы явно загрузили в качестве значения ключа, user.user-data
следует использовать как что-либо кроме данных конфигурации облака. Зачем кому-то еще делать это, если это не предназначено для облачной конфигурации, и поэтому зачем требовать комментарий (который даже не использует обычный синтаксис Шебанга) ?
Итак, не говоря о чепухе, синтаксис, который работал для user.user-data
:
#cloud-config
write_files:
- content: |
# My new /etc/foo.bar file
Foo
Bar
path: /etc/foo.bar