Cloud: cloud-init: 总结

左丘凡
2023-12-01


这一逻辑还是很复杂。

不要和open-vm-tools同时使用

open-vm-tools 会在customization的最后做一次reboot,影响cloud-init的执行。

目录结构

cloudinit/sources

这个目录下存放着解析各类数据源的类,基类是:sources.DataSource

cloudinit/sources/DataSourceOVF.py

OVF格式数据的解析类。分化出来的子类:DataSourceOVFNet

helper

这里存放着一些,各个虚拟厂商特定的工具。
比如cloudinit/sources/helpers/vmware/imc,这个就是vmware特定的一些脚本文件。

vmware

config_custom_script.py, 这里是执行用户定制操作之前的脚本执行,及之后执行的调用。
DataSourceOVF类里的函数def _get_data(self):,会调用到这个pre、post脚本执行。

cloud-init 手动SIGTERM

这个是systemd 发出来的,如果cloud-init在运行的时候,遇到了正常、非正常的reboot时,就会收到SIGTERM信号。

调用

/usr/bin/cloud-init init --local

#####/usr/bin/cloud-init
#!/usr/libexec/platform-python
# EASY-INSTALL-ENTRY-SCRIPT: 'cloud-init==20.3','console_scripts','cloud-init'
__requires__ = 'cloud-init==20.3'
import re
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(
        load_entry_point('cloud-init==20.3', 'console_scripts', 'cloud-init')()
    )

入口

setup.py
setuptools.setup(    使用到了setuptools 模块
    name='cloud-init',
    version=get_version(),
    description='Cloud instance initialisation magic',
    author='Scott Moser',
    author_email='scott.moser@canonical.com',
    url='http://launchpad.net/cloud-init/',
    packages=setuptools.find_packages(exclude=['tests.*', '*.tests', 'tests']),
    scripts=['tools/cloud-init-per'],
    license='Dual-licensed under GPLv3 or Apache 2.0',
    data_files=data_files,
    install_requires=requirements,
    cmdclass=cmdclass,
    entry_points={
        'console_scripts': [    、、、、 入口点是  这里,console脚本又两个 实际调用时,看是使用哪一个 脚本
            'cloud-init = cloudinit.cmd.main:main',
            'cloud-id = cloudinit.cmd.cloud_id:main'
        ],
    }
)

cloudinit

cloudinit/cmd/main.py
有分成了10个阶段做 cloud init。

配置文件

/etc/cloud/cloud.cfg,datasource的配置信息/etc/cloud/cloud.cfg.d/

disable_vmware_customization

disable or enable the vmware customization based on vmware customization files. (default: True)

allow_vmware_cust = not util.get_cfg_option_bool(self.sys_cfg, “disable_vmware_customization”, True)
关键字not都排上用场的地方。
LOG.debug(
“Customization for VMware platform is disabled.”)
如果不启动vmware的customization过程,这个变量vmwareImcConfigFilePath,会被置为none,就开这个变量怎么用?

allow_raw_data

enable or disable the vmware customization based on raw cloud-init data including metadata and userdata. (default: True)

vmware_cust_file_max_wait

the maximum amount of clock time in seconds that should be spent waiting for vmware customization files. (default: 15)

 类似资料: