Answers:
因此,您可以通过多种方式直接针对容器进行操作:
lxc init ubuntu: CONTAINER
lxc config set CONTAINER user.user-data - < cloud-init-config.yml
lxc start CONTAINER
甚至更短:
lxc launch ubuntu: CONTAINER --config=user.user-data="$(cat cloud-init-config.yml)"
或通过个人资料:
lxc profile create dev
lxc profile set dev user.user-data - < cloud-init-config.yml
lxc launch ubuntu: CONTAINER -p default -p dev
我今天使用的一种衬板,此衬板将其设置在新容器的默认配置文件中:
echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc profile set default user.user-data -
这将它设置在现有容器中,但是请注意,它将不能在已经启动的容器上工作,因为SSH密钥仅在首次启动时完成:
echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc config set CONTAINER_NAME user.user-data -
我有一个比操作问题更具体的问题,但是花了我一段时间才能弄清楚我做错了什么。我以为我会在这里发布它,以帮助其他任何人也遇到类似的问题。
我想要在Ubuntu 16.04上托管的LXC / LXD Ubuntu 16.04容器的静态网络设置。我首先尝试了Stéphane 编写的内容,但是没有用。我最终得到的是带有本地IPv6链接的默认DHCP尝试容器,因为在我的配置中没有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源代码中找到Stéphane的文档后,我才意识到我需要将该值加载到中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"
此内容为“ cloud-config”数据。有关支持的配置格式的注释示例,请参见示例。
我认为此文档不够清楚。使用“ Content-Type:文本/ 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