puppet-openstack-cookiebutter

  1. 先睹为快
  2. 模块讲解
  3. 小结
  4. 动手练习 - 光看不练假把式

本篇是选读章节,和Openstack部署没有直接的管理,本节推荐从事开发并维护自研Puppet module的读者。

1.先睹为快

puppet-cookiebutter模块用于快速生成一个符合PuppetOpenstack代码风格的新module。
不想看下面大段的代码说明,已经跃跃欲试了?

Ok,我们开始吧!

打开虚拟机终端并输入以下命令:

  1. # 请使用pip安装cookiecutter
  2. $ cookiecutter puppet-openstack-cookiecutter/
  3. project_name [YOURPROJECTNAME without 'puppet-']: test
  4. version [0.0.1]:
  5. year [2016]:

接着进入到puppet-test模块查看其目录结构,包含manifests/,spec/和lib/目录,manifests目录下创建了通用代码目录,例如db/下的mysql.pp, posygresql.pp, sync.pp等。
同时puppet-test添加了LICENSE和README等文件,在此基础上可以开始进行新module的开发工作:

  1. |-- LICENSE
  2. |-- README.md
  3. |-- lib
  4. | `-- puppet
  5. | |-- provider
  6. | | `-- test_config
  7. | | `-- ini_setting.rb
  8. | `-- type
  9. | `-- test_config.rb
  10. |-- manifests
  11. | |-- config.pp
  12. | |-- db
  13. | | |-- mysql.pp
  14. | | |-- postgresql.pp
  15. | | `-- sync.pp
  16. | |-- db.pp
  17. | |-- init.pp
  18. | |-- keystone
  19. | | `-- auth.pp
  20. | |-- logging.pp
  21. | |-- params.pp
  22. | `-- policy.pp
  23. |-- metadata.json
  24. |-- spec
  25. | |-- classes
  26. | | |-- test_db_mysql_spec.rb
  27. | | |-- test_db_postgresql_spec.rb
  28. | | |-- test_db_spec.rb
  29. | | |-- test_keystone_auth_spec.rb
  30. | | |-- test_logging_spec.rb
  31. | | `-- test_policy_spec.rb
  32. | |-- shared_examples.rb
  33. | `-- unit
  34. | |-- provider
  35. | | `-- test_config
  36. | | `-- ini_setting_spec.rb
  37. | `-- type
  38. | `-- test_config_spec.rb
  39. `-- tests
  40. `-- init.pp

模块讲解

在介绍puppet-openstack-cookiebutter模块之前,先了解一下Cookiecutter:

一个用于创建项目模板的命令行工具集,最初的目的是用于创建Python项目。

使用该工具可以非常快速地生成一个Python软件包项目:

  1. cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git

关于cookiecutter的使用就不再展开,更详细的文档说明请参见:

本节不涉及任何代码的讲解,仅简要介绍一下其工作原理:cookiecutter使用了Python的Jinja2库对预置模板进行渲染,在puppet-openstack-cookiebutter模块中有一个目录是puppet-{{cookiecutter.project_name}},其目录结构如下:

  1. .
  2. |-- lib
  3. | `-- puppet
  4. | |-- provider
  5. | | `-- {{cookiecutter.project_name}}_config
  6. | `-- type
  7. |-- manifests
  8. | |-- db
  9. | `-- keystone
  10. |-- spec
  11. | |-- classes
  12. | `-- unit
  13. | |-- provider
  14. | | `-- {{cookiecutter.project_name}}_config
  15. | `-- type
  16. `-- tests

可以看到模板变量{{cookiecutter.project_name}},那么在何处定义呢?

打开cookiecutter.json文件就可以看到:

  1. {
  2. "project_name": "YOURPROJECTNAME without 'puppet-'",
  3. "version": "0.0.1",
  4. "year":"2016"
  5. }

3.小结

puppet-openstack-cookiebutter是一个辅助性模块,通过它可以快速地创建一个Openstack服务模块的所有基础代码目录和文件。如果在公司内部恰巧有开发内部模块的需求,那么通过它可以快速地构建出一个新模块。

4.动手练习

  1. 阅读contrib/bootstrap.sh脚本并解释其使用用途
  2. 在puppet-{{cookiecutter.project_name}}中添加一个新文件guide.md,并生成一个新模块puppet-cook