初始化判断
cloud-init主要通过读取/etc/cloud/cloud.cfg配置文件,来执行相应模块,模块一般位于Python第三方包cloud-init目录下:/usr/lib/python2.6/site-packages/cloudinit/config,模块有多种运行模式(frequency),包括PER_INSTANCE, PER_BOOT, PER_ONCE ,PER_ALWAYS,在上述python文件中配置:
模式为per-once的模块,一旦运行完毕会在一个名为sem的目录中创建一个信号文件,从而防止模块的在下次启动时重复运行,若虚拟机初始化时,sem目录中不存在相应的信号文件,Cloudinit则会执行一次,以后都不会执行。
对于windows系统,主要有cloudbase-init读取注册表项判断是不是初始化。例如注入密码时,第一次注入之后会在注册表中更新HKEY_LOCAL_MACHINE/SOFTWARE/Cloudbase Sloutions/Cloudbase-Init/实例ID/Plugins/SetUserPasswordPlugin值为1,表示下次不再更新。如果需要从数据源读取密码重新注入,只需删除SetUserPasswordPlugin项目即可。
相关问题
1、在定制实例时,会依次读取配置文件cloud.cfg配置项,在某些环境的主机需配置DNS才能访问外网,通过cloud_config_modules模块的runcmd配置项配置DNS,由于配置项package-update-upgrade-install在runcmd之前,cloud-init会先安装软件,这时外网是不通的,所以报错。