保证能够与nova metadata api连通
回到OpneStack本身,要把user-data使用起来,要先保证能够在创建的虚拟机内部能够连接到nova的metadata api IP 地址,metadata app IP 沿用了亚马逊所用的169.254.169.254. 在OpenStack生产环境中, 我们是没有这个IP的, 需要利用以下命令把到169.254.169.254的请求路由到nova的metadata api实际的监听IP和端口上, 如下所示
sudo iptables -t nat -A PREROUTING -d 169.254.169.254/32 -p tcp -m tcp--dport 80 -j DNAT --to-destination 10.11.0.16:877510.11.0.16 是metadata api listen ip address 注意两个相关的配置项
/etc/nova/nova.conf
[iyunv@chen ~]# ssh fedora@10.20.1.33
Last login: Thu Apr 3 02:07:24 2014 from 10.20.1.3
[fedora@test-f20 ~]$ curl 169.254.169.254/latest/user-data
#!/bin/bash
echo "one test about user data" >>userdata
chmod 777 userdata
useradd -m me
echo -e 'me\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
[fedora@test-f20 ~]$ cat /userdata
one test about user data
[fedora@test-f20 ~]$ ll /userdata
-rwxrwxrwx. 1 root root 25 Apr 3 02:07 /userdata
[fedora@test-f20 ~]$ su me
Password:
也可以check下/etc/sudoers 其他相关参考资料:
user-data的支持格式:https://help.ubuntu.com/community/CloudInit
OpenStack解决非UEC镜像的虚拟机cloud-init不工作不能自动修改主机名称不能注入user data
下面这篇文章讲了如何以cirros为例安装cloud init包,并使用的例子http://eccp.csdb.cn/blog/?p=68
file/meta/user-data注入数据http://docs.openstack.org/grizzly/openstack-compute/admin/content/instance-data.html#inserting_sshkeys