Puppet/新模块
这些文档已过时,但为了历史原因和搜索访问而保留在此处。要查看最新文档,请参阅 https://docs.openstack.org/developer/puppet-openstack-guide/
启动新模块
社区方面
在提交新模块时,社区应尊重以下流程
- 向邮件列表发送消息,宣布创建 OpenStack 新 Puppet 模块的意愿,并等待讨论进行。
- 一旦邮件列表达成共识,用户可以通过执行以下两个操作继续进行
- 向 openstack-infra/project-config 提交评审以创建项目(添加 PTL 和一些核心成员作为评审人)
- 向 openstack/governance 提交评审,声明该项目是 PuppetOpenstack 的一部分(添加 PTL 和一些核心成员作为评审人)
有关治理添加,请遵循此处说明的流程: https://docs.openstack.org/infra/manual/creators.html#add-new-repository-to-the-governance-repository
技术方面
社区开发了两个与模块文件管理相关的项目
- puppet-openstack-cookiecutter (https://github.com/openstack/puppet-openstack-cookiecutter) :该项目旨在帮助启动一个新的 Puppet 模块,使其符合社区的期望(组织结构、命名等)。它接收用户输入和项目模板,并生成模块的骨架。
- puppet-modulesync-configs (https://github.com/openstack/puppet-modulesync-configs) :该项目旨在将所有 openstack/puppet-* 模块中通用且需要保持同步的文件收集到一个仓库中。
为什么有两个项目?虽然 modulesync 可以轻松地在项目之间保持一组通用文件同步(Gemfile、Rakefile、nodesets,...),但它不适用于动态内容和路径(类名、provider 等),因此需要使用 cookiecutter,以及这两个项目同时存在。
Modulesync: https://github.com/openstack/puppet-modulesync-configs
Cookiecutter: https://github.com/openstack/puppet-openstack-cookiecutter
实践
需求
- cookiecutter
- modulesync (>= 0.5.0)
- git
- git-review
- digest
为了使新的 Puppet 模块的样板代码更容易生成,提供了一个脚本。 https://github.com/openstack/puppet-openstack-cookiecutter/blob/master/contrib/bootstrap.sh
它的作用如下
步骤 1:生成模块的骨架
它使用 cookiecutter 生成模块的骨架。
步骤 2:检索项目的 git 仓库
它检索项目的官方 OpenStack 仓库
步骤 3:使用骨架中的文件创建初始提交
重用 OpenStack 仓库中的 .git,并对骨架目录中的文件进行初始提交
步骤 4:检索 puppet-modulesync-configs 目录并根据需要进行配置
它克隆 puppet-modulesync-configs 目录,并相应地配置 modulesync.yml 和 managed_modules.yml
步骤 5:运行 msync 并修改初始提交
它以 noop 模式运行 modulesync,并使用 puppet-modulesync-configs 中的文件修改步骤 3 中的提交
此时,您应该已经生成了一个简约但功能齐全的模块。
有些事情无法自动完成,并使用 FIXME 标签标记。受影响的文件是
- manifests/keystone/auth.pp
- spec/classes/MYMODULENAME_keystone_auth_spec.rb
- README.md
现在只需在脚本输出中指示的文件夹中运行 git review