我们的 maas 局域网无法访问互联网,并且有一个内部 apt-mirror 站点 192.168.3.6。我更改了 maas 服务器的 snippets/maas_proxy 文件的镜像集,如下所示:
d-i mirror/country string manual
d-i mirror/http/hostname string 192.168.3.6
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string
我部署了两个 maas 节点,仪表盘显示两个节点的状态都是 ready,但是节点的 cloud-init 客户端把 apt 的 sources.list 改成了这样:
## Note, this file is written by cloud-init on first boot of an instance
## modifications made here will not survive a re-bundle.
## if you wish to make changes you can:
## a.) add 'apt_preserve_sources_list: true' to /etc/cloud/cloud.cfg
## or do the same in user-data
...
deb http://archive.ubuntu.com/ubuntu precise main
deb-src http://archive.ubuntu.com/ubuntu precise main
...
直接使用 cobbler install node(不用maas),节点apt的sources.list如下:
...
deb http://192.168.3.6/ubuntu precise main
deb-src http://192.168.3.6/ubuntu precise main
...
我的问题是:
- 如何在 maas 中设置用户数据?这样我就可以将 cloud-init 的镜像的 url 设置为 192.168.3.6 或阻止 cloud-init 更改镜像的 url。
- Maas 节点的文件 /home/ubuntu/.ssh/authorized_keys 为空。是否由镜像的设置导致?
答案1
感谢您报告此事。我已打开错误 1006966针对上游 maas 来解决这个问题。
目前,解决这个问题的最简单方法可能是让 late_command 安装一个文件到 /etc/cloud/cloud.cfg 中,内容如下:
# /etc/cloud/cloud.cfg.d/99-local-mirror-only.cfg
apt_preserve_sources_list: true
未经测试,但您可以通过执行以下操作来实现:
--- /var/lib/cobbler/kickstarts/maas.preseed.dist 2012-05-31 15:37:06.689109923 +0000
+++ /var/lib/cobbler/kickstarts/maas.preseed 2012-05-31 15:37:43.293109690 +0000
@@ -90,4 +90,5 @@
d-i preseed/late_command string true && \
$SNIPPET('maas_sudoers') && \
$SNIPPET('maas_disable_pxe') && \
+ $SNIPPET('local_mass_local_mirror') && \
true
--- /dev/null 2012-05-31 15:21:47.612623001 +0000
+++ /var/lib/cobbler/snippets/local_maas_local_mirror 2012-05-31 15:39:33.897110012 +0000
@@ -0,0 +1 @@
+in-target sh -c "echo apt_preserve_sources_list: true > /etc/cloud/cloud.cfg.d/99-local-mirror-only.cfg" \
哦,对于“如何在 maas 中设置用户数据”,目前只能通过使用 maas API 来实现。目前还没有现成的客户端工具。
答案2
好的,我们可以通过在 /var/lib/cobbler/snippets/maas_preseed 中添加一行来完成节点安装,如下所示:
$maas_preseed_data
cloud-init cloud-init/local-cloud-config string manage_etc_hosts: localhost
+cloud-init cloud-init/local-cloud-config string apt_preserve_sources_list: true
实际上,cloud-init/local-cloud-config 是 cloud-init 的本地配置器。